Update m4
[awesomized/libmemcached] / m4 / ax_harden_compiler_flags.m4
1 # ===========================================================================
2 # https://github.com/BrianAker/ddm4/
3 # ===========================================================================
4 #
5 # SYNOPSIS
6 #
7 # AX_HARDEN_COMPILER_FLAGS()
8 # AX_HARDEN_LINKER_FLAGS()
9 # AX_HARDEN_CC_COMPILER_FLAGS()
10 # AX_HARDEN_CXX_COMPILER_FLAGS()
11 #
12 # DESCRIPTION
13 #
14 # Any compiler flag that "hardens" or tests code. C99 is assumed.
15 #
16 # NOTE: Implementation based on AX_APPEND_FLAG.
17 #
18 # LICENSE
19 #
20 # Copyright (C) 2012 Brian Aker
21 # All rights reserved.
22 #
23 # Redistribution and use in source and binary forms, with or without
24 # modification, are permitted provided that the following conditions are
25 # met:
26 #
27 # * Redistributions of source code must retain the above copyright
28 # notice, this list of conditions and the following disclaimer.
29 #
30 # * Redistributions in binary form must reproduce the above
31 # copyright notice, this list of conditions and the following disclaimer
32 # in the documentation and/or other materials provided with the
33 # distribution.
34 #
35 # * The names of its contributors may not be used to endorse or
36 # promote products derived from this software without specific prior
37 # written permission.
38 #
39 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
40 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
41 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
42 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
43 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
46 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
47 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
48 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
49 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50
51 # The Following flags are not checked for
52 # -Wdeclaration-after-statement is counter to C99
53 # AX_APPEND_COMPILE_FLAGS([-std=c++11]) -- Not ready yet
54 # AX_APPEND_COMPILE_FLAGS([-pedantic]) -- ?
55 # AX_APPEND_COMPILE_FLAGS([-Wstack-protector]) -- Issues on 32bit compile
56 # AX_APPEND_COMPILE_FLAGS([-fstack-protector-all]) -- Issues on 32bit compile
57 # AX_APPEND_COMPILE_FLAGS([-Wlong-long]) -- Don't turn on for compatibility issues memcached_stat_st
58
59 #serial 5
60
61 AC_DEFUN([AX_HARDEN_LINKER_FLAGS],
62 [AC_PREREQ([2.63])dnl
63 AC_REQUIRE([AX_CHECK_LINK_FLAG])
64 AC_REQUIRE([AX_VCS_CHECKOUT])
65 AC_REQUIRE([AX_DEBUG])
66 AC_REQUIRE([AX_CXX_COMPILER_VERSION])
67
68 dnl If we are inside of VCS we append -Werror, otherwise we just use it to test other flags
69 AX_HARDEN_LIB=
70 ax_append_compile_link_flags_extra=
71 AS_IF([test "x$ac_cv_vcs_checkout" = "xyes"],
72 [AX_CHECK_LINK_FLAG([-Werror],
73 [AX_HARDEN_LIB="-Werror $AX_HARDEN_LIB"])
74 ],
75 [AX_CHECK_LINK_FLAG([-Werror],[
76 ax_append_compile_link_flags_extra='-Werror'
77 ])
78 ])
79
80 AX_CHECK_LINK_FLAG([-z relro -z now],
81 [AX_HARDEN_LIB="-z relro -z now $AX_HARDEN_LIB"],,
82 [$ax_append_compile_link_flags_extra])
83
84 AX_CHECK_LINK_FLAG([-pie],
85 [AX_HARDEN_LIB="-pie $AX_HARDEN_LIB"],,
86 [$ax_append_compile_link_flags_extra])
87
88 LIB="$LIB $AX_HARDEN_LIB"
89 ])
90
91 AC_DEFUN([AX_HARDEN_CC_COMPILER_FLAGS],
92 [AC_PREREQ([2.63])dnl
93 AC_REQUIRE([AX_APPEND_COMPILE_FLAGS])
94 AC_REQUIRE([AX_HARDEN_LINKER_FLAGS])
95
96 AC_LANG_PUSH([C])
97
98 ac_cv_warnings_as_errors=no
99 ax_append_compile_cflags_extra=
100 AS_IF([test "$ac_cv_vcs_checkout" = "yes"],[
101 AX_APPEND_COMPILE_FLAGS([-Werror])
102 ac_cv_warnings_as_errors=yes
103 ],[
104 AX_APPEND_COMPILE_FLAGS([-Werror],[ax_append_compile_cflags_extra])
105 ])
106
107 AX_APPEND_COMPILE_FLAGS([-g])
108 AS_IF([test "$ax_enable_debug" = "yes"], [
109 AX_APPEND_COMPILE_FLAGS([-ggdb],,[$ax_append_compile_cflags_extra])
110 AX_APPEND_COMPILE_FLAGS([-O0],,[$ax_append_compile_cflags_extra])
111 ],[
112 AX_APPEND_COMPILE_FLAGS([-O2],,[$ax_append_compile_cflags_extra])
113 ])
114
115 AX_APPEND_COMPILE_FLAGS([-fstack-check],,[$ax_append_compile_cflags_extra])
116 AX_APPEND_COMPILE_FLAGS([-Wno-pragmas],,[$ax_append_compile_cflags_extra])
117
118 AX_APPEND_COMPILE_FLAGS([-Wall],,[$ax_append_compile_cflags_extra])
119 AX_APPEND_COMPILE_FLAGS([-Wextra],,[$ax_append_compile_cflags_extra])
120 AX_APPEND_COMPILE_FLAGS([-Wunknown-pragmas],,[$ax_append_compile_cflags_extra])
121 AX_APPEND_COMPILE_FLAGS([-Wthis-test-should-fail],,[$ax_append_compile_cflags_extra])
122 AX_APPEND_COMPILE_FLAGS([-std=c99],,[$ax_append_compile_cflags_extra])
123 dnl Anything below this comment please keep sorted.
124 AX_APPEND_COMPILE_FLAGS([--param=ssp-buffer-size=1],,[$ax_append_compile_cflags_extra])
125 dnl -Wmissing-format-attribute
126 AX_APPEND_COMPILE_FLAGS([-Wno-attributes],,[$ax_append_compile_cflags_extra])
127 AX_APPEND_COMPILE_FLAGS([-Waddress],,[$ax_append_compile_cflags_extra])
128 AX_APPEND_COMPILE_FLAGS([-Warray-bounds],,[$ax_append_compile_cflags_extra])
129 AX_APPEND_COMPILE_FLAGS([-Wbad-function-cast],,[$ax_append_compile_cflags_extra])
130 dnl Not in use -Wc++-compat
131 AX_APPEND_COMPILE_FLAGS([-Wchar-subscripts],,[$ax_append_compile_cflags_extra])
132 AX_APPEND_COMPILE_FLAGS([-Wcomment],,[$ax_append_compile_cflags_extra])
133 AX_APPEND_COMPILE_FLAGS([-Wfloat-equal],,[$ax_append_compile_cflags_extra])
134 AX_APPEND_COMPILE_FLAGS([-Wformat-security],,[$ax_append_compile_cflags_extra])
135 AX_APPEND_COMPILE_FLAGS([-Wformat=2],,[$ax_append_compile_cflags_extra])
136 AX_APPEND_COMPILE_FLAGS([-Wlogical-op],,[$ax_append_compile_cflags_extra])
137 AX_APPEND_COMPILE_FLAGS([-Wmaybe-uninitialized],,[$ax_append_compile_cflags_extra])
138 AX_APPEND_COMPILE_FLAGS([-Wmissing-field-initializers],,[$ax_append_compile_cflags_extra])
139 AS_IF([test "$MINGW" = "yes"],[
140 AX_APPEND_COMPILE_FLAGS([-Wno-missing-noreturn],,[$ax_append_compile_cflags_extra])
141 ],[
142 AX_APPEND_COMPILE_FLAGS([-Wmissing-noreturn],,[$ax_append_compile_cflags_extra])
143 ])
144 AX_APPEND_COMPILE_FLAGS([-Wmissing-prototypes],,[$ax_append_compile_cflags_extra])
145 AX_APPEND_COMPILE_FLAGS([-Wnested-externs],,[$ax_append_compile_cflags_extra])
146 AX_APPEND_COMPILE_FLAGS([-Wnormalized=id],,[$ax_append_compile_cflags_extra])
147 AX_APPEND_COMPILE_FLAGS([-Wold-style-definition],,[$ax_append_compile_cflags_extra])
148 AX_APPEND_COMPILE_FLAGS([-Woverride-init],,[$ax_append_compile_cflags_extra])
149 AX_APPEND_COMPILE_FLAGS([-Wpointer-arith],,[$ax_append_compile_cflags_extra])
150 AX_APPEND_COMPILE_FLAGS([-Wpointer-sign],,[$ax_append_compile_cflags_extra])
151 AS_IF([test "$MINGW" = "yes"],[
152 AX_APPEND_COMPILE_FLAGS([-Wno-suggest-attribute=const],,[$ax_append_compile_cflags_extra])
153 AX_APPEND_COMPILE_FLAGS([-Wno-suggest-attribute=noreturn],,[$ax_append_compile_cflags_extra])
154 AX_APPEND_COMPILE_FLAGS([-Wno-suggest-attribute=pure],,[$ax_append_compile_cflags_extra])
155 AX_APPEND_COMPILE_FLAGS([-Wno-redundant-decls],,[$ax_append_compile_cflags_extra])
156 ],[
157 AX_APPEND_COMPILE_FLAGS([-Wredundant-decls],,[$ax_append_compile_cflags_extra])
158 ])
159 AX_APPEND_COMPILE_FLAGS([-Wshadow],,[$ax_append_compile_cflags_extra])
160 AX_APPEND_COMPILE_FLAGS([-Wshorten-64-to-32],,[$ax_append_compile_cflags_extra])
161 AX_APPEND_COMPILE_FLAGS([-Wsign-compare],,[$ax_append_compile_cflags_extra])
162 AX_APPEND_COMPILE_FLAGS([-Wstrict-overflow=1],,[$ax_append_compile_cflags_extra])
163 AX_APPEND_COMPILE_FLAGS([-Wstrict-prototypes],,[$ax_append_compile_cflags_extra])
164 AX_APPEND_COMPILE_FLAGS([-Wswitch-enum],,[$ax_append_compile_cflags_extra])
165 AX_APPEND_COMPILE_FLAGS([-Wundef],,[$ax_append_compile_cflags_extra])
166 AX_APPEND_COMPILE_FLAGS([-Wunused],,[$ax_append_compile_cflags_extra])
167 AX_APPEND_COMPILE_FLAGS([-Wunused-result],,[$ax_append_compile_cflags_extra])
168 AX_APPEND_COMPILE_FLAGS([-Wunused-variable],,[$ax_append_compile_cflags_extra])
169 AX_APPEND_COMPILE_FLAGS([-Wwrite-strings],,[$ax_append_compile_cflags_extra])
170 AX_APPEND_COMPILE_FLAGS([-floop-parallelize-all],,[$ax_append_compile_cflags_extra])
171 AX_APPEND_COMPILE_FLAGS([-fwrapv],,[$ax_append_compile_cflags_extra])
172 AC_LANG_POP
173 ])
174
175 AC_DEFUN([AX_HARDEN_CXX_COMPILER_FLAGS],
176 [AC_PREREQ([2.63])dnl
177 AC_REQUIRE([AX_HARDEN_CC_COMPILER_FLAGS])
178 AC_LANG_PUSH([C++])
179
180 ax_append_compile_cxxflags_extra=
181 AS_IF([test "$ac_cv_warnings_as_errors" = "yes"],[
182 AX_APPEND_COMPILE_FLAGS([-Werror])
183 ],[
184 AX_APPEND_COMPILE_FLAGS([-Werror],[ax_append_compile_cxxflags_extra])
185 ])
186
187 AX_APPEND_COMPILE_FLAGS([-g],,[$ax_append_compile_cxxflags_extra])
188 AS_IF([test "$ax_enable_debug" = "yes"], [
189 AX_APPEND_COMPILE_FLAGS([-O0],,[$ax_append_compile_cxxflags_extra])
190 AX_APPEND_COMPILE_FLAGS([-ggdb],,[$ax_append_compile_cxxflags_extra])
191 ],[
192 AX_APPEND_COMPILE_FLAGS([-O2],,[$ax_append_compile_cxxflags_extra])
193 AX_APPEND_COMPILE_FLAGS([-D_FORTIFY_SOURCE=2],,[$ax_append_compile_cxxflags_extra])
194 ])
195
196 AS_IF([test "$ac_cv_vcs_checkout" = "yes"], [
197 AX_APPEND_COMPILE_FLAGS([-Werror],,[$ax_append_compile_cxxflags_extra])
198 AX_APPEND_COMPILE_FLAGS([-fstack-check],,[$ax_append_compile_cxxflags_extra])
199 ],[
200 AX_APPEND_COMPILE_FLAGS([-Wno-pragmas],,[$ax_append_compile_cxxflags_extra])
201 ])
202
203 AX_APPEND_COMPILE_FLAGS([-Wall],,[$ax_append_compile_cxxflags_extra])
204 AX_APPEND_COMPILE_FLAGS([-Wextra],,[$ax_append_compile_cxxflags_extra])
205 AX_APPEND_COMPILE_FLAGS([-Wunknown-pragmas],,[$ax_append_compile_cxxflags_extra])
206 AX_APPEND_COMPILE_FLAGS([-Wthis-test-should-fail],,[$ax_append_compile_cxxflags_extra])
207 dnl Anything below this comment please keep sorted.
208 AX_APPEND_COMPILE_FLAGS([--param=ssp-buffer-size=1],,[$ax_append_compile_cxxflags_extra])
209 dnl -Wmissing-format-attribute
210 AX_APPEND_COMPILE_FLAGS([-Wno-attributes],,[$ax_append_compile_cxxflags_extra])
211 AX_APPEND_COMPILE_FLAGS([-Waddress],,[$ax_append_compile_cxxflags_extra])
212 AX_APPEND_COMPILE_FLAGS([-Warray-bounds],,[$ax_append_compile_cxxflags_extra])
213 AX_APPEND_COMPILE_FLAGS([-Wchar-subscripts],,[$ax_append_compile_cxxflags_extra])
214 AX_APPEND_COMPILE_FLAGS([-Wcomment],,[$ax_append_compile_cxxflags_extra])
215 AX_APPEND_COMPILE_FLAGS([-Wctor-dtor-privacy],,[$ax_append_compile_cxxflags_extra])
216 AX_APPEND_COMPILE_FLAGS([-Wfloat-equal],,[$ax_append_compile_cxxflags_extra])
217 AX_APPEND_COMPILE_FLAGS([-Wformat=2],,[$ax_append_compile_cxxflags_extra])
218 AX_APPEND_COMPILE_FLAGS([-Wmaybe-uninitialized],,[$ax_append_compile_cxxflags_extra])
219 AX_APPEND_COMPILE_FLAGS([-Wmissing-field-initializers],,[$ax_append_compile_cxxflags_extra])
220 AS_IF([test "$MINGW" = "yes"],[
221 AX_APPEND_COMPILE_FLAGS([-Wno-missing-noreturn],,[$ax_append_compile_cxxflags_extra])
222 ],[
223 AX_APPEND_COMPILE_FLAGS([-Wmissing-noreturn],,[$ax_append_compile_cxxflags_extra])
224 ])
225 AX_APPEND_COMPILE_FLAGS([-Wlogical-op],,[$ax_append_compile_cxxflags_extra])
226 AX_APPEND_COMPILE_FLAGS([-Wnon-virtual-dtor],,[$ax_append_compile_cxxflags_extra])
227 AX_APPEND_COMPILE_FLAGS([-Wnormalized=id],,[$ax_append_compile_cxxflags_extra])
228 AX_APPEND_COMPILE_FLAGS([-Woverloaded-virtual],,[$ax_append_compile_cxxflags_extra])
229 AX_APPEND_COMPILE_FLAGS([-Wpointer-arith],,[$ax_append_compile_cxxflags_extra])
230 AS_IF([test "$MINGW" = "yes"],[
231 AX_APPEND_COMPILE_FLAGS([-Wno-suggest-attribute=const],,[$ax_append_compile_cxxflags_extra])
232 AX_APPEND_COMPILE_FLAGS([-Wno-suggest-attribute=noreturn],,[$ax_append_compile_cxxflags_extra])
233 AX_APPEND_COMPILE_FLAGS([-Wno-error=suggest-attribute=noreturn],,[$ax_append_compile_cxxflags_extra])
234 AX_APPEND_COMPILE_FLAGS([-Wno-redundant-decls],,[$ax_append_compile_cxxflags_extra])
235 ],[
236 AX_APPEND_COMPILE_FLAGS([-Wredundant-decls],,[$ax_append_compile_cxxflags_extra])
237 ])
238 AX_APPEND_COMPILE_FLAGS([-Wshadow],,[$ax_append_compile_cxxflags_extra])
239 AX_APPEND_COMPILE_FLAGS([-Wshorten-64-to-32],,[$ax_append_compile_cxxflags_extra])
240 AX_APPEND_COMPILE_FLAGS([-Wsign-compare],,[$ax_append_compile_cxxflags_extra])
241 AX_APPEND_COMPILE_FLAGS([-Wstrict-overflow=1],,[$ax_append_compile_cxxflags_extra])
242 AX_APPEND_COMPILE_FLAGS([-Wswitch-enum],,[$ax_append_compile_cxxflags_extra])
243 AX_APPEND_COMPILE_FLAGS([-Wundef],,[$ax_append_compile_cxxflags_extra])
244 AX_APPEND_COMPILE_FLAGS([-Wc++11-compat],,[$ax_append_compile_cxxflags_extra])
245 AX_APPEND_COMPILE_FLAGS([-Wunused],,[$ax_append_compile_cxxflags_extra])
246 AX_APPEND_COMPILE_FLAGS([-Wunused-result],,[$ax_append_compile_cxxflags_extra])
247 AX_APPEND_COMPILE_FLAGS([-Wunused-variable],,[$ax_append_compile_cxxflags_extra])
248 AX_APPEND_COMPILE_FLAGS([-Wwrite-strings],,[$ax_append_compile_cxxflags_extra])
249 AX_APPEND_COMPILE_FLAGS([-Wformat-security],,[$ax_append_compile_cxxflags_extra])
250 AX_APPEND_COMPILE_FLAGS([-floop-parallelize-all],,[$ax_append_compile_cxxflags_extra])
251 AX_APPEND_COMPILE_FLAGS([-fwrapv],,[$ax_append_compile_cxxflags_extra])
252 AC_LANG_POP
253 ])
254
255 AC_DEFUN([AX_HARDEN_COMPILER_FLAGS],
256 [AC_PREREQ([2.63])dnl
257 AC_REQUIRE([AX_HARDEN_CXX_COMPILER_FLAGS])
258 AC_REQUIRE([AX_CC_OTHER_FLAGS])
259 gl_VISIBILITY
260 AS_IF([test -n "$CFLAG_VISIBILITY"], [ CPPFLAGS="$CPPFLAGS $CFLAG_VISIBILITY" ])
261 ])
262
263 AC_DEFUN([AX_CC_OTHER_FLAGS],
264 [AC_PREREQ([2.63])dnl
265 AC_REQUIRE([AX_APPEND_COMPILE_FLAGS])
266 AC_REQUIRE([AX_HARDEN_CC_COMPILER_FLAGS])
267
268 AC_LANG_PUSH([C])
269 AX_APPEND_COMPILE_FLAGS([-pipe],,[$ax_append_compile_cflags_extra])
270 AC_LANG_POP
271 ])