4 dnl Turn on many useful compiler warnings
5 dnl For now, only sets extra flags on GCC
7 AC_DEFUN([SG_COMPILE_FLAGS],[
8 AC_ARG_ENABLE(compile-warnings,
9 AS_HELP_STRING([--enable-compile-warnings], [use compiler warnings (default=no, unless in maintainer mode)]),
10 enable_compile_warnings=$enableval,enable_compile_warnings=no)
12 AC_ARG_ENABLE(compile-optimizations,
13 AS_HELP_STRING([--disable-compile-optimizations], [use compiler optimizations (default=yes, unless if CFLAGS is explicitly set)]),
14 enable_compile_optimizations=$enableval,enable_compile_optimizations=auto)
16 if test "x$cflags_set" != "xyes" ; then
17 # if user didn't specify CFLAGS explicitely
19 # AC PROG CC tests whether -g is accepted.
20 # Cool, but it also tries to set -O2. I don't want it with gcc
23 case " $saveCFLAGS " in
26 case " $saveCFLAGS " in
27 *-O2*) test "x$CC" = xgcc || CFLAGS="$CFLAGS -O2" ;;
30 # damn AC PROG CC, why did you set -O??
34 if test "x$enable_compile_warnings" = "xyes" ; then
35 AC_MSG_CHECKING(the warning flags for this compiler)
37 if test "x$CC" = "xgcc" || test "x$GCC" = "xyes" ; then
40 *) warnCFLAGS="-Wall -Wunused" ;;
43 ## -W is not all that useful. And it cannot be controlled
44 ## with individual -Wno-xxx flags, unlike -Wall
46 ## -Wformat=2 chokes on the snprintf replacement because the format is passed to real sprintf
47 ## -Wshadow chokes on try{ try{} } constructs
48 if test "x$enable_compile_warnings" = "xyes"; then
49 warnCFLAGS=`echo $warnCFLAGS -Wmissing-prototypes -Wmissing-declarations \
50 -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings \
51 -Wno-unused-function \
54 # -Wno-unused-variable -Wno-unused-label
57 AC_MSG_RESULT($warnCFLAGS)
58 # placed before since gcc remembers the last one on conflict
59 CFLAGS="$warnCFLAGS $CFLAGS"
62 if test "x$enable_compile_optimizations" = "xyes" ||
63 test "x$enable_compile_optimizations" = "xauto" ; then
64 AC_MSG_CHECKING(the optimization flags for this compiler)
66 if test "x$CC" = "xgcc" || test "x$GCC" = "xyes" ; then
69 *) optCFLAGS="$optCFLAGS -O3" ;;
71 optCFLAGS="$optCFLAGS -finline-functions -ffast-math -funroll-loops -fno-strict-aliasing"
73 GCC_VER=`gcc --version | head -n 1 | sed 's/^[^0-9]*\([^ ]*\).*$/\1/'`
74 GCC_VER_MAJ=`echo $GCC_VER | sed 's/^\(.\).*$/\1/'`
75 if test "x$target_cpu" = "xpowerpc" && test "x$GCC_VER_MAJ" != "x2" ; then
76 # avoid gcc bug #12828, which is fixed in 3.4.0, but this version
77 # isn't propagated enough to desserve an extra check
79 # Note that the flag didn't exist before gcc 3.0
80 optCFLAGS="$optCFLAGS -fno-loop-optimize"
82 dnl A C_MSG_WARN(GCC_VER_MAJ=$GCC_VER_MAJ)
84 AC_MSG_RESULT($optCFLAGS)
85 # Take it only if CFLAGS not explicitly set. Unless the flag was explicitly given
86 if test "x$cflags_set" != "xyes" ; then
87 CFLAGS="$optCFLAGS $CFLAGS"
91 if test x$lt_cv_prog_gnu_ld = xyes ; then
92 LD_DYNAMIC_FLAGS=-Wl,--export-dynamic
96 AC_SUBST(LD_DYNAMIC_FLAGS)