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$! 11$! This procedure creates the SSL libraries of "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" 12$! "[.xxx.EXE.SSL]LIBSSL.OLB" 13$! The "xxx" denotes the machine architecture of AXP or VAX. 14$! 15$! This procedures accepts two command line options listed below. 16$! 17$! Specify one of the following build options for P1. 18$! 19$! ALL Just build "everything". 20$! CONFIG Just build the "[.CRYPTO]OPENSSLCONF.H" file. 21$! BUILDINF Just build the "[.CRYPTO]BUILDINF.H" file. 22$! SOFTLINKS Just fix the Unix soft links. 23$! BUILDALL Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done. 24$! CRYPTO Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library. 25$! CRYPTO/x Just build the x part of the 26$! "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library. 27$! SSL Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library. 28$! SSL_TASK Just build the "[.xxx.EXE.SSL]SSL_TASK.EXE" program. 29$! TEST Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL. 30$! APPS Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL. 31$! 32$! 33$! P2 is ignored (it was used to denote if RSAref should be used or not, 34$! and is simply kept so surrounding scripts don't get confused) 35$! 36$! Speficy DEBUG or NODEBUG as P3 to compile with or without debugging 37$! information. 38$! 39$! Specify which compiler at P4 to try to compile under. 40$! 41$! VAXC For VAX C. 42$! DECC For DEC C. 43$! GNUC For GNU C. 44$! LINK To only link the programs from existing object files. 45$! (not yet implemented) 46$! 47$! If you don't speficy a compiler, it will try to determine which 48$! "C" compiler to use. 49$! 50$! P5, if defined, sets a TCP/IP library to use, through one of the following 51$! keywords: 52$! 53$! UCX for UCX or UCX emulation 54$! TCPIP for TCP/IP Services or TCP/IP Services emulation 55$! (this is prefered over UCX) 56$! SOCKETSHR for SOCKETSHR+NETLIB 57$! NONE to avoid specifying which TCP/IP implementation to 58$! use at build time (this works with DEC C). This is 59$! the default. 60$! 61$! P6, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up) 62$! 63$! 64$! Check if we're in a batch job, and make sure we get to 65$! the directory this script is in 66$! 67$ IF F$MODE() .EQS. "BATCH" 68$ THEN 69$ COMNAME=F$ENVIRONMENT("PROCEDURE") 70$ COMPATH=F$PARSE("A.;",COMNAME) - "A.;" 71$ SET DEF 'COMPATH' 72$ ENDIF 73$! 74$! Check Which Architecture We Are Using. 75$! 76$ IF (F$GETSYI("CPU").GE.128) 77$ THEN 78$! 79$! The Architecture Is AXP. 80$! 81$ ARCH := AXP 82$! 83$! Else... 84$! 85$ ELSE 86$! 87$! The Architecture Is VAX. 88$! 89$ ARCH := VAX 90$! 91$! End The Architecture Check. 92$! 93$ ENDIF 94$! 95$! Check To Make Sure We Have Valid Command Line Parameters. 96$! 97$ GOSUB CHECK_OPTIONS 98$! 99$! Check To See What We Are To Do. 100$! 101$ IF (BUILDCOMMAND.EQS."ALL") 102$ THEN 103$! 104$! Start with building the OpenSSL configuration file. 105$! 106$ GOSUB CONFIG 107$! 108$! Create The "BUILDINF.H" Include File. 109$! 110$ GOSUB BUILDINF 111$! 112$! Fix The Unix Softlinks. 113$! 114$ GOSUB SOFTLINKS 115$! 116$ ENDIF 117$! 118$ IF (BUILDCOMMAND.EQS."ALL".OR.BUILDCOMMAND.EQS."BUILDALL") 119$ THEN 120$! 121$! Build The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library. 122$! 123$ GOSUB CRYPTO 124$! 125$! Build The [.xxx.EXE.SSL]LIBSSL.OLB Library. 126$! 127$ GOSUB SSL 128$! 129$! Build The [.xxx.EXE.SSL]SSL_TASK.EXE DECNet SSL Engine. 130$! 131$ GOSUB SSL_TASK 132$! 133$! Build The [.xxx.EXE.TEST] OpenSSL Test Utilities. 134$! 135$ GOSUB TEST 136$! 137$! Build The [.xxx.EXE.APPS] OpenSSL Application Utilities. 138$! 139$ GOSUB APPS 140$! 141$! Else... 142$! 143$ ELSE 144$! 145$! Build Just What The User Wants Us To Build. 146$! 147$ GOSUB 'BUILDCOMMAND' 148$! 149$ ENDIF 150$! 151$! Time To EXIT. 152$! 153$ EXIT 154$! 155$! Rebuild The "[.CRYPTO]OPENSSLCONF.H" file. 156$! 157$ CONFIG: 158$! 159$! Tell The User We Are Creating The [.CRYPTO]OPENSSLCONF.H File. 160$! 161$ WRITE SYS$OUTPUT "Creating [.CRYPTO]OPENSSLCONF.H Include File." 162$! 163$! Create The [.CRYPTO]OPENSSLCONF.H File. 164$! 165$ OPEN/WRITE H_FILE SYS$DISK:[.CRYPTO]OPENSSLCONF.H 166$! 167$! Write The [.CRYPTO]OPENSSLCONF.H File. 168$! 169$ WRITE H_FILE "/* This file was automatically built using makevms.com */" 170$ WRITE H_FILE "/* and [.CRYPTO]OPENSSLCONF.H_IN */" 171$ 172$! 173$! Write a few macros that indicate how this system was built. 174$! 175$ WRITE H_FILE "" 176$ WRITE H_FILE "#ifndef OPENSSL_SYS_VMS" 177$ WRITE H_FILE "# define OPENSSL_SYS_VMS" 178$ WRITE H_FILE "#endif" 179$ CONFIG_LOGICALS := NO_ASM,NO_RSA,NO_DSA,NO_DH,NO_MD2,NO_MD5,NO_RIPEMD,- 180 NO_SHA,NO_SHA0,NO_SHA1,NO_DES/NO_MDC2;NO_MDC2,NO_RC2,NO_RC4,NO_RC5,- 181 NO_IDEA,NO_BF,NO_CAST,NO_HMAC,NO_SSL2,FIPS 182$ CONFIG_LOG_I = 0 183$ CONFIG_LOG_LOOP: 184$ CONFIG_LOG_E1 = F$ELEMENT(CONFIG_LOG_I,",",CONFIG_LOGICALS) 185$ CONFIG_LOG_I = CONFIG_LOG_I + 1 186$ IF CONFIG_LOG_E1 .EQS. "" THEN GOTO CONFIG_LOG_LOOP 187$ IF CONFIG_LOG_E1 .EQS. "," THEN GOTO CONFIG_LOG_LOOP_END 188$ CONFIG_LOG_E2 = F$EDIT(CONFIG_LOG_E1,"TRIM") 189$ CONFIG_LOG_E1 = F$ELEMENT(0,";",CONFIG_LOG_E2) 190$ CONFIG_LOG_E2 = F$ELEMENT(1,";",CONFIG_LOG_E2) 191$ CONFIG_LOG_E0 = F$ELEMENT(0,"/",CONFIG_LOG_E1) 192$ CONFIG_LOG_E1 = F$ELEMENT(1,"/",CONFIG_LOG_E1) 193$ IF F$TRNLNM("OPENSSL_"+CONFIG_LOG_E0) 194$ THEN 195$ WRITE H_FILE "#ifndef OPENSSL_",CONFIG_LOG_E0 196$ WRITE H_FILE "# define OPENSSL_",CONFIG_LOG_E0 197$ WRITE H_FILE "#endif" 198$ IF CONFIG_LOG_E1 .NES. "/" 199$ THEN 200$ WRITE H_FILE "#ifndef OPENSSL_",CONFIG_LOG_E1 201$ WRITE H_FILE "# define OPENSSL_",CONFIG_LOG_E1 202$ WRITE H_FILE "#endif" 203$ ENDIF 204$ ELSE 205$ IF CONFIG_LOG_E2 .NES. ";" 206$ THEN 207$ IF F$TRNLNM("OPENSSL_"+CONFIG_LOG_E2) 208$ THEN 209$ WRITE H_FILE "#ifndef OPENSSL_",CONFIG_LOG_E2 210$ WRITE H_FILE "# define OPENSSL_",CONFIG_LOG_E2 211$ WRITE H_FILE "#endif" 212$ ENDIF 213$ ENDIF 214$ ENDIF 215$ GOTO CONFIG_LOG_LOOP 216$ CONFIG_LOG_LOOP_END: 217$ WRITE H_FILE "#ifndef OPENSSL_THREADS" 218$ WRITE H_FILE "# define OPENSSL_THREADS" 219$ WRITE H_FILE "#endif" 220$ WRITE H_FILE "#ifndef OPENSSL_NO_KRB5" 221$ WRITE H_FILE "# define OPENSSL_NO_KRB5" 222$ WRITE H_FILE "#endif" 223$ WRITE H_FILE "" 224$! 225$! Different tar version may have named the file differently 226$ IF F$SEARCH("[.CRYPTO]OPENSSLCONF.H_IN") .NES. "" 227$ THEN 228$ TYPE [.CRYPTO]OPENSSLCONF.H_IN /OUTPUT=H_FILE: 229$ ELSE 230$ IF F$SEARCH("[.CRYPTO]OPENSSLCONF_H.IN") .NES. "" 231$ THEN 232$ TYPE [.CRYPTO]OPENSSLCONF_H.IN /OUTPUT=H_FILE: 233$ ELSE 234$ ! For ODS-5 235$ IF F$SEARCH("[.CRYPTO]OPENSSLCONF.H.IN") .NES. "" 236$ THEN 237$ TYPE [.CRYPTO]OPENSSLCONF.H.IN /OUTPUT=H_FILE: 238$ ELSE 239$ WRITE SYS$ERROR "Couldn't find a [.CRYPTO]OPENSSLCONF.H_IN. Exiting!" 240$ EXIT 0 241$ ENDIF 242$ ENDIF 243$ ENDIF 244$ IF ARCH .EQS. "AXP" 245$ THEN 246$! 247$! Write the Alpha specific data 248$! 249$ WRITE H_FILE "#if defined(HEADER_RC4_H)" 250$ WRITE H_FILE "#undef RC4_INT" 251$ WRITE H_FILE "#define RC4_INT unsigned int" 252$ WRITE H_FILE "#undef RC4_CHUNK" 253$ WRITE H_FILE "#define RC4_CHUNK unsigned long long" 254$ WRITE H_FILE "#endif" 255$! 256$ WRITE H_FILE "#if defined(HEADER_DES_LOCL_H)" 257$ WRITE H_FILE "#undef DES_LONG" 258$ WRITE H_FILE "#define DES_LONG unsigned int" 259$ WRITE H_FILE "#undef DES_PTR" 260$ WRITE H_FILE "#define DES_PTR" 261$ WRITE H_FILE "#undef DES_RISC1" 262$ WRITE H_FILE "#undef DES_RISC2" 263$ WRITE H_FILE "#define DES_RISC1" 264$ WRITE H_FILE "#undef DES_UNROLL" 265$ WRITE H_FILE "#define DES_UNROLL" 266$ WRITE H_FILE "#endif" 267$! 268$ WRITE H_FILE "#if defined(HEADER_BN_H)" 269$ WRITE H_FILE "#undef SIXTY_FOUR_BIT_LONG" 270$ WRITE H_FILE "#undef SIXTY_FOUR_BIT" 271$ WRITE H_FILE "#define SIXTY_FOUR_BIT" 272$ WRITE H_FILE "#undef THIRTY_TWO_BIT" 273$ WRITE H_FILE "#undef SIXTEEN_BIT" 274$ WRITE H_FILE "#undef EIGHT_BIT" 275$ WRITE H_FILE "#endif" 276$ 277$ WRITE H_FILE "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION" 278$! 279$! Else... 280$! 281$ ELSE 282$! 283$! Write the VAX specific data 284$! 285$ WRITE H_FILE "#if defined(HEADER_RC4_H)" 286$ WRITE H_FILE "#undef RC4_INT" 287$ WRITE H_FILE "#define RC4_INT unsigned char" 288$ WRITE H_FILE "#undef RC4_CHUNK" 289$ WRITE H_FILE "#define RC4_CHUNK unsigned long" 290$ WRITE H_FILE "#endif" 291$! 292$ WRITE H_FILE "#if defined(HEADER_DES_LOCL_H)" 293$ WRITE H_FILE "#undef DES_LONG" 294$ WRITE H_FILE "#define DES_LONG unsigned long" 295$ WRITE H_FILE "#undef DES_PTR" 296$ WRITE H_FILE "#define DES_PTR" 297$ WRITE H_FILE "#undef DES_RISC1" 298$ WRITE H_FILE "#undef DES_RISC2" 299$ WRITE H_FILE "#undef DES_UNROLL" 300$ WRITE H_FILE "#endif" 301$! 302$ WRITE H_FILE "#if defined(HEADER_BN_H)" 303$ WRITE H_FILE "#undef SIXTY_FOUR_BIT_LONG" 304$ WRITE H_FILE "#undef SIXTY_FOUR_BIT" 305$ WRITE H_FILE "#undef THIRTY_TWO_BIT" 306$ WRITE H_FILE "#define THIRTY_TWO_BIT" 307$ WRITE H_FILE "#undef SIXTEEN_BIT" 308$ WRITE H_FILE "#undef EIGHT_BIT" 309$ WRITE H_FILE "#endif" 310$ 311$ WRITE H_FILE "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION" 312$ WRITE H_FILE "#define OPENSSL_EXPORT_VAR_AS_FUNCTION" 313$! 314$! End 315$! 316$ ENDIF 317$! 318$! Close the [.CRYPTO]OPENSSLCONF.H file 319$! 320$ CLOSE H_FILE 321$! 322$! That's All, Time To RETURN. 323$! 324$ RETURN 325$! 326$! Rebuild The "[.CRYPTO]BUILDINF.H" file. 327$! 328$ BUILDINF: 329$! 330$! Tell The User We Are Creating The [.CRYPTO]BUILDINF.H File. 331$! 332$ WRITE SYS$OUTPUT "Creating [.CRYPTO]BUILDINF.H Include File." 333$! 334$! Create The [.CRYPTO]BUILDINF.H File. 335$! 336$ OPEN/WRITE H_FILE SYS$DISK:[.CRYPTO]BUILDINF.H 337$! 338$! Get The Current Date & Time. 339$! 340$ TIME = F$TIME() 341$! 342$! Write The [.CRYPTO]BUILDINF.H File. 343$! 344$ WRITE H_FILE "#define CFLAGS """" /* Not filled in for now */" 345$ WRITE H_FILE "#define PLATFORM ""VMS""" 346$ WRITE H_FILE "#define DATE ""''TIME'"" " 347$! 348$! Close The [.CRYPTO]BUILDINF.H File. 349$! 350$ CLOSE H_FILE 351$! 352$! That's All, Time To RETURN. 353$! 354$ RETURN 355$! 356$! Copy a lot of files around. 357$! 358$ SOFTLINKS: 359$! 360$! Tell The User We Are Partly Rebuilding The [.APPS] Directory. 361$! 362$ WRITE SYS$OUTPUT "Rebuilding The '[.APPS]MD4.C', '[.APPS]MD5.C' And '[.APPS]RMD160.C' Files." 363$! 364$ DELETE SYS$DISK:[.APPS]MD4.C;*,MD5.C;*,RMD160.C;* 365$! 366$! Copy MD4.C from [.CRYPTO.MD4] into [.APPS] 367$! 368$ COPY SYS$DISK:[.CRYPTO.MD4]MD4.C SYS$DISK:[.APPS] 369$! 370$! Copy MD5.C from [.CRYPTO.MD5] into [.APPS] 371$! 372$ COPY SYS$DISK:[.CRYPTO.MD5]MD5.C SYS$DISK:[.APPS] 373$! 374$! Copy RMD160.C from [.CRYPTO.RIPEMD] into [.APPS] 375$! 376$ COPY SYS$DISK:[.CRYPTO.RIPEMD]RMD160.C SYS$DISK:[.APPS] 377$! 378$! Tell The User We Are Partly Rebuilding The [.TEST] Directory. 379$! 380$ WRITE SYS$OUTPUT "Rebuilding The '[.TEST]*.C' Files." 381$! 382$! First, We Have To "Rebuild" The "[.TEST]" Directory, So Delete 383$! All The "C" Files That Are Currently There Now. 384$! 385$ DELETE SYS$DISK:[.TEST]*.C;* 386$ DELETE SYS$DISK:[.TEST]EVPTESTS.TXT;* 387$! 388$! Copy all the *TEST.C files from [.CRYPTO...] into [.TEST] 389$! 390$ COPY SYS$DISK:[.CRYPTO.*]%*TEST.C SYS$DISK:[.TEST] 391$ COPY SYS$DISK:[.CRYPTO.EVP]EVPTESTS.TXT SYS$DISK:[.TEST] 392$! 393$! Copy all the *TEST.C files from [.SSL...] into [.TEST] 394$! 395$ COPY SYS$DISK:[.SSL]%*TEST.C SYS$DISK:[.TEST] 396$! 397$! Tell The User We Are Rebuilding The [.INCLUDE.OPENSSL] Directory. 398$! 399$ WRITE SYS$OUTPUT "Rebuilding The '[.INCLUDE.OPENSSL]' Directory." 400$! 401$! First, make sure the directory exists 402$! 403$ IF F$PARSE("SYS$DISK:[.INCLUDE.OPENSSL]") .EQS. "" THEN - 404 CREATE/DIRECTORY SYS$DISK:[.INCLUDE.OPENSSL] 405$! 406$! Copy All The ".H" Files From The Main Directory. 407$! 408$ EXHEADER := e_os2.h 409$ COPY 'EXHEADER' SYS$DISK:[.INCLUDE.OPENSSL] 410$! 411$! Copy All The ".H" Files From The [.CRYPTO] Directory Tree. 412$! 413$ SDIRS := ,MD2,MD4,MD5,SHA,MDC2,HMAC,RIPEMD,- 414 DES,RC2,RC4,RC5,IDEA,BF,CAST,- 415 BN,EC,RSA,DSA,DH,DSO,ENGINE,AES,- 416 BUFFER,BIO,STACK,LHASH,RAND,ERR,OBJECTS,- 417 EVP,ASN1,PEM,X509,X509V3,CONF,TXT_DB,PKCS7,PKCS12,COMP,OCSP,UI,KRB5 418$ EXHEADER_ := crypto.h,tmdiff.h,opensslv.h,opensslconf.h,ebcdic.h,symhacks.h,- 419 ossl_typ.h 420$ EXHEADER_MD2 := md2.h 421$ EXHEADER_MD4 := md4.h 422$ EXHEADER_MD5 := md5.h 423$ EXHEADER_SHA := sha.h 424$ EXHEADER_MDC2 := mdc2.h 425$ EXHEADER_HMAC := hmac.h 426$ EXHEADER_RIPEMD := ripemd.h 427$ EXHEADER_DES := des.h,des_old.h 428$ EXHEADER_RC2 := rc2.h 429$ EXHEADER_RC4 := rc4.h 430$ EXHEADER_RC5 := rc5.h 431$ EXHEADER_IDEA := idea.h 432$ EXHEADER_BF := blowfish.h 433$ EXHEADER_CAST := cast.h 434$ EXHEADER_BN := bn.h 435$ EXHEADER_EC := ec.h 436$ EXHEADER_RSA := rsa.h 437$ EXHEADER_DSA := dsa.h 438$ EXHEADER_DH := dh.h 439$ EXHEADER_DSO := dso.h 440$ EXHEADER_ENGINE := engine.h 441$ EXHEADER_AES := aes.h 442$ EXHEADER_BUFFER := buffer.h 443$ EXHEADER_BIO := bio.h 444$ EXHEADER_STACK := stack.h,safestack.h 445$ EXHEADER_LHASH := lhash.h 446$ EXHEADER_RAND := rand.h 447$ EXHEADER_ERR := err.h 448$ EXHEADER_OBJECTS := objects.h,obj_mac.h 449$ EXHEADER_EVP := evp.h 450$ EXHEADER_ASN1 := asn1.h,asn1_mac.h,asn1t.h 451$ EXHEADER_PEM := pem.h,pem2.h 452$ EXHEADER_X509 := x509.h,x509_vfy.h 453$ EXHEADER_X509V3 := x509v3.h 454$ EXHEADER_CONF := conf.h,conf_api.h 455$ EXHEADER_TXT_DB := txt_db.h 456$ EXHEADER_PKCS7 := pkcs7.h 457$ EXHEADER_PKCS12 := pkcs12.h 458$ EXHEADER_COMP := comp.h 459$ EXHEADER_OCSP := ocsp.h 460$ EXHEADER_UI := ui.h,ui_compat.h 461$ EXHEADER_KRB5 := krb5_asn.h 462$ 463$ I = 0 464$ LOOP_SDIRS: 465$ D = F$EDIT(F$ELEMENT(I, ",", SDIRS),"TRIM") 466$ I = I + 1 467$ IF D .EQS. "," THEN GOTO LOOP_SDIRS_END 468$ tmp = EXHEADER_'D' 469$ IF D .EQS. "" 470$ THEN 471$ COPY [.CRYPTO]'tmp' SYS$DISK:[.INCLUDE.OPENSSL] !/LOG 472$ ELSE 473$ COPY [.CRYPTO.'D']'tmp' SYS$DISK:[.INCLUDE.OPENSSL] !/LOG 474$ ENDIF 475$ GOTO LOOP_SDIRS 476$ LOOP_SDIRS_END: 477$! 478$! Copy All The ".H" Files From The [.SSL] Directory. 479$! 480$ EXHEADER := ssl.h,ssl2.h,ssl3.h,ssl23.h,tls1.h,kssl.h 481$ COPY SYS$DISK:[.SSL]'EXHEADER' SYS$DISK:[.INCLUDE.OPENSSL] 482$! 483$! Copy All The ".H" Files From The [.FIPS] Directories. 484$! 485$ FDIRS := ,SHA1,RAND,DES,AES,DSA,RSA 486$ EXHEADER_ := fips.h 487$ EXHEADER_SHA1 := 488$ EXHEADER_RAND := fips_rand.h 489$ EXHEADER_DES := 490$ EXHEADER_AES := 491$ EXHEADER_DSA := 492$ EXHEADER_RSA := 493$ 494$ I = 0 495$ LOOP_FDIRS: 496$ D = F$EDIT(F$ELEMENT(I, ",", FDIRS),"TRIM") 497$ I = I + 1 498$ IF D .EQS. "," THEN GOTO LOOP_FDIRS_END 499$ tmp = EXHEADER_'D' 500$ IF tmp .EQS. "" THEN GOTO LOOP_FDIRS 501$ IF D .EQS. "" 502$ THEN 503$ COPY [.FIPS]'tmp' SYS$DISK:[.INCLUDE.OPENSSL] !/LOG 504$ ELSE 505$ COPY [.FIPS.'D']'tmp' SYS$DISK:[.INCLUDE.OPENSSL] !/LOG 506$ ENDIF 507$ GOTO LOOP_FDIRS 508$ LOOP_FDIRS_END: 509$! 510$! Purge all doubles 511$! 512$ PURGE SYS$DISK:[.INCLUDE.OPENSSL]*.H 513$! 514$! That's All, Time To RETURN. 515$! 516$ RETURN 517$! 518$! Build The "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" Library. 519$! 520$ CRYPTO: 521$! 522$! Tell The User What We Are Doing. 523$! 524$ WRITE SYS$OUTPUT "" 525$ WRITE SYS$OUTPUT "Building The [.",ARCH,".EXE.CRYPTO]LIBCRYPTO.OLB Library." 526$! 527$! Go To The [.CRYPTO] Directory. 528$! 529$ SET DEFAULT SYS$DISK:[.CRYPTO] 530$! 531$! Build The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library. 532$! 533$ @CRYPTO-LIB LIBRARY 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" "''ISSEVEN'" "''BUILDPART'" 534$! 535$! Go Back To The Main Directory. 536$! 537$ SET DEFAULT [-] 538$! 539$! Go To The [.FIPS] Directory. 540$! 541$ SET DEFAULT SYS$DISK:[.FIPS] 542$! 543$! Build The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library. 544$! 545$ @FIPS-LIB LIBRARY 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" "''ISSEVEN'" "''BUILDPART'" 546$! 547$! Build The [.xxx.EXE.CRYPTO]*.EXE Test Applications. 548$! 549$ @FIPS-LIB APPS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN' 550$! 551$! Go Back To The Main Directory. 552$! 553$ SET DEFAULT [-] 554$! 555$! Time To RETURN. 556$! 557$ RETURN 558$! 559$! Build The "[.xxx.EXE.SSL]LIBSSL.OLB" Library. 560$! 561$ SSL: 562$! 563$! Tell The User What We Are Doing. 564$! 565$ WRITE SYS$OUTPUT "" 566$ WRITE SYS$OUTPUT "Building The [.",ARCH,".EXE.SSL]LIBSSL.OLB Library." 567$! 568$! Go To The [.SSL] Directory. 569$! 570$ SET DEFAULT SYS$DISK:[.SSL] 571$! 572$! Build The [.xxx.EXE.SSL]LIBSSL.OLB Library. 573$! 574$ @SSL-LIB LIBRARY 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN' 575$! 576$! Go Back To The Main Directory. 577$! 578$ SET DEFAULT [-] 579$! 580$! Time To Return. 581$! 582$ RETURN 583$! 584$! Build The "[.xxx.EXE.SSL]SSL_TASK.EXE" Program. 585$! 586$ SSL_TASK: 587$! 588$! Tell The User What We Are Doing. 589$! 590$ WRITE SYS$OUTPUT "" 591$ WRITE SYS$OUTPUT "Building DECNet Based SSL Engine, [.",ARCH,".EXE.SSL]SSL_TASK.EXE" 592$! 593$! Go To The [.SSL] Directory. 594$! 595$ SET DEFAULT SYS$DISK:[.SSL] 596$! 597$! Build The [.xxx.EXE.SSL]SSL_TASK.EXE 598$! 599$ @SSL-LIB SSL_TASK 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN' 600$! 601$! Go Back To The Main Directory. 602$! 603$ SET DEFAULT [-] 604$! 605$! That's All, Time To RETURN. 606$! 607$ RETURN 608$! 609$! Build The OpenSSL Test Programs. 610$! 611$ TEST: 612$! 613$! Tell The User What We Are Doing. 614$! 615$ WRITE SYS$OUTPUT "" 616$ WRITE SYS$OUTPUT "Building The OpenSSL [.",ARCH,".EXE.TEST] Test Utilities." 617$! 618$! Go To The [.TEST] Directory. 619$! 620$ SET DEFAULT SYS$DISK:[.TEST] 621$! 622$! Build The Test Programs. 623$! 624$ @MAKETESTS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN' 625$! 626$! Go Back To The Main Directory. 627$! 628$ SET DEFAULT [-] 629$! 630$! That's All, Time To RETURN. 631$! 632$ RETURN 633$! 634$! Build The OpenSSL Application Programs. 635$! 636$ APPS: 637$! 638$! Tell The User What We Are Doing. 639$! 640$ WRITE SYS$OUTPUT "" 641$ WRITE SYS$OUTPUT "Building OpenSSL [.",ARCH,".EXE.APPS] Applications." 642$! 643$! Go To The [.APPS] Directory. 644$! 645$ SET DEFAULT SYS$DISK:[.APPS] 646$! 647$! Build The Application Programs. 648$! 649$ @MAKEAPPS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN' 650$! 651$! Go Back To The Main Directory. 652$! 653$ SET DEFAULT [-] 654$! 655$! That's All, Time To RETURN. 656$! 657$ RETURN 658$! 659$! Check The User's Options. 660$! 661$ CHECK_OPTIONS: 662$! 663$! Check if there's a "part", and separate it out 664$! 665$ BUILDPART = F$ELEMENT(1,"/",P1) 666$ IF BUILDPART .EQS. "/" 667$ THEN 668$ BUILDPART = "" 669$ ELSE 670$ P1 = F$EXTRACT(0,F$LENGTH(P1) - F$LENGTH(BUILDPART) - 1, P1) 671$ ENDIF 672$! 673$! Check To See If P1 Is Blank. 674$! 675$ IF (P1.EQS."ALL") 676$ THEN 677$! 678$! P1 Is ALL, So Build Everything. 679$! 680$ BUILDCOMMAND = "ALL" 681$! 682$! Else... 683$! 684$ ELSE 685$! 686$! Else, Check To See If P1 Has A Valid Arguement. 687$! 688$ IF (P1.EQS."CONFIG").OR.(P1.EQS."BUILDINF").OR.(P1.EQS."SOFTLINKS") - 689 .OR.(P1.EQS."BUILDALL") - 690 .OR.(P1.EQS."CRYPTO").OR.(P1.EQS."SSL") - 691 .OR.(P1.EQS."SSL_TASK").OR.(P1.EQS."TEST").OR.(P1.EQS."APPS") 692$ THEN 693$! 694$! A Valid Arguement. 695$! 696$ BUILDCOMMAND = P1 697$! 698$! Else... 699$! 700$ ELSE 701$! 702$! Tell The User We Don't Know What They Want. 703$! 704$ WRITE SYS$OUTPUT "" 705$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:" 706$ WRITE SYS$OUTPUT "" 707$ WRITE SYS$OUTPUT " ALL : Just Build Everything." 708$ WRITE SYS$OUTPUT " CONFIG : Just build the [.CRYPTO]OPENSSLCONF.H file." 709$ WRITE SYS$OUTPUT " BUILDINF : Just build the [.CRYPTO]BUILDINF.H file." 710$ WRITE SYS$OUTPUT " SOFTLINKS: Just Fix The Unix soft links." 711$ WRITE SYS$OUTPUT " BUILDALL : Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done." 712$ WRITE SYS$OUTPUT " CRYPTO : To Build Just The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library." 713$ WRITE SYS$OUTPUT " CRYPTO/x : To Build Just The x Part Of The" 714$ WRITE SYS$OUTPUT " [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library." 715$ WRITE SYS$OUTPUT " SSL : To Build Just The [.xxx.EXE.SSL]LIBSSL.OLB Library." 716$ WRITE SYS$OUTPUT " SSL_TASK : To Build Just The [.xxx.EXE.SSL]SSL_TASK.EXE Program." 717$ WRITE SYS$OUTPUT " TEST : To Build Just The OpenSSL Test Programs." 718$ WRITE SYS$OUTPUT " APPS : To Build Just The OpenSSL Application Programs." 719$ WRITE SYS$OUTPUT "" 720$ WRITE SYS$OUTPUT " Where 'xxx' Stands For:" 721$ WRITE SYS$OUTPUT "" 722$ WRITE SYS$OUTPUT " AXP : Alpha Architecture." 723$ WRITE SYS$OUTPUT " VAX : VAX Architecture." 724$ WRITE SYS$OUTPUT "" 725$! 726$! Time To EXIT. 727$! 728$ EXIT 729$! 730$! End The Valid Argument Check. 731$! 732$ ENDIF 733$! 734$! End The P1 Check. 735$! 736$ ENDIF 737$! 738$! Check To See If P3 Is Blank. 739$! 740$ IF (P3.EQS."NODEBUG") 741$ THEN 742$! 743$! P3 Is NODEBUG, So Compile Without Debugger Information. 744$! 745$ DEBUGGER = "NODEBUG" 746$! 747$! Else... 748$! 749$ ELSE 750$! 751$! Check To See If We Are To Compile With Debugger Information. 752$! 753$ IF (P3.EQS."DEBUG") 754$ THEN 755$! 756$! Compile With Debugger Information. 757$! 758$ DEBUGGER = "DEBUG" 759$! 760$! Else... 761$! 762$ ELSE 763$! 764$! Tell The User Entered An Invalid Option.. 765$! 766$ WRITE SYS$OUTPUT "" 767$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:" 768$ WRITE SYS$OUTPUT "" 769$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information." 770$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information." 771$ WRITE SYS$OUTPUT "" 772$! 773$! Time To EXIT. 774$! 775$ EXIT 776$! 777$! End The Valid Arguement Check. 778$! 779$ ENDIF 780$! 781$! End The P3 Check. 782$! 783$ ENDIF 784$! 785$! Check To See If P4 Is Blank. 786$! 787$ IF (P4.EQS."") 788$ THEN 789$! 790$! O.K., The User Didn't Specify A Compiler, Let's Try To 791$! Find Out Which One To Use. 792$! 793$! Check To See If We Have GNU C. 794$! 795$ IF (F$TRNLNM("GNU_CC").NES."") 796$ THEN 797$! 798$! Looks Like GNUC, Set To Use GNUC. 799$! 800$ COMPILER = "GNUC" 801$! 802$! Tell The User We Are Using GNUC. 803$! 804$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler." 805$! 806$! End The GNU C Compiler Check. 807$! 808$ ENDIF 809$! 810$! Check To See If We Have VAXC Or DECC. 811$! 812$ IF (F$GETSYI("CPU").GE.128).OR.(F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC") 813$ THEN 814$! 815$! Looks Like DECC, Set To Use DECC. 816$! 817$ COMPILER = "DECC" 818$! 819$! Tell The User We Are Using DECC. 820$! 821$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler." 822$! 823$! Else... 824$! 825$ ELSE 826$! 827$! Looks Like VAXC, Set To Use VAXC. 828$! 829$ COMPILER = "VAXC" 830$! 831$! Tell The User We Are Using VAX C. 832$! 833$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler." 834$! 835$! End The DECC & VAXC Compiler Check. 836$! 837$ ENDIF 838$! 839$! Else... 840$! 841$ ELSE 842$! 843$! Check To See If The User Entered A Valid Paramter. 844$! 845$ IF (P4.EQS."VAXC").OR.(P4.EQS."DECC").OR.(P4.EQS."GNUC")!.OR.(P4.EQS."LINK") 846$ THEN 847$! 848$! Check To See If The User Wanted To Just LINK. 849$! 850$ IF (P4.EQS."LINK") 851$ THEN 852$! 853$! Looks Like LINK-only 854$! 855$ COMPILER = "LINK" 856$! 857$! Tell The User We Are Only Linking. 858$! 859$ WRITE SYS$OUTPUT "LINK Only. This actually NOT YET SUPPORTED!" 860$! 861$! End LINK Check. 862$! 863$ ENDIF 864$! 865$! Check To See If The User Wanted DECC. 866$! 867$ IF (P4.EQS."DECC") 868$ THEN 869$! 870$! Looks Like DECC, Set To Use DECC. 871$! 872$ COMPILER = "DECC" 873$! 874$! Tell The User We Are Using DECC. 875$! 876$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler." 877$! 878$! End DECC Check. 879$! 880$ ENDIF 881$! 882$! Check To See If We Are To Use VAXC. 883$! 884$ IF (P4.EQS."VAXC") 885$ THEN 886$! 887$! Looks Like VAXC, Set To Use VAXC. 888$! 889$ COMPILER = "VAXC" 890$! 891$! Tell The User We Are Using VAX C. 892$! 893$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler." 894$! 895$! End VAXC Check 896$! 897$ ENDIF 898$! 899$! Check To See If We Are To Use GNU C. 900$! 901$ IF (P4.EQS."GNUC") 902$ THEN 903$! 904$! Looks Like GNUC, Set To Use GNUC. 905$! 906$ COMPILER = "GNUC" 907$! 908$! Tell The User We Are Using GNUC. 909$! 910$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler." 911$! 912$! End The GNU C Check. 913$! 914$ ENDIF 915$! 916$! Else The User Entered An Invalid Arguement. 917$! 918$ ELSE 919$! 920$! Tell The User We Don't Know What They Want. 921$! 922$ WRITE SYS$OUTPUT "" 923$ WRITE SYS$OUTPUT "The Option ",P4," Is Invalid. The Valid Options Are:" 924$ WRITE SYS$OUTPUT "" 925$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C." 926$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C." 927$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C." 928$ WRITE SYS$OUTPUT "" 929$! 930$! Time To EXIT. 931$! 932$ EXIT 933$! 934$! End The Valid Arguement Check. 935$! 936$ ENDIF 937$! 938$! End The P4 Check. 939$! 940$ ENDIF 941$! 942$! Time to check the contents of P5, and to make sure we get the correct library. 943$! 944$ IF P5.EQS."SOCKETSHR" .OR. P5.EQS."MULTINET" .OR. P5.EQS."UCX" - 945 .OR. P5.EQS."TCPIP" .OR. P5.EQS."NONE" 946$ THEN 947$! 948$! Check to see if SOCKETSHR was chosen 949$! 950$ IF P5.EQS."SOCKETSHR" 951$ THEN 952$! 953$! Set the library to use SOCKETSHR 954$! 955$ TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT" 956$! 957$! Tell the user 958$! 959$ WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP" 960$! 961$! Done with SOCKETSHR 962$! 963$ ENDIF 964$! 965$! Check to see if MULTINET was chosen 966$! 967$ IF P5.EQS."MULTINET" 968$ THEN 969$! 970$! Set the library to use UCX emulation. 971$! 972$ P5 = "UCX" 973$! 974$! Tell the user 975$! 976$ WRITE SYS$OUTPUT "Using MultiNet via UCX emulation for TCP/IP" 977$! 978$! Done with MULTINET 979$! 980$ ENDIF 981$! 982$! Check to see if UCX was chosen 983$! 984$ IF P5.EQS."UCX" 985$ THEN 986$! 987$! Set the library to use UCX. 988$! 989$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT" 990$! 991$! Tell the user 992$! 993$ WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP" 994$! 995$! Done with UCX 996$! 997$ ENDIF 998$! 999$! Check to see if TCPIP was chosen 1000$! 1001$ IF P5.EQS."TCPIP" 1002$ THEN 1003$! 1004$! Set the library to use TCPIP (post UCX). 1005$! 1006$ TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT" 1007$! 1008$! Tell the user 1009$! 1010$ WRITE SYS$OUTPUT "Using TCPIP (post UCX) for TCP/IP" 1011$! 1012$! Done with TCPIP 1013$! 1014$ ENDIF 1015$! 1016$! Check to see if NONE was chosen 1017$! 1018$ IF P5.EQS."NONE" 1019$ THEN 1020$! 1021$! Do not use a TCPIP library. 1022$! 1023$ TCPIP_LIB = "" 1024$! 1025$! Tell the user 1026$! 1027$ WRITE SYS$OUTPUT "A specific TCPIP library will not be used." 1028$! 1029$! Done with NONE. 1030$! 1031$ ENDIF 1032$! 1033$! Set the TCPIP_TYPE symbol 1034$! 1035$ TCPIP_TYPE = P5 1036$! 1037$! Print info 1038$! 1039$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB 1040$! 1041$! Else The User Entered An Invalid Arguement. 1042$! 1043$ ELSE 1044$ IF P5 .NES. "" 1045$ THEN 1046$! 1047$! Tell The User We Don't Know What They Want. 1048$! 1049$ WRITE SYS$OUTPUT "" 1050$ WRITE SYS$OUTPUT "The Option ",P5," Is Invalid. The Valid Options Are:" 1051$ WRITE SYS$OUTPUT "" 1052$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library." 1053$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library." 1054$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP TCP/IP (post UCX) library." 1055$ WRITE SYS$OUTPUT " NONE : To not link with a specific TCP/IP library." 1056$ WRITE SYS$OUTPUT "" 1057$! 1058$! Time To EXIT. 1059$! 1060$ EXIT 1061$ ELSE 1062$! 1063$! If TCPIP is not defined, then hardcode it to make 1064$! it clear that no TCPIP is desired. 1065$! 1066$ IF P5 .EQS. "" 1067$ THEN 1068$ TCPIP_LIB = "" 1069$ TCPIP_TYPE = "NONE" 1070$ ELSE 1071$! 1072$! Set the TCPIP_TYPE symbol 1073$! 1074$ TCPIP_TYPE = P5 1075$ ENDIF 1076$ ENDIF 1077$! 1078$! Done with TCP/IP libraries 1079$! 1080$ ENDIF 1081$! 1082$! Special Threads For OpenVMS v7.1 Or Later 1083$! 1084$! Written By: Richard Levitte 1085$! richard@levitte.org 1086$! 1087$! 1088$! Check To See If We Have A Option For P6. 1089$! 1090$ IF (P6.EQS."") 1091$ THEN 1092$! 1093$! Get The Version Of VMS We Are Using. 1094$! 1095$ ISSEVEN := 1096$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION"))) 1097$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP)) 1098$! 1099$! Check To See If The VMS Version Is v7.1 Or Later. 1100$! 1101$ IF (TMP.GE.71) 1102$ THEN 1103$! 1104$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads. 1105$! 1106$ ISSEVEN := ,PTHREAD_USE_D4 1107$! 1108$! End The VMS Version Check. 1109$! 1110$ ENDIF 1111$! 1112$! End The P6 Check. 1113$! 1114$ ENDIF 1115$! 1116$! Time To RETURN... 1117$! 1118$ RETURN 1119