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