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