From e373c70a3e535b560f6b6bade914a724aa975c55 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Tue, 26 Feb 2019 09:32:52 +0100 Subject: [PATCH] Configuration: divide devteam flags into language specific sets Some of the devteam flags are not for C++ Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/8325) --- Configurations/90-team.norelease.conf | 10 ++- Configure | 107 ++++++++++++++++---------- 2 files changed, 72 insertions(+), 45 deletions(-) diff --git a/Configurations/90-team.norelease.conf b/Configurations/90-team.norelease.conf index 7849fdbf64..77dad97753 100644 --- a/Configurations/90-team.norelease.conf +++ b/Configurations/90-team.norelease.conf @@ -18,7 +18,8 @@ my %targets = ( "debug-erbridge" => { inherit_from => [ 'BASE_unix', "x86_64_asm" ], cc => "gcc", - cflags => combine("$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -m64 -DL_ENDIAN -DTERMIO -g", + cflags => combine(join(' ', @{$gcc_devteam_warn{CFLAGS}}), + "-DBN_DEBUG -DCONF_DEBUG -m64 -DL_ENDIAN -DTERMIO -g", threads("-D_REENTRANT")), ex_libs => add(" ","-ldl"), bn_ops => "SIXTY_FOUR_BIT_LONG", @@ -80,7 +81,8 @@ my %targets = ( "debug-test-64-clang" => { inherit_from => [ 'BASE_unix', "x86_64_asm" ], cc => "clang", - cflags => combine("$gcc_devteam_warn -Wno-error=overlength-strings -Wno-error=extended-offsetof -Wno-error=language-extension-token -Wno-error=unused-const-variable -Wstrict-overflow -Qunused-arguments -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe", + cflags => combine(join(' ', @{$gcc_devteam_warn{CFLAGS}}), + "-Wno-error=overlength-strings -Wno-error=extended-offsetof -Wno-error=language-extension-token -Wno-error=unused-const-variable -Wstrict-overflow -Qunused-arguments -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe", threads("${BSDthreads}")), bn_ops => "SIXTY_FOUR_BIT_LONG", thread_scheme => "pthreads", @@ -92,7 +94,9 @@ my %targets = ( "darwin64-debug-test-64-clang" => { inherit_from => [ 'BASE_unix', "x86_64_asm" ], cc => "clang", - cflags => combine("-arch x86_64 -DL_ENDIAN $gcc_devteam_warn -Wno-error=overlength-strings -Wno-error=extended-offsetof -Wno-error=language-extension-token -Wno-error=unused-const-variable -Wstrict-overflow -Qunused-arguments -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe", + cflags => combine("-arch x86_64 -DL_ENDIAN", + join(' ', @{$gcc_devteam_warn{CFLAGS}}), + "-Wno-error=overlength-strings -Wno-error=extended-offsetof -Wno-error=language-extension-token -Wno-error=unused-const-variable -Wstrict-overflow -Qunused-arguments -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe", threads("${BSDthreads}")), sys_id => "MACOSX", bn_ops => "SIXTY_FOUR_BIT_LONG", diff --git a/Configure b/Configure index 2765639a3a..e2f9865f91 100755 --- a/Configure +++ b/Configure @@ -120,22 +120,27 @@ my $usage="Usage: Configure [no- ...] [enable- ...] [-Dxxx] [-lx # code, so we just tell compiler to be pedantic about everything # but 'long long' type. -my $gcc_devteam_warn = "-DDEBUG_UNUSED" - . " -DPEDANTIC -pedantic -Wno-long-long" - . " -Wall" - . " -Wextra" - . " -Wno-unused-parameter" - . " -Wno-missing-field-initializers" - . " -Wswitch" - . " -Wsign-compare" - . " -Wmissing-prototypes" - . " -Wstrict-prototypes" - . " -Wshadow" - . " -Wformat" - . " -Wtype-limits" - . " -Wundef" - . " -Werror" - ; +my %gcc_devteam_warn = (); +{ + my @common = qw( -DDEBUG_UNUSED + -DPEDANTIC -pedantic -Wno-long-long + -Wall + -Wextra + -Wno-unused-parameter + -Wno-missing-field-initializers + -Wswitch + -Wsign-compare + -Wshadow + -Wformat + -Wtype-limits + -Wundef + -Werror ); + %gcc_devteam_warn = ( + CFLAGS => [ @common, qw( -Wmissing-prototypes + -Wstrict-prototypes ) ], + CXXFLAGS => [ @common ] + ); +} # These are used in addition to $gcc_devteam_warn when the compiler is clang. # TODO(openssl-team): fix problems and investigate if (at least) the @@ -145,16 +150,20 @@ my $gcc_devteam_warn = "-DDEBUG_UNUSED" # -Wlanguage-extension-token -- no, we use asm() # -Wunused-macros -- no, too tricky for BN and _XOPEN_SOURCE etc # -Wextended-offsetof -- no, needed in CMS ASN1 code -my $clang_devteam_warn = "" - . " -Wswitch-default" - . " -Wno-parentheses-equality" - . " -Wno-language-extension-token" - . " -Wno-extended-offsetof" - . " -Wconditional-uninitialized" - . " -Wincompatible-pointer-types-discards-qualifiers" - . " -Wmissing-variable-declarations" - . " -Wno-unknown-warning-option" - ; +my %clang_devteam_warn = (); +{ + my @common = qw( -Wswitch-default + -Wno-parentheses-equality + -Wno-language-extension-token + -Wno-extended-offsetof + -Wconditional-uninitialized + -Wincompatible-pointer-types-discards-qualifiers + -Wno-unknown-warning-option ); + %clang_devteam_warn = ( + CFLAGS => [ @common, qw( -Wmissing-variable-declarations ) ], + CXXFLAGS => [ @common ] + ); +} # This adds backtrace information to the memory leak info. Is only used # when crypto-mdebug-backtrace is enabled. @@ -1422,7 +1431,10 @@ unless ($disabled{asm}) { } } -my %predefined = compiler_predefined($config{CROSS_COMPILE}.$config{CC}); +my %predefined_C = compiler_predefined($config{CROSS_COMPILE}.$config{CC}); +my %predefined_CXX = $config{CXX} + ? compiler_predefined($config{CROSS_COMPILE}.$config{CXX}) + : (); # Check for makedepend capabilities. if (!$disabled{makedepend}) { @@ -1430,8 +1442,8 @@ if (!$disabled{makedepend}) { # For VC- and vms- targets, there's nothing more to do here. The # functionality is hard coded in the corresponding build files for # cl (Windows) and CC/DECC (VMS). - } elsif (($predefined{__GNUC__} // -1) >= 3 - && !($predefined{__APPLE_CC__} && !$predefined{__clang__})) { + } elsif (($predefined_C{__GNUC__} // -1) >= 3 + && !($predefined_C{__APPLE_CC__} && !$predefined_C{__clang__})) { # We know that GNU C version 3 and up as well as all clang # versions support dependency generation, but Xcode did not # handle $cc -M before clang support (but claims __GNUC__ = 3) @@ -1444,9 +1456,9 @@ if (!$disabled{makedepend}) { } } -if (!$disabled{asm} && !$predefined{__MACH__} && $^O ne 'VMS') { +if (!$disabled{asm} && !$predefined_C{__MACH__} && $^O ne 'VMS') { # probe for -Wa,--noexecstack option... - if ($predefined{__clang__}) { + if ($predefined_C{__clang__}) { # clang has builtin assembler, which doesn't recognize --help, # but it apparently recognizes the option in question on all # supported platforms even when it's meaningless. In other words @@ -1504,24 +1516,35 @@ $config{openssl_api_defines} = [ "OPENSSL_MIN_API=".($apitable->{$config{api} // ""} // -1) ]; -my @strict_warnings_collection=(); +my %strict_warnings_collection=( CFLAGS => [], CXXFLAGS => []); if ($strict_warnings) { my $wopt; - my $gccver = $predefined{__GNUC__} // -1; + my $gccver = $predefined_C{__GNUC__} // -1; + my $gxxver = $predefined_CXX{__GNUC__} // -1; - die "ERROR --strict-warnings requires gcc[>=4] or gcc-alike" + warn "WARNING --strict-warnings requires gcc[>=4] or gcc-alike" unless $gccver >= 4; - push @strict_warnings_collection, (split /\s+/, $gcc_devteam_warn); - push @strict_warnings_collection, (split /\s+/, $clang_devteam_warn) - if (defined($predefined{__clang__})); + warn "WARNING --strict-warnings requires g++[>=4] or g++-alike" + unless $gxxver >= 4; + foreach (qw(CFLAGS CXXFLAGS)) + { + push @{$strict_warnings_collection{$_}}, + @{$gcc_devteam_warn{$_}}; + } + push @{$strict_warnings_collection{CFLAGS}}, + @{$clang_devteam_warn{CFLAGS}} + if (defined($predefined_C{__clang__})); + push @{$strict_warnings_collection{CXXFLAGS}}, + @{$clang_devteam_warn{CXXFLAGS}} + if (defined($predefined_CXX{__clang__})); } -foreach (qw(CFLAGS CXXFLAGS)) +foreach my $idx (qw(CFLAGS CXXFLAGS)) { - $useradd{$_} = [ map { $_ eq '--ossl-strict-warnings' - ? @strict_warnings_collection - : ( $_ ) } - @{$useradd{$_}} ]; + $useradd{$idx} = [ map { $_ eq '--ossl-strict-warnings' + ? @{$strict_warnings_collection{$idx}} + : ( $_ ) } + @{$useradd{$idx}} ]; } unless ($disabled{"crypto-mdebug-backtrace"}) -- 2.34.1