From: Akim Demaille <akim@lrde.epita.fr> Date: Wed, 7 Nov 2012 16:23:06 +0000 (+0100) Subject: tests: beware of compilers that do not support POSIXLY_CORRECT X-Git-Tag: v2.6.5~3 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/0a36880ad19791ebf050f884df3a1aff151cd67f tests: beware of compilers that do not support POSIXLY_CORRECT Running "maintainer-release-check" on OS X with Clang 2.9 fails, because "clang-mp-2.9 -o test -g test.c" launches "/usr/bin/dsymutil test -o test.dSYM" which fails with "error: unable to open executable '-o'". * m4/c-working.m4 (BISON_CHECK_WITH_POSIXLY_CORRECT) (BISON_C_COMPILER_POSIXLY_CORRECT): New. * configure.ac: Use the latter. * tests/atlocal.in (POSIXLY_CORRECT_IS_EXPORTED): New. * tests/local.at (AT_BISON_CHECK_WARNINGS_): Use it instead of computing its value each time. (AT_QUELL_VALGRIND): Skip tests that cannot work because of compilers that do not support POSIXLY_CORRECT. --- diff --git a/configure.ac b/configure.ac index 651fa139..86783d52 100644 --- a/configure.ac +++ b/configure.ac @@ -114,6 +114,7 @@ fi BISON_TEST_FOR_WORKING_C_COMPILER BISON_TEST_FOR_WORKING_CXX_COMPILER +BISON_C_COMPILER_POSIXLY_CORRECT AC_ARG_ENABLE([yacc], [AC_HELP_STRING([--disable-yacc], diff --git a/m4/c-working.m4 b/m4/c-working.m4 index d563d32b..0db60f76 100644 --- a/m4/c-working.m4 +++ b/m4/c-working.m4 @@ -25,3 +25,47 @@ AC_DEFUN([BISON_TEST_FOR_WORKING_C_COMPILER], [ [], [AC_MSG_FAILURE([cannot compile a simple C program])]) ]) + +# BISON_CHECK_WITH_POSIXLY_CORRECT(CODE) +# -------------------------------------- +# Run the Autoconf CODE with POSIXLY_CORRECT set to 1, and restored to +# its initial value afterwards. +AC_DEFUN([BISON_CHECK_WITH_POSIXLY_CORRECT], +[gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' +case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in + xx) gl_had_POSIXLY_CORRECT=exported ;; + x) gl_had_POSIXLY_CORRECT=yes ;; + *) gl_had_POSIXLY_CORRECT= ;; +esac +POSIXLY_CORRECT=1 +export POSIXLY_CORRECT +$1 +case $gl_had_POSIXLY_CORRECT in + exported) ;; + yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;; + *) AS_UNSET([POSIXLY_CORRECT]) ;; +esac +]) + +# BISON_C_COMPILER_POSIXLY_CORRECT +# -------------------------------- +# Whether the compiler supports -g in POSIXLY_CORRECT mode. clang-2.9 +# on OS X does not, because "clang-mp-2.9 -o test -g test.c" launches +# "/usr/bin/dsymutil test -o test.dSYM" which fails with "error: +# unable to open executable '-o'". +# +# Sets C_COMPILER_POSIXLY_CORRECT to true/false. +AC_DEFUN([BISON_C_COMPILER_POSIXLY_CORRECT], +[AC_CACHE_CHECK([whether $CC supports POSIXLY_CORRECT=1], + [bison_cv_cc_supports_posixly_correct], +[BISON_CHECK_WITH_POSIXLY_CORRECT( +[AC_LANG_PUSH([C]) +AC_LINK_IFELSE([AC_LANG_PROGRAM], + [bison_cv_cc_supports_posixly_correct=yes], + [bison_cv_cc_supports_posixly_correct=no]) +AC_LANG_POP([C])])]) +case $bison_cv_cc_supports_posixly_correct in + yes) AC_SUBST([C_COMPILER_POSIXLY_CORRECT], [true]) ;; + no) AC_SUBST([C_COMPILER_POSIXLY_CORRECT], [false]);; +esac +]) diff --git a/tests/atlocal.in b/tests/atlocal.in index 2f682592..5e3cb723 100644 --- a/tests/atlocal.in +++ b/tests/atlocal.in @@ -79,3 +79,13 @@ LIBS="$abs_top_builddir/lib/libbison.a @LIBS@ @INTLLIBS@" : ${XSLTPROC='@XSLTPROC@'} : ${PERL='@PERL@'} + +# Don't just check if $POSIXLY_CORRECT is set, as Bash, when launched +# as /bin/sh, sets the shell variable POSIXLY_CORRECT to y, but not +# the environment variable. +: ${C_COMPILER_POSIXLY_CORRECT='@C_COMPILER_POSIXLY_CORRECT@'} +if env | grep '^POSIXLY_CORRECT=' >/dev/null; then + POSIXLY_CORRECT_IS_EXPORTED=true +else + POSIXLY_CORRECT_IS_EXPORTED=false +fi diff --git a/tests/local.at b/tests/local.at index 88825210..e803e57f 100644 --- a/tests/local.at +++ b/tests/local.at @@ -468,11 +468,7 @@ m4_define([AT_BISON_CHECK_WARNINGS_], [[# Defining POSIXLY_CORRECT causes bison to complain if options are # added after the grammar file name, so skip these checks in that # case. -# -# Don't just check if $POSIXLY_CORRECT is set, as Bash, when launched -# as /bin/sh, sets the shell variable POSIXLY_CORRECT to y, but not -# the environment variable. -if env | grep '^POSIXLY_CORRECT=' >/dev/null; then :; else +if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then ]AT_SAVE_SPECIAL_FILES[ # To avoid expanding it repeatedly, store specified stdout. @@ -597,7 +593,10 @@ m4_define([AT_QUELL_VALGRIND], # otherwise pass "-c"; this is a hack. The default SOURCES is OUTPUT # with trailing .o removed, and ".c" appended. m4_define([AT_COMPILE], -[AT_CHECK(m4_join([ ], +[AT_CHECK([case $POSIXLY_CORRECT_IS_EXPORTED:$C_COMPILER_POSIXLY_CORRECT in + true:false) echo 'cannot compile properly with POSIXLY_CORRECT' && exit 77;; +esac]) +AT_CHECK(m4_join([ ], [$CC $CFLAGS $CPPFLAGS], [m4_bmatch([$1], [[.]], [-c], [$LDFLAGS])], [-o $1],