g++ large patch
[p5sagit/p5-mst-13.2.git] / cflags.SH
index 634aba5..41e0040 100755 (executable)
--- a/cflags.SH
+++ b/cflags.SH
@@ -16,6 +16,91 @@ 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*) ;; # Is that you, Intel C++?
+*)  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
+'') ;;
+[12]*) ;;
+Intel*) ;; # Haven't we been through this already?
+*)  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
+
+# If we have g++, we cannot have the -Wdeclaration-after-statement.
+# Some g++s accept it but then whine about it with every file.
+case "$cc" in
+*g++*) warn="`echo $warn|sed 's/-Wdeclaration-after-statement/ /'`" ;;
+esac
+
+# stdflags currently unused.
+stdflags=''
+
+extra=''
+
+# Code to set any extra flags here.
+
 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 +109,14 @@ echo "Extracting cflags (with variable substitutions)"
 rm -f cflags
 $spitshell >cflags <<!GROK!THIS!
 $startsh
+
+# Extra warnings, used e.g. for gcc.
+warn="$warn"
+# Extra standardness.
+stdflags="$stdflags"
+# Extra extra.
+extra="$extra"
+
 !GROK!THIS!
 
 : In the following dollars and backticks do not need the extra backslash.
@@ -93,15 +186,19 @@ for file do
     doio) ;;
     doop) ;;
     dump) ;;
+    globals) ;;
     gv) ;;
     hv) ;;
     locale) ;;
+    madly) ;;
     main) ;;
     malloc) ;;
     mg) ;;
     miniperlmain) ;;
     numeric) ;;
     op) ;;
+    opmini) ;;
+    pad) ;;
     perl) ;;
     perlapi) ;;
     perlmain) ;;
@@ -110,6 +207,7 @@ for file do
     pp_ctl) ;;
     pp_hot) ;;
     pp_pack) ;;
+    pp_sort) ;;
     pp_sys) ;;
     regcomp) ;;
     regexec) ;;
@@ -118,55 +216,21 @@ for file do
     sv) ;;
     taint) ;;
     toke) ;;
+    universal) ;;
     usersub) ;;
+    utf8) ;;
     util) ;;
+    xsutils) ;;
     *) ;;
     esac
 
-# Add -Wall for the core modules iff gcc and not already -Wall
-warn=''
-case "$gccversion" in
-'') ;;
-*)  case "$ccflags" in
-    *-Wall*) ;;
-    *) warn="$warn -Wall" ;;
-    esac
-    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
+if test -f .patch; then
+  ccflags="-DPERL_PATCHNUM=`cat .patch` $ccflags"
+fi
 
     : Can we perhaps use $ansi2knr here
-    echo "$cc -c -DPERL_CORE $ccflags $optimize $warn"
-    eval "$also "'"$cc -DPERL_CORE -c $ccflags $optimize $warn"'
+    echo "$cc -c -DPERL_CORE $ccflags $stdflags $optimize $warn $extra"
+    eval "$also "'"$cc -DPERL_CORE -c $ccflags $stdflags $optimize $warn $extra"'
 
     . $TOP/config.sh