]> git.ipfire.org Git - thirdparty/cups.git/blob - config-scripts/cups-compiler.m4
Fix builds with GCC 4.8.x
[thirdparty/cups.git] / config-scripts / cups-compiler.m4
1 dnl
2 dnl "$Id$"
3 dnl
4 dnl Compiler stuff for CUPS.
5 dnl
6 dnl Copyright 2007-2014 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; 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(whether compiler 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(whether compiler supports -fPIE)
134 OLDCFLAGS="$CFLAGS"
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
152 CFLAGS="$OLDCFLAGS"
153 fi
154
155 if test "x$with_optim" = x; then
156 # Add useful warning options for tracking down problems...
157 OPTIM="-Wall -Wno-format-y2k -Wunused -Wno-unused-result $OPTIM"
158
159 AC_MSG_CHECKING(whether compiler supports -Wsign-conversion)
160 OLDCFLAGS="$CFLAGS"
161 CFLAGS="$CFLAGS -Werror -Wsign-conversion"
162 AC_TRY_COMPILE(,,
163 [OPTIM="$OPTIM -Wsign-conversion"
164 AC_MSG_RESULT(yes)],
165 AC_MSG_RESULT(no))
166 CFLAGS="$OLDCFLAGS"
167
168 AC_MSG_CHECKING(whether compiler supports -Wno-tautological-compare)
169 OLDCFLAGS="$CFLAGS"
170 CFLAGS="$CFLAGS -Werror -Wno-tautological-compare"
171 AC_TRY_COMPILE(,,
172 [OPTIM="$OPTIM -Wno-tautological-compare"
173 AC_MSG_RESULT(yes)],
174 AC_MSG_RESULT(no))
175 CFLAGS="$OLDCFLAGS"
176
177 # Additional warning options for development testing...
178 if test -d .svn; then
179 OPTIM="-Werror $OPTIM"
180 fi
181 fi
182
183 case "$uname" in
184 Darwin*)
185 # -D_FORTIFY_SOURCE=2 adds additional object size
186 # checking, basically wrapping all string functions
187 # with buffer-limited ones. Not strictly needed for
188 # CUPS since we already use buffer-limited calls, but
189 # this will catch any additions that are broken.
190 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
191 ;;
192
193 Linux*)
194 # The -z relro option is provided by the Linux linker command to
195 # make relocatable data read-only.
196 if test x$enable_relro = xyes; then
197 RELROFLAGS="-Wl,-z,relro,-z,now"
198 fi
199 ;;
200 esac
201 else
202 # Add vendor-specific compiler options...
203 case $uname in
204 SunOS*)
205 # Solaris
206 if test -z "$OPTIM"; then
207 if test "x$with_optim" = x; then
208 OPTIM="-xO2"
209 else
210 OPTIM="$with_optim $OPTIM"
211 fi
212 fi
213
214 if test $PICFLAG = 1; then
215 OPTIM="-KPIC $OPTIM"
216 fi
217 ;;
218 *)
219 # Running some other operating system; inform the user they
220 # should contribute the necessary options to
221 # cups-support@cups.org...
222 echo "Building CUPS with default compiler optimizations; contact"
223 echo "cups-devel@cups.org with uname and compiler options needed"
224 echo "for your platform, or set the CFLAGS and LDFLAGS environment"
225 echo "variables before running configure."
226 ;;
227 esac
228 fi
229
230 # Add general compiler options per platform...
231 case $uname in
232 Linux*)
233 # glibc 2.8 and higher breaks peer credentials unless you
234 # define _GNU_SOURCE...
235 OPTIM="$OPTIM -D_GNU_SOURCE"
236 ;;
237 esac
238
239 dnl
240 dnl End of "$Id$".
241 dnl