From ec89f6d04a6b5ac67ec787d28943e4fa4188e5f4 Mon Sep 17 00:00:00 2001 From: Alexander Gramiak Date: Wed, 1 May 2019 16:31:23 -0600 Subject: [PATCH] warnings: Add new macro gl_WARN_ADD_MULTIPLE * m4/warnings.m4 (gl_WARN_ADD_MULTIPLE): New macro. --- ChangeLog | 5 +++++ m4/warnings.m4 | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/ChangeLog b/ChangeLog index cf4116bf3..324112055 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2019-05-01 Alexander Gramiak + + warnings: Add new macro gl_WARN_ADD_MULTIPLE + * m4/warnings.m4 (gl_WARN_ADD_MULTIPLE): New macro. + 2019-04-30 Paul Eggert Sync lib/mktime-internal.h from glibc diff --git a/m4/warnings.m4 b/m4/warnings.m4 index 235cac617..92939233d 100644 --- a/m4/warnings.m4 +++ b/m4/warnings.m4 @@ -49,6 +49,52 @@ AS_VAR_POPDEF([gl_Flags])dnl AS_VAR_POPDEF([gl_Warn])dnl ]) +# gl_WARN_ADD_MULTIPLE(OPTIONS, [VARIABLE = WARN_CFLAGS/WARN_CXXFLAGS], +# [PROGRAM = AC_LANG_PROGRAM()]) +# ----------------------------------------------------------------- +# Check if the compiler supports OPTIONS when compiling PROGRAM +# First check if all OPTIONS are supported together, and if not, +# check each option individually. +# +# The effects of this macro depend on the current language (_AC_LANG). +AC_DEFUN([gl_WARN_ADD_MULTIPLE], +[ +dnl FIXME: gl_Warn must be used unquoted until we can assume Autoconf +dnl 2.64 or newer. +AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl +AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl +gl_positives= +for gl_warn_item in $1; do + case $gl_warn_item in + -Wno-*) gl_positives="$gl_positives -W`expr "X$gl_warn_item" : 'X-Wno-\(.*\)'`" ;; + *) gl_positives="$gl_positives $gl_warn_item" + esac +done +m4_pushdef([gl_Positives], [$gl_positives])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]), [ + gl_save_compiler_FLAGS="$gl_Flags" + gl_AS_VAR_APPEND(m4_defn([gl_Flags]), + [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positives])["]) + AC_LINK_IFELSE([m4_default([$3], [AC_LANG_PROGRAM([])])], + [AS_VAR_SET(gl_Warn, [yes])], + [AS_VAR_SET(gl_Warn, [no])]) + gl_Flags="$gl_save_compiler_FLAGS" +]) +AS_VAR_IF(gl_Warn, + [yes], + [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_]_AC_LANG_PREFIX[FLAGS]], [[$2]]), + [" $1"])], + [for gl_warn_item in $1; do + gl_WARN_ADD([$gl_warn_item]) + done]) +m4_popdef([gl_Positives])dnl +AS_VAR_POPDEF([gl_Flags])dnl +AS_VAR_POPDEF([gl_Warn])dnl +m4_ifval([$2], + [AS_LITERAL_IF([$2], [AC_SUBST([$2])])], + [AC_SUBST([WARN_]_AC_LANG_PREFIX[FLAGS])])dnl +]) + # gl_UNKNOWN_WARNINGS_ARE_ERRORS # ------------------------------ # Clang doesn't complain about unknown warning options unless one also -- 2.21.0