1 dnl compiler.m4 --- compiler magic
3 dnl Copyright (C) 2005, 2006, 2007, 2008 Sebastian Freundt
4 dnl Copyright (c) 2005 Steven G. Johnson
5 dnl Copyright (c) 2005 Matteo Frigo
7 dnl Author: Sebastian Freundt <hroptatyr@sxemacs.org>
9 dnl Redistribution and use in source and binary forms, with or without
10 dnl modification, are permitted provided that the following conditions
13 dnl 1. Redistributions of source code must retain the above copyright
14 dnl notice, this list of conditions and the following disclaimer.
16 dnl 2. Redistributions in binary form must reproduce the above copyright
17 dnl notice, this list of conditions and the following disclaimer in the
18 dnl documentation and/or other materials provided with the distribution.
20 dnl 3. Neither the name of the author nor the names of any contributors
21 dnl may be used to endorse or promote products derived from this
22 dnl software without specific prior written permission.
24 dnl THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
25 dnl IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26 dnl WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27 dnl DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 dnl FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 dnl CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 dnl SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
31 dnl BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
32 dnl WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
33 dnl OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
34 dnl IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 dnl This file is part of SXEmacs.
40 AC_DEFUN([SXE_CHECK_CC_VERSION], [dnl
41 ## ---------------------------------------------------------------
42 ## Get version information for:
44 ## #### should do CC compiler, too, if different from SXEMACS_CC
45 ## ---------------------------------------------------------------
49 AC_MSG_CHECKING([for compiler version information])
51 dnl First try portable compilers, then crack system secrets
52 dnl run through the AC_PROG_CC mill.
53 case "$(basename $CC)" in
56 compiler_version=$($CC --version | head -1)
57 gcc_compiler_specs=$($CC -v 2>&1 | sed 's/.* \([[^ ]]\)/\1/' | head -1)
59 dnl The Intel cc compiler
61 compiler_version=$($CC -V 2>&1 | head -1)
63 dnl a generic thing called `cc', we just hope that it accepts --version
65 compiler_version=$($CC --version 2>&1 | head -1)
67 dnl non-gcc machine-specific magic - contributions welcome
69 case "$ac_cv_build" in
71 dnl Yes, it's this ugly for AIX...
72 realcc=`which $SXEMACS_CC`
73 dnl Might be a symlink created by replaceCset command
74 if test -L $realcc ; then
75 ccdir=`dirname $realcc`
76 ccprog=`/bin/ls -l $realcc | sed 's/.* \([[^ ]]\)/\1/'`
77 dnl This doesn't handle ../../xlc type
78 dnl stuff, but I've not seen one...
88 lpp=`lslpp -wqc $realcc | cut -f2 -d:`
89 if test ! -z "$lpp" ; then
90 lppstr=`lslpp -Lqc $lpp`
91 lpplev=`echo "$lppstr" | cut -f3 -d:`
92 lppdesc=`echo "$lppstr" | cut -f8 -d:`
94 if test ! -z "$lpplev" ; then
95 compiler_version="$lpp $lpplev - $lppdesc"
100 compiler_version=`$SXEMACS_CC -V 2>&1 | head -1`
104 compiler_version=`$SXEMACS_CC -V | tr '\n' ' '`
108 compiler_version=`$SXEMACS_CC -version`
112 AC_MSG_RESULT([detection failed (please report this)])
113 AC_MSG_WARN([No C compiler available nor specified])
119 AC_SUBST([compiler_version])
120 AC_MSG_RESULT([$compiler_version])
123 if test -z "$compiler_version"; then
124 compiler_version="detection failed (please report this)"
126 ])dnl SXE_CHECK_CC_VERSION
128 AC_DEFUN([SXE_CHECK_CC__FGNU89_INLINE], [dnl
129 ## defines sxe_cc__fgnu89_inline
130 AC_MSG_CHECKING([whether $CC supports -fgnu89-inline])
132 SXE_LANG_WERROR([on])
133 CC="$CC -fgnu89-inline"
134 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]])],
135 [sxe_cc__fgnu89_inline="yes"],
136 [sxe_cc__fgnu89_inline="no"])
138 AC_MSG_RESULT([$sxe_cc__fgnu89_inline])
139 AC_DEFUN([SXE_CHECK_CC__FGNU89_INLINE], [])
140 ])dnl SXE_CHECK_CC__FGNU89_INLINE
142 AC_DEFUN([SXE_CHECK_CC_GNU89_EXTERN_INLINE], [dnl
143 ## defines sxe_cc_gnu89_extern_inline
144 AC_MSG_CHECKING([whether $CC supports `extern inline'])
146 SXE_LANG_WERROR([off])
147 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
154 [sxe_cc_gnu89_extern_inline="yes"],
155 [sxe_cc_gnu89_extern_inline="no"])
158 AC_MSG_RESULT([$sxe_cc_gnu89_extern_inline])
159 ])dnl SXE_CHECK_CC_GNU89_EXTERN_INLINE
161 AC_DEFUN([SXE_CHECK_CC_EXTERN_INLINE_DARWIN], [
162 AC_MSG_CHECKING([whether $CC supports `extern inline'])
164 case "$compiler_version" in
166 # For now we assume all MacOS compilers
167 # are not able to handle EXTERN_INLINE
168 AC_DEFINE([SXE_STATIC_EXTERN_INLINE], [1],
169 [The MacOS gcc does not support extern inline])
170 sxe_cc_gnu89_extern_inline="no"
174 AC_MSG_RESULT([$sxe_cc_gnu89_extern_inline])
175 ])dnl SXE_CHECK_CC_EXTERN_INLINE_DARWIN
178 AC_DEFUN([SXE_CHECK_CC_GNU89_EXTERN_INLINE_ALLERGY], [dnl
179 ## defines sxe_cc_gnu89_extern_inline_allergy
180 AC_MSG_CHECKING([whether $CC is allergic against gnu89 `extern inline' in C99])
182 SXE_LANG_WERROR([on])
183 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
190 [sxe_cc_gnu89_extern_inline_allergy="no"],
191 [sxe_cc_gnu89_extern_inline_allergy="yes"])
193 AC_MSG_RESULT([$sxe_cc_gnu89_extern_inline_allergy])
194 ])dnl SXE_CHECK_CC_GNU89_EXTERN_INLINE_ALLERGY
196 AC_DEFUN([SXE_CHECK_CC___ATTRIBUTE__GNU_INLINE], [dnl
197 ## defines sxe_cc___attribute__gnu_inline
199 AC_MSG_CHECKING([whether attribute `gnu_inline' is an efficacious medicine])
201 SXE_LANG_WERROR([on])
202 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
204 __attribute__((gnu_inline))
210 [sxe_cc___attribute__gnu_inline="yes"],
211 [sxe_cc___attribute__gnu_inline="no"])
213 AC_MSG_RESULT([$sxe_cc___attribute__gnu_inline])
214 ])dnl SXE_CHECK_CC___ATTRIBUTE__GNU_INLINE
216 AC_DEFUN([_SXE_CHECK_CC__FGNU89_INLINE_MEDICINE], [dnl
218 CC="$CC -fgnu89-inline"
219 save_sxe_cc_blabla="$sxe_cc_gnu89_extern_inline_allergy"
220 SXE_CHECK_CC_GNU89_EXTERN_INLINE_ALLERGY
221 if test "$save_sxe_cc_blabla" = "yes" -a \
222 "$sxe_cc_gnu89_extern_inline_allergy" = "no"; then
223 sxe_cc__fgnu89_inline_medicine="yes"
225 sxe_cc__fgnu89_inline_medicine="no"
228 sxe_cc_gnu89_extern_inline_allergy="$save_sxe_cc_blabla"
229 AC_MSG_CHECKING([whether flag -fgnu89-inline has been an efficacious medicine])
230 AC_MSG_RESULT([$sxe_cc__fgnu89_inline_medicine])
231 ])dnl _SXE_CHECK_CC__FGNU89_INLINE_MEDICINE
233 AC_DEFUN([SXE_CHECK_CC__FGNU89_INLINE_MEDICINE], [dnl
234 ## defines sxe_cc__fgnu89_inline_medicine
235 AC_REQUIRE([SXE_CHECK_CC__FGNU89_INLINE])
236 AC_MSG_CHECKING([whether flag -fgnu89-inline is an efficacious medicine])
237 if test "$sxe_cc__fgnu89_inline" = "yes"; then
239 _SXE_CHECK_CC__FGNU89_INLINE_MEDICINE
241 sxe_cc__fgnu89_inline_medicine="no"
242 AC_MSG_RESULT([$sxe_cc__fgnu89_inline_medicine])
244 ])dnl SXE_CHECK_CC__FGNU89_INLINE_MEDICINE
246 AC_DEFUN([SXE_CHECK_CC_GNU89_EXTERN_INLINE_MEDICINE], [dnl
247 ## check if we have a medicine against it
248 ## defines gnu89_extern_inline_medicine
249 AC_REQUIRE([SXE_CHECK_CC__FGNU89_INLINE])
250 if test "$sxe_cc_gnu89_extern_inline" = "yes" -a \
251 "$sxe_cc_gnu89_extern_inline_allergy" = "yes"; then
252 SXE_CHECK_CC___ATTRIBUTE__GNU_INLINE
253 SXE_CHECK_CC__FGNU89_INLINE_MEDICINE
255 if test "$sxe_cc__fgnu89_inline_medicine" = "yes"; then
256 CC="$CC -fgnu89-inline"
257 elif test "$sxe_cc__fgnu89_inline" = "yes"; then
258 ## use gnu89-inline anyway
259 ## this is to cope with gcc 4.3.0 which seems to support
260 ## real C99 extern inlines, which in turn would break
261 ## our build as we paid no heed at this (yet)
262 CC="$CC -fgnu89-inline"
264 ])dnl SXE_CHECK_CC_GNU89_EXTERN_INLINE_MEDICINE
266 AC_DEFUN([SXE_CHECK_CC_EXTERN_INLINE], [dnl
268 case "$ac_cv_build" in
270 ## don't bother at all ... just invoke the darwin handler
271 SXE_CHECK_CC_EXTERN_INLINE_DARWIN
274 ## we simply presume that extern inline is possible first
275 SXE_CHECK_CC_GNU89_EXTERN_INLINE
276 ## check if gcc dislikes gnu89 inlines in c99
277 SXE_CHECK_CC_GNU89_EXTERN_INLINE_ALLERGY
278 ## generally check if we support -fgnu89-inline
279 SXE_CHECK_CC__FGNU89_INLINE
282 if test "$sxe_cc_gnu89_extern_inline" = "yes" -a \
283 "$sxe_cc_gnu89_extern_inline_allergy" = "yes"; then
284 SXE_CHECK_CC_GNU89_EXTERN_INLINE_MEDICINE
285 elif test "$sxe_cc__fgnu89_inline" = "yes"; then
286 ## use gnu89-inline anyway
287 ## this is to cope with gcc 4.3.0 which seems to support
288 ## real C99 extern inlines, which in turn would break
289 ## our build as we paid no heed at this (yet)
290 CC="$CC -fgnu89-inline"
292 ])dnl SXE_CHECK_CC_EXTERN_INLINE
294 AC_DEFUN([SXE_CHECK_CC_CHAR], [dnl
296 ## ----------------------------------------------------------------
297 ## Checking for gnuc va list need in solaris
298 ## ----------------------------------------------------------------
299 if test "$GCC" = "yes" -a "$opsys" = "sol2" ; then
300 AC_MSG_CHECKING(for need to define gnuc_va_list)
301 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
303 #define __GNUC_VA_LIST
305 #define _VA_LIST va_list
306 typedef void *__gnuc_va_list;
307 typedef __gnuc_va_list va_list;]],[[1]])], [dnl
309 AC_DEFINE([NEED_GNUC_VA_LIST], [1], [Description here!])], [dnl
319 AC_TYPE_LONG_DOUBLE dnl only in >= 2.60
320 AC_TYPE_LONG_DOUBLE_WIDER dnl only in >= 2.60
324 dnl in case we need the modules
325 SXE_LD_EXPORT_DYNAMIC
327 ## check whether CC reacts to `extern inline' gnu89 inline declarations
329 SXE_CHECK_CC_EXTERN_INLINE
330 ])dnl SXE_CHECK_CC_CHAR
332 AC_DEFUN([SXE_CHECK_CC_HACKS], [dnl
334 ## Identify compilers to enable compiler-specific hacks.
335 ## Add support for other compilers HERE!
336 ## GCC is already identified elsewhere.
337 AC_RUN_IFELSE([AC_LANG_SOURCE([[
340 #if defined __SUNPRO_C
344 #elif defined __USLC__ && defined __SCO_VERSION__
346 #elif defined __INTEL_COMPILER
354 echo "You appear to be using the SunPro C compiler."
358 echo "You appear to be using the DEC C compiler."
362 echo "You appear to be using the SCO C compiler."
366 echo "You appear to be using the Intel C++ compiler."
368 ## Newer versions of icc claim to be GCC
371 esac], [AS_MESSAGE([cannot cross-compile])])
372 ])dnl SXE_CHECK_CC_HACKS
375 AC_DEFUN([SXE_DO_CC_HACKS], [dnl
376 ## -----------------------
377 ## Compiler-specific hacks
378 ## -----------------------
380 dnl DEC C `-std1' means ANSI C mode
381 if test "$__DECC" = "yes"; then
382 SXE_APPEND([-std1], [CFLAGS])
385 dnl Some versions of SCO native compiler need -Kalloca
386 if test "$__USLC__" = yes; then
387 AC_MSG_CHECKING([whether the -Kalloca compiler flag is needed])
389 AC_LINK_IFELSE([AC_LANG_SOURCE([[void *x = alloca(4);]])], [:], [
391 CFLAGS="$CFLAGS -Kalloca"
392 AC_LINK_IFELSE([AC_LANG_SOURCE([[void *x = alloca(4);]])],
393 [ need_kalloca=yes ])
395 AC_MSG_RESULT([$need_kalloca])
396 if test "$need_kalloca" = "yes"; then
397 SXE_APPEND([-Kalloca], [c_switch_system])
398 SXE_APPEND([-Kalloca], [CFLAGS])
403 if test "$CC" = "g++" -o "$SXE_CC" = "g++" ; then
404 SXE_DIE("Building with g++ is not supported")
406 ])dnl SXE_DO_CC_HACKS
408 AC_DEFUN([SXE_CHECK_CC_NESTED_FUNS], [dnl
409 ## defines HAVE_NESTED_FUNS
411 AC_MSG_CHECKING([whether functions can be nested])
412 _SXE_CHECK_CC_NESTED_FUNS
413 AC_MSG_RESULT([$sxe_cv_c_nested_funs])
415 if test "$sxe_cv_c_nested_funs" != "yes"; then
416 ## in this case we check if we can do with -fnested-functions
417 SXE_CHECK_COMPILER_FLAGS([-fnested-functions])
418 if test "$sxe_cv_c_flags__fnested_functions" = "yes"; then
419 AC_MSG_CHECKING([whether functions can be nested now])
420 _SXE_CHECK_CC_NESTED_FUNS([-fnested-functions])
421 AC_MSG_RESULT([$sxe_cv_c_nested_funs])
425 if test "$sxe_cv_c_nested_funs" = "yes"; then
426 AC_DEFINE([HAVE_NESTED_FUNS], [1], [Whether funs can be nested])
428 AC_MSG_WARN([Uh oh.])
429 AC_MSG_WARN([A look into my crystal ball reveals a broken build.])
430 AC_MSG_WARN([Get a compiler that is capable of nested functions.])
432 ])dnl SXE_CHECK_CC_NESTED_FUNS
434 AC_DEFUN([_SXE_CHECK_CC_NESTED_FUNS], [dnl
435 ## defines sxe_cv_c_nested_funs
436 ## optional arg 1 may be additional CFLAGS
437 pushdef([ADDCFLAGS], [$1])
440 CFLAGS="${CFLAGS} []ADDCFLAGS[]"
441 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
442 /* we are in main now and we nest another function */
443 auto inline int foobar();
445 inline int foobar(int counter)
452 [sxe_cv_c_nested_funs="yes"],
453 [sxe_cv_c_nested_funs="no"])
457 ])dnl _SXE_CHECK_CC_NESTED_FUNS
460 AC_DEFUN([SXE_CHECK_BROKEN_GCC], [
461 dnl This section needs a rewrite. I think it should just bomb if we
462 dnl find a gcc that is older than 2.95.3 --SY.
463 dnl Search for GCC specific build problems we know about
465 AC_MSG_CHECKING([for buggy gcc versions])
466 GCC_VERSION=`$CC --version`
469 2.6.*|2.7.*|2.8.*|2.9* )
471 AC_MSG_WARN([Don't use medieval compilers])
472 AC_MSG_ERROR([Aborting due to known problem])
474 3.0.*|3.1.*|3.2.*|3.3.* )
476 AC_MSG_WARN([You are using an antiquated compiler. Proceed at your own risk.])
477 AC_MSG_CHECKING([for other known compiler bugs])
481 case `uname -s`:`uname -m`:$GCC_VERSION in
482 dnl pie-enabled GCC on Linux needs -nopie to build SXEmacs
483 Linux:i?86:gcc*pie-*)
486 dnl egcs 2.90.21 (egcs-1.00 release)
487 dnl egcs 2.90.29 (egcs-1.0.3 release)
488 *:sun4*:2.8.1|*:sun4*:egcs-2.90.*)
489 dnl Don't use -O2 with gcc 2.8.1 and egcs 1.0 under SPARC architectures
490 dnl without also using `-fno-schedule-insns'.
494 *-fno-schedule-insns*)
498 AC_MSG_WARN([Don't use -O2 with gcc 2.8.1 and egcs 1.0 under SPARC architectures])
499 AC_MSG_WARN([without also using -fno-schedule-insns.])
500 AC_MSG_ERROR([Aborting due to known problem])
507 dnl egcs-2.91.57 (egcs-1.1 release)
508 dnl egcs-2.91.66 (egcs-1.1.2 release)
509 Linux:alpha:egcs-2.91.*)
511 AC_MSG_WARN([There have been reports of egcs-1.1 not compiling SXEmacs correctly on])
512 AC_MSG_WARN([Alpha Linux. There have also been reports that egcs-1.0.3a is O.K.])
513 AC_MSG_ERROR([Aborting due to known problem])
520 ])dnl SXE_CHECK_BROKEN_GCC
523 AC_DEFUN([SXE_DEBUGFLAGS], [dnl
524 ## distinguish between different compilers, no?
525 SXE_CHECK_COMPILER_FLAGS([-g])
526 SXE_CHECK_COMPILER_FLAGS([-g3])
528 AC_PATH_PROG([DBX], [dbx])
529 if test -n "$ac_cv_path_DBX"; then
530 SXE_CHECK_COMPILER_FLAGS([-gstabs])
531 SXE_CHECK_COMPILER_FLAGS([-gstabs3])
532 SXE_CHECK_COMPILER_FLAGS([-gxcoff])
533 SXE_CHECK_COMPILER_FLAGS([-gxcoff3])
536 AC_PATH_PROG([GDB], [gdb])
537 if test -n "$ac_cv_path_GDB"; then
538 SXE_CHECK_COMPILER_FLAGS([-ggdb])
539 SXE_CHECK_COMPILER_FLAGS([-ggdb3])
542 AC_PATH_PROG([SDB], [sdb])
543 if test -n "$ac_cv_path_SDB"; then
544 SXE_CHECK_COMPILER_FLAGS([-gcoff])
545 SXE_CHECK_COMPILER_FLAGS([-gcoff3])
551 if test "$sxe_cv_c_flags__ggdb3" = "yes"; then
552 debugflags="$debugflags -ggdb3"
553 elif test "$sxe_cv_c_flags__ggdb" = "yes"; then
554 debugflags="$debugflags -ggdb"
557 if test "$sxe_cv_c_flags__gstabs3" = "yes"; then
558 debugflags="$debugflags -gstabs3"
559 elif test "$sxe_cv_c_flags__gstabs" = "yes"; then
560 debugflags="$debugflags -gstabs"
563 if test "$sxe_cv_c_flags__gcoff3" = "yes"; then
564 debugflags="$debugflags -gcoff3"
565 elif test "$sxe_cv_c_flags__gcoff" = "yes"; then
566 debugflags="$debugflags -gcoff"
569 if test "$sxe_cv_c_flags__gxcoff3" = "yes"; then
570 debugflags="$debugflags -gxcoff3"
571 elif test "$sxe_cv_c_flags__gxcoff" = "yes"; then
572 debugflags="$debugflags -gxcoff"
575 if test -z "debugflags" -a \
576 "$sxe_cv_c_flags__g" = "yes"; then
577 debugflags="$debugflags -g"
580 SXE_CHECK_COMPILER_FLAGS([-ftime-report])
581 SXE_CHECK_COMPILER_FLAGS([-fmem-report])
582 SXE_CHECK_COMPILER_FLAGS([-fvar-tracking])
583 SXE_CHECK_COMPILER_FLAGS([-save-temps])
585 #if test "$sxe_cv_c_flags__ggdb3" = "yes" -a \
586 # "$sxe_cv_c_flags__fvar_tracking" = "yes"; then
587 # debugflags="$debugflags -fvar-tracking"
590 AC_MSG_CHECKING([for preferred debugging flags])
591 AC_MSG_RESULT([${debugflags}])
594 AC_DEFUN([SXE_WARNFLAGS], [dnl
595 ## Calculate warning flags. We separate the flags for warnings from
596 ## the other flags because we want to force the warnings to be seen
597 ## by everyone who doesn't specifically override them.
599 ## by default we want the -Wall level
600 SXE_CHECK_COMPILER_FLAGS([-Wall], [warnflags="-Wall"])
602 ## If this stays nil, it will be set to warnflags before use.
603 dnl Following warning flags are known to work well.
604 if test "$__SUNPRO_C" = "yes"; then
607 elif test "$CC" = "xlc"; then
610 elif test "$GCC" = "yes" -a \
611 "$with_maximum_warning_output" = "yes"; then
614 ## Yuck, bad compares have been worth at
616 ## Warnings about char subscripts are pretty
617 ## pointless, though,
618 ## and we use them in various places.
619 SXE_CHECK_COMPILER_FLAGS([-Wsign-compare], [
620 warnflags="$warnflags -Wsign-compare"])
621 SXE_CHECK_COMPILER_FLAGS([-Wno-char-subscripts], [
622 warnflags="$warnflags -Wno-char-subscripts"])
623 SXE_CHECK_COMPILER_FLAGS([-Wundef], [
624 warnflags="$warnflags -Wundef"])
626 ## too much at the moment, we rarely define protos
627 #warnflags="$warnflags -Wmissing-prototypes -Wstrict-prototypes"
628 SXE_CHECK_COMPILER_FLAGS([-Wpacked], [
629 warnflags="$warnflags -Wpacked"])
631 ## glibc is intentionally not `-Wpointer-arith'-clean.
632 ## Ulrich Drepper has rejected patches to fix
633 ## the glibc header files.
635 SXE_CHECK_COMPILER_FLAGS([-Wpointer-arith], [
636 warnflags="$warnflags -Wpointer-arith"])
638 SXE_CHECK_COMPILER_FLAGS([-Wshadow], [
639 warnflags="$warnflags -Wshadow"])
641 ## our code lacks declarations almost all the time
642 SXE_CHECK_COMPILER_FLAGS([-Wmissing-declarations], [
643 warnflags="$warnflags -Wmissing-declarations"])
645 case "$compiler_version" in
647 ## gcc 4.5.0 cannot cope with -Winline
650 SXE_CHECK_COMPILER_FLAGS([-Winline], [
651 warnflags="$warnflags -Winline"])
655 SXE_CHECK_COMPILER_FLAGS([-Wbad-function-cast], [
656 warnflags="$warnflags -Wbad-function-cast"])
657 SXE_CHECK_COMPILER_FLAGS([-Wcast-qual], [
658 warnflags="$warnflags -Wcast-qual"])
659 SXE_CHECK_COMPILER_FLAGS([-Wcast-align], [
660 warnflags="$warnflags -Wcast-align"])
662 ## warn about incomplete switches
663 SXE_CHECK_COMPILER_FLAGS([-Wswitch], [
664 warnflags="$warnflags -Wswitch"])
665 SXE_CHECK_COMPILER_FLAGS([-Wswitch-default], [
666 warnflags="$warnflags -Wswitch-default"])
667 SXE_CHECK_COMPILER_FLAGS([-Wswitch-enum], [
668 warnflags="$warnflags -Wswitch-enum"])
670 if test "$sxe_cv_c_flags__save_temps" = "yes"; then
671 : ##warnflags="$warnflags -save-temps"
674 ## for upcoming openmp support
675 ## which is of course configurable but shut the compiler
676 ## up in case we dont want/have omp, pragmas are a PITA
677 SXE_CHECK_COMPILER_FLAGS([-Wnopragma], [
678 warnflags="$warnflags -Wnopragma"])
680 elif test "$__ICC" = "yes" -a \
681 "$with_maximum_warning_output" = "yes"; then
682 SXE_CHECK_COMPILER_FLAGS([-Wunused-function], [
683 warnflags="$warnflags -Wunused-function"])
684 SXE_CHECK_COMPILER_FLAGS([-Wunused-variable], [
685 warnflags="$warnflags -Wunused-variable"])
686 SXE_CHECK_COMPILER_FLAGS([-Wunknown-pragmas], [
687 warnflags="$warnflags -Wunknown-pragmas"])
688 SXE_CHECK_COMPILER_FLAGS([-Wuninitialized], [
689 warnflags="$warnflags -Wuninitialized"])
690 SXE_CHECK_COMPILER_FLAGS([-Wshadow], [
691 warnflags="$warnflags -Wshadow"])
692 SXE_CHECK_COMPILER_FLAGS([-Wmissing-declarations], [
693 warnflags="$warnflags -Wmissing-declarations"])
694 SXE_CHECK_COMPILER_FLAGS([-Wmissing-prototypes], [
695 warnflags="$warnflags -Wmissing-prototypes"])
696 SXE_CHECK_COMPILER_FLAGS([-Wreorder], [
697 warnflags="$warnflags -Wreorder"])
698 SXE_CHECK_COMPILER_FLAGS([-Wdeprecated], [
699 warnflags="$warnflags -Wdeprecated"])
700 SXE_CHECK_COMPILER_FLAGS([-Wnopragma], [
701 warnflags="$warnflags -Wnopragma"])
704 ## for upcoming libev support
705 ## libev is a warning emitting cow, the developers can't
706 ## be arsed to fix it, as it turns out
707 SXE_CHECK_COMPILER_FLAGS([-fno-strict-aliasing], [
708 warnflags="$warnflags -fno-strict-aliasing"])
710 AC_MSG_CHECKING([for preferred warning flags])
711 AC_MSG_RESULT([${warnflags}])
714 AC_DEFUN([SXE_OPTIFLAGS], [dnl
718 case $sxe_cv_c_compiler_vendor in
745 AC_MSG_CHECKING([for preferred optimising flags])
746 AC_MSG_RESULT([$optiflags])
747 if test -z "$optiflags"; then
749 echo "********************************************************"
750 echo "* WARNING: Don't know the best CFLAGS for this system *"
751 echo "* Use ./configure CFLAGS=... to specify your own flags *"
752 echo "* (otherwise, a default of CFLAGS=-O3 will be used) *"
753 echo "********************************************************"
758 SXE_CHECK_COMPILER_FLAGS([$optiflags], [:], [
760 echo "********************************************************"
761 echo "* WARNING: The guessed CFLAGS don't seem to work with *"
762 echo "* your compiler. *"
763 echo "* Use ./configure CFLAGS=... to specify your own flags *"
764 echo "********************************************************"
770 AC_DEFUN([SXE_FEATFLAGS], [dnl
771 ## default flags for needed features
773 ## we need nested functions ... hm, i dont think we do
774 ## but it's always nice to have them
775 SXE_CHECK_COMPILER_FLAGS([-fnested-functions], [
776 featflags="$featflags -fnested-functions"])
778 ## recent gentoos went ballistic again, they compile PIE gcc's
779 ## but there's no way to turn that misconduct off ...
780 ## however I've got one report about a working PIE build
781 ## we'll just check for -nopie here, if it works, we turn it on
782 ## (and hence PIE off) and hope bug 16 remains fixed
783 SXE_CHECK_COMPILER_FLAGS([-nopie],
784 [featflags="$featflags -nopie"])
789 AC_DEFUN([SXE_COMPILER_VENDOR], [dnl
790 AC_CACHE_CHECK([for _AC_LANG compiler vendor],
791 sxe_cv_[]_AC_LANG_ABBREV[]_compiler_vendor,
792 [sxe_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown
793 # note: don't check for gcc first since some other compilers define __GNUC__
795 intel:__ICC,__ECC,__INTEL_COMPILER \
796 ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ \
797 gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC \
798 hp:__HP_cc,__HP_aCC \
799 dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER \
800 borland:__BORLANDC__,__TURBOC__ \
805 metrowerks:__MWERKS__ \
811 vencpp="defined("$(echo \
812 $ventest | cut -d: -f2 | sed "s/,/) || defined(/g")")"
813 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[
817 ])], [sxe_cv_]_AC_LANG_ABBREV[_compiler_vendor=$(echo $ventest | cut -d: -f1); break; ])
820 ])dnl SXE_COMPILER_VENDOR
823 AC_DEFUN([SXE_CC_MAXOPT_DEC], [dnl
824 optiflags="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host"
825 if test "$acx_maxopt_portable" = "no"; then
826 optiflags="$optiflags -arch host"
828 ])dnl SXE_CC_MAXOPT_DEC
830 AC_DEFUN([SXE_CC_MAXOPT_SUN], [dnl
831 optiflags="-native -fast -xO5 -dalign"
832 if test "$acx_maxopt_portable" = "yes"; then
833 optiflags="$optiflags -xarch=generic"
835 ])dnl SXE_CC_MAXOPT_SUN
837 AC_DEFUN([SXE_CC_MAXOPT_HP], [dnl
838 optiflags="+Oall +Optrs_ansi +DSnative"
839 if test "$acx_maxopt_portable" = "yes"; then
840 optiflags="$optiflags +DAportable"
842 ])dnl SXE_CC_MAXOPT_HP
844 AC_DEFUN([SXE_CC_MAXOPT_IBM], [dnl
845 if test "$acx_maxopt_portable" = "no"; then
846 xlc_opt="-qarch=auto -qtune=auto"
848 xlc_opt="-qtune=auto"
850 SXE_CHECK_COMPILER_FLAGS([$xlc_opt],
851 [optiflags="-O3 -qansialias -w $xlc_opt"],
852 [optiflags="-O3 -qansialias -w"
853 echo "******************************************************"
854 echo "* You seem to have the IBM C compiler. It is *"
855 echo "* recommended for best performance that you use: *"
857 echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *"
859 echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *"
860 echo "* CPU you have. (Set the CFLAGS environment var. *"
861 echo "* and re-run configure.) For more info, man cc. *"
862 echo "******************************************************"])
863 ])dnl SXE_CC_MAXOPT_IBM
865 AC_DEFUN([SXE_CC_MAXOPT_INTEL], [dnl
866 optiflags="-O3 -ansi_alias"
867 if test "$acx_maxopt_portable" = "no"; then
873 # icc accepts gcc assembly syntax,
874 # so these should work:
878 if test "$icc_flags" != ""; then
879 for flag in $icc_flags; do
880 SXE_CHECK_COMPILER_FLAGS([$flag],
881 [icc_archflag=$flag; break])
884 AC_MSG_CHECKING([for icc architecture flag])
885 AC_MSG_RESULT([$icc_archflag])
886 if test "$icc_archflag" != "unknown"; then
887 optiflags="$optiflags $icc_archflag"
890 ])dnl SXE_CC_MAXOPT_INTEL
892 AC_DEFUN([SXE_CC_MAXOPT_GNU], [dnl
893 ## default optimisation flags for gcc on all systems
894 ## this is the preferred compiler
897 AC_REQUIRE([SXE_CHECK_SIMD_EXTENSIONS])
898 optiflags="$optiflags $simdflags"
900 ## note that we enable "unsafe" fp optimisation with other compilers, too
901 SXE_CHECK_COMPILER_FLAGS([-ftree-vectorize],
902 [optiflags="$optiflags -ftree-vectorize"])
904 ## check for -march and/or -mtune
905 SXE_GCC_ARCHFLAG([$acx_maxopt_portable])
906 optiflags="$optiflags $archflags"
908 ## a softer variant of omit-frame-pointer
909 SXE_CHECK_COMPILER_FLAGS([-momit-leaf-frame-pointer],
910 [optiflags="$optiflags -momit-leaf-frame-pointer"])
912 ## check for openmp support
913 ## there are: -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp
914 SXE_CHECK_COMPILER_FLAGS([-fopenmp])
916 if test "$sxe_cv_c_flags__fopenmp" = "yes" -a "$with_omp"; then
917 SXE_MSG_CHECKING([whether it is safe to use -fopenmp])
918 case "$compiler_version" in
920 optiflags="$optiflags -fopenmp"
921 sxe_cv_feat_omp="yes"
922 SXE_MSG_RESULT([yes])
930 ## these belong to the corresponding MAXOPT macro
931 dnl SXE_CHECK_COMPILER_FLAGS([-xopenmp], [
932 dnl optiflags="$optiflags -xopenmp"
933 dnl sxe_cv_feat_omp="yes"
935 dnl SXE_CHECK_COMPILER_FLAGS([-openmp], [
936 dnl optiflags="$optiflags -openmp"
937 dnl sxe_cv_feat_omp="yes"
939 dnl SXE_CHECK_COMPILER_FLAGS([-mp], [
940 dnl optiflags="$optiflags -mp"
941 dnl sxe_cv_feat_omp="yes"
943 dnl SXE_CHECK_COMPILER_FLAGS([-omp], [
944 dnl optiflags="$optiflags -omp"
945 dnl sxe_cv_feat_omp="yes"
947 dnl SXE_CHECK_COMPILER_FLAGS([-qsmp=omp], [
948 dnl optiflags="$optiflags -qsmp=omp"
949 dnl sxe_cv_feat_omp="yes"
951 ## add -lgomp to ldflags
952 if test "$sxe_cv_feat_omp" = "yes"; then
953 LDFLAGS="$LDFLAGS -lgomp"
956 # -malign-double for x86 systems
957 SXE_CHECK_COMPILER_FLAGS([-malign-double])
958 ## won't add this one, since it is causing problems
959 ## [optiflags="$optiflags -malign-double"])
961 ## would be nice to have this but it triggers too many
962 ## meaningless warnings
963 dnl ## -fstrict-aliasing for gcc-2.95+
964 dnl SXE_CHECK_COMPILER_FLAGS([-fstrict-aliasing],
965 dnl [optiflags="$optiflags -fstrict-aliasing"])
967 SXE_CHECK_COMPILER_FLAGS([-fearly-inlining],
968 [optiflags="$optiflags -fearly-inlining"])
970 SXE_CHECK_COMPILER_FLAGS([-fdelete-null-pointer-checks],
971 [optiflags="$optiflags -fdelete-null-pointer-checks"])
973 SXE_CHECK_COMPILER_FLAGS([-fmodulo-sched],
974 [optiflags="$optiflags -fmodulo-sched"])
976 SXE_CHECK_COMPILER_FLAGS([-fmudflap])
977 SXE_CHECK_COMPILER_FLAGS([-fmudflapth])
978 SXE_CHECK_COMPILER_FLAGS([-fmudflapir])
979 if test "$sxe_cv_c_flags__fmudflapth" -a \
980 "$sxe_cv_c_flags__fmudflapir"; then
982 : ##optiflags="$optiflags -fmudflapth -fmudflapir"
983 elif test "$sxe_cv_c_flags__fmudflap" -a \
984 "$sxe_cv_c_flags__fmudflapir"; then
985 : ##optiflags="$optiflags -fmudflap -fmudflapir"
987 SXE_CHECK_COMPILER_FLAGS([-fsection-anchors],
988 [optiflags="$optiflags -fsection-anchors"])
990 dnl ## actually this belongs to error-checking stuff
991 dnl SXE_CHECK_COMPILER_FLAGS([-fstack-protector],
992 dnl [optiflags="$optiflags -fstack-protector"])
993 dnl if test "$sxe_cv_c_flags__fstack_protector" = "yes"; then
994 dnl ## just check for ssp in this case
995 dnl AC_CHECK_LIB([ssp], [__stack_chk_guard])
998 SXE_CHECK_COMPILER_FLAGS([-fbranch-target-load-optimize])
999 SXE_CHECK_COMPILER_FLAGS([-fbranch-target-load-optimize2])
1000 if test "$sxe_cv_c_flags__fbranch_target_load_optimize2" = "yes"; then
1001 optiflags="$optiflags -fbranch-target-load-optimize2"
1002 elif test "$sxe_cv_c_flags__fbranch_target_load_optimize" = "yes"; then
1003 optiflags="$optiflags -fbranch-target-load-optimize"
1006 SXE_CHECK_COMPILER_FLAGS([-fgcse],
1007 [optiflags="$optiflags -fgcse"])
1008 SXE_CHECK_COMPILER_FLAGS([-fgcse-lm],
1009 [optiflags="$optiflags -fgcse-lm"])
1010 SXE_CHECK_COMPILER_FLAGS([-fgcse-sm],
1011 [optiflags="$optiflags -fgcse-sm"])
1012 SXE_CHECK_COMPILER_FLAGS([-fgcse-las],
1013 [optiflags="$optiflags -fgcse-las"])
1014 SXE_CHECK_COMPILER_FLAGS([-fgcse-after-reload],
1015 [optiflags="$optiflags -fgcse-after-reload"])
1016 SXE_CHECK_COMPILER_FLAGS([-funsafe-loop-optimizations],
1017 [optiflags="$optiflags -funsafe-loop-optimizations"])
1018 SXE_CHECK_COMPILER_FLAGS([-funroll-loops],
1019 [optiflags="$optiflags -funswitch-loops"])
1020 SXE_CHECK_COMPILER_FLAGS([-funswitch-loops],
1021 [optiflags="$optiflags -funswitch-loops"])
1022 SXE_CHECK_COMPILER_FLAGS([-frename-registers],
1023 [optiflags="$optiflags -frename-registers"])
1026 SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-signaling-nans],
1027 [optiflags="$optiflags -fno-signaling-nans"])
1028 SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-trapping-math],
1029 [optiflags="$optiflags -fno-trapping-math"])
1030 SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-signed-zeros],
1031 [optiflags="$optiflags -fno-signed-zeros"])
1032 SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fassociative-math],
1033 [optiflags="$optiflags -fassociative-math"])
1034 SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-rounding-math],
1035 [optiflags="$optiflags -fno-rounding-math"])
1036 SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-math-errno],
1037 [optiflags="$optiflags -fno-math-errno"])
1038 ## the same as the previous 5, but sometimes gcc doesn't know'em all
1039 SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations],
1040 [optiflags="$optiflags -funsafe-math-optimizations"])
1042 SXE_CHECK_COMPILER_FLAGS([-ffast-math],
1043 [optiflags="$optiflags -ffast-math"])
1044 ## and yet some more
1045 SXE_CHECK_COMPILER_FLAGS([-mrecip],
1046 [optiflags="$optiflags -mrecip"])
1047 SXE_CHECK_COMPILER_FLAGS([-msahf],
1048 [optiflags="$optiflags -msahf"])
1050 SXE_CHECK_COMPILER_FLAGS([-minline-all-stringops],
1051 [optiflags="$optiflags -minline-all-stringops"])
1053 ])dnl SXE_CC_MAXOPT_GNU
1056 ##### http://autoconf-archive.cryp.to/ax_check_compiler_flags.html
1057 ## renamed the prefix to SXE_
1058 AC_DEFUN([SXE_CHECK_COMPILER_FLAGS], [dnl
1059 AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1])
1061 dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
1062 SXE_LANG_WERROR([push+on])
1063 AS_LITERAL_IF([$1], [
1064 AC_CACHE_VAL(AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1), [
1065 sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
1066 _AC_LANG_PREFIX[]FLAGS="$1"
1067 AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
1068 AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="yes",
1069 AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="no")
1070 _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])], [
1071 sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
1072 _AC_LANG_PREFIX[]FLAGS="$1"
1073 AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
1074 eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="yes",
1075 eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="no")
1076 _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])
1077 eval sxe_check_compiler_flags=$AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)
1078 SXE_LANG_WERROR([pop])
1080 AC_MSG_RESULT([$sxe_check_compiler_flags])
1081 if test "$sxe_check_compiler_flags" = "yes"; then
1086 ])dnl SXE_CHECK_COMPILER_FLAGS
1089 AC_DEFUN([SXE_CHECK_CPU], [dnl
1093 ## pc-style hardware
1114 AC_DEFUN([SXE_CHECK_CPU_SPARC], [dnl
1115 AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag],
1116 [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/])
1117 cputype=$((((grep cpu /proc/cpuinfo | cut -d: -f2) ; \
1118 ($PRTDIAG -v |grep -i sparc) ; \
1119 grep -i cpu "/var/run/dmesg.boot" ) | head -n 1) 2> /dev/null)
1120 cputype=$(echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters)
1125 sxe_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9"
1129 sxe_gcc_arch="ultrasparc3 ultrasparc v9"
1133 sxe_gcc_arch="ultrasparc v9"
1136 *supersparc*|*tms390z5[[05]]*)
1137 sxe_gcc_arch="supersparc v8"
1140 *hypersparc*|*rt62[[056]]*)
1141 sxe_gcc_arch="hypersparc v8"
1145 sxe_gcc_arch=cypress
1148 ])dnl SXE_CHECK_CPU_SPARC
1150 AC_DEFUN([SXE_CHECK_CPU_ALPHA], [dnl
1162 sxe_gcc_arch="pca56 ev56"
1166 sxe_gcc_arch="pca57 pca56 ev56"
1178 sxe_gcc_arch="ev68 ev67"
1182 sxe_gcc_arch="ev69 ev68 ev67"
1186 sxe_gcc_arch="ev7 ev69 ev68 ev67"
1190 sxe_gcc_arch="ev79 ev7 ev69 ev68 ev67"
1193 ])dnl SXE_CHECK_CPU_ALPHA
1195 AC_DEFUN([SXE_CHECK_CPU_PPC], [dnl
1196 cputype=$(((grep cpu /proc/cpuinfo | head -n 1 | \
1197 cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; \
1198 /usr/bin/machine ; \
1200 grep CPU /var/run/dmesg.boot | \
1201 head -n 1 | cut -d" " -f2) 2> /dev/null)
1202 cputype=$(echo $cputype | sed -e 's/ppc//g;s/ *//g')
1207 sxe_gcc_arch="750 G3"
1211 sxe_gcc_arch="$cputype 7400 G4"
1215 sxe_gcc_arch="$cputype 7450 G4"
1219 sxe_gcc_arch="$cputype G4"
1223 sxe_gcc_arch="970 G5 power4"
1226 *POWER4*|*power4*|*gq*)
1227 sxe_gcc_arch="power4 970"
1230 *POWER5*|*power5*|*gr*|*gs*)
1231 sxe_gcc_arch="power5 power4 970"
1235 sxe_gcc_arch="$cputype 603e 603"
1239 sxe_gcc_arch="$cputype"
1242 sxe_gcc_arch="$sxe_gcc_arch powerpc"
1243 ])dnl SXE_CHECK_CPU_PPC
1245 AC_DEFUN([SXE_CHECK_CPU_PC], [dnl
1247 AC_REQUIRE([SXE_PROC_CPUID])
1249 case "$sxe_cv_proc_cpuid_00000000" in
1253 case "$sxe_cv_proc_cpuid_00000001" in
1256 sxe_gcc_arch="pentium-mmx pentium"
1260 sxe_gcc_arch="pentium"
1264 sxe_gcc_arch="pentium2 pentiumpro"
1268 sxe_gcc_arch="pentium2 pentiumpro"
1272 sxe_gcc_arch="pentium3 pentiumpro"
1277 sxe_gcc_arch="pentium-m pentium3 pentiumpro"
1282 sxe_gcc_arch="pentium-m pentium3 pentiumpro"
1286 sxe_gcc_arch="pentium3 pentiumpro"
1292 sxe_gcc_arch="nocona pentium4 pentiumpro"
1298 sxe_gcc_arch="pentiumpro"
1301 *f3[[347]]:*:*:*|*f4[1347]:*:*:*)
1302 icc_flags="-xP -xN -xW -xK"
1306 sxe_gcc_arch="nocona pentium4 pentiumpro"
1310 sxe_gcc_arch="prescott pentium4 pentiumpro"
1316 icc_flags="-xN -xW -xK"
1317 sxe_gcc_arch="pentium4 pentiumpro"
1324 case "$sxe_cv_proc_cpuid_00000001" in
1331 sxe_gcc_arch="k6-2 k6"
1335 sxe_gcc_arch="k6-3 k6"
1343 sxe_gcc_arch="athlon k7"
1347 sxe_gcc_arch="athlon-tbird k7"
1351 sxe_gcc_arch="athlon-4 athlon k7"
1355 case "$sxe_cv_proc_cpuid_80000006" in
1357 *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256
1358 sxe_gcc_arch="athlon-xp athlon-4 athlon k7"
1362 sxe_gcc_arch="athlon-4 athlon k7"
1367 *f[[4cef8b]]?:*:*:*)
1368 sxe_gcc_arch="athlon64 k8"
1372 sxe_gcc_arch="opteron k8"
1376 sxe_gcc_arch="athlon-fx opteron k8"
1387 case "$sxe_cv_proc_cpuid_00000001" in
1390 sxe_gcc_arch="winchip-c6"
1394 sxe_gcc_arch="winchip2"
1402 sxe_gcc_arch="c3-2 c3"
1408 ## nothing found? => fallback
1409 if test -z "$sxe_gcc_arch"; then
1410 ## apply a generic strategy
1413 sxe_gcc_arch="pentium"
1416 sxe_gcc_arch="pentiumpro"
1420 ])dnl SXE_CHECK_CPU_PC
1423 AC_DEFUN([SXE_GCC_ARCHFLAG], [dnl
1424 AC_REQUIRE([AC_PROG_CC])
1425 AC_REQUIRE([AC_CANONICAL_HOST])
1427 AC_ARG_WITH([gcc-arch], AS_HELP_STRING([--with-gcc-arch=<arch>], [
1428 use architecture <arch> for gcc -march/-mtune,
1429 instead of guessing]),
1430 [sxe_gcc_arch=$withval], [sxe_gcc_arch=yes])
1432 AC_MSG_CHECKING([for gcc architecture flag])
1434 AC_CACHE_VAL([sxe_cv_gcc_archflag], [
1435 ## initialise to unknown
1436 sxe_cv_gcc_archflag="unknown"
1438 if test "$GCC" = yes; then
1439 if test "$sxe_gcc_arch" = "yes" -a \
1440 "$cross_compiling" = "no"; then
1445 if test -n "$sxe_gcc_arch" -a "$sxe_gcc_arch" != "no"; then
1446 for arch in $sxe_gcc_arch; do
1447 if test "[]m4_default([$1],yes)" = "yes"; then
1448 ## if we require portable code
1449 archflags="-mtune=$arch"
1450 ## -mcpu=$arch and m$arch generate
1451 ## nonportable code on every arch except
1452 ## x86. And some other arches
1453 ## (e.g. Alpha) don't accept -mtune.
1458 archflags="$archflags -mcpu=$arch -m$arch"
1462 archflags="-march=$arch -mcpu=$arch -m$arch"
1464 for flag in $archflags; do
1465 SXE_CHECK_COMPILER_FLAGS([$flag],
1466 [sxe_cv_gcc_archflag="$flag"; break])
1468 if test "$sxe_cv_gcc_archflag" != "unknown"; then
1476 AC_MSG_CHECKING([for gcc architecture flag])
1477 AC_MSG_RESULT([$sxe_cv_gcc_archflag])
1478 if test "$sxe_cv_gcc_archflag" = "unknown"; then
1481 m4_default([$2], [archflags="$sxe_cv_gcc_archflag"])
1483 ])dnl SXE_GCC_ARCHFLAG
1486 #### http://autoconf-archive.cryp.to/sxe_check_define.html
1487 AC_DEFUN([SXE_CHECK_DEFINED], [dnl
1488 AS_VAR_PUSHDEF([ac_var],[ac_cv_defined_$2])dnl
1490 AC_CACHE_CHECK([for $1 defined], ac_var,
1498 AS_VAR_SET(ac_var, [yes]),
1499 AS_VAR_SET(ac_var, [no])))
1501 AS_IF([test AS_VAR_GET(ac_var) != "no"], [$3], [$4])
1502 AS_VAR_POPDEF([ac_var])
1503 ])dnl SXE_CHECK_DEFINED
1505 AC_DEFUN([SXE_CHECK_FUNC], [dnl
1506 AS_VAR_PUSHDEF([ac_var], [ac_cv_func_$2])dnl
1507 AC_CACHE_CHECK([for $2], ac_var, [
1508 dnl AC_LANG_FUNC_LINK_TRY
1509 AC_LINK_IFELSE([AC_LANG_PROGRAM([$1
1516 AS_VAR_SET(ac_var, [yes])], [
1517 AS_VAR_SET(ac_var, [no])])])
1519 AS_IF([test AS_VAR_GET(ac_var) = "yes"], [$3], [$4])
1520 AS_VAR_POPDEF([ac_var])
1521 ])dnl SXE_CHECK_FUNC
1525 AC_DEFUN([SXE_CHECK_C99_NJSF], [dnl
1526 dnl If we have a compiler that could do c99 do try to add the flag
1527 if test "$__GCC3" = "yes" ; then
1528 SXE_APPEND("-std=c99", c_switch_site)
1529 AC_MSG_CHECKING([for C99 support])
1530 save_c_switch_site=$c_switch_site
1531 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1535 ]])], [AC_MSG_RESULT(yes)
1537 [c_switch_site=$sace_c_switch_site
1539 AC_MSG_WARN([C99 not supported, reverting option append])
1541 elif test "$__SUNPRO_C" = "yes" ; then
1542 AC_MSG_CHECKING([for C99 support])
1543 save_c_switch_site=$c_switch_site
1544 SXE_APPEND("-xc99", c_switch_site)
1545 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1549 ]])], [AC_MSG_RESULT(yes)
1551 [c_switch_site=$sace_c_switch_site
1555 ])dnl SXE_CHECK_C99_NJSF
1558 AC_DEFUN([SXE_C_TYPEOF], [dnl
1559 dnl check for the typeof extension
1560 AC_MSG_CHECKING([for typeof])
1561 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
1562 int i; __typeof__(i) j;
1563 ]])], [typeofname="__typeof__"], [dnl else
1564 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
1566 ]])], [typeofname="typeof"], [typeofname=no])])
1567 AC_MSG_RESULT([$typeofname])
1568 if test "$typeofname" != "no"; then
1569 AC_DEFINE_UNQUOTED([TYPEOF], [$typeofname],
1570 [How to use the typeof extension.])
1574 AC_DEFUN([SXE_C_INLINE], [dnl
1576 if test "$ac_cv_c_inline" != "no" -a "$GCC" = "yes"; then
1577 SXE_ADD_CRUFT_OBJS([inline.o])
1582 AC_DEFUN([SXE_CHECK_BROKEN_RESTRICT], [dnl
1583 AC_MSG_CHECKING([support for restrict keyword])
1584 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
1585 extern void f(void*restrict[]);
1586 ]])], [have_restrict="yes"], [have_restrict="no"])
1587 if test "$have_restrict" = "no"; then
1588 AC_DEFINE_UNQUOTED([restrict], [],
1589 [Define restrict to nothing])
1591 AC_MSG_RESULT([$typeofname])
1592 ])dnl SXE_CHECK_BROKEN_RESTRICT
1594 dnl recommended interface macros
1596 AC_DEFUN([SXE_CHECK_CC], [dnl
1600 AC_PROG_CC([gcc icc cc])
1604 ## check for machine and architecture
1607 ## check for C compiler characteristics
1608 SXE_CHECK_CC_VERSION
1609 if test "$GCC" = "yes"; then
1610 SXE_CHECK_BROKEN_GCC
1613 if test "$ac_cv_prog_cc_c99" != ""; then
1614 SXE_CHECK_BROKEN_RESTRICT
1619 SXE_CHECK_LIBC_VERSION
1620 dnl Non-ordinary link usually requires -lc
1621 if test "$ordinary_link" = "no" -a -z "$libs_standard"; then
1627 SXE_CHECK_CC_NESTED_FUNS
1629 ## Canonicalize the configuration name.
1630 ## Commented out, lets see if anything breaks. --SY.
1631 ## SXE_STRIP_4TH_COMPONENT(ac_cv_build_alias)
1632 ## SXE_STRIP_4TH_COMPONENT(ac_cv_build)
1633 AC_SUBST([configuration], [$ac_cv_build])
1640 AC_DEFUN([SXE_CHECK_CFLAGS], [dnl
1641 dnl #### This may need to be overhauled so that all of SXEMACS_CC's flags
1642 dnl are handled separately, not just the xe_cflags_warning stuff.
1644 ## Use either command line flag, environment var, or autodetection
1645 if test "$with_ridiculously_aggressive_optimisations" = "yes"; then
1651 SXE_CFLAGS="$debugflags $featflags $optiflags $warnflags"
1652 elif test "$CFLAGS_uspecified_p" = "no" -o \
1653 "$ac_test_CFLAGS" != "set"; then
1659 ## Following values of CFLAGS are known to work well.
1660 ## Should we take debugging options into consideration?
1661 if test "$GCC" = "yes"; then
1663 elif test "$__SUNPRO_C" = "yes"; then
1665 sol2 ) optiflags="-xO4" ;;
1666 sunos4* ) optiflags="-xO2" ;;
1668 elif test "$__DECC" = "yes"; then
1670 elif test "$CC" = "xlc"; then
1671 optiflags="-g -O3 -qstrict -qnoansialias -qlibansi -qro -qmaxmem=20000"
1672 elif test "$__ICC" = "yes"; then
1673 optiflags="-g -O3 -Ob2"
1674 ### Add optimal CFLAGS support for other compilers HERE!
1676 optiflags="-O" ## The only POSIX-approved flag
1679 SXE_CFLAGS="$debugflags $featflags $optiflags $warnflags"
1681 SXE_CFLAGS=${USER_CFLAGS}
1688 ## unset the werror flag again
1689 SXE_LANG_WERROR([off])
1691 CFLAGS="$SXE_CFLAGS"
1692 AC_MSG_CHECKING([for preferred CFLAGS])
1693 AC_MSG_RESULT([${SXE_CFLAGS}])
1696 If you wish to ADD your own flags you want to stop here and rerun the
1697 configure script like so:
1698 configure CFLAGS=<to-be-added-flags>
1700 You can always override the determined CFLAGS, partially or totally,
1702 make -C <directory> CFLAGS=<your-own-flags> [target]
1704 make CFLAGS=<your-own-flags> [target]
1707 NOTE: -C <directory> option is not available on all systems
1710 ])dnl SXE_CHECK_CFLAGS
1713 AC_DEFUN([SXE_CC_LIBRARY_PATH], [dnl
1714 ## arg #1 variable to store name in,
1715 ## if omitted defaults to `sxe_cv_tmp_gcc_library_path'
1716 pushdef([VAR], ifelse($1,[],[sxe_cv_tmp_gcc_library_path],$1))
1718 for i in ${LDFLAGS}; do
1721 __LP=${i:2}:${__LP:-.}
1727 SXE_EXPAND_VAR([${libdir}], [__ld])
1728 []VAR[]=${__ld:-.}:${__LP:-.}
1731 ])dnl SXE_CC_LIBRARY_PATH
1734 AC_DEFUN([SXE_CC_LIBRARY_LOCATION], [dnl
1735 ## arg #1 the library to seek after
1736 ## arg #2 (optional) checking message
1737 pushdef([liborig], [$1])
1738 pushdef([liblink], patsubst(patsubst(liborig, [lib], [-l]), [\.[^.]+$], []))
1739 pushdef([libname], translit(liborig, [-,.], [___]))
1740 pushdef([LIBNAME], translit(liborig, [-,.a-z], [___A-Z]))
1741 pushdef([libchk], ifelse($2,[],[for absolute path of ]liborig,$2))
1743 ## use gcc's -print-file-name
1744 AC_REQUIRE([SXE_CC_LIBRARY_PATH])
1745 AC_MSG_CHECKING([]libchk[])
1746 ## not protected against other CCs (yet)!
1747 sxe_cv_loc_[]libname[]=$(LIBRARY_PATH=${sxe_cv_tmp_gcc_library_path} \
1748 ${CC} -print-file-name=[]liborig[])
1749 AC_MSG_RESULT(${sxe_cv_loc_[]libname[]})
1751 []LIBNAME[]=${sxe_cv_loc_[]libname[]}
1758 ])dnl SXE_CC_LIBRARY_LOCATION
1760 dnl sxe-compiler.m4 ends here