IDEA is not supported in TLS 1.2
[openssl.git] / Configure
index da9e5a3979525b262b588f9f9065ebc57ce3b7b2..eb7e54c2b26c72ec12bd67fef3f8744b66197566 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -274,12 +274,13 @@ my @disablables = (
     "hmac",
     "hw(-.+)?",
     "idea",
-    "locking",
+    "makedepend",
     "md2",
     "md4",
     "md5",
     "mdc2",
     "md[-_]ghost94",
+    "multiblock",
     "nextprotoneg",
     "ocb",
     "ocsp",
@@ -437,7 +438,6 @@ my $no_sse2=0;
 
 my $user_cflags="";
 my @user_defines=();
-my $unified = 0;
 $config{openssl_api_defines}=[];
 $config{openssl_algorithm_defines}=[];
 $config{openssl_thread_defines}=[];
@@ -448,6 +448,8 @@ my $target="";
 $config{options}="";
 $config{build_type} = "release";
 
+my $classic = 0;
+
 my @argvcopy=@ARGV;
 
 if (grep /^reconf(igure)?$/, @argvcopy) {
@@ -631,9 +633,9 @@ foreach (@argvcopy)
                }
        elsif (/^[-+]/)
                {
-               if (/^--unified$/)
+               if (/^--classic$/)
                        {
-                       $unified=1;
+                       $classic=1;
                        }
                elsif (/^--prefix=(.*)$/)
                        {
@@ -794,6 +796,8 @@ foreach (sort (keys %disabled))
                { }
        elsif (/^dynamic-engine$/)
                { }
+       elsif (/^makedepend$/)
+               { }
        elsif (/^zlib-dynamic$/)
                { }
        elsif (/^sse2$/)
@@ -890,14 +894,20 @@ $config{shared_ldflag} = "";
 $target{build_scheme} = [ $target{build_scheme} ]
     if ref($target{build_scheme}) ne "ARRAY";
 
-###### TO BE REMOVED BEFORE FINAL RELEASE
+###### TO BE REMOVED WHEN CLASSIC BUILD IS REMOVED
 ######
-###### If the user has chosen --unified, we give it to them.
-###### The same happens if we detect that they try to build out-of-source.
-if ($target{build_file} eq "Makefile"
-    && $target{build_scheme}->[0] eq "unixmake"
-    && ($unified || $srcdir ne $blddir)) {
-    $target{build_scheme} = [ "unified", "unix" ];
+###### If the user has chosen --classic, we give it to them.
+###### If they try that with an out-of-source config, we complain.
+if ($target{build_scheme}->[0] eq "unified" && $classic) {
+    die "Can't perform a classic build out of source tree\n"
+        if $srcdir ne $blddir;
+
+    $target{build_scheme} = { unix    => [ "unixmake" ],
+                              windows => [ "mk1mf", $target{build_scheme}->[2] ],
+                              VMS     => undef } -> {$target{build_scheme}->[1]};
+
+    die "Classic mode unavailable on this platform\n"
+        unless defined($target{build_scheme});
 }
 
 my ($builder, $builder_platform, @builder_opts) =
@@ -1086,21 +1096,28 @@ unless ($disabled{asm}) {
 }
 
 my $ecc = $target{cc};
-if ($^O ne "VMS") {
+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} = 'makedepend';
+    $config{makedepprog} = which('makedepend');
     open(PIPE, "$ccpcc --version 2>&1 | head -2 |");
     while ( <PIPE> ) {
-        $config{makedepprog} = $ccpcc if /clang|gcc/;
+        # Find the version number and save the major.
+        m|(?:.*)\b(\d+)\.\d+\.\d+\b(?:.*)|;
+        # 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);
         $ecc = "clang" if /clang/;
         $ecc = "gcc" if /gcc/;
     }
     close(PIPE);
+
+    $disabled{makedepend} = "unavailable" unless $config{makedepprog};
 }
 
 
+
 # Deal with bn_ops ###################################################
 
 $config{bn_ll}                 =0;
@@ -1175,22 +1192,24 @@ else               { $no_user_defines=1;    }
 
 # ALL MODIFICATIONS TO %config and %target MUST BE DONE FROM HERE ON
 
-$config{afalg}="";
-if ($target =~ m/^linux/) {
-    my $minver = 4*10000 + 1*100 + 0;
-    if ($config{cross_compile_prefix} eq "") {
-        my $verstr = `uname -r`;
-        my ($ma, $mi1, $mi2) = split("\\.", $verstr);
-        ($mi2) = $mi2 =~ /(\d+)/;
-        my $ver = $ma*10000 + $mi1*100 + $mi2;
-        if ($ver < $minver) {
-            $disabled{afalg} = "too-old-kernel";
-        } else {
-            push @{$config{engdirs}}, "afalg";
+unless ($disabled{engine}) {
+    $config{afalg}="";
+    if ($target =~ m/^linux/) {
+        my $minver = 4*10000 + 1*100 + 0;
+        if ($config{cross_compile_prefix} eq "") {
+            my $verstr = `uname -r`;
+            my ($ma, $mi1, $mi2) = split("\\.", $verstr);
+            ($mi2) = $mi2 =~ /(\d+)/;
+            my $ver = $ma*10000 + $mi1*100 + $mi2;
+            if ($ver < $minver) {
+                $disabled{afalg} = "too-old-kernel";
+            } else {
+                push @{$config{engdirs}}, "afalg";
+            }
         }
+    } else {
+        $disabled{afalg}  = "not-linux";
     }
-} else {
-    $disabled{afalg}  = "not-linux";
 }
 
 push @{$config{openssl_other_defines}}, "OPENSSL_NO_AFALGENG" if ($disabled{afalg});
@@ -1274,6 +1293,7 @@ if ($builder eq "unified") {
         my @engines = ();
         my @scripts = ();
         my @extra = ();
+        my @overrides = ();
         my @intermediates = ();
         my @rawlines = ();
 
@@ -1313,7 +1333,13 @@ if ($builder eq "unified") {
                                                 $l1 =~ s/\\$//; $l1.$l2 }),
             # Info we're looking for
             qr/^\s*IF\[((?:\\.|[^\\\]])*)\]\s*$/
-            => sub { push @skip, !! $1; },
+            => sub {
+                if (! @skip || $skip[$#skip] >= 0) {
+                    push @skip, !! $1;
+                } else {
+                    push @skip, -1;
+                }
+            },
             qr/^\s*ELSIF\[((?:\\.|[^\\\]])*)\]\s*$/
             => sub { die "ELSIF out of scope" if ! @skip;
                      die "ELSIF following ELSE" if abs($skip[$#skip]) == 2;
@@ -1342,6 +1368,9 @@ if ($builder eq "unified") {
             qr/^\s*EXTRA\s*=\s*(.*)\s*$/
             => sub { push @extra, split(/\s+/, $1)
                          if !@skip || $skip[$#skip] > 0 },
+            qr/^\s*OVERRIDES\s*=\s*(.*)\s*$/
+            => sub { push @overrides, split(/\s+/, $1)
+                         if !@skip || $skip[$#skip] > 0 },
 
             qr/^\s*ORDINALS\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/,
             => sub { push @{$ordinals{$1}}, split(/\s+/, $2)
@@ -1440,6 +1469,11 @@ EOF
             $unified_info{extra}->{$extra} = 1;
         }
 
+        foreach (@overrides) {
+            my $override = cleanfile($buildd, $_, $blddir);
+            $unified_info{overrides}->{$override} = 1;
+        }
+
         push @{$unified_info{rawlines}}, @rawlines;
 
         unless ($disabled{shared}) {
@@ -1583,7 +1617,7 @@ EOF
 
     ### Make unified_info a bit more efficient
     # One level structures
-    foreach (("programs", "libraries", "engines", "scripts", "extra")) {
+    foreach (("programs", "libraries", "engines", "scripts", "extra", "overrides")) {
         $unified_info{$_} = [ sort keys %{$unified_info{$_}} ];
     }
     # Two level structures
@@ -1724,6 +1758,7 @@ close(OUT);
 print "IsMK1MF       =", ($builder eq "mk1mf" ? "yes" : "no"), "\n";
 print "CC            =$target{cc}\n";
 print "CFLAG         =$target{cflags} $config{cflags}\n";
+print "SHARED_CFLAG  =$target{shared_cflag}\n";
 print "DEFINES       =",join(" ", @{$target{defines}}, @{$config{defines}}),"\n";
 print "LFLAG         =$target{lflags}\n";
 print "PLIB_LFLAG    =$target{plib_lflags}\n";
@@ -1903,39 +1938,6 @@ or position independent code, please let us know (but please first make sure
 you have tried with a current version of OpenSSL).
 EOF
 
-###### TO BE REMOVED BEFORE FINAL RELEASE
-######
-###### If the user hasn't chosen --unified, try to nudge them.
-if ($target{build_file} eq "Makefile"
-    && $target{build_scheme}->[0] eq "unixmake"
-    && !$unified) {
-
-    my $plausible_builddir =
-        abs2rel(rel2abs("../_openssl-build_$target"),rel2abs("."));
-    my $plausible_to_sourcedir =
-        abs2rel(rel2abs("."),rel2abs("../_openssl-build_$target"));
-    print <<"EOF";
-
-----------------------------------------------------------------------
-Please consider configuring with the flag --unified .
-It's to test out a new "unified" building system.
-
-One cool feature is that you can have your build directory elsewhere,
-for example:
-
-    make clean          # Clean the current configuration away
-    mkdir $plausible_builddir
-    cd $plausible_builddir
-    $plausible_to_sourcedir/config --unified
-    make
-    make test
-
-Please report any problem you have.
-----------------------------------------------------------------------
-
-EOF
-}
-
 exit(0);
 
 ######################################################################
@@ -2056,7 +2058,7 @@ sub resolve_config {
     my $target = shift;
     my @breadcrumbs = @_;
 
-    my $extra_checks = defined($ENV{CONFIGURE_EXTRA_CHECKS});
+#    my $extra_checks = defined($ENV{CONFIGURE_EXTRA_CHECKS});
 
     if (grep { $_ eq $target } @breadcrumbs) {
        die "inherit_from loop!  target backtrace:\n  "
@@ -2156,10 +2158,10 @@ sub resolve_config {
         unless(defined($table{$target}->{$_})) {
             delete $table{$target}->{$_};
         }
-        if ($extra_checks &&
-            $previous && !($add_called ||  $previous ~~ $table{$target}->{$_})) {
-            warn "$_ got replaced in $target\n";
-        }
+#        if ($extra_checks &&
+#            $previous && !($add_called ||  $previous ~~ $table{$target}->{$_})) {
+#            warn "$_ got replaced in $target\n";
+#        }
     }
 
     # Finally done, return the result.
@@ -2351,10 +2353,12 @@ sub which
        my $path;
        foreach $path (split /:/, $ENV{PATH})
                {
-               if (-f "$path/$name$target{exe_extension}" and -x _)
+               my $fullpath = "$path/$name$target{exe_extension}";
+               if (-f $fullpath and -x $fullpath)
                        {
-                       return "$path/$name$target{exe_extension}" unless ($name eq "perl" and
-                        system("$path/$name$target{exe_extension} -e " . '\'exit($]<5.0);\''));
+                       return $fullpath
+                           unless ($name eq "perl" and
+                                   system("$fullpath -e " . '\'exit($]<5.0);\''));
                        }
                }
        }