Remove SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER and SSL_OP_TLS_D5_BUG support.
[openssl.git] / ssl / ssl-lib.com
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 $!
23 $!  Specify DEBUG or NODEBUG as P2 to compile with or without debugger
24 $!  information.
25 $!
26 $!  Specify which compiler at P3 to try to compile under.
27 $!
28 $!         VAXC  For VAX C.
29 $!         DECC  For DEC C.
30 $!         GNUC  For GNU C.
31 $!
32 $!  If you don't specify a compiler, it will try to determine which
33 $!  "C" compiler to use.
34 $!
35 $!  P4, if defined, sets a TCP/IP library to use, through one of the following
36 $!  keywords:
37 $!
38 $!      UCX             for UCX
39 $!      TCPIP           for TCPIP (post UCX)
40 $!      SOCKETSHR       for SOCKETSHR+NETLIB
41 $!
42 $!  P5, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
43 $!
44 $!  P6, if defined, specifies the C pointer size.  Ignored on VAX.
45 $!      ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
46 $!      Supported values are:
47 $!
48 $!      ""       Compile with default (/NOPOINTER_SIZE)
49 $!      32       Compile with /POINTER_SIZE=32 (SHORT)
50 $!      64       Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV])
51 $!               (Automatically select ARGV if compiler supports it.)
52 $!      64=      Compile with /POINTER_SIZE=64 (LONG).
53 $!      64=ARGV  Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
54 $!
55 $!  P7, if defined, specifies a directory where ZLIB files (zlib.h,
56 $!  libz.olb) may be found.  Optionally, a non-default object library
57 $!  name may be included ("dev:[dir]libz_64.olb", for example).
58 $!
59 $!
60 $! Announce/identify.
61 $!
62 $ proc = f$environment( "procedure")
63 $ write sys$output "@@@ "+ -
64    f$parse( proc, , , "name")+ f$parse( proc, , , "type")
65 $!
66 $! Define A TCP/IP Library That We Will Need To Link To.
67 $! (That Is, If We Need To Link To One.)
68 $!
69 $ TCPIP_LIB = ""
70 $ ZLIB_LIB = ""
71 $!
72 $! Check What Architecture We Are Using.
73 $!
74 $ IF (F$GETSYI("CPU").LT.128)
75 $ THEN
76 $!
77 $!  The Architecture Is VAX.
78 $!
79 $   ARCH = "VAX"
80 $!
81 $! Else...
82 $!
83 $ ELSE
84 $!
85 $!  The Architecture Is Alpha, IA64 or whatever comes in the future.
86 $!
87 $   ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
88 $   IF (ARCH .EQS. "") THEN ARCH = "UNK"
89 $!
90 $! End The Architecture Check.
91 $!
92 $ ENDIF
93 $!
94 $ ARCHD = ARCH
95 $ LIB32 = "32"
96 $ OPT_FILE = ""
97 $ POINTER_SIZE = ""
98 $!
99 $! Check To Make Sure We Have Valid Command Line Parameters.
100 $!
101 $ GOSUB CHECK_OPTIONS
102 $!
103 $! Define The OBJ and EXE Directories.
104 $!
105 $ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.SSL]
106 $ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.SSL]
107 $!
108 $! Specify the destination directory in any /MAP option.
109 $!
110 $ if (LINKMAP .eqs. "MAP")
111 $ then
112 $   LINKMAP = LINKMAP+ "=''EXE_DIR'"
113 $ endif
114 $!
115 $! Add the location prefix to the linker options file name.
116 $!
117 $ if (OPT_FILE .nes. "")
118 $ then
119 $   OPT_FILE = EXE_DIR+ OPT_FILE
120 $ endif
121 $!
122 $! Initialise logical names and such
123 $!
124 $ GOSUB INITIALISE
125 $!
126 $! Tell The User What Kind of Machine We Run On.
127 $!
128 $ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
129 $!
130 $! Check To See If The Architecture Specific OBJ Directory Exists.
131 $!
132 $ IF (F$PARSE(OBJ_DIR).EQS."")
133 $ THEN
134 $!
135 $!  It Dosen't Exist, So Create It.
136 $!
137 $   CREATE/DIR 'OBJ_DIR'
138 $!
139 $! End The Architecture Specific OBJ Directory Check.
140 $!
141 $ ENDIF
142 $!
143 $! Check To See If The Architecture Specific Directory Exists.
144 $!
145 $ IF (F$PARSE(EXE_DIR).EQS."")
146 $ THEN
147 $!
148 $!  It Dosen't Exist, So Create It.
149 $!
150 $   CREATE/DIR 'EXE_DIR'
151 $!
152 $! End The Architecture Specific Directory Check.
153 $!
154 $ ENDIF
155 $!
156 $! Define The Library Name.
157 $!
158 $ SSL_LIB := 'EXE_DIR'SSL_LIBSSL'LIB32'.OLB
159 $!
160 $! Define The CRYPTO-LIB We Are To Use.
161 $!
162 $ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
163 $!
164 $! Check To See What We Are To Do.
165 $!
166 $ IF (BUILDALL.EQS."TRUE")
167 $ THEN
168 $!
169 $!  Since Nothing Special Was Specified, Do Everything.
170 $!
171 $   GOSUB LIBRARY
172 $!
173 $! Else...
174 $!
175 $ ELSE
176 $!
177 $!  Build Just What The User Wants Us To Build.
178 $!
179 $   GOSUB 'BUILDALL'
180 $!
181 $! End The BUILDALL Check.
182 $!
183 $ ENDIF
184 $!
185 $! Time To EXIT.
186 $!
187 $ EXIT:
188 $ GOSUB CLEANUP
189 $ EXIT   
190 $!
191 $! Compile The Library.
192 $!
193 $ LIBRARY:
194 $!
195 $! Check To See If We Already Have A "[.xxx.EXE.SSL]SSL_LIBSSL''LIB32'.OLB" Library...
196 $!
197 $ IF (F$SEARCH(SSL_LIB).EQS."")
198 $ THEN
199 $!
200 $! Guess Not, Create The Library.
201 $!
202 $   LIBRARY/CREATE/OBJECT 'SSL_LIB'
203 $!
204 $! End The Library Exist Check.
205 $!
206 $ ENDIF
207 $!
208 $! Define The Different SSL "library" Files.
209 $!
210 $ LIB_SSL = "s3_srvr, s3_clnt, s3_lib, s3_enc,s3_pkt,s3_both,s3_cbc,"+ -
211             "t1_meth,  t1_srvr, t1_clnt, t1_lib, t1_enc,       t1_ext,"+ -
212             "d1_meth,  d1_srvr, d1_clnt, d1_lib,        d1_pkt,"+ -
213             "d1_both,d1_srtp,"+ -
214             "ssl_lib,ssl_err2,ssl_cert,ssl_sess,"+ -
215             "ssl_ciph,ssl_stat,ssl_rsa,"+ -
216             "ssl_asn1,ssl_txt,ssl_algs,ssl_conf,"+ -
217             "bio_ssl,ssl_err,t1_reneg,tls_srp,t1_trce,ssl_utst"
218 $!
219 $! Tell The User That We Are Compiling The Library.
220 $!
221 $ WRITE SYS$OUTPUT "Building The ",SSL_LIB," Library."
222 $!
223 $! Define A File Counter And Set It To "0"
224 $!
225 $ FILE_COUNTER = 0
226 $!
227 $! Top Of The File Loop.
228 $!
229 $ NEXT_FILE:
230 $!
231 $! O.K, Extract The File Name From The File List.
232 $!
233 $ FILE_NAME = F$EDIT(F$ELEMENT(FILE_COUNTER,",",LIB_SSL),"TRIM")
234 $!
235 $! Check To See If We Are At The End Of The File List.
236 $!
237 $ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
238 $!
239 $! Increment The Counter.
240 $!
241 $ FILE_COUNTER = FILE_COUNTER + 1
242 $!
243 $! Create The Source File Name.
244 $!
245 $ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
246 $!
247 $! Create The Object File Name.
248 $!
249 $ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
250 $ ON WARNING THEN GOTO NEXT_FILE
251 $!
252 $! Check To See If The File We Want To Compile Is Actually There.
253 $!
254 $ IF (F$SEARCH(SOURCE_FILE).EQS."")
255 $ THEN
256 $!
257 $!  Tell The User That The File Dosen't Exist.
258 $!
259 $   WRITE SYS$OUTPUT ""
260 $   WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
261 $   WRITE SYS$OUTPUT ""
262 $!
263 $!  Exit The Build.
264 $!
265 $   EXIT
266 $!
267 $! End The File Exists Check.
268 $!
269 $ ENDIF
270 $!
271 $!  Tell The User What File We Are Compiling.
272 $!
273 $ WRITE SYS$OUTPUT "    ",FILE_NAME,".c"
274 $!
275 $! Compile The File.
276 $!
277 $ ON ERROR THEN GOTO NEXT_FILE
278 $ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
279 $!
280 $! Add It To The Library.
281 $!
282 $ LIBRARY/REPLACE/OBJECT 'SSL_LIB' 'OBJECT_FILE'
283 $!
284 $! Time To Clean Up The Object File.
285 $!
286 $ DELETE 'OBJECT_FILE';*
287 $!
288 $! Go Back And Get The Next File Name.
289 $!
290 $ GOTO NEXT_FILE
291 $!
292 $! All Done With This Library.
293 $!
294 $ FILE_DONE:
295 $!
296 $! Tell The User That We Are All Done.
297 $!
298 $ WRITE SYS$OUTPUT "Library ",SSL_LIB," Compiled."
299 $!
300 $! Time To RETURN.
301 $!
302 $ RETURN
303 $!
304 $! Check The User's Options.
305 $!
306 $ CHECK_OPTIONS:
307 $!
308 $! Check To See If P1 Is Blank.
309 $!
310 $ IF (P1.EQS."ALL")
311 $ THEN
312 $!
313 $!   P1 Is Blank, So Build Everything.
314 $!
315 $    BUILDALL = "TRUE"
316 $!
317 $! Else...
318 $!
319 $ ELSE
320 $!
321 $!  Else, Check To See If P1 Has A Valid Argument.
322 $!
323 $   IF (P1.EQS."LIBRARY")
324 $   THEN
325 $!
326 $!    A Valid Argument.
327 $!
328 $     BUILDALL = P1
329 $!
330 $!  Else...
331 $!
332 $   ELSE
333 $!
334 $!    Tell The User We Don't Know What They Want.
335 $!
336 $     WRITE SYS$OUTPUT ""
337 $     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
338 $     WRITE SYS$OUTPUT ""
339 $     WRITE SYS$OUTPUT "    ALL      :  Just Build Everything."
340 $     WRITE SYS$OUTPUT "    LIBRARY  :  To Compile Just The [.xxx.EXE.SSL]LIBSSL.OLB Library."
341 $     WRITE SYS$OUTPUT ""
342 $     WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
343 $     WRITE SYS$OUTPUT ""
344 $     WRITE SYS$OUTPUT "    ALPHA[64]:  Alpha Architecture."
345 $     WRITE SYS$OUTPUT "    IA64[64] :  IA64 Architecture."
346 $     WRITE SYS$OUTPUT "    VAX      :  VAX Architecture."
347 $     WRITE SYS$OUTPUT ""
348 $!
349 $!    Time To EXIT.
350 $!
351 $     EXIT
352 $!
353 $!  End The Valid Argument Check.
354 $!
355 $   ENDIF
356 $!
357 $! End The P1 Check.
358 $!
359 $ ENDIF
360 $!
361 $! Check To See If P2 Is Blank.
362 $!
363 $ IF (P2.EQS."NODEBUG")
364 $ THEN
365 $!
366 $!  P2 Is NODEBUG, So Compile Without Debugger Information.
367 $!
368 $   DEBUGGER  = "NODEBUG"
369 $   LINKMAP = "NOMAP"
370 $   TRACEBACK = "NOTRACEBACK" 
371 $   GCC_OPTIMIZE = "OPTIMIZE"
372 $   CC_OPTIMIZE = "OPTIMIZE"
373 $   WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
374 $   WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
375 $!
376 $! Else...
377 $!
378 $ ELSE
379 $!
380 $!  Check To See If We Are To Compile With Debugger Information.
381 $!
382 $   IF (P2.EQS."DEBUG")
383 $   THEN
384 $!
385 $!    Compile With Debugger Information.
386 $!
387 $     DEBUGGER  = "DEBUG"
388 $     LINKMAP = "MAP"
389 $     TRACEBACK = "TRACEBACK"
390 $     GCC_OPTIMIZE = "NOOPTIMIZE"
391 $     CC_OPTIMIZE = "NOOPTIMIZE"
392 $     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
393 $     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
394 $   ELSE
395 $!
396 $!    Tell The User Entered An Invalid Option.
397 $!
398 $     WRITE SYS$OUTPUT ""
399 $     WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
400 $     WRITE SYS$OUTPUT ""
401 $     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
402 $     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
403 $     WRITE SYS$OUTPUT ""
404 $!
405 $!    Time To EXIT.
406 $!
407 $     EXIT
408 $!
409 $!  End The Valid Argument Check.
410 $!
411 $   ENDIF
412 $!
413 $! End The P2 Check.
414 $!
415 $ ENDIF
416 $!
417 $! Special Threads For OpenVMS v7.1 Or Later
418 $!
419 $! Written By:  Richard Levitte
420 $!              richard@levitte.org
421 $!
422 $!
423 $! Check To See If We Have A Option For P5.
424 $!
425 $ IF (P5.EQS."")
426 $ THEN
427 $!
428 $!  Get The Version Of VMS We Are Using.
429 $!
430 $   ISSEVEN :=
431 $   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
432 $   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
433 $!
434 $!  Check To See If The VMS Version Is v7.1 Or Later.
435 $!
436 $   IF (TMP.GE.71)
437 $   THEN
438 $!
439 $!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
440 $!
441 $     ISSEVEN := ,PTHREAD_USE_D4
442 $!
443 $!  End The VMS Version Check.
444 $!
445 $   ENDIF
446 $!
447 $! End The P5 Check.
448 $!
449 $ ENDIF
450 $!
451 $! Check P6 (POINTER_SIZE).
452 $!
453 $ IF (P6 .NES. "") .AND. (ARCH .NES. "VAX")
454 $ THEN
455 $!
456 $   IF (P6 .EQS. "32")
457 $   THEN
458 $     POINTER_SIZE = " /POINTER_SIZE=32"
459 $   ELSE
460 $     POINTER_SIZE = F$EDIT( P6, "COLLAPSE, UPCASE")
461 $     IF ((POINTER_SIZE .EQS. "64") .OR. -
462        (POINTER_SIZE .EQS. "64=") .OR. -
463        (POINTER_SIZE .EQS. "64=ARGV"))
464 $     THEN
465 $       ARCHD = ARCH+ "_64"
466 $       LIB32 = ""
467 $       POINTER_SIZE = " /POINTER_SIZE=64"
468 $     ELSE
469 $!
470 $!      Tell The User Entered An Invalid Option.
471 $!
472 $       WRITE SYS$OUTPUT ""
473 $       WRITE SYS$OUTPUT "The Option ", P6, -
474          " Is Invalid.  The Valid Options Are:"
475 $       WRITE SYS$OUTPUT ""
476 $       WRITE SYS$OUTPUT -
477          "    """"       :  Compile with default (short) pointers."
478 $       WRITE SYS$OUTPUT -
479          "    32       :  Compile with 32-bit (short) pointers."
480 $       WRITE SYS$OUTPUT -
481          "    64       :  Compile with 64-bit (long) pointers (auto ARGV)."
482 $       WRITE SYS$OUTPUT -
483          "    64=      :  Compile with 64-bit (long) pointers (no ARGV)."
484 $       WRITE SYS$OUTPUT -
485          "    64=ARGV  :  Compile with 64-bit (long) pointers (ARGV)."
486 $       WRITE SYS$OUTPUT ""
487 $! 
488 $!      Time To EXIT.
489 $!
490 $       EXIT
491 $!
492 $     ENDIF
493 $!
494 $   ENDIF
495 $!
496 $! End The P6 (POINTER_SIZE) Check.
497 $!
498 $ ENDIF
499 $!
500 $! Set basic C compiler /INCLUDE directories.
501 $!
502 $ CC_INCLUDES = "SYS$DISK:[-.CRYPTO],SYS$DISK:[-]"
503 $!
504 $! Check To See If P3 Is Blank.
505 $!
506 $ IF (P3.EQS."")
507 $ THEN
508 $!
509 $!  O.K., The User Didn't Specify A Compiler, Let's Try To
510 $!  Find Out Which One To Use.
511 $!
512 $!  Check To See If We Have GNU C.
513 $!
514 $   IF (F$TRNLNM("GNU_CC").NES."")
515 $   THEN
516 $!
517 $!    Looks Like GNUC, Set To Use GNUC.
518 $!
519 $     P3 = "GNUC"
520 $!
521 $!  End The GNU C Compiler Check.
522 $!
523 $   ELSE
524 $!
525 $!  Check To See If We Have VAXC Or DECC.
526 $!
527 $     IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
528 $     THEN 
529 $!
530 $!      Looks Like DECC, Set To Use DECC.
531 $!
532 $       P3 = "DECC"
533 $!
534 $!      Else...
535 $!
536 $     ELSE
537 $!
538 $!      Looks Like VAXC, Set To Use VAXC.
539 $!
540 $       P3 = "VAXC"
541 $!
542 $!    End The VAXC Compiler Check.
543 $!
544 $     ENDIF
545 $!
546 $!  End The DECC & VAXC Compiler Check.
547 $!
548 $   ENDIF
549 $!
550 $!  End The Compiler Check.
551 $!
552 $ ENDIF
553 $!
554 $! Check To See If We Have A Option For P4.
555 $!
556 $ IF (P4.EQS."")
557 $ THEN
558 $!
559 $!  Find out what socket library we have available
560 $!
561 $   IF F$PARSE("SOCKETSHR:") .NES. ""
562 $   THEN
563 $!
564 $!    We have SOCKETSHR, and it is my opinion that it's the best to use.
565 $!
566 $     P4 = "SOCKETSHR"
567 $!
568 $!    Tell the user
569 $!
570 $     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
571 $!
572 $!    Else, let's look for something else
573 $!
574 $   ELSE
575 $!
576 $!    Like UCX (the reason to do this before Multinet is that the UCX
577 $!    emulation is easier to use...)
578 $!
579 $     IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
580          .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
581          .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
582 $     THEN
583 $!
584 $!      Last resort: a UCX or UCX-compatible library
585 $!
586 $       P4 = "UCX"
587 $!
588 $!      Tell the user
589 $!
590 $       WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
591 $!
592 $!      That was all...
593 $!
594 $     ENDIF
595 $   ENDIF
596 $ ENDIF
597 $!
598 $! Set Up Initial CC Definitions, Possibly With User Ones
599 $!
600 $ CCDEFS = "TCPIP_TYPE_''P4'"
601 $ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
602 $ CCEXTRAFLAGS = ""
603 $ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
604 $ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
605 $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
606         CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
607 $!
608 $! Check To See If We Have A ZLIB Option.
609 $!
610 $ ZLIB = P7
611 $ IF (ZLIB .NES. "")
612 $ THEN
613 $!
614 $!  Check for expected ZLIB files.
615 $!
616 $   err = 0
617 $   file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
618 $   if (f$search( file1) .eqs. "")
619 $   then
620 $     WRITE SYS$OUTPUT ""
621 $     WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
622 $     WRITE SYS$OUTPUT "    Can't find header: ''file1'"
623 $     err = 1
624 $   endif
625 $   file1 = f$parse( "A.;", ZLIB)- "A.;"
626 $!
627 $   file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
628 $   if (f$search( file2) .eqs. "")
629 $   then
630 $     if (err .eq. 0)
631 $     then
632 $       WRITE SYS$OUTPUT ""
633 $       WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
634 $     endif
635 $     WRITE SYS$OUTPUT "    Can't find library: ''file2'"
636 $     WRITE SYS$OUTPUT ""
637 $     err = err+ 2
638 $   endif
639 $   if (err .eq. 1)
640 $   then
641 $     WRITE SYS$OUTPUT ""
642 $   endif
643 $!
644 $   if (err .ne. 0)
645 $   then
646 $     EXIT
647 $   endif
648 $!
649 $   CCDEFS = """ZLIB=1"", "+ CCDEFS
650 $   CC_INCLUDES = CC_INCLUDES+ ", "+ file1
651 $   ZLIB_LIB = ", ''file2' /library"
652 $!
653 $!  Print info
654 $!
655 $   WRITE SYS$OUTPUT "ZLIB library spec: ", file2
656 $!
657 $! End The ZLIB Check.
658 $!
659 $ ENDIF
660 $!
661 $!  Check To See If The User Entered A Valid Parameter.
662 $!
663 $ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
664 $ THEN
665 $!
666 $!  Check To See If The User Wanted DECC.
667 $!
668 $   IF (P3.EQS."DECC")
669 $   THEN
670 $!
671 $!    Looks Like DECC, Set To Use DECC.
672 $!
673 $     COMPILER = "DECC"
674 $!
675 $!    Tell The User We Are Using DECC.
676 $!
677 $     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
678 $!
679 $!    Use DECC...
680 $!
681 $     CC = "CC"
682 $     IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
683          THEN CC = "CC/DECC"
684 $     CC = CC + " /''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ -
685        "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + -
686        " /INCLUDE=(''CC_INCLUDES') " + CCEXTRAFLAGS
687 $!
688 $!    Define The Linker Options File Name.
689 $!
690 $     OPT_FILE = "VAX_DECC_OPTIONS.OPT"
691 $!
692 $!  End DECC Check.
693 $!
694 $   ENDIF
695 $!
696 $!  Check To See If We Are To Use VAXC.
697 $!
698 $   IF (P3.EQS."VAXC")
699 $   THEN
700 $!
701 $!    Looks Like VAXC, Set To Use VAXC.
702 $!
703 $     COMPILER = "VAXC"
704 $!
705 $!    Tell The User We Are Using VAX C.
706 $!
707 $     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
708 $!
709 $!    Compile Using VAXC.
710 $!
711 $     CC = "CC"
712 $     IF ARCH.NES."VAX"
713 $     THEN
714 $       WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
715 $       EXIT
716 $     ENDIF
717 $     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
718 $     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
719            "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
720 $     CCDEFS = CCDEFS + ",""VAXC"""
721 $!
722 $!    Define <sys> As SYS$COMMON:[SYSLIB]
723 $!
724 $     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
725 $!
726 $!    Define The Linker Options File Name.
727 $!
728 $     OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
729 $!
730 $!  End VAXC Check
731 $!
732 $   ENDIF
733 $!
734 $!  Check To See If We Are To Use GNU C.
735 $!
736 $   IF (P3.EQS."GNUC")
737 $   THEN
738 $!
739 $!    Looks Like GNUC, Set To Use GNUC.
740 $!
741 $     COMPILER = "GNUC"
742 $!
743 $!    Tell The User We Are Using GNUC.
744 $!
745 $     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
746 $!
747 $!    Use GNU C...
748 $!
749 $     IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
750 $     CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
751            "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
752 $!
753 $!    Define The Linker Options File Name.
754 $!
755 $     OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
756 $!
757 $!  End The GNU C Check.
758 $!
759 $   ENDIF
760 $!
761 $!  Set up default defines
762 $!
763 $   CCDEFS = """FLAT_INC=1""," + CCDEFS
764 $!
765 $!  Finish up the definition of CC.
766 $!
767 $   IF COMPILER .EQS. "DECC"
768 $   THEN
769 $     IF CCDISABLEWARNINGS .EQS. ""
770 $     THEN
771 $       CC4DISABLEWARNINGS = "DOLLARID"
772 $     ELSE
773 $       CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
774 $       CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
775 $     ENDIF
776 $     CC4DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
777 $   ELSE
778 $     CCDISABLEWARNINGS = ""
779 $     CC4DISABLEWARNINGS = ""
780 $   ENDIF
781 $   CC2 = CC + " /DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
782 $   CC3 = CC + " /DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS
783 $   CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
784 $   IF COMPILER .EQS. "DECC"
785 $   THEN
786 $     CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS
787 $   ELSE
788 $     CC4 = CC
789 $   ENDIF
790 $!
791 $!  Show user the result
792 $!
793 $   WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC
794 $!
795 $!  Else The User Entered An Invalid Argument.
796 $!
797 $ ELSE
798 $!
799 $!  Tell The User We Don't Know What They Want.
800 $!
801 $   WRITE SYS$OUTPUT ""
802 $   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
803 $   WRITE SYS$OUTPUT ""
804 $   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
805 $   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
806 $   WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
807 $   WRITE SYS$OUTPUT ""
808 $!
809 $!  Time To EXIT.
810 $!
811 $   EXIT
812 $ ENDIF
813 $!
814 $! Time to check the contents, and to make sure we get the correct library.
815 $!
816 $ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX" -
817      .OR. P4.EQS."TCPIP" .OR. P4.EQS."NONE"
818 $ THEN
819 $!
820 $!  Check to see if SOCKETSHR was chosen
821 $!
822 $   IF P4.EQS."SOCKETSHR"
823 $   THEN
824 $!
825 $!    Set the library to use SOCKETSHR
826 $!
827 $     TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
828 $!
829 $!    Done with SOCKETSHR
830 $!
831 $   ENDIF
832 $!
833 $!  Check to see if MULTINET was chosen
834 $!
835 $   IF P4.EQS."MULTINET"
836 $   THEN
837 $!
838 $!    Set the library to use UCX emulation.
839 $!
840 $     P4 = "UCX"
841 $!
842 $!    Done with MULTINET
843 $!
844 $   ENDIF
845 $!
846 $!  Check to see if UCX was chosen
847 $!
848 $   IF P4.EQS."UCX"
849 $   THEN
850 $!
851 $!    Set the library to use UCX.
852 $!
853 $     TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
854 $     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
855 $     THEN
856 $       TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
857 $     ELSE
858 $       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
859           TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
860 $     ENDIF
861 $!
862 $!    Done with UCX
863 $!
864 $   ENDIF
865 $!
866 $!  Check to see if TCPIP was chosen
867 $!
868 $   IF P4.EQS."TCPIP"
869 $   THEN
870 $!
871 $!    Set the library to use TCPIP (post UCX).
872 $!
873 $     TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
874 $!
875 $!    Done with TCPIP
876 $!
877 $   ENDIF
878 $!
879 $!  Check to see if NONE was chosen
880 $!
881 $   IF P4.EQS."NONE"
882 $   THEN
883 $!
884 $!    Do not use a TCPIP library.
885 $!
886 $     TCPIP_LIB = ""
887 $!
888 $!    Done with NONE
889 $!
890 $   ENDIF
891 $!
892 $!  Print info
893 $!
894 $   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
895 $!
896 $!  Else The User Entered An Invalid Argument.
897 $!
898 $ ELSE
899 $!
900 $!  Tell The User We Don't Know What They Want.
901 $!
902 $   WRITE SYS$OUTPUT ""
903 $   WRITE SYS$OUTPUT "The Option ",P4," Is Invalid.  The Valid Options Are:"
904 $   WRITE SYS$OUTPUT ""
905 $   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
906 $   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
907 $   WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP (post UCX) TCP/IP library."
908 $   WRITE SYS$OUTPUT ""
909 $!
910 $!  Time To EXIT.
911 $!
912 $   EXIT
913 $!
914 $!  Done with TCP/IP libraries
915 $!
916 $ ENDIF
917 $!
918 $!  Time To RETURN...
919 $!
920 $ RETURN
921 $!
922 $ INITIALISE:
923 $!
924 $! Save old value of the logical name OPENSSL
925 $!
926 $ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
927 $!
928 $! Save directory information
929 $!
930 $ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
931 $ __HERE = F$EDIT(__HERE,"UPCASE")
932 $ __TOP = __HERE - "SSL]"
933 $ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
934 $!
935 $! Set up the logical name OPENSSL to point at the include directory
936 $!
937 $ DEFINE OPENSSL/NOLOG '__INCLUDE'
938 $!
939 $! Done
940 $!
941 $ RETURN
942 $!
943 $ CLEANUP:
944 $!
945 $! Restore the logical name OPENSSL if it had a value
946 $!
947 $ IF __SAVE_OPENSSL .EQS. ""
948 $ THEN
949 $   DEASSIGN OPENSSL
950 $ ELSE
951 $   DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
952 $ ENDIF
953 $!
954 $! Done
955 $!
956 $ RETURN