1$! 2$! SSL-LIB.COM 3$! Written By: Robert Byer 4$! Vice-President 5$! A-Com Computing, Inc. 6$! byer@mail.all-net.net 7$! 8$! Changes by Richard Levitte <richard@levitte.org> 9$! 10$! This command file compiles and creates the "[.xxx.EXE.SSL]LIBSSL.OLB" 11$! library for OpenSSL. The "xxx" denotes the machine architecture of AXP 12$! or VAX. 13$! 14$! It is written to detect what type of machine you are compiling on 15$! (i.e. AXP or VAX) and which "C" compiler you have (i.e. VAXC, DECC 16$! or GNU C) or you can specify which compiler to use. 17$! 18$! Specify the following as P1 to build just that part or ALL to just 19$! build everything. 20$! 21$! LIBRARY To just compile the [.xxx.EXE.SSL]LIBSSL.OLB Library. 22$! SSL_TASK To just compile the [.xxx.EXE.SSL]SSL_TASK.EXE 23$! 24$! Specify DEBUG or NODEBUG as P2 to compile with or without debugger 25$! information. 26$! 27$! Specify which compiler at P3 to try to compile under. 28$! 29$! VAXC For VAX C. 30$! DECC For DEC C. 31$! GNUC For GNU C. 32$! 33$! If you don't speficy a compiler, it will try to determine which 34$! "C" compiler to use. 35$! 36$! P4, if defined, sets a TCP/IP library to use, through one of the following 37$! keywords: 38$! 39$! UCX for UCX 40$! TCPIP for TCPIP (post UCX) 41$! SOCKETSHR for SOCKETSHR+NETLIB 42$! 43$! P5, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up) 44$! 45$! 46$! Define A TCP/IP Library That We Will Need To Link To. 47$! (That Is, If We Need To Link To One.) 48$! 49$ TCPIP_LIB = "" 50$! 51$! Check Which Architecture We Are Using. 52$! 53$ IF (F$GETSYI("CPU").GE.128) 54$ THEN 55$! 56$! The Architecture Is AXP. 57$! 58$ ARCH := AXP 59$! 60$! Else... 61$! 62$ ELSE 63$! 64$! The Architecture Is VAX. 65$! 66$ ARCH := VAX 67$! 68$! End The Architecture Check. 69$! 70$ ENDIF 71$! 72$! Check To Make Sure We Have Valid Command Line Parameters. 73$! 74$ GOSUB CHECK_OPTIONS 75$! 76$! Initialise logical names and such 77$! 78$ GOSUB INITIALISE 79$! 80$! Tell The User What Kind of Machine We Run On. 81$! 82$ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine." 83$! 84$! Define The OBJ Directory. 85$! 86$ OBJ_DIR := SYS$DISK:[-.'ARCH'.OBJ.SSL] 87$! 88$! Check To See If The Architecture Specific OBJ Directory Exists. 89$! 90$ IF (F$PARSE(OBJ_DIR).EQS."") 91$ THEN 92$! 93$! It Dosen't Exist, So Create It. 94$! 95$ CREATE/DIR 'OBJ_DIR' 96$! 97$! End The Architecture Specific OBJ Directory Check. 98$! 99$ ENDIF 100$! 101$! Define The EXE Directory. 102$! 103$ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.SSL] 104$! 105$! Check To See If The Architecture Specific Directory Exists. 106$! 107$ IF (F$PARSE(EXE_DIR).EQS."") 108$ THEN 109$! 110$! It Dosen't Exist, So Create It. 111$! 112$ CREATE/DIR 'EXE_DIR' 113$! 114$! End The Architecture Specific Directory Check. 115$! 116$ ENDIF 117$! 118$! Define The Library Name. 119$! 120$ SSL_LIB := 'EXE_DIR'LIBSSL.OLB 121$! 122$! Define The CRYPTO-LIB We Are To Use. 123$! 124$ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB 125$! 126$! Check To See What We Are To Do. 127$! 128$ IF (BUILDALL.EQS."TRUE") 129$ THEN 130$! 131$! Since Nothing Special Was Specified, Do Everything. 132$! 133$ GOSUB LIBRARY 134$ GOSUB SSL_TASK 135$! 136$! Else... 137$! 138$ ELSE 139$! 140$! Build Just What The User Wants Us To Build. 141$! 142$ GOSUB 'BUILDALL' 143$! 144$! End The BUILDALL Check. 145$! 146$ ENDIF 147$! 148$! Time To EXIT. 149$! 150$ EXIT: 151$ GOSUB CLEANUP 152$ EXIT 153$! 154$! Compile The Library. 155$! 156$ LIBRARY: 157$! 158$! Check To See If We Already Have A "[.xxx.EXE.SSL]LIBSSL.OLB" Library... 159$! 160$ IF (F$SEARCH(SSL_LIB).EQS."") 161$ THEN 162$! 163$! Guess Not, Create The Library. 164$! 165$ LIBRARY/CREATE/OBJECT 'SSL_LIB' 166$! 167$! End The Library Exist Check. 168$! 169$ ENDIF 170$! 171$! Define The Different SSL "library" Files. 172$! 173$ LIB_SSL = "s2_meth,s2_srvr,s2_clnt,s2_lib,s2_enc,s2_pkt,"+ - 174 "s3_meth,s3_srvr,s3_clnt,s3_lib,s3_enc,s3_pkt,s3_both,"+ - 175 "s23_meth,s23_srvr,s23_clnt,s23_lib,s23_pkt,"+ - 176 "t1_meth,t1_srvr,t1_clnt,t1_lib,t1_enc,"+ - 177 "ssl_lib,ssl_err2,ssl_cert,ssl_sess,"+ - 178 "ssl_ciph,ssl_stat,ssl_rsa,"+ - 179 "ssl_asn1,ssl_txt,ssl_algs,"+ - 180 "bio_ssl,ssl_err,kssl" 181$! 182$! Tell The User That We Are Compiling The Library. 183$! 184$ WRITE SYS$OUTPUT "Building The ",SSL_LIB," Library." 185$! 186$! Define A File Counter And Set It To "0" 187$! 188$ FILE_COUNTER = 0 189$! 190$! Top Of The File Loop. 191$! 192$ NEXT_FILE: 193$! 194$! O.K, Extract The File Name From The File List. 195$! 196$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",LIB_SSL) 197$! 198$! Check To See If We Are At The End Of The File List. 199$! 200$ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE 201$! 202$! Increment The Counter. 203$! 204$ FILE_COUNTER = FILE_COUNTER + 1 205$! 206$! Create The Source File Name. 207$! 208$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C" 209$! 210$! Create The Object File Name. 211$! 212$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ" 213$ ON WARNING THEN GOTO NEXT_FILE 214$! 215$! Check To See If The File We Want To Compile Is Actually There. 216$! 217$ IF (F$SEARCH(SOURCE_FILE).EQS."") 218$ THEN 219$! 220$! Tell The User That The File Dosen't Exist. 221$! 222$ WRITE SYS$OUTPUT "" 223$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist." 224$ WRITE SYS$OUTPUT "" 225$! 226$! Exit The Build. 227$! 228$ EXIT 229$! 230$! End The File Exists Check. 231$! 232$ ENDIF 233$! 234$! Tell The User What File We Are Compiling. 235$! 236$ WRITE SYS$OUTPUT " ",FILE_NAME,".c" 237$! 238$! Compile The File. 239$! 240$ ON ERROR THEN GOTO NEXT_FILE 241$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE' 242$! 243$! Add It To The Library. 244$! 245$ LIBRARY/REPLACE/OBJECT 'SSL_LIB' 'OBJECT_FILE' 246$! 247$! Time To Clean Up The Object File. 248$! 249$ DELETE 'OBJECT_FILE';* 250$! 251$! Go Back And Get The Next File Name. 252$! 253$ GOTO NEXT_FILE 254$! 255$! All Done With This Library. 256$! 257$ FILE_DONE: 258$! 259$! Tell The User That We Are All Done. 260$! 261$ WRITE SYS$OUTPUT "Library ",SSL_LIB," Compiled." 262$! 263$! Time To RETURN. 264$! 265$ RETURN 266$ SSL_TASK: 267$! 268$! Check To See If We Have The Proper Libraries. 269$! 270$ GOSUB LIB_CHECK 271$! 272$! Check To See If We Have A Linker Option File. 273$! 274$ GOSUB CHECK_OPT_FILE 275$! 276$! Check To See If The File We Want To Compile Is Actually There. 277$! 278$ IF (F$SEARCH("SYS$DISK:[]SSL_TASK.C").EQS."") 279$ THEN 280$! 281$! Tell The User That The File Dosen't Exist. 282$! 283$ WRITE SYS$OUTPUT "" 284$ WRITE SYS$OUTPUT "The File SSL_TASK.C Dosen't Exist." 285$ WRITE SYS$OUTPUT "" 286$! 287$! Exit The Build. 288$! 289$ EXIT 290$! 291$! End The SSL_TASK.C File Check. 292$! 293$ ENDIF 294$! 295$! Tell The User We Are Creating The SSL_TASK. 296$! 297$ WRITE SYS$OUTPUT "Creating SSL_TASK OSU HTTP SSL Engine." 298$! 299$! Compile The File. 300$! 301$ ON ERROR THEN GOTO SSL_TASK_END 302$ CC5/OBJECT='OBJ_DIR'SSL_TASK.OBJ SYS$DISK:[]SSL_TASK.C 303$! 304$! Link The Program. 305$! Check To See If We Are To Link With A Specific TCP/IP Library. 306$! 307$ IF (TCPIP_LIB.NES."") 308$ THEN 309$! 310$! Link With TCP/IP Library. 311$! 312$ LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR'SSL_TASK.EXE - 313 'OBJ_DIR'SSL_TASK.OBJ, - 314 'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, - 315 'TCPIP_LIB','OPT_FILE'/OPTION 316$! 317$! Else... 318$! 319$ ELSE 320$! 321$! Don't Link With TCP/IP Library. 322$! 323$ LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR'SSL_TASK.EXE - 324 'OBJ_DIR'SSL_TASK.OBJ,- 325 'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, - 326 'OPT_FILE'/OPTION 327$! 328$! End The TCP/IP Library Check. 329$! 330$ ENDIF 331$! 332$! Time To Return. 333$! 334$SSL_TASK_END: 335$ RETURN 336$! 337$! Check For The Link Option FIle. 338$! 339$ CHECK_OPT_FILE: 340$! 341$! Check To See If We Need To Make A VAX C Option File. 342$! 343$ IF (COMPILER.EQS."VAXC") 344$ THEN 345$! 346$! Check To See If We Already Have A VAX C Linker Option File. 347$! 348$ IF (F$SEARCH(OPT_FILE).EQS."") 349$ THEN 350$! 351$! We Need A VAX C Linker Option File. 352$! 353$ CREATE 'OPT_FILE' 354$DECK 355! 356! Default System Options File To Link Agianst 357! The Sharable VAX C Runtime Library. 358! 359SYS$SHARE:VAXCRTL.EXE/SHARE 360$EOD 361$! 362$! End The Option File Check. 363$! 364$ ENDIF 365$! 366$! End The VAXC Check. 367$! 368$ ENDIF 369$! 370$! Check To See If We Need A GNU C Option File. 371$! 372$ IF (COMPILER.EQS."GNUC") 373$ THEN 374$! 375$! Check To See If We Already Have A GNU C Linker Option File. 376$! 377$ IF (F$SEARCH(OPT_FILE).EQS."") 378$ THEN 379$! 380$! We Need A GNU C Linker Option File. 381$! 382$ CREATE 'OPT_FILE' 383$DECK 384! 385! Default System Options File To Link Agianst 386! The Sharable C Runtime Library. 387! 388GNU_CC:[000000]GCCLIB/LIBRARY 389SYS$SHARE:VAXCRTL/SHARE 390$EOD 391$! 392$! End The Option File Check. 393$! 394$ ENDIF 395$! 396$! End The GNU C Check. 397$! 398$ ENDIF 399$! 400$! Check To See If We Need A DEC C Option File. 401$! 402$ IF (COMPILER.EQS."DECC") 403$ THEN 404$! 405$! Check To See If We Already Have A DEC C Linker Option File. 406$! 407$ IF (F$SEARCH(OPT_FILE).EQS."") 408$ THEN 409$! 410$! Figure Out If We Need An AXP Or A VAX Linker Option File. 411$! 412$ IF (ARCH.EQS."VAX") 413$ THEN 414$! 415$! We Need A DEC C Linker Option File For VAX. 416$! 417$ CREATE 'OPT_FILE' 418$DECK 419! 420! Default System Options File To Link Agianst 421! The Sharable DEC C Runtime Library. 422! 423SYS$SHARE:DECC$SHR.EXE/SHARE 424$EOD 425$! 426$! Else... 427$! 428$ ELSE 429$! 430$! Create The AXP Linker Option File. 431$! 432$ CREATE 'OPT_FILE' 433$DECK 434! 435! Default System Options File For AXP To Link Agianst 436! The Sharable C Runtime Library. 437! 438SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE 439SYS$SHARE:CMA$OPEN_RTL/SHARE 440$EOD 441$! 442$! End The VAX/AXP DEC C Option File Check. 443$! 444$ ENDIF 445$! 446$! End The Option File Search. 447$! 448$ ENDIF 449$! 450$! End The DEC C Check. 451$! 452$ ENDIF 453$! 454$! Tell The User What Linker Option File We Are Using. 455$! 456$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"." 457$! 458$! Time To RETURN. 459$! 460$ RETURN 461$ LIB_CHECK: 462$! 463$! Look For The VAX Library LIBSSL.OLB. 464$! 465$ IF (F$SEARCH(SSL_LIB).EQS."") 466$ THEN 467$! 468$! Tell The User We Can't Find The LIBSSL.OLB Library. 469$! 470$ WRITE SYS$OUTPUT "" 471$ WRITE SYS$OUTPUT "Can't Find The Library ",SSL_LIB,"." 472$ WRITE SYS$OUTPUT "We Can't Link Without It." 473$ WRITE SYS$OUTPUT "" 474$! 475$! Since We Can't Link Without It, Exit. 476$! 477$ EXIT 478$! 479$! End The LIBSSL.OLB Library Check. 480$! 481$ ENDIF 482$! 483$! Look For The Library LIBCRYPTO.OLB. 484$! 485$ IF (F$SEARCH(CRYPTO_LIB).EQS."") 486$ THEN 487$! 488$! Tell The User We Can't Find The LIBCRYPTO.OLB Library. 489$! 490$ WRITE SYS$OUTPUT "" 491$ WRITE SYS$OUTPUT "Can't Find The Library ",CRYPTO_LIB,"." 492$ WRITE SYS$OUTPUT "We Can't Link Without It." 493$ WRITE SYS$OUTPUT "" 494$! 495$! Since We Can't Link Without It, Exit. 496$! 497$ EXIT 498$! 499$! End The LIBCRYPTO.OLB Library Check. 500$! 501$ ENDIF 502$! 503$! Time To Return. 504$! 505$ RETURN 506$! 507$! Check The User's Options. 508$! 509$ CHECK_OPTIONS: 510$! 511$! Check To See If P1 Is Blank. 512$! 513$ IF (P1.EQS."ALL") 514$ THEN 515$! 516$! P1 Is Blank, So Build Everything. 517$! 518$ BUILDALL = "TRUE" 519$! 520$! Else... 521$! 522$ ELSE 523$! 524$! Else, Check To See If P1 Has A Valid Arguement. 525$! 526$ IF (P1.EQS."LIBRARY").OR.(P1.EQS."SSL_TASK") 527$ THEN 528$! 529$! A Valid Arguement. 530$! 531$ BUILDALL = P1 532$! 533$! Else... 534$! 535$ ELSE 536$! 537$! Tell The User We Don't Know What They Want. 538$! 539$ WRITE SYS$OUTPUT "" 540$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:" 541$ WRITE SYS$OUTPUT "" 542$ WRITE SYS$OUTPUT " ALL : Just Build Everything." 543$ WRITE SYS$OUTPUT " LIBRARY : To Compile Just The [.xxx.EXE.SSL]LIBSSL.OLB Library." 544$ WRITE SYS$OUTPUT " SSL_TASK : To Compile Just The [.xxx.EXE.SSL]SSL_TASK.EXE Program." 545$ WRITE SYS$OUTPUT "" 546$ WRITE SYS$OUTPUT " Where 'xxx' Stands For:" 547$ WRITE SYS$OUTPUT "" 548$ WRITE SYS$OUTPUT " AXP : Alpha Architecture." 549$ WRITE SYS$OUTPUT " VAX : VAX Architecture." 550$ WRITE SYS$OUTPUT "" 551$! 552$! Time To EXIT. 553$! 554$ EXIT 555$! 556$! End The Valid Arguement Check. 557$! 558$ ENDIF 559$! 560$! End The P1 Check. 561$! 562$ ENDIF 563$! 564$! Check To See If P2 Is Blank. 565$! 566$ IF (P2.EQS."NODEBUG") 567$ THEN 568$! 569$! P2 Is NODEBUG, So Compile Without Debugger Information. 570$! 571$ DEBUGGER = "NODEBUG" 572$ TRACEBACK = "NOTRACEBACK" 573$ GCC_OPTIMIZE = "OPTIMIZE" 574$ CC_OPTIMIZE = "OPTIMIZE" 575$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile." 576$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization." 577$! 578$! Else... 579$! 580$ ELSE 581$! 582$! Check To See If We Are To Compile With Debugger Information. 583$! 584$ IF (P2.EQS."DEBUG") 585$ THEN 586$! 587$! Compile With Debugger Information. 588$! 589$ DEBUGGER = "DEBUG" 590$ TRACEBACK = "TRACEBACK" 591$ GCC_OPTIMIZE = "NOOPTIMIZE" 592$ CC_OPTIMIZE = "NOOPTIMIZE" 593$ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile." 594$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization." 595$ ELSE 596$! 597$! Tell The User Entered An Invalid Option.. 598$! 599$ WRITE SYS$OUTPUT "" 600$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:" 601$ WRITE SYS$OUTPUT "" 602$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information." 603$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information." 604$ WRITE SYS$OUTPUT "" 605$! 606$! Time To EXIT. 607$! 608$ EXIT 609$! 610$! End The Valid Arguement Check. 611$! 612$ ENDIF 613$! 614$! End The P2 Check. 615$! 616$ ENDIF 617$! 618$! Special Threads For OpenVMS v7.1 Or Later 619$! 620$! Written By: Richard Levitte 621$! richard@levitte.org 622$! 623$! 624$! Check To See If We Have A Option For P5. 625$! 626$ IF (P5.EQS."") 627$ THEN 628$! 629$! Get The Version Of VMS We Are Using. 630$! 631$ ISSEVEN := 632$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION"))) 633$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP)) 634$! 635$! Check To See If The VMS Version Is v7.1 Or Later. 636$! 637$ IF (TMP.GE.71) 638$ THEN 639$! 640$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads. 641$! 642$ ISSEVEN := ,PTHREAD_USE_D4 643$! 644$! End The VMS Version Check. 645$! 646$ ENDIF 647$! 648$! End The P5 Check. 649$! 650$ ENDIF 651$! 652$! Check To See If P3 Is Blank. 653$! 654$ IF (P3.EQS."") 655$ THEN 656$! 657$! O.K., The User Didn't Specify A Compiler, Let's Try To 658$! Find Out Which One To Use. 659$! 660$! Check To See If We Have GNU C. 661$! 662$ IF (F$TRNLNM("GNU_CC").NES."") 663$ THEN 664$! 665$! Looks Like GNUC, Set To Use GNUC. 666$! 667$ P3 = "GNUC" 668$! 669$! End The GNU C Compiler Check. 670$! 671$ ELSE 672$! 673$! Check To See If We Have VAXC Or DECC. 674$! 675$ IF (ARCH.EQS."AXP").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."") 676$ THEN 677$! 678$! Looks Like DECC, Set To Use DECC. 679$! 680$ P3 = "DECC" 681$! 682$! Else... 683$! 684$ ELSE 685$! 686$! Looks Like VAXC, Set To Use VAXC. 687$! 688$ P3 = "VAXC" 689$! 690$! End The VAXC Compiler Check. 691$! 692$ ENDIF 693$! 694$! End The DECC & VAXC Compiler Check. 695$! 696$ ENDIF 697$! 698$! End The Compiler Check. 699$! 700$ ENDIF 701$! 702$! Check To See If We Have A Option For P4. 703$! 704$ IF (P4.EQS."") 705$ THEN 706$! 707$! Find out what socket library we have available 708$! 709$ IF F$PARSE("SOCKETSHR:") .NES. "" 710$ THEN 711$! 712$! We have SOCKETSHR, and it is my opinion that it's the best to use. 713$! 714$ P4 = "SOCKETSHR" 715$! 716$! Tell the user 717$! 718$ WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP" 719$! 720$! Else, let's look for something else 721$! 722$ ELSE 723$! 724$! Like UCX (the reason to do this before Multinet is that the UCX 725$! emulation is easier to use...) 726$! 727$ IF F$TRNLNM("UCX$IPC_SHR") .NES. "" - 728 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" - 729 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. "" 730$ THEN 731$! 732$! Last resort: a UCX or UCX-compatible library 733$! 734$ P4 = "UCX" 735$! 736$! Tell the user 737$! 738$ WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP" 739$! 740$! That was all... 741$! 742$ ENDIF 743$ ENDIF 744$ ENDIF 745$! 746$! Set Up Initial CC Definitions, Possibly With User Ones 747$! 748$ CCDEFS = "TCPIP_TYPE_''P4'" 749$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS 750$ CCEXTRAFLAGS = "" 751$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS 752$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX" 753$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN - 754 CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS 755$! 756$! Check To See If The User Entered A Valid Paramter. 757$! 758$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC") 759$ THEN 760$! 761$! Check To See If The User Wanted DECC. 762$! 763$ IF (P3.EQS."DECC") 764$ THEN 765$! 766$! Looks Like DECC, Set To Use DECC. 767$! 768$ COMPILER = "DECC" 769$! 770$! Tell The User We Are Using DECC. 771$! 772$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler." 773$! 774$! Use DECC... 775$! 776$ CC = "CC" 777$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" - 778 THEN CC = "CC/DECC" 779$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + - 780 "/NOLIST/PREFIX=ALL" + - 781 "/INCLUDE=(SYS$DISK:[-.CRYPTO],SYS$DISK:[-])" + CCEXTRAFLAGS 782$! 783$! Define The Linker Options File Name. 784$! 785$ OPT_FILE = "SYS$DISK:[]VAX_DECC_OPTIONS.OPT" 786$! 787$! End DECC Check. 788$! 789$ ENDIF 790$! 791$! Check To See If We Are To Use VAXC. 792$! 793$ IF (P3.EQS."VAXC") 794$ THEN 795$! 796$! Looks Like VAXC, Set To Use VAXC. 797$! 798$ COMPILER = "VAXC" 799$! 800$! Tell The User We Are Using VAX C. 801$! 802$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler." 803$! 804$! Compile Using VAXC. 805$! 806$ CC = "CC" 807$ IF ARCH.EQS."AXP" 808$ THEN 809$ WRITE SYS$OUTPUT "There is no VAX C on Alpha!" 810$ EXIT 811$ ENDIF 812$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC" 813$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + - 814 "/INCLUDE=(SYS$DISK:[-.CRYPTO],SYS$DISK:[-])" + CCEXTRAFLAGS 815$ CCDEFS = CCDEFS + ",""VAXC""" 816$! 817$! Define <sys> As SYS$COMMON:[SYSLIB] 818$! 819$ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB] 820$! 821$! Define The Linker Options File Name. 822$! 823$ OPT_FILE = "SYS$DISK:[]VAX_VAXC_OPTIONS.OPT" 824$! 825$! End VAXC Check 826$! 827$ ENDIF 828$! 829$! Check To See If We Are To Use GNU C. 830$! 831$ IF (P3.EQS."GNUC") 832$ THEN 833$! 834$! Looks Like GNUC, Set To Use GNUC. 835$! 836$ COMPILER = "GNUC" 837$! 838$! Tell The User We Are Using GNUC. 839$! 840$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler." 841$! 842$! Use GNU C... 843$! 844$ IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC 845$ CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + - 846 "/INCLUDE=(SYS$DISK:[-.CRYPTO],SYS$DISK:[-])" + CCEXTRAFLAGS 847$! 848$! Define The Linker Options File Name. 849$! 850$ OPT_FILE = "SYS$DISK:[]VAX_GNUC_OPTIONS.OPT" 851$! 852$! End The GNU C Check. 853$! 854$ ENDIF 855$! 856$! Set up default defines 857$! 858$ CCDEFS = """FLAT_INC=1""," + CCDEFS 859$! 860$! Finish up the definition of CC. 861$! 862$ IF COMPILER .EQS. "DECC" 863$ THEN 864$ IF CCDISABLEWARNINGS .EQS. "" 865$ THEN 866$ CC4DISABLEWARNINGS = "DOLLARID" 867$ ELSE 868$ CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID" 869$ CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))" 870$ ENDIF 871$ CC4DISABLEWARNINGS = "/WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))" 872$ ELSE 873$ CCDISABLEWARNINGS = "" 874$ CC4DISABLEWARNINGS = "" 875$ ENDIF 876$ CC2 = CC + "/DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS 877$ CC3 = CC + "/DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS 878$ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS 879$ IF COMPILER .EQS. "DECC" 880$ THEN 881$ CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS 882$ CC5 = CC3 - CCDISABLEWARNINGS + CC4DISABLEWARNINGS 883$ ELSE 884$ CC4 = CC 885$ CC5 = CC3 886$ ENDIF 887$! 888$! Show user the result 889$! 890$ WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC 891$! 892$! Else The User Entered An Invalid Arguement. 893$! 894$ ELSE 895$! 896$! Tell The User We Don't Know What They Want. 897$! 898$ WRITE SYS$OUTPUT "" 899$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:" 900$ WRITE SYS$OUTPUT "" 901$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C." 902$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C." 903$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C." 904$ WRITE SYS$OUTPUT "" 905$! 906$! Time To EXIT. 907$! 908$ EXIT 909$ ENDIF 910$! 911$! Time to check the contents, and to make sure we get the correct library. 912$! 913$ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX" - 914 .OR. P4.EQS."TCPIP" .OR. P4.EQS."NONE" 915$ THEN 916$! 917$! Check to see if SOCKETSHR was chosen 918$! 919$ IF P4.EQS."SOCKETSHR" 920$ THEN 921$! 922$! Set the library to use SOCKETSHR 923$! 924$ TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT" 925$! 926$! Done with SOCKETSHR 927$! 928$ ENDIF 929$! 930$! Check to see if MULTINET was chosen 931$! 932$ IF P4.EQS."MULTINET" 933$ THEN 934$! 935$! Set the library to use UCX emulation. 936$! 937$ P4 = "UCX" 938$! 939$! Done with MULTINET 940$! 941$ ENDIF 942$! 943$! Check to see if UCX was chosen 944$! 945$ IF P4.EQS."UCX" 946$ THEN 947$! 948$! Set the library to use UCX. 949$! 950$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT" 951$ IF F$TRNLNM("UCX$IPC_SHR") .NES. "" 952$ THEN 953$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT" 954$ ELSE 955$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN - 956 TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT" 957$ ENDIF 958$! 959$! Done with UCX 960$! 961$ ENDIF 962$! 963$! Check to see if TCPIP was chosen 964$! 965$ IF P4.EQS."TCPIP" 966$ THEN 967$! 968$! Set the library to use TCPIP (post UCX). 969$! 970$ TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT" 971$! 972$! Done with TCPIP 973$! 974$ ENDIF 975$! 976$! Check to see if NONE was chosen 977$! 978$ IF P4.EQS."NONE" 979$ THEN 980$! 981$! Do not use a TCPIP library. 982$! 983$ TCPIP_LIB = "" 984$! 985$! Done with NONE 986$! 987$ ENDIF 988$! 989$! Print info 990$! 991$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB 992$! 993$! Else The User Entered An Invalid Arguement. 994$! 995$ ELSE 996$! 997$! Tell The User We Don't Know What They Want. 998$! 999$ WRITE SYS$OUTPUT "" 1000$ WRITE SYS$OUTPUT "The Option ",P4," Is Invalid. The Valid Options Are:" 1001$ WRITE SYS$OUTPUT "" 1002$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library." 1003$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library." 1004$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP (post UCX) TCP/IP library." 1005$ WRITE SYS$OUTPUT "" 1006$! 1007$! Time To EXIT. 1008$! 1009$ EXIT 1010$! 1011$! Done with TCP/IP libraries 1012$! 1013$ ENDIF 1014$! 1015$! Time To RETURN... 1016$! 1017$ RETURN 1018$! 1019$ INITIALISE: 1020$! 1021$! Save old value of the logical name OPENSSL 1022$! 1023$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE") 1024$! 1025$! Save directory information 1026$! 1027$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;" 1028$ __HERE = F$EDIT(__HERE,"UPCASE") 1029$ __TOP = __HERE - "SSL]" 1030$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]" 1031$! 1032$! Set up the logical name OPENSSL to point at the include directory 1033$! 1034$ DEFINE OPENSSL/NOLOG '__INCLUDE' 1035$! 1036$! Done 1037$! 1038$ RETURN 1039$! 1040$ CLEANUP: 1041$! 1042$! Restore the logical name OPENSSL if it had a value 1043$! 1044$ IF __SAVE_OPENSSL .EQS. "" 1045$ THEN 1046$ DEASSIGN OPENSSL 1047$ ELSE 1048$ DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL' 1049$ ENDIF 1050$! 1051$! Done 1052$! 1053$ RETURN 1054