dnl SG_COMPILE_FLAGS dnl Turn on many useful compiler warnings dnl For now, only sets extra flags on GCC dnl Copyright (C) 2004, 2005, 2007. Martin Quinson. All rights reserved. dnl This file is part of the SimGrid project. This is free software: dnl You can redistribute and/or modify it under the terms of the dnl GNU LGPL (v2.1) licence. AC_DEFUN([SG_COMPILE_FLAGS],[ AC_ARG_ENABLE(compile-warnings, AS_HELP_STRING([--enable-compile-warnings], [use compiler warnings (default=no, unless in maintainer mode)]), enable_compile_warnings=$enableval,enable_compile_warnings=no) AC_ARG_ENABLE(compile-optimizations, AS_HELP_STRING([--disable-compile-optimizations], [use compiler optimizations (default=yes, unless if CFLAGS is explicitly set)]), enable_compile_optimizations=$enableval,enable_compile_optimizations=auto) # AC PROG CC tests whether -g is accepted. # Cool, but it also tries to set -O2 and -g. # I don't want it with gcc, but -O3 and -g2, and optimization only when asked by user case $CC in *gcc) if test "$CFLAGS" = "-g -O2" ; then CFLAGS="-g3" fi if test "$CXXFLAGS" = "-g -O2" ; then CXXFLAGS="-g3" fi if test "$GCJFLAGS" = "-g -O2" ; then CXXFLAGS="-g3" fi;; esac if test "x$enable_compile_warnings" = "xyes" ; then AC_MSG_CHECKING(the warning flags for this compiler) warnCFLAGS= if test "x$CC" = "xgcc" || test "x$GCC" = "xyes" ; then case " $CFLAGS " in *-Wall*) ;; *) warnCFLAGS="-Wall -Wunused" ;; esac ## -W is not all that useful. And it cannot be controlled ## with individual -Wno-xxx flags, unlike -Wall ## -Wformat=2 chokes on the snprintf replacement because the format is passed to real sprintf ## -Wshadow chokes on try{ try{} } constructs if test "x$enable_compile_warnings" = "xyes"; then warnCFLAGS=`echo $warnCFLAGS -Wmissing-prototypes -Wmissing-declarations \ -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings \ -Wno-unused-function -Wno-strict-aliasing -Wno-format-nonliteral \ -Werror \ | sed 's/ +/ /g'` # -Wno-unused-variable -Wno-unused-label fi fi AC_MSG_RESULT($warnCFLAGS) # placed before since gcc remembers the last one on conflict CFLAGS="$warnCFLAGS $CFLAGS" fi if test "x$enable_compile_optimizations" = "xyes" || test "x$enable_compile_optimizations" = "xauto" ; then AC_MSG_CHECKING(the optimization flags for this compiler) optCFLAGS= if test "x$CC" = "xgcc" || test "x$GCC" = "xyes" ; then case " $CFLAGS " in *-O*) ;; *) optCFLAGS="$optCFLAGS -O3" ;; esac optCFLAGS="$optCFLAGS -finline-functions -ffast-math -funroll-loops -fno-strict-aliasing" GCC_VER=`gcc --version | head -n 1 | sed 's/^[^0-9]*\([^ ]*\).*$/\1/'` GCC_VER_MAJ=`echo $GCC_VER | sed 's/^\(.\).*$/\1/'` if test "x$target_cpu" = "xpowerpc" && test "x$GCC_VER_MAJ" == "x3" ; then # avoid gcc bug #12828, which apeared in 3.x branch and is fixed in 3.4.0 # but the check would be too complicated to get 3.4. # Instead, rule out any 3.x compiler. # Note that the flag didn't exist before gcc 3.0 optCFLAGS="$optCFLAGS -fno-loop-optimize" fi dnl A C_MSG_WARN(GCC_VER_MAJ=$GCC_VER_MAJ) fi AC_MSG_RESULT($optCFLAGS) # Take it only if CFLAGS not explicitly set. Unless the flag was explicitly given if test "x$cflags_set" != "xyes" ; then CFLAGS="$optCFLAGS $CFLAGS" fi fi if test x$lt_cv_prog_gnu_ld = xyes ; then LD_DYNAMIC_FLAGS=-Wl,--export-dynamic else LD_DYNAMIC_FLAGS= fi AC_SUBST(LD_DYNAMIC_FLAGS) ])