1 ?RCS: $Id: ccflags.U,v 3.0.1.9 1997/02/28 15:27:07 ram Exp $
3 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
5 ?RCS: You may redistribute only under the terms of the Artistic Licence,
6 ?RCS: as specified in the README file that comes with the distribution.
7 ?RCS: You may reuse parts of this distribution only within the terms of
8 ?RCS: that same Artistic Licence; a copy of which may be found at the root
9 ?RCS: of the source tree for dist 3.0.
11 ?RCS: $Log: ccflags.U,v $
12 ?RCS: Revision 3.0.1.9 1997/02/28 15:27:07 ram
13 ?RCS: patch61: removed support for NO_PROTOTYPE detection on SCO
14 ?RCS: patch61: new locincpth variable
15 ?RCS: patch61: added info on the "additional ld flags" question
17 ?RCS: Revision 3.0.1.8 1995/07/25 13:48:54 ram
18 ?RCS: patch56: re-arranged compile line to include ldflags before objects
20 ?RCS: Revision 3.0.1.7 1995/05/12 12:08:33 ram
21 ?RCS: patch54: now checks for cc/ccflags/ldflags coherency
23 ?RCS: Revision 3.0.1.6 1994/10/29 16:07:02 ram
24 ?RCS: patch36: gcc versionning no longer relies on the C compiler's name
25 ?RCS: patch36: simplified check for gcc version checking (ADO)
27 ?RCS: Revision 3.0.1.5 1994/08/29 16:06:35 ram
28 ?RCS: patch32: propagate -posix flag from ccflags to ldflags
30 ?RCS: Revision 3.0.1.4 1994/05/06 14:28:45 ram
31 ?RCS: patch23: -fpcc-struct-return only needed in gcc 1.x (ADO)
32 ?RCS: patch23: cppflags now computed on an option-by-option basis
33 ?RCS: patch23: magically added cc flags now only done the first time
35 ?RCS: Revision 3.0.1.3 1993/09/13 15:58:29 ram
36 ?RCS: patch10: explicitly mention -DDEBUG just in case they need it (WAD)
37 ?RCS: patch10: removed all the "tans" variable usage (WAD)
39 ?RCS: Revision 3.0.1.2 1993/08/27 14:39:38 ram
40 ?RCS: patch7: added support for OSF/1 machines
42 ?RCS: Revision 3.0.1.1 1993/08/25 14:00:24 ram
43 ?RCS: patch6: added defaults for cppflags, ccflags and ldflags
45 ?RCS: Revision 3.0 1993/08/18 12:05:31 ram
46 ?RCS: Baseline for dist 3.0 netwide release.
48 ?MAKE:ccflags ldflags lkflags cppflags optimize locincpth: test cat \
49 Myread Guess Options Oldconfig +gccversion mips_type +usrinc \
50 package contains rm +cc cppstdin cppminus cpprun cpplast libpth \
51 libs loclibpth hint usesocks sh run rm_try
52 ?MAKE: -pick add $@ %<
54 ?S: This variable contains any additional C compiler flags desired by
55 ?S: the user. It is up to the Makefile to use this.
58 ?S: This variable holds the flags that will be passed to the C pre-
59 ?S: processor. It is up to the Makefile to use it.
62 ?S: This variable contains any optimizer/debugger flag that should be used.
63 ?S: It is up to the Makefile to use it.
66 ?S: This variable contains any additional C loader flags desired by
67 ?S: the user. It is up to the Makefile to use this.
70 ?S: This variable contains any additional C partial linker flags desired by
71 ?S: the user. It is up to the Makefile to use this.
74 ?S: This variable contains a list of additional directories to be
75 ?S: searched by the compiler. The appropriate '-I' directives will
76 ?S: be added to ccflags. This is intended to simplify setting
77 ?S: local directories from the Configure command line.
78 ?S: It's not much, but it parallels the loclibpth stuff in libpth.U.
80 ?T:inctest thisincl xxx inclwanted ftry previous thislibdir
82 ?T:check flag callback checkccflag
83 ?F:!cpp.c !gcctest !try
88 ?INIT:: Possible local include directories to search.
89 ?INIT:: Set locincpth to "" in a hint file to defeat local include searches.
90 ?INIT:locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
91 ?INIT:locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
93 ?INIT:: no include file wanted by default
96 ?INIT:: Enable -DEBUGGING and -DDEBUGGING from the command line
100 : determine optimization, if desired, or use for debug flag also
101 ?X: Allow for Configure -Uoptimize -- it's not strictly sensible, but
102 ?X: it has happened and we know what they mean. AD 2/16/98
104 ' '|$undef) dflt='none';;
106 *) dflt="$optimize";;
110 By default, $package compiles with the -O flag to use the optimizer.
111 Alternately, you might want to use the symbolic debugger, which uses
112 the -g flag (on traditional Unix systems). Either flag can be
113 specified here. To use neither flag, specify the word "none".
116 rp="What optimizer/debugger flag should be used?"
120 'none') optimize=" ";;
123 : Check what DEBUGGING is required from the command line
124 : -DEBUGGING or -DDEBUGGING or
125 : -DEBUGGING=both = -g + -DDEBUGGING
126 : -DEBUGGING=-g or -Doptimize=-g = -g
127 : -DEBUGGING=none or -UDEBUGGING =
128 : -DEBUGGING=old or -DEBUGGING=default = ? $optimize
131 *) DEBUGGING=$EBUGGING ;;
138 *) optimize="$optimize -g" ;;
142 *-g*) set `echo "X $optimize " | sed 's/ -g / /'`
151 both|$define) dflt='-DDEBUGGING'
154 : argument order is deliberate, as the flag will start with - which set could
156 checkccflag='check=$1; flag=$2; callback=$3;
158 echo "Checking if your compiler accepts $flag" 2>&1;
159 echo "int main(void) { return 0; }" > gcctest.c;
160 if $cc -O2 $flag -o gcctest gcctest.c 2>gcctest.out && ./gcctest; then
161 echo "Yes, it does." 2>&1;
162 if $test -s gcctest.out ; then
163 echo "But your platform does not like it:";
168 echo "Leaving current flags $ccflags alone." 2>&1
170 *) dflt="$dflt $flag";
176 echo "Nope, it does not, but that is ok." 2>&1;
180 : We will not override a previous value, but we might want to
181 : augment a hint file
184 case "$gccversion" in
185 1*) dflt="$dflt -fpcc-struct-return" ;;
187 case "$optimize:$DEBUGGING" in
188 *-g*:old) dflt="$dflt -DDEBUGGING";;
190 ?X: check for POSIXized ISC
191 case "$gccversion" in
192 2*) if $test -d /etc/conf/kconfig.d &&
193 $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
195 # Interactive Systems (ISC) POSIX mode.
200 ?X: If the user has gcc-2.95 or greater, try adding -fno-strict-alias.
201 ?X: Since the gcc "version" can be non-numeric, e.g.
202 ?X: "2.95.1 19990809 (prerelease)" , we'll do the test on any version
203 ?X: greater than 2.8.
204 ?X: --Andy Dougherty 27 Aug 1999
205 case "$gccversion" in
208 ?*) set strict-aliasing -fno-strict-aliasing
213 ?X: -pipe has shown a compile time speedup of about 40% on Linux and HP-UX
214 ?X: and also worked on cygwin-1.5.9
215 ?X: If a system fails, disable it in the hints. 99% of gcc uses binutils
216 # For gcc, adding -pipe speeds up compilations for some, but apparently
217 # some assemblers can't read from stdin. (It also slows down compilations
218 # in other cases, but those are apparently rarer these days.) AD 5/2004.
219 case "$gccversion" in
226 # on x86_64 (at least) we require an extra library (libssp) in the
227 # link command line. This library is not named, so I infer that it is
228 # an implementation detail that may change. Hence the safest approach
229 # is to add the flag to the flags passed to the compiler at link time,
230 # as that way the compiler can do the right implementation dependant
232 case "$gccversion" in
233 ?*) set stack-protector -fstack-protector
240 ?X: In USG mode, a MIPS system may need some BSD includes
242 *BSD*|'') inclwanted="$locincpth $usrinc";;
243 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
245 for thisincl in $inclwanted; do
246 if $test -d $thisincl; then
247 if $test x$thisincl != x$usrinc; then
250 *) dflt="$dflt -I$thisincl ";;
256 ?X: Include test function (header, symbol)
257 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
259 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
267 *) dflt="$dflt -D$2";;
271 set signal.h LANGUAGE_C; eval $inctest
275 ccflags="$ccflags -DSOCKS"
280 default|recommended) dflt="$ccflags $dflt" ;;
290 Your C compiler may want other flags. For this question you should include
291 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
292 but you should NOT include libraries or ld flags like -lwhatever. If you
293 want $package to honor its debug switch, you should include -DDEBUGGING here.
294 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
296 To use no flags, specify the word "none".
299 ?X: strip leading space
303 rp="Any additional cc flags?"
310 : the following weeds options from ccflags that are of no interest to cpp
312 '') cppflags="$ccflags" ;;
313 *) cppflags="$cppflags $ccflags" ;;
315 case "$gccversion" in
316 1*) cppflags="$cppflags -D__GNUC__"
320 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
326 echo "Let me guess what the preprocessor flags are..." >&4
336 ?X: For each cc flag, try it out with both cppstdin and cpprun, since the
337 ?X: first is almost surely a cc wrapper. We have to try both in case
338 ?X: of cc flags like '-Olimit 2900' that are actually two words...
345 *) ftry="$previous $flag";;
347 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
348 >cpp1.out 2>/dev/null && \
349 $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
350 >cpp2.out 2>/dev/null && \
351 $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
352 $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
354 cppflags="$cppflags $ftry"
364 *-*) echo "They appear to be: $cppflags";;
366 $rm -f cpp.c cpp?.out
370 : flags used in final linking phase
378 *-posix*) dflt="$dflt -posix" ;;
383 # See note above about -fstack-protector
387 *-fstack-protector*) ;; # Don't add it again
388 *) dflt="$dflt -fstack-protector" ;;
393 : Try to guess additional flags to pick up local libraries.
394 for thislibdir in $libpth; do
395 case " $loclibpth " in
398 *"-L$thislibdir "*) ;;
399 *) dflt="$dflt -L$thislibdir" ;;
411 Your C linker may need flags. For this question you should
412 include -L/whatever and any other flags used by the C linker, but you
413 should NOT include libraries like -lwhatever.
415 Make sure you include the appropriate -L/path flags if your C linker
416 does not normally search all of the directories you specified above,
419 To use no flags, specify the word "none".
423 rp="Any additional ld flags (NOT including libraries)?"
429 rmlist="$rmlist pdp11"
432 : partial linking may need other flags
434 '') case "$ldflags" in
441 rp="Partial linking flags to be used (NOT including -r)?"
450 ?X: If the user changes compilers after selecting a hint file, it's
451 ?X: possible that the suggested ccflags/ldflags will be wrong. Try to
452 ?X: compile and run a simple test program. Let the user see all the
453 ?X: error messages. -- ADO and RAM
454 ?X: Sometimes, particularly on Linux systems, there is a bad library
455 ?X: (e.g. a dangling symlink or incompatible library or a "run-time"
456 ?X: version but not a "development" version of a library). This test
457 ?X: will catch those sorts of problems too, though how to fix them
458 ?X: may not be obvious.
462 echo "Checking your choice of C compiler and flags for coherency..." >&4
465 int main() { printf("Ok\n"); return(0); }
467 ?X: Strip extra blanks in case some of the following variables are empty
468 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
470 $cat >try.msg <<'EOM'
471 I've tried to compile and run the following simple program:
474 $cat try.c >> try.msg
476 $cat >> try.msg <<EOM
483 and I got the following output:
487 ?X: Use "sh -c" to avoid error messages tagged with leading "Configure:".
488 ?X: We need to try the resulting executable, because cc might yield a 0 status
489 ?X: even when ld failed, in which case the executable will not run properly,
490 ?X: if its x bit is set at all...
492 ?X: Also check the xxx=`$run ./try` output to check for misconfigured -lsfio.
493 ?X: If sfio's iffe goofed and it uses _exit instead of exit, then the
494 ?X: output buffers don't get flushed and we don't see any output
495 ?X: when run from within `backticks`. What fun.
496 ?X: --Andy Dougherty 2/13/1998
497 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
498 if $sh -c "$run ./try " >>try.msg 2>&1; then
502 *) echo 'The program compiled OK, but produced no output.' >> try.msg
505 cat >> try.msg <<'EOQS'
506 If $libs contains -lsfio, and sfio is mis-configured, then it
507 sometimes (apparently) runs and exits with a 0 status, but with no
508 output! It may have to do with sfio's use of _exit vs. exit.
511 rp="You have a big problem. Shall I abort Configure"
518 echo "The program compiled OK, but exited with status $?." >>try.msg
519 rp="You have a problem. Shall I abort Configure"
523 echo "I can't compile the test program." >>try.msg
524 rp="You have a BIG problem. Shall I abort Configure"
530 ?X: using -K will prevent default aborting--maybe they're cross compiling?
533 echo "(The supplied flags or libraries might be incorrect.)"
541 *) echo "Ok. Stopping Configure." >&4
546 n) echo "OK, that should do.";;
548 $rm_try gcctest gcctest.out