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