summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorM Joonas Pihlaja <jpihlaja@cc.helsinki.fi>2010-07-10 15:36:41 +0300
committerM Joonas Pihlaja <jpihlaja@cc.helsinki.fi>2010-07-11 16:08:34 +0300
commit2a6e12df0a6daad604ac1cfadc9f5b9982b35663 (patch)
treef6842038288373b6a43667d1f3a86696cdcd9e46
parentef6e06058878a46c4eb9b0f8fdaea3a2ad71386f (diff)
Check for specific flags by actually trying to compile and link.
Instead of relying on preprocessor version checks to see if a some compiler flags are supported, actually try to compile and link a test program with the flags.
-rw-r--r--configure.ac100
1 files changed, 59 insertions, 41 deletions
diff --git a/configure.ac b/configure.ac
index d6f1d1c..c97c45d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -77,9 +77,10 @@ AC_CHECK_FUNCS([getisax])
AC_C_BIGENDIAN
AC_C_INLINE
-dnl PIXMAN_LINK_WITH_ENV(
-dnl CFLAGS=... LDFLAGS=... LIBS=...,
-dnl program, true-action, false-action)
+dnl PIXMAN_LINK_WITH_ENV(env-setup, program, true-action, false-action)
+dnl
+dnl Compiles and links the given program in the environment setup by env-setup
+dnl and executes true-action on success and false-action on failure.
AC_DEFUN([PIXMAN_LINK_WITH_ENV],[dnl
save_CFLAGS="$CFLAGS"
save_LDFLAGS="$LDFLAGS"
@@ -88,10 +89,55 @@ AC_DEFUN([PIXMAN_LINK_WITH_ENV],[dnl
LDFLAGS=""
LIBS=""
$1
- AC_LINK_IFELSE([$2], [$3], [$4])
- CFLAGS="$save_CFLAGS"
- LDFLAGS="$save_LDFLAGS"
- LIBS="$save_LIBS"
+ AC_LINK_IFELSE(
+ [$2],
+ [pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
+ pixman_cc_flag=yes],
+ [pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
+ pixman_cc_flag=no])
+
+ if test "x$pixman_cc_stderr" != "x"; then
+ pixman_cc_flag=no
+ fi
+
+ if test "x$pixman_cc_flag" = "xyes"; then
+ ifelse([$3], , :, [$3])
+ else
+ ifelse([$4], , :, [$4])
+ fi
+ CFLAGS="$save_cflags"
+ LDFLAGS="$save_ldflags"
+ LIBS="$save_libs"
+])
+
+dnl Find a -Werror for catching warnings.
+WERROR=
+for w in -Werror -errwarn; do
+ if test "z$WERROR" = "z"; then
+ AC_MSG_CHECKING([whether the compiler supports $w])
+ PIXMAN_LINK_WITH_ENV(
+ [CFLAGS=$w],
+ [int main(int c, char **v) { (void)c; (void)v; return 0; }],
+ [WERROR=$w; yesno=yes], [yesno=no])
+ AC_MSG_RESULT($_yesno)
+ fi
+done
+
+dnl PIXMAN_CHECK_CFLAG(flag, [program])
+dnl Adds flag to CFLAGS if the given program links without warnings or errors.
+AC_DEFUN([PIXMAN_CHECK_CFLAG], [dnl
+ AC_MSG_CHECKING([whether the compiler supports $1])
+ PIXMAN_LINK_WITH_ENV(
+ [CFLAGS="$WERROR $1"],
+ [$2
+ int main(int c, char **v) { (void)c; (void)v; return 0; }
+ ],
+ [_yesno=yes],
+ [_yesno=no])
+ if test "x$_yesno" = xyes; then
+ CFLAGS="$CFLAGS $1"
+ fi
+ AC_MSG_RESULT($_yesno)
])
AC_CHECK_SIZEOF(long)
@@ -134,20 +180,8 @@ AC_SUBST(LT_VERSION_INFO)
# Check for dependencies
#PKG_CHECK_MODULES(DEP, x11)
-changequote(,)dnl
-if test "x$GCC" = "xyes"; then
-
- case " $CFLAGS " in
- *[\ \ ]-Wall[\ \ ]*) ;;
- *) CFLAGS="$CFLAGS -Wall" ;;
- esac
-
- case " $CFLAGS " in
- *[\ \ ]-fno-strict-aliasing[\ \ ]*) ;;
- *) CFLAGS="$CFLAGS -fno-strict-aliasing" ;;
- esac
-
-fi changequote([,])dnl
+PIXMAN_CHECK_CFLAG([-Wall])
+PIXMAN_CHECK_CFLAG([-fno-strict-aliasing])
AC_PATH_PROG(PERL, perl, no)
if test "x$PERL" = xno; then
@@ -213,35 +247,19 @@ AC_SUBST(OPENMP_CFLAGS)
dnl =========================================================================
dnl -fvisibility stuff
-have_gcc4=no
-AC_MSG_CHECKING(for -fvisibility)
-AC_COMPILE_IFELSE([
+PIXMAN_CHECK_CFLAG([-fvisibility=hidden], [dnl
#if defined(__GNUC__) && (__GNUC__ >= 4)
#else
error Need GCC 4.0 for visibility
#endif
-int main () { return 0; }
-], have_gcc4=yes)
-
-if test "x$have_gcc4" = "xyes"; then
- CFLAGS="$CFLAGS -fvisibility=hidden"
-fi
-AC_MSG_RESULT($have_gcc4)
+])
-have_sunstudio8=no
-AC_MSG_CHECKING([for -xldscope (Sun compilers)])
-AC_COMPILE_IFELSE([
+PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl
#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
#else
error Need Sun Studio 8 for visibility
#endif
-int main () { return 0; }
-], have_sunstudio8=yes)
-
-if test "x$have_sunstudio8" = "xyes"; then
- CFLAGS="$CFLAGS -xldscope=hidden"
-fi
-AC_MSG_RESULT($have_sunstudio8)
+])
dnl ===========================================================================
dnl Check for MMX