diff options
author | Richard Levitte <levitte@openssl.org> | 2018-01-29 06:19:17 +0100 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2018-01-29 21:56:47 +0100 |
commit | b1fafff631e1a10d96a45e4899667d0683a9ba09 (patch) | |
tree | 72e5379a59f537a7d10061bacb655c70b2c7e192 /Configure | |
parent | 711a8b999e7a0733f349e7f330fa3fa013e995fd (diff) |
Make configdata.pm runnable and move all display of information there
The "make variable" information displayed by Configure was selective
and incomplete, and possibly undesirable (too verbose).
Instead, we make configdata.pm and have the user run it to get the
information they desire, and also make it possible to have it perform
a reconfiguration.
Possibilities so far:
perl configdata.pm --dump Displays everything (i.e. the
combined output from
--command-line, --environment,
--make-variables and
--build-parameters.
perl configdata.pm --command-line Displays the config command
line.
perl configdata.pm --envirnoment Displays the recorded
environment variables.
perl configdata.pm --make-variables Displays the configured "make
variables".
perl configdata.pm --build-parameters Displays the build file and
the template files to create
it.
perl configdata.pm --reconfigure Re-runs the configuration with
the recorded environment
variables.
--verbose can be used to have --reconfigure be a bit more verbose.
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5185)
Diffstat (limited to 'Configure')
-rwxr-xr-x | Configure | 243 |
1 files changed, 212 insertions, 31 deletions
@@ -226,11 +226,6 @@ if (grep /^reconf(igure)?$/, @argvcopy) { die "Incorrect data to reconfigure, please do a normal configuration\n" if (grep(/^reconf/,@argvcopy)); $config{perlenv} = $configdata::config{perlenv} // {}; - - print "Reconfiguring with: ", join(" ",@argvcopy), "\n"; - foreach (sort keys %{$config{perlenv}}) { - print " $_ = $config{perlenv}->{$_}\n"; - } } else { die "Insufficient data to reconfigure, please do a normal configuration\n"; } @@ -2176,8 +2171,11 @@ foreach (grep /_(asm|aux)_src$/, keys %target) { # Write down our configuration where it fits ######################### +print "Creating configdata.pm\n"; open(OUT,">configdata.pm") || die "unable to create configdata.pm: $!\n"; print OUT <<"EOF"; +#! $config{hashbangperl} + package configdata; use strict; @@ -2312,36 +2310,219 @@ if ($builder eq "unified") { EOF } -print OUT "1;\n"; -close(OUT); +print OUT "my \%makevars = (\n"; +foreach (sort keys %user) { + print OUT ' ',$_,' ' x (20 - length $_),'=> ', + "'",$user_to_target{$_} || lc $_,"',\n"; +} +print OUT ");\n"; +print OUT << 'EOF'; + +# If run directly, we can give some answers, and even reconfigure +unless (caller) { + use Getopt::Long; + use File::Spec::Functions; + use File::Basename; + use Pod::Usage; + + my $here = dirname($0); + + my $dump = undef; + my $cmdline = undef; + my $envvars = undef; + my $makevars = undef; + my $buildparams = undef; + my $reconf = undef; + my $verbose = undef; + my $help = undef; + my $man = undef; + GetOptions('dump|d' => \$dump, + 'command-line|c' => \$cmdline, + 'environment|e' => \$envvars, + 'make-variables|m' => \$makevars, + 'build-parameters|b' => \$buildparams, + 'reconfigure|reconf|r' => \$reconf, + 'verbose|v' => \$verbose, + 'help' => \$help, + 'man' => \$man) + or die "Errors in command line arguments\n"; + + unless ($dump || $cmdline || $envvars || $makevars || $buildparams + || $reconf || $verbose || $help || $man) { + print STDERR <<"_____"; +You must give at least one option. +For more information, do '$0 --help' +_____ + exit(2); + } + + if ($help) { + pod2usage(-exitval => 0, + -verbose => 1); + } + if ($man) { + pod2usage(-exitval => 0, + -verbose => 2); + } + if ($dump || $cmdline) { + print "\n(with current working directory = $here)"; + print "\nCommand line:\n\n"; + print ' ',join(' ', + $config{perl}, + catfile($config{sourcedir}, 'Configure'), + @{$config{perlargv}}), "\n"; + } + if ($dump || $envvars) { + print "\nRecorded environment:\n\n"; + foreach (sort keys %{$config{perlenv}}) { + print ' ',$_,' = ',($config{perlenv}->{$_} || ''),"\n"; + } + } + 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{$_}}), + "\n" + if defined $config{$makevars{$_}}; + } + + my @buildfile = ($config{builddir}, $config{build_file}); + unshift @buildfile, $here + unless file_name_is_absolute($config{builddir}); + my $buildfile = canonpath(catdir(@buildfile)); + print <<"_____"; + +NOTE: These variables only represent the configuration view. The build file +template may have processed these variables further, please have a look at the +build file for more exact data: + $buildfile +_____ + } + if ($dump || $buildparams) { + my @buildfile = ($config{builddir}, $config{build_file}); + unshift @buildfile, $here + unless file_name_is_absolute($config{builddir}); + print "\nbuild file:\n\n"; + print " ", canonpath(catfile(@buildfile)),"\n"; + + print "\nbuild file templates:\n\n"; + foreach (@{$config{build_file_templates}}) { + my @tmpl = ($_); + unshift @tmpl, $here + unless file_name_is_absolute($config{sourcedir}); + print ' ',canonpath(catfile(@tmpl)),"\n"; + } + } + if ($reconf) { + if ($verbose) { + print 'Reconfiguring with: ', join(' ',@{$config{perlargv}}), "\n"; + foreach (sort keys %{$config{perlenv}}) { + print ' ',$_,' = ',($config{perlenv}->{$_} || ""),"\n"; + } + } + + chdir $here; + exec $^X,catfile($config{sourcedir}, 'Configure'),'reconf'; + } +} + +1; + +__END__ + +=head1 NAME + +configdata.pm - configuration data for OpenSSL builds + +=head1 SYNOPSIS + +Interactive: + + perl configdata.pm [options] + +As data bank module: + + use configdata; + +=head1 DESCRIPTION + +This module can be used in two modes, interactively and as a module containing +all the data recorded by OpenSSL's Configure script. + +When used interactively, simply run it as any perl script, with at least one +option, and you will get the information you ask for. See L</OPTIONS> below. -print "\n"; -print "PROCESSOR =$config{processor}\n" if $config{processor}; -print "PERL =$config{perl}\n"; -print "PERLVERSION =$Config{version} for $Config{archname}\n"; -print "HASHBANGPERL =$config{hashbangperl}\n"; -print "DEFINES =",join(" ", @{$config{defines}}),"\n" - if defined $config{defines}; -print "INCLUDES =",join(" ", @{$config{includes}}),"\n" - if defined $config{includes}; -print "CPPFLAGS =",join(" ", @{$config{cppflags}}),"\n" - if defined $config{cppflags}; -print "CC =$config{cross_compile_prefix}$config{cc}\n"; -print "CFLAGS =",join(" ", @{$config{cflags}}),"\n" - if defined $config{cflags}; -print "CXX =$config{cross_compile_prefix}$config{cxx}\n" - if defined $config{cxx}; -print "CXXFLAGS =",join(" ", @{$config{cxxflags}}),"\n" - if defined $config{cxxflags}; -print "LD =$config{cross_compile_prefix}$config{ld}\n" - if defined $config{ld}; -print "LDFLAGS =",join(" ", @{$config{lflags}}),"\n" - if defined $config{lflags}; -print "EX_LIBS =",join(" ", @{$config{ex_libs}}),"\n" - if defined $config{ex_libs}; +When loaded as a module, you get a few databanks with useful information to +perform build related tasks. The databanks are: + + %config Configured things. + %target The OpenSSL config target with all inheritances + resolved. + %disabled The features that are disabled. + @disablables The list of features that can be disabled. + %withargs All data given through --with-THING options. + %unified_info All information that was computed from the build.info + files. + +=head1 OPTIONS + +=over 4 + +=item B<--help> + +Print a brief help message and exit. + +=item B<--man> + +Print the manual page and exit. + +=item B<--dump> | B<-c> + +Print all relevant configuration data. This is equivalent to B<--command-line> +B<--environment> B<--make-variables> B<--build-parameters>. + +=item B<--command-line> | B<-c> + +Print the current configuration command line. + +=item B<--environment> | B<-e> + +Print the environment variables and their values at the time of configuration. + +=item B<--make-variables> | B<-m> + +Print the main make variables generated in the current configuration + +=item B<--build-parameters> | B<-b> + +Print the build parameters, i.e. build file and build file templates. + +=item B<--reconfigure> | B<--reconf> | B<-r> + +Redo the configuration. + +=item B<--verbose> | B<-v> + +Verbose output. + +=back + +=cut + +EOF +close(OUT); +if ($builder_platform eq 'unix') { + my $mode = (0755 & ~umask); + chmod $mode, 'configdata.pm' + or warn sprintf("WARNING: Couldn't change mode for 'configdata.pm' to 0%03o: %s\n",$mode,$!); +} my %builders = ( unified => sub { + print 'Creating ',$target{build_file},"\n"; run_dofile(catfile($blddir, $target{build_file}), @{$config{build_file_templates}}); }, |