]> git.ipfire.org Git - thirdparty/cups.git/blame - config-scripts/cups-compiler.m4
Import CUPS v2.0.4
[thirdparty/cups.git] / config-scripts / cups-compiler.m4
CommitLineData
ef416fc2 1dnl
00d0ae86 2dnl "$Id: cups-compiler.m4 12743 2015-06-23 14:49:09Z msweet $"
ef416fc2 3dnl
71f63681 4dnl Compiler stuff for CUPS.
ef416fc2 5dnl
71f63681
MS
6dnl Copyright 2007-2014 by Apple Inc.
7dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
ef416fc2 8dnl
71f63681
MS
9dnl These coded instructions, statements, and computer programs are the
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...
1a18c85c 106 if test $PICFLAG = 1; then
ef416fc2 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.
5d2cc5d3 113 AC_MSG_CHECKING(whether compiler supports -fstack-protector)
a4924f6c
MS
114 OLDCFLAGS="$CFLAGS"
115 CFLAGS="$CFLAGS -fstack-protector"
68b10830 116 AC_TRY_LINK(,,
db8b865d
MS
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
a4924f6c
MS
123 AC_MSG_RESULT(yes),
124 AC_MSG_RESULT(no))
125 CFLAGS="$OLDCFLAGS"
126
db8b865d
MS
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...
5d2cc5d3 133 AC_MSG_CHECKING(whether compiler supports -fPIE)
db8b865d 134 OLDCFLAGS="$CFLAGS"
483fc76b
MS
135 case "$uname" in
136 Darwin*)
137 CFLAGS="$CFLAGS -fPIE -Wl,-pie"
138 AC_TRY_COMPILE(,,[
139 PIEFLAGS="-fPIE -Wl,-pie"
140 AC_MSG_RESULT(yes)],
141 AC_MSG_RESULT(no))
142 ;;
143
144 *)
145 CFLAGS="$CFLAGS -fPIE -pie"
146 AC_TRY_COMPILE(,,[
147 PIEFLAGS="-fPIE -pie"
148 AC_MSG_RESULT(yes)],
149 AC_MSG_RESULT(no))
150 ;;
151 esac
db8b865d
MS
152 CFLAGS="$OLDCFLAGS"
153 fi
ef416fc2 154
155 if test "x$with_optim" = x; then
156 # Add useful warning options for tracking down problems...
5d2cc5d3 157 OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
1a18c85c 158
00d0ae86
MS
159 AC_MSG_CHECKING(whether compiler supports -Wno-unused-result)
160 OLDCFLAGS="$CFLAGS"
161 CFLAGS="$CFLAGS -Werror -Wno-unused-result"
162 AC_TRY_COMPILE(,,
163 [OPTIM="$OPTIM -Wno-unused-result"
164 AC_MSG_RESULT(yes)],
165 AC_MSG_RESULT(no))
166 CFLAGS="$OLDCFLAGS"
167
5d2cc5d3
MS
168 AC_MSG_CHECKING(whether compiler supports -Wsign-conversion)
169 OLDCFLAGS="$CFLAGS"
170 CFLAGS="$CFLAGS -Werror -Wsign-conversion"
171 AC_TRY_COMPILE(,,
172 [OPTIM="$OPTIM -Wsign-conversion"
173 AC_MSG_RESULT(yes)],
174 AC_MSG_RESULT(no))
175 CFLAGS="$OLDCFLAGS"
176
177 AC_MSG_CHECKING(whether compiler supports -Wno-tautological-compare)
1a18c85c
MS
178 OLDCFLAGS="$CFLAGS"
179 CFLAGS="$CFLAGS -Werror -Wno-tautological-compare"
180 AC_TRY_COMPILE(,,
181 [OPTIM="$OPTIM -Wno-tautological-compare"
182 AC_MSG_RESULT(yes)],
183 AC_MSG_RESULT(no))
184 CFLAGS="$OLDCFLAGS"
f228370c 185
a4924f6c 186 # Additional warning options for development testing...
d9bca400 187 if test -d .svn; then
1a18c85c 188 OPTIM="-Werror $OPTIM"
d9bca400 189 fi
ef416fc2 190 fi
e1d6a774 191
192 case "$uname" in
a4924f6c
MS
193 Darwin*)
194 # -D_FORTIFY_SOURCE=2 adds additional object size
195 # checking, basically wrapping all string functions
196 # with buffer-limited ones. Not strictly needed for
197 # CUPS since we already use buffer-limited calls, but
22c9029b 198 # this will catch any additions that are broken.
a4924f6c
MS
199 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
200 ;;
201
e1d6a774 202 Linux*)
a4924f6c
MS
203 # The -z relro option is provided by the Linux linker command to
204 # make relocatable data read-only.
205 if test x$enable_relro = xyes; then
71f63681 206 RELROFLAGS="-Wl,-z,relro,-z,now"
a4924f6c 207 fi
e1d6a774 208 ;;
209 esac
ef416fc2 210else
2abf387c 211 # Add vendor-specific compiler options...
ef416fc2 212 case $uname in
ef416fc2 213 SunOS*)
214 # Solaris
215 if test -z "$OPTIM"; then
216 if test "x$with_optim" = x; then
ed486911 217 OPTIM="-xO2"
ef416fc2 218 else
219 OPTIM="$with_optim $OPTIM"
220 fi
221 fi
222
ef416fc2 223 if test $PICFLAG = 1; then
224 OPTIM="-KPIC $OPTIM"
225 fi
226 ;;
227 *)
228 # Running some other operating system; inform the user they
229 # should contribute the necessary options to
230 # cups-support@cups.org...
231 echo "Building CUPS with default compiler optimizations; contact"
5d2cc5d3 232 echo "cups-devel@cups.org with uname and compiler options needed"
5bd77a73
MS
233 echo "for your platform, or set the CFLAGS and LDFLAGS environment"
234 echo "variables before running configure."
ef416fc2 235 ;;
236 esac
237fi
238
2abf387c 239# Add general compiler options per platform...
240case $uname in
dd1abb6b
MS
241 Linux*)
242 # glibc 2.8 and higher breaks peer credentials unless you
243 # define _GNU_SOURCE...
244 OPTIM="$OPTIM -D_GNU_SOURCE"
245 ;;
2abf387c 246esac
ef416fc2 247
248dnl
00d0ae86 249dnl End of "$Id: cups-compiler.m4 12743 2015-06-23 14:49:09Z msweet $".
ef416fc2 250dnl