@ -1,65 +1,6 @@
#! {- $config{HASHBANGPERL} -}
# -*- mode: perl -*-
{-
sub out_item {
my $ref = shift;
# Available options:
# indent => callers indentation (int)
# delimiters => 1 if outer delimiters should be added
my %opts = @_;
my $indent = $opts{indent} // 0;
# Indentation of the whole structure, where applicable
my $nlindent1 = "\n" . ' ' x $indent;
# Indentation of individual items, where applicable
my $nlindent2 = "\n" . ' ' x ($indent + 4);
my $product; # Finished product, or reference to a function that
# produces a string, given $_
# The following are only used when $product is a function reference
my $delim_l; # Left delimiter of structure
my $delim_r; # Right delimiter of structure
my $separator; # Item separator
my @items; # Items to iterate over
if (ref($ref) eq "ARRAY") {
if (scalar @$ref == 0) {
$product = $opts{delimiters} ? '[]' : '';
} else {
$product = sub {
out_item(\$_, delimiters => 1, indent => $indent + 4)
};
$delim_l = ($opts{delimiters} ? '[' : '').$nlindent2;
$delim_r = $nlindent1.($opts{delimiters} ? ']' : '');
$separator = ",$nlindent2";
@items = @$ref;
}
} elsif (ref($ref) eq "HASH") {
if (scalar keys %$ref == 0) {
$product = $opts{delimiters} ? '{}' : '';
} else {
$product = sub {
quotify1($_) . " => "
. out_item($ref->{$_}, delimiters => 1, indent => $indent + 4)
};
$delim_l = ($opts{delimiters} ? '{' : '').$nlindent2;
$delim_r = $nlindent1.($opts{delimiters} ? '}' : '');
$separator = ",$nlindent2";
@items = sort keys %$ref;
}
} elsif (ref($ref) eq "SCALAR") {
$product = defined $$ref ? quotify1 $$ref : "undef";
} else {
$product = defined $ref ? quotify1 $ref : "undef";
}
if (ref($product) eq "CODE") {
$delim_l . join($separator, map { &$product } @items) . $delim_r;
} else {
$product;
}
}
# We must make sourcedir() return an absolute path, because configdata.pm
# may be loaded as a module from any script in any directory, making
# relative paths untrustable. Because the result is used with 'use lib',
@ -73,6 +14,8 @@
sub sourcefile {
return abs_path(catfile($config{sourcedir}, @_));
}
use lib sourcedir('util', 'perl');
use OpenSSL::Util;
-}
package configdata;
@ -86,23 +29,23 @@ our @EXPORT = qw(
@disablables @disablables_int
);
our %config = ({- out_item(\%config ); -});
our %target = ({- out_item(\%target ); -});
our @disablables = ({- out_item(\@disablables ) -});
our @disablables_int = ({- out_item(\@disablables_int ) -});
our %disabled = ({- out_item(\%disabled ); -});
our %withargs = ({- out_item(\%withargs ); -});
our %unified_info = ({- out_item(\%unified_info ); -});
our %config = ({- dump_data(\%config, indent => 0 ); -});
our %target = ({- dump_data(\%target, indent => 0 ); -});
our @disablables = ({- dump_data(\@disablables, indent => 0 ) -});
our @disablables_int = ({- dump_data(\@disablables_int, indent => 0 ) -});
our %disabled = ({- dump_data(\%disabled, indent => 0 ); -});
our %withargs = ({- dump_data(\%withargs, indent => 0 ); -});
our %unified_info = ({- dump_data(\%unified_info, indent => 0 ); -});
# Unexported, only used by OpenSSL::Test::Utils::available_protocols()
our %available_protocols = (
tls => [{- out_item(\@tls ) -}],
dtls => [{- out_item(\@dtls ) -}],
tls => [{- dump_data(\@tls, indent => 0 ) -}],
dtls => [{- dump_data(\@dtls, indent => 0 ) -}],
);
# The following data is only used when this files is use as a script
my @makevars = ({- out_item(\@makevars ); -});
my %disabled_info = ({- out_item(\%disabled_info ); -});
my @makevars = ({- dump_data(\@makevars, indent => 0 ); -});
my %disabled_info = ({- dump_data(\%disabled_info, indent => 0 ); -});
my @user_crossable = qw( {- join (' ', @user_crossable) -} );
# If run directly, we can give some answers, and even reconfigure