Make inline assembler clang-friendly [from HEAD].
[openssl.git] / makevms.com
1 $!
2 $! MAKEVMS.COM
3 $! Original Author:  UNKNOWN
4 $! Rewritten By:  Robert Byer
5 $!                Vice-President
6 $!                A-Com Computing, Inc.
7 $!                byer@mail.all-net.net
8 $!
9 $! Changes by Richard Levitte <richard@levitte.org>
10 $!            Zoltan Arpadffy <zoli@polarhome.com>
11 $!
12 $! This procedure creates the SSL libraries of "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB"
13 $! "[.xxx.EXE.SSL]LIBSSL.OLB"
14 $! The "xxx" denotes the machine architecture of ALPHA, IA64 or VAX.
15 $!
16 $! This procedures accepts two command line options listed below.
17 $!
18 $! Specify one of the following build options for P1.
19 $!
20 $!      ALL       Just build "everything".
21 $!      CONFIG    Just build the "[.CRYPTO._xxx]OPENSSLCONF.H" file.
22 $!      BUILDINF  Just build the "[.CRYPTO._xxx]BUILDINF.H" file.
23 $!      SOFTLINKS Just fix the Unix soft links.
24 $!      BUILDALL  Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done.
25 $!      CRYPTO    Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library.
26 $!      CRYPTO/x  Just build the x part of the
27 $!                "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library.
28 $!      SSL       Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library.
29 $!      SSL_TASK  Just build the "[.xxx.EXE.SSL]SSL_TASK.EXE" program.
30 $!      TEST      Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL.
31 $!      APPS      Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL.
32 $!      ENGINES   Just build the "[.xxx.EXE.ENGINES]" application programs for OpenSSL.
33 $!
34 $!
35 $! P2 is ignored (it was used to denote if RSAref should be used or not,
36 $! and is simply kept so surrounding scripts don't get confused)
37 $!
38 $! Specify DEBUG or NODEBUG as P3 to compile with or without debugging
39 $! information.
40 $!
41 $! Specify which compiler as P4 to try to compile under.
42 $!
43 $!        VAXC   For VAX C.
44 $!        DECC   For DEC C.
45 $!        GNUC   For GNU C.
46 $!        LINK   To only link the programs from existing object files.
47 $!               (not yet implemented)
48 $!
49 $! If you don't specify a compiler, it will try to determine which
50 $! "C" compiler to use.
51 $!
52 $! P5, if defined, sets a TCP/IP library to use, through one of the following
53 $! keywords:
54 $!
55 $!      UCX             for UCX or UCX emulation
56 $!      TCPIP           for TCP/IP Services or TCP/IP Services emulation
57 $!                      (this is prefered over UCX)
58 $!      SOCKETSHR       for SOCKETSHR+NETLIB
59 $!      NONE            to avoid specifying which TCP/IP implementation to
60 $!                      use at build time (this works with DEC C).  This is
61 $!                      the default.
62 $!
63 $! P6, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
64 $!
65 $!
66 $ DEF_ORIG = F$ENVIRONMENT( "DEFAULT")
67 $ ON ERROR THEN GOTO TIDY
68 $ ON CONTROL_C THEN GOTO TIDY
69 $!
70 $! Check if we're in a batch job, and make sure we get to 
71 $! the directory this script is in
72 $!
73 $ IF F$MODE() .EQS. "BATCH"
74 $ THEN
75 $   COMNAME=F$ENVIRONMENT("PROCEDURE")
76 $   COMPATH=F$PARSE("A.;",COMNAME) - "A.;"
77 $   SET DEF 'COMPATH'
78 $ ENDIF
79 $!
80 $! Check What Architecture We Are Using.
81 $!
82 $ IF (F$GETSYI("CPU").LT.128)
83 $ THEN
84 $!
85 $!  The Architecture Is VAX.
86 $!
87 $   ARCH = "VAX"
88 $!
89 $! Else...
90 $!
91 $ ELSE
92 $!
93 $!  The Architecture Is Alpha, IA64 or whatever comes in the future.
94 $!
95 $   ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
96 $   IF (ARCH .EQS. "") THEN ARCH = "UNK"
97 $!
98 $! End The Architecture Check.
99 $!
100 $ ENDIF
101 $!
102 $! Get VMS version.
103 $!
104 $ VMS_VERSION = f$edit( f$getsyi( "VERSION"), "TRIM")
105 $!
106 $! Check To Make Sure We Have Valid Command Line Parameters.
107 $!
108 $ GOSUB CHECK_OPTIONS
109 $!
110 $! Check To See What We Are To Do.
111 $!
112 $ IF (BUILDCOMMAND.EQS."ALL")
113 $ THEN
114 $!
115 $!  Start with building the OpenSSL configuration file.
116 $!
117 $   GOSUB CONFIG
118 $!
119 $!  Create The "BUILDINF.H" Include File.
120 $!
121 $   GOSUB BUILDINF
122 $!
123 $!  Fix The Unix Softlinks.
124 $!
125 $   GOSUB SOFTLINKS
126 $!
127 $ ENDIF
128 $!
129 $ IF (BUILDCOMMAND.EQS."ALL".OR.BUILDCOMMAND.EQS."BUILDALL")
130 $ THEN
131 $!
132 $!  Build The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library.
133 $!
134 $   GOSUB CRYPTO
135 $!
136 $!  Build The [.xxx.EXE.SSL]LIBSSL.OLB Library.
137 $!
138 $   GOSUB SSL
139 $!
140 $!  Build The [.xxx.EXE.SSL]SSL_TASK.EXE DECNet SSL Engine.
141 $!
142 $   GOSUB SSL_TASK
143 $!
144 $!  Build The [.xxx.EXE.TEST] OpenSSL Test Utilities.
145 $!
146 $   GOSUB TEST
147 $!
148 $!  Build The [.xxx.EXE.APPS] OpenSSL Application Utilities.
149 $!
150 $   GOSUB APPS
151 $!
152 $!  Build The [.xxx.EXE.ENGINES] OpenSSL Shareable Engines.
153 $!
154 $   GOSUB ENGINES
155 $!
156 $! Else...
157 $!
158 $ ELSE
159 $!
160 $!    Build Just What The User Wants Us To Build.
161 $!
162 $     GOSUB 'BUILDCOMMAND'
163 $!
164 $ ENDIF
165 $!
166 $! Time To EXIT.
167 $!
168 $ GOTO TIDY
169 $!
170 $! Rebuild The [.CRYPTO._xxx]OPENSSLCONF.H" file.
171 $!
172 $ CONFIG:
173 $!
174 $! Tell The User We Are Creating The [.CRYPTO._xxx]OPENSSLCONF.H File.
175 $!
176 $ WRITE SYS$OUTPUT "Creating [.CRYPTO._''ARCH']OPENSSLCONF.H Include File."
177 $!
178 $! First, make sure the directory exists.
179 $!
180 $ IF F$PARSE("SYS$DISK:[.CRYPTO._''ARCH']") .EQS. "" THEN -
181      CREATE/DIRECTORY SYS$DISK:[.CRYPTO._'ARCH']
182 $!
183 $! Different tar/UnZip versions/option may have named the file differently
184 $ IF F$SEARCH("[.crypto]opensslconf.h_in") .NES. ""
185 $ THEN
186 $   OPENSSLCONF_H_IN = "[.crypto]opensslconf.h_in"
187 $ ELSE
188 $   IF F$SEARCH( "[.crypto]opensslconf_h.in") .NES. ""
189 $   THEN
190 $     OPENSSLCONF_H_IN = "[.crypto]opensslconf_h.in"
191 $   ELSE
192 $     ! For ODS-5
193 $     IF F$SEARCH( "[.crypto]opensslconf.h.in") .NES. ""
194 $     THEN
195 $       OPENSSLCONF_H_IN = "[.crypto]opensslconf.h.in"
196 $     ELSE
197 $       WRITE SYS$ERROR "Couldn't find a [.crypto]opensslconf.h.in.  Exiting!"
198 $       $STATUS = %X00018294 ! "%RMS-F-FNF, file not found".
199 $       GOTO TIDY
200 $     ENDIF
201 $   ENDIF
202 $ ENDIF
203 $!
204 $! Create The [.CRYPTO._xxx]OPENSSLCONF.H File.
205 $! Make sure it has the right format.
206 $!
207 $ OSCH_NAME = "SYS$DISK:[.CRYPTO._''ARCH']OPENSSLCONF.H"
208 $ CREATE /FDL=SYS$INPUT: 'OSCH_NAME'
209 RECORD
210         FORMAT stream_lf
211 $ OPEN /APPEND H_FILE 'OSCH_NAME'
212 $!
213 $! Write The [.CRYPTO._xxx]OPENSSLCONF.H File.
214 $!
215 $ WRITE H_FILE "/* This file was automatically built using makevms.com */"
216 $ WRITE H_FILE "/* and ''OPENSSLCONF_H_IN' */"
217 $!
218 $! Write a few macros that indicate how this system was built.
219 $!
220 $ WRITE H_FILE ""
221 $ WRITE H_FILE "#ifndef OPENSSL_SYS_VMS"
222 $ WRITE H_FILE "# define OPENSSL_SYS_VMS"
223 $ WRITE H_FILE "#endif"
224 $
225 $! One of the best way to figure out what the list should be is to do
226 $! the followin on a Unix system:
227 $!   grep OPENSSL_NO_ crypto/*/*.h ssl/*.h engines/*.h engines/*/*.h|grep ':# *if'|sed -e 's/^.*def //'|sort|uniq
228 $! For that reason, the list will also always end up in alphabetical order
229 $ CONFIG_LOGICALS := AES,-
230                      ASM,INLINE_ASM,-
231                      BF,-
232                      BIO,-
233                      BUFFER,-
234                      BUF_FREELISTS,-
235                      CAMELLIA,-
236                      CAST,-
237                      CMS,-
238                      COMP,-
239                      DEPRECATED,-
240                      DES,-
241                      DGRAM,-
242                      DH,-
243                      DSA,-
244                      EC,-
245                      ECDH,-
246                      ECDSA,-
247                      ENGINE,-
248                      ERR,-
249                      EVP,-
250                      FP_API,-
251                      GMP,-
252                      GOST,-
253                      HASH_COMP,-
254                      HMAC,-
255                      IDEA,-
256                      JPAKE,-
257                      KRB5,-
258                      LHASH,-
259                      MD2,-
260                      MD4,-
261                      MD5,-
262                      MDC2,-
263                      OCSP,-
264                      PSK,-
265                      RC2,-
266                      RC4,-
267                      RC5,-
268                      RFC3779,-
269                      RIPEMD,-
270                      RSA,-
271                      SEED,-
272                      SHA,-
273                      SHA0,-
274                      SHA1,-
275                      SHA256,-
276                      SHA512,-
277                      SOCK,-
278                      SSL2,-
279                      STACK,-
280                      STATIC_ENGINE,-
281                      STDIO,-
282                      STORE,-
283                      TLSEXT,-
284                      WHIRLPOOL,-
285                      X509
286 $! Add a few that we know about
287 $ CONFIG_LOGICALS := 'CONFIG_LOGICALS',-
288                      THREADS
289 $! The following rules, which dictate how some algorithm choices affect
290 $! others, are picked from Configure.
291 $! Quick syntax:
292 $!  list = item[ ; list]
293 $!  item = algos / dependents
294 $!  algos = algo [, algos]
295 $!  dependents = dependent [, dependents]
296 $! When a list of algos is specified in one item, it means that they must
297 $! all be disabled for the rule to apply.
298 $! When a list of dependents is specified in one item, it means that they
299 $! will all be disabled if the rule applies.
300 $! Rules are checked sequentially.  If a rule disables an algorithm, it will
301 $! affect all following rules that depend on that algorithm being disabled.
302 $! To force something to be enabled or disabled, have no algorithms in the
303 $! algos part.
304 $ CONFIG_DISABLE_RULES := RIJNDAEL/AES;-
305                           DES/MDC2;-
306                           EC/ECDSA,ECDH;-
307                           MD5/SSL2,SSL3,TLS1;-
308                           SHA/SSL3,TLS1;-
309                           RSA/SSL2;-
310                           RSA,DSA/SSL2;-
311                           DH/SSL3,TLS1;-
312                           TLS1/TLSEXT;-
313                           EC/GOST;-
314                           DSA/GOST;-
315                           DH/GOST;-
316                           /STATIC_ENGINE;-
317                           /KRB5
318 $ CONFIG_ENABLE_RULES := ZLIB_DYNAMIC/ZLIB;-
319                          /THREADS
320 $
321 $! Architecture specific rule addtions
322 $ IF ARCH .EQS. "VAX"
323 $ THEN
324 $   ! Disable algorithms that require 64 bit integers in C
325 $   CONFIG_DISABLE_RULES = CONFIG_DISABLE_RULES + -
326                            ";/GOST" + -
327                            ";/WHIRLPOOL"
328 $ ENDIF
329 $
330 $ CONFIG_LOG_I = 0
331 $ CONFIG_LOG_LOOP1:
332 $   CONFIG_LOG_E = F$EDIT(F$ELEMENT(CONFIG_LOG_I,",",CONFIG_LOGICALS),"TRIM")
333 $   CONFIG_LOG_I = CONFIG_LOG_I + 1
334 $   IF CONFIG_LOG_E .EQS. "" THEN GOTO CONFIG_LOG_LOOP1
335 $   IF CONFIG_LOG_E .EQS. "," THEN GOTO CONFIG_LOG_LOOP1_END
336 $   IF F$TRNLNM("OPENSSL_NO_"+CONFIG_LOG_E)
337 $   THEN
338 $       CONFIG_DISABLED_'CONFIG_LOG_E' := YES
339 $       CONFIG_ENABLED_'CONFIG_LOG_E' := NO
340 $       CONFIG_CHANGED_'CONFIG_LOG_E' := YES
341 $   ELSE
342 $       CONFIG_DISABLED_'CONFIG_LOG_E' := NO
343 $       CONFIG_ENABLED_'CONFIG_LOG_E' := YES
344 $       ! Because all algorithms are assumed enabled by default
345 $       CONFIG_CHANGED_'CONFIG_LOG_E' := NO
346 $   ENDIF
347 $   GOTO CONFIG_LOG_LOOP1
348 $ CONFIG_LOG_LOOP1_END:
349 $
350 $! Apply cascading disable rules
351 $ CONFIG_DISABLE_I = 0
352 $ CONFIG_DISABLE_LOOP0:
353 $   CONFIG_DISABLE_E = F$EDIT(F$ELEMENT(CONFIG_DISABLE_I,";",CONFIG_DISABLE_RULES),"TRIM")
354 $   CONFIG_DISABLE_I = CONFIG_DISABLE_I + 1
355 $   IF CONFIG_DISABLE_E .EQS. "" THEN GOTO CONFIG_DISABLE_LOOP0
356 $   IF CONFIG_DISABLE_E .EQS. ";" THEN GOTO CONFIG_DISABLE_LOOP0_END
357 $
358 $   CONFIG_DISABLE_ALGOS = F$EDIT(F$ELEMENT(0,"/",CONFIG_DISABLE_E),"TRIM")
359 $   CONFIG_DISABLE_DEPENDENTS = F$EDIT(F$ELEMENT(1,"/",CONFIG_DISABLE_E),"TRIM")
360 $   TO_DISABLE := YES
361 $   CONFIG_ALGO_I = 0
362 $   CONFIG_DISABLE_LOOP1:
363 $     CONFIG_ALGO_E = F$EDIT(F$ELEMENT(CONFIG_ALGO_I,",",CONFIG_DISABLE_ALGOS),"TRIM")
364 $     CONFIG_ALGO_I = CONFIG_ALGO_I + 1
365 $     IF CONFIG_ALGO_E .EQS. "" THEN GOTO CONFIG_DISABLE_LOOP1
366 $     IF CONFIG_ALGO_E .EQS. "," THEN GOTO CONFIG_DISABLE_LOOP1_END
367 $     IF F$TYPE(CONFIG_DISABLED_'CONFIG_ALGO_E') .EQS. ""
368 $     THEN
369 $       TO_DISABLE := NO
370 $     ELSE
371 $       IF .NOT. CONFIG_DISABLED_'CONFIG_ALGO_E' THEN TO_DISABLE := NO
372 $     ENDIF
373 $     GOTO CONFIG_DISABLE_LOOP1
374 $   CONFIG_DISABLE_LOOP1_END:
375 $
376 $   IF TO_DISABLE
377 $   THEN
378 $     CONFIG_DEPENDENT_I = 0
379 $     CONFIG_DISABLE_LOOP2:
380 $       CONFIG_DEPENDENT_E = F$EDIT(F$ELEMENT(CONFIG_DEPENDENT_I,",",CONFIG_DISABLE_DEPENDENTS),"TRIM")
381 $       CONFIG_DEPENDENT_I = CONFIG_DEPENDENT_I + 1
382 $       IF CONFIG_DEPENDENT_E .EQS. "" THEN GOTO CONFIG_DISABLE_LOOP2
383 $       IF CONFIG_DEPENDENT_E .EQS. "," THEN GOTO CONFIG_DISABLE_LOOP2_END
384 $       CONFIG_DISABLED_'CONFIG_DEPENDENT_E' := YES
385 $       CONFIG_ENABLED_'CONFIG_DEPENDENT_E' := NO
386 $       ! Better not to assume defaults at this point...
387 $       CONFIG_CHANGED_'CONFIG_DEPENDENT_E' := YES
388 $       WRITE SYS$ERROR "''CONFIG_DEPENDENT_E' disabled by rule ''CONFIG_DISABLE_E'"
389 $       GOTO CONFIG_DISABLE_LOOP2
390 $     CONFIG_DISABLE_LOOP2_END:
391 $   ENDIF
392 $   GOTO CONFIG_DISABLE_LOOP0
393 $ CONFIG_DISABLE_LOOP0_END:
394 $       
395 $! Apply cascading enable rules
396 $ CONFIG_ENABLE_I = 0
397 $ CONFIG_ENABLE_LOOP0:
398 $   CONFIG_ENABLE_E = F$EDIT(F$ELEMENT(CONFIG_ENABLE_I,";",CONFIG_ENABLE_RULES),"TRIM")
399 $   CONFIG_ENABLE_I = CONFIG_ENABLE_I + 1
400 $   IF CONFIG_ENABLE_E .EQS. "" THEN GOTO CONFIG_ENABLE_LOOP0
401 $   IF CONFIG_ENABLE_E .EQS. ";" THEN GOTO CONFIG_ENABLE_LOOP0_END
402 $
403 $   CONFIG_ENABLE_ALGOS = F$EDIT(F$ELEMENT(0,"/",CONFIG_ENABLE_E),"TRIM")
404 $   CONFIG_ENABLE_DEPENDENTS = F$EDIT(F$ELEMENT(1,"/",CONFIG_ENABLE_E),"TRIM")
405 $   TO_ENABLE := YES
406 $   CONFIG_ALGO_I = 0
407 $   CONFIG_ENABLE_LOOP1:
408 $     CONFIG_ALGO_E = F$EDIT(F$ELEMENT(CONFIG_ALGO_I,",",CONFIG_ENABLE_ALGOS),"TRIM")
409 $     CONFIG_ALGO_I = CONFIG_ALGO_I + 1
410 $     IF CONFIG_ALGO_E .EQS. "" THEN GOTO CONFIG_ENABLE_LOOP1
411 $     IF CONFIG_ALGO_E .EQS. "," THEN GOTO CONFIG_ENABLE_LOOP1_END
412 $     IF F$TYPE(CONFIG_ENABLED_'CONFIG_ALGO_E') .EQS. ""
413 $     THEN
414 $       TO_ENABLE := NO
415 $     ELSE
416 $       IF .NOT. CONFIG_ENABLED_'CONFIG_ALGO_E' THEN TO_ENABLE := NO
417 $     ENDIF
418 $     GOTO CONFIG_ENABLE_LOOP1
419 $   CONFIG_ENABLE_LOOP1_END:
420 $
421 $   IF TO_ENABLE
422 $   THEN
423 $     CONFIG_DEPENDENT_I = 0
424 $     CONFIG_ENABLE_LOOP2:
425 $       CONFIG_DEPENDENT_E = F$EDIT(F$ELEMENT(CONFIG_DEPENDENT_I,",",CONFIG_ENABLE_DEPENDENTS),"TRIM")
426 $       CONFIG_DEPENDENT_I = CONFIG_DEPENDENT_I + 1
427 $       IF CONFIG_DEPENDENT_E .EQS. "" THEN GOTO CONFIG_ENABLE_LOOP2
428 $       IF CONFIG_DEPENDENT_E .EQS. "," THEN GOTO CONFIG_ENABLE_LOOP2_END
429 $       CONFIG_DISABLED_'CONFIG_DEPENDENT_E' := NO
430 $       CONFIG_ENABLED_'CONFIG_DEPENDENT_E' := YES
431 $       ! Better not to assume defaults at this point...
432 $       CONFIG_CHANGED_'CONFIG_DEPENDENT_E' := YES
433 $       WRITE SYS$ERROR "''CONFIG_DEPENDENT_E' enabled by rule ''CONFIG_ENABLE_E'"
434 $       GOTO CONFIG_ENABLE_LOOP2
435 $     CONFIG_ENABLE_LOOP2_END:
436 $   ENDIF
437 $   GOTO CONFIG_ENABLE_LOOP0
438 $ CONFIG_ENABLE_LOOP0_END:
439 $
440 $! Write to the configuration
441 $ CONFIG_LOG_I = 0
442 $ CONFIG_LOG_LOOP2:
443 $   CONFIG_LOG_E = F$EDIT(F$ELEMENT(CONFIG_LOG_I,",",CONFIG_LOGICALS),"TRIM")
444 $   CONFIG_LOG_I = CONFIG_LOG_I + 1
445 $   IF CONFIG_LOG_E .EQS. "" THEN GOTO CONFIG_LOG_LOOP2
446 $   IF CONFIG_LOG_E .EQS. "," THEN GOTO CONFIG_LOG_LOOP2_END
447 $   IF CONFIG_CHANGED_'CONFIG_LOG_E'
448 $   THEN
449 $     IF CONFIG_DISABLED_'CONFIG_LOG_E'
450 $     THEN
451 $       WRITE H_FILE "#ifndef OPENSSL_NO_",CONFIG_LOG_E
452 $       WRITE H_FILE "# define OPENSSL_NO_",CONFIG_LOG_E
453 $       WRITE H_FILE "#endif"
454 $     ELSE
455 $       WRITE H_FILE "#ifndef OPENSSL_",CONFIG_LOG_E
456 $       WRITE H_FILE "# define OPENSSL_",CONFIG_LOG_E
457 $       WRITE H_FILE "#endif"
458 $     ENDIF
459 $   ENDIF
460 $   GOTO CONFIG_LOG_LOOP2
461 $ CONFIG_LOG_LOOP2_END:
462 $!
463 $! Add in the common "crypto/opensslconf.h.in".
464 $!
465 $ TYPE 'OPENSSLCONF_H_IN' /OUTPUT=H_FILE:
466 $!
467 $ IF ARCH .NES. "VAX"
468 $ THEN
469 $!
470 $!  Write the non-VAX specific data
471 $!
472 $   WRITE H_FILE "#if defined(HEADER_RC4_H)"
473 $   WRITE H_FILE "#undef RC4_INT"
474 $   WRITE H_FILE "#define RC4_INT unsigned int"
475 $   WRITE H_FILE "#undef RC4_CHUNK"
476 $   WRITE H_FILE "#define RC4_CHUNK unsigned long long"
477 $   WRITE H_FILE "#endif"
478 $!
479 $   WRITE H_FILE "#if defined(HEADER_DES_LOCL_H)"
480 $   WRITE H_FILE "#undef DES_LONG"
481 $   WRITE H_FILE "#define DES_LONG unsigned int"
482 $   WRITE H_FILE "#undef DES_PTR"
483 $   WRITE H_FILE "#define DES_PTR"
484 $   WRITE H_FILE "#undef DES_RISC1"
485 $   WRITE H_FILE "#undef DES_RISC2"
486 $   WRITE H_FILE "#define DES_RISC1"
487 $   WRITE H_FILE "#undef DES_UNROLL"
488 $   WRITE H_FILE "#define DES_UNROLL"
489 $   WRITE H_FILE "#endif"
490 $!
491 $   WRITE H_FILE "#if defined(HEADER_BN_H)"
492 $   WRITE H_FILE "#undef BN_LLONG"      ! Never define with SIXTY_FOUR_BIT
493 $   WRITE H_FILE "#undef SIXTY_FOUR_BIT_LONG"
494 $   WRITE H_FILE "#undef SIXTY_FOUR_BIT"
495 $   WRITE H_FILE "#define SIXTY_FOUR_BIT"
496 $   WRITE H_FILE "#undef THIRTY_TWO_BIT"
497 $   WRITE H_FILE "#undef SIXTEEN_BIT"
498 $   WRITE H_FILE "#undef EIGHT_BIT"
499 $   WRITE H_FILE "#endif"
500 $
501 $   WRITE H_FILE "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION"
502 $!
503 $!  Else...
504 $!
505 $ ELSE
506 $!
507 $!  Write the VAX specific data
508 $!
509 $   WRITE H_FILE "#if defined(HEADER_RC4_H)"
510 $   WRITE H_FILE "#undef RC4_INT"
511 $   WRITE H_FILE "#define RC4_INT unsigned char"
512 $   WRITE H_FILE "#undef RC4_CHUNK"
513 $   WRITE H_FILE "#define RC4_CHUNK unsigned long"
514 $   WRITE H_FILE "#endif"
515 $!
516 $   WRITE H_FILE "#if defined(HEADER_DES_LOCL_H)"
517 $   WRITE H_FILE "#undef DES_LONG"
518 $   WRITE H_FILE "#define DES_LONG unsigned long"
519 $   WRITE H_FILE "#undef DES_PTR"
520 $   WRITE H_FILE "#define DES_PTR"
521 $   WRITE H_FILE "#undef DES_RISC1"
522 $   WRITE H_FILE "#undef DES_RISC2"
523 $   WRITE H_FILE "#undef DES_UNROLL"
524 $   WRITE H_FILE "#endif"
525 $!
526 $   WRITE H_FILE "#if defined(HEADER_BN_H)"
527 $   WRITE H_FILE "#undef BN_LLONG"      ! VAX C/DEC C doesn't have long long
528 $   WRITE H_FILE "#undef SIXTY_FOUR_BIT_LONG"
529 $   WRITE H_FILE "#undef SIXTY_FOUR_BIT"
530 $   WRITE H_FILE "#undef THIRTY_TWO_BIT"
531 $   WRITE H_FILE "#define THIRTY_TWO_BIT"
532 $   WRITE H_FILE "#undef SIXTEEN_BIT"
533 $   WRITE H_FILE "#undef EIGHT_BIT"
534 $   WRITE H_FILE "#endif"
535 $!
536 $! Oddly enough, the following symbol is tested in crypto/sha/sha512.c
537 $! before sha.h gets included (and HEADER_SHA_H defined), so we will not
538 $! protect this one...
539 $   WRITE H_FILE "#undef OPENSSL_NO_SHA512"
540 $   WRITE H_FILE "#define OPENSSL_NO_SHA512"
541 $!
542 $   WRITE H_FILE "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION"
543 $   WRITE H_FILE "#define OPENSSL_EXPORT_VAR_AS_FUNCTION"
544 $!
545 $!  End
546 $!
547 $ ENDIF
548 $!
549 $! Close the [.CRYPTO._xxx]OPENSSLCONF.H file
550 $!
551 $ CLOSE H_FILE
552 $!
553 $! Purge The [.CRYPTO._xxx]OPENSSLCONF.H file
554 $!
555 $ PURGE SYS$DISK:[.CRYPTO._'ARCH']OPENSSLCONF.H
556 $!
557 $! That's All, Time To RETURN.
558 $!
559 $ RETURN
560 $!
561 $! Rebuild The "[.CRYPTO._xxx]BUILDINF.H" file.
562 $!
563 $ BUILDINF:
564 $!
565 $! Tell The User We Are Creating The [.CRYPTO._xxx]BUILDINF.H File.
566 $!
567 $ WRITE SYS$OUTPUT "Creating [.CRYPTO._''ARCH']BUILDINF.H Include File."
568 $!
569 $! Create The [.CRYPTO._xxx]BUILDINF.H File.
570 $!
571 $ BIH_NAME = "SYS$DISK:[.CRYPTO._''ARCH']BUILDINF.H"
572 $ CREATE /FDL=SYS$INPUT: 'BIH_NAME'
573 RECORD
574         FORMAT stream_lf
575 $!
576 $ OPEN /APPEND H_FILE 'bih_name'
577 $!
578 $! Get The Current Date & Time.
579 $!
580 $ TIME = F$TIME()
581 $!
582 $! Write The [.CRYPTO._xxx]BUILDINF.H File.
583 $!
584 $ WRITE H_FILE "#define CFLAGS """" /* Not filled in for now */"
585 $ WRITE H_FILE "#define PLATFORM ""VMS ''ARCH' ''VMS_VERSION'"""
586 $ WRITE H_FILE "#define DATE ""''TIME'"" "
587 $!
588 $! Close The [.CRYPTO._xxx]BUILDINF.H File.
589 $!
590 $ CLOSE H_FILE
591 $!
592 $! Purge The [.CRYPTO._xxx]BUILDINF.H File.
593 $!
594 $ PURGE SYS$DISK:[.CRYPTO._'ARCH']BUILDINF.H
595 $!
596 $! That's All, Time To RETURN.
597 $!
598 $ RETURN
599 $!
600 $! Copy a lot of files around.
601 $!
602 $ SOFTLINKS: 
603 $!
604 $! Tell The User We Are Partly Rebuilding The [.APPS] Directory.
605 $!
606 $ WRITE SYS$OUTPUT "Rebuilding The '[.APPS]MD4.C' File."
607 $!
608 $ DELETE SYS$DISK:[.APPS]MD4.C;*
609 $!
610 $! Copy MD4.C from [.CRYPTO.MD4] into [.APPS]
611 $!
612 $ COPY SYS$DISK:[.CRYPTO.MD4]MD4.C SYS$DISK:[.APPS]
613 $!
614 $! Tell The User We Are Rebuilding The [.INCLUDE.OPENSSL] Directory.
615 $!
616 $ WRITE SYS$OUTPUT "Rebuilding The '[.INCLUDE.OPENSSL]' Directory."
617 $!
618 $! First, make sure the directory exists
619 $!
620 $ IF F$PARSE("SYS$DISK:[.INCLUDE.OPENSSL]") .EQS. "" THEN -
621      CREATE/DIRECTORY SYS$DISK:[.INCLUDE.OPENSSL]
622 $!
623 $! Copy All The ".H" Files From The Main Directory.
624 $!
625 $ EXHEADER := e_os2.h
626 $ COPY 'EXHEADER' SYS$DISK:[.INCLUDE.OPENSSL]
627 $!
628 $! Copy All The ".H" Files From The [.CRYPTO] Directory Tree.
629 $!
630 $ SDIRS := ,-
631    _'ARCH',-
632    OBJECTS,-
633    MD2,MD4,MD5,SHA,MDC2,HMAC,RIPEMD,WHRLPOOL,-
634    DES,AES,RC2,RC4,RC5,IDEA,BF,CAST,CAMELLIA,SEED,MODES,-
635    BN,EC,RSA,DSA,ECDSA,DH,ECDH,DSO,ENGINE,-
636    BUFFER,BIO,STACK,LHASH,RAND,ERR,-
637    EVP,ASN1,PEM,X509,X509V3,CONF,TXT_DB,PKCS7,PKCS12,COMP,OCSP,UI,KRB5,-
638    STORE,CMS,PQUEUE,TS,JPAKE
639 $ EXHEADER_ := crypto.h,opensslv.h,ebcdic.h,symhacks.h,ossl_typ.h
640 $ EXHEADER__'ARCH' := opensslconf.h
641 $ EXHEADER_OBJECTS := objects.h,obj_mac.h
642 $ EXHEADER_MD2 := md2.h
643 $ EXHEADER_MD4 := md4.h
644 $ EXHEADER_MD5 := md5.h
645 $ EXHEADER_SHA := sha.h
646 $ EXHEADER_MDC2 := mdc2.h
647 $ EXHEADER_HMAC := hmac.h
648 $ EXHEADER_RIPEMD := ripemd.h
649 $ EXHEADER_WHRLPOOL := whrlpool.h
650 $ EXHEADER_DES := des.h,des_old.h
651 $ EXHEADER_AES := aes.h
652 $ EXHEADER_RC2 := rc2.h
653 $ EXHEADER_RC4 := rc4.h
654 $ EXHEADER_RC5 := rc5.h
655 $ EXHEADER_IDEA := idea.h
656 $ EXHEADER_BF := blowfish.h
657 $ EXHEADER_CAST := cast.h
658 $ EXHEADER_CAMELLIA := camellia.h
659 $ EXHEADER_SEED := seed.h
660 $ EXHEADER_MODES := modes.h
661 $ EXHEADER_BN := bn.h
662 $ EXHEADER_EC := ec.h
663 $ EXHEADER_RSA := rsa.h
664 $ EXHEADER_DSA := dsa.h
665 $ EXHEADER_ECDSA := ecdsa.h
666 $ EXHEADER_DH := dh.h
667 $ EXHEADER_ECDH := ecdh.h
668 $ EXHEADER_DSO := dso.h
669 $ EXHEADER_ENGINE := engine.h
670 $ EXHEADER_BUFFER := buffer.h
671 $ EXHEADER_BIO := bio.h
672 $ EXHEADER_STACK := stack.h,safestack.h
673 $ EXHEADER_LHASH := lhash.h
674 $ EXHEADER_RAND := rand.h
675 $ EXHEADER_ERR := err.h
676 $ EXHEADER_EVP := evp.h
677 $ EXHEADER_ASN1 := asn1.h,asn1_mac.h,asn1t.h
678 $ EXHEADER_PEM := pem.h,pem2.h
679 $ EXHEADER_X509 := x509.h,x509_vfy.h
680 $ EXHEADER_X509V3 := x509v3.h
681 $ EXHEADER_CONF := conf.h,conf_api.h
682 $ EXHEADER_TXT_DB := txt_db.h
683 $ EXHEADER_PKCS7 := pkcs7.h
684 $ EXHEADER_PKCS12 := pkcs12.h
685 $ EXHEADER_COMP := comp.h
686 $ EXHEADER_OCSP := ocsp.h
687 $ EXHEADER_UI := ui.h,ui_compat.h
688 $ EXHEADER_KRB5 := krb5_asn.h
689 $!EXHEADER_STORE := store.h,str_compat.h
690 $ EXHEADER_STORE := store.h
691 $ EXHEADER_CMS := cms.h
692 $ EXHEADER_PQUEUE := pqueue.h
693 $ EXHEADER_TS := ts.h
694 $ EXHEADER_JPAKE := jpake.h
695 $
696 $ I = 0
697 $ LOOP_SDIRS: 
698 $ D = F$EDIT(F$ELEMENT(I, ",", SDIRS),"TRIM")
699 $ I = I + 1
700 $ IF D .EQS. "," THEN GOTO LOOP_SDIRS_END
701 $ tmp = EXHEADER_'D'
702 $ IF D .EQS. ""
703 $ THEN
704 $   COPY [.CRYPTO]'tmp' SYS$DISK:[.INCLUDE.OPENSSL] !/LOG
705 $ ELSE
706 $   COPY [.CRYPTO.'D']'tmp' SYS$DISK:[.INCLUDE.OPENSSL] !/LOG
707 $ ENDIF
708 $ GOTO LOOP_SDIRS
709 $ LOOP_SDIRS_END:
710 $!
711 $! Copy All The ".H" Files From The [.SSL] Directory.
712 $!
713 $ EXHEADER := ssl.h,ssl2.h,ssl3.h,ssl23.h,tls1.h,dtls1.h,kssl.h
714 $ COPY SYS$DISK:[.SSL]'EXHEADER' SYS$DISK:[.INCLUDE.OPENSSL]
715 $!
716 $! Purge all doubles
717 $!
718 $ PURGE SYS$DISK:[.INCLUDE.OPENSSL]*.H
719 $!
720 $! That's All, Time To RETURN.
721 $!
722 $ RETURN
723 $!
724 $! Build The "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" Library.
725 $!
726 $ CRYPTO:
727 $!
728 $! Tell The User What We Are Doing.
729 $!
730 $ WRITE SYS$OUTPUT ""
731 $ WRITE SYS$OUTPUT "Building The [.",ARCH,".EXE.CRYPTO]LIBCRYPTO.OLB Library."
732 $!
733 $! Go To The [.CRYPTO] Directory.
734 $!
735 $ SET DEFAULT SYS$DISK:[.CRYPTO]
736 $!
737 $! Build The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library.
738 $!  
739 $ @CRYPTO-LIB LIBRARY 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" "''ISSEVEN'" "''BUILDPART'"
740 $!
741 $! Build The [.xxx.EXE.CRYPTO]*.EXE Test Applications.
742 $!  
743 $ @CRYPTO-LIB APPS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN' "''BUILDPART'"
744 $!
745 $! Go Back To The Main Directory.
746 $!
747 $ SET DEFAULT [-]
748 $!
749 $! Time To RETURN.
750 $!
751 $ RETURN
752 $!
753 $! Build The "[.xxx.EXE.SSL]LIBSSL.OLB" Library.
754 $!
755 $ SSL:
756 $!
757 $! Tell The User What We Are Doing.
758 $!
759 $ WRITE SYS$OUTPUT ""
760 $ WRITE SYS$OUTPUT "Building The [.",ARCH,".EXE.SSL]LIBSSL.OLB Library."
761 $!
762 $! Go To The [.SSL] Directory.
763 $!
764 $ SET DEFAULT SYS$DISK:[.SSL]
765 $!
766 $! Build The [.xxx.EXE.SSL]LIBSSL.OLB Library.
767 $!
768 $ @SSL-LIB LIBRARY 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN'
769 $!
770 $! Go Back To The Main Directory.
771 $!
772 $ SET DEFAULT [-]
773 $!
774 $! Time To Return.
775 $!
776 $ RETURN
777 $!
778 $! Build The "[.xxx.EXE.SSL]SSL_TASK.EXE" Program.
779 $!
780 $ SSL_TASK:
781 $!
782 $! Tell The User What We Are Doing.
783 $!
784 $ WRITE SYS$OUTPUT ""
785 $ WRITE SYS$OUTPUT "Building DECNet Based SSL Engine, [.",ARCH,".EXE.SSL]SSL_TASK.EXE"
786 $!
787 $! Go To The [.SSL] Directory.
788 $!
789 $ SET DEFAULT SYS$DISK:[.SSL]
790 $!
791 $! Build The [.xxx.EXE.SSL]SSL_TASK.EXE
792 $!
793 $ @SSL-LIB SSL_TASK 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN'
794 $!
795 $! Go Back To The Main Directory.
796 $!
797 $ SET DEFAULT [-]
798 $!
799 $! That's All, Time To RETURN.
800 $!
801 $ RETURN
802 $!
803 $! Build The OpenSSL Test Programs.
804 $!
805 $ TEST:
806 $!
807 $! Tell The User What We Are Doing.
808 $!
809 $ WRITE SYS$OUTPUT ""
810 $ WRITE SYS$OUTPUT "Building The OpenSSL [.",ARCH,".EXE.TEST] Test Utilities."
811 $!
812 $! Go To The [.TEST] Directory.
813 $!
814 $ SET DEFAULT SYS$DISK:[.TEST]
815 $!
816 $! Build The Test Programs.
817 $!
818 $ @MAKETESTS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN'
819 $!
820 $! Go Back To The Main Directory.
821 $!
822 $ SET DEFAULT [-]
823 $!
824 $! That's All, Time To RETURN.
825 $!
826 $ RETURN
827 $!
828 $! Build The OpenSSL Application Programs.
829 $!
830 $ APPS:
831 $!
832 $! Tell The User What We Are Doing.
833 $!
834 $ WRITE SYS$OUTPUT ""
835 $ WRITE SYS$OUTPUT "Building OpenSSL [.",ARCH,".EXE.APPS] Applications."
836 $!
837 $! Go To The [.APPS] Directory.
838 $!
839 $ SET DEFAULT SYS$DISK:[.APPS]
840 $!
841 $! Build The Application Programs.
842 $!
843 $ @MAKEAPPS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN'
844 $!
845 $! Go Back To The Main Directory.
846 $!
847 $ SET DEFAULT [-]
848 $!
849 $! That's All, Time To RETURN.
850 $!
851 $ RETURN
852 $!
853 $! Build The OpenSSL Application Programs.
854 $!
855 $ ENGINES:
856 $!
857 $! Tell The User What We Are Doing.
858 $!
859 $ WRITE SYS$OUTPUT ""
860 $ WRITE SYS$OUTPUT "Building OpenSSL [.",ARCH,".EXE.ENGINES] Engines."
861 $!
862 $! Go To The [.ENGINES] Directory.
863 $!
864 $ SET DEFAULT SYS$DISK:[.ENGINES]
865 $!
866 $! Build The Application Programs.
867 $!
868 $ @MAKEENGINES ENGINES 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN' "''BUILDPART'"
869 $!
870 $! Go Back To The Main Directory.
871 $!
872 $ SET DEFAULT [-]
873 $!
874 $! That's All, Time To RETURN.
875 $!
876 $ RETURN
877 $!
878 $! Check The User's Options.
879 $!
880 $ CHECK_OPTIONS:
881 $!
882 $! Check if there's a "part", and separate it out
883 $!
884 $ BUILDPART = F$ELEMENT(1,"/",P1)
885 $ IF BUILDPART .EQS. "/"
886 $ THEN
887 $   BUILDPART = ""
888 $ ELSE
889 $   P1 = F$EXTRACT(0,F$LENGTH(P1) - F$LENGTH(BUILDPART) - 1, P1)
890 $ ENDIF
891 $!
892 $! Check To See If P1 Is Blank.
893 $!
894 $ IF (P1.EQS."ALL")
895 $ THEN
896 $!
897 $!   P1 Is ALL, So Build Everything.
898 $!
899 $    BUILDCOMMAND = "ALL"
900 $!
901 $! Else...
902 $!
903 $ ELSE
904 $!
905 $!  Else, Check To See If P1 Has A Valid Argument.
906 $!
907 $   IF (P1.EQS."CONFIG").OR.(P1.EQS."BUILDINF").OR.(P1.EQS."SOFTLINKS") -
908        .OR.(P1.EQS."BUILDALL") -
909        .OR.(P1.EQS."CRYPTO").OR.(P1.EQS."SSL") -
910        .OR.(P1.EQS."SSL_TASK").OR.(P1.EQS."TEST").OR.(P1.EQS."APPS") -
911        .OR.(P1.EQS."ENGINES")
912 $   THEN
913 $!
914 $!    A Valid Argument.
915 $!
916 $     BUILDCOMMAND = P1
917 $!
918 $!  Else...
919 $!
920 $   ELSE
921 $!
922 $!    Tell The User We Don't Know What They Want.
923 $!
924 $     WRITE SYS$OUTPUT ""
925 $     WRITE SYS$OUTPUT "USAGE:   @MAKEVMS.COM [Target] [not-used option] [Debug option] <Compiler>"
926 $     WRITE SYS$OUTPUT ""
927 $     WRITE SYS$OUTPUT "Example: @MAKEVMS.COM ALL NORSAREF NODEBUG "
928 $     WRITE SYS$OUTPUT ""
929 $     WRITE SYS$OUTPUT "The Target ",P1," Is Invalid.  The Valid Target Options Are:"
930 $     WRITE SYS$OUTPUT ""
931 $     WRITE SYS$OUTPUT "    ALL      :  Just Build Everything."
932 $     WRITE SYS$OUTPUT "    CONFIG   :  Just build the [.CRYPTO._xxx]OPENSSLCONF.H file."
933 $     WRITE SYS$OUTPUT "    BUILDINF :  Just build the [.CRYPTO._xxx]BUILDINF.H file."
934 $     WRITE SYS$OUTPUT "    SOFTLINKS:  Just Fix The Unix soft links."
935 $     WRITE SYS$OUTPUT "    BUILDALL :  Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done."
936 $     WRITE SYS$OUTPUT "    CRYPTO   :  To Build Just The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library."
937 $     WRITE SYS$OUTPUT "    CRYPTO/x :  To Build Just The x Part Of The"
938 $     WRITE SYS$OUTPUT "                [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library."
939 $     WRITE SYS$OUTPUT "    SSL      :  To Build Just The [.xxx.EXE.SSL]LIBSSL.OLB Library."
940 $     WRITE SYS$OUTPUT "    SSL_TASK :  To Build Just The [.xxx.EXE.SSL]SSL_TASK.EXE Program."
941 $     WRITE SYS$OUTPUT "    TEST     :  To Build Just The OpenSSL Test Programs."
942 $     WRITE SYS$OUTPUT "    APPS     :  To Build Just The OpenSSL Application Programs."
943 $     WRITE SYS$OUTPUT "    ENGINES  :  To Build Just The ENGINES"
944 $     WRITE SYS$OUTPUT ""
945 $     WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
946 $     WRITE SYS$OUTPUT ""
947 $     WRITE SYS$OUTPUT "    ALPHA    :  Alpha Architecture."
948 $     WRITE SYS$OUTPUT "    IA64     :  IA64 Architecture."
949 $     WRITE SYS$OUTPUT "    VAX      :  VAX Architecture."
950 $     WRITE SYS$OUTPUT ""
951 $!
952 $!    Time To EXIT.
953 $!
954 $     GOTO TIDY
955 $!
956 $!  End The Valid Argument Check.
957 $!
958 $   ENDIF
959 $!
960 $! End The P1 Check.
961 $!
962 $ ENDIF
963 $!
964 $! Check To See If P3 Is Blank.
965 $!
966 $ IF (P3.EQS."NODEBUG")
967 $ THEN
968 $!
969 $!   P3 Is NODEBUG, So Compile Without Debugger Information.
970 $!
971 $    DEBUGGER = "NODEBUG"
972 $!
973 $! Else...
974 $!
975 $ ELSE
976 $!
977 $!  Check To See If We Are To Compile With Debugger Information.
978 $!
979 $   IF (P3.EQS."DEBUG")
980 $   THEN
981 $!
982 $!    Compile With Debugger Information.
983 $!
984 $     DEBUGGER = "DEBUG"
985 $!
986 $!  Else...
987 $!
988 $   ELSE
989 $!
990 $!    Tell The User Entered An Invalid Option..
991 $!
992 $     WRITE SYS$OUTPUT ""
993 $     WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
994 $     WRITE SYS$OUTPUT ""
995 $     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
996 $     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
997 $     WRITE SYS$OUTPUT ""
998 $!
999 $!    Time To EXIT.
1000 $!
1001 $     GOTO TIDY
1002 $!
1003 $!  End The Valid Argument Check.
1004 $!
1005 $   ENDIF
1006 $!
1007 $! End The P3 Check.
1008 $!
1009 $ ENDIF
1010 $!
1011 $! Check To See If P4 Is Blank.
1012 $!
1013 $ IF (P4.EQS."")
1014 $ THEN
1015 $!
1016 $!  O.K., The User Didn't Specify A Compiler, Let's Try To
1017 $!  Find Out Which One To Use.
1018 $!
1019 $!  Check To See If We Have GNU C.
1020 $!
1021 $   IF (F$TRNLNM("GNU_CC").NES."")
1022 $   THEN
1023 $!
1024 $!    Looks Like GNUC, Set To Use GNUC.
1025 $!
1026 $     COMPILER = "GNUC"
1027 $!
1028 $!    Tell The User We Are Using GNUC.
1029 $!
1030 $     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
1031 $!
1032 $!  End The GNU C Compiler Check.
1033 $!
1034 $   ENDIF
1035 $!
1036 $!  Check To See If We Have VAXC Or DECC.
1037 $!
1038 $   IF (F$GETSYI("CPU").GE.128).OR.(F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC")
1039 $   THEN 
1040 $!
1041 $!    Looks Like DECC, Set To Use DECC.
1042 $!
1043 $     COMPILER = "DECC"
1044 $!
1045 $!    Tell The User We Are Using DECC.
1046 $!
1047 $     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
1048 $!
1049 $!  Else...
1050 $!
1051 $   ELSE
1052 $!
1053 $!    Looks Like VAXC, Set To Use VAXC.
1054 $!
1055 $     COMPILER = "VAXC"
1056 $!
1057 $!    Tell The User We Are Using VAX C.
1058 $!
1059 $     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
1060 $!
1061 $!  End The DECC & VAXC Compiler Check.
1062 $!
1063 $   ENDIF
1064 $!
1065 $! Else...
1066 $!
1067 $ ELSE
1068 $!
1069 $!  Check To See If The User Entered A Valid Paramter.
1070 $!
1071 $   IF (P4.EQS."VAXC").OR.(P4.EQS."DECC").OR.(P4.EQS."GNUC")!.OR.(P4.EQS."LINK")
1072 $   THEN
1073 $!
1074 $!    Check To See If The User Wanted To Just LINK.
1075 $!
1076 $     IF (P4.EQS."LINK")
1077 $     THEN
1078 $!
1079 $!      Looks Like LINK-only
1080 $!
1081 $       COMPILER = "LINK"
1082 $!
1083 $!      Tell The User We Are Only Linking.
1084 $!
1085 $       WRITE SYS$OUTPUT "LINK Only.  This actually NOT YET SUPPORTED!"
1086 $!
1087 $!    End LINK Check.
1088 $!
1089 $     ENDIF
1090 $!
1091 $!    Check To See If The User Wanted DECC.
1092 $!
1093 $     IF (P4.EQS."DECC")
1094 $     THEN
1095 $!
1096 $!      Looks Like DECC, Set To Use DECC.
1097 $!
1098 $       COMPILER = "DECC"
1099 $!
1100 $!      Tell The User We Are Using DECC.
1101 $!
1102 $       WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
1103 $!
1104 $!    End DECC Check.
1105 $!
1106 $     ENDIF
1107 $!
1108 $!    Check To See If We Are To Use VAXC.
1109 $!
1110 $     IF (P4.EQS."VAXC")
1111 $     THEN
1112 $!
1113 $!      Looks Like VAXC, Set To Use VAXC.
1114 $!
1115 $       COMPILER = "VAXC"
1116 $!
1117 $!      Tell The User We Are Using VAX C.
1118 $!
1119 $       WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
1120 $!
1121 $!    End VAXC Check
1122 $!
1123 $     ENDIF
1124 $!
1125 $!    Check To See If We Are To Use GNU C.
1126 $!
1127 $     IF (P4.EQS."GNUC")
1128 $     THEN
1129 $!
1130 $!      Looks Like GNUC, Set To Use GNUC.
1131 $!
1132 $       COMPILER = "GNUC"
1133 $!
1134 $!      Tell The User We Are Using GNUC.
1135 $!
1136 $       WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
1137 $!
1138 $!    End The GNU C Check.
1139 $!
1140 $     ENDIF
1141 $!
1142 $!  Else The User Entered An Invalid Argument.
1143 $!
1144 $   ELSE
1145 $!
1146 $!    Tell The User We Don't Know What They Want.
1147 $!
1148 $     WRITE SYS$OUTPUT ""
1149 $     WRITE SYS$OUTPUT "The Option ",P4," Is Invalid.  The Valid Options Are:"
1150 $     WRITE SYS$OUTPUT ""
1151 $     WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
1152 $     WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
1153 $     WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
1154 $     WRITE SYS$OUTPUT ""
1155 $!
1156 $!    Time To EXIT.
1157 $!
1158 $     GOTO TIDY
1159 $!
1160 $!  End The Valid Argument Check.
1161 $!
1162 $   ENDIF
1163 $!
1164 $! End The P4 Check.
1165 $!
1166 $ ENDIF
1167 $!
1168 $! Time to check the contents of P5, and to make sure we get the correct library.
1169 $!
1170 $ IF P5.EQS."SOCKETSHR" .OR. P5.EQS."MULTINET" .OR. P5.EQS."UCX" -
1171      .OR. P5.EQS."TCPIP" .OR. P5.EQS."NONE"
1172 $ THEN
1173 $!
1174 $!  Check to see if SOCKETSHR was chosen
1175 $!
1176 $   IF P5.EQS."SOCKETSHR"
1177 $   THEN
1178 $!
1179 $!    Set the library to use SOCKETSHR
1180 $!
1181 $     TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
1182 $!
1183 $!    Tell the user
1184 $!
1185 $     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
1186 $!
1187 $!    Done with SOCKETSHR
1188 $!
1189 $   ENDIF
1190 $!
1191 $!  Check to see if MULTINET was chosen
1192 $!
1193 $   IF P5.EQS."MULTINET"
1194 $   THEN
1195 $!
1196 $!    Set the library to use UCX emulation.
1197 $!
1198 $     P5 = "UCX"
1199 $!
1200 $!    Tell the user
1201 $!
1202 $     WRITE SYS$OUTPUT "Using MultiNet via UCX emulation for TCP/IP"
1203 $!
1204 $!    Done with MULTINET
1205 $!
1206 $   ENDIF
1207 $!
1208 $!  Check to see if UCX was chosen
1209 $!
1210 $   IF P5.EQS."UCX"
1211 $   THEN
1212 $!
1213 $!    Set the library to use UCX.
1214 $!
1215 $     TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT"
1216 $!
1217 $!    Tell the user
1218 $!
1219 $     WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
1220 $!
1221 $!    Done with UCX
1222 $!
1223 $   ENDIF
1224 $!
1225 $!  Check to see if TCPIP was chosen
1226 $!
1227 $   IF P5.EQS."TCPIP"
1228 $   THEN
1229 $!
1230 $!    Set the library to use TCPIP (post UCX).
1231 $!
1232 $     TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
1233 $!
1234 $!    Tell the user
1235 $!
1236 $     WRITE SYS$OUTPUT "Using TCPIP (post UCX) for TCP/IP"
1237 $!
1238 $!    Done with TCPIP
1239 $!
1240 $   ENDIF
1241 $!
1242 $!  Check to see if NONE was chosen
1243 $!
1244 $   IF P5.EQS."NONE"
1245 $   THEN
1246 $!
1247 $!    Do not use a TCPIP library.
1248 $!
1249 $     TCPIP_LIB = ""
1250 $!
1251 $!    Tell the user
1252 $!
1253 $     WRITE SYS$OUTPUT "A specific TCPIP library will not be used."
1254 $!
1255 $!    Done with NONE.
1256 $!
1257 $   ENDIF
1258 $!
1259 $!  Set the TCPIP_TYPE symbol
1260 $!
1261 $   TCPIP_TYPE = P5
1262 $!
1263 $!  Print info
1264 $!
1265 $   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
1266 $!
1267 $!  Else The User Entered An Invalid Argument.
1268 $!
1269 $ ELSE
1270 $   IF P5 .NES. ""
1271 $   THEN
1272 $!
1273 $!    Tell The User We Don't Know What They Want.
1274 $!
1275 $     WRITE SYS$OUTPUT ""
1276 $     WRITE SYS$OUTPUT "The Option ",P5," Is Invalid.  The Valid Options Are:"
1277 $     WRITE SYS$OUTPUT ""
1278 $     WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
1279 $     WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
1280 $     WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP TCP/IP (post UCX) library."
1281 $     WRITE SYS$OUTPUT "    NONE       :  To not link with a specific TCP/IP library."
1282 $     WRITE SYS$OUTPUT ""
1283 $!
1284 $!    Time To EXIT.
1285 $!
1286 $     GOTO TIDY
1287 $   ELSE
1288 $!
1289 $! If TCPIP is not defined, then hardcode it to make
1290 $! it clear that no TCPIP is desired.
1291 $!
1292 $     IF P5 .EQS. ""
1293 $     THEN
1294 $       TCPIP_LIB = ""
1295 $       TCPIP_TYPE = "NONE"
1296 $     ELSE
1297 $!
1298 $!    Set the TCPIP_TYPE symbol
1299 $!
1300 $       TCPIP_TYPE = P5
1301 $     ENDIF
1302 $   ENDIF
1303 $!
1304 $!  Done with TCP/IP libraries
1305 $!
1306 $ ENDIF
1307 $!
1308 $! Special Threads For OpenVMS v7.1 Or Later
1309 $!
1310 $! Written By:  Richard Levitte
1311 $!              richard@levitte.org
1312 $!
1313 $!
1314 $! Check To See If We Have A Option For P6.
1315 $!
1316 $ IF (P6.EQS."")
1317 $ THEN
1318 $!
1319 $!  Get The Version Of VMS We Are Using.
1320 $!
1321 $   ISSEVEN :=
1322 $   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,VMS_VERSION))
1323 $   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
1324 $!
1325 $!  Check To See If The VMS Version Is v7.1 Or Later.
1326 $!
1327 $   IF (TMP.GE.71)
1328 $   THEN
1329 $!
1330 $!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
1331 $!
1332 $     ISSEVEN := ,PTHREAD_USE_D4
1333 $!
1334 $!  End The VMS Version Check.
1335 $!
1336 $   ENDIF
1337 $!
1338 $! End The P6 Check.
1339 $!
1340 $ ENDIF
1341 $!
1342 $!  Time To RETURN...
1343 $!
1344 $ RETURN
1345 $!
1346 $ TIDY:
1347 $ SET DEFAULT 'DEF_ORIG'
1348 $ EXIT
1349 $!