require 5.10.0;
use strict;
+use Config;
use File::Basename;
use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs/;
use File::Path qw/mkpath/;
# it grew impossible to resolve this without sizeable additional
# code, so we just tell compiler to be pedantic about everything
# but 'long long' type.
+ . " -Wswitch"
. " -DPEDANTIC -pedantic -Wno-long-long"
. " -Wall"
. " -Wsign-compare"
# These are used in addition to $gcc_devteam_warn when the compiler is clang.
# TODO(openssl-team): fix problems and investigate if (at least) the
# following warnings can also be enabled:
-# -Wswitch-enum
# -Wcast-align
# -Wunreachable-code
# -Wlanguage-extension-token -- no, we use asm()
my $clang_devteam_warn = ""
. " -Qunused-arguments"
. " -Wextra"
+ . " -Wswitch -Wswitch-default"
. " -Wno-unused-parameter"
. " -Wno-missing-field-initializers"
. " -Wno-language-extension-token"
$what = "ripemd" if $what eq "rmd160";
$what = "whrlpool" if $what eq "whirlpool";
- if (grep { $_ eq $what } @{$config{sdirs}})
+ if ($what ne "async" && $what ne "err"
+ && grep { $_ eq $what } @{$config{sdirs}})
{
push @{$config{openssl_algorithm_defines}}, "OPENSSL_NO_$WHAT";
@{$config{sdirs}} = grep { $_ ne $what} @{$config{sdirs}};
}
print "Configuring for $target\n";
-
# Support for legacy targets having a name starting with 'debug-'
my ($d, $t) = $target =~ m/^(debug-)?(.*)$/;
if ($d) {
&usage if (!%target || $target{template});
+my %conf_files = map { $_ => 1 } (@{$target{_conf_fname_int}});
+$config{conf_files} = [ sort keys %conf_files ];
%target = ( %{$table{DEFAULTS}}, %target );
$target{exe_extension}="";
# Allow overriding the names of some tools. USE WITH CARE
# Note: only Unix cares about HASHBANGPERL... that explains
# the default string.
-$config{perl} = $ENV{'PERL'} || ($^O ne "VMS" ? $^X : "perl");
+$config{perl} = ($^O ne "VMS" ? $^X : "perl");
$config{hashbangperl} =
$ENV{'HASHBANGPERL'} || $ENV{'PERL'} || "/usr/bin/env perl";
$target{cc} = $ENV{'CC'} || $target{cc} || "cc";
# We know that GNU C version 3 and up as well as all clang
# versions support dependency generation
$config{makedepprog} = $ccpcc
- if (/clang/ || (/gcc/ && $compiler_major > 3));
+ if (/clang/ || (/gcc/ && $compiler_major >= 3));
$ecc = "clang" if /clang/;
$ecc = "gcc" if /gcc/;
last if ($config{makedepprog} || !$lines--);
my $buildinfo_debug = defined($ENV{CONFIGURE_DEBUG_BUILDINFO});
if ($builder eq "unified") {
- # Store the name of the template file we will build the build file from
- # in %config. This may be useful for the build file itself.
- my @build_file_template_names =
- ( $builder_platform."-".$target{build_file}.".tmpl",
- $target{build_file}.".tmpl" );
- my @build_file_templates = ();
-
- # First, look in the user provided directory, if given
- if (defined $ENV{$local_config_envname}) {
- @build_file_templates =
- map {
- if ($^O eq 'VMS') {
- # VMS environment variables are logical names,
- # which can be used as is
- $local_config_envname . ':' . $_;
- } else {
- catfile($ENV{$local_config_envname}, $_);
- }
- }
- @build_file_template_names;
- }
- # Then, look in our standard directory
- push @build_file_templates,
- ( map { catfile($srcdir, "Configurations", $_) }
- @build_file_template_names );
-
- my $build_file_template;
- for $_ (@build_file_templates) {
- $build_file_template = $_;
- last if -f $build_file_template;
-
- $build_file_template = undef;
- }
- if (!defined $build_file_template) {
- die "*** Couldn't find any of:\n", join("\n", @build_file_templates), "\n";
- }
- $config{build_file_template} = $build_file_template;
-
use lib catdir(dirname(__FILE__),"util");
use with_fallback qw(Text::Template);
return $res;
}
+ # Store the name of the template file we will build the build file from
+ # in %config. This may be useful for the build file itself.
+ my @build_file_template_names =
+ ( $builder_platform."-".$target{build_file}.".tmpl",
+ $target{build_file}.".tmpl" );
+ my @build_file_templates = ();
+
+ # First, look in the user provided directory, if given
+ if (defined $ENV{$local_config_envname}) {
+ @build_file_templates =
+ map {
+ if ($^O eq 'VMS') {
+ # VMS environment variables are logical names,
+ # which can be used as is
+ $local_config_envname . ':' . $_;
+ } else {
+ catfile($ENV{$local_config_envname}, $_);
+ }
+ }
+ @build_file_template_names;
+ }
+ # Then, look in our standard directory
+ push @build_file_templates,
+ ( map { cleanfile($srcdir, catfile("Configurations", $_), $blddir) }
+ @build_file_template_names );
+
+ my $build_file_template;
+ for $_ (@build_file_templates) {
+ $build_file_template = $_;
+ last if -f $build_file_template;
+
+ $build_file_template = undef;
+ }
+ if (!defined $build_file_template) {
+ die "*** Couldn't find any of:\n", join("\n", @build_file_templates), "\n";
+ }
+ $config{build_file_templates}
+ = [ $build_file_template,
+ cleanfile($srcdir, catfile("Configurations", "common.tmpl"),
+ $blddir) ];
+
my @build_infos = ( [ ".", "build.info" ] );
foreach (@{$config{dirs}}) {
push @build_infos, [ $_, "build.info" ]
print OUT "1;\n";
close(OUT);
-
+print "\n";
+print "PROCESSOR =$config{processor}\n" if $config{processor};
+print "PERL =$config{perl}\n";
+print "PERLVERSION =$Config{version} for $Config{archname}\n";
+print "HASHBANGPERL =$config{hashbangperl}\n";
print "CC =$config{cross_compile_prefix}$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";
+#print "RANLIB =", $target{ranlib} eq '$(CROSS_COMPILE)ranlib' ?
+# "$config{cross_compile_prefix}ranlib" :
+# "$target{ranlib}", "\n";
print "EX_LIBS =$target{ex_libs} $config{ex_libs}\n";
-print "APPS_OBJ =$target{apps_obj}\n";
-print "CPUID_OBJ =$target{cpuid_obj}\n";
-print "UPLINK_OBJ =$target{uplink_obj}\n";
-print "BN_ASM =$target{bn_obj}\n";
-print "EC_ASM =$target{ec_obj}\n";
-print "DES_ENC =$target{des_obj}\n";
-print "AES_ENC =$target{aes_obj}\n";
-print "BF_ENC =$target{bf_obj}\n";
-print "CAST_ENC =$target{cast_obj}\n";
-print "RC4_ENC =$target{rc4_obj}\n";
-print "RC5_ENC =$target{rc5_obj}\n";
-print "MD5_OBJ_ASM =$target{md5_obj}\n";
-print "SHA1_OBJ_ASM =$target{sha1_obj}\n";
-print "RMD160_OBJ_ASM=$target{rmd160_obj}\n";
-print "CMLL_ENC =$target{cmll_obj}\n";
-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} eq '$(CROSS_COMPILE)ranlib' ?
- "$config{cross_compile_prefix}ranlib" :
- "$target{ranlib}", "\n";
-print "ARFLAGS =$target{arflags}\n";
-print "PERL =$config{perl}\n";
-print "\n";
-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} ne $def_int;
my %builders = (
unified => sub {
run_dofile(catfile($blddir, $target{build_file}),
- $config{build_file_template},
- catfile($srcdir, "Configurations", "common.tmpl"));
+ @{$config{build_file_templates}});
},
);
$builders{$builder}->($builder_platform, @builder_opts);
-print <<"EOF";
-
-Configured for $target.
-EOF
-
print <<"EOF" if ($disabled{threads} eq "unavailable");
The library could not be configured for supporting multi-threaded
close(CONFFILE);
my %targets = ();
{
- local %table = %::table; # Protect %table from tampering
+ # Protect certain tables from tampering
+ local %table = %::table;
eval $content;
warn $@ if $@;
warn "Misconfigured target configuration for $_ (should be a hash table), ignoring...\n";
}
delete $targets{$_};
- }
+ } else {
+ $targets{$_}->{_conf_fname_int} = add([ $fname ]);
+ }
}
%table = (%table, %targets);