summaryrefslogtreecommitdiffstats
path: root/Configurations
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2018-04-11 13:13:22 +0200
committerRichard Levitte <levitte@openssl.org>2018-04-11 20:52:14 +0200
commit8258975c94398930e7b5406b8a3af53a662d1354 (patch)
tree9720de44c3c65ae8d2e80a93258b70a0202e2021 /Configurations
parentc12a2d2728fd9eb555ab347049ebdddef9d81d7f (diff)
Configuration: Simplify generating list of generated files in build file templates
Computing the value of the GENERATED variable in the build file templates is somewhat overcomplicated, and because of possible duplication errors, changes are potentially error prone. Looking more closely at how this list is determined, it can be observed that the exact list of files to check is consistently available in all the values found in the %unified_info tables 'depends', 'sources' and 'shared_sources', and all that's needed is to filter those values so only those present as keys in the 'generate' table are left. This computation is also common for all build files, so due to its apparent complexity, we move it to common0.tmpl, with the result left in a global variable (@generated), to be consumed by all build file templates. common0.tmpl is included among the files to process when creating build files, but unlike common.tmpl, it comes first of all. Reviewed-by: Andy Polyakov <appro@openssl.org> (Merged from https://github.com/openssl/openssl/pull/5930)
Diffstat (limited to 'Configurations')
-rw-r--r--Configurations/common0.tmpl31
-rw-r--r--Configurations/descrip.mms.tmpl9
-rw-r--r--Configurations/unix-Makefile.tmpl9
-rw-r--r--Configurations/windows-makefile.tmpl9
4 files changed, 40 insertions, 18 deletions
diff --git a/Configurations/common0.tmpl b/Configurations/common0.tmpl
new file mode 100644
index 0000000000..c0060095ba
--- /dev/null
+++ b/Configurations/common0.tmpl
@@ -0,0 +1,31 @@
+{- # -*- Mode: perl -*-
+
+ # Commonly used list of generated files
+ # The reason for the complexity is that the build.info files provide
+ # GENERATE rules for *all* platforms without discrimination, while the
+ # build files only want those for a particular build. Therefore, we
+ # need to extrapolate exactly what we need to generate. The way to do
+ # that is to extract all possible source files from diverse tables and
+ # filter out all that are not generated
+ my %generatables =
+ map { $_ => 1 }
+ ( # The sources of stuff may be generated
+ ( map { @{$unified_info{sources}->{$_}} }
+ keys %{$unified_info{sources}} ),
+ $disabled{shared}
+ ? ()
+ : ( map { @{$unified_info{shared_sources}->{$_}} }
+ keys %{$unified_info{shared_sources}} ),
+ # Things we explicitely depend on are usually generated
+ ( map { $_ eq "" ? () : @{$unified_info{depends}->{$_}} }
+ keys %{$unified_info{depends}} ));
+ our @generated =
+ sort ( ( grep { defined $unified_info{generate}->{$_} }
+ sort keys %generatables ),
+ # Scripts are assumed to be generated, so add thhem too
+ ( grep { defined $unified_info{sources}->{$_} }
+ @{$unified_info{scripts}} ) );
+
+ # Avoid strange output
+ "";
+-}
diff --git a/Configurations/descrip.mms.tmpl b/Configurations/descrip.mms.tmpl
index 029ba57722..09b67637be 100644
--- a/Configurations/descrip.mms.tmpl
+++ b/Configurations/descrip.mms.tmpl
@@ -55,11 +55,6 @@
our @install_shlibs =
map { $unified_info{sharednames}->{$_} || () }
grep(!/\.a$/, @{$unified_info{install}->{libraries}});
- our @generated = ( ( map { (my $x = $_) =~ s|\.[sS]$|\.asm|; $x }
- grep { defined $unified_info{generate}->{$_} }
- map { @{$unified_info{sources}->{$_}} }
- grep { /\.o$/ } keys %{$unified_info{sources}} ),
- ( grep { /\.(?:h|opt)$/ } keys %{$unified_info{generate}} ) );
# This is a horrible hack, but is needed because recursive inclusion of files
# in different directories does not work well with HP C.
@@ -136,7 +131,9 @@ DEPS={- our @deps = map { (my $x = $_) =~ s|\.o$|\$(DEP_EXT)|; $x; }
join(", ", map { "-\n\t".$_ } @deps); -}
{- output_on() if $disabled{makedepend}; "" -}
GENERATED_MANDATORY={- join(", ", map { "-\n\t".$_ } @{$unified_info{depends}->{""}} ) -}
-GENERATED={- join(", ", map { "-\n\t".$_ } @generated) -}
+GENERATED={- # common0.tmpl provides @generated
+ join(", ", map { (my $x = $_) =~ s|\.[sS]$|.asm|; "-\n\t".$x }
+ @generated) -}
INSTALL_LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @install_libs) -}
INSTALL_SHLIBS={- join(", ", map { "-\n\t".$_.".EXE" } @install_shlibs) -}
diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl
index 62fd5e7a6a..46a4866e25 100644
--- a/Configurations/unix-Makefile.tmpl
+++ b/Configurations/unix-Makefile.tmpl
@@ -106,12 +106,9 @@ DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|$depext|; $x; }
grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ }
keys %{$unified_info{sources}}); -}
{- output_on() if $disabled{makedepend}; "" -}
-GENERATED_MANDATORY={- join(" ", @{$unified_info{depends}->{""}} ) -}
-GENERATED={- join(" ",
- ( grep { defined $unified_info{generate}->{$_} }
- map { @{$unified_info{sources}->{$_}} }
- grep { /\.(?:o|res)$/ } keys %{$unified_info{sources}} ),
- ( grep { /\.(?:h|map|def)$/ } keys %{$unified_info{generate}} )) -}
+GENERATED_MANDATORY={- join(" ", @{$unified_info{depends}->{""}}) -}
+GENERATED={- # common0.tmpl provides @generated
+ join(" ", @generated ) -}
INSTALL_LIBS={- join(" ", map { lib($_) } @{$unified_info{install}->{libraries}}) -}
INSTALL_SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{install}->{libraries}}) -}
diff --git a/Configurations/windows-makefile.tmpl b/Configurations/windows-makefile.tmpl
index 5d767f72aa..1c6ce516c5 100644
--- a/Configurations/windows-makefile.tmpl
+++ b/Configurations/windows-makefile.tmpl
@@ -88,12 +88,9 @@ DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|$depext|; $x; }
keys %{$unified_info{sources}}); -}
{- output_on() if $disabled{makedepend}; "" -}
GENERATED_MANDATORY={- join(" ", @{$unified_info{depends}->{""}} ) -}
-GENERATED={- join(" ",
- ( map { (my $x = $_) =~ s|\.[sS]$|\.asm|; $x }
- grep { defined $unified_info{generate}->{$_} }
- map { @{$unified_info{sources}->{$_}} }
- grep { /\.o$/ } keys %{$unified_info{sources}} ),
- ( grep { /\.(?:h|def)$/ } keys %{$unified_info{generate}} )) -}
+GENERATED={- # common0.tmpl provides @generated
+ join(" ", map { (my $x = $_) =~ s|\.[sS]$|.asm|; $x }
+ @generated) -}
INSTALL_LIBS={- join(" ", map { lib($_) } @{$unified_info{install}->{libraries}}) -}
INSTALL_SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{install}->{libraries}}) -}