[openssl-commits] [openssl] master update
Richard Levitte
levitte at openssl.org
Thu Jan 7 20:10:43 UTC 2016
The branch master has been updated
via 3cb8c3265f639f8eebf32053457ae6a6d61e2413 (commit)
via a388633da5a535829f6088623ac838031d32dce1 (commit)
from 0674427f71ca050e3c61a7ec9dc71b208c3b39f5 (commit)
- Log -----------------------------------------------------------------
commit 3cb8c3265f639f8eebf32053457ae6a6d61e2413
Author: Richard Levitte <levitte at openssl.org>
Date: Thu Jan 7 20:51:28 2016 +0100
Remove the old VMS linker option file creator for shlibs
Reviewed-by: Tim Hudson <tjh at openssl.org>
commit a388633da5a535829f6088623ac838031d32dce1
Author: Richard Levitte <levitte at openssl.org>
Date: Thu Jan 7 20:49:53 2016 +0100
Enhance util/mkdef.pl to provide a VMS linker option file for shlibs
Reviewed-by: Tim Hudson <tjh at openssl.org>
-----------------------------------------------------------------------
Summary of changes:
VMS/mkshared.com | 476 -------------------------------------------------------
util/mkdef.pl | 98 +++++++++---
2 files changed, 76 insertions(+), 498 deletions(-)
delete mode 100644 VMS/mkshared.com
diff --git a/VMS/mkshared.com b/VMS/mkshared.com
deleted file mode 100644
index b0d1fda..0000000
--- a/VMS/mkshared.com
+++ /dev/null
@@ -1,476 +0,0 @@
-$! MKSHARED.COM -- Create shareable images.
-$!
-$! P1: "64" for 64-bit pointers.
-$!
-$! P2: Zlib object library path (optional).
-$!
-$! Input: [.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO[32].OLB
-$! [.UTIL]SSLEAY.NUM,[.xxx.EXE.SSL]SSL_LIBSSL[32].OLB
-$! [.CRYPTO.xxx]OPENSSLCONF.H
-$! Output: [.xxx.EXE.CRYPTO]SSL_LIBCRYPTO_SHR[32].OPT,.MAP,.EXE
-$! [.xxx.EXE.SSL]SSL_LIBSSL_SRH[32].OPT,.MAP,.EXE
-$!
-$! So far, tests have only been made on VMS for Alpha. VAX will come in time.
-$! ===========================================================================
-$!
-$! Announce/identify.
-$!
-$ proc = f$environment( "procedure")
-$ write sys$output "@@@ "+ -
- f$parse( proc, , , "name")+ f$parse( proc, , , "type")
-$!
-$! Save the original default device:[directory].
-$!
-$ def_orig = f$environment( "default")
-$ on error then goto tidy
-$ on control_c then goto tidy
-$!
-$! SET DEFAULT to the main kit directory.
-$!
-$ proc = f$environment("procedure")
-$ proc = f$parse( "A.;", proc)- "A.;"
-$ set default 'proc'
-$ set default [-]
-$!
-$! ----- Prepare info for processing: version number and file info
-$ gosub read_version_info
-$ if libver .eqs. ""
-$ then
-$ write sys$error "ERROR: Couldn't find any library version info..."
-$ go to tidy:
-$ endif
-$
-$ if (f$getsyi("cpu") .lt. 128)
-$ then
-$ arch_vax = 1
-$ arch = "VAX"
-$ else
-$ arch_vax = 0
-$ arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
-$ if (arch .eqs. "") then arch = "UNK"
-$ endif
-$!
-$ archd = arch
-$ lib32 = "32"
-$ shr = "SHR32"
-$!
-$ if (p1 .nes. "")
-$ then
-$ if (p1 .eqs. "64")
-$ then
-$ archd = arch+ "_64"
-$ lib32 = ""
-$ shr = "SHR"
-$ else
-$ if (p1 .nes. "32")
-$ then
-$ write sys$output "Second argument invalid."
-$ write sys$output "It should be "32", "64", or nothing."
-$ exit
-$ endif
-$ endif
-$ endif
-$!
-$! ----- Prepare info for processing: disabled algorithms info
-$ gosub read_disabled_algorithms_info
-$!
-$ ZLIB = p2
-$ zlib_lib = ""
-$ if (ZLIB .nes. "")
-$ then
-$ file2 = f$parse( ZLIB, "libz.olb", , , "syntax_only")
-$ if (f$search( file2) .eqs. "")
-$ then
-$ write sys$output ""
-$ write sys$output "The Option ", ZLIB, " Is Invalid."
-$ write sys$output " Can't find library: ''file2'"
-$ write sys$output ""
-$ goto tidy
-$ endif
-$ zlib_lib = ", ''file2' /library"
-$ endif
-$!
-$ if (arch_vax)
-$ then
-$ libtit = "CRYPTO_TRANSFER_VECTOR"
-$ libid = "Crypto"
-$ libnum = "[.UTIL]LIBEAY.NUM"
-$ libdir = "[.''ARCHD'.EXE.CRYPTO]"
-$ libmar = "''libdir'SSL_LIBCRYPTO_''shr'.MAR"
-$ libolb = "''libdir'SSL_LIBCRYPTO''lib32'.OLB"
-$ libopt = "''libdir'SSL_LIBCRYPTO_''shr'.OPT"
-$ libobj = "''libdir'SSL_LIBCRYPTO_''shr'.OBJ"
-$ libmap = "''libdir'SSL_LIBCRYPTO_''shr'.MAP"
-$ libgoal= "''libdir'SSL_LIBCRYPTO_''shr'.EXE"
-$ libref = ""
-$ libvec = "LIBCRYPTO"
-$ if f$search( libolb) .nes. "" then gosub create_vax_shr
-$ libtit = "SSL_TRANSFER_VECTOR"
-$ libid = "SSL"
-$ libnum = "[.UTIL]SSLEAY.NUM"
-$ libdir = "[.''ARCHD'.EXE.SSL]"
-$ libmar = "''libdir'SSL_LIBSSL_''shr'.MAR"
-$ libolb = "''libdir'SSL_LIBSSL''lib32'.OLB"
-$ libopt = "''libdir'SSL_LIBSSL_''shr'.OPT"
-$ libobj = "''libdir'SSL_LIBSSL_''shr'.OBJ"
-$ libmap = "''libdir'SSL_LIBSSL_''shr'.MAP"
-$ libgoal= "''libdir'SSL_LIBSSL_''shr'.EXE"
-$ libref = "[.''ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO_''shr'.EXE"
-$ libvec = "LIBSSL"
-$ if f$search( libolb) .nes. "" then gosub create_vax_shr
-$ else
-$ libid = "Crypto"
-$ libnum = "[.UTIL]LIBEAY.NUM"
-$ libdir = "[.''ARCHD'.EXE.CRYPTO]"
-$ libolb = "''libdir'SSL_LIBCRYPTO''lib32'.OLB"
-$ libopt = "''libdir'SSL_LIBCRYPTO_''shr'.OPT"
-$ libmap = "''libdir'SSL_LIBCRYPTO_''shr'.MAP"
-$ libgoal= "''libdir'SSL_LIBCRYPTO_''shr'.EXE"
-$ libref = ""
-$ if f$search( libolb) .nes. "" then gosub create_nonvax_shr
-$ libid = "SSL"
-$ libnum = "[.UTIL]SSLEAY.NUM"
-$ libdir = "[.''ARCHD'.EXE.SSL]"
-$ libolb = "''libdir'SSL_LIBSSL''lib32'.OLB"
-$ libopt = "''libdir'SSL_LIBSSL_''shr'.OPT"
-$ libmap = "''libdir'SSL_LIBSSL_''shr'.MAP"
-$ libgoal= "''libdir'SSL_LIBSSL_''shr'.EXE"
-$ libref = "[.''ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO_''shr'.EXE"
-$ if f$search( libolb) .nes. "" then gosub create_nonvax_shr
-$ endif
-$!
-$ tidy:
-$!
-$! Close any open files.
-$!
-$ if (f$trnlnm( "libnum", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
- close libnum
-$!
-$ if (f$trnlnm( "mar", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
- close mar
-$!
-$ if (f$trnlnm( "opt", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
- close opt
-$!
-$ if (f$trnlnm( "vf", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
- close vf
-$!
-$! Restore the original default device:[directory].
-$!
-$ set default 'def_orig'
-$ exit
-$
-$! ----- Subroutines to build the shareable libraries
-$! For each supported architecture, there's a main shareable library
-$! creator, which is called from the main code above.
-$! The creator will define a number of variables to tell the next levels of
-$! subroutines what routines to use to write to the option files, call the
-$! main processor, read_func_num, and when that is done, it will write version
-$! data at the end of the .opt file, close it, and link the library.
-$!
-$! read_func_num reads through a .num file and calls the writer routine for
-$! each line. It's also responsible for checking that order is properly kept
-$! in the .num file, check that each line applies to VMS and the architecture,
-$! and to fill in "holes" with dummy entries.
-$!
-$! The creator routines depend on the following variables:
-$! libnum The name of the .num file to use as input
-$! libolb The name of the object library to build from
-$! libid The identification string of the shareable library
-$! libopt The name of the .opt file to write
-$! libtit The title of the assembler transfer vector file (VAX only)
-$! libmar The name of the assembler transfer vector file (VAX only)
-$! libmap The name of the map file to write
-$! libgoal The name of the shareable library to write
-$! libref The name of a shareable library to link in
-$!
-$! read_func_num depends on the following variables from the creator:
-$! libwriter The name of the writer routine to call for each .num file line
-$! -----
-$
-$! ----- Subroutines for non-VAX
-$! -----
-$! The creator routine
-$ create_nonvax_shr:
-$ open /write opt 'libopt'
-$ write opt "identification=""",libid," ",libverstr,""""
-$ write opt libolb, " /library"
-$ if libref .nes. "" then write opt libref,"/SHARE"
-$ write opt "SYMBOL_VECTOR=(-"
-$ libfirstentry := true
-$ libwrch := opt
-$ libwriter := write_nonvax_transfer_entry
-$ textcount = 0
-$ gosub read_func_num
-$ write opt ")"
-$ write opt "GSMATCH=",libvmatch,",",libver
-$ close opt
-$ link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options -
- 'zlib_lib'
-$ return
-$
-$! The record writer routine
-$ write_nonvax_transfer_entry:
-$ if libentry .eqs. ".dummy" then return
-$ if info_kind .eqs. "VARIABLE"
-$ then
-$ pr:=DATA
-$ else
-$ pr:=PROCEDURE
-$ endif
-$ textcount_this = f$length(pr) + f$length(libentry) + 5
-$ if textcount + textcount_this .gt. 1024
-$ then
-$ write opt ")"
-$ write opt "SYMBOL_VECTOR=(-"
-$ textcount = 16
-$ libfirstentry := true
-$ endif
-$ if libfirstentry
-$ then
-$ write 'libwrch' " ",libentry,"=",pr," -"
-$ else
-$ write 'libwrch' " ,",libentry,"=",pr," -"
-$ endif
-$ libfirstentry := false
-$ textcount = textcount + textcount_this
-$ return
-$
-$! ----- Subroutines for VAX
-$! -----
-$! The creator routine
-$ create_vax_shr:
-$ open /write mar 'libmar'
-$ type sys$input:/out=mar:
-;
-; Transfer vector for VAX shareable image
-;
-$ write mar " .TITLE ",libtit
-$ write mar " .IDENT /",libid,"/"
-$ type sys$input:/out=mar:
-;
-; Define macro to assist in building transfer vector entries. Each entry
-; should take no more than 8 bytes.
-;
- .MACRO FTRANSFER_ENTRY routine
- .ALIGN QUAD
- .TRANSFER routine
- .MASK routine
- JMP routine+2
- .ENDM FTRANSFER_ENTRY
-;
-; Place entries in own program section.
-;
-$ write mar " .PSECT $$",libvec,",QUAD,PIC,USR,CON,REL,LCL,SHR,EXE,RD,NOWRT"
-$ write mar libvec,"_xfer:"
-$ libwrch := mar
-$ libwriter := write_vax_ftransfer_entry
-$ gosub read_func_num
-$ type sys$input:/out=mar:
-;
-; Allocate extra storage at end of vector to allow for expansion.
-;
-$ write mar " .BLKB 32768-<.-",libvec,"_xfer> ; 64 pages total."
-$! libwriter := write_vax_vtransfer_entry
-$! gosub read_func_num
-$ write mar " .END"
-$ close mar
-$ open /write opt 'libopt'
-$ write opt "identification=""",libid," ",libverstr,""""
-$ write opt libobj
-$ write opt libolb, " /library"
-$ if libref .nes. "" then write opt libref,"/SHARE"
-$ type sys$input:/out=opt:
-!
-! Ensure transfer vector is at beginning of image
-!
-CLUSTER=FIRST
-$ write opt "COLLECT=FIRST,$$",libvec
-$ write opt "GSMATCH=",libvmatch,",",libver
-$ type sys$input:/out=opt:
-!
-! make psects nonshareable so image can be installed.
-!
-PSECT_ATTR=$CHAR_STRING_CONSTANTS,NOWRT
-$ libwrch := opt
-$ libwriter := write_vax_psect_attr
-$ gosub read_func_num
-$ close opt
-$ macro/obj='libobj' 'libmar'
-$ link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options -
- 'zlib_lib'
-$ return
-$
-$! The record writer routine for VAX functions
-$ write_vax_ftransfer_entry:
-$ if info_kind .nes. "FUNCTION" then return
-$ if libentry .eqs ".dummy"
-$ then
-$ write 'libwrch' " .BLKB 8" ! Dummy is zeroes...
-$ else
-$ write 'libwrch' " FTRANSFER_ENTRY ",libentry
-$ endif
-$ return
-$! The record writer routine for VAX variables (should never happen!)
-$ write_vax_psect_attr:
-$ if info_kind .nes. "VARIABLE" then return
-$ if libentry .eqs ".dummy" then return
-$ write 'libwrch' "PSECT_ATTR=",libentry,",NOSHR"
-$ return
-$
-$! ----- Common subroutines
-$! -----
-$! The .num file reader. This one has great responsibility.
-$ read_func_num:
-$ open /read libnum 'libnum'
-$ goto read_nums
-$
-$ read_nums:
-$ libentrynum=0
-$ liblastentry:=false
-$ entrycount=0
-$ loop:
-$ read /end=loop_end /err=loop_end libnum line
-$ lin = f$edit( line, "COMPRESS,TRIM")
-$! Skip a "#" comment line.
-$ if (f$extract( 0, 1, lin) .eqs. "#") then goto loop
-$ entrynum = f$int(f$element( 1, " ", lin))
-$ entryinfo = f$element( 2, " ", lin)
-$ curentry = f$element( 0, " ", lin)
-$ info_exist = f$element( 0, ":", entryinfo)
-$ info_platforms = ","+ f$element(1, ":", entryinfo)+ ","
-$ info_kind = f$element( 2, ":", entryinfo)
-$ info_algorithms = ","+ f$element( 3, ":", entryinfo)+ ","
-$ if info_exist .eqs. "NOEXIST" then goto loop
-$ truesum = 0
-$ falsesum = 0
-$ negatives = 1
-$ plat_i = 0
-$ loop1:
-$ plat_entry = f$element( plat_i, ",", info_platforms)
-$ plat_i = plat_i + 1
-$ if plat_entry .eqs. "" then goto loop1
-$ if plat_entry .nes. ","
-$ then
-$ if f$extract(0,1,plat_entry) .nes. "!" then negatives = 0
-$ if (arch_vax)
-$ then
-$ if plat_entry .eqs. "EXPORT_VAR_AS_FUNCTION" then -
-$ truesum = truesum + 1
-$ if plat_entry .eqs. "!EXPORT_VAR_AS_FUNCTION" then -
-$ falsesum = falsesum + 1
-$ endif
-$!
-$ if ((plat_entry .eqs. "VMS") .or. -
- ((plat_entry .eqs. "ZLIB") .and. (ZLIB .nes. "")) .or. -
- (arch_vax .and. (plat_entry .eqs. "VMSVAX"))) then -
- truesum = truesum + 1
-$!
-$ if ((plat_entry .eqs. "!VMS") .or. -
- (arch_vax .and. (plat_entry .eqs. "!VMSVAX"))) then -
- falsesum = falsesum + 1
-$!
-$ goto loop1
-$ endif
-$ endloop1:
-$!DEBUG!$ if info_platforms - "EXPORT_VAR_AS_FUNCTION" .nes. info_platforms
-$!DEBUG!$ then
-$!DEBUG!$ write sys$output line
-$!DEBUG!$ write sys$output " truesum = ",truesum,-
-$!DEBUG! ", negatives = ",negatives,", falsesum = ",falsesum
-$!DEBUG!$ endif
-$ if falsesum .ne. 0 then goto loop
-$ if truesum+negatives .eq. 0 then goto loop
-$ alg_i = 0
-$ loop2:
-$ alg_entry = f$element(alg_i,",",info_algorithms)
-$ alg_i = alg_i + 1
-$ if alg_entry .eqs. "" then goto loop2
-$ if alg_entry .nes. ","
-$ then
-$ if disabled_algorithms - ("," + alg_entry + ",") .nes disabled_algorithms then goto loop
-$ if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
-$ goto loop2
-$ endif
-$ endloop2:
-$ if info_platforms - "EXPORT_VAR_AS_FUNCTION" .nes. info_platforms
-$ then
-$!DEBUG!$ write sys$output curentry," ; ",entrynum," ; ",entryinfo
-$ endif
-$ redo:
-$ next:=loop
-$ tolibentry=curentry
-$ if libentrynum .ne. entrynum
-$ then
-$ entrycount=entrycount+1
-$ if entrycount .lt. entrynum
-$ then
-$!DEBUG!$ write sys$output "Info: entrycount: ''entrycount', entrynum: ''entrynum' => 0"
-$ tolibentry=".dummy"
-$ next:=redo
-$ endif
-$ if entrycount .gt. entrynum
-$ then
-$ write sys$error "Decreasing library entry numbers! Can't continue"
-$ write sys$error """",line,""""
-$ close libnum
-$ return
-$ endif
-$ libentry=tolibentry
-$!DEBUG!$ write sys$output entrycount," ",libentry," ",entryinfo
-$ if libentry .nes. "" .and. libwriter .nes. "" then gosub 'libwriter'
-$ else
-$ write sys$error "Info: ""''curentry'"" is an alias for ""''libentry'"". Overriding..."
-$ endif
-$ libentrynum=entrycount
-$ goto 'next'
-$ loop_end:
-$ close libnum
-$ return
-$
-$! The version number reader
-$ read_version_info:
-$ libver = ""
-$ open /read vf [.CRYPTO]OPENSSLV.H
-$ loop_rvi:
-$ read/err=endloop_rvi/end=endloop_rvi vf rvi_line
-$ if rvi_line - "SHLIB_VERSION_NUMBER """ .eqs. rvi_line then -
- goto loop_rvi
-$ libverstr = f$element(1,"""",rvi_line)
-$ libvmajor = f$element(0,".",libverstr)
-$ libvminor = f$element(1,".",libverstr)
-$ libvedit = f$element(2,".",libverstr)
-$ libvpatch = f$cvui(0,8,f$extract(1,1,libvedit)+"@")-f$cvui(0,8,"@")
-$ libvedit = f$extract(0,1,libvedit)
-$ libver = f$string(f$int(libvmajor)*100)+","+-
- f$string(f$int(libvminor)*100+f$int(libvedit)*10+f$int(libvpatch))
-$ if libvmajor .eqs. "0"
-$ then
-$ libvmatch = "EQUAL"
-$ else
-$ ! Starting with the 1.0 release, backward compatibility should be
-$ ! kept, so switch over to the following
-$ libvmatch = "LEQUAL"
-$ endif
-$ endloop_rvi:
-$ close vf
-$ return
-$
-$! The disabled algorithms reader
-$ read_disabled_algorithms_info:
-$ disabled_algorithms = ","
-$ open /read cf [.CRYPTO.'ARCH']OPENSSLCONF.H
-$ loop_rci:
-$ read/err=endloop_rci/end=endloop_rci cf rci_line
-$ rci_line = f$edit(rci_line,"TRIM,COMPRESS")
-$ rci_ei = 0
-$ if f$extract(0,9,rci_line) .eqs. "# define " then rci_ei = 2
-$ if f$extract(0,8,rci_line) .eqs. "#define " then rci_ei = 1
-$ if rci_ei .eq. 0 then goto loop_rci
-$ rci_e = f$element(rci_ei," ",rci_line)
-$ if f$extract(0,11,rci_e) .nes. "OPENSSL_NO_" then goto loop_rci
-$ disabled_algorithms = disabled_algorithms + f$extract(11,999,rci_e) + ","
-$ goto loop_rci
-$ endloop_rci:
-$ close cf
-$ return
diff --git a/util/mkdef.pl b/util/mkdef.pl
index 877ea16..08dacf2 100755
--- a/util/mkdef.pl
+++ b/util/mkdef.pl
@@ -160,7 +160,7 @@ foreach (@ARGV, split(/ /, $options))
if ($_ eq "linux") {
$linux=1;
}
- $VMS=1 if $_ eq "VMS";
+ $VMS=$VMSNonVAX=1 if $_ eq "VMS";
$OS2=1 if $_ eq "OS2";
if ($_ eq "zlib" || $_ eq "enable-zlib" || $_ eq "zlib-dynamic"
|| $_ eq "enable-zlib-dynamic") {
@@ -253,10 +253,12 @@ if (!$libname) {
if ($W32 + $VMS + $OS2 + $linux == 0) {
$W32 = 1;
}
+die "Please, only one platform at a time"
+ if ($W32 + $VMS + $OS2 + $linux > 1);
if (!$do_ssl && !$do_crypto)
{
- print STDERR "usage: $0 ( ssl | crypto ) [ 16 | 32 | NT | OS2 ]\n";
+ print STDERR "usage: $0 ( ssl | crypto ) [ 16 | 32 | NT | OS2 | linux | VMS ]\n";
exit(1);
}
@@ -1296,27 +1298,30 @@ sub print_def_file
my $what = "OpenSSL: implementation of Secure Socket Layer";
my $description = "$what $version, $name - http://$http_vendor";
my $prevsymversion = "", $prevprevsymversion = "";
-
- if (!$linux)
- {
- if ($W32)
- { $libname.="32"; }
- elsif ($OS2)
- { # DLL names should not clash on the whole system.
- # However, they should not have any particular relationship
- # to the name of the static library. Chose descriptive names
- # (must be at most 8 chars).
- my %translate = (ssl => 'open_ssl', crypto => 'cryptssl');
- $libname = $translate{$name} || $name;
- $liboptions = <<EOO;
+ # For VMS
+ my $prevnum = 0;
+ my $symbolcount = 0;
+
+ if ($W32)
+ { $libname.="32"; }
+ elsif ($OS2)
+ { # DLL names should not clash on the whole system.
+ # However, they should not have any particular relationship
+ # to the name of the static library. Chose descriptive names
+ # (must be at most 8 chars).
+ my %translate = (ssl => 'open_ssl', crypto => 'cryptssl');
+ $libname = $translate{$name} || $name;
+ $liboptions = <<EOO;
INITINSTANCE
DATA MULTIPLE NONSHARED
EOO
- # Vendor field can't contain colon, drat; so we omit http://
- $description = "\@#$http_vendor:$version#\@$what; DLL for library $name. Build for EMX -Zmtd";
- }
+ # Vendor field can't contain colon, drat; so we omit http://
+ $description = "\@#$http_vendor:$version#\@$what; DLL for library $name. Build for EMX -Zmtd";
+ }
- print OUT <<"EOF";
+ if ($W32 || $OS2)
+ {
+ print OUT <<"EOF";
;
; Definition file for the DLL version of the $name library from OpenSSL
;
@@ -1326,11 +1331,32 @@ LIBRARY $libname $liboptions
EOF
print "EXPORTS\n";
- }
+ }
+ elsif ($VMS)
+ {
+ my $libref = $name eq "ssl" ? "LIBCRYPTO.EXE /SHARE" : "";
+ print OUT <<"EOF";
+IDENTIFICATION="LIB$libname V$version"
+LIB$libname.OLB /LIBRARY
+$libref
+SYMBOL_VECTOR=(-
+EOF
+ }
(@r)=grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:FUNCTION/, at symbols);
(@v)=grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:VARIABLE/, at symbols);
- @symbols=((sort @e),(sort @r), (sort @v));
+ if ($VMS) {
+ # VMS needs to have the symbols on slot number order
+ @symbols=(map { $_->[1] }
+ sort { $a->[0] <=> $b->[0] }
+ map { (my $s, my $i) = $_ =~ /^(.*?)\\(.*)$/;
+ die "Error: $s doesn't have a number assigned\n"
+ if !defined($nums{$s});
+ (my $n, my @rest) = split /\\/, $nums{$s};
+ [ $n, $_ ] } (@e, @r, @v));
+ } else {
+ @symbols=((sort @e),(sort @r), (sort @v));
+ }
my ($baseversion, $currversion) = get_openssl_version();
my $thisversion;
@@ -1376,6 +1402,27 @@ EOF
$prevsymversion = $symversion;
}
print OUT " $s2;\n";
+ } elsif ($VMS) {
+ while(++$prevnum < $n) {
+ if ($symbolcount > 1023) {
+ print OUT ")\nSYMBOL_VECTOR=(-\n";
+ $symbolcount = 0;
+ }
+ print OUT $symbolcount
+ ? " ," : " ";
+ print OUT "dummy$prevnum=PRIVATE_PROCEDURE -\n";
+ $symbolcount++;
+ }
+ (my $s_uc = $s) =~ tr/a-z/A-Z/;
+ if ($symbolcount > 1023) {
+ print OUT ")\nSYMBOL_VECTOR=(-\n";
+ $symbolcount = 0;
+ }
+ print OUT $symbolcount
+ ? " ," : " ";
+ print OUT "$s_uc/$s="
+ , ($v ? "DATA" : "PROCEDURE"), " -\n";
+ $symbolcount++;
} elsif($v && !$OS2) {
printf OUT " %s%-39s @%-8d DATA\n",
($W32)?"":"_",$s2,$n;
@@ -1393,7 +1440,14 @@ EOF
} else {
print OUT " local: *;\n};\n\n";
}
- }
+ } elsif ($VMS) {
+ print OUT ")\n";
+ (my $libvmaj, my $libvmin, my $libvedit) =
+ $currversion =~ /^(\d+)_(\d+)_(\d+)$/;
+ # The reason to multiply the edit number with 100 is to make space
+ # for the possibility that we want to encode the patch letters
+ print OUT "GSMATCH=LEQUAL,",($libvmaj * 100 + $libvmin),",",($libvedit * 100),"\n";
+ }
printf OUT "\n";
}
More information about the openssl-commits
mailing list