my $no_rfc3779=0;
my $no_asm=0;
my $no_dso=0;
-my $Makefile="Makefile";
my $default_ranlib;
$config{fips}=0;
# Allow environment CC to override compiler...
$target{cc} = $ENV{CC} || $target{cc};
-# For cflags and lflags, add the debug_ or release_ attributes
+# For cflags, lflags and ex_libs, add the debug_ or release_ attributes
# Do it in such a way that no spurious space is appended (hence the grep).
$config{cflags} = join(" ",
grep { $_ ne "" } ($target{cflags},
$config{lflags} = join(" ",
grep { $_ ne "" } ($target{lflags},
$target{$build_prefix."lflags"}));
+$config{ex_libs} = join(" ",
+ grep { $_ ne "" } ($target{ex_libs},
+ $target{$build_prefix."ex_libs"}));
$target{ranlib} = $ENV{'RANLIB'} || $target{ranlib} || $default_ranlib;
$target{ar} = $ENV{'AR'} || "ar";
$config{cflags} .= "$exp_cflags";
-# '%' in $config{lflags} is used to split flags to "pre-" and post-flags
-my ($pre,$post)=split('%',$config{lflags});
-if (defined($post)) { $config{prelflags}=$pre; $config{lflags}=$post; }
-else { $config{prelflags}=""; $config{lflags}=$pre; }
-
if ($target =~ /^mingw/ && `$target{cc} --target-help 2>&1` !~ m/-mno-cygwin/m)
{
$config{cflags} =~ s/-mno-cygwin\s*//;
$config{cflags} = "$dso_cflags $config{cflags}";
}
-my $thread_cflags;
+my $thread_cflags = "";
my @thread_defines;
if ($target{thread_cflag} ne "(unknown)" && !$no_threads)
{
print "provide any system-specific compiler options\n";
exit(1);
}
- $thread_cflags="-DOPENSSL_THREADS $config{cflags}" ;
+ $thread_cflags="-DOPENSSL_THREADS" ;
push @thread_defines, "OPENSSL_THREADS";
}
else
{
- $thread_cflags="-DOPENSSL_THREADS $target{thread_cflag} $config{cflags}";
+ $thread_cflags="-DOPENSSL_THREADS $target{thread_cflag}";
push @thread_defines, "OPENSSL_THREADS";
-# my $def;
-# foreach $def (split ' ',$target{thread_cflag})
-# {
-# if ($def =~ s/^-D// && $def !~ /^_/)
-# {
-# push @thread_defines, "$def";
-# }
-# }
}
-$config{lflags}="$libs$config{lflags}" if ($libs ne "");
+$config{ex_libs}="$libs$config{ex_libs}" if ($libs ne "");
if ($no_asm)
{
$config{cflags}=~s/-D[BL]_ENDIAN// if ($config{fips});
- $thread_cflags=~s/-D[BL]_ENDIAN// if ($config{fips});
}
if ($threads)
{
- $config{cflags}.=$thread_cflags;
+ $config{cflags} = "$thread_cflags $config{cflags}" if $thread_cflags;
push @{$config{openssl_thread_defines}}, @thread_defines;
}
{
if (defined($withargs{"zlib-lib"}))
{
- $config{lflags} .= " -L" . $withargs{"zlib-lib"} . " -lz";
+ $config{ex_libs} .= " -L" . $withargs{"zlib-lib"} . " -lz";
}
else
{
- $config{lflags} .= " -lz";
+ $config{ex_libs} .= " -lz";
}
}
else
#
# Platform fix-ups
#
-if ($target =~ /-icc$/) # Intel C compiler
- {
- my $iccver=0;
- if (open(FD,"$target{cc} -V 2>&1 |"))
- {
- while(<FD>) { $iccver=$1 if (/Version ([0-9]+)\./); }
- close(FD);
- }
- if ($iccver>=8)
- {
- $config{cflags}=~s/-KPIC/-fPIC/;
- # Eliminate unnecessary dependency from libirc.a. This is
- # essential for shared library support, as otherwise
- # apps/openssl can end up in endless loop upon startup...
- $config{cflags}.=" -Dmemcpy=__builtin_memcpy -Dmemset=__builtin_memset";
- }
- if ($iccver>=9)
- {
- $config{lflags}.=" -i-static";
- $config{lflags}=~s/-no_cpprt/-no-cpprt/;
- }
- if ($iccver>=10)
- {
- $config{lflags}=~s/-i-static/-static-intel/;
- }
- if ($iccver>=11)
- {
- $config{cflags}.=" -no-intel-extensions"; # disable Cilk
- $config{lflags}=~s/-no-cpprt/-no-cxxlib/;
- }
- }
-
# Unlike other OSes (like Solaris, Linux, Tru64, IRIX) BSD run-time
# linkers (tested OpenBSD, NetBSD and FreeBSD) "demand" RPATH set on
# .so objects. Apparently application RPATH is not global and does
$config{cflags}.=" -DVPAES_ASM" if ($target{aes_obj} =~ m/vpaes/);
$config{cflags}.=" -DBSAES_ASM" if ($target{aes_obj} =~ m/bsaes/);
}
- if ($target{wp_obj} =~ /mmx/ && $config{processor} eq "386") {
- $target{wp_obj}=$table{BASE}->{wp_obj};
- } elsif (!$disabled{"whirlpool"}) {
- $config{cflags}.=" -DWHIRLPOOL_ASM";
+ if ($target{wp_obj} =~ /mmx/) {
+ if ($config{processor} eq "386") {
+ $target{wp_obj}=$table{BASE}->{wp_obj};
+ } elsif (!$disabled{"whirlpool"}) {
+ $config{cflags}.=" -DWHIRLPOOL_ASM";
+ }
}
if ($target{modes_obj} =~ /ghash-/) {
$config{cflags}.=" -DGHASH_ASM";
$config{export_var_as_fn} =0;
my $def_int="unsigned int";
$config{rc4_int} =$def_int;
-$config{rc2_int} =$def_int;
($config{b64l},$config{b64},$config{b32})=(0,0,1);
+my $count = 0;
foreach (sort split(/\s+/,$target{bn_ops})) {
- $config{bn_ll}=1 if /BN_LLONG/;
- $config{rc4_int}="unsigned char" if /RC4_CHAR/;
- ($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})
- =(0,1,0,0,0) if /SIXTY_FOUR_BIT/;
- ($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})
- =(1,0,0,0,0) if /SIXTY_FOUR_BIT_LONG/;
- ($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})
- =(0,0,1,0,0) if /THIRTY_TWO_BIT/;
- $config{export_var_as_fn}=1 if /EXPORT_VAR_AS_FN/;
+ $count++ if /SIXTY_FOUR_BIT|SIXTY_FOUR_BIT_LONG|THIRTY_TWO_BIT/;
+ $config{export_var_as_fn}=1 if $_ eq 'EXPORT_VAR_AS_FN';
+ $config{bn_ll}=1 if $_ eq 'BN_LLONG';
+ $config{rc4_int}="unsigned char" if $_ eq 'RC4_CHAR';
+ ($config{b64l},$config{b64},$config{b32})
+ =(0,1,0) if $_ eq 'SIXTY_FOUR_BIT';
+ ($config{b64l},$config{b64},$config{b32})
+ =(1,0,0) if $_ eq 'SIXTY_FOUR_BIT_LONG';
+ ($config{b64l},$config{b64},$config{b32})
+ =(0,0,1) if $_ eq 'THIRTY_TWO_BIT';
}
+die "Exactly one of SIXTY_FOUR_BIT|SIXTY_FOUR_BIT_LONG|THIRTY_TWO_BIT can be set in bn_ops\n"
+ if $count > 1;
# Hack cflags for better warnings (dev option) #######################
}
if ($target =~ /^BSD-/)
{
- $config{lflags} .= " -lexecinfo";
+ $config{ex_libs} .= " -lexecinfo";
}
}
}
print "IsMK1MF =", ($target{build_scheme}->[0] eq "mk1mf" ? "yes" : "no"), "\n";
print "CC =$target{cc}\n";
print "CFLAG =$config{cflags}\n";
-print "EX_LIBS =$config{lflags}\n";
+print "LFLAGS =$config{lflags}\n";
+print "EX_LIBS =$config{ex_libs}\n";
print "CPUID_OBJ =$target{cpuid_obj}\n";
print "BN_ASM =$target{bn_obj}\n";
print "EC_ASM =$target{ec_obj}\n";
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 "RC2 uses $config{rc2_int}\n" if $config{rc2_int} != $def_int;
-run_dofile("$Makefile.in","$Makefile");
+run_dofile("Makefile.in","Makefile");
+
+run_dofile("util/domd.in", "util/domd");
+chmod 0755, "util/domd";
run_dofile("include/openssl/opensslconf.h.in", "include/openssl/opensslconf.h");
# Copy all Makefile.in to Makefile (except top-level)
use File::Find;
use IO::File;
-find(sub {
- return if ($_ ne "Makefile.in" || $File::Find::dir eq ".");
- my $in = IO::File->new($_, "r") or
- die sprintf "Error reading Makefile.in in %s: !$\n",
+find(
+ {
+ preprocess => sub {
+ grep(!/^\./, @_);
+ },
+ wanted => sub {
+ return if ($_ ne "Makefile.in" || $File::Find::dir eq ".");
+ my $in = IO::File->new($_, "r") or
+ die sprintf "Error reading Makefile.in in %s: !$\n",
$File::Find::dir;
- my $out = IO::File->new("Makefile", "w") or
- die sprintf "Error writing Makefile in %s: !$\n",
+ my $out = IO::File->new("Makefile", "w") or
+ die sprintf "Error writing Makefile in %s: !$\n",
$File::Find::dir;
- print $out "# Generated from $_, do not edit\n";
- while (my $line = <$in>) { print $out $line }
- $in->close() or
- die sprintf "Error reading Makefile.in in %s: !$\n",
+ print $out "# Generated from $_, do not edit\n";
+ while (my $line = <$in>) { print $out $line }
+ $in->close() or
+ die sprintf "Error reading Makefile.in in %s: !$\n",
$File::Find::dir;
- $out->close() or
- die sprintf "Error writing Makefile in %s: !$\n",
+ $out->close() or
+ die sprintf "Error writing Makefile in %s: !$\n",
$File::Find::dir;
- }, ".");
+ },
+ },
+ ".");
my %builders = (
unixmake => sub {
my $in = shift;
my $out = shift;
+ unlink $out || warn "Can't remove $out, $!"
+ if -f $out;
die "Can't open $in, $!" unless -f $in;
- # should we remove $out ?
system("$config{perl} -I. -Mconfigdata util/dofile.pl -o\"Configure\" $in > $out.new");
exit 1 if $? != 0;
rename("$out.new", $out) || die "Can't rename $out.new, $!";
"unistd",
"ld",
"lflags",
+ "ex_libs",
"debug_lflags",
+ "debug_ex_libs",
"release_lflags",
+ "release_ex_libs",
"bn_ops",
"cpuid_obj",
"bn_obj",