]>
git.ipfire.org Git - thirdparty/openssl.git/blob - configdata.pm.in
1 #! {- $config{HASHBANGPERL} -}
7 # indent => callers indentation (int)
8 # delimiters => 1 if outer delimiters should be added
11 my $indent = $opts{indent
} // 0;
12 # Indentation of the whole structure, where applicable
13 my $nlindent1 = "\n" . ' ' x
$indent;
14 # Indentation of individual items, where applicable
15 my $nlindent2 = "\n" . ' ' x
($indent + 4);
17 my $product; # Finished product, or reference to a function that
18 # produces a string, given $_
19 # The following are only used when $product is a function reference
20 my $delim_l; # Left delimiter of structure
21 my $delim_r; # Right delimiter of structure
22 my $separator; # Item separator
23 my @items; # Items to iterate over
25 if (ref($ref) eq "ARRAY") {
26 if (scalar @
$ref == 0) {
27 $product = $opts{delimiters
} ?
'[]' : '';
30 out_item
(\
$_, delimiters
=> 1, indent
=> $indent + 4)
32 $delim_l = ($opts{delimiters
} ?
'[' : '').$nlindent2;
33 $delim_r = $nlindent1.($opts{delimiters
} ?
']' : '');
34 $separator = ",$nlindent2";
37 } elsif (ref($ref) eq "HASH") {
38 if (scalar keys %$ref == 0) {
39 $product = $opts{delimiters
} ?
'{}' : '';
43 . out_item
($ref->{$_}, delimiters
=> 1, indent
=> $indent + 4)
45 $delim_l = ($opts{delimiters
} ?
'{' : '').$nlindent2;
46 $delim_r = $nlindent1.($opts{delimiters
} ?
'}' : '');
47 $separator = ",$nlindent2";
48 @items = sort keys %$ref;
50 } elsif (ref($ref) eq "SCALAR") {
51 $product = defined $$ref ? quotify1
$$ref : "undef";
53 $product = defined $ref ? quotify1
$ref : "undef";
56 if (ref($product) eq "CODE") {
57 $delim_l . join($separator, map { &$product } @items) . $delim_r;
63 # We must make sourcedir() return an absolute path, because configdata.pm
64 # may be loaded as a module from any script in any directory, making
65 # relative paths untrustable. Because the result is used with 'use lib',
66 # we must ensure that it returns a Unix style path. Cwd::abs_path does
67 # that (File::Spec::Functions::rel2abs return O/S specific paths)
68 use File
::Spec
::Functions
;
71 return abs_path
(catdir
($config{sourcedir
}, @_));
74 return abs_path
(catfile
($config{sourcedir
}, @_));
83 our @ISA = qw(Exporter);
85 %config %target %disabled %withargs %unified_info
86 @disablables @disablables_int
89 our %config = ({- out_item(\%config); -});
90 our %target = ({- out_item(\%target); -});
91 our @disablables = ({- out_item(\@disablables) -});
92 our @disablables_int = ({- out_item(\@disablables_int) -});
93 our %disabled = ({- out_item(\%disabled); -});
94 our %withargs = ({- out_item(\%withargs); -});
95 our %unified_info = ({- out_item(\%unified_info); -});
97 # Unexported, only used by OpenSSL::Test::Utils::available_protocols()
98 our %available_protocols = (
99 tls => [{- out_item(\@tls) -}],
100 dtls => [{- out_item(\@dtls) -}],
103 # The following data is only used when this files is use as a script
104 my @makevars = ({- out_item(\@makevars); -});
105 my %disabled_info = ({- out_item(\%disabled_info); -});
106 my @user_crossable = qw( {- join (' ', @user_crossable) -} );
108 # If run directly, we can give some answers, and even reconfigure
111 use File::Spec::Functions;
115 use lib '{- sourcedir('util', 'perl') -}';
116 use OpenSSL::fallback '{- sourcefile('external', 'perl', 'MODULES.txt') -}';
118 my $here = dirname($0);
120 if (scalar @ARGV == 0) {
121 # With no arguments, re-create the build file
123 use OpenSSL::Template;
125 my $prepend = <<'_____';
126 use File::Spec::Functions;
127 use lib '{- sourcedir('util', 'perl') -}';
128 use lib '{- sourcedir('Configurations') -}';
129 use lib '{- $config{builddir} -}';
134 'WARNING: do not edit!',
135 "Generated by configdata.pm from "
136 .join(", ", @{$config{build_file_templates}})
139 print 'Creating ',$target{build_file},"\n";
140 open BUILDFILE, ">$target{build_file}.new"
141 or die "Trying to create $target{build_file}.new: $!";
142 foreach (@{$config{build_file_templates}}) {
143 my $tmpl = OpenSSL::Template->new(TYPE => 'FILE',
145 $tmpl->fill_in(FILENAME => $_,
146 OUTPUT => \*BUILDFILE,
147 HASH => { config => \%config,
149 disabled => \%disabled,
150 withargs => \%withargs,
151 unified_info => \%unified_info,
152 autowarntext => \@autowarntext },
154 # To ensure that global variables and functions
155 # defined in one template stick around for the
156 # next, making them combinable
157 PACKAGE => 'OpenSSL::safe')
158 or die $Text::Template::ERROR;
161 rename("$target{build_file}.new", $target{build_file})
162 or die "Trying to rename $target{build_file}.new to $target{build_file}: $!";
172 my $makevars = undef;
173 my $buildparams = undef;
179 GetOptions('dump|d' => \$dump,
180 'command-line|c' => \$cmdline,
181 'options|o' => \$options,
182 'target|t' => \$target,
183 'environment|e' => \$envvars,
184 'make-variables|m' => \$makevars,
185 'build-parameters|b' => \$buildparams,
186 'reconfigure|reconf|r' => \$reconf,
187 'verbose|v' => \$verbose,
188 'query|q=s' => \$query,
191 or die "Errors in command line arguments\n";
193 if (scalar @ARGV > 0) {
194 print STDERR <<"_____";
195 Unrecognised arguments.
196 For more information, do '$0 --help'
202 pod2usage(-exitval => 0,
206 pod2usage(-exitval => 0,
209 if ($dump || $cmdline) {
210 print "\nCommand line (with current working directory = $here):\n\n";
213 catfile($config{sourcedir}, 'Configure'),
214 @{$config{perlargv}}), "\n";
215 print "\nPerl information:\n\n";
216 print ' ',$config{perl_cmd},"\n";
217 print ' ',$config{perl_version},' for ',$config{perl_archname},"\n";
219 if ($dump || $options) {
222 foreach my $what (@disablables) {
223 $longest = length($what) if $longest < length($what);
224 $longest2 = length($disabled{$what})
225 if $disabled{$what} && $longest2 < length($disabled{$what});
227 print "\nEnabled features:\n\n";
228 foreach my $what (@disablables) {
229 print " $what\n" unless $disabled{$what};
231 print "\nDisabled features:\n\n";
232 foreach my $what (@disablables) {
233 if ($disabled{$what}) {
234 print " $what", ' ' x ($longest - length($what) + 1),
235 "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1);
236 print $disabled_info{$what}->{macro}
237 if $disabled_info{$what}->{macro};
239 join(', ', @{$disabled_info{$what}->{skipped}}),
241 if $disabled_info{$what}->{skipped};
246 if ($dump || $target) {
247 print "\nConfig target attributes:\n\n";
248 foreach (sort keys %target) {
249 next if $_ =~ m|^_| || $_ eq 'template';
253 (my $x = $_) =~ s|([\\\$\@"])|\\$1|g; "\"$x\""
259 print ' ', $_, ' => ';
260 if (ref($target{$_}) eq "ARRAY") {
261 print '[ ', join(', ', $quotify->(@{$target{$_}})), " ],\n";
263 print $quotify->($target{$_}), ",\n"
267 if ($dump || $envvars) {
268 print "\nRecorded environment:\n\n";
269 foreach (sort keys %{$config{perlenv}}) {
270 print ' ',$_,' = ',($config{perlenv}->{$_} || ''),"\n";
273 if ($dump || $makevars) {
274 print "\nMakevars:\n\n";
275 foreach my $var (@makevars) {
277 $prefix = $config{CROSS_COMPILE}
278 if grep { $var eq $_ } @user_crossable;
280 print ' ',$var,' ' x (16 - length $var),'= ',
281 (ref $config{$var} eq 'ARRAY'
282 ? join(' ', @{$config{$var}})
283 : $prefix.$config{$var}),
285 if defined $config{$var};
288 my @buildfile = ($config{builddir}, $config{build_file});
289 unshift @buildfile, $here
290 unless file_name_is_absolute($config{builddir});
291 my $buildfile = canonpath(catdir(@buildfile));
294 NOTE: These variables only represent the configuration view. The build file
295 template may have processed these variables further, please have a look at the
296 build file for more exact data:
300 if ($dump || $buildparams) {
301 my @buildfile = ($config{builddir}, $config{build_file});
302 unshift @buildfile, $here
303 unless file_name_is_absolute($config{builddir});
304 print "\nbuild file:\n\n";
305 print " ", canonpath(catfile(@buildfile)),"\n";
307 print "\nbuild file templates:\n\n";
308 foreach (@{$config{build_file_templates}}) {
311 unless file_name_is_absolute($config{sourcedir});
312 print ' ',canonpath(catfile(@tmpl)),"\n";
317 print 'Reconfiguring with: ', join(' ',@{$config{perlargv}}), "\n";
318 foreach (sort keys %{$config{perlenv}}) {
319 print ' ',$_,' = ',($config{perlenv}->{$_} || ""),"\n";
324 exec $^X,catfile($config{sourcedir}, 'Configure'),'reconf';
327 use OpenSSL::Config::Query;
329 my $confquery = OpenSSL::Config::Query->new(info => \%unified_info,
331 my $result = eval "\$confquery->$query";
333 # We may need a result class with a printing function at some point.
334 # Until then, we assume that we get a scalar, or a list or a hash table
335 # with scalar values and simply print them in some orderly fashion.
336 if (ref $result eq 'ARRAY') {
337 print "$_\n" foreach @$result;
338 } elsif (ref $result eq 'HASH') {
339 print "$_ : \\\n ", join(" \\\n ", @{$result->{$_}}), "\n"
340 foreach sort keys %$result;
341 } elsif (ref $result eq 'SCALAR') {
353 configdata.pm - configuration data for OpenSSL builds
359 perl configdata.pm [options]
367 This module can be used in two modes, interactively and as a module containing
368 all the data recorded by OpenSSL's Configure script.
370 When used interactively, simply run it as any perl script.
371 If run with no arguments, it will rebuild the build file (Makefile or
373 With at least one option, it will instead get the information you ask for, or
374 re-run the configuration process.
375 See L</OPTIONS> below for more information.
377 When loaded as a module, you get a few databanks with useful information to
378 perform build related tasks. The databanks are:
380 %config Configured things.
381 %target The OpenSSL config target with all inheritances
383 %disabled The features that are disabled.
384 @disablables The list of features that can be disabled.
385 %withargs All data given through --with-THING options.
386 %unified_info All information that was computed from the build.info
395 Print a brief help message and exit.
399 Print the manual page and exit.
401 =item B<--dump> | B<-d>
403 Print all relevant configuration data. This is equivalent to B<--command-line>
404 B<--options> B<--target> B<--environment> B<--make-variables>
405 B<--build-parameters>.
407 =item B<--command-line> | B<-c>
409 Print the current configuration command line.
411 =item B<--options> | B<-o>
413 Print the features, both enabled and disabled, and display defined macro and
414 skipped directories where applicable.
416 =item B<--target> | B<-t>
418 Print the config attributes for this config target.
420 =item B<--environment> | B<-e>
422 Print the environment variables and their values at the time of configuration.
424 =item B<--make-variables> | B<-m>
426 Print the main make variables generated in the current configuration
428 =item B<--build-parameters> | B<-b>
430 Print the build parameters, i.e. build file and build file templates.
432 =item B<--reconfigure> | B<--reconf> | B<-r>
434 Re-run the configuration process.
436 =item B<--verbose> | B<-v>