Fix a bunch of gcc warnings in packettest.c
[openssl.git] / Configure
index cad25bb..d78066b 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -278,11 +278,15 @@ if (defined env($local_config_envname)) {
     }
 }
 
+# Save away perl command information
+$config{perl_cmd} = $^X;
+$config{perl_version} = $Config{version};
+$config{perl_archname} = $Config{archname};
+
 $config{prefix}="";
 $config{openssldir}="";
 $config{processor}="";
 $config{libdir}="";
-$config{cross_compile_prefix}="";
 my $auto_threads=1;    # enable threads automatically? true by default
 my $default_ranlib;
 
@@ -435,8 +439,6 @@ our %disabled = ( # "what"         => "comment"
                  "ssl3"                => "default",
                  "ssl3-method"         => "default",
                   "ubsan"              => "default",
-          #TODO(TLS1.3): Temporarily disabled while this is a WIP
-                 "tls1_3"              => "default",
                  "tls13downgrade"      => "default",
                  "unit-test"           => "default",
                  "weak-ssl-ciphers"    => "default",
@@ -534,6 +536,7 @@ my %user = (
     CPPFLAGS    => [],  # -D, -I, -Wp,
     CPPDEFINES  => [],  # Alternative for -D
     CPPINCLUDES => [],  # Alternative for -I
+    CROSS_COMPILE => undef,
     HASHBANGPERL=> undef,
     LD          => undef,
     LDFLAGS     => [],  # -L, -Wl,
@@ -545,6 +548,9 @@ my %user = (
     RCFLAGS     => [],
     RM          => undef,
    );
+# Info about what "make variables" may be prefixed with the cross compiler
+# prefix.  This should NEVER mention any such variable with a list for value.
+my @user_crossable = qw ( AR AS CC CXX CPP LD MT RANLIB RC );
 # The same but for flags given as Configure options.  These are *additional*
 # input, as opposed to the VAR=string option that override the corresponding
 # config target attributes
@@ -566,6 +572,7 @@ my %user_to_target = (
     # If not given here, the value is the lc of the key
     CPPDEFINES  => 'defines',
     CPPINCLUDES => 'includes',
+    CROSS_COMPILE => 'cross_compile_prefix',
     LDFLAGS     => 'lflags',
     LDLIBS      => 'ex_libs',
    );
@@ -781,7 +788,7 @@ while (@argvcopy)
                         }
                elsif (/^--cross-compile-prefix=(.*)$/)
                        {
-                       $config{cross_compile_prefix}=$1;
+                       $user{CROSS_COMPILE}=$1;
                        }
                elsif (/^--config=(.*)$/)
                        {
@@ -888,17 +895,6 @@ if (grep { $_ =~ /(^|\s)-Wl,-rpath,/ } ($user{LDLIBS} ? @{$user{LDLIBS}} : ())
        "***** any of asan, msan or ubsan\n";
 }
 
-if (scalar(@seed_sources) == 0) {
-    print "Using implicit seed configuration\n";
-    push @seed_sources, 'os';
-}
-die "Cannot seed with none and anything else"
-    if scalar(grep { $_ eq 'none' } @seed_sources) > 0
-        && scalar(@seed_sources) > 1;
-push @{$config{openssl_other_defines}},
-     map { (my $x = $_) =~ tr|[\-a-z]|[_A-Z]|; "OPENSSL_RAND_SEED_$x" }
-       @seed_sources;
-
 my @tocheckfor = (keys %disabled);
 while (@tocheckfor) {
     my %new_tocheckfor = ();
@@ -939,9 +935,20 @@ if ($target eq "HASH") {
     exit 0;
 }
 
-print "Configuring OpenSSL version $config{version} ($config{version_num})\n";
+print "Configuring OpenSSL version $config{version} ($config{version_num}) ";
 print "for $target\n";
 
+if (scalar(@seed_sources) == 0) {
+    print "Using os-specific seed configuration\n";
+    push @seed_sources, 'os';
+}
+die "Cannot seed with none and anything else"
+    if scalar(grep { $_ eq 'none' } @seed_sources) > 0
+        && scalar(@seed_sources) > 1;
+push @{$config{openssl_other_defines}},
+     map { (my $x = $_) =~ tr|[\-a-z]|[_A-Z]|; "OPENSSL_RAND_SEED_$x" }
+       @seed_sources;
+
 # Backward compatibility?
 if ($target =~ m/^CygWin32(-.*)$/) {
     $target = "Cygwin".$1;
@@ -1036,10 +1043,6 @@ $target{dso_extension}=$target{shared_extension_simple};
 ($target{shared_import_extension}=$target{shared_extension_simple}.".a")
     if ($config{target} =~ /^(?:Cygwin|mingw)/);
 
-
-$config{cross_compile_prefix} = env('CROSS_COMPILE')
-    if $config{cross_compile_prefix} eq "";
-
 # Allow overriding the names of some tools.  USE WITH CARE
 # Note: only Unix cares about HASHBANGPERL...  that explains
 # the default string.
@@ -1292,6 +1295,8 @@ if ($target{sys_id} ne "")
 
 unless ($disabled{asm}) {
     $target{cpuid_asm_src}=$table{DEFAULTS}->{cpuid_asm_src} if ($config{processor} eq "386");
+    push @{$config{defines}}, "OPENSSL_CPUID_OBJ" if ($target{cpuid_asm_src} ne "mem_clr.c");
+
     $target{bn_asm_src} =~ s/\w+-gf2m.c// if (defined($disabled{ec2m}));
 
     # bn-586 is the only one implementing bn_*_part_words
@@ -1341,6 +1346,9 @@ unless ($disabled{asm}) {
     if ($target{ec_asm_src} =~ /ecp_nistz256/) {
        push @{$config{defines}}, "ECP_NISTZ256_ASM";
     }
+    if ($target{ec_asm_src} =~ /x25519/) {
+       push @{$config{defines}}, "X25519_ASM";
+    }
     if ($target{padlock_asm_src} ne $table{DEFAULTS}->{padlock_asm_src}) {
        push @{$config{defines}}, "PADLOCK_ASM";
     }
@@ -1929,7 +1937,7 @@ EOF
 
                 # If it isn't in the source tree, we assume it's generated
                 # in the build tree
-                if (! -f $s) {
+                if (! -f $s || $generate{$_}) {
                     $s = cleanfile($buildd, $_, $blddir);
                 }
                 # We recognise C++, C and asm files
@@ -1957,7 +1965,7 @@ EOF
 
                 # If it isn't in the source tree, we assume it's generated
                 # in the build tree
-                if (! -f $s) {
+                if (! -f $s || $generate{$_}) {
                     $s = cleanfile($buildd, $_, $blddir);
                 }
 
@@ -2296,6 +2304,8 @@ if ($builder eq "unified") {
 
 EOF
 }
+print OUT
+    "# The following data is only used when this files is use as a script\n";
 print OUT "my \%makevars = (\n";
 foreach (sort keys %user) {
     print OUT '    ',$_,' ' x (20 - length $_),'=> ',
@@ -2318,6 +2328,7 @@ foreach my $what (sort keys %disabled_info) {
     print OUT "    },\n";
 }
 print OUT ");\n";
+print OUT 'my @user_crossable = qw( ', join (' ', @user_crossable), " );\n";
 print OUT << 'EOF';
 # If run directly, we can give some answers, and even reconfigure
 unless (caller) {
@@ -2331,6 +2342,7 @@ unless (caller) {
     my $dump = undef;
     my $cmdline = undef;
     my $options = undef;
+    my $target = undef;
     my $envvars = undef;
     my $makevars = undef;
     my $buildparams = undef;
@@ -2341,6 +2353,7 @@ unless (caller) {
     GetOptions('dump|d'                 => \$dump,
                'command-line|c'         => \$cmdline,
                'options|o'              => \$options,
+               'target|t'               => \$target,
                'environment|e'          => \$envvars,
                'make-variables|m'       => \$makevars,
                'build-parameters|b'     => \$buildparams,
@@ -2350,7 +2363,7 @@ unless (caller) {
                'man'                    => \$man)
         or die "Errors in command line arguments\n";
 
-    unless ($dump || $cmdline || $options || $envvars || $makevars
+    unless ($dump || $cmdline || $options || $target || $envvars || $makevars
             || $buildparams || $reconf || $verbose || $help || $man) {
         print STDERR <<"_____";
 You must give at least one option.
@@ -2368,17 +2381,22 @@ _____
                   -verbose => 2);
     }
     if ($dump || $cmdline) {
-        print "\n(with current working directory = $here)";
-        print "\nCommand line:\n\n";
+        print "\nCommand line (with current working directory = $here):\n\n";
         print '    ',join(' ',
                           $config{perl},
                           catfile($config{sourcedir}, 'Configure'),
                           @{$config{perlargv}}), "\n";
+        print "\nPerl information:\n\n";
+        print '    ',$config{perl_cmd},"\n";
+        print '    ',$config{perl_version},' for ',$config{perl_archname},"\n";
     }
     if ($dump || $options) {
         my $longest = 0;
+        my $longest2 = 0;
         foreach my $what (@disablables) {
             $longest = length($what) if $longest < length($what);
+            $longest2 = length($disabled{$what})
+                if $disabled{$what} && $longest2 < length($disabled{$what});
         }
         print "\nEnabled features:\n\n";
         foreach my $what (@disablables) {
@@ -2388,7 +2406,7 @@ _____
         foreach my $what (@disablables) {
             if ($disabled{$what}) {
                 print "    $what", ' ' x ($longest - length($what) + 1),
-                    "[$disabled{$what}]", ' ' x (10 - length($disabled{$what}));
+                    "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1);
                 print $disabled_info{$what}->{macro}
                     if $disabled_info{$what}->{macro};
                 print ' (skip ',
@@ -2399,6 +2417,21 @@ _____
             }
         }
     }
+    if ($dump || $target) {
+        print "\nConfig target attributes:\n\n";
+        foreach (sort keys %target) {
+            next if $_ =~ m|^_| || $_ eq 'template';
+            my $quotify = sub {
+                map { (my $x = $_) =~ s|([\\\$\@"])|\\$1|g; "\"$x\""} @_;
+            };
+            print '    ', $_, ' => ';
+            if (ref($target{$_}) eq "ARRAY") {
+                print '[ ', join(', ', $quotify->(@{$target{$_}})), " ],\n";
+            } else {
+                print $quotify->($target{$_}), ",\n"
+            }
+        }
+    }
     if ($dump || $envvars) {
         print "\nRecorded environment:\n\n";
         foreach (sort keys %{$config{perlenv}}) {
@@ -2407,13 +2440,17 @@ _____
     }
     if ($dump || $makevars) {
         print "\nMakevars:\n\n";
-        foreach (sort keys %makevars) {
-            print '    ',$_,' ' x (16 - length $_),'= ',
-                (ref $config{$makevars{$_}} eq 'ARRAY'
-                 ? join(' ', @{$config{$makevars{$_}}})
-                 : $config{$makevars{$_}}),
+        foreach my $var (sort keys %makevars) {
+            my $prefix = '';
+            $prefix = $config{cross_compile_prefix}
+                if grep { $var eq $_ } @user_crossable;
+            $prefix //= '';
+            print '    ',$var,' ' x (16 - length $var),'= ',
+                (ref $config{$makevars{$var}} eq 'ARRAY'
+                 ? join(' ', @{$config{$makevars{$var}}})
+                 : $prefix.$config{$makevars{$var}}),
                 "\n"
-                if defined $config{$makevars{$_}};
+                if defined $config{$makevars{$var}};
         }
 
         my @buildfile = ($config{builddir}, $config{build_file});
@@ -2509,7 +2546,8 @@ Print the manual page and exit.
 =item B<--dump> | B<-d>
 
 Print all relevant configuration data.  This is equivalent to B<--command-line>
-B<--options> B<--environment> B<--make-variables> B<--build-parameters>.
+B<--options> B<--target> B<--environment> B<--make-variables>
+B<--build-parameters>.
 
 =item B<--command-line> | B<-c>
 
@@ -2520,6 +2558,10 @@ Print the current configuration command line.
 Print the features, both enabled and disabled, and display defined macro and
 skipped directories where applicable.
 
+=item B<--target> | B<-t>
+
+Print the config attributes for this config target.
+
 =item B<--environment> | B<-e>
 
 Print the environment variables and their values at the time of configuration.
@@ -2562,17 +2604,6 @@ my %builders = (
 
 $builders{$builder}->($builder_platform, @builder_opts);
 
-# Show a note on the use of configdata.pm, but ONLY for release 1.1.1
-# (i.e. this message disappears with the following update, 1.1.1a)
-print <<"EOF" if ($config{version_num} =~ m|^0x1010100.L$|);
-
-NOTE: Starting with OpenSSL 1.1.1, 'Configure' doesn't display all the disabled
-options or the "make variables" with their values.  Instead, you must use
-'configdata.pm' as a script to get a display of the configuration data.  For
-help, please do this:
-
-        perl configdata.pm --help
-EOF
 print <<"EOF" if ($disabled{threads} eq "unavailable");
 
 The library could not be configured for supporting multi-threaded
@@ -2597,6 +2628,18 @@ safest course of action is to clean the source directory and redo this
 configuration.
 EOF
 
+print <<"EOF";
+
+**********************************************************************
+***                                                                ***
+***   If you want to report a building issue, please include the   ***
+***   output from this command:                                    ***
+***                                                                ***
+***     perl configdata.pm --dump                                  ***
+***                                                                ***
+**********************************************************************
+EOF
+
 exit(0);
 
 ######################################################################