]> git.ipfire.org Git - thirdparty/cups.git/blob - config-scripts/cups-compiler.m4
Merge changes from CUPS 1.6svn-r10267.
[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-2012 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 OPTIM="$OPTIM -fstack-protector"
118 AC_MSG_RESULT(yes),
119 AC_MSG_RESULT(no))
120 CFLAGS="$OLDCFLAGS"
121
122 # The -fPIE option is available with some versions of GCC and adds
123 # randomization of addresses, which avoids another class of exploits
124 # that depend on a fixed address for common functions.
125 AC_MSG_CHECKING(if GCC supports -fPIE)
126 OLDCFLAGS="$CFLAGS"
127 CFLAGS="$CFLAGS -fPIE"
128 AC_TRY_COMPILE(,,
129 [case "$CC" in
130 *clang)
131 PIEFLAGS="-fPIE -Wl,-pie"
132 ;;
133 *)
134 PIEFLAGS="-fPIE -pie"
135 ;;
136 esac
137 AC_MSG_RESULT(yes)],
138 AC_MSG_RESULT(no))
139 CFLAGS="$OLDCFLAGS"
140
141 if test "x$with_optim" = x; then
142 # Add useful warning options for tracking down problems...
143 OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
144
145 # Additional warning options for development testing...
146 if test -d .svn; then
147 OPTIM="-Wshadow -Werror $OPTIM"
148 else
149 AC_MSG_CHECKING(if GCC supports -Wno-tautological-compare)
150 OLDCFLAGS="$CFLAGS"
151 CFLAGS="$CFLAGS -Werror -Wno-tautological-compare"
152 AC_TRY_COMPILE(,,
153 [OPTIM="$OPTIM -Wno-tautological-compare"
154 AC_MSG_RESULT(yes)],
155 AC_MSG_RESULT(no))
156 CFLAGS="$OLDCFLAGS"
157 fi
158 fi
159
160 case "$uname" in
161 Darwin*)
162 # -D_FORTIFY_SOURCE=2 adds additional object size
163 # checking, basically wrapping all string functions
164 # with buffer-limited ones. Not strictly needed for
165 # CUPS since we already use buffer-limited calls, but
166 # this will catch any additions that are broken.
167 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
168 ;;
169
170 Linux*)
171 # The -z relro option is provided by the Linux linker command to
172 # make relocatable data read-only.
173 if test x$enable_relro = xyes; then
174 RELROFLAGS="-Wl,-z,relro"
175 fi
176 ;;
177 esac
178 else
179 # Add vendor-specific compiler options...
180 case $uname in
181 AIX*)
182 if test -z "$OPTIM"; then
183 if test "x$with_optim" = x; then
184 OPTIM="-O2 -qmaxmem=6000"
185 else
186 OPTIM="$with_optim $OPTIM"
187 fi
188 fi
189 ;;
190 HP-UX*)
191 if test -z "$OPTIM"; then
192 if test "x$with_optim" = x; then
193 OPTIM="+O2"
194 else
195 OPTIM="$with_optim $OPTIM"
196 fi
197 fi
198
199 CFLAGS="-Ae $CFLAGS"
200
201 if test $PICFLAG = 1; then
202 OPTIM="+z $OPTIM"
203 fi
204 ;;
205 IRIX)
206 if test -z "$OPTIM"; then
207 if test "x$with_optim" = x; then
208 OPTIM="-O2"
209 else
210 OPTIM="$with_optim $OPTIM"
211 fi
212 fi
213
214 if test "x$with_optim" = x; then
215 OPTIM="-fullwarn -woff 1183,1209,1349,1506,3201 $OPTIM"
216 fi
217 ;;
218 OSF*)
219 # Tru64 UNIX aka Digital UNIX aka OSF/1
220 if test -z "$OPTIM"; then
221 if test "x$with_optim" = x; then
222 OPTIM="-O"
223 else
224 OPTIM="$with_optim"
225 fi
226 fi
227 ;;
228 SunOS*)
229 # Solaris
230 if test -z "$OPTIM"; then
231 if test "x$with_optim" = x; then
232 OPTIM="-xO2"
233 else
234 OPTIM="$with_optim $OPTIM"
235 fi
236 fi
237
238 if test $PICFLAG = 1; then
239 OPTIM="-KPIC $OPTIM"
240 fi
241 ;;
242 UNIX_SVR*)
243 # UnixWare
244 if test -z "$OPTIM"; then
245 if test "x$with_optim" = x; then
246 OPTIM="-O"
247 else
248 OPTIM="$with_optim $OPTIM"
249 fi
250 fi
251
252 if test $PICFLAG = 1; then
253 OPTIM="-KPIC $OPTIM"
254 fi
255 ;;
256 *)
257 # Running some other operating system; inform the user they
258 # should contribute the necessary options to
259 # cups-support@cups.org...
260 echo "Building CUPS with default compiler optimizations; contact"
261 echo "cups-bugs@cups.org with uname and compiler options needed"
262 echo "for your platform, or set the CFLAGS and LDFLAGS environment"
263 echo "variables before running configure."
264 ;;
265 esac
266 fi
267
268 # Add general compiler options per platform...
269 case $uname in
270 HP-UX*)
271 # HP-UX 10.20 (at least) needs this definition to get the
272 # h_errno global...
273 OPTIM="$OPTIM -D_XOPEN_SOURCE_EXTENDED"
274
275 # HP-UX 11.00 (at least) needs this definition to get the
276 # u_short type used by the IP headers...
277 OPTIM="$OPTIM -D_INCLUDE_HPUX_SOURCE"
278
279 # HP-UX 11.23 (at least) needs this definition to get the
280 # IPv6 header to work...
281 OPTIM="$OPTIM -D_HPUX_SOURCE"
282 ;;
283
284 Linux*)
285 # glibc 2.8 and higher breaks peer credentials unless you
286 # define _GNU_SOURCE...
287 OPTIM="$OPTIM -D_GNU_SOURCE"
288 ;;
289
290 OSF*)
291 # Tru64 UNIX aka Digital UNIX aka OSF/1 need to be told
292 # to be POSIX-compliant...
293 OPTIM="$OPTIM -D_XOPEN_SOURCE=500 -D_XOPEN_SOURCE_EXTENDED -D_OSF_SOURCE"
294 ;;
295 esac
296
297 dnl
298 dnl End of "$Id: cups-compiler.m4 7871 2008-08-27 21:12:43Z mike $".
299 dnl