1*b0d17251Schristos#! {- $config{HASHBANGPERL} -} 2*b0d17251Schristos# -*- mode: perl -*- 3*b0d17251Schristos{- 4*b0d17251Schristos # We must make sourcedir() return an absolute path, because configdata.pm 5*b0d17251Schristos # may be loaded as a module from any script in any directory, making 6*b0d17251Schristos # relative paths untrustable. Because the result is used with 'use lib', 7*b0d17251Schristos # we must ensure that it returns a Unix style path. Mixing File::Spec 8*b0d17251Schristos # and File::Spec::Unix does just that. 9*b0d17251Schristos use File::Spec::Unix; 10*b0d17251Schristos use File::Spec; 11*b0d17251Schristos use Cwd qw(abs_path); 12*b0d17251Schristos sub _fixup_path { 13*b0d17251Schristos my $path = shift; 14*b0d17251Schristos 15*b0d17251Schristos # Make the path absolute at all times 16*b0d17251Schristos $path = abs_path($path); 17*b0d17251Schristos 18*b0d17251Schristos if ($^O eq 'VMS') { 19*b0d17251Schristos # Convert any path of the VMS form VOLUME:[DIR1.DIR2]FILE to the 20*b0d17251Schristos # Unix form /VOLUME/DIR1/DIR2/FILE, which is what VMS perl supports 21*b0d17251Schristos # for 'use lib'. 22*b0d17251Schristos 23*b0d17251Schristos # Start with spliting the native path 24*b0d17251Schristos (my $vol, my $dirs, my $file) = File::Spec->splitpath($path); 25*b0d17251Schristos my @dirs = File::Spec->splitdir($dirs); 26*b0d17251Schristos 27*b0d17251Schristos # Reassemble it as a Unix path 28*b0d17251Schristos $vol =~ s|:$||; 29*b0d17251Schristos $dirs = File::Spec::Unix->catdir('', $vol, @dirs); 30*b0d17251Schristos $path = File::Spec::Unix->catpath('', $dirs, $file); 31*b0d17251Schristos } 32*b0d17251Schristos 33*b0d17251Schristos return $path; 34*b0d17251Schristos } 35*b0d17251Schristos sub sourcedir { 36*b0d17251Schristos return _fixup_path(File::Spec->catdir($config{sourcedir}, @_)) 37*b0d17251Schristos } 38*b0d17251Schristos sub sourcefile { 39*b0d17251Schristos return _fixup_path(File::Spec->catfile($config{sourcedir}, @_)) 40*b0d17251Schristos } 41*b0d17251Schristos use lib sourcedir('util', 'perl'); 42*b0d17251Schristos use OpenSSL::Util; 43*b0d17251Schristos-} 44*b0d17251Schristospackage configdata; 45*b0d17251Schristos 46*b0d17251Schristosuse strict; 47*b0d17251Schristosuse warnings; 48*b0d17251Schristos 49*b0d17251Schristosuse Exporter; 50*b0d17251Schristosour @ISA = qw(Exporter); 51*b0d17251Schristosour @EXPORT = qw( 52*b0d17251Schristos %config %target %disabled %withargs %unified_info 53*b0d17251Schristos @disablables @disablables_int 54*b0d17251Schristos); 55*b0d17251Schristos 56*b0d17251Schristosour %config = ({- dump_data(\%config, indent => 0); -}); 57*b0d17251Schristosour %target = ({- dump_data(\%target, indent => 0); -}); 58*b0d17251Schristosour @disablables = ({- dump_data(\@disablables, indent => 0) -}); 59*b0d17251Schristosour @disablables_int = ({- dump_data(\@disablables_int, indent => 0) -}); 60*b0d17251Schristosour %disabled = ({- dump_data(\%disabled, indent => 0); -}); 61*b0d17251Schristosour %withargs = ({- dump_data(\%withargs, indent => 0); -}); 62*b0d17251Schristosour %unified_info = ({- dump_data(\%unified_info, indent => 0); -}); 63*b0d17251Schristos 64*b0d17251Schristos# Unexported, only used by OpenSSL::Test::Utils::available_protocols() 65*b0d17251Schristosour %available_protocols = ( 66*b0d17251Schristos tls => [{- dump_data(\@tls, indent => 0) -}], 67*b0d17251Schristos dtls => [{- dump_data(\@dtls, indent => 0) -}], 68*b0d17251Schristos); 69*b0d17251Schristos 70*b0d17251Schristos# The following data is only used when this files is use as a script 71*b0d17251Schristosmy @makevars = ({- dump_data(\@makevars, indent => 0); -}); 72*b0d17251Schristosmy %disabled_info = ({- dump_data(\%disabled_info, indent => 0); -}); 73*b0d17251Schristosmy @user_crossable = qw( {- join (' ', @user_crossable) -} ); 74*b0d17251Schristos 75*b0d17251Schristos# If run directly, we can give some answers, and even reconfigure 76*b0d17251Schristosunless (caller) { 77*b0d17251Schristos use Getopt::Long; 78*b0d17251Schristos use File::Spec::Functions; 79*b0d17251Schristos use File::Basename; 80*b0d17251Schristos use File::Compare qw(compare_text); 81*b0d17251Schristos use File::Copy; 82*b0d17251Schristos use Pod::Usage; 83*b0d17251Schristos 84*b0d17251Schristos use lib '{- sourcedir('util', 'perl') -}'; 85*b0d17251Schristos use OpenSSL::fallback '{- sourcefile('external', 'perl', 'MODULES.txt') -}'; 86*b0d17251Schristos 87*b0d17251Schristos my $here = dirname($0); 88*b0d17251Schristos 89*b0d17251Schristos if (scalar @ARGV == 0) { 90*b0d17251Schristos # With no arguments, re-create the build file 91*b0d17251Schristos # We do that in two steps, where the first step emits perl 92*b0d17251Schristos # snipets. 93*b0d17251Schristos 94*b0d17251Schristos my $buildfile = $config{build_file}; 95*b0d17251Schristos my $buildfile_template = "$buildfile.in"; 96*b0d17251Schristos my @autowarntext = ( 97*b0d17251Schristos 'WARNING: do not edit!', 98*b0d17251Schristos "Generated by configdata.pm from " 99*b0d17251Schristos .join(", ", @{$config{build_file_templates}}), 100*b0d17251Schristos "via $buildfile_template" 101*b0d17251Schristos ); 102*b0d17251Schristos my %gendata = ( 103*b0d17251Schristos config => \%config, 104*b0d17251Schristos target => \%target, 105*b0d17251Schristos disabled => \%disabled, 106*b0d17251Schristos withargs => \%withargs, 107*b0d17251Schristos unified_info => \%unified_info, 108*b0d17251Schristos autowarntext => \@autowarntext, 109*b0d17251Schristos ); 110*b0d17251Schristos 111*b0d17251Schristos use lib '.'; 112*b0d17251Schristos use lib '{- sourcedir('Configurations') -}'; 113*b0d17251Schristos use gentemplate; 114*b0d17251Schristos 115*b0d17251Schristos open my $buildfile_template_fh, ">$buildfile_template" 116*b0d17251Schristos or die "Trying to create $buildfile_template: $!"; 117*b0d17251Schristos foreach (@{$config{build_file_templates}}) { 118*b0d17251Schristos copy($_, $buildfile_template_fh) 119*b0d17251Schristos or die "Trying to copy $_ into $buildfile_template: $!"; 120*b0d17251Schristos } 121*b0d17251Schristos gentemplate(output => $buildfile_template_fh, %gendata); 122*b0d17251Schristos close $buildfile_template_fh; 123*b0d17251Schristos print 'Created ',$buildfile_template,"\n"; 124*b0d17251Schristos 125*b0d17251Schristos use OpenSSL::Template; 126*b0d17251Schristos 127*b0d17251Schristos my $prepend = <<'_____'; 128*b0d17251Schristosuse File::Spec::Functions; 129*b0d17251Schristosuse lib '{- sourcedir('util', 'perl') -}'; 130*b0d17251Schristosuse lib '{- sourcedir('Configurations') -}'; 131*b0d17251Schristosuse lib '{- $config{builddir} -}'; 132*b0d17251Schristosuse platform; 133*b0d17251Schristos_____ 134*b0d17251Schristos 135*b0d17251Schristos my $tmpl; 136*b0d17251Schristos open BUILDFILE, ">$buildfile.new" 137*b0d17251Schristos or die "Trying to create $buildfile.new: $!"; 138*b0d17251Schristos $tmpl = OpenSSL::Template->new(TYPE => 'FILE', 139*b0d17251Schristos SOURCE => $buildfile_template); 140*b0d17251Schristos $tmpl->fill_in(FILENAME => $_, 141*b0d17251Schristos OUTPUT => \*BUILDFILE, 142*b0d17251Schristos HASH => \%gendata, 143*b0d17251Schristos PREPEND => $prepend, 144*b0d17251Schristos # To ensure that global variables and functions 145*b0d17251Schristos # defined in one template stick around for the 146*b0d17251Schristos # next, making them combinable 147*b0d17251Schristos PACKAGE => 'OpenSSL::safe') 148*b0d17251Schristos or die $Text::Template::ERROR; 149*b0d17251Schristos close BUILDFILE; 150*b0d17251Schristos rename("$buildfile.new", $buildfile) 151*b0d17251Schristos or die "Trying to rename $buildfile.new to $buildfile: $!"; 152*b0d17251Schristos print 'Created ',$buildfile,"\n"; 153*b0d17251Schristos 154*b0d17251Schristos my $configuration_h = 155*b0d17251Schristos catfile('include', 'openssl', 'configuration.h'); 156*b0d17251Schristos my $configuration_h_in = 157*b0d17251Schristos catfile($config{sourcedir}, 'include', 'openssl', 'configuration.h.in'); 158*b0d17251Schristos open CONFIGURATION_H, ">${configuration_h}.new" 159*b0d17251Schristos or die "Trying to create ${configuration_h}.new: $!"; 160*b0d17251Schristos $tmpl = OpenSSL::Template->new(TYPE => 'FILE', 161*b0d17251Schristos SOURCE => $configuration_h_in); 162*b0d17251Schristos $tmpl->fill_in(FILENAME => $_, 163*b0d17251Schristos OUTPUT => \*CONFIGURATION_H, 164*b0d17251Schristos HASH => \%gendata, 165*b0d17251Schristos PREPEND => $prepend, 166*b0d17251Schristos # To ensure that global variables and functions 167*b0d17251Schristos # defined in one template stick around for the 168*b0d17251Schristos # next, making them combinable 169*b0d17251Schristos PACKAGE => 'OpenSSL::safe') 170*b0d17251Schristos or die $Text::Template::ERROR; 171*b0d17251Schristos close CONFIGURATION_H; 172*b0d17251Schristos 173*b0d17251Schristos # When using stat() on Windows, we can get it to perform better by 174*b0d17251Schristos # avoid some data. This doesn't affect the mtime field, so we're not 175*b0d17251Schristos # losing anything... 176*b0d17251Schristos ${^WIN32_SLOPPY_STAT} = 1; 177*b0d17251Schristos 178*b0d17251Schristos my $update_configuration_h = 0; 179*b0d17251Schristos if (-f $configuration_h) { 180*b0d17251Schristos my $configuration_h_mtime = (stat($configuration_h))[9]; 181*b0d17251Schristos my $configuration_h_in_mtime = (stat($configuration_h_in))[9]; 182*b0d17251Schristos 183*b0d17251Schristos # If configuration.h.in was updated after the last configuration.h, 184*b0d17251Schristos # or if configuration.h.new differs configuration.h, we update 185*b0d17251Schristos # configuration.h 186*b0d17251Schristos if ($configuration_h_mtime < $configuration_h_in_mtime 187*b0d17251Schristos || compare_text("${configuration_h}.new", $configuration_h) != 0) { 188*b0d17251Schristos $update_configuration_h = 1; 189*b0d17251Schristos } else { 190*b0d17251Schristos # If nothing has changed, let's just drop the new one and 191*b0d17251Schristos # pretend like nothing happened 192*b0d17251Schristos unlink "${configuration_h}.new" 193*b0d17251Schristos } 194*b0d17251Schristos } else { 195*b0d17251Schristos $update_configuration_h = 1; 196*b0d17251Schristos } 197*b0d17251Schristos 198*b0d17251Schristos if ($update_configuration_h) { 199*b0d17251Schristos rename("${configuration_h}.new", $configuration_h) 200*b0d17251Schristos or die "Trying to rename ${configuration_h}.new to $configuration_h: $!"; 201*b0d17251Schristos print 'Created ',$configuration_h,"\n"; 202*b0d17251Schristos } 203*b0d17251Schristos 204*b0d17251Schristos exit(0); 205*b0d17251Schristos } 206*b0d17251Schristos 207*b0d17251Schristos my $dump = undef; 208*b0d17251Schristos my $cmdline = undef; 209*b0d17251Schristos my $options = undef; 210*b0d17251Schristos my $target = undef; 211*b0d17251Schristos my $envvars = undef; 212*b0d17251Schristos my $makevars = undef; 213*b0d17251Schristos my $buildparams = undef; 214*b0d17251Schristos my $reconf = undef; 215*b0d17251Schristos my $verbose = undef; 216*b0d17251Schristos my $query = undef; 217*b0d17251Schristos my $help = undef; 218*b0d17251Schristos my $man = undef; 219*b0d17251Schristos GetOptions('dump|d' => \$dump, 220*b0d17251Schristos 'command-line|c' => \$cmdline, 221*b0d17251Schristos 'options|o' => \$options, 222*b0d17251Schristos 'target|t' => \$target, 223*b0d17251Schristos 'environment|e' => \$envvars, 224*b0d17251Schristos 'make-variables|m' => \$makevars, 225*b0d17251Schristos 'build-parameters|b' => \$buildparams, 226*b0d17251Schristos 'reconfigure|reconf|r' => \$reconf, 227*b0d17251Schristos 'verbose|v' => \$verbose, 228*b0d17251Schristos 'query|q=s' => \$query, 229*b0d17251Schristos 'help' => \$help, 230*b0d17251Schristos 'man' => \$man) 231*b0d17251Schristos or die "Errors in command line arguments\n"; 232*b0d17251Schristos 233*b0d17251Schristos # We allow extra arguments with --query. That allows constructs like 234*b0d17251Schristos # this: 235*b0d17251Schristos # ./configdata.pm --query 'get_sources(@ARGV)' file1 file2 file3 236*b0d17251Schristos if (!$query && scalar @ARGV > 0) { 237*b0d17251Schristos print STDERR <<"_____"; 238*b0d17251SchristosUnrecognised arguments. 239*b0d17251SchristosFor more information, do '$0 --help' 240*b0d17251Schristos_____ 241*b0d17251Schristos exit(2); 242*b0d17251Schristos } 243*b0d17251Schristos 244*b0d17251Schristos if ($help) { 245*b0d17251Schristos pod2usage(-exitval => 0, 246*b0d17251Schristos -verbose => 1); 247*b0d17251Schristos } 248*b0d17251Schristos if ($man) { 249*b0d17251Schristos pod2usage(-exitval => 0, 250*b0d17251Schristos -verbose => 2); 251*b0d17251Schristos } 252*b0d17251Schristos if ($dump || $cmdline) { 253*b0d17251Schristos print "\nCommand line (with current working directory = $here):\n\n"; 254*b0d17251Schristos print ' ',join(' ', 255*b0d17251Schristos $config{PERL}, 256*b0d17251Schristos catfile($config{sourcedir}, 'Configure'), 257*b0d17251Schristos @{$config{perlargv}}), "\n"; 258*b0d17251Schristos print "\nPerl information:\n\n"; 259*b0d17251Schristos print ' ',$config{perl_cmd},"\n"; 260*b0d17251Schristos print ' ',$config{perl_version},' for ',$config{perl_archname},"\n"; 261*b0d17251Schristos } 262*b0d17251Schristos if ($dump || $options) { 263*b0d17251Schristos my $longest = 0; 264*b0d17251Schristos my $longest2 = 0; 265*b0d17251Schristos foreach my $what (@disablables) { 266*b0d17251Schristos $longest = length($what) if $longest < length($what); 267*b0d17251Schristos $longest2 = length($disabled{$what}) 268*b0d17251Schristos if $disabled{$what} && $longest2 < length($disabled{$what}); 269*b0d17251Schristos } 270*b0d17251Schristos print "\nEnabled features:\n\n"; 271*b0d17251Schristos foreach my $what (@disablables) { 272*b0d17251Schristos print " $what\n" unless $disabled{$what}; 273*b0d17251Schristos } 274*b0d17251Schristos print "\nDisabled features:\n\n"; 275*b0d17251Schristos foreach my $what (@disablables) { 276*b0d17251Schristos if ($disabled{$what}) { 277*b0d17251Schristos print " $what", ' ' x ($longest - length($what) + 1), 278*b0d17251Schristos "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); 279*b0d17251Schristos print $disabled_info{$what}->{macro} 280*b0d17251Schristos if $disabled_info{$what}->{macro}; 281*b0d17251Schristos print ' (skip ', 282*b0d17251Schristos join(', ', @{$disabled_info{$what}->{skipped}}), 283*b0d17251Schristos ')' 284*b0d17251Schristos if $disabled_info{$what}->{skipped}; 285*b0d17251Schristos print "\n"; 286*b0d17251Schristos } 287*b0d17251Schristos } 288*b0d17251Schristos } 289*b0d17251Schristos if ($dump || $target) { 290*b0d17251Schristos print "\nConfig target attributes:\n\n"; 291*b0d17251Schristos foreach (sort keys %target) { 292*b0d17251Schristos next if $_ =~ m|^_| || $_ eq 'template'; 293*b0d17251Schristos my $quotify = sub { 294*b0d17251Schristos map { 295*b0d17251Schristos if (defined $_) { 296*b0d17251Schristos (my $x = $_) =~ s|([\\\$\@"])|\\$1|g; "\"$x\"" 297*b0d17251Schristos } else { 298*b0d17251Schristos "undef"; 299*b0d17251Schristos } 300*b0d17251Schristos } @_; 301*b0d17251Schristos }; 302*b0d17251Schristos print ' ', $_, ' => '; 303*b0d17251Schristos if (ref($target{$_}) eq "ARRAY") { 304*b0d17251Schristos print '[ ', join(', ', $quotify->(@{$target{$_}})), " ],\n"; 305*b0d17251Schristos } else { 306*b0d17251Schristos print $quotify->($target{$_}), ",\n" 307*b0d17251Schristos } 308*b0d17251Schristos } 309*b0d17251Schristos } 310*b0d17251Schristos if ($dump || $envvars) { 311*b0d17251Schristos print "\nRecorded environment:\n\n"; 312*b0d17251Schristos foreach (sort keys %{$config{perlenv}}) { 313*b0d17251Schristos print ' ',$_,' = ',($config{perlenv}->{$_} || ''),"\n"; 314*b0d17251Schristos } 315*b0d17251Schristos } 316*b0d17251Schristos if ($dump || $makevars) { 317*b0d17251Schristos print "\nMakevars:\n\n"; 318*b0d17251Schristos foreach my $var (@makevars) { 319*b0d17251Schristos my $prefix = ''; 320*b0d17251Schristos $prefix = $config{CROSS_COMPILE} 321*b0d17251Schristos if grep { $var eq $_ } @user_crossable; 322*b0d17251Schristos $prefix //= ''; 323*b0d17251Schristos print ' ',$var,' ' x (16 - length $var),'= ', 324*b0d17251Schristos (ref $config{$var} eq 'ARRAY' 325*b0d17251Schristos ? join(' ', @{$config{$var}}) 326*b0d17251Schristos : $prefix.$config{$var}), 327*b0d17251Schristos "\n" 328*b0d17251Schristos if defined $config{$var}; 329*b0d17251Schristos } 330*b0d17251Schristos 331*b0d17251Schristos my @buildfile = ($config{builddir}, $config{build_file}); 332*b0d17251Schristos unshift @buildfile, $here 333*b0d17251Schristos unless file_name_is_absolute($config{builddir}); 334*b0d17251Schristos my $buildfile = canonpath(catdir(@buildfile)); 335*b0d17251Schristos print <<"_____"; 336*b0d17251Schristos 337*b0d17251SchristosNOTE: These variables only represent the configuration view. The build file 338*b0d17251Schristostemplate may have processed these variables further, please have a look at the 339*b0d17251Schristosbuild file for more exact data: 340*b0d17251Schristos $buildfile 341*b0d17251Schristos_____ 342*b0d17251Schristos } 343*b0d17251Schristos if ($dump || $buildparams) { 344*b0d17251Schristos my @buildfile = ($config{builddir}, $config{build_file}); 345*b0d17251Schristos unshift @buildfile, $here 346*b0d17251Schristos unless file_name_is_absolute($config{builddir}); 347*b0d17251Schristos print "\nbuild file:\n\n"; 348*b0d17251Schristos print " ", canonpath(catfile(@buildfile)),"\n"; 349*b0d17251Schristos 350*b0d17251Schristos print "\nbuild file templates:\n\n"; 351*b0d17251Schristos foreach (@{$config{build_file_templates}}) { 352*b0d17251Schristos my @tmpl = ($_); 353*b0d17251Schristos unshift @tmpl, $here 354*b0d17251Schristos unless file_name_is_absolute($config{sourcedir}); 355*b0d17251Schristos print ' ',canonpath(catfile(@tmpl)),"\n"; 356*b0d17251Schristos } 357*b0d17251Schristos } 358*b0d17251Schristos if ($reconf) { 359*b0d17251Schristos if ($verbose) { 360*b0d17251Schristos print 'Reconfiguring with: ', join(' ',@{$config{perlargv}}), "\n"; 361*b0d17251Schristos foreach (sort keys %{$config{perlenv}}) { 362*b0d17251Schristos print ' ',$_,' = ',($config{perlenv}->{$_} || ""),"\n"; 363*b0d17251Schristos } 364*b0d17251Schristos } 365*b0d17251Schristos 366*b0d17251Schristos chdir $here; 367*b0d17251Schristos exec $^X,catfile($config{sourcedir}, 'Configure'),'reconf'; 368*b0d17251Schristos } 369*b0d17251Schristos if ($query) { 370*b0d17251Schristos use OpenSSL::Config::Query; 371*b0d17251Schristos 372*b0d17251Schristos my $confquery = OpenSSL::Config::Query->new(info => \%unified_info, 373*b0d17251Schristos config => \%config); 374*b0d17251Schristos my $result = eval "\$confquery->$query"; 375*b0d17251Schristos 376*b0d17251Schristos # We may need a result class with a printing function at some point. 377*b0d17251Schristos # Until then, we assume that we get a scalar, or a list or a hash table 378*b0d17251Schristos # with scalar values and simply print them in some orderly fashion. 379*b0d17251Schristos if (ref $result eq 'ARRAY') { 380*b0d17251Schristos print "$_\n" foreach @$result; 381*b0d17251Schristos } elsif (ref $result eq 'HASH') { 382*b0d17251Schristos print "$_ : \\\n ", join(" \\\n ", @{$result->{$_}}), "\n" 383*b0d17251Schristos foreach sort keys %$result; 384*b0d17251Schristos } elsif (ref $result eq 'SCALAR') { 385*b0d17251Schristos print "$$result\n"; 386*b0d17251Schristos } 387*b0d17251Schristos } 388*b0d17251Schristos} 389*b0d17251Schristos 390*b0d17251Schristos1; 391*b0d17251Schristos 392*b0d17251Schristos__END__ 393*b0d17251Schristos 394*b0d17251Schristos=head1 NAME 395*b0d17251Schristos 396*b0d17251Schristosconfigdata.pm - configuration data for OpenSSL builds 397*b0d17251Schristos 398*b0d17251Schristos=head1 SYNOPSIS 399*b0d17251Schristos 400*b0d17251SchristosInteractive: 401*b0d17251Schristos 402*b0d17251Schristos perl configdata.pm [options] 403*b0d17251Schristos 404*b0d17251SchristosAs data bank module: 405*b0d17251Schristos 406*b0d17251Schristos use configdata; 407*b0d17251Schristos 408*b0d17251Schristos=head1 DESCRIPTION 409*b0d17251Schristos 410*b0d17251SchristosThis module can be used in two modes, interactively and as a module containing 411*b0d17251Schristosall the data recorded by OpenSSL's Configure script. 412*b0d17251Schristos 413*b0d17251SchristosWhen used interactively, simply run it as any perl script. 414*b0d17251SchristosIf run with no arguments, it will rebuild the build file (Makefile or 415*b0d17251Schristoscorresponding). 416*b0d17251SchristosWith at least one option, it will instead get the information you ask for, or 417*b0d17251Schristosre-run the configuration process. 418*b0d17251SchristosSee L</OPTIONS> below for more information. 419*b0d17251Schristos 420*b0d17251SchristosWhen loaded as a module, you get a few databanks with useful information to 421*b0d17251Schristosperform build related tasks. The databanks are: 422*b0d17251Schristos 423*b0d17251Schristos %config Configured things. 424*b0d17251Schristos %target The OpenSSL config target with all inheritances 425*b0d17251Schristos resolved. 426*b0d17251Schristos %disabled The features that are disabled. 427*b0d17251Schristos @disablables The list of features that can be disabled. 428*b0d17251Schristos %withargs All data given through --with-THING options. 429*b0d17251Schristos %unified_info All information that was computed from the build.info 430*b0d17251Schristos files. 431*b0d17251Schristos 432*b0d17251Schristos=head1 OPTIONS 433*b0d17251Schristos 434*b0d17251Schristos=over 4 435*b0d17251Schristos 436*b0d17251Schristos=item B<--help> 437*b0d17251Schristos 438*b0d17251SchristosPrint a brief help message and exit. 439*b0d17251Schristos 440*b0d17251Schristos=item B<--man> 441*b0d17251Schristos 442*b0d17251SchristosPrint the manual page and exit. 443*b0d17251Schristos 444*b0d17251Schristos=item B<--dump> | B<-d> 445*b0d17251Schristos 446*b0d17251SchristosPrint all relevant configuration data. This is equivalent to B<--command-line> 447*b0d17251SchristosB<--options> B<--target> B<--environment> B<--make-variables> 448*b0d17251SchristosB<--build-parameters>. 449*b0d17251Schristos 450*b0d17251Schristos=item B<--command-line> | B<-c> 451*b0d17251Schristos 452*b0d17251SchristosPrint the current configuration command line. 453*b0d17251Schristos 454*b0d17251Schristos=item B<--options> | B<-o> 455*b0d17251Schristos 456*b0d17251SchristosPrint the features, both enabled and disabled, and display defined macro and 457*b0d17251Schristosskipped directories where applicable. 458*b0d17251Schristos 459*b0d17251Schristos=item B<--target> | B<-t> 460*b0d17251Schristos 461*b0d17251SchristosPrint the config attributes for this config target. 462*b0d17251Schristos 463*b0d17251Schristos=item B<--environment> | B<-e> 464*b0d17251Schristos 465*b0d17251SchristosPrint the environment variables and their values at the time of configuration. 466*b0d17251Schristos 467*b0d17251Schristos=item B<--make-variables> | B<-m> 468*b0d17251Schristos 469*b0d17251SchristosPrint the main make variables generated in the current configuration 470*b0d17251Schristos 471*b0d17251Schristos=item B<--build-parameters> | B<-b> 472*b0d17251Schristos 473*b0d17251SchristosPrint the build parameters, i.e. build file and build file templates. 474*b0d17251Schristos 475*b0d17251Schristos=item B<--reconfigure> | B<--reconf> | B<-r> 476*b0d17251Schristos 477*b0d17251SchristosRe-run the configuration process. 478*b0d17251Schristos 479*b0d17251Schristos=item B<--verbose> | B<-v> 480*b0d17251Schristos 481*b0d17251SchristosVerbose output. 482*b0d17251Schristos 483*b0d17251Schristos=back 484*b0d17251Schristos 485*b0d17251Schristos=cut 486*b0d17251Schristos 487*b0d17251SchristosEOF 488