Some of the MS_STATIC use in crypto/evp is a legacy from the days when
[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 $! Delete [.CRYPTO]BUILDINF.H File, as there might be some residue from Unix.
597 $!
598 $ IF F$SEARCH("[.CRYPTO]BUILDINF.H") .NES. "" THEN -
599      DELETE SYS$DISK:[.CRYPTO]BUILDINF.H;*
600 $!
601 $! That's All, Time To RETURN.
602 $!
603 $ RETURN
604 $!
605 $! Copy a lot of files around.
606 $!
607 $ SOFTLINKS: 
608 $!
609 $! Tell The User We Are Partly Rebuilding The [.APPS] Directory.
610 $!
611 $ WRITE SYS$OUTPUT "Rebuilding The '[.APPS]MD4.C' File."
612 $!
613 $ DELETE SYS$DISK:[.APPS]MD4.C;*
614 $!
615 $! Copy MD4.C from [.CRYPTO.MD4] into [.APPS]
616 $!
617 $ COPY SYS$DISK:[.CRYPTO.MD4]MD4.C SYS$DISK:[.APPS]
618 $!
619 $! Tell The User We Are Rebuilding The [.INCLUDE.OPENSSL] Directory.
620 $!
621 $ WRITE SYS$OUTPUT "Rebuilding The '[.INCLUDE.OPENSSL]' Directory."
622 $!
623 $! First, make sure the directory exists
624 $!
625 $ IF F$PARSE("SYS$DISK:[.INCLUDE.OPENSSL]") .EQS. "" THEN -
626      CREATE/DIRECTORY SYS$DISK:[.INCLUDE.OPENSSL]
627 $!
628 $! Copy All The ".H" Files From The Main Directory.
629 $!
630 $ EXHEADER := e_os2.h
631 $ COPY 'EXHEADER' SYS$DISK:[.INCLUDE.OPENSSL]
632 $!
633 $! Copy All The ".H" Files From The [.CRYPTO] Directory Tree.
634 $!
635 $ SDIRS := ,-
636    _'ARCH',-
637    OBJECTS,-
638    MD2,MD4,MD5,SHA,MDC2,HMAC,RIPEMD,WHRLPOOL,-
639    DES,AES,RC2,RC4,RC5,IDEA,BF,CAST,CAMELLIA,SEED,MODES,-
640    BN,EC,RSA,DSA,ECDSA,DH,ECDH,DSO,ENGINE,-
641    BUFFER,BIO,STACK,LHASH,RAND,ERR,-
642    EVP,ASN1,PEM,X509,X509V3,CONF,TXT_DB,PKCS7,PKCS12,COMP,OCSP,UI,KRB5,-
643    STORE,CMS,PQUEUE,TS,JPAKE
644 $ EXHEADER_ := crypto.h,opensslv.h,ebcdic.h,symhacks.h,ossl_typ.h
645 $ EXHEADER__'ARCH' := opensslconf.h
646 $ EXHEADER_OBJECTS := objects.h,obj_mac.h
647 $ EXHEADER_MD2 := md2.h
648 $ EXHEADER_MD4 := md4.h
649 $ EXHEADER_MD5 := md5.h
650 $ EXHEADER_SHA := sha.h
651 $ EXHEADER_MDC2 := mdc2.h
652 $ EXHEADER_HMAC := hmac.h
653 $ EXHEADER_RIPEMD := ripemd.h
654 $ EXHEADER_WHRLPOOL := whrlpool.h
655 $ EXHEADER_DES := des.h,des_old.h
656 $ EXHEADER_AES := aes.h
657 $ EXHEADER_RC2 := rc2.h
658 $ EXHEADER_RC4 := rc4.h
659 $ EXHEADER_RC5 := rc5.h
660 $ EXHEADER_IDEA := idea.h
661 $ EXHEADER_BF := blowfish.h
662 $ EXHEADER_CAST := cast.h
663 $ EXHEADER_CAMELLIA := camellia.h
664 $ EXHEADER_SEED := seed.h
665 $ EXHEADER_MODES := modes.h
666 $ EXHEADER_BN := bn.h
667 $ EXHEADER_EC := ec.h
668 $ EXHEADER_RSA := rsa.h
669 $ EXHEADER_DSA := dsa.h
670 $ EXHEADER_ECDSA := ecdsa.h
671 $ EXHEADER_DH := dh.h
672 $ EXHEADER_ECDH := ecdh.h
673 $ EXHEADER_DSO := dso.h
674 $ EXHEADER_ENGINE := engine.h
675 $ EXHEADER_BUFFER := buffer.h
676 $ EXHEADER_BIO := bio.h
677 $ EXHEADER_STACK := stack.h,safestack.h
678 $ EXHEADER_LHASH := lhash.h
679 $ EXHEADER_RAND := rand.h
680 $ EXHEADER_ERR := err.h
681 $ EXHEADER_EVP := evp.h
682 $ EXHEADER_ASN1 := asn1.h,asn1_mac.h,asn1t.h
683 $ EXHEADER_PEM := pem.h,pem2.h
684 $ EXHEADER_X509 := x509.h,x509_vfy.h
685 $ EXHEADER_X509V3 := x509v3.h
686 $ EXHEADER_CONF := conf.h,conf_api.h
687 $ EXHEADER_TXT_DB := txt_db.h
688 $ EXHEADER_PKCS7 := pkcs7.h
689 $ EXHEADER_PKCS12 := pkcs12.h
690 $ EXHEADER_COMP := comp.h
691 $ EXHEADER_OCSP := ocsp.h
692 $ EXHEADER_UI := ui.h,ui_compat.h
693 $ EXHEADER_KRB5 := krb5_asn.h
694 $!EXHEADER_STORE := store.h,str_compat.h
695 $ EXHEADER_STORE := store.h
696 $ EXHEADER_CMS := cms.h
697 $ EXHEADER_PQUEUE := pqueue.h
698 $ EXHEADER_TS := ts.h
699 $ EXHEADER_JPAKE := jpake.h
700 $
701 $ I = 0
702 $ LOOP_SDIRS: 
703 $ D = F$EDIT(F$ELEMENT(I, ",", SDIRS),"TRIM")
704 $ I = I + 1
705 $ IF D .EQS. "," THEN GOTO LOOP_SDIRS_END
706 $ tmp = EXHEADER_'D'
707 $ IF D .EQS. ""
708 $ THEN
709 $   COPY [.CRYPTO]'tmp' SYS$DISK:[.INCLUDE.OPENSSL] !/LOG
710 $ ELSE
711 $   COPY [.CRYPTO.'D']'tmp' SYS$DISK:[.INCLUDE.OPENSSL] !/LOG
712 $ ENDIF
713 $ GOTO LOOP_SDIRS
714 $ LOOP_SDIRS_END:
715 $!
716 $! Copy All The ".H" Files From The [.SSL] Directory.
717 $!
718 $ EXHEADER := ssl.h,ssl2.h,ssl3.h,ssl23.h,tls1.h,dtls1.h,kssl.h
719 $ COPY SYS$DISK:[.SSL]'EXHEADER' SYS$DISK:[.INCLUDE.OPENSSL]
720 $!
721 $! Purge all doubles
722 $!
723 $ PURGE SYS$DISK:[.INCLUDE.OPENSSL]*.H
724 $!
725 $! That's All, Time To RETURN.
726 $!
727 $ RETURN
728 $!
729 $! Build The "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" Library.
730 $!
731 $ CRYPTO:
732 $!
733 $! Tell The User What We Are Doing.
734 $!
735 $ WRITE SYS$OUTPUT ""
736 $ WRITE SYS$OUTPUT "Building The [.",ARCH,".EXE.CRYPTO]LIBCRYPTO.OLB Library."
737 $!
738 $! Go To The [.CRYPTO] Directory.
739 $!
740 $ SET DEFAULT SYS$DISK:[.CRYPTO]
741 $!
742 $! Build The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library.
743 $!  
744 $ @CRYPTO-LIB LIBRARY 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" "''ISSEVEN'" "''BUILDPART'"
745 $!
746 $! Build The [.xxx.EXE.CRYPTO]*.EXE Test Applications.
747 $!  
748 $ @CRYPTO-LIB APPS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN' "''BUILDPART'"
749 $!
750 $! Go Back To The Main Directory.
751 $!
752 $ SET DEFAULT [-]
753 $!
754 $! Time To RETURN.
755 $!
756 $ RETURN
757 $!
758 $! Build The "[.xxx.EXE.SSL]LIBSSL.OLB" Library.
759 $!
760 $ SSL:
761 $!
762 $! Tell The User What We Are Doing.
763 $!
764 $ WRITE SYS$OUTPUT ""
765 $ WRITE SYS$OUTPUT "Building The [.",ARCH,".EXE.SSL]LIBSSL.OLB Library."
766 $!
767 $! Go To The [.SSL] Directory.
768 $!
769 $ SET DEFAULT SYS$DISK:[.SSL]
770 $!
771 $! Build The [.xxx.EXE.SSL]LIBSSL.OLB Library.
772 $!
773 $ @SSL-LIB LIBRARY 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN'
774 $!
775 $! Go Back To The Main Directory.
776 $!
777 $ SET DEFAULT [-]
778 $!
779 $! Time To Return.
780 $!
781 $ RETURN
782 $!
783 $! Build The "[.xxx.EXE.SSL]SSL_TASK.EXE" Program.
784 $!
785 $ SSL_TASK:
786 $!
787 $! Tell The User What We Are Doing.
788 $!
789 $ WRITE SYS$OUTPUT ""
790 $ WRITE SYS$OUTPUT "Building DECNet Based SSL Engine, [.",ARCH,".EXE.SSL]SSL_TASK.EXE"
791 $!
792 $! Go To The [.SSL] Directory.
793 $!
794 $ SET DEFAULT SYS$DISK:[.SSL]
795 $!
796 $! Build The [.xxx.EXE.SSL]SSL_TASK.EXE
797 $!
798 $ @SSL-LIB SSL_TASK 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN'
799 $!
800 $! Go Back To The Main Directory.
801 $!
802 $ SET DEFAULT [-]
803 $!
804 $! That's All, Time To RETURN.
805 $!
806 $ RETURN
807 $!
808 $! Build The OpenSSL Test Programs.
809 $!
810 $ TEST:
811 $!
812 $! Tell The User What We Are Doing.
813 $!
814 $ WRITE SYS$OUTPUT ""
815 $ WRITE SYS$OUTPUT "Building The OpenSSL [.",ARCH,".EXE.TEST] Test Utilities."
816 $!
817 $! Go To The [.TEST] Directory.
818 $!
819 $ SET DEFAULT SYS$DISK:[.TEST]
820 $!
821 $! Build The Test Programs.
822 $!
823 $ @MAKETESTS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN'
824 $!
825 $! Go Back To The Main Directory.
826 $!
827 $ SET DEFAULT [-]
828 $!
829 $! That's All, Time To RETURN.
830 $!
831 $ RETURN
832 $!
833 $! Build The OpenSSL Application Programs.
834 $!
835 $ APPS:
836 $!
837 $! Tell The User What We Are Doing.
838 $!
839 $ WRITE SYS$OUTPUT ""
840 $ WRITE SYS$OUTPUT "Building OpenSSL [.",ARCH,".EXE.APPS] Applications."
841 $!
842 $! Go To The [.APPS] Directory.
843 $!
844 $ SET DEFAULT SYS$DISK:[.APPS]
845 $!
846 $! Build The Application Programs.
847 $!
848 $ @MAKEAPPS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN'
849 $!
850 $! Go Back To The Main Directory.
851 $!
852 $ SET DEFAULT [-]
853 $!
854 $! That's All, Time To RETURN.
855 $!
856 $ RETURN
857 $!
858 $! Build The OpenSSL Application Programs.
859 $!
860 $ ENGINES:
861 $!
862 $! Tell The User What We Are Doing.
863 $!
864 $ WRITE SYS$OUTPUT ""
865 $ WRITE SYS$OUTPUT "Building OpenSSL [.",ARCH,".EXE.ENGINES] Engines."
866 $!
867 $! Go To The [.ENGINES] Directory.
868 $!
869 $ SET DEFAULT SYS$DISK:[.ENGINES]
870 $!
871 $! Build The Application Programs.
872 $!
873 $ @MAKEENGINES ENGINES 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN' "''BUILDPART'"
874 $!
875 $! Go Back To The Main Directory.
876 $!
877 $ SET DEFAULT [-]
878 $!
879 $! That's All, Time To RETURN.
880 $!
881 $ RETURN
882 $!
883 $! Check The User's Options.
884 $!
885 $ CHECK_OPTIONS:
886 $!
887 $! Check if there's a "part", and separate it out
888 $!
889 $ BUILDPART = F$ELEMENT(1,"/",P1)
890 $ IF BUILDPART .EQS. "/"
891 $ THEN
892 $   BUILDPART = ""
893 $ ELSE
894 $   P1 = F$EXTRACT(0,F$LENGTH(P1) - F$LENGTH(BUILDPART) - 1, P1)
895 $ ENDIF
896 $!
897 $! Check To See If P1 Is Blank.
898 $!
899 $ IF (P1.EQS."ALL")
900 $ THEN
901 $!
902 $!   P1 Is ALL, So Build Everything.
903 $!
904 $    BUILDCOMMAND = "ALL"
905 $!
906 $! Else...
907 $!
908 $ ELSE
909 $!
910 $!  Else, Check To See If P1 Has A Valid Argument.
911 $!
912 $   IF (P1.EQS."CONFIG").OR.(P1.EQS."BUILDINF").OR.(P1.EQS."SOFTLINKS") -
913        .OR.(P1.EQS."BUILDALL") -
914        .OR.(P1.EQS."CRYPTO").OR.(P1.EQS."SSL") -
915        .OR.(P1.EQS."SSL_TASK").OR.(P1.EQS."TEST").OR.(P1.EQS."APPS") -
916        .OR.(P1.EQS."ENGINES")
917 $   THEN
918 $!
919 $!    A Valid Argument.
920 $!
921 $     BUILDCOMMAND = P1
922 $!
923 $!  Else...
924 $!
925 $   ELSE
926 $!
927 $!    Tell The User We Don't Know What They Want.
928 $!
929 $     WRITE SYS$OUTPUT ""
930 $     WRITE SYS$OUTPUT "USAGE:   @MAKEVMS.COM [Target] [not-used option] [Debug option] <Compiler>"
931 $     WRITE SYS$OUTPUT ""
932 $     WRITE SYS$OUTPUT "Example: @MAKEVMS.COM ALL NORSAREF NODEBUG "
933 $     WRITE SYS$OUTPUT ""
934 $     WRITE SYS$OUTPUT "The Target ",P1," Is Invalid.  The Valid Target Options Are:"
935 $     WRITE SYS$OUTPUT ""
936 $     WRITE SYS$OUTPUT "    ALL      :  Just Build Everything."
937 $     WRITE SYS$OUTPUT "    CONFIG   :  Just build the [.CRYPTO._xxx]OPENSSLCONF.H file."
938 $     WRITE SYS$OUTPUT "    BUILDINF :  Just build the [.CRYPTO._xxx]BUILDINF.H file."
939 $     WRITE SYS$OUTPUT "    SOFTLINKS:  Just Fix The Unix soft links."
940 $     WRITE SYS$OUTPUT "    BUILDALL :  Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done."
941 $     WRITE SYS$OUTPUT "    CRYPTO   :  To Build Just The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library."
942 $     WRITE SYS$OUTPUT "    CRYPTO/x :  To Build Just The x Part Of The"
943 $     WRITE SYS$OUTPUT "                [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library."
944 $     WRITE SYS$OUTPUT "    SSL      :  To Build Just The [.xxx.EXE.SSL]LIBSSL.OLB Library."
945 $     WRITE SYS$OUTPUT "    SSL_TASK :  To Build Just The [.xxx.EXE.SSL]SSL_TASK.EXE Program."
946 $     WRITE SYS$OUTPUT "    TEST     :  To Build Just The OpenSSL Test Programs."
947 $     WRITE SYS$OUTPUT "    APPS     :  To Build Just The OpenSSL Application Programs."
948 $     WRITE SYS$OUTPUT "    ENGINES  :  To Build Just The ENGINES"
949 $     WRITE SYS$OUTPUT ""
950 $     WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
951 $     WRITE SYS$OUTPUT ""
952 $     WRITE SYS$OUTPUT "    ALPHA    :  Alpha Architecture."
953 $     WRITE SYS$OUTPUT "    IA64     :  IA64 Architecture."
954 $     WRITE SYS$OUTPUT "    VAX      :  VAX Architecture."
955 $     WRITE SYS$OUTPUT ""
956 $!
957 $!    Time To EXIT.
958 $!
959 $     GOTO TIDY
960 $!
961 $!  End The Valid Argument Check.
962 $!
963 $   ENDIF
964 $!
965 $! End The P1 Check.
966 $!
967 $ ENDIF
968 $!
969 $! Check To See If P3 Is Blank.
970 $!
971 $ IF (P3.EQS."NODEBUG")
972 $ THEN
973 $!
974 $!   P3 Is NODEBUG, So Compile Without Debugger Information.
975 $!
976 $    DEBUGGER = "NODEBUG"
977 $!
978 $! Else...
979 $!
980 $ ELSE
981 $!
982 $!  Check To See If We Are To Compile With Debugger Information.
983 $!
984 $   IF (P3.EQS."DEBUG")
985 $   THEN
986 $!
987 $!    Compile With Debugger Information.
988 $!
989 $     DEBUGGER = "DEBUG"
990 $!
991 $!  Else...
992 $!
993 $   ELSE
994 $!
995 $!    Tell The User Entered An Invalid Option..
996 $!
997 $     WRITE SYS$OUTPUT ""
998 $     WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
999 $     WRITE SYS$OUTPUT ""
1000 $     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
1001 $     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
1002 $     WRITE SYS$OUTPUT ""
1003 $!
1004 $!    Time To EXIT.
1005 $!
1006 $     GOTO TIDY
1007 $!
1008 $!  End The Valid Argument Check.
1009 $!
1010 $   ENDIF
1011 $!
1012 $! End The P3 Check.
1013 $!
1014 $ ENDIF
1015 $!
1016 $! Check To See If P4 Is Blank.
1017 $!
1018 $ IF (P4.EQS."")
1019 $ THEN
1020 $!
1021 $!  O.K., The User Didn't Specify A Compiler, Let's Try To
1022 $!  Find Out Which One To Use.
1023 $!
1024 $!  Check To See If We Have GNU C.
1025 $!
1026 $   IF (F$TRNLNM("GNU_CC").NES."")
1027 $   THEN
1028 $!
1029 $!    Looks Like GNUC, Set To Use GNUC.
1030 $!
1031 $     COMPILER = "GNUC"
1032 $!
1033 $!    Tell The User We Are Using GNUC.
1034 $!
1035 $     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
1036 $!
1037 $!  End The GNU C Compiler Check.
1038 $!
1039 $   ENDIF
1040 $!
1041 $!  Check To See If We Have VAXC Or DECC.
1042 $!
1043 $   IF (F$GETSYI("CPU").GE.128).OR.(F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC")
1044 $   THEN 
1045 $!
1046 $!    Looks Like DECC, Set To Use DECC.
1047 $!
1048 $     COMPILER = "DECC"
1049 $!
1050 $!    Tell The User We Are Using DECC.
1051 $!
1052 $     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
1053 $!
1054 $!  Else...
1055 $!
1056 $   ELSE
1057 $!
1058 $!    Looks Like VAXC, Set To Use VAXC.
1059 $!
1060 $     COMPILER = "VAXC"
1061 $!
1062 $!    Tell The User We Are Using VAX C.
1063 $!
1064 $     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
1065 $!
1066 $!  End The DECC & VAXC Compiler Check.
1067 $!
1068 $   ENDIF
1069 $!
1070 $! Else...
1071 $!
1072 $ ELSE
1073 $!
1074 $!  Check To See If The User Entered A Valid Paramter.
1075 $!
1076 $   IF (P4.EQS."VAXC").OR.(P4.EQS."DECC").OR.(P4.EQS."GNUC")!.OR.(P4.EQS."LINK")
1077 $   THEN
1078 $!
1079 $!    Check To See If The User Wanted To Just LINK.
1080 $!
1081 $     IF (P4.EQS."LINK")
1082 $     THEN
1083 $!
1084 $!      Looks Like LINK-only
1085 $!
1086 $       COMPILER = "LINK"
1087 $!
1088 $!      Tell The User We Are Only Linking.
1089 $!
1090 $       WRITE SYS$OUTPUT "LINK Only.  This actually NOT YET SUPPORTED!"
1091 $!
1092 $!    End LINK Check.
1093 $!
1094 $     ENDIF
1095 $!
1096 $!    Check To See If The User Wanted DECC.
1097 $!
1098 $     IF (P4.EQS."DECC")
1099 $     THEN
1100 $!
1101 $!      Looks Like DECC, Set To Use DECC.
1102 $!
1103 $       COMPILER = "DECC"
1104 $!
1105 $!      Tell The User We Are Using DECC.
1106 $!
1107 $       WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
1108 $!
1109 $!    End DECC Check.
1110 $!
1111 $     ENDIF
1112 $!
1113 $!    Check To See If We Are To Use VAXC.
1114 $!
1115 $     IF (P4.EQS."VAXC")
1116 $     THEN
1117 $!
1118 $!      Looks Like VAXC, Set To Use VAXC.
1119 $!
1120 $       COMPILER = "VAXC"
1121 $!
1122 $!      Tell The User We Are Using VAX C.
1123 $!
1124 $       WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
1125 $!
1126 $!    End VAXC Check
1127 $!
1128 $     ENDIF
1129 $!
1130 $!    Check To See If We Are To Use GNU C.
1131 $!
1132 $     IF (P4.EQS."GNUC")
1133 $     THEN
1134 $!
1135 $!      Looks Like GNUC, Set To Use GNUC.
1136 $!
1137 $       COMPILER = "GNUC"
1138 $!
1139 $!      Tell The User We Are Using GNUC.
1140 $!
1141 $       WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
1142 $!
1143 $!    End The GNU C Check.
1144 $!
1145 $     ENDIF
1146 $!
1147 $!  Else The User Entered An Invalid Argument.
1148 $!
1149 $   ELSE
1150 $!
1151 $!    Tell The User We Don't Know What They Want.
1152 $!
1153 $     WRITE SYS$OUTPUT ""
1154 $     WRITE SYS$OUTPUT "The Option ",P4," Is Invalid.  The Valid Options Are:"
1155 $     WRITE SYS$OUTPUT ""
1156 $     WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
1157 $     WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
1158 $     WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
1159 $     WRITE SYS$OUTPUT ""
1160 $!
1161 $!    Time To EXIT.
1162 $!
1163 $     GOTO TIDY
1164 $!
1165 $!  End The Valid Argument Check.
1166 $!
1167 $   ENDIF
1168 $!
1169 $! End The P4 Check.
1170 $!
1171 $ ENDIF
1172 $!
1173 $! Time to check the contents of P5, and to make sure we get the correct library.
1174 $!
1175 $ IF P5.EQS."SOCKETSHR" .OR. P5.EQS."MULTINET" .OR. P5.EQS."UCX" -
1176      .OR. P5.EQS."TCPIP" .OR. P5.EQS."NONE"
1177 $ THEN
1178 $!
1179 $!  Check to see if SOCKETSHR was chosen
1180 $!
1181 $   IF P5.EQS."SOCKETSHR"
1182 $   THEN
1183 $!
1184 $!    Set the library to use SOCKETSHR
1185 $!
1186 $     TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
1187 $!
1188 $!    Tell the user
1189 $!
1190 $     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
1191 $!
1192 $!    Done with SOCKETSHR
1193 $!
1194 $   ENDIF
1195 $!
1196 $!  Check to see if MULTINET was chosen
1197 $!
1198 $   IF P5.EQS."MULTINET"
1199 $   THEN
1200 $!
1201 $!    Set the library to use UCX emulation.
1202 $!
1203 $     P5 = "UCX"
1204 $!
1205 $!    Tell the user
1206 $!
1207 $     WRITE SYS$OUTPUT "Using MultiNet via UCX emulation for TCP/IP"
1208 $!
1209 $!    Done with MULTINET
1210 $!
1211 $   ENDIF
1212 $!
1213 $!  Check to see if UCX was chosen
1214 $!
1215 $   IF P5.EQS."UCX"
1216 $   THEN
1217 $!
1218 $!    Set the library to use UCX.
1219 $!
1220 $     TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT"
1221 $!
1222 $!    Tell the user
1223 $!
1224 $     WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
1225 $!
1226 $!    Done with UCX
1227 $!
1228 $   ENDIF
1229 $!
1230 $!  Check to see if TCPIP was chosen
1231 $!
1232 $   IF P5.EQS."TCPIP"
1233 $   THEN
1234 $!
1235 $!    Set the library to use TCPIP (post UCX).
1236 $!
1237 $     TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
1238 $!
1239 $!    Tell the user
1240 $!
1241 $     WRITE SYS$OUTPUT "Using TCPIP (post UCX) for TCP/IP"
1242 $!
1243 $!    Done with TCPIP
1244 $!
1245 $   ENDIF
1246 $!
1247 $!  Check to see if NONE was chosen
1248 $!
1249 $   IF P5.EQS."NONE"
1250 $   THEN
1251 $!
1252 $!    Do not use a TCPIP library.
1253 $!
1254 $     TCPIP_LIB = ""
1255 $!
1256 $!    Tell the user
1257 $!
1258 $     WRITE SYS$OUTPUT "A specific TCPIP library will not be used."
1259 $!
1260 $!    Done with NONE.
1261 $!
1262 $   ENDIF
1263 $!
1264 $!  Set the TCPIP_TYPE symbol
1265 $!
1266 $   TCPIP_TYPE = P5
1267 $!
1268 $!  Print info
1269 $!
1270 $   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
1271 $!
1272 $!  Else The User Entered An Invalid Argument.
1273 $!
1274 $ ELSE
1275 $   IF P5 .NES. ""
1276 $   THEN
1277 $!
1278 $!    Tell The User We Don't Know What They Want.
1279 $!
1280 $     WRITE SYS$OUTPUT ""
1281 $     WRITE SYS$OUTPUT "The Option ",P5," Is Invalid.  The Valid Options Are:"
1282 $     WRITE SYS$OUTPUT ""
1283 $     WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
1284 $     WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
1285 $     WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP TCP/IP (post UCX) library."
1286 $     WRITE SYS$OUTPUT "    NONE       :  To not link with a specific TCP/IP library."
1287 $     WRITE SYS$OUTPUT ""
1288 $!
1289 $!    Time To EXIT.
1290 $!
1291 $     GOTO TIDY
1292 $   ELSE
1293 $!
1294 $! If TCPIP is not defined, then hardcode it to make
1295 $! it clear that no TCPIP is desired.
1296 $!
1297 $     IF P5 .EQS. ""
1298 $     THEN
1299 $       TCPIP_LIB = ""
1300 $       TCPIP_TYPE = "NONE"
1301 $     ELSE
1302 $!
1303 $!    Set the TCPIP_TYPE symbol
1304 $!
1305 $       TCPIP_TYPE = P5
1306 $     ENDIF
1307 $   ENDIF
1308 $!
1309 $!  Done with TCP/IP libraries
1310 $!
1311 $ ENDIF
1312 $!
1313 $! Special Threads For OpenVMS v7.1 Or Later
1314 $!
1315 $! Written By:  Richard Levitte
1316 $!              richard@levitte.org
1317 $!
1318 $!
1319 $! Check To See If We Have A Option For P6.
1320 $!
1321 $ IF (P6.EQS."")
1322 $ THEN
1323 $!
1324 $!  Get The Version Of VMS We Are Using.
1325 $!
1326 $   ISSEVEN :=
1327 $   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,VMS_VERSION))
1328 $   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
1329 $!
1330 $!  Check To See If The VMS Version Is v7.1 Or Later.
1331 $!
1332 $   IF (TMP.GE.71)
1333 $   THEN
1334 $!
1335 $!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
1336 $!
1337 $     ISSEVEN := ,PTHREAD_USE_D4
1338 $!
1339 $!  End The VMS Version Check.
1340 $!
1341 $   ENDIF
1342 $!
1343 $! End The P6 Check.
1344 $!
1345 $ ENDIF
1346 $!
1347 $!  Time To RETURN...
1348 $!
1349 $ RETURN
1350 $!
1351 $ TIDY:
1352 $ SET DEFAULT 'DEF_ORIG'
1353 $ EXIT
1354 $!