?RCS:
?RCS: Copyright (c) 1991-1993, Raphael Manfredi
?RCS:
-?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: You may redistribute only under the terms of the Artistic License,
?RCS: as specified in the README file that comes with the distribution.
?RCS: You may reuse parts of this distribution only within the terms of
-?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: that same Artistic License; a copy of which may be found at the root
?RCS: of the source tree for dist 3.0.
?RCS:
?RCS: $Log: ccflags.U,v $
?RCS: patch54: now checks for cc/ccflags/ldflags coherency
?RCS:
?RCS: Revision 3.0.1.6 1994/10/29 16:07:02 ram
-?RCS: patch36: gcc versionning no longer relies on the C compiler's name
+?RCS: patch36: gcc versioning no longer relies on the C compiler's name
?RCS: patch36: simplified check for gcc version checking (ADO)
?RCS:
?RCS: Revision 3.0.1.5 1994/08/29 16:06:35 ram
?RCS: patch23: magically added cc flags now only done the first time
?RCS:
?RCS: Revision 3.0.1.3 1993/09/13 15:58:29 ram
-?RCS: patch10: explicitely mention -DDEBUG just in case they need it (WAD)
+?RCS: patch10: explicitly mention -DDEBUG just in case they need it (WAD)
?RCS: patch10: removed all the "tans" variable usage (WAD)
?RCS:
?RCS: Revision 3.0.1.2 1993/08/27 14:39:38 ram
?RCS: Revision 3.0 1993/08/18 12:05:31 ram
?RCS: Baseline for dist 3.0 netwide release.
?RCS:
-?MAKE:ccflags ldflags lkflags cppflags optimize locincpth: test cat \
+?MAKE:ccflags ldflags lkflags cppflags optimize locincpth: test cat osname \
Myread Guess Options Oldconfig +gccversion mips_type +usrinc \
package contains rm +cc cppstdin cppminus cpprun cpplast libpth \
- libs loclibpth hint usesocks sh run
+ libs loclibpth hint usesocks sh run rm_try sysroot
?MAKE: -pick add $@ %<
?S:ccflags:
?S: This variable contains any additional C compiler flags desired by
?S: local directories from the Configure command line.
?S: It's not much, but it parallels the loclibpth stuff in libpth.U.
?S:.
-?T:inctest thisincl xxx flag inclwanted ftry previous thislibdir
+?T:inctest thisincl xxx inclwanted ftry previous thislibdir
?T:EBUGGING DEBUGGING
+?T:check flag callback checkccflag
+?F:!cpp.c !gcctest !try
?D:cppflags=''
?D:ccflags=''
?D:ldflags=''
?D:optimize=''
+?LINT:extern _sysroot
?INIT:: Possible local include directories to search.
?INIT:: Set locincpth to "" in a hint file to defeat local include searches.
?INIT:locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
?INIT:
?INIT:: Enable -DEBUGGING and -DDEBUGGING from the command line
?INIT:EBUGGING=''
-?INIT:DEBUGGING=old
+?INIT:DEBUGGING=''
?INIT:
: determine optimization, if desired, or use for debug flag also
?X: Allow for Configure -Uoptimize -- it's not strictly sensible, but
esac
case "$DEBUGGING" in
--g|$define)
+-g|both|$define)
case "$optimize" in
*-g*) ;;
*) optimize="$optimize -g" ;;
both|$define) dflt='-DDEBUGGING'
esac
+: argument order is deliberate, as the flag will start with - which set could
+: think is an option
+checkccflag='check=$1; flag=$2; callback=$3;
+echo " ";
+echo "Checking if your compiler accepts $flag" 2>&1;
+[ "X$sysroot" != "X" ] && echo "For sysroot = $sysroot";
+echo "int main(void) { return 0; }" > gcctest.c;
+if $cc $_sysroot -O2 $flag -o gcctest gcctest.c 2>gcctest.out && $run ./gcctest; then
+ echo "Yes, it does." 2>&1;
+ if $test -s gcctest.out ; then
+ echo "But your platform does not like it:";
+ cat gcctest.out;
+ else
+ case "$ccflags" in
+ *$check*)
+ echo "Leaving current flags $ccflags alone." 2>&1
+ ;;
+ *) dflt="$dflt $flag";
+ eval $callback
+ ;;
+ esac
+ fi
+else
+ echo "Nope, it does not, but that is ok." 2>&1;
+fi
+'
+
: We will not override a previous value, but we might want to
: augment a hint file
case "$hint" in
esac
?X: check for POSIXized ISC
case "$gccversion" in
- 2*) if test -d /etc/conf/kconfig.d &&
+ 2*) if $test -d /etc/conf/kconfig.d &&
$contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
then
# Interactive Systems (ISC) POSIX mode.
case "$gccversion" in
1*) ;;
2.[0-8]*) ;;
- ?*) echo " "
- echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
- echo 'int main(void) { return 0; }' > gcctest.c
- if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
- echo "Yes, it does." 2>&1
- case "$ccflags" in
- *strict-aliasing*)
- echo "Leaving current flags $ccflags alone." 2>&1
- ;;
- *) dflt="$dflt -fno-strict-aliasing" ;;
- esac
- else
- echo "Nope, it doesn't, but that's ok." 2>&1
- fi
+ ?*) set strict-aliasing -fno-strict-aliasing
+ eval $checkccflag
;;
esac
?X: HMB 200405
# some assemblers can't read from stdin. (It also slows down compilations
# in other cases, but those are apparently rarer these days.) AD 5/2004.
case "$gccversion" in
- ?*) echo " "
- echo "Checking if your compiler accepts -pipe" 2>&1
- echo 'int main(void) { return 0; }' > gcctest.c
- if $cc -pipe -o gcctest gcctest.c; then
- echo "Yes, it does." 2>&1
- case "$ccflags" in
- *-pipe*)
- echo "Leaving current flags $ccflags alone." 2>&1
- ;;
- *) dflt="$dflt -pipe" ;;
- esac
- else
- echo "Nope, it doesn't, but that's ok." 2>&1
- fi
+ ?*) set pipe -pipe
+ eval $checkccflag
+ ;;
+ esac
- echo "Checking if your compiler accepts -Wdeclaration-after-statement" 2>&1
- echo 'int main(void) { return 0; }' > gcctest.c
- if $cc -Wdeclaration-after-statement -o gcctest gcctest.c; then
- echo "Yes, it does." 2>&1
- case "$ccflags" in
- *-Wdeclaration-after-statement*)
- echo "Leaving current flags $ccflags alone." 2>&1
- ;;
- *) dflt="$dflt -Wdeclaration-after-statement" ;;
+?X: NWC 200712
+ # on x86_64 (at least) we require an extra library (libssp) in the
+ # link command line. This library is not named, so I infer that it is
+ # an implementation detail that may change. Hence the safest approach
+ # is to add the flag to the flags passed to the compiler at link time,
+ # as that way the compiler can do the right implementation dependant
+ # thing. (NWC)
+ case "$osname" in
+ amigaos) ;; # -fstack-protector builds but doesn't work
+ *) case "$gccversion" in
+ ?*) set stack-protector-strong -fstack-protector-strong
+ eval $checkccflag
+ case "$dflt" in
+ *-fstack-protector-strong*) ;; # It got added.
+ *) # Try the plain/older -fstack-protector.
+ set stack-protector -fstack-protector
+ eval $checkccflag
+ ;;
esac
- else
- echo "Nope, it doesn't, but that's ok." 2>&1
- fi
+ ;;
+ esac
;;
esac
;;
;;
*) dflt="$ldflags";;
esac
+# See note above about -fstack-protector
+case "$ccflags" in
+*-fstack-protector-strong*)
+ case "$dflt" in
+ *-fstack-protector-strong*) ;; # Don't add it again
+ *) dflt="$dflt -fstack-protector-strong" ;;
+ esac
+ ;;
+*-fstack-protector*)
+ case "$dflt" in
+ *-fstack-protector*) ;; # Don't add it again
+ *) dflt="$dflt -fstack-protector" ;;
+ esac
+ ;;
+esac
: Try to guess additional flags to pick up local libraries.
for thislibdir in $libpth; do
?X: We need to try the resulting executable, because cc might yield a 0 status
?X: even when ld failed, in which case the executable will not run properly,
?X: if its x bit is set at all...
-?X:
-?X: Also check the xxx=`$run ./try` output to check for misconfigured -lsfio.
-?X: If sfio's iffe goofed and it uses _exit instead of exit, then the
-?X: output buffers don't get flushed and we don't see any output
-?X: when run from within `backticks`. What fun.
-?X: --Andy Dougherty 2/13/1998
if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
- if $sh -c "$run ./try" >>try.msg 2>&1; then
+ if $sh -c "$run ./try " >>try.msg 2>&1; then
xxx=`$run ./try`
case "$xxx" in
"Ok") dflt=n ;;
- *) echo 'The program compiled OK, but produced no output.' >> try.msg
- case " $libs " in
- *" -lsfio "*)
- cat >> try.msg <<'EOQS'
-If $libs contains -lsfio, and sfio is mis-configured, then it
-sometimes (apparently) runs and exits with a 0 status, but with no
-output! It may have to do with sfio's use of _exit vs. exit.
-
-EOQS
- rp="You have a big problem. Shall I abort Configure"
- dflt=y
- ;;
- esac
- ;;
+ *) echo 'The program compiled OK, but produced no output.' >> try.msg ;;
esac
else
echo "The program compiled OK, but exited with status $?." >>try.msg
;;
n) echo "OK, that should do.";;
esac
-$rm -f try try.* core
+$rm_try gcctest gcctest.out