[openssl-commits] [openssl] master update

Richard Levitte levitte at openssl.org
Fri Jan 22 00:00:48 UTC 2016


The branch master has been updated
       via  88087414def54cd55dfebc172f17f79ed7d3034a (commit)
      from  9e0724a1805fba20a897f6c7f95336f0da017ccf (commit)


- Log -----------------------------------------------------------------
commit 88087414def54cd55dfebc172f17f79ed7d3034a
Author: Richard Levitte <levitte at openssl.org>
Date:   Mon May 18 14:31:49 2015 +0200

    Refactor config - @MK1MF_Builds out, general build scheme in
    
    Time to get rid of @MK1MF_Builds and introduce a more flexible
    'build_scheme' configuration key.  Its value may be a string or an
    array of strings, meaning we need to teach resolve_config how to
    handle ARRAY referenses.
    
    The build scheme is a word that selects a function to create the
    appropriate result files for a certain configuration.  Currently valid
    build schemes aer "mk1mf" and "unixmake", the plan is however to add
    at least one other for a more universal build scheme.
    
    Incidently, this also adds the functions 'add' and 'add_before', which
    can be used in a configuration, so instead of having to repeatedly
    write a sub like this:
    
    	key1 => sub { join(" ", @_, "myvalues"); },
    	key2 => sub { join(" ", "myvalues", @_); },
    
    one could write this:
    
    	key1 => add(" ", "myvalues"),
    	key2 => add_before(" ", "myvalues"),
    
    The good point with 'add' and 'add_before' is that they handle
    inheritances where the values are a misture of scalars and ARRAYs.  If
    there are any ARRAY to be found, the resulting value will be an ARRAY,
    otherwise it will be a scalar with all the incoming valued joined
    together with the separator given as first argument to add/add_before.
    
    Reviewed-by: Rich Salz <rsalz at openssl.org>

-----------------------------------------------------------------------

Summary of changes:
 Configurations/00-base-templates.conf |   1 +
 Configurations/10-main.conf           |  28 +++++---
 Configurations/README                 |  12 +++-
 Configure                             | 123 +++++++++++++++++++++-------------
 4 files changed, 108 insertions(+), 56 deletions(-)

diff --git a/Configurations/00-base-templates.conf b/Configurations/00-base-templates.conf
index 064648f..90633c4 100644
--- a/Configurations/00-base-templates.conf
+++ b/Configurations/00-base-templates.conf
@@ -20,6 +20,7 @@
 	poly1305_obj	=> "",
 
 	unistd		=> "<unistd.h>",
+	build_scheme	=> "unixmake",
     },
 
     x86_asm => {
diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf
index 06911ac..c5ae594 100644
--- a/Configurations/10-main.conf
+++ b/Configurations/10-main.conf
@@ -125,13 +125,13 @@
     },
     "solaris-sparcv8-gcc" => {
         inherit_from     => [ "solaris-sparcv7-gcc", asm("sparcv8_asm") ],
-        cflags           => sub { join(" ","-mcpu=v8", at _); },
+        cflags           => add_before(" ", "-mcpu=v8"),
     },
     "solaris-sparcv9-gcc" => {
         # -m32 should be safe to add as long as driver recognizes
         # -mcpu=ultrasparc
         inherit_from     => [ "solaris-sparcv7-gcc", asm("sparcv9_asm") ],
-        cflags           => sub { join(" ","-m32 -mcpu=ultrasparc", at _); },
+        cflags           => add_before(" ", "-m32 -mcpu=ultrasparc"),
         debug_cflags     => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DPEDANTIC -O -g -pedantic -ansi -Wshadow -Wno-long-long -D__EXTENSIONS__",
     },
     "solaris64-sparcv9-gcc" => {
@@ -161,15 +161,15 @@
 ####
     "solaris-sparcv8-cc" => {
         inherit_from     => [ "solaris-sparcv7-cc", asm("sparcv8_asm") ],
-        cflags           => sub { join(" ","-xarch=v8", at _); },
+        cflags           => add_before(" ", "-xarch=v8"),
     },
     "solaris-sparcv9-cc" => {
         inherit_from     => [ "solaris-sparcv7-cc", asm("sparcv9_asm") ],
-        cflags           => sub { join(" ","-xarch=v8plus -xtarget=ultra", at _); },
+        cflags           => add_before(" ", "-xarch=v8plus -xtarget=ultra"),
     },
     "solaris64-sparcv9-cc" => {
         inherit_from     => [ "solaris-sparcv7-cc", asm("sparcv9_asm") ],
-        cflags           => sub { join(" ","-xarch=v9 -xtarget=ultra", at _); },
+        cflags           => add_before(" ", "-xarch=v9 -xtarget=ultra"),
         bn_ops           => "BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR",
         shared_ldflag    => "-xarch=v9 -G -dy -z text",
         multilib         => "/64",
@@ -353,7 +353,7 @@
     },
     "hpux-parisc1_1-cc" => {
         inherit_from     => [ "hpux-parisc-cc", asm("parisc11_asm") ],
-        cflags           => sub { join(" ","+DA1.1", at _); },
+        cflags           => add_before(" ", "+DA1.1"),
         multilib         => "/pa1.1",
     },
     "hpux64-parisc2-cc" => {
@@ -799,7 +799,7 @@
     },
     "android-armv7" => {
         inherit_from     => [ "android-armeabi" ],
-        cflags           => sub { join (" ","-march=armv7-a", at _); },
+        cflags           => add_before(" ", "-march=armv7-a"),
     },
     "android-mips" => {
         inherit_from     => [ "android", asm("mips32_asm") ],
@@ -1119,23 +1119,26 @@
         cc               => "cl",
         cflags           => "-W3 -wd4090 -Gs0 -GF -Gy -nologo -DOPENSSL_SYS_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE",
         dso_scheme       => "win32",
+	build_scheme     => "mk1mf",
     },
     "VC-WIN64I" => {
         inherit_from     => [ "VC-common", asm("ia64_asm") ],
-        cflags           => sub { join(" ", at _,"-DUNICODE -D_UNICODE"); },
+        cflags           => add(" ", "-DUNICODE -D_UNICODE"),
         sys_id           => "WIN64I",
         bn_ops           => "SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN",
         bn_obj           => sub { my $r=join(" ", at _); $r=~s/bn\-//; $r; },
         rc4_obj          => "",
         perlasm_scheme   => "ias",
+	build_scheme     => [ "mk1mf", "VC-W64" ],
     },
     "VC-WIN64A" => {
         inherit_from     => [ "VC-common", asm("x86_64_asm") ],
-        cflags           => sub { join(" ", at _,"-DUNICODE -D_UNICODE"); },
+        cflags           => add(" ", "-DUNICODE -D_UNICODE"),
         sys_id           => "WIN64A",
         bn_ops           => "SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN",
         bn_obj           => sub { my $r=join(" ", at _); $r=~s/x86_64\-gcc/bn_asm/; $r; },
         perlasm_scheme   => "auto",
+	build_scheme     => [ "mk1mf", "VC-W64" ],
     },
     "VC-WIN32" => {
         # x86 Win32 target defaults to ANSI API, if you want UNICODE,
@@ -1144,12 +1147,14 @@
         sys_id           => "WIN32",
         bn_ops           => "BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}",
         perlasm_scheme   => "win32n",
+	build_scheme     => [ "mk1mf", "VC-W32" ],
     },
     "VC-CE" => {
         cc               => "cl",
         sys_id           => "WINCE",
         bn_ops           => "BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}",
         dso_scheme       => "win32",
+	build_scheme     => [ "mk1mf", "VC-WCE" ],
     },
 
 #### Borland C++ 4.5
@@ -1158,6 +1163,7 @@
         sys_id           => "WIN32",
         bn_ops           => "BN_LLONG DES_PTR RC4_INDEX EXPORT_VAR_AS_FN",
         dso_scheme       => "win32",
+	build_scheme     => [ "mk1mf", "BC" ],
     },
 
 #### MinGW
@@ -1277,10 +1283,12 @@
     "netware-clib" => {
         cc               => "mwccnlm",
         bn_ops           => "${x86_gcc_opts}",
+	build_scheme     => [ "mk1mf", "netware" ],
     },
     "netware-clib-bsdsock" => {
         cc               => "mwccnlm",
         bn_ops           => "${x86_gcc_opts}",
+	build_scheme     => [ "mk1mf", "netware" ],
     },
     "netware-clib-gcc" => {
         cc               => "i586-netware-gcc",
@@ -1296,10 +1304,12 @@
     "netware-libc" => {
         cc               => "mwccnlm",
         bn_ops           => "BN_LLONG ${x86_gcc_opts}",
+	build_scheme     => [ "mk1mf", "netware" ],
     },
     "netware-libc-bsdsock" => {
         cc               => "mwccnlm",
         bn_ops           => "BN_LLONG ${x86_gcc_opts}",
+	build_scheme     => [ "mk1mf", "netware" ],
     },
     "netware-libc-gcc" => {
         cc               => "i586-netware-gcc",
diff --git a/Configurations/README b/Configurations/README
index e1327e5..df55d71 100644
--- a/Configurations/README
+++ b/Configurations/README
@@ -97,8 +97,16 @@ In each table entry, the following keys are significant:
         shared_target   => The shared library building method used.
                            This is a target found in Makefile.shared.
         build_scheme    => The scheme used to build up a Makefile.
-                           (NOTE: this is here for future use, it's
-                           not implemented yet)
+                           In its simplest form, the value is a string
+                           with the name of the build scheme.
+                           The value may also take the form of a list
+                           of strings, if the build_scheme is to have
+                           some options.  In this case, the first
+                           string in the list is the name of the build
+                           scheme.
+                           Currently recognised build schemes are
+                           "mk1mf" and "unixmake".  Others may appear
+                           in the future.
 
         multilib        => On systems that support having multiple
                            implementations of a library (typically a
diff --git a/Configure b/Configure
index be55d8c..96f88b2 100755
--- a/Configure
+++ b/Configure
@@ -172,13 +172,6 @@ foreach (sort glob($pattern) ) {
     &read_config($_);
 }
 
-my @MK1MF_Builds=qw(VC-WIN64I VC-WIN64A
-		    debug-VC-WIN64I debug-VC-WIN64A
-		    VC-NT VC-CE VC-WIN32 debug-VC-WIN32
-		    BC-32
-		    netware-clib netware-clib-bsdsock
-		    netware-libc netware-libc-bsdsock);
-
 my $prefix="";
 my $libdir="";
 my $openssldir="";
@@ -763,8 +756,6 @@ my %target = ( %{$table{$base_target}}, resolve_config($target) );
 
 &usage if (!%target || $target{template});
 
-my $IsMK1MF=scalar grep /^$target$/, at MK1MF_Builds;
-
 $exe_ext=".exe" if ($target eq "Cygwin" || $target eq "DJGPP" || $target =~ /^mingw/);
 $exe_ext=".nlm" if ($target =~ /netware/);
 $exe_ext=".pm"  if ($target =~ /vos/);
@@ -782,8 +773,6 @@ $openssldir = catdir($prefix, $openssldir)
     unless file_name_is_absolute($openssldir);
 
 
-print "IsMK1MF=$IsMK1MF\n";
-
 # Allow environment CC to override compiler...
 my $cc = $ENV{CC} || $target{cc};
 
@@ -828,6 +817,9 @@ my $ranlib = $ENV{'RANLIB'} || $target{ranlib};
 my $ar = $ENV{'AR'} || "ar";
 my $arflags = $target{arflags};
 my $multilib = $target{multilib};
+my @build_scheme =
+    ref($target{build_scheme}) eq "ARRAY"
+    ? @{$target{build_scheme}} : ( $target{build_scheme} );
 
 # if $prefix/lib$multilib is not an existing directory, then
 # assume that it's not searched by linker automatically, in
@@ -976,7 +968,7 @@ if (!$no_shared)
 		}
 	}
 
-if (!$IsMK1MF)
+if ($build_scheme[0] ne "mk1mf")
 	{
 	# add {no-}static-engine to options to allow mkdef.pl to work without extra arguments
 	if ($no_shared)
@@ -1301,6 +1293,7 @@ close(OUT);
 rename($Makefile,"$Makefile.orig") || die "unable to rename $Makefile\n" if -e $Makefile;
 rename("$Makefile.new",$Makefile) || die "unable to rename $Makefile.new\n";
 
+print "IsMK1MF       =", ($build_scheme[0] eq "mk1mf" ? "yes" : "no"), "\n";
 print "CC            =$cc\n";
 print "CFLAG         =$cflags\n";
 print "EX_LIBS       =$lflags\n";
@@ -1546,17 +1539,25 @@ find(sub {
                 $File::Find::dir;
     }, ".");
 
-{
-    my $perlguess = $perl =~ m@^/@ ? $perl : '/usr/local/bin/perl';
-
-    &dofile("tools/c_rehash",$perlguess,
-	    '^#!/'		=> '#!%s',
-	    '^my \$dir;$'	=> 'my $dir = "' . $openssldir . '";',
-	    '^my \$prefix;$'	=> 'my $prefix = "' . $prefix . '";');
-    &dofile("apps/CA.pl",$perl,
-	    '^#!/'		=> '#!%s');
-}
-if($IsMK1MF) {
+my %builders = (
+    unixmake => sub {
+	my $perlguess = $perl =~ m@^/@ ? $perl : '/usr/local/bin/perl';
+	my $make_command = "$make PERL=\'$perlguess\'";
+	my $make_targets = "";
+	$make_targets .= " depend" if $depflags ne $default_depflags && $make_depend;
+	(system $make_command.$make_targets) == 0 or die "make $make_targets failed"
+	    if $make_targets ne "";
+	&dofile("tools/c_rehash",$perlguess,
+		'^#!/'		 => '#!%s',
+		'^my \$dir;$'	 => 'my $dir = "' . $openssldir . '";',
+		'^my \$prefix;$' => 'my $prefix = "' . $prefix . '";');
+	&dofile("apps/CA.pl",$perlguess,
+		'^#!/'		 => '#!%s');
+	if ($depflags ne $default_depflags && !$make_depend) {
+            $warn_make_depend++;
+        }
+    },
+    mk1mf => sub {
 	open (OUT,">crypto/buildinf.h") || die "Can't open buildinf.h";
 	printf OUT <<"EOF";
 #ifndef MK1MF_BUILD
@@ -1568,28 +1569,18 @@ if($IsMK1MF) {
 #endif
 EOF
 	close(OUT);
-} else {
-	my $make_command = "$make PERL=\'$perl\'";
-	my $make_targets = "";
-	$make_targets .= " depend" if $depflags ne $default_depflags && $make_depend;
-	(system $make_command.$make_targets) == 0 or die "make $make_targets failed"
-		if $make_targets ne "";
-	if ($depflags ne $default_depflags && !$make_depend) {
-            $warn_make_depend++;
-        }
-}
 
-# create the ms/version32.rc file if needed
-if ($IsMK1MF && ($target !~ /^netware/)) {
-	my ($v1, $v2, $v3, $v4);
-	if ($version_num =~ /^0x([0-9a-f]{1})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{1})L$/i) {
+	# create the ms/version32.rc file if needed
+	if (! grep /^netware/, @build_scheme) {
+	    my ($v1, $v2, $v3, $v4);
+	    if ($version_num =~ /^0x([0-9a-f]{1})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{1})L$/i) {
 		$v1=hex $1;
 		$v2=hex $2;
 		$v3=hex $3;
 		$v4=hex $4;
-	}
-	open (OUT,">ms/version32.rc") || die "Can't open ms/version32.rc";
-	print OUT <<"EOF";
+	    }
+	    open (OUT,">ms/version32.rc") || die "Can't open ms/version32.rc";
+	    print OUT <<"EOF";
 #include <winver.h>
 
 LANGUAGE 0x09,0x01
@@ -1638,8 +1629,13 @@ BEGIN
     END
 END
 EOF
-	close(OUT);
-  }
+	    close(OUT);
+	}
+    },
+    );
+
+my ($builder, @builder_opts) = @build_scheme;
+$builders{$builder}->(@builder_opts);
 
 print <<"EOF";
 
@@ -1690,6 +1686,43 @@ sub asm {
     }
 }
 
+# Helper function to implement adding values to already existing configuration
+# values.  It handles elements that are ARRAYs, CODEs and scalars
+sub _add {
+    my $separator = shift;
+
+    # If there's any ARRAY in the collection of values, we will return
+    # an ARRAY of combined values, otherwise a string of joined values
+    # with $separator as the separator.
+    my $found_array = 0;
+
+    my @values =
+	map {
+	    if (ref($_) eq "ARRAY") {
+		$found_array = 1;
+		@$_;
+	    } else {
+		$_;
+	    }
+    } (@_);
+
+    if ($found_array) {
+	[ @values ];
+    } else {
+	join($separator, @values);
+    }
+}
+sub add_before {
+    my $separator = shift;
+    my @x = @_;
+    sub { _add($separator, @x, @_) };
+}
+sub add {
+    my $separator = shift;
+    my @x = @_;
+    sub { _add($separator, @_, @x) };
+}
+
 # configuration reader, evaluates the input file as a perl script and expects
 # it to fill %targets with target configurations.  Those are then added to
 # %table.
@@ -1783,7 +1816,7 @@ sub resolve_config {
     #   value.
     # - Otherwise, this target's value is assumed to be a string that
     #   will simply override the inherited list of values.
-    my $default_combiner = sub { join(' ', at _) };
+    my $default_combiner = add(" ");
 
     my %all_keys =
 	map { $_ => 1 } (keys %combined_inheritance,
@@ -1803,8 +1836,8 @@ sub resolve_config {
 	    # arguments.
 	    $table{$target}->{$_} =
 		$table{$target}->{$_}->(@{$combined_inheritance{$_}});
-	} elsif ($valuetype eq "") {
-	    # Scalar, just leave it as is.
+	} elsif ($valuetype eq "ARRAY" || $valuetype eq "") {
+	    # ARRAY or Scalar, just leave it as is.
 	} else {
 	    # Some other type of reference that we don't handle.
 	    # Better to abort at this point.


More information about the openssl-commits mailing list