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