From: Jarkko Hietaniemi Date: Mon, 26 Jun 2006 22:12:37 +0000 (+0300) Subject: cflags.SH: scan the gcc warning flags only once, during .SH expansion X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=bc730b189e18b77b416d3d93e22753fd63f9ee27;p=p5sagit%2Fp5-mst-13.2.git cflags.SH: scan the gcc warning flags only once, during .SH expansion Message-Id: <20060626191237.8A0936CF04@seth.hut.fi> p4raw-id: //depot/perl@28434 --- diff --git a/cflags.SH b/cflags.SH index 7cb593b..1e770a7 100755 --- a/cflags.SH +++ b/cflags.SH @@ -16,6 +16,77 @@ esac case "$0" in */*) cd `expr X$0 : 'X\(.*\)/'` ;; esac + +warn='' + +# Add -Wall for the core modules iff gcc and not already -Wall +case "$gccversion" in +'') ;; +Intel*) ;; # The Intel C++ plays gcc on TV but is not really it. +*) case "$ccflags" in + *-Wall*) ;; + *) warn="$warn -Wall" ;; + esac + ;; +esac + +# The gcc -ansi -pedantic require their own dance, too. +case "$gccversion" in +'') ;; +Intel*) ;; +*) case "$gccansipedantic" in + define) + case "$gccversion" in + [12]*) ;; # gcc versions 1 (gasp!) and 2 are not good for this. + *) case "$osname" in + # Add -ansi -pedantic only for known platforms. + aix|dec_osf|freebsd|hpux|irix|linux) + ansipedantic="-ansi -pedantic" ;; + solaris) +# Can't add -ansi for Solaris. +# Off_t/off_t is a struct in Solaris with largefiles, and with -ansi +# that struct cannot be compared with a flat integer, such as a STRLEN. +# The -ansi will also cause a lot of noise in Solaris because of: +# /usr/include/sys/resource.h:148: warning: `struct rlimit64' declared inside parameter list + ansipedantic="-pedantic" ;; + esac + for i in $ansipedantic + do + case "$ccflags" in + *$i*) ;; + *) warn="$warn $i" ;; + esac + done + case "$warn$ccflags" in + *-pedantic*) warn="$warn -DPERL_GCC_PEDANTIC" ;; + esac + ;; + esac + ;; + esac + ;; +esac + +# Further gcc warning options. +case "$gccversion" in +'') ;; +Intel*) ;; +*) for opt in '' extra declaration-after-statement endif-labels + do + case " $ccflags " in + *"-W$opt "*) ;; + *) case "`echo >_cflags.c | $cc -W$opt -c _cflags.c -o _cflags.o 2>&1`" in + *"unrecognized"*) ;; + *"Invalid"*) ;; + *) warn="$warn -W$opt" ;; + esac + ;; + esac + rm -f _cflags.c cflags.o + done + ;; +esac + echo "Extracting cflags (with variable substitutions)" : This section of the file will have variable substitutions done on it. : Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!. @@ -24,6 +95,10 @@ echo "Extracting cflags (with variable substitutions)" rm -f cflags $spitshell >cflags <_cflags.c | $cc -W$opt -c _cflags.c -o _cflags.o 2>&1`" in - *"unrecognized"*) ;; - *"Invalid"*) ;; - *) warn="$warn -W$opt" ;; - esac - ;; - esac - rm -f _cflags.c cflags.o - done - ;; -esac - if test -f .patch; then ccflags="-DPERL_PATCHNUM=`cat .patch` $ccflags" fi