VMS support.
[openssl.git] / crypto / des / des-lib.com
1 $!
2 $!  DES-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 
11 $!  "[.xxx.EXE.CRYPTO.DES]LIBDES.OLB" library.  The "xxx" denotes the machine 
12 $!  architecture of AXP or VAX.
13 $!
14 $!  It was re-written to try to determine which "C" compiler to try to use
15 $!  or the user can specify a compiler in P3.
16 $!
17 $!  Specify one of the following to build just that part, specify "ALL" to
18 $!  just build everything.
19 $!
20 $!         ALL       To Just Build "Everything".
21 $!         LIBRARY   To Just Build The [.xxx.EXE.CRYPTO.DES]LIBDES.OLB Library.
22 $!         DESTEST   To Just Build The [.xxx.EXE.CRYPTO.DES]DESTEST.EXE Program.
23 $!         SPEED     To Just Build The [.xxx.EXE.CRYPTO.DES]SPEED.EXE Program.
24 $!         RPW       To Just Build The [.xxx.EXE.CRYPTO.DES]RPW.EXE Program.
25 $!         DES       To Just Build The [.xxx.EXE.CRYPTO.DES]DES.EXE Program.
26 $!         DES_OPTS  To Just Build The [.xxx.EXE.CRYPTO.DES]DES_OPTS.EXE Program.
27 $!
28 $!  Specify either DEBUG or NODEBUG as P2 to compile with or without
29 $!  debugging information.
30 $!
31 $!  Specify which compiler at P3 to try to compile under.
32 $!
33 $!         VAXC  For VAX C.
34 $!         DECC  For DEC C.
35 $!         GNUC  For GNU C.
36 $!
37 $!  If you don't speficy a compiler, it will try to determine which
38 $!  "C" compiler to try to use.
39 $!
40 $!  P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
41 $!
42 $!
43 $! Make sure we know what architecture we run on.
44 $!
45 $!
46 $! Check Which Architecture We Are Using.
47 $!
48 $ IF (F$GETSYI("CPU").GE.128)
49 $ THEN
50 $!
51 $!  The Architecture Is AXP.
52 $!
53 $   ARCH := AXP
54 $!
55 $! Else...
56 $!
57 $ ELSE
58 $!
59 $!  The Architecture Is VAX.
60 $!
61 $   ARCH := VAX
62 $!
63 $! End The Architecture Check.
64 $!
65 $ ENDIF
66 $!
67 $! Check To Make Sure We Have Valid Command Line Parameters.
68 $!
69 $ GOSUB CHECK_OPTIONS
70 $!
71 $! Tell The User What Kind of Machine We Run On.
72 $!
73 $ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
74 $!
75 $! Define The OBJ Directory Name.
76 $!
77 $ OBJ_DIR := SYS$DISK:[--.'ARCH'.OBJ.CRYPTO.DES]
78 $!
79 $! Check To See If The Architecture Specific OBJ Directory Exists.
80 $!
81 $ IF (F$PARSE(OBJ_DIR).EQS."")
82 $ THEN
83 $!
84 $!  It Dosen't Exist, So Create It.
85 $!
86 $   CREATE/DIR 'OBJ_DIR'
87 $!
88 $! End The Architecture Specific OBJ Directory Check.
89 $!
90 $ ENDIF
91 $!
92 $! Define The EXE Directory Name.
93 $!
94 $ EXE_DIR :== SYS$DISK:[--.'ARCH'.EXE.CRYPTO.DES]
95 $!
96 $! Check To See If The Architecture Specific Directory Exists.
97 $!
98 $ IF (F$PARSE(EXE_DIR).EQS."")
99 $ THEN
100 $!
101 $!  It Dosen't Exist, So Create It.
102 $!
103 $   CREATE/DIR 'EXE_DIR'
104 $!
105 $! End The Architecture Specific Directory Check.
106 $!
107 $ ENDIF
108 $!
109 $! Define The Library Name.
110 $!
111 $ LIB_NAME := 'EXE_DIR'LIBDES.OLB
112 $!
113 $! Check To See What We Are To Do.
114 $!
115 $ IF (BUILDALL.EQS."TRUE")
116 $ THEN
117 $!
118 $!  Since Nothing Special Was Specified, Do Everything.
119 $!
120 $   GOSUB LIBRARY
121 $   GOSUB DESTEST
122 $   GOSUB SPEED
123 $   GOSUB RPW
124 $   GOSUB DES
125 $   GOSUB DES_OPTS
126 $!
127 $! Else...
128 $!
129 $ ELSE
130 $!
131 $!    Build Just What The User Wants Us To Build.
132 $!
133 $     GOSUB 'BUILDALL'
134 $!
135 $! End The BUILDALL Check.
136 $!
137 $ ENDIF
138 $!
139 $! Time To EXIT.
140 $!
141 $ EXIT
142 $ LIBRARY:
143 $!
144 $! Tell The User That We Are Compiling.
145 $!
146 $ WRITE SYS$OUTPUT "Compiling The ",LIB_NAME," Files."
147 $!
148 $! Check To See If We Already Have A "[.xxx.EXE.CRYPTO.DES]LIBDES.OLB" Library...
149 $!
150 $ IF (F$SEARCH(LIB_NAME).EQS."")
151 $ THEN
152 $!
153 $! Guess Not, Create The Library.
154 $!
155 $   LIBRARY/CREATE/OBJECT 'LIB_NAME'
156 $!
157 $! End The Library Exist Check.
158 $!
159 $ ENDIF
160 $!
161 $! Define The DES Library Files.
162 $!
163 $ LIB_DES = "set_key,ecb_enc,cbc_enc,"+ -
164                 "ecb3_enc,cfb64enc,cfb64ede,cfb_enc,ofb64ede,"+ -
165                 "enc_read,enc_writ,ofb64enc,"+ -
166                 "ofb_enc,str2key,pcbc_enc,qud_cksm,rand_key,"+ -
167                 "des_enc,fcrypt_b,read2pwd,"+ -
168                 "fcrypt,xcbc_enc,read_pwd,rpc_enc,cbc_cksm,supp"
169 $!
170 $!  Define A File Counter And Set It To "0".
171 $!
172 $ FILE_COUNTER = 0
173 $!
174 $! Top Of The File Loop.
175 $!
176 $ NEXT_FILE:
177 $!
178 $! O.K, Extract The File Name From The File List.
179 $!
180 $ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",LIB_DES)
181 $!
182 $! Check To See If We Are At The End Of The File List.
183 $!
184 $ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
185 $!
186 $! Increment The Counter.
187 $!
188 $ FILE_COUNTER = FILE_COUNTER + 1
189 $!
190 $! Create The Source File Name.
191 $!
192 $ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
193 $!
194 $!  Tell The User We Are Compiling The Source File.
195 $!
196 $ WRITE SYS$OUTPUT "    ",FILE_NAME,".C"
197 $!
198 $! Create The Object File Name.
199 $!
200 $ OBJECT_FILE = OBJ_DIR + FILE_NAME + "." + ARCH + "OBJ"
201 $ ON WARNING THEN GOTO NEXT_FILE
202 $!
203 $! Check To See If The File We Want To Compile Actually Exists.
204 $!
205 $ IF (F$SEARCH(SOURCE_FILE).EQS."")
206 $ THEN
207 $!
208 $!  Tell The User That The File Dosen't Exist.
209 $!
210 $   WRITE SYS$OUTPUT ""
211 $   WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
212 $   WRITE SYS$OUTPUT ""
213 $!
214 $!  Exit The Build.
215 $!
216 $   EXIT
217 $!
218 $! End The File Exists Check.
219 $!
220 $ ENDIF
221 $!
222 $! Compile The File.
223 $!
224 $ ON ERROR THEN GOTO NEXT_FILE
225 $ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
226 $!
227 $! Add It To The Library.
228 $!
229 $ LIBRARY/REPLACE/OBJECT 'LIB_NAME' 'OBJECT_FILE'
230 $!
231 $! Time To Clean Up The Object File.
232 $!
233 $ DELETE 'OBJECT_FILE';*
234 $!
235 $! Go Back And Do It Again.
236 $!
237 $ GOTO NEXT_FILE
238 $!
239 $! All Done With This Library Part.
240 $!
241 $ FILE_DONE:
242 $!
243 $! Tell The User That We Are All Done.
244 $!
245 $ WRITE SYS$OUTPUT "Library ",LIB_NAME," Built."
246 $!
247 $! All Done, Time To Return.
248 $!
249 $ RETURN
250 $!
251 $!  Compile The DESTEST Program.
252 $!
253 $ DESTEST:
254 $!
255 $! Check To See If We Have The Proper Libraries.
256 $!
257 $ GOSUB LIB_CHECK
258 $!
259 $! Check To See If We Have A Linker Option File.
260 $!
261 $ GOSUB CHECK_OPT_FILE
262 $!
263 $! Check To See If The File We Want To Compile Actually Exists.
264 $!
265 $ IF (F$SEARCH("SYS$DISK:[]DESTEST.C").EQS."")
266 $ THEN
267 $!
268 $!  Tell The User That The File Dosen't Exist.
269 $!
270 $   WRITE SYS$OUTPUT ""
271 $   WRITE SYS$OUTPUT "The File DESTEST.C Dosen't Exist."
272 $   WRITE SYS$OUTPUT ""
273 $!
274 $!  Exit The Build.
275 $!
276 $   EXIT
277 $!
278 $! End The DESTEST.C File Check.
279 $!
280 $ ENDIF
281 $!
282 $! Tell The User What We Are Building.
283 $!
284 $ WRITE SYS$OUTPUT "Building ",EXE_DIR,"DESTEST.EXE"
285 $!
286 $! Compile The DESTEST Program.
287 $!
288 $ CC/OBJECT='OBJ_DIR'DESTEST.OBJ SYS$DISK:[]DESTEST.C
289 $!
290 $! Link The DESTEST Program.
291 $!
292 $ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DESTEST.EXE -
293       'OBJ_DIR'DESTEST.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
294 $!
295 $! All Done, Time To Return.
296 $!
297 $ RETURN
298 $!
299 $!  Compile The SPEED Program.
300 $!
301 $ SPEED:
302 $!
303 $! Check To See If We Have The Proper Libraries.
304 $!
305 $ GOSUB LIB_CHECK
306 $!
307 $! Check To See If We Have A Linker Option File.
308 $!
309 $ GOSUB CHECK_OPT_FILE
310 $!
311 $! Check To See If The File We Want To Compile Actually Exists.
312 $!
313 $ IF (F$SEARCH("SYS$DISK:[]SPEED.C").EQS."")
314 $ THEN
315 $!
316 $!  Tell The User That The File Dosen't Exist.
317 $!
318 $   WRITE SYS$OUTPUT ""
319 $   WRITE SYS$OUTPUT "The File SPEED.C Dosen't Exist."
320 $   WRITE SYS$OUTPUT ""
321 $!
322 $!  Exit The Build.
323 $!
324 $   EXIT
325 $!
326 $! End The SPEED.C File Check.
327 $!
328 $ ENDIF
329 $!
330 $! Tell The User What We Are Building.
331 $!
332 $ WRITE SYS$OUTPUT "Building ",EXE_DIR,"SPEED.EXE"
333 $!
334 $! Compile The SPEED Program.
335 $!
336 $ CC/OBJECT='OBJ_DIR'SPEED.OBJ SYS$DISK:[]SPEED.C
337 $!
338 $! Link The SPEED Program.
339 $!
340 $ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'SPEED.EXE -
341       'OBJ_DIR'SPEED.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
342 $!
343 $! All Done, Time To Return.
344 $!
345 $ RETURN
346 $!
347 $!  Compile The RPW Program.
348 $!
349 $ RPW:
350 $!
351 $! Check To See If We Have The Proper Libraries.
352 $!
353 $ GOSUB LIB_CHECK
354 $!
355 $! Check To See If We Have A Linker Option File.
356 $!
357 $ GOSUB CHECK_OPT_FILE
358 $!
359 $! Check To See If The File We Want To Compile Actually Exists.
360 $!
361 $ IF (F$SEARCH("SYS$DISK:[]RPW.C").EQS."")
362 $ THEN
363 $!
364 $!  Tell The User That The File Dosen't Exist.
365 $!
366 $   WRITE SYS$OUTPUT ""
367 $   WRITE SYS$OUTPUT "The File RPW.C Dosen't Exist."
368 $   WRITE SYS$OUTPUT ""
369 $!
370 $!  Exit The Build.
371 $!
372 $   EXIT
373 $!
374 $! End The RPW.C File Check.
375 $!
376 $ ENDIF
377 $!
378 $! Tell The User What We Are Building.
379 $!
380 $ WRITE SYS$OUTPUT "Building ",EXE_DIR,"RPW.EXE"
381 $!
382 $! Compile The RPW Program.
383 $!
384 $ CC/OBJECT='OBJ_DIR'RPW.OBJ SYS$DISK:[]RPW.C
385 $!
386 $! Link The RPW Program.
387 $!
388 $ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'RPW.EXE -
389       'OBJ_DIR'RPW.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
390 $!
391 $! All Done, Time To Return.
392 $!
393 $ RETURN
394 $!
395 $!  Compile The DES Program.
396 $!
397 $ DES:
398 $!
399 $! Check To See If We Have The Proper Libraries.
400 $!
401 $ GOSUB LIB_CHECK
402 $!
403 $! Check To See If We Have A Linker Option File.
404 $!
405 $ GOSUB CHECK_OPT_FILE
406 $!
407 $! Check To See If The File We Want To Compile Actually Exists.
408 $!
409 $ IF (F$SEARCH("SYS$DISK:[]DES.C").EQS."")
410 $ THEN
411 $!
412 $!  Tell The User That The File Dosen't Exist.
413 $!
414 $   WRITE SYS$OUTPUT ""
415 $   WRITE SYS$OUTPUT "The File DES.C Dosen't Exist."
416 $   WRITE SYS$OUTPUT ""
417 $!
418 $!  Exit The Build.
419 $!
420 $   EXIT
421 $!
422 $! End The DES.C File Check.
423 $!
424 $ ENDIF
425 $!
426 $! Tell The User What We Are Building.
427 $!
428 $ WRITE SYS$OUTPUT "Building ",EXE_DIR,"DES.EXE"
429 $!
430 $! Compile The DES Program.
431 $!
432 $ CC/OBJECT='OBJ_DIR'DES.OBJ SYS$DISK:[]DES.C
433 $!
434 $! Link The DES Program.
435 $!
436 $ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DES.EXE -
437       'OBJ_DIR'DES.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
438 $!
439 $! All Done, Time To Return.
440 $!
441 $ RETURN
442 $!
443 $!  Compile The DES_OPTS Program.
444 $!
445 $ DES_OPTS:
446 $!
447 $! Check To See If We Have The Proper Libraries.
448 $!
449 $ GOSUB LIB_CHECK
450 $!
451 $! Check To See If We Have A Linker Option File.
452 $!
453 $ GOSUB CHECK_OPT_FILE
454 $!
455 $! Check To See If The File We Want To Compile Actually Exists.
456 $!
457 $ IF (F$SEARCH("SYS$DISK:[]DES_OPTS.C").EQS."")
458 $ THEN
459 $!
460 $!  Tell The User That The File Dosen't Exist.
461 $!
462 $   WRITE SYS$OUTPUT ""
463 $   WRITE SYS$OUTPUT "The File DES_OPTS.C Dosen't Exist."
464 $   WRITE SYS$OUTPUT ""
465 $!
466 $!  Exit The Build.
467 $!
468 $   EXIT
469 $!
470 $! End The DES_OPTS.C File Check.
471 $!
472 $ ENDIF
473 $!
474 $! Tell The User What We Are Building.
475 $!
476 $ WRITE SYS$OUTPUT "Building ",EXE_DIR,"DES_OPTS.EXE"
477 $!
478 $! Compile The DES_OPTS Program.
479 $!
480 $ CC/OBJECT='OBJ_DIR'DES_OPTS.OBJ SYS$DISK:[]DES_OPTS.C
481 $!
482 $! Link The DES_OPTS Program.
483 $!
484 $ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DES_OPTS.EXE -
485       'OBJ_DIR'DES_OPTS.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
486 $!
487 $! All Done, Time To Return.
488 $!
489 $ RETURN
490 $ EXIT
491 $!
492 $! Check For The Link Option FIle.
493 $!
494 $ CHECK_OPT_FILE:
495 $!
496 $! Check To See If We Need To Make A VAX C Option File.
497 $!
498 $ IF (COMPILER.EQS."VAXC")
499 $ THEN
500 $!
501 $!  Check To See If We Already Have A VAX C Linker Option File.
502 $!
503 $   IF (F$SEARCH(OPT_FILE).EQS."")
504 $   THEN
505 $!
506 $!    We Need A VAX C Linker Option File.
507 $!
508 $     CREATE 'OPT_FILE'
509 $DECK
510 !
511 ! Default System Options File To Link Agianst 
512 ! The Sharable VAX C Runtime Library.
513 !
514 SYS$SHARE:VAXCRTL.EXE/SHARE
515 $EOD
516 $!
517 $!  End The Option File Check.
518 $!
519 $   ENDIF
520 $!
521 $! End The VAXC Check.
522 $!
523 $ ENDIF
524 $!
525 $! Check To See If We Need A GNU C Option File.
526 $!
527 $ IF (COMPILER.EQS."GNUC")
528 $ THEN
529 $!
530 $!  Check To See If We Already Have A GNU C Linker Option File.
531 $!
532 $   IF (F$SEARCH(OPT_FILE).EQS."")
533 $   THEN
534 $!
535 $!    We Need A GNU C Linker Option File.
536 $!
537 $     CREATE 'OPT_FILE'
538 $DECK
539 !
540 ! Default System Options File To Link Agianst 
541 ! The Sharable C Runtime Library.
542 !
543 GNU_CC:[000000]GCCLIB/LIBRARY
544 SYS$SHARE:VAXCRTL/SHARE
545 $EOD
546 $!
547 $!  End The Option File Check.
548 $!
549 $   ENDIF
550 $!
551 $! End The GNU C Check.
552 $!
553 $ ENDIF
554 $!
555 $! Check To See If We Need A DEC C Option File.
556 $!
557 $ IF (COMPILER.EQS."DECC")
558 $ THEN
559 $!
560 $!  Check To See If We Already Have A DEC C Linker Option File.
561 $!
562 $   IF (F$SEARCH(OPT_FILE).EQS."")
563 $   THEN
564 $!
565 $!    Figure Out If We Need An AXP Or A VAX Linker Option File.
566 $!
567 $     IF (F$GETSYI("CPU").LT.128)
568 $     THEN
569 $!
570 $!      We Need A DEC C Linker Option File For VAX.
571 $!
572 $       CREATE 'OPT_FILE'
573 $DECK
574 !
575 ! Default System Options File To Link Agianst 
576 ! The Sharable DEC C Runtime Library.
577 !
578 SYS$SHARE:DECC$SHR.EXE/SHARE
579 $EOD
580 $!
581 $!    Else...
582 $!
583 $     ELSE
584 $!
585 $!      Create The AXP Linker Option File.
586 $!
587 $       CREATE 'OPT_FILE'
588 $DECK
589 !
590 ! Default System Options File For AXP To Link Agianst 
591 ! The Sharable C Runtime Library.
592 !
593 SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
594 SYS$SHARE:CMA$OPEN_RTL/SHARE
595 $EOD
596 $!
597 $!    End The VAX/AXP DEC C Option File Check.
598 $!
599 $     ENDIF
600 $!
601 $!  End The Option File Search.
602 $!
603 $   ENDIF
604 $!
605 $! End The DEC C Check.
606 $!
607 $ ENDIF
608 $!
609 $!  Tell The User What Linker Option File We Are Using.
610 $!
611 $ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."     
612 $!
613 $! Time To RETURN.
614 $!
615 $ RETURN
616 $!
617 $! Library Check.
618 $!
619 $ LIB_CHECK:
620 $!
621 $!  Look For The Library LIBDES.OLB.
622 $!
623 $ IF (F$SEARCH(LIB_NAME).EQS."")
624 $ THEN
625 $!
626 $!    Tell The User We Can't Find The [.xxx.CRYPTO.DES]LIBDES.OLB Library.
627 $!
628 $   WRITE SYS$OUTPUT ""
629 $   WRITE SYS$OUTPUT "Can't Find The Library ",LIB_NAME,"."
630 $   WRITE SYS$OUTPUT "We Can't Link Without It."
631 $   WRITE SYS$OUTPUT ""
632 $!
633 $!    Since We Can't Link Without It, Exit.
634 $!
635 $   EXIT
636 $ ENDIF
637 $!
638 $! Time To Return.
639 $!
640 $ RETURN
641 $!
642 $! Check The User's Options.
643 $!
644 $ CHECK_OPTIONS:
645 $!
646 $! Check To See If We Are To "Just Build Everything".
647 $!
648 $ IF (P1.EQS."ALL")
649 $ THEN
650 $!
651 $!   P1 Is "ALL", So Build Everything.
652 $!
653 $    BUILDALL = "TRUE"
654 $!
655 $! Else...
656 $!
657 $ ELSE
658 $!
659 $!  Else, Check To See If P1 Has A Valid Arguement.
660 $!
661 $   IF (P1.EQS."LIBRARY").OR.(P1.EQS."DESTEST").OR.(P1.EQS."SPEED") -
662        .OR.(P1.EQS."RPW").OR.(P1.EQS."DES").OR.(P1.EQS."DES_OPTS")
663 $   THEN
664 $!
665 $!    A Valid Arguement.
666 $!
667 $     BUILDALL = P1
668 $!
669 $!  Else...
670 $!
671 $   ELSE
672 $!
673 $!    Tell The User We Don't Know What They Want.
674 $!
675 $     WRITE SYS$OUTPUT ""
676 $     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
677 $     WRITE SYS$OUTPUT ""
678 $     WRITE SYS$OUTPUT "    ALL      :  Just Build Everything.
679 $     WRITE SYS$OUTPUT "    LIBRARY  :  To Compile Just The [.xxx.EXE.CRYPTO.DES]LIBDES.OLB Library."
680 $     WRITE SYS$OUTPUT "    DESTEST  :  To Compile Just The [.xxx.EXE.CRYPTO.DES]DESTEST.EXE Program."
681 $     WRITE SYS$OUTPUT "    SPEED    :  To Compile Just The [.xxx.EXE.CRYPTO.DES]SPEED.EXE Program."
682 $     WRITE SYS$OUTPUT "    RPW      :  To Compile Just The [.xxx.EXE.CRYPTO.DES]RPW.EXE Program."
683 $     WRITE SYS$OUTPUT "    DES      :  To Compile Just The [.xxx.EXE.CRYPTO.DES]DES.EXE Program."
684 $     WRITE SYS$OUTPUT "    DES_OPTS :  To Compile Just The [.xxx.EXE.CRYTPO.DES]DES_OPTS.EXE Program."
685 $     WRITE SYS$OUTPUT ""
686 $     WRITE SYS$OUTPUT " Where 'xxx' Stands For: "
687 $     WRITE SYS$OUTPUT ""
688 $     WRITE SYS$OUTPUT "        AXP  :  Alpha Architecture."
689 $     WRITE SYS$OUTPUT "        VAX  :  VAX Architecture."
690 $     WRITE SYS$OUTPUT ""
691 $!
692 $!    Time To EXIT.
693 $!
694 $     EXIT
695 $!
696 $!  End The Valid Arguement Check.
697 $!
698 $   ENDIF
699 $!
700 $! End The P1 Check.
701 $!
702 $ ENDIF
703 $!
704 $! Check To See If We Are To Compile Without Debugger Information.
705 $!
706 $ IF (P2.EQS."NODEBUG")
707 $ THEN
708 $!
709 $!   P2 Is Blank, So Compile Without Debugger Information.
710 $!
711 $    DEBUGGER  = "NODEBUG"
712 $    TRACEBACK = "NOTRACEBACK" 
713 $    GCC_OPTIMIZE = "OPTIMIZE"
714 $    CC_OPTIMIZE = "OPTIMIZE"
715 $    WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
716 $    WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
717 $!
718 $! Else...
719 $!
720 $ ELSE
721 $!
722 $!  Check To See If We Are To Compile With Debugger Information.
723 $!
724 $   IF (P2.EQS."DEBUG")
725 $   THEN
726 $!
727 $!    Compile With Debugger Information.
728 $!
729 $     DEBUGGER  = "DEBUG"
730 $     TRACEBACK = "TRACEBACK"
731 $     GCC_OPTIMIZE = "NOOPTIMIZE"
732 $     CC_OPTIMIZE = "NOOPTIMIZE"
733 $     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
734 $     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
735 $!
736 $!  Else...
737 $!
738 $   ELSE
739 $!
740 $!    Tell The User Entered An Invalid Option..
741 $!
742 $     WRITE SYS$OUTPUT ""
743 $     WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
744 $     WRITE SYS$OUTPUT ""
745 $     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
746 $     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
747 $     WRITE SYS$OUTPUT ""
748 $!
749 $!    Time To EXIT.
750 $!
751 $     EXIT
752 $!
753 $!  End The Valid Arguement Check.
754 $!
755 $   ENDIF
756 $!
757 $! End The P2 Check.
758 $!
759 $ ENDIF
760 $!
761 $! Special Threads For OpenVMS v7.1 Or Later.
762 $!
763 $! Written By:  Richard Levitte
764 $!              richard@levitte.org
765 $!
766 $!
767 $! Check To See If We Have A Option For P4.
768 $!
769 $ IF (P4.EQS."")
770 $ THEN
771 $!
772 $!  Get The Version Of VMS We Are Using.
773 $!
774 $   ISSEVEN := ""
775 $   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
776 $   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
777 $!
778 $!  Check To See If The VMS Version Is v7.1 Or Later.
779 $!
780 $   IF (TMP.GE.71)
781 $   THEN
782 $!
783 $!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
784 $!
785 $     ISSEVEN := ,PTHREAD_USE_D4
786 $!
787 $!  End The VMS Version Check.
788 $!
789 $   ENDIF
790 $!
791 $! End The P4 Check.
792 $!
793 $ ENDIF
794 $!
795 $! Check To See If P3 Is Blank.
796 $!
797 $ IF (P3.EQS."")
798 $ THEN
799 $!
800 $!  O.K., The User Didn't Specify A Compiler, Let's Try To
801 $!  Find Out Which One To Use.
802 $!
803 $!  Check To See If We Have GNU C.
804 $!
805 $   IF (F$TRNLNM("GNU_CC").NES."")
806 $   THEN
807 $!
808 $!    Looks Like GNUC, Set To Use GNUC.
809 $!
810 $     P3 = "GNUC"
811 $!
812 $!  Else...
813 $!
814 $   ELSE
815 $!
816 $!    Check To See If We Have VAXC Or DECC.
817 $!
818 $     IF (ARCH.EQS."AXP").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
819 $     THEN 
820 $!
821 $!      Looks Like DECC, Set To Use DECC.
822 $!
823 $       P3 = "DECC"
824 $!
825 $!    Else...
826 $!
827 $     ELSE
828 $!
829 $!      Looks Like VAXC, Set To Use VAXC.
830 $!
831 $       P3 = "VAXC"
832 $!
833 $!    End The VAXC Compiler Check.
834 $!
835 $     ENDIF
836 $!
837 $!  End The DECC & VAXC Compiler Check.
838 $!
839 $   ENDIF
840 $!
841 $!  End The Compiler Check.
842 $!
843 $ ENDIF
844 $!
845 $! Set Up Initial CC Definitions, Possibly With User Ones
846 $!
847 $ CCDEFS = "VMS=1"
848 $ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
849 $ CCEXTRAFLAGS = ""
850 $ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
851 $ CCDISABLEWARNINGS = ""
852 $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
853         CCDISABLEWARNINGS = USER_CCDISABLEWARNINGS
854 $!
855 $!  Check To See If The User Entered A Valid Paramter.
856 $!
857 $ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
858 $ THEN
859 $!
860 $!    Check To See If The User Wanted DECC.
861 $!
862 $   IF (P3.EQS."DECC")
863 $   THEN
864 $!
865 $!    Looks Like DECC, Set To Use DECC.
866 $!
867 $     COMPILER = "DECC"
868 $!
869 $!    Tell The User We Are Using DECC.
870 $!
871 $     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
872 $!
873 $!    Use DECC...
874 $!
875 $     CC = "CC"
876 $     IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
877          THEN CC = "CC/DECC"
878 $     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
879            "/NOLIST/PREFIX=ALL" + CCEXTRAFLAGS
880 $!
881 $!    Define The Linker Options File Name.
882 $!
883 $     OPT_FILE = "SYS$DISK:[]VAX_DECC_OPTIONS.OPT"
884 $!
885 $!  End DECC Check.
886 $!
887 $   ENDIF
888 $!
889 $!  Check To See If We Are To Use VAXC.
890 $!
891 $   IF (P3.EQS."VAXC")
892 $   THEN
893 $!
894 $!    Looks Like VAXC, Set To Use VAXC.
895 $!
896 $     COMPILER = "VAXC"
897 $!
898 $!    Tell The User We Are Using VAX C.
899 $!
900 $     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
901 $!
902 $!    Compile Using VAXC.
903 $!
904 $     CC = "CC"
905 $     IF ARCH.EQS."AXP"
906 $     THEN
907 $       WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
908 $       EXIT
909 $     ENDIF
910 $     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
911 $     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS
912 $     CCDEFS = """VAXC""," + CCDEFS
913 $!
914 $!    Define <sys> As SYS$COMMON:[SYSLIB]
915 $!
916 $     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
917 $!
918 $!    Define The Linker Options File Name.
919 $!
920 $     OPT_FILE = "SYS$DISK:[]VAX_VAXC_OPTIONS.OPT"
921 $!
922 $!  End VAXC Check
923 $!
924 $   ENDIF
925 $!
926 $!  Check To See If We Are To Use GNU C.
927 $!
928 $   IF (P3.EQS."GNUC")
929 $   THEN
930 $!
931 $!    Looks Like GNUC, Set To Use GNUC.
932 $!
933 $     COMPILER = "GNUC"
934 $!
935 $!    Tell The User We Are Using GNUC.
936 $!
937 $     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
938 $!
939 $!    Use GNU C...
940 $!
941 $     CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS
942 $!
943 $!    Define The Linker Options File Name.
944 $!
945 $     OPT_FILE = "SYS$DISK:[]VAX_GNUC_OPTIONS.OPT"
946 $!
947 $!  End The GNU C Check.
948 $!
949 $   ENDIF
950 $!
951 $!  Set up default defines
952 $!
953 $   CCDEFS = """FLAT_INC=1""," + CCDEFS
954 $!
955 $!  Finish up the definition of CC.
956 $!
957 $   IF COMPILER .EQS. "DECC"
958 $   THEN
959 $     IF CCDISABLEWARNINGS .EQS. ""
960 $     THEN
961 $       CC4DISABLEWARNINGS = "DOLLARID"
962 $     ELSE
963 $       CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
964 $       CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
965 $     ENDIF
966 $     CC4DISABLEWARNINGS = "/WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
967 $   ELSE
968 $     CCDISABLEWARNINGS = ""
969 $     CC4DISABLEWARNINGS = ""
970 $   ENDIF
971 $   CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
972 $!
973 $!  Show user the result
974 $!
975 $   WRITE SYS$OUTPUT "Main Compiling Command: ",CC
976 $!
977 $!  Else The User Entered An Invalid Arguement.
978 $!
979 $ ELSE
980 $!
981 $!  Tell The User We Don't Know What They Want.
982 $!
983 $   WRITE SYS$OUTPUT ""
984 $   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
985 $   WRITE SYS$OUTPUT ""
986 $   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
987 $   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
988 $   WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
989 $   WRITE SYS$OUTPUT ""
990 $!
991 $!  Time To EXIT.
992 $!
993 $   EXIT
994 $!
995 $! End The P3 Check.
996 $!
997 $ ENDIF
998 $!
999 $!  Time To RETURN...
1000 $!
1001 $ RETURN