mirror of https://github.com/openssl/openssl
Configure: rework build.info grammar and attributes
The build.info grammar's regular expressions were a horrible read. By assigning certain sub-expressions to variables, we hope to make it a little more readable. Also, the handling of build.info attributes is reworked to use a common function instead of having copies of the same code. Finally, the attributes are reorganized to specify if they belong with programs, libraries, modules or scripts. This will enable more intricate attribute assignment in changes to come. Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/10088)
This commit is contained in:
parent
12a765a523
commit
285daccdc0
|
@ -118,7 +118,7 @@
|
||||||
unless ($disabled{shared} || $lib =~ /\.a$/) {
|
unless ($disabled{shared} || $lib =~ /\.a$/) {
|
||||||
my $obj2shlib = defined &obj2shlib ? \&obj2shlib : \&libobj2shlib;
|
my $obj2shlib = defined &obj2shlib ? \&obj2shlib : \&libobj2shlib;
|
||||||
$OUT .= $obj2shlib->(lib => $lib,
|
$OUT .= $obj2shlib->(lib => $lib,
|
||||||
attrs => $unified_info{attributes}->{$lib},
|
attrs => $unified_info{attributes}->{libraries}->{$lib},
|
||||||
objs => $unified_info{shared_sources}->{$lib},
|
objs => $unified_info{shared_sources}->{$lib},
|
||||||
deps => [ reducedepends(resolvedepends($lib)) ]);
|
deps => [ reducedepends(resolvedepends($lib)) ]);
|
||||||
foreach ((@{$unified_info{shared_sources}->{$lib}},
|
foreach ((@{$unified_info{shared_sources}->{$lib}},
|
||||||
|
@ -127,18 +127,18 @@
|
||||||
# Otherwise, it might simply be generated
|
# Otherwise, it might simply be generated
|
||||||
if (defined $unified_info{sources}->{$_}) {
|
if (defined $unified_info{sources}->{$_}) {
|
||||||
doobj($_, $lib, intent => "shlib",
|
doobj($_, $lib, intent => "shlib",
|
||||||
attrs => $unified_info{attributes}->{$lib});
|
attrs => $unified_info{attributes}->{libraries}->{$lib});
|
||||||
} else {
|
} else {
|
||||||
dogenerate($_, undef, undef, intent => "lib");
|
dogenerate($_, undef, undef, intent => "lib");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$OUT .= obj2lib(lib => $lib,
|
$OUT .= obj2lib(lib => $lib,
|
||||||
attrs => $unified_info{attributes}->{$lib},
|
attrs => $unified_info{attributes}->{libraries}->{$lib},
|
||||||
objs => [ @{$unified_info{sources}->{$lib}} ]);
|
objs => [ @{$unified_info{sources}->{$lib}} ]);
|
||||||
foreach (@{$unified_info{sources}->{$lib}}) {
|
foreach (@{$unified_info{sources}->{$lib}}) {
|
||||||
doobj($_, $lib, intent => "lib",
|
doobj($_, $lib, intent => "lib",
|
||||||
attrs => $unified_info{attributes}->{$lib});
|
attrs => $unified_info{attributes}->{libraries}->{$lib});
|
||||||
}
|
}
|
||||||
$cache{$lib} = 1;
|
$cache{$lib} = 1;
|
||||||
}
|
}
|
||||||
|
@ -147,23 +147,23 @@
|
||||||
# obj2dso, and also makes sure all object files for the library
|
# obj2dso, and also makes sure all object files for the library
|
||||||
# are built.
|
# are built.
|
||||||
sub domodule {
|
sub domodule {
|
||||||
my $lib = shift;
|
my $module = shift;
|
||||||
return "" if $cache{$lib};
|
return "" if $cache{$module};
|
||||||
$OUT .= obj2dso(lib => $lib,
|
$OUT .= obj2dso(module => $module,
|
||||||
attrs => $unified_info{attributes}->{$lib},
|
attrs => $unified_info{attributes}->{modules}->{$module},
|
||||||
objs => $unified_info{sources}->{$lib},
|
objs => $unified_info{sources}->{$module},
|
||||||
deps => [ resolvedepends($lib) ]);
|
deps => [ resolvedepends($module) ]);
|
||||||
foreach (@{$unified_info{sources}->{$lib}}) {
|
foreach (@{$unified_info{sources}->{$module}}) {
|
||||||
# If this is somehow a compiled object, take care of it that way
|
# If this is somehow a compiled object, take care of it that way
|
||||||
# Otherwise, it might simply be generated
|
# Otherwise, it might simply be generated
|
||||||
if (defined $unified_info{sources}->{$_}) {
|
if (defined $unified_info{sources}->{$_}) {
|
||||||
doobj($_, $lib, intent => "dso",
|
doobj($_, $module, intent => "dso",
|
||||||
attrs => $unified_info{attributes}->{$lib});
|
attrs => $unified_info{attributes}->{modules}->{$module});
|
||||||
} else {
|
} else {
|
||||||
dogenerate($_, undef, $lib, intent => "dso");
|
dogenerate($_, undef, $module, intent => "dso");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$cache{$lib} = 1;
|
$cache{$module} = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
# dobin is responsible for building programs. It will call obj2bin,
|
# dobin is responsible for building programs. It will call obj2bin,
|
||||||
|
@ -173,7 +173,7 @@
|
||||||
return "" if $cache{$bin};
|
return "" if $cache{$bin};
|
||||||
my $deps = [ reducedepends(resolvedepends($bin)) ];
|
my $deps = [ reducedepends(resolvedepends($bin)) ];
|
||||||
$OUT .= obj2bin(bin => $bin,
|
$OUT .= obj2bin(bin => $bin,
|
||||||
attrs => $unified_info{attributes}->{$bin},
|
attrs => $unified_info{attributes}->{programs}->{$bin},
|
||||||
objs => [ @{$unified_info{sources}->{$bin}} ],
|
objs => [ @{$unified_info{sources}->{$bin}} ],
|
||||||
deps => $deps);
|
deps => $deps);
|
||||||
foreach (@{$unified_info{sources}->{$bin}}) {
|
foreach (@{$unified_info{sources}->{$bin}}) {
|
||||||
|
|
|
@ -48,26 +48,26 @@
|
||||||
@{$unified_info{libraries}};
|
@{$unified_info{libraries}};
|
||||||
our @install_libs =
|
our @install_libs =
|
||||||
map { platform->staticname($_) }
|
map { platform->staticname($_) }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst} }
|
grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
|
||||||
@{$unified_info{libraries}};
|
@{$unified_info{libraries}};
|
||||||
our @install_shlibs =
|
our @install_shlibs =
|
||||||
map { platform->sharedname($_) // () }
|
map { platform->sharedname($_) // () }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst} }
|
grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
|
||||||
@{$unified_info{libraries}};
|
@{$unified_info{libraries}};
|
||||||
our @install_engines =
|
our @install_engines =
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst}
|
grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
|
||||||
&& $unified_info{attributes}->{$_}->{engine} }
|
&& $unified_info{attributes}->{modules}->{$_}->{engine} }
|
||||||
@{$unified_info{modules}};
|
@{$unified_info{modules}};
|
||||||
our @install_programs =
|
our @install_programs =
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst} }
|
grep { !$unified_info{attributes}->{programs}->{$_}->{noinst} }
|
||||||
@{$unified_info{programs}};
|
@{$unified_info{programs}};
|
||||||
our @install_bin_scripts =
|
our @install_bin_scripts =
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst}
|
grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
|
||||||
&& !$unified_info{attributes}->{$_}->{misc} }
|
&& !$unified_info{attributes}->{scripts}->{$_}->{misc} }
|
||||||
@{$unified_info{scripts}};
|
@{$unified_info{scripts}};
|
||||||
our @install_misc_scripts =
|
our @install_misc_scripts =
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst}
|
grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
|
||||||
&& $unified_info{attributes}->{$_}->{misc} }
|
&& $unified_info{attributes}->{scripts}->{$_}->{misc} }
|
||||||
@{$unified_info{scripts}};
|
@{$unified_info{scripts}};
|
||||||
|
|
||||||
# This is a horrible hack, but is needed because recursive inclusion of files
|
# This is a horrible hack, but is needed because recursive inclusion of files
|
||||||
|
@ -704,7 +704,7 @@ reconfigure reconf :
|
||||||
# On Unix platforms, we depend on {shlibname}.so
|
# On Unix platforms, we depend on {shlibname}.so
|
||||||
return map {
|
return map {
|
||||||
{ lib => platform->sharedlib($_) // platform->staticlib($_),
|
{ lib => platform->sharedlib($_) // platform->staticlib($_),
|
||||||
attrs => $unified_info{attributes}->{$_} }
|
attrs => $unified_info{attributes}->{libraries}->{$_} }
|
||||||
} @_;
|
} @_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1014,8 +1014,8 @@ EOF
|
||||||
}
|
}
|
||||||
sub obj2dso {
|
sub obj2dso {
|
||||||
my %args = @_;
|
my %args = @_;
|
||||||
my $dsoname = platform->dsoname($args{lib});
|
my $dsoname = platform->dsoname($args{module});
|
||||||
my $dso = platform->dso($args{lib});
|
my $dso = platform->dso($args{module});
|
||||||
my @objs = map { platform->convertext($_) }
|
my @objs = map { platform->convertext($_) }
|
||||||
grep { platform->isobj($_) }
|
grep { platform->isobj($_) }
|
||||||
@{$args{objs}};
|
@{$args{objs}};
|
||||||
|
|
|
@ -54,44 +54,44 @@ GENERATED={- # common0.tmpl provides @generated
|
||||||
|
|
||||||
INSTALL_LIBS={-
|
INSTALL_LIBS={-
|
||||||
join(" ", map { platform->staticlib($_) // () }
|
join(" ", map { platform->staticlib($_) // () }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst} }
|
grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
|
||||||
@{$unified_info{libraries}})
|
@{$unified_info{libraries}})
|
||||||
-}
|
-}
|
||||||
INSTALL_SHLIBS={-
|
INSTALL_SHLIBS={-
|
||||||
join(" ", map { platform->sharedlib($_) // () }
|
join(" ", map { platform->sharedlib($_) // () }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst} }
|
grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
|
||||||
@{$unified_info{libraries}})
|
@{$unified_info{libraries}})
|
||||||
-}
|
-}
|
||||||
INSTALL_SHLIB_INFO={-
|
INSTALL_SHLIB_INFO={-
|
||||||
join(" ", map { my $x = platform->sharedlib($_);
|
join(" ", map { my $x = platform->sharedlib($_);
|
||||||
my $y = platform->sharedlib_simple($_);
|
my $y = platform->sharedlib_simple($_);
|
||||||
$x ? "\"$x;$y\"" : () }
|
$x ? "\"$x;$y\"" : () }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst} }
|
grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
|
||||||
@{$unified_info{libraries}})
|
@{$unified_info{libraries}})
|
||||||
-}
|
-}
|
||||||
INSTALL_ENGINES={-
|
INSTALL_ENGINES={-
|
||||||
join(" ", map { platform->dso($_) }
|
join(" ", map { platform->dso($_) }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst}
|
grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
|
||||||
&& $unified_info{attributes}->{$_}->{engine} }
|
&& $unified_info{attributes}->{modules}->{$_}->{engine} }
|
||||||
@{$unified_info{modules}})
|
@{$unified_info{modules}})
|
||||||
-}
|
-}
|
||||||
INSTALL_PROGRAMS={-
|
INSTALL_PROGRAMS={-
|
||||||
join(" ", map { platform->bin($_) }
|
join(" ", map { platform->bin($_) }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst} }
|
grep { !$unified_info{attributes}->{programs}->{$_}->{noinst} }
|
||||||
@{$unified_info{programs}})
|
@{$unified_info{programs}})
|
||||||
-}
|
-}
|
||||||
BIN_SCRIPTS={-
|
BIN_SCRIPTS={-
|
||||||
join(" ", map { my $x = $unified_info{attributes}->{$_}->{linkname};
|
join(" ", map { my $x = $unified_info{attributes}->{scripts}->{$_}->{linkname};
|
||||||
$x ? "$_:$x" : $_ }
|
$x ? "$_:$x" : $_ }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst}
|
grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
|
||||||
&& !$unified_info{attributes}->{$_}->{misc} }
|
&& !$unified_info{attributes}->{scripts}->{$_}->{misc} }
|
||||||
@{$unified_info{scripts}})
|
@{$unified_info{scripts}})
|
||||||
-}
|
-}
|
||||||
MISC_SCRIPTS={-
|
MISC_SCRIPTS={-
|
||||||
join(" ", map { my $x = $unified_info{attributes}->{$_}->{linkname};
|
join(" ", map { my $x = $unified_info{attributes}->{scripts}->{$_}->{linkname};
|
||||||
$x ? "$_:$x" : $_ }
|
$x ? "$_:$x" : $_ }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst}
|
grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
|
||||||
&& $unified_info{attributes}->{$_}->{misc} }
|
&& $unified_info{attributes}->{scripts}->{$_}->{misc} }
|
||||||
@{$unified_info{scripts}})
|
@{$unified_info{scripts}})
|
||||||
-}
|
-}
|
||||||
|
|
||||||
|
@ -1156,7 +1156,7 @@ EOF
|
||||||
}
|
}
|
||||||
sub obj2dso {
|
sub obj2dso {
|
||||||
my %args = @_;
|
my %args = @_;
|
||||||
my $dso = platform->dso($args{lib});
|
my $dso = platform->dso($args{module});
|
||||||
my @linkdirs = ();
|
my @linkdirs = ();
|
||||||
foreach (@{args{deps}}) {
|
foreach (@{args{deps}}) {
|
||||||
my $d = dirname($_);
|
my $d = dirname($_);
|
||||||
|
|
|
@ -62,53 +62,53 @@ GENERATED={- # common0.tmpl provides @generated
|
||||||
INSTALL_LIBS={-
|
INSTALL_LIBS={-
|
||||||
join(" ", map { quotify1(platform->sharedlib_import($_)
|
join(" ", map { quotify1(platform->sharedlib_import($_)
|
||||||
// platform->staticlib($_)) }
|
// platform->staticlib($_)) }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst} }
|
grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
|
||||||
@{$unified_info{libraries}})
|
@{$unified_info{libraries}})
|
||||||
-}
|
-}
|
||||||
INSTALL_SHLIBS={-
|
INSTALL_SHLIBS={-
|
||||||
join(" ", map { my $x = platform->sharedlib($_);
|
join(" ", map { my $x = platform->sharedlib($_);
|
||||||
$x ? quotify_l($x) : () }
|
$x ? quotify_l($x) : () }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst} }
|
grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
|
||||||
@{$unified_info{libraries}})
|
@{$unified_info{libraries}})
|
||||||
-}
|
-}
|
||||||
INSTALL_SHLIBPDBS={-
|
INSTALL_SHLIBPDBS={-
|
||||||
join(" ", map { my $x = platform->sharedlibpdb($_);
|
join(" ", map { my $x = platform->sharedlibpdb($_);
|
||||||
$x ? quotify_l($x) : () }
|
$x ? quotify_l($x) : () }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst} }
|
grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
|
||||||
@{$unified_info{libraries}})
|
@{$unified_info{libraries}})
|
||||||
-}
|
-}
|
||||||
INSTALL_ENGINES={-
|
INSTALL_ENGINES={-
|
||||||
join(" ", map { quotify1(platform->dso($_)) }
|
join(" ", map { quotify1(platform->dso($_)) }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst}
|
grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
|
||||||
&& $unified_info{attributes}->{$_}->{engine} }
|
&& $unified_info{attributes}->{modules}->{$_}->{engine} }
|
||||||
@{$unified_info{modules}})
|
@{$unified_info{modules}})
|
||||||
-}
|
-}
|
||||||
INSTALL_ENGINEPDBS={-
|
INSTALL_ENGINEPDBS={-
|
||||||
join(" ", map { quotify1(platform->dsopdb($_)) }
|
join(" ", map { quotify1(platform->dsopdb($_)) }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst}
|
grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
|
||||||
&& $unified_info{attributes}->{$_}->{engine} }
|
&& $unified_info{attributes}->{modules}->{$_}->{engine} }
|
||||||
@{$unified_info{modules}})
|
@{$unified_info{modules}})
|
||||||
-}
|
-}
|
||||||
INSTALL_PROGRAMS={-
|
INSTALL_PROGRAMS={-
|
||||||
join(" ", map { quotify1(platform->bin($_)) }
|
join(" ", map { quotify1(platform->bin($_)) }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst} }
|
grep { !$unified_info{attributes}->{programs}->{$_}->{noinst} }
|
||||||
@{$unified_info{programs}})
|
@{$unified_info{programs}})
|
||||||
-}
|
-}
|
||||||
INSTALL_PROGRAMPDBS={-
|
INSTALL_PROGRAMPDBS={-
|
||||||
join(" ", map { quotify1(platform->binpdb($_)) }
|
join(" ", map { quotify1(platform->binpdb($_)) }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst} }
|
grep { !$unified_info{attributes}->{programs}->{$_}->{noinst} }
|
||||||
@{$unified_info{programs}})
|
@{$unified_info{programs}})
|
||||||
-}
|
-}
|
||||||
BIN_SCRIPTS={-
|
BIN_SCRIPTS={-
|
||||||
join(" ", map { quotify1($_) }
|
join(" ", map { quotify1($_) }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst}
|
grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
|
||||||
&& !$unified_info{attributes}->{$_}->{misc} }
|
&& !$unified_info{attributes}->{scripts}->{$_}->{misc} }
|
||||||
@{$unified_info{scripts}})
|
@{$unified_info{scripts}})
|
||||||
-}
|
-}
|
||||||
MISC_SCRIPTS={-
|
MISC_SCRIPTS={-
|
||||||
join(" ", map { quotify1($_) }
|
join(" ", map { quotify1($_) }
|
||||||
grep { !$unified_info{attributes}->{$_}->{noinst}
|
grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
|
||||||
&& $unified_info{attributes}->{$_}->{misc} }
|
&& $unified_info{attributes}->{scripts}->{$_}->{misc} }
|
||||||
@{$unified_info{scripts}})
|
@{$unified_info{scripts}})
|
||||||
-}
|
-}
|
||||||
|
|
||||||
|
@ -714,8 +714,8 @@ EOF
|
||||||
}
|
}
|
||||||
sub obj2dso {
|
sub obj2dso {
|
||||||
my %args = @_;
|
my %args = @_;
|
||||||
my $dso = platform->dso($args{lib});
|
my $dso = platform->dso($args{module});
|
||||||
my $dso_n = platform->dsoname($args{lib});
|
my $dso_n = platform->dsoname($args{module});
|
||||||
my @objs = map { platform->convertext($_) }
|
my @objs = map { platform->convertext($_) }
|
||||||
grep { platform->isobj($_) || platform->isres($_) }
|
grep { platform->isobj($_) || platform->isres($_) }
|
||||||
@{$args{objs}};
|
@{$args{objs}};
|
||||||
|
|
197
Configure
197
Configure
|
@ -1724,7 +1724,6 @@ if ($builder eq "unified") {
|
||||||
my @modules = ();
|
my @modules = ();
|
||||||
my @scripts = ();
|
my @scripts = ();
|
||||||
|
|
||||||
my %attributes = ();
|
|
||||||
my %sources = ();
|
my %sources = ();
|
||||||
my %shared_sources = ();
|
my %shared_sources = ();
|
||||||
my %includes = ();
|
my %includes = ();
|
||||||
|
@ -1737,7 +1736,7 @@ if ($builder eq "unified") {
|
||||||
# contains a dollar sign, it had better be escaped, or it will be
|
# contains a dollar sign, it had better be escaped, or it will be
|
||||||
# taken for a variable name prefix.
|
# taken for a variable name prefix.
|
||||||
my %variables = ();
|
my %variables = ();
|
||||||
my $variable_re = qr/\$([[:alpha:]][[:alnum:]_]*)/;
|
my $variable_re = qr/\$(?P<VARIABLE>[[:alpha:]][[:alnum:]_]*)/;
|
||||||
my $expand_variables = sub {
|
my $expand_variables = sub {
|
||||||
my $value = '';
|
my $value = '';
|
||||||
my $value_rest = shift;
|
my $value_rest = shift;
|
||||||
|
@ -1748,7 +1747,7 @@ if ($builder eq "unified") {
|
||||||
}
|
}
|
||||||
while ($value_rest =~ /(?<!\\)${variable_re}/) {
|
while ($value_rest =~ /(?<!\\)${variable_re}/) {
|
||||||
$value .= $`;
|
$value .= $`;
|
||||||
$value .= $variables{$1};
|
$value .= $variables{$+{VARIABLE}};
|
||||||
$value_rest = $';
|
$value_rest = $';
|
||||||
}
|
}
|
||||||
if ($ENV{CONFIGURE_DEBUG_VARIABLE_EXPAND}) {
|
if ($ENV{CONFIGURE_DEBUG_VARIABLE_EXPAND}) {
|
||||||
|
@ -1758,6 +1757,35 @@ if ($builder eq "unified") {
|
||||||
return $value . $value_rest;
|
return $value . $value_rest;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Support for attributes in build.info files
|
||||||
|
my %attributes = ();
|
||||||
|
my $handle_attributes = sub {
|
||||||
|
my $attr_str = shift;
|
||||||
|
my $ref = shift;
|
||||||
|
my @goals = @_;
|
||||||
|
|
||||||
|
return unless defined $attr_str;
|
||||||
|
|
||||||
|
my @a = tokenize($attr_str, qr|\s*,\s*|);
|
||||||
|
foreach my $a (@a) {
|
||||||
|
my $ac = 1;
|
||||||
|
my $ak = $a;
|
||||||
|
my $av = 1;
|
||||||
|
if ($a =~ m|^(!)?(.*?)\s* = \s*(.*?)$|) {
|
||||||
|
$ac = ! $1;
|
||||||
|
$ak = $1;
|
||||||
|
$av = $2;
|
||||||
|
}
|
||||||
|
foreach my $g (@goals) {
|
||||||
|
if ($ac) {
|
||||||
|
$$ref->{$g}->{$ak} = $av;
|
||||||
|
} else {
|
||||||
|
delete $$ref->{$g}->{$ak};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
# We want to detect configdata.pm in the source tree, so we
|
# We want to detect configdata.pm in the source tree, so we
|
||||||
# don't use it if the build tree is different.
|
# don't use it if the build tree is different.
|
||||||
my $src_configdata = cleanfile($srcdir, "configdata.pm", $blddir);
|
my $src_configdata = cleanfile($srcdir, "configdata.pm", $blddir);
|
||||||
|
@ -1787,153 +1815,122 @@ if ($builder eq "unified") {
|
||||||
# 1 last was positive (don't skip lines until next ELSE, ELSIF or ENDIF)
|
# 1 last was positive (don't skip lines until next ELSE, ELSIF or ENDIF)
|
||||||
# 2 positive ELSE (following ELSIF should fail)
|
# 2 positive ELSE (following ELSIF should fail)
|
||||||
my @skip = ();
|
my @skip = ();
|
||||||
|
|
||||||
|
# A few useful generic regexps
|
||||||
|
my $index_re = qr/\[\s*(?P<INDEX>(?:\\.|.)*?)\s*\]/;
|
||||||
|
my $cond_re = qr/\[\s*(?P<COND>(?:\\.|.)*?)\s*\]/;
|
||||||
|
my $attribs_re = qr/(?:\{\s*(?P<ATTRIBS>(?:\\.|.)*?)\s*\})?/;
|
||||||
|
my $value_re = qr/\s*(?P<VALUE>.*?)\s*/;
|
||||||
collect_information(
|
collect_information(
|
||||||
collect_from_array([ @text ],
|
collect_from_array([ @text ],
|
||||||
qr/\\$/ => sub { my $l1 = shift; my $l2 = shift;
|
qr/\\$/ => sub { my $l1 = shift; my $l2 = shift;
|
||||||
$l1 =~ s/\\$//; $l1.$l2 }),
|
$l1 =~ s/\\$//; $l1.$l2 }),
|
||||||
# Info we're looking for
|
# Info we're looking for
|
||||||
qr/^\s*IF\[((?:\\.|[^\\\]])*)\]\s*$/
|
qr/^\s* IF ${cond_re} \s*$/x
|
||||||
=> sub {
|
=> sub {
|
||||||
if (! @skip || $skip[$#skip] > 0) {
|
if (! @skip || $skip[$#skip] > 0) {
|
||||||
push @skip, !! $expand_variables->($1);
|
push @skip, !! $expand_variables->($+{COND});
|
||||||
} else {
|
} else {
|
||||||
push @skip, -1;
|
push @skip, -1;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
qr/^\s*ELSIF\[((?:\\.|[^\\\]])*)\]\s*$/
|
qr/^\s* ELSIF ${cond_re} \s*$/x
|
||||||
=> sub { die "ELSIF out of scope" if ! @skip;
|
=> sub { die "ELSIF out of scope" if ! @skip;
|
||||||
die "ELSIF following ELSE" if abs($skip[$#skip]) == 2;
|
die "ELSIF following ELSE" if abs($skip[$#skip]) == 2;
|
||||||
$skip[$#skip] = -1 if $skip[$#skip] != 0;
|
$skip[$#skip] = -1 if $skip[$#skip] != 0;
|
||||||
$skip[$#skip] = !! $expand_variables->($1)
|
$skip[$#skip] = !! $expand_variables->($+{COND})
|
||||||
if $skip[$#skip] == 0; },
|
if $skip[$#skip] == 0; },
|
||||||
qr/^\s*ELSE\s*$/
|
qr/^\s* ELSE \s*$/x
|
||||||
=> sub { die "ELSE out of scope" if ! @skip;
|
=> sub { die "ELSE out of scope" if ! @skip;
|
||||||
$skip[$#skip] = -2 if $skip[$#skip] != 0;
|
$skip[$#skip] = -2 if $skip[$#skip] != 0;
|
||||||
$skip[$#skip] = 2 if $skip[$#skip] == 0; },
|
$skip[$#skip] = 2 if $skip[$#skip] == 0; },
|
||||||
qr/^\s*ENDIF\s*$/
|
qr/^\s* ENDIF \s*$/x
|
||||||
=> sub { die "ENDIF out of scope" if ! @skip;
|
=> sub { die "ENDIF out of scope" if ! @skip;
|
||||||
pop @skip; },
|
pop @skip; },
|
||||||
qr/^\s*${variable_re}\s*=\s*(.*?)\s*$/
|
qr/^\s* ${variable_re} \s* = ${value_re} $/x
|
||||||
=> sub {
|
=> sub {
|
||||||
if (!@skip || $skip[$#skip] > 0) {
|
if (!@skip || $skip[$#skip] > 0) {
|
||||||
my $n = $1;
|
$variables{$+{VARIABLE}} = $expand_variables->($+{VALUE});
|
||||||
my $v = $2;
|
|
||||||
$variables{$n} = $expand_variables->($v);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
qr/^\s*SUBDIRS\s*=\s*(.*)\s*$/
|
qr/^\s* SUBDIRS \s* = ${value_re} $/x
|
||||||
=> sub {
|
=> sub {
|
||||||
if (!@skip || $skip[$#skip] > 0) {
|
if (!@skip || $skip[$#skip] > 0) {
|
||||||
foreach (tokenize($expand_variables->($1))) {
|
foreach (tokenize($expand_variables->($+{VALUE}))) {
|
||||||
push @build_dirs, [ @curd, splitdir($_, 1) ];
|
push @build_dirs, [ @curd, splitdir($_, 1) ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
qr/^\s*PROGRAMS(?:{([\w=]+(?:\s*,\s*[\w=]+)*)})?\s*=\s*(.*)\s*$/
|
qr/^\s* PROGRAMS ${attribs_re} \s* = ${value_re} $/x
|
||||||
=> sub {
|
=> sub {
|
||||||
if (!@skip || $skip[$#skip] > 0) {
|
if (!@skip || $skip[$#skip] > 0) {
|
||||||
my @a = tokenize($1, qr|\s*,\s*|);
|
my @p = tokenize($expand_variables->($+{VALUE}));
|
||||||
my @p = tokenize($expand_variables->($2));
|
|
||||||
push @programs, @p;
|
push @programs, @p;
|
||||||
foreach my $a (@a) {
|
$handle_attributes->($+{ATTRIBS},
|
||||||
my $ak = $a;
|
\$attributes{programs},
|
||||||
my $av = 1;
|
@p);
|
||||||
if ($a =~ m|^(.*?)\s*=\s*(.*?)$|) {
|
|
||||||
$ak = $1;
|
|
||||||
$av = $2;
|
|
||||||
}
|
|
||||||
foreach my $p (@p) {
|
|
||||||
$attributes{$p}->{$ak} = $av;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
qr/^\s*LIBS(?:{([\w=]+(?:\s*,\s*[\w=]+)*)})?\s*=\s*(.*)\s*$/
|
qr/^\s* LIBS ${attribs_re} \s* = ${value_re} $/x
|
||||||
=> sub {
|
=> sub {
|
||||||
if (!@skip || $skip[$#skip] > 0) {
|
if (!@skip || $skip[$#skip] > 0) {
|
||||||
my @a = tokenize($1, qr|\s*,\s*|);
|
my @l = tokenize($expand_variables->($+{VALUE}));
|
||||||
my @l = tokenize($expand_variables->($2));
|
|
||||||
push @libraries, @l;
|
push @libraries, @l;
|
||||||
foreach my $a (@a) {
|
$handle_attributes->($+{ATTRIBS},
|
||||||
my $ak = $a;
|
\$attributes{libraries},
|
||||||
my $av = 1;
|
@l);
|
||||||
if ($a =~ m|^(.*?)\s*=\s*(.*?)$|) {
|
|
||||||
$ak = $1;
|
|
||||||
$av = $2;
|
|
||||||
}
|
|
||||||
foreach my $l (@l) {
|
|
||||||
$attributes{$l}->{$ak} = $av;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
qr/^\s*MODULES(?:{([\w=]+(?:\s*,\s*[\w=]+)*)})?\s*=\s*(.*)\s*$/
|
qr/^\s* MODULES ${attribs_re} \s* = ${value_re} $/x
|
||||||
=> sub {
|
=> sub {
|
||||||
if (!@skip || $skip[$#skip] > 0) {
|
if (!@skip || $skip[$#skip] > 0) {
|
||||||
my @a = tokenize($1, qr|\s*,\s*|);
|
my @m = tokenize($expand_variables->($+{VALUE}));
|
||||||
my @m = tokenize($expand_variables->($2));
|
|
||||||
push @modules, @m;
|
push @modules, @m;
|
||||||
foreach my $a (@a) {
|
$handle_attributes->($+{ATTRIBS},
|
||||||
my $ak = $a;
|
\$attributes{modules},
|
||||||
my $av = 1;
|
@m);
|
||||||
if ($a =~ m|^(.*?)\s*=\s*(.*?)$|) {
|
|
||||||
$ak = $1;
|
|
||||||
$av = $2;
|
|
||||||
}
|
|
||||||
foreach my $m (@m) {
|
|
||||||
$attributes{$m}->{$ak} = $av;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
qr/^\s*SCRIPTS(?:{([\w=]+(?:\s*,\s*[\w=]+)*)})?\s*=\s*(.*)\s*$/
|
qr/^\s* SCRIPTS ${attribs_re} \s* = ${value_re} $/x
|
||||||
=> sub {
|
=> sub {
|
||||||
if (!@skip || $skip[$#skip] > 0) {
|
if (!@skip || $skip[$#skip] > 0) {
|
||||||
my @a = tokenize($1, qr|\s*,\s*|);
|
my @s = tokenize($expand_variables->($+{VALUE}));
|
||||||
my @s = tokenize($expand_variables->($2));
|
|
||||||
push @scripts, @s;
|
push @scripts, @s;
|
||||||
foreach my $a (@a) {
|
$handle_attributes->($+{ATTRIBS},
|
||||||
my $ak = $a;
|
\$attributes{scripts},
|
||||||
my $av = 1;
|
@s);
|
||||||
if ($a =~ m|^(.*?)\s*=\s*(.*?)$|) {
|
|
||||||
$ak = $1;
|
|
||||||
$av = $2;
|
|
||||||
}
|
|
||||||
foreach my $s (@s) {
|
|
||||||
$attributes{$s}->{$ak} = $av;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
qr/^\s*ORDINALS\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/,
|
qr/^\s* ORDINALS ${index_re} = ${value_re} $/x
|
||||||
=> sub { push @{$ordinals{$expand_variables->($1)}},
|
=> sub { push @{$ordinals{$expand_variables->($+{INDEX})}},
|
||||||
tokenize($expand_variables->($2))
|
tokenize($expand_variables->($+{VALUE}))
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*SOURCE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
qr/^\s* SOURCE ${index_re} = ${value_re} $/x
|
||||||
=> sub { push @{$sources{$expand_variables->($1)}},
|
=> sub { push @{$sources{$expand_variables->($+{INDEX})}},
|
||||||
tokenize($expand_variables->($2))
|
tokenize($expand_variables->($+{VALUE}))
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*SHARED_SOURCE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
qr/^\s* SHARED_SOURCE ${index_re} = ${value_re} $/x
|
||||||
=> sub { push @{$shared_sources{$expand_variables->($1)}},
|
=> sub { push @{$shared_sources{$expand_variables->($+{INDEX})}},
|
||||||
tokenize($expand_variables->($2))
|
tokenize($expand_variables->($+{VALUE}))
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*INCLUDE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
qr/^\s* INCLUDE ${index_re} = ${value_re} $/x
|
||||||
=> sub { push @{$includes{$expand_variables->($1)}},
|
=> sub { push @{$includes{$expand_variables->($+{INDEX})}},
|
||||||
tokenize($expand_variables->($2))
|
tokenize($expand_variables->($+{VALUE}))
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*DEFINE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
qr/^\s* DEFINE ${index_re} = ${value_re} $/x
|
||||||
=> sub { push @{$defines{$expand_variables->($1)}},
|
=> sub { push @{$defines{$expand_variables->($+{INDEX})}},
|
||||||
tokenize($expand_variables->($2))
|
tokenize($expand_variables->($+{VALUE}))
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*DEPEND\[((?:\\.|[^\\\]])*)\]\s*=\s*(.*)\s*$/
|
qr/^\s* DEPEND ${index_re} = ${value_re} $/x
|
||||||
=> sub { push @{$depends{$expand_variables->($1)}},
|
=> sub { push @{$depends{$expand_variables->($+{INDEX})}},
|
||||||
tokenize($expand_variables->($2))
|
tokenize($expand_variables->($+{VALUE}))
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*GENERATE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
qr/^\s* GENERATE ${index_re} = ${value_re} $/x
|
||||||
=> sub { push @{$generate{$expand_variables->($1)}}, $2
|
=> sub { push @{$generate{$expand_variables->($+{INDEX})}},
|
||||||
|
$+{VALUE}
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*(?:#.*)?$/ => sub { },
|
qr/^\s* (?:\#.*)? $/x => sub { },
|
||||||
"OTHERWISE" => sub { die "Something wrong with this line:\n$_\nat $sourced/$f" },
|
"OTHERWISE" => sub { die "Something wrong with this line:\n$_\nat $sourced/$f" },
|
||||||
"BEFORE" => sub {
|
"BEFORE" => sub {
|
||||||
if ($buildinfo_debug) {
|
if ($buildinfo_debug) {
|
||||||
|
@ -1949,7 +1946,7 @@ if ($builder eq "unified") {
|
||||||
);
|
);
|
||||||
die "runaway IF?" if (@skip);
|
die "runaway IF?" if (@skip);
|
||||||
|
|
||||||
if (grep { defined $attributes{$_}->{engine} } keys %attributes
|
if (grep { defined $attributes{modules}->{$_}->{engine} } keys %attributes
|
||||||
and !$config{dynamic_engines}) {
|
and !$config{dynamic_engines}) {
|
||||||
die <<"EOF"
|
die <<"EOF"
|
||||||
ENGINES can only be used if configured with 'dynamic-engine'.
|
ENGINES can only be used if configured with 'dynamic-engine'.
|
||||||
|
@ -1957,15 +1954,6 @@ This is usually a fault in a build.info file.
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (keys %attributes) {
|
|
||||||
my $dest = $_;
|
|
||||||
my $ddest = cleanfile($buildd, $_, $blddir);
|
|
||||||
foreach (keys %{$attributes{$dest} // {}}) {
|
|
||||||
$unified_info{attributes}->{$ddest}->{$_} =
|
|
||||||
$attributes{$dest}->{$_};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
my %infos = ( programs => [ @programs ],
|
my %infos = ( programs => [ @programs ],
|
||||||
libraries => [ @libraries ],
|
libraries => [ @libraries ],
|
||||||
|
@ -1975,6 +1963,11 @@ EOF
|
||||||
foreach (@{$infos{$k}}) {
|
foreach (@{$infos{$k}}) {
|
||||||
my $item = cleanfile($buildd, $_, $blddir);
|
my $item = cleanfile($buildd, $_, $blddir);
|
||||||
$unified_info{$k}->{$item} = 1;
|
$unified_info{$k}->{$item} = 1;
|
||||||
|
|
||||||
|
# Fix up associated attributes
|
||||||
|
$unified_info{attributes}->{$k}->{$item} =
|
||||||
|
$attributes{$k}->{$_}
|
||||||
|
if defined $attributes{$k}->{$_};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue