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