Blame m4/manywarnings.m4

Packit Service ea0369
# manywarnings.m4 serial 7
Packit Service ea0369
dnl Copyright (C) 2008-2014 Free Software Foundation, Inc.
Packit Service ea0369
dnl This file is free software; the Free Software Foundation
Packit Service ea0369
dnl gives unlimited permission to copy and/or distribute it,
Packit Service ea0369
dnl with or without modifications, as long as this notice is preserved.
Packit Service ea0369
Packit Service ea0369
dnl From Simon Josefsson
Packit Service ea0369
Packit Service ea0369
# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR)
Packit Service ea0369
# --------------------------------------------------
Packit Service ea0369
# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR.
Packit Service ea0369
# Elements separated by whitespace.  In set logic terms, the function
Packit Service ea0369
# does OUTVAR = LISTVAR \ REMOVEVAR.
Packit Service ea0369
AC_DEFUN([gl_MANYWARN_COMPLEMENT],
Packit Service ea0369
[
Packit Service ea0369
  gl_warn_set=
Packit Service ea0369
  set x $2; shift
Packit Service ea0369
  for gl_warn_item
Packit Service ea0369
  do
Packit Service ea0369
    case " $3 " in
Packit Service ea0369
      *" $gl_warn_item "*)
Packit Service ea0369
        ;;
Packit Service ea0369
      *)
Packit Service ea0369
        gl_warn_set="$gl_warn_set $gl_warn_item"
Packit Service ea0369
        ;;
Packit Service ea0369
    esac
Packit Service ea0369
  done
Packit Service ea0369
  $1=$gl_warn_set
Packit Service ea0369
])
Packit Service ea0369
Packit Service ea0369
# gl_MANYWARN_ALL_GCC(VARIABLE)
Packit Service ea0369
# -----------------------------
Packit Service ea0369
# Add all documented GCC warning parameters to variable VARIABLE.
Packit Service ea0369
# Note that you need to test them using gl_WARN_ADD if you want to
Packit Service ea0369
# make sure your gcc understands it.
Packit Service ea0369
AC_DEFUN([gl_MANYWARN_ALL_GCC],
Packit Service ea0369
[
Packit Service ea0369
  dnl First, check for some issues that only occur when combining multiple
Packit Service ea0369
  dnl gcc warning categories.
Packit Service ea0369
  AC_REQUIRE([AC_PROG_CC])
Packit Service ea0369
  if test -n "$GCC"; then
Packit Service ea0369
Packit Service ea0369
    dnl Check if -W -Werror -Wno-missing-field-initializers is supported
Packit Service ea0369
    dnl with the current $CC $CFLAGS $CPPFLAGS.
Packit Service ea0369
    AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported])
Packit Service ea0369
    AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [
Packit Service ea0369
      gl_save_CFLAGS="$CFLAGS"
Packit Service ea0369
      CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers"
Packit Service ea0369
      AC_COMPILE_IFELSE(
Packit Service ea0369
        [AC_LANG_PROGRAM([[]], [[]])],
Packit Service ea0369
        [gl_cv_cc_nomfi_supported=yes],
Packit Service ea0369
        [gl_cv_cc_nomfi_supported=no])
Packit Service ea0369
      CFLAGS="$gl_save_CFLAGS"])
Packit Service ea0369
    AC_MSG_RESULT([$gl_cv_cc_nomfi_supported])
Packit Service ea0369
Packit Service ea0369
    if test "$gl_cv_cc_nomfi_supported" = yes; then
Packit Service ea0369
      dnl Now check whether -Wno-missing-field-initializers is needed
Packit Service ea0369
      dnl for the { 0, } construct.
Packit Service ea0369
      AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed])
Packit Service ea0369
      AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [
Packit Service ea0369
        gl_save_CFLAGS="$CFLAGS"
Packit Service ea0369
        CFLAGS="$CFLAGS -W -Werror"
Packit Service ea0369
        AC_COMPILE_IFELSE(
Packit Service ea0369
          [AC_LANG_PROGRAM(
Packit Service ea0369
             [[void f (void)
Packit Service ea0369
               {
Packit Service ea0369
                 typedef struct { int a; int b; } s_t;
Packit Service ea0369
                 s_t s1 = { 0, };
Packit Service ea0369
               }
Packit Service ea0369
             ]],
Packit Service ea0369
             [[]])],
Packit Service ea0369
          [gl_cv_cc_nomfi_needed=no],
Packit Service ea0369
          [gl_cv_cc_nomfi_needed=yes])
Packit Service ea0369
        CFLAGS="$gl_save_CFLAGS"
Packit Service ea0369
      ])
Packit Service ea0369
      AC_MSG_RESULT([$gl_cv_cc_nomfi_needed])
Packit Service ea0369
    fi
Packit Service ea0369
Packit Service ea0369
    dnl Next, check if -Werror -Wuninitialized is useful with the
Packit Service ea0369
    dnl user's choice of $CFLAGS; some versions of gcc warn that it
Packit Service ea0369
    dnl has no effect if -O is not also used
Packit Service ea0369
    AC_MSG_CHECKING([whether -Wuninitialized is supported])
Packit Service ea0369
    AC_CACHE_VAL([gl_cv_cc_uninitialized_supported], [
Packit Service ea0369
      gl_save_CFLAGS="$CFLAGS"
Packit Service ea0369
      CFLAGS="$CFLAGS -Werror -Wuninitialized"
Packit Service ea0369
      AC_COMPILE_IFELSE(
Packit Service ea0369
        [AC_LANG_PROGRAM([[]], [[]])],
Packit Service ea0369
        [gl_cv_cc_uninitialized_supported=yes],
Packit Service ea0369
        [gl_cv_cc_uninitialized_supported=no])
Packit Service ea0369
      CFLAGS="$gl_save_CFLAGS"])
Packit Service ea0369
    AC_MSG_RESULT([$gl_cv_cc_uninitialized_supported])
Packit Service ea0369
Packit Service ea0369
  fi
Packit Service ea0369
Packit Service ea0369
  # List all gcc warning categories.
Packit Service ea0369
  # To compare this list to your installed GCC's, run this Bash command:
Packit Service ea0369
  #
Packit Service ea0369
  # comm -3 \
Packit Service ea0369
  #  <(sed -n 's/^  *\(-[^ ]*\) .*/\1/p' manywarnings.m4 | sort) \
Packit Service ea0369
  #  <(gcc --help=warnings | sed -n 's/^  \(-[^ ]*\) .*/\1/p' | sort |
Packit Service ea0369
  #      grep -v -x -f <(
Packit Service ea0369
  #         awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec))
Packit Service ea0369
Packit Service ea0369
  gl_manywarn_set=
Packit Service ea0369
  for gl_manywarn_item in \
Packit Service ea0369
    -W \
Packit Service ea0369
    -Wabi \
Packit Service ea0369
    -Waddress \
Packit Service ea0369
    -Waggressive-loop-optimizations \
Packit Service ea0369
    -Wall \
Packit Service ea0369
    -Warray-bounds \
Packit Service ea0369
    -Wattributes \
Packit Service ea0369
    -Wbad-function-cast \
Packit Service ea0369
    -Wbuiltin-macro-redefined \
Packit Service ea0369
    -Wcast-align \
Packit Service ea0369
    -Wchar-subscripts \
Packit Service ea0369
    -Wclobbered \
Packit Service ea0369
    -Wcomment \
Packit Service ea0369
    -Wcomments \
Packit Service ea0369
    -Wcoverage-mismatch \
Packit Service ea0369
    -Wcpp \
Packit Service ea0369
    -Wdate-time \
Packit Service ea0369
    -Wdeprecated \
Packit Service ea0369
    -Wdeprecated-declarations \
Packit Service ea0369
    -Wdisabled-optimization \
Packit Service ea0369
    -Wdiv-by-zero \
Packit Service ea0369
    -Wdouble-promotion \
Packit Service ea0369
    -Wempty-body \
Packit Service ea0369
    -Wendif-labels \
Packit Service ea0369
    -Wenum-compare \
Packit Service ea0369
    -Wextra \
Packit Service ea0369
    -Wformat-contains-nul \
Packit Service ea0369
    -Wformat-extra-args \
Packit Service ea0369
    -Wformat-nonliteral \
Packit Service ea0369
    -Wformat-security \
Packit Service ea0369
    -Wformat-y2k \
Packit Service ea0369
    -Wformat-zero-length \
Packit Service ea0369
    -Wfree-nonheap-object \
Packit Service ea0369
    -Wignored-qualifiers \
Packit Service ea0369
    -Wimplicit \
Packit Service ea0369
    -Wimplicit-function-declaration \
Packit Service ea0369
    -Wimplicit-int \
Packit Service ea0369
    -Winit-self \
Packit Service ea0369
    -Winline \
Packit Service ea0369
    -Wint-to-pointer-cast \
Packit Service ea0369
    -Winvalid-memory-model \
Packit Service ea0369
    -Winvalid-pch \
Packit Service ea0369
    -Wjump-misses-init \
Packit Service ea0369
    -Wlogical-op \
Packit Service ea0369
    -Wmain \
Packit Service ea0369
    -Wmaybe-uninitialized \
Packit Service ea0369
    -Wmissing-braces \
Packit Service ea0369
    -Wmissing-declarations \
Packit Service ea0369
    -Wmissing-field-initializers \
Packit Service ea0369
    -Wmissing-include-dirs \
Packit Service ea0369
    -Wmissing-parameter-type \
Packit Service ea0369
    -Wmissing-prototypes \
Packit Service ea0369
    -Wmultichar \
Packit Service ea0369
    -Wnarrowing \
Packit Service ea0369
    -Wnested-externs \
Packit Service ea0369
    -Wnonnull \
Packit Service ea0369
    -Wold-style-declaration \
Packit Service ea0369
    -Wold-style-definition \
Packit Service ea0369
    -Wopenmp-simd \
Packit Service ea0369
    -Woverflow \
Packit Service ea0369
    -Woverlength-strings \
Packit Service ea0369
    -Woverride-init \
Packit Service ea0369
    -Wpacked \
Packit Service ea0369
    -Wpacked-bitfield-compat \
Packit Service ea0369
    -Wparentheses \
Packit Service ea0369
    -Wpointer-arith \
Packit Service ea0369
    -Wpointer-sign \
Packit Service ea0369
    -Wpointer-to-int-cast \
Packit Service ea0369
    -Wpragmas \
Packit Service ea0369
    -Wreturn-local-addr \
Packit Service ea0369
    -Wreturn-type \
Packit Service ea0369
    -Wsequence-point \
Packit Service ea0369
    -Wshadow \
Packit Service ea0369
    -Wsizeof-pointer-memaccess \
Packit Service ea0369
    -Wstack-protector \
Packit Service ea0369
    -Wstrict-aliasing \
Packit Service ea0369
    -Wstrict-overflow \
Packit Service ea0369
    -Wstrict-prototypes \
Packit Service ea0369
    -Wsuggest-attribute=const \
Packit Service ea0369
    -Wsuggest-attribute=format \
Packit Service ea0369
    -Wsuggest-attribute=noreturn \
Packit Service ea0369
    -Wsuggest-attribute=pure \
Packit Service ea0369
    -Wswitch \
Packit Service ea0369
    -Wswitch-default \
Packit Service ea0369
    -Wsync-nand \
Packit Service ea0369
    -Wsystem-headers \
Packit Service ea0369
    -Wtrampolines \
Packit Service ea0369
    -Wtrigraphs \
Packit Service ea0369
    -Wtype-limits \
Packit Service ea0369
    -Wuninitialized \
Packit Service ea0369
    -Wunknown-pragmas \
Packit Service ea0369
    -Wunsafe-loop-optimizations \
Packit Service ea0369
    -Wunused \
Packit Service ea0369
    -Wunused-but-set-parameter \
Packit Service ea0369
    -Wunused-but-set-variable \
Packit Service ea0369
    -Wunused-function \
Packit Service ea0369
    -Wunused-label \
Packit Service ea0369
    -Wunused-local-typedefs \
Packit Service ea0369
    -Wunused-macros \
Packit Service ea0369
    -Wunused-parameter \
Packit Service ea0369
    -Wunused-result \
Packit Service ea0369
    -Wunused-value \
Packit Service ea0369
    -Wunused-variable \
Packit Service ea0369
    -Wvarargs \
Packit Service ea0369
    -Wvariadic-macros \
Packit Service ea0369
    -Wvector-operation-performance \
Packit Service ea0369
    -Wvla \
Packit Service ea0369
    -Wvolatile-register-var \
Packit Service ea0369
    -Wwrite-strings \
Packit Service ea0369
    \
Packit Service ea0369
    ; do
Packit Service ea0369
    gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item"
Packit Service ea0369
  done
Packit Service ea0369
Packit Service ea0369
  # gcc --help=warnings outputs an unusual form for this option; list
Packit Service ea0369
  # it here so that the above 'comm' command doesn't report a false match.
Packit Service ea0369
  gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc"
Packit Service ea0369
Packit Service ea0369
  # These are needed for older GCC versions.
Packit Service ea0369
  if test -n "$GCC"; then
Packit Service ea0369
    case `($CC --version) 2>/dev/null` in
Packit Service ea0369
      'gcc (GCC) '[[0-3]].* | \
Packit Service ea0369
      'gcc (GCC) '4.[[0-7]].*)
Packit Service ea0369
        gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option"
Packit Service ea0369
        gl_manywarn_set="$gl_manywarn_set -funit-at-a-time"
Packit Service ea0369
          ;;
Packit Service ea0369
    esac
Packit Service ea0369
  fi
Packit Service ea0369
Packit Service ea0369
  # Disable specific options as needed.
Packit Service ea0369
  if test "$gl_cv_cc_nomfi_needed" = yes; then
Packit Service ea0369
    gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers"
Packit Service ea0369
  fi
Packit Service ea0369
Packit Service ea0369
  if test "$gl_cv_cc_uninitialized_supported" = no; then
Packit Service ea0369
    gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized"
Packit Service ea0369
  fi
Packit Service ea0369
Packit Service ea0369
  $1=$gl_manywarn_set
Packit Service ea0369
])