1$! 2$! MAKEVMS.COM 3$! Original Author: UNKNOWN 4$! Rewritten By: Robert Byer 5$! Vice-President 6$! A-Com Computing, Inc. 7$! byer@mail.all-net.net 8$! 9$! Changes by Richard Levitte <richard@levitte.org> 10$! Zoltan Arpadffy <zoli@polarhome.com> 11$! 12$! This procedure creates the SSL libraries of "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" 13$! "[.xxx.EXE.SSL]LIBSSL.OLB" 14$! The "xxx" denotes the machine architecture of ALPHA, IA64 or VAX. 15$! 16$! This procedures accepts two command line options listed below. 17$! 18$! P1 specifies one of the following build options: 19$! 20$! ALL Just build "everything". 21$! CONFIG Just build the "[.CRYPTO._xxx]OPENSSLCONF.H" file. 22$! BUILDINF Just build the "[.CRYPTO._xxx]BUILDINF.H" file. 23$! SOFTLINKS Just fix the Unix soft links. 24$! BUILDALL Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done. 25$! CRYPTO Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library. 26$! CRYPTO/x Just build the x part of the 27$! "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library. 28$! SSL Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library. 29$! SSL_TASK Just build the "[.xxx.EXE.SSL]SSL_TASK.EXE" program. 30$! TEST Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL. 31$! APPS Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL. 32$! ENGINES Just build the "[.xxx.EXE.ENGINES]" application programs for OpenSSL. 33$! 34$! P2, if defined, specifies the C pointer size. Ignored on VAX. 35$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.) 36$! Supported values are: 37$! 38$! "" Compile with default (/NOPOINTER_SIZE). 39$! 32 Compile with /POINTER_SIZE=32 (SHORT). 40$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]). 41$! (Automatically select ARGV if compiler supports it.) 42$! 64= Compile with /POINTER_SIZE=64 (LONG). 43$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV). 44$! 45$! P3 specifies DEBUG or NODEBUG, to compile with or without debugging 46$! information. 47$! 48$! P4 specifies which compiler to try to compile under. 49$! 50$! VAXC For VAX C. 51$! DECC For DEC C. 52$! GNUC For GNU C. 53$! LINK To only link the programs from existing object files. 54$! (not yet implemented) 55$! 56$! If you don't specify a compiler, it will try to determine which 57$! "C" compiler to use. 58$! 59$! P5, if defined, sets a TCP/IP library to use, through one of the following 60$! keywords: 61$! 62$! UCX for UCX or UCX emulation 63$! TCPIP for TCP/IP Services or TCP/IP Services emulation 64$! (this is prefered over UCX) 65$! SOCKETSHR for SOCKETSHR+NETLIB 66$! NONE to avoid specifying which TCP/IP implementation to 67$! use at build time (this works with DEC C). This is 68$! the default. 69$! 70$! P6, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up). 71$! 72$! P7, if defined, specifies a directory where ZLIB files (zlib.h, 73$! libz.olb) may be found. Optionally, a non-default object library 74$! name may be included ("dev:[dir]libz_64.olb", for example). 75$! 76$! 77$! Announce/identify. 78$! 79$ proc = f$environment( "procedure") 80$ write sys$output "@@@ "+ - 81 f$parse( proc, , , "name")+ f$parse( proc, , , "type") 82$! 83$ DEF_ORIG = F$ENVIRONMENT( "DEFAULT") 84$ ON ERROR THEN GOTO TIDY 85$ ON CONTROL_C THEN GOTO TIDY 86$! 87$! Check if we're in a batch job, and make sure we get to 88$! the directory this script is in 89$! 90$ IF F$MODE() .EQS. "BATCH" 91$ THEN 92$ COMNAME=F$ENVIRONMENT("PROCEDURE") 93$ COMPATH=F$PARSE("A.;",COMNAME) - "A.;" 94$ SET DEF 'COMPATH' 95$ ENDIF 96$! 97$! Check What Architecture We Are Using. 98$! 99$ IF (F$GETSYI("CPU").LT.128) 100$ THEN 101$! 102$! The Architecture Is VAX. 103$! 104$ ARCH = "VAX" 105$! 106$! Else... 107$! 108$ ELSE 109$! 110$! The Architecture Is Alpha, IA64 or whatever comes in the future. 111$! 112$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE") 113$ IF (ARCH .EQS. "") THEN ARCH = "UNK" 114$! 115$! End The Architecture Check. 116$! 117$ ENDIF 118$! 119$ ARCHD = ARCH 120$ LIB32 = "32" 121$ POINTER_SIZE = "" 122$! 123$! Get VMS version. 124$! 125$ VMS_VERSION = f$edit( f$getsyi( "VERSION"), "TRIM") 126$! 127$! Check To Make Sure We Have Valid Command Line Parameters. 128$! 129$ GOSUB CHECK_OPTIONS 130$! 131$! Check To See What We Are To Do. 132$! 133$ IF (BUILDCOMMAND.EQS."ALL") 134$ THEN 135$! 136$! Start with building the OpenSSL configuration file. 137$! 138$ GOSUB CONFIG 139$! 140$! Create The "BUILDINF.H" Include File. 141$! 142$ GOSUB BUILDINF 143$! 144$! Fix The Unix Softlinks. 145$! 146$ GOSUB SOFTLINKS 147$! 148$ ENDIF 149$! 150$ IF (BUILDCOMMAND.EQS."ALL".OR.BUILDCOMMAND.EQS."BUILDALL") 151$ THEN 152$! 153$! Build The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library. 154$! 155$ GOSUB CRYPTO 156$! 157$! Build The [.xxx.EXE.SSL]LIBSSL.OLB Library. 158$! 159$ GOSUB SSL 160$! 161$! Build The [.xxx.EXE.SSL]SSL_TASK.EXE DECNet SSL Engine. 162$! 163$ GOSUB SSL_TASK 164$! 165$! Build The [.xxx.EXE.TEST] OpenSSL Test Utilities. 166$! 167$ GOSUB TEST 168$! 169$! Build The [.xxx.EXE.APPS] OpenSSL Application Utilities. 170$! 171$ GOSUB APPS 172$! 173$! Build The [.xxx.EXE.ENGINES] OpenSSL Shareable Engines. 174$! 175$ GOSUB ENGINES 176$! 177$! Else... 178$! 179$ ELSE 180$! 181$! Build Just What The User Wants Us To Build. 182$! 183$ GOSUB 'BUILDCOMMAND' 184$! 185$ ENDIF 186$! 187$! Time To EXIT. 188$! 189$ GOTO TIDY 190$! 191$! Rebuild The [.CRYPTO._xxx]OPENSSLCONF.H" file. 192$! 193$ CONFIG: 194$! 195$! Tell The User We Are Creating The [.CRYPTO._xxx]OPENSSLCONF.H File. 196$! 197$ WRITE SYS$OUTPUT "Creating [.CRYPTO.''ARCHD']OPENSSLCONF.H Include File." 198$! 199$! First, make sure the directory exists. 200$! 201$ IF F$PARSE("SYS$DISK:[.CRYPTO.''ARCHD']") .EQS. "" THEN - 202 CREATE/DIRECTORY SYS$DISK:[.CRYPTO.'ARCHD'] 203$! 204$! Different tar/UnZip versions/option may have named the file differently 205$ IF F$SEARCH("[.crypto]opensslconf.h_in") .NES. "" 206$ THEN 207$ OPENSSLCONF_H_IN = "[.crypto]opensslconf.h_in" 208$ ELSE 209$ IF F$SEARCH( "[.crypto]opensslconf_h.in") .NES. "" 210$ THEN 211$ OPENSSLCONF_H_IN = "[.crypto]opensslconf_h.in" 212$ ELSE 213$ ! For ODS-5 214$ IF F$SEARCH( "[.crypto]opensslconf.h.in") .NES. "" 215$ THEN 216$ OPENSSLCONF_H_IN = "[.crypto]opensslconf.h.in" 217$ ELSE 218$ WRITE SYS$ERROR "Couldn't find a [.crypto]opensslconf.h.in. Exiting!" 219$ $STATUS = %X00018294 ! "%RMS-F-FNF, file not found". 220$ GOTO TIDY 221$ ENDIF 222$ ENDIF 223$ ENDIF 224$! 225$! Create The [.CRYPTO._xxx]OPENSSLCONF.H File. 226$! Make sure it has the right format. 227$! 228$ OSCH_NAME = "SYS$DISK:[.CRYPTO.''ARCHD']OPENSSLCONF.H" 229$ CREATE /FDL=SYS$INPUT: 'OSCH_NAME' 230RECORD 231 FORMAT stream_lf 232$ OPEN /APPEND H_FILE 'OSCH_NAME' 233$! 234$! Write The [.CRYPTO._xxx]OPENSSLCONF.H File. 235$! 236$ WRITE H_FILE "/* This file was automatically built using makevms.com */" 237$ WRITE H_FILE "/* and ''OPENSSLCONF_H_IN' */" 238$! 239$! Write a few macros that indicate how this system was built. 240$! 241$ WRITE H_FILE "" 242$ WRITE H_FILE "#ifndef OPENSSL_SYS_VMS" 243$ WRITE H_FILE "# define OPENSSL_SYS_VMS" 244$ WRITE H_FILE "#endif" 245$ 246$! One of the best way to figure out what the list should be is to do 247$! the following on a Unix system: 248$! grep OPENSSL_NO_ crypto/*/*.h ssl/*.h engines/*.h engines/*/*.h|grep ':# *if'|sed -e 's/^.*def //'|sort|uniq 249$! For that reason, the list will also always end up in alphabetical order 250$ CONFIG_LOGICALS := AES,- 251 ASM,INLINE_ASM,- 252 BF,- 253 BIO,- 254 BUFFER,- 255 BUF_FREELISTS,- 256 CAMELLIA,- 257 CAST,- 258 CMS,- 259 COMP,- 260 DEPRECATED,- 261 DES,- 262 DGRAM,- 263 DH,- 264 DSA,- 265 EC,- 266 EC2M,- 267 ECDH,- 268 ECDSA,- 269 EC_NISTP_64_GCC_128,- 270 ENGINE,- 271 ERR,- 272 EVP,- 273 FP_API,- 274 GMP,- 275 GOST,- 276 HASH_COMP,- 277 HMAC,- 278 IDEA,- 279 JPAKE,- 280 KRB5,- 281 LHASH,- 282 MD2,- 283 MD4,- 284 MD5,- 285 MDC2,- 286 OCSP,- 287 PSK,- 288 RC2,- 289 RC4,- 290 RC5,- 291 RFC3779,- 292 RIPEMD,- 293 RSA,- 294 SEED,- 295 SHA,- 296 SHA0,- 297 SHA1,- 298 SHA256,- 299 SHA512,- 300 SOCK,- 301 SRP,- 302 SSL2,- 303 SSL_INTERN,- 304 STACK,- 305 STATIC_ENGINE,- 306 STDIO,- 307 STORE,- 308 TLSEXT,- 309 WHIRLPOOL,- 310 X509 311$! Add a few that we know about 312$ CONFIG_LOGICALS := 'CONFIG_LOGICALS',- 313 THREADS 314$! The following rules, which dictate how some algorithm choices affect 315$! others, are picked from Configure. 316$! Quick syntax: 317$! list = item[ ; list] 318$! item = algos / dependents 319$! algos = algo [, algos] 320$! dependents = dependent [, dependents] 321$! When a list of algos is specified in one item, it means that they must 322$! all be disabled for the rule to apply. 323$! When a list of dependents is specified in one item, it means that they 324$! will all be disabled if the rule applies. 325$! Rules are checked sequentially. If a rule disables an algorithm, it will 326$! affect all following rules that depend on that algorithm being disabled. 327$! To force something to be enabled or disabled, have no algorithms in the 328$! algos part. 329$ CONFIG_DISABLE_RULES := RIJNDAEL/AES;- 330 DES/MDC2;- 331 EC/ECDSA,ECDH;- 332 MD5/SSL2,SSL3,TLS1;- 333 SHA/SSL3,TLS1;- 334 RSA/SSL2;- 335 RSA,DSA/SSL2;- 336 DH/SSL3,TLS1;- 337 TLS1/TLSEXT;- 338 EC/GOST;- 339 DSA/GOST;- 340 DH/GOST;- 341 /STATIC_ENGINE;- 342 /KRB5;- 343 /EC_NISTP_64_GCC_128 344$ CONFIG_ENABLE_RULES := ZLIB_DYNAMIC/ZLIB;- 345 /THREADS 346$ 347$! Architecture specific rule addtions 348$ IF ARCH .EQS. "VAX" 349$ THEN 350$ ! Disable algorithms that require 64-bit integers in C 351$ CONFIG_DISABLE_RULES = CONFIG_DISABLE_RULES + - 352 ";/GOST" + - 353 ";/WHIRLPOOL" 354$ ENDIF 355$ 356$ CONFIG_LOG_I = 0 357$ CONFIG_LOG_LOOP1: 358$ CONFIG_LOG_E = F$EDIT(F$ELEMENT(CONFIG_LOG_I,",",CONFIG_LOGICALS),"TRIM") 359$ CONFIG_LOG_I = CONFIG_LOG_I + 1 360$ IF CONFIG_LOG_E .EQS. "" THEN GOTO CONFIG_LOG_LOOP1 361$ IF CONFIG_LOG_E .EQS. "," THEN GOTO CONFIG_LOG_LOOP1_END 362$ IF F$TRNLNM("OPENSSL_NO_"+CONFIG_LOG_E) 363$ THEN 364$ CONFIG_DISABLED_'CONFIG_LOG_E' := YES 365$ CONFIG_ENABLED_'CONFIG_LOG_E' := NO 366$ CONFIG_CHANGED_'CONFIG_LOG_E' := YES 367$ ELSE 368$ CONFIG_DISABLED_'CONFIG_LOG_E' := NO 369$ CONFIG_ENABLED_'CONFIG_LOG_E' := YES 370$ ! Because all algorithms are assumed enabled by default 371$ CONFIG_CHANGED_'CONFIG_LOG_E' := NO 372$ ENDIF 373$ GOTO CONFIG_LOG_LOOP1 374$ CONFIG_LOG_LOOP1_END: 375$ 376$! Apply cascading disable rules 377$ CONFIG_DISABLE_I = 0 378$ CONFIG_DISABLE_LOOP0: 379$ CONFIG_DISABLE_E = F$EDIT(F$ELEMENT(CONFIG_DISABLE_I,";", - 380 CONFIG_DISABLE_RULES),"TRIM") 381$ CONFIG_DISABLE_I = CONFIG_DISABLE_I + 1 382$ IF CONFIG_DISABLE_E .EQS. "" THEN GOTO CONFIG_DISABLE_LOOP0 383$ IF CONFIG_DISABLE_E .EQS. ";" THEN GOTO CONFIG_DISABLE_LOOP0_END 384$ 385$ CONFIG_DISABLE_ALGOS = F$EDIT(F$ELEMENT(0,"/",CONFIG_DISABLE_E),"TRIM") 386$ CONFIG_DISABLE_DEPENDENTS = F$EDIT(F$ELEMENT(1,"/",CONFIG_DISABLE_E),"TRIM") 387$ TO_DISABLE := YES 388$ CONFIG_ALGO_I = 0 389$ CONFIG_DISABLE_LOOP1: 390$ CONFIG_ALGO_E = F$EDIT(F$ELEMENT(CONFIG_ALGO_I,",", - 391 CONFIG_DISABLE_ALGOS),"TRIM") 392$ CONFIG_ALGO_I = CONFIG_ALGO_I + 1 393$ IF CONFIG_ALGO_E .EQS. "" THEN GOTO CONFIG_DISABLE_LOOP1 394$ IF CONFIG_ALGO_E .EQS. "," THEN GOTO CONFIG_DISABLE_LOOP1_END 395$ IF F$TYPE(CONFIG_DISABLED_'CONFIG_ALGO_E') .EQS. "" 396$ THEN 397$ TO_DISABLE := NO 398$ ELSE 399$ IF .NOT. CONFIG_DISABLED_'CONFIG_ALGO_E' THEN TO_DISABLE := NO 400$ ENDIF 401$ GOTO CONFIG_DISABLE_LOOP1 402$ CONFIG_DISABLE_LOOP1_END: 403$ 404$ IF TO_DISABLE 405$ THEN 406$ CONFIG_DEPENDENT_I = 0 407$ CONFIG_DISABLE_LOOP2: 408$ CONFIG_DEPENDENT_E = F$EDIT(F$ELEMENT(CONFIG_DEPENDENT_I,",", - 409 CONFIG_DISABLE_DEPENDENTS),"TRIM") 410$ CONFIG_DEPENDENT_I = CONFIG_DEPENDENT_I + 1 411$ IF CONFIG_DEPENDENT_E .EQS. "" THEN GOTO CONFIG_DISABLE_LOOP2 412$ IF CONFIG_DEPENDENT_E .EQS. "," THEN GOTO CONFIG_DISABLE_LOOP2_END 413$ CONFIG_DISABLED_'CONFIG_DEPENDENT_E' := YES 414$ CONFIG_ENABLED_'CONFIG_DEPENDENT_E' := NO 415$ ! Better not to assume defaults at this point... 416$ CONFIG_CHANGED_'CONFIG_DEPENDENT_E' := YES 417$ WRITE SYS$ERROR - 418 "''CONFIG_DEPENDENT_E' disabled by rule ''CONFIG_DISABLE_E'" 419$ GOTO CONFIG_DISABLE_LOOP2 420$ CONFIG_DISABLE_LOOP2_END: 421$ ENDIF 422$ GOTO CONFIG_DISABLE_LOOP0 423$ CONFIG_DISABLE_LOOP0_END: 424$ 425$! Apply cascading enable rules 426$ CONFIG_ENABLE_I = 0 427$ CONFIG_ENABLE_LOOP0: 428$ CONFIG_ENABLE_E = F$EDIT(F$ELEMENT(CONFIG_ENABLE_I,";", - 429 CONFIG_ENABLE_RULES),"TRIM") 430$ CONFIG_ENABLE_I = CONFIG_ENABLE_I + 1 431$ IF CONFIG_ENABLE_E .EQS. "" THEN GOTO CONFIG_ENABLE_LOOP0 432$ IF CONFIG_ENABLE_E .EQS. ";" THEN GOTO CONFIG_ENABLE_LOOP0_END 433$ 434$ CONFIG_ENABLE_ALGOS = F$EDIT(F$ELEMENT(0,"/",CONFIG_ENABLE_E),"TRIM") 435$ CONFIG_ENABLE_DEPENDENTS = F$EDIT(F$ELEMENT(1,"/",CONFIG_ENABLE_E),"TRIM") 436$ TO_ENABLE := YES 437$ CONFIG_ALGO_I = 0 438$ CONFIG_ENABLE_LOOP1: 439$ CONFIG_ALGO_E = F$EDIT(F$ELEMENT(CONFIG_ALGO_I,",", - 440 CONFIG_ENABLE_ALGOS),"TRIM") 441$ CONFIG_ALGO_I = CONFIG_ALGO_I + 1 442$ IF CONFIG_ALGO_E .EQS. "" THEN GOTO CONFIG_ENABLE_LOOP1 443$ IF CONFIG_ALGO_E .EQS. "," THEN GOTO CONFIG_ENABLE_LOOP1_END 444$ IF F$TYPE(CONFIG_ENABLED_'CONFIG_ALGO_E') .EQS. "" 445$ THEN 446$ TO_ENABLE := NO 447$ ELSE 448$ IF .NOT. CONFIG_ENABLED_'CONFIG_ALGO_E' THEN TO_ENABLE := NO 449$ ENDIF 450$ GOTO CONFIG_ENABLE_LOOP1 451$ CONFIG_ENABLE_LOOP1_END: 452$ 453$ IF TO_ENABLE 454$ THEN 455$ CONFIG_DEPENDENT_I = 0 456$ CONFIG_ENABLE_LOOP2: 457$ CONFIG_DEPENDENT_E = F$EDIT(F$ELEMENT(CONFIG_DEPENDENT_I,",", - 458 CONFIG_ENABLE_DEPENDENTS),"TRIM") 459$ CONFIG_DEPENDENT_I = CONFIG_DEPENDENT_I + 1 460$ IF CONFIG_DEPENDENT_E .EQS. "" THEN GOTO CONFIG_ENABLE_LOOP2 461$ IF CONFIG_DEPENDENT_E .EQS. "," THEN GOTO CONFIG_ENABLE_LOOP2_END 462$ CONFIG_DISABLED_'CONFIG_DEPENDENT_E' := NO 463$ CONFIG_ENABLED_'CONFIG_DEPENDENT_E' := YES 464$ ! Better not to assume defaults at this point... 465$ CONFIG_CHANGED_'CONFIG_DEPENDENT_E' := YES 466$ WRITE SYS$ERROR - 467 "''CONFIG_DEPENDENT_E' enabled by rule ''CONFIG_ENABLE_E'" 468$ GOTO CONFIG_ENABLE_LOOP2 469$ CONFIG_ENABLE_LOOP2_END: 470$ ENDIF 471$ GOTO CONFIG_ENABLE_LOOP0 472$ CONFIG_ENABLE_LOOP0_END: 473$ 474$! Write to the configuration 475$ CONFIG_LOG_I = 0 476$ CONFIG_LOG_LOOP2: 477$ CONFIG_LOG_E = F$EDIT(F$ELEMENT(CONFIG_LOG_I,",",CONFIG_LOGICALS),"TRIM") 478$ CONFIG_LOG_I = CONFIG_LOG_I + 1 479$ IF CONFIG_LOG_E .EQS. "" THEN GOTO CONFIG_LOG_LOOP2 480$ IF CONFIG_LOG_E .EQS. "," THEN GOTO CONFIG_LOG_LOOP2_END 481$ IF CONFIG_CHANGED_'CONFIG_LOG_E' 482$ THEN 483$ IF CONFIG_DISABLED_'CONFIG_LOG_E' 484$ THEN 485$ WRITE H_FILE "#ifndef OPENSSL_NO_",CONFIG_LOG_E 486$ WRITE H_FILE "# define OPENSSL_NO_",CONFIG_LOG_E 487$ WRITE H_FILE "#endif" 488$ ELSE 489$ WRITE H_FILE "#ifndef OPENSSL_",CONFIG_LOG_E 490$ WRITE H_FILE "# define OPENSSL_",CONFIG_LOG_E 491$ WRITE H_FILE "#endif" 492$ ENDIF 493$ ENDIF 494$ GOTO CONFIG_LOG_LOOP2 495$ CONFIG_LOG_LOOP2_END: 496$! 497$ WRITE H_FILE "" 498$ WRITE H_FILE "/* 2011-02-23 SMS." 499$ WRITE H_FILE " * On VMS (V8.3), setvbuf() doesn't support a 64-bit" 500$ WRITE H_FILE " * ""in"" pointer, and the help says:" 501$ WRITE H_FILE " * Please note that the previously documented" 502$ WRITE H_FILE " * value _IONBF is not supported." 503$ WRITE H_FILE " * So, skip it on VMS." 504$ WRITE H_FILE " */" 505$ WRITE H_FILE "#define OPENSSL_NO_SETVBUF_IONBF" 506$ WRITE H_FILE "/* STCP support comes with TCPIP 5.7 ECO 2 " 507$ WRITE H_FILE " * enable on newer systems / 2012-02-24 arpadffy */" 508$ WRITE H_FILE "#define OPENSSL_NO_SCTP" 509$ WRITE H_FILE "" 510$! 511$! Add in the common "crypto/opensslconf.h.in". 512$! 513$ TYPE 'OPENSSLCONF_H_IN' /OUTPUT=H_FILE: 514$! 515$ IF ARCH .NES. "VAX" 516$ THEN 517$! 518$! Write the non-VAX specific data 519$! 520$ WRITE H_FILE "#if defined(HEADER_RC4_H)" 521$ WRITE H_FILE "#undef RC4_INT" 522$ WRITE H_FILE "#define RC4_INT unsigned int" 523$ WRITE H_FILE "#undef RC4_CHUNK" 524$ WRITE H_FILE "#define RC4_CHUNK unsigned long long" 525$ WRITE H_FILE "#endif" 526$! 527$ WRITE H_FILE "#if defined(HEADER_DES_LOCL_H)" 528$ WRITE H_FILE "#undef DES_LONG" 529$ WRITE H_FILE "#define DES_LONG unsigned int" 530$ WRITE H_FILE "#undef DES_PTR" 531$ WRITE H_FILE "#define DES_PTR" 532$ WRITE H_FILE "#undef DES_RISC1" 533$ WRITE H_FILE "#undef DES_RISC2" 534$ WRITE H_FILE "#define DES_RISC1" 535$ WRITE H_FILE "#undef DES_UNROLL" 536$ WRITE H_FILE "#define DES_UNROLL" 537$ WRITE H_FILE "#endif" 538$! 539$ WRITE H_FILE "#if defined(HEADER_BN_H)" 540$ WRITE H_FILE "#undef BN_LLONG" ! Never define with SIXTY_FOUR_BIT 541$ WRITE H_FILE "#undef SIXTY_FOUR_BIT_LONG" 542$ WRITE H_FILE "#undef SIXTY_FOUR_BIT" 543$ WRITE H_FILE "#define SIXTY_FOUR_BIT" 544$ WRITE H_FILE "#undef THIRTY_TWO_BIT" 545$ WRITE H_FILE "#undef SIXTEEN_BIT" 546$ WRITE H_FILE "#undef EIGHT_BIT" 547$ WRITE H_FILE "#endif" 548$ 549$ WRITE H_FILE "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION" 550$! 551$! Else... 552$! 553$ ELSE 554$! 555$! Write the VAX specific data 556$! 557$ WRITE H_FILE "#if defined(HEADER_RC4_H)" 558$ WRITE H_FILE "#undef RC4_INT" 559$ WRITE H_FILE "#define RC4_INT unsigned char" 560$ WRITE H_FILE "#undef RC4_CHUNK" 561$ WRITE H_FILE "#define RC4_CHUNK unsigned long" 562$ WRITE H_FILE "#endif" 563$! 564$ WRITE H_FILE "#if defined(HEADER_DES_LOCL_H)" 565$ WRITE H_FILE "#undef DES_LONG" 566$ WRITE H_FILE "#define DES_LONG unsigned long" 567$ WRITE H_FILE "#undef DES_PTR" 568$ WRITE H_FILE "#define DES_PTR" 569$ WRITE H_FILE "#undef DES_RISC1" 570$ WRITE H_FILE "#undef DES_RISC2" 571$ WRITE H_FILE "#undef DES_UNROLL" 572$ WRITE H_FILE "#endif" 573$! 574$ WRITE H_FILE "#if defined(HEADER_BN_H)" 575$ WRITE H_FILE "#undef BN_LLONG" ! VAX C/DEC C doesn't have long long 576$ WRITE H_FILE "#undef SIXTY_FOUR_BIT_LONG" 577$ WRITE H_FILE "#undef SIXTY_FOUR_BIT" 578$ WRITE H_FILE "#undef THIRTY_TWO_BIT" 579$ WRITE H_FILE "#define THIRTY_TWO_BIT" 580$ WRITE H_FILE "#undef SIXTEEN_BIT" 581$ WRITE H_FILE "#undef EIGHT_BIT" 582$ WRITE H_FILE "#endif" 583$! 584$! Oddly enough, the following symbol is tested in crypto/sha/sha512.c 585$! before sha.h gets included (and HEADER_SHA_H defined), so we will not 586$! protect this one... 587$ WRITE H_FILE "#undef OPENSSL_NO_SHA512" 588$ WRITE H_FILE "#define OPENSSL_NO_SHA512" 589$! 590$ WRITE H_FILE "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION" 591$ WRITE H_FILE "#define OPENSSL_EXPORT_VAR_AS_FUNCTION" 592$! 593$! End 594$! 595$ ENDIF 596$! 597$! Close the [.CRYPTO._xxx]OPENSSLCONF.H file 598$! 599$ CLOSE H_FILE 600$! 601$! Purge The [.CRYPTO._xxx]OPENSSLCONF.H file 602$! 603$ PURGE SYS$DISK:[.CRYPTO.'ARCHD']OPENSSLCONF.H 604$! 605$! That's All, Time To RETURN. 606$! 607$ RETURN 608$! 609$! Rebuild The "[.CRYPTO._xxx]BUILDINF.H" file. 610$! 611$ BUILDINF: 612$! 613$! Tell The User We Are Creating The [.CRYPTO._xxx]BUILDINF.H File. 614$! 615$ WRITE SYS$OUTPUT "Creating [.CRYPTO.''ARCHD']BUILDINF.H Include File." 616$! 617$! Create The [.CRYPTO._xxx]BUILDINF.H File. 618$! 619$ BIH_NAME = "SYS$DISK:[.CRYPTO.''ARCHD']BUILDINF.H" 620$ CREATE /FDL=SYS$INPUT: 'BIH_NAME' 621RECORD 622 FORMAT stream_lf 623$! 624$ OPEN /APPEND H_FILE 'bih_name' 625$! 626$! Get The Current Date & Time. 627$! 628$ TIME = F$TIME() 629$! 630$! Write The [.CRYPTO._xxx]BUILDINF.H File. 631$! 632$ CFLAGS = "" 633$ if (POINTER_SIZE .nes. "") 634$ then 635$ CFLAGS = CFLAGS+ "/POINTER_SIZE=''POINTER_SIZE'" 636$ endif 637$ if (ZLIB .nes. "") 638$ then 639$ if (CFLAGS .nes. "") then CFLAGS = CFLAGS+ " " 640$ CFLAGS = CFLAGS+ "/DEFINE=ZLIB" 641$ endif 642$! 643$ WRITE H_FILE "#define CFLAGS ""''CFLAGS'""" 644$ WRITE H_FILE "#define PLATFORM ""VMS ''ARCHD' ''VMS_VERSION'""" 645$ WRITE H_FILE "#define DATE ""''TIME'"" " 646$! 647$! Close The [.CRYPTO._xxx]BUILDINF.H File. 648$! 649$ CLOSE H_FILE 650$! 651$! Purge The [.CRYPTO._xxx]BUILDINF.H File. 652$! 653$ PURGE SYS$DISK:[.CRYPTO.'ARCHD']BUILDINF.H 654$! 655$! Delete [.CRYPTO]BUILDINF.H File, as there might be some residue from Unix. 656$! 657$ IF F$SEARCH("[.CRYPTO]BUILDINF.H") .NES. "" THEN - 658 DELETE SYS$DISK:[.CRYPTO]BUILDINF.H;* 659$! 660$! That's All, Time To RETURN. 661$! 662$ RETURN 663$! 664$! Copy a lot of files around. 665$! 666$ SOFTLINKS: 667$! 668$!!!! Tell The User We Are Partly Rebuilding The [.APPS] Directory. 669$!!!! 670$!!! WRITE SYS$OUTPUT "Rebuilding The '[.APPS]MD4.C' File." 671$!!!! 672$!!! DELETE SYS$DISK:[.APPS]MD4.C;* 673$!!!! 674$!!!! Copy MD4.C from [.CRYPTO.MD4] into [.APPS] 675$!!!! 676$!!! COPY SYS$DISK:[.CRYPTO.MD4]MD4.C SYS$DISK:[.APPS] 677$! 678$! Ensure that the [.include.openssl] directory contains a full set of 679$! real header files. The distribution kit may have left real or fake 680$! symlinks there. Rather than think about what's there, simply delete 681$! the destination files (fake or real symlinks) before copying the real 682$! header files in. (Copying a real header file onto a real symlink 683$! merely duplicates the real header file at its source.) 684$! 685$! Tell The User We Are Rebuilding The [.include.openssl] Directory. 686$! 687$ WRITE SYS$OUTPUT "Rebuilding The '[.include.openssl]' Directory." 688$! 689$! First, make sure the directory exists. If it did exist, delete all 690$! the existing header files (or fake or real symlinks). 691$! 692$ if f$parse( "sys$disk:[.include.openssl]") .eqs. "" 693$ then 694$ create /directory sys$disk:[.include.openssl] 695$ else 696$ delete sys$disk:[.include.openssl]*.h;* 697$ endif 698$! 699$! Copy All The ".H" Files From The Main Directory. 700$! 701$ EXHEADER := e_os2.h 702$ copy 'exheader' sys$disk:[.include.openssl] 703$! 704$! Copy All The ".H" Files From The [.CRYPTO] Directory Tree. 705$! 706$ SDIRS := , - 707 'ARCHD', - 708 OBJECTS, - 709 MD2, MD4, MD5, SHA, MDC2, HMAC, RIPEMD, WHRLPOOL, - 710 DES, AES, RC2, RC4, RC5, IDEA, BF, CAST, CAMELLIA, SEED, MODES, - 711 BN, EC, RSA, DSA, ECDSA, DH, ECDH, DSO, ENGINE, - 712 BUFFER, BIO, STACK, LHASH, RAND, ERR, - 713 EVP, ASN1, PEM, X509, X509V3, CONF, TXT_DB, PKCS7, PKCS12, - 714 COMP, OCSP, UI, KRB5, - 715 CMS, PQUEUE, TS, JPAKE, SRP, STORE, CMAC 716$! 717$ EXHEADER_ := crypto.h, opensslv.h, ebcdic.h, symhacks.h, ossl_typ.h 718$ EXHEADER_'ARCHD' := opensslconf.h 719$ EXHEADER_OBJECTS := objects.h, obj_mac.h 720$ EXHEADER_MD2 := md2.h 721$ EXHEADER_MD4 := md4.h 722$ EXHEADER_MD5 := md5.h 723$ EXHEADER_SHA := sha.h 724$ EXHEADER_MDC2 := mdc2.h 725$ EXHEADER_HMAC := hmac.h 726$ EXHEADER_RIPEMD := ripemd.h 727$ EXHEADER_WHRLPOOL := whrlpool.h 728$ EXHEADER_DES := des.h, des_old.h 729$ EXHEADER_AES := aes.h 730$ EXHEADER_RC2 := rc2.h 731$ EXHEADER_RC4 := rc4.h 732$ EXHEADER_RC5 := rc5.h 733$ EXHEADER_IDEA := idea.h 734$ EXHEADER_BF := blowfish.h 735$ EXHEADER_CAST := cast.h 736$ EXHEADER_CAMELLIA := camellia.h 737$ EXHEADER_SEED := seed.h 738$ EXHEADER_MODES := modes.h 739$ EXHEADER_BN := bn.h 740$ EXHEADER_EC := ec.h 741$ EXHEADER_RSA := rsa.h 742$ EXHEADER_DSA := dsa.h 743$ EXHEADER_ECDSA := ecdsa.h 744$ EXHEADER_DH := dh.h 745$ EXHEADER_ECDH := ecdh.h 746$ EXHEADER_DSO := dso.h 747$ EXHEADER_ENGINE := engine.h 748$ EXHEADER_BUFFER := buffer.h 749$ EXHEADER_BIO := bio.h 750$ EXHEADER_STACK := stack.h, safestack.h 751$ EXHEADER_LHASH := lhash.h 752$ EXHEADER_RAND := rand.h 753$ EXHEADER_ERR := err.h 754$ EXHEADER_EVP := evp.h 755$ EXHEADER_ASN1 := asn1.h, asn1_mac.h, asn1t.h 756$ EXHEADER_PEM := pem.h, pem2.h 757$ EXHEADER_X509 := x509.h, x509_vfy.h 758$ EXHEADER_X509V3 := x509v3.h 759$ EXHEADER_CONF := conf.h, conf_api.h 760$ EXHEADER_TXT_DB := txt_db.h 761$ EXHEADER_PKCS7 := pkcs7.h 762$ EXHEADER_PKCS12 := pkcs12.h 763$ EXHEADER_COMP := comp.h 764$ EXHEADER_OCSP := ocsp.h 765$ EXHEADER_UI := ui.h, ui_compat.h 766$ EXHEADER_KRB5 := krb5_asn.h 767$ EXHEADER_CMS := cms.h 768$ EXHEADER_PQUEUE := pqueue.h 769$ EXHEADER_TS := ts.h 770$ EXHEADER_JPAKE := jpake.h 771$ EXHEADER_SRP := srp.h 772$!!! EXHEADER_STORE := store.h, str_compat.h 773$ EXHEADER_STORE := store.h 774$ EXHEADER_CMAC := cmac.h 775$! 776$ i = 0 777$ loop_sdirs: 778$ sdir = f$edit( f$element( i, ",", sdirs), "trim") 779$ i = i + 1 780$ if (sdir .eqs. ",") then goto loop_sdirs_end 781$ hdr_list = exheader_'sdir' 782$ if (sdir .nes. "") then sdir = "."+ sdir 783$ copy [.crypto'sdir']'hdr_list' sys$disk:[.include.openssl] 784$ goto loop_sdirs 785$ loop_sdirs_end: 786$! 787$! Copy All The ".H" Files From The [.SSL] Directory. 788$! 789$! (keep these in the same order as ssl/Makefile) 790$ EXHEADER := ssl.h, ssl2.h, ssl3.h, ssl23.h, tls1.h, dtls1.h, kssl.h, srtp.h 791$ copy sys$disk:[.ssl]'exheader' sys$disk:[.include.openssl] 792$! 793$! Purge the [.include.openssl] header files. 794$! 795$ purge sys$disk:[.include.openssl]*.h 796$! 797$! That's All, Time To RETURN. 798$! 799$ RETURN 800$! 801$! Build The "[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO''LIB32'.OLB" Library. 802$! 803$ CRYPTO: 804$! 805$! Tell The User What We Are Doing. 806$! 807$ WRITE SYS$OUTPUT "" 808$ WRITE SYS$OUTPUT - 809 "Building The [.",ARCHD,".EXE.CRYPTO]SSL_LIBCRYPTO''LIB32'.OLB Library." 810$! 811$! Go To The [.CRYPTO] Directory. 812$! 813$ SET DEFAULT SYS$DISK:[.CRYPTO] 814$! 815$! Build The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library. 816$! 817$ @CRYPTO-LIB LIBRARY 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" - 818 "''ISSEVEN'" "''BUILDPART'" "''POINTER_SIZE'" "''ZLIB'" 819$! 820$! Build The [.xxx.EXE.CRYPTO]*.EXE Test Applications. 821$! 822$ @CRYPTO-LIB APPS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" - 823 "''ISSEVEN'" "''BUILDPART'" "''POINTER_SIZE'" "''ZLIB'" 824$! 825$! Go Back To The Main Directory. 826$! 827$ SET DEFAULT [-] 828$! 829$! Time To RETURN. 830$! 831$ RETURN 832$! 833$! Build The "[.xxx.EXE.SSL]SSL_LIBSSL''LIB32'.OLB" Library. 834$! 835$ SSL: 836$! 837$! Tell The User What We Are Doing. 838$! 839$ WRITE SYS$OUTPUT "" 840$ WRITE SYS$OUTPUT - 841 "Building The [.",ARCHD,".EXE.SSL]SSL_LIBSSL''LIB32'.OLB Library." 842$! 843$! Go To The [.SSL] Directory. 844$! 845$ SET DEFAULT SYS$DISK:[.SSL] 846$! 847$! Build The [.xxx.EXE.SSL]LIBSSL.OLB Library. 848$! 849$ @SSL-LIB LIBRARY 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" - 850 "''ISSEVEN'" "''POINTER_SIZE'" "''ZLIB'" 851$! 852$! Go Back To The Main Directory. 853$! 854$ SET DEFAULT [-] 855$! 856$! Time To Return. 857$! 858$ RETURN 859$! 860$! Build The "[.xxx.EXE.SSL]SSL_TASK.EXE" Program. 861$! 862$ SSL_TASK: 863$! 864$! Tell The User What We Are Doing. 865$! 866$ WRITE SYS$OUTPUT "" 867$ WRITE SYS$OUTPUT - 868 "Building DECNet Based SSL Engine, [.",ARCHD,".EXE.SSL]SSL_TASK.EXE" 869$! 870$! Go To The [.SSL] Directory. 871$! 872$ SET DEFAULT SYS$DISK:[.SSL] 873$! 874$! Build The [.xxx.EXE.SSL]SSL_TASK.EXE 875$! 876$ @SSL-LIB SSL_TASK 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" - 877 "''ISSEVEN'" "''POINTER_SIZE'" "''ZLIB'" 878$! 879$! Go Back To The Main Directory. 880$! 881$ SET DEFAULT [-] 882$! 883$! That's All, Time To RETURN. 884$! 885$ RETURN 886$! 887$! Build The OpenSSL Test Programs. 888$! 889$ TEST: 890$! 891$! Tell The User What We Are Doing. 892$! 893$ WRITE SYS$OUTPUT "" 894$ WRITE SYS$OUTPUT "Building The OpenSSL [.",ARCHD,".EXE.TEST] Test Utilities." 895$! 896$! Go To The [.TEST] Directory. 897$! 898$ SET DEFAULT SYS$DISK:[.TEST] 899$! 900$! Build The Test Programs. 901$! 902$ @MAKETESTS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" "''ISSEVEN'" - 903 "''POINTER_SIZE'" "''ZLIB'" 904$! 905$! Go Back To The Main Directory. 906$! 907$ SET DEFAULT [-] 908$! 909$! That's All, Time To RETURN. 910$! 911$ RETURN 912$! 913$! Build The OpenSSL Application Programs. 914$! 915$ APPS: 916$! 917$! Tell The User What We Are Doing. 918$! 919$ WRITE SYS$OUTPUT "" 920$ WRITE SYS$OUTPUT "Building OpenSSL [.",ARCHD,".EXE.APPS] Applications." 921$! 922$! Go To The [.APPS] Directory. 923$! 924$ SET DEFAULT SYS$DISK:[.APPS] 925$! 926$! Build The Application Programs. 927$! 928$ @MAKEAPPS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" "''ISSEVEN'" - 929 "" "''POINTER_SIZE'" "''ZLIB'" 930$! 931$! Go Back To The Main Directory. 932$! 933$ SET DEFAULT [-] 934$! 935$! That's All, Time To RETURN. 936$! 937$ RETURN 938$! 939$! Build The OpenSSL Application Programs. 940$! 941$ ENGINES: 942$! 943$! Tell The User What We Are Doing. 944$! 945$ WRITE SYS$OUTPUT "" 946$ WRITE SYS$OUTPUT "Building OpenSSL [.",ARCHD,".EXE.ENGINES] Engines." 947$! 948$! Go To The [.ENGINES] Directory. 949$! 950$ SET DEFAULT SYS$DISK:[.ENGINES] 951$! 952$! Build The Application Programs. 953$! 954$ @MAKEENGINES ENGINES 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" - 955 "''ISSEVEN'" "''BUILDPART'" "''POINTER_SIZE'" "''ZLIB'" 956$! 957$! Go Back To The Main Directory. 958$! 959$ SET DEFAULT [-] 960$! 961$! That's All, Time To RETURN. 962$! 963$ RETURN 964$! 965$! Check The User's Options. 966$! 967$ CHECK_OPTIONS: 968$! 969$! Check if there's a "part", and separate it out 970$! 971$ BUILDPART = F$ELEMENT(1,"/",P1) 972$ IF BUILDPART .EQS. "/" 973$ THEN 974$ BUILDPART = "" 975$ ELSE 976$ P1 = F$EXTRACT(0,F$LENGTH(P1) - F$LENGTH(BUILDPART) - 1, P1) 977$ ENDIF 978$! 979$! Check To See If P1 Is Blank. 980$! 981$ IF (P1.EQS."ALL") 982$ THEN 983$! 984$! P1 Is ALL, So Build Everything. 985$! 986$ BUILDCOMMAND = "ALL" 987$! 988$! Else... 989$! 990$ ELSE 991$! 992$! Else, Check To See If P1 Has A Valid Argument. 993$! 994$ IF (P1.EQS."CONFIG").OR.(P1.EQS."BUILDINF").OR.(P1.EQS."SOFTLINKS") - 995 .OR.(P1.EQS."BUILDALL") - 996 .OR.(P1.EQS."CRYPTO").OR.(P1.EQS."SSL") - 997 .OR.(P1.EQS."SSL_TASK").OR.(P1.EQS."TEST").OR.(P1.EQS."APPS") - 998 .OR.(P1.EQS."ENGINES") 999$ THEN 1000$! 1001$! A Valid Argument. 1002$! 1003$ BUILDCOMMAND = P1 1004$! 1005$! Else... 1006$! 1007$ ELSE 1008$! 1009$! Tell The User We Don't Know What They Want. 1010$! 1011$ WRITE SYS$OUTPUT "" 1012$ WRITE SYS$OUTPUT "USAGE: @MAKEVMS.COM [Target] [Pointer size] [Debug option] <Compiler>" 1013$ WRITE SYS$OUTPUT "" 1014$ WRITE SYS$OUTPUT "Example: @MAKEVMS.COM ALL """" NODEBUG " 1015$ WRITE SYS$OUTPUT "" 1016$ WRITE SYS$OUTPUT "The Target ",P1," Is Invalid. The Valid Target Options Are:" 1017$ WRITE SYS$OUTPUT "" 1018$ WRITE SYS$OUTPUT " ALL : Just Build Everything." 1019$ WRITE SYS$OUTPUT " CONFIG : Just build the [.CRYPTO._xxx]OPENSSLCONF.H file." 1020$ WRITE SYS$OUTPUT " BUILDINF : Just build the [.CRYPTO._xxx]BUILDINF.H file." 1021$ WRITE SYS$OUTPUT " SOFTLINKS: Just Fix The Unix soft links." 1022$ WRITE SYS$OUTPUT " BUILDALL : Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done." 1023$ WRITE SYS$OUTPUT " CRYPTO : To Build Just The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library." 1024$ WRITE SYS$OUTPUT " CRYPTO/x : To Build Just The x Part Of The" 1025$ WRITE SYS$OUTPUT " [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library." 1026$ WRITE SYS$OUTPUT " SSL : To Build Just The [.xxx.EXE.SSL]LIBSSL.OLB Library." 1027$ WRITE SYS$OUTPUT " SSL_TASK : To Build Just The [.xxx.EXE.SSL]SSL_TASK.EXE Program." 1028$ WRITE SYS$OUTPUT " TEST : To Build Just The OpenSSL Test Programs." 1029$ WRITE SYS$OUTPUT " APPS : To Build Just The OpenSSL Application Programs." 1030$ WRITE SYS$OUTPUT " ENGINES : To Build Just The ENGINES" 1031$ WRITE SYS$OUTPUT "" 1032$ WRITE SYS$OUTPUT " Where 'xxx' Stands For:" 1033$ WRITE SYS$OUTPUT "" 1034$ WRITE SYS$OUTPUT " ALPHA[64]: Alpha Architecture." 1035$ WRITE SYS$OUTPUT " IA64[64] : IA64 Architecture." 1036$ WRITE SYS$OUTPUT " VAX : VAX Architecture." 1037$ WRITE SYS$OUTPUT "" 1038$! 1039$! Time To EXIT. 1040$! 1041$ GOTO TIDY 1042$! 1043$! End The Valid Argument Check. 1044$! 1045$ ENDIF 1046$! 1047$! End The P1 Check. 1048$! 1049$ ENDIF 1050$! 1051$! Check P2 (POINTER_SIZE). 1052$! 1053$ IF (P2 .NES. "") .AND. (ARCH .NES. "VAX") 1054$ THEN 1055$! 1056$ IF (P2 .EQS. "32") 1057$ THEN 1058$ POINTER_SIZE = "32" 1059$ ELSE 1060$ POINTER_SIZE = F$EDIT( P2, "COLLAPSE, UPCASE") 1061$ IF ((POINTER_SIZE .EQS. "64") .OR. - 1062 (POINTER_SIZE .EQS. "64=") .OR. - 1063 (POINTER_SIZE .EQS. "64=ARGV")) 1064$ THEN 1065$ ARCHD = ARCH+ "_64" 1066$ LIB32 = "" 1067$ ELSE 1068$! 1069$! Tell The User Entered An Invalid Option. 1070$! 1071$ WRITE SYS$OUTPUT "" 1072$ WRITE SYS$OUTPUT "The Option ", P2, - 1073 " Is Invalid. The Valid Options Are:" 1074$ WRITE SYS$OUTPUT "" 1075$ WRITE SYS$OUTPUT - 1076 " """" : Compile with default (short) pointers." 1077$ WRITE SYS$OUTPUT - 1078 " 32 : Compile with 32-bit (short) pointers." 1079$ WRITE SYS$OUTPUT - 1080 " 64 : Compile with 64-bit (long) pointers (auto ARGV)." 1081$ WRITE SYS$OUTPUT - 1082 " 64= : Compile with 64-bit (long) pointers (no ARGV)." 1083$ WRITE SYS$OUTPUT - 1084 " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)." 1085$ WRITE SYS$OUTPUT "" 1086$! 1087$! Time To EXIT. 1088$! 1089$ GOTO TIDY 1090$! 1091$ ENDIF 1092$! 1093$ ENDIF 1094$! 1095$! End The P2 (POINTER_SIZE) Check. 1096$! 1097$ ENDIF 1098$! 1099$! Check To See If P3 Is Blank. 1100$! 1101$ IF (P3.EQS."NODEBUG") 1102$ THEN 1103$! 1104$! P3 Is NODEBUG, So Compile Without Debugger Information. 1105$! 1106$ DEBUGGER = "NODEBUG" 1107$! 1108$! Else... 1109$! 1110$ ELSE 1111$! 1112$! Check To See If We Are To Compile With Debugger Information. 1113$! 1114$ IF (P3.EQS."DEBUG") 1115$ THEN 1116$! 1117$! Compile With Debugger Information. 1118$! 1119$ DEBUGGER = "DEBUG" 1120$! 1121$! Else... 1122$! 1123$ ELSE 1124$! 1125$! Tell The User Entered An Invalid Option. 1126$! 1127$ WRITE SYS$OUTPUT "" 1128$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:" 1129$ WRITE SYS$OUTPUT "" 1130$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information." 1131$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information." 1132$ WRITE SYS$OUTPUT "" 1133$! 1134$! Time To EXIT. 1135$! 1136$ GOTO TIDY 1137$! 1138$! End The Valid Argument Check. 1139$! 1140$ ENDIF 1141$! 1142$! End The P3 Check. 1143$! 1144$ ENDIF 1145$! 1146$! Check To See If P4 Is Blank. 1147$! 1148$ IF (P4.EQS."") 1149$ THEN 1150$! 1151$! O.K., The User Didn't Specify A Compiler, Let's Try To 1152$! Find Out Which One To Use. 1153$! 1154$! Check To See If We Have GNU C. 1155$! 1156$ IF (F$TRNLNM("GNU_CC").NES."") 1157$ THEN 1158$! 1159$! Looks Like GNUC, Set To Use GNUC. 1160$! 1161$ COMPILER = "GNUC" 1162$! 1163$! Tell The User We Are Using GNUC. 1164$! 1165$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler." 1166$! 1167$! End The GNU C Compiler Check. 1168$! 1169$ ENDIF 1170$! 1171$! Check To See If We Have VAXC Or DECC. 1172$! 1173$ IF (F$GETSYI("CPU").GE.128).OR.(F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC") 1174$ THEN 1175$! 1176$! Looks Like DECC, Set To Use DECC. 1177$! 1178$ COMPILER = "DECC" 1179$! 1180$! Tell The User We Are Using DECC. 1181$! 1182$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler." 1183$! 1184$! Else... 1185$! 1186$ ELSE 1187$! 1188$! Looks Like VAXC, Set To Use VAXC. 1189$! 1190$ COMPILER = "VAXC" 1191$! 1192$! Tell The User We Are Using VAX C. 1193$! 1194$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler." 1195$! 1196$! End The DECC & VAXC Compiler Check. 1197$! 1198$ ENDIF 1199$! 1200$! Else... 1201$! 1202$ ELSE 1203$! 1204$! Check To See If The User Entered A Valid Parameter. 1205$! 1206$ IF (P4.EQS."VAXC").OR.(P4.EQS."DECC").OR.(P4.EQS."GNUC")!.OR.(P4.EQS."LINK") 1207$ THEN 1208$! 1209$! Check To See If The User Wanted To Just LINK. 1210$! 1211$ IF (P4.EQS."LINK") 1212$ THEN 1213$! 1214$! Looks Like LINK-only 1215$! 1216$ COMPILER = "LINK" 1217$! 1218$! Tell The User We Are Only Linking. 1219$! 1220$ WRITE SYS$OUTPUT "LINK Only. This actually NOT YET SUPPORTED!" 1221$! 1222$! End LINK Check. 1223$! 1224$ ENDIF 1225$! 1226$! Check To See If The User Wanted DECC. 1227$! 1228$ IF (P4.EQS."DECC") 1229$ THEN 1230$! 1231$! Looks Like DECC, Set To Use DECC. 1232$! 1233$ COMPILER = "DECC" 1234$! 1235$! Tell The User We Are Using DECC. 1236$! 1237$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler." 1238$! 1239$! End DECC Check. 1240$! 1241$ ENDIF 1242$! 1243$! Check To See If We Are To Use VAXC. 1244$! 1245$ IF (P4.EQS."VAXC") 1246$ THEN 1247$! 1248$! Looks Like VAXC, Set To Use VAXC. 1249$! 1250$ COMPILER = "VAXC" 1251$! 1252$! Tell The User We Are Using VAX C. 1253$! 1254$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler." 1255$! 1256$! End VAXC Check 1257$! 1258$ ENDIF 1259$! 1260$! Check To See If We Are To Use GNU C. 1261$! 1262$ IF (P4.EQS."GNUC") 1263$ THEN 1264$! 1265$! Looks Like GNUC, Set To Use GNUC. 1266$! 1267$ COMPILER = "GNUC" 1268$! 1269$! Tell The User We Are Using GNUC. 1270$! 1271$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler." 1272$! 1273$! End The GNU C Check. 1274$! 1275$ ENDIF 1276$! 1277$! Else The User Entered An Invalid Argument. 1278$! 1279$ ELSE 1280$! 1281$! Tell The User We Don't Know What They Want. 1282$! 1283$ WRITE SYS$OUTPUT "" 1284$ WRITE SYS$OUTPUT "The Option ",P4," Is Invalid. The Valid Options Are:" 1285$ WRITE SYS$OUTPUT "" 1286$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C." 1287$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C." 1288$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C." 1289$ WRITE SYS$OUTPUT "" 1290$! 1291$! Time To EXIT. 1292$! 1293$ GOTO TIDY 1294$! 1295$! End The Valid Argument Check. 1296$! 1297$ ENDIF 1298$! 1299$! End The P4 Check. 1300$! 1301$ ENDIF 1302$! 1303$! Time to check the contents of P5, and to make sure we get the correct 1304$! library. 1305$! 1306$ IF P5.EQS."SOCKETSHR" .OR. P5.EQS."MULTINET" .OR. P5.EQS."UCX" - 1307 .OR. P5.EQS."TCPIP" .OR. P5.EQS."NONE" 1308$ THEN 1309$! 1310$! Check to see if SOCKETSHR was chosen 1311$! 1312$ IF P5.EQS."SOCKETSHR" 1313$ THEN 1314$! 1315$! Set the library to use SOCKETSHR 1316$! 1317$ TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS" 1318$! 1319$! Tell the user 1320$! 1321$ WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP" 1322$! 1323$! Done with SOCKETSHR 1324$! 1325$ ENDIF 1326$! 1327$! Check to see if MULTINET was chosen 1328$! 1329$ IF P5.EQS."MULTINET" 1330$ THEN 1331$! 1332$! Set the library to use UCX emulation. 1333$! 1334$ P5 = "UCX" 1335$! 1336$! Tell the user 1337$! 1338$ WRITE SYS$OUTPUT "Using MultiNet via UCX emulation for TCP/IP" 1339$! 1340$! Done with MULTINET 1341$! 1342$ ENDIF 1343$! 1344$! Check to see if UCX was chosen 1345$! 1346$ IF P5.EQS."UCX" 1347$ THEN 1348$! 1349$! Set the library to use UCX. 1350$! 1351$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS" 1352$! 1353$! Tell the user 1354$! 1355$ WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP" 1356$! 1357$! Done with UCX 1358$! 1359$ ENDIF 1360$! 1361$! Check to see if TCPIP was chosen 1362$! 1363$ IF P5.EQS."TCPIP" 1364$ THEN 1365$! 1366$! Set the library to use TCPIP (post UCX). 1367$! 1368$ TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS" 1369$! 1370$! Tell the user 1371$! 1372$ WRITE SYS$OUTPUT "Using TCPIP (post UCX) for TCP/IP" 1373$! 1374$! Done with TCPIP 1375$! 1376$ ENDIF 1377$! 1378$! Check to see if NONE was chosen 1379$! 1380$ IF P5.EQS."NONE" 1381$ THEN 1382$! 1383$! Do not use a TCPIP library. 1384$! 1385$ TCPIP_LIB = "" 1386$! 1387$! Tell the user 1388$! 1389$ WRITE SYS$OUTPUT "A specific TCPIP library will not be used." 1390$! 1391$! Done with NONE. 1392$! 1393$ ENDIF 1394$! 1395$! Set the TCPIP_TYPE symbol 1396$! 1397$ TCPIP_TYPE = P5 1398$! 1399$! Print info 1400$! 1401$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB 1402$! 1403$! Else The User Entered An Invalid Argument. 1404$! 1405$ ELSE 1406$ IF P5 .NES. "" 1407$ THEN 1408$! 1409$! Tell The User We Don't Know What They Want. 1410$! 1411$ WRITE SYS$OUTPUT "" 1412$ WRITE SYS$OUTPUT "The Option ",P5," Is Invalid. The Valid Options Are:" 1413$ WRITE SYS$OUTPUT "" 1414$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library." 1415$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library." 1416$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP TCP/IP (post UCX) library." 1417$ WRITE SYS$OUTPUT " NONE : To not link with a specific TCP/IP library." 1418$ WRITE SYS$OUTPUT "" 1419$! 1420$! Time To EXIT. 1421$! 1422$ GOTO TIDY 1423$ ELSE 1424$! 1425$! If TCPIP is not defined, then hardcode it to make 1426$! it clear that no TCPIP is desired. 1427$! 1428$ IF P5 .EQS. "" 1429$ THEN 1430$ TCPIP_LIB = "" 1431$ TCPIP_TYPE = "NONE" 1432$ ELSE 1433$! 1434$! Set the TCPIP_TYPE symbol 1435$! 1436$ TCPIP_TYPE = P5 1437$ ENDIF 1438$ ENDIF 1439$! 1440$! Done with TCP/IP libraries 1441$! 1442$ ENDIF 1443$! 1444$! Special Threads For OpenVMS v7.1 Or Later 1445$! 1446$! Written By: Richard Levitte 1447$! richard@levitte.org 1448$! 1449$! 1450$! Check To See If We Have A Option For P6. 1451$! 1452$ IF (P6.EQS."") 1453$ THEN 1454$! 1455$! Get The Version Of VMS We Are Using. 1456$! 1457$ ISSEVEN := 1458$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,VMS_VERSION)) 1459$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP)) 1460$! 1461$! Check To See If The VMS Version Is v7.1 Or Later. 1462$! 1463$ IF (TMP.GE.71) 1464$ THEN 1465$! 1466$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads. 1467$! 1468$ ISSEVEN := ,PTHREAD_USE_D4 1469$! 1470$! End The VMS Version Check. 1471$! 1472$ ENDIF 1473$! 1474$! End The P6 Check. 1475$! 1476$ ENDIF 1477$! 1478$! 1479$! Check To See If We Have A ZLIB Option. 1480$! 1481$ ZLIB = P7 1482$ IF (ZLIB .NES. "") 1483$ THEN 1484$! 1485$! Check for expected ZLIB files. 1486$! 1487$ err = 0 1488$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY") 1489$ if (f$search( file1) .eqs. "") 1490$ then 1491$ WRITE SYS$OUTPUT "" 1492$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid." 1493$ WRITE SYS$OUTPUT " Can't find header: ''file1'" 1494$ err = 1 1495$ endif 1496$! 1497$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY") 1498$ if (f$search( file2) .eqs. "") 1499$ then 1500$ if (err .eq. 0) 1501$ then 1502$ WRITE SYS$OUTPUT "" 1503$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid." 1504$ endif 1505$ WRITE SYS$OUTPUT " Can't find library: ''file2'" 1506$ WRITE SYS$OUTPUT "" 1507$ err = err+ 2 1508$ endif 1509$ if (err .eq. 1) 1510$ then 1511$ WRITE SYS$OUTPUT "" 1512$ endif 1513$! 1514$ if (err .ne. 0) 1515$ then 1516$ GOTO TIDY 1517$ endif 1518$! 1519$! Print info 1520$! 1521$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2 1522$! 1523$! End The ZLIB Check. 1524$! 1525$ ENDIF 1526$! 1527$! Time To RETURN... 1528$! 1529$ RETURN 1530$! 1531$ TIDY: 1532$! 1533$! Close any open files. 1534$! 1535$ if (f$trnlnm( "h_file", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then - 1536 close h_file 1537$! 1538$! Restore the original default device:[directory]. 1539$! 1540$ SET DEFAULT 'DEF_ORIG' 1541$! 1542$ EXIT 1543$! 1544