# --config add the given configuration file, which will be read after
# any "Configurations*" files that are found in the same
# directory as this script.
-# --openssldir install OpenSSL in OPENSSLDIR (Default: DIR/ssl if the
-# --prefix option is given; /usr/local/ssl otherwise)
-# --prefix prefix for the OpenSSL include, lib and bin directories
-# (Default: the OPENSSLDIR directory)
+# --prefix prefix for the OpenSSL installation, which includes the
+# directories bin, lib, include, share/man, share/doc/openssl
+# This becomes the value of INSTALLTOP in Makefile
+# (Default: /usr/local)
+# --openssldir OpenSSL data area, such as openssl.cnf, certificates and keys.
+# If it's a relative directory, it will be added on the directory
+# given with --prefix.
+# This becomes the value of OPENSSLDIR in Makefile and in C.
+# (Default: PREFIX/ssl)
#
# --install_prefix Additional prefix for package builders (empty by
# default). This needn't be set in advance, you can
"0.9.8" => "0x00908000L",
};
-# table of known configurations, read in from files
-#
-# The content of each entry comes in the form of config hash table,
-# which has additional attributes for debug and non-debug flags to be
-# added to the common flags, for cflags and lflags:
-#
-# {
-# cc => $cc,
-# cflags => $cflags,
-# debug_cflags => $debug_cflags,
-# release_cflags => $release_cflags,
-# unistd => $unistd,
-# thread_cflag => $thread_cflag,
-# sys_id => $sys_id,
-# lflags => $lflags,
-# debug_lflags => $debug_lflags,
-# release_lflags => $release_lflags,
-# bn_ops => $bn_ops,
-# cpuid_obj => $cpuid_obj,
-# bn_obj => $bn_obj,
-# ec_obj => $ec_obj,
-# des_obj => $des_obj,
-# aes_obj => $aes_obj,
-# bf_obj => $bf_obj,
-# md5_obj => $md5_obj,
-# sha1_obj => $sha1_obj,
-# cast_obj => $cast_obj,
-# rc4_obj => $rc4_obj,
-# rmd160_obj => $rmd160_obj,
-# rc5_obj => $rc5_obj,
-# wp_obj => $wp_obj,
-# cmll_obj => $cmll_obj,
-# modes_obj => $modes_obj,
-# engines_obj => $engines_obj,
-# chacha_obj => $wp_obj,
-# poly1305_obj => $cmll_obj,
-# dso_scheme => $dso_scheme,
-# shared_target => $shared_target,
-# shared_cflag => $shared_cflag,
-# shared_ldflag => $shared_ldflag,
-# shared_extension => $shared_extension,
-# ranlib => $ranlib,
-# arflags => $arflags,
-# multilib => $multilib
-# }
-#
-# The configuration hashes can refer to templates in two different manners:
-#
-# - as part of the hash, one can have a key called 'inherit_from' that
-# indicate what other configuration hashes to inherit data from.
-# These are resolved recursively.
-#
-# Inheritance works as a set of default values that can be overriden
-# by corresponding attribute values in the inheriting configuration.
-#
-# If several configurations are given in the 'inherit_from' array, the
-# values of same attribute are concatenated with space separation.
-# With this, it's possible to have several smaller templates for
-# different configuration aspects that can be combined into a complete
-# configuration.
-#
-# Example:
-#
-# "foo" => {
-# template => 1,
-# haha => "haha",
-# hoho => "ho"
-# },
-# "bar" => {
-# template => 1,
-# hoho => "ho",
-# hehe => "hehe"
-# },
-# "laughter" => {
-# inherit_from => [ "foo", "bar" ],
-# }
-#
-# The entry for "foo" will become as follows after processing:
-#
-# "laughter" => {
-# haha => "haha",
-# hoho => "ho ho",
-# hehe => "hehe"
-# }
-#
-# Note 1: any entry from the table can be used as a template.
-# Note 2: pure templates have the attribute 'template => 1' and cannot
-# be used as targets.
-#
-# - instead of a string, one can have a code block of the form
-# 'sub { /* your code here */ }', where the arguments are the list of
-# inherited values for that key. In fact, the concatenation of strings
-# is really done by using 'sub { join(" ",@_) }' on the list of inherited
-# values.
-#
-# Example:
-#
-# "foo" => {
-# template => 1,
-# haha => "ha ha",
-# hoho => "ho",
-# ignored => "This should not appear in the end result",
-# },
-# "bar" => {
-# template => 1,
-# haha => "ah",
-# hoho => "haho",
-# hehe => "hehe"
-# },
-# "laughter" => {
-# inherit_from => [ "foo", "bar" ],
-# hehe => sub { join(" ",(@_,"!!!")) },
-# ignored => "",
-# }
-#
-# The entry for "foo" will become as follows after processing:
-#
-# "laughter" => {
-# haha => "ha ha ah",
-# hoho => "ho haho",
-# hehe => "hehe !!!",
-# ignored => ""
-# }
-#
-
-our %table=(
-
- # All these templates are merely a translation of the corresponding
- # variables further up.
- #
- # Note: as long as someone might use old style configuration strings,
- # or we bother supporting that, those variables need to stay
-
- x86_asm => {
- template => 1,
- cpuid_obj => "x86cpuid.o",
- bn_obj => "bn-586.o co-586.o x86-mont.o x86-gf2m.o",
- ec_obj => "ecp_nistz256.o ecp_nistz256-x86.o",
- des_obj => "des-586.o crypt586.o",
- aes_obj => "aes-586.o vpaes-x86.o aesni-x86.o",
- bf_obj => "bf-586.o",
- md5_obj => "md5-586.o",
- sha1_obj => "sha1-586.o sha256-586.o sha512-586.o",
- rc4_obj => "rc4-586.o",
- rmd160_obj => "rmd-586.o",
- rc5_obj => "rc5-586.o",
- wp_obj => "wp_block.o wp-mmx.o",
- cmll_obj => "cmll-x86.o",
- modes_obj => "ghash-x86.o",
- engines_obj => "e_padlock-x86.o"
- },
- x86_elf_asm => {
- template => 1,
- inherit_from => [ "x86_asm" ],
- perlasm_scheme => "elf"
- },
- x86_64_asm => {
- template => 1,
- cpuid_obj => "x86_64cpuid.o",
- bn_obj => "x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o rsaz_exp.o rsaz-x86_64.o rsaz-avx2.o",
- ec_obj => "ecp_nistz256.o ecp_nistz256-x86_64.o",
- aes_obj => "aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o aesni-sha256-x86_64.o aesni-mb-x86_64.o",
- md5_obj => "md5-x86_64.o",
- sha1_obj => "sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o sha1-mb-x86_64.o sha256-mb-x86_64.o",
- rc4_obj => "rc4-x86_64.o rc4-md5-x86_64.o",
- wp_obj => "wp-x86_64.o",
- cmll_obj => "cmll-x86_64.o cmll_misc.o",
- modes_obj => "ghash-x86_64.o aesni-gcm-x86_64.o",
- engines_obj => "e_padlock-x86_64.o"
- },
- ia64_asm => {
- template => 1,
- cpuid_obj => "ia64cpuid.o",
- bn_obj => "bn-ia64.o ia64-mont.o",
- aes_obj => "aes_core.o aes_cbc.o aes-ia64.o",
- md5_obj => "md5-ia64.o",
- sha1_obj => "sha1-ia64.o sha256-ia64.o sha512-ia64.o",
- rc4_obj => "rc4-ia64.o rc4_skey.o",
- modes_obj => "ghash-ia64.o",
- perlasm_scheme => "void"
- },
- sparcv9_asm => {
- template => 1,
- cpuid_obj => "sparcv9cap.o sparccpuid.o",
- bn_obj => "bn-sparcv9.o sparcv9-mont.o sparcv9a-mont.o vis3-mont.o sparct4-mont.o sparcv9-gf2m.o",
- ec_obj => "ecp_nistz256.o ecp_nistz256-sparcv9.o",
- des_obj => "des_enc-sparc.o fcrypt_b.o dest4-sparcv9.o",
- aes_obj => "aes_core.o aes_cbc.o aes-sparcv9.o aest4-sparcv9.o",
- md5_obj => "md5-sparcv9.o",
- sha1_obj => "sha1-sparcv9.o sha256-sparcv9.o sha512-sparcv9.o",
- cmll_obj => "camellia.o cmll_misc.o cmll_cbc.o cmllt4-sparcv9.o",
- modes_obj => "ghash-sparcv9.o",
- perlasm_scheme => "void"
- },
- sparcv8_asm => {
- template => 1,
- cpuid_obj => "",
- bn_obj => "sparcv8.o",
- des_obj => "des_enc-sparc.o fcrypt_b.o",
- perlasm_scheme => "void"
- },
- alpha_asm => {
- template => 1,
- cpuid_obj => "alphacpuid.o",
- bn_obj => "bn_asm.o alpha-mont.o",
- sha1_obj => "sha1-alpha.o",
- modes_obj => "ghash-alpha.o",
- perlasm_scheme => "void"
- },
- mips32_asm => {
- template => 1,
- bn_obj => "bn-mips.o mips-mont.o",
- aes_obj => "aes_cbc.o aes-mips.o",
- sha1_obj => "sha1-mips.o sha256-mips.o",
- },
- mips64_asm => {
- inherit_from => [ "mips32_asm" ],
- template => 1,
- sha1_obj => sub { join(" ", @_, "sha512-mips.o") }
- },
- s390x_asm => {
- template => 1,
- cpuid_obj => "s390xcap.o s390xcpuid.o",
- bn_obj => "bn-s390x.o s390x-mont.o s390x-gf2m.o",
- aes_obj => "aes-s390x.o aes-ctr.o aes-xts.o",
- sha1_obj => "sha1-s390x.o sha256-s390x.o sha512-s390x.o",
- rc4_obj => "rc4-s390x.o",
- modes_obj => "ghash-s390x.o",
- },
- armv4_asm => {
- template => 1,
- cpuid_obj => "armcap.o armv4cpuid.o",
- bn_obj => "bn_asm.o armv4-mont.o armv4-gf2m.o",
- ec_obj => "ecp_nistz256.o ecp_nistz256-armv4.o",
- aes_obj => "aes_cbc.o aes-armv4.o bsaes-armv7.o aesv8-armx.o",
- sha1_obj => "sha1-armv4-large.o sha256-armv4.o sha512-armv4.o",
- modes_obj => "ghash-armv4.o ghashv8-armx.o",
- perlasm_scheme => "void"
- },
- aarch64_asm => {
- template => 1,
- cpuid_obj => "armcap.o arm64cpuid.o mem_clr.o",
- ec_obj => "ecp_nistz256.o ecp_nistz256-armv8.o",
- bn_obj => "bn_asm.o armv8-mont.o",
- aes_obj => "aes_core.o aes_cbc.o aesv8-armx.o vpaes-armv8.o",
- sha1_obj => "sha1-armv8.o sha256-armv8.o sha512-armv8.o",
- modes_obj => "ghashv8-armx.o",
- },
- parisc11_asm => {
- template => 1,
- cpuid_obj => "pariscid.o",
- bn_obj => "bn_asm.o parisc-mont.o",
- aes_obj => "aes_core.o aes_cbc.o aes-parisc.o",
- sha1_obj => "sha1-parisc.o sha256-parisc.o sha512-parisc.o",
- rc4_obj => "rc4-parisc.o",
- modes_obj => "ghash-parisc.o",
- perlasm_scheme => "32"
- },
- parisc20_64_asm => {
- template => 1,
- inherit_from => [ "parisc11_asm" ],
- bn_obj => sub { my $r=join(" ",@_); $r=~s/bn_asm/pa-risc2W/; $r; },
- perlasm_scheme => "64",
- },
- ppc64_asm => {
- template => 1,
- cpuid_obj => "ppccpuid.o ppccap.o",
- bn_obj => "bn-ppc.o ppc-mont.o ppc64-mont.o",
- aes_obj => "aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o aesp8-ppc.o",
- sha1_obj => "sha1-ppc.o sha256-ppc.o sha512-ppc.o sha256p8-ppc.o sha512p8-ppc.o",
- modes_obj => "ghashp8-ppc.o",
- },
- ppc32_asm => {
- inherit_from => [ "ppc64_asm" ],
- template => 1
- },
-);
+my $base_target = "BASE"; # The template that all other inherit from
+our %table = ();
# Forward declarations ###############################################
&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="";
my $no_dso=0;
my @skip=();
my $Makefile="Makefile";
-my $des_locl="crypto/des/des_locl.h";
-my $des ="include/openssl/des.h";
-my $bn ="include/openssl/bn.h";
-my $md2 ="include/openssl/md2.h";
-my $rc4 ="include/openssl/rc4.h";
-my $rc4_locl="crypto/rc4/rc4_locl.h";
-my $idea ="include/openssl/idea.h";
-my $rc2 ="include/openssl/rc2.h";
-my $bf ="crypto/bf/bf_locl.h";
-my $bn_asm ="bn_asm.o";
-my $des_enc="des_enc.o fcrypt_b.o";
-my $aes_enc="aes_core.o aes_cbc.o";
-my $bf_enc ="bf_enc.o";
-my $cast_enc="c_enc.o";
-my $rc4_enc="rc4_enc.o rc4_skey.o";
-my $rc5_enc="rc5_enc.o";
-my $cmll_enc="camellia.o cmll_misc.o cmll_cbc.o";
-my $chacha_enc="chacha_enc.o";
my $processor="";
my $default_ranlib;
my $perl;
$target = "Cygwin".$1;
}
-print "Configuring for $target\n";
-
-# Support for legacy targets having a name starting with 'debug-'
-my ($d, $t) = $target =~ m/^(debug-)?(.*)$/;
-if ($d) {
- $build_prefix = "debug_";
-
- # If we do not find debug-foo in the table, the target is set to foo,
- # but only if the foo target has a noon-empty debug_cflags or debug_lflags
- # attribute.
- if (!$table{$target}) {
- $target = $t;
- }
-}
-my %target = resolve_config($target);
-
-&usage if (!%target || $target{template});
-
foreach (sort (keys %disabled))
{
$options .= " no-$_";
$exp_cflags .= " -DOPENSSL_EXPERIMENTAL_$ALGO";
}
-my $IsMK1MF=scalar grep /^$target$/,@MK1MF_Builds;
+print "Configuring for $target\n";
+
+# Support for legacy targets having a name starting with 'debug-'
+my ($d, $t) = $target =~ m/^(debug-)?(.*)$/;
+if ($d) {
+ $build_prefix = "debug_";
+
+ # If we do not find debug-foo in the table, the target is set to foo.
+ if (!$table{$target}) {
+ $target = $t;
+ }
+}
+
+delete $table{$base_target}->{template}; # or the next test will fail.
+my %target = ( %{$table{$base_target}}, resolve_config($target) );
+
+&usage if (!%target || $target{template});
$exe_ext=".exe" if ($target eq "Cygwin" || $target eq "DJGPP" || $target =~ /^mingw/);
$exe_ext=".nlm" if ($target =~ /netware/);
$exe_ext=".pm" if ($target =~ /vos/);
-$openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq "");
-$prefix=$openssldir if $prefix eq "";
$default_ranlib= &which("ranlib") or $default_ranlib="true";
$perl=$ENV{'PERL'} or $perl=&which("perl5") or $perl=&which("perl")
$cross_compile_prefix=$ENV{'CROSS_COMPILE'} if $cross_compile_prefix eq "";
-chop $openssldir if $openssldir =~ /\/$/;
-chop $prefix if $prefix =~ /.\/$/;
-
-$openssldir=$prefix . "/ssl" if $openssldir eq "";
-$openssldir=$prefix . "/" . $openssldir if $openssldir !~ /(^\/|^[a-zA-Z]:[\\\/])/;
+$prefix = "/usr/local" if !$prefix;
+$openssldir = "ssl" if !$openssldir;
+$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};
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
if ($no_asm)
{
- $cpuid_obj=$bn_obj=$ec_obj=
- $des_obj=$aes_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj=$cmll_obj=
- $modes_obj=$sha1_obj=$md5_obj=$rmd160_obj=$wp_obj=$engines_obj=
- $chacha_obj=$poly1305_obj="";
$cflags=~s/\-D[BL]_ENDIAN// if ($fips);
$thread_cflags=~s/\-D[BL]_ENDIAN// if ($fips);
}
-elsif (defined($disabled{ec2m}))
- {
- $bn_obj =~ s/\w+-gf2m.o//;
- }
-
-if (!$no_shared)
- {
- $cast_obj=""; # CAST assembler is not PIC
- }
if ($threads)
{
}
}
-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)
}
}
-$cpuid_obj.=" uplink.o uplink-x86.o" if ($cflags =~ /\-DOPENSSL_USE_APPLINK/);
-
#
# Platform fix-ups
#
$ranlib = $default_ranlib;
}
-#my ($bn1)=split(/\s+/,$bn_obj);
-#$bn1 = "" unless defined $bn1;
-#$bn1=$bn_asm unless ($bn1 =~ /\.o$/);
-#$bn_obj="$bn1";
+if (!$no_asm) {
+ $cpuid_obj=$table{BASE}->{cpuid_obj} if ($processor eq "386");
+ $cpuid_obj.=" uplink.o uplink-x86.o" if ($cflags =~ /\-DOPENSSL_USE_APPLINK/);
-$cpuid_obj="" if ($processor eq "386");
+ $bn_obj =~ s/\w+-gf2m.o// if (defined($disabled{ec2m}));
-$bn_obj = $bn_asm unless $bn_obj ne "";
-# bn-586 is the only one implementing bn_*_part_words
-$cflags.=" -DOPENSSL_BN_ASM_PART_WORDS" if ($bn_obj =~ /bn-586/);
-$cflags.=" -DOPENSSL_IA32_SSE2" if (!$no_sse2 && $bn_obj =~ /86/);
+ # bn-586 is the only one implementing bn_*_part_words
+ $cflags.=" -DOPENSSL_BN_ASM_PART_WORDS" if ($bn_obj =~ /bn-586/);
+ $cflags.=" -DOPENSSL_IA32_SSE2" if (!$no_sse2 && $bn_obj =~ /86/);
-$cflags.=" -DOPENSSL_BN_ASM_MONT" if ($bn_obj =~ /-mont/);
-$cflags.=" -DOPENSSL_BN_ASM_MONT5" if ($bn_obj =~ /-mont5/);
-$cflags.=" -DOPENSSL_BN_ASM_GF2m" if ($bn_obj =~ /-gf2m/);
+ $cflags.=" -DOPENSSL_BN_ASM_MONT" if ($bn_obj =~ /-mont/);
+ $cflags.=" -DOPENSSL_BN_ASM_MONT5" if ($bn_obj =~ /-mont5/);
+ $cflags.=" -DOPENSSL_BN_ASM_GF2m" if ($bn_obj =~ /-gf2m/);
-if ($fips)
- {
+ if ($fips) {
$openssl_other_defines.="#define OPENSSL_FIPS\n";
- }
+ }
-$cpuid_obj="mem_clr.o" unless ($cpuid_obj =~ /\.o$/);
-$des_obj=$des_enc unless ($des_obj =~ /\.o$/);
-$bf_obj=$bf_enc unless ($bf_obj =~ /\.o$/);
-$cast_obj=$cast_enc unless ($cast_obj =~ /\.o$/);
-$rc4_obj=$rc4_enc unless ($rc4_obj =~ /\.o$/);
-$rc5_obj=$rc5_enc unless ($rc5_obj =~ /\.o$/);
-if ($sha1_obj =~ /\.o$/)
- {
-# $sha1_obj=$sha1_enc;
+ if ($sha1_obj =~ /\.o$/) {
$cflags.=" -DSHA1_ASM" if ($sha1_obj =~ /sx86/ || $sha1_obj =~ /sha1/);
$cflags.=" -DSHA256_ASM" if ($sha1_obj =~ /sha256/);
$cflags.=" -DSHA512_ASM" if ($sha1_obj =~ /sha512/);
- if ($sha1_obj =~ /sse2/)
- { if ($no_sse2)
- { $sha1_obj =~ s/\S*sse2\S+//; }
- elsif ($cflags !~ /OPENSSL_IA32_SSE2/)
- { $cflags.=" -DOPENSSL_IA32_SSE2"; }
+ if ($sha1_obj =~ /sse2/) {
+ if ($no_sse2) {
+ $sha1_obj =~ s/\S*sse2\S+//;
+ } elsif ($cflags !~ /OPENSSL_IA32_SSE2/) {
+ $cflags.=" -DOPENSSL_IA32_SSE2";
}
}
-if ($md5_obj =~ /\.o$/)
- {
-# $md5_obj=$md5_enc;
+ }
+ if ($md5_obj =~ /\.o$/) {
$cflags.=" -DMD5_ASM";
- }
-if ($rmd160_obj =~ /\.o$/)
- {
-# $rmd160_obj=$rmd160_enc;
+ }
+ $cast_obj=$table{BASE}->{cast_obj} if (!$no_shared); # CAST assembler is not PIC
+ if ($rmd160_obj =~ /\.o$/) {
$cflags.=" -DRMD160_ASM";
- }
-if ($aes_obj =~ /\.o$/)
- {
+ }
+ if ($aes_obj =~ /\.o$/) {
$cflags.=" -DAES_ASM" if ($aes_obj =~ m/\baes\-/);;
# aes-ctr.o is not a real file, only indication that assembler
# module implements AES_ctr32_encrypt...
$aes_obj =~ s/\s*(vpaes|aesni)\-x86\.o//g if ($no_sse2);
$cflags.=" -DVPAES_ASM" if ($aes_obj =~ m/vpaes/);
$cflags.=" -DBSAES_ASM" if ($aes_obj =~ m/bsaes/);
- }
-else {
- $aes_obj=$aes_enc;
- }
-$wp_obj="" if ($wp_obj =~ /mmx/ && $processor eq "386");
-if ($wp_obj =~ /\.o$/ && !$disabled{"whirlpool"})
- {
+ }
+ if ($wp_obj =~ /mmx/ && $processor eq "386") {
+ $wp_obj=$table{BASE}->{wp_obj};
+ } elsif (!$disabled{"whirlpool"}) {
$cflags.=" -DWHIRLPOOL_ASM";
- }
-else {
- $wp_obj="wp_block.o";
- }
-$cmll_obj=$cmll_enc unless ($cmll_obj =~ /.o$/);
-if ($modes_obj =~ /ghash\-/)
- {
+ }
+ if ($modes_obj =~ /ghash\-/) {
$cflags.=" -DGHASH_ASM";
- }
-if ($ec_obj =~ /ecp_nistz256/)
- {
+ }
+ if ($ec_obj =~ /ecp_nistz256/) {
$cflags.=" -DECP_NISTZ256_ASM";
- }
-$chacha_obj=$chacha_enc unless ($chacha_obj =~ /\.o$/);
-if ($poly1305_obj =~ /\.o$/)
- {
+ }
+ if ($poly1305_obj =~ /\.o$/) {
$cflags.=" -DPOLY1305_ASM";
- }
+ }
+}
# "Stringify" the C flags string. This permits it to be made part of a string
# and works as well on command lines.
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";
($export_var_as_fn)?"define":"undef"; }
elsif (/^#define\s+OPENSSL_UNISTD/)
{
- $unistd = "<unistd.h>" if $unistd eq "";
print OUT "#define OPENSSL_UNISTD $unistd\n";
}
elsif (/^#((define)|(undef))\s+SIXTY_FOUR_BIT_LONG/)
$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
#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
END
END
EOF
- close(OUT);
- }
+ close(OUT);
+ }
+ },
+ );
+
+my ($builder, @builder_opts) = @build_scheme;
+$builders{$builder}->(@builder_opts);
print <<"EOF";
}
}
+# 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.
# 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(' ',@_) };
+ my $default_combiner = add(" ");
my %all_keys =
map { $_ => 1 } (keys %combined_inheritance,
# 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.