Skip to content

Commit

Permalink
Configuration: when building the dirinfo structure, include shared_so…
Browse files Browse the repository at this point in the history
…urces

This makes sure that any resulting directory target in the build files
also depend on object files meant for shared libraries.

As a side effect, we move the production of the dirinfo structure from
common.tmpl to Configure, to make it easier to check the result.

Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from #7452)

(cherry picked from commit b6e6607)
  • Loading branch information
levitte committed Oct 31, 2018
1 parent 3b1928f commit 222b0a8
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 43 deletions.
41 changes: 0 additions & 41 deletions Configurations/common.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -203,47 +203,6 @@
# Start with populating the cache with all the overrides
%cache = map { $_ => 1 } @{$unified_info{overrides}};

# For convenience collect information regarding directories where
# files are generated, those generated files and the end product
# they end up in where applicable. Then, add build rules for those
# directories
if (exists &generatedir) {
my %loopinfo = ( "dso" => [ @{$unified_info{engines}} ],
"lib" => [ @{$unified_info{libraries}} ],
"bin" => [ @{$unified_info{programs}} ],
"script" => [ @{$unified_info{scripts}} ] );
foreach my $type (keys %loopinfo) {
foreach my $product (@{$loopinfo{$type}}) {
my %dirs = ();
my $pd = dirname($product);

# We already have a "test" target, and the current directory
# is just silly to make a target for
$dirs{$pd} = 1 unless $pd eq "test" || $pd eq ".";

foreach (@{$unified_info{sources}->{$product}}) {
my $d = dirname($_);

# We don't want to create targets for source directories
# when building out of source
next if ($config{sourcedir} ne $config{builddir}
&& $d =~ m|^\Q$config{sourcedir}\E|);
# We already have a "test" target, and the current directory
# is just silly to make a target for
next if $d eq "test" || $d eq ".";

$dirs{$d} = 1;
push @{$unified_info{dirinfo}->{$d}->{deps}}, $_
if $d ne $pd;
}
foreach (keys %dirs) {
push @{$unified_info{dirinfo}->{$_}->{products}->{$type}},
$product;
}
}
}
}

# Build mandatory generated headers
foreach (@{$unified_info{depends}->{""}}) { dogenerate($_); }

Expand Down
6 changes: 5 additions & 1 deletion Configurations/unix-Makefile.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -1242,6 +1242,10 @@ EOF
lib => $libext,
bin => $exeext );

# We already have a 'test' target, and the top directory is just plain
# silly
return if $dir eq "test" || $dir eq ".";

foreach my $type (("dso", "lib", "bin", "script")) {
next unless defined($unified_info{dirinfo}->{$dir}->{products}->{$type});
# For lib object files, we could update the library. However, it
Expand All @@ -1262,7 +1266,7 @@ EOF
my $deps = join(" ", @deps);
my $actions = join("\n", "", @actions);
return <<"EOF";
$args{dir} $args{dir}/: $deps$actions
$dir $dir/: $deps$actions
EOF
}
"" # Important! This becomes part of the template result.
Expand Down
6 changes: 5 additions & 1 deletion Configurations/windows-makefile.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -725,6 +725,10 @@ EOF
lib => $libext,
bin => $exeext );

# We already have a 'test' target, and the top directory is just plain
# silly
return if $dir eq "test" || $dir eq ".";

foreach my $type (("dso", "lib", "bin", "script")) {
next unless defined($unified_info{dirinfo}->{$dir}->{products}->{$type});
# For lib object files, we could update the library. However,
Expand All @@ -742,7 +746,7 @@ EOF
my $deps = join(" ", @deps);
my $actions = join("\n", "", @actions);
return <<"EOF";
$args{dir} $args{dir}\\ : $deps$actions
$dir $dir\\ : $deps$actions
EOF
}
"" # Important! This becomes part of the template result.
Expand Down
36 changes: 36 additions & 0 deletions Configure
Original file line number Diff line number Diff line change
Expand Up @@ -2243,6 +2243,42 @@ EOF
[ @{$unified_info{includes}->{$dest}->{source}} ];
}
}

# For convenience collect information regarding directories where
# files are generated, those generated files and the end product
# they end up in where applicable. Then, add build rules for those
# directories
my %loopinfo = ( "lib" => [ @{$unified_info{libraries}} ],
"dso" => [ @{$unified_info{engines}} ],
"bin" => [ @{$unified_info{programs}} ],
"script" => [ @{$unified_info{scripts}} ] );
foreach my $type (keys %loopinfo) {
foreach my $product (@{$loopinfo{$type}}) {
my %dirs = ();
my $pd = dirname($product);

foreach (@{$unified_info{sources}->{$product}},
@{$unified_info{shared_sources}->{$product} // []}) {
my $d = dirname($_);

# We don't want to create targets for source directories
# when building out of source
next if ($config{sourcedir} ne $config{builddir}
&& $d =~ m|^\Q$config{sourcedir}\E|);
# We already have a "test" target, and the current directory
# is just silly to make a target for
next if $d eq "test" || $d eq ".";

$dirs{$d} = 1;
push @{$unified_info{dirinfo}->{$d}->{deps}}, $_
if $d ne $pd;
}
foreach (keys %dirs) {
push @{$unified_info{dirinfo}->{$_}->{products}->{$type}},
$product;
}
}
}
}

# For the schemes that need it, we provide the old *_obj configs
Expand Down

0 comments on commit 222b0a8

Please sign in to comment.