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