Merge trond from lp:~trond-norbye/libmemcached/bug_396882
[awesomized/libmemcached] / m4 / pandora_warnings.m4
1 dnl Copyright (C) 2009 Sun Microsystems
2 dnl This file is free software; Sun Microsystems
3 dnl gives unlimited permission to copy and/or distribute it,
4 dnl with or without modifications, as long as this notice is preserved.
5
6 dnl AC_PANDORA_WARNINGS([less-warnings|warnings-always-on])
7 dnl less-warnings turn on a limited set of warnings
8 dnl warnings-always-on always set warnings=error regardless of tarball/vc
9
10 AC_DEFUN([PANDORA_WARNINGS],[
11 m4_define([PW_LESS_WARNINGS],[no])
12 m4_define([PW_WARN_ALWAYS_ON],[no])
13 m4_foreach_w([pw_arg],$@,[
14 m4_case(pw_arg,
15 [less-warnings],[
16 m4_undefine([PW_LESS_WARNINGS])
17 m4_define([PW_LESS_WARNINGS],[yes])
18 ],
19 [warnings-always-on],[
20 m4_undefine([PW_WARN_ALWAYS_ON])
21 m4_define([PW_WARN_ALWAYS_ON],[yes])
22 ])
23 ])
24
25 AC_REQUIRE([PANDORA_BUILDING_FROM_VC])
26 m4_if(PW_WARN_ALWAYS_ON, [yes],
27 [ac_cv_warnings_as_errors=yes],
28 AS_IF([test "$ac_cv_building_from_vc" = "yes"],
29 [ac_cv_warnings_as_errors=yes],
30 [ac_cv_warnings_as_errors=no]))
31
32 AC_ARG_ENABLE([profiling],
33 [AS_HELP_STRING([--enable-profiling],
34 [Toggle profiling @<:@default=off@:>@])],
35 [ac_profiling="$enableval"],
36 [ac_profiling="no"])
37
38 AC_ARG_ENABLE([coverage],
39 [AS_HELP_STRING([--enable-coverage],
40 [Toggle coverage @<:@default=off@:>@])],
41 [ac_coverage="$enableval"],
42 [ac_coverage="no"])
43
44 AS_IF([test "$GCC" = "yes"],[
45
46 AS_IF([test "$ac_profiling" = "yes"],[
47 CC_PROFILING="-pg"
48 save_LIBS="${LIBS}"
49 LIBS=""
50 AC_CHECK_LIB(c_p, read)
51 LIBC_P="${LIBS}"
52 LIBS="${save_LIBS}"
53 AC_SUBST(LIBC_P)
54 ],[
55 CC_PROFILING=" "
56 ])
57
58 AS_IF([test "$ac_coverage" = "yes"],
59 [CC_COVERAGE="-fprofile-arcs -ftest-coverage"])
60
61 AS_IF([test "$ac_cv_warnings_as_errors" = "yes"],
62 [W_FAIL="-Werror"])
63
64 AC_CACHE_CHECK([whether it is safe to use -fdiagnostics-show-option],
65 [ac_cv_safe_to_use_fdiagnostics_show_option_],
66 [save_CFLAGS="$CFLAGS"
67 CFLAGS="-fdiagnostics-show-option ${AM_CFLAGS}"
68 AC_COMPILE_IFELSE(
69 [AC_LANG_PROGRAM([],[])],
70 [ac_cv_safe_to_use_fdiagnostics_show_option_=yes],
71 [ac_cv_safe_to_use_fdiagnostics_show_option_=no])
72 CFLAGS="$save_CFLAGS"])
73
74 AS_IF([test "$ac_cv_safe_to_use_fdiagnostics_show_option_" = "yes"],
75 [
76 F_DIAGNOSTICS_SHOW_OPTION="-fdiagnostics-show-option"
77 ])
78
79 AC_CACHE_CHECK([whether it is safe to use -Wconversion],
80 [ac_cv_safe_to_use_wconversion_],
81 [save_CFLAGS="$CFLAGS"
82 CFLAGS="-Wconversion ${W_FAIL} -pedantic ${AM_CFLAGS}"
83 AC_COMPILE_IFELSE(
84 [AC_LANG_PROGRAM([[
85 #include <stdbool.h>
86 void foo(bool a)
87 {
88 (void)a;
89 }
90 ]],[[
91 foo(0);
92 ]])],
93 [ac_cv_safe_to_use_wconversion_=yes],
94 [ac_cv_safe_to_use_wconversion_=no])
95 CFLAGS="$save_CFLAGS"])
96
97 AS_IF([test "$ac_cv_safe_to_use_wconversion_" = "yes"],
98 [W_CONVERSION="-Wconversion"
99 AC_CACHE_CHECK([whether it is safe to use -Wconversion with htons],
100 [ac_cv_safe_to_use_Wconversion_],
101 [save_CFLAGS="$CFLAGS"
102 CFLAGS="-Wconversion ${W_FAIL} -pedantic ${AM_CFLAGS}"
103 AC_COMPILE_IFELSE(
104 [AC_LANG_PROGRAM(
105 [[
106 #include <netinet/in.h>
107 ]],[[
108 uint16_t x= htons(80);
109 ]])],
110 [ac_cv_safe_to_use_Wconversion_=yes],
111 [ac_cv_safe_to_use_Wconversion_=no])
112 CFLAGS="$save_CFLAGS"])
113
114 AS_IF([test "$ac_cv_safe_to_use_Wconversion_" = "no"],
115 [NO_CONVERSION="-Wno-conversion"])
116 ])
117
118 NO_STRICT_ALIASING="-fno-strict-aliasing -Wno-strict-aliasing"
119 NO_SHADOW="-Wno-shadow"
120
121 m4_if(PW_LESS_WARNINGS,[no],[
122 BASE_WARNINGS_FULL="-Wformat=2 ${W_CONVERSION} -Wstrict-aliasing"
123 CC_WARNINGS_FULL="-Wswitch-default -Wswitch-enum"
124 CXX_WARNINGS_FULL="-Weffc++ -Wold-style-cast"
125 ],[
126 BASE_WARNINGS_FULL="-Wformat ${NO_STRICT_ALIASING}"
127 ])
128
129 BASE_WARNINGS="${W_FAIL} -pedantic -Wall -Wextra -Wundef -Wshadow -Wstrict-aliasing ${F_DIAGNOSTICS_SHOW_OPTION} ${CFLAG_VISIBILITY} ${BASE_WARNINGS_FULL}"
130 CC_WARNINGS="${BASE_WARNINGS} -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wmissing-declarations -Wcast-align ${CC_WARNINGS_FULL}"
131 CXX_WARNINGS="${BASE_WARNINGS} -Woverloaded-virtual -Wnon-virtual-dtor -Wctor-dtor-privacy -Wno-long-long ${CXX_WARNINGS_FULL}"
132
133 AC_CACHE_CHECK([whether it is safe to use -Wmissing-declarations from C++],
134 [ac_cv_safe_to_use_Wmissing_declarations_],
135 [AC_LANG_PUSH(C++)
136 save_CXXFLAGS="$CXXFLAGS"
137 CXXFLAGS="-Werror -pedantic -Wmissing-declarations ${AM_CXXFLAGS}"
138 AC_COMPILE_IFELSE([
139 AC_LANG_PROGRAM(
140 [[
141 #include <stdio.h>
142 ]], [[]])
143 ],
144 [ac_cv_safe_to_use_Wmissing_declarations_=yes],
145 [ac_cv_safe_to_use_Wmissing_declarations_=no])
146 CXXFLAGS="$save_CXXFLAGS"
147 AC_LANG_POP()
148 ])
149 AS_IF([test "$ac_cv_safe_to_use_Wmissing_declarations_" = "yes"],
150 [CXX_WARNINGS="${CXX_WARNINGS} -Wmissing-declarations"])
151
152 AC_CACHE_CHECK([whether it is safe to use -Wlogical-op],
153 [ac_cv_safe_to_use_Wlogical_op_],
154 [save_CFLAGS="$CFLAGS"
155 CFLAGS="${W_FAIL} -pedantic -Wlogical-op ${AM_CFLAGS}"
156 AC_COMPILE_IFELSE([
157 AC_LANG_PROGRAM(
158 [[
159 #include <stdio.h>
160 ]], [[]])
161 ],
162 [ac_cv_safe_to_use_Wlogical_op_=yes],
163 [ac_cv_safe_to_use_Wlogical_op_=no])
164 CFLAGS="$save_CFLAGS"])
165 AS_IF([test "$ac_cv_safe_to_use_Wlogical_op_" = "yes"],
166 [CC_WARNINGS="${CC_WARNINGS} -Wlogical-op"])
167
168 AC_CACHE_CHECK([whether it is safe to use -Wredundant-decls from C++],
169 [ac_cv_safe_to_use_Wredundant_decls_],
170 [AC_LANG_PUSH(C++)
171 save_CXXFLAGS="${CXXFLAGS}"
172 CXXFLAGS="${W_FAIL} -pedantic -Wredundant-decls ${AM_CXXFLAGS}"
173 AC_COMPILE_IFELSE(
174 [AC_LANG_PROGRAM([
175 template <typename E> struct C { void foo(); };
176 template <typename E> void C<E>::foo() { }
177 template <> void C<int>::foo();
178 AC_INCLUDES_DEFAULT])],
179 [ac_cv_safe_to_use_Wredundant_decls_=yes],
180 [ac_cv_safe_to_use_Wredundant_decls_=no])
181 CXXFLAGS="${save_CXXFLAGS}"
182 AC_LANG_POP()])
183 AS_IF([test "$ac_cv_safe_to_use_Wredundant_decls_" = "yes"],
184 [CXX_WARNINGS="${CXX_WARNINGS} -Wredundant-decls"],
185 [CXX_WARNINGS="${CXX_WARNINGS} -Wno-redundant-decls"])
186
187 NO_REDUNDANT_DECLS="-Wno-redundant-decls"
188 PROTOSKIP_WARNINGS="-Wno-effc++ -Wno-shadow"
189
190 ])
191
192 AS_IF([test "$SUNCC" = "yes"],[
193
194 AS_IF([test "$ac_profiling" = "yes"],
195 [CC_PROFILING="-xinstrument=datarace"])
196
197 AS_IF([test "$ac_cv_warnings_as_errors" = "yes"],
198 [W_FAIL="-errwarn=%all"])
199
200 AC_CACHE_CHECK([whether E_PASTE_RESULT_NOT_TOKEN is usable],
201 [ac_cv_paste_result],
202 [
203 save_CFLAGS="${CFLAGS}"
204 CFLAGS="-errwarn=%all -erroff=E_PASTE_RESULT_NOT_TOKEN ${CFLAGS}"
205 AC_COMPILE_IFELSE(
206 [AC_LANG_PROGRAM([
207 AC_INCLUDES_DEFAULT
208 ],[
209 int x= 0;])],
210 [ac_cv_paste_result=yes],
211 [ac_cv_paste_result=no])
212 CFLAGS="${save_CFLAGS}"
213 ])
214 AS_IF([test $ac_cv_paste_result = yes],
215 [W_PASTE_RESULT=",E_PASTE_RESULT_NOT_TOKEN"])
216
217
218 m4_if(PW_LESS_WARNINGS, [no],[
219 CC_WARNINGS_FULL="-erroff=E_INTEGER_OVERFLOW_DETECTED${W_PASTE_RESULT}"
220 ],[
221 CC_WARNINGS_FULL="-erroff=E_ATTRIBUTE_NOT_VAR"
222 CXX_WARNINGS_FULL="-erroff=attrskipunsup,doubunder,reftotemp,inllargeuse,truncwarn1,signextwarn,inllargeint"
223 ])
224
225 CC_WARNINGS="-v -errtags=yes ${W_FAIL} ${CC_WARNINGS_FULL}"
226 CXX_WARNINGS="+w +w2 -xwe -xport64 -errtags=yes ${CXX_WARNINGS_FULL} ${W_FAIL}"
227 PROTOSKIP_WARNINGS="-erroff=attrskipunsup,doubunder,reftotemp,wbadinitl,identexpected,inllargeuse,truncwarn1,signextwarn"
228 NO_UNREACHED="-erroff=E_STATEMENT_NOT_REACHED"
229
230 ])
231
232 AC_SUBST(NO_CONVERSION)
233 AC_SUBST(NO_REDUNDANT_DECLS)
234 AC_SUBST(NO_UNREACHED)
235 AC_SUBST(NO_SHADOW)
236 AC_SUBST(NO_STRICT_ALIASING)
237 AC_SUBST(PROTOSKIP_WARNINGS)
238
239 ])