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