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