Add CMS to the list of applications.
[oweals/openssl.git] / apps / makeapps.com
1 $!
2 $!  MAKEAPPS.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 $!             Zoltan Arpadffy <zoli@polarhome.com>   
10 $!
11 $!  This command files compiles and creates all the various different
12 $!  "application" programs for the different types of encryption for OpenSSL.
13 $!  The EXE's are placed in the directory [.xxx.EXE.APPS] where "xxx" denotes
14 $!  ALPHA, IA64 or VAX, depending on your machine architecture.
15 $!
16 $!  It was written so it would try to determine what "C" compiler to
17 $!  use or you can specify which "C" compiler to use.
18 $!
19 $!  Specify DEBUG or NODEBUG as P1 to compile with or without debugger
20 $!  information.
21 $!
22 $!  Specify which compiler at P2 to try to compile under.
23 $!
24 $!         VAXC  For VAX C.
25 $!         DECC  For DEC C.
26 $!         GNUC  For GNU C.
27 $!
28 $!  If you don't speficy a compiler, it will try to determine which
29 $!  "C" compiler to use.
30 $!
31 $!  P3, if defined, sets a TCP/IP library to use, through one of the following
32 $!  keywords:
33 $!
34 $!      UCX             for UCX
35 $!      SOCKETSHR       for SOCKETSHR+NETLIB
36 $!      TCPIP           for TCPIP (post UCX)
37 $!
38 $!  P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
39 $!
40 $!  P5, if defined, sets a choice of programs to compile.
41 $!
42 $!
43 $! Define A TCP/IP Library That We Will Need To Link To.
44 $! (That Is, If We Need To Link To One.)
45 $!
46 $ TCPIP_LIB = ""
47 $!
48 $! Check What Architecture We Are Using.
49 $!
50 $ IF (F$GETSYI("CPU").LT.128)
51 $ THEN
52 $!
53 $!  The Architecture Is VAX.
54 $!
55 $   ARCH := VAX
56 $!
57 $! Else...
58 $!
59 $ ELSE
60 $!
61 $!  The Architecture Is Alpha, IA64 or whatever comes in the future.
62 $!
63 $   ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
64 $   IF (ARCH .EQS. "") THEN ARCH = "UNK"
65 $!
66 $! End The Architecture Check.
67 $!
68 $ ENDIF
69 $!
70 $! Define what programs should be compiled
71 $!
72 $ PROGRAMS := OPENSSL
73 $!$ PROGRAMS := VERIFY,ASN1PARS,REQ,DGST,DH,ENC,PASSWD,GENDH,ERRSTR,CA,CRL,-
74 $!            RSA,DSA,DSAPARAM,-
75 $!            X509,GENRSA,GENDSA,S_SERVER,S_CLIENT,SPEED,-
76 $!            S_TIME,VERSION,PKCS7,CRL2P7,SESS_ID,CIPHERS,NSEQ,
77 $!
78 $! Define The CRYPTO Library.
79 $!
80 $ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB
81 $!
82 $! Define The SSL Library.
83 $!
84 $ SSL_LIB := SYS$DISK:[-.'ARCH'.EXE.SSL]LIBSSL.OLB
85 $!
86 $! Define The OBJ Directory.
87 $!
88 $ OBJ_DIR := SYS$DISK:[-.'ARCH'.OBJ.APPS]
89 $!
90 $! Define The EXE Directory.
91 $!
92 $ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.APPS]
93 $!
94 $! Check To Make Sure We Have Valid Command Line Parameters.
95 $!
96 $ GOSUB CHECK_OPTIONS
97 $!
98 $! Initialise logical names and such
99 $!
100 $ GOSUB INITIALISE
101 $!
102 $! Tell The User What Kind of Machine We Run On.
103 $!
104 $ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
105 $!
106 $! Check To See If The OBJ Directory Exists.
107 $!
108 $ IF (F$PARSE(OBJ_DIR).EQS."")
109 $ THEN
110 $!
111 $!  It Dosen't Exist, So Create It.
112 $!
113 $   CREATE/DIRECTORY 'OBJ_DIR'
114 $!
115 $! End The OBJ Directory Check.
116 $!
117 $ ENDIF
118 $!
119 $! Check To See If The EXE Directory Exists.
120 $!
121 $ IF (F$PARSE(EXE_DIR).EQS."")
122 $ THEN
123 $!
124 $!  It Dosen't Exist, So Create It.
125 $!
126 $   CREATE/DIRECTORY 'EXE_DIR'
127 $!
128 $! End The EXE Directory Check.
129 $!
130 $ ENDIF
131 $!
132 $! Check To See If We Have The Proper Libraries.
133 $!
134 $ GOSUB LIB_CHECK
135 $!
136 $! Check To See If We Have A Linker Option File.
137 $!
138 $ GOSUB CHECK_OPT_FILE
139 $!
140 $! Define The Application Files.
141 $! NOTE: Some might think this list ugly.  However, it's made this way to
142 $! reflect the E_OBJ variable in Makefile as closely as possible, thereby
143 $! making it fairly easy to verify that the lists are the same.
144 $!
145 $ LIB_FILES = "VERIFY;ASN1PARS;REQ;DGST;DH;DHPARAM;ENC;PASSWD;GENDH;ERRSTR;"+-
146               "CA;PKCS7;CRL2P7;CRL;"+-
147               "RSA;RSAUTL;DSA;DSAPARAM;EC;ECPARAM;"+-
148               "X509;GENRSA;GENDSA;S_SERVER;S_CLIENT;SPEED;"+-
149               "S_TIME;APPS;S_CB;S_SOCKET;APP_RAND;VERSION;SESS_ID;"+-
150               "CIPHERS;NSEQ;PKCS12;PKCS8;SPKAC;SMIME;RAND;ENGINE;"+-
151               "OCSP;PRIME;CMS"
152 $ TCPIP_PROGRAMS = ",,"
153 $ IF COMPILER .EQS. "VAXC" THEN -
154      TCPIP_PROGRAMS = ",OPENSSL,"
155 $!
156 $! Setup exceptional compilations
157 $!
158 $ COMPILEWITH_CC2 = ",S_SOCKET,S_SERVER,S_CLIENT,"
159 $!
160 $ PHASE := LIB
161 $!
162 $ RESTART: 
163 $!
164 $!  Define A File Counter And Set It To "0".
165 $!
166 $ FILE_COUNTER = 0
167 $!
168 $! Top Of The File Loop.
169 $!
170 $ NEXT_FILE:
171 $!
172 $! O.K, Extract The File Name From The File List.
173 $!
174 $ FILE_NAME0 = F$EDIT(F$ELEMENT(FILE_COUNTER,";",'PHASE'_FILES),"TRIM")
175 $ FILE_NAME = F$EDIT(F$ELEMENT(0,",",FILE_NAME0),"TRIM")
176 $ EXTRA_OBJ = FILE_NAME0 - FILE_NAME
177 $!
178 $! Check To See If We Are At The End Of The File List.
179 $!
180 $ IF (FILE_NAME0.EQS.";")
181 $ THEN
182 $   IF (PHASE.EQS."LIB")
183 $   THEN
184 $     PHASE := APP
185 $     GOTO RESTART
186 $   ELSE
187 $     GOTO FILE_DONE
188 $   ENDIF
189 $ ENDIF
190 $!
191 $! Increment The Counter.
192 $!
193 $ FILE_COUNTER = FILE_COUNTER + 1
194 $!
195 $! Check to see if this program should actually be compiled
196 $!
197 $ IF PHASE .EQS. "APP" .AND. -
198      ","+PROGRAMS+"," - (","+F$EDIT(FILE_NAME,"UPCASE")+",") .EQS. ","+PROGRAMS+","
199 $ THEN
200 $   GOTO NEXT_FILE
201 $ ENDIF
202 $!
203 $! Create The Source File Name.
204 $!
205 $ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
206 $!
207 $! Create The Object File Name.
208 $!
209 $ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
210 $!
211 $! Create The Executable File Name.
212 $!
213 $ EXE_FILE = EXE_DIR + FILE_NAME + ".EXE"
214 $ ON WARNING THEN GOTO NEXT_FILE
215 $!
216 $! Check To See If The File We Want To Compile Actually Exists.
217 $!
218 $ IF (F$SEARCH(SOURCE_FILE).EQS."")
219 $ THEN
220 $!
221 $!  Tell The User That The File Dosen't Exist.
222 $!
223 $   WRITE SYS$OUTPUT ""
224 $   WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
225 $   WRITE SYS$OUTPUT ""
226 $!
227 $!  Exit The Build.
228 $!
229 $   GOTO EXIT
230 $!
231 $! End The File Exist Check.
232 $!
233 $ ENDIF
234 $!
235 $! Tell The User What We Are Building.
236 $!
237 $ IF (PHASE.EQS."LIB")
238 $ THEN
239 $   WRITE SYS$OUTPUT "Compiling The ",FILE_NAME,".C File."
240 $ ELSE
241 $   WRITE SYS$OUTPUT "Building The ",FILE_NAME," Application Program."
242 $ ENDIF
243 $!
244 $! Compile The File.
245 $!
246 $ ON ERROR THEN GOTO NEXT_FILE
247 $ IF COMPILEWITH_CC2 - FILE_NAME .NES. COMPILEWITH_CC2
248 $ THEN
249 $   CC2/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
250 $ ELSE
251 $   CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
252 $ ENDIF
253 $!
254 $ ON WARNING THEN GOTO NEXT_FILE
255 $!
256 $ IF (PHASE.EQS."LIB") 
257 $ THEN 
258 $   GOTO NEXT_FILE
259 $ ENDIF
260 $!
261 $!  Check if this program works well without a TCPIP library
262 $!
263 $ IF TCPIP_LIB .EQS. "" .AND. TCPIP_PROGRAMS - FILE_NAME .NES. TCPIP_PROGRAMS
264 $ THEN
265 $   WRITE SYS$OUTPUT FILE_NAME," needs a TCP/IP library.  Can't link.  Skipping..."
266 $   GOTO NEXT_FILE
267 $ ENDIF
268 $!
269 $! Link The Program.
270 $! Check To See If We Are To Link With A Specific TCP/IP Library.
271 $!
272 $ IF (TCPIP_LIB.NES."")
273 $ THEN
274 $!
275 $! Don't Link With The RSAREF Routines And TCP/IP Library.
276 $!
277 $   LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
278         'OBJECT_FILE''EXTRA_OBJ', -
279         'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
280         'TCPIP_LIB','OPT_FILE'/OPTION
281 $!
282 $! Else...
283 $!
284 $ ELSE
285 $!
286 $! Don't Link With The RSAREF Routines And Link With A TCP/IP Library.
287 $!
288 $   LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
289         'OBJECT_FILE''EXTRA_OBJ', -
290         'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
291         'OPT_FILE'/OPTION
292 $!
293 $! End The TCP/IP Library Check.
294 $!
295 $ ENDIF
296 $!
297 $! Go Back And Do It Again.
298 $!
299 $ GOTO NEXT_FILE
300 $!
301 $! All Done With This File.
302 $!
303 $ FILE_DONE:
304 $ EXIT:
305 $!
306 $! All Done, Time To Clean Up And Exit.
307 $!
308 $ GOSUB CLEANUP
309 $ EXIT
310 $!
311 $! Check For The Link Option FIle.
312 $!
313 $ CHECK_OPT_FILE:
314 $!
315 $! Check To See If We Need To Make A VAX C Option File.
316 $!
317 $ IF (COMPILER.EQS."VAXC")
318 $ THEN
319 $!
320 $!  Check To See If We Already Have A VAX C Linker Option File.
321 $!
322 $   IF (F$SEARCH(OPT_FILE).EQS."")
323 $   THEN
324 $!
325 $!    We Need A VAX C Linker Option File.
326 $!
327 $     CREATE 'OPT_FILE'
328 $DECK
329 !
330 ! Default System Options File To Link Agianst 
331 ! The Sharable VAX C Runtime Library.
332 !
333 SYS$SHARE:VAXCRTL.EXE/SHARE
334 $EOD
335 $!
336 $!  End The Option File Check.
337 $!
338 $   ENDIF
339 $!
340 $! End The VAXC Check.
341 $!
342 $ ENDIF
343 $!
344 $! Check To See If We Need A GNU C Option File.
345 $!
346 $ IF (COMPILER.EQS."GNUC")
347 $ THEN
348 $!
349 $!  Check To See If We Already Have A GNU C Linker Option File.
350 $!
351 $   IF (F$SEARCH(OPT_FILE).EQS."")
352 $   THEN
353 $!
354 $!    We Need A GNU C Linker Option File.
355 $!
356 $     CREATE 'OPT_FILE'
357 $DECK
358 !
359 ! Default System Options File To Link Agianst 
360 ! The Sharable C Runtime Library.
361 !
362 GNU_CC:[000000]GCCLIB/LIBRARY
363 SYS$SHARE:VAXCRTL/SHARE
364 $EOD
365 $!
366 $!  End The Option File Check.
367 $!
368 $   ENDIF
369 $!
370 $! End The GNU C Check.
371 $!
372 $ ENDIF
373 $!
374 $! Check To See If We Need A DEC C Option File.
375 $!
376 $ IF (COMPILER.EQS."DECC")
377 $ THEN
378 $!
379 $!  Check To See If We Already Have A DEC C Linker Option File.
380 $!
381 $   IF (F$SEARCH(OPT_FILE).EQS."")
382 $   THEN
383 $!
384 $!    Figure Out If We Need An AXP Or A VAX Linker Option File.
385 $!
386 $     IF ARCH.EQS."VAX"
387 $     THEN
388 $!
389 $!      We Need A DEC C Linker Option File For VAX.
390 $!
391 $       CREATE 'OPT_FILE'
392 $DECK
393 !
394 ! Default System Options File To Link Agianst 
395 ! The Sharable DEC C Runtime Library.
396 !
397 SYS$SHARE:DECC$SHR.EXE/SHARE
398 $EOD
399 $!
400 $!    Else...
401 $!
402 $     ELSE
403 $!
404 $!      Create The non-VAX Linker Option File.
405 $!
406 $       CREATE 'OPT_FILE'
407 $DECK
408 !
409 ! Default System Options File For non-VAX To Link Agianst 
410 ! The Sharable C Runtime Library.
411 !
412 SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
413 SYS$SHARE:CMA$OPEN_RTL/SHARE
414 $EOD
415 $!
416 $!    End The DEC C Option File Check.
417 $!
418 $     ENDIF
419 $!
420 $!  End The Option File Search.
421 $!
422 $   ENDIF
423 $!
424 $! End The DEC C Check.
425 $!
426 $ ENDIF
427 $!
428 $!  Tell The User What Linker Option File We Are Using.
429 $!
430 $ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."     
431 $!
432 $! Time To RETURN.
433 $!
434 $ RETURN
435 $!
436 $! Check To See If We Have The Appropiate Libraries.
437 $!
438 $ LIB_CHECK:
439 $!
440 $! Look For The Library LIBCRYPTO.OLB.
441 $!
442 $ IF (F$SEARCH(CRYPTO_LIB).EQS."")
443 $ THEN
444 $!
445 $!  Tell The User We Can't Find The LIBCRYPTO.OLB Library.
446 $!
447 $   WRITE SYS$OUTPUT ""
448 $   WRITE SYS$OUTPUT "Can't Find The Library ",CRYPTO_LIB,"."
449 $   WRITE SYS$OUTPUT "We Can't Link Without It."
450 $   WRITE SYS$OUTPUT ""
451 $!
452 $!  Since We Can't Link Without It, Exit.
453 $!
454 $   EXIT
455 $!
456 $! End The Crypto Library Check.
457 $!
458 $ ENDIF
459 $!
460 $! Look For The Library LIBSSL.OLB.
461 $!
462 $ IF (F$SEARCH(SSL_LIB).EQS."")
463 $ THEN
464 $!
465 $!  Tell The User We Can't Find The LIBSSL.OLB Library.
466 $!
467 $   WRITE SYS$OUTPUT ""
468 $   WRITE SYS$OUTPUT "Can't Find The Library ",SSL_LIB,"."
469 $   WRITE SYS$OUTPUT "Some Of The Test Programs Need To Link To It."
470 $   WRITE SYS$OUTPUT ""
471 $!
472 $!  Since We Can't Link Without It, Exit.
473 $!
474 $   EXIT
475 $!
476 $! End The SSL Library Check.
477 $!
478 $ ENDIF
479 $!
480 $! Time To Return.
481 $!
482 $ RETURN
483 $!
484 $! Check The User's Options.
485 $!
486 $ CHECK_OPTIONS:
487 $!
488 $! Check To See If P1 Is Blank.
489 $!
490 $ IF (P1.EQS."NODEBUG")
491 $ THEN
492 $!
493 $!   P1 Is NODEBUG, So Compile Without Debugger Information.
494 $!
495 $    DEBUGGER  = "NODEBUG"
496 $    TRACEBACK = "NOTRACEBACK" 
497 $    GCC_OPTIMIZE = "OPTIMIZE"
498 $    CC_OPTIMIZE = "OPTIMIZE"
499 $    WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
500 $    WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
501 $!
502 $! Else...
503 $!
504 $ ELSE
505 $!
506 $!  Check To See If We Are To Compile With Debugger Information.
507 $!
508 $   IF (P1.EQS."DEBUG")
509 $   THEN
510 $!
511 $!    Compile With Debugger Information.
512 $!
513 $     DEBUGGER  = "DEBUG"
514 $     TRACEBACK = "TRACEBACK"
515 $     GCC_OPTIMIZE = "NOOPTIMIZE"
516 $     CC_OPTIMIZE = "NOOPTIMIZE"
517 $     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
518 $     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
519 $   ELSE
520 $!
521 $!    Tell The User Entered An Invalid Option..
522 $!
523 $     WRITE SYS$OUTPUT ""
524 $     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
525 $     WRITE SYS$OUTPUT ""
526 $     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
527 $     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
528 $     WRITE SYS$OUTPUT ""
529 $!
530 $!    Time To EXIT.
531 $!
532 $     EXIT
533 $!
534 $!  End The Valid Arguement Check.
535 $!
536 $   ENDIF
537 $!
538 $! End The P1 Check.
539 $!
540 $ ENDIF
541 $!
542 $! Check To See If P2 Is Blank.
543 $!
544 $ IF (P2.EQS."")
545 $ THEN
546 $!
547 $!  O.K., The User Didn't Specify A Compiler, Let's Try To
548 $!  Find Out Which One To Use.
549 $!
550 $!  Check To See If We Have GNU C.
551 $!
552 $   IF (F$TRNLNM("GNU_CC").NES."")
553 $   THEN
554 $!
555 $!    Looks Like GNUC, Set To Use GNUC.
556 $!
557 $     P2 = "GNUC"
558 $!
559 $!  Else...
560 $!
561 $   ELSE
562 $!
563 $!  Check To See If We Have VAXC Or DECC.
564 $!
565 $     IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
566 $     THEN 
567 $!
568 $!      Looks Like DECC, Set To Use DECC.
569 $!
570 $       P2 = "DECC"
571 $!
572 $!    Else...
573 $!
574 $     ELSE
575 $!
576 $!      Looks Like VAXC, Set To Use VAXC.
577 $!
578 $       P2 = "VAXC"
579 $!
580 $!    End The VAXC Compiler Check.
581 $!
582 $     ENDIF
583 $!
584 $!  End The DECC & VAXC Compiler Check.
585 $!
586 $   ENDIF
587 $!
588 $!  End The Compiler Check.
589 $!
590 $ ENDIF
591 $!
592 $! Check To See If We Have A Option For P3.
593 $!
594 $ IF (P3.EQS."")
595 $ THEN
596 $!
597 $!  Find out what socket library we have available
598 $!
599 $   IF F$PARSE("SOCKETSHR:") .NES. ""
600 $   THEN
601 $!
602 $!    We have SOCKETSHR, and it is my opinion that it's the best to use.
603 $!
604 $     P3 = "SOCKETSHR"
605 $!
606 $!    Tell the user
607 $!
608 $     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
609 $!
610 $!    Else, let's look for something else
611 $!
612 $   ELSE
613 $!
614 $!    Like UCX (the reason to do this before Multinet is that the UCX
615 $!    emulation is easier to use...)
616 $!
617 $     IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
618          .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
619          .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
620 $     THEN
621 $!
622 $!      Last resort: a UCX or UCX-compatible library
623 $!
624 $       P3 = "UCX"
625 $!
626 $!      Tell the user
627 $!
628 $       WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
629 $!
630 $!      That was all...
631 $!
632 $     ENDIF
633 $   ENDIF
634 $ ENDIF
635 $!
636 $! Set Up Initial CC Definitions, Possibly With User Ones
637 $!
638 $ CCDEFS = "MONOLITH"
639 $ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
640 $ CCEXTRAFLAGS = ""
641 $ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
642 $ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
643 $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
644         CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
645 $!
646 $!  Check To See If The User Entered A Valid Paramter.
647 $!
648 $ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
649 $ THEN
650 $!
651 $!  Check To See If The User Wanted DECC.
652 $!
653 $   IF (P2.EQS."DECC")
654 $   THEN
655 $!
656 $!    Looks Like DECC, Set To Use DECC.
657 $!
658 $     COMPILER = "DECC"
659 $!
660 $!    Tell The User We Are Using DECC.
661 $!
662 $     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
663 $!
664 $!    Use DECC...
665 $!
666 $     CC = "CC"
667 $     IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
668          THEN CC = "CC/DECC"
669 $     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
670            "/NOLIST/PREFIX=ALL" + -
671            "/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
672 $!
673 $!    Define The Linker Options File Name.
674 $!
675 $     OPT_FILE = "''EXE_DIR'VAX_DECC_OPTIONS.OPT"
676 $!
677 $!  End DECC Check.
678 $!
679 $   ENDIF
680 $!
681 $!  Check To See If We Are To Use VAXC.
682 $!
683 $   IF (P2.EQS."VAXC")
684 $   THEN
685 $!
686 $!    Looks Like VAXC, Set To Use VAXC.
687 $!
688 $     COMPILER = "VAXC"
689 $!
690 $!    Tell The User We Are Using VAX C.
691 $     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
692 $!
693 $!    Compile Using VAXC.
694 $!
695 $     CC = "CC"
696 $     IF ARCH.NES."VAX"
697 $     THEN
698 $       WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
699 $       EXIT
700 $     ENDIF
701 $     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
702 $     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
703            "/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
704 $     CCDEFS = CCDEFS + ",""VAXC"""
705 $!
706 $!    Define <sys> As SYS$COMMON:[SYSLIB]
707 $!
708 $     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
709 $!
710 $!    Define The Linker Options File Name.
711 $!
712 $     OPT_FILE = "''EXE_DIR'VAX_VAXC_OPTIONS.OPT"
713 $!
714 $!  End VAXC Check
715 $!
716 $   ENDIF
717 $!
718 $!  Check To See If We Are To Use GNU C.
719 $!
720 $   IF (P2.EQS."GNUC")
721 $   THEN
722 $!
723 $!    Looks Like GNUC, Set To Use GNUC.
724 $!
725 $     COMPILER = "GNUC"
726 $!
727 $!    Tell The User We Are Using GNUC.
728 $!
729 $     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
730 $!
731 $!    Use GNU C...
732 $!
733 $     IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
734 $     CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
735            "/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
736 $!
737 $!    Define The Linker Options File Name.
738 $!
739 $     OPT_FILE = "''EXE_DIR'VAX_GNUC_OPTIONS.OPT"
740 $!
741 $!  End The GNU C Check.
742 $!
743 $   ENDIF
744 $!
745 $!  Set up default defines
746 $!
747 $   CCDEFS = """FLAT_INC=1""," + CCDEFS
748 $!
749 $!  Else The User Entered An Invalid Arguement.
750 $!
751 $ ELSE
752 $!
753 $!  Tell The User We Don't Know What They Want.
754 $!
755 $   WRITE SYS$OUTPUT ""
756 $   WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
757 $   WRITE SYS$OUTPUT ""
758 $   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
759 $   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
760 $   WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
761 $   WRITE SYS$OUTPUT ""
762 $!
763 $!  Time To EXIT.
764 $!
765 $   EXIT
766 $ ENDIF
767 $!
768 $! Time to check the contents, and to make sure we get the correct library.
769 $!
770 $ IF P3.EQS."SOCKETSHR" .OR. P3.EQS."MULTINET" .OR. P3.EQS."UCX" -
771      .OR. P3.EQS."TCPIP" .OR. P3.EQS."NONE"
772 $ THEN
773 $!
774 $!  Check to see if SOCKETSHR was chosen
775 $!
776 $   IF P3.EQS."SOCKETSHR"
777 $   THEN
778 $!
779 $!    Set the library to use SOCKETSHR
780 $!
781 $     TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
782 $!
783 $!    Done with SOCKETSHR
784 $!
785 $   ENDIF
786 $!
787 $!  Check to see if MULTINET was chosen
788 $!
789 $   IF P3.EQS."MULTINET"
790 $   THEN
791 $!
792 $!    Set the library to use UCX emulation.
793 $!
794 $     P3 = "UCX"
795 $!
796 $!    Done with MULTINET
797 $!
798 $   ENDIF
799 $!
800 $!  Check to see if UCX was chosen
801 $!
802 $   IF P3.EQS."UCX"
803 $   THEN
804 $!
805 $!    Set the library to use UCX.
806 $!
807 $     TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT"
808 $     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
809 $     THEN
810 $       TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
811 $     ELSE
812 $       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
813           TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT"
814 $     ENDIF
815 $!
816 $!    Done with UCX
817 $!
818 $   ENDIF
819 $!
820 $!  Check to see if TCPIP (post UCX) was chosen
821 $!
822 $   IF P3.EQS."TCPIP"
823 $   THEN
824 $!
825 $!    Set the library to use TCPIP.
826 $!
827 $     TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
828 $!
829 $!    Done with TCPIP
830 $!
831 $   ENDIF
832 $!
833 $!  Check to see if NONE was chosen
834 $!
835 $   IF P3.EQS."NONE"
836 $   THEN
837 $!
838 $!    Do not use TCPIP.
839 $!
840 $     TCPIP_LIB = ""
841 $!
842 $!    Done with TCPIP
843 $!
844 $   ENDIF
845 $!
846 $!  Add TCP/IP type to CC definitions.
847 $!
848 $   CCDEFS = CCDEFS + ",TCPIP_TYPE_''P3'"
849 $!
850 $!  Print info
851 $!
852 $   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
853 $!
854 $!  Else The User Entered An Invalid Arguement.
855 $!
856 $ ELSE
857 $!
858 $!  Tell The User We Don't Know What They Want.
859 $!
860 $   WRITE SYS$OUTPUT ""
861 $   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
862 $   WRITE SYS$OUTPUT ""
863 $   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
864 $   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
865 $   WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP (post UCX) TCP/IP library."
866 $   WRITE SYS$OUTPUT ""
867 $!
868 $!  Time To EXIT.
869 $!
870 $   EXIT
871 $!
872 $!  Done with TCP/IP libraries
873 $!
874 $ ENDIF
875 $!
876 $! Finish up the definition of CC.
877 $!
878 $ IF COMPILER .EQS. "DECC"
879 $ THEN
880 $   IF CCDISABLEWARNINGS .NES. ""
881 $   THEN
882 $     CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
883 $   ENDIF
884 $ ELSE
885 $   CCDISABLEWARNINGS = ""
886 $ ENDIF
887 $ CC2 = CC + "/DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
888 $ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
889 $!
890 $! Show user the result
891 $!
892 $ WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC
893 $!
894 $! Special Threads For OpenVMS v7.1 Or Later
895 $!
896 $! Written By:  Richard Levitte
897 $!              richard@levitte.org
898 $!
899 $!
900 $! Check To See If We Have A Option For P4.
901 $!
902 $ IF (P4.EQS."")
903 $ THEN
904 $!
905 $!  Get The Version Of VMS We Are Using.
906 $!
907 $   ISSEVEN :=
908 $   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
909 $   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
910 $!
911 $!  Check To See If The VMS Version Is v7.1 Or Later.
912 $!
913 $   IF (TMP.GE.71)
914 $   THEN
915 $!
916 $!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
917 $!
918 $     ISSEVEN := ,PTHREAD_USE_D4
919 $!
920 $!  End The VMS Version Check.
921 $!
922 $   ENDIF
923 $!
924 $! End The P4 Check.
925 $!
926 $ ENDIF
927 $!
928 $! Check if the user wanted to compile just a subset of all the programs.
929 $!
930 $ IF P5 .NES. ""
931 $ THEN
932 $   PROGRAMS = P5
933 $ ENDIF
934 $!
935 $!  Time To RETURN...
936 $!
937 $ RETURN
938 $!
939 $ INITIALISE:
940 $!
941 $! Save old value of the logical name OPENSSL
942 $!
943 $ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
944 $!
945 $! Save directory information
946 $!
947 $ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
948 $ __HERE = F$EDIT(__HERE,"UPCASE")
949 $ __TOP = __HERE - "APPS]"
950 $ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
951 $!
952 $! Set up the logical name OPENSSL to point at the include directory
953 $!
954 $ DEFINE OPENSSL/NOLOG '__INCLUDE'
955 $!
956 $! Done
957 $!
958 $ RETURN
959 $!
960 $ CLEANUP:
961 $!
962 $! Restore the logical name OPENSSL if it had a value
963 $!
964 $ IF __SAVE_OPENSSL .EQS. ""
965 $ THEN
966 $   DEASSIGN OPENSSL
967 $ ELSE
968 $   DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
969 $ ENDIF
970 $!
971 $! Done
972 $!
973 $ RETURN