diff options
Diffstat (limited to 'openssl/VMS/mkshared.com')
-rw-r--r-- | openssl/VMS/mkshared.com | 780 |
1 files changed, 390 insertions, 390 deletions
diff --git a/openssl/VMS/mkshared.com b/openssl/VMS/mkshared.com index 99a3da250..2f9167eea 100644 --- a/openssl/VMS/mkshared.com +++ b/openssl/VMS/mkshared.com @@ -1,390 +1,390 @@ -$! MKSHARED.COM -- script to created shareable images on VMS
-$!
-$! No command line parameters. This should be run at the start of the source
-$! tree (the same directory where one finds INSTALL.VMS).
-$!
-$! Input: [.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB
-$! [.UTIL]SSLEAY.NUM,[.xxx.EXE.SSL]LIBSSL.OLB
-$! Output: [.xxx.EXE.CRYPTO]LIBCRYPTO.OPT,.MAP,.EXE
-$! [.xxx.EXE.SSL]LIBSSL.OPT,.MAP,.EXE
-$!
-$! So far, tests have only been made on VMS for Alpha. VAX will come in time.
-$! ===========================================================================
-$
-$! ----- 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..."
-$ exit
-$ endif
-$
-$ if (f$getsyi("cpu").lt.128)
-$ then
-$ arch := VAX
-$ else
-$ arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
-$ if (arch .eqs. "") then arch = "UNK"
-$ endif
-$
-$ if arch .nes. "VAX"
-$ then
-$ arch_vax = 0
-$ libid = "Crypto"
-$ libnum = "[.UTIL]LIBEAY.NUM"
-$ libdir = "[.''ARCH'.EXE.CRYPTO]"
-$ libolb = "''libdir'LIBCRYPTO.OLB"
-$ libopt = "''libdir'LIBCRYPTO.OPT"
-$ libmap = "''libdir'LIBCRYPTO.MAP"
-$ libgoal= "''libdir'LIBCRYPTO.EXE"
-$ libref = ""
-$ if f$search(libdir+libolb) .nes. "" then gosub create_nonvax_shr
-$ libid = "SSL"
-$ libnum = "[.UTIL]SSLEAY.NUM"
-$ libdir = "[.''ARCH'.EXE.SSL]"
-$ libolb = "''libdir'LIBSSL.OLB"
-$ libopt = "''libdir'LIBSSL.OPT"
-$ libmap = "''libdir'LIBSSL.MAP"
-$ libgoal= "''libdir'LIBSSL.EXE"
-$ libref = "[.''ARCH'.EXE.CRYPTO]LIBCRYPTO.EXE"
-$ if f$search(libdir+libolb) .nes. "" then gosub create_nonvax_shr
-$ arch_vax = 0
-$ libid = "Crypto"
-$ libnum = "[.UTIL]LIBEAY.NUM"
-$ libdir = "[.''ARCH'.EXE.CRYPTO]"
-$ libolb = "''libdir'LIBCRYPTO32.OLB"
-$ libopt = "''libdir'LIBCRYPTO32.OPT"
-$ libmap = "''libdir'LIBCRYPTO32.MAP"
-$ libgoal= "''libdir'LIBCRYPTO32.EXE"
-$ libref = ""
-$ if f$search(libdir+libolb) .nes. "" then gosub create_nonvax_shr
-$ libid = "SSL"
-$ libnum = "[.UTIL]SSLEAY.NUM"
-$ libdir = "[.''ARCH'.EXE.SSL]"
-$ libolb = "''libdir'LIBSSL32.OLB"
-$ libopt = "''libdir'LIBSSL32.OPT"
-$ libmap = "''libdir'LIBSSL32.MAP"
-$ libgoal= "''libdir'LIBSSL32.EXE"
-$ libref = "[.''ARCH'.EXE.CRYPTO]LIBCRYPTO32.EXE"
-$ if f$search(libdir+libolb) .nes. "" then gosub create_nonvax_shr
-$ else
-$ arch_vax = 1
-$ libtit = "CRYPTO_TRANSFER_VECTOR"
-$ libid = "Crypto"
-$ libnum = "[.UTIL]LIBEAY.NUM"
-$ libdir = "[.''ARCH'.EXE.CRYPTO]"
-$ libmar = "''libdir'LIBCRYPTO.MAR"
-$ libolb = "''libdir'LIBCRYPTO.OLB"
-$ libopt = "''libdir'LIBCRYPTO.OPT"
-$ libobj = "''libdir'LIBCRYPTO.OBJ"
-$ libmap = "''libdir'LIBCRYPTO.MAP"
-$ libgoal= "''libdir'LIBCRYPTO.EXE"
-$ libref = ""
-$ libvec = "LIBCRYPTO"
-$ if f$search(libdir+libolb) .nes. "" then gosub create_vax_shr
-$ libtit = "SSL_TRANSFER_VECTOR"
-$ libid = "SSL"
-$ libnum = "[.UTIL]SSLEAY.NUM"
-$ libdir = "[.''ARCH'.EXE.SSL]"
-$ libmar = "''libdir'LIBSSL.MAR"
-$ libolb = "''libdir'LIBSSL.OLB"
-$ libopt = "''libdir'LIBSSL.OPT"
-$ libobj = "''libdir'LIBSSL.OBJ"
-$ libmap = "''libdir'LIBSSL.MAP"
-$ libgoal= "''libdir'LIBSSL.EXE"
-$ libref = "[.''ARCH'.EXE.CRYPTO]LIBCRYPTO.EXE"
-$ libvec = "LIBSSL"
-$ if f$search(libdir+libolb) .nes. "" then gosub create_vax_shr
-$ endif
-$ 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,"/lib"
-$ 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'/option
-$ 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,"/lib"
-$ 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'/option
-$ 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 responsability.
-$ read_func_num:
-$ open libnum 'libnum'
-$ goto read_nums
-$
-$ read_nums:
-$ libentrynum=0
-$ liblastentry:=false
-$ entrycount=0
-$ loop:
-$ read/end=loop_end/err=loop_end libnum line
-$ entrynum=f$int(f$element(1," ",f$edit(line,"COMPRESS,TRIM")))
-$ entryinfo=f$element(2," ",f$edit(line,"COMPRESS,TRIM"))
-$ curentry=f$element(0," ",f$edit(line,"COMPRESS,TRIM"))
-$ 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 f$getsyi("CPU") .lt. 128
-$ 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. -
- (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 alg_entry .eqs. "KRB5" then goto loop ! Special for now
-$ if alg_entry .eqs. "STATIC_ENGINE" then goto loop ! Special for now
-$ 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
+$! MKSHARED.COM -- script to created shareable images on VMS +$! +$! No command line parameters. This should be run at the start of the source +$! tree (the same directory where one finds INSTALL.VMS). +$! +$! Input: [.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB +$! [.UTIL]SSLEAY.NUM,[.xxx.EXE.SSL]LIBSSL.OLB +$! Output: [.xxx.EXE.CRYPTO]LIBCRYPTO.OPT,.MAP,.EXE +$! [.xxx.EXE.SSL]LIBSSL.OPT,.MAP,.EXE +$! +$! So far, tests have only been made on VMS for Alpha. VAX will come in time. +$! =========================================================================== +$ +$! ----- 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..." +$ exit +$ endif +$ +$ if (f$getsyi("cpu").lt.128) +$ then +$ arch := VAX +$ else +$ arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE") +$ if (arch .eqs. "") then arch = "UNK" +$ endif +$ +$ if arch .nes. "VAX" +$ then +$ arch_vax = 0 +$ libid = "Crypto" +$ libnum = "[.UTIL]LIBEAY.NUM" +$ libdir = "[.''ARCH'.EXE.CRYPTO]" +$ libolb = "''libdir'LIBCRYPTO.OLB" +$ libopt = "''libdir'LIBCRYPTO.OPT" +$ libmap = "''libdir'LIBCRYPTO.MAP" +$ libgoal= "''libdir'LIBCRYPTO.EXE" +$ libref = "" +$ if f$search(libdir+libolb) .nes. "" then gosub create_nonvax_shr +$ libid = "SSL" +$ libnum = "[.UTIL]SSLEAY.NUM" +$ libdir = "[.''ARCH'.EXE.SSL]" +$ libolb = "''libdir'LIBSSL.OLB" +$ libopt = "''libdir'LIBSSL.OPT" +$ libmap = "''libdir'LIBSSL.MAP" +$ libgoal= "''libdir'LIBSSL.EXE" +$ libref = "[.''ARCH'.EXE.CRYPTO]LIBCRYPTO.EXE" +$ if f$search(libdir+libolb) .nes. "" then gosub create_nonvax_shr +$ arch_vax = 0 +$ libid = "Crypto" +$ libnum = "[.UTIL]LIBEAY.NUM" +$ libdir = "[.''ARCH'.EXE.CRYPTO]" +$ libolb = "''libdir'LIBCRYPTO32.OLB" +$ libopt = "''libdir'LIBCRYPTO32.OPT" +$ libmap = "''libdir'LIBCRYPTO32.MAP" +$ libgoal= "''libdir'LIBCRYPTO32.EXE" +$ libref = "" +$ if f$search(libdir+libolb) .nes. "" then gosub create_nonvax_shr +$ libid = "SSL" +$ libnum = "[.UTIL]SSLEAY.NUM" +$ libdir = "[.''ARCH'.EXE.SSL]" +$ libolb = "''libdir'LIBSSL32.OLB" +$ libopt = "''libdir'LIBSSL32.OPT" +$ libmap = "''libdir'LIBSSL32.MAP" +$ libgoal= "''libdir'LIBSSL32.EXE" +$ libref = "[.''ARCH'.EXE.CRYPTO]LIBCRYPTO32.EXE" +$ if f$search(libdir+libolb) .nes. "" then gosub create_nonvax_shr +$ else +$ arch_vax = 1 +$ libtit = "CRYPTO_TRANSFER_VECTOR" +$ libid = "Crypto" +$ libnum = "[.UTIL]LIBEAY.NUM" +$ libdir = "[.''ARCH'.EXE.CRYPTO]" +$ libmar = "''libdir'LIBCRYPTO.MAR" +$ libolb = "''libdir'LIBCRYPTO.OLB" +$ libopt = "''libdir'LIBCRYPTO.OPT" +$ libobj = "''libdir'LIBCRYPTO.OBJ" +$ libmap = "''libdir'LIBCRYPTO.MAP" +$ libgoal= "''libdir'LIBCRYPTO.EXE" +$ libref = "" +$ libvec = "LIBCRYPTO" +$ if f$search(libdir+libolb) .nes. "" then gosub create_vax_shr +$ libtit = "SSL_TRANSFER_VECTOR" +$ libid = "SSL" +$ libnum = "[.UTIL]SSLEAY.NUM" +$ libdir = "[.''ARCH'.EXE.SSL]" +$ libmar = "''libdir'LIBSSL.MAR" +$ libolb = "''libdir'LIBSSL.OLB" +$ libopt = "''libdir'LIBSSL.OPT" +$ libobj = "''libdir'LIBSSL.OBJ" +$ libmap = "''libdir'LIBSSL.MAP" +$ libgoal= "''libdir'LIBSSL.EXE" +$ libref = "[.''ARCH'.EXE.CRYPTO]LIBCRYPTO.EXE" +$ libvec = "LIBSSL" +$ if f$search(libdir+libolb) .nes. "" then gosub create_vax_shr +$ endif +$ 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,"/lib" +$ 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'/option +$ 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,"/lib" +$ 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'/option +$ 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 responsability. +$ read_func_num: +$ open libnum 'libnum' +$ goto read_nums +$ +$ read_nums: +$ libentrynum=0 +$ liblastentry:=false +$ entrycount=0 +$ loop: +$ read/end=loop_end/err=loop_end libnum line +$ entrynum=f$int(f$element(1," ",f$edit(line,"COMPRESS,TRIM"))) +$ entryinfo=f$element(2," ",f$edit(line,"COMPRESS,TRIM")) +$ curentry=f$element(0," ",f$edit(line,"COMPRESS,TRIM")) +$ 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 f$getsyi("CPU") .lt. 128 +$ 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. - + (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 alg_entry .eqs. "KRB5" then goto loop ! Special for now +$ if alg_entry .eqs. "STATIC_ENGINE" then goto loop ! Special for now +$ 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 |