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 12$! ALPHA, IA64 or VAX. 13$! 14$! It is written to detect what type of machine you are compiling on 15$! (i.e. ALPHA 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 specify 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$! P6, if defined, specifies the C pointer size. Ignored on VAX. 46$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.) 47$! Supported values are: 48$! 49$! "" Compile with default (/NOPOINTER_SIZE) 50$! 32 Compile with /POINTER_SIZE=32 (SHORT) 51$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]) 52$! (Automatically select ARGV if compiler supports it.) 53$! 64= Compile with /POINTER_SIZE=64 (LONG). 54$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV). 55$! 56$! P7, if defined, specifies a directory where ZLIB files (zlib.h, 57$! libz.olb) may be found. Optionally, a non-default object library 58$! name may be included ("dev:[dir]libz_64.olb", for example). 59$! 60$! 61$! Announce/identify. 62$! 63$ proc = f$environment( "procedure") 64$ write sys$output "@@@ "+ - 65 f$parse( proc, , , "name")+ f$parse( proc, , , "type") 66$! 67$! Define A TCP/IP Library That We Will Need To Link To. 68$! (That Is, If We Need To Link To One.) 69$! 70$ TCPIP_LIB = "" 71$ ZLIB_LIB = "" 72$! 73$! Check What Architecture We Are Using. 74$! 75$ IF (F$GETSYI("CPU").LT.128) 76$ THEN 77$! 78$! The Architecture Is VAX. 79$! 80$ ARCH = "VAX" 81$! 82$! Else... 83$! 84$ ELSE 85$! 86$! The Architecture Is Alpha, IA64 or whatever comes in the future. 87$! 88$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE") 89$ IF (ARCH .EQS. "") THEN ARCH = "UNK" 90$! 91$! End The Architecture Check. 92$! 93$ ENDIF 94$! 95$ ARCHD = ARCH 96$ LIB32 = "32" 97$ OPT_FILE = "" 98$ POINTER_SIZE = "" 99$! 100$! Check To Make Sure We Have Valid Command Line Parameters. 101$! 102$ GOSUB CHECK_OPTIONS 103$! 104$! Define The OBJ and EXE Directories. 105$! 106$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.SSL] 107$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.SSL] 108$! 109$! Specify the destination directory in any /MAP option. 110$! 111$ if (LINKMAP .eqs. "MAP") 112$ then 113$ LINKMAP = LINKMAP+ "=''EXE_DIR'" 114$ endif 115$! 116$! Add the location prefix to the linker options file name. 117$! 118$ if (OPT_FILE .nes. "") 119$ then 120$ OPT_FILE = EXE_DIR+ OPT_FILE 121$ endif 122$! 123$! Initialise logical names and such 124$! 125$ GOSUB INITIALISE 126$! 127$! Tell The User What Kind of Machine We Run On. 128$! 129$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'" 130$! 131$! Check To See If The Architecture Specific OBJ Directory Exists. 132$! 133$ IF (F$PARSE(OBJ_DIR).EQS."") 134$ THEN 135$! 136$! It Dosen't Exist, So Create It. 137$! 138$ CREATE/DIR 'OBJ_DIR' 139$! 140$! End The Architecture Specific OBJ Directory Check. 141$! 142$ ENDIF 143$! 144$! Check To See If The Architecture Specific Directory Exists. 145$! 146$ IF (F$PARSE(EXE_DIR).EQS."") 147$ THEN 148$! 149$! It Dosen't Exist, So Create It. 150$! 151$ CREATE/DIR 'EXE_DIR' 152$! 153$! End The Architecture Specific Directory Check. 154$! 155$ ENDIF 156$! 157$! Define The Library Name. 158$! 159$ SSL_LIB := 'EXE_DIR'SSL_LIBSSL'LIB32'.OLB 160$! 161$! Define The CRYPTO-LIB We Are To Use. 162$! 163$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB 164$! 165$! Set up exceptional compilations. 166$! 167$ CC5_SHOWN = 0 168$! 169$! Check To See What We Are To Do. 170$! 171$ IF (BUILDALL.EQS."TRUE") 172$ THEN 173$! 174$! Since Nothing Special Was Specified, Do Everything. 175$! 176$ GOSUB LIBRARY 177$ GOSUB SSL_TASK 178$! 179$! Else... 180$! 181$ ELSE 182$! 183$! Build Just What The User Wants Us To Build. 184$! 185$ GOSUB 'BUILDALL' 186$! 187$! End The BUILDALL Check. 188$! 189$ ENDIF 190$! 191$! Time To EXIT. 192$! 193$ EXIT: 194$ GOSUB CLEANUP 195$ EXIT 196$! 197$! Compile The Library. 198$! 199$ LIBRARY: 200$! 201$! Check To See If We Already Have A "[.xxx.EXE.SSL]SSL_LIBSSL''LIB32'.OLB" Library... 202$! 203$ IF (F$SEARCH(SSL_LIB).EQS."") 204$ THEN 205$! 206$! Guess Not, Create The Library. 207$! 208$ LIBRARY/CREATE/OBJECT 'SSL_LIB' 209$! 210$! End The Library Exist Check. 211$! 212$ ENDIF 213$! 214$! Define The Different SSL "library" Files. 215$! 216$ LIB_SSL = "s2_meth, s2_srvr, s2_clnt, s2_lib, s2_enc, s2_pkt,"+ - 217 "s3_meth, s3_srvr, s3_clnt, s3_lib, s3_enc, s3_pkt, s3_both, s3_cbc,"+ - 218 "s23_meth,s23_srvr,s23_clnt,s23_lib, s23_pkt,"+ - 219 "t1_meth, t1_srvr, t1_clnt, t1_lib, t1_enc,"+ - 220 "d1_meth, d1_srvr, d1_clnt, d1_lib, d1_pkt,"+ - 221 "d1_both,d1_enc,"+ - 222 "ssl_lib,ssl_err2,ssl_cert,ssl_sess,"+ - 223 "ssl_ciph,ssl_stat,ssl_rsa,"+ - 224 "ssl_asn1,ssl_txt,ssl_algs,"+ - 225 "bio_ssl,ssl_err,kssl,t1_reneg" 226$! 227$ COMPILEWITH_CC5 = "" 228$! 229$! Tell The User That We Are Compiling The Library. 230$! 231$ WRITE SYS$OUTPUT "Building The ",SSL_LIB," Library." 232$! 233$! Define A File Counter And Set It To "0" 234$! 235$ FILE_COUNTER = 0 236$! 237$! Top Of The File Loop. 238$! 239$ NEXT_FILE: 240$! 241$! O.K, Extract The File Name From The File List. 242$! 243$ FILE_NAME = F$EDIT(F$ELEMENT(FILE_COUNTER,",",LIB_SSL),"COLLAPSE") 244$! 245$! Check To See If We Are At The End Of The File List. 246$! 247$ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE 248$! 249$! Increment The Counter. 250$! 251$ FILE_COUNTER = FILE_COUNTER + 1 252$! 253$! Create The Source File Name. 254$! 255$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C" 256$! 257$! Create The Object File Name. 258$! 259$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ" 260$ ON WARNING THEN GOTO NEXT_FILE 261$! 262$! Check To See If The File We Want To Compile Is Actually There. 263$! 264$ IF (F$SEARCH(SOURCE_FILE).EQS."") 265$ THEN 266$! 267$! Tell The User That The File Dosen't Exist. 268$! 269$ WRITE SYS$OUTPUT "" 270$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist." 271$ WRITE SYS$OUTPUT "" 272$! 273$! Exit The Build. 274$! 275$ EXIT 276$! 277$! End The File Exists Check. 278$! 279$ ENDIF 280$! 281$! Tell The User What File We Are Compiling. 282$! 283$ WRITE SYS$OUTPUT " ",FILE_NAME,".c" 284$! 285$! Compile The File. 286$! 287$ ON ERROR THEN GOTO NEXT_FILE 288$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE' 289$! 290$! Add It To The Library. 291$! 292$ LIBRARY/REPLACE/OBJECT 'SSL_LIB' 'OBJECT_FILE' 293$! 294$! Time To Clean Up The Object File. 295$! 296$ DELETE 'OBJECT_FILE';* 297$! 298$! Go Back And Get The Next File Name. 299$! 300$ GOTO NEXT_FILE 301$! 302$! All Done With This Library. 303$! 304$ FILE_DONE: 305$! 306$! Tell The User That We Are All Done. 307$! 308$ WRITE SYS$OUTPUT "Library ",SSL_LIB," Compiled." 309$! 310$! Time To RETURN. 311$! 312$ RETURN 313$ SSL_TASK: 314$! 315$! Check To See If We Have The Proper Libraries. 316$! 317$ GOSUB LIB_CHECK 318$! 319$! Check To See If We Have A Linker Option File. 320$! 321$ GOSUB CHECK_OPT_FILE 322$! 323$! Check To See If The File We Want To Compile Is Actually There. 324$! 325$ IF (F$SEARCH("SYS$DISK:[]SSL_TASK.C").EQS."") 326$ THEN 327$! 328$! Tell The User That The File Dosen't Exist. 329$! 330$ WRITE SYS$OUTPUT "" 331$ WRITE SYS$OUTPUT "The File SSL_TASK.C Dosen't Exist." 332$ WRITE SYS$OUTPUT "" 333$! 334$! Exit The Build. 335$! 336$ EXIT 337$! 338$! End The SSL_TASK.C File Check. 339$! 340$ ENDIF 341$! 342$ COMPILEWITH_CC5 = "" !!! ",ssl_task," 343$! 344$! Tell The User We Are Creating The SSL_TASK. 345$! 346$! Tell The User We Are Creating The SSL_TASK. 347$! 348$ WRITE SYS$OUTPUT "Creating SSL_TASK OSU HTTP SSL Engine." 349$! 350$! Tell The User What File We Are Compiling. 351$! 352$ FILE_NAME = "ssl_task" 353$ WRITE SYS$OUTPUT " ",FILE_NAME,".c" 354$! 355$! Compile The File. 356$! 357$ ON ERROR THEN GOTO SSL_TASK_END 358$! 359$ FILE_NAME0 = ","+ F$ELEMENT(0,".",FILE_NAME)+ "," 360$ IF COMPILEWITH_CC5 - FILE_NAME0 .NES. COMPILEWITH_CC5 361$ THEN 362$ if (.not. CC5_SHOWN) 363$ then 364$ CC5_SHOWN = 1 365$ write sys$output " \Using special rule (5)" 366$ x = " "+ CC5 367$ write /symbol sys$output x 368$ endif 369$ CC5 /OBJECT='OBJ_DIR''FILE_NAME'.OBJ SYS$DISK:[]'FILE_NAME'.C 370$ ELSE 371$ CC /OBJECT='OBJ_DIR''FILE_NAME'.OBJ SYS$DISK:[]'FILE_NAME'.C 372$ ENDIF 373$! 374$! Link The Program. 375$! 376$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /EXE='EXE_DIR'SSL_TASK.EXE - 377 'OBJ_DIR'SSL_TASK.OBJ, - 378 'SSL_LIB'/LIBRARY, - 379 'CRYPTO_LIB'/LIBRARY - 380 'TCPIP_LIB' - 381 'ZLIB_LIB' - 382 ,'OPT_FILE' /OPTIONS 383$! 384$! Time To Return. 385$! 386$SSL_TASK_END: 387$ RETURN 388$! 389$! Check For The Link Option FIle. 390$! 391$ CHECK_OPT_FILE: 392$! 393$! Check To See If We Need To Make A VAX C Option File. 394$! 395$ IF (COMPILER.EQS."VAXC") 396$ THEN 397$! 398$! Check To See If We Already Have A VAX C Linker Option File. 399$! 400$ IF (F$SEARCH(OPT_FILE).EQS."") 401$ THEN 402$! 403$! We Need A VAX C Linker Option File. 404$! 405$ CREATE 'OPT_FILE' 406$DECK 407! 408! Default System Options File To Link Against 409! The Sharable VAX C Runtime Library. 410! 411SYS$SHARE:VAXCRTL.EXE/SHARE 412$EOD 413$! 414$! End The Option File Check. 415$! 416$ ENDIF 417$! 418$! End The VAXC Check. 419$! 420$ ENDIF 421$! 422$! Check To See If We Need A GNU C Option File. 423$! 424$ IF (COMPILER.EQS."GNUC") 425$ THEN 426$! 427$! Check To See If We Already Have A GNU C Linker Option File. 428$! 429$ IF (F$SEARCH(OPT_FILE).EQS."") 430$ THEN 431$! 432$! We Need A GNU C Linker Option File. 433$! 434$ CREATE 'OPT_FILE' 435$DECK 436! 437! Default System Options File To Link Against 438! The Sharable C Runtime Library. 439! 440GNU_CC:[000000]GCCLIB/LIBRARY 441SYS$SHARE:VAXCRTL/SHARE 442$EOD 443$! 444$! End The Option File Check. 445$! 446$ ENDIF 447$! 448$! End The GNU C Check. 449$! 450$ ENDIF 451$! 452$! Check To See If We Need A DEC C Option File. 453$! 454$ IF (COMPILER.EQS."DECC") 455$ THEN 456$! 457$! Check To See If We Already Have A DEC C Linker Option File. 458$! 459$ IF (F$SEARCH(OPT_FILE).EQS."") 460$ THEN 461$! 462$! Figure Out If We Need A non-VAX Or A VAX Linker Option File. 463$! 464$ IF (ARCH.EQS."VAX") 465$ THEN 466$! 467$! We Need A DEC C Linker Option File For VAX. 468$! 469$ CREATE 'OPT_FILE' 470$DECK 471! 472! Default System Options File To Link Against 473! The Sharable DEC C Runtime Library. 474! 475SYS$SHARE:DECC$SHR.EXE/SHARE 476$EOD 477$! 478$! Else... 479$! 480$ ELSE 481$! 482$! Create The non-VAX Linker Option File. 483$! 484$ CREATE 'OPT_FILE' 485$DECK 486! 487! Default System Options File For non-VAX To Link Against 488! The Sharable C Runtime Library. 489! 490SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE 491SYS$SHARE:CMA$OPEN_RTL/SHARE 492$EOD 493$! 494$! End The DEC C Option File Check. 495$! 496$ ENDIF 497$! 498$! End The Option File Search. 499$! 500$ ENDIF 501$! 502$! End The DEC C Check. 503$! 504$ ENDIF 505$! 506$! Tell The User What Linker Option File We Are Using. 507$! 508$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"." 509$! 510$! Time To RETURN. 511$! 512$ RETURN 513$ LIB_CHECK: 514$! 515$! Look For The VAX Library LIBSSL.OLB. 516$! 517$ IF (F$SEARCH(SSL_LIB).EQS."") 518$ THEN 519$! 520$! Tell The User We Can't Find The LIBSSL.OLB Library. 521$! 522$ WRITE SYS$OUTPUT "" 523$ WRITE SYS$OUTPUT "Can't Find The Library ",SSL_LIB,"." 524$ WRITE SYS$OUTPUT "We Can't Link Without It." 525$ WRITE SYS$OUTPUT "" 526$! 527$! Since We Can't Link Without It, Exit. 528$! 529$ EXIT 530$! 531$! End The LIBSSL.OLB Library Check. 532$! 533$ ENDIF 534$! 535$! Look For The Library LIBCRYPTO.OLB. 536$! 537$ IF (F$SEARCH(CRYPTO_LIB).EQS."") 538$ THEN 539$! 540$! Tell The User We Can't Find The LIBCRYPTO.OLB Library. 541$! 542$ WRITE SYS$OUTPUT "" 543$ WRITE SYS$OUTPUT "Can't Find The Library ",CRYPTO_LIB,"." 544$ WRITE SYS$OUTPUT "We Can't Link Without It." 545$ WRITE SYS$OUTPUT "" 546$! 547$! Since We Can't Link Without It, Exit. 548$! 549$ EXIT 550$! 551$! End The LIBCRYPTO.OLB Library Check. 552$! 553$ ENDIF 554$! 555$! Time To Return. 556$! 557$ RETURN 558$! 559$! Check The User's Options. 560$! 561$ CHECK_OPTIONS: 562$! 563$! Check To See If P1 Is Blank. 564$! 565$ IF (P1.EQS."ALL") 566$ THEN 567$! 568$! P1 Is Blank, So Build Everything. 569$! 570$ BUILDALL = "TRUE" 571$! 572$! Else... 573$! 574$ ELSE 575$! 576$! Else, Check To See If P1 Has A Valid Argument. 577$! 578$ IF (P1.EQS."LIBRARY").OR.(P1.EQS."SSL_TASK") 579$ THEN 580$! 581$! A Valid Argument. 582$! 583$ BUILDALL = P1 584$! 585$! Else... 586$! 587$ ELSE 588$! 589$! Tell The User We Don't Know What They Want. 590$! 591$ WRITE SYS$OUTPUT "" 592$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:" 593$ WRITE SYS$OUTPUT "" 594$ WRITE SYS$OUTPUT " ALL : Just Build Everything." 595$ WRITE SYS$OUTPUT " LIBRARY : To Compile Just The [.xxx.EXE.SSL]LIBSSL.OLB Library." 596$ WRITE SYS$OUTPUT " SSL_TASK : To Compile Just The [.xxx.EXE.SSL]SSL_TASK.EXE Program." 597$ WRITE SYS$OUTPUT "" 598$ WRITE SYS$OUTPUT " Where 'xxx' Stands For:" 599$ WRITE SYS$OUTPUT "" 600$ WRITE SYS$OUTPUT " ALPHA[64]: Alpha Architecture." 601$ WRITE SYS$OUTPUT " IA64[64] : IA64 Architecture." 602$ WRITE SYS$OUTPUT " VAX : VAX Architecture." 603$ WRITE SYS$OUTPUT "" 604$! 605$! Time To EXIT. 606$! 607$ EXIT 608$! 609$! End The Valid Argument Check. 610$! 611$ ENDIF 612$! 613$! End The P1 Check. 614$! 615$ ENDIF 616$! 617$! Check To See If P2 Is Blank. 618$! 619$ IF (P2.EQS."NODEBUG") 620$ THEN 621$! 622$! P2 Is NODEBUG, So Compile Without Debugger Information. 623$! 624$ DEBUGGER = "NODEBUG" 625$ LINKMAP = "NOMAP" 626$ TRACEBACK = "NOTRACEBACK" 627$ GCC_OPTIMIZE = "OPTIMIZE" 628$ CC_OPTIMIZE = "OPTIMIZE" 629$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile." 630$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization." 631$! 632$! Else... 633$! 634$ ELSE 635$! 636$! Check To See If We Are To Compile With Debugger Information. 637$! 638$ IF (P2.EQS."DEBUG") 639$ THEN 640$! 641$! Compile With Debugger Information. 642$! 643$ DEBUGGER = "DEBUG" 644$ LINKMAP = "MAP" 645$ TRACEBACK = "TRACEBACK" 646$ GCC_OPTIMIZE = "NOOPTIMIZE" 647$ CC_OPTIMIZE = "NOOPTIMIZE" 648$ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile." 649$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization." 650$ ELSE 651$! 652$! Tell The User Entered An Invalid Option. 653$! 654$ WRITE SYS$OUTPUT "" 655$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:" 656$ WRITE SYS$OUTPUT "" 657$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information." 658$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information." 659$ WRITE SYS$OUTPUT "" 660$! 661$! Time To EXIT. 662$! 663$ EXIT 664$! 665$! End The Valid Argument Check. 666$! 667$ ENDIF 668$! 669$! End The P2 Check. 670$! 671$ ENDIF 672$! 673$! Special Threads For OpenVMS v7.1 Or Later 674$! 675$! Written By: Richard Levitte 676$! richard@levitte.org 677$! 678$! 679$! Check To See If We Have A Option For P5. 680$! 681$ IF (P5.EQS."") 682$ THEN 683$! 684$! Get The Version Of VMS We Are Using. 685$! 686$ ISSEVEN := 687$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION"))) 688$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP)) 689$! 690$! Check To See If The VMS Version Is v7.1 Or Later. 691$! 692$ IF (TMP.GE.71) 693$ THEN 694$! 695$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads. 696$! 697$ ISSEVEN := ,PTHREAD_USE_D4 698$! 699$! End The VMS Version Check. 700$! 701$ ENDIF 702$! 703$! End The P5 Check. 704$! 705$ ENDIF 706$! 707$! Check P6 (POINTER_SIZE). 708$! 709$ IF (P6 .NES. "") .AND. (ARCH .NES. "VAX") 710$ THEN 711$! 712$ IF (P6 .EQS. "32") 713$ THEN 714$ POINTER_SIZE = " /POINTER_SIZE=32" 715$ ELSE 716$ POINTER_SIZE = F$EDIT( P6, "COLLAPSE, UPCASE") 717$ IF ((POINTER_SIZE .EQS. "64") .OR. - 718 (POINTER_SIZE .EQS. "64=") .OR. - 719 (POINTER_SIZE .EQS. "64=ARGV")) 720$ THEN 721$ ARCHD = ARCH+ "_64" 722$ LIB32 = "" 723$ POINTER_SIZE = " /POINTER_SIZE=64" 724$ ELSE 725$! 726$! Tell The User Entered An Invalid Option. 727$! 728$ WRITE SYS$OUTPUT "" 729$ WRITE SYS$OUTPUT "The Option ", P6, - 730 " Is Invalid. The Valid Options Are:" 731$ WRITE SYS$OUTPUT "" 732$ WRITE SYS$OUTPUT - 733 " """" : Compile with default (short) pointers." 734$ WRITE SYS$OUTPUT - 735 " 32 : Compile with 32-bit (short) pointers." 736$ WRITE SYS$OUTPUT - 737 " 64 : Compile with 64-bit (long) pointers (auto ARGV)." 738$ WRITE SYS$OUTPUT - 739 " 64= : Compile with 64-bit (long) pointers (no ARGV)." 740$ WRITE SYS$OUTPUT - 741 " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)." 742$ WRITE SYS$OUTPUT "" 743$! 744$! Time To EXIT. 745$! 746$ EXIT 747$! 748$ ENDIF 749$! 750$ ENDIF 751$! 752$! End The P6 (POINTER_SIZE) Check. 753$! 754$ ENDIF 755$! 756$! Set basic C compiler /INCLUDE directories. 757$! 758$ CC_INCLUDES = "SYS$DISK:[-.CRYPTO],SYS$DISK:[-]" 759$! 760$! Check To See If P3 Is Blank. 761$! 762$ IF (P3.EQS."") 763$ THEN 764$! 765$! O.K., The User Didn't Specify A Compiler, Let's Try To 766$! Find Out Which One To Use. 767$! 768$! Check To See If We Have GNU C. 769$! 770$ IF (F$TRNLNM("GNU_CC").NES."") 771$ THEN 772$! 773$! Looks Like GNUC, Set To Use GNUC. 774$! 775$ P3 = "GNUC" 776$! 777$! End The GNU C Compiler Check. 778$! 779$ ELSE 780$! 781$! Check To See If We Have VAXC Or DECC. 782$! 783$ IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."") 784$ THEN 785$! 786$! Looks Like DECC, Set To Use DECC. 787$! 788$ P3 = "DECC" 789$! 790$! Else... 791$! 792$ ELSE 793$! 794$! Looks Like VAXC, Set To Use VAXC. 795$! 796$ P3 = "VAXC" 797$! 798$! End The VAXC Compiler Check. 799$! 800$ ENDIF 801$! 802$! End The DECC & VAXC Compiler Check. 803$! 804$ ENDIF 805$! 806$! End The Compiler Check. 807$! 808$ ENDIF 809$! 810$! Check To See If We Have A Option For P4. 811$! 812$ IF (P4.EQS."") 813$ THEN 814$! 815$! Find out what socket library we have available 816$! 817$ IF F$PARSE("SOCKETSHR:") .NES. "" 818$ THEN 819$! 820$! We have SOCKETSHR, and it is my opinion that it's the best to use. 821$! 822$ P4 = "SOCKETSHR" 823$! 824$! Tell the user 825$! 826$ WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP" 827$! 828$! Else, let's look for something else 829$! 830$ ELSE 831$! 832$! Like UCX (the reason to do this before Multinet is that the UCX 833$! emulation is easier to use...) 834$! 835$ IF F$TRNLNM("UCX$IPC_SHR") .NES. "" - 836 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" - 837 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. "" 838$ THEN 839$! 840$! Last resort: a UCX or UCX-compatible library 841$! 842$ P4 = "UCX" 843$! 844$! Tell the user 845$! 846$ WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP" 847$! 848$! That was all... 849$! 850$ ENDIF 851$ ENDIF 852$ ENDIF 853$! 854$! Set Up Initial CC Definitions, Possibly With User Ones 855$! 856$ CCDEFS = "TCPIP_TYPE_''P4'" 857$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS 858$ CCEXTRAFLAGS = "" 859$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS 860$ CCDISABLEWARNINGS = "" !!! "MAYLOSEDATA3" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR" 861$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" 862$ THEN 863$ IF CCDISABLEWARNINGS .NES. "" THEN CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," 864$ CCDISABLEWARNINGS = CCDISABLEWARNINGS + USER_CCDISABLEWARNINGS 865$ ENDIF 866$! 867$! Check To See If We Have A ZLIB Option. 868$! 869$ ZLIB = P7 870$ IF (ZLIB .NES. "") 871$ THEN 872$! 873$! Check for expected ZLIB files. 874$! 875$ err = 0 876$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY") 877$ if (f$search( file1) .eqs. "") 878$ then 879$ WRITE SYS$OUTPUT "" 880$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid." 881$ WRITE SYS$OUTPUT " Can't find header: ''file1'" 882$ err = 1 883$ endif 884$ file1 = f$parse( "A.;", ZLIB)- "A.;" 885$! 886$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY") 887$ if (f$search( file2) .eqs. "") 888$ then 889$ if (err .eq. 0) 890$ then 891$ WRITE SYS$OUTPUT "" 892$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid." 893$ endif 894$ WRITE SYS$OUTPUT " Can't find library: ''file2'" 895$ WRITE SYS$OUTPUT "" 896$ err = err+ 2 897$ endif 898$ if (err .eq. 1) 899$ then 900$ WRITE SYS$OUTPUT "" 901$ endif 902$! 903$ if (err .ne. 0) 904$ then 905$ EXIT 906$ endif 907$! 908$ CCDEFS = """ZLIB=1"", "+ CCDEFS 909$ CC_INCLUDES = CC_INCLUDES+ ", "+ file1 910$ ZLIB_LIB = ", ''file2' /library" 911$! 912$! Print info 913$! 914$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2 915$! 916$! End The ZLIB Check. 917$! 918$ ENDIF 919$! 920$! Check To See If The User Entered A Valid Parameter. 921$! 922$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC") 923$ THEN 924$! 925$! Check To See If The User Wanted DECC. 926$! 927$ IF (P3.EQS."DECC") 928$ THEN 929$! 930$! Looks Like DECC, Set To Use DECC. 931$! 932$ COMPILER = "DECC" 933$! 934$! Tell The User We Are Using DECC. 935$! 936$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler." 937$! 938$! Use DECC... 939$! 940$ CC = "CC" 941$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" - 942 THEN CC = "CC/DECC" 943$ CC = CC + " /''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ - 944 "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + - 945 " /INCLUDE=(''CC_INCLUDES') " + CCEXTRAFLAGS 946$! 947$! Define The Linker Options File Name. 948$! 949$ OPT_FILE = "VAX_DECC_OPTIONS.OPT" 950$! 951$! End DECC Check. 952$! 953$ ENDIF 954$! 955$! Check To See If We Are To Use VAXC. 956$! 957$ IF (P3.EQS."VAXC") 958$ THEN 959$! 960$! Looks Like VAXC, Set To Use VAXC. 961$! 962$ COMPILER = "VAXC" 963$! 964$! Tell The User We Are Using VAX C. 965$! 966$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler." 967$! 968$! Compile Using VAXC. 969$! 970$ CC = "CC" 971$ IF ARCH.NES."VAX" 972$ THEN 973$ WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!" 974$ EXIT 975$ ENDIF 976$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC" 977$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + - 978 "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS 979$ CCDEFS = CCDEFS + ",""VAXC""" 980$! 981$! Define <sys> As SYS$COMMON:[SYSLIB] 982$! 983$ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB] 984$! 985$! Define The Linker Options File Name. 986$! 987$ OPT_FILE = "VAX_VAXC_OPTIONS.OPT" 988$! 989$! End VAXC Check 990$! 991$ ENDIF 992$! 993$! Check To See If We Are To Use GNU C. 994$! 995$ IF (P3.EQS."GNUC") 996$ THEN 997$! 998$! Looks Like GNUC, Set To Use GNUC. 999$! 1000$ COMPILER = "GNUC" 1001$! 1002$! Tell The User We Are Using GNUC. 1003$! 1004$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler." 1005$! 1006$! Use GNU C... 1007$! 1008$ IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC 1009$ CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + - 1010 "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS 1011$! 1012$! Define The Linker Options File Name. 1013$! 1014$ OPT_FILE = "VAX_GNUC_OPTIONS.OPT" 1015$! 1016$! End The GNU C Check. 1017$! 1018$ ENDIF 1019$! 1020$! Set up default defines 1021$! 1022$ CCDEFS = """FLAT_INC=1""," + CCDEFS 1023$! 1024$! Finish up the definition of CC. 1025$! 1026$ IF COMPILER .EQS. "DECC" 1027$ THEN 1028$ IF CCDISABLEWARNINGS .EQS. "" 1029$ THEN 1030$ CC4DISABLEWARNINGS = "DOLLARID" 1031$ ELSE 1032$ CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID" 1033$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))" 1034$ ENDIF 1035$ CC4DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))" 1036$ ELSE 1037$ CCDISABLEWARNINGS = "" 1038$ CC4DISABLEWARNINGS = "" 1039$ ENDIF 1040$ CC2 = CC + " /DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS 1041$ CC3 = CC + " /DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS 1042$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS 1043$ IF COMPILER .EQS. "DECC" 1044$ THEN 1045$ CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS 1046$ CC5 = CC3 - CCDISABLEWARNINGS + CC4DISABLEWARNINGS 1047$ ELSE 1048$ CC4 = CC 1049$ CC5 = CC3 1050$ ENDIF 1051$! 1052$! Show user the result 1053$! 1054$ WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC 1055$! 1056$! Else The User Entered An Invalid Argument. 1057$! 1058$ ELSE 1059$! 1060$! Tell The User We Don't Know What They Want. 1061$! 1062$ WRITE SYS$OUTPUT "" 1063$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:" 1064$ WRITE SYS$OUTPUT "" 1065$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C." 1066$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C." 1067$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C." 1068$ WRITE SYS$OUTPUT "" 1069$! 1070$! Time To EXIT. 1071$! 1072$ EXIT 1073$ ENDIF 1074$! 1075$! Time to check the contents, and to make sure we get the correct library. 1076$! 1077$ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX" - 1078 .OR. P4.EQS."TCPIP" .OR. P4.EQS."NONE" 1079$ THEN 1080$! 1081$! Check to see if SOCKETSHR was chosen 1082$! 1083$ IF P4.EQS."SOCKETSHR" 1084$ THEN 1085$! 1086$! Set the library to use SOCKETSHR 1087$! 1088$ TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS" 1089$! 1090$! Done with SOCKETSHR 1091$! 1092$ ENDIF 1093$! 1094$! Check to see if MULTINET was chosen 1095$! 1096$ IF P4.EQS."MULTINET" 1097$ THEN 1098$! 1099$! Set the library to use UCX emulation. 1100$! 1101$ P4 = "UCX" 1102$! 1103$! Done with MULTINET 1104$! 1105$ ENDIF 1106$! 1107$! Check to see if UCX was chosen 1108$! 1109$ IF P4.EQS."UCX" 1110$ THEN 1111$! 1112$! Set the library to use UCX. 1113$! 1114$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS" 1115$ IF F$TRNLNM("UCX$IPC_SHR") .NES. "" 1116$ THEN 1117$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS" 1118$ ELSE 1119$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN - 1120 TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS" 1121$ ENDIF 1122$! 1123$! Done with UCX 1124$! 1125$ ENDIF 1126$! 1127$! Check to see if TCPIP was chosen 1128$! 1129$ IF P4.EQS."TCPIP" 1130$ THEN 1131$! 1132$! Set the library to use TCPIP (post UCX). 1133$! 1134$ TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS" 1135$! 1136$! Done with TCPIP 1137$! 1138$ ENDIF 1139$! 1140$! Check to see if NONE was chosen 1141$! 1142$ IF P4.EQS."NONE" 1143$ THEN 1144$! 1145$! Do not use a TCPIP library. 1146$! 1147$ TCPIP_LIB = "" 1148$! 1149$! Done with NONE 1150$! 1151$ ENDIF 1152$! 1153$! Print info 1154$! 1155$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- "," 1156$! 1157$! Else The User Entered An Invalid Argument. 1158$! 1159$ ELSE 1160$! 1161$! Tell The User We Don't Know What They Want. 1162$! 1163$ WRITE SYS$OUTPUT "" 1164$ WRITE SYS$OUTPUT "The Option ",P4," Is Invalid. The Valid Options Are:" 1165$ WRITE SYS$OUTPUT "" 1166$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library." 1167$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library." 1168$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP (post UCX) TCP/IP library." 1169$ WRITE SYS$OUTPUT "" 1170$! 1171$! Time To EXIT. 1172$! 1173$ EXIT 1174$! 1175$! Done with TCP/IP libraries 1176$! 1177$ ENDIF 1178$! 1179$! Time To RETURN... 1180$! 1181$ RETURN 1182$! 1183$ INITIALISE: 1184$! 1185$! Save old value of the logical name OPENSSL 1186$! 1187$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE") 1188$! 1189$! Save directory information 1190$! 1191$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;" 1192$ __HERE = F$EDIT(__HERE,"UPCASE") 1193$ __TOP = __HERE - "SSL]" 1194$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]" 1195$! 1196$! Set up the logical name OPENSSL to point at the include directory 1197$! 1198$ DEFINE OPENSSL/NOLOG '__INCLUDE' 1199$! 1200$! Done 1201$! 1202$ RETURN 1203$! 1204$ CLEANUP: 1205$! 1206$! Restore the logical name OPENSSL if it had a value 1207$! 1208$ IF __SAVE_OPENSSL .EQS. "" 1209$ THEN 1210$ DEASSIGN OPENSSL 1211$ ELSE 1212$ DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL' 1213$ ENDIF 1214$! 1215$! Done 1216$! 1217$ RETURN 1218