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
+
+
+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!.
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.
;;
esac
+: syntax: cflags [optimize=XXX] [file[.suffix]]
+: displays the compiler command line for file
+
case "X$1" in
Xoptimize=*|X"optimize=*")
eval "$1"
;;
esac
-perltype=''
-optdebug='' # ensure -g used if building a -DDEBUGGING libperl
-case $# in
-2) case $1 in
- *perl.*) perltype='';;
- *perld.*) perltype='-DDEBUGGING'; optdebug='-g' ;;
- *perle.*) perltype='-DEMBED';;
- *perlde.*) perltype='-DDEBUGGING -DEMBED'; optdebug='-g' ;;
- *perlm.*) perltype='-DEMBED -DMULTIPLICITY';;
- *perldm.*) perltype='-DDEBUGGING -DEMBED -DMULTIPLICITY'; optdebug='-g' ;;
- esac
- shift ;;
-esac
-
also=': '
case $# in
1) also='echo 1>&2 " CCCMD = "'
doio) ;;
doop) ;;
dump) ;;
+ globals) ;;
gv) ;;
hv) ;;
locale) ;;
+ madly) ;;
main) ;;
malloc) ;;
mg) ;;
miniperlmain) ;;
numeric) ;;
op) ;;
+ opmini) ;;
+ pad) ;;
perl) ;;
perlapi) ;;
perlmain) ;;
pp_ctl) ;;
pp_hot) ;;
pp_pack) ;;
+ pp_sort) ;;
pp_sys) ;;
regcomp) ;;
regexec) ;;
sv) ;;
taint) ;;
toke) ;;
+ universal) ;;
usersub) ;;
+ utf8) ;;
util) ;;
+ xsutils) ;;
*) ;;
esac
- if test "X$optdebug" != "X"; then
- optimize="$optdebug"
- fi
+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 $perltype"
- eval "$also "'"$cc -DPERL_CORE -c $ccflags $optimize $perltype"'
+ echo "$cc -c -DPERL_CORE $ccflags $stdflags $optimize $warn"
+ eval "$also "'"$cc -DPERL_CORE -c $ccflags $stdflags $optimize $warn"'
. $TOP/config.sh