X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=util%2Fmkdef.pl;h=e1f2ca99a10571bb911b830e5a0a4c8fd3c59c43;hp=fa683330e8e9b83a18cb35e6162178e45bd26bb6;hb=e2d795cb968d823c40b411c9b46cd79280d00f52;hpb=b7896b3cb86d80206af14a14d69b0717786f2729 diff --git a/util/mkdef.pl b/util/mkdef.pl index fa683330e8..e1f2ca99a1 100755 --- a/util/mkdef.pl +++ b/util/mkdef.pl @@ -15,7 +15,10 @@ foreach (@ARGV) $NT=1 if $_ eq "32"; $NT=0 if $_ eq "16"; $do_ssl=1 if $_ eq "ssleay"; + $do_ssl=1 if $_ eq "ssl"; $do_crypto=1 if $_ eq "libeay"; + $do_crypto=1 if $_ eq "crypto"; + $do_update=1 if $_ eq "update"; } if (!$do_ssl && !$do_crypto) @@ -25,7 +28,9 @@ if (!$do_ssl && !$do_crypto) } %ssl_list=&load_numbers($ssl_num); +$max_ssl = $max_num; %crypto_list=&load_numbers($crypto_num); +$max_crypto = $max_num; $ssl="ssl/ssl.h"; @@ -33,12 +38,15 @@ $crypto ="crypto/crypto.h"; $crypto.=" crypto/des/des.h"; $crypto.=" crypto/idea/idea.h"; $crypto.=" crypto/rc4/rc4.h"; +$crypto.=" crypto/rc5/rc5.h"; $crypto.=" crypto/rc2/rc2.h"; $crypto.=" crypto/bf/blowfish.h"; -$crypto.=" crypto/md/md2.h"; -$crypto.=" crypto/md/md5.h"; +$crypto.=" crypto/cast/cast.h"; +$crypto.=" crypto/md2/md2.h"; +$crypto.=" crypto/md5/md5.h"; $crypto.=" crypto/mdc2/mdc2.h"; $crypto.=" crypto/sha/sha.h"; +$crypto.=" crypto/ripemd/ripemd.h"; $crypto.=" crypto/bn/bn.h"; $crypto.=" crypto/rsa/rsa.h"; @@ -62,16 +70,42 @@ $crypto.=" crypto/err/err.h"; $crypto.=" crypto/pkcs7/pkcs7.h"; $crypto.=" crypto/x509/x509.h"; $crypto.=" crypto/x509/x509_vfy.h"; +$crypto.=" crypto/x509v3/x509v3.h"; $crypto.=" crypto/rand/rand.h"; +$crypto.=" crypto/hmac/hmac.h"; +$crypto.=" crypto/comp/comp.h"; +$crypto.=" crypto/tmdiff.h"; $match{'NOPROTO'}=1; $match2{'PERL5'}=1; -&print_def_file(*STDOUT,"SSLEAY",*ssl_list,&do_defs("SSLEAY",$ssl)) - if $do_ssl == 1; +@ssl_func = &do_defs("SSLEAY", $ssl); +@crypto_func = &do_defs("LIBEAY", $crypto); + +if ($do_update) { + +if ($do_ssl == 1) { + open(OUT, ">>$ssl_num"); + &update_numbers(*OUT,"SSLEAY",*ssl_list,$max_ssl, @ssl_func); + close OUT; +} + +if($do_crypto == 1) { + open(OUT, ">>$crypto_num"); + &update_numbers(*OUT,"LIBEAY",*crypto_list,$max_crypto, @crypto_func); + close OUT; +} + +} else { + + &print_def_file(*STDOUT,"SSLEAY",*ssl_list,@ssl_func) + if $do_ssl == 1; + + &print_def_file(*STDOUT,"LIBEAY",*crypto_list,@crypto_func) + if $do_crypto == 1; + +} -&print_def_file(*STDOUT,"LIBEAY",*crypto_list,&do_defs("LIBEAY",$crypto)) - if $do_crypto == 1; sub do_defs { @@ -91,48 +125,51 @@ sub do_defs while (($i=index($a,"/*")) >= 0) { $j=index($a,"*/"); - break unless ($j >= 0); + last unless ($j >= 0); $a=substr($a,0,$i).substr($a,$j+2); # print "$i $j\n"; } foreach (split("\n",$a)) { - if (/^\#ifndef (.*)/) + if (/^\#\s*ifndef (.*)/) { push(@tag,$1); $tag{$1}=-1; next; } - elsif (/^\#if !defined\(([^\)]+)\)/) + elsif (/^\#\s*if !defined\(([^\)]+)\)/) { push(@tag,$1); $tag{$1}=-1; next; } - elsif (/^\#ifdef (.*)/) + elsif (/^\#\s*ifdef (.*)/) { push(@tag,$1); $tag{$1}=1; next; } - elsif (/^\#if (.*)/) + elsif (/^\#\s*if defined(.*)/) { push(@tag,$1); $tag{$1}=1; next; } - elsif (/^\#endif/) + elsif (/^\#\s*endif/) { $tag{$tag[$#tag]}=0; pop(@tag); next; } - elsif (/^\#else/) + elsif (/^\#\s*else/) { $t=$tag[$#tag]; $tag{$t}= -$tag{$t}; next; } +#printf STDERR "$_\n%2d %2d %2d %2d %2d $NT\n", +#$tag{'NOPROTO'},$tag{'FreeBSD'},$tag{'WIN16'},$tag{'PERL5'},$tag{'NO_FP_API'}; + $t=undef; if (/^extern .*;$/) { $t=&do_extern($name,$_); } @@ -140,12 +177,20 @@ sub do_defs ($tag{'FreeBSD'} != 1) && (($NT && ($tag{'WIN16'} != 1)) || (!$NT && ($tag{'WIN16'} != -1))) && - ($tag{'PERL5'} != 1)) + ($tag{'PERL5'} != 1) && +# ($tag{'_WINDLL'} != -1) && + ((!$NT && $tag{'_WINDLL'} != -1) || + ($NT && $tag{'_WINDLL'} != 1)) && + ((($tag{'NO_FP_API'} != 1) && $NT) || + (($tag{'NO_FP_API'} != -1) && !$NT))) { $t=&do_line($name,$_); } + else + { $t=undef; } if (($t ne undef) && (!$done{$name,$t})) { $done{$name,$t}++; push(@ret,$t); +#printf STDERR "one:$t\n" if $t =~ /BIO_/; } } close(IN); @@ -160,6 +205,7 @@ sub do_line return(undef) if /^$/; return(undef) if /^\s/; +#printf STDERR "two:$_\n" if $_ =~ /BIO_/; if (/(CRYPTO_get_locking_callback)/) { return($1); } elsif (/(CRYPTO_get_id_callback)/) @@ -168,6 +214,22 @@ sub do_line { return($1); } elsif (/(SSL_CTX_get_verify_callback)/) { return($1); } + elsif (/(SSL_get_info_callback)/) + { return($1); } + elsif ((!$NT) && /(ERR_load_CRYPTO_strings)/) + { return("ERR_load_CRYPTOlib_strings"); } + elsif (!$NT && /BIO_s_file/) + { return(undef); } + elsif (!$NT && /BIO_new_file/) + { return(undef); } + elsif (!$NT && /BIO_new_fp/) + { return(undef); } + elsif ($NT && /BIO_s_file_internal/) + { return(undef); } + elsif ($NT && /BIO_new_file_internal/) + { return(undef); } + elsif ($NT && /BIO_new_fp_internal/) + { return(undef); } else { /\s\**(\S+)\s*\(/; @@ -196,12 +258,12 @@ sub print_def_file print OUT <<"EOF"; ; -; Definition file for the DDL version of the $name library from SSLeay +; Definition file for the DLL version of the $name library from OpenSSL ; LIBRARY $name -DESCRIPTION 'SSLeay $name - eay\@cryptsoft.com' +DESCRIPTION 'OpenSSL $name - http://www.openssl.org/' EOF @@ -230,12 +292,13 @@ EOF { if (!defined($nums{$func})) { - printf STDERR "$func does not have a number assigned\n"; + printf STDERR "$func does not have a number assigned\n" + if(!$do_update); } else { $n=$nums{$func}; - printf OUT " %s%-35s@%d\n",($NT)?"":"_",$func,$n; + printf OUT " %s%-40s@%d\n",($NT)?"":"_",$func,$n; } } printf OUT "\n"; @@ -246,6 +309,8 @@ sub load_numbers local($name)=@_; local($j,@a,%ret); + $max_num = 0; + open(IN,"<$name") || die "unable to open $name:$!\n"; while () { @@ -254,7 +319,28 @@ sub load_numbers next if /^\s*$/; @a=split; $ret{$a[0]}=$a[1]; + $max_num = $a[1] if $a[1] > $max_num; } close(IN); return(%ret); } + +sub update_numbers + { + local(*OUT,$name,*nums,$start_num, @functions)=@_; + my $new_funcs = 0; + print STDERR "Updating $name\n"; + foreach $func (@functions) + { + if (!defined($nums{$func})) + { + $new_funcs++; + printf OUT "%s%-40s%d\n","",$func, ++$start_num; + } + } + if($new_funcs) { + print STDERR "$new_funcs New Functions added\n"; + } else { + print STDERR "No New Functions Added\n"; + } + }