| 1 | # manywarnings.m4 serial 5 |
| 2 | dnl Copyright (C) 2008-2013 Free Software Foundation, Inc. |
| 3 | dnl This file is free software; the Free Software Foundation |
| 4 | dnl gives unlimited permission to copy and/or distribute it, |
| 5 | dnl with or without modifications, as long as this notice is preserved. |
| 6 | |
| 7 | dnl From Simon Josefsson |
| 8 | |
| 9 | # gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR) |
| 10 | # -------------------------------------------------- |
| 11 | # Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR. |
| 12 | # Elements separated by whitespace. In set logic terms, the function |
| 13 | # does OUTVAR = LISTVAR \ REMOVEVAR. |
| 14 | AC_DEFUN([gl_MANYWARN_COMPLEMENT], |
| 15 | [ |
| 16 | gl_warn_set= |
| 17 | set x $2; shift |
| 18 | for gl_warn_item |
| 19 | do |
| 20 | case " $3 " in |
| 21 | *" $gl_warn_item "*) |
| 22 | ;; |
| 23 | *) |
| 24 | gl_warn_set="$gl_warn_set $gl_warn_item" |
| 25 | ;; |
| 26 | esac |
| 27 | done |
| 28 | $1=$gl_warn_set |
| 29 | ]) |
| 30 | |
| 31 | # gl_MANYWARN_ALL_GCC(VARIABLE) |
| 32 | # ----------------------------- |
| 33 | # Add all documented GCC warning parameters to variable VARIABLE. |
| 34 | # Note that you need to test them using gl_WARN_ADD if you want to |
| 35 | # make sure your gcc understands it. |
| 36 | AC_DEFUN([gl_MANYWARN_ALL_GCC], |
| 37 | [ |
| 38 | dnl First, check for some issues that only occur when combining multiple |
| 39 | dnl gcc warning categories. |
| 40 | AC_REQUIRE([AC_PROG_CC]) |
| 41 | if test -n "$GCC"; then |
| 42 | |
| 43 | dnl Check if -W -Werror -Wno-missing-field-initializers is supported |
| 44 | dnl with the current $CC $CFLAGS $CPPFLAGS. |
| 45 | AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported]) |
| 46 | AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [ |
| 47 | gl_save_CFLAGS="$CFLAGS" |
| 48 | CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers" |
| 49 | AC_COMPILE_IFELSE( |
| 50 | [AC_LANG_PROGRAM([[]], [[]])], |
| 51 | [gl_cv_cc_nomfi_supported=yes], |
| 52 | [gl_cv_cc_nomfi_supported=no]) |
| 53 | CFLAGS="$gl_save_CFLAGS"]) |
| 54 | AC_MSG_RESULT([$gl_cv_cc_nomfi_supported]) |
| 55 | |
| 56 | if test "$gl_cv_cc_nomfi_supported" = yes; then |
| 57 | dnl Now check whether -Wno-missing-field-initializers is needed |
| 58 | dnl for the { 0, } construct. |
| 59 | AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed]) |
| 60 | AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [ |
| 61 | gl_save_CFLAGS="$CFLAGS" |
| 62 | CFLAGS="$CFLAGS -W -Werror" |
| 63 | AC_COMPILE_IFELSE( |
| 64 | [AC_LANG_PROGRAM( |
| 65 | [[void f (void) |
| 66 | { |
| 67 | typedef struct { int a; int b; } s_t; |
| 68 | s_t s1 = { 0, }; |
| 69 | } |
| 70 | ]], |
| 71 | [[]])], |
| 72 | [gl_cv_cc_nomfi_needed=no], |
| 73 | [gl_cv_cc_nomfi_needed=yes]) |
| 74 | CFLAGS="$gl_save_CFLAGS" |
| 75 | ]) |
| 76 | AC_MSG_RESULT([$gl_cv_cc_nomfi_needed]) |
| 77 | fi |
| 78 | |
| 79 | dnl Next, check if -Werror -Wuninitialized is useful with the |
| 80 | dnl user's choice of $CFLAGS; some versions of gcc warn that it |
| 81 | dnl has no effect if -O is not also used |
| 82 | AC_MSG_CHECKING([whether -Wuninitialized is supported]) |
| 83 | AC_CACHE_VAL([gl_cv_cc_uninitialized_supported], [ |
| 84 | gl_save_CFLAGS="$CFLAGS" |
| 85 | CFLAGS="$CFLAGS -Werror -Wuninitialized" |
| 86 | AC_COMPILE_IFELSE( |
| 87 | [AC_LANG_PROGRAM([[]], [[]])], |
| 88 | [gl_cv_cc_uninitialized_supported=yes], |
| 89 | [gl_cv_cc_uninitialized_supported=no]) |
| 90 | CFLAGS="$gl_save_CFLAGS"]) |
| 91 | AC_MSG_RESULT([$gl_cv_cc_uninitialized_supported]) |
| 92 | |
| 93 | fi |
| 94 | |
| 95 | # List all gcc warning categories. |
| 96 | gl_manywarn_set= |
| 97 | for gl_manywarn_item in \ |
| 98 | -W \ |
| 99 | -Wabi \ |
| 100 | -Waddress \ |
| 101 | -Waggressive-loop-optimizations \ |
| 102 | -Wall \ |
| 103 | -Warray-bounds \ |
| 104 | -Wattributes \ |
| 105 | -Wbad-function-cast \ |
| 106 | -Wbuiltin-macro-redefined \ |
| 107 | -Wcast-align \ |
| 108 | -Wchar-subscripts \ |
| 109 | -Wclobbered \ |
| 110 | -Wcomment \ |
| 111 | -Wcomments \ |
| 112 | -Wcoverage-mismatch \ |
| 113 | -Wcpp \ |
| 114 | -Wdeprecated \ |
| 115 | -Wdeprecated-declarations \ |
| 116 | -Wdisabled-optimization \ |
| 117 | -Wdiv-by-zero \ |
| 118 | -Wdouble-promotion \ |
| 119 | -Wempty-body \ |
| 120 | -Wendif-labels \ |
| 121 | -Wenum-compare \ |
| 122 | -Wextra \ |
| 123 | -Wformat-contains-nul \ |
| 124 | -Wformat-extra-args \ |
| 125 | -Wformat-nonliteral \ |
| 126 | -Wformat-security \ |
| 127 | -Wformat-y2k \ |
| 128 | -Wformat-zero-length \ |
| 129 | -Wfree-nonheap-object \ |
| 130 | -Wignored-qualifiers \ |
| 131 | -Wimplicit \ |
| 132 | -Wimplicit-function-declaration \ |
| 133 | -Wimplicit-int \ |
| 134 | -Winit-self \ |
| 135 | -Winline \ |
| 136 | -Wint-to-pointer-cast \ |
| 137 | -Winvalid-memory-model \ |
| 138 | -Winvalid-pch \ |
| 139 | -Wjump-misses-init \ |
| 140 | -Wlogical-op \ |
| 141 | -Wmain \ |
| 142 | -Wmaybe-uninitialized \ |
| 143 | -Wmissing-braces \ |
| 144 | -Wmissing-declarations \ |
| 145 | -Wmissing-field-initializers \ |
| 146 | -Wmissing-include-dirs \ |
| 147 | -Wmissing-parameter-type \ |
| 148 | -Wmissing-prototypes \ |
| 149 | -Wmudflap \ |
| 150 | -Wmultichar \ |
| 151 | -Wnarrowing \ |
| 152 | -Wnested-externs \ |
| 153 | -Wnonnull \ |
| 154 | -Wnormalized=nfc \ |
| 155 | -Wold-style-declaration \ |
| 156 | -Wold-style-definition \ |
| 157 | -Woverflow \ |
| 158 | -Woverlength-strings \ |
| 159 | -Woverride-init \ |
| 160 | -Wpacked \ |
| 161 | -Wpacked-bitfield-compat \ |
| 162 | -Wparentheses \ |
| 163 | -Wpointer-arith \ |
| 164 | -Wpointer-sign \ |
| 165 | -Wpointer-to-int-cast \ |
| 166 | -Wpragmas \ |
| 167 | -Wreturn-local-addr \ |
| 168 | -Wreturn-type \ |
| 169 | -Wsequence-point \ |
| 170 | -Wshadow \ |
| 171 | -Wsizeof-pointer-memaccess \ |
| 172 | -Wstack-protector \ |
| 173 | -Wstrict-aliasing \ |
| 174 | -Wstrict-overflow \ |
| 175 | -Wstrict-prototypes \ |
| 176 | -Wsuggest-attribute=const \ |
| 177 | -Wsuggest-attribute=format \ |
| 178 | -Wsuggest-attribute=noreturn \ |
| 179 | -Wsuggest-attribute=pure \ |
| 180 | -Wswitch \ |
| 181 | -Wswitch-default \ |
| 182 | -Wsync-nand \ |
| 183 | -Wsystem-headers \ |
| 184 | -Wtrampolines \ |
| 185 | -Wtrigraphs \ |
| 186 | -Wtype-limits \ |
| 187 | -Wuninitialized \ |
| 188 | -Wunknown-pragmas \ |
| 189 | -Wunsafe-loop-optimizations \ |
| 190 | -Wunused \ |
| 191 | -Wunused-but-set-parameter \ |
| 192 | -Wunused-but-set-variable \ |
| 193 | -Wunused-function \ |
| 194 | -Wunused-label \ |
| 195 | -Wunused-local-typedefs \ |
| 196 | -Wunused-macros \ |
| 197 | -Wunused-parameter \ |
| 198 | -Wunused-result \ |
| 199 | -Wunused-value \ |
| 200 | -Wunused-variable \ |
| 201 | -Wvarargs \ |
| 202 | -Wvariadic-macros \ |
| 203 | -Wvector-operation-performance \ |
| 204 | -Wvla \ |
| 205 | -Wvolatile-register-var \ |
| 206 | -Wwrite-strings \ |
| 207 | \ |
| 208 | ; do |
| 209 | gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" |
| 210 | done |
| 211 | |
| 212 | # Disable specific options as needed. |
| 213 | if test "$gl_cv_cc_nomfi_needed" = yes; then |
| 214 | gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" |
| 215 | fi |
| 216 | |
| 217 | if test "$gl_cv_cc_uninitialized_supported" = no; then |
| 218 | gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized" |
| 219 | fi |
| 220 | |
| 221 | $1=$gl_manywarn_set |
| 222 | ]) |