"ssl3" => "default",
"ssl3-method" => "default",
"ubsan" => "default",
- #TODO(TLS1.3): Temporarily disabled while this is a WIP
- "tls1_3" => "default",
"tls13downgrade" => "default",
"unit-test" => "default",
"weak-ssl-ciphers" => "default",
exit 0;
}
-print "Configuring OpenSSL version $config{version} ($config{version_num})\n";
+print "Configuring OpenSSL version $config{version} ($config{version_num}) ";
print "for $target\n";
# Backward compatibility?
}
}
-foreach (sort (keys %disabled))
- {
- $config{options} .= " no-$_";
-
- printf " no-%-12s %-10s", $_, "[$disabled{$_}]";
-
- if (/^dso$/)
- { }
- elsif (/^threads$/)
- { }
- elsif (/^shared$/)
- { }
- elsif (/^pic$/)
- { }
- elsif (/^zlib$/)
- { }
- elsif (/^dynamic-engine$/)
- { }
- elsif (/^makedepend$/)
- { }
- elsif (/^zlib-dynamic$/)
- { }
- elsif (/^sse2$/)
- { }
- elsif (/^engine$/)
- {
- @{$config{dirs}} = grep !/^engines$/, @{$config{dirs}};
- @{$config{sdirs}} = grep !/^engine$/, @{$config{sdirs}};
- push @{$config{openssl_other_defines}}, "OPENSSL_NO_ENGINE";
- print " OPENSSL_NO_ENGINE (skip engines)";
- }
- else
- {
- my ($WHAT, $what);
-
- ($WHAT = $what = $_) =~ tr/[\-a-z]/[_A-Z]/;
-
- # Fix up C macro end names
- $WHAT = "RMD160" if $what eq "ripemd";
-
- # fix-up crypto/directory name(s)
- $what = "ripemd" if $what eq "rmd160";
- $what = "whrlpool" if $what eq "whirlpool";
-
- if ($what ne "async" && $what ne "err"
- && grep { $_ eq $what } @{$config{sdirs}})
- {
- push @{$config{openssl_algorithm_defines}}, "OPENSSL_NO_$WHAT";
- @{$config{sdirs}} = grep { $_ ne $what} @{$config{sdirs}};
-
- print " OPENSSL_NO_$WHAT (skip dir)";
- }
- else
- {
- push @{$config{openssl_other_defines}}, "OPENSSL_NO_$WHAT";
- print " OPENSSL_NO_$WHAT";
- }
- }
-
- print "\n";
- }
-
$target{cxxflags}//=$target{cflags} if $target{cxx};
$target{exe_extension}="";
$target{exe_extension}=".exe" if ($config{target} eq "DJGPP"
$config{$target_key} =
$mkvalue->($ref_type, $user{$_})
|| $mkvalue->($ref_type, $target{$target_key});
- if (defined $useradd{$_} && @{$useradd{$_}}) {
- if (defined $config{$target_key}) {
- push @{$config{$target_key}}, @{$useradd{$_}};
- } else {
- $config{$target_key} = [ @{$useradd{$_}} ];
- }
- }
delete $config{$target_key} unless defined $config{$target_key};
}
$config{plib_lflags} = [ $target{plib_lflags} ];
# Allow overriding the build file name
$config{build_file} = env('BUILDFILE') || $target{build_file} || "Makefile";
+my %disabled_info = (); # For configdata.pm
+foreach my $what (sort keys %disabled) {
+ $config{options} .= " no-$what";
+
+ if (!grep { $what eq $_ } ( 'dso', 'threads', 'shared', 'pic',
+ 'dynamic-engine', 'makedepend',
+ 'zlib-dynamic', 'zlib', 'sse2' )) {
+ (my $WHAT = uc $what) =~ s|-|_|g;
+
+ # Fix up C macro end names
+ $WHAT = "RMD160" if $what eq "ripemd";
+
+ # fix-up crypto/directory name(s)
+ $what = "ripemd" if $what eq "rmd160";
+ $what = "whrlpool" if $what eq "whirlpool";
+
+ my $macro = $disabled_info{$what}->{macro} = "OPENSSL_NO_$WHAT";
+
+ if ((grep { $what eq $_ } @{$config{sdirs}})
+ && $what ne 'async' && $what ne 'err') {
+ @{$config{sdirs}} = grep { $what ne $_} @{$config{sdirs}};
+ $disabled_info{$what}->{skipped} = [ catdir('crypto', $what) ];
+
+ if ($what ne 'engine') {
+ push @{$config{openssl_algorithm_defines}}, $macro;
+ } else {
+ @{$config{dirs}} = grep !/^engines$/, @{$config{dirs}};
+ push @{$disabled_info{engine}->{skipped}}, catdir('engines');
+ push @{$config{openssl_other_defines}}, $macro;
+ }
+ } else {
+ push @{$config{openssl_other_defines}}, $macro;
+ }
+
+ }
+}
+
# Make sure build_scheme is consistent.
$target{build_scheme} = [ $target{build_scheme} ]
if ref($target{build_scheme}) ne "ARRAY";
}
if ($target =~ /linux.*-mips/ && !$disabled{asm}
- && !grep { $_ !~ /-m(ips|arch=)/ } @{$user{CFLAGS}}) {
+ && !grep { $_ !~ /-m(ips|arch=)/ } (@{$user{CFLAGS}},
+ @{$useradd{CFLAGS}})) {
# minimally required architecture flags for assembly modules
my $value;
$value = '-mips2' if ($target =~ /mips32/);
# system-dependent compiler options that are necessary. We
# can't truly check that the given options are correct, but
# we expect the user to know what [s]He is doing.
- if (!@{$user{CFLAGS}} && !@{$user{CPPDEFINES}}) {
+ if (!@{$user{CFLAGS}} && !@{$useradd{CFLAGS}}
+ && !@{$user{CPPDEFINES}} && !@{$useradd{CPPDEFINES}}) {
die "You asked for multi-threading support, but didn't\n"
,"provide any system-specific compiler options\n";
}
unless ($disabled{asm}) {
$target{cpuid_asm_src}=$table{DEFAULTS}->{cpuid_asm_src} if ($config{processor} eq "386");
+ push @{$config{defines}}, "OPENSSL_CPUID_OBJ" if ($target{cpuid_asm_src} ne "mem_clr.c");
+
$target{bn_asm_src} =~ s/\w+-gf2m.c// if (defined($disabled{ec2m}));
# bn-586 is the only one implementing bn_*_part_words
push @{$config{openssl_other_defines}}, "OPENSSL_NO_AFALGENG" if ($disabled{afalgeng});
+# Finish up %config by appending things the user gave us on the command line
+# apart from "make variables"
+foreach (keys %useradd) {
+ # The must all be lists, so we assert that here
+ die "internal error: \$useradd{$_} isn't an ARRAY\n"
+ unless ref $useradd{$_} eq 'ARRAY';
+
+ my $target_key = $user_to_target{$_} // lc $_;
+
+ if (defined $config{$target_key}) {
+ push @{$config{$target_key}}, @{$useradd{$_}};
+ } else {
+ $config{$target_key} = [ @{$useradd{$_}} ];
+ }
+}
+
# ALL MODIFICATIONS TO %config and %target MUST BE DONE FROM HERE ON
# If we use the unified build, collect information from build.info files
"'",$user_to_target{$_} || lc $_,"',\n";
}
print OUT ");\n";
+print OUT "my \%disabled_info = (\n";
+foreach my $what (sort keys %disabled_info) {
+ print OUT " '$what' => {\n";
+ foreach my $info (sort keys %{$disabled_info{$what}}) {
+ if (ref $disabled_info{$what}->{$info} eq 'ARRAY') {
+ print OUT " $info => [ ",
+ join(', ', map { "'$_'" } @{$disabled_info{$what}->{$info}}),
+ " ],\n";
+ } else {
+ print OUT " $info => '", $disabled_info{$what}->{$info},
+ "',\n";
+ }
+ }
+ print OUT " },\n";
+}
+print OUT ");\n";
print OUT << 'EOF';
-
# If run directly, we can give some answers, and even reconfigure
unless (caller) {
use Getopt::Long;
my $dump = undef;
my $cmdline = undef;
+ my $options = undef;
+ my $target = undef;
my $envvars = undef;
my $makevars = undef;
my $buildparams = undef;
my $man = undef;
GetOptions('dump|d' => \$dump,
'command-line|c' => \$cmdline,
+ 'options|o' => \$options,
+ 'target|t' => \$target,
'environment|e' => \$envvars,
'make-variables|m' => \$makevars,
'build-parameters|b' => \$buildparams,
'man' => \$man)
or die "Errors in command line arguments\n";
- unless ($dump || $cmdline || $envvars || $makevars || $buildparams
- || $reconf || $verbose || $help || $man) {
+ unless ($dump || $cmdline || $options || $target || $envvars || $makevars
+ || $buildparams || $reconf || $verbose || $help || $man) {
print STDERR <<"_____";
You must give at least one option.
For more information, do '$0 --help'
catfile($config{sourcedir}, 'Configure'),
@{$config{perlargv}}), "\n";
}
+ if ($dump || $options) {
+ my $longest = 0;
+ foreach my $what (@disablables) {
+ $longest = length($what) if $longest < length($what);
+ }
+ print "\nEnabled features:\n\n";
+ foreach my $what (@disablables) {
+ print " $what\n" unless $disabled{$what};
+ }
+ print "\nDisabled features:\n\n";
+ foreach my $what (@disablables) {
+ if ($disabled{$what}) {
+ print " $what", ' ' x ($longest - length($what) + 1),
+ "[$disabled{$what}]", ' ' x (10 - length($disabled{$what}));
+ print $disabled_info{$what}->{macro}
+ if $disabled_info{$what}->{macro};
+ print ' (skip ',
+ join(', ', @{$disabled_info{$what}->{skipped}}),
+ ')'
+ if $disabled_info{$what}->{skipped};
+ print "\n";
+ }
+ }
+ }
+ if ($dump || $target) {
+ print "\nConfig target attributes:\n\n";
+ foreach (sort keys %target) {
+ next if $_ =~ m|^_| || $_ eq 'template';
+ my $quotify = sub {
+ map { (my $x = $_) =~ s|([\\\$\@"])|\\$1|g; "\"$x\""} @_;
+ };
+ print ' ', $_, ' => ';
+ if (ref($target{$_}) eq "ARRAY") {
+ print '[ ', join(', ', $quotify->(@{$target{$_}})), " ],\n";
+ } else {
+ print $quotify->($target{$_}), ",\n"
+ }
+ }
+ }
if ($dump || $envvars) {
print "\nRecorded environment:\n\n";
foreach (sort keys %{$config{perlenv}}) {
Print the manual page and exit.
-=item B<--dump> | B<-c>
+=item B<--dump> | B<-d>
Print all relevant configuration data. This is equivalent to B<--command-line>
-B<--environment> B<--make-variables> B<--build-parameters>.
+B<--options> B<--target> B<--environment> B<--make-variables>
+B<--build-parameters>.
=item B<--command-line> | B<-c>
Print the current configuration command line.
+=item B<--options> | B<-o>
+
+Print the features, both enabled and disabled, and display defined macro and
+skipped directories where applicable.
+
+=item B<--target> | B<-t>
+
+Print the config attributes for this config target.
+
=item B<--environment> | B<-e>
Print the environment variables and their values at the time of configuration.
$builders{$builder}->($builder_platform, @builder_opts);
+# Show a note on the use of configdata.pm, but ONLY for release 1.1.1
+# (i.e. this message disappears with the following update, 1.1.1a)
+print <<"EOF" if ($config{version_num} =~ m|^0x1010100.L$|);
+
+NOTE: Starting with OpenSSL 1.1.1, 'Configure' doesn't display all the disabled
+options or the "make variables" with their values. Instead, you must use
+'configdata.pm' as a script to get a display of the configuration data. For
+help, please do this:
+
+ perl configdata.pm --help
+EOF
print <<"EOF" if ($disabled{threads} eq "unavailable");
The library could not be configured for supporting multi-threaded