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