On Mon, Dec 31, 2001 at 11:03:38AM -0500, Dan Sugalski wrote: > Yes, please. This'll catch the systems based on GCC (like the Mac OS X > compiler) that don't look like that in Config.pm
On Mon, Dec 31, 2001 at 10:39:54AM -0500, Dan Sugalski wrote: > Folks, > > I've just made a few minor changes to configure.pl regarding the switches > for gcc. Now instead of -Wall being the defaults, it's: > > -Wall -ansi -pedantic -Wtraditional -Wstrict-prototypes > -Wmissing-prototypes -Winline -Wredundant-decls -Wall -Wshadow > -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion > -Waggregate-return -Winline > > And yes, I see that -Wall's in there twice. (You never notice until after > commit) I added -W -Wsign-compare to it, and -Wformat-nonliteral -Wformat-security -Wpacked -Wpadded -Wdisabled-optimization for gcc 3.0 We may not want all these. Patch appended, new gcc test program attached. Hopefully this is a the right style of doing things. Nicholas Clark --- Configure.pl.orig Mon Dec 31 15:32:56 2001 +++ Configure.pl Mon Dec 31 18:18:26 2001 @@ -178,12 +178,6 @@ $c{PQ} = "'"; } -# If using gcc, crank up its warnings as much as possible and make it behave -# ansi-ish. -if ($Config{ccname} eq "gcc") { - $c{cc_warn} = " -Wall -ansi -pedantic -Wtraditional -Wstrict-prototypes -Wmissing-prototypes -Winline -Wredundant-decls -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Winline"; -} - # Add the -DHAS_JIT if we're jitcapable if ($jitcapable) { $c{cc_hasjit} = " -DHAS_JIT"; @@ -225,6 +219,101 @@ prompt("And your floats?", 'nv'); prompt("What is your native opcode type?", 'opcode_t'); +print <<"END"; + +Determining if your C compiler is actually gcc (this could take a while): + +END + +{ + my %gnuc; + + compiletestc("test_gnuc"); + %gnuc=eval(runtestc()) or die "Can't run the test program: $!"; + unlink("test_siz$c{exe}", "test$c{o}"); + + unless (exists $gnuc{__GNUC__}) { + print << 'END'; + +The test program didn't give the expected result - assuming your compiler is +not gcc. + +END + + } else { + my $major = $gnuc{__GNUC__}; + my $minor = $gnuc{__GNUC_MINOR__}; + unless (defined $major) { + print << 'END'; + +Your C compiler is not gcc. + +END + } else { + print "Your C compiler reports itself as gcc, major version $major"; + print ", minor version $minor" if defined $minor; + } + print ".\n\n"; + if ($major =~ tr/0-9//c) { + print "major version '$major' is not an integer", + " - I don't think that this is gcc."; + undef $major; # Don't use it + } + if (defined $minor and $minor =~ tr/0-9//c) { + print "minor version '$minor' is not an integer."; + undef $minor; # Don't use it + } + if (defined $major) { + $c{gccversion} = $major; + $c{gccversion} .= ".$minor" if defined $minor; + } + } + +} + +if ($c{gccversion}) { + # If using gcc, crank up its warnings as much as possible and make it + # behave ansi-ish. + # Here's an attempt at a list of nasty things we can use for a given + # version of gcc. The earliest documentation I currently have access to is + # for 2.95, so I don't know what version everything came in at. If it turns + # out that you're using 2.7.2 and -Wfoo isn't recognised there, move it up + # into the next version becone (2.8) + + + my @opt_and_vers = + (0 => "-Wall -ansi -pedantic -Wtraditional -Wstrict-prototypes +-Wmissing-prototypes -Winline -Wredundant-decls -Wshadow -Wpointer-arith -Wcast-qual +-Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Winline -W +-Wsign-compare", + # others; ones we might like marked with ? + # ? -Wundef for undefined idenfiers in #if + # ? -Wbad-function-cast + # Warn whenever a function call is cast to a non-matching type + # ? -Wmissing-declarations + # Warn if a global function is defined without a previous declaration + # -Wmissing-noreturn + # ? -Wredundant-decls + # Warn if anything is declared more than once in the same scope, + # ? -Wnested-externs + # Warn if an `extern' declaration is encountered within an function. + # -Wlong-long + # Ha. this is the default! with -pedantic. + # -Wno-long-long for the nicest bit of C99 + 2.7 => "", + 2.8 => "", + 2.95 => "", + 3.0 => "-Wformat-nonliteral -Wformat-security -Wpacked -Wpadded +-Wdisabled-optimization", + # -Wsequence-point is part of -Wall + # -Wfloat-equal may not be what we want + # We shouldn't be using __packed__, but I doubt -Wpacked will harm us + # -Wpadded may prove interesting, or even noisy. + # -Wunreachable-code might be useful in a non debugging version + ); + while (my ($vers, $opt) = splice @opt_and_vers, 0, 2) { + last if $vers > $c{gccversion}; + next unless $opt; # Ignore blank lines + $c{cc_warn} .= " $opt"; + } + prompt("What gcc warning flags do you want to use?", 'cc_warn'); +} # # Copy the appropriate platform-specific file over
/* * test_gnuc.c - figure out if the compiler is gcc. */ #include <stdio.h> int main(int argc, char **argv) { puts("("); #ifdef __GNUC__ printf ("__GNUC__ => %d,\n", __GNUC__); #ifdef __GNUC_MINOR__ printf ("__GNUC_MINOR__ =>%d,\n", __GNUC_MINOR__); #endif #else puts ("__GNUC__ => undef,"); #endif puts(");"); return 0; }