Commit | Line | Data |
---|---|---|
bb1dfdad | 1 | # manywarnings.m4 serial 5 |
ab422c4d | 2 | dnl Copyright (C) 2008-2013 Free Software Foundation, Inc. |
b8df54ff PE |
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 | [ | |
bb1dfdad PE |
38 | dnl First, check for some issues that only occur when combining multiple |
39 | dnl gcc warning categories. | |
b8df54ff PE |
40 | AC_REQUIRE([AC_PROG_CC]) |
41 | if test -n "$GCC"; then | |
42 | ||
bb1dfdad | 43 | dnl Check if -W -Werror -Wno-missing-field-initializers is supported |
b8df54ff PE |
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 | |
bb1dfdad PE |
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 | ||
b8df54ff PE |
93 | fi |
94 | ||
bb1dfdad | 95 | # List all gcc warning categories. |
b8df54ff PE |
96 | gl_manywarn_set= |
97 | for gl_manywarn_item in \ | |
b8df54ff | 98 | -W \ |
7f507777 PE |
99 | -Wabi \ |
100 | -Waddress \ | |
cdd0de4b | 101 | -Waggressive-loop-optimizations \ |
7f507777 PE |
102 | -Wall \ |
103 | -Warray-bounds \ | |
104 | -Wattributes \ | |
b8df54ff | 105 | -Wbad-function-cast \ |
b8df54ff | 106 | -Wbuiltin-macro-redefined \ |
7f507777 PE |
107 | -Wcast-align \ |
108 | -Wchar-subscripts \ | |
109 | -Wclobbered \ | |
110 | -Wcomment \ | |
111 | -Wcomments \ | |
b8df54ff | 112 | -Wcoverage-mismatch \ |
b8df54ff PE |
113 | -Wcpp \ |
114 | -Wdeprecated \ | |
115 | -Wdeprecated-declarations \ | |
7f507777 | 116 | -Wdisabled-optimization \ |
b8df54ff PE |
117 | -Wdiv-by-zero \ |
118 | -Wdouble-promotion \ | |
7f507777 | 119 | -Wempty-body \ |
b8df54ff | 120 | -Wendif-labels \ |
7f507777 | 121 | -Wenum-compare \ |
b8df54ff PE |
122 | -Wextra \ |
123 | -Wformat-contains-nul \ | |
124 | -Wformat-extra-args \ | |
7f507777 PE |
125 | -Wformat-nonliteral \ |
126 | -Wformat-security \ | |
127 | -Wformat-y2k \ | |
b8df54ff | 128 | -Wformat-zero-length \ |
7f507777 PE |
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 \ | |
7f507777 | 146 | -Wmissing-include-dirs \ |
7f507777 PE |
147 | -Wmissing-parameter-type \ |
148 | -Wmissing-prototypes \ | |
149 | -Wmudflap \ | |
b8df54ff | 150 | -Wmultichar \ |
7f507777 PE |
151 | -Wnarrowing \ |
152 | -Wnested-externs \ | |
153 | -Wnonnull \ | |
b8df54ff | 154 | -Wnormalized=nfc \ |
7f507777 PE |
155 | -Wold-style-declaration \ |
156 | -Wold-style-definition \ | |
b8df54ff | 157 | -Woverflow \ |
7f507777 PE |
158 | -Woverlength-strings \ |
159 | -Woverride-init \ | |
160 | -Wpacked \ | |
161 | -Wpacked-bitfield-compat \ | |
162 | -Wparentheses \ | |
163 | -Wpointer-arith \ | |
164 | -Wpointer-sign \ | |
b8df54ff PE |
165 | -Wpointer-to-int-cast \ |
166 | -Wpragmas \ | |
cdd0de4b | 167 | -Wreturn-local-addr \ |
7f507777 PE |
168 | -Wreturn-type \ |
169 | -Wsequence-point \ | |
170 | -Wshadow \ | |
171 | -Wsizeof-pointer-memaccess \ | |
172 | -Wstack-protector \ | |
173 | -Wstrict-aliasing \ | |
174 | -Wstrict-overflow \ | |
175 | -Wstrict-prototypes \ | |
b8df54ff | 176 | -Wsuggest-attribute=const \ |
7f507777 | 177 | -Wsuggest-attribute=format \ |
b8df54ff PE |
178 | -Wsuggest-attribute=noreturn \ |
179 | -Wsuggest-attribute=pure \ | |
7f507777 PE |
180 | -Wswitch \ |
181 | -Wswitch-default \ | |
182 | -Wsync-nand \ | |
183 | -Wsystem-headers \ | |
b8df54ff | 184 | -Wtrampolines \ |
7f507777 PE |
185 | -Wtrigraphs \ |
186 | -Wtype-limits \ | |
187 | -Wuninitialized \ | |
188 | -Wunknown-pragmas \ | |
7f507777 PE |
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 | \ | |
b8df54ff PE |
208 | ; do |
209 | gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" | |
210 | done | |
211 | ||
bb1dfdad | 212 | # Disable specific options as needed. |
b8df54ff PE |
213 | if test "$gl_cv_cc_nomfi_needed" = yes; then |
214 | gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" | |
215 | fi | |
216 | ||
bb1dfdad PE |
217 | if test "$gl_cv_cc_uninitialized_supported" = no; then |
218 | gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized" | |
219 | fi | |
220 | ||
b8df54ff PE |
221 | $1=$gl_manywarn_set |
222 | ]) |