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