diff options
Diffstat (limited to 'cflags.SH')
-rwxr-xr-x | cflags.SH | 148 |
1 files changed, 92 insertions, 56 deletions
@@ -186,6 +186,7 @@ case "$gccversion" in # become warn-worthy. So let's drop the -pedantic in that case. case "$quadtype:$sPRId64" in "long long"*|*lld*|*Ld*) + echo "cflags.SH: Removing -pedantic and warn because of quadtype='long long'." ccflags="`echo $ccflags|sed 's/-pedantic/ /'`" warn="`echo $warn|sed 's/-pedantic/ /'`" ;; @@ -197,6 +198,7 @@ case "$gccversion" in # 'long long' as our main integral type. case "$ivtype" in "long long") + echo "cflags.SH: Removing -pedantic, -std=c89, and -ansi because of ivtype='long long'." ccflags=`echo $ccflags|sed -e 's/-pedantic/ /' -e 's/-std=c89/ /' -e 's/-ansi/ /'` warn=`echo $warn|sed -e 's/-pedantic/ /' -e 's/-ansi/ /'` stdflags=`echo $stdflags|sed -e 's/-std=c89/ /'` @@ -206,7 +208,88 @@ case "$gccversion" in # Using certain features (like the gcc statement expressions) # requires knowing whether -pedantic has been specified. case "$warn$ccflags" in - *-pedantic*) warn="$warn -DPERL_GCC_PEDANTIC" ;; + *-pedantic*) + echo "cflags.SH: Adding -DPERL_PEDANTIC because of -pedantic." + warn="$warn -DPERL_GCC_PEDANTIC" + ;; + esac + ;; +esac + +case "$cc" in +*g++*) + # Extra paranoia in case people have bad canned ccflags: + # bad in the sense that the flags are accepted by g++, + # but then whined about. + for f in -Wdeclaration-after-statement -std=c89 + do + case "$ccflags" in + *"$f"*) + echo "cflags.SH: Removing $ccflags because of g++." + ccflags=`echo $ccflags|sed 's/$f/ /'` ;; + esac + done + ;; +esac + +for f in -Wdeclaration-after-statement +do + case "$cppflags" in + *"$f"*) + echo "cflags.SH: Removing $f from cppflags." + cppflags=`echo $cppflags|sed 's/$f/ /'` ;; + esac +done + +# -Wall includes -Wunused-value and -Wunused-parameter, which may be too much +# with some compilers. +# +# XXX this is related to the unfortunate fact that bare -Wall (without +# amending -Wno-unused-...) is too much for XS code because of all the +# often generated but unused things. +# +case "$ccflags$warn" in +*-Wall*) + is_clang=undef + case "$cc" in + *g++*) + # Without -Wno-unused-variable g++ 4.x compiles are rather unwatchable + # because of all the warnings about Perl___notused, and g++ doesn't do + # __attribute__((unused)) (and even if at some stage it may, people do + # have older gcc installations), and ((void)x) isn't enough to silence + # the noises about XS functions not using their cv parameter, so we need + # the -Wno-unused-parameter too. + # Yes, we lose some valid warnings, but hopefully other compilers + # (like gcc) will still pick up those warnings. + for f in -Wno-unused-variable -Wno-unused-parameter + do + case "$warn" in + *"$f"*) ;; + *) + echo "cflags.SH: Adding $f because of g++." + warn="$warn $f" ;; + esac + done + ;; + *clang*) is_clang=define ;; + *) # clang may not be called clang, it may be called cc. + case "`$cc -v 2>&1`" in + *clang*) is_clang=define ;; + esac ;; + esac + + case "$is_clang" in + define) + for f in -Wno-unused-value + do + case "$warn" in + *"$f"*) ;; + *) + echo "cflags.SH: Adding $f because of clang." + warn="$warn $f" ;; + esac + done + ;; esac ;; esac @@ -227,7 +310,7 @@ $startsh # This file is generated by cflags.SH -# Base flags. myccflags so that the possible edits by cflags.SH will stick. +# Used to restore possible edits by cflags.SH. myccflags="$ccflags" # Extra warnings, used e.g. for gcc. warn="$warn" @@ -297,68 +380,21 @@ for file do case "$file" in *) ;; - # Customization examples follow: - av) ccflags=`echo $ccflags | sed -e s/-pipe//` ;; - deb) ccflags="$ccflags -fno-jump-tables" ;; - hv) warn=`echo $warn | sed -e s/-Wextra//` ;; - toke) optimize=-O0 ;; - esac - - # The examples are intentionally unreachable as the '*)' case always + # Customization examples follow. + # + # The examples are intentionally unreachable as the '*)' case above always # matches. To use them, move before the '*)' and edit as appropriate. # It is not a good idea to set ccflags to an absolute value here, as it # often contains general -D defines which are needed for correct # compilation. It is better to edit ccflags as shown, using interpolation # to add flags, or sed to remove flags. - - case "$cc" in - *g++*) - # Extra paranoia in case people have bad canned ccflags: - # bad in the sense that the flags are accepted by g++, - # but then whined about. - for f in -Wdeclaration-after-statement -std=c89 - do - ccflags=`echo $ccflags|sed 's/$f/ /'` - done - ;; - esac - cppflags=`echo $cppflags|sed 's/-Wdeclaration-after-statement/ /'` - - case "$cc" in - *clang*) - # clang complains a lot about -Wunused-value which are not fixable - warn="$warn -Wno-unused-value" - ;; - *g++*) - # Without -Wno-unused-variable g++ 4.x compiles are rather unwatchable - # because of all the warnings about Perl___notused, and g++ doesn't do - # __attribute__((unused)) (and even if at some stage it may, people do - # have older gcc installations), and ((void)x) isn't enough to silence - # the noises about XS functions not using their cv parameter, so we need - # the -Wno-unused-parameter too. - # Yes, we lose some valid warnings, but hopefully other compilers - # (like gcc) will still pick up those warnings. - for o in -Wno-unused-variable -Wno-unused-parameter - do - case "$warn" in - *$o*) ;; - *) warn="$warn $o" ;; - esac - done - ;; - *) - # clang may not be called clang - case "`$cc -v 2>&1`" in - *clang*) - case "$warn" in - *-Wno-unused-value) ;; - *) warn="$warn -Wno-unused-value" - esac - esac + av) ccflags=`echo $ccflags | sed -e s/-pipe//` ;; + deb) ccflags="$ccflags -fno-jump-tables" ;; + hv) warn=`echo $warn | sed -e s/-Wextra//` ;; + toke) optimize=-O0 ;; esac - # Can we perhaps use $ansi2knr here echo "$cc -c -DPERL_CORE $ccflags $stdflags $optimize $warn $extra" |