6fa20c17f541c1da812a086f1ea3bcc1a105760c
[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, AX_HARDEN_LINKER_FLAGS, AX_HARDEN_CC_COMPILER_FLAGS, AX_HARDEN_CXX_COMPILER_FLAGS
8 #
9 # DESCRIPTION
10 #
11 # Any compiler flag that "hardens" or tests code. C99 is assumed.
12 #
13 # NOTE: Implementation based on AX_APPEND_FLAG.
14 #
15 # LICENSE
16 #
17 # Copyright (C) 2012 Brian Aker
18 # All rights reserved.
19 #
20 # Redistribution and use in source and binary forms, with or without
21 # modification, are permitted provided that the following conditions are
22 # met:
23 #
24 # * Redistributions of source code must retain the above copyright
25 # notice, this list of conditions and the following disclaimer.
26 #
27 # * Redistributions in binary form must reproduce the above
28 # copyright notice, this list of conditions and the following disclaimer
29 # in the documentation and/or other materials provided with the
30 # distribution.
31 #
32 # * The names of its contributors may not be used to endorse or
33 # promote products derived from this software without specific prior
34 # written permission.
35 #
36 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
37 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
38 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
39 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
40 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
43 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
44 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
45 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
46 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
47
48 # The Following flags are not checked for
49 # -Wdeclaration-after-statement is counter to C99
50 # AX_APPEND_COMPILE_FLAGS([-std=c++11]) -- Not ready yet
51 # AX_APPEND_COMPILE_FLAGS([-pedantic]) -- ?
52 # AX_APPEND_COMPILE_FLAGS([-Wstack-protector]) -- Issues on 32bit compile
53 # AX_APPEND_COMPILE_FLAGS([-fstack-protector-all]) -- Issues on 32bit compile
54 # AX_APPEND_COMPILE_FLAGS([-Wlong-long]) -- Don't turn on for compatibility issues memcached_stat_st
55
56 #serial 2
57
58 AC_DEFUN([AX_HARDEN_LINKER_FLAGS], [
59 AC_REQUIRE([AX_CHECK_LINK_FLAG])
60 AC_REQUIRE([AX_VCS_CHECKOUT])
61 AC_REQUIRE([AX_DEBUG])
62 AC_REQUIRE([AX_CXX_COMPILER_VERSION])
63
64 AS_IF([test "$ac_cv_vcs_checkout" = yes], [
65 AX_CHECK_LINK_FLAG([-Werror])
66 ])
67 AX_CHECK_LINK_FLAG([-z relro -z now])
68 AX_CHECK_LINK_FLAG([-pie])
69 ])
70
71 AC_DEFUN([AX_HARDEN_CC_COMPILER_FLAGS], [
72 AC_REQUIRE([AX_APPEND_COMPILE_FLAGS])
73 AC_REQUIRE([AX_HARDEN_LINKER_FLAGS])
74
75 AC_LANG_PUSH([C])
76 CFLAGS=
77
78 AX_APPEND_COMPILE_FLAGS([-g])
79 AS_IF([test "$ax_enable_debug" = yes], [
80 AX_APPEND_COMPILE_FLAGS([-ggdb])
81 AX_APPEND_COMPILE_FLAGS([-O0])
82 ],[
83 AX_APPEND_COMPILE_FLAGS([-O2])
84 ])
85
86 ac_cv_warnings_as_errors=no
87 AS_IF([test "$ac_cv_vcs_checkout" = yes], [
88 AX_APPEND_COMPILE_FLAGS([-Werror])
89 AX_APPEND_COMPILE_FLAGS([-Wpragmas])
90 ac_cv_warnings_as_errors=yes
91 ],[
92 AX_APPEND_COMPILE_FLAGS([-Wno-pragmas])
93 ])
94
95 AX_APPEND_COMPILE_FLAGS([-Wall])
96 AX_APPEND_COMPILE_FLAGS([-Wextra])
97 AX_APPEND_COMPILE_FLAGS([-std=c99])
98 dnl Anything below this comment please keep sorted.
99 AX_APPEND_COMPILE_FLAGS([--paramssp-buffer-size=1])
100 AX_APPEND_COMPILE_FLAGS([-Waddress])
101 AX_APPEND_COMPILE_FLAGS([-Warray-bounds])
102 AX_APPEND_COMPILE_FLAGS([-Wbad-function-cast])
103 dnl AX_APPEND_COMPILE_FLAGS([-Wc++-compat])
104 AX_APPEND_COMPILE_FLAGS([-Wchar-subscripts])
105 AX_APPEND_COMPILE_FLAGS([-Wcomment])
106 AX_APPEND_COMPILE_FLAGS([-Wfloat-equal])
107 AX_APPEND_COMPILE_FLAGS([-Wformat-security])
108 AX_APPEND_COMPILE_FLAGS([-Wformat=2])
109 AX_APPEND_COMPILE_FLAGS([-Wlogical-op])
110 AX_APPEND_COMPILE_FLAGS([-Wmaybe-uninitialized])
111 AX_APPEND_COMPILE_FLAGS([-Wmissing-field-initializers])
112 AX_APPEND_COMPILE_FLAGS([-Wmissing-noreturn])
113 AX_APPEND_COMPILE_FLAGS([-Wmissing-prototypes])
114 AX_APPEND_COMPILE_FLAGS([-Wnested-externs])
115 AX_APPEND_COMPILE_FLAGS([-Wnormalized=id])
116 AX_APPEND_COMPILE_FLAGS([-Wold-style-definition])
117 AX_APPEND_COMPILE_FLAGS([-Woverride-init])
118 AX_APPEND_COMPILE_FLAGS([-Wpointer-arith])
119 AX_APPEND_COMPILE_FLAGS([-Wpointer-sign])
120 AX_APPEND_COMPILE_FLAGS([-Wredundant-decls])
121 AX_APPEND_COMPILE_FLAGS([-Wshadow])
122 AX_APPEND_COMPILE_FLAGS([-Wshorten-64-to-32])
123 AX_APPEND_COMPILE_FLAGS([-Wsign-compare])
124 AX_APPEND_COMPILE_FLAGS([-Wstrict-overflow=1])
125 AX_APPEND_COMPILE_FLAGS([-Wstrict-prototypes])
126 AX_APPEND_COMPILE_FLAGS([-Wswitch-enum])
127 AX_APPEND_COMPILE_FLAGS([-Wundef])
128 AX_APPEND_COMPILE_FLAGS([-Wunused-result])
129 AX_APPEND_COMPILE_FLAGS([-Wunused-variable])
130 AX_APPEND_COMPILE_FLAGS([-Wwrite-strings])
131 AX_APPEND_COMPILE_FLAGS([-floop-parallelize-all])
132 AX_APPEND_COMPILE_FLAGS([-fwrapv])
133 AC_LANG_POP
134
135 ])
136
137 AC_DEFUN([AX_HARDEN_CXX_COMPILER_FLAGS], [
138 AC_REQUIRE([AX_HARDEN_CC_COMPILER_FLAGS])
139 AC_LANG_PUSH([C++])
140 CXXFLAGS=
141
142 AX_APPEND_COMPILE_FLAGS([-g])
143 AS_IF([test "$ax_enable_debug" = yes], [
144 AX_APPEND_COMPILE_FLAGS([-O0])
145 AX_APPEND_COMPILE_FLAGS([-ggdb])
146 ],[
147 AX_APPEND_COMPILE_FLAGS([-O2])
148 AX_APPEND_COMPILE_FLAGS([-D_FORTIFY_SOURCE=2])
149 ])
150
151 AS_IF([test "$ac_cv_vcs_checkout" = yes], [
152 AX_APPEND_COMPILE_FLAGS([-Werror])
153 AX_APPEND_COMPILE_FLAGS([-Wpragmas])
154 ],[
155 AX_APPEND_COMPILE_FLAGS([-Wno-pragmas])
156 ])
157
158 AX_APPEND_COMPILE_FLAGS([-Wall])
159 AX_APPEND_COMPILE_FLAGS([-Wextra])
160 dnl Anything below this comment please keep sorted.
161 AX_APPEND_COMPILE_FLAGS([--paramssp-buffer-size=1])
162 AX_APPEND_COMPILE_FLAGS([-Waddress])
163 AX_APPEND_COMPILE_FLAGS([-Warray-bounds])
164 AX_APPEND_COMPILE_FLAGS([-Wchar-subscripts])
165 AX_APPEND_COMPILE_FLAGS([-Wcomment])
166 AX_APPEND_COMPILE_FLAGS([-Wctor-dtor-privacy])
167 AX_APPEND_COMPILE_FLAGS([-Wfloat-equal])
168 AX_APPEND_COMPILE_FLAGS([-Wformat=2])
169 AX_APPEND_COMPILE_FLAGS([-Wmaybe-uninitialized])
170 AX_APPEND_COMPILE_FLAGS([-Wmissing-field-initializers])
171 AX_APPEND_COMPILE_FLAGS([-Wmissing-noreturn])
172 AX_APPEND_COMPILE_FLAGS([-Wlogical-op])
173 AX_APPEND_COMPILE_FLAGS([-Wnon-virtual-dtor])
174 AX_APPEND_COMPILE_FLAGS([-Wnormalized=id])
175 AX_APPEND_COMPILE_FLAGS([-Woverloaded-virtual])
176 AX_APPEND_COMPILE_FLAGS([-Wpointer-arith])
177 AX_APPEND_COMPILE_FLAGS([-Wredundant-decls])
178 AX_APPEND_COMPILE_FLAGS([-Wshadow])
179 AX_APPEND_COMPILE_FLAGS([-Wshorten-64-to-32])
180 AX_APPEND_COMPILE_FLAGS([-Wsign-compare])
181 AX_APPEND_COMPILE_FLAGS([-Wstrict-overflow=1])
182 AX_APPEND_COMPILE_FLAGS([-Wswitch-enum])
183 AX_APPEND_COMPILE_FLAGS([-Wundef])
184 AX_APPEND_COMPILE_FLAGS([-Wc++11-compat])
185 AX_APPEND_COMPILE_FLAGS([-Wunused-result])
186 AX_APPEND_COMPILE_FLAGS([-Wunused-variable])
187 AX_APPEND_COMPILE_FLAGS([-Wwrite-strings])
188 AX_APPEND_COMPILE_FLAGS([-Wformat-security])
189 AX_APPEND_COMPILE_FLAGS([-floop-parallelize-all])
190 AX_APPEND_COMPILE_FLAGS([-fwrapv])
191 AC_LANG_POP
192 ])
193
194 AC_DEFUN([AX_HARDEN_COMPILER_FLAGS], [
195 AC_REQUIRE([AX_HARDEN_CXX_COMPILER_FLAGS])
196 ])