xref: /freebsd/crypto/openssl/configdata.pm.in (revision 0d0c8621fd181e507f0fb50ffcca606faf66a8c2)
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