[build] Check compiler flags using AC_TRY_LINK instead of AC_TRY_COMPILE.

Turns out we were passing suncc warning suppression flags to gcc
by mistake since -e<entry point> is actually a valid option for
gcc.  This caused the -erroff=E_ENUM_TYPE_MISMATCH_ARG and other
-erroff options to be passed to the linker.  In the normal case
of a GNU ld linker this doesn't matter since it ignores bogus
entry points, but the GNU gold linker replaces a bogus entry
point with NULL.  This patch makes the CAIRO_CC_TRY_FLAG()
check stricter by testing that the flag doesn't interfere with
linking executables.
This commit is contained in:
M Joonas Pihlaja 2009-10-15 17:47:33 +03:00
parent 79190d8985
commit d5609ca04e

View file

@ -79,20 +79,17 @@ dnl check compiler flags with a program and no muttering.
AC_DEFUN([CAIRO_CC_TRY_FLAG_SILENT], AC_DEFUN([CAIRO_CC_TRY_FLAG_SILENT],
[dnl (flags..., optional program, true-action, false-action) [dnl (flags..., optional program, true-action, false-action)
_compile_program='$2' # AC_LANG_PROGRAM() produces a main() w/o args,
if test "x$_compile_program" = "x"; then # but -Wold-style-definition doesn't like that.
# AC_LANG_PROGRAM() produces a main() w/o args, # We need _some_ program so that we don't get
# but -Wold-style-definition doesn't like that. # warnings about empty compilation units, so always
# We need _some_ program so that we don't get # append a reasonable main().
# warnings about empty compilation units. _compile_program="$2"'
_compile_program=' int main(int c, char **v) { (void)c; (void)v; return 0; }'
int main(int c, char **v) {
(void)c; (void)v; return 0; }'
fi
_save_cflags="$CFLAGS" _save_cflags="$CFLAGS"
CFLAGS="$CFLAGS $1" CFLAGS="$CFLAGS $1"
AC_COMPILE_IFELSE( AC_LINK_IFELSE(
[$_compile_program], [$_compile_program],
[cairo_cc_stderr=`test -f conftest.err && cat conftest.err` [cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
cairo_cc_flag=yes], cairo_cc_flag=yes],