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