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