X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=Configure;h=b00b91ac63f59c16b2f8215e9d1a3387c8766ea4;hb=98624776c4d501c8badd6f772ab7048ac9191cb9;hp=a44949659897d0904e7c952cf8697670a9e58b78;hpb=afa0a13c1a61e075eb5949bf370f7b0c58d3b8e2;p=openssl.git diff --git a/Configure b/Configure index a449496598..b00b91ac63 100755 --- a/Configure +++ b/Configure @@ -29,6 +29,24 @@ $SIG{__DIE__} = \&death_handler; my $usage="Usage: Configure [no- ...] [enable- ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-egd] [sctp] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--config=FILE] os/compiler[:flags]\n"; +my $banner = <<"EOF"; + +********************************************************************** +*** *** +*** OpenSSL has been successfully configured *** +*** *** +*** If you encounter a problem while building, please open an *** +*** issue on GitHub *** +*** and include the output from the following command: *** +*** *** +*** perl configdata.pm --dump *** +*** *** +*** (If you are new to OpenSSL, you might want to consult the *** +*** 'Troubleshooting' section in the INSTALL.md file first) *** +*** *** +********************************************************************** +EOF + # Options: # # --config add the given configuration file, which will be read after @@ -43,6 +61,9 @@ my $usage="Usage: Configure [no- ...] [enable- ...] [-Dxxx] [-lx # given with --prefix. # This becomes the value of OPENSSLDIR in Makefile and in C. # (Default: PREFIX/ssl) +# --banner=".." Output specified text instead of default completion banner +# +# -w Don't wait after showing a Configure warning # # --cross-compile-prefix Add specified prefix to binutils components. # @@ -117,7 +138,6 @@ my $usage="Usage: Configure [no- ...] [enable- ...] [-Dxxx] [-lx # get past these. Note that we only use these with C compilers, not with # C++ compilers. -# DEBUG_UNUSED enables __owur (warn unused result) checks. # -DPEDANTIC complements -pedantic and is meant to mask code that # is not strictly standard-compliant and/or implementation-specific, # e.g. inline assembly, disregards to alignment requirements, such @@ -131,9 +151,9 @@ my $usage="Usage: Configure [no- ...] [enable- ...] [-Dxxx] [-lx # but 'long long' type. my @gcc_devteam_warn = qw( - -DDEBUG_UNUSED - -DPEDANTIC -pedantic -Wno-long-long + -DPEDANTIC -pedantic -Wno-long-long -DUNUSEDRESULT_DEBUG -Wall + -Wmissing-declarations -Wextra -Wno-unused-parameter -Wno-missing-field-initializers @@ -379,7 +399,7 @@ my @dtls = qw(dtls1 dtls1_2); # For developers: keep it sorted alphabetically my @disablables = ( - "acvp_tests", + "acvp-tests", "afalgeng", "aria", "asan", @@ -430,6 +450,7 @@ my @disablables = ( "idea", "ktls", "legacy", + "loadereng", "makedepend", "md2", "md4", @@ -512,6 +533,7 @@ my %deprecated_disablables = ( # All of the following are disabled by default: our %disabled = ( # "what" => "comment" + "fips" => "default", "asan" => "default", "buildtest-c++" => "default", "crypto-mdebug" => "default", @@ -527,7 +549,6 @@ our %disabled = ( # "what" => "comment" "msan" => "default", "rc5" => "default", "sctp" => "default", - "ssl-trace" => "default", "ssl3" => "default", "ssl3-method" => "default", "trace" => "default", @@ -554,7 +575,7 @@ my @disable_cascades = ( "rc2", "rc4", "rmd160", "seed", "siphash", "siv", "sm3", "sm4", "srp", - "srtp", "ssl3-method", + "srtp", "ssl3-method", "ssl-trace", "ts", "ui-console", "whirlpool", "fips-securitychecks" ], sub { $config{processor} eq "386" } @@ -598,6 +619,7 @@ my @disable_cascades = ( "module" => [ "fips", "dso" ], "engine" => [ "dynamic-engine", grep(/eng$/, @disablables) ], + "dynamic-engine" => [ "loadereng" ], "hw" => [ "padlockeng" ], # no-autoalginit is only useful when building non-shared @@ -617,7 +639,7 @@ my @disable_cascades = ( "cmp" => [ "crmf" ], - "fips" => [ "fips-securitychecks" ], + "fips" => [ "fips-securitychecks", "acvp-tests" ], "deprecated-3.0" => [ "engine", "srp" ] ); @@ -778,6 +800,7 @@ while (@argvcopy) s /^threads$/enable-threads/; s /^zlib$/enable-zlib/; s /^zlib-dynamic$/enable-zlib-dynamic/; + s /^fips$/enable-fips/; if (/^(no|disable|enable)-(.+)$/) { @@ -877,7 +900,7 @@ while (@argvcopy) { $guess_opts{verbose} = 1; } - elsif (/^-w$/) # From older 'config' + elsif (/^-w$/) { $guess_opts{nowait} = 1; } @@ -902,20 +925,12 @@ while (@argvcopy) } elsif (/^386$/) { $config{processor}=386; } - elsif (/^fips$/) - { - die "FIPS mode not supported\n"; - } elsif (/^rsaref$/) { # No RSAref support any more since it's not needed. # The check for the option is there so scripts aren't # broken } - elsif (/^nofipscanistercheck$/) - { - die "FIPS mode not supported\n"; - } elsif (m|^[-+/]|) { if (/^--prefix=(.*)$/) @@ -974,6 +989,10 @@ while (@argvcopy) die "FIPS key too long (64 bytes max)\n" if length $1 > 64; } + elsif (/^--banner=(.*)$/) + { + $banner = $1 . "\n"; + } elsif (/^--cross-compile-prefix=(.*)$/) { $user{CROSS_COMPILE}=$1; @@ -1361,6 +1380,10 @@ foreach (keys %useradd) { # At this point, we can forget everything about %user and %useradd, # because it's now all been merged into the corresponding $config entry +if (grep { $_ =~ /(?:^|\s)-static(?:\s|$)/ } @{$config{LDFLAGS}}) { + disable('static', 'pic', 'threads'); +} + # Allow overriding the build file name $config{build_file} = env('BUILDFILE') || $target{build_file} || "Makefile"; @@ -1649,10 +1672,6 @@ if ($strict_warnings) } } -if (grep { $_ =~ /(?:^|\s)-static(?:\s|$)/ } @{$config{LDFLAGS}}) { - disable('static', 'pic', 'threads'); -} - $config{CFLAGS} = [ map { $_ eq '--ossl-strict-warnings' ? @strict_warnings_collection : ( $_ ) } @@ -1893,9 +1912,7 @@ if ($builder eq "unified") { $config{build_file_templates} = [ cleanfile($srcdir, catfile("Configurations", "common0.tmpl"), $blddir), - $build_file_template, - cleanfile($srcdir, catfile("Configurations", "common.tmpl"), - $blddir) ]; + $build_file_template ]; my @build_dirs = ( [ ] ); # current directory @@ -1940,6 +1957,7 @@ if ($builder eq "unified") { my %defines = (); my %depends = (); my %generate = (); + my %imagedocs = (); my %htmldocs = (); my %mandocs = (); @@ -2092,7 +2110,7 @@ if ($builder eq "unified") { my $index_re = qr/\[\s*(?P(?:\\.|.)*?)\s*\]/; my $cond_re = qr/\[\s*(?P(?:\\.|.)*?)\s*\]/; my $attribs_re = qr/(?:\{\s*(?P(?:\\.|.)*?)\s*\})?/; - my $value_re = qr/\s*(?P.*?)\s*/; + my $value_re = qr/(?P.*?)/; collect_information( collect_from_array([ @text ], qr/\\$/ => sub { my $l1 = shift; my $l2 = shift; @@ -2119,13 +2137,13 @@ if ($builder eq "unified") { qr/^\s* ENDIF \s*$/x => sub { die "ENDIF out of scope" if ! @skip; pop @skip; }, - qr/^\s* ${variable_re} \s* = ${value_re} $/x + qr/^\s* ${variable_re} \s* = \s* ${value_re} \s* $/x => sub { if (!@skip || $skip[$#skip] > 0) { $variables{$+{VARIABLE}} = $expand_variables->($+{VALUE}); } }, - qr/^\s* SUBDIRS \s* = ${value_re} $/x + qr/^\s* SUBDIRS \s* = \s* ${value_re} \s* $/x => sub { if (!@skip || $skip[$#skip] > 0) { foreach (tokenize($expand_variables->($+{VALUE}))) { @@ -2133,64 +2151,69 @@ if ($builder eq "unified") { } } }, - qr/^\s* PROGRAMS ${attribs_re} \s* = ${value_re} $/x + qr/^\s* PROGRAMS ${attribs_re} \s* = \s* ${value_re} \s* $/x => sub { $push_to->(\@programs, undef, \$attributes{programs}, $+{ATTRIBS}, tokenize($expand_variables->($+{VALUE}))) if !@skip || $skip[$#skip] > 0; }, - qr/^\s* LIBS ${attribs_re} \s* = ${value_re} $/x + qr/^\s* LIBS ${attribs_re} \s* = \s* ${value_re} \s* $/x => sub { $push_to->(\@libraries, undef, \$attributes{libraries}, $+{ATTRIBS}, tokenize($expand_variables->($+{VALUE}))) if !@skip || $skip[$#skip] > 0; }, - qr/^\s* MODULES ${attribs_re} \s* = ${value_re} $/x + qr/^\s* MODULES ${attribs_re} \s* = \s* ${value_re} \s* $/x => sub { $push_to->(\@modules, undef, \$attributes{modules}, $+{ATTRIBS}, tokenize($expand_variables->($+{VALUE}))) if !@skip || $skip[$#skip] > 0; }, - qr/^\s* SCRIPTS ${attribs_re} \s* = ${value_re} $/x + qr/^\s* SCRIPTS ${attribs_re} \s* = \s* ${value_re} \s* $/x => sub { $push_to->(\@scripts, undef, \$attributes{scripts}, $+{ATTRIBS}, tokenize($expand_variables->($+{VALUE}))) if !@skip || $skip[$#skip] > 0; }, - qr/^\s* HTMLDOCS ${index_re} = ${value_re} $/x + qr/^\s* IMAGEDOCS ${index_re} \s* = \s* ${value_re} \s* $/x + => sub { $push_to->(\%imagedocs, $expand_variables->($+{INDEX}), + undef, undef, + tokenize($expand_variables->($+{VALUE}))) + if !@skip || $skip[$#skip] > 0; }, + qr/^\s* HTMLDOCS ${index_re} \s* = \s* ${value_re} \s* $/x => sub { $push_to->(\%htmldocs, $expand_variables->($+{INDEX}), undef, undef, tokenize($expand_variables->($+{VALUE}))) if !@skip || $skip[$#skip] > 0; }, - qr/^\s* MANDOCS ${index_re} = ${value_re} $/x + qr/^\s* MANDOCS ${index_re} \s* = \s* ${value_re} \s* $/x => sub { $push_to->(\%mandocs, $expand_variables->($+{INDEX}), undef, undef, tokenize($expand_variables->($+{VALUE}))) if !@skip || $skip[$#skip] > 0; }, - qr/^\s* SOURCE ${index_re} = ${value_re} $/x + qr/^\s* SOURCE ${index_re} ${attribs_re} \s* = \s* ${value_re} \s* $/x => sub { $push_to->(\%sources, $expand_variables->($+{INDEX}), - undef, undef, + \$attributes{sources}, $+{ATTRIBS}, tokenize($expand_variables->($+{VALUE}))) if !@skip || $skip[$#skip] > 0; }, - qr/^\s* SHARED_SOURCE ${index_re} = ${value_re} $/x + qr/^\s* SHARED_SOURCE ${index_re} ${attribs_re} \s* = \s* ${value_re} \s* $/x => sub { $push_to->(\%shared_sources, $expand_variables->($+{INDEX}), - undef, undef, + \$attributes{sources}, $+{ATTRIBS}, tokenize($expand_variables->($+{VALUE}))) if !@skip || $skip[$#skip] > 0; }, - qr/^\s* INCLUDE ${index_re} = ${value_re} $/x + qr/^\s* INCLUDE ${index_re} \s* = \s* ${value_re} \s* $/x => sub { $push_to->(\%includes, $expand_variables->($+{INDEX}), undef, undef, tokenize($expand_variables->($+{VALUE}))) if !@skip || $skip[$#skip] > 0; }, - qr/^\s* DEFINE ${index_re} = ${value_re} $/x + qr/^\s* DEFINE ${index_re} \s* = \s* ${value_re} \s* $/x => sub { $push_to->(\%defines, $expand_variables->($+{INDEX}), undef, undef, tokenize($expand_variables->($+{VALUE}))) if !@skip || $skip[$#skip] > 0; }, - qr/^\s* DEPEND ${index_re} ${attribs_re} = ${value_re} $/x + qr/^\s* DEPEND ${index_re} ${attribs_re} \s* = \s* ${value_re} \s* $/x => sub { $push_to->(\%depends, $expand_variables->($+{INDEX}), \$attributes{depends}, $+{ATTRIBS}, tokenize($expand_variables->($+{VALUE}))) if !@skip || $skip[$#skip] > 0; }, - qr/^\s* GENERATE ${index_re} = ${value_re} $/x + qr/^\s* GENERATE ${index_re} \s* = \s* ${value_re} \s* $/x => sub { $push_to->(\%generate, $expand_variables->($+{INDEX}), - undef, undef, $+{VALUE}) + undef, undef, $expand_variables->($+{VALUE})) if !@skip || $skip[$#skip] > 0; }, qr/^\s* (?:\#.*)? $/x => sub { }, "OTHERWISE" => sub { die "Something wrong with this line:\n$_\nat $sourced/$f" }, @@ -2256,10 +2279,10 @@ EOF if ($s eq $src_configdata || $generate{$_} || ! -f $s) { $s = cleanfile($buildd, $_, $blddir); } + my $o = $_; # We recognise C++, C and asm files if ($s =~ /\.(cc|cpp|c|s|S)$/) { push @{$check_exist{$s}}, $ddest; - my $o = $_; $o =~ s/\.[csS]$/.o/; # C and assembler $o =~ s/\.(cc|cpp)$/_cc.o/; # C++ $o = cleanfile($buildd, $o, $blddir); @@ -2268,7 +2291,6 @@ EOF } elsif ($s =~ /\.rc$/) { # We also recognise resource files push @{$check_exist{$s}}, $ddest; - my $o = $_; $o =~ s/\.rc$/.res/; # Resource configuration $o = cleanfile($buildd, $o, $blddir); $unified_info{sources}->{$ddest}->{$o} = -1; @@ -2277,6 +2299,17 @@ EOF push @{$check_exist{$s}}, $ddest; $unified_info{sources}->{$ddest}->{$s} = 1; } + # Fix up associated attributes + if ($o ne $_) { + $unified_info{attributes}->{sources}->{$ddest}->{$o} = + $unified_info{attributes}->{sources}->{$o}->{$s} = + $attributes{sources}->{$dest}->{$_} + if defined $attributes{sources}->{$dest}->{$_}; + } else { + $unified_info{attributes}->{sources}->{$ddest}->{$s} = + $attributes{sources}->{$dest}->{$_} + if defined $attributes{sources}->{$dest}->{$_}; + } } } @@ -2292,10 +2325,10 @@ EOF $s = cleanfile($buildd, $_, $blddir); } + my $o = $_; if ($s =~ /\.(cc|cpp|c|s|S)$/) { # We recognise C++, C and asm files push @{$check_exist{$s}}, $ddest; - my $o = $_; $o =~ s/\.[csS]$/.o/; # C and assembler $o =~ s/\.(cc|cpp)$/_cc.o/; # C++ $o = cleanfile($buildd, $o, $blddir); @@ -2304,7 +2337,6 @@ EOF } elsif ($s =~ /\.rc$/) { # We also recognise resource files push @{$check_exist{$s}}, $ddest; - my $o = $_; $o =~ s/\.rc$/.res/; # Resource configuration $o = cleanfile($buildd, $o, $blddir); $unified_info{shared_sources}->{$ddest}->{$o} = -1; @@ -2313,11 +2345,22 @@ EOF # We also recognise linker scripts (or corresponding) # We know they are generated files push @{$check_exist{$s}}, $ddest; - my $ld = cleanfile($buildd, $_, $blddir); - $unified_info{shared_sources}->{$ddest}->{$ld} = 1; + $o = cleanfile($buildd, $_, $blddir); + $unified_info{shared_sources}->{$ddest}->{$o} = 1; } else { die "unrecognised source file type for shared library: $s\n"; } + # Fix up associated attributes + if ($o ne $_) { + $unified_info{attributes}->{shared_sources}->{$ddest}->{$o} = + $unified_info{attributes}->{sources}->{$o}->{$s} = + $attributes{sources}->{$dest}->{$_} + if defined $attributes{sources}->{$dest}->{$_}; + } else { + $unified_info{attributes}->{shared_sources}->{$ddest}->{$o} = + $attributes{sources}->{$dest}->{$_} + if defined $attributes{sources}->{$dest}->{$_}; + } } } @@ -2427,6 +2470,13 @@ EOF } } + foreach my $section (keys %imagedocs) { + foreach (@{$imagedocs{$section}}) { + my $imagedocs = cleanfile($buildd, $_, $blddir); + $unified_info{imagedocs}->{$section}->{$imagedocs} = 1; + } + } + foreach my $section (keys %htmldocs) { foreach (@{$htmldocs{$section}}) { my $htmldocs = cleanfile($buildd, $_, $blddir); @@ -2621,6 +2671,19 @@ EOF $unified_info{$dst}->{$prod}->{$newobj} = 1; foreach my $src (@{$prod_sources{$_}}) { $unified_info{sources}->{$newobj}->{$src} = 1; + # Adjust source attributes + my $attrs = $unified_info{attributes}->{sources}; + if (defined $attrs->{$prod} + && defined $attrs->{$prod}->{$_}) { + $attrs->{$prod}->{$newobj} = + $attrs->{$prod}->{$_}; + delete $attrs->{$prod}->{$_}; + } + foreach my $objsrc (keys %{$attrs->{$_} // {}}) { + $attrs->{$newobj}->{$objsrc} = + $attrs->{$_}->{$objsrc}; + delete $attrs->{$_}->{$objsrc}; + } } # Adjust dependencies foreach my $deps (keys %{$unified_info{depends}->{$_}}) { @@ -2655,7 +2718,7 @@ EOF } # Two level structures foreach my $l1 (("sources", "shared_sources", "ldadd", "depends", - "htmldocs", "mandocs")) { + "imagedocs", "htmldocs", "mandocs")) { foreach my $l2 (sort keys %{$unified_info{$l1}}) { my @items = sort @@ -2702,7 +2765,9 @@ EOF "dso" => [ @{$unified_info{modules}} ], "bin" => [ @{$unified_info{programs}} ], "script" => [ @{$unified_info{scripts}} ], - "docs" => [ (map { @{$unified_info{htmldocs}->{$_} // []} } + "docs" => [ (map { @{$unified_info{imagedocs}->{$_} // []} } + keys %{$unified_info{imagedocs} // {}}), + (map { @{$unified_info{htmldocs}->{$_} // []} } keys %{$unified_info{htmldocs} // {}}), (map { @{$unified_info{mandocs}->{$_} // []} } keys %{$unified_info{mandocs} // {}}) ] ); @@ -2764,7 +2829,7 @@ my %template_vars = ( my $configdata_outname = 'configdata.pm'; print "Creating $configdata_outname\n"; open CONFIGDATA, ">$configdata_outname.new" - or die "Trying to create $configdata_outname.new: $!"; + or die "Trying to create $configdata_outname.new: $!"; my $configdata_tmplname = cleanfile($srcdir, "configdata.pm.in", $blddir); my $configdata_tmpl = OpenSSL::Template->new(TYPE => 'FILE', SOURCE => $configdata_tmplname); @@ -2810,23 +2875,7 @@ or position independent code, please let us know (but please first make sure you have tried with a current version of OpenSSL). EOF -print <<"EOF"; - -********************************************************************** -*** *** -*** OpenSSL has been successfully configured *** -*** *** -*** If you encounter a problem while building, please open an *** -*** issue on GitHub *** -*** and include the output from the following command: *** -*** *** -*** perl configdata.pm --dump *** -*** *** -*** (If you are new to OpenSSL, you might want to consult the *** -*** 'Troubleshooting' section in the INSTALL.md file first) *** -*** *** -********************************************************************** -EOF +print $banner; exit(0);