diff options
author | Richard Levitte <levitte@openssl.org> | 2016-04-02 22:26:38 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2016-06-04 20:33:46 +0200 |
commit | 0ad1d94df4f844eec8eb7ff404582253b4a3cfae (patch) | |
tree | 64ac8f27ae7520106c273ba17e30b32d28efea79 /Configurations/common.tmpl | |
parent | 578b55144121b83a96e780f241f614759c75d1b5 (diff) | |
download | openssl-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.tmpl | 46 |
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}}; |