From 6a937f0645ab335ef13a79951c3e94d6d8becea9 Mon Sep 17 00:00:00 2001 From: Filipe Brandenburger Date: Tue, 22 Sep 2015 09:41:32 -0700 Subject: build-sys: properly quote m4 macro arguments in CC_CHECK_FLAGS_APPEND The variables should be quoted inside [...] to avoid double macro expansion. This is currently not an issue, since the values (-W...) are not really macros, but we might as well just fix that issue now. Tested by re-running autogen.sh and comparing the value of OUR_CFLAGS in the generated Makefile. Ran a full build from a clean tree to confirm no other issues were introduced. --- m4/attributes.m4 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/m4/attributes.m4 b/m4/attributes.m4 index 97f094b07a..4b0fcdce3d 100644 --- a/m4/attributes.m4 +++ b/m4/attributes.m4 @@ -54,8 +54,8 @@ AC_DEFUN([CC_CHECK_FLAG_APPEND], [ dnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2]) AC_DEFUN([CC_CHECK_FLAGS_APPEND], [ - for flag in $3; do - CC_CHECK_FLAG_APPEND($1, $2, $flag) + for flag in [$3]; do + CC_CHECK_FLAG_APPEND([$1], [$2], $flag) done ]) -- cgit v1.2.3-54-g00ecf From a01a4517e16c532fbd5203fbfe2571255e2cd312 Mon Sep 17 00:00:00 2001 From: Filipe Brandenburger Date: Sat, 5 Sep 2015 16:52:51 -0700 Subject: build-sys: Check behavior of -Werror=shadow before deciding to use it gcc versions 4.6 and earlier used to complain when a local variable shadows a global function, 4.7 and above only complain if a local variable shadows a global variable. Fix this by checking whether gcc 4.7+ behavior is in place before deciding to use -Werror=shadow in $(CFLAGS), by using a custom test program source that shadows a global function with a local variable and confirming that -Werror=shadow does not make the compile to break. Tested: - On gcc 4.7 and 4.8, confirmed nothing changed (other than the order of the -Werror=shadow argument, going to the end of CFLAGS.) - On gcc 4.6, confirmed by looking at the config.log output that the check for -Werror=shadow failed and it was not included in CFLAGS. - Ran `make V=1` to confirm -Werror=shadow was still in use, introduced a bogus shadowing issue and confirmed it was caught when building with a recent gcc. --- configure.ac | 12 +++++++++++- m4/attributes.m4 | 13 ++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index d71cb07366..5cdd1d1462 100644 --- a/configure.ac +++ b/configure.ac @@ -171,7 +171,6 @@ CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\ -Werror=implicit-function-declaration \ -Werror=missing-declarations \ -Werror=return-type \ - -Werror=shadow \ -Wstrict-prototypes \ -Wredundant-decls \ -Wmissing-noreturn \ @@ -196,6 +195,17 @@ CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\ -fPIE \ --param=ssp-buffer-size=4]) +CC_CHECK_FLAG_APPEND([with_cflags], [CFLAGS], [-Werror=shadow], [ +#include +#include +typedef uint64_t usec_t; +usec_t now(clockid_t clock); +int main(void) { + struct timespec now; + return 0; +} +]) + AS_CASE([$CC], [*clang*], [CC_CHECK_FLAGS_APPEND([with_cppflags], [CPPFLAGS], [\ -Wno-typedef-redefinition \ diff --git a/m4/attributes.m4 b/m4/attributes.m4 index 4b0fcdce3d..db5df250f4 100644 --- a/m4/attributes.m4 +++ b/m4/attributes.m4 @@ -35,15 +35,18 @@ dnl well. dnl Check if FLAG in ENV-VAR is supported by compiler and append it dnl to WHERE-TO-APPEND variable. Note that we invert -Wno-* checks to -dnl -W* as gcc cannot test for negated warnings. -dnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG]) +dnl -W* as gcc cannot test for negated warnings. If a C snippet is passed, +dnl use it, otherwise use a simple main() definition that just returns 0. +dnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG], [C-SNIPPET]) AC_DEFUN([CC_CHECK_FLAG_APPEND], [ AC_CACHE_CHECK([if $CC supports flag $3 in envvar $2], AS_TR_SH([cc_cv_$2_$3]), [eval "AS_TR_SH([cc_save_$2])='${$2}'" eval "AS_TR_SH([$2])='-Werror `echo "$3" | sed 's/^-Wno-/-W/'`'" - AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; } ])], + AC_LINK_IFELSE([AC_LANG_SOURCE(ifelse([$4], [], + [int main(void) { return 0; } ], + [$4]))], [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"], [eval "AS_TR_SH([cc_cv_$2_$3])='no'"]) eval "AS_TR_SH([$2])='$cc_save_$2'"]) @@ -52,10 +55,10 @@ AC_DEFUN([CC_CHECK_FLAG_APPEND], [ [eval "$1='${$1} $3'"]) ]) -dnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2]) +dnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2], [C-SNIPPET]) AC_DEFUN([CC_CHECK_FLAGS_APPEND], [ for flag in [$3]; do - CC_CHECK_FLAG_APPEND([$1], [$2], $flag) + CC_CHECK_FLAG_APPEND([$1], [$2], $flag, [$4]) done ]) -- cgit v1.2.3-54-g00ecf