From 7092d215fae51111c2fc88ac6cc4a9dd01912cc6 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 25 May 2019 17:55:18 +0930 Subject: [PATCH] configure: detect modern gcc, and only suppress necessary errors. Drive-by fix of CONFIGURATOR_CC setting when CC is overridden on cmdline (not via env var). Note that clang defines __GNUC__ (to 4) :( Signed-off-by: Rusty Russell --- configure | 62 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/configure b/configure index e78893cce..44af2dab2 100755 --- a/configure +++ b/configure @@ -11,12 +11,12 @@ DEVELOPER=${DEVELOPER:-0} EXPERIMENTAL_FEATURES=${EXPERIMENTAL_FEATURES:-0} COMPAT=${COMPAT:-1} STATIC=${STATIC:-0} -CONFIGURATOR_CC=${CONFIGURATOR_CC:-$CC} ASAN=${ASAN:-0} CONFIGURATOR=ccan/tools/configurator/configurator CONFIG_VAR_FILE=config.vars CONFIG_HEADER=ccan/config.h +BASE_WARNFLAGS="-Wall -Wundef -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wold-style-definition -Werror" usage_with_default() { @@ -40,16 +40,19 @@ default_coptflags() fi } -# Given COPTFLAGS, what CWARNFLAGS do we default to. +# Given COPTFLAGS, HAVE_GCC and HAVE_MODERN_GCC, what CWARNFLAGS to default to? default_cwarnflags() { - BASE="-Wall -Wundef -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wold-style-definition" - # We can use -Werror if no optimization, or if -O3. - if [ -z "${1##*-O3*}" ]; then - echo "$BASE -Werror" - else - echo "$BASE" + F=$BASE_WARNFLAGS + # Clang doesn't like -Wno-error=maybe-uninitialized, but doesn't seem + # to give spurious warnings, either. + if [ "$2" = 1 ]; then + # With old gccs, or optimization != -O3, we need to suppress some warnings. + if [ -n "${1##*-O3*}" ] || [ "$3" != "1" ]; then + F="$F -Wno-error=maybe-uninitialized" + fi fi + echo "$F" } usage() @@ -58,12 +61,13 @@ usage() echo "If --reconfigure is specified, $CONFIG_VAR_FILE will set defaults." echo "Default settings:" DEFAULT_COPTFLAGS="$(default_coptflags $DEVELOPER)" - DEFAULT_CWARNFLAGS="$(default_coptflags $DEFAULT_COPTFLAGS)" + # We assume we have a modern gcc. + DEFAULT_CWARNFLAGS="$(default_coptflags $DEFAULT_COPTFLAGS 1 1)" usage_with_default "CC" "$CC" usage_with_default "CWARNFLAGS" "$DEFAULT_CWARNFLAGS" usage_with_default "COPTFLAGS" "$DEFAULT_COPTFLAGS" usage_with_default "CDEBUGFLAGS" "$CDEBUGFLAGS" - usage_with_default "CONFIGURATOR_CC" "$CONFIGURATOR_CC" + usage_with_default "CONFIGURATOR_CC" "${CONFIGURATOR_CC:-$CC}" echo " To override compile line for configurator itself" usage_with_default "PYTEST" "$PYTEST" @@ -171,14 +175,14 @@ if [ -z ${COPTFLAGS+x} ]; then COPTFLAGS=$(default_coptflags "$DEVELOPER") fi -# We only enable Werror if we're -O3 or no-optimization. Otherwise gcc gives -# false positives. -if [ -z ${CWARNFLAGS+x} ]; then - CWARNFLAGS=$(default_cwarnflags "$COPTFLAGS") +# Default CONFIGURATOR CC is CC. +if [ -z ${CONFIGURATOR_CC+x} ]; then + CONFIGURATOR_CC=$CC fi +# We assume warning flags don't affect congfigurator that much! echo -n "Compiling $CONFIGURATOR..." -$CC $CWARNFLAGS $CDEBUGFLAGS $COPTFLAGS -o $CONFIGURATOR $CONFIGURATOR.c +$CC ${CWARNFLAGS:-$BASE_WARNFLAGS} $CDEBUGFLAGS $COPTFLAGS -o $CONFIGURATOR $CONFIGURATOR.c echo "done" if [ -z "$VALGRIND" ]; then @@ -201,7 +205,7 @@ if [ "$ASAN" = "1" ]; then fi rm -f $CONFIG_VAR_FILE.$$ -$CONFIGURATOR --extra-tests --autotools-style --var-file=$CONFIG_VAR_FILE.$$ --header-file=$CONFIG_HEADER --configurator-cc="$CONFIGURATOR_CC" "$CC" $CWARNFLAGS $CDEBUGFLAGS $COPTFLAGS <