e33d41c96e8061cfae01a8f5d183ad929844653c
[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 3
60
61 AC_DEFUN([AX_HARDEN_LINKER_FLAGS], [
62 AC_REQUIRE([AX_CHECK_LINK_FLAG])
63 AC_REQUIRE([AX_VCS_CHECKOUT])
64 AC_REQUIRE([AX_DEBUG])
65 AC_REQUIRE([AX_CXX_COMPILER_VERSION])
66
67 ax_append_compile_flags_extra=
68 AS_IF([test "$CLANG" = "yes"],[ax_append_compile_flags_extra="-Werror"])
69
70 AS_IF([test "$ac_cv_vcs_checkout" = yes], [
71 AX_CHECK_LINK_FLAG([-Werror])
72 ax_append_compile_flags_extra=
73 ])
74 AX_CHECK_LINK_FLAG([-z relro -z now],,[$ax_append_compile_flags_extra])
75 AX_CHECK_LINK_FLAG([-pie],,[$ax_append_compile_flags_extra])
76 ])
77
78 AC_DEFUN([AX_HARDEN_CC_COMPILER_FLAGS], [
79 AC_REQUIRE([AX_APPEND_COMPILE_FLAGS])
80 AC_REQUIRE([AX_HARDEN_LINKER_FLAGS])
81
82 AC_LANG_PUSH([C])
83 CFLAGS=
84
85 AX_APPEND_COMPILE_FLAGS([-g])
86 AS_IF([test "$ax_enable_debug" = yes], [
87 AX_APPEND_COMPILE_FLAGS([-ggdb],,[$ax_append_compile_flags_extra])
88 AX_APPEND_COMPILE_FLAGS([-O0],,[$ax_append_compile_flags_extra])
89 ],[
90 AX_APPEND_COMPILE_FLAGS([-O2],,[$ax_append_compile_flags_extra])
91 ])
92
93 ac_cv_warnings_as_errors=no
94 AS_IF([test "$ac_cv_vcs_checkout" = yes], [
95 AX_APPEND_COMPILE_FLAGS([-Werror],,[$ax_append_compile_flags_extra])
96 AX_APPEND_COMPILE_FLAGS([-fstack-check],,[$ax_append_compile_flags_extra])
97 ac_cv_warnings_as_errors=yes
98 ],[
99 AX_APPEND_COMPILE_FLAGS([-Wno-pragmas],,[$ax_append_compile_flags_extra])
100 ])
101
102 AX_APPEND_COMPILE_FLAGS([-Wall],,[$ax_append_compile_flags_extra])
103 AX_APPEND_COMPILE_FLAGS([-Wextra],,[$ax_append_compile_flags_extra])
104 AX_APPEND_COMPILE_FLAGS([-Wunknown-pragmas],,[$ax_append_compile_flags_extra])
105 AX_APPEND_COMPILE_FLAGS([-Wthis-test-should-fail],,[$ax_append_compile_flags_extra])
106 AX_APPEND_COMPILE_FLAGS([-std=c99],,[$ax_append_compile_flags_extra])
107 dnl Anything below this comment please keep sorted.
108 AX_APPEND_COMPILE_FLAGS([--param=ssp-buffer-size=1],,[$ax_append_compile_flags_extra])
109 AX_APPEND_COMPILE_FLAGS([-Waddress],,[$ax_append_compile_flags_extra])
110 AX_APPEND_COMPILE_FLAGS([-Warray-bounds],,[$ax_append_compile_flags_extra])
111 AX_APPEND_COMPILE_FLAGS([-Wbad-function-cast],,[$ax_append_compile_flags_extra])
112 dnl Not in use -Wc++-compat
113 AX_APPEND_COMPILE_FLAGS([-Wchar-subscripts],,[$ax_append_compile_flags_extra])
114 AX_APPEND_COMPILE_FLAGS([-Wcomment],,[$ax_append_compile_flags_extra])
115 AX_APPEND_COMPILE_FLAGS([-Wfloat-equal],,[$ax_append_compile_flags_extra])
116 AX_APPEND_COMPILE_FLAGS([-Wformat-security],,[$ax_append_compile_flags_extra])
117 AX_APPEND_COMPILE_FLAGS([-Wformat=2],,[$ax_append_compile_flags_extra])
118 AX_APPEND_COMPILE_FLAGS([-Wlogical-op],,[$ax_append_compile_flags_extra])
119 AX_APPEND_COMPILE_FLAGS([-Wmaybe-uninitialized],,[$ax_append_compile_flags_extra])
120 AX_APPEND_COMPILE_FLAGS([-Wmissing-field-initializers],,[$ax_append_compile_flags_extra])
121 AX_APPEND_COMPILE_FLAGS([-Wmissing-noreturn],,[$ax_append_compile_flags_extra])
122 AX_APPEND_COMPILE_FLAGS([-Wmissing-prototypes],,[$ax_append_compile_flags_extra])
123 AX_APPEND_COMPILE_FLAGS([-Wnested-externs],,[$ax_append_compile_flags_extra])
124 AX_APPEND_COMPILE_FLAGS([-Wnormalized=id],,[$ax_append_compile_flags_extra])
125 AX_APPEND_COMPILE_FLAGS([-Wold-style-definition],,[$ax_append_compile_flags_extra])
126 AX_APPEND_COMPILE_FLAGS([-Woverride-init],,[$ax_append_compile_flags_extra])
127 AX_APPEND_COMPILE_FLAGS([-Wpointer-arith],,[$ax_append_compile_flags_extra])
128 AX_APPEND_COMPILE_FLAGS([-Wpointer-sign],,[$ax_append_compile_flags_extra])
129 AX_APPEND_COMPILE_FLAGS([-Wredundant-decls],,[$ax_append_compile_flags_extra])
130 AX_APPEND_COMPILE_FLAGS([-Wshadow],,[$ax_append_compile_flags_extra])
131 AX_APPEND_COMPILE_FLAGS([-Wshorten-64-to-32],,[$ax_append_compile_flags_extra])
132 AX_APPEND_COMPILE_FLAGS([-Wsign-compare],,[$ax_append_compile_flags_extra])
133 AX_APPEND_COMPILE_FLAGS([-Wstrict-overflow=1],,[$ax_append_compile_flags_extra])
134 AX_APPEND_COMPILE_FLAGS([-Wstrict-prototypes],,[$ax_append_compile_flags_extra])
135 AX_APPEND_COMPILE_FLAGS([-Wswitch-enum],,[$ax_append_compile_flags_extra])
136 AX_APPEND_COMPILE_FLAGS([-Wundef],,[$ax_append_compile_flags_extra])
137 AX_APPEND_COMPILE_FLAGS([-Wunused-result],,[$ax_append_compile_flags_extra])
138 AX_APPEND_COMPILE_FLAGS([-Wunused-variable],,[$ax_append_compile_flags_extra])
139 AX_APPEND_COMPILE_FLAGS([-Wwrite-strings],,[$ax_append_compile_flags_extra])
140 AX_APPEND_COMPILE_FLAGS([-floop-parallelize-all],,[$ax_append_compile_flags_extra])
141 AX_APPEND_COMPILE_FLAGS([-fwrapv],,[$ax_append_compile_flags_extra])
142 AC_LANG_POP
143
144 ])
145
146 AC_DEFUN([AX_HARDEN_CXX_COMPILER_FLAGS], [
147 AC_REQUIRE([AX_HARDEN_CC_COMPILER_FLAGS])
148 AC_LANG_PUSH([C++])
149 CXXFLAGS=
150
151 AX_APPEND_COMPILE_FLAGS([-g],,[$ax_append_compile_flags_extra])
152 AS_IF([test "$ax_enable_debug" = yes], [
153 AX_APPEND_COMPILE_FLAGS([-O0],,[$ax_append_compile_flags_extra])
154 AX_APPEND_COMPILE_FLAGS([-ggdb],,[$ax_append_compile_flags_extra])
155 ],[
156 AX_APPEND_COMPILE_FLAGS([-O2],,[$ax_append_compile_flags_extra])
157 AX_APPEND_COMPILE_FLAGS([-D_FORTIFY_SOURCE=2],,[$ax_append_compile_flags_extra])
158 ])
159
160 AS_IF([test "$ac_cv_vcs_checkout" = yes], [
161 AX_APPEND_COMPILE_FLAGS([-Werror],,[$ax_append_compile_flags_extra])
162 AX_APPEND_COMPILE_FLAGS([-fstack-check],,[$ax_append_compile_flags_extra])
163 ],[
164 AX_APPEND_COMPILE_FLAGS([-Wno-pragmas],,[$ax_append_compile_flags_extra])
165 ])
166
167 AX_APPEND_COMPILE_FLAGS([-Wall],,[$ax_append_compile_flags_extra])
168 AX_APPEND_COMPILE_FLAGS([-Wextra],,[$ax_append_compile_flags_extra])
169 AX_APPEND_COMPILE_FLAGS([-Wunknown-pragmas],,[$ax_append_compile_flags_extra])
170 AX_APPEND_COMPILE_FLAGS([-Wthis-test-should-fail],,[$ax_append_compile_flags_extra])
171 dnl Anything below this comment please keep sorted.
172 AX_APPEND_COMPILE_FLAGS([--param=ssp-buffer-size=1],,[$ax_append_compile_flags_extra])
173 AX_APPEND_COMPILE_FLAGS([-Waddress],,[$ax_append_compile_flags_extra])
174 AX_APPEND_COMPILE_FLAGS([-Warray-bounds],,[$ax_append_compile_flags_extra])
175 AX_APPEND_COMPILE_FLAGS([-Wchar-subscripts],,[$ax_append_compile_flags_extra])
176 AX_APPEND_COMPILE_FLAGS([-Wcomment],,[$ax_append_compile_flags_extra])
177 AX_APPEND_COMPILE_FLAGS([-Wctor-dtor-privacy],,[$ax_append_compile_flags_extra])
178 AX_APPEND_COMPILE_FLAGS([-Wfloat-equal],,[$ax_append_compile_flags_extra])
179 AX_APPEND_COMPILE_FLAGS([-Wformat=2],,[$ax_append_compile_flags_extra])
180 AX_APPEND_COMPILE_FLAGS([-Wmaybe-uninitialized],,[$ax_append_compile_flags_extra])
181 AX_APPEND_COMPILE_FLAGS([-Wmissing-field-initializers],,[$ax_append_compile_flags_extra])
182 AX_APPEND_COMPILE_FLAGS([-Wmissing-noreturn],,[$ax_append_compile_flags_extra])
183 AX_APPEND_COMPILE_FLAGS([-Wlogical-op],,[$ax_append_compile_flags_extra])
184 AX_APPEND_COMPILE_FLAGS([-Wnon-virtual-dtor],,[$ax_append_compile_flags_extra])
185 AX_APPEND_COMPILE_FLAGS([-Wnormalized=id],,[$ax_append_compile_flags_extra])
186 AX_APPEND_COMPILE_FLAGS([-Woverloaded-virtual],,[$ax_append_compile_flags_extra])
187 AX_APPEND_COMPILE_FLAGS([-Wpointer-arith],,[$ax_append_compile_flags_extra])
188 AX_APPEND_COMPILE_FLAGS([-Wredundant-decls],,[$ax_append_compile_flags_extra])
189 AX_APPEND_COMPILE_FLAGS([-Wshadow],,[$ax_append_compile_flags_extra])
190 AX_APPEND_COMPILE_FLAGS([-Wshorten-64-to-32],,[$ax_append_compile_flags_extra])
191 AX_APPEND_COMPILE_FLAGS([-Wsign-compare],,[$ax_append_compile_flags_extra])
192 AX_APPEND_COMPILE_FLAGS([-Wstrict-overflow=1],,[$ax_append_compile_flags_extra])
193 AX_APPEND_COMPILE_FLAGS([-Wswitch-enum],,[$ax_append_compile_flags_extra])
194 AX_APPEND_COMPILE_FLAGS([-Wundef],,[$ax_append_compile_flags_extra])
195 AX_APPEND_COMPILE_FLAGS([-Wc++11-compat],,[$ax_append_compile_flags_extra])
196 AX_APPEND_COMPILE_FLAGS([-Wunused-result],,[$ax_append_compile_flags_extra])
197 AX_APPEND_COMPILE_FLAGS([-Wunused-variable],,[$ax_append_compile_flags_extra])
198 AX_APPEND_COMPILE_FLAGS([-Wwrite-strings],,[$ax_append_compile_flags_extra])
199 AX_APPEND_COMPILE_FLAGS([-Wformat-security],,[$ax_append_compile_flags_extra])
200 AX_APPEND_COMPILE_FLAGS([-floop-parallelize-all],,[$ax_append_compile_flags_extra])
201 AX_APPEND_COMPILE_FLAGS([-fwrapv],,[$ax_append_compile_flags_extra])
202 AC_LANG_POP
203 ])
204
205 AC_DEFUN([AX_HARDEN_COMPILER_FLAGS], [
206 AC_REQUIRE([AX_HARDEN_CXX_COMPILER_FLAGS],,[$ax_append_compile_flags_extra])
207 ])
208
209 AC_DEFUN([AX_CC_OTHER_FLAGS], [
210 AC_REQUIRE([AX_APPEND_COMPILE_FLAGS])
211 AC_REQUIRE([AX_HARDEN_LINKER_FLAGS])
212
213 AC_LANG_PUSH([C])
214 AX_APPEND_COMPILE_FLAGS([-pipe],,[$ax_append_compile_flags_extra])
215 AC_LANG_POP
216 ])