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