Merge branch 'bldchn' into next
[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         ## icc specific
685         SXE_CHECK_COMPILER_FLAGS([-diag-disable 10237], [dnl
686                 warnflags="${warnflags} -diag-disable 10237"], [
687                 SXE_CHECK_COMPILER_FLAGS([-wd 10237], [dnl
688                         warnflags="${warnflags} -wd 10237"])])
689
690         AC_MSG_CHECKING([for preferred warning flags])
691         AC_MSG_RESULT([${warnflags}])
692 ])dnl SXE_WARNFLAGS
693
694 AC_DEFUN([SXE_OPTIFLAGS], [dnl
695         optiflags=""
696         SXE_COMPILER_VENDOR
697
698         case $sxe_cv_c_compiler_vendor in
699         dnl (
700         dec)
701                 SXE_CC_MAXOPT_DEC
702                 ;;
703         dnl (
704         sun)
705                 SXE_CC_MAXOPT_SUN
706                 ;;
707         dnl (
708         hp)
709                 SXE_CC_MAXOPT_HP
710                 ;;
711         dnl (
712         ibm)
713                 SXE_CC_MAXOPT_IBM
714                 ;;
715         dnl (
716         intel)
717                 SXE_CC_MAXOPT_INTEL
718                 ;;
719         dnl (
720         gnu)
721                 SXE_CC_MAXOPT_GNU
722                 ;;
723         esac
724
725         AC_MSG_CHECKING([for preferred optimising flags])
726         AC_MSG_RESULT([$optiflags])
727         if test -z "$optiflags"; then
728                 echo ""
729                 echo "********************************************************"
730                 echo "* WARNING: Don't know the best CFLAGS for this system  *"
731                 echo "* Use ./configure CFLAGS=... to specify your own flags *"
732                 echo "* (otherwise, a default of CFLAGS=-O3 will be used)    *"
733                 echo "********************************************************"
734                 echo ""
735                 optiflags="-O3"
736         fi
737         
738         SXE_CHECK_COMPILER_FLAGS([$optiflags], [:], [
739                 echo ""
740                 echo "********************************************************"
741                 echo "* WARNING: The guessed CFLAGS don't seem to work with  *"
742                 echo "* your compiler.                                       *"
743                 echo "* Use ./configure CFLAGS=... to specify your own flags *"
744                 echo "********************************************************"
745                 echo ""
746                 optiflags=""
747         ])
748 ])dnl SXE_OPTIFLAGS
749
750 AC_DEFUN([SXE_FEATFLAGS], [dnl
751         ## default flags for needed features
752
753         ## we need nested functions ... hm, i dont think we do
754         ## but it's always nice to have them
755         SXE_CHECK_COMPILER_FLAGS([-fnested-functions], [
756                 featflags="$featflags -fnested-functions"])
757
758         ## recent gentoos went ballistic again, they compile PIE gcc's
759         ## but there's no way to turn that misconduct off ...
760         ## however I've got one report about a working PIE build
761         ## we'll just check for -nopie here, if it works, we turn it on
762         ## (and hence PIE off) and hope bug 16 remains fixed
763         SXE_CHECK_COMPILER_FLAGS([-nopie],
764                 [featflags="$featflags -nopie"])
765
766         ## icc and gcc related
767         ## check if some stuff can be staticalised
768         ## actually requires SXE_WARNFLAGS so warnings would be disabled
769         ## that affect the outcome of the following tests
770         SXE_CHECK_COMPILER_FLAGS([-static-intel], [
771                 featflags="${featflags} -static-intel"], [:], [${SXE_CFLAGS}])
772         SXE_CHECK_COMPILER_FLAGS([-static-libgcc], [
773                 featflags="${featflags} -static-libgcc"], [:], [${SXE_CFLAGS}])
774 ])dnl SXE_FEATFLAGS
775
776
777 AC_DEFUN([SXE_COMPILER_VENDOR], [dnl
778 AC_CACHE_CHECK([for _AC_LANG compiler vendor],
779         sxe_cv_[]_AC_LANG_ABBREV[]_compiler_vendor,
780         [sxe_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown
781         # note: don't check for gcc first since some other compilers define __GNUC__
782         for ventest in \
783                 intel:__ICC,__ECC,__INTEL_COMPILER \
784                 ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ \
785                 gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC \
786                 hp:__HP_cc,__HP_aCC \
787                 dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER \
788                 borland:__BORLANDC__,__TURBOC__ \
789                 comeau:__COMO__ \
790                 cray:_CRAYC \
791                 kai:__KCC \
792                 lcc:__LCC__ \
793                 metrowerks:__MWERKS__ \
794                 sgi:__sgi,sgi \
795                 microsoft:_MSC_VER \
796                 watcom:__WATCOMC__ \
797                 portland:__PGI; do
798
799                 vencpp="defined("$(echo \
800                         $ventest | cut -d: -f2 | sed "s/,/) || defined(/g")")"
801                 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[
802 #if !($vencpp)
803       thisisanerror;
804 #endif
805                         ])], [sxe_cv_]_AC_LANG_ABBREV[_compiler_vendor=$(echo $ventest | cut -d: -f1); break; ])
806         done
807         ])
808 ])dnl SXE_COMPILER_VENDOR
809
810
811 AC_DEFUN([SXE_CC_MAXOPT_DEC], [dnl
812         optiflags="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host"
813         if test "$acx_maxopt_portable" = "no"; then
814                 optiflags="$optiflags -arch host"
815         fi
816 ])dnl SXE_CC_MAXOPT_DEC
817
818 AC_DEFUN([SXE_CC_MAXOPT_SUN], [dnl
819         optiflags="-native -fast -xO5 -dalign"
820         if test "$acx_maxopt_portable" = "yes"; then
821                 optiflags="$optiflags -xarch=generic"
822         fi
823 ])dnl SXE_CC_MAXOPT_SUN
824
825 AC_DEFUN([SXE_CC_MAXOPT_HP], [dnl
826         optiflags="+Oall +Optrs_ansi +DSnative"
827         if test "$acx_maxopt_portable" = "yes"; then
828                 optiflags="$optiflags +DAportable"
829         fi
830 ])dnl SXE_CC_MAXOPT_HP
831
832 AC_DEFUN([SXE_CC_MAXOPT_IBM], [dnl
833         if test "$acx_maxopt_portable" = "no"; then
834                 xlc_opt="-qarch=auto -qtune=auto"
835         else
836                 xlc_opt="-qtune=auto"
837         fi
838         SXE_CHECK_COMPILER_FLAGS([$xlc_opt],
839                 [optiflags="-O3 -qansialias -w $xlc_opt"],
840                 [optiflags="-O3 -qansialias -w"
841                 echo "******************************************************"
842                 echo "*  You seem to have the IBM  C compiler.  It is      *"
843                 echo "*  recommended for best performance that you use:    *"
844                 echo "*                                                    *"
845                 echo "*    CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *"
846                 echo "*                      ^^^        ^^^                *"
847                 echo "*  where xxx is pwr2, pwr3, 604, or whatever kind of *"
848                 echo "*  CPU you have.  (Set the CFLAGS environment var.   *"
849                 echo "*  and re-run configure.)  For more info, man cc.    *"
850                 echo "******************************************************"])
851 ])dnl SXE_CC_MAXOPT_IBM
852
853 AC_DEFUN([SXE_CC_MAXOPT_INTEL], [dnl
854         optiflags="-O3 -ansi_alias"
855         if test "$acx_maxopt_portable" = "no"; then
856                 icc_archflag=unknown
857                 icc_flags=""
858                 case "$host_cpu" in
859                 ## (
860                 i686*|x86_64*)
861                         # icc accepts gcc assembly syntax,
862                         # so these should work:
863                         SXE_CHECK_CPU_PC
864                         ;;
865                 esac
866                 if test "$icc_flags" != ""; then
867                         for flag in $icc_flags; do
868                                 SXE_CHECK_COMPILER_FLAGS([$flag],
869                                         [icc_archflag=$flag; break])
870                         done
871                 fi
872                 AC_MSG_CHECKING([for icc architecture flag])
873                 AC_MSG_RESULT([$icc_archflag])
874                 if test "$icc_archflag" != "unknown"; then
875                         optiflags="$optiflags $icc_archflag"
876                 fi
877         fi
878 ])dnl SXE_CC_MAXOPT_INTEL
879
880 AC_DEFUN([SXE_CC_MAXOPT_GNU], [dnl
881         ## default optimisation flags for gcc on all systems
882         ## this is the preferred compiler
883         optiflags="-O3"
884
885         AC_REQUIRE([SXE_CHECK_SIMD_EXTENSIONS])
886         optiflags="$optiflags $simdflags"
887
888         ## note that we enable "unsafe" fp optimisation with other compilers, too
889         SXE_CHECK_COMPILER_FLAGS([-ftree-vectorize],
890                 [optiflags="$optiflags -ftree-vectorize"])
891
892         ## check for -march and/or -mtune
893         SXE_GCC_ARCHFLAG([$acx_maxopt_portable])
894         optiflags="$optiflags $archflags"
895
896         ## a softer variant of omit-frame-pointer
897         SXE_CHECK_COMPILER_FLAGS([-momit-leaf-frame-pointer],
898                 [optiflags="$optiflags -momit-leaf-frame-pointer"])
899
900         ## check for openmp support
901         ## there are: -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp
902         SXE_CHECK_COMPILER_FLAGS([-fopenmp])
903
904         if test "$sxe_cv_c_flags__fopenmp" = "yes" -a "$with_omp"; then
905                 SXE_MSG_CHECKING([whether it is safe to use -fopenmp])
906                 case "$compiler_version" in
907                 gcc*\ 4.4.*)
908                         optiflags="$optiflags -fopenmp"
909                         sxe_cv_feat_omp="yes"
910                         SXE_MSG_RESULT([yes])
911                         ;;
912                 *)
913                         SXE_MSG_RESULT([no])
914                         ;;
915                 esac
916         fi
917
918         ## these belong to the corresponding MAXOPT macro
919 dnl     SXE_CHECK_COMPILER_FLAGS([-xopenmp], [
920 dnl             optiflags="$optiflags -xopenmp"
921 dnl             sxe_cv_feat_omp="yes"
922 dnl             ])
923 dnl     SXE_CHECK_COMPILER_FLAGS([-openmp], [
924 dnl             optiflags="$optiflags -openmp"
925 dnl             sxe_cv_feat_omp="yes"
926 dnl             ])
927 dnl     SXE_CHECK_COMPILER_FLAGS([-mp], [
928 dnl             optiflags="$optiflags -mp"
929 dnl             sxe_cv_feat_omp="yes"
930 dnl             ])
931 dnl     SXE_CHECK_COMPILER_FLAGS([-omp], [
932 dnl             optiflags="$optiflags -omp"
933 dnl             sxe_cv_feat_omp="yes"
934 dnl             ])
935 dnl     SXE_CHECK_COMPILER_FLAGS([-qsmp=omp], [
936 dnl             optiflags="$optiflags -qsmp=omp"
937 dnl             sxe_cv_feat_omp="yes"
938 dnl             ])
939         ## add -lgomp to ldflags
940         if test "$sxe_cv_feat_omp" = "yes"; then
941                 LDFLAGS="$LDFLAGS -lgomp"
942         fi
943
944         # -malign-double for x86 systems
945         SXE_CHECK_COMPILER_FLAGS([-malign-double])
946         ## won't add this one, since it is causing problems
947         ##      [optiflags="$optiflags -malign-double"])
948
949         ## would be nice to have this but it triggers too many
950         ## meaningless warnings
951 dnl     ## -fstrict-aliasing for gcc-2.95+
952 dnl     SXE_CHECK_COMPILER_FLAGS([-fstrict-aliasing],
953 dnl             [optiflags="$optiflags -fstrict-aliasing"])
954
955         SXE_CHECK_COMPILER_FLAGS([-fearly-inlining],
956                 [optiflags="$optiflags -fearly-inlining"])
957
958         SXE_CHECK_COMPILER_FLAGS([-fdelete-null-pointer-checks],
959                 [optiflags="$optiflags -fdelete-null-pointer-checks"])
960
961         SXE_CHECK_COMPILER_FLAGS([-fmodulo-sched],
962                 [optiflags="$optiflags -fmodulo-sched"])
963
964         SXE_CHECK_COMPILER_FLAGS([-fmudflap])
965         SXE_CHECK_COMPILER_FLAGS([-fmudflapth])
966         SXE_CHECK_COMPILER_FLAGS([-fmudflapir])
967         if test "$sxe_cv_c_flags__fmudflapth" -a \
968                 "$sxe_cv_c_flags__fmudflapir"; then
969                 ## preferred
970                 : ##optiflags="$optiflags -fmudflapth -fmudflapir"
971         elif test "$sxe_cv_c_flags__fmudflap" -a \
972                 "$sxe_cv_c_flags__fmudflapir"; then
973                 : ##optiflags="$optiflags -fmudflap -fmudflapir"
974         fi
975         SXE_CHECK_COMPILER_FLAGS([-fsection-anchors],
976                 [optiflags="$optiflags -fsection-anchors"])
977
978 dnl     ## actually this belongs to error-checking stuff
979 dnl     SXE_CHECK_COMPILER_FLAGS([-fstack-protector],
980 dnl             [optiflags="$optiflags -fstack-protector"])
981 dnl     if test "$sxe_cv_c_flags__fstack_protector" = "yes"; then
982 dnl             ## just check for ssp in this case
983 dnl             AC_CHECK_LIB([ssp], [__stack_chk_guard])
984 dnl     fi
985
986         SXE_CHECK_COMPILER_FLAGS([-fbranch-target-load-optimize])
987         SXE_CHECK_COMPILER_FLAGS([-fbranch-target-load-optimize2])
988         if test "$sxe_cv_c_flags__fbranch_target_load_optimize2" = "yes"; then
989                 optiflags="$optiflags -fbranch-target-load-optimize2"
990         elif test "$sxe_cv_c_flags__fbranch_target_load_optimize" = "yes"; then
991                 optiflags="$optiflags -fbranch-target-load-optimize"
992         fi
993
994         SXE_CHECK_COMPILER_FLAGS([-fgcse],
995                 [optiflags="$optiflags -fgcse"])
996         SXE_CHECK_COMPILER_FLAGS([-fgcse-lm],
997                 [optiflags="$optiflags -fgcse-lm"])
998         SXE_CHECK_COMPILER_FLAGS([-fgcse-sm],
999                 [optiflags="$optiflags -fgcse-sm"])
1000         SXE_CHECK_COMPILER_FLAGS([-fgcse-las],
1001                 [optiflags="$optiflags -fgcse-las"])
1002         SXE_CHECK_COMPILER_FLAGS([-fgcse-after-reload],
1003                 [optiflags="$optiflags -fgcse-after-reload"])
1004         SXE_CHECK_COMPILER_FLAGS([-funsafe-loop-optimizations],
1005                 [optiflags="$optiflags -funsafe-loop-optimizations"])
1006         SXE_CHECK_COMPILER_FLAGS([-funroll-loops],
1007                 [optiflags="$optiflags -funswitch-loops"])
1008         SXE_CHECK_COMPILER_FLAGS([-funswitch-loops],
1009                 [optiflags="$optiflags -funswitch-loops"])
1010         SXE_CHECK_COMPILER_FLAGS([-frename-registers],
1011                 [optiflags="$optiflags -frename-registers"])
1012
1013         ## maths speedup
1014         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-signaling-nans],
1015                 [optiflags="$optiflags -fno-signaling-nans"])
1016         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-trapping-math],
1017                 [optiflags="$optiflags -fno-trapping-math"])
1018         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-signed-zeros],
1019                 [optiflags="$optiflags -fno-signed-zeros"])
1020         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fassociative-math],
1021                 [optiflags="$optiflags -fassociative-math"])
1022         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-rounding-math],
1023                 [optiflags="$optiflags -fno-rounding-math"])
1024         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations -fno-math-errno],
1025                 [optiflags="$optiflags -fno-math-errno"])
1026         ## the same as the previous 5, but sometimes gcc doesn't know'em all
1027         SXE_CHECK_COMPILER_FLAGS([-funsafe-math-optimizations],
1028                 [optiflags="$optiflags -funsafe-math-optimizations"])
1029         ## another of these
1030         SXE_CHECK_COMPILER_FLAGS([-ffast-math],
1031                 [optiflags="$optiflags -ffast-math"])
1032         ## and yet some more
1033         SXE_CHECK_COMPILER_FLAGS([-mrecip],
1034                 [optiflags="$optiflags -mrecip"])
1035         SXE_CHECK_COMPILER_FLAGS([-msahf],
1036                 [optiflags="$optiflags -msahf"])
1037
1038         SXE_CHECK_COMPILER_FLAGS([-minline-all-stringops],
1039                 [optiflags="$optiflags -minline-all-stringops"])
1040
1041 ])dnl SXE_CC_MAXOPT_GNU
1042
1043
1044 ##### http://autoconf-archive.cryp.to/ax_check_compiler_flags.html
1045 ## renamed the prefix to SXE_
1046 AC_DEFUN([SXE_CHECK_COMPILER_FLAGS], [dnl
1047 dnl SXE_CHECK_COMPILER_FLAGS(<FLAG>, <ACTION-IF-FOUND>, <ACTION-IF-NOT-FOUND>,
1048 dnl     <ADDITIONAL-FLAGS>)
1049         AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1])
1050
1051         dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
1052         SXE_LANG_WERROR([push+on])
1053         AS_LITERAL_IF([$1], [
1054                 AC_CACHE_VAL(AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1), [
1055                         sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
1056                         _AC_LANG_PREFIX[]FLAGS="$4 $1"
1057                         AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
1058                                 AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="yes",
1059                                 AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="no")
1060                         _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])], [
1061                 sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
1062                 _AC_LANG_PREFIX[]FLAGS="$4 $1"
1063                 AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
1064                         eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="yes",
1065                         eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="no")
1066                 _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])
1067         eval sxe_check_compiler_flags=$AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)
1068         SXE_LANG_WERROR([pop])
1069
1070         AC_MSG_RESULT([$sxe_check_compiler_flags])
1071         if test "$sxe_check_compiler_flags" = "yes"; then
1072                 m4_default([$2], :)
1073         else
1074                 m4_default([$3], :)
1075         fi
1076 ])dnl SXE_CHECK_COMPILER_FLAGS
1077
1078
1079 AC_DEFUN([SXE_CHECK_COMPILER_XFLAG], [dnl
1080         ## if libtool then
1081         case "${LD}" in
1082         *"libtool"*)
1083                 SXE_CHECK_COMPILER_FLAGS([-XCClinker], [
1084                         XFLAG="-XCClinker"], [
1085                         XFLAG=""])
1086                 ;;
1087         *"ld"*)
1088                 ## no XFLAG needed
1089                 XFLAG=""
1090                 ;;
1091         *)
1092                 SXE_CHECK_COMPILER_FLAGS([-Xlinker], [
1093                         XFLAG="-Xlinker"], [
1094                         XFLAG=""])
1095                 ;;
1096         esac
1097 ])dnl SXE_CHECK_COMPILER_XFLAG
1098
1099
1100 AC_DEFUN([SXE_CHECK_CPU], [dnl
1101         case "$host_cpu" in
1102         dnl (
1103         i*86*|x86_64*)
1104                 ## pc-style hardware
1105                 SXE_CHECK_CPU_PC
1106                 ;;
1107         dnl (
1108         sparc*)
1109                 ## sparc stuff
1110                 SXE_CHECK_CPU_SPARC
1111                 ;;
1112         dnl (
1113         alpha*)
1114                 ## alpha cruft
1115                 SXE_CHECK_CPU_ALPHA
1116                 ;;
1117         dnl (
1118         powerpc*)
1119                 ## ya know what
1120                 SXE_CHECK_CPU_PPC
1121                 ;;
1122         esac
1123 ])dnl SXE_CHECK_CPU
1124
1125 AC_DEFUN([SXE_CHECK_CPU_SPARC], [dnl
1126         AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag],
1127                 [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/])
1128         cputype=$((((grep cpu /proc/cpuinfo | cut -d: -f2) ; \
1129                 ($PRTDIAG -v |grep -i sparc) ; \
1130                 grep -i cpu "/var/run/dmesg.boot" ) | head -n 1) 2> /dev/null)
1131         cputype=$(echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters)
1132
1133         case "$cputype" in
1134         dnl (
1135         *ultrasparciv*)
1136                 sxe_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9"
1137                 ;;
1138         dnl (
1139         *ultrasparciii*)
1140                 sxe_gcc_arch="ultrasparc3 ultrasparc v9"
1141                 ;;
1142         dnl (
1143         *ultrasparc*)
1144                 sxe_gcc_arch="ultrasparc v9"
1145                 ;;
1146         dnl (
1147         *supersparc*|*tms390z5[[05]]*)
1148                 sxe_gcc_arch="supersparc v8"
1149                 ;;
1150         dnl (
1151         *hypersparc*|*rt62[[056]]*)
1152                 sxe_gcc_arch="hypersparc v8"
1153                 ;;
1154         dnl (
1155         *cypress*)
1156                 sxe_gcc_arch=cypress
1157                 ;;
1158         esac
1159 ])dnl SXE_CHECK_CPU_SPARC
1160
1161 AC_DEFUN([SXE_CHECK_CPU_ALPHA], [dnl
1162         case "$host_cpu" in
1163         dnl (
1164         alphaev5)
1165                 sxe_gcc_arch="ev5"
1166                 ;;
1167         dnl (
1168         alphaev56)
1169                 sxe_gcc_arch="ev56"
1170                 ;;
1171         dnl (
1172         alphapca56)
1173                 sxe_gcc_arch="pca56 ev56"
1174                 ;;
1175         dnl (
1176         alphapca57)
1177                 sxe_gcc_arch="pca57 pca56 ev56"
1178                 ;;
1179         dnl (
1180         alphaev6)
1181                 sxe_gcc_arch="ev6"
1182                 ;;
1183         dnl (
1184         alphaev67)
1185                 sxe_gcc_arch="ev67"
1186                 ;;
1187         dnl (
1188         alphaev68)
1189                 sxe_gcc_arch="ev68 ev67"
1190                 ;;
1191         dnl (
1192         alphaev69)
1193                 sxe_gcc_arch="ev69 ev68 ev67"
1194                 ;;
1195         dnl (
1196         alphaev7)
1197                 sxe_gcc_arch="ev7 ev69 ev68 ev67"
1198                 ;;
1199         dnl (
1200         alphaev79)
1201                 sxe_gcc_arch="ev79 ev7 ev69 ev68 ev67"
1202                 ;;
1203         esac
1204 ])dnl SXE_CHECK_CPU_ALPHA
1205
1206 AC_DEFUN([SXE_CHECK_CPU_PPC], [dnl
1207         cputype=$(((grep cpu /proc/cpuinfo | head -n 1 | \
1208                 cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; \
1209                 /usr/bin/machine ; \
1210                 /bin/machine; \
1211                 grep CPU /var/run/dmesg.boot | \
1212                 head -n 1 | cut -d" " -f2) 2> /dev/null)
1213         cputype=$(echo $cputype | sed -e 's/ppc//g;s/ *//g')
1214
1215         case "$cputype" in
1216         dnl (
1217         *750*)
1218                 sxe_gcc_arch="750 G3"
1219                 ;;
1220         dnl (
1221         *740[[0-9]]*)
1222                 sxe_gcc_arch="$cputype 7400 G4"
1223                 ;;
1224         dnl (
1225         *74[[4-5]][[0-9]]*)
1226                 sxe_gcc_arch="$cputype 7450 G4"
1227                 ;;
1228         dnl (
1229         *74[[0-9]][[0-9]]*)
1230                 sxe_gcc_arch="$cputype G4"
1231                 ;;
1232         dnl (
1233         *970*)
1234                 sxe_gcc_arch="970 G5 power4"
1235                 ;;
1236         dnl (
1237         *POWER4*|*power4*|*gq*)
1238                 sxe_gcc_arch="power4 970"
1239                 ;;
1240         dnl (
1241         *POWER5*|*power5*|*gr*|*gs*)
1242                 sxe_gcc_arch="power5 power4 970"
1243                 ;;
1244         dnl (
1245         603ev|8240)
1246                 sxe_gcc_arch="$cputype 603e 603"
1247                 ;;
1248         dnl (
1249         *)
1250                 sxe_gcc_arch="$cputype"
1251                 ;;
1252         esac
1253         sxe_gcc_arch="$sxe_gcc_arch powerpc"
1254 ])dnl SXE_CHECK_CPU_PPC
1255
1256 AC_DEFUN([SXE_CHECK_CPU_PC], [dnl
1257         ## use cpuid codes,
1258         AC_REQUIRE([SXE_PROC_CPUID])
1259
1260         case "$sxe_cv_proc_cpuid_00000000" in
1261         dnl (
1262         *:756e6547:*:*)
1263                 ## Intel
1264                 case "$sxe_cv_proc_cpuid_00000001" in
1265                 dnl (
1266                 *5[[48]]?:*:*:*)
1267                         sxe_gcc_arch="pentium-mmx pentium"
1268                         ;;
1269                 dnl (
1270                 *5??:*:*:*)
1271                         sxe_gcc_arch="pentium"
1272                         ;;
1273                 dnl (
1274                 *6[[3456]]?:*:*:*)
1275                         sxe_gcc_arch="pentium2 pentiumpro"
1276                         ;;
1277                 dnl (
1278                 *6a?:*[[01]]:*:*)
1279                         sxe_gcc_arch="pentium2 pentiumpro"
1280                         ;;
1281                 dnl (
1282                 *6a?:*[[234]]:*:*)
1283                         sxe_gcc_arch="pentium3 pentiumpro"
1284                         icc_flags="-xK"
1285                         ;;
1286                 dnl (
1287                 *69?:*:*:*)
1288                         sxe_gcc_arch="pentium-m pentium3 pentiumpro"
1289                         icc_flags="-xK"
1290                         ;;
1291                 dnl (
1292                 *6d?:*:*:*)
1293                         sxe_gcc_arch="pentium-m pentium3 pentiumpro"
1294                         ;;
1295                 dnl (
1296                 *6[[78b]]?:*:*:*)
1297                         sxe_gcc_arch="pentium3 pentiumpro"
1298                         icc_flags="-xK"
1299                         ;;
1300                 dnl (
1301                 *6f?:*:*:*)
1302                         ## intel core 2 duo
1303                         sxe_gcc_arch="nocona pentium4 pentiumpro"
1304                         ## icc flags here
1305                         ## icc_flags="??"
1306                         ;;
1307                 dnl (
1308                 *6??:*:*:*)
1309                         sxe_gcc_arch="pentiumpro"
1310                         ;;
1311                 dnl (
1312                 *f3[[347]]:*:*:*|*f4[1347]:*:*:*)
1313                         icc_flags="-xP -xN -xW -xK"
1314                         case "$host_cpu" in
1315                         dnl (
1316                         x86_64*)
1317                                 sxe_gcc_arch="nocona pentium4 pentiumpro"
1318                                 ;;
1319                         dnl (
1320                         *)
1321                                 sxe_gcc_arch="prescott pentium4 pentiumpro"
1322                                 ;;
1323                         esac
1324                         ;;
1325                 dnl (
1326                 *f??:*:*:*)
1327                         icc_flags="-xN -xW -xK"
1328                         sxe_gcc_arch="pentium4 pentiumpro"
1329                         ;;
1330                 esac
1331                 ;;
1332         dnl (
1333         *:68747541:*:*)
1334                 ## AMD
1335                 case "$sxe_cv_proc_cpuid_00000001" in
1336                 dnl (
1337                 *5[[67]]?:*:*:*)
1338                         sxe_gcc_arch="k6"
1339                         ;;
1340                 dnl (
1341                 *5[[8d]]?:*:*:*)
1342                         sxe_gcc_arch="k6-2 k6"
1343                         ;;
1344                 dnl (
1345                 *5[[9]]?:*:*:*)
1346                         sxe_gcc_arch="k6-3 k6"
1347                         ;;
1348                 dnl (
1349                 *60?:*:*:*)
1350                         sxe_gcc_arch="k7"
1351                         ;;
1352                 dnl (
1353                 *6[[12]]?:*:*:*)
1354                         sxe_gcc_arch="athlon k7"
1355                         ;;
1356                 dnl (
1357                 *6[[34]]?:*:*:*)
1358                         sxe_gcc_arch="athlon-tbird k7"
1359                         ;;
1360                 dnl (
1361                 *67?:*:*:*)
1362                         sxe_gcc_arch="athlon-4 athlon k7"
1363                         ;;
1364                 dnl (
1365                 *6[[68a]]?:*:*:*)
1366                         case "$sxe_cv_proc_cpuid_80000006" in
1367                         dnl (
1368                         *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256
1369                                 sxe_gcc_arch="athlon-xp athlon-4 athlon k7"
1370                                 ;;
1371                         dnl (
1372                         *)
1373                                 sxe_gcc_arch="athlon-4 athlon k7"
1374                                 ;;
1375                         esac
1376                         ;;
1377                 dnl (
1378                 *f[[4cef8b]]?:*:*:*)
1379                         sxe_gcc_arch="athlon64 k8"
1380                         ;;
1381                 dnl (
1382                 *f5?:*:*:*)
1383                         sxe_gcc_arch="opteron k8"
1384                         ;;
1385                 dnl (
1386                 *f7?:*:*:*)
1387                         sxe_gcc_arch="athlon-fx opteron k8"
1388                         ;;
1389                 dnl (
1390                 *f??:*:*:*)
1391                         sxe_gcc_arch="k8"
1392                         ;;
1393                 esac
1394                 ;;
1395         dnl (
1396         *:746e6543:*:*)
1397                 # IDT
1398                 case "$sxe_cv_proc_cpuid_00000001" in
1399                 dnl (
1400                 *54?:*:*:*)
1401                         sxe_gcc_arch="winchip-c6"
1402                         ;;
1403                 dnl (
1404                 *58?:*:*:*)
1405                         sxe_gcc_arch="winchip2"
1406                         ;;
1407                 dnl (
1408                 *6[[78]]?:*:*:*)
1409                         sxe_gcc_arch="c3"
1410                         ;;
1411                 dnl (
1412                 *69?:*:*:*)
1413                         sxe_gcc_arch="c3-2 c3"
1414                         ;;
1415                 esac
1416                 ;;
1417         esac
1418
1419         ## nothing found? => fallback
1420         if test -z "$sxe_gcc_arch"; then
1421                 ## apply a generic strategy
1422                 case "$host_cpu" in
1423                 i586*)
1424                         sxe_gcc_arch="pentium"
1425                         ;;
1426                 i686*)
1427                         sxe_gcc_arch="pentiumpro"
1428                         ;;
1429                 esac
1430         fi
1431 ])dnl SXE_CHECK_CPU_PC
1432
1433
1434 AC_DEFUN([SXE_GCC_ARCHFLAG], [dnl
1435         AC_REQUIRE([AC_PROG_CC])
1436         AC_REQUIRE([AC_CANONICAL_HOST])
1437
1438         AC_ARG_WITH([gcc-arch], AS_HELP_STRING([--with-gcc-arch=<arch>], [
1439                         use architecture <arch> for gcc -march/-mtune,
1440                         instead of guessing]),
1441                 [sxe_gcc_arch=$withval], [sxe_gcc_arch=yes])
1442
1443         AC_MSG_CHECKING([for gcc architecture flag])
1444         AC_MSG_RESULT([])
1445         AC_CACHE_VAL([sxe_cv_gcc_archflag], [
1446                 ## initialise to unknown
1447                 sxe_cv_gcc_archflag="unknown"
1448
1449                 if test "$GCC" = yes; then
1450                         if test "$sxe_gcc_arch" = "yes" -a \
1451                                 "$cross_compiling" = "no"; then
1452                                 sxe_gcc_arch=""
1453                                 SXE_CHECK_CPU
1454                         fi
1455
1456                         if test -n "$sxe_gcc_arch" -a "$sxe_gcc_arch" != "no"; then
1457                                 for arch in $sxe_gcc_arch; do
1458                                         if test "[]m4_default([$1],yes)" = "yes"; then
1459                                                 ## if we require portable code
1460                                                 archflags="-mtune=$arch"
1461                                                 ## -mcpu=$arch and m$arch generate
1462                                                 ## nonportable code on every arch except
1463                                                 ## x86.  And some other arches
1464                                                 ## (e.g. Alpha) don't accept -mtune.
1465                                                 ## Grrr.
1466                                                 case "$host_cpu" in
1467                                                 dnl (
1468                                                 i*86|x86_64*)
1469                                                         archflags="$archflags -mcpu=$arch -m$arch"
1470                                                         ;;
1471                                                 esac
1472                                         else
1473                                                 archflags="-march=$arch -mcpu=$arch -m$arch"
1474                                         fi
1475                                         for flag in $archflags; do
1476                                                 SXE_CHECK_COMPILER_FLAGS([$flag],
1477                                                         [sxe_cv_gcc_archflag="$flag"; break])
1478                                         done
1479                                         if test "$sxe_cv_gcc_archflag" != "unknown"; then
1480                                                 break
1481                                         fi
1482                                 done
1483                         fi
1484                 fi
1485                 ])
1486
1487         AC_MSG_CHECKING([for gcc architecture flag])
1488         AC_MSG_RESULT([$sxe_cv_gcc_archflag])
1489         if test "$sxe_cv_gcc_archflag" = "unknown"; then
1490                 m4_default([$3],:)
1491         else
1492                 m4_default([$2], [archflags="$sxe_cv_gcc_archflag"])
1493         fi
1494 ])dnl SXE_GCC_ARCHFLAG
1495
1496
1497 #### http://autoconf-archive.cryp.to/sxe_check_define.html
1498 AC_DEFUN([SXE_CHECK_DEFINED], [dnl
1499         AS_VAR_PUSHDEF([ac_var],[ac_cv_defined_$2])dnl
1500
1501         AC_CACHE_CHECK([for $1 defined], ac_var,
1502                 AC_TRY_COMPILE($1,[
1503 #ifndef $2
1504 int ok;
1505 #else
1506 choke me
1507 #endif
1508                 ],
1509                 AS_VAR_SET(ac_var, [yes]),
1510                 AS_VAR_SET(ac_var, [no])))
1511
1512         AS_IF([test AS_VAR_GET(ac_var) != "no"], [$3], [$4])
1513         AS_VAR_POPDEF([ac_var])
1514 ])dnl SXE_CHECK_DEFINED
1515
1516 AC_DEFUN([SXE_CHECK_FUNC], [dnl
1517         AS_VAR_PUSHDEF([ac_var], [ac_cv_func_$2])dnl
1518         AC_CACHE_CHECK([for $2], ac_var, [
1519                 dnl AC_LANG_FUNC_LINK_TRY
1520                 AC_LINK_IFELSE([AC_LANG_PROGRAM([$1
1521 #undef $2
1522 char $2 ();
1523                         ], [
1524 char (*f) () = $2;
1525 return f != $2;
1526                         ])], [
1527                         AS_VAR_SET(ac_var, [yes])], [
1528                         AS_VAR_SET(ac_var, [no])])])
1529
1530         AS_IF([test AS_VAR_GET(ac_var) = "yes"], [$3], [$4])
1531         AS_VAR_POPDEF([ac_var])
1532 ])dnl SXE_CHECK_FUNC
1533
1534
1535
1536 AC_DEFUN([SXE_CHECK_C99_NJSF], [dnl
1537         dnl If we have a compiler that could do c99 do try to add the flag
1538         if test "$__GCC3" = "yes" ; then
1539                 SXE_APPEND_UNDUP("-std=c99", c_switch_site)
1540                 AC_MSG_CHECKING([for C99 support])
1541                 save_c_switch_site=$c_switch_site
1542                 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1543 #include <stdlib.h>
1544 ]],[[
1545 return 0;
1546 ]])],  [AC_MSG_RESULT(yes)
1547         have_c99="yes"],
1548        [c_switch_site=$sace_c_switch_site
1549                 AC_MSG_RESULT(no)
1550                 AC_MSG_WARN([C99 not supported, reverting option append])
1551                 have_c99="no"])
1552         elif test "$__SUNPRO_C" = "yes" ; then
1553                 AC_MSG_CHECKING([for C99 support])
1554                 save_c_switch_site=$c_switch_site
1555                 SXE_APPEND_UNDUP("-xc99", c_switch_site)
1556                 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1557 #include <stdlib.h>
1558 ]],[[
1559 return 0;
1560 ]])],  [AC_MSG_RESULT(yes)
1561                 have_c99="yes"],
1562        [c_switch_site=$sace_c_switch_site
1563                 AC_MSG_RESULT(no)
1564                 have_c99="no"])
1565         fi
1566 ])dnl SXE_CHECK_C99_NJSF
1567
1568
1569 AC_DEFUN([SXE_C_TYPEOF], [dnl
1570         dnl check for the typeof extension
1571         AC_MSG_CHECKING([for typeof])
1572         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
1573 int i; __typeof__(i) j;
1574 ]])], [typeofname="__typeof__"], [dnl else
1575                 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
1576 int i; typeof(i) j;
1577 ]])], [typeofname="typeof"], [typeofname=no])])
1578         AC_MSG_RESULT([$typeofname])
1579         if test "$typeofname" != "no"; then
1580                 AC_DEFINE_UNQUOTED([TYPEOF], [$typeofname],
1581                         [How to use the typeof extension.])
1582         fi
1583 ])dnl SXE_C_TYPEOF
1584
1585 AC_DEFUN([SXE_C_INLINE], [dnl
1586         AC_C_INLINE
1587         if test "$ac_cv_c_inline" != "no" -a "$GCC" = "yes"; then
1588                 SXE_ADD_CRUFT_OBJS([inline.o])
1589         fi
1590 ])dnl SXE_C_INLINE
1591
1592
1593 AC_DEFUN([SXE_CHECK_BROKEN_RESTRICT], [dnl
1594         AC_MSG_CHECKING([support for restrict keyword])
1595         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
1596 extern void f(void*restrict[]);
1597 ]])], [have_restrict="yes"], [have_restrict="no"])
1598         if test "$have_restrict" = "no"; then
1599                 AC_DEFINE_UNQUOTED([restrict], [],
1600                         [Define restrict to nothing])
1601         fi
1602         AC_MSG_RESULT([$typeofname])
1603 ])dnl SXE_CHECK_BROKEN_RESTRICT 
1604
1605 dnl recommended interface macros
1606 ## compiler wrapper
1607 AC_DEFUN([SXE_CHECK_CC], [dnl
1608
1609         AC_PROG_CPP
1610         AC_HEADER_STDC
1611         AC_PROG_CC([gcc icc cc])
1612         dnl AC_PROG_CC_STDC
1613         AC_PROG_CC_C99
1614
1615         ## check for machine and architecture
1616         SXE_CHECK_MACHARCH
1617
1618         ## check for C compiler characteristics
1619         SXE_CHECK_CC_VERSION
1620         if test "$GCC" = "yes"; then
1621                 SXE_CHECK_BROKEN_GCC
1622         fi
1623         AC_C_RESTRICT
1624         if test "$ac_cv_prog_cc_c99" != ""; then
1625                 SXE_CHECK_BROKEN_RESTRICT
1626         fi
1627
1628         ## check for libc
1629         SXE_CHECK_LIBC
1630         SXE_CHECK_LIBC_VERSION
1631         dnl Non-ordinary link usually requires -lc
1632         if test "$ordinary_link" = "no" -a -z "$libs_standard"; then
1633                 libs_standard="-lc"
1634         fi
1635
1636         SXE_CHECK_CC_HACKS
1637         SXE_CHECK_CC_CHAR
1638         SXE_CHECK_CC_NESTED_FUNS
1639
1640         ## Canonicalize the configuration name.
1641         ## Commented out, lets see if anything breaks. --SY.
1642         ## SXE_STRIP_4TH_COMPONENT(ac_cv_build_alias)
1643         ## SXE_STRIP_4TH_COMPONENT(ac_cv_build)
1644         AC_SUBST([configuration], [$ac_cv_build])
1645
1646         AM_PROG_CC_C_O
1647
1648 ])dnl SXE_CHECK_CC
1649
1650
1651 AC_DEFUN([SXE_CHECK_CFLAGS], [dnl
1652         dnl #### This may need to be overhauled so that all of SXEMACS_CC's flags
1653         dnl are handled separately, not just the xe_cflags_warning stuff.
1654
1655         ## Use either command line flag, environment var, or autodetection
1656         if test "$with_ridiculously_aggressive_optimisations" = "yes"; then
1657                 CFLAGS=""
1658                 SXE_DEBUGFLAGS
1659                 SXE_WARNFLAGS
1660                 SXE_OPTIFLAGS
1661                 SXE_CFLAGS="$debugflags $optiflags $warnflags"
1662
1663                 SXE_FEATFLAGS
1664                 SXE_CFLAGS="$debugflags $featflags $optiflags $warnflags"
1665
1666         elif test "$CFLAGS_uspecified_p" = "no" -o \
1667                 "$ac_test_CFLAGS" != "set"; then
1668                 SXE_DEBUGFLAGS
1669                 SXE_WARNFLAGS
1670
1671                 ## the old settings
1672                 ## Following values of CFLAGS are known to work well.
1673                 ## Should we take debugging options into consideration?
1674                 SXE_CHECK_COMPILER_FLAGS([-xO4], [dnl
1675                         ## ah, it's sunos4*
1676                         optiflags="${optiflags} -xO4"], [dnl
1677                         SXE_CHECK_COMPILER_FLAGS([-xO2], [dnl
1678                                 ## oh, a sol2
1679                                 optiflags="${optiflags} -xO2"])])
1680                 SXE_CHECK_COMPILER_FLAGS([-O3], [dnl
1681                         ## gcc, icc, decc, et al.
1682                         optiflags="${optiflags} -O3"])
1683
1684                 ## xlc specific
1685                 SXE_CHECK_COMPILER_FLAGS([-qnoansialias -qlibansi], [dnl
1686                         optiflags="${optiflags} -qnoansialias -qlibansi"])
1687                 SXE_CHECK_COMPILER_FLAGS([-qro -qmaxmem=20000], [dnl
1688                         optiflags="${optiflags} -qro -qmaxmem=20000"])
1689
1690                 ## icc specific
1691                 SXE_CHECK_COMPILER_FLAGS([-inline-level=2], [dnl
1692                         ## ah, one of the new flavours, tasty
1693                         optiflags="${optiflags} -inline-level=2"], [dnl
1694                         SXE_CHECK_COMPILER_FLAGS([-Ob2], [dnl
1695                                 ## deprecated nowadays
1696                                 optiflags="${optiflags} -Ob2"])])
1697
1698                 ## final check
1699                 if test -z "${optiflags}"; then
1700                         SXE_CHECK_COMPILER_FLAGS([-O], [dnl
1701                                 ## The only POSIX-approved flag
1702                                 optiflags="-O"])
1703                 fi
1704
1705                 SXE_CFLAGS="$debugflags $optiflags $warnflags"
1706
1707                 SXE_FEATFLAGS
1708                 SXE_CFLAGS="$debugflags $featflags $optiflags $warnflags"
1709         else
1710                 SXE_CFLAGS=${USER_CFLAGS}
1711                 featflags=""
1712                 debugflags=""
1713                 optiflags=""
1714                 warnflags=""
1715         fi
1716
1717         ## unset the werror flag again
1718         SXE_LANG_WERROR([off])
1719
1720         CFLAGS="$SXE_CFLAGS"
1721         AC_MSG_CHECKING([for preferred CFLAGS])
1722         AC_MSG_RESULT([${SXE_CFLAGS}])
1723
1724         AC_MSG_NOTICE([
1725 If you wish to ADD your own flags you want to stop here and rerun the
1726 configure script like so:
1727   configure CFLAGS=<to-be-added-flags>
1728
1729 You can always override the determined CFLAGS, partially or totally,
1730 using
1731   make -C <directory> CFLAGS=<your-own-flags> [target]
1732 or
1733   make CFLAGS=<your-own-flags> [target]
1734 respectively
1735
1736 NOTE: -C <directory> option is not available on all systems
1737                 ])
1738 ])dnl SXE_CHECK_CFLAGS
1739
1740
1741 AC_DEFUN([SXE_CC_LIBRARY_PATH], [dnl
1742         ## arg #1 variable to store name in,
1743         ## if omitted defaults to `sxe_cv_tmp_gcc_library_path'
1744         pushdef([VAR], ifelse($1,[],[sxe_cv_tmp_gcc_library_path],$1))
1745
1746         for i in ${LDFLAGS}; do
1747                 case $i in
1748                 -L*)
1749                         __LP=${i:2}:${__LP:-.}
1750                         ;;
1751                 *)
1752                         ;;
1753                 esac
1754         done
1755         SXE_EXPAND_VAR([${libdir}], [__ld])
1756         []VAR[]=${__ld:-.}:${__LP:-.}
1757
1758         popdef([VAR])
1759 ])dnl SXE_CC_LIBRARY_PATH
1760
1761
1762 AC_DEFUN([SXE_CC_LIBRARY_LOCATION], [dnl
1763         ## arg #1 the library to seek after
1764         ## arg #2 (optional) checking message
1765         pushdef([liborig], [$1])
1766         pushdef([liblink], patsubst(patsubst(liborig, [lib], [-l]), [\.[^.]+$], []))
1767         pushdef([libname], translit(liborig, [-,.], [___]))
1768         pushdef([LIBNAME], translit(liborig, [-,.a-z], [___A-Z]))
1769         pushdef([libchk], ifelse($2,[],[for absolute path of ]liborig,$2))
1770
1771         ## use gcc's -print-file-name
1772         AC_REQUIRE([SXE_CC_LIBRARY_PATH])
1773         AC_MSG_CHECKING([]libchk[])
1774         ## not protected against other CCs (yet)!
1775         sxe_cv_loc_[]libname[]=$(LIBRARY_PATH=${sxe_cv_tmp_gcc_library_path} \
1776                 ${CC} -print-file-name=[]liborig[])
1777         AC_MSG_RESULT(${sxe_cv_loc_[]libname[]})
1778
1779         []LIBNAME[]=${sxe_cv_loc_[]libname[]}
1780
1781         popdef([libchk])
1782         popdef([liblink])
1783         popdef([liborig])
1784         popdef([libname])
1785         popdef([LIBNAME])
1786 ])dnl SXE_CC_LIBRARY_LOCATION
1787
1788
1789 AC_DEFUN([SXE_CHECK_ANON_STRUCTS], [
1790         AC_MSG_CHECKING([whether C compiler can cope with anonymous structures])
1791         AC_LANG_PUSH(C)
1792         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1793 union __test_u {
1794         int i;
1795         struct {
1796                 char c;
1797                 char padc;
1798                 short int pads;
1799         };
1800 };
1801         ]], [[
1802         union __test_u tmp = {.c = '4'};
1803         ]])], [
1804                 sxe_cv_have_anon_structs="yes"
1805         ], [
1806                 sxe_cv_have_anon_structs="no"
1807         ])
1808         AC_MSG_RESULT([${sxe_cv_have_anon_structs}])
1809
1810         if test "${sxe_cv_have_anon_structs}" = "yes"; then
1811                 AC_DEFINE([HAVE_ANON_STRUCTS], [1], [
1812                         Whether c1x anon structs work])
1813                 $1
1814                 :
1815         else
1816                 $2
1817                 :
1818         fi
1819         AC_LANG_POP()
1820 ])dnl SXE_CHECK_ANON_STRUCTS
1821
1822 dnl sxe-compiler.m4 ends here