mirror of
https://github.com/openssl/openssl.git
synced 2025-02-17 14:32:04 +08:00
build.info: Add the possibility to add dependencies on raw targets
We need to add something for the 'tests' target to depend on, so a special syntax for those is introduced: DEPEND[|tests|]=fipsmodule.cnf Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/14320)
This commit is contained in:
parent
8593ff00cc
commit
3f399e3787
@ -137,6 +137,8 @@
|
||||
# generated source file.
|
||||
sub dogenerate {
|
||||
my $src = shift;
|
||||
# Safety measure
|
||||
return "" unless defined $unified_info{generate}->{$_};
|
||||
return "" if $cache{$src};
|
||||
my $obj = shift;
|
||||
my $bin = shift;
|
||||
@ -171,6 +173,17 @@
|
||||
$cache{$src} = 1;
|
||||
}
|
||||
|
||||
sub dotarget {
|
||||
my $target = shift;
|
||||
return "" if $cache{$target};
|
||||
$OUT .= generatetarget(target => $target,
|
||||
deps => $unified_info{depends}->{$target});
|
||||
foreach (@{$unified_info{depends}->{$target}}) {
|
||||
dogenerate($_);
|
||||
}
|
||||
$cache{$target} = 1;
|
||||
}
|
||||
|
||||
# doobj is responsible for producing all the recipes that build
|
||||
# object files as well as dependency files.
|
||||
sub doobj {
|
||||
@ -463,11 +476,12 @@
|
||||
# Start with populating the cache with all the overrides
|
||||
%cache = map { $_ => 1 } @{$unified_info{overrides}};
|
||||
|
||||
# Build mandatory generated headers
|
||||
# Build mandatory header file generators
|
||||
foreach (@{$unified_info{depends}->{""}}) { dogenerate($_); }
|
||||
|
||||
# Build all known libraries, modules, programs and scripts.
|
||||
# Build all known targets, libraries, modules, programs and scripts.
|
||||
# Everything else will be handled as a consequence.
|
||||
foreach (@{$unified_info{targets}}) { dotarget($_); }
|
||||
foreach (@{$unified_info{libraries}}) { dolib($_); }
|
||||
foreach (@{$unified_info{modules}}) { domodule($_); }
|
||||
foreach (@{$unified_info{programs}}) { dobin($_); }
|
||||
|
@ -795,6 +795,14 @@ reconfigure reconf :
|
||||
return ([ @before ], [ @after ]);
|
||||
}
|
||||
|
||||
sub generatetarget {
|
||||
my %args = @_;
|
||||
my $deps = join(" ", @{$args{deps}});
|
||||
return <<"EOF";
|
||||
$args{target} : $deps
|
||||
EOF
|
||||
}
|
||||
|
||||
sub generatesrc {
|
||||
my %args = @_;
|
||||
my $generator = join(" ", @{$args{generator}});
|
||||
|
@ -1305,6 +1305,14 @@ reconfigure reconf:
|
||||
} @_;
|
||||
}
|
||||
|
||||
sub generatetarget {
|
||||
my %args = @_;
|
||||
my $deps = join(" ", @{$args{deps}});
|
||||
return <<"EOF";
|
||||
$args{target}: $deps
|
||||
EOF
|
||||
}
|
||||
|
||||
sub generatesrc {
|
||||
my %args = @_;
|
||||
my $generator = join(" ", @{$args{generator}});
|
||||
|
@ -627,6 +627,14 @@ reconfigure reconf:
|
||||
return map { platform->sharedlib_import($_) // platform->staticlib($_) } @_;
|
||||
}
|
||||
|
||||
sub generatetarget {
|
||||
my %args = @_;
|
||||
my $deps = join(" ", @{$args{deps}});
|
||||
return <<"EOF";
|
||||
$args{target}: $deps
|
||||
EOF
|
||||
}
|
||||
|
||||
sub generatesrc {
|
||||
my %args = @_;
|
||||
my ($gen0, @gens) = @{$args{generator}};
|
||||
|
22
Configure
22
Configure
@ -2330,12 +2330,22 @@ EOF
|
||||
|
||||
foreach (keys %depends) {
|
||||
my $dest = $_;
|
||||
my $ddest = $dest eq "" ? "" : cleanfile($sourced, $_, $blddir);
|
||||
my $ddest = $dest;
|
||||
|
||||
# If the destination doesn't exist in source, it can only be
|
||||
# a generated file in the build tree.
|
||||
if ($ddest ne "" && ($ddest eq $src_configdata || ! -f $ddest)) {
|
||||
$ddest = cleanfile($buildd, $_, $blddir);
|
||||
if ($dest =~ /^\|(.*)\|$/) {
|
||||
# Collect the raw target
|
||||
$unified_info{targets}->{$1} = 1;
|
||||
$ddest = $1;
|
||||
} elsif ($dest eq '') {
|
||||
$ddest = '';
|
||||
} else {
|
||||
$ddest = cleanfile($sourced, $_, $blddir);
|
||||
|
||||
# If the destination doesn't exist in source, it can only be
|
||||
# a generated file in the build tree.
|
||||
if ($ddest eq $src_configdata || ! -f $ddest) {
|
||||
$ddest = cleanfile($buildd, $_, $blddir);
|
||||
}
|
||||
}
|
||||
foreach (@{$depends{$dest}}) {
|
||||
my $d = cleanfile($sourced, $_, $blddir);
|
||||
@ -2628,7 +2638,7 @@ EOF
|
||||
|
||||
### Make unified_info a bit more efficient
|
||||
# One level structures
|
||||
foreach (("programs", "libraries", "modules", "scripts")) {
|
||||
foreach (("programs", "libraries", "modules", "scripts", "targets")) {
|
||||
$unified_info{$_} = [ sort keys %{$unified_info{$_}} ];
|
||||
}
|
||||
# Two level structures
|
||||
|
@ -444,6 +444,12 @@ rather than the specific I<items>.
|
||||
The I<items> may be any program, library, module, script, or any
|
||||
filename used as a value anywhere.
|
||||
|
||||
The I<items> may also be literal build file targets. Those are
|
||||
recognised by being surrounded be vertical bars (also known as the
|
||||
"pipe" character), C<|>. For example:
|
||||
|
||||
DEPEND[|tests|]=fipsmodule.cnf
|
||||
|
||||
B<DEPEND> statements may have attributes, which apply to each
|
||||
individual dependency in such a statement. For example:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user