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