45
45
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
46
46
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
47
47
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50
# We do not test for c99 or c++11, that is out of scope.
49
52
# The Following flags are not checked for
50
53
# -Wdeclaration-after-statement is counter to C99
51
# _APPEND_COMPILE_FLAGS_ERROR([-std=c++11]) -- Not ready yet
52
# _APPEND_COMPILE_FLAGS_ERROR([-pedantic]) --
53
# ? _APPEND_COMPILE_FLAGS_ERROR([-Wlong-long]) -- Don't turn on for
54
# compatibility issues memcached_stat_st
54
# _APPEND_COMPILE_FLAGS_ERROR([-pedantic])
58
AC_DEFUN([_SET_SANITIZE_FLAGS],
59
[AS_IF([test "x$MINGW" != xyes],[
60
AS_IF([test "x$enable_shared" = "xyes"],
61
[AS_CASE([$ax_harden_sanitize],
63
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=thread])],
65
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=address])],
67
_APPEND_COMPILE_FLAGS_ERROR([-fno-omit-frame-pointer])
68
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=integer])
69
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=memory])
70
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=alignment])
71
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=bool])
72
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=bounds])
73
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=enum])
74
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=float-cast-overflow])
75
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=float-divide-by-zero])
76
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=integer-divide-by-zero])
77
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=null])
78
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=object-size])
79
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=return])
80
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=shift])
81
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=signed-integer-overflow])
82
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=unreachable])
83
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=unsigned-integer-overflow])
84
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=vla-bound])
85
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=vptr])])
58
90
AC_DEFUN([_WARNINGS_AS_ERRORS],
59
91
[AC_CACHE_CHECK([if all warnings into errors],[ac_cv_warnings_as_errors],
76
108
# Everything above this does the heavy lifting, while what follows does the specifics.
78
110
AC_DEFUN([_HARDEN_LINKER_FLAGS],
80
AS_IF([test "$CC" != "clang"],
81
[_APPEND_LINK_FLAGS_ERROR([-z relro -z now])
82
AS_IF([test "x$ac_cv_warnings_as_errors" = xyes],
83
[AX_APPEND_LINK_FLAGS([-Werror])])])
111
[AS_IF([test "$CC" != "clang"],
112
[_APPEND_LINK_FLAGS_ERROR([-z relro -z now])
113
AS_IF([test "x$ac_cv_warnings_as_errors" = xyes],[AX_APPEND_LINK_FLAGS([-Werror])])
114
AS_IF([test "x$ac_cv_vcs_checkout" = xyes],[_APPEND_LINK_FLAGS_ERROR([-rdynamic])])
86
118
AC_DEFUN([_HARDEN_CC_COMPILER_FLAGS],
87
119
[AC_LANG_PUSH([C])dnl
105
137
[_APPEND_COMPILE_FLAGS_ERROR([-Wno-unknown-pragmas])
106
138
_APPEND_COMPILE_FLAGS_ERROR([-Wno-pragmas])])
108
AS_IF([test "$CC" = "clang"],
109
[_APPEND_COMPILE_FLAGS_ERROR([-Qunused-arguments])])
140
AS_IF([test "$CC" = "clang"],[_APPEND_COMPILE_FLAGS_ERROR([-Qunused-arguments])])
111
142
_APPEND_COMPILE_FLAGS_ERROR([-Wall])
112
143
_APPEND_COMPILE_FLAGS_ERROR([-Wextra])
144
_APPEND_COMPILE_FLAGS_ERROR([-Weverything])
113
145
_APPEND_COMPILE_FLAGS_ERROR([-Wthis-test-should-fail])
114
_APPEND_COMPILE_FLAGS_ERROR([-std=c99])
115
146
# Anything below this comment please keep sorted.
116
147
# _APPEND_COMPILE_FLAGS_ERROR([-Wmissing-format-attribute])
117
148
_APPEND_COMPILE_FLAGS_ERROR([-Wunsuffixed-float-constants])
146
177
_APPEND_COMPILE_FLAGS_ERROR([-Wno-suggest-attribute=pure])
147
178
_APPEND_COMPILE_FLAGS_ERROR([-Wno-redundant-decls])],
148
179
[_APPEND_COMPILE_FLAGS_ERROR([-Wredundant-decls])])
150
180
_APPEND_COMPILE_FLAGS_ERROR([-Wshadow])
151
181
_APPEND_COMPILE_FLAGS_ERROR([-Wshorten-64-to-32])
152
182
_APPEND_COMPILE_FLAGS_ERROR([-Wsign-compare])
155
185
_APPEND_COMPILE_FLAGS_ERROR([-Wswitch-enum])
156
186
_APPEND_COMPILE_FLAGS_ERROR([-Wtrampolines])
157
187
_APPEND_COMPILE_FLAGS_ERROR([-Wundef])
158
# _APPEND_COMPILE_FLAGS_ERROR([-Wunsafe-loop-optimizations])
188
_APPEND_COMPILE_FLAGS_ERROR([-Wunsafe-loop-optimizations])
159
189
_APPEND_COMPILE_FLAGS_ERROR([-funsafe-loop-optimizations])
160
AS_IF([test "x$ac_cv_vcs_checkout" = xyes && test "x$MINGW" != xyes],[
161
_APPEND_COMPILE_FLAGS_ERROR([-fno-omit-frame-pointer])
162
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=address])
163
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=integer])
164
AS_IF([test "x$enable_shared" = "xyes"],[
165
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=thread])
167
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=memory])
168
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=alignment])
169
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=bool])
170
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=bounds])
171
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=enum])
172
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=float-cast-overflow])
173
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=float-divide-by-zero])
174
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=integer-divide-by-zero])
175
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=null])
176
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=object-size])
177
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=return])
178
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=shift])
179
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=signed-integer-overflow])
180
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=unreachable])
181
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=unsigned-integer-overflow])
182
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=vla-bound])
183
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=vptr])
185
191
_APPEND_COMPILE_FLAGS_ERROR([-Wclobbered])
186
192
_APPEND_COMPILE_FLAGS_ERROR([-Wunused])
187
193
_APPEND_COMPILE_FLAGS_ERROR([-Wunused-result])
195
201
_APPEND_COMPILE_FLAGS_ERROR([-pipe])
196
202
_APPEND_COMPILE_FLAGS_ERROR([-fPIE -pie])
197
203
_APPEND_COMPILE_FLAGS_ERROR([-Wsizeof-pointer-memaccess])
204
_APPEND_COMPILE_FLAGS_ERROR([-Wpacked])
205
_APPEND_COMPILE_FLAGS_ERROR([-Wlong-long])
206
_APPEND_COMPILE_FLAGS_ERROR([-Wunreachable-code])
199
210
AS_IF([test "x$ax_enable_debug" = xno],
200
211
[AS_IF([test "x$ac_cv_vcs_checkout" = xyes],
235
246
[_APPEND_COMPILE_FLAGS_ERROR([-Wno-unknown-pragmas])
236
247
_APPEND_COMPILE_FLAGS_ERROR([-Wno-pragmas])])
238
AS_IF([test "$CXX" = "clang++"],
239
[_APPEND_COMPILE_FLAGS_ERROR([-Qunused-arguments])])
249
AS_IF([test "$CXX" = "clang++"],[_APPEND_COMPILE_FLAGS_ERROR([-Qunused-arguments])])
241
251
_APPEND_COMPILE_FLAGS_ERROR([-Wall])
242
252
_APPEND_COMPILE_FLAGS_ERROR([-Wextra])
253
_APPEND_COMPILE_FLAGS_ERROR([-Weverything])
243
254
_APPEND_COMPILE_FLAGS_ERROR([-Wthis-test-should-fail])
244
255
# Anything below this comment please keep sorted.
245
256
# _APPEND_COMPILE_FLAGS_ERROR([-Wmissing-format-attribute])
275
286
_APPEND_COMPILE_FLAGS_ERROR([-Wswitch-enum])
276
287
_APPEND_COMPILE_FLAGS_ERROR([-Wtrampolines])
277
288
_APPEND_COMPILE_FLAGS_ERROR([-Wundef])
278
# _APPEND_COMPILE_FLAGS_ERROR([-Wunsafe-loop-optimizations])
289
_APPEND_COMPILE_FLAGS_ERROR([-Wunsafe-loop-optimizations])
279
290
_APPEND_COMPILE_FLAGS_ERROR([-funsafe-loop-optimizations])
280
291
_APPEND_COMPILE_FLAGS_ERROR([-Wc++11-compat])
281
292
# _APPEND_COMPILE_FLAGS_ERROR([-Weffc++])
282
AS_IF([test "x$ac_cv_vcs_checkout" = xyes && test "x$MINGW" != xyes],[
283
_APPEND_COMPILE_FLAGS_ERROR([-fno-omit-frame-pointer])
284
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=address])
285
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=integer])
286
AS_IF([test "x$enable_shared" = "xyes"],[
287
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=thread])
289
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=memory])
290
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=alignment])
291
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=bool])
292
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=bounds])
293
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=enum])
294
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=float-cast-overflow])
295
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=float-divide-by-zero])
296
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=integer-divide-by-zero])
297
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=null])
298
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=object-size])
299
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=return])
300
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=shift])
301
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=signed-integer-overflow])
302
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=unreachable])
303
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=unsigned-integer-overflow])
304
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=vla-bound])
305
_APPEND_COMPILE_FLAGS_ERROR([-fsanitize=vptr])
307
293
# _APPEND_COMPILE_FLAGS_ERROR([-Wold-style-cast])
308
294
_APPEND_COMPILE_FLAGS_ERROR([-Wclobbered])
309
295
_APPEND_COMPILE_FLAGS_ERROR([-Wunused])
319
305
_APPEND_COMPILE_FLAGS_ERROR([-pipe])
320
306
_APPEND_COMPILE_FLAGS_ERROR([-fPIE -pie])
321
307
_APPEND_COMPILE_FLAGS_ERROR([-Wsizeof-pointer-memaccess])
308
_APPEND_COMPILE_FLAGS_ERROR([-Wpacked])
309
_APPEND_COMPILE_FLAGS_ERROR([-Wlong-long])
310
_APPEND_COMPILE_FLAGS_ERROR([-Wunreachable-code])
323
312
AS_IF([test "x$ax_enable_debug" = xno],
324
313
[AS_IF([test "x$ac_cv_vcs_checkout" = xyes],
352
344
AC_REQUIRE([_HARDEN_CC_COMPILER_FLAGS])
353
345
AC_REQUIRE([_HARDEN_CXX_COMPILER_FLAGS])
348
AC_DEFUN([AX_HARDEN_SANITIZE],
349
[AC_REQUIRE([AX_DEBUG])
350
AC_ARG_WITH([sanitize],
351
[AS_HELP_STRING([--with-sanitize],
352
[Enable sanitize flag for compiler if it supports them @<:@default=no@:>@])],
353
[AS_CASE([$with_sanitize],
355
ax_harden_sanitize='thread'],
357
ax_harden_sanitize='with_sanitize'],
358
[ax_harden_sanitize='rest'])
360
[AS_IF([test "x$ax_enable_debug" = xyes],[ax_harden_sanitize='rest'])])