Index: openssl/VMS/mkshared.com |
=================================================================== |
--- openssl/VMS/mkshared.com (revision 105093) |
+++ openssl/VMS/mkshared.com (working copy) |
@@ -1,85 +1,166 @@ |
-$! MKSHARED.COM -- script to created shareable images on VMS |
+$! MKSHARED.COM -- Create shareable images. |
$! |
-$! No command line parameters. This should be run at the start of the source |
-$! tree (the same directory where one finds INSTALL.VMS). |
+$! P1: "64" for 64-bit pointers. |
$! |
-$! 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 |
+$! 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..." |
-$ exit |
+$ go to tidy: |
$ endif |
$ |
-$ if (f$getsyi("cpu").lt.128) |
+$ if (f$getsyi("cpu") .lt. 128) |
$ then |
-$ arch := VAX |
+$ arch_vax = 1 |
+$ arch = "VAX" |
$ else |
-$ arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE") |
-$ if (arch .eqs. "") then arch = "UNK" |
+$ arch_vax = 0 |
+$ arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE") |
+$ if (arch .eqs. "") then arch = "UNK" |
$ endif |
-$ |
-$ if arch .nes. "VAX" |
+$! |
+$ archd = arch |
+$ lib32 = "32" |
+$ shr = "SHR32" |
+$! |
+$ if (p1 .nes. "") |
$ then |
-$ arch_vax = 0 |
+$ 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 = "[.''ARCH'.EXE.CRYPTO]" |
-$ libolb = "''libdir'LIBCRYPTO.OLB" |
-$ libopt = "''libdir'LIBCRYPTO.OPT" |
-$ libmap = "''libdir'LIBCRYPTO.MAP" |
-$ libgoal= "''libdir'LIBCRYPTO.EXE" |
+$ 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 = "" |
-$ gosub create_nonvax_shr |
+$ libvec = "LIBCRYPTO" |
+$ if f$search( libolb) .nes. "" then gosub create_vax_shr |
+$ libtit = "SSL_TRANSFER_VECTOR" |
$ 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" |
-$ gosub create_nonvax_shr |
+$ 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 |
-$ 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" |
+$ 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 = "" |
-$ libvec = "LIBCRYPTO" |
-$ gosub create_vax_shr |
-$ libtit = "SSL_TRANSFER_VECTOR" |
+$ if f$search( libolb) .nes. "" then gosub create_nonvax_shr |
$ 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" |
-$ gosub create_vax_shr |
+$ 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 |
$ |
-$! ----- Soubroutines to build the shareable libraries |
+$! ----- 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 |
@@ -111,9 +192,9 @@ |
$! ----- |
$! The creator routine |
$ create_nonvax_shr: |
-$ open/write opt 'libopt' |
+$ open /write opt 'libopt' |
$ write opt "identification=""",libid," ",libverstr,"""" |
-$ write opt libolb,"/lib" |
+$ write opt libolb, " /library" |
$ if libref .nes. "" then write opt libref,"/SHARE" |
$ write opt "SYMBOL_VECTOR=(-" |
$ libfirstentry := true |
@@ -124,7 +205,8 @@ |
$ write opt ")" |
$ write opt "GSMATCH=",libvmatch,",",libver |
$ close opt |
-$ link/map='libmap'/full/share='libgoal' 'libopt'/option |
+$ link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options - |
+ 'zlib_lib' |
$ return |
$ |
$! The record writer routine |
@@ -158,7 +240,7 @@ |
$! ----- |
$! The creator routine |
$ create_vax_shr: |
-$ open/write mar 'libmar' |
+$ open /write mar 'libmar' |
$ type sys$input:/out=mar: |
; |
; Transfer vector for VAX shareable image |
@@ -193,10 +275,10 @@ |
$! gosub read_func_num |
$ write mar " .END" |
$ close mar |
-$ open/write opt 'libopt' |
+$ open /write opt 'libopt' |
$ write opt "identification=""",libid," ",libverstr,"""" |
$ write opt libobj |
-$ write opt libolb,"/lib" |
+$ write opt libolb, " /library" |
$ if libref .nes. "" then write opt libref,"/SHARE" |
$ type sys$input:/out=opt: |
! |
@@ -215,7 +297,8 @@ |
$ gosub read_func_num |
$ close opt |
$ macro/obj='libobj' 'libmar' |
-$ link/map='libmap'/full/share='libgoal' 'libopt'/option |
+$ link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options - |
+ 'zlib_lib' |
$ return |
$ |
$! The record writer routine for VAX functions |
@@ -237,9 +320,9 @@ |
$ |
$! ----- Common subroutines |
$! ----- |
-$! The .num file reader. This one has great responsability. |
+$! The .num file reader. This one has great responsibility. |
$ read_func_num: |
-$ open libnum 'libnum' |
+$ open /read libnum 'libnum' |
$ goto read_nums |
$ |
$ read_nums: |
@@ -247,27 +330,30 @@ |
$ 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)+"," |
+$ 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_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 |
+$ if (arch_vax) |
$ then |
$ if plat_entry .eqs. "EXPORT_VAR_AS_FUNCTION" then - |
$ truesum = truesum + 1 |
@@ -276,6 +362,7 @@ |
$ 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 |
$! |
@@ -301,8 +388,7 @@ |
$ 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 disabled_algorithms - ("," + alg_entry + ",") .nes disabled_algorithms then goto loop |
$ if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop |
$ goto loop2 |
$ endif |
@@ -345,7 +431,7 @@ |
$! The version number reader |
$ read_version_info: |
$ libver = "" |
-$ open/read vf [.CRYPTO]OPENSSLV.H |
+$ 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 - |
@@ -369,3 +455,22 @@ |
$ 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 |