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