39b50ab3c9a7c323ca341ea057d0044f90ad2174
[openssl.git] / engines / makeengines.com
1 $!
2 $!  MAKEENGINES.COM
3 $!  Written By:  Richard Levitte
4 $!               richard@levitte.org
5 $!
6 $!  This command file compiles and creates the various engines in form
7 $!  of shared images.  They are placed in [.xxx.EXE.ENGINES], where "xxx"
8 $!  is ALPHA, IA64 or VAX, depending on your hardware.
9 $!
10 $!  P1  if this is ENGINES or ALL, the engines will build, otherwise not.
11 $!
12 $!  P2  DEBUG or NODEBUG to compile with or without debugger information.
13 $!
14 $!  P3  VAXC            for VAX C
15 $!      DECC            for DEC C
16 $!      GNUC            for GNU C (untested)
17 $!
18 $!  P4  if defined, sets the TCP/IP libraries to use.  UCX or TCPIP is
19 $!      used by default since most other implementations come with a
20 $!      compatibility library.  The value must be one of the following:
21 $!
22 $!      UCX             for UCX
23 $!      SOCKETSHR       for SOCKETSHR+NETLIB
24 $!      TCPIP           for TCPIP (post UCX)
25 $!
26 $!  P5  if defined, tells the compiler not to use special threads.
27 $!
28 $!  P6  if defined, denotes which engines to build.  If not defined,
29 $!      all available engines are built.
30 $!
31 $!  P7, if defined, specifies the C pointer size.  Ignored on VAX.
32 $!      Supported values are:
33 $!
34 $!      ""      Compile with default (/NOPOINTER_SIZE)
35 $!      32      Compile with /POINTER_SIZE=32 (SHORT)
36 $!      64      Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV])
37 $!
38 $!  P8, if defined, specifies a directory where ZLIB files (zlib.h,
39 $!  libz.olb) may be found.  Optionally, a non-default object library
40 $!  name may be included ("dev:[dir]libz_64.olb", for example).
41 $!
42 $!-----------------------------------------------------------------------------
43 $!
44 $! Announce/identify.
45 $!
46 $ proc = f$environment( "procedure")
47 $ write sys$output "@@@ "+ -
48    f$parse( proc, , , "name")+ f$parse( proc, , , "type")
49 $!
50 $ on control_c then goto exit
51 $!
52 $! Set the default TCP/IP library to link against if needed
53 $!
54 $ TCPIP_LIB = ""
55 $ ZLIB_LIB = ""
56 $!
57 $! Check What Architecture We Are Using.
58 $!
59 $ IF (F$GETSYI("CPU").LT.128)
60 $ THEN
61 $!
62 $!  The Architecture Is VAX.
63 $!
64 $   ARCH = "VAX"
65 $!
66 $! Else...
67 $!
68 $ ELSE
69 $!
70 $!  The Architecture Is Alpha, IA64 or whatever comes in the future.
71 $!
72 $   ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
73 $   IF (ARCH .EQS. "") THEN ARCH = "UNK"
74 $!
75 $! End The Architecture Check.
76 $!
77 $ ENDIF
78 $!
79 $ ARCHD = ARCH
80 $ LIB32 = "32"
81 $ OPT_FILE = ""
82 $ POINTER_SIZE = ""
83 $!
84 $! Set the names of the engines we want to build
85 $! NOTE: Some might think this list ugly.  However, it's made this way to
86 $! reflect the LIBNAMES variable in Makefile as closely as possible,
87 $! thereby making it fairly easy to verify that the lists are the same.
88 $! NOTE: gmp isn't built, as it's mostly a test engine and brings in another
89 $! library that isn't necessarely ported to VMS.
90 $!
91 $ ENGINES = "," + P6
92 $ IF ENGINES .EQS. "," THEN -
93         ENGINES = ",4758cca,aep,atalla,cswift,chil,nuron,sureware,ubsec,padlock,"
94 $!
95 $! GOST requires a 64-bit integer type, unavailable on VAX.
96 $!
97 $ IF (ARCH .NES. "VAX") THEN -
98        ENGINES = ENGINES+ ",ccgost"
99 $!
100 $! Check options.
101 $!
102 $ OPT_PHASE = P1
103 $ ACCEPT_PHASE = "ALL,ENGINES"
104 $ OPT_DEBUG = P2
105 $ OPT_COMPILER = P3
106 $ OPT_TCPIP_LIB = P4
107 $ OPT_SPECIAL_THREADS = P5
108 $ OPT_POINTER_SIZE = P7
109 $ ZLIB = P8
110 $
111 $ GOSUB CHECK_OPTIONS
112 $!
113 $! Set the goal directories, and create them if necessary
114 $!
115 $ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.ENGINES]
116 $ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.ENGINES]
117 $ IF F$PARSE(OBJ_DIR) .EQS. "" THEN CREATE/DIRECTORY 'OBJ_DIR'
118 $ IF F$PARSE(EXE_DIR) .EQS. "" THEN CREATE/DIRECTORY 'EXE_DIR'
119 $!
120 $! Set the goal files, and create them if necessary
121 $!
122 $ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
123 $ IF F$SEARCH(CRYPTO_LIB) .EQS. "" THEN LIBRARY/CREATE/OBJECT 'CRYPTO_LIB'
124 $!
125 $! Specify the destination directory in any /MAP option.
126 $!
127 $ if (LINKMAP .eqs. "MAP")
128 $ then
129 $   LINKMAP = LINKMAP+ "=''EXE_DIR'"
130 $ endif
131 $!
132 $! Add the location prefix to the linker options file name.
133 $!
134 $ if (OPT_FILE .nes. "")
135 $ then
136 $   OPT_FILE = EXE_DIR+ OPT_FILE
137 $ endif
138 $!
139 $! Initialise.
140 $!
141 $ GOSUB INITIALISE
142 $ GOSUB CHECK_OPT_FILE
143 $!
144 $! Define what goes into each engine.  VAX includes a transfer vector.
145 $!
146 $ ENGINE_ = ""
147 $ TV_OBJ = ""
148 $ IF ARCH .EQS. "VAX"
149 $ THEN
150 $   ENGINE_ = "engine_vector.mar"
151 $   TV_OBJ_NAME = OBJ_DIR + F$PARSE(ENGINE_,,,"NAME","SYNTAX_ONLY") + ".OBJ"
152 $   TV_OBJ = ",''TV_OBJ_NAME'"
153 $ ENDIF
154 $ ENGINE_4758CCA = "e_4758cca"
155 $ ENGINE_aep = "e_aep"
156 $ ENGINE_atalla = "e_atalla"
157 $ ENGINE_cswift = "e_cswift"
158 $ ENGINE_chil = "e_chil"
159 $ ENGINE_nuron = "e_nuron"
160 $ ENGINE_sureware = "e_sureware"
161 $ ENGINE_ubsec = "e_ubsec"
162 $ ENGINE_padlock = "e_padlock"
163 $
164 $ ENGINE_ccgost_SUBDIR = "ccgost"
165 $ ENGINE_ccgost = "e_gost_err,gost2001_keyx,gost2001,gost89,gost94_keyx,"+ -
166                   "gost_ameth,gost_asn1,gost_crypt,gost_ctl,gost_eng,"+ -
167                   "gosthash,gost_keywrap,gost_md,gost_params,gost_pmeth,"+ -
168                   "gost_sign"
169 $!
170 $! Define which programs need to be linked with a TCP/IP library
171 $!
172 $ TCPIP_ENGINES = ",,"
173 $ IF COMPILER .EQS. "VAXC" THEN -
174      TCPIP_ENGINES = ",,"
175 $!
176 $! Set up two loops, one that keeps track of the engines,
177 $! and one that keeps track of all the files going into
178 $! the current engine.
179 $!
180 $! Here's the start of the engine loop.
181 $!
182 $ ENGINE_COUNTER = 0
183 $ ENGINE_NEXT:
184 $!
185 $! Extract the current engine name, and if we've reached the end, stop
186 $!
187 $ ENGINE_NAME = F$ELEMENT(ENGINE_COUNTER,",",ENGINES)
188 $ IF (ENGINE_NAME.EQS.",") THEN GOTO ENGINE_DONE
189 $!
190 $ ENGINE_COUNTER = ENGINE_COUNTER + 1
191 $!
192 $! Set up the engine library names.
193 $!
194 $ LIB_ENGINE = "ENGINE_" + ENGINE_NAME
195 $!
196 $! Check if the library module name actually is defined
197 $!
198 $ IF F$TYPE('LIB_ENGINE') .EQS. ""
199 $ THEN
200 $   WRITE SYS$ERROR ""
201 $   WRITE SYS$ERROR "The module ",ENGINE_NAME," does not exist.  Continuing..."
202 $   WRITE SYS$ERROR ""
203 $   GOTO ENGINE_NEXT
204 $ ENDIF
205 $!
206 $! Talk to the user
207 $!
208 $ IF ENGINE_NAME .NES. ""
209 $ THEN
210 $   WRITE SYS$OUTPUT "Compiling The ",ENGINE_NAME," Library Files. (",BUILDALL,")"
211 $ ELSE
212 $   WRITE SYS$OUTPUT "Compiling Support Files. (",BUILDALL,")"
213 $ ENDIF
214 $!
215 $! Create a .OPT file for the object files (for a real engine name).
216 $!
217 $ IF ENGINE_NAME .NES. ""
218 $ THEN
219 $   OPEN /WRITE OBJECTS 'EXE_DIR''ENGINE_NAME'.OPT
220 $ ENDIF
221 $!
222 $! Here's the start of per-engine module loop.
223 $!
224 $ FILE_COUNTER = 0
225 $ FILE_NEXT:
226 $!
227 $! Extract the file name from the file list, and if we've reached the end, stop
228 $!
229 $ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",'LIB_ENGINE')
230 $ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
231 $!
232 $ FILE_COUNTER = FILE_COUNTER + 1
233 $!
234 $ IF FILE_NAME .EQS. "" THEN GOTO FILE_NEXT
235 $!
236 $! Set up the source and object reference
237 $!
238 $ IF F$TYPE('LIB_ENGINE'_SUBDIR) .EQS. ""
239 $ THEN
240 $     SOURCE_FILE = F$PARSE(FILE_NAME,"SYS$DISK:[].C",,,"SYNTAX_ONLY")
241 $ ELSE
242 $     SOURCE_FILE = F$PARSE(FILE_NAME,"SYS$DISK:[."+'LIB_ENGINE'_SUBDIR+"].C",,,"SYNTAX_ONLY")
243 $ ENDIF
244 $ OBJECT_FILE = OBJ_DIR + F$PARSE(FILE_NAME,,,"NAME","SYNTAX_ONLY") + ".OBJ"
245 $!
246 $! If we get some problem, we just go on trying to build the next module.
247 $ ON WARNING THEN GOTO FILE_NEXT
248 $!
249 $! Check if the module we want to compile is actually there.
250 $!
251 $ IF F$SEARCH(SOURCE_FILE) .EQS. ""
252 $ THEN
253 $   WRITE SYS$OUTPUT ""
254 $   WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Doesn't Exist."
255 $   WRITE SYS$OUTPUT ""
256 $   GOTO EXIT
257 $ ENDIF
258 $!
259 $! Talk to the user.
260 $!
261 $ WRITE SYS$OUTPUT "    ",FILE_NAME,""
262 $!
263 $! Do the dirty work.
264 $!
265 $ ON ERROR THEN GOTO FILE_NEXT
266 $ IF F$EDIT(F$PARSE(SOURCE_FILE,,,"TYPE","SYNTAX_ONLY"),"UPCASE") .EQS. ".MAR"
267 $ THEN
268 $   MACRO/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
269 $ ELSE
270 $   CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
271 $ ENDIF
272 $!
273 $! Write the entry to the .OPT file (for a real engine name).
274 $!
275 $ IF ENGINE_NAME .NES. ""
276 $ THEN
277 $   WRITE OBJECTS OBJECT_FILE
278 $ ENDIF
279 $!
280 $! Next file
281 $!
282 $ GOTO FILE_NEXT
283 $!
284 $ FILE_DONE:
285 $!
286 $! Do not link the support files.
287 $!
288 $ IF ENGINE_NAME .EQS. "" THEN GOTO ENGINE_NEXT
289 $!
290 $! Close the linker options file (for a real engine name).
291 $!
292 $ CLOSE OBJECTS
293 $!
294 $! Now, there are two ways to handle this.  We can either build 
295 $! shareable images or stick the engine object file into libcrypto.
296 $! For now, the latter is NOT supported.
297 $!
298 $!!!!! LIBRARY/REPLACE 'CRYPTO_LIB' 'OBJECT_FILE'
299 $!
300 $! For shareable libraries, we need to do things a little differently
301 $! depending on if we link with a TCP/IP library or not.
302 $!
303 $ ENGINE_OPT := SYS$DISK:[]'ARCH'.OPT
304 $ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /SHARE='EXE_DIR''ENGINE_NAME'.EXE -
305    'EXE_DIR''ENGINE_NAME'.OPT /OPTIONS -
306    'TV_OBJ', -
307    'CRYPTO_LIB' /LIBRARY, -
308    'ENGINE_OPT' /OPTIONS -
309    'TCPIP_LIB' -
310    'ZLIB_LIB' -
311    ,'OPT_FILE' /OPTIONS
312 $!
313 $! Next engine
314 $!
315 $ GOTO ENGINE_NEXT
316 $!
317 $ ENGINE_DONE:
318 $!
319 $! Talk to the user
320 $!
321 $ WRITE SYS$OUTPUT "All Done..."
322 $ EXIT:
323 $ GOSUB CLEANUP
324 $ EXIT
325 $!
326 $! Check For The Link Option FIle.
327 $!
328 $ CHECK_OPT_FILE:
329 $!
330 $! Check To See If We Need To Make A VAX C Option File.
331 $!
332 $ IF (COMPILER.EQS."VAXC")
333 $ THEN
334 $!
335 $!  Check To See If We Already Have A VAX C Linker Option File.
336 $!
337 $   IF (F$SEARCH(OPT_FILE).EQS."")
338 $   THEN
339 $!
340 $!    We Need A VAX C Linker Option File.
341 $!
342 $     CREATE 'OPT_FILE'
343 $DECK
344 !
345 ! Default System Options File To Link Against 
346 ! The Sharable VAX C Runtime Library.
347 !
348 SYS$SHARE:VAXCRTL.EXE/SHARE
349 $EOD
350 $!
351 $!  End The Option File Check.
352 $!
353 $   ENDIF
354 $!
355 $! End The VAXC Check.
356 $!
357 $ ENDIF
358 $!
359 $! Check To See If We Need A GNU C Option File.
360 $!
361 $ IF (COMPILER.EQS."GNUC")
362 $ THEN
363 $!
364 $!  Check To See If We Already Have A GNU C Linker Option File.
365 $!
366 $   IF (F$SEARCH(OPT_FILE).EQS."")
367 $   THEN
368 $!
369 $!    We Need A GNU C Linker Option File.
370 $!
371 $     CREATE 'OPT_FILE'
372 $DECK
373 !
374 ! Default System Options File To Link Against 
375 ! The Sharable C Runtime Library.
376 !
377 GNU_CC:[000000]GCCLIB/LIBRARY
378 SYS$SHARE:VAXCRTL/SHARE
379 $EOD
380 $!
381 $!  End The Option File Check.
382 $!
383 $   ENDIF
384 $!
385 $! End The GNU C Check.
386 $!
387 $ ENDIF
388 $!
389 $! Check To See If We Need A DEC C Option File.
390 $!
391 $ IF (COMPILER.EQS."DECC")
392 $ THEN
393 $!
394 $!  Check To See If We Already Have A DEC C Linker Option File.
395 $!
396 $   IF (F$SEARCH(OPT_FILE).EQS."")
397 $   THEN
398 $!
399 $!    Figure Out If We Need A non-VAX Or A VAX Linker Option File.
400 $!
401 $     IF ARCH .EQS. "VAX"
402 $     THEN
403 $!
404 $!      We Need A DEC C Linker Option File For VAX.
405 $!
406 $       CREATE 'OPT_FILE'
407 $DECK
408 !
409 ! Default System Options File To Link Against 
410 ! The Sharable DEC C Runtime Library.
411 !
412 SYS$SHARE:DECC$SHR.EXE/SHARE
413 $EOD
414 $!
415 $!    Else...
416 $!
417 $     ELSE
418 $!
419 $!      Create The non-VAX Linker Option File.
420 $!
421 $       CREATE 'OPT_FILE'
422 $DECK
423 !
424 ! Default System Options File For non-VAX To Link Against 
425 ! The Sharable C Runtime Library.
426 !
427 SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
428 SYS$SHARE:CMA$OPEN_RTL/SHARE
429 $EOD
430 $!
431 $!    End The DEC C Option File Check.
432 $!
433 $     ENDIF
434 $!
435 $!  End The Option File Search.
436 $!
437 $   ENDIF
438 $!
439 $! End The DEC C Check.
440 $!
441 $ ENDIF
442 $!
443 $!  Tell The User What Linker Option File We Are Using.
444 $!
445 $ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."     
446 $!
447 $! Time To RETURN.
448 $!
449 $ RETURN
450 $!
451 $! Check The User's Options.
452 $!
453 $ CHECK_OPTIONS:
454 $!
455 $! Check To See If OPT_PHASE Is Blank.
456 $!
457 $ IF (OPT_PHASE.EQS."ALL")
458 $ THEN
459 $!
460 $!   OPT_PHASE Is Blank, So Build Everything.
461 $!
462 $    BUILDALL = "ALL"
463 $!
464 $! Else...
465 $!
466 $ ELSE
467 $!
468 $!  Else, Check To See If OPT_PHASE Has A Valid Argument.
469 $!
470 $   IF ("," + ACCEPT_PHASE + ",") - ("," + OPT_PHASE + ",") -
471        .NES. ("," + ACCEPT_PHASE + ",")
472 $   THEN
473 $!
474 $!    A Valid Argument.
475 $!
476 $     BUILDALL = OPT_PHASE
477 $!
478 $!  Else...
479 $!
480 $   ELSE
481 $!
482 $!    Tell The User We Don't Know What They Want.
483 $!
484 $     WRITE SYS$OUTPUT ""
485 $     WRITE SYS$OUTPUT "The option ",OPT_PHASE," is invalid.  The valid options are:"
486 $     WRITE SYS$OUTPUT ""
487 $     IF ("," + ACCEPT_PHASE + ",") - ",ALL," -
488         .NES. ("," + ACCEPT_PHASE + ",") THEN -
489         WRITE SYS$OUTPUT "    ALL      :  just build everything."
490 $     IF ("," + ACCEPT_PHASE + ",") - ",ENGINES," -
491         .NES. ("," + ACCEPT_PHASE + ",") THEN -
492         WRITE SYS$OUTPUT "    ENGINES  :  to compile just the [.xxx.EXE.ENGINES]*.EXE hareable images."
493 $     WRITE SYS$OUTPUT ""
494 $     WRITE SYS$OUTPUT " where 'xxx' stands for:"
495 $     WRITE SYS$OUTPUT ""
496 $     WRITE SYS$OUTPUT "    ALPHA[64]:  Alpha architecture."
497 $     WRITE SYS$OUTPUT "    IA64[64] :  IA64 architecture."
498 $     WRITE SYS$OUTPUT "    VAX      :  VAX architecture."
499 $     WRITE SYS$OUTPUT ""
500 $!
501 $!    Time To EXIT.
502 $!
503 $     EXIT
504 $!
505 $!  End The Valid Argument Check.
506 $!
507 $   ENDIF
508 $!
509 $! End The OPT_PHASE Check.
510 $!
511 $ ENDIF
512 $!
513 $! Check To See If OPT_DEBUG Is Blank.
514 $!
515 $ IF (OPT_DEBUG.EQS."NODEBUG")
516 $ THEN
517 $!
518 $!  OPT_DEBUG Is NODEBUG, So Compile Without The Debugger Information.
519 $!
520 $   DEBUGGER = "NODEBUG"
521 $   LINKMAP = "NOMAP"
522 $   TRACEBACK = "NOTRACEBACK" 
523 $   GCC_OPTIMIZE = "OPTIMIZE"
524 $   CC_OPTIMIZE = "OPTIMIZE"
525 $   MACRO_OPTIMIZE = "OPTIMIZE"
526 $   WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
527 $   WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
528 $ ELSE
529 $!
530 $!  Check To See If We Are To Compile With Debugger Information.
531 $!
532 $   IF (OPT_DEBUG.EQS."DEBUG")
533 $   THEN
534 $!
535 $!    Compile With Debugger Information.
536 $!
537 $     DEBUGGER = "DEBUG"
538 $     LINKMAP = "MAP"
539 $     TRACEBACK = "TRACEBACK"
540 $     GCC_OPTIMIZE = "NOOPTIMIZE"
541 $     CC_OPTIMIZE = "NOOPTIMIZE"
542 $     MACRO_OPTIMIZE = "NOOPTIMIZE"
543 $     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
544 $     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
545 $   ELSE 
546 $!
547 $!    They Entered An Invalid Option.
548 $!
549 $     WRITE SYS$OUTPUT ""
550 $     WRITE SYS$OUTPUT "The Option ",OPT_DEBUG," Is Invalid.  The Valid Options Are:"
551 $     WRITE SYS$OUTPUT ""
552 $     WRITE SYS$OUTPUT "     DEBUG   :  Compile With The Debugger Information."
553 $     WRITE SYS$OUTPUT "     NODEBUG :  Compile Without The Debugger Information."
554 $     WRITE SYS$OUTPUT ""
555 $!
556 $!    Time To EXIT.
557 $!
558 $     EXIT
559 $!
560 $!  End The Valid Argument Check.
561 $!
562 $   ENDIF
563 $!
564 $! End The OPT_DEBUG Check.
565 $!
566 $ ENDIF
567 $!
568 $! Special Threads For OpenVMS v7.1 Or Later
569 $!
570 $! Written By:  Richard Levitte
571 $!              richard@levitte.org
572 $!
573 $!
574 $! Check To See If We Have A Option For OPT_SPECIAL_THREADS.
575 $!
576 $ IF (OPT_SPECIAL_THREADS.EQS."")
577 $ THEN
578 $!
579 $!  Get The Version Of VMS We Are Using.
580 $!
581 $   ISSEVEN :=
582 $   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
583 $   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
584 $!
585 $!  Check To See If The VMS Version Is v7.1 Or Later.
586 $!
587 $   IF (TMP.GE.71)
588 $   THEN
589 $!
590 $!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
591 $!
592 $     ISSEVEN := ,PTHREAD_USE_D4
593 $!
594 $!  End The VMS Version Check.
595 $!
596 $   ENDIF
597 $!
598 $! End The OPT_SPECIAL_THREADS Check.
599 $!
600 $ ENDIF
601 $!
602 $! Check OPT_POINTER_SIZE (P7).
603 $!
604 $ IF (OPT_POINTER_SIZE .NES. "") .AND. (ARCH .NES. "VAX")
605 $ THEN
606 $!
607 $   IF (OPT_POINTER_SIZE .EQS. "32")
608 $   THEN
609 $     POINTER_SIZE = "/POINTER_SIZE=32"
610 $   ELSE
611 $     IF (OPT_POINTER_SIZE .EQS. "64")
612 $     THEN
613 $       POINTER_SIZE = "/POINTER_SIZE=64"
614 $       ARCHD = ARCH+ "_64"
615 $       LIB32 = ""
616 $     ELSE
617 $!
618 $!      Tell The User Entered An Invalid Option.
619 $!
620 $       WRITE SYS$OUTPUT ""
621 $       WRITE SYS$OUTPUT "The Option ", OPT_POINTER_SIZE, -
622          " Is Invalid.  The Valid Options Are:"
623 $       WRITE SYS$OUTPUT ""
624 $       WRITE SYS$OUTPUT "    """"  :  Compile with default (short) pointers."
625 $       WRITE SYS$OUTPUT "    32  :  Compile with 32-bit (short) pointers."
626 $       WRITE SYS$OUTPUT "    64  :  Compile with 64-bit (long) pointers."
627 $       WRITE SYS$OUTPUT ""
628 $! 
629 $!      Time To EXIT.
630 $!
631 $       EXIT
632 $!
633 $     ENDIF
634 $!
635 $   ENDIF
636 $!
637 $! End The OPT_POINTER_SIZE Check.
638 $!
639 $ ENDIF
640 $!
641 $! Set basic C compiler /INCLUDE directories.
642 $!
643 $ CC_INCLUDES = "SYS$DISK:[],SYS$DISK:[.VENDOR_DEFNS]"
644 $!
645 $! Check To See If OPT_COMPILER Is Blank.
646 $!
647 $ IF (OPT_COMPILER.EQS."")
648 $ THEN
649 $!
650 $!  O.K., The User Didn't Specify A Compiler, Let's Try To
651 $!  Find Out Which One To Use.
652 $!
653 $!  Check To See If We Have GNU C.
654 $!
655 $   IF (F$TRNLNM("GNU_CC").NES."")
656 $   THEN
657 $!
658 $!    Looks Like GNUC, Set To Use GNUC.
659 $!
660 $     OPT_COMPILER = "GNUC"
661 $!
662 $!  Else...
663 $!
664 $   ELSE
665 $!
666 $!    Check To See If We Have VAXC Or DECC.
667 $!
668 $     IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
669 $     THEN 
670 $!
671 $!      Looks Like DECC, Set To Use DECC.
672 $!
673 $       OPT_COMPILER = "DECC"
674 $!
675 $!    Else...
676 $!
677 $     ELSE
678 $!
679 $!      Looks Like VAXC, Set To Use VAXC.
680 $!
681 $       OPT_COMPILER = "VAXC"
682 $!
683 $!    End The VAXC Compiler Check.
684 $!
685 $     ENDIF
686 $!
687 $!  End The DECC & VAXC Compiler Check.
688 $!
689 $   ENDIF
690 $!
691 $!  End The Compiler Check.
692 $!
693 $ ENDIF
694 $!
695 $! Check To See If We Have A Option For OPT_TCPIP_LIB.
696 $!
697 $ IF (OPT_TCPIP_LIB.EQS."")
698 $ THEN
699 $!
700 $!  Find out what socket library we have available
701 $!
702 $   IF F$PARSE("SOCKETSHR:") .NES. ""
703 $   THEN
704 $!
705 $!    We have SOCKETSHR, and it is my opinion that it's the best to use.
706 $!
707 $     OPT_TCPIP_LIB = "SOCKETSHR"
708 $!
709 $!    Tell the user
710 $!
711 $     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
712 $!
713 $!    Else, let's look for something else
714 $!
715 $   ELSE
716 $!
717 $!    Like UCX (the reason to do this before Multinet is that the UCX
718 $!    emulation is easier to use...)
719 $!
720 $     IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
721          .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
722          .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
723 $     THEN
724 $!
725 $!      Last resort: a UCX or UCX-compatible library
726 $!
727 $       OPT_TCPIP_LIB = "UCX"
728 $!
729 $!      Tell the user
730 $!
731 $       WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
732 $!
733 $!      That was all...
734 $!
735 $     ENDIF
736 $   ENDIF
737 $ ENDIF
738 $!
739 $! Set Up Initial CC Definitions, Possibly With User Ones
740 $!
741 $ CCDEFS = "TCPIP_TYPE_''OPT_TCPIP_LIB',DSO_VMS"
742 $ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
743 $ CCEXTRAFLAGS = ""
744 $ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
745 $ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX"
746 $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
747         CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
748 $!
749 $! Check To See If We Have A ZLIB Option.
750 $!
751 $ IF (ZLIB .NES. "")
752 $ THEN
753 $!
754 $!  Check for expected ZLIB files.
755 $!
756 $   err = 0
757 $   file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
758 $   if (f$search( file1) .eqs. "")
759 $   then
760 $     WRITE SYS$OUTPUT ""
761 $     WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
762 $     WRITE SYS$OUTPUT "    Can't find header: ''file1'"
763 $     err = 1
764 $   endif
765 $   file1 = f$parse( "A.;", ZLIB)- "A.;"
766 $!
767 $   file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
768 $   if (f$search( file2) .eqs. "")
769 $   then
770 $     if (err .eq. 0)
771 $     then
772 $       WRITE SYS$OUTPUT ""
773 $       WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
774 $     endif
775 $     WRITE SYS$OUTPUT "    Can't find library: ''file2'"
776 $     WRITE SYS$OUTPUT ""
777 $     err = err+ 2
778 $   endif
779 $   if (err .eq. 1)
780 $   then
781 $     WRITE SYS$OUTPUT ""
782 $   endif
783 $!
784 $   if (err .ne. 0)
785 $   then
786 $     EXIT
787 $   endif
788 $!
789 $   CCDEFS = """ZLIB=1"", "+ CCDEFS
790 $   CC_INCLUDES = CC_INCLUDES+ ", "+ file1
791 $   ZLIB_LIB = ", ''file2' /library"
792 $!
793 $!  Print info
794 $!
795 $   WRITE SYS$OUTPUT "ZLIB library spec: ", file2
796 $!
797 $! End The ZLIB Check.
798 $!
799 $ ENDIF
800 $!
801 $!  Check To See If The User Entered A Valid Parameter.
802 $!
803 $ IF (OPT_COMPILER.EQS."VAXC").OR.(OPT_COMPILER.EQS."DECC").OR.(OPT_COMPILER.EQS."GNUC")
804 $ THEN
805 $!
806 $!    Check To See If The User Wanted DECC.
807 $!
808 $   IF (OPT_COMPILER.EQS."DECC")
809 $   THEN
810 $!
811 $!    Looks Like DECC, Set To Use DECC.
812 $!
813 $     COMPILER = "DECC"
814 $!
815 $!    Tell The User We Are Using DECC.
816 $!
817 $     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
818 $!
819 $!    Use DECC...
820 $!
821 $     CC = "CC"
822 $     IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
823          THEN CC = "CC/DECC"
824 $     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=RELAXED"+ -
825        "''POINTER_SIZE'/NOLIST/PREFIX=ALL" + -
826        "/INCLUDE=(''CC_INCLUDES')" + -
827        CCEXTRAFLAGS
828 $!
829 $!    Define The Linker Options File Name.
830 $!
831 $     OPT_FILE = "VAX_DECC_OPTIONS.OPT"
832 $!
833 $!  End DECC Check.
834 $!
835 $   ENDIF
836 $!
837 $!  Check To See If We Are To Use VAXC.
838 $!
839 $   IF (OPT_COMPILER.EQS."VAXC")
840 $   THEN
841 $!
842 $!    Looks Like VAXC, Set To Use VAXC.
843 $!
844 $     COMPILER = "VAXC"
845 $!
846 $!    Tell The User We Are Using VAX C.
847 $!
848 $     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
849 $!
850 $!    Compile Using VAXC.
851 $!
852 $     CC = "CC"
853 $     IF ARCH.NES."VAX"
854 $     THEN
855 $       WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
856 $       EXIT
857 $     ENDIF
858 $     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
859 $     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
860            "/INCLUDE=(''CC_INCLUDES')" + -
861            CCEXTRAFLAGS
862 $     CCDEFS = """VAXC""," + CCDEFS
863 $!
864 $!    Define <sys> As SYS$COMMON:[SYSLIB]
865 $!
866 $     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
867 $!
868 $!    Define The Linker Options File Name.
869 $!
870 $     OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
871 $!
872 $!  End VAXC Check
873 $!
874 $   ENDIF
875 $!
876 $!  Check To See If We Are To Use GNU C.
877 $!
878 $   IF (OPT_COMPILER.EQS."GNUC")
879 $   THEN
880 $!
881 $!    Looks Like GNUC, Set To Use GNUC.
882 $!
883 $     COMPILER = "GNUC"
884 $!
885 $!    Tell The User We Are Using GNUC.
886 $!
887 $     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
888 $!
889 $!    Use GNU C...
890 $!
891 $     CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
892            "/INCLUDE=(''CC_INCLUDES')" + -
893            CCEXTRAFLAGS
894 $!
895 $!    Define The Linker Options File Name.
896 $!
897 $     OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
898 $!
899 $!  End The GNU C Check.
900 $!
901 $   ENDIF
902 $!
903 $!  Set up default defines
904 $!
905 $   CCDEFS = """FLAT_INC=1""," + CCDEFS
906 $!
907 $!  Finish up the definition of CC.
908 $!
909 $   IF COMPILER .EQS. "DECC"
910 $   THEN
911 $     IF CCDISABLEWARNINGS .NES. ""
912 $     THEN
913 $       CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
914 $     ENDIF
915 $   ELSE
916 $     CCDISABLEWARNINGS = ""
917 $   ENDIF
918 $   CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
919 $!
920 $!  Show user the result
921 $!
922 $   WRITE/SYMBOL SYS$OUTPUT "Main C Compiling Command: ",CC
923 $!
924 $!  Else The User Entered An Invalid Argument.
925 $!
926 $ ELSE
927 $!
928 $!  Tell The User We Don't Know What They Want.
929 $!
930 $   WRITE SYS$OUTPUT ""
931 $   WRITE SYS$OUTPUT "The Option ",OPT_COMPILER," Is Invalid.  The Valid Options Are:"
932 $   WRITE SYS$OUTPUT ""
933 $   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
934 $   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
935 $   WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
936 $   WRITE SYS$OUTPUT ""
937 $!
938 $!  Time To EXIT.
939 $!
940 $   EXIT
941 $!
942 $! End The Valid Argument Check.
943 $!
944 $ ENDIF
945 $!
946 $! Build a MACRO command for the architecture at hand
947 $!
948 $ IF ARCH .EQS. "VAX"
949 $ THEN
950 $   MACRO = "MACRO/''DEBUGGER'"
951 $ ELSE
952 $   MACRO = "MACRO/MIGRATION/''DEBUGGER'/''MACRO_OPTIMIZE'"
953 $ ENDIF
954 $!
955 $!  Show user the result
956 $!
957 $ WRITE/SYMBOL SYS$OUTPUT "Main MACRO Compiling Command: ",MACRO
958 $!
959 $! Time to check the contents, and to make sure we get the correct library.
960 $!
961 $ IF OPT_TCPIP_LIB.EQS."SOCKETSHR" .OR. OPT_TCPIP_LIB.EQS."MULTINET" -
962      .OR. OPT_TCPIP_LIB.EQS."UCX" .OR. OPT_TCPIP_LIB.EQS."TCPIP" -
963      .OR. OPT_TCPIP_LIB.EQS."NONE"
964 $ THEN
965 $!
966 $!  Check to see if SOCKETSHR was chosen
967 $!
968 $   IF OPT_TCPIP_LIB.EQS."SOCKETSHR"
969 $   THEN
970 $!
971 $!    Set the library to use SOCKETSHR
972 $!
973 $     TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
974 $!
975 $!    Done with SOCKETSHR
976 $!
977 $   ENDIF
978 $!
979 $!  Check to see if MULTINET was chosen
980 $!
981 $   IF OPT_TCPIP_LIB.EQS."MULTINET"
982 $   THEN
983 $!
984 $!    Set the library to use UCX emulation.
985 $!
986 $     OPT_TCPIP_LIB = "UCX"
987 $!
988 $!    Done with MULTINET
989 $!
990 $   ENDIF
991 $!
992 $!  Check to see if UCX was chosen
993 $!
994 $   IF OPT_TCPIP_LIB.EQS."UCX"
995 $   THEN
996 $!
997 $!    Set the library to use UCX.
998 $!
999 $     TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
1000 $     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
1001 $     THEN
1002 $       TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
1003 $     ELSE
1004 $       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
1005           TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
1006 $     ENDIF
1007 $!
1008 $!    Done with UCX
1009 $!
1010 $   ENDIF
1011 $!
1012 $!  Check to see if TCPIP was chosen
1013 $!
1014 $   IF OPT_TCPIP_LIB.EQS."TCPIP"
1015 $   THEN
1016 $!
1017 $!    Set the library to use TCPIP (post UCX).
1018 $!
1019 $     TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
1020 $!
1021 $!    Done with TCPIP
1022 $!
1023 $   ENDIF
1024 $!
1025 $!  Check to see if NONE was chosen
1026 $!
1027 $   IF OPT_TCPIP_LIB.EQS."NONE"
1028 $   THEN
1029 $!
1030 $!    Do not use a TCPIP library.
1031 $!
1032 $     TCPIP_LIB = ""
1033 $!
1034 $!    Done with TCPIP
1035 $!
1036 $   ENDIF
1037 $!
1038 $!  Print info
1039 $!
1040 $   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
1041 $!
1042 $!  Else The User Entered An Invalid Argument.
1043 $!
1044 $ ELSE
1045 $!
1046 $!  Tell The User We Don't Know What They Want.
1047 $!
1048 $   WRITE SYS$OUTPUT ""
1049 $   WRITE SYS$OUTPUT "The Option ",OPT_TCPIP_LIB," Is Invalid.  The Valid Options Are:"
1050 $   WRITE SYS$OUTPUT ""
1051 $   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
1052 $   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
1053 $   WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP (post UCX) TCP/IP library."
1054 $   WRITE SYS$OUTPUT ""
1055 $!
1056 $!  Time To EXIT.
1057 $!
1058 $   EXIT
1059 $!
1060 $!  Done with TCP/IP libraries
1061 $!
1062 $ ENDIF
1063 $!
1064 $!  Time To RETURN...
1065 $!
1066 $ RETURN
1067 $!
1068 $ INITIALISE:
1069 $!
1070 $! Save old value of the logical name OPENSSL
1071 $!
1072 $ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
1073 $!
1074 $! Save directory information
1075 $!
1076 $ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
1077 $ __HERE = F$EDIT(__HERE,"UPCASE")
1078 $ __TOP = __HERE - "ENGINES]"
1079 $ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
1080 $!
1081 $! Set up the logical name OPENSSL to point at the include directory
1082 $!
1083 $ DEFINE OPENSSL /NOLOG '__INCLUDE'
1084 $!
1085 $! Done
1086 $!
1087 $ RETURN
1088 $!
1089 $ CLEANUP:
1090 $!
1091 $! Restore the saved logical name OPENSSL, if it had a value.
1092 $!
1093 $ if (f$type( __SAVE_OPENSSL) .nes. "")
1094 $ then
1095 $   IF __SAVE_OPENSSL .EQS. ""
1096 $   THEN
1097 $     DEASSIGN OPENSSL
1098 $   ELSE
1099 $     DEFINE /NOLOG OPENSSL '__SAVE_OPENSSL'
1100 $   ENDIF
1101 $ endif
1102 $!
1103 $! Close any open files.
1104 $!
1105 $ if (f$trnlnm( "objects", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
1106    close objects
1107 $!
1108 $! Done
1109 $!
1110 $ RETURN
1111 $!