# 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
# -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.
"autoload-config",
"bf",
"blake2",
+ "buildtest-c++",
"camellia",
"capieng",
"cast",
"fuzz-afl",
"gost",
"heartbeats",
- "hw(-.+)?",
"idea",
"makedepend",
"md2",
"pinshared",
"ocb",
"ocsp",
+ "padlockeng",
"pic",
"poly1305",
"posix-io",
"tests",
"threads",
"tls",
+ "trace",
"ts",
"ubsan",
"ui-console",
my %deprecated_disablables = (
"ssl2" => undef,
"buf-freelists" => undef,
+ "hw" => "hw", # causes cascade, but no macro
+ "hw-padlock" => "padlockeng",
"ripemd" => "rmd160",
"ui" => "ui-console",
);
our %disabled = ( # "what" => "comment"
"asan" => "default",
+ "buildtest-c++" => "default",
"crypto-mdebug" => "default",
"crypto-mdebug-backtrace" => "default",
"devcryptoeng" => "default",
# Without position independent code, there can be no shared libraries or DSOs
"pic" => [ "shared" ],
"shared" => [ "dynamic-engine" ],
- "engine" => [ "afalgeng", "devcryptoeng" ],
+
+ "engine" => [ grep /eng$/, @disablables ],
+ "hw" => [ "padlockeng" ],
# no-autoalginit is only useful when building non-shared
"autoalginit" => [ "shared", "apps" ],
AS => undef,
ASFLAGS => [],
CC => env('CC'),
- CFLAGS => [],
+ CFLAGS => [ env('CFLAGS') || () ],
CXX => env('CXX'),
- CXXFLAGS => [],
+ CXXFLAGS => [ env('CXXFLAGS') || () ],
CPP => undef,
- CPPFLAGS => [], # -D, -I, -Wp,
+ CPPFLAGS => [ env('CPPFLAGS') || () ], # -D, -I, -Wp,
CPPDEFINES => [], # Alternative for -D
CPPINCLUDES => [], # Alternative for -I
CROSS_COMPILE => env('CROSS_COMPILE'),
HASHBANGPERL=> env('HASHBANGPERL') || env('PERL'),
LD => undef,
- LDFLAGS => [], # -L, -Wl,
- LDLIBS => [], # -l
+ LDFLAGS => [ env('LDFLAGS') || () ], # -L, -Wl,
+ LDLIBS => [ env('LDLIBS') || () ], # -l
MT => undef,
MTFLAGS => [],
PERL => env('PERL') || ($^O ne "VMS" ? $^X : "perl"),
if (/^(no|disable|enable)-(.+)$/)
{
my $word = $2;
- if (!exists $deprecated_disablables{$word}
- && !grep { $word =~ /^${_}$/ } @disablables)
+ if ($word !~ m|hw(?:-.+)| # special treatment for hw regexp opt
+ && !exists $deprecated_disablables{$word}
+ && !grep { $word eq $_ } @disablables)
{
$unsupported_options{$_} = 1;
next;
$disabled{$deprecated_disablables{$1}} = "option";
}
}
+ elsif ($1 =~ m|hw(?:-.+)|) # deprecate hw options in regexp form
+ {
+ $deprecated_options{$_} = 1;
+ }
else
{
$disabled{$1} = "option";
my %skipdir = ();
my %disabled_info = (); # For configdata.pm
foreach my $what (sort keys %disabled) {
+ # There are deprecated disablables that translate to themselves.
+ # They cause disabling cascades, but should otherwise not regiter.
+ next if $deprecated_disablables{$what};
+
$config{options} .= " no-$what";
- if (!grep { $what eq $_ } ( 'dso', 'threads', 'shared', 'pic',
- 'dynamic-engine', 'makedepend',
+ if (!grep { $what eq $_ } ( 'buildtest-c++', 'dso', 'threads', 'shared',
+ 'pic', 'dynamic-engine', 'makedepend',
'zlib-dynamic', 'zlib', 'sse2' )) {
(my $WHAT = uc $what) =~ s|-|_|g;
my $skipdir = $what;
}
}
-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}) {
# 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)
}
}
-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
"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"})