]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Adds two new default GCC options.
authorOndrej Zajicek <santiago@crfreenet.org>
Wed, 17 Apr 2013 13:09:50 +0000 (15:09 +0200)
committerOndrej Zajicek <santiago@crfreenet.org>
Wed, 17 Apr 2013 13:09:50 +0000 (15:09 +0200)
Adds two new default GCC options related to optimizations
(-fno-strict-aliasing and -fno-strict-overflow). This
should fix some hyperaggressive GCC optimizations.

Also updates autoconf option detection.

aclocal.m4
configure.in

index 75b3f92a37eece597f53704688287bdca048e01b..3ceb6eb6eebadc5cf876e5cd47567eadf2b42928 100644 (file)
@@ -133,19 +133,23 @@ if test "$bird_cv_struct_ip_mreqn" = yes ; then
 fi
 ])
 
-AC_DEFUN(BIRD_CHECK_GCC_OPTIONS,
-[AC_CACHE_VAL(bird_cv_c_option_no_pointer_sign, [
-cat >conftest.c <<EOF
-int main(void)
-{ return 0; }
-EOF
-if $CC -Wall -Wno-pointer-sign conftest.c >&AS_MESSAGE_LOG_FD 2>&1 ; then
-       bird_cv_c_option_no_pointer_sign=yes
-else
-       bird_cv_c_option_no_pointer_sign=no
-fi
-rm -rf conftest* a.out
-])])
+AC_DEFUN(BIRD_CHECK_GCC_OPTION,
+[
+  bird_tmp_cflags="$CFLAGS"
+
+  CFLAGS="$3 $2"
+  AC_CACHE_CHECK([whether CC supports $2], $1,
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], [$1=yes], [$1=no])])
+
+  CFLAGS="$bird_tmp_cflags"
+])
+
+AC_DEFUN(BIRD_ADD_GCC_OPTION,
+[
+  if test "$$1" = yes ; then
+    CFLAGS="$CFLAGS $2"
+  fi
+])
 
 # BIRD_CHECK_PROG_FLAVOR_GNU(PROGRAM-PATH, IF-SUCCESS, [IF-FAILURE])
 # copied autoconf internal _AC_PATH_PROG_FLAVOR_GNU
index 54993dfce457e020a1949b2974a702711340b86f..272a2431796b43c717162651ba3440880a833015 100644 (file)
@@ -87,15 +87,17 @@ if test -z "$GCC" ; then
        AC_MSG_ERROR([This program requires the GNU C Compiler.])
 fi
 
-AC_MSG_CHECKING([what CFLAGS should we use])
 if test "$bird_cflags_default" = yes ; then
-       BIRD_CHECK_GCC_OPTIONS
+       BIRD_CHECK_GCC_OPTION(bird_cv_c_option_wno_pointer_sign, -Wno-pointer-sign, -Wall)
+       BIRD_CHECK_GCC_OPTION(bird_cv_c_option_fno_strict_aliasing, -fno-strict-aliasing)
+       BIRD_CHECK_GCC_OPTION(bird_cv_c_option_fno_strict_overflow, -fno-strict-overflow)
 
        CFLAGS="$CFLAGS -Wall -Wstrict-prototypes -Wno-parentheses"
-       if test "$bird_cv_c_option_no_pointer_sign" = yes ; then
-               CFLAGS="$CFLAGS -Wno-pointer-sign"
-       fi
+       BIRD_ADD_GCC_OPTION(bird_cv_c_option_wno_pointer_sign, -Wno-pointer-sign)
+       BIRD_ADD_GCC_OPTION(bird_cv_c_option_fno_strict_aliasing, -fno-strict-aliasing)
+       BIRD_ADD_GCC_OPTION(bird_cv_c_option_fno_strict_overflow, -fno-strict-overflow)
 fi
+AC_MSG_CHECKING([CFLAGS])
 AC_MSG_RESULT($CFLAGS)