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