Update harden flags
[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_ERROR([-std=c++11]) -- Not ready yet
54 # AX_APPEND_COMPILE_FLAGS_ERROR([-pedantic]) -- ?
55 # AX_APPEND_COMPILE_FLAGS_ERROR([-Wstack-protector]) -- Issues on 32bit compile
56 # AX_APPEND_COMPILE_FLAGS_ERROR([-fstack-protector-all]) -- Issues on 32bit compile
57 # AX_APPEND_COMPILE_FLAGS_ERROR([-Wlong-long]) -- Don't turn on for compatibility issues memcached_stat_st
58
59 #serial 5
60
61 AC_DEFUN([AX_APPEND_LINK_FLAGS_ERROR],
62 [AC_PREREQ([2.63])dnl
63 AX_APPEND_LINK_FLAGS([$1],[LIB],[-Werror])])
64
65 AC_DEFUN([AX_APPEND_COMPILE_FLAGS_ERROR],
66 [AC_PREREQ([2.63])dnl
67 AX_APPEND_COMPILE_FLAGS([$1])])
68
69 AC_DEFUN([AX_HARDEN_LINKER_FLAGS],
70 [AC_PREREQ([2.63])dnl
71 AC_REQUIRE([AX_CHECK_LINK_FLAG])
72 AC_REQUIRE([AX_VCS_CHECKOUT])
73 AC_REQUIRE([AX_DEBUG])
74 AC_REQUIRE([AX_CXX_COMPILER_VERSION])
75 AX_APPEND_LINK_FLAGS_ERROR([-z relro -z now])
76 AX_APPEND_LINK_FLAGS_ERROR([-pie])
77 AS_IF([test "x$ac_cv_vcs_checkout" = xyes],[AX_APPEND_LINK_FLAGS_ERROR([-Werror])])
78 ])
79
80 AC_DEFUN([AX_HARDEN_CC_COMPILER_FLAGS],
81 [AC_PREREQ([2.63])dnl
82 AC_LANG_PUSH([C])dnl
83 AC_REQUIRE([AX_APPEND_COMPILE_FLAGS_ERROR])
84 AC_REQUIRE([AX_HARDEN_LINKER_FLAGS])
85
86 ac_cv_warnings_as_errors=no
87 AS_IF([test "x$ac_cv_vcs_checkout" = xyes],
88 [AX_APPEND_COMPILE_FLAGS_ERROR([-Werror])
89 ac_cv_warnings_as_errors=yes],
90 [AX_APPEND_COMPILE_FLAGS_ERROR([-Werror])])
91
92 AX_APPEND_LINK_FLAGS_ERROR([-g])
93 AS_IF([test "x$ax_enable_debug" = xyes],
94 [AX_APPEND_LINK_FLAGS_ERROR([-ggdb])
95 AX_APPEND_LINK_FLAGS_ERROR([-O0])],
96 [AX_APPEND_LINK_FLAGS_ERROR([-O2])])
97
98 AX_APPEND_COMPILE_FLAGS_ERROR([-fstack-check])
99 AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-pragmas])
100 AX_APPEND_COMPILE_FLAGS_ERROR([-Wall])
101 AX_APPEND_COMPILE_FLAGS_ERROR([-Wextra])
102 AX_APPEND_COMPILE_FLAGS_ERROR([-Wunknown-pragmas])
103 AX_APPEND_COMPILE_FLAGS_ERROR([-Wthis-test-should-fail])
104 AX_APPEND_COMPILE_FLAGS_ERROR([-std=c99])
105 # Anything below this comment please keep sorted.
106 AX_APPEND_COMPILE_FLAGS_ERROR([--param=ssp-buffer-size=1])
107 # -Wmissing-format-attribute
108 AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-attributes])
109 AX_APPEND_COMPILE_FLAGS_ERROR([-Waddress])
110 AX_APPEND_COMPILE_FLAGS_ERROR([-Warray-bounds])
111 AX_APPEND_COMPILE_FLAGS_ERROR([-Wbad-function-cast])
112 # Not in use -Wc++-compat
113 AX_APPEND_COMPILE_FLAGS_ERROR([-Wchar-subscripts])
114 AX_APPEND_COMPILE_FLAGS_ERROR([-Wcomment])
115 AX_APPEND_COMPILE_FLAGS_ERROR([-Wfloat-equal])
116 AX_APPEND_COMPILE_FLAGS_ERROR([-Wformat-security])
117 AX_APPEND_COMPILE_FLAGS_ERROR([-Wformat=2])
118 AX_APPEND_COMPILE_FLAGS_ERROR([-Wlogical-op])
119 AX_APPEND_COMPILE_FLAGS_ERROR([-Wmaybe-uninitialized])
120 AX_APPEND_COMPILE_FLAGS_ERROR([-Wmissing-field-initializers])
121 AS_IF([test "$MINGW" = "yes"],
122 [AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-missing-noreturn])],
123 [AX_APPEND_COMPILE_FLAGS_ERROR([-Wmissing-noreturn])])
124 AX_APPEND_COMPILE_FLAGS_ERROR([-Wmissing-prototypes])
125 AX_APPEND_COMPILE_FLAGS_ERROR([-Wnested-externs])
126 AX_APPEND_COMPILE_FLAGS_ERROR([-Wnormalized=id])
127 AX_APPEND_COMPILE_FLAGS_ERROR([-Wold-style-definition])
128 AX_APPEND_COMPILE_FLAGS_ERROR([-Woverride-init])
129 AX_APPEND_COMPILE_FLAGS_ERROR([-Wpointer-arith])
130 AX_APPEND_COMPILE_FLAGS_ERROR([-Wpointer-sign])
131 AS_IF([test "x$MINGW" = xyes],
132 [AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-suggest-attribute=const])
133 AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-suggest-attribute=noreturn])
134 AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-suggest-attribute=pure])
135 AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-redundant-decls])],
136 [AX_APPEND_COMPILE_FLAGS_ERROR([-Wredundant-decls])])
137
138 AX_APPEND_COMPILE_FLAGS_ERROR([-Wshadow])
139 AX_APPEND_COMPILE_FLAGS_ERROR([-Wshorten-64-to-32])
140 AX_APPEND_COMPILE_FLAGS_ERROR([-Wsign-compare])
141 AX_APPEND_COMPILE_FLAGS_ERROR([-Wstrict-overflow=1])
142 AX_APPEND_COMPILE_FLAGS_ERROR([-Wstrict-prototypes])
143 AX_APPEND_COMPILE_FLAGS_ERROR([-Wswitch-enum])
144 AX_APPEND_COMPILE_FLAGS_ERROR([-Wundef])
145 AX_APPEND_COMPILE_FLAGS_ERROR([-Wunused])
146 AX_APPEND_COMPILE_FLAGS_ERROR([-Wunused-result])
147 AX_APPEND_COMPILE_FLAGS_ERROR([-Wunused-variable])
148 AX_APPEND_COMPILE_FLAGS_ERROR([-Wwrite-strings])
149 AX_APPEND_COMPILE_FLAGS_ERROR([-floop-parallelize-all])
150 AX_APPEND_COMPILE_FLAGS_ERROR([-fwrapv])
151 AX_APPEND_COMPILE_FLAGS_ERROR([-fmudflapt])
152 AC_LANG_POP([C])
153 ])
154
155 AC_DEFUN([AX_HARDEN_CXX_COMPILER_FLAGS],
156 [AC_PREREQ([2.63])dnl
157 AC_REQUIRE([AX_HARDEN_CC_COMPILER_FLAGS])
158 AC_LANG_PUSH([C++])
159
160 AS_IF([test "x$ac_cv_warnings_as_errors" = xyes],
161 [AX_APPEND_COMPILE_FLAGS_ERROR([-Werror])],
162 [AX_APPEND_COMPILE_FLAGS_ERROR([-Werror])])
163
164 AX_APPEND_COMPILE_FLAGS_ERROR([-g])
165 AS_IF([test "x$ax_enable_debug" = xyes],
166 [AX_APPEND_COMPILE_FLAGS_ERROR([-O0])
167 AX_APPEND_COMPILE_FLAGS_ERROR([-ggdb])],
168 [AX_APPEND_COMPILE_FLAGS_ERROR([-O2])
169 AX_APPEND_COMPILE_FLAGS_ERROR([-D_FORTIFY_SOURCE=2])])
170
171 AS_IF([test "x$ac_cv_vcs_checkout" = xyes],
172 [AX_APPEND_COMPILE_FLAGS_ERROR([-Werror])
173 AX_APPEND_COMPILE_FLAGS_ERROR([-fstack-check])],
174 [AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-pragmas])])
175
176 AX_APPEND_COMPILE_FLAGS_ERROR([-Wall])
177 AX_APPEND_COMPILE_FLAGS_ERROR([-Wextra])
178 AX_APPEND_COMPILE_FLAGS_ERROR([-Wunknown-pragmas])
179 AX_APPEND_COMPILE_FLAGS_ERROR([-Wthis-test-should-fail])
180 # Anything below this comment please keep sorted.
181 AX_APPEND_COMPILE_FLAGS_ERROR([--param=ssp-buffer-size=1])
182 # -Wmissing-format-attribute
183 AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-attributes])
184 AX_APPEND_COMPILE_FLAGS_ERROR([-Waddress])
185 AX_APPEND_COMPILE_FLAGS_ERROR([-Warray-bounds])
186 AX_APPEND_COMPILE_FLAGS_ERROR([-Wchar-subscripts])
187 AX_APPEND_COMPILE_FLAGS_ERROR([-Wcomment])
188 AX_APPEND_COMPILE_FLAGS_ERROR([-Wctor-dtor-privacy])
189 AX_APPEND_COMPILE_FLAGS_ERROR([-Wfloat-equal])
190 AX_APPEND_COMPILE_FLAGS_ERROR([-Wformat=2])
191 AX_APPEND_COMPILE_FLAGS_ERROR([-Wmaybe-uninitialized])
192 AX_APPEND_COMPILE_FLAGS_ERROR([-Wmissing-field-initializers])
193 AS_IF([test "x$MINGW" = xyes],
194 [AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-missing-noreturn])],
195 [AX_APPEND_COMPILE_FLAGS_ERROR([-Wmissing-noreturn])])
196 AX_APPEND_COMPILE_FLAGS_ERROR([-Wlogical-op])
197 AX_APPEND_COMPILE_FLAGS_ERROR([-Wnon-virtual-dtor])
198 AX_APPEND_COMPILE_FLAGS_ERROR([-Wnormalized=id])
199 AX_APPEND_COMPILE_FLAGS_ERROR([-Woverloaded-virtual])
200 AX_APPEND_COMPILE_FLAGS_ERROR([-Wpointer-arith])
201 AS_IF([test "x$MINGW" = xyes],
202 [AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-suggest-attribute=const])
203 AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-suggest-attribute=noreturn])
204 AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-error=suggest-attribute=noreturn])
205 AX_APPEND_COMPILE_FLAGS_ERROR([-Wno-redundant-decls])],
206 [AX_APPEND_COMPILE_FLAGS_ERROR([-Wredundant-decls])])
207 AX_APPEND_COMPILE_FLAGS_ERROR([-Wshadow])
208 AX_APPEND_COMPILE_FLAGS_ERROR([-Wshorten-64-to-32])
209 AX_APPEND_COMPILE_FLAGS_ERROR([-Wsign-compare])
210 AX_APPEND_COMPILE_FLAGS_ERROR([-Wstrict-overflow=1])
211 AX_APPEND_COMPILE_FLAGS_ERROR([-Wswitch-enum])
212 AX_APPEND_COMPILE_FLAGS_ERROR([-Wundef])
213 AX_APPEND_COMPILE_FLAGS_ERROR([-Wc++11-compat])
214 AX_APPEND_COMPILE_FLAGS_ERROR([-Wunused])
215 AX_APPEND_COMPILE_FLAGS_ERROR([-Wunused-result])
216 AX_APPEND_COMPILE_FLAGS_ERROR([-Wunused-variable])
217 AX_APPEND_COMPILE_FLAGS_ERROR([-Wwrite-strings])
218 AX_APPEND_COMPILE_FLAGS_ERROR([-Wformat-security])
219 AX_APPEND_COMPILE_FLAGS_ERROR([-floop-parallelize-all])
220 AX_APPEND_COMPILE_FLAGS_ERROR([-fwrapv])
221 AX_APPEND_COMPILE_FLAGS_ERROR([-fmudflapt])
222 AC_LANG_POP([C++])
223 ])
224
225 AC_DEFUN([AX_HARDEN_COMPILER_FLAGS],
226 [AC_PREREQ([2.63])dnl
227 AC_REQUIRE([AX_HARDEN_CXX_COMPILER_FLAGS])
228 AC_REQUIRE([AX_CC_OTHER_FLAGS])
229 AC_REQUIRE([gl_VISIBILITY])
230 AS_IF([test -n "$CFLAG_VISIBILITY"],[ CPPFLAGS="$CPPFLAGS $CFLAG_VISIBILITY" ])
231 ])
232
233 AC_DEFUN([AX_CC_OTHER_FLAGS],
234 [AC_PREREQ([2.63])dnl
235 AC_REQUIRE([AX_APPEND_COMPILE_FLAGS_ERROR])
236 AC_REQUIRE([AX_HARDEN_CC_COMPILER_FLAGS])
237 AC_LANG_PUSH([C])
238 AX_APPEND_COMPILE_FLAGS_ERROR([-pipe])
239 AC_LANG_POP([C])
240 ])