~drizzle-trunk/libdrizzle/jenkins-Libdrizzle-6

« back to all changes in this revision

Viewing changes to m4/ax_harden_compiler_flags.m4

  • Committer: Andrew Hutchings
  • Date: 2012-12-17 12:03:43 UTC
  • mfrom: (44.1.1 libdrizzle)
  • Revision ID: andrew@linuxjedi.co.uk-20121217120343-tgde4ngz85yc6rsq
Merge in Brian's autoconf work

Show diffs side-by-side

added added

removed removed

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