+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
+
+
+stdflags=''
+
+# Be strict C89 for gcc (but not for g++).
+case "$gccversion" in
+'') ;;
+Intel*) ;; # Nice try, Intel C++.
+12]*) ;; # Go easy on the older versions of gcc.
+*) case "$cc" in
+ *g++*) ;;
+ *) stdflags="$stdflags -std=c89" ;;
+ esac
+ ;;
+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!.
+: Protect any dollar signs and backticks that you do not want interpreted
+: by putting a backslash in front. You may delete these comments.
+rm -f cflags
+$spitshell >cflags <<!GROK!THIS!
+$startsh
+
+# Extra warnings, used e.g. for gcc.
+warn="$warn"
+# Extra standardness.
+stdflags="$stdflags"
+
+!GROK!THIS!
+
+: In the following dollars and backticks do not need the extra backslash.
+$spitshell >>cflags <<'!NO!SUBS!'
+case $PERL_CONFIG_SH in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+
+: syntax: cflags [optimize=XXX] [file[.suffix]]
+: displays the compiler command line for file
+
+case "X$1" in
+Xoptimize=*|X"optimize=*")
+ eval "$1"
+ shift
+ ;;
+esac
+