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