Some platforms provide getcontext() but it does not work
[openssl.git] / Configure
index eb7e54c2b26c72ec12bd67fef3f8744b66197566..a4aac21334efe83259052f7ec290adcc7c98540a 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -1,13 +1,9 @@
 #! /usr/bin/env perl
 # -*- mode: perl; -*-
 
-##
 ##  Configure -- OpenSSL source tree configuration script
-##  If editing this file, run this command before committing
-##     make -f Makefile.in TABLE
-##
 
-require 5.000;
+require 5.10.0;
 use strict;
 use File::Basename;
 use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs/;
@@ -202,7 +198,6 @@ foreach (sort glob($pattern) ) {
 
 print "Configuring OpenSSL version $config{version} (0x$config{version_num})\n";
 
-$config{perl};
 $config{prefix}="";
 $config{openssldir}="";
 $config{processor}="";
@@ -220,7 +215,7 @@ $config{dirs} = [ "crypto", "ssl", "engines", "apps", "test", "tools" ];
 # crypto/ subdirectories to build
 $config{sdirs} = [
     "objects",
-    "md2", "md4", "md5", "sha", "mdc2", "hmac", "ripemd", "whrlpool", "poly1305",
+    "md2", "md4", "md5", "sha", "mdc2", "hmac", "ripemd", "whrlpool", "poly1305", "blake2",
     "des", "aes", "rc2", "rc4", "rc5", "idea", "bf", "cast", "camellia", "seed", "chacha", "modes",
     "bn", "ec", "rsa", "dsa", "dh", "dso", "engine",
     "buffer", "bio", "stack", "lhash", "rand", "err",
@@ -238,11 +233,13 @@ my @dtls = qw(dtls1 dtls1_2);
 
 my @disablables = (
     "aes",
+    "afalgeng",
     "asm",
     "async",
     "autoalginit",
     "autoerrinit",
     "bf",
+    "blake2",
     "camellia",
     "capieng",
     "cast",
@@ -343,7 +340,6 @@ our %disabled = ( # "what"         => "comment"
                  "ssl-trace"           => "default",
                  "ssl3"                => "default",
                  "ssl3-method"         => "default",
-                 "static-engine"       => "default",
                  "unit-test"           => "default",
                  "weak-ssl-ciphers"    => "default",
                  "zlib"                => "default",
@@ -396,7 +392,9 @@ my @disable_cascades = (
     "dso"               => [ "dynamic-engine" ],
 
     # Without position independent code, there can be no shared libraries or DSOs
-    "pic"               => [ "shared", "dynamic-engine" ],
+    "pic"               => [ "shared" ],
+    "shared"            => [ "dynamic-engine" ],
+    "engine"            => [ "afalgeng" ],
     );
 
 # Avoid protocol support holes.  Also disable all versions below N, if version
@@ -744,7 +742,7 @@ while (@tocheckfor) {
        my ($test, $descendents) = (shift @cascade_copy, shift @cascade_copy);
        if (ref($test) eq "CODE" ? $test->() : defined($disabled{$test})) {
            map {
-               $new_tocheckfor{$_} => 1; $disabled{$_} = "forced";
+               $new_tocheckfor{$_} = 1; $disabled{$_} = "forced";
            } grep { !defined($disabled{$_}) } @$descendents;
        }
     }
@@ -1100,19 +1098,23 @@ if ($^O ne "VMS" && !$disabled{makedepend}) {
     # Is the compiler gcc or clang?  $ecc is used below to see if
     # error-checking can be turned on.
     my $ccpcc = "$config{cross_compile_prefix}$target{cc}";
-    $config{makedepprog} = which('makedepend');
-    open(PIPE, "$ccpcc --version 2>&1 | head -2 |");
+    open(PIPE, "$ccpcc --version 2>&1 |");
+    my $lines = 2;
     while ( <PIPE> ) {
         # Find the version number and save the major.
         m|(?:.*)\b(\d+)\.\d+\.\d+\b(?:.*)|;
+        my $compiler_major = $1;
         # We know that GNU C version 3 and up as well as all clang
         # versions support dependency generation
-        $config{makedepprog} = $ccpcc if /clang/ || (/gcc/ && $1 > 3);
+        $config{makedepprog} = $ccpcc
+            if (/clang/ || (/gcc/ && $compiler_major > 3));
         $ecc = "clang" if /clang/;
         $ecc = "gcc" if /gcc/;
+        last if ($config{makedepprog} || !$lines--);
     }
     close(PIPE);
 
+    $config{makedepprog} = which('makedepend') unless $config{makedepprog};
     $disabled{makedepend} = "unavailable" unless $config{makedepprog};
 }
 
@@ -1147,7 +1149,7 @@ die "Exactly one of SIXTY_FOUR_BIT|SIXTY_FOUR_BIT_LONG|THIRTY_TWO_BIT can be set
 
 # "Stringify" the C flags string.  This permits it to be made part of a string
 # and works as well on command lines.
-$config{cflags} =~ s/([\\\"])/\\\1/g;
+$config{cflags} =~ s/([\\\"])/\\$1/g;
 
 if (defined($config{api})) {
     $config{openssl_api_defines} = [ "OPENSSL_MIN_API=".$apitable->{$config{api}} ];
@@ -1192,8 +1194,8 @@ else               { $no_user_defines=1;    }
 
 # ALL MODIFICATIONS TO %config and %target MUST BE DONE FROM HERE ON
 
-unless ($disabled{engine}) {
-    $config{afalg}="";
+unless ($disabled{afalgeng}) {
+    $config{afalgeng}="";
     if ($target =~ m/^linux/) {
         my $minver = 4*10000 + 1*100 + 0;
         if ($config{cross_compile_prefix} eq "") {
@@ -1202,17 +1204,19 @@ unless ($disabled{engine}) {
             ($mi2) = $mi2 =~ /(\d+)/;
             my $ver = $ma*10000 + $mi1*100 + $mi2;
             if ($ver < $minver) {
-                $disabled{afalg} = "too-old-kernel";
+                $disabled{afalgeng} = "too-old-kernel";
             } else {
                 push @{$config{engdirs}}, "afalg";
             }
+        } else {
+            $disabled{afalgeng} = "cross-compiling";
         }
     } else {
-        $disabled{afalg}  = "not-linux";
+        $disabled{afalgeng}  = "not-linux";
     }
 }
 
-push @{$config{openssl_other_defines}}, "OPENSSL_NO_AFALGENG" if ($disabled{afalg});
+push @{$config{openssl_other_defines}}, "OPENSSL_NO_AFALGENG" if ($disabled{afalgeng});
 
 # If we use the unified build, collect information from build.info files
 my %unified_info = ();
@@ -1334,7 +1338,7 @@ if ($builder eq "unified") {
             # Info we're looking for
             qr/^\s*IF\[((?:\\.|[^\\\]])*)\]\s*$/
             => sub {
-                if (! @skip || $skip[$#skip] >= 0) {
+                if (! @skip || $skip[$#skip] > 0) {
                     push @skip, !! $1;
                 } else {
                     push @skip, -1;
@@ -1782,6 +1786,7 @@ print "MODES_OBJ     =$target{modes_obj}\n";
 print "PADLOCK_OBJ   =$target{padlock_obj}\n";
 print "CHACHA_ENC    =$target{chacha_obj}\n";
 print "POLY1305_OBJ  =$target{poly1305_obj}\n";
+print "BLAKE2_OBJ    =$target{blake2_obj}\n";
 print "PROCESSOR     =$config{processor}\n";
 print "RANLIB        =$target{ranlib}\n";
 print "ARFLAGS       =$target{arflags}\n";
@@ -1791,7 +1796,7 @@ print "SIXTY_FOUR_BIT_LONG mode\n" if $config{b64l};
 print "SIXTY_FOUR_BIT mode\n" if $config{b64};
 print "THIRTY_TWO_BIT mode\n" if $config{b32};
 print "BN_LLONG mode\n" if $config{bn_ll};
-print "RC4 uses $config{rc4_int}\n" if $config{rc4_int} != $def_int;
+print "RC4 uses $config{rc4_int}\n" if $config{rc4_int} ne $def_int;
 
 for (@generated_headers) {
     mkpath(catdir($blddir, dirname($_)));
@@ -2203,7 +2208,7 @@ sub usage
        exit(1);
        }
 
-sub run_dofile()
+sub run_dofile
 {
     my $out = shift;
     my @templates = @_;