summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2013-04-17 15:09:50 +0200
committerOndrej Zajicek <santiago@crfreenet.org>2013-04-17 15:09:50 +0200
commitefd6d12b975441c7e1875a59dd9e0f3db7e958cb (patch)
treefccf3a5cf753b0f1a168031329278965bfc4f3eb
parent8df02847e8af29863c325b7297e3a2b2ed5f961c (diff)
Adds two new default GCC options.
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.
-rw-r--r--aclocal.m430
-rw-r--r--configure.in12
2 files changed, 24 insertions, 18 deletions
diff --git a/aclocal.m4 b/aclocal.m4
index 75b3f92a..3ceb6eb6 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -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
diff --git a/configure.in b/configure.in
index 54993dfc..272a2431 100644
--- a/configure.in
+++ b/configure.in
@@ -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)