# exclude.
#
+use lib ".";
+use configdata;
+use File::Spec::Functions;
+
my $debug=0;
-my $crypto_num= "util/libeay.num";
-my $ssl_num= "util/ssleay.num";
+my $crypto_num= catfile($config{sourcedir},"util","libeay.num");
+my $ssl_num= catfile($config{sourcedir},"util","ssleay.num");
my $libname;
my $do_update = 0;
"CRYPTO_MDEBUG",
# Engines
"STATIC_ENGINE", "ENGINE", "HW", "GMP",
- # X.509v3 Signed Certificate Timestamps
- "SCT",
+ # Entropy Gathering
+ "EGD",
+ # Certificate Transparency
+ "CT",
# RFC3779
"RFC3779",
# TLS
"CAPIENG",
# SSL v3 method
"SSL3_METHOD",
- # JPAKE
- "JPAKE",
# NEXTPROTONEG
"NEXTPROTONEG",
# Deprecated functions
foreach (@known_algorithms) {
$disabled_algorithms{$_} = 0;
}
-
-my $options="";
-open(IN,"<Makefile") || die "unable to open Makefile!\n";
-while(<IN>) {
- $options=$1 if (/^OPTIONS=(.*)$/);
-}
-close(IN);
+# disabled by default
+$disabled_algorithms{"STATIC_ENGINE"} = 1;
my $zlib;
-foreach (@ARGV, split(/ /, $options))
+foreach (@ARGV, split(/ /, $config{options}))
{
$debug=1 if $_ eq "debug";
$W32=1 if $_ eq "32";
$do_ctest=1 if $_ eq "ctest";
$do_ctestall=1 if $_ eq "ctestall";
$do_checkexist=1 if $_ eq "exist";
- #$safe_stack_def=1 if $_ eq "-DDEBUG_SAFESTACK";
if (/^--api=(\d+)\.(\d+)\.(\d+)$/) {
my $apiv = sprintf "%x%02x%02x", $1, $2, $3;
foreach (keys %disabled_algorithms) {
$ssl.=" include/openssl/tls1.h";
$ssl.=" include/openssl/srtp.h";
+# We use headers found in include/openssl and include/internal only.
+# The latter is needed so libssl.so/.dll/.exe can link properly.
my $crypto ="include/openssl/crypto.h";
-$crypto.=" crypto/include/internal/cryptlib.h";
-$crypto.=" crypto/include/internal/chacha.h"; # unless $no_chacha;
-$crypto.=" crypto/include/internal/poly1305.h"; # unless $no_poly1305;
$crypto.=" include/internal/o_dir.h";
$crypto.=" include/internal/o_str.h";
+$crypto.=" include/internal/threads.h";
$crypto.=" include/openssl/des.h" ; # unless $no_des;
$crypto.=" include/openssl/idea.h" ; # unless $no_idea;
$crypto.=" include/openssl/rc4.h" ; # unless $no_rc4;
$crypto.=" include/openssl/ocsp.h";
$crypto.=" include/openssl/ui.h";
#$crypto.=" include/openssl/store.h";
-$crypto.=" include/openssl/pqueue.h";
$crypto.=" include/openssl/cms.h";
-$crypto.=" include/openssl/jpake.h";
$crypto.=" include/openssl/srp.h";
$crypto.=" include/openssl/modes.h";
$crypto.=" include/openssl/async.h";
+$crypto.=" include/openssl/ct.h";
+$crypto.=" include/openssl/kdf.h";
my $symhacks="include/openssl/symhacks.h";
foreach $file (split(/\s+/,$symhacksfile." ".$files))
{
- print STDERR "DEBUG: starting on $file:\n" if $debug;
- open(IN,"<$file") || die "unable to open $file:$!\n";
+ my $fn = catfile($config{sourcedir},$file);
+ print STDERR "DEBUG: starting on $fn:\n" if $debug;
+ open(IN,"<$fn") || die "unable to open $fn:$!\n";
my $line = "", my $def= "";
my %tag = (
(map { $_ => 0 } @known_platforms),
if($parens > 0) {
#Inside a DEPRECATEDIN
$stored_multiline .= $_;
- chomp $stored_multiline;
+ $stored_multiline =~ s|\R$||; # Better chomp
print STDERR "DEBUG: Continuing multiline DEPRECATEDIN: $stored_multiline\n" if $debug;
$parens = count_parens($stored_multiline);
if ($parens == 0) {
}
if (/\\$/) {
- chomp; # remove eol
- chop; # remove ending backslash
- $line = $_;
+ $line = $`; # keep what was before the backslash
next;
}
$cpp++ if /^#\s*if/;
$cpp-- if /^#\s*endif/;
next;
- }
- $cpp = 1 if /^#.*ifdef.*cplusplus/;
+ }
+ if (/^#.*ifdef.*cplusplus/) {
+ $cpp = 1;
+ next;
+ }
s/{[^{}]*}//gs; # ignore {} blocks
print STDERR "DEBUG: \$def=\"$def\"\n" if $debug && $def ne "";
pop(@tag);
} elsif (/^\#\s*else/) {
my $tag_i = $#tag;
+ die "$file unmatched else\n" if $tag_i < 0;
while($tag[$tag_i] ne "-") {
my $t=$tag[$tag_i];
$tag{$t}= -$tag{$t};
push(@tag,"TRUE");
$tag{"TRUE"}=-1;
print STDERR "DEBUG: $file: found 0\n" if $debug;
+ } elsif (/^\#\s*if\s+/) {
+ #Some other unrecognized "if" style
+ push(@tag,"-");
} elsif (/^\#\s*define\s+(\w+)\s+(\w+)/
&& $symhacking && $tag{'TRUE'} != -1) {
# This is for aliasing. When we find an alias,
next;
}
if ($tag{'TRUE'} != -1) {
- if (/^\s*DECLARE_STACK_OF\s*\(\s*(\w*)\s*\)/) {
+ if (/^\s*DEFINE_STACK_OF\s*\(\s*(\w*)\s*\)/
+ || /^\s*DEFINE_STACK_OF_CONST\s*\(\s*(\w*)\s*\)/) {
next;
} elsif (/^\s*DECLARE_ASN1_ENCODE_FUNCTIONS\s*\(\s*(\w*)\s*,\s*(\w*)\s*,\s*(\w*)\s*\)/) {
$def .= "int d2i_$3(void);";
\@current_algorithms);
} else {
$stored_multiline = $_;
- chomp $stored_multiline;
+ $stored_multiline =~ s|\R$||;
print STDERR "DEBUG: Found multiline DEPRECATEDIN starting with: $stored_multiline\n" if $debug;
next;
}
}
}
close(IN);
+ die "$file: Unmatched tags\n" if $#tag >= 0;
my $algs;
my $plays;
return $ret;
}
-sub info_string {
+sub info_string
+{
(my $symbol, my $exist, my $platforms, my $kind, my $algorithms) = @_;
my %a = defined($algorithms) ?
return $ret;
}
-sub maybe_add_info {
+sub maybe_add_info
+{
(my $name, *nums, my @symbols) = @_;
my $sym;
my $new_info = 0;
my %syms=();
- print STDERR "Updating $name info\n";
foreach $sym (@symbols) {
(my $s, my $i) = split /\\/, $sym;
if (defined($nums{$s})) {
}
}
if ($new_info) {
- print STDERR "$new_info old symbols got an info update\n";
+ print STDERR "$name: $new_info old symbols have updated info\n";
if (!$do_rewrite) {
print STDERR "You should do a rewrite to fix this.\n";
}
} else {
- print STDERR "No old symbols needed info update\n";
}
}
}
}
-sub get_version {
- local *MF;
- my $v = '?';
- open MF, 'Makefile' or return $v;
- while (<MF>) {
- $v = $1, last if /^VERSION=(.*?)\s*$/;
- }
- close MF;
- return $v;
+sub get_version
+{
+ return $config{version};
}
sub print_def_file
my $prevsymversion = "", $prevprevsymversion = "";
# For VMS
my $prevnum = 0;
- my $symbolcount = 0;
+ my $symvtextcount = 0;
if ($W32)
{ $libname.="32"; }
}
elsif ($VMS)
{
- my $libref = $name eq "ssl" ? "LIBCRYPTO.EXE /SHARE" : "";
print OUT <<"EOF";
-IDENTIFICATION="LIB$libname V$version"
-LIB$libname.OLB /LIBRARY
-$libref
+CASE_SENSITIVE=YES
SYMBOL_VECTOR=(-
EOF
+ $symvtextcount = 16; # length of "SYMBOL_VECTOR=(-"
}
(@r)=grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:FUNCTION/,@symbols);
print OUT " $s2;\n";
} elsif ($VMS) {
while(++$prevnum < $n) {
- if ($symbolcount > 1023) {
+ my $symline=" ,SPARE -\n ,SPARE -\n";
+ if ($symvtextcount + length($symline) - 2 > 1024) {
print OUT ")\nSYMBOL_VECTOR=(-\n";
- $symbolcount = 0;
+ $symvtextcount = 16; # length of "SYMBOL_VECTOR=(-"
+ }
+ if ($symvtextcount == 16) {
+ # Take away first comma
+ $symline =~ s/,//;
}
- print OUT $symbolcount
- ? " ," : " ";
- print OUT "dummy$prevnum=PRIVATE_PROCEDURE -\n";
- $symbolcount++;
+ print OUT $symline;
+ $symvtextcount += length($symline) - 2;
}
(my $s_uc = $s) =~ tr/a-z/A-Z/;
- if ($symbolcount > 1023) {
+ my $symtype=
+ $v ? "DATA" : "PROCEDURE";
+ my $symline=
+ ($s_uc ne $s
+ ? " ,$s_uc/$s=$symtype -\n ,$s=$symtype -\n"
+ : " ,$s=$symtype -\n ,SPARE -\n");
+ if ($symvtextcount + length($symline) - 2 > 1024) {
print OUT ")\nSYMBOL_VECTOR=(-\n";
- $symbolcount = 0;
+ $symvtextcount = 16; # length of "SYMBOL_VECTOR=(-"
}
- print OUT $symbolcount
- ? " ," : " ";
- print OUT "$s_uc/$s="
- , ($v ? "DATA" : "PROCEDURE"), " -\n";
- $symbolcount++;
+ if ($symvtextcount == 16) {
+ # Take away first comma
+ $symline =~ s/,//;
+ }
+ print OUT $symline;
+ $symvtextcount += length($symline) - 2;
} elsif($v && !$OS2) {
printf OUT " %s%-39s @%-8d DATA\n",
($W32)?"":"_",$s2,$n;
open(IN,"<$name") || die "unable to open $name:$!\n";
while (<IN>) {
- chop;
+ s|\R$||; # Better chomp
s/#.*$//;
next if /^\s*$/;
@a=split;
(*OUT,$name,*nums,@symbols)=@_;
my $thing;
- print STDERR "Rewriting $name\n";
-
my @r = grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:\w+\(\w+\)/,@symbols);
my $r; my %r; my %rsyms;
foreach $r (@r) {
($basevers, $vers) = get_openssl_version();
- print STDERR "Updating $name numbers\n";
-
my @r = grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:\w+\(\w+\)/,@symbols);
my $r; my %r; my %rsyms;
foreach $r (@r) {
}
}
if($new_syms) {
- print STDERR "$new_syms New symbols added\n";
+ print STDERR "$name: Added $new_syms new symbols\n";
} else {
- print STDERR "No New symbols Added\n";
+ print STDERR "$name: No new symbols added\n";
}
}
#version
sub get_openssl_version()
{
- open (IN, "include/openssl/opensslv.h") || die "Can't open opensslv.h";
+ my $fn = catfile($config{sourcedir},"include","openssl","opensslv.h");
+ open (IN, "$fn") || die "Can't open opensslv.h";
while(<IN>) {
if (/OPENSSL_VERSION_TEXT\s+"OpenSSL (\d\.\d\.)(\d[a-z]*)(-| )/) {
my $suffix = $2;
- my $baseversion = $1 =~ s/\./_/gr;
+ (my $baseversion = $1) =~ s/\./_/g;
close IN;
return ($baseversion."0", $baseversion.$suffix);
}