}
}
+# Save away perl command information
+$config{perl_cmd} = $^X;
+$config{perl_version} = $Config{version};
+$config{perl_archname} = $Config{archname};
+
$config{prefix}="";
$config{openssldir}="";
$config{processor}="";
$config{libdir}="";
-$config{cross_compile_prefix}="";
my $auto_threads=1; # enable threads automatically? true by default
my $default_ranlib;
"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",
CPPFLAGS => [], # -D, -I, -Wp,
CPPDEFINES => [], # Alternative for -D
CPPINCLUDES => [], # Alternative for -I
+ CROSS_COMPILE => undef,
HASHBANGPERL=> undef,
LD => undef,
LDFLAGS => [], # -L, -Wl,
RCFLAGS => [],
RM => undef,
);
+# Info about what "make variables" may be prefixed with the cross compiler
+# prefix. This should NEVER mention any such variable with a list for value.
+my @user_crossable = qw ( AR AS CC CXX CPP LD MT RANLIB RC );
# The same but for flags given as Configure options. These are *additional*
# input, as opposed to the VAR=string option that override the corresponding
# config target attributes
# If not given here, the value is the lc of the key
CPPDEFINES => 'defines',
CPPINCLUDES => 'includes',
+ CROSS_COMPILE => 'cross_compile_prefix',
LDFLAGS => 'lflags',
LDLIBS => 'ex_libs',
);
}
elsif (/^--cross-compile-prefix=(.*)$/)
{
- $config{cross_compile_prefix}=$1;
+ $user{CROSS_COMPILE}=$1;
}
elsif (/^--config=(.*)$/)
{
"***** any of asan, msan or ubsan\n";
}
-if (scalar(@seed_sources) == 0) {
- print "Using implicit seed configuration\n";
- push @seed_sources, 'os';
-}
-die "Cannot seed with none and anything else"
- if scalar(grep { $_ eq 'none' } @seed_sources) > 0
- && scalar(@seed_sources) > 1;
-push @{$config{openssl_other_defines}},
- map { (my $x = $_) =~ tr|[\-a-z]|[_A-Z]|; "OPENSSL_RAND_SEED_$x" }
- @seed_sources;
-
my @tocheckfor = (keys %disabled);
while (@tocheckfor) {
my %new_tocheckfor = ();
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";
+if (scalar(@seed_sources) == 0) {
+ print "Using os-specific seed configuration\n";
+ push @seed_sources, 'os';
+}
+die "Cannot seed with none and anything else"
+ if scalar(grep { $_ eq 'none' } @seed_sources) > 0
+ && scalar(@seed_sources) > 1;
+push @{$config{openssl_other_defines}},
+ map { (my $x = $_) =~ tr|[\-a-z]|[_A-Z]|; "OPENSSL_RAND_SEED_$x" }
+ @seed_sources;
+
# Backward compatibility?
if ($target =~ m/^CygWin32(-.*)$/) {
$target = "Cygwin".$1;
($target{shared_import_extension}=$target{shared_extension_simple}.".a")
if ($config{target} =~ /^(?:Cygwin|mingw)/);
-
-$config{cross_compile_prefix} = env('CROSS_COMPILE')
- if $config{cross_compile_prefix} eq "";
-
# Allow overriding the names of some tools. USE WITH CARE
# Note: only Unix cares about HASHBANGPERL... that explains
# the default string.
$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";
-# ALL USE OF %useradd MUST BE DONE FROM HERE ON
-%useradd = undef;
-
my %disabled_info = (); # For configdata.pm
foreach my $what (sort keys %disabled) {
$config{options} .= " no-$what";
}
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
if ($target{ec_asm_src} =~ /ecp_nistz256/) {
push @{$config{defines}}, "ECP_NISTZ256_ASM";
}
+ if ($target{ec_asm_src} =~ /x25519/) {
+ push @{$config{defines}}, "X25519_ASM";
+ }
if ($target{padlock_asm_src} ne $table{DEFAULTS}->{padlock_asm_src}) {
push @{$config{defines}}, "PADLOCK_ASM";
}
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
# If it isn't in the source tree, we assume it's generated
# in the build tree
- if (! -f $s) {
+ if (! -f $s || $generate{$_}) {
$s = cleanfile($buildd, $_, $blddir);
}
# We recognise C++, C and asm files
# If it isn't in the source tree, we assume it's generated
# in the build tree
- if (! -f $s) {
+ if (! -f $s || $generate{$_}) {
$s = cleanfile($buildd, $_, $blddir);
}
EOF
}
+print OUT
+ "# The following data is only used when this files is use as a script\n";
print OUT "my \%makevars = (\n";
foreach (sort keys %user) {
print OUT ' ',$_,' ' x (20 - length $_),'=> ',
print OUT " },\n";
}
print OUT ");\n";
+print OUT 'my @user_crossable = qw( ', join (' ', @user_crossable), " );\n";
print OUT << 'EOF';
# If run directly, we can give some answers, and even reconfigure
unless (caller) {
my $dump = undef;
my $cmdline = undef;
my $options = undef;
+ my $target = undef;
my $envvars = undef;
my $makevars = undef;
my $buildparams = 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 || $options || $envvars || $makevars
+ unless ($dump || $cmdline || $options || $target || $envvars || $makevars
|| $buildparams || $reconf || $verbose || $help || $man) {
print STDERR <<"_____";
You must give at least one option.
-verbose => 2);
}
if ($dump || $cmdline) {
- print "\n(with current working directory = $here)";
- print "\nCommand line:\n\n";
+ print "\nCommand line (with current working directory = $here):\n\n";
print ' ',join(' ',
$config{perl},
catfile($config{sourcedir}, 'Configure'),
@{$config{perlargv}}), "\n";
+ print "\nPerl information:\n\n";
+ print ' ',$config{perl_cmd},"\n";
+ print ' ',$config{perl_version},' for ',$config{perl_archname},"\n";
}
if ($dump || $options) {
my $longest = 0;
+ my $longest2 = 0;
foreach my $what (@disablables) {
$longest = length($what) if $longest < length($what);
+ $longest2 = length($disabled{$what})
+ if $disabled{$what} && $longest2 < length($disabled{$what});
}
print "\nEnabled features:\n\n";
foreach my $what (@disablables) {
foreach my $what (@disablables) {
if ($disabled{$what}) {
print " $what", ' ' x ($longest - length($what) + 1),
- "[$disabled{$what}]", ' ' x (10 - length($disabled{$what}));
+ "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1);
print $disabled_info{$what}->{macro}
if $disabled_info{$what}->{macro};
print ' (skip ',
}
}
}
+ 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}}) {
}
if ($dump || $makevars) {
print "\nMakevars:\n\n";
- foreach (sort keys %makevars) {
- print ' ',$_,' ' x (16 - length $_),'= ',
- (ref $config{$makevars{$_}} eq 'ARRAY'
- ? join(' ', @{$config{$makevars{$_}}})
- : $config{$makevars{$_}}),
+ foreach my $var (sort keys %makevars) {
+ my $prefix = '';
+ $prefix = $config{cross_compile_prefix}
+ if grep { $var eq $_ } @user_crossable;
+ $prefix //= '';
+ print ' ',$var,' ' x (16 - length $var),'= ',
+ (ref $config{$makevars{$var}} eq 'ARRAY'
+ ? join(' ', @{$config{$makevars{$var}}})
+ : $prefix.$config{$makevars{$var}}),
"\n"
- if defined $config{$makevars{$_}};
+ if defined $config{$makevars{$var}};
}
my @buildfile = ($config{builddir}, $config{build_file});
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<--options> 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 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
configuration.
EOF
+print <<"EOF";
+
+**********************************************************************
+*** ***
+*** If you want to report a building issue, please include the ***
+*** output from this command: ***
+*** ***
+*** perl configdata.pm --dump ***
+*** ***
+**********************************************************************
+EOF
+
exit(0);
######################################################################