Make picker, thread and combine standard config helper functions
authorRichard Levitte <levitte@openssl.org>
Thu, 17 Mar 2016 08:09:31 +0000 (09:09 +0100)
committerRichard Levitte <levitte@openssl.org>
Thu, 17 Mar 2016 21:46:14 +0000 (22:46 +0100)
Document them as well

Reviewed-by: Andy Polyakov <appro@openssl.org>
Configurations/10-main.conf
Configurations/90-team.conf
Configurations/99-personal-levitte.conf
Configure

index 5a3a5faa93624a2c06905df094daa6bd6d02200f..87160968ca97c04e7a57f43e104ee960c5139622 100644 (file)
@@ -1,22 +1,6 @@
 ## -*- mode: perl; -*-
 ## Standard openssl configuration targets.
 
-sub picker {
-    my %opts = @_;
-    return sub { add($opts{default} || (),
-                     $opts{$config{build_type}} || ())->(); }
-}
-
-sub threads {
-    my @flags = @_;
-    return sub { add($disabled{threads} ? () : @flags)->(); }
-}
-
-sub combine {
-    my @stuff = @_;
-    return sub { add(@stuff)->(); }
-}
-
 # Helper functions for the Windows configs
 my $vc_win64a_info = {};
 sub vc_win64a_info {
index c7f287fb239630d623f8353d772d08dc9a19ff2c..92f842245495f0f3889543b17cf14c4e3a5742ac 100644 (file)
@@ -1,16 +1,6 @@
 ## -*- mode: perl; -*-
 ## Build configuration targets for openssl-team members
 
-sub threads {
-    my @flags = @_;
-    return sub { add($disabled{threads} ? () : @flags)->(); }
-}
-
-sub combine {
-    my @stuff = @_;
-    return sub { add(@stuff)->(); }
-}
-
 %targets = (
     "purify" => {
         cc               => "purify gcc",
index d1ddf2ef5417d3e681841c09cf6db49f639b30a5..c67252b510d833e5112bd2b07f5bb756f038bf91 100644 (file)
@@ -1,12 +1,6 @@
 ## -*- mode: perl; -*-
 ## Personal configuration targets
 
-sub picker {
-    my %opts = @_;
-    return sub { add($opts{default} || (),
-                     $opts{$config{build_type}} || ())->(); }
-}
-
 %targets = (
     "levitte-linux-elf" => {
         inherit_from     => [ "linux-elf" ],
index 4145e39878c74a86fbd9bf85f52c149d85e46978..060df7399bdec3bed1b436f2da833ddc1e946075 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -1961,6 +1961,11 @@ exit(0);
 
 # Configuration file reading #########################################
 
+# Note: All of the helper functions are for lazy evaluation.  They all
+# return a CODE ref, which will return the intended value when evaluated.
+# Thus, whenever there's mention of a returned value, it's about that
+# intended value.
+
 # Helper function to implement conditional inheritance depending on the
 # value of $disabled{asm}.  Used in inherit_from values as follows:
 #
@@ -1973,6 +1978,53 @@ sub asm {
     }
 }
 
+# Helper function to implement conditional value variants, with a default
+# plus additional values based on the value of $config{build_type}.
+# Arguments are given in hash table form:
+#
+#       picker(default => "Basic string: ",
+#              debug   => "debug",
+#              release => "release")
+#
+# When configuring with --debug, the resulting string will be
+# "Basic string: debug", and when not, it will be "Basic string: release"
+#
+# This can be used to create variants of sets of flags according to the
+# build type:
+#
+#       cflags => picker(default => "-Wall",
+#                        debug   => "-g -O0",
+#                        release => "-O3")
+#
+sub picker {
+    my %opts = @_;
+    return sub { add($opts{default} || (),
+                     $opts{$config{build_type}} || ())->(); }
+}
+
+# Helper function to combine several values of different types into one.
+# This is useful if you want to combine a string with the result of a
+# lazy function, such as:
+#
+#       cflags => combine("-Wall", sub { $disabled{zlib} ? () : "-DZLIB" })
+#
+sub combine {
+    my @stuff = @_;
+    return sub { add(@stuff)->(); }
+}
+
+# Helper function to implement conditional values depending on the value
+# of $disabled{threads}.  Can be used as follows:
+#
+#       cflags => combine("-Wall", threads("-pthread"))
+#
+sub threads {
+    my @flags = @_;
+    return sub { add($disabled{threads} ? () : @flags)->(); }
+}
+
+
+
 our $add_called = 0;
 # Helper function to implement adding values to already existing configuration
 # values.  It handles elements that are ARRAYs, CODEs and scalars