aboutsummaryrefslogtreecommitdiffstats
path: root/Configurations/common.tmpl
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2016-04-02 22:26:38 +0200
committerRichard Levitte <levitte@openssl.org>2016-06-04 20:33:46 +0200
commit0ad1d94df4f844eec8eb7ff404582253b4a3cfae (patch)
tree64ac8f27ae7520106c273ba17e30b32d28efea79 /Configurations/common.tmpl
parent578b55144121b83a96e780f241f614759c75d1b5 (diff)
downloadopenssl-0ad1d94df4f844eec8eb7ff404582253b4a3cfae.tar.gz
Add developer targets for each subdirectory we have something to build in
Previous build scheme allowed building just the stuff in one subdirectory, like this: make -C crypto/aes Because the unified only has a top-level Makefile, this is not possible with it. This change adds a replacement where each directory we have something to build in becomes a target in its own right, allowing building something like this: make crypto/aes The exception is the directory test, because we already have such a target. Reviewed-by: Stephen Henson <steve@openssl.org>
Diffstat (limited to 'Configurations/common.tmpl')
-rw-r--r--Configurations/common.tmpl46
1 files changed, 44 insertions, 2 deletions
diff --git a/Configurations/common.tmpl b/Configurations/common.tmpl
index e3f49e776a..ae6e4a1229 100644
--- a/Configurations/common.tmpl
+++ b/Configurations/common.tmpl
@@ -1,7 +1,9 @@
{- # -*- Mode: perl -*-
- # A cache of objects for which a recipe has already been generated
- my %cache;
+ use File::Basename;
+
+ # A cache of objects for which a recipe has already been generated
+ my %cache;
# resolvedepends and reducedepends work in tandem to make sure
# there are no duplicate dependencies and that they are in the
@@ -158,9 +160,47 @@
$cache{$script} = 1;
}
+ sub dodir {
+ my $dir = shift;
+ return "" if !exists(&generatedir) or $cache{$dir};
+ $OUT .= generatedir(dir => $dir,
+ deps => $unified_info{dirinfo}->{$dir}->{deps},
+ %{$unified_info{dirinfo}->{$_}->{products}});
+ $cache{$dir} = 1;
+ }
+
# 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);
+ foreach (@{$unified_info{sources}->{$product}}) {
+ my $d = dirname($_);
+ next if $d eq "test"; # we already have a test target
+ next if $d eq "."; # current directory is just silly
+ $dirs{$d} = 1;
+ push @{$unified_info{dirinfo}->{$d}->{deps}}, $_
+ if $d ne $pd;
+ }
+ foreach (keys %dirs) {
+ push @{$unified_info{dirinfo}->{$_}->{products}->{$type}},
+ $product;
+ }
+ }
+ }
+ }
+
# Build all known libraries, engines, programs and scripts.
# Everything else will be handled as a consequence.
foreach (@{$unified_info{libraries}}) { dolib($_); }
@@ -168,6 +208,8 @@
foreach (@{$unified_info{programs}}) { dobin($_); }
foreach (@{$unified_info{scripts}}) { doscript($_); }
+ foreach (sort keys %{$unified_info{dirinfo}}) { dodir($_); }
+
# Finally, should there be any applicable BEGINRAW/ENDRAW sections,
# they are added here.
$OUT .= $_."\n" foreach @{$unified_info{rawlines}};