Commit | Line | Data |
---|---|---|
0e7a053e | 1 | # manywarnings.m4 serial 4 |
b8df54ff PE |
2 | dnl Copyright (C) 2008-2012 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 if -Wno-missing-field-initializers is needed. | |
39 | dnl -Wmissing-field-initializers is implied by -W, but that issues | |
40 | dnl warnings with GCC version before 4.7, for the common idiom | |
41 | dnl of initializing types on the stack to zero, using { 0, } | |
42 | AC_REQUIRE([AC_PROG_CC]) | |
43 | if test -n "$GCC"; then | |
44 | ||
45 | dnl First, check -W -Werror -Wno-missing-field-initializers is supported | |
46 | dnl with the current $CC $CFLAGS $CPPFLAGS. | |
47 | AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported]) | |
48 | AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [ | |
49 | gl_save_CFLAGS="$CFLAGS" | |
50 | CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers" | |
51 | AC_COMPILE_IFELSE( | |
52 | [AC_LANG_PROGRAM([[]], [[]])], | |
53 | [gl_cv_cc_nomfi_supported=yes], | |
54 | [gl_cv_cc_nomfi_supported=no]) | |
55 | CFLAGS="$gl_save_CFLAGS"]) | |
56 | AC_MSG_RESULT([$gl_cv_cc_nomfi_supported]) | |
57 | ||
58 | if test "$gl_cv_cc_nomfi_supported" = yes; then | |
59 | dnl Now check whether -Wno-missing-field-initializers is needed | |
60 | dnl for the { 0, } construct. | |
61 | AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed]) | |
62 | AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [ | |
63 | gl_save_CFLAGS="$CFLAGS" | |
64 | CFLAGS="$CFLAGS -W -Werror" | |
65 | AC_COMPILE_IFELSE( | |
66 | [AC_LANG_PROGRAM( | |
67 | [[void f (void) | |
68 | { | |
69 | typedef struct { int a; int b; } s_t; | |
70 | s_t s1 = { 0, }; | |
71 | } | |
72 | ]], | |
73 | [[]])], | |
74 | [gl_cv_cc_nomfi_needed=no], | |
75 | [gl_cv_cc_nomfi_needed=yes]) | |
76 | CFLAGS="$gl_save_CFLAGS" | |
77 | ]) | |
78 | AC_MSG_RESULT([$gl_cv_cc_nomfi_needed]) | |
79 | fi | |
80 | fi | |
81 | ||
82 | gl_manywarn_set= | |
83 | for gl_manywarn_item in \ | |
84 | -Wall \ | |
85 | -W \ | |
86 | -Wformat-y2k \ | |
87 | -Wformat-nonliteral \ | |
88 | -Wformat-security \ | |
89 | -Winit-self \ | |
90 | -Wmissing-include-dirs \ | |
91 | -Wswitch-default \ | |
92 | -Wswitch-enum \ | |
93 | -Wunused \ | |
94 | -Wunknown-pragmas \ | |
95 | -Wstrict-aliasing \ | |
96 | -Wstrict-overflow \ | |
97 | -Wsystem-headers \ | |
98 | -Wfloat-equal \ | |
99 | -Wtraditional \ | |
100 | -Wtraditional-conversion \ | |
101 | -Wdeclaration-after-statement \ | |
102 | -Wundef \ | |
103 | -Wshadow \ | |
104 | -Wunsafe-loop-optimizations \ | |
105 | -Wpointer-arith \ | |
106 | -Wbad-function-cast \ | |
107 | -Wc++-compat \ | |
108 | -Wcast-qual \ | |
109 | -Wcast-align \ | |
110 | -Wwrite-strings \ | |
111 | -Wconversion \ | |
112 | -Wsign-conversion \ | |
113 | -Wlogical-op \ | |
114 | -Waggregate-return \ | |
115 | -Wstrict-prototypes \ | |
116 | -Wold-style-definition \ | |
117 | -Wmissing-prototypes \ | |
118 | -Wmissing-declarations \ | |
119 | -Wmissing-noreturn \ | |
120 | -Wmissing-format-attribute \ | |
121 | -Wpacked \ | |
122 | -Wpadded \ | |
123 | -Wredundant-decls \ | |
124 | -Wnested-externs \ | |
125 | -Wunreachable-code \ | |
126 | -Winline \ | |
127 | -Winvalid-pch \ | |
128 | -Wlong-long \ | |
129 | -Wvla \ | |
130 | -Wvolatile-register-var \ | |
131 | -Wdisabled-optimization \ | |
132 | -Wstack-protector \ | |
133 | -Woverlength-strings \ | |
134 | -Wbuiltin-macro-redefined \ | |
135 | -Wmudflap \ | |
136 | -Wpacked-bitfield-compat \ | |
137 | -Wsync-nand \ | |
138 | ; do | |
139 | gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" | |
140 | done | |
141 | # The following are not documented in the manual but are included in | |
142 | # output from gcc --help=warnings. | |
143 | for gl_manywarn_item in \ | |
144 | -Wattributes \ | |
145 | -Wcoverage-mismatch \ | |
b8df54ff PE |
146 | -Wunused-macros \ |
147 | ; do | |
148 | gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" | |
149 | done | |
150 | # More warnings from gcc 4.6.2 --help=warnings. | |
151 | for gl_manywarn_item in \ | |
152 | -Wabi \ | |
153 | -Wcpp \ | |
154 | -Wdeprecated \ | |
155 | -Wdeprecated-declarations \ | |
156 | -Wdiv-by-zero \ | |
157 | -Wdouble-promotion \ | |
158 | -Wendif-labels \ | |
159 | -Wextra \ | |
160 | -Wformat-contains-nul \ | |
161 | -Wformat-extra-args \ | |
162 | -Wformat-zero-length \ | |
163 | -Wformat=2 \ | |
164 | -Wmultichar \ | |
165 | -Wnormalized=nfc \ | |
166 | -Woverflow \ | |
167 | -Wpointer-to-int-cast \ | |
168 | -Wpragmas \ | |
169 | -Wsuggest-attribute=const \ | |
170 | -Wsuggest-attribute=noreturn \ | |
171 | -Wsuggest-attribute=pure \ | |
172 | -Wtrampolines \ | |
173 | ; do | |
174 | gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" | |
175 | done | |
176 | ||
177 | # Disable the missing-field-initializers warning if needed | |
178 | if test "$gl_cv_cc_nomfi_needed" = yes; then | |
179 | gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" | |
180 | fi | |
181 | ||
182 | $1=$gl_manywarn_set | |
183 | ]) |