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