1$!
2$!  MAKEAPPS.COM
3$!  Written By:  Richard Levitte
4$!               richard@levitte.org
5$!
6$!  This command file compiles and creates the various engines in form
7$!  of shared images.  They are placed in [.xxx.EXE.ENGINES], where "xxx"
8$!  is either AXP or VAX depending on your hardware.
9$!
10$!  P1	if this is ENGINES or ALL, the engines will build, otherwise not.
11$!
12$!  P2	DEBUG or NODEBUG to compile with or without debugger information.
13$!
14$!  P3  VAXC		for VAX C
15$!	DECC		for DEC C
16$!	GNUC		for GNU C (untested)
17$!
18$!  P4	if defined, sets the TCP/IP libraries to use.  UCX or TCPIP is
19$!	used by default since most other implementations come with a
20$!	compatibility library.  The value must be one of the following:
21$!
22$!	UCX		for UCX
23$!	SOCKETSHR	for SOCKETSHR+NETLIB
24$!	TCPIP		for TCPIP (post UCX)
25$!
26$!  P5	if defined, tells the compiler not to use special threads.
27$!
28$!  P6	if defined, denotes which engines to build.  If not defined,
29$!	all available engines are built.
30$!
31$!-----------------------------------------------------------------------------
32$!
33$! Set the names of the engines we want to build
34$!
35$ ENGINES = "," + P6
36$ IF ENGINES .EQS. "," THEN -
37	ENGINES = ",4758cca,aep,atalla,cswift,chil,nuron,sureware,ubsec"
38$!
39$! Set the default TCP/IP library to link against if needed
40$!
41$ TCPIP_LIB = ""
42$!
43$! Set the architecture name
44$!
45$ ARCH := VAX
46$ IF F$GETSYI("CPU") .GE. 128 THEN ARCH := AXP
47$!
48$! Set the goal directories, and creat them if necessary
49$!
50$ OBJ_DIR := SYS$DISK:[-.'ARCH'.OBJ.ENGINES]
51$ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.ENGINES]
52$ IF F$PARSE(OBJ_DIR) .EQS. "" THEN CREATE/DIRECTORY 'OBJ_DIR'
53$ IF F$PARSE(EXE_DIR) .EQS. "" THEN CREATE/DIRECTORY 'EXE_DIR'
54$!
55$! Set the goal files, and create them if necessary
56$!
57$ CRYPTO_LIB :=SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB
58$ CRYPTO_EXE :=SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.EXE
59$ IF F$SEARCH(CRYPTO_LIB) .EQS. "" THEN LIBRARY/CREATE/OBJECT 'CRYPTO_LIB'
60$!
61$! OK, time to check options and initialise
62$!
63$ OPT_PHASE = P1
64$ ACCEPT_PHASE = "ALL,ENGINES"
65$ OPT_DEBUG = P2
66$ OPT_COMPILER = P3
67$ OPT_TCPIP_LIB = P4
68$ OPT_SPECIAL_THREADS = P5
69$
70$ GOSUB CHECK_OPTIONS
71$ GOSUB INITIALISE
72$ GOSUB CHECK_OPT_FILE
73$!
74$! Define what goes into each engine
75$!
76$ ENGINE_ = ""
77$ IF ARCH .EQS. "VAX"
78$ THEN
79$   ENGINE_ = "engine_vector.mar"
80$   EXTRA_OBJ := ,'OBJ_DIR'ENGINE_VECTOR.OBJ
81$ ENDIF
82$ ENGINE_4758CCA = "e_4758cca"
83$ ENGINE_aep = "e_aep"
84$ ENGINE_atalla = "e_atalla"
85$ ENGINE_cswift = "e_cswift"
86$ ENGINE_chil = "e_chil"
87$ ENGINE_nuron = "e_nuron"
88$ ENGINE_sureware = "e_sureware"
89$ ENGINE_ubsec = "e_ubsec"
90$!
91$! Define which programs need to be linked with a TCP/IP library
92$!
93$ TCPIP_ENGINES = ",,"
94$ IF COMPILER .EQS. "VAXC" THEN -
95     TCPIP_ENGINES = ",,"
96$!
97$! Set up two loops, one that keeps track of the engines,
98$! and one that keeps track of all the files going into
99$! the current engine.
100$!
101$! Here's the start of the engine loop.
102$!
103$ ENGINE_COUNTER = 0
104$ ENGINE_NEXT:
105$!
106$! Extract the current engine name, and if we've reached the end, stop
107$!
108$ ENGINE_NAME = F$ELEMENT(ENGINE_COUNTER,",",ENGINES)
109$ IF (ENGINE_NAME.EQS.",") THEN GOTO ENGINE_DONE
110$!
111$ ENGINE_COUNTER = ENGINE_COUNTER + 1
112$!
113$! Set up the engine library names.
114$!
115$ LIB_ENGINE = "ENGINE_" + ENGINE_NAME
116$!
117$! Check if the library module name actually is defined
118$!
119$ IF F$TYPE('LIB_ENGINE') .EQS. ""
120$ THEN
121$   WRITE SYS$ERROR ""
122$   WRITE SYS$ERROR "The module ",ENGINE_NAME," does not exist.  Continuing..."
123$   WRITE SYS$ERROR ""
124$   GOTO ENGINE_NEXT
125$ ENDIF
126$!
127$! Talk to the user
128$!
129$ IF ENGINE_NAME .NES. ""
130$ THEN
131$   WRITE SYS$OUTPUT "Compiling The ",ENGINE_NAME," Library Files. (",BUILDALL,")"
132$ ELSE
133$   WRITE SYS$OUTPUT "Compiling Support Files. (",BUILDALL,")"
134$ ENDIF
135$!
136$! Here's the start of per-engine module loop.
137$!
138$ FILE_COUNTER = 0
139$ FILE_NEXT:
140$!
141$! Extract the file name from the file list, and if we've reached the end, stop
142$!
143$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",'LIB_ENGINE')
144$ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
145$!
146$ FILE_COUNTER = FILE_COUNTER + 1
147$!
148$ IF FILE_NAME .EQS. "" THEN GOTO FILE_NEXT
149$!
150$! Set up the source and object reference
151$!
152$ SOURCE_FILE = F$PARSE(FILE_NAME,"SYS$DISK:[].C",,,"SYNTAX_ONLY")
153$ OBJECT_FILE = OBJ_DIR + F$PARSE(FILE_NAME,,,"NAME","SYNTAX_ONLY") + ".OBJ"
154$!
155$! If we get some problem, we just go on trying to build the next module.
156$ ON WARNING THEN GOTO FILE_NEXT
157$!
158$! Check if the module we want to compile is actually there.
159$!
160$ IF F$SEARCH(SOURCE_FILE) .EQS. ""
161$ THEN
162$   WRITE SYS$OUTPUT ""
163$   WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Doesn't Exist."
164$   WRITE SYS$OUTPUT ""
165$   GOTO EXIT
166$ ENDIF
167$!
168$! Talk to the user.
169$!
170$ WRITE SYS$OUTPUT "	",FILE_NAME,""
171$!
172$! Do the dirty work.
173$!
174$ ON ERROR THEN GOTO FILE_NEXT
175$ IF FILE_NAME - ".MAR" .NES. FILE_NAME
176$ THEN
177$   MACRO/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
178$ ELSE
179$   CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
180$ ENDIF
181$!
182$! Now, there are two ways to handle this.  We can either build 
183$! shareable images or stick the engine object file into libcrypto.
184$! For now, the latter is NOT supported.
185$!
186$!!!!! LIBRARY/REPLACE 'CRYPTO_LIB' 'OBJECT_FILE'
187$!
188$! For shareable libraries, we need to do things a little differently
189$! depending on if we link with a TCP/IP library or not.
190$!
191$ ENGINE_OPT := SYS$DISK:[]'ARCH'.OPT
192$ IF TCPIP_LIB .NES. ""
193$ THEN
194$   LINK/'DEBUGGER'/'TRACEBACK' /SHARE='EXE_DIR''ENGINE_NAME'.EXE -
195	'OBJECT_FILE''EXTRA_OBJ', -
196	'CRYPTO_LIB'/LIBRARY, -
197	'ENGINE_OPT'/OPTION,'TCPIP_LIB','OPT_FILE'/OPTION
198$ ELSE
199$   LINK/'DEBUGGER'/'TRACEBACK' /SHARE='EXE_DIR''ENGINE_NAME'.EXE -
200	'OBJECT_FILE''EXTRA_OBJ', -
201        'CRYPTO_LIB'/LIBRARY, -
202	'ENGINE_OPT'/OPTION,'OPT_FILE'/OPTION
203$ ENDIF
204$!
205$! Clean up
206$!
207$ DELETE 'OBJECT_FILE';*
208$!
209$! Next file
210$!
211$ GOTO FILE_NEXT
212$!
213$ FILE_DONE:
214$!
215$! Next engine
216$!
217$ GOTO ENGINE_NEXT
218$!
219$ ENGINE_DONE:
220$!
221$! Talk to the user
222$!
223$ WRITE SYS$OUTPUT "All Done..."
224$ EXIT:
225$ GOSUB CLEANUP
226$ EXIT
227$!
228$! Check For The Link Option FIle.
229$!
230$ CHECK_OPT_FILE:
231$!
232$! Check To See If We Need To Make A VAX C Option File.
233$!
234$ IF (COMPILER.EQS."VAXC")
235$ THEN
236$!
237$!  Check To See If We Already Have A VAX C Linker Option File.
238$!
239$   IF (F$SEARCH(OPT_FILE).EQS."")
240$   THEN
241$!
242$!    We Need A VAX C Linker Option File.
243$!
244$     CREATE 'OPT_FILE'
245$DECK
246!
247! Default System Options File To Link Agianst 
248! The Sharable VAX C Runtime Library.
249!
250SYS$SHARE:VAXCRTL.EXE/SHARE
251$EOD
252$!
253$!  End The Option File Check.
254$!
255$   ENDIF
256$!
257$! End The VAXC Check.
258$!
259$ ENDIF
260$!
261$! Check To See If We Need A GNU C Option File.
262$!
263$ IF (COMPILER.EQS."GNUC")
264$ THEN
265$!
266$!  Check To See If We Already Have A GNU C Linker Option File.
267$!
268$   IF (F$SEARCH(OPT_FILE).EQS."")
269$   THEN
270$!
271$!    We Need A GNU C Linker Option File.
272$!
273$     CREATE 'OPT_FILE'
274$DECK
275!
276! Default System Options File To Link Agianst 
277! The Sharable C Runtime Library.
278!
279GNU_CC:[000000]GCCLIB/LIBRARY
280SYS$SHARE:VAXCRTL/SHARE
281$EOD
282$!
283$!  End The Option File Check.
284$!
285$   ENDIF
286$!
287$! End The GNU C Check.
288$!
289$ ENDIF
290$!
291$! Check To See If We Need A DEC C Option File.
292$!
293$ IF (COMPILER.EQS."DECC")
294$ THEN
295$!
296$!  Check To See If We Already Have A DEC C Linker Option File.
297$!
298$   IF (F$SEARCH(OPT_FILE).EQS."")
299$   THEN
300$!
301$!    Figure Out If We Need An AXP Or A VAX Linker Option File.
302$!
303$     IF ARCH .EQS. "VAX"
304$     THEN
305$!
306$!      We Need A DEC C Linker Option File For VAX.
307$!
308$       CREATE 'OPT_FILE'
309$DECK
310!
311! Default System Options File To Link Agianst 
312! The Sharable DEC C Runtime Library.
313!
314SYS$SHARE:DECC$SHR.EXE/SHARE
315$EOD
316$!
317$!    Else...
318$!
319$     ELSE
320$!
321$!      Create The AXP Linker Option File.
322$!
323$       CREATE 'OPT_FILE'
324$DECK
325!
326! Default System Options File For AXP To Link Agianst 
327! The Sharable C Runtime Library.
328!
329SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
330SYS$SHARE:CMA$OPEN_RTL/SHARE
331$EOD
332$!
333$!    End The VAX/AXP DEC C Option File Check.
334$!
335$     ENDIF
336$!
337$!  End The Option File Search.
338$!
339$   ENDIF
340$!
341$! End The DEC C Check.
342$!
343$ ENDIF
344$!
345$!  Tell The User What Linker Option File We Are Using.
346$!
347$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."	
348$!
349$! Time To RETURN.
350$!
351$ RETURN
352$!
353$! Check The User's Options.
354$!
355$ CHECK_OPTIONS:
356$!
357$! Check To See If OPT_PHASE Is Blank.
358$!
359$ IF (OPT_PHASE.EQS."ALL")
360$ THEN
361$!
362$!   OPT_PHASE Is Blank, So Build Everything.
363$!
364$    BUILDALL = "ALL"
365$!
366$! Else...
367$!
368$ ELSE
369$!
370$!  Else, Check To See If OPT_PHASE Has A Valid Arguement.
371$!
372$   IF ("," + ACCEPT_PHASE + ",") - ("," + OPT_PHASE + ",") -
373       .NES. ("," + ACCEPT_PHASE + ",")
374$   THEN
375$!
376$!    A Valid Arguement.
377$!
378$     BUILDALL = OPT_PHASE
379$!
380$!  Else...
381$!
382$   ELSE
383$!
384$!    Tell The User We Don't Know What They Want.
385$!
386$     WRITE SYS$OUTPUT ""
387$     WRITE SYS$OUTPUT "The option ",OPT_PHASE," is invalid.  The valid options are:"
388$     WRITE SYS$OUTPUT ""
389$     IF ("," + ACCEPT_PHASE + ",") - ",ALL," -
390	.NES. ("," + ACCEPT_PHASE + ",") THEN -
391	WRITE SYS$OUTPUT "    ALL      :  just build everything."
392$     IF ("," + ACCEPT_PHASE + ",") - ",ENGINES," -
393	.NES. ("," + ACCEPT_PHASE + ",") THEN -
394	WRITE SYS$OUTPUT "    ENGINES  :  to compile just the [.xxx.EXE.ENGINES]*.EXE hareable images."
395$     WRITE SYS$OUTPUT ""
396$     WRITE SYS$OUTPUT " where 'xxx' stands for:"
397$     WRITE SYS$OUTPUT ""
398$     WRITE SYS$OUTPUT "        AXP  :  Alpha architecture."
399$     WRITE SYS$OUTPUT "        VAX  :  VAX architecture."
400$     WRITE SYS$OUTPUT ""
401$!
402$!    Time To EXIT.
403$!
404$     EXIT
405$!
406$!  End The Valid Arguement Check.
407$!
408$   ENDIF
409$!
410$! End The OPT_PHASE Check.
411$!
412$ ENDIF
413$!
414$! Check To See If OPT_DEBUG Is Blank.
415$!
416$ IF (OPT_DEBUG.EQS."NODEBUG")
417$ THEN
418$!
419$!   OPT_DEBUG Is NODEBUG, So Compile Without The Debugger Information.
420$!
421$    DEBUGGER = "NODEBUG"
422$    TRACEBACK = "NOTRACEBACK" 
423$    GCC_OPTIMIZE = "OPTIMIZE"
424$    CC_OPTIMIZE = "OPTIMIZE"
425$    MACRO_OPTIMIZE = "OPTIMIZE"
426$    WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
427$    WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
428$ ELSE
429$!
430$!  Check To See If We Are To Compile With Debugger Information.
431$!
432$   IF (OPT_DEBUG.EQS."DEBUG")
433$   THEN
434$!
435$!    Compile With Debugger Information.
436$!
437$     DEBUGGER = "DEBUG"
438$     TRACEBACK = "TRACEBACK"
439$     GCC_OPTIMIZE = "NOOPTIMIZE"
440$     CC_OPTIMIZE = "NOOPTIMIZE"
441$     MACRO_OPTIMIZE = "NOOPTIMIZE"
442$     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
443$     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
444$   ELSE 
445$!
446$!    They Entered An Invalid Option..
447$!
448$     WRITE SYS$OUTPUT ""
449$     WRITE SYS$OUTPUT "The Option ",OPT_DEBUG," Is Invalid.  The Valid Options Are:"
450$     WRITE SYS$OUTPUT ""
451$     WRITE SYS$OUTPUT "     DEBUG   :  Compile With The Debugger Information."
452$     WRITE SYS$OUTPUT "     NODEBUG :  Compile Without The Debugger Information."
453$     WRITE SYS$OUTPUT ""
454$!
455$!    Time To EXIT.
456$!
457$     EXIT
458$!
459$!  End The Valid Arguement Check.
460$!
461$   ENDIF
462$!
463$! End The OPT_DEBUG Check.
464$!
465$ ENDIF
466$!
467$! Special Threads For OpenVMS v7.1 Or Later
468$!
469$! Written By:  Richard Levitte
470$!              richard@levitte.org
471$!
472$!
473$! Check To See If We Have A Option For OPT_SPECIAL_THREADS.
474$!
475$ IF (OPT_SPECIAL_THREADS.EQS."")
476$ THEN
477$!
478$!  Get The Version Of VMS We Are Using.
479$!
480$   ISSEVEN :=
481$   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
482$   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
483$!
484$!  Check To See If The VMS Version Is v7.1 Or Later.
485$!
486$   IF (TMP.GE.71)
487$   THEN
488$!
489$!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
490$!
491$     ISSEVEN := ,PTHREAD_USE_D4
492$!
493$!  End The VMS Version Check.
494$!
495$   ENDIF
496$!
497$! End The OPT_SPECIAL_THREADS Check.
498$!
499$ ENDIF
500$!
501$! Check To See If OPT_COMPILER Is Blank.
502$!
503$ IF (OPT_COMPILER.EQS."")
504$ THEN
505$!
506$!  O.K., The User Didn't Specify A Compiler, Let's Try To
507$!  Find Out Which One To Use.
508$!
509$!  Check To See If We Have GNU C.
510$!
511$   IF (F$TRNLNM("GNU_CC").NES."")
512$   THEN
513$!
514$!    Looks Like GNUC, Set To Use GNUC.
515$!
516$     OPT_COMPILER = "GNUC"
517$!
518$!  Else...
519$!
520$   ELSE
521$!
522$!    Check To See If We Have VAXC Or DECC.
523$!
524$     IF (ARCH.EQS."AXP").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
525$     THEN 
526$!
527$!      Looks Like DECC, Set To Use DECC.
528$!
529$       OPT_COMPILER = "DECC"
530$!
531$!    Else...
532$!
533$     ELSE
534$!
535$!      Looks Like VAXC, Set To Use VAXC.
536$!
537$       OPT_COMPILER = "VAXC"
538$!
539$!    End The VAXC Compiler Check.
540$!
541$     ENDIF
542$!
543$!  End The DECC & VAXC Compiler Check.
544$!
545$   ENDIF
546$!
547$!  End The Compiler Check.
548$!
549$ ENDIF
550$!
551$! Check To See If We Have A Option For OPT_TCPIP_LIB.
552$!
553$ IF (OPT_TCPIP_LIB.EQS."")
554$ THEN
555$!
556$!  Find out what socket library we have available
557$!
558$   IF F$PARSE("SOCKETSHR:") .NES. ""
559$   THEN
560$!
561$!    We have SOCKETSHR, and it is my opinion that it's the best to use.
562$!
563$     OPT_TCPIP_LIB = "SOCKETSHR"
564$!
565$!    Tell the user
566$!
567$     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
568$!
569$!    Else, let's look for something else
570$!
571$   ELSE
572$!
573$!    Like UCX (the reason to do this before Multinet is that the UCX
574$!    emulation is easier to use...)
575$!
576$     IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
577	 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
578	 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
579$     THEN
580$!
581$!	Last resort: a UCX or UCX-compatible library
582$!
583$	OPT_TCPIP_LIB = "UCX"
584$!
585$!      Tell the user
586$!
587$       WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
588$!
589$!	That was all...
590$!
591$     ENDIF
592$   ENDIF
593$ ENDIF
594$!
595$! Set Up Initial CC Definitions, Possibly With User Ones
596$!
597$ CCDEFS = "TCPIP_TYPE_''OPT_TCPIP_LIB',DSO_VMS"
598$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
599$ CCEXTRAFLAGS = ""
600$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
601$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX"
602$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
603	CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
604$!
605$!  Check To See If The User Entered A Valid Paramter.
606$!
607$ IF (OPT_COMPILER.EQS."VAXC").OR.(OPT_COMPILER.EQS."DECC").OR.(OPT_COMPILER.EQS."GNUC")
608$ THEN
609$!
610$!    Check To See If The User Wanted DECC.
611$!
612$   IF (OPT_COMPILER.EQS."DECC")
613$   THEN
614$!
615$!    Looks Like DECC, Set To Use DECC.
616$!
617$     COMPILER = "DECC"
618$!
619$!    Tell The User We Are Using DECC.
620$!
621$     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
622$!
623$!    Use DECC...
624$!
625$     CC = "CC"
626$     IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
627	 THEN CC = "CC/DECC"
628$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
629           "/NOLIST/PREFIX=ALL" + -
630	   "/INCLUDE=(SYS$DISK:[],SYS$DISK:[.VENDOR_DEFNS])" + -
631	   CCEXTRAFLAGS
632$!
633$!    Define The Linker Options File Name.
634$!
635$     OPT_FILE = "SYS$DISK:[]VAX_DECC_OPTIONS.OPT"
636$!
637$!  End DECC Check.
638$!
639$   ENDIF
640$!
641$!  Check To See If We Are To Use VAXC.
642$!
643$   IF (OPT_COMPILER.EQS."VAXC")
644$   THEN
645$!
646$!    Looks Like VAXC, Set To Use VAXC.
647$!
648$     COMPILER = "VAXC"
649$!
650$!    Tell The User We Are Using VAX C.
651$!
652$     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
653$!
654$!    Compile Using VAXC.
655$!
656$     CC = "CC"
657$     IF ARCH.EQS."AXP"
658$     THEN
659$	WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
660$	EXIT
661$     ENDIF
662$     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
663$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
664	   "/INCLUDE=(SYS$DISK:[],SYS$DISK:[-],SYS$DISK:[.ENGINE.VENDOR_DEFNS])" + -
665	   CCEXTRAFLAGS
666$     CCDEFS = """VAXC""," + CCDEFS
667$!
668$!    Define <sys> As SYS$COMMON:[SYSLIB]
669$!
670$     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
671$!
672$!    Define The Linker Options File Name.
673$!
674$     OPT_FILE = "SYS$DISK:[]VAX_VAXC_OPTIONS.OPT"
675$!
676$!  End VAXC Check
677$!
678$   ENDIF
679$!
680$!  Check To See If We Are To Use GNU C.
681$!
682$   IF (OPT_COMPILER.EQS."GNUC")
683$   THEN
684$!
685$!    Looks Like GNUC, Set To Use GNUC.
686$!
687$     COMPILER = "GNUC"
688$!
689$!    Tell The User We Are Using GNUC.
690$!
691$     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
692$!
693$!    Use GNU C...
694$!
695$     CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
696	   "/INCLUDE=(SYS$DISK:[],SYS$DISK:[-],SYS$DISK:[.ENGINE.VENDOR_DEFNS])" + -
697	   CCEXTRAFLAGS
698$!
699$!    Define The Linker Options File Name.
700$!
701$     OPT_FILE = "SYS$DISK:[]VAX_GNUC_OPTIONS.OPT"
702$!
703$!  End The GNU C Check.
704$!
705$   ENDIF
706$!
707$!  Set up default defines
708$!
709$   CCDEFS = """FLAT_INC=1""," + CCDEFS
710$!
711$!  Finish up the definition of CC.
712$!
713$   IF COMPILER .EQS. "DECC"
714$   THEN
715$     IF CCDISABLEWARNINGS .NES. ""
716$     THEN
717$       CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
718$     ENDIF
719$   ELSE
720$     CCDISABLEWARNINGS = ""
721$   ENDIF
722$   CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
723$!
724$!  Show user the result
725$!
726$   WRITE/SYMBOL SYS$OUTPUT "Main C Compiling Command: ",CC
727$!
728$!  Else The User Entered An Invalid Arguement.
729$!
730$ ELSE
731$!
732$!  Tell The User We Don't Know What They Want.
733$!
734$   WRITE SYS$OUTPUT ""
735$   WRITE SYS$OUTPUT "The Option ",OPT_COMPILER," Is Invalid.  The Valid Options Are:"
736$   WRITE SYS$OUTPUT ""
737$   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
738$   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
739$   WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
740$   WRITE SYS$OUTPUT ""
741$!
742$!  Time To EXIT.
743$!
744$   EXIT
745$!
746$! End The Valid Arguement Check.
747$!
748$ ENDIF
749$!
750$! Build a MACRO command for the architecture at hand
751$!
752$ IF ARCH .EQS. "VAX" THEN MACRO = "MACRO/''DEBUGGER'"
753$ IF ARCH .EQS. "AXP" THEN MACRO = "MACRO/MIGRATION/''DEBUGGER'/''MACRO_OPTIMIZE'"
754$!
755$!  Show user the result
756$!
757$ WRITE/SYMBOL SYS$OUTPUT "Main MACRO Compiling Command: ",MACRO
758$!
759$! Time to check the contents, and to make sure we get the correct library.
760$!
761$ IF OPT_TCPIP_LIB.EQS."SOCKETSHR" .OR. OPT_TCPIP_LIB.EQS."MULTINET" -
762     .OR. OPT_TCPIP_LIB.EQS."UCX" .OR. OPT_TCPIP_LIB.EQS."TCPIP" -
763     .OR. OPT_TCPIP_LIB.EQS."NONE"
764$ THEN
765$!
766$!  Check to see if SOCKETSHR was chosen
767$!
768$   IF OPT_TCPIP_LIB.EQS."SOCKETSHR"
769$   THEN
770$!
771$!    Set the library to use SOCKETSHR
772$!
773$     TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
774$!
775$!    Done with SOCKETSHR
776$!
777$   ENDIF
778$!
779$!  Check to see if MULTINET was chosen
780$!
781$   IF OPT_TCPIP_LIB.EQS."MULTINET"
782$   THEN
783$!
784$!    Set the library to use UCX emulation.
785$!
786$     OPT_TCPIP_LIB = "UCX"
787$!
788$!    Done with MULTINET
789$!
790$   ENDIF
791$!
792$!  Check to see if UCX was chosen
793$!
794$   IF OPT_TCPIP_LIB.EQS."UCX"
795$   THEN
796$!
797$!    Set the library to use UCX.
798$!
799$     TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT"
800$     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
801$     THEN
802$       TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
803$     ELSE
804$       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
805	  TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT"
806$     ENDIF
807$!
808$!    Done with UCX
809$!
810$   ENDIF
811$!
812$!  Check to see if TCPIP was chosen
813$!
814$   IF OPT_TCPIP_LIB.EQS."TCPIP"
815$   THEN
816$!
817$!    Set the library to use TCPIP (post UCX).
818$!
819$     TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
820$!
821$!    Done with TCPIP
822$!
823$   ENDIF
824$!
825$!  Check to see if NONE was chosen
826$!
827$   IF OPT_TCPIP_LIB.EQS."NONE"
828$   THEN
829$!
830$!    Do not use a TCPIP library.
831$!
832$     TCPIP_LIB = ""
833$!
834$!    Done with TCPIP
835$!
836$   ENDIF
837$!
838$!  Print info
839$!
840$   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
841$!
842$!  Else The User Entered An Invalid Arguement.
843$!
844$ ELSE
845$!
846$!  Tell The User We Don't Know What They Want.
847$!
848$   WRITE SYS$OUTPUT ""
849$   WRITE SYS$OUTPUT "The Option ",OPT_TCPIP_LIB," Is Invalid.  The Valid Options Are:"
850$   WRITE SYS$OUTPUT ""
851$   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
852$   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
853$   WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP (post UCX) TCP/IP library."
854$   WRITE SYS$OUTPUT ""
855$!
856$!  Time To EXIT.
857$!
858$   EXIT
859$!
860$!  Done with TCP/IP libraries
861$!
862$ ENDIF
863$!
864$!  Time To RETURN...
865$!
866$ RETURN
867$!
868$ INITIALISE:
869$!
870$! Save old value of the logical name OPENSSL
871$!
872$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
873$!
874$! Save directory information
875$!
876$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
877$ __HERE = F$EDIT(__HERE,"UPCASE")
878$ __TOP = __HERE - "ENGINES]"
879$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
880$!
881$! Set up the logical name OPENSSL to point at the include directory
882$!
883$ DEFINE OPENSSL/NOLOG '__INCLUDE'
884$!
885$! Done
886$!
887$ RETURN
888$!
889$ CLEANUP:
890$!
891$! Restore the logical name OPENSSL if it had a value
892$!
893$ IF __SAVE_OPENSSL .EQS. ""
894$ THEN
895$   DEASSIGN OPENSSL
896$ ELSE
897$   DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
898$ ENDIF
899$!
900$! Done
901$!
902$ RETURN
903