]> git.ipfire.org Git - thirdparty/cups.git/blame - config-scripts/cups-compiler.m4
Merge changes from CUPS 1.7svn-r10643
[thirdparty/cups.git] / config-scripts / cups-compiler.m4
CommitLineData
ef416fc2 1dnl
b19ccc9e 2dnl "$Id: cups-compiler.m4 7871 2008-08-27 21:12:43Z mike $"
ef416fc2 3dnl
22c9029b 4dnl Compiler stuff for CUPS.
ef416fc2 5dnl
12f89d24 6dnl Copyright 2007-2012 by Apple Inc.
f7deaa1a 7dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
ef416fc2 8dnl
9dnl These coded instructions, statements, and computer programs are the
bc44d920 10dnl property of Apple Inc. and are protected by Federal copyright
11dnl law. Distribution and use rights are outlined in the file "LICENSE.txt"
12dnl which should have been included with this file. If this file is
13dnl file is missing or damaged, see the license at "http://www.cups.org/".
ef416fc2 14dnl
15
16dnl Clear the debugging and non-shared library options unless the user asks
17dnl for them...
50fe7201 18INSTALL_STRIP=""
ef416fc2 19OPTIM=""
50fe7201 20AC_SUBST(INSTALL_STRIP)
ef416fc2 21AC_SUBST(OPTIM)
22
bf3816c7
MS
23AC_ARG_WITH(optim, [ --with-optim set optimization flags ])
24AC_ARG_ENABLE(debug, [ --enable-debug build with debugging symbols])
25AC_ARG_ENABLE(debug_guards, [ --enable-debug-guards build with memory allocation guards])
26AC_ARG_ENABLE(debug_printfs, [ --enable-debug-printfs build with CUPS_DEBUG_LOG support])
27AC_ARG_ENABLE(unit_tests, [ --enable-unit-tests build and run unit tests])
839a51c8
MS
28
29dnl For debugging, keep symbols, otherwise strip them...
30if test x$enable_debug = xyes; then
31 OPTIM="-g"
32else
33 INSTALL_STRIP="-s"
34fi
ef416fc2 35
5f64df29 36dnl Debug printfs can slow things down, so provide a separate option for that
52f6f666 37if test x$enable_debug_printfs = xyes; then
5f64df29 38 CFLAGS="$CFLAGS -DDEBUG"
94da7e34 39 CXXFLAGS="$CXXFLAGS -DDEBUG"
5f64df29
MS
40fi
41
745129be
MS
42dnl Debug guards use an extra 4 bytes for some structures like strings in the
43dnl string pool, so provide a separate option for that
44if test x$enable_debug_guards = xyes; then
45 CFLAGS="$CFLAGS -DDEBUG_GUARDS"
94da7e34 46 CXXFLAGS="$CXXFLAGS -DDEBUG_GUARDS"
745129be
MS
47fi
48
5f64df29
MS
49dnl Unit tests take up time during a compile...
50if test x$enable_unit_tests = xyes; then
51 UNITTESTS="unittests"
52else
53 UNITTESTS=""
54fi
55AC_SUBST(UNITTESTS)
56
ed486911 57dnl Setup general architecture flags...
bf3816c7
MS
58AC_ARG_WITH(archflags, [ --with-archflags set default architecture flags ])
59AC_ARG_WITH(ldarchflags, [ --with-ldarchflags set program architecture flags ])
ed486911 60
61if test -z "$with_archflags"; then
62 ARCHFLAGS=""
63else
64 ARCHFLAGS="$with_archflags"
a603edef
MS
65fi
66
67if test -z "$with_ldarchflags"; then
09a101d6 68 if test "$uname" = Darwin; then
12f89d24
MS
69 # Only create Intel programs by default
70 LDARCHFLAGS="`echo $ARCHFLAGS | sed -e '1,$s/-arch ppc64//'`"
09a101d6 71 else
72 LDARCHFLAGS="$ARCHFLAGS"
73 fi
a603edef 74else
839a51c8 75 LDARCHFLAGS="$with_ldarchflags"
ed486911 76fi
77
78AC_SUBST(ARCHFLAGS)
09a101d6 79AC_SUBST(LDARCHFLAGS)
ed486911 80
f7deaa1a 81dnl Read-only data/program support on Linux...
bf3816c7 82AC_ARG_ENABLE(relro, [ --enable-relro build with the GCC relro option])
f7deaa1a 83
ef416fc2 84dnl Update compiler options...
ac884b6a
MS
85CXXLIBS="${CXXLIBS:=}"
86AC_SUBST(CXXLIBS)
87
a74454a7 88PIEFLAGS=""
89AC_SUBST(PIEFLAGS)
90
f7deaa1a 91RELROFLAGS=""
92AC_SUBST(RELROFLAGS)
93
ef416fc2 94if test -n "$GCC"; then
2abf387c 95 # Add GCC-specific compiler options...
ef416fc2 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
a4924f6c 105 # Generate position-independent code as needed...
ef416fc2 106 if test $PICFLAG = 1 -a $uname != AIX; then
107 OPTIM="-fPIC $OPTIM"
108 fi
109
a4924f6c
MS
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"
68b10830 116 AC_TRY_LINK(,,
a4924f6c
MS
117 OPTIM="$OPTIM -fstack-protector"
118 AC_MSG_RESULT(yes),
119 AC_MSG_RESULT(no))
120 CFLAGS="$OLDCFLAGS"
121
22c9029b 122 # The -fPIE option is available with some versions of GCC and adds
a4924f6c
MS
123 # randomization of addresses, which avoids another class of exploits
124 # that depend on a fixed address for common functions.
22c9029b 125 AC_MSG_CHECKING(if GCC supports -fPIE)
a4924f6c 126 OLDCFLAGS="$CFLAGS"
22c9029b 127 CFLAGS="$CFLAGS -fPIE"
a4924f6c 128 AC_TRY_COMPILE(,,
f228370c
MS
129 [case "$CC" in
130 *clang)
131 PIEFLAGS="-fPIE -Wl,-pie"
132 ;;
133 *)
134 PIEFLAGS="-fPIE -pie"
135 ;;
136 esac
22c9029b 137 AC_MSG_RESULT(yes)],
a4924f6c
MS
138 AC_MSG_RESULT(no))
139 CFLAGS="$OLDCFLAGS"
ef416fc2 140
141 if test "x$with_optim" = x; then
142 # Add useful warning options for tracking down problems...
321d8d57 143 OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
f228370c 144
a4924f6c 145 # Additional warning options for development testing...
d9bca400 146 if test -d .svn; then
85dda01c 147 OPTIM="-Wshadow -Werror $OPTIM"
f228370c
MS
148 else
149 AC_MSG_CHECKING(if GCC supports -Wno-tautological-compare)
150 OLDCFLAGS="$CFLAGS"
f99f3698 151 CFLAGS="$CFLAGS -Werror -Wno-tautological-compare"
f228370c
MS
152 AC_TRY_COMPILE(,,
153 [OPTIM="$OPTIM -Wno-tautological-compare"
154 AC_MSG_RESULT(yes)],
155 AC_MSG_RESULT(no))
156 CFLAGS="$OLDCFLAGS"
d9bca400 157 fi
ef416fc2 158 fi
e1d6a774 159
160 case "$uname" in
a4924f6c
MS
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
22c9029b 166 # this will catch any additions that are broken.
a4924f6c
MS
167 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
168 ;;
169
e1d6a774 170 Linux*)
a4924f6c
MS
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
e1d6a774 176 ;;
177 esac
ef416fc2 178else
2abf387c 179 # Add vendor-specific compiler options...
ef416fc2 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
ef416fc2 201 if test $PICFLAG = 1; then
202 OPTIM="+z $OPTIM"
203 fi
204 ;;
2abf387c 205 OSF*)
206 # Tru64 UNIX aka Digital UNIX aka OSF/1
207 if test -z "$OPTIM"; then
208 if test "x$with_optim" = x; then
209 OPTIM="-O"
210 else
211 OPTIM="$with_optim"
212 fi
213 fi
214 ;;
ef416fc2 215 SunOS*)
216 # Solaris
217 if test -z "$OPTIM"; then
218 if test "x$with_optim" = x; then
ed486911 219 OPTIM="-xO2"
ef416fc2 220 else
221 OPTIM="$with_optim $OPTIM"
222 fi
223 fi
224
ef416fc2 225 if test $PICFLAG = 1; then
226 OPTIM="-KPIC $OPTIM"
227 fi
228 ;;
229 UNIX_SVR*)
230 # UnixWare
231 if test -z "$OPTIM"; then
232 if test "x$with_optim" = x; then
233 OPTIM="-O"
234 else
235 OPTIM="$with_optim $OPTIM"
236 fi
237 fi
238
239 if test $PICFLAG = 1; then
240 OPTIM="-KPIC $OPTIM"
241 fi
242 ;;
243 *)
244 # Running some other operating system; inform the user they
245 # should contribute the necessary options to
246 # cups-support@cups.org...
247 echo "Building CUPS with default compiler optimizations; contact"
248 echo "cups-bugs@cups.org with uname and compiler options needed"
5bd77a73
MS
249 echo "for your platform, or set the CFLAGS and LDFLAGS environment"
250 echo "variables before running configure."
ef416fc2 251 ;;
252 esac
253fi
254
2abf387c 255# Add general compiler options per platform...
256case $uname in
257 HP-UX*)
258 # HP-UX 10.20 (at least) needs this definition to get the
259 # h_errno global...
260 OPTIM="$OPTIM -D_XOPEN_SOURCE_EXTENDED"
261
262 # HP-UX 11.00 (at least) needs this definition to get the
263 # u_short type used by the IP headers...
264 OPTIM="$OPTIM -D_INCLUDE_HPUX_SOURCE"
b94498cf 265
266 # HP-UX 11.23 (at least) needs this definition to get the
267 # IPv6 header to work...
268 OPTIM="$OPTIM -D_HPUX_SOURCE"
2abf387c 269 ;;
270
dd1abb6b
MS
271 Linux*)
272 # glibc 2.8 and higher breaks peer credentials unless you
273 # define _GNU_SOURCE...
274 OPTIM="$OPTIM -D_GNU_SOURCE"
275 ;;
276
2abf387c 277 OSF*)
278 # Tru64 UNIX aka Digital UNIX aka OSF/1 need to be told
279 # to be POSIX-compliant...
280 OPTIM="$OPTIM -D_XOPEN_SOURCE=500 -D_XOPEN_SOURCE_EXTENDED -D_OSF_SOURCE"
281 ;;
282esac
ef416fc2 283
284dnl
b19ccc9e 285dnl End of "$Id: cups-compiler.m4 7871 2008-08-27 21:12:43Z mike $".
ef416fc2 286dnl