Move MAC computations for Finished from ssl3_read_bytes into
[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"
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 $ IF (P2.EQS."NORSAREF")
651 $ THEN
652 $!
653 $!   P2 Is NORSAREF, So Compile With The Regular RSA Libraries.
654 $!
655 $    RSAREF = "FALSE"
656 $!
657 $! Else...
658 $!
659 $ ELSE
660 $!
661 $!  Check To See If We Are To Use The RSAREF Library.
662 $!
663 $   IF (P2.EQS."RSAREF")
664 $   THEN
665 $!
666 $!    Check To Make Sure We Have The RSAREF Source Code Directory.
667 $!
668 $     IF (F$SEARCH("SYS$DISK:[-.RSAREF]SOURCE.DIR").EQS."")
669 $     THEN
670 $!
671 $!      We Don't Have The RSAREF Souce Code Directory, So Tell The
672 $!      User This.
673 $!
674 $       WRITE SYS$OUTPUT ""
675 $       WRITE SYS$OUTPUT "It appears that you don't have the RSAREF Souce Code."
676 $       WRITE SYS$OUTPUT "You need to go to 'ftp://ftp.rsa.com/rsaref'.  You have to"
677 $       WRITE SYS$OUTPUT "get the '.tar-Z' file as the '.zip' file dosen't have the"
678 $       WRITE SYS$OUTPUT "directory structure stored.  You have to extract the file"
679 $       WRITE SYS$OUTPUT "into the [.RSAREF] directory under the root directory"
680 $       WRITE SYS$OUTPUT "as that is where the scripts will look for the files."
681 $       WRITE SYS$OUTPUT ""
682 $!
683 $!      Time To Exit.
684 $!
685 $       EXIT
686 $!
687 $!    Else, Compile Using The RSAREF Library.
688 $!
689 $     ELSE
690 $       RSAREF = "TRUE"
691 $     ENDIF
692 $   ELSE 
693 $!
694 $!    They Entered An Invalid Option..
695 $!
696 $     WRITE SYS$OUTPUT ""
697 $     WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
698 $     WRITE SYS$OUTPUT ""
699 $     WRITE SYS$OUTPUT "     RSAREF   :  Compile With The RSAREF Library."
700 $     WRITE SYS$OUTPUT "     NORSAREF :  Compile With The Regular RSA Library."
701 $     WRITE SYS$OUTPUT ""
702 $!
703 $!    Time To EXIT.
704 $!
705 $     EXIT
706 $!
707 $!  End The Valid Arguement Check.
708 $!
709 $   ENDIF
710 $!
711 $! End The P2 Check.
712 $!
713 $ ENDIF
714 $!
715 $! Check To See If P3 Is Blank.
716 $!
717 $ IF (P3.EQS."NODEBUG")
718 $ THEN
719 $!
720 $!   P3 Is NODEBUG, So Compile Without Debugger Information.
721 $!
722 $    DEBUGGER  = "NODEBUG"
723 $    TRACEBACK = "NOTRACEBACK" 
724 $    GCC_OPTIMIZE = "OPTIMIZE"
725 $    CC_OPTIMIZE = "OPTIMIZE"
726 $    WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
727 $    WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
728 $!
729 $! Else...
730 $!
731 $ ELSE
732 $!
733 $!  Check To See If We Are To Compile With Debugger Information.
734 $!
735 $   IF (P3.EQS."DEBUG")
736 $   THEN
737 $!
738 $!    Compile With Debugger Information.
739 $!
740 $     DEBUGGER  = "DEBUG"
741 $     TRACEBACK = "TRACEBACK"
742 $     GCC_OPTIMIZE = "NOOPTIMIZE"
743 $     CC_OPTIMIZE = "NOOPTIMIZE"
744 $     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
745 $     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
746 $   ELSE
747 $!
748 $!    Tell The User Entered An Invalid Option..
749 $!
750 $     WRITE SYS$OUTPUT ""
751 $     WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
752 $     WRITE SYS$OUTPUT ""
753 $     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
754 $     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
755 $     WRITE SYS$OUTPUT ""
756 $!
757 $!    Time To EXIT.
758 $!
759 $     EXIT
760 $!
761 $!  End The Valid Arguement Check.
762 $!
763 $   ENDIF
764 $!
765 $! End The P3 Check.
766 $!
767 $ ENDIF
768 $!
769 $! Special Threads For OpenVMS v7.1 Or Later
770 $!
771 $! Written By:  Richard Levitte
772 $!              richard@levitte.org
773 $!
774 $!
775 $! Check To See If We Have A Option For P6.
776 $!
777 $ IF (P6.EQS."")
778 $ THEN
779 $!
780 $!  Get The Version Of VMS We Are Using.
781 $!
782 $   ISSEVEN :=
783 $   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
784 $   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
785 $!
786 $!  Check To See If The VMS Version Is v7.1 Or Later.
787 $!
788 $   IF (TMP.GE.71)
789 $   THEN
790 $!
791 $!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
792 $!
793 $     ISSEVEN := ,PTHREAD_USE_D4
794 $!
795 $!  End The VMS Version Check.
796 $!
797 $   ENDIF
798 $!
799 $! End The P6 Check.
800 $!
801 $ ENDIF
802 $!
803 $! Check To See If P4 Is Blank.
804 $!
805 $ IF (P4.EQS."")
806 $ THEN
807 $!
808 $!  O.K., The User Didn't Specify A Compiler, Let's Try To
809 $!  Find Out Which One To Use.
810 $!
811 $!  Check To See If We Have GNU C.
812 $!
813 $   IF (F$TRNLNM("GNU_CC").NES."")
814 $   THEN
815 $!
816 $!    Looks Like GNUC, Set To Use GNUC.
817 $!
818 $     P4 = "GNUC"
819 $!
820 $!  End The GNU C Compiler Check.
821 $!
822 $   ELSE
823 $!
824 $!  Check To See If We Have VAXC Or DECC.
825 $!
826 $     IF (ARCH.EQS."AXP").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
827 $     THEN 
828 $!
829 $!      Looks Like DECC, Set To Use DECC.
830 $!
831 $       P4 = "DECC"
832 $!
833 $!      Else...
834 $!
835 $     ELSE
836 $!
837 $!      Looks Like VAXC, Set To Use VAXC.
838 $!
839 $       P4 = "VAXC"
840 $!
841 $!    End The VAXC Compiler Check.
842 $!
843 $     ENDIF
844 $!
845 $!  End The DECC & VAXC Compiler Check.
846 $!
847 $   ENDIF
848 $!
849 $!  End The Compiler Check.
850 $!
851 $ ENDIF
852 $!
853 $! Check To See If We Have A Option For P5.
854 $!
855 $ IF (P5.EQS."")
856 $ THEN
857 $!
858 $!  Find out what socket library we have available
859 $!
860 $   IF F$PARSE("SOCKETSHR:") .NES. ""
861 $   THEN
862 $!
863 $!    We have SOCKETSHR, and it is my opinion that it's the best to use.
864 $!
865 $     P5 = "SOCKETSHR"
866 $!
867 $!    Tell the user
868 $!
869 $     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
870 $!
871 $!    Else, let's look for something else
872 $!
873 $   ELSE
874 $!
875 $!    Like UCX (the reason to do this before Multinet is that the UCX
876 $!    emulation is easier to use...)
877 $!
878 $     IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
879          .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
880          .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
881 $     THEN
882 $!
883 $!      Last resort: a UCX or UCX-compatible library
884 $!
885 $       P5 = "UCX"
886 $!
887 $!      Tell the user
888 $!
889 $       WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
890 $!
891 $!      That was all...
892 $!
893 $     ENDIF
894 $   ENDIF
895 $ ENDIF
896 $!
897 $! Set Up Initial CC Definitions, Possibly With User Ones
898 $!
899 $ CCDEFS = "VMS=1,TCPIP_TYPE_''P5'"
900 $ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
901 $ CCEXTRAFLAGS = ""
902 $ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
903 $ CCDISABLEWARNINGS = ""
904 $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
905         CCDISABLEWARNINGS = USER_CCDISABLEWARNINGS
906 $!$ CCDISABLEWARNINGS = "NONSTANDCAST"
907 $!$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
908 $!      CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
909 $!
910 $!  Check To See If The User Entered A Valid Paramter.
911 $!
912 $ IF (P4.EQS."VAXC").OR.(P4.EQS."DECC").OR.(P4.EQS."GNUC")
913 $ THEN
914 $!
915 $!  Check To See If The User Wanted DECC.
916 $!
917 $   IF (P4.EQS."DECC")
918 $   THEN
919 $!
920 $!    Looks Like DECC, Set To Use DECC.
921 $!
922 $     COMPILER = "DECC"
923 $!
924 $!    Tell The User We Are Using DECC.
925 $!
926 $     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
927 $!
928 $!    Use DECC...
929 $!
930 $     CC = "CC"
931 $     IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
932          THEN CC = "CC/DECC"
933 $     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
934            "/NOLIST/PREFIX=ALL" + -
935            "/INCLUDE=(SYS$DISK:[-.CRYPTO],SYS$DISK:[.SOURCE])" + CCEXTRAFLAGS
936 $!
937 $!    Define The Linker Options File Name.
938 $!
939 $     OPT_FILE = "SYS$DISK:[]VAX_DECC_OPTIONS.OPT"
940 $!
941 $!  End DECC Check.
942 $!
943 $   ENDIF
944 $!
945 $!  Check To See If We Are To Use VAXC.
946 $!
947 $   IF (P4.EQS."VAXC")
948 $   THEN
949 $!
950 $!    Looks Like VAXC, Set To Use VAXC.
951 $!
952 $     COMPILER = "VAXC"
953 $!
954 $!    Tell The User We Are Using VAX C.
955 $!
956 $     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
957 $!
958 $!    Compile Using VAXC.
959 $!
960 $     CC = "CC"
961 $     IF ARCH.EQS."AXP"
962 $     THEN
963 $       WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
964 $       EXIT
965 $     ENDIF
966 $     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
967 $     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
968            "/INCLUDE=(SYS$DISK:[-.CRYPTO],SYS$DISK:[.SOURCE])" + CCEXTRAFLAGS
969 $     CCDEFS = CCDEFS + ",""VAXC"""
970 $!
971 $!    Define <sys> As SYS$COMMON:[SYSLIB]
972 $!
973 $     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
974 $!
975 $!    Define The Linker Options File Name.
976 $!
977 $     OPT_FILE = "SYS$DISK:[]VAX_VAXC_OPTIONS.OPT"
978 $!
979 $!  End VAXC Check
980 $!
981 $   ENDIF
982 $!
983 $!  Check To See If We Are To Use GNU C.
984 $!
985 $   IF (P4.EQS."GNUC")
986 $   THEN
987 $!
988 $!    Looks Like GNUC, Set To Use GNUC.
989 $!
990 $     COMPILER = "GNUC"
991 $!
992 $!    Tell The User We Are Using GNUC.
993 $!
994 $     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
995 $!
996 $!    Use GNU C...
997 $!
998 $     IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
999 $     CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
1000            "/INCLUDE=(SYS$DISK:[-.CRYPTO],SYS$DISK:[.SOURCE])" + CCEXTRAFLAGS
1001 $!
1002 $!    Define The Linker Options File Name.
1003 $!
1004 $     OPT_FILE = "SYS$DISK:[]VAX_GNUC_OPTIONS.OPT"
1005 $!
1006 $!  End The GNU C Check.
1007 $!
1008 $   ENDIF
1009 $!
1010 $!  Set up default defines
1011 $!
1012 $   CCDEFS = """FLAT_INC=1""," + CCDEFS
1013 $!
1014 $!  Check To See If We Are To Compile With RSAREF Routines.
1015 $!
1016 $   IF (RSAREF.EQS."TRUE")
1017 $   THEN
1018 $!
1019 $!    Compile With RSAREF.
1020 $!
1021 $     CCDEFS = CCDEFS + ",""RSAref=1"""
1022 $!
1023 $!    Tell The User This.
1024 $!
1025 $     WRITE SYS$OUTPUT "Compiling With RSAREF Routines."
1026 $!
1027 $!    Else, We Don't Care.  Compile Without The RSAREF Library.
1028 $!
1029 $   ELSE
1030 $!
1031 $!    Tell The User We Are Compile Without The RSAREF Routines.
1032 $!
1033 $     WRITE SYS$OUTPUT "Compiling Without The RSAREF Routines.
1034 $!
1035 $!  End The RSAREF Check.
1036 $!
1037 $   ENDIF
1038 $!
1039 $!  Finish up the definition of CC.
1040 $!
1041 $   IF COMPILER .EQS. "DECC"
1042 $   THEN
1043 $     IF CCDISABLEWARNINGS .EQS. ""
1044 $     THEN
1045 $       CC4DISABLEWARNINGS = "DOLLARID"
1046 $     ELSE
1047 $       CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
1048 $       CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
1049 $     ENDIF
1050 $     CC4DISABLEWARNINGS = "/WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
1051 $   ELSE
1052 $     CCDISABLEWARNINGS = ""
1053 $     CC4DISABLEWARNINGS = ""
1054 $   ENDIF
1055 $   CC2 = CC + "/DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
1056 $   CC3 = CC + "/DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS
1057 $   CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
1058 $   IF COMPILER .EQS. "DECC"
1059 $   THEN
1060 $     CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS
1061 $     CC5 = CC3 - CCDISABLEWARNINGS + CC4DISABLEWARNINGS
1062 $   ELSE
1063 $     CC4 = CC
1064 $     CC5 = CC3
1065 $   ENDIF
1066 $!
1067 $!  Show user the result
1068 $!
1069 $   WRITE SYS$OUTPUT "Main Compiling Command: ",CC
1070 $!
1071 $!  Else The User Entered An Invalid Arguement.
1072 $!
1073 $ ELSE
1074 $!
1075 $!  Tell The User We Don't Know What They Want.
1076 $!
1077 $   WRITE SYS$OUTPUT ""
1078 $   WRITE SYS$OUTPUT "The Option ",P4," Is Invalid.  The Valid Options Are:"
1079 $   WRITE SYS$OUTPUT ""
1080 $   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
1081 $   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
1082 $   WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
1083 $   WRITE SYS$OUTPUT ""
1084 $!
1085 $!  Time To EXIT.
1086 $!
1087 $   EXIT
1088 $ ENDIF
1089 $!
1090 $! Time to check the contents, and to make sure we get the correct library.
1091 $!
1092 $ IF P5.EQS."SOCKETSHR" .OR. P5.EQS."MULTINET" .OR. P5.EQS."UCX"
1093 $ THEN
1094 $!
1095 $!  Check to see if SOCKETSHR was chosen
1096 $!
1097 $   IF P5.EQS."SOCKETSHR"
1098 $   THEN
1099 $!
1100 $!    Set the library to use SOCKETSHR
1101 $!
1102 $     TCPIP_LIB = "[-.VMS]SOCKETSHR_SHR.OPT/OPT"
1103 $!
1104 $!    Done with SOCKETSHR
1105 $!
1106 $   ENDIF
1107 $!
1108 $!  Check to see if MULTINET was chosen
1109 $!
1110 $   IF P5.EQS."MULTINET"
1111 $   THEN
1112 $!
1113 $!    Set the library to use UCX emulation.
1114 $!
1115 $     P5 = "UCX"
1116 $!
1117 $!    Done with MULTINET
1118 $!
1119 $   ENDIF
1120 $!
1121 $!  Check to see if UCX was chosen
1122 $!
1123 $   IF P5.EQS."UCX"
1124 $   THEN
1125 $!
1126 $!    Set the library to use UCX.
1127 $!
1128 $     TCPIP_LIB = "[-.VMS]UCX_SHR_DECC.OPT/OPT"
1129 $     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
1130 $     THEN
1131 $       TCPIP_LIB = "[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
1132 $     ELSE
1133 $       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
1134           TCPIP_LIB = "[-.VMS]UCX_SHR_VAXC.OPT/OPT"
1135 $     ENDIF
1136 $!
1137 $!    Done with UCX
1138 $!
1139 $   ENDIF
1140 $!
1141 $!  Print info
1142 $!
1143 $   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
1144 $!
1145 $!  Else The User Entered An Invalid Arguement.
1146 $!
1147 $ ELSE
1148 $!
1149 $!  Tell The User We Don't Know What They Want.
1150 $!
1151 $   WRITE SYS$OUTPUT ""
1152 $   WRITE SYS$OUTPUT "The Option ",P5," Is Invalid.  The Valid Options Are:"
1153 $   WRITE SYS$OUTPUT ""
1154 $   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
1155 $   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
1156 $   WRITE SYS$OUTPUT ""
1157 $!
1158 $!  Time To EXIT.
1159 $!
1160 $   EXIT
1161 $!
1162 $!  Done with TCP/IP libraries
1163 $!
1164 $ ENDIF
1165 $!
1166 $!  Time To RETURN...
1167 $!
1168 $ RETURN
1169 $!
1170 $ INITIALISE:
1171 $!
1172 $! Save old value of the logical name OPENSSL
1173 $!
1174 $ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
1175 $!
1176 $! Save directory information
1177 $!
1178 $ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
1179 $ __TOP = __HERE - "SSL]"
1180 $ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
1181 $!
1182 $! Set up the logical name OPENSSL to point at the include directory
1183 $!
1184 $ DEFINE OPENSSL/NOLOG '__INCLUDE'
1185 $!
1186 $! Done
1187 $!
1188 $ RETURN
1189 $!
1190 $ CLEANUP:
1191 $!
1192 $! Restore the logical name OPENSSL if it had a value
1193 $!
1194 $ IF __SAVE_OPENSSL .EQS. ""
1195 $ THEN
1196 $   DEASSIGN OPENSSL
1197 $ ELSE
1198 $   DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
1199 $ ENDIF
1200 $!
1201 $! Done
1202 $!
1203 $ RETURN