manywarnings.m4 6.12 KB
Newer Older
Paul Eggert's avatar
Paul Eggert committed
1
# manywarnings.m4 serial 5
2
dnl Copyright (C) 2008-2013 Free Software Foundation, Inc.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.

dnl From Simon Josefsson

# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR)
# --------------------------------------------------
# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR.
# Elements separated by whitespace.  In set logic terms, the function
# does OUTVAR = LISTVAR \ REMOVEVAR.
AC_DEFUN([gl_MANYWARN_COMPLEMENT],
[
  gl_warn_set=
  set x $2; shift
  for gl_warn_item
  do
    case " $3 " in
      *" $gl_warn_item "*)
        ;;
      *)
        gl_warn_set="$gl_warn_set $gl_warn_item"
        ;;
    esac
  done
  $1=$gl_warn_set
])

# gl_MANYWARN_ALL_GCC(VARIABLE)
# -----------------------------
# Add all documented GCC warning parameters to variable VARIABLE.
# Note that you need to test them using gl_WARN_ADD if you want to
# make sure your gcc understands it.
AC_DEFUN([gl_MANYWARN_ALL_GCC],
[
Paul Eggert's avatar
Paul Eggert committed
38 39
  dnl First, check for some issues that only occur when combining multiple
  dnl gcc warning categories.
40 41 42
  AC_REQUIRE([AC_PROG_CC])
  if test -n "$GCC"; then

Paul Eggert's avatar
Paul Eggert committed
43
    dnl Check if -W -Werror -Wno-missing-field-initializers is supported
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
    dnl with the current $CC $CFLAGS $CPPFLAGS.
    AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported])
    AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [
      gl_save_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers"
      AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM([[]], [[]])],
        [gl_cv_cc_nomfi_supported=yes],
        [gl_cv_cc_nomfi_supported=no])
      CFLAGS="$gl_save_CFLAGS"])
    AC_MSG_RESULT([$gl_cv_cc_nomfi_supported])

    if test "$gl_cv_cc_nomfi_supported" = yes; then
      dnl Now check whether -Wno-missing-field-initializers is needed
      dnl for the { 0, } construct.
      AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed])
      AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [
        gl_save_CFLAGS="$CFLAGS"
        CFLAGS="$CFLAGS -W -Werror"
        AC_COMPILE_IFELSE(
          [AC_LANG_PROGRAM(
             [[void f (void)
               {
                 typedef struct { int a; int b; } s_t;
                 s_t s1 = { 0, };
               }
             ]],
             [[]])],
          [gl_cv_cc_nomfi_needed=no],
          [gl_cv_cc_nomfi_needed=yes])
        CFLAGS="$gl_save_CFLAGS"
      ])
      AC_MSG_RESULT([$gl_cv_cc_nomfi_needed])
    fi
Paul Eggert's avatar
Paul Eggert committed
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92

    dnl Next, check if -Werror -Wuninitialized is useful with the
    dnl user's choice of $CFLAGS; some versions of gcc warn that it
    dnl has no effect if -O is not also used
    AC_MSG_CHECKING([whether -Wuninitialized is supported])
    AC_CACHE_VAL([gl_cv_cc_uninitialized_supported], [
      gl_save_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS -Werror -Wuninitialized"
      AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM([[]], [[]])],
        [gl_cv_cc_uninitialized_supported=yes],
        [gl_cv_cc_uninitialized_supported=no])
      CFLAGS="$gl_save_CFLAGS"])
    AC_MSG_RESULT([$gl_cv_cc_uninitialized_supported])

93 94
  fi

Paul Eggert's avatar
Paul Eggert committed
95
  # List all gcc warning categories.
96 97 98
  gl_manywarn_set=
  for gl_manywarn_item in \
    -W \
Paul Eggert's avatar
Paul Eggert committed
99 100 101 102 103
    -Wabi \
    -Waddress \
    -Wall \
    -Warray-bounds \
    -Wattributes \
104 105
    -Wbad-function-cast \
    -Wbuiltin-macro-redefined \
Paul Eggert's avatar
Paul Eggert committed
106 107 108 109 110
    -Wcast-align \
    -Wchar-subscripts \
    -Wclobbered \
    -Wcomment \
    -Wcomments \
111 112 113 114
    -Wcoverage-mismatch \
    -Wcpp \
    -Wdeprecated \
    -Wdeprecated-declarations \
Paul Eggert's avatar
Paul Eggert committed
115
    -Wdisabled-optimization \
116 117
    -Wdiv-by-zero \
    -Wdouble-promotion \
Paul Eggert's avatar
Paul Eggert committed
118
    -Wempty-body \
119
    -Wendif-labels \
Paul Eggert's avatar
Paul Eggert committed
120
    -Wenum-compare \
121 122 123
    -Wextra \
    -Wformat-contains-nul \
    -Wformat-extra-args \
Paul Eggert's avatar
Paul Eggert committed
124 125 126
    -Wformat-nonliteral \
    -Wformat-security \
    -Wformat-y2k \
127 128
    -Wformat-zero-length \
    -Wformat=2 \
Paul Eggert's avatar
Paul Eggert committed
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
    -Wfree-nonheap-object \
    -Wignored-qualifiers \
    -Wimplicit \
    -Wimplicit-function-declaration \
    -Wimplicit-int \
    -Winit-self \
    -Winline \
    -Wint-to-pointer-cast \
    -Winvalid-memory-model \
    -Winvalid-pch \
    -Wjump-misses-init \
    -Wlogical-op \
    -Wmain \
    -Wmaybe-uninitialized \
    -Wmissing-braces \
    -Wmissing-declarations \
    -Wmissing-field-initializers \
    -Wmissing-format-attribute \
    -Wmissing-include-dirs \
    -Wmissing-noreturn \
    -Wmissing-parameter-type \
    -Wmissing-prototypes \
    -Wmudflap \
152
    -Wmultichar \
Paul Eggert's avatar
Paul Eggert committed
153 154 155
    -Wnarrowing \
    -Wnested-externs \
    -Wnonnull \
156
    -Wnormalized=nfc \
Paul Eggert's avatar
Paul Eggert committed
157 158
    -Wold-style-declaration \
    -Wold-style-definition \
159
    -Woverflow \
Paul Eggert's avatar
Paul Eggert committed
160 161 162 163 164 165 166
    -Woverlength-strings \
    -Woverride-init \
    -Wpacked \
    -Wpacked-bitfield-compat \
    -Wparentheses \
    -Wpointer-arith \
    -Wpointer-sign \
167 168
    -Wpointer-to-int-cast \
    -Wpragmas \
Paul Eggert's avatar
Paul Eggert committed
169 170 171 172 173 174 175 176
    -Wreturn-type \
    -Wsequence-point \
    -Wshadow \
    -Wsizeof-pointer-memaccess \
    -Wstack-protector \
    -Wstrict-aliasing \
    -Wstrict-overflow \
    -Wstrict-prototypes \
177
    -Wsuggest-attribute=const \
Paul Eggert's avatar
Paul Eggert committed
178
    -Wsuggest-attribute=format \
179 180
    -Wsuggest-attribute=noreturn \
    -Wsuggest-attribute=pure \
Paul Eggert's avatar
Paul Eggert committed
181 182 183 184
    -Wswitch \
    -Wswitch-default \
    -Wsync-nand \
    -Wsystem-headers \
185
    -Wtrampolines \
Paul Eggert's avatar
Paul Eggert committed
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
    -Wtrigraphs \
    -Wtype-limits \
    -Wuninitialized \
    -Wunknown-pragmas \
    -Wunreachable-code \
    -Wunsafe-loop-optimizations \
    -Wunused \
    -Wunused-but-set-parameter \
    -Wunused-but-set-variable \
    -Wunused-function \
    -Wunused-label \
    -Wunused-local-typedefs \
    -Wunused-macros \
    -Wunused-parameter \
    -Wunused-result \
    -Wunused-value \
    -Wunused-variable \
    -Wvarargs \
    -Wvariadic-macros \
    -Wvector-operation-performance \
    -Wvla \
    -Wvolatile-register-var \
    -Wwrite-strings \
    \
210 211 212 213
    ; do
    gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item"
  done

Paul Eggert's avatar
Paul Eggert committed
214
  # Disable specific options as needed.
215 216 217 218
  if test "$gl_cv_cc_nomfi_needed" = yes; then
    gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers"
  fi

Paul Eggert's avatar
Paul Eggert committed
219 220 221 222
  if test "$gl_cv_cc_uninitialized_supported" = no; then
    gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized"
  fi

223 224
  $1=$gl_manywarn_set
])