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