1$!
2$!  CRYPTO-LIB.COM
3$!  Written By:  Robert Byer
4$!               Vice-President
5$!               A-Com Computing, Inc.
6$!               byer@mail.all-net.net
7$!
8$!  Changes by Richard Levitte <richard@levitte.org>
9$!
10$!  This command files compiles and creates the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" 
11$!  library for OpenSSL.  The "xxx" denotes the machine architecture of AXP
12$!  or VAX.
13$!
14$!  It was re-written so it would try to determine what "C" compiler to use 
15$!  or you can specify which "C" compiler to use.
16$!
17$!  Specify the following as P1 to build just that part or ALL to just
18$!  build everything.
19$!
20$!    		LIBRARY    To just compile the [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library.
21$!    		APPS       To just compile the [.xxx.EXE.CRYPTO]*.EXE
22$!		ALL	   To do both LIBRARY and APPS
23$!
24$!  Specify DEBUG or NODEBUG as P2 to compile with or without debugger
25$!  information.
26$!
27$!  Specify which compiler at P3 to try to compile under.
28$!
29$!	   VAXC	 For VAX C.
30$!	   DECC	 For DEC C.
31$!	   GNUC	 For GNU C.
32$!
33$!  If you don't speficy a compiler, it will try to determine which
34$!  "C" compiler to use.
35$!
36$!  P4, if defined, sets a TCP/IP library to use, through one of the following
37$!  keywords:
38$!
39$!	UCX		for UCX
40$!	TCPIP		for TCPIP (post UCX)
41$!	SOCKETSHR	for SOCKETSHR+NETLIB
42$!
43$!  P5, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
44$!
45$!  P6, if defined, sets a choice of crypto methods to compile.
46$!  WARNING: this should only be done to recompile some part of an already
47$!  fully compiled library.
48$!
49$!
50$! Define A TCP/IP Library That We Will Need To Link To.
51$! (That Is, If We Need To Link To One.)
52$!
53$ TCPIP_LIB = ""
54$!
55$! Check Which Architecture We Are Using.
56$!
57$ IF (F$GETSYI("CPU").GE.128)
58$ THEN
59$!
60$!  The Architecture Is AXP
61$!
62$   ARCH := AXP
63$!
64$! Else...
65$!
66$ ELSE
67$!
68$!  The Architecture Is VAX.
69$!
70$   ARCH := VAX
71$!
72$! End The Architecture Check.
73$!
74$ ENDIF
75$!
76$! Define The Different Encryption Types.
77$!
78$ ENCRYPT_TYPES = "Basic,MD2,MD4,MD5,SHA,MDC2,HMAC,RIPEMD,"+ -
79		  "DES,RC2,RC4,RC5,IDEA,BF,CAST,"+ -
80		  "BN,EC,RSA,DSA,DH,DSO,ENGINE,AES,"+ -
81		  "BUFFER,BIO,STACK,LHASH,RAND,ERR,OBJECTS,"+ -
82		  "EVP,EVP_2,ASN1,ASN1_2,PEM,X509,X509V3,"+ -
83		  "CONF,TXT_DB,PKCS7,PKCS12,COMP,OCSP,UI,KRB5"
84$!
85$! Check To Make Sure We Have Valid Command Line Parameters.
86$!
87$ GOSUB CHECK_OPTIONS
88$!
89$! Initialise logical names and such
90$!
91$ GOSUB INITIALISE
92$!
93$! Tell The User What Kind of Machine We Run On.
94$!
95$ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
96$!
97$! Define The OBJ Directory.
98$!
99$ OBJ_DIR := SYS$DISK:[-.'ARCH'.OBJ.CRYPTO]
100$!
101$! Check To See If The Architecture Specific OBJ Directory Exists.
102$!
103$ IF (F$PARSE(OBJ_DIR).EQS."")
104$ THEN
105$!
106$!  It Dosen't Exist, So Create It.
107$!
108$   CREATE/DIR 'OBJ_DIR'
109$!
110$! End The Architecture Specific OBJ Directory Check.
111$!
112$ ENDIF
113$!
114$! Define The EXE Directory.
115$!
116$ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]
117$!
118$! Check To See If The Architecture Specific Directory Exists.
119$!
120$ IF (F$PARSE(EXE_DIR).EQS."")
121$ THEN
122$!
123$!  It Dosen't Exist, So Create It.
124$!
125$   CREATE/DIRECTORY 'EXE_DIR'
126$!
127$! End The Architecture Specific Directory Check.
128$!
129$ ENDIF
130$!
131$! Define The Library Name.
132$!
133$ LIB_NAME := 'EXE_DIR'LIBCRYPTO.OLB
134$!
135$! Define The CRYPTO-LIB We Are To Use.
136$!
137$ CRYPTO_LIB := 'EXE_DIR'LIBCRYPTO.OLB
138$!
139$! Check To See If We Already Have A "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" Library...
140$!
141$ IF (F$SEARCH(LIB_NAME).EQS."")
142$ THEN
143$!
144$! Guess Not, Create The Library.
145$!
146$   LIBRARY/CREATE/OBJECT 'LIB_NAME'
147$!
148$! End The Library Check.
149$!
150$ ENDIF
151$!
152$! Build our options file for the application
153$!
154$ GOSUB CHECK_OPT_FILE
155$!
156$! Define The Different Encryption "library" Strings.
157$!
158$ APPS_DES = "DES/DES,CBC3_ENC"
159$ APPS_PKCS7 = "ENC/ENC;DEC/DEC;SIGN/SIGN;VERIFY/VERIFY,EXAMPLE"
160$
161$ LIB_ = "cryptlib,mem,mem_clr,mem_dbg,cversion,ex_data,tmdiff,cpt_err,ebcdic,uid,o_time,o_str"
162$ LIB_MD2 = "md2_dgst,md2_one"
163$ LIB_MD4 = "md4_dgst,md4_one"
164$ LIB_MD5 = "md5_dgst,md5_one"
165$ LIB_SHA = "sha_dgst,sha1dgst,sha_one,sha1_one"
166$ LIB_MDC2 = "mdc2dgst,mdc2_one"
167$ LIB_HMAC = "hmac"
168$ LIB_RIPEMD = "rmd_dgst,rmd_one"
169$ LIB_DES = "set_key,ecb_enc,cbc_enc,"+ -
170	"ecb3_enc,cfb64enc,cfb64ede,cfb_enc,ofb64ede,"+ -
171	"enc_read,enc_writ,ofb64enc,"+ -
172	"ofb_enc,str2key,pcbc_enc,qud_cksm,rand_key,"+ -
173	"des_enc,fcrypt_b,"+ -
174	"fcrypt,xcbc_enc,rpc_enc,cbc_cksm,"+ -
175	"ede_cbcm_enc,des_old,des_old2,read2pwd"
176$ LIB_RC2 = "rc2_ecb,rc2_skey,rc2_cbc,rc2cfb64,rc2ofb64"
177$ LIB_RC4 = "rc4_skey,rc4_enc"
178$ LIB_RC5 = "rc5_skey,rc5_ecb,rc5_enc,rc5cfb64,rc5ofb64"
179$ LIB_IDEA = "i_cbc,i_cfb64,i_ofb64,i_ecb,i_skey"
180$ LIB_BF = "bf_skey,bf_ecb,bf_enc,bf_cfb64,bf_ofb64"
181$ LIB_CAST = "c_skey,c_ecb,c_enc,c_cfb64,c_ofb64"
182$ LIB_BN_ASM = "[.asm]vms.mar,vms-helper"
183$ IF F$TRNLNM("OPENSSL_NO_ASM").OR.ARCH.EQS."AXP" THEN LIB_BN_ASM = "bn_asm"
184$ LIB_BN = "bn_add,bn_div,bn_exp,bn_lib,bn_ctx,bn_mul,bn_mod,"+ -
185	"bn_print,bn_rand,bn_shift,bn_word,bn_blind,"+ -
186	"bn_kron,bn_sqrt,bn_gcd,bn_prime,bn_err,bn_sqr,"+LIB_BN_ASM+","+ -
187	"bn_recp,bn_mont,bn_mpi,bn_exp2"
188$ LIB_RSA = "rsa_eay,rsa_gen,rsa_lib,rsa_sign,rsa_saos,rsa_err,"+ -
189	"rsa_pk1,rsa_ssl,rsa_none,rsa_oaep,rsa_chk,rsa_null,"+ -
190	"rsa_asn1"
191$ LIB_EC = "ec_lib,ecp_smpl,ecp_mont,ecp_recp,ecp_nist,ec_cvt,ec_mult,"+ -
192	"ec_err"
193$ LIB_DSA = "dsa_gen,dsa_key,dsa_lib,dsa_asn1,dsa_vrf,dsa_sign,dsa_err,dsa_ossl"
194$ LIB_DH = "dh_asn1,dh_gen,dh_key,dh_lib,dh_check,dh_err"
195$ LIB_DSO = "dso_dl,dso_dlfcn,dso_err,dso_lib,dso_null,"+ -
196	"dso_openssl,dso_win32,dso_vms"
197$ LIB_ENGINE = "eng_err,eng_lib,eng_list,eng_init,eng_ctrl,"+ -
198	"eng_table,eng_pkey,eng_fat,eng_all,"+ -
199	"tb_rsa,tb_dsa,tb_dh,tb_rand,tb_cipher,tb_digest,"+ -
200	"eng_openssl,eng_dyn,eng_cnf,"+ -
201	"hw_atalla,hw_cswift,hw_ncipher,hw_nuron,hw_ubsec,"+ -
202	"hw_cryptodev,hw_aep,hw_sureware,hw_4758_cca"
203$ LIB_AES = "aes_core,aes_misc,aes_ecb,aes_cbc,aes_cfb,aes_ofb,aes_ctr"
204$ LIB_BUFFER = "buffer,buf_err"
205$ LIB_BIO = "bio_lib,bio_cb,bio_err,"+ -
206	"bss_mem,bss_null,bss_fd,"+ -
207	"bss_file,bss_sock,bss_conn,"+ -
208	"bf_null,bf_buff,b_print,b_dump,"+ -
209	"b_sock,bss_acpt,bf_nbio,bss_rtcp,bss_bio,bss_log,"+ -
210	"bf_lbuf"
211$ LIB_STACK = "stack"
212$ LIB_LHASH = "lhash,lh_stats"
213$ LIB_RAND = "md_rand,randfile,rand_lib,rand_err,rand_egd,"+ -
214	"rand_vms"
215$ LIB_ERR = "err,err_all,err_prn"
216$ LIB_OBJECTS = "o_names,obj_dat,obj_lib,obj_err"
217$ LIB_EVP = "encode,digest,evp_enc,evp_key,evp_acnf,"+ -
218	"e_des,e_bf,e_idea,e_des3,"+ -
219	"e_rc4,e_aes,names,"+ -
220	"e_xcbc_d,e_rc2,e_cast,e_rc5"
221$ LIB_EVP_2 = "m_null,m_md2,m_md4,m_md5,m_sha,m_sha1," + -
222	"m_dss,m_dss1,m_mdc2,m_ripemd,"+ -
223	"p_open,p_seal,p_sign,p_verify,p_lib,p_enc,p_dec,"+ -
224	"bio_md,bio_b64,bio_enc,evp_err,e_null,"+ -
225	"c_all,c_allc,c_alld,evp_lib,bio_ok,"+-
226	"evp_pkey,evp_pbe,p5_crpt,p5_crpt2"
227$ LIB_ASN1 = "a_object,a_bitstr,a_utctm,a_gentm,a_time,a_int,a_octet,"+ -
228	"a_print,a_type,a_set,a_dup,a_d2i_fp,a_i2d_fp,"+ -
229	"a_enum,a_utf8,a_sign,a_digest,a_verify,a_mbstr,a_strex,"+ -
230	"x_algor,x_val,x_pubkey,x_sig,x_req,x_attrib,x_bignum,"+ -
231	"x_long,x_name,x_x509,x_x509a,x_crl,x_info,x_spki,nsseq,"+ -
232	"d2i_pu,d2i_pr,i2d_pu,i2d_pr"
233$ LIB_ASN1_2 = "t_req,t_x509,t_x509a,t_crl,t_pkey,t_spki,t_bitst,"+ -
234	"tasn_new,tasn_fre,tasn_enc,tasn_dec,tasn_utl,tasn_typ,"+ -
235	"f_int,f_string,n_pkey,"+ -
236	"f_enum,a_hdr,x_pkey,a_bool,x_exten,"+ -
237	"asn1_par,asn1_lib,asn1_err,a_meth,a_bytes,a_strnid,"+ -
238	"evp_asn1,asn_pack,p5_pbe,p5_pbev2,p8_pkey,asn_moid"
239$ LIB_PEM = "pem_sign,pem_seal,pem_info,pem_lib,pem_all,pem_err,"+ -
240	"pem_x509,pem_xaux,pem_oth,pem_pk8,pem_pkey"
241$ LIB_X509 = "x509_def,x509_d2,x509_r2x,x509_cmp,"+ -
242	"x509_obj,x509_req,x509spki,x509_vfy,"+ -
243	"x509_set,x509cset,x509rset,x509_err,"+ -
244	"x509name,x509_v3,x509_ext,x509_att,"+ -
245	"x509type,x509_lu,x_all,x509_txt,"+ -
246	"x509_trs,by_file,by_dir"
247$ LIB_X509V3 = "v3_bcons,v3_bitst,v3_conf,v3_extku,v3_ia5,v3_lib,"+ -
248	"v3_prn,v3_utl,v3err,v3_genn,v3_alt,v3_skey,v3_akey,v3_pku,"+ -
249	"v3_int,v3_enum,v3_sxnet,v3_cpols,v3_crld,v3_purp,v3_info,"+ -
250	"v3_ocsp,v3_akeya"
251$ LIB_CONF = "conf_err,conf_lib,conf_api,conf_def,conf_mod,conf_mall,conf_sap"
252$ LIB_TXT_DB = "txt_db"
253$ LIB_PKCS7 = "pk7_asn1,pk7_lib,pkcs7err,pk7_doit,pk7_smime,pk7_attr,"+ -
254	"pk7_mime"
255$ LIB_PKCS12 = "p12_add,p12_asn,p12_attr,p12_crpt,p12_crt,p12_decr,"+ -
256	"p12_init,p12_key,p12_kiss,p12_mutl,"+ -
257	"p12_utl,p12_npas,pk12err,p12_p8d,p12_p8e"
258$ LIB_COMP = "comp_lib,comp_err,"+ -
259	"c_rle,c_zlib"
260$ LIB_OCSP = "ocsp_asn,ocsp_ext,ocsp_ht,ocsp_lib,ocsp_cl,"+ -
261	"ocsp_srv,ocsp_prn,ocsp_vfy,ocsp_err"
262$ LIB_UI_COMPAT = ",ui_compat"
263$ LIB_UI = "ui_err,ui_lib,ui_openssl,ui_util"+LIB_UI_COMPAT
264$ LIB_KRB5 = "krb5_asn"
265$!
266$! Setup exceptional compilations
267$!
268$ COMPILEWITH_CC3 = ",bss_rtcp,"
269$ COMPILEWITH_CC4 = ",a_utctm,bss_log,o_time,"
270$ COMPILEWITH_CC5 = ",md2_dgst,md4_dgst,md5_dgst,mdc2dgst," + -
271                    "sha_dgst,sha1dgst,rmd_dgst,bf_enc,"
272$!
273$! Figure Out What Other Modules We Are To Build.
274$!
275$ BUILD_SET:
276$!
277$! Define A Module Counter.
278$!
279$ MODULE_COUNTER = 0
280$!
281$! Top Of The Loop.
282$!
283$ MODULE_NEXT:
284$!
285$! Extract The Module Name From The Encryption List.
286$!
287$ MODULE_NAME = F$ELEMENT(MODULE_COUNTER,",",ENCRYPT_TYPES)
288$ IF MODULE_NAME.EQS."Basic" THEN MODULE_NAME = ""
289$ MODULE_NAME1 = MODULE_NAME
290$!
291$! Check To See If We Are At The End Of The Module List.
292$!
293$ IF (MODULE_NAME.EQS.",") 
294$ THEN 
295$!
296$!  We Are At The End Of The Module List, Go To MODULE_DONE.
297$!
298$   GOTO MODULE_DONE
299$!
300$! End The Module List Check.
301$!
302$ ENDIF
303$!
304$! Increment The Moudle Counter.
305$!
306$ MODULE_COUNTER = MODULE_COUNTER + 1
307$!
308$! Create The Library and Apps Module Names.
309$!
310$ LIB_MODULE = "LIB_" + MODULE_NAME
311$ APPS_MODULE = "APPS_" + MODULE_NAME
312$ IF (MODULE_NAME.EQS."ASN1_2")
313$ THEN
314$   MODULE_NAME = "ASN1"
315$ ENDIF
316$ IF (MODULE_NAME.EQS."EVP_2")
317$ THEN
318$   MODULE_NAME = "EVP"
319$ ENDIF
320$!
321$! Set state (can be LIB and APPS)
322$!
323$ STATE = "LIB"
324$ IF BUILDALL .EQS. "APPS" THEN STATE = "APPS"
325$!
326$! Check if the library module name actually is defined
327$!
328$ IF F$TYPE('LIB_MODULE') .EQS. ""
329$ THEN
330$   WRITE SYS$ERROR ""
331$   WRITE SYS$ERROR "The module ",MODULE_NAME," does not exist.  Continuing..."
332$   WRITE SYS$ERROR ""
333$   GOTO MODULE_NEXT
334$ ENDIF
335$!
336$! Top Of The Module Loop.
337$!
338$ MODULE_AGAIN:
339$!
340$! Tell The User What Module We Are Building.
341$!
342$ IF (MODULE_NAME1.NES."") 
343$ THEN
344$   IF STATE .EQS. "LIB"
345$   THEN
346$     WRITE SYS$OUTPUT "Compiling The ",MODULE_NAME1," Library Files. (",BUILDALL,",",STATE,")"
347$   ELSE IF F$TYPE('APPS_MODULE') .NES. ""
348$     THEN
349$       WRITE SYS$OUTPUT "Compiling The ",MODULE_NAME1," Applications. (",BUILDALL,",",STATE,")"
350$     ENDIF
351$   ENDIF
352$ ENDIF
353$!
354$!  Define A File Counter And Set It To "0".
355$!
356$ FILE_COUNTER = 0
357$ APPLICATION = ""
358$ APPLICATION_COUNTER = 0
359$!
360$! Top Of The File Loop.
361$!
362$ NEXT_FILE:
363$!
364$! Look in the LIB_MODULE is we're in state LIB
365$!
366$ IF STATE .EQS. "LIB"
367$ THEN
368$!
369$!   O.K, Extract The File Name From The File List.
370$!
371$   FILE_NAME = F$ELEMENT(FILE_COUNTER,",",'LIB_MODULE')
372$!
373$!   else
374$!
375$ ELSE
376$   FILE_NAME = ","
377$!
378$   IF F$TYPE('APPS_MODULE') .NES. ""
379$   THEN
380$!
381$!     Extract The File Name From The File List.
382$!     This part is a bit more complicated.
383$!
384$     IF APPLICATION .EQS. ""
385$     THEN
386$       APPLICATION = F$ELEMENT(APPLICATION_COUNTER,";",'APPS_MODULE')
387$       APPLICATION_COUNTER = APPLICATION_COUNTER + 1
388$       APPLICATION_OBJECTS = F$ELEMENT(1,"/",APPLICATION)
389$       APPLICATION = F$ELEMENT(0,"/",APPLICATION)
390$       FILE_COUNTER = 0
391$     ENDIF
392$
393$!     WRITE SYS$OUTPUT "DEBUG: SHOW SYMBOL APPLICATION*"
394$!     SHOW SYMBOL APPLICATION*
395$!
396$     IF APPLICATION .NES. ";"
397$     THEN
398$       FILE_NAME = F$ELEMENT(FILE_COUNTER,",",APPLICATION_OBJECTS)
399$       IF FILE_NAME .EQS. ","
400$       THEN
401$         APPLICATION = ""
402$         GOTO NEXT_FILE
403$       ENDIF
404$     ENDIF
405$   ENDIF
406$ ENDIF
407$!
408$! Check To See If We Are At The End Of The File List.
409$!
410$ IF (FILE_NAME.EQS.",") 
411$ THEN 
412$!
413$!  We Are At The End Of The File List, Change State Or Goto FILE_DONE.
414$!
415$   IF STATE .EQS. "LIB" .AND. BUILDALL .NES. "LIBRARY"
416$   THEN
417$     STATE = "APPS"
418$     GOTO MODULE_AGAIN
419$   ELSE
420$     GOTO FILE_DONE
421$   ENDIF
422$!
423$! End The File List Check.
424$!
425$ ENDIF
426$!
427$! Increment The Counter.
428$!
429$ FILE_COUNTER = FILE_COUNTER + 1
430$!
431$! Create The Source File Name.
432$!
433$ TMP_FILE_NAME = F$ELEMENT(1,"]",FILE_NAME)
434$ IF TMP_FILE_NAME .EQS. "]" THEN TMP_FILE_NAME = FILE_NAME
435$ IF F$ELEMENT(0,".",TMP_FILE_NAME) .EQS. TMP_FILE_NAME THEN -
436	FILE_NAME = FILE_NAME + ".c"
437$ IF (MODULE_NAME.NES."")
438$ THEN
439$   SOURCE_FILE = "SYS$DISK:[." + MODULE_NAME+ "]" + FILE_NAME
440$ ELSE
441$   SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME
442$ ENDIF
443$ SOURCE_FILE = SOURCE_FILE - "]["
444$!
445$! Create The Object File Name.
446$!
447$ OBJECT_FILE = OBJ_DIR + F$PARSE(FILE_NAME,,,"NAME","SYNTAX_ONLY") + ".OBJ"
448$ ON WARNING THEN GOTO NEXT_FILE
449$!
450$! Check To See If The File We Want To Compile Is Actually There.
451$!
452$ IF (F$SEARCH(SOURCE_FILE).EQS."")
453$ THEN
454$!
455$!  Tell The User That The File Doesn't Exist.
456$!
457$   WRITE SYS$OUTPUT ""
458$   WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Doesn't Exist."
459$   WRITE SYS$OUTPUT ""
460$!
461$!  Exit The Build.
462$!
463$   GOTO EXIT
464$!
465$! End The File Exist Check.
466$!
467$ ENDIF
468$!
469$! Tell The User We Are Compiling The File.
470$!
471$ IF (MODULE_NAME.EQS."")
472$ THEN
473$   WRITE SYS$OUTPUT "Compiling The ",FILE_NAME," File.  (",BUILDALL,",",STATE,")"
474$ ENDIF
475$ IF (MODULE_NAME.NES."")
476$ THEN 
477$   WRITE SYS$OUTPUT "	",FILE_NAME,""
478$ ENDIF
479$!
480$! Compile The File.
481$!
482$ ON ERROR THEN GOTO NEXT_FILE
483$ FILE_NAME0 = F$ELEMENT(0,".",FILE_NAME)
484$ IF FILE_NAME - ".mar" .NES. FILE_NAME
485$ THEN
486$   MACRO/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
487$ ELSE
488$   IF COMPILEWITH_CC3 - FILE_NAME0 .NES. COMPILEWITH_CC3
489$   THEN
490$     CC3/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
491$   ELSE
492$     IF COMPILEWITH_CC4 - FILE_NAME0 .NES. COMPILEWITH_CC4
493$     THEN
494$       CC4/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
495$     ELSE
496$       IF COMPILEWITH_CC5 - FILE_NAME0 .NES. COMPILEWITH_CC5
497$       THEN
498$         CC5/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
499$       ELSE
500$         CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
501$       ENDIF
502$     ENDIF
503$   ENDIF
504$ ENDIF
505$ IF STATE .EQS. "LIB"
506$ THEN 
507$!
508$!   Add It To The Library.
509$!
510$   LIBRARY/REPLACE 'LIB_NAME' 'OBJECT_FILE'
511$!
512$!   Time To Clean Up The Object File.
513$!
514$   DELETE 'OBJECT_FILE';*
515$ ENDIF
516$!
517$! Go Back And Do It Again.
518$!
519$ GOTO NEXT_FILE
520$!
521$! All Done With This Library Part.
522$!
523$ FILE_DONE:
524$!
525$! Time To Build Some Applications
526$!
527$ IF F$TYPE('APPS_MODULE') .NES. "" .AND. BUILDALL .NES. "LIBRARY"
528$ THEN
529$   APPLICATION_COUNTER = 0
530$ NEXT_APPLICATION:
531$   APPLICATION = F$ELEMENT(APPLICATION_COUNTER,";",'APPS_MODULE')
532$   IF APPLICATION .EQS. ";" THEN GOTO APPLICATION_DONE
533$
534$   APPLICATION_COUNTER = APPLICATION_COUNTER + 1
535$   APPLICATION_OBJECTS = F$ELEMENT(1,"/",APPLICATION)
536$   APPLICATION = F$ELEMENT(0,"/",APPLICATION)
537$
538$!   WRITE SYS$OUTPUT "DEBUG: SHOW SYMBOL APPLICATION*"
539$!   SHOW SYMBOL APPLICATION*
540$!
541$! Tell the user what happens
542$!
543$   WRITE SYS$OUTPUT "	",APPLICATION,".exe"
544$!
545$! Link The Program.
546$!
547$   ON ERROR THEN GOTO NEXT_APPLICATION
548$!
549$! Check To See If We Are To Link With A Specific TCP/IP Library.
550$!
551$   IF (TCPIP_LIB.NES."")
552$   THEN
553$!
554$!    Link With A TCP/IP Library.
555$!
556$     LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR''APPLICATION'.EXE -
557          'OBJ_DIR''APPLICATION_OBJECTS', -
558	  'CRYPTO_LIB'/LIBRARY, -
559          'TCPIP_LIB','OPT_FILE'/OPTION
560$!
561$! Else...
562$!
563$   ELSE
564$!
565$!    Don't Link With A TCP/IP Library.
566$!
567$     LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR''APPLICATION'.EXE -
568          'OBJ_DIR''APPLICATION_OBJECTS',-
569	  'CRYPTO_LIB'/LIBRARY, -
570          'OPT_FILE'/OPTION
571$!
572$! End The TCP/IP Library Check.
573$!
574$   ENDIF
575$   GOTO NEXT_APPLICATION
576$  APPLICATION_DONE:
577$ ENDIF
578$!
579$! Go Back And Get The Next Module.
580$!
581$ GOTO MODULE_NEXT
582$!
583$! All Done With This Module.
584$!
585$ MODULE_DONE:
586$!
587$! Tell The User That We Are All Done.
588$!
589$ WRITE SYS$OUTPUT "All Done..."
590$ EXIT:
591$ GOSUB CLEANUP
592$ EXIT
593$!
594$! Check For The Link Option FIle.
595$!
596$ CHECK_OPT_FILE:
597$!
598$! Check To See If We Need To Make A VAX C Option File.
599$!
600$ IF (COMPILER.EQS."VAXC")
601$ THEN
602$!
603$!  Check To See If We Already Have A VAX C Linker Option File.
604$!
605$   IF (F$SEARCH(OPT_FILE).EQS."")
606$   THEN
607$!
608$!    We Need A VAX C Linker Option File.
609$!
610$     CREATE 'OPT_FILE'
611$DECK
612!
613! Default System Options File To Link Agianst 
614! The Sharable VAX C Runtime Library.
615!
616SYS$SHARE:VAXCRTL.EXE/SHARE
617$EOD
618$!
619$!  End The Option File Check.
620$!
621$   ENDIF
622$!
623$! End The VAXC Check.
624$!
625$ ENDIF
626$!
627$! Check To See If We Need A GNU C Option File.
628$!
629$ IF (COMPILER.EQS."GNUC")
630$ THEN
631$!
632$!  Check To See If We Already Have A GNU C Linker Option File.
633$!
634$   IF (F$SEARCH(OPT_FILE).EQS."")
635$   THEN
636$!
637$!    We Need A GNU C Linker Option File.
638$!
639$     CREATE 'OPT_FILE'
640$DECK
641!
642! Default System Options File To Link Agianst 
643! The Sharable C Runtime Library.
644!
645GNU_CC:[000000]GCCLIB/LIBRARY
646SYS$SHARE:VAXCRTL/SHARE
647$EOD
648$!
649$!  End The Option File Check.
650$!
651$   ENDIF
652$!
653$! End The GNU C Check.
654$!
655$ ENDIF
656$!
657$! Check To See If We Need A DEC C Option File.
658$!
659$ IF (COMPILER.EQS."DECC")
660$ THEN
661$!
662$!  Check To See If We Already Have A DEC C Linker Option File.
663$!
664$   IF (F$SEARCH(OPT_FILE).EQS."")
665$   THEN
666$!
667$!    Figure Out If We Need An AXP Or A VAX Linker Option File.
668$!
669$     IF ARCH .EQS. "VAX"
670$     THEN
671$!
672$!      We Need A DEC C Linker Option File For VAX.
673$!
674$       CREATE 'OPT_FILE'
675$DECK
676!
677! Default System Options File To Link Agianst 
678! The Sharable DEC C Runtime Library.
679!
680SYS$SHARE:DECC$SHR.EXE/SHARE
681$EOD
682$!
683$!    Else...
684$!
685$     ELSE
686$!
687$!      Create The AXP Linker Option File.
688$!
689$       CREATE 'OPT_FILE'
690$DECK
691!
692! Default System Options File For AXP To Link Agianst 
693! The Sharable C Runtime Library.
694!
695SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
696SYS$SHARE:CMA$OPEN_RTL/SHARE
697$EOD
698$!
699$!    End The VAX/AXP DEC C Option File Check.
700$!
701$     ENDIF
702$!
703$!  End The Option File Search.
704$!
705$   ENDIF
706$!
707$! End The DEC C Check.
708$!
709$ ENDIF
710$!
711$!  Tell The User What Linker Option File We Are Using.
712$!
713$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."	
714$!
715$! Time To RETURN.
716$!
717$ RETURN
718$!
719$! Check The User's Options.
720$!
721$ CHECK_OPTIONS:
722$!
723$! Check To See If P1 Is Blank.
724$!
725$ IF (P1.EQS."ALL")
726$ THEN
727$!
728$!   P1 Is Blank, So Build Everything.
729$!
730$    BUILDALL = "TRUE"
731$!
732$! Else...
733$!
734$ ELSE
735$!
736$!  Else, Check To See If P1 Has A Valid Arguement.
737$!
738$   IF (P1.EQS."LIBRARY").OR.(P1.EQS."APPS")
739$   THEN
740$!
741$!    A Valid Arguement.
742$!
743$     BUILDALL = P1
744$!
745$!  Else...
746$!
747$   ELSE
748$!
749$!    Tell The User We Don't Know What They Want.
750$!
751$     WRITE SYS$OUTPUT ""
752$     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
753$     WRITE SYS$OUTPUT ""
754$     WRITE SYS$OUTPUT "    ALL      :  Just Build Everything."
755$     WRITE SYS$OUTPUT "    LIBRARY  :  To Compile Just The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library."
756$     WRITE SYS$OUTPUT "    APPS     :  To Compile Just The [.xxx.EXE.CRYPTO]*.EXE Programs."
757$     WRITE SYS$OUTPUT ""
758$     WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
759$     WRITE SYS$OUTPUT ""
760$     WRITE SYS$OUTPUT "        AXP  :  Alpha Architecture."
761$     WRITE SYS$OUTPUT "        VAX  :  VAX Architecture."
762$     WRITE SYS$OUTPUT ""
763$!
764$!    Time To EXIT.
765$!
766$     EXIT
767$!
768$!  End The Valid Arguement Check.
769$!
770$   ENDIF
771$!
772$! End The P1 Check.
773$!
774$ ENDIF
775$!
776$! Check To See If P2 Is Blank.
777$!
778$ IF (P2.EQS."NODEBUG")
779$ THEN
780$!
781$!   P2 Is NODEBUG, So Compile Without The Debugger Information.
782$!
783$    DEBUGGER = "NODEBUG"
784$    TRACEBACK = "NOTRACEBACK" 
785$    GCC_OPTIMIZE = "OPTIMIZE"
786$    CC_OPTIMIZE = "OPTIMIZE"
787$    MACRO_OPTIMIZE = "OPTIMIZE"
788$    WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
789$    WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
790$ ELSE
791$!
792$!  Check To See If We Are To Compile With Debugger Information.
793$!
794$   IF (P2.EQS."DEBUG")
795$   THEN
796$!
797$!    Compile With Debugger Information.
798$!
799$     DEBUGGER = "DEBUG"
800$     TRACEBACK = "TRACEBACK"
801$     GCC_OPTIMIZE = "NOOPTIMIZE"
802$     CC_OPTIMIZE = "NOOPTIMIZE"
803$     MACRO_OPTIMIZE = "NOOPTIMIZE"
804$     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
805$     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
806$   ELSE 
807$!
808$!    They Entered An Invalid Option..
809$!
810$     WRITE SYS$OUTPUT ""
811$     WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
812$     WRITE SYS$OUTPUT ""
813$     WRITE SYS$OUTPUT "     DEBUG   :  Compile With The Debugger Information."
814$     WRITE SYS$OUTPUT "     NODEBUG :  Compile Without The Debugger Information."
815$     WRITE SYS$OUTPUT ""
816$!
817$!    Time To EXIT.
818$!
819$     EXIT
820$!
821$!  End The Valid Arguement Check.
822$!
823$   ENDIF
824$!
825$! End The P2 Check.
826$!
827$ ENDIF
828$!
829$! Special Threads For OpenVMS v7.1 Or Later
830$!
831$! Written By:  Richard Levitte
832$!              richard@levitte.org
833$!
834$!
835$! Check To See If We Have A Option For P5.
836$!
837$ IF (P5.EQS."")
838$ THEN
839$!
840$!  Get The Version Of VMS We Are Using.
841$!
842$   ISSEVEN :=
843$   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
844$   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
845$!
846$!  Check To See If The VMS Version Is v7.1 Or Later.
847$!
848$   IF (TMP.GE.71)
849$   THEN
850$!
851$!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
852$!
853$     ISSEVEN := ,PTHREAD_USE_D4
854$!
855$!  End The VMS Version Check.
856$!
857$   ENDIF
858$!
859$! End The P5 Check.
860$!
861$ ENDIF
862$!
863$! Check To See If P3 Is Blank.
864$!
865$ IF (P3.EQS."")
866$ THEN
867$!
868$!  O.K., The User Didn't Specify A Compiler, Let's Try To
869$!  Find Out Which One To Use.
870$!
871$!  Check To See If We Have GNU C.
872$!
873$   IF (F$TRNLNM("GNU_CC").NES."")
874$   THEN
875$!
876$!    Looks Like GNUC, Set To Use GNUC.
877$!
878$     P3 = "GNUC"
879$!
880$!  Else...
881$!
882$   ELSE
883$!
884$!    Check To See If We Have VAXC Or DECC.
885$!
886$     IF (ARCH.EQS."AXP").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
887$     THEN 
888$!
889$!      Looks Like DECC, Set To Use DECC.
890$!
891$       P3 = "DECC"
892$!
893$!    Else...
894$!
895$     ELSE
896$!
897$!      Looks Like VAXC, Set To Use VAXC.
898$!
899$       P3 = "VAXC"
900$!
901$!    End The VAXC Compiler Check.
902$!
903$     ENDIF
904$!
905$!  End The DECC & VAXC Compiler Check.
906$!
907$   ENDIF
908$!
909$!  End The Compiler Check.
910$!
911$ ENDIF
912$!
913$! Check To See If We Have A Option For P4.
914$!
915$ IF (P4.EQS."")
916$ THEN
917$!
918$!  Find out what socket library we have available
919$!
920$   IF F$PARSE("SOCKETSHR:") .NES. ""
921$   THEN
922$!
923$!    We have SOCKETSHR, and it is my opinion that it's the best to use.
924$!
925$     P4 = "SOCKETSHR"
926$!
927$!    Tell the user
928$!
929$     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
930$!
931$!    Else, let's look for something else
932$!
933$   ELSE
934$!
935$!    Like UCX (the reason to do this before Multinet is that the UCX
936$!    emulation is easier to use...)
937$!
938$     IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
939	 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
940	 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
941$     THEN
942$!
943$!	Last resort: a UCX or UCX-compatible library
944$!
945$	P4 = "UCX"
946$!
947$!      Tell the user
948$!
949$       WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
950$!
951$!	That was all...
952$!
953$     ENDIF
954$   ENDIF
955$ ENDIF
956$!
957$! Set Up Initial CC Definitions, Possibly With User Ones
958$!
959$ CCDEFS = "TCPIP_TYPE_''P4',DSO_VMS"
960$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
961$ CCEXTRAFLAGS = ""
962$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
963$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX"
964$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
965	CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
966$!
967$!  Check To See If The User Entered A Valid Paramter.
968$!
969$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
970$ THEN
971$!
972$!    Check To See If The User Wanted DECC.
973$!
974$   IF (P3.EQS."DECC")
975$   THEN
976$!
977$!    Looks Like DECC, Set To Use DECC.
978$!
979$     COMPILER = "DECC"
980$!
981$!    Tell The User We Are Using DECC.
982$!
983$     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
984$!
985$!    Use DECC...
986$!
987$     CC = "CC"
988$     IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
989	 THEN CC = "CC/DECC"
990$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
991           "/NOLIST/PREFIX=ALL" + -
992	   "/INCLUDE=(SYS$DISK:[],SYS$DISK:[-],SYS$DISK:[.ENGINE.VENDOR_DEFNS],SYS$DISK:[.EVP])" + -
993	   CCEXTRAFLAGS
994$!
995$!    Define The Linker Options File Name.
996$!
997$     OPT_FILE = "SYS$DISK:[]VAX_DECC_OPTIONS.OPT"
998$!
999$!  End DECC Check.
1000$!
1001$   ENDIF
1002$!
1003$!  Check To See If We Are To Use VAXC.
1004$!
1005$   IF (P3.EQS."VAXC")
1006$   THEN
1007$!
1008$!    Looks Like VAXC, Set To Use VAXC.
1009$!
1010$     COMPILER = "VAXC"
1011$!
1012$!    Tell The User We Are Using VAX C.
1013$!
1014$     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
1015$!
1016$!    Compile Using VAXC.
1017$!
1018$     CC = "CC"
1019$     IF ARCH.EQS."AXP"
1020$     THEN
1021$	WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
1022$	EXIT
1023$     ENDIF
1024$     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
1025$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
1026	   "/INCLUDE=(SYS$DISK:[],SYS$DISK:[-],SYS$DISK:[.ENGINE.VENDOR_DEFNS])" + -
1027	   CCEXTRAFLAGS
1028$     CCDEFS = """VAXC""," + CCDEFS
1029$!
1030$!    Define <sys> As SYS$COMMON:[SYSLIB]
1031$!
1032$     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
1033$!
1034$!    Define The Linker Options File Name.
1035$!
1036$     OPT_FILE = "SYS$DISK:[]VAX_VAXC_OPTIONS.OPT"
1037$!
1038$!  End VAXC Check
1039$!
1040$   ENDIF
1041$!
1042$!  Check To See If We Are To Use GNU C.
1043$!
1044$   IF (P3.EQS."GNUC")
1045$   THEN
1046$!
1047$!    Looks Like GNUC, Set To Use GNUC.
1048$!
1049$     COMPILER = "GNUC"
1050$!
1051$!    Tell The User We Are Using GNUC.
1052$!
1053$     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
1054$!
1055$!    Use GNU C...
1056$!
1057$     CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
1058	   "/INCLUDE=(SYS$DISK:[],SYS$DISK:[-],SYS$DISK:[.ENGINE.VENDOR_DEFNS])" + -
1059	   CCEXTRAFLAGS
1060$!
1061$!    Define The Linker Options File Name.
1062$!
1063$     OPT_FILE = "SYS$DISK:[]VAX_GNUC_OPTIONS.OPT"
1064$!
1065$!  End The GNU C Check.
1066$!
1067$   ENDIF
1068$!
1069$!  Set up default defines
1070$!
1071$   CCDEFS = """FLAT_INC=1""," + CCDEFS
1072$!
1073$!  Finish up the definition of CC.
1074$!
1075$   IF COMPILER .EQS. "DECC"
1076$   THEN
1077$     IF CCDISABLEWARNINGS .EQS. ""
1078$     THEN
1079$       CC4DISABLEWARNINGS = "DOLLARID"
1080$     ELSE
1081$       CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
1082$       CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
1083$     ENDIF
1084$     CC4DISABLEWARNINGS = "/WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
1085$   ELSE
1086$     CCDISABLEWARNINGS = ""
1087$     CC4DISABLEWARNINGS = ""
1088$   ENDIF
1089$   CC3 = CC + "/DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS
1090$   CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
1091$   IF ARCH .EQS. "VAX" .AND. COMPILER .EQS. "DECC" .AND. P2 .NES. "DEBUG"
1092$   THEN
1093$     CC5 = CC + "/OPTIMIZE=NODISJOINT"
1094$   ELSE
1095$     CC5 = CC + "/NOOPTIMIZE"
1096$   ENDIF
1097$   CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS
1098$!
1099$!  Show user the result
1100$!
1101$   WRITE/SYMBOL SYS$OUTPUT "Main C Compiling Command: ",CC
1102$!
1103$!  Else The User Entered An Invalid Arguement.
1104$!
1105$ ELSE
1106$!
1107$!  Tell The User We Don't Know What They Want.
1108$!
1109$   WRITE SYS$OUTPUT ""
1110$   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
1111$   WRITE SYS$OUTPUT ""
1112$   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
1113$   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
1114$   WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
1115$   WRITE SYS$OUTPUT ""
1116$!
1117$!  Time To EXIT.
1118$!
1119$   EXIT
1120$!
1121$! End The Valid Arguement Check.
1122$!
1123$ ENDIF
1124$!
1125$! Build a MACRO command for the architecture at hand
1126$!
1127$ IF ARCH .EQS. "VAX" THEN MACRO = "MACRO/''DEBUGGER'"
1128$ IF ARCH .EQS. "AXP" THEN MACRO = "MACRO/MIGRATION/''DEBUGGER'/''MACRO_OPTIMIZE'"
1129$!
1130$!  Show user the result
1131$!
1132$   WRITE/SYMBOL SYS$OUTPUT "Main MACRO Compiling Command: ",MACRO
1133$!
1134$! Time to check the contents, and to make sure we get the correct library.
1135$!
1136$ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX" -
1137     .OR. P4.EQS."TCPIP" .OR. P4.EQS."NONE"
1138$ THEN
1139$!
1140$!  Check to see if SOCKETSHR was chosen
1141$!
1142$   IF P4.EQS."SOCKETSHR"
1143$   THEN
1144$!
1145$!    Set the library to use SOCKETSHR
1146$!
1147$     TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
1148$!
1149$!    Done with SOCKETSHR
1150$!
1151$   ENDIF
1152$!
1153$!  Check to see if MULTINET was chosen
1154$!
1155$   IF P4.EQS."MULTINET"
1156$   THEN
1157$!
1158$!    Set the library to use UCX emulation.
1159$!
1160$     P4 = "UCX"
1161$!
1162$!    Done with MULTINET
1163$!
1164$   ENDIF
1165$!
1166$!  Check to see if UCX was chosen
1167$!
1168$   IF P4.EQS."UCX"
1169$   THEN
1170$!
1171$!    Set the library to use UCX.
1172$!
1173$     TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT"
1174$     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
1175$     THEN
1176$       TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
1177$     ELSE
1178$       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
1179	  TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT"
1180$     ENDIF
1181$!
1182$!    Done with UCX
1183$!
1184$   ENDIF
1185$!
1186$!  Check to see if TCPIP was chosen
1187$!
1188$   IF P4.EQS."TCPIP"
1189$   THEN
1190$!
1191$!    Set the library to use TCPIP (post UCX).
1192$!
1193$     TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
1194$!
1195$!    Done with TCPIP
1196$!
1197$   ENDIF
1198$!
1199$!  Check to see if NONE was chosen
1200$!
1201$   IF P4.EQS."NONE"
1202$   THEN
1203$!
1204$!    Do not use a TCPIP library.
1205$!
1206$     TCPIP_LIB = ""
1207$!
1208$!    Done with TCPIP
1209$!
1210$   ENDIF
1211$!
1212$!  Print info
1213$!
1214$   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
1215$!
1216$!  Else The User Entered An Invalid Arguement.
1217$!
1218$ ELSE
1219$!
1220$!  Tell The User We Don't Know What They Want.
1221$!
1222$   WRITE SYS$OUTPUT ""
1223$   WRITE SYS$OUTPUT "The Option ",P4," Is Invalid.  The Valid Options Are:"
1224$   WRITE SYS$OUTPUT ""
1225$   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
1226$   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
1227$   WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP (post UCX) TCP/IP library."
1228$   WRITE SYS$OUTPUT ""
1229$!
1230$!  Time To EXIT.
1231$!
1232$   EXIT
1233$!
1234$!  Done with TCP/IP libraries
1235$!
1236$ ENDIF
1237$!
1238$! Check if the user wanted to compile just a subset of all the encryption
1239$! methods.
1240$!
1241$ IF P6 .NES. ""
1242$ THEN
1243$   ENCRYPT_TYPES = P6
1244$ ENDIF
1245$!
1246$!  Time To RETURN...
1247$!
1248$ RETURN
1249$!
1250$ INITIALISE:
1251$!
1252$! Save old value of the logical name OPENSSL
1253$!
1254$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
1255$!
1256$! Save directory information
1257$!
1258$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
1259$ __HERE = F$EDIT(__HERE,"UPCASE")
1260$ __TOP = __HERE - "CRYPTO]"
1261$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
1262$!
1263$! Set up the logical name OPENSSL to point at the include directory
1264$!
1265$ DEFINE OPENSSL/NOLOG '__INCLUDE'
1266$!
1267$! Done
1268$!
1269$ RETURN
1270$!
1271$ CLEANUP:
1272$!
1273$! Restore the logical name OPENSSL if it had a value
1274$!
1275$ IF __SAVE_OPENSSL .EQS. ""
1276$ THEN
1277$   DEASSIGN OPENSSL
1278$ ELSE
1279$   DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
1280$ ENDIF
1281$!
1282$! Done
1283$!
1284$ RETURN
1285