From e85056ef5fe3ddf7563a217b941c27de7d7b3cb5 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Tue, 27 Mar 2012 16:20:34 +0200 Subject: [PATCH] build: simplify and improve the compiler warnings for tests. * configure.ac (warn_common, warn_c, warn_cxx): New. Use them to compute independently the options supported by the C and C++ compilers. Don't AC_SUBST the variables passed to gl_WARN_ADD: it does it for us. (WARN_CFLAGS_TEST, WARN_CXXFLAGS_TEST): Don't aggregate $WARN_CFLAGS and $WARN_CXXFLAGS in them now, leave it to atlocal.in. (O0CFLAGS, O0CXXFLAGS): Move their definition to... * tests/atlocal.in: here. Be more systematic between C and C++. Reorder to factor between variables. Propagate all of the variables when --compile-c-with-cxx. --- configure.ac | 46 +++++++++++++++++++++++--------------------- tests/atlocal.in | 50 +++++++++++++++++++++++++++++------------------- 2 files changed, 54 insertions(+), 42 deletions(-) diff --git a/configure.ac b/configure.ac index 1fffa67c..78f641d3 100644 --- a/configure.ac +++ b/configure.ac @@ -53,6 +53,7 @@ AC_CONFIG_HEADERS([lib/config.h:lib/config.hin]) # Checks for the compiler. AC_PROG_CC_STDC +AC_PROG_CXX # Gnulib (early checks). gl_EARLY @@ -65,31 +66,36 @@ AC_ARG_ENABLE([gcc-warnings], esac], [enable_gcc_warnings=no]) if test "$enable_gcc_warnings" = yes; then + warn_common='-Wall -Wextra -Wno-sign-compare -Wcast-align + -Wcast-qual -Wformat -Wpointer-arith -Wwrite-strings' + warn_c='-Wbad-function-cast -Wmissing-declarations -Wmissing-prototypes + -Wshadow -Wstrict-prototypes' + warn_cxx='' + AC_LANG_PUSH([C]) + for i in $warn_common $warn_c; + do + gl_WARN_ADD([$i], [WARN_CFLAGS]) + done gl_WARN_ADD([-Werror], [WERROR_CFLAGS]) - AC_SUBST([WERROR_CFLAGS]) - gl_WARN_ADD([-Wall]) - gl_WARN_ADD([-Wextra -Wno-sign-compare]) - gl_WARN_ADD([-Wcast-align]) - gl_WARN_ADD([-Wcast-qual]) - gl_WARN_ADD([-Wformat]) - gl_WARN_ADD([-Wpointer-arith]) - gl_WARN_ADD([-Wwrite-strings]) - AC_SUBST([WARN_CXXFLAGS], [$WARN_CFLAGS]) - # The following warnings are not suitable for C++. - gl_WARN_ADD([-Wbad-function-cast]) - gl_WARN_ADD([-Wmissing-declarations]) - gl_WARN_ADD([-Wmissing-prototypes]) - gl_WARN_ADD([-Wshadow]) - gl_WARN_ADD([-Wstrict-prototypes]) - AC_SUBST([WARN_CFLAGS]) # Warnings for the test suite only. gl_WARN_ADD([-Wundef], [WARN_CFLAGS_TEST]) gl_WARN_ADD([-pedantic], [WARN_CFLAGS_TEST]) - AC_SUBST([WARN_CXXFLAGS_TEST], ["$WARN_CXXFLAGS $WARN_CFLAGS_TEST"]) - AC_SUBST([WARN_CFLAGS_TEST], ["$WARN_CFLAGS $WARN_CFLAGS_TEST"]) + AC_LANG_POP([C]) + + AC_LANG_PUSH([C++]) + for i in $warn_common $warn_cxx; + do + gl_WARN_ADD([$i], [WARN_CXXFLAGS]) + done + gl_WARN_ADD([-Werror], [WERROR_CXXFLAGS]) + # Warnings for the test suite only. + gl_WARN_ADD([-Wundef], [WARN_CXXFLAGS_TEST]) + gl_WARN_ADD([-pedantic], [WARN_CXXFLAGS_TEST]) + AC_LANG_POP([C++]) fi BISON_TEST_FOR_WORKING_C_COMPILER +BISON_TEST_FOR_WORKING_CXX_COMPILER AC_ARG_ENABLE([yacc], [AC_HELP_STRING([--disable-yacc], @@ -155,13 +161,9 @@ AC_CONFIG_TESTDIR(tests) AC_CONFIG_FILES([tests/Makefile tests/atlocal]) AC_CONFIG_FILES([tests/bison], [chmod +x tests/bison]) AC_CHECK_PROGS([VALGRIND], [valgrind]) -AC_PROG_CXX -BISON_TEST_FOR_WORKING_CXX_COMPILER AM_MISSING_PROG([AUTOM4TE], [autom4te]) # Needed by tests/atlocal.in. AC_SUBST([GCC]) -AC_SUBST([O0CFLAGS], [`echo $CFLAGS | sed 's/-O[[0-9]] *//'`]) -AC_SUBST([O0CXXFLAGS], [`echo $CXXFLAGS | sed 's/-O[[0-9]] *//'`]) gt_JAVACOMP([1.3]) gt_JAVAEXEC diff --git a/tests/atlocal.in b/tests/atlocal.in index 11554b33..72a9bf75 100644 --- a/tests/atlocal.in +++ b/tests/atlocal.in @@ -16,30 +16,47 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# We need a C compiler. +# We need `config.h'. +CPPFLAGS="-I$abs_top_builddir/lib @CPPFLAGS@" + +## ------------------- ## +## C/C++ Compilation. ## +## ------------------- ## + : ${CC='@CC@'} +: ${CXX='@CXX@'} + +# Is the compiler GCC? +GCC='@GCC@' # We want no optimization. -CFLAGS='@O0CFLAGS@ @WARN_CFLAGS_TEST@ @WERROR_CFLAGS@' + O0CFLAGS=`echo '@CFLAGS@' | sed 's/-O[0-9] *//'` +O0CXXFLAGS=`echo '@CXXFLAGS@' | sed 's/-O[0-9] *//'` # Sometimes a test group needs to ignore gcc warnings, so it locally # sets CFLAGS to this. -NO_WERROR_CFLAGS='@O0CFLAGS@ @WARN_CFLAGS_TEST@' + NO_WERROR_CFLAGS="$O0CFLAGS @WARN_CFLAGS@ @WARN_CFLAGS_TEST@" +NO_WERROR_CXXFLAGS="$O0CXXFLAGS @WARN_CXXFLAGS@ @WARN_CXXFLAGS_TEST@" -# We need `config.h'. -CPPFLAGS="-I$abs_top_builddir/lib @CPPFLAGS@" - -# Is the compiler GCC? -GCC='@GCC@' - -# The C++ compiler. -: ${CXX='@CXX@'} +# But most of the time, we want -Werror. + CFLAGS="$NO_WERROR_CFLAGS @WERROR_CFLAGS@" +CXXFLAGS="$NO_WERROR_CXXFLAGS @WERROR_CXXFLAGS@" # If 'exit 77'; skip all C++ tests; otherwise ':'. BISON_CXX_WORKS='@BISON_CXX_WORKS@' -# We want no optimization with C++, too. -CXXFLAGS='@O0CXXFLAGS@ @WARN_CXXFLAGS_TEST@ @WERROR_CFLAGS@' +# Handle --compile-c-with-cxx here, once CXX and CXXFLAGS are known. +if "$at_arg_compile_c_with_cxx"; then + CC=$CXX + O0CFLAGS=$O0CXXFLAGS + NO_WERROR_CFLAGS=$NO_WERROR_CXXFLAGS + CFLAGS=$CXXFLAGS +fi + + +## ------- ## +## Other. ## +## ------- ## # Are special link options needed? LDFLAGS='@LDFLAGS@' @@ -62,10 +79,3 @@ CONF_JAVA='@CONF_JAVA@' # Use simple quotes (lib/quote.c). LC_CTYPE=C export LC_CTYPE - - -# Handle --compile-c-with-cxx here, once CXX and CXXFLAGS are known. -if "$at_arg_compile_c_with_cxx"; then - CC=$CXX - CFLAGS=$CXXFLAGS -fi -- 2.45.2