Summary: minor, check certain compiler flags regardless of CC flavour
[sxemacs] / m4 / sxe-compiler.m4
1 dnl compiler.m4 --- compiler magic
2 dnl
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
6 dnl
7 dnl Author: Sebastian Freundt <hroptatyr@sxemacs.org>
8 dnl
9 dnl Redistribution and use in source and binary forms, with or without
10 dnl modification, are permitted provided that the following conditions
11 dnl are met:
12 dnl
13 dnl 1. Redistributions of source code must retain the above copyright
14 dnl    notice, this list of conditions and the following disclaimer.
15 dnl
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.
19 dnl
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.
23 dnl
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.
35 dnl
36 dnl This file is part of SXEmacs.
37
38
39 ## C compiler
40 AC_DEFUN([SXE_CHECK_CC_VERSION], [dnl
41         ## ---------------------------------------------------------------
42         ## Get version information for:
43         ## C compiler, libc
44         ## #### should do CC compiler, too, if different from SXEMACS_CC
45         ## ---------------------------------------------------------------
46
47         compiler_version=""
48         gcc_compiler_specs=""
49         AC_MSG_CHECKING([for compiler version information])
50
51         dnl First try portable compilers, then crack system secrets
52         dnl run through the AC_PROG_CC mill.
53         case "$(basename $CC)" in
54         dnl GNU cc compiler
55         gcc*)
56                 compiler_version=$($CC --version | head -1)
57                 gcc_compiler_specs=$($CC -v 2>&1 | sed 's/.* \([[^ ]]\)/\1/' | head -1)
58                 ;;
59         dnl The Intel cc compiler
60         ic*)
61                 compiler_version=$($CC -V 2>&1 | head -1)
62                 ;;
63         dnl a generic thing called `cc', we just hope that it accepts --version
64         cc*)
65                 compiler_version=$($CC --version 2>&1 | head -1)
66                 ;;
67         dnl non-gcc machine-specific magic - contributions welcome
68         *)
69                 case "$ac_cv_build" in
70                 *-*-aix*   ) 
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...
79                                 case $ccprog in
80                                 */*)
81                                         realcc=$ccprog
82                                         ;;
83                                 *)
84                                         realcc=$ccdir/$ccprog
85                                         ;;
86                                 esac
87                         fi
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:`
93                         fi
94                         if test ! -z "$lpplev" ; then
95                                 compiler_version="$lpp $lpplev - $lppdesc"
96                         fi
97                         ;;
98
99                 *-*-solaris*)
100                         compiler_version=`$SXEMACS_CC -V 2>&1 | head -1`
101                         ;;
102
103                 alpha*-dec-osf*)
104                         compiler_version=`$SXEMACS_CC -V | tr '\n' ' '`
105                         ;;
106
107                 mips-sgi-irix*)
108                         compiler_version=`$SXEMACS_CC -version`
109                         ;;
110                 *)
111                         compiler_version=""
112                         AC_MSG_RESULT([detection failed (please report this)])
113                         AC_MSG_WARN([No C compiler available nor specified])
114                         ;;
115                 esac
116                 ;;
117         esac
118
119         AC_SUBST([compiler_version])
120         AC_MSG_RESULT([$compiler_version])
121
122         dnl Awww, shucks.
123         if test -z "$compiler_version"; then
124                 compiler_version="detection failed (please report this)"
125         fi
126 ])dnl SXE_CHECK_CC_VERSION
127
128 AC_DEFUN([SXE_CHECK_CC__FGNU89_INLINE], [dnl
129         ## defines sxe_cc__fgnu89_inline
130         AC_MSG_CHECKING([whether $CC supports -fgnu89-inline])
131         SXE_DUMP_LIBS
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"])
137         SXE_RESTORE_LIBS
138         AC_MSG_RESULT([$sxe_cc__fgnu89_inline])
139         AC_DEFUN([SXE_CHECK_CC__FGNU89_INLINE], [])
140 ])dnl SXE_CHECK_CC__FGNU89_INLINE
141
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'])
145         SXE_DUMP_LIBS
146         SXE_LANG_WERROR([off])
147         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
148 extern inline void
149 foobar(void)
150 {
151         return;
152 }
153                 ]])],
154                 [sxe_cc_gnu89_extern_inline="yes"],
155                 [sxe_cc_gnu89_extern_inline="no"])
156         SXE_RESTORE_LIBS
157
158         AC_MSG_RESULT([$sxe_cc_gnu89_extern_inline])
159 ])dnl SXE_CHECK_CC_GNU89_EXTERN_INLINE
160
161 AC_DEFUN([SXE_CHECK_CC_EXTERN_INLINE_DARWIN], [
162         AC_MSG_CHECKING([whether $CC supports `extern inline'])
163
164         case "$compiler_version" in
165         gcc*\ 4.0.1* | * )
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"
171                 ;;
172         esac
173
174         AC_MSG_RESULT([$sxe_cc_gnu89_extern_inline])
175 ])dnl SXE_CHECK_CC_EXTERN_INLINE_DARWIN
176
177
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])
181         SXE_DUMP_LIBS
182         SXE_LANG_WERROR([on])
183         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
184 extern inline void
185 foobar(void)
186 {
187         return;
188 }
189                 ]])],
190                 [sxe_cc_gnu89_extern_inline_allergy="no"],
191                 [sxe_cc_gnu89_extern_inline_allergy="yes"])
192         SXE_RESTORE_LIBS
193         AC_MSG_RESULT([$sxe_cc_gnu89_extern_inline_allergy])
194 ])dnl SXE_CHECK_CC_GNU89_EXTERN_INLINE_ALLERGY
195
196 AC_DEFUN([SXE_CHECK_CC___ATTRIBUTE__GNU_INLINE], [dnl
197         ## defines sxe_cc___attribute__gnu_inline
198
199         AC_MSG_CHECKING([whether attribute `gnu_inline' is an efficacious medicine])
200         SXE_DUMP_LIBS
201         SXE_LANG_WERROR([on])
202         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
203 extern inline void
204 __attribute__((gnu_inline))
205 foobar(void)
206 {
207         return;
208 }
209                 ]])],
210                 [sxe_cc___attribute__gnu_inline="yes"],
211                 [sxe_cc___attribute__gnu_inline="no"])
212         SXE_RESTORE_LIBS
213         AC_MSG_RESULT([$sxe_cc___attribute__gnu_inline])
214 ])dnl SXE_CHECK_CC___ATTRIBUTE__GNU_INLINE
215
216 AC_DEFUN([_SXE_CHECK_CC__FGNU89_INLINE_MEDICINE], [dnl
217         mytmp_save_CC="$CC"
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"
224         else
225                 sxe_cc__fgnu89_inline_medicine="no"
226         fi
227         CC="$mytmp_save_CC"
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
232
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
238                 AC_MSG_RESULT([])
239                 _SXE_CHECK_CC__FGNU89_INLINE_MEDICINE
240         else
241                 sxe_cc__fgnu89_inline_medicine="no"
242                 AC_MSG_RESULT([$sxe_cc__fgnu89_inline_medicine])
243         fi
244 ])dnl SXE_CHECK_CC__FGNU89_INLINE_MEDICINE
245
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
254         fi
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"
263         fi
264 ])dnl SXE_CHECK_CC_GNU89_EXTERN_INLINE_MEDICINE
265
266 AC_DEFUN([SXE_CHECK_CC_EXTERN_INLINE], [dnl
267
268         case "$ac_cv_build" in
269         *-*-darwin* )
270                 ## don't bother at all ... just invoke the darwin handler
271                 SXE_CHECK_CC_EXTERN_INLINE_DARWIN
272                 ;;
273         *)
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
280         esac
281
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"
291         fi
292 ])dnl SXE_CHECK_CC_EXTERN_INLINE
293
294 AC_DEFUN([SXE_CHECK_CC_CHAR], [dnl
295
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([[
302 #include <stdarg.h>
303 #define __GNUC_VA_LIST
304 #define _VA_LIST_
305 #define _VA_LIST va_list
306 typedef void *__gnuc_va_list;
307 typedef __gnuc_va_list va_list;]],[[1]])], [dnl
308                 AC_MSG_RESULT(yes) 
309                 AC_DEFINE([NEED_GNUC_VA_LIST], [1], [Description here!])], [dnl
310                 AC_MSG_RESULT(no)])
311         fi
312
313         AC_C_BIGENDIAN
314         AC_C_VOLATILE
315         AC_C_CONST
316         AC_C_INLINE
317         SXE_C_TYPEOF
318         AC_C_CHAR_UNSIGNED
319         AC_TYPE_LONG_DOUBLE  dnl only in >= 2.60
320         AC_TYPE_LONG_DOUBLE_WIDER  dnl only in >= 2.60
321         AC_C_STRINGIZE
322         AC_C_PROTOTYPES
323
324         dnl in case we need the modules
325         SXE_LD_EXPORT_DYNAMIC
326         dnl in case compiler issues PIE by default which breaks pdump
327         SXE_LD_NO_PIE
328
329         ## check whether CC reacts to `extern inline' gnu89 inline declarations
330         ## with a warning
331         SXE_CHECK_CC_EXTERN_INLINE
332 ])dnl SXE_CHECK_CC_CHAR
333
334 AC_DEFUN([SXE_CHECK_CC_HACKS], [dnl
335
336         ## Identify compilers to enable compiler-specific hacks.
337         ## Add support for other compilers HERE!
338         ## GCC is already identified elsewhere.
339         AC_RUN_IFELSE([AC_LANG_SOURCE([[
340 int main ()
341 {
342 #if defined __SUNPRO_C
343         return 11;
344 #elif defined __DECC
345         return 12;
346 #elif defined __USLC__ && defined __SCO_VERSION__
347         return 13;
348 #elif defined __INTEL_COMPILER
349         return 14;
350 #else
351         return 0;
352 #endif
353 }]])], [], [dnl
354         case "$?" in
355         11)
356                 echo "You appear to be using the SunPro C compiler."
357                 __SUNPRO_C=yes
358                 ;;
359         12)
360                 echo "You appear to be using the DEC C compiler."
361                 __DECC=yes
362                 ;;
363         13)
364                 echo "You appear to be using the SCO C compiler."
365                 __USLC__=yes
366                 ;;
367         14)
368                 echo "You appear to be using the Intel C++ compiler."
369                 __ICC=yes
370                 ## Newer versions of icc claim to be GCC
371                 GCC=no
372                 ;;
373         esac], [AS_MESSAGE([cannot cross-compile])])
374 ])dnl SXE_CHECK_CC_HACKS
375
376
377 AC_DEFUN([SXE_DO_CC_HACKS], [dnl
378         ## -----------------------
379         ## Compiler-specific hacks
380         ## -----------------------
381
382         dnl DEC C `-std1' means ANSI C mode
383         if test "$__DECC" = "yes"; then
384                 SXE_APPEND_UNDUP([-std1], [CFLAGS])
385         fi
386
387         dnl Some versions of SCO native compiler need -Kalloca
388         if test "$__USLC__" = yes; then
389                 AC_MSG_CHECKING([whether the -Kalloca compiler flag is needed])
390                 need_kalloca=no
391                 AC_LINK_IFELSE([AC_LANG_SOURCE([[void *x = alloca(4);]])], [:], [
392                         SXE_DUMP_LIBS
393                         CFLAGS="$CFLAGS -Kalloca"
394                         AC_LINK_IFELSE([AC_LANG_SOURCE([[void *x = alloca(4);]])],
395                                 [ need_kalloca=yes ])
396                         SXE_RESTORE_LIBS])
397                 AC_MSG_RESULT([$need_kalloca])
398                 if test "$need_kalloca" = "yes"; then
399                         SXE_APPEND_UNDUP([-Kalloca], [c_switch_system])
400                         SXE_APPEND_UNDUP([-Kalloca], [CFLAGS])
401                 fi
402         fi
403
404         dnl Die if g++
405         if test "$CC" = "g++" -o "$SXE_CC" = "g++" ; then
406                 SXE_DIE("Building with g++ is not supported")
407         fi
408
409         
410 ])dnl SXE_DO_CC_HACKS
411
412 AC_DEFUN([SXE_CHECK_CC_NESTED_FUNS], [dnl
413         ## defines HAVE_NESTED_FUNS
414
415         AC_MSG_CHECKING([whether functions can be nested])
416         _SXE_CHECK_CC_NESTED_FUNS
417         AC_MSG_RESULT([$sxe_cv_c_nested_funs])
418
419         if test "$sxe_cv_c_nested_funs" != "yes"; then
420                 ## in this case we check if we can do with -fnested-functions
421                 SXE_CHECK_COMPILER_FLAGS([-fnested-functions])
422                 if test "$sxe_cv_c_flags__fnested_functions" = "yes"; then
423                         AC_MSG_CHECKING([whether functions can be nested now])
424                         _SXE_CHECK_CC_NESTED_FUNS([-fnested-functions])
425                         AC_MSG_RESULT([$sxe_cv_c_nested_funs])
426                 fi
427         fi
428
429         if test "$sxe_cv_c_nested_funs" = "yes"; then
430                 AC_DEFINE([HAVE_NESTED_FUNS], [1], [Whether funs can be nested])
431         else
432                 AC_MSG_WARN([Uh oh.])
433                 AC_MSG_WARN([A look into my crystal ball reveals a broken build.])
434                 AC_MSG_WARN([Get a compiler that is capable of nested functions.])
435         fi
436 ])dnl SXE_CHECK_CC_NESTED_FUNS
437
438 AC_DEFUN([_SXE_CHECK_CC_NESTED_FUNS], [dnl
439         ## defines sxe_cv_c_nested_funs
440         ## optional arg 1 may be additional CFLAGS
441         pushdef([ADDCFLAGS], [$1])
442
443         SXE_DUMP_LIBS
444         CFLAGS="${CFLAGS} []ADDCFLAGS[]"
445         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
446                 /* we are in main now and we nest another function */
447                 auto inline int foobar();
448
449                 inline int foobar(int counter)
450                 {
451                         return counter;
452                 }
453
454                 return foobar(0);
455                 ]])],
456                 [sxe_cv_c_nested_funs="yes"],
457                 [sxe_cv_c_nested_funs="no"])
458         SXE_RESTORE_LIBS
459
460         popdef([ADDCFLAGS])
461 ])dnl _SXE_CHECK_CC_NESTED_FUNS
462
463
464 AC_DEFUN([SXE_CHECK_BROKEN_GCC], [
465 dnl This section needs a rewrite.  I think it should just bomb if we
466 dnl find a gcc that is older than 2.95.3 --SY.
467 dnl Search for GCC specific build problems we know about
468
469 AC_MSG_CHECKING([for buggy gcc versions])
470 GCC_VERSION=`$CC --version`
471
472 case $GCC_VERSION in
473 2.6.*|2.7.*|2.8.*|2.9* )
474         AC_MSG_RESULT([yes])
475         AC_MSG_WARN([Don't use medieval compilers])
476         AC_MSG_ERROR([Aborting due to known problem])
477         ;;
478 3.0.*|3.1.*|3.2.*|3.3.* )
479         AC_MSG_RESULT([yes])
480         AC_MSG_WARN([You are using an antiquated compiler. Proceed at your own risk.])
481         AC_MSG_CHECKING([for other known compiler bugs])
482         ;;
483 esac
484
485 case `uname -s`:`uname -m`:$GCC_VERSION in
486 dnl pie-enabled GCC on Linux needs -nopie to build SXEmacs
487 Linux:i?86:gcc*pie-*)
488         ;;
489
490 dnl egcs 2.90.21 (egcs-1.00 release)
491 dnl egcs 2.90.29 (egcs-1.0.3 release)
492 *:sun4*:2.8.1|*:sun4*:egcs-2.90.*)
493 dnl Don't use -O2 with gcc 2.8.1 and egcs 1.0 under SPARC architectures
494 dnl without also using `-fno-schedule-insns'.
495         case "$CFLAGS" in
496         *-O2*|*-O3*)
497                 case "$CFLAGS" in
498                 *-fno-schedule-insns*)
499                         ;;
500                 *)
501                         AC_MSG_RESULT([yes])
502                         AC_MSG_WARN([Don't use -O2 with gcc 2.8.1 and egcs 1.0 under SPARC architectures])
503                         AC_MSG_WARN([without also using -fno-schedule-insns.])
504                         AC_MSG_ERROR([Aborting due to known problem])
505                         ;;
506                 esac
507                 ;;
508         esac
509         ;;
510
511 dnl egcs-2.91.57 (egcs-1.1 release)
512 dnl egcs-2.91.66 (egcs-1.1.2 release)
513 Linux:alpha:egcs-2.91.*)
514         AC_MSG_RESULT([yes])
515         AC_MSG_WARN([There have been reports of egcs-1.1 not compiling SXEmacs correctly on])
516         AC_MSG_WARN([Alpha Linux.  There have also been reports that egcs-1.0.3a is O.K.])
517         AC_MSG_ERROR([Aborting due to known problem])
518         ;;
519
520 *:*:* )
521         AC_MSG_RESULT([no])
522         ;;
523 esac
524 ])dnl SXE_CHECK_BROKEN_GCC
525
526
527 AC_DEFUN([SXE_DEBUGFLAGS], [dnl
528         ## distinguish between different compilers, no?
529         SXE_CHECK_COMPILER_FLAGS([-g])
530         SXE_CHECK_COMPILER_FLAGS([-g3])
531
532         AC_PATH_PROG([DBX], [dbx])
533         if test -n "$ac_cv_path_DBX"; then
534                 SXE_CHECK_COMPILER_FLAGS([-gstabs])
535                 SXE_CHECK_COMPILER_FLAGS([-gstabs3])
536                 SXE_CHECK_COMPILER_FLAGS([-gxcoff])
537                 SXE_CHECK_COMPILER_FLAGS([-gxcoff3])
538         fi
539
540         AC_PATH_PROG([GDB], [gdb])
541         if test -n "$ac_cv_path_GDB"; then
542                 SXE_CHECK_COMPILER_FLAGS([-ggdb])
543                 SXE_CHECK_COMPILER_FLAGS([-ggdb3])
544         fi
545
546         AC_PATH_PROG([SDB], [sdb])
547         if test -n "$ac_cv_path_SDB"; then
548                 SXE_CHECK_COMPILER_FLAGS([-gcoff])
549                 SXE_CHECK_COMPILER_FLAGS([-gcoff3])
550         fi
551
552         ## final evaluation
553         debugflags=""
554         ## gdb
555         if test "$sxe_cv_c_flags__ggdb3" = "yes"; then
556                 debugflags="$debugflags -ggdb3"
557         elif test "$sxe_cv_c_flags__ggdb" = "yes"; then
558                 debugflags="$debugflags -ggdb"
559         fi
560         ## stabs
561         if test "$sxe_cv_c_flags__gstabs3" = "yes"; then
562                 debugflags="$debugflags -gstabs3"
563         elif test "$sxe_cv_c_flags__gstabs" = "yes"; then
564                 debugflags="$debugflags -gstabs"
565         fi
566         ## coff
567         if test "$sxe_cv_c_flags__gcoff3" = "yes"; then
568                 debugflags="$debugflags -gcoff3"
569         elif test "$sxe_cv_c_flags__gcoff" = "yes"; then
570                 debugflags="$debugflags -gcoff"
571         fi
572         ## xcoff
573         if test "$sxe_cv_c_flags__gxcoff3" = "yes"; then
574                 debugflags="$debugflags -gxcoff3"
575         elif test "$sxe_cv_c_flags__gxcoff" = "yes"; then
576                 debugflags="$debugflags -gxcoff"
577         fi
578
579         if test -z "debugflags" -a \
580                 "$sxe_cv_c_flags__g" = "yes"; then
581                 debugflags="$debugflags -g"
582         fi
583
584         SXE_CHECK_COMPILER_FLAGS([-ftime-report])
585         SXE_CHECK_COMPILER_FLAGS([-fmem-report])
586         SXE_CHECK_COMPILER_FLAGS([-fvar-tracking])
587         SXE_CHECK_COMPILER_FLAGS([-save-temps])
588
589         #if test "$sxe_cv_c_flags__ggdb3" = "yes" -a \
590         #       "$sxe_cv_c_flags__fvar_tracking" = "yes"; then
591         #       debugflags="$debugflags -fvar-tracking"
592         #fi
593
594         AC_MSG_CHECKING([for preferred debugging flags])
595         AC_MSG_RESULT([${debugflags}])
596 ])dnl SXE_DEBUGFLAGS
597
598 AC_DEFUN([SXE_WARNFLAGS], [dnl
599         ## Calculate warning flags.  We separate the flags for warnings from
600         ## the other flags because we want to force the warnings to be seen
601         ## by everyone who doesn't specifically override them.
602
603         ## by default we want the -Wall level
604         SXE_CHECK_COMPILER_FLAGS([-Wall], [warnflags="-Wall"])
605
606         SXE_CHECK_COMPILER_FLAGS([-qinfo], [
607                 warnflags="${warnflags} -qinfo"])
608
609         ## Yuck, bad compares have been worth at
610         ## least 3 crashes!
611         ## Warnings about char subscripts are pretty
612         ## pointless, though,
613         ## and we use them in various places.
614         SXE_CHECK_COMPILER_FLAGS([-Wsign-compare], [
615                 warnflags="$warnflags -Wsign-compare"])
616         SXE_CHECK_COMPILER_FLAGS([-Wno-char-subscripts], [
617                 warnflags="$warnflags -Wno-char-subscripts"])
618         SXE_CHECK_COMPILER_FLAGS([-Wundef], [
619                 warnflags="$warnflags -Wundef"])
620
621         ## too much at the moment, we rarely define protos
622         #warnflags="$warnflags -Wmissing-prototypes -Wstrict-prototypes"
623         SXE_CHECK_COMPILER_FLAGS([-Wpacked], [
624                 warnflags="$warnflags -Wpacked"])
625
626         ## glibc is intentionally not `-Wpointer-arith'-clean.
627         ## Ulrich Drepper has rejected patches to fix
628         ## the glibc header files.
629         ## we dont care
630         SXE_CHECK_COMPILER_FLAGS([-Wpointer-arith], [
631                 warnflags="$warnflags -Wpointer-arith"])
632
633         SXE_CHECK_COMPILER_FLAGS([-Wshadow], [
634                 warnflags="$warnflags -Wshadow"])
635
636         ## our code lacks declarations almost all the time
637         SXE_CHECK_COMPILER_FLAGS([-Wmissing-declarations], [
638                 warnflags="$warnflags -Wmissing-declarations"])
639         SXE_CHECK_COMPILER_FLAGS([-Wmissing-prototypes], [
640                 warnflags="$warnflags -Wmissing-prototypes"])
641         SXE_CHECK_COMPILER_FLAGS([-Winline], [
642                 warnflags="$warnflags -Winline"])
643         SXE_CHECK_COMPILER_FLAGS([-Wbad-function-cast], [
644                 warnflags="$warnflags -Wbad-function-cast"])
645         SXE_CHECK_COMPILER_FLAGS([-Wcast-qual], [
646                 warnflags="$warnflags -Wcast-qual"])
647         SXE_CHECK_COMPILER_FLAGS([-Wcast-align], [
648                 warnflags="$warnflags -Wcast-align"])
649
650         ## warn about incomplete switches
651         SXE_CHECK_COMPILER_FLAGS([-Wswitch], [
652                 warnflags="$warnflags -Wswitch"])
653         SXE_CHECK_COMPILER_FLAGS([-Wswitch-default], [
654                 warnflags="$warnflags -Wswitch-default"])
655         SXE_CHECK_COMPILER_FLAGS([-Wswitch-enum], [
656                 warnflags="$warnflags -Wswitch-enum"])
657
658         ## Wunused's
659         SXE_CHECK_COMPILER_FLAGS([-Wunused-function], [
660                 warnflags="$warnflags -Wunused-function"])
661         SXE_CHECK_COMPILER_FLAGS([-Wunused-variable], [
662                 warnflags="$warnflags -Wunused-variable"])
663         SXE_CHECK_COMPILER_FLAGS([-Wunused-parameter], [
664                 warnflags="$warnflags -Wunused-parameter"])
665         SXE_CHECK_COMPILER_FLAGS([-Wunused-value], [
666                 warnflags="$warnflags -Wunused-value"])
667         SXE_CHECK_COMPILER_FLAGS([-Wunused], [
668                 warnflags="$warnflags -Wunused"])
669
670         ## icc
671         SXE_CHECK_COMPILER_FLAGS([-Wreorder], [
672                 warnflags="$warnflags -Wreorder"])
673         SXE_CHECK_COMPILER_FLAGS([-Wdeprecated], [
674                 warnflags="$warnflags -Wdeprecated"])
675         SXE_CHECK_COMPILER_FLAGS([-Wnopragma], [
676                 warnflags="$warnflags -Wnopragma"])
677
678         ## for upcoming libev support
679         ## libev is a warning emitting cow, the developers can't
680         ## be arsed to fix it, as it turns out
681         SXE_CHECK_COMPILER_FLAGS([-fno-strict-aliasing], [
682                 warnflags="$warnflags -fno-strict-aliasing"])
683
684         AC_MSG_CHECKING([for preferred warning flags])
685         AC_MSG_RESULT([${warnflags}])
686 ])dnl SXE_WARNFLAGS
687
688 AC_DEFUN([SXE_OPTIFLAGS], [dnl
689         optiflags=""
690         SXE_COMPILER_VENDOR
691
692         case $sxe_cv_c_compiler_vendor in
693         dnl (
694         dec)
695                 SXE_CC_MAXOPT_DEC
696                 ;;
697         dnl (
698         sun)
699                 SXE_CC_MAXOPT_SUN
700                 ;;
701         dnl (
702         hp)
703                 SXE_CC_MAXOPT_HP
704                 ;;
705         dnl (
706         ibm)
707                 SXE_CC_MAXOPT_IBM
708                 ;;
709         dnl (
710         intel)
711                 SXE_CC_MAXOPT_INTEL
712                 ;;
713         dnl (
714         gnu)
715                 SXE_CC_MAXOPT_GNU
716                 ;;
717         esac
718
719         AC_MSG_CHECKING([for preferred optimising flags])
720         AC_MSG_RESULT([$optiflags])
721         if test -z "$optiflags"; then
722                 echo ""
723                 echo "********************************************************"
724                 echo "* WARNING: Don't know the best CFLAGS for this system  *"
725                 echo "* Use ./configure CFLAGS=... to specify your own flags *"
726                 echo "* (otherwise, a default of CFLAGS=-O3 will be used)    *"
727                 echo "********************************************************"
728                 echo ""
729                 optiflags="-O3"
730         fi
731         
732         SXE_CHECK_COMPILER_FLAGS([$optiflags], [:], [
733                 echo ""
734                 echo "********************************************************"
735                 echo "* WARNING: The guessed CFLAGS don't seem to work with  *"
736                 echo "* your compiler.                                       *"
737                 echo "* Use ./configure CFLAGS=... to specify your own flags *"
738                 echo "********************************************************"
739                 echo ""
740                 optiflags=""
741         ])
742 ])dnl SXE_OPTIFLAGS
743
744 AC_DEFUN([SXE_FEATFLAGS], [dnl
745         ## default flags for needed features
746
747         ## we need nested functions ... hm, i dont think we do
748         ## but it's always nice to have them
749         SXE_CHECK_COMPILER_FLAGS([-fnested-functions], [
750                 featflags="$featflags -fnested-functions"])
751
752         ## recent gentoos went ballistic again, they compile PIE gcc's
753         ## but there's no way to turn that misconduct off ...
754         ## however I've got one report about a working PIE build
755         ## we'll just check for -nopie here, if it works, we turn it on
756         ## (and hence PIE off) and hope bug 16 remains fixed
757         SXE_CHECK_COMPILER_FLAGS([-nopie],
758                 [featflags="$featflags -nopie"])
759
760         ## if libtool then
761         dnl XFLAG="-XCClinker"
762
763         ## default flags for needed features
764         SXE_CHECK_COMPILER_FLAGS([-static-intel], [
765                 ldflags="${ldflags} ${XFLAG} -static-intel"])
766         SXE_CHECK_COMPILER_FLAGS([-static-libgcc], [
767                 ldflags="${ldflags} ${XFLAG} -static-libgcc"])
768 ])dnl SXE_FEATFLAGS
769
770
771 AC_DEFUN([SXE_COMPILER_VENDOR], [dnl
772 AC_CACHE_CHECK([for _AC_LANG compiler vendor],
773         sxe_cv_[]_AC_LANG_ABBREV[]_compiler_vendor,
774         [sxe_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown
775         # note: don't check for gcc first since some other compilers define __GNUC__
776         for ventest in \
777                 intel:__ICC,__ECC,__INTEL_COMPILER \
778                 ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ \
779                 gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC \
780                 hp:__HP_cc,__HP_aCC \
781                 dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER \
782                 borland:__BORLANDC__,__TURBOC__ \
783                 comeau:__COMO__ \
784                 cray:_CRAYC \
785                 kai:__KCC \
786                 lcc:__LCC__ \
787                 metrowerks:__MWERKS__ \
788                 sgi:__sgi,sgi \
789                 microsoft:_MSC_VER \
790                 watcom:__WATCOMC__ \
791                 portland:__PGI; do
792
793                 vencpp="defined("$(echo \
794                         $ventest | cut -d: -f2 | sed "s/,/) || defined(/g")")"
795                 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[
796 #if !($vencpp)
797       thisisanerror;
798 #endif
799                         ])], [sxe_cv_]_AC_LANG_ABBREV[_compiler_vendor=$(echo $ventest | cut -d: -f1); break; ])
800         done
801         ])
802 ])dnl SXE_COMPILER_VENDOR
803
804
805 AC_DEFUN([SXE_CC_MAXOPT_DEC], [dnl
806         optiflags="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host"
807         if test "$acx_maxopt_portable" = "no"; then
808                 optiflags="$optiflags -arch host"
809         fi
810 ])dnl SXE_CC_MAXOPT_DEC
811
812 AC_DEFUN([SXE_CC_MAXOPT_SUN], [dnl
813         optiflags="-native -fast -xO5 -dalign"
814         if test "$acx_maxopt_portable" = "yes"; then
815                 optiflags="$optiflags -xarch=generic"
816         fi
817 ])dnl SXE_CC_MAXOPT_SUN
818
819 AC_DEFUN([SXE_CC_MAXOPT_HP], [dnl
820         optiflags="+Oall +Optrs_ansi +DSnative"
821         if test "$acx_maxopt_portable" = "yes"; then
822                 optiflags="$optiflags +DAportable"
823         fi
824 ])dnl SXE_CC_MAXOPT_HP
825
826 AC_DEFUN([SXE_CC_MAXOPT_IBM], [dnl
827         if test "$acx_maxopt_portable" = "no"; then
828                 xlc_opt="-qarch=auto -qtune=auto"
829         else
830                 xlc_opt="-qtune=auto"
831         fi
832         SXE_CHECK_COMPILER_FLAGS([$xlc_opt],
833                 [optiflags="-O3 -qansialias -w $xlc_opt"],
834                 [optiflags="-O3 -qansialias -w"
835                 echo "******************************************************"
836                 echo "*  You seem to have the IBM  C compiler.  It is      *"
837                 echo "*  recommended for best performance that you use:    *"
838                 echo "*                                                    *"
839                 echo "*    CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *"
840                 echo "*                      ^^^        ^^^                *"
841                 echo "*  where xxx is pwr2, pwr3, 604, or whatever kind of *"
842                 echo "*  CPU you have.  (Set the CFLAGS environment var.   *"
843                 echo "*  and re-run configure.)  For more info, man cc.    *"
844                 echo "******************************************************"])
845 ])dnl SXE_CC_MAXOPT_IBM
846
847 AC_DEFUN([SXE_CC_MAXOPT_INTEL], [dnl
848         optiflags="-O3 -ansi_alias"
849         if test "$acx_maxopt_portable" = "no"; then
850                 icc_archflag=unknown
851                 icc_flags=""
852                 case "$host_cpu" in
853                 ## (
854                 i686*|x86_64*)
855                         # icc accepts gcc assembly syntax,
856                         # so these should work:
857                         SXE_CHECK_CPU_PC
858                         ;;
859                 esac
860                 if test "$icc_flags" != ""; then
861                         for flag in $icc_flags; do
862                                 SXE_CHECK_COMPILER_FLAGS([$flag],
863                                         [icc_archflag=$flag; break])
864                         done
865                 fi
866                 AC_MSG_CHECKING([for icc architecture flag])
867                 AC_MSG_RESULT([$icc_archflag])
868                 if test "$icc_archflag" != "unknown"; then
869                         optiflags="$optiflags $icc_archflag"
870                 fi
871         fi
872 ])dnl SXE_CC_MAXOPT_INTEL
873
874 AC_DEFUN([SXE_CC_MAXOPT_GNU], [dnl
875         ## default optimisation flags for gcc on all systems
876         ## this is the preferred compiler
877         optiflags="-O3"
878
879         AC_REQUIRE([SXE_CHECK_SIMD_EXTENSIONS])
880         optiflags="$optiflags $simdflags"
881
882         ## note that we enable "unsafe" fp optimisation with other compilers, too
883         SXE_CHECK_COMPILER_FLAGS([-ftree-vectorize],
884                 [optiflags="$optiflags -ftree-vectorize"])
885
886         ## check for -march and/or -mtune
887         SXE_GCC_ARCHFLAG([$acx_maxopt_portable])
888         optiflags="$optiflags $archflags"
889
890         ## a softer variant of omit-frame-pointer
891         SXE_CHECK_COMPILER_FLAGS([-momit-leaf-frame-pointer],
892                 [optiflags="$optiflags -momit-leaf-frame-pointer"])
893
894         ## check for openmp support
895         ## there are: -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp
896         SXE_CHECK_COMPILER_FLAGS([-fopenmp])
897
898         if test "$sxe_cv_c_flags__fopenmp" = "yes" -a "$with_omp"; then
899                 SXE_MSG_CHECKING([whether it is safe to use -fopenmp])
900                 case "$compiler_version" in
901                 gcc*\ 4.4.*)
902                         optiflags="$optiflags -fopenmp"
903                         sxe_cv_feat_omp="yes"
904                         SXE_MSG_RESULT([yes])
905                         ;;
906                 *)
907                         SXE_MSG_RESULT([no])
908                         ;;
909                 esac
910         fi
911
912         ## these belong to the corresponding MAXOPT macro
913 dnl     SXE_CHECK_COMPILER_FLAGS([-xopenmp], [
914 dnl             optiflags="$optiflags -xopenmp"
915 dnl             sxe_cv_feat_omp="yes"
916 dnl             ])
917 dnl     SXE_CHECK_COMPILER_FLAGS([-openmp], [
918 dnl             optiflags="$optiflags -openmp"
919 dnl             sxe_cv_feat_omp="yes"
920 dnl             ])
921 dnl     SXE_CHECK_COMPILER_FLAGS([-mp], [
922 dnl             optiflags="$optiflags -mp"
923 dnl             sxe_cv_feat_omp="yes"
924 dnl             ])
925 dnl     SXE_CHECK_COMPILER_FLAGS([-omp], [
926 dnl             optiflags="$optiflags -omp"
927 dnl             sxe_cv_feat_omp="yes"
928 dnl             ])
929 dnl     SXE_CHECK_COMPILER_FLAGS([-qsmp=omp], [
930 dnl             optiflags="$optiflags -qsmp=omp"
931 dnl             sxe_cv_feat_omp="yes"
932 dnl             ])
933         ## add -lgomp to ldflags
934         if test "$sxe_cv_feat_omp" = "yes"; then
935                 LDFLAGS="$LDFLAGS -lgomp"
936         fi
937
938         # -malign-double for x86 systems
939         SXE_CHECK_COMPILER_FLAGS([-malign-double])
940         ## won't add this one, since it is causing problems
941         ##      [optiflags="$optiflags -malign-double"])
942
943         ## would be nice to have this but it triggers too many
944         ## meaningless warnings
945 dnl     ## -fstrict-aliasing for gcc-2.95+
946 dnl     SXE_CHECK_COMPILER_FLAGS([-fstrict-aliasing],
947 dnl             [optiflags="$optiflags -fstrict-aliasing"])
948
949         SXE_CHECK_COMPILER_FLAGS([-fearly-inlining],
950                 [optiflags="$optiflags -fearly-inlining"])
951
952         SXE_CHECK_COMPILER_FLAGS([-fdelete-null-pointer-checks],
953                 [optiflags="$optiflags -fdelete-null-pointer-checks"])
954
955         SXE_CHECK_COMPILER_FLAGS([-fmodulo-sched],
956                 [optiflags="$optiflags -fmodulo-sched"])
957
958         SXE_CHECK_COMPILER_FLAGS([-fmudflap])
959         SXE_CHECK_COMPILER_FLAGS([-fmudflapth])
960         SXE_CHECK_COMPILER_FLAGS([-fmudflapir])
961         if test "$sxe_cv_c_flags__fmudflapth" -a \
962                 "$sxe_cv_c_flags__fmudflapir"; then
963                 ## preferred
964                 : ##optiflags="$optiflags -fmudflapth -fmudflapir"
965         elif test "$sxe_cv_c_flags__fmudflap" -a \
966                 "$sxe_cv_c_flags__fmudflapir"; then
967                 : ##optiflags="$optiflags -fmudflap -fmudflapir"
968         fi
969         SXE_CHECK_COMPILER_FLAGS([-fsection-anchors],
970                 [optiflags="$optiflags -fsection-anchors"])
971
972 dnl     ## actually this belongs to error-checking stuff
973 dnl     SXE_CHECK_COMPILER_FLAGS([-fstack-protector],
974 dnl             [optiflags="$optiflags -fstack-protector"])
975 dnl     if test "$sxe_cv_c_flags__fstack_protector" = "yes"; then
976 dnl             ## just check for ssp in this case
977 dnl             AC_CHECK_LIB([ssp], [__stack_chk_guard])
978 dnl     fi
979
980         SXE_CHECK_COMPILER_FLAGS([-fbranch-target-load-optimize])
981         SXE_CHECK_COMPILER_FLAGS([-fbranch-target-load-optimize2])
982         if test "$sxe_cv_c_flags__fbranch_target_load_optimize2" = "yes"; then
983                 optiflags="$optiflags -fbranch-target-load-optimize2"
984         elif test "$sxe_cv_c_flags__fbranch_target_load_optimize" = "yes"; then
985                 optiflags="$optiflags -fbranch-target-load-optimize"
986         fi
987
988         SXE_CHECK_COMPILER_FLAGS([-fgcse],
989                 [optiflags="$optiflags -fgcse"])
990         SXE_CHECK_COMPILER_FLAGS([-fgcse-lm],
991                 [optiflags="$optiflags -fgcse-lm"])
992         SXE_CHECK_COMPILER_FLAGS([-fgcse-sm],
993                 [optiflags="$optiflags -fgcse-sm"])
994         SXE_CHECK_COMPILER_FLAGS([-fgcse-las],
995                 [optiflags="$optiflags -fgcse-las"])
996         SXE_CHECK_COMPILER_FLAGS([-fgcse-after-reload],
997                 [optiflags="$optiflags -fgcse-after-reload"])
998         SXE_CHECK_COMPILER_FLAGS([-funsafe-loop-optimizations],
999                 [optiflags="$optiflags -funsafe-loop-optimizations"])
1000         SXE_CHECK_COMPILER_FLAGS([-funroll-loops],
1001                 [optiflags="$optiflags -funswitch-loops"])
1002         SXE_CHECK_COMPILER_FLAGS([-funswitch-loops],
1003                 [optiflags="$optiflags -funswitch-loops"])
1004         SXE_CHECK_COMPILER_FLAGS([-frename-registers],
1005                 [optiflags="$optiflags -frename-registers"])
1006
1007         ## maths speedup
1008         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-signaling-nans],
1009                 [optiflags="$optiflags -fno-signaling-nans"])
1010         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-trapping-math],
1011                 [optiflags="$optiflags -fno-trapping-math"])
1012         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-signed-zeros],
1013                 [optiflags="$optiflags -fno-signed-zeros"])
1014         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fassociative-math],
1015                 [optiflags="$optiflags -fassociative-math"])
1016         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-rounding-math],
1017                 [optiflags="$optiflags -fno-rounding-math"])
1018         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-math-errno],
1019                 [optiflags="$optiflags -fno-math-errno"])
1020         ## the same as the previous 5, but sometimes gcc doesn't know'em all
1021         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations],
1022                 [optiflags="$optiflags -funsafe-math-optimizations"])
1023         ## another of these
1024         SXE_CHECK_COMPILER_FLAGS([-ffast-math],
1025                 [optiflags="$optiflags -ffast-math"])
1026         ## and yet some more
1027         SXE_CHECK_COMPILER_FLAGS([-mrecip],
1028                 [optiflags="$optiflags -mrecip"])
1029         SXE_CHECK_COMPILER_FLAGS([-msahf],
1030                 [optiflags="$optiflags -msahf"])
1031
1032         SXE_CHECK_COMPILER_FLAGS([-minline-all-stringops],
1033                 [optiflags="$optiflags -minline-all-stringops"])
1034
1035 ])dnl SXE_CC_MAXOPT_GNU
1036
1037
1038 ##### http://autoconf-archive.cryp.to/ax_check_compiler_flags.html
1039 ## renamed the prefix to SXE_
1040 AC_DEFUN([SXE_CHECK_COMPILER_FLAGS], [dnl
1041         AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1])
1042
1043         dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
1044         SXE_LANG_WERROR([push+on])
1045         AS_LITERAL_IF([$1], [
1046                 AC_CACHE_VAL(AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1), [
1047                         sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
1048                         _AC_LANG_PREFIX[]FLAGS="$1"
1049                         AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
1050                                 AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="yes",
1051                                 AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="no")
1052                         _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])], [
1053                 sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
1054                 _AC_LANG_PREFIX[]FLAGS="$1"
1055                 AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
1056                         eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="yes",
1057                         eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="no")
1058                 _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])
1059         eval sxe_check_compiler_flags=$AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)
1060         SXE_LANG_WERROR([pop])
1061
1062         AC_MSG_RESULT([$sxe_check_compiler_flags])
1063         if test "$sxe_check_compiler_flags" = "yes"; then
1064                 m4_default([$2], :)
1065         else
1066                 m4_default([$3], :)
1067         fi
1068 ])dnl SXE_CHECK_COMPILER_FLAGS
1069
1070
1071 AC_DEFUN([SXE_CHECK_CPU], [dnl
1072         case "$host_cpu" in
1073         dnl (
1074         i*86*|x86_64*)
1075                 ## pc-style hardware
1076                 SXE_CHECK_CPU_PC
1077                 ;;
1078         dnl (
1079         sparc*)
1080                 ## sparc stuff
1081                 SXE_CHECK_CPU_SPARC
1082                 ;;
1083         dnl (
1084         alpha*)
1085                 ## alpha cruft
1086                 SXE_CHECK_CPU_ALPHA
1087                 ;;
1088         dnl (
1089         powerpc*)
1090                 ## ya know what
1091                 SXE_CHECK_CPU_PPC
1092                 ;;
1093         esac
1094 ])dnl SXE_CHECK_CPU
1095
1096 AC_DEFUN([SXE_CHECK_CPU_SPARC], [dnl
1097         AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag],
1098                 [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/])
1099         cputype=$((((grep cpu /proc/cpuinfo | cut -d: -f2) ; \
1100                 ($PRTDIAG -v |grep -i sparc) ; \
1101                 grep -i cpu "/var/run/dmesg.boot" ) | head -n 1) 2> /dev/null)
1102         cputype=$(echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters)
1103
1104         case "$cputype" in
1105         dnl (
1106         *ultrasparciv*)
1107                 sxe_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9"
1108                 ;;
1109         dnl (
1110         *ultrasparciii*)
1111                 sxe_gcc_arch="ultrasparc3 ultrasparc v9"
1112                 ;;
1113         dnl (
1114         *ultrasparc*)
1115                 sxe_gcc_arch="ultrasparc v9"
1116                 ;;
1117         dnl (
1118         *supersparc*|*tms390z5[[05]]*)
1119                 sxe_gcc_arch="supersparc v8"
1120                 ;;
1121         dnl (
1122         *hypersparc*|*rt62[[056]]*)
1123                 sxe_gcc_arch="hypersparc v8"
1124                 ;;
1125         dnl (
1126         *cypress*)
1127                 sxe_gcc_arch=cypress
1128                 ;;
1129         esac
1130 ])dnl SXE_CHECK_CPU_SPARC
1131
1132 AC_DEFUN([SXE_CHECK_CPU_ALPHA], [dnl
1133         case "$host_cpu" in
1134         dnl (
1135         alphaev5)
1136                 sxe_gcc_arch="ev5"
1137                 ;;
1138         dnl (
1139         alphaev56)
1140                 sxe_gcc_arch="ev56"
1141                 ;;
1142         dnl (
1143         alphapca56)
1144                 sxe_gcc_arch="pca56 ev56"
1145                 ;;
1146         dnl (
1147         alphapca57)
1148                 sxe_gcc_arch="pca57 pca56 ev56"
1149                 ;;
1150         dnl (
1151         alphaev6)
1152                 sxe_gcc_arch="ev6"
1153                 ;;
1154         dnl (
1155         alphaev67)
1156                 sxe_gcc_arch="ev67"
1157                 ;;
1158         dnl (
1159         alphaev68)
1160                 sxe_gcc_arch="ev68 ev67"
1161                 ;;
1162         dnl (
1163         alphaev69)
1164                 sxe_gcc_arch="ev69 ev68 ev67"
1165                 ;;
1166         dnl (
1167         alphaev7)
1168                 sxe_gcc_arch="ev7 ev69 ev68 ev67"
1169                 ;;
1170         dnl (
1171         alphaev79)
1172                 sxe_gcc_arch="ev79 ev7 ev69 ev68 ev67"
1173                 ;;
1174         esac
1175 ])dnl SXE_CHECK_CPU_ALPHA
1176
1177 AC_DEFUN([SXE_CHECK_CPU_PPC], [dnl
1178         cputype=$(((grep cpu /proc/cpuinfo | head -n 1 | \
1179                 cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; \
1180                 /usr/bin/machine ; \
1181                 /bin/machine; \
1182                 grep CPU /var/run/dmesg.boot | \
1183                 head -n 1 | cut -d" " -f2) 2> /dev/null)
1184         cputype=$(echo $cputype | sed -e 's/ppc//g;s/ *//g')
1185
1186         case "$cputype" in
1187         dnl (
1188         *750*)
1189                 sxe_gcc_arch="750 G3"
1190                 ;;
1191         dnl (
1192         *740[[0-9]]*)
1193                 sxe_gcc_arch="$cputype 7400 G4"
1194                 ;;
1195         dnl (
1196         *74[[4-5]][[0-9]]*)
1197                 sxe_gcc_arch="$cputype 7450 G4"
1198                 ;;
1199         dnl (
1200         *74[[0-9]][[0-9]]*)
1201                 sxe_gcc_arch="$cputype G4"
1202                 ;;
1203         dnl (
1204         *970*)
1205                 sxe_gcc_arch="970 G5 power4"
1206                 ;;
1207         dnl (
1208         *POWER4*|*power4*|*gq*)
1209                 sxe_gcc_arch="power4 970"
1210                 ;;
1211         dnl (
1212         *POWER5*|*power5*|*gr*|*gs*)
1213                 sxe_gcc_arch="power5 power4 970"
1214                 ;;
1215         dnl (
1216         603ev|8240)
1217                 sxe_gcc_arch="$cputype 603e 603"
1218                 ;;
1219         dnl (
1220         *)
1221                 sxe_gcc_arch="$cputype"
1222                 ;;
1223         esac
1224         sxe_gcc_arch="$sxe_gcc_arch powerpc"
1225 ])dnl SXE_CHECK_CPU_PPC
1226
1227 AC_DEFUN([SXE_CHECK_CPU_PC], [dnl
1228         ## use cpuid codes,
1229         AC_REQUIRE([SXE_PROC_CPUID])
1230
1231         case "$sxe_cv_proc_cpuid_00000000" in
1232         dnl (
1233         *:756e6547:*:*)
1234                 ## Intel
1235                 case "$sxe_cv_proc_cpuid_00000001" in
1236                 dnl (
1237                 *5[[48]]?:*:*:*)
1238                         sxe_gcc_arch="pentium-mmx pentium"
1239                         ;;
1240                 dnl (
1241                 *5??:*:*:*)
1242                         sxe_gcc_arch="pentium"
1243                         ;;
1244                 dnl (
1245                 *6[[3456]]?:*:*:*)
1246                         sxe_gcc_arch="pentium2 pentiumpro"
1247                         ;;
1248                 dnl (
1249                 *6a?:*[[01]]:*:*)
1250                         sxe_gcc_arch="pentium2 pentiumpro"
1251                         ;;
1252                 dnl (
1253                 *6a?:*[[234]]:*:*)
1254                         sxe_gcc_arch="pentium3 pentiumpro"
1255                         icc_flags="-xK"
1256                         ;;
1257                 dnl (
1258                 *69?:*:*:*)
1259                         sxe_gcc_arch="pentium-m pentium3 pentiumpro"
1260                         icc_flags="-xK"
1261                         ;;
1262                 dnl (
1263                 *6d?:*:*:*)
1264                         sxe_gcc_arch="pentium-m pentium3 pentiumpro"
1265                         ;;
1266                 dnl (
1267                 *6[[78b]]?:*:*:*)
1268                         sxe_gcc_arch="pentium3 pentiumpro"
1269                         icc_flags="-xK"
1270                         ;;
1271                 dnl (
1272                 *6f?:*:*:*)
1273                         ## intel core 2 duo
1274                         sxe_gcc_arch="nocona pentium4 pentiumpro"
1275                         ## icc flags here
1276                         ## icc_flags="??"
1277                         ;;
1278                 dnl (
1279                 *6??:*:*:*)
1280                         sxe_gcc_arch="pentiumpro"
1281                         ;;
1282                 dnl (
1283                 *f3[[347]]:*:*:*|*f4[1347]:*:*:*)
1284                         icc_flags="-xP -xN -xW -xK"
1285                         case "$host_cpu" in
1286                         dnl (
1287                         x86_64*)
1288                                 sxe_gcc_arch="nocona pentium4 pentiumpro"
1289                                 ;;
1290                         dnl (
1291                         *)
1292                                 sxe_gcc_arch="prescott pentium4 pentiumpro"
1293                                 ;;
1294                         esac
1295                         ;;
1296                 dnl (
1297                 *f??:*:*:*)
1298                         icc_flags="-xN -xW -xK"
1299                         sxe_gcc_arch="pentium4 pentiumpro"
1300                         ;;
1301                 esac
1302                 ;;
1303         dnl (
1304         *:68747541:*:*)
1305                 ## AMD
1306                 case "$sxe_cv_proc_cpuid_00000001" in
1307                 dnl (
1308                 *5[[67]]?:*:*:*)
1309                         sxe_gcc_arch="k6"
1310                         ;;
1311                 dnl (
1312                 *5[[8d]]?:*:*:*)
1313                         sxe_gcc_arch="k6-2 k6"
1314                         ;;
1315                 dnl (
1316                 *5[[9]]?:*:*:*)
1317                         sxe_gcc_arch="k6-3 k6"
1318                         ;;
1319                 dnl (
1320                 *60?:*:*:*)
1321                         sxe_gcc_arch="k7"
1322                         ;;
1323                 dnl (
1324                 *6[[12]]?:*:*:*)
1325                         sxe_gcc_arch="athlon k7"
1326                         ;;
1327                 dnl (
1328                 *6[[34]]?:*:*:*)
1329                         sxe_gcc_arch="athlon-tbird k7"
1330                         ;;
1331                 dnl (
1332                 *67?:*:*:*)
1333                         sxe_gcc_arch="athlon-4 athlon k7"
1334                         ;;
1335                 dnl (
1336                 *6[[68a]]?:*:*:*)
1337                         case "$sxe_cv_proc_cpuid_80000006" in
1338                         dnl (
1339                         *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256
1340                                 sxe_gcc_arch="athlon-xp athlon-4 athlon k7"
1341                                 ;;
1342                         dnl (
1343                         *)
1344                                 sxe_gcc_arch="athlon-4 athlon k7"
1345                                 ;;
1346                         esac
1347                         ;;
1348                 dnl (
1349                 *f[[4cef8b]]?:*:*:*)
1350                         sxe_gcc_arch="athlon64 k8"
1351                         ;;
1352                 dnl (
1353                 *f5?:*:*:*)
1354                         sxe_gcc_arch="opteron k8"
1355                         ;;
1356                 dnl (
1357                 *f7?:*:*:*)
1358                         sxe_gcc_arch="athlon-fx opteron k8"
1359                         ;;
1360                 dnl (
1361                 *f??:*:*:*)
1362                         sxe_gcc_arch="k8"
1363                         ;;
1364                 esac
1365                 ;;
1366         dnl (
1367         *:746e6543:*:*)
1368                 # IDT
1369                 case "$sxe_cv_proc_cpuid_00000001" in
1370                 dnl (
1371                 *54?:*:*:*)
1372                         sxe_gcc_arch="winchip-c6"
1373                         ;;
1374                 dnl (
1375                 *58?:*:*:*)
1376                         sxe_gcc_arch="winchip2"
1377                         ;;
1378                 dnl (
1379                 *6[[78]]?:*:*:*)
1380                         sxe_gcc_arch="c3"
1381                         ;;
1382                 dnl (
1383                 *69?:*:*:*)
1384                         sxe_gcc_arch="c3-2 c3"
1385                         ;;
1386                 esac
1387                 ;;
1388         esac
1389
1390         ## nothing found? => fallback
1391         if test -z "$sxe_gcc_arch"; then
1392                 ## apply a generic strategy
1393                 case "$host_cpu" in
1394                 i586*)
1395                         sxe_gcc_arch="pentium"
1396                         ;;
1397                 i686*)
1398                         sxe_gcc_arch="pentiumpro"
1399                         ;;
1400                 esac
1401         fi
1402 ])dnl SXE_CHECK_CPU_PC
1403
1404
1405 AC_DEFUN([SXE_GCC_ARCHFLAG], [dnl
1406         AC_REQUIRE([AC_PROG_CC])
1407         AC_REQUIRE([AC_CANONICAL_HOST])
1408
1409         AC_ARG_WITH([gcc-arch], AS_HELP_STRING([--with-gcc-arch=<arch>], [
1410                         use architecture <arch> for gcc -march/-mtune,
1411                         instead of guessing]),
1412                 [sxe_gcc_arch=$withval], [sxe_gcc_arch=yes])
1413
1414         AC_MSG_CHECKING([for gcc architecture flag])
1415         AC_MSG_RESULT([])
1416         AC_CACHE_VAL([sxe_cv_gcc_archflag], [
1417                 ## initialise to unknown
1418                 sxe_cv_gcc_archflag="unknown"
1419
1420                 if test "$GCC" = yes; then
1421                         if test "$sxe_gcc_arch" = "yes" -a \
1422                                 "$cross_compiling" = "no"; then
1423                                 sxe_gcc_arch=""
1424                                 SXE_CHECK_CPU
1425                         fi
1426
1427                         if test -n "$sxe_gcc_arch" -a "$sxe_gcc_arch" != "no"; then
1428                                 for arch in $sxe_gcc_arch; do
1429                                         if test "[]m4_default([$1],yes)" = "yes"; then
1430                                                 ## if we require portable code
1431                                                 archflags="-mtune=$arch"
1432                                                 ## -mcpu=$arch and m$arch generate
1433                                                 ## nonportable code on every arch except
1434                                                 ## x86.  And some other arches
1435                                                 ## (e.g. Alpha) don't accept -mtune.
1436                                                 ## Grrr.
1437                                                 case "$host_cpu" in
1438                                                 dnl (
1439                                                 i*86|x86_64*)
1440                                                         archflags="$archflags -mcpu=$arch -m$arch"
1441                                                         ;;
1442                                                 esac
1443                                         else
1444                                                 archflags="-march=$arch -mcpu=$arch -m$arch"
1445                                         fi
1446                                         for flag in $archflags; do
1447                                                 SXE_CHECK_COMPILER_FLAGS([$flag],
1448                                                         [sxe_cv_gcc_archflag="$flag"; break])
1449                                         done
1450                                         if test "$sxe_cv_gcc_archflag" != "unknown"; then
1451                                                 break
1452                                         fi
1453                                 done
1454                         fi
1455                 fi
1456                 ])
1457
1458         AC_MSG_CHECKING([for gcc architecture flag])
1459         AC_MSG_RESULT([$sxe_cv_gcc_archflag])
1460         if test "$sxe_cv_gcc_archflag" = "unknown"; then
1461                 m4_default([$3],:)
1462         else
1463                 m4_default([$2], [archflags="$sxe_cv_gcc_archflag"])
1464         fi
1465 ])dnl SXE_GCC_ARCHFLAG
1466
1467
1468 #### http://autoconf-archive.cryp.to/sxe_check_define.html
1469 AC_DEFUN([SXE_CHECK_DEFINED], [dnl
1470         AS_VAR_PUSHDEF([ac_var],[ac_cv_defined_$2])dnl
1471
1472         AC_CACHE_CHECK([for $1 defined], ac_var,
1473                 AC_TRY_COMPILE($1,[
1474 #ifndef $2
1475 int ok;
1476 #else
1477 choke me
1478 #endif
1479                 ],
1480                 AS_VAR_SET(ac_var, [yes]),
1481                 AS_VAR_SET(ac_var, [no])))
1482
1483         AS_IF([test AS_VAR_GET(ac_var) != "no"], [$3], [$4])
1484         AS_VAR_POPDEF([ac_var])
1485 ])dnl SXE_CHECK_DEFINED
1486
1487 AC_DEFUN([SXE_CHECK_FUNC], [dnl
1488         AS_VAR_PUSHDEF([ac_var], [ac_cv_func_$2])dnl
1489         AC_CACHE_CHECK([for $2], ac_var, [
1490                 dnl AC_LANG_FUNC_LINK_TRY
1491                 AC_LINK_IFELSE([AC_LANG_PROGRAM([$1
1492 #undef $2
1493 char $2 ();
1494                         ], [
1495 char (*f) () = $2;
1496 return f != $2;
1497                         ])], [
1498                         AS_VAR_SET(ac_var, [yes])], [
1499                         AS_VAR_SET(ac_var, [no])])])
1500
1501         AS_IF([test AS_VAR_GET(ac_var) = "yes"], [$3], [$4])
1502         AS_VAR_POPDEF([ac_var])
1503 ])dnl SXE_CHECK_FUNC
1504
1505
1506
1507 AC_DEFUN([SXE_CHECK_C99_NJSF], [dnl
1508         dnl If we have a compiler that could do c99 do try to add the flag
1509         if test "$__GCC3" = "yes" ; then
1510                 SXE_APPEND_UNDUP("-std=c99", c_switch_site)
1511                 AC_MSG_CHECKING([for C99 support])
1512                 save_c_switch_site=$c_switch_site
1513                 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1514 #include <stdlib.h>
1515 ]],[[
1516 return 0;
1517 ]])],  [AC_MSG_RESULT(yes)
1518         have_c99="yes"],
1519        [c_switch_site=$sace_c_switch_site
1520                 AC_MSG_RESULT(no)
1521                 AC_MSG_WARN([C99 not supported, reverting option append])
1522                 have_c99="no"])
1523         elif test "$__SUNPRO_C" = "yes" ; then
1524                 AC_MSG_CHECKING([for C99 support])
1525                 save_c_switch_site=$c_switch_site
1526                 SXE_APPEND_UNDUP("-xc99", c_switch_site)
1527                 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1528 #include <stdlib.h>
1529 ]],[[
1530 return 0;
1531 ]])],  [AC_MSG_RESULT(yes)
1532                 have_c99="yes"],
1533        [c_switch_site=$sace_c_switch_site
1534                 AC_MSG_RESULT(no)
1535                 have_c99="no"])
1536         fi
1537 ])dnl SXE_CHECK_C99_NJSF
1538
1539
1540 AC_DEFUN([SXE_C_TYPEOF], [dnl
1541         dnl check for the typeof extension
1542         AC_MSG_CHECKING([for typeof])
1543         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
1544 int i; __typeof__(i) j;
1545 ]])], [typeofname="__typeof__"], [dnl else
1546                 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
1547 int i; typeof(i) j;
1548 ]])], [typeofname="typeof"], [typeofname=no])])
1549         AC_MSG_RESULT([$typeofname])
1550         if test "$typeofname" != "no"; then
1551                 AC_DEFINE_UNQUOTED([TYPEOF], [$typeofname],
1552                         [How to use the typeof extension.])
1553         fi
1554 ])dnl SXE_C_TYPEOF
1555
1556 AC_DEFUN([SXE_C_INLINE], [dnl
1557         AC_C_INLINE
1558         if test "$ac_cv_c_inline" != "no" -a "$GCC" = "yes"; then
1559                 SXE_ADD_CRUFT_OBJS([inline.o])
1560         fi
1561 ])dnl SXE_C_INLINE
1562
1563
1564 AC_DEFUN([SXE_CHECK_BROKEN_RESTRICT], [dnl
1565         AC_MSG_CHECKING([support for restrict keyword])
1566         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
1567 extern void f(void*restrict[]);
1568 ]])], [have_restrict="yes"], [have_restrict="no"])
1569         if test "$have_restrict" = "no"; then
1570                 AC_DEFINE_UNQUOTED([restrict], [],
1571                         [Define restrict to nothing])
1572         fi
1573         AC_MSG_RESULT([$typeofname])
1574 ])dnl SXE_CHECK_BROKEN_RESTRICT 
1575
1576 dnl recommended interface macros
1577 ## compiler wrapper
1578 AC_DEFUN([SXE_CHECK_CC], [dnl
1579
1580         AC_PROG_CPP
1581         AC_HEADER_STDC
1582         AC_PROG_CC([gcc icc cc])
1583         dnl AC_PROG_CC_STDC
1584         AC_PROG_CC_C99
1585
1586         ## check for machine and architecture
1587         SXE_CHECK_MACHARCH
1588
1589         ## check for C compiler characteristics
1590         SXE_CHECK_CC_VERSION
1591         if test "$GCC" = "yes"; then
1592                 SXE_CHECK_BROKEN_GCC
1593         fi
1594         AC_C_RESTRICT
1595         if test "$ac_cv_prog_cc_c99" != ""; then
1596                 SXE_CHECK_BROKEN_RESTRICT
1597         fi
1598
1599         ## check for libc
1600         SXE_CHECK_LIBC
1601         SXE_CHECK_LIBC_VERSION
1602         dnl Non-ordinary link usually requires -lc
1603         if test "$ordinary_link" = "no" -a -z "$libs_standard"; then
1604                 libs_standard="-lc"
1605         fi
1606
1607         SXE_CHECK_CC_HACKS
1608         SXE_CHECK_CC_CHAR
1609         SXE_CHECK_CC_NESTED_FUNS
1610
1611         ## Canonicalize the configuration name.
1612         ## Commented out, lets see if anything breaks. --SY.
1613         ## SXE_STRIP_4TH_COMPONENT(ac_cv_build_alias)
1614         ## SXE_STRIP_4TH_COMPONENT(ac_cv_build)
1615         AC_SUBST([configuration], [$ac_cv_build])
1616
1617         AM_PROG_CC_C_O
1618
1619 ])dnl SXE_CHECK_CC
1620
1621
1622 AC_DEFUN([SXE_CHECK_CFLAGS], [dnl
1623         dnl #### This may need to be overhauled so that all of SXEMACS_CC's flags
1624         dnl are handled separately, not just the xe_cflags_warning stuff.
1625
1626         ## Use either command line flag, environment var, or autodetection
1627         if test "$with_ridiculously_aggressive_optimisations" = "yes"; then
1628                 CFLAGS=""
1629                 SXE_DEBUGFLAGS
1630                 SXE_WARNFLAGS
1631                 SXE_OPTIFLAGS
1632                 SXE_FEATFLAGS
1633                 SXE_CFLAGS="$debugflags $featflags $optiflags $warnflags"
1634         elif test "$CFLAGS_uspecified_p" = "no" -o \
1635                 "$ac_test_CFLAGS" != "set"; then
1636                 SXE_DEBUGFLAGS
1637                 SXE_WARNFLAGS
1638                 SXE_FEATFLAGS
1639
1640                 ## the old settings
1641                 ## Following values of CFLAGS are known to work well.
1642                 ## Should we take debugging options into consideration?
1643                 if test "$GCC" = "yes"; then
1644                         optiflags="-O3"
1645                 elif test "$__SUNPRO_C" = "yes"; then
1646                         case "$opsys" in
1647                         sol2    ) optiflags="-xO4" ;;
1648                         sunos4* ) optiflags="-xO2" ;;
1649                         esac
1650                 elif test "$__DECC" = "yes"; then
1651                         optiflags="-O3"
1652                 elif test "$CC" = "xlc"; then
1653                         optiflags="-g -O3 -qstrict -qnoansialias -qlibansi -qro -qmaxmem=20000"
1654                 elif test "$__ICC" = "yes"; then
1655                         optiflags="-g -O3 -Ob2"
1656                 ### Add optimal CFLAGS support for other compilers HERE!
1657                 else
1658                         optiflags="-O" ## The only POSIX-approved flag
1659                 fi
1660
1661                 SXE_CFLAGS="$debugflags $featflags $optiflags $warnflags"
1662         else
1663                 SXE_CFLAGS=${USER_CFLAGS}
1664                 featflags=""
1665                 debugflags=""
1666                 optiflags=""
1667                 warnflags=""
1668         fi
1669
1670         ## unset the werror flag again
1671         SXE_LANG_WERROR([off])
1672
1673         CFLAGS="$SXE_CFLAGS"
1674         AC_MSG_CHECKING([for preferred CFLAGS])
1675         AC_MSG_RESULT([${SXE_CFLAGS}])
1676
1677         AC_MSG_NOTICE([
1678 If you wish to ADD your own flags you want to stop here and rerun the
1679 configure script like so:
1680   configure CFLAGS=<to-be-added-flags>
1681
1682 You can always override the determined CFLAGS, partially or totally,
1683 using
1684   make -C <directory> CFLAGS=<your-own-flags> [target]
1685 or
1686   make CFLAGS=<your-own-flags> [target]
1687 respectively
1688
1689 NOTE: -C <directory> option is not available on all systems
1690                 ])
1691
1692         LDFLAGS="${ldflags} ${ac_cv_env_LDFLAGS_value}"
1693         AC_MSG_CHECKING([for preferred LDFLAGS])
1694         AC_MSG_RESULT([${LDFLAGS}])
1695 ])dnl SXE_CHECK_CFLAGS
1696
1697
1698 AC_DEFUN([SXE_CC_LIBRARY_PATH], [dnl
1699         ## arg #1 variable to store name in,
1700         ## if omitted defaults to `sxe_cv_tmp_gcc_library_path'
1701         pushdef([VAR], ifelse($1,[],[sxe_cv_tmp_gcc_library_path],$1))
1702
1703         for i in ${LDFLAGS}; do
1704                 case $i in
1705                 -L*)
1706                         __LP=${i:2}:${__LP:-.}
1707                         ;;
1708                 *)
1709                         ;;
1710                 esac
1711         done
1712         SXE_EXPAND_VAR([${libdir}], [__ld])
1713         []VAR[]=${__ld:-.}:${__LP:-.}
1714
1715         popdef([VAR])
1716 ])dnl SXE_CC_LIBRARY_PATH
1717
1718
1719 AC_DEFUN([SXE_CC_LIBRARY_LOCATION], [dnl
1720         ## arg #1 the library to seek after
1721         ## arg #2 (optional) checking message
1722         pushdef([liborig], [$1])
1723         pushdef([liblink], patsubst(patsubst(liborig, [lib], [-l]), [\.[^.]+$], []))
1724         pushdef([libname], translit(liborig, [-,.], [___]))
1725         pushdef([LIBNAME], translit(liborig, [-,.a-z], [___A-Z]))
1726         pushdef([libchk], ifelse($2,[],[for absolute path of ]liborig,$2))
1727
1728         ## use gcc's -print-file-name
1729         AC_REQUIRE([SXE_CC_LIBRARY_PATH])
1730         AC_MSG_CHECKING([]libchk[])
1731         ## not protected against other CCs (yet)!
1732         sxe_cv_loc_[]libname[]=$(LIBRARY_PATH=${sxe_cv_tmp_gcc_library_path} \
1733                 ${CC} -print-file-name=[]liborig[])
1734         AC_MSG_RESULT(${sxe_cv_loc_[]libname[]})
1735
1736         []LIBNAME[]=${sxe_cv_loc_[]libname[]}
1737
1738         popdef([libchk])
1739         popdef([liblink])
1740         popdef([liborig])
1741         popdef([libname])
1742         popdef([LIBNAME])
1743 ])dnl SXE_CC_LIBRARY_LOCATION
1744
1745
1746 AC_DEFUN([SXE_CHECK_ANON_STRUCTS], [
1747         AC_MSG_CHECKING([whether C compiler can cope with anonymous structures])
1748         AC_LANG_PUSH(C)
1749         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1750 union __test_u {
1751         int i;
1752         struct {
1753                 char c;
1754                 char padc;
1755                 short int pads;
1756         };
1757 };
1758         ]], [[
1759         union __test_u tmp = {.c = '4'};
1760         ]])], [
1761                 sxe_cv_have_anon_structs="yes"
1762         ], [
1763                 sxe_cv_have_anon_structs="no"
1764         ])
1765         AC_MSG_RESULT([${sxe_cv_have_anon_structs}])
1766
1767         if test "${sxe_cv_have_anon_structs}" = "yes"; then
1768                 AC_DEFINE([HAVE_ANON_STRUCTS], [1], [
1769                         Whether c1x anon structs work])
1770                 $1
1771                 :
1772         else
1773                 $2
1774                 :
1775         fi
1776         AC_LANG_POP()
1777 ])dnl SXE_CHECK_ANON_STRUCTS
1778
1779 dnl sxe-compiler.m4 ends here