]> git.ipfire.org Git - thirdparty/cups.git/blob - config-scripts/cups-compiler.m4
Fixed a compile issue on 64-bit Linux with Clang - need to use the -pie option
[thirdparty/cups.git] / config-scripts / cups-compiler.m4
1 dnl
2 dnl "$Id: cups-compiler.m4 7871 2008-08-27 21:12:43Z mike $"
3 dnl
4 dnl Compiler stuff for CUPS.
5 dnl
6 dnl Copyright 2007-2013 by Apple Inc.
7 dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
8 dnl
9 dnl These coded instructions, statements, and computer programs are the
10 dnl property of Apple Inc. and are protected by Federal copyright
11 dnl law. Distribution and use rights are outlined in the file "LICENSE.txt"
12 dnl which should have been included with this file. If this file is
13 dnl file is missing or damaged, see the license at "http://www.cups.org/".
14 dnl
15
16 dnl Clear the debugging and non-shared library options unless the user asks
17 dnl for them...
18 INSTALL_STRIP=""
19 OPTIM=""
20 AC_SUBST(INSTALL_STRIP)
21 AC_SUBST(OPTIM)
22
23 AC_ARG_WITH(optim, [ --with-optim set optimization flags ])
24 AC_ARG_ENABLE(debug, [ --enable-debug build with debugging symbols])
25 AC_ARG_ENABLE(debug_guards, [ --enable-debug-guards build with memory allocation guards])
26 AC_ARG_ENABLE(debug_printfs, [ --enable-debug-printfs build with CUPS_DEBUG_LOG support])
27 AC_ARG_ENABLE(unit_tests, [ --enable-unit-tests build and run unit tests])
28
29 dnl For debugging, keep symbols, otherwise strip them...
30 if test x$enable_debug = xyes; then
31 OPTIM="-g"
32 else
33 INSTALL_STRIP="-s"
34 fi
35
36 dnl Debug printfs can slow things down, so provide a separate option for that
37 if test x$enable_debug_printfs = xyes; then
38 CFLAGS="$CFLAGS -DDEBUG"
39 CXXFLAGS="$CXXFLAGS -DDEBUG"
40 fi
41
42 dnl Debug guards use an extra 4 bytes for some structures like strings in the
43 dnl string pool, so provide a separate option for that
44 if test x$enable_debug_guards = xyes; then
45 CFLAGS="$CFLAGS -DDEBUG_GUARDS"
46 CXXFLAGS="$CXXFLAGS -DDEBUG_GUARDS"
47 fi
48
49 dnl Unit tests take up time during a compile...
50 if test x$enable_unit_tests = xyes; then
51 UNITTESTS="unittests"
52 else
53 UNITTESTS=""
54 fi
55 AC_SUBST(UNITTESTS)
56
57 dnl Setup general architecture flags...
58 AC_ARG_WITH(archflags, [ --with-archflags set default architecture flags ])
59 AC_ARG_WITH(ldarchflags, [ --with-ldarchflags set program architecture flags ])
60
61 if test -z "$with_archflags"; then
62 ARCHFLAGS=""
63 else
64 ARCHFLAGS="$with_archflags"
65 fi
66
67 if test -z "$with_ldarchflags"; then
68 if test "$uname" = Darwin; then
69 # Only create Intel programs by default
70 LDARCHFLAGS="`echo $ARCHFLAGS | sed -e '1,$s/-arch ppc64//'`"
71 else
72 LDARCHFLAGS="$ARCHFLAGS"
73 fi
74 else
75 LDARCHFLAGS="$with_ldarchflags"
76 fi
77
78 AC_SUBST(ARCHFLAGS)
79 AC_SUBST(LDARCHFLAGS)
80
81 dnl Read-only data/program support on Linux...
82 AC_ARG_ENABLE(relro, [ --enable-relro build with the GCC relro option])
83
84 dnl Update compiler options...
85 CXXLIBS="${CXXLIBS:=}"
86 AC_SUBST(CXXLIBS)
87
88 PIEFLAGS=""
89 AC_SUBST(PIEFLAGS)
90
91 RELROFLAGS=""
92 AC_SUBST(RELROFLAGS)
93
94 if test -n "$GCC"; then
95 # Add GCC-specific compiler options...
96 if test -z "$OPTIM"; then
97 if test "x$with_optim" = x; then
98 # Default to optimize-for-size and debug
99 OPTIM="-Os -g"
100 else
101 OPTIM="$with_optim $OPTIM"
102 fi
103 fi
104
105 # Generate position-independent code as needed...
106 if test $PICFLAG = 1 -a $uname != AIX; then
107 OPTIM="-fPIC $OPTIM"
108 fi
109
110 # The -fstack-protector option is available with some versions of
111 # GCC and adds "stack canaries" which detect when the return address
112 # has been overwritten, preventing many types of exploit attacks.
113 AC_MSG_CHECKING(if GCC supports -fstack-protector)
114 OLDCFLAGS="$CFLAGS"
115 CFLAGS="$CFLAGS -fstack-protector"
116 AC_TRY_LINK(,,
117 if test "x$LSB_BUILD" = xy; then
118 # Can't use stack-protector with LSB binaries...
119 OPTIM="$OPTIM -fno-stack-protector"
120 else
121 OPTIM="$OPTIM -fstack-protector"
122 fi
123 AC_MSG_RESULT(yes),
124 AC_MSG_RESULT(no))
125 CFLAGS="$OLDCFLAGS"
126
127 if test "x$LSB_BUILD" != xy; then
128 # The -fPIE option is available with some versions of GCC and
129 # adds randomization of addresses, which avoids another class of
130 # exploits that depend on a fixed address for common functions.
131 #
132 # Not available to LSB binaries...
133 AC_MSG_CHECKING(if GCC supports -fPIE)
134 OLDCFLAGS="$CFLAGS"
135 CFLAGS="$CFLAGS -fPIE -pie"
136 AC_TRY_COMPILE(,,[
137 PIEFLAGS="-fPIE -pie"
138 AC_MSG_RESULT(yes)],
139 AC_MSG_RESULT(no))
140 CFLAGS="$OLDCFLAGS"
141 fi
142
143 if test "x$with_optim" = x; then
144 # Add useful warning options for tracking down problems...
145 OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
146
147 # Additional warning options for development testing...
148 if test -d .svn; then
149 OPTIM="-Wshadow -Werror $OPTIM"
150 else
151 AC_MSG_CHECKING(if GCC supports -Wno-tautological-compare)
152 OLDCFLAGS="$CFLAGS"
153 CFLAGS="$CFLAGS -Werror -Wno-tautological-compare"
154 AC_TRY_COMPILE(,,
155 [OPTIM="$OPTIM -Wno-tautological-compare"
156 AC_MSG_RESULT(yes)],
157 AC_MSG_RESULT(no))
158 CFLAGS="$OLDCFLAGS"
159 fi
160 fi
161
162 case "$uname" in
163 Darwin*)
164 # -D_FORTIFY_SOURCE=2 adds additional object size
165 # checking, basically wrapping all string functions
166 # with buffer-limited ones. Not strictly needed for
167 # CUPS since we already use buffer-limited calls, but
168 # this will catch any additions that are broken.
169 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
170 ;;
171
172 Linux*)
173 # The -z relro option is provided by the Linux linker command to
174 # make relocatable data read-only.
175 if test x$enable_relro = xyes; then
176 RELROFLAGS="-Wl,-z,relro"
177 fi
178 ;;
179 esac
180 else
181 # Add vendor-specific compiler options...
182 case $uname in
183 AIX*)
184 if test -z "$OPTIM"; then
185 if test "x$with_optim" = x; then
186 OPTIM="-O2 -qmaxmem=6000"
187 else
188 OPTIM="$with_optim $OPTIM"
189 fi
190 fi
191 ;;
192 HP-UX*)
193 if test -z "$OPTIM"; then
194 if test "x$with_optim" = x; then
195 OPTIM="+O2"
196 else
197 OPTIM="$with_optim $OPTIM"
198 fi
199 fi
200
201 CFLAGS="-Ae $CFLAGS"
202
203 if test $PICFLAG = 1; then
204 OPTIM="+z $OPTIM"
205 fi
206 ;;
207 OSF*)
208 # Tru64 UNIX aka Digital UNIX aka OSF/1
209 if test -z "$OPTIM"; then
210 if test "x$with_optim" = x; then
211 OPTIM="-O"
212 else
213 OPTIM="$with_optim"
214 fi
215 fi
216 ;;
217 SunOS*)
218 # Solaris
219 if test -z "$OPTIM"; then
220 if test "x$with_optim" = x; then
221 OPTIM="-xO2"
222 else
223 OPTIM="$with_optim $OPTIM"
224 fi
225 fi
226
227 if test $PICFLAG = 1; then
228 OPTIM="-KPIC $OPTIM"
229 fi
230 ;;
231 UNIX_SVR*)
232 # UnixWare
233 if test -z "$OPTIM"; then
234 if test "x$with_optim" = x; then
235 OPTIM="-O"
236 else
237 OPTIM="$with_optim $OPTIM"
238 fi
239 fi
240
241 if test $PICFLAG = 1; then
242 OPTIM="-KPIC $OPTIM"
243 fi
244 ;;
245 *)
246 # Running some other operating system; inform the user they
247 # should contribute the necessary options to
248 # cups-support@cups.org...
249 echo "Building CUPS with default compiler optimizations; contact"
250 echo "cups-bugs@cups.org with uname and compiler options needed"
251 echo "for your platform, or set the CFLAGS and LDFLAGS environment"
252 echo "variables before running configure."
253 ;;
254 esac
255 fi
256
257 # Add general compiler options per platform...
258 case $uname in
259 HP-UX*)
260 # HP-UX 10.20 (at least) needs this definition to get the
261 # h_errno global...
262 OPTIM="$OPTIM -D_XOPEN_SOURCE_EXTENDED"
263
264 # HP-UX 11.00 (at least) needs this definition to get the
265 # u_short type used by the IP headers...
266 OPTIM="$OPTIM -D_INCLUDE_HPUX_SOURCE"
267
268 # HP-UX 11.23 (at least) needs this definition to get the
269 # IPv6 header to work...
270 OPTIM="$OPTIM -D_HPUX_SOURCE"
271 ;;
272
273 Linux*)
274 # glibc 2.8 and higher breaks peer credentials unless you
275 # define _GNU_SOURCE...
276 OPTIM="$OPTIM -D_GNU_SOURCE"
277 ;;
278
279 OSF*)
280 # Tru64 UNIX aka Digital UNIX aka OSF/1 need to be told
281 # to be POSIX-compliant...
282 OPTIM="$OPTIM -D_XOPEN_SOURCE=500 -D_XOPEN_SOURCE_EXTENDED -D_OSF_SOURCE"
283 ;;
284 esac
285
286 dnl
287 dnl End of "$Id: cups-compiler.m4 7871 2008-08-27 21:12:43Z mike $".
288 dnl