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