]> git.ipfire.org Git - thirdparty/cups.git/blob - config-scripts/cups-compiler.m4
Update default compiler options for GCC 8.x.
[thirdparty/cups.git] / config-scripts / cups-compiler.m4
1 dnl
2 dnl Compiler stuff for CUPS.
3 dnl
4 dnl Copyright 2007-2018 by Apple Inc.
5 dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
6 dnl
7 dnl Licensed under Apache License v2.0. See the file "LICENSE" for more information.
8 dnl
9
10 dnl Clear the debugging and non-shared library options unless the user asks
11 dnl for them...
12 INSTALL_STRIP=""
13 OPTIM=""
14 AC_SUBST(INSTALL_STRIP)
15 AC_SUBST(OPTIM)
16
17 AC_ARG_WITH(optim, [ --with-optim set optimization flags ])
18 AC_ARG_ENABLE(debug, [ --enable-debug build with debugging symbols])
19 AC_ARG_ENABLE(debug_guards, [ --enable-debug-guards build with memory allocation guards])
20 AC_ARG_ENABLE(debug_printfs, [ --enable-debug-printfs build with CUPS_DEBUG_LOG support])
21 AC_ARG_ENABLE(unit_tests, [ --enable-unit-tests build and run unit tests])
22
23 dnl For debugging, keep symbols, otherwise strip them...
24 if test x$enable_debug = xyes; then
25 OPTIM="-g"
26 else
27 INSTALL_STRIP="-s"
28 fi
29
30 dnl Debug printfs can slow things down, so provide a separate option for that
31 if test x$enable_debug_printfs = xyes; then
32 CFLAGS="$CFLAGS -DDEBUG"
33 CXXFLAGS="$CXXFLAGS -DDEBUG"
34 fi
35
36 dnl Debug guards use an extra 4 bytes for some structures like strings in the
37 dnl string pool, so provide a separate option for that
38 if test x$enable_debug_guards = xyes; then
39 CFLAGS="$CFLAGS -DDEBUG_GUARDS"
40 CXXFLAGS="$CXXFLAGS -DDEBUG_GUARDS"
41 fi
42
43 dnl Unit tests take up time during a compile...
44 if test x$enable_unit_tests = xyes; then
45 if test "$build" != "$host"; then
46 AC_MSG_ERROR([Sorry, cannot build unit tests when cross-compiling.])
47 fi
48
49 UNITTESTS="unittests"
50 else
51 UNITTESTS=""
52 fi
53 AC_SUBST(UNITTESTS)
54
55 dnl Setup general architecture flags...
56 AC_ARG_WITH(archflags, [ --with-archflags set default architecture flags ])
57 AC_ARG_WITH(ldarchflags, [ --with-ldarchflags set program architecture flags ])
58
59 if test -z "$with_archflags"; then
60 ARCHFLAGS=""
61 else
62 ARCHFLAGS="$with_archflags"
63 fi
64
65 if test -z "$with_ldarchflags"; then
66 if test "$host_os_name" = darwin; then
67 # Only create Intel programs by default
68 LDARCHFLAGS="`echo $ARCHFLAGS | sed -e '1,$s/-arch ppc64//'`"
69 else
70 LDARCHFLAGS="$ARCHFLAGS"
71 fi
72 else
73 LDARCHFLAGS="$with_ldarchflags"
74 fi
75
76 AC_SUBST(ARCHFLAGS)
77 AC_SUBST(LDARCHFLAGS)
78
79 dnl Read-only data/program support on Linux...
80 AC_ARG_ENABLE(relro, [ --enable-relro build with the GCC relro option])
81
82 dnl Update compiler options...
83 CXXLIBS="${CXXLIBS:=}"
84 AC_SUBST(CXXLIBS)
85
86 PIEFLAGS=""
87 AC_SUBST(PIEFLAGS)
88
89 RELROFLAGS=""
90 AC_SUBST(RELROFLAGS)
91
92 if test -n "$GCC"; then
93 # Add GCC-specific compiler options...
94 if test -z "$OPTIM"; then
95 if test "x$with_optim" = x; then
96 # Default to optimize-for-size and debug
97 OPTIM="-Os -g"
98 else
99 OPTIM="$with_optim $OPTIM"
100 fi
101 fi
102
103 # Generate position-independent code as needed...
104 if test $PICFLAG = 1; then
105 OPTIM="-fPIC $OPTIM"
106 fi
107
108 # The -fstack-protector option is available with some versions of
109 # GCC and adds "stack canaries" which detect when the return address
110 # has been overwritten, preventing many types of exploit attacks.
111 AC_MSG_CHECKING(whether compiler supports -fstack-protector)
112 OLDCFLAGS="$CFLAGS"
113 CFLAGS="$CFLAGS -fstack-protector"
114 AC_TRY_LINK(,,
115 if test "x$LSB_BUILD" = xy; then
116 # Can't use stack-protector with LSB binaries...
117 OPTIM="$OPTIM -fno-stack-protector"
118 else
119 OPTIM="$OPTIM -fstack-protector"
120 fi
121 AC_MSG_RESULT(yes),
122 AC_MSG_RESULT(no))
123 CFLAGS="$OLDCFLAGS"
124
125 if test "x$LSB_BUILD" != xy; then
126 # The -fPIE option is available with some versions of GCC and
127 # adds randomization of addresses, which avoids another class of
128 # exploits that depend on a fixed address for common functions.
129 #
130 # Not available to LSB binaries...
131 AC_MSG_CHECKING(whether compiler supports -fPIE)
132 OLDCFLAGS="$CFLAGS"
133 case "$host_os_name" in
134 darwin*)
135 CFLAGS="$CFLAGS -fPIE -Wl,-pie"
136 AC_TRY_COMPILE(,,[
137 PIEFLAGS="-fPIE -Wl,-pie"
138 AC_MSG_RESULT(yes)],
139 AC_MSG_RESULT(no))
140 ;;
141
142 *)
143 CFLAGS="$CFLAGS -fPIE -pie"
144 AC_TRY_COMPILE(,,[
145 PIEFLAGS="-fPIE -pie"
146 AC_MSG_RESULT(yes)],
147 AC_MSG_RESULT(no))
148 ;;
149 esac
150 CFLAGS="$OLDCFLAGS"
151 fi
152
153 if test "x$with_optim" = x; then
154 # Add useful warning options for tracking down problems...
155 OPTIM="-Wall -Wno-format-y2k -Wunused -Wno-unused-result -Wsign-conversion $OPTIM"
156
157 # Test GCC version for certain warning flags since -Werror
158 # doesn't trigger...
159 gccversion=`$CC --version | head -1 | awk '{print $NF}'`
160 case "$gccversion" in
161 7.* | 8.*)
162 OPTIM="$OPTIM -Wno-format-truncation -Wno-tautological-compare"
163 ;;
164 esac
165
166 # Additional warning options for development testing...
167 if test -d .git; then
168 OPTIM="-Werror $OPTIM"
169 fi
170 fi
171
172 case "$host_os_name" in
173 darwin*)
174 # -D_FORTIFY_SOURCE=2 adds additional object size
175 # checking, basically wrapping all string functions
176 # with buffer-limited ones. Not strictly needed for
177 # CUPS since we already use buffer-limited calls, but
178 # this will catch any additions that are broken.
179 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
180 ;;
181
182 linux*)
183 # The -z relro option is provided by the Linux linker command to
184 # make relocatable data read-only.
185 if test x$enable_relro = xyes; then
186 RELROFLAGS="-Wl,-z,relro,-z,now"
187 fi
188 ;;
189 esac
190 else
191 # Add vendor-specific compiler options...
192 case $host_os_name in
193 sunos*)
194 # Solaris
195 if test -z "$OPTIM"; then
196 if test "x$with_optim" = x; then
197 OPTIM="-xO2"
198 else
199 OPTIM="$with_optim $OPTIM"
200 fi
201 fi
202
203 if test $PICFLAG = 1; then
204 OPTIM="-KPIC $OPTIM"
205 fi
206 ;;
207 *)
208 # Running some other operating system; inform the user they
209 # should contribute the necessary options to
210 # cups-support@cups.org...
211 echo "Building CUPS with default compiler optimizations; contact"
212 echo "cups-devel@cups.org with uname and compiler options needed"
213 echo "for your platform, or set the CFLAGS and LDFLAGS environment"
214 echo "variables before running configure."
215 ;;
216 esac
217 fi
218
219 # Add general compiler options per platform...
220 case $host_os_name in
221 linux*)
222 # glibc 2.8 and higher breaks peer credentials unless you
223 # define _GNU_SOURCE...
224 OPTIM="$OPTIM -D_GNU_SOURCE"
225 ;;
226 esac