123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038 |
- $! BUILD_VMS.COM
- $!
- $! I've taken the original build_vms.com, supplied by Nico Baggus, if
- $! memory serves me correctly, and made some modifications.
- $!
- $! SSL support is controlled by logical names. If SSL$INCLUDE is
- $! defined, then it is assumed that HP's SSL product has been installed.
- $! If OPENSSL is defined, but SSL$INCLUDE is not, then OpenSSL will be
- $! used. If neither logical name is defined, then SSL support will not
- $! be compiled/linked in. Command-line options NOHPSSL and NOSSL can be
- $! specified to override the automatic SSL selection.
- $!
- $! Command-line Options:
- $!
- $! CLEAN Delete product files for this host architecture. (No
- $! build done.)
- $! CLEAN_ALL Delete product files for all host architectures. (No
- $! build done.)
- $!
- $! 64 Compile with 64-bit pointers.
- $! Note, you must match the pointer size that the OpenSSL
- $! shared image expects.
- $! Currently curl is not building properly with 64-bit pointers
- $! on VMS because it is trying to cast pointers to 32-bit
- $! integers and some OpenVMS library routines called by curl
- $! do not yet support 64-bit pointers.
- $! CCQUAL=x Add "x" to the C compiler qualifiers.
- $! Default qualifiers are:
- $! /standard=relaxed
- $! /names=(as_is, shortened)
- $! /repository=[.'arch']
- $! /nested_include_directory=none
- $! /define=(_LARGEFILE=1,_USE_STD_STAT=1) (non-vax)
- $! /float=ieee/ieee_mode=denorm_results (non-vax)
- $! DEBUG Compile debug and nooptimize
- $! Alpha/IA64 always compiles /debug.
- $! Always link a debug image.
- $! NOIEEE Do not use IEEE floating point. (Alpha/I64)
- $! VAX must always use DFLOAT
- $! NOLARGE Disable large-file support if large file support available.
- $! (Non-VAX, VMS >= V7.2.)
- $! NOLDAP Disable LDAP support if LDAP is available.
- $! NOKERBEROS Disable Kerberos support if Kerberos is available.
- $! LIST Create C compiler listings and linker maps.
- $! /list/show=(expan,includ)/machine
- $! FULLLIST Full detailed listing.
- $! /list/show=(all, nomessages)/machine
- $! NOHPSSL Don't use HP SSL, even if available.
- $! Note, you must match the pointer size that the OpenSSL
- $! shared image expects. This procedure will select the
- $! correct HP OpenSSL image.
- $! NOSSL Don't use any SSL, even if available.
- $! OSSLOLB Use OpenSSL object libraries (.OLB), even if shared
- $! images (.EXE) are available.
- $! NOZLIB Don't use GNV$ZLIB shared image even if available.
- $! REALCLEAN Delete product files for all host architectures. (No
- $! build done.) Alias for CLEAN_ALL
- $!
- $! DCL Symbols:
- $!
- $! CURL_CCDEFS="c_macro_1=value1 [, c_macro_2=value2 [...]]"
- $! Compile with these additional C macros defined.
- $!
- $! Revisions:
- $!
- $! 2-DEC-2003, MSK, the "original" version.
- $! It works for me. Your mileage may vary.
- $! 13-JAN-2004, MSK, moved this procedure to the [.packages.vms] directory
- $! and updated it to do hardware dependent builds.
- $! 29-JAN-2004, MSK, moved logical defines into defines.com
- $! 6-FEB-2004, MSK, put in various SSL support bits
- $! 9-MAR-2004, MSK, the config-vms.h* files are now copied to the lib and
- $! src directories as curl_config.h.
- $! 15-MAR-2004, MSK, All of the curlmsg*.* files have also been moved to
- $! this build directory. They will be copied to the src
- $! directory before build. The .msg file will be compiled
- $! to get the .obj for messages, but the .h and .sdl files
- $! are not automatically created since they partly rely on
- $! the freeware SDL tool.
- $! 8-FEB-2005, MSK, merged the two config-vms.h* files into one that uses
- $! USE_SSLEAY to define if the target has SSL support built
- $! in. Changed the cc/define parameter accordingly.
- $! 11-FEB-2005, MSK, If [--.LIB]AMIGAOS.C and NWLIB.C are there, rename them
- $! 23-MAR-2005, MSK, relocated cc_qual define so that DEBUG option would work
- $! 25-APR-2007, STL, allow compilation in 64-bit mode.
- $! 13-DEC-2009. SMS, Changed to skip unwanted source files without
- $! renaming the original files.
- $! Eliminated needless, persistent logical names.
- $! Added CURL_CCDEFS DCL symbol for user-specified C
- $! macro definitions.
- $! Added CLEAN and CLEAN_ALL options.
- $! Added CCQUAL option for user-specified C compiler
- $! qualifiers.
- $! Added IEEE option for IEEE floating point (Alpha).
- $! Added LARGE option for large-file support.
- $! Added OSSLOLB option, and support for OpenSSL
- $! shared images.
- $! Changed to put listing and map files into lisdir:.
- $! Changed to avoid case confusion on ODS5 disks.
- $! Added more default dev:[dir] save+restore.
- $! Moved remaining "defines.com" code (back) into
- $! here, eliminating the hard-coded OpenSSL nonsense.
- $! Changed to use F$GETSYI("ARCH_NAME") (or
- $! equivalent) to name architecture-specific product
- $! file destination directory, and to create the
- $! directory if needed (obviating inclusion of these
- $! directories and dummy files in the distribution
- $! kit).
- $! Changed the "compile" subroutine to break the CC
- $! command across multiple lines to avoid DCL
- $! line-too-long problems.
- $! Changed "vo_c" messages to show the CC qualifiers
- $! once, not with every compile command.
- $! 01-Jan-2013 J. Malmberg
- $! VMS build procedures need to be able to work with
- $! the default set to a search list, with created or
- $! modified files only in the first member of the search
- $! list.
- $! Whitespace change to be more compatible with current
- $! practices.
- $! One pass option parsing instead of loop.
- $! GNV ZLIB shared image support.
- $! KERBEROS support where available.
- $! LDAP default to on where available
- $! LARGEFILE default to on where available
- $! IEEE float default to on where available.
- $! Generate the curl_config.h file from system inspection.
- $! Linker finds ldap with out option file.
- $! 13-Mar-2013, Tom Grace
- $! Added missing slash in cc_full_list.
- $! Removed unwanted extra quotes inside symbol tool_main
- $! for non-VAX architectures that triggered link failure.
- $! Replaced curl_sys_inc with sys_inc.
- $! 19-Mar-2013, John Malmberg
- $! symbol tool_main needs to be quoted when parse style is
- $! set to extended in versions of VMS greater than 7.3-1.
- $! Remove curlbuild.h generation as it should be pre-built
- $! in the curl release or daily tarball.
- $! 12-Jul-2013, John Malmberg
- $! Adjust to find and use ZLIB from the Jean-Francois
- $! Pieronne shared image and newer GNV ZLIB kit that
- $! is upward compatible with Jean-Francois's kit.
- $! Remove tabs from file.
- $! Fixed DCL formatting as follows:
- $! * Labels have no space after leading $.
- $! * 1 space after $ for first level.
- $! * 3 spaces after $ for second level. Line start + 4.
- $! * 7 spaces after $ for third level. Line start + 8.
- $! * Each level after that indents 4 characters.
- $! * then/else/endif same indentation as if statement.
- $! 17-Nov-2014, Michael Steve
- $! Modified build to handle new location of the VTLS lib
- $! source within zip archive. Not a pretty fix.
- $!
- $!===========================================================================
- $!
- $!
- $! Save the original default dev:[dir], and arrange for its restoration
- $! at exit.
- $!------------------------------------------------------------------------
- $ curl = ""
- $ orig_def = f$environment("DEFAULT")
- $ on error then goto Common_Exit
- $ on control_y then goto Common_Exit
- $!
- $ ctrl_y = 1556
- $ proc = f$environment("PROCEDURE")
- $ proc_fid = f$file_attributes(proc, "FID")
- $ proc_dev = f$parse(proc, , , "DEVICE")
- $ proc_dir = f$parse(proc, , , "DIRECTORY")
- $ proc_name = f$parse(proc, , , "NAME")
- $ proc_type = f$parse(proc, , , "TYPE")
- $ proc_dev_dir = proc_dev + proc_dir
- $!
- $! Have to manually parse the device for a search list.
- $! Can not use the f$parse() as it will return the first name
- $! in the search list.
- $!
- $ orig_def_dev = f$element(0, ":", orig_def) + ":"
- $ if orig_def_dev .eqs. "::" then orig_def_dev = "sys$disk:"
- $ test_proc = orig_def_dev + proc_dir + proc_name + proc_type
- $!
- $! If we can find this file using the default directory
- $! then we know that we should use the original device from the
- $! default directory which could be a search list.
- $!
- $ test_proc_fid = f$file_attributes(test_proc, "FID")
- $!
- $ if (test_proc_fid .eq. proc_fid)
- $ then
- $ proc_dev_dir = orig_def_dev + proc_dir
- $ endif
- $!
- $!
- $! Verbose output message stuff. Define symbol to "write sys$output" or "!".
- $! vo_c - verbose output for compile
- $! vo_l - link
- $! vo_o - object check
- $!
- $ vo_c := "write sys$output"
- $ vo_l := "write sys$output"
- $ vo_o := "!"
- $!
- $! Determine the main distribution directory ("[--]") in an
- $! ODS5-tolerant (case-insensitive) way. (We do assume that the only
- $! "]" or ">" is the one at the end.)
- $!
- $! Some non-US VMS installations report ">" for the directory delimiter
- $! so do not assume that it is "]".
- $!
- $ orig_def_len = f$length(orig_def)
- $ delim = f$extract(orig_def_len - 1, 1, orig_def)
- $!
- $ set default 'proc_dev_dir'
- $ set default [--]
- $ base_dev_dir = f$environment("default")
- $ top_dev_dir = base_dev_dir - delim
- $!
- $!
- $!
- $! Define the architecture-specific product file destination directory
- $! name(s).
- $!
- $ parse_style = "TRADITIONAL"
- $ if (f$getsyi("HW_MODEL") .lt. 1024)
- $ then
- $ arch_name = "VAX"
- $ else
- $ arch_name = ""
- $ arch_name = arch_name + f$edit(f$getsyi("ARCH_NAME"), "UPCASE")
- $ if (arch_name .eqs. "") then arch_name = "UNK"
- $!
- $! Extended parsing option starts with VMS 7.3-1.
- $! There is no 7.4, so that simplifies the parse a bit.
- $!
- $ node_swvers = f$getsyi("node_swvers")
- $ version_patch = f$extract(1, f$length(node_swvers), node_swvers)
- $ maj_ver = f$element(0, ".", version_patch)
- $ min_ver_patch = f$element(1, ".", version_patch)
- $ min_ver = f$element(0, "-", min_ver_patch)
- $ patch = f$element(1, "-", min_ver_patch)
- $ if patch .eqs. "-" then patch = ""
- $ parse_x = 0
- $ if maj_ver .ges. "8"
- $ then
- $ parse_x = 1
- $ else
- $ if maj_ver .eqs. "7" .and. min_ver .ges. "3" .and. patch .nes. ""
- $ then
- $ parse_x = 1
- $ endif
- $ endif
- $ if parse_x
- $ then
- $ parse_style = f$getjpi("", "parse_style_perm")
- $ endif
- $ endif
- $!
- $ exedir = proc_dev_dir - delim + ".''arch_name'" + delim
- $ lisdir = exedir
- $ objdir = exedir
- $!
- $! When building on a search list, need to do a create to make sure that
- $! the output directory exists, since the clean procedure tries to delete
- $! it.
- $ create/dir 'exedir'/prot=o:rwed
- $!
- $! Interpret command-line options.
- $!
- $ hpssl = 0
- $ ldap = 1
- $ list = 0
- $ full_list = 0
- $ nohpssl = 0
- $ nossl = 0
- $ openssl = 0
- $ osslolb = 0
- $ nozlib = 0
- $ nokerberos = 0
- $ cc_names = "/names=(shortened, as_is)/repository='exedir'
- $ cc_defs = "HAVE_CONFIG_H=1"
- $ cc_list = "/list='objdir'/show=(expan, includ)/machine
- $ cc_full_list = "/list='objdir'/show=(all, nomessages)/machine
- $ link_qual = ""
- $ if arch_name .eqs. "VAX"
- $ then
- $ cc_debug = "/nodebug/optimize"
- $ !cc_defs = cc_defs + ""
- $ cc_float = ""
- $ cc_large = ""
- $ else
- $ cc_debug = "/debug/optimize"
- $ cc_defs = cc_defs + ",_USE_STD_STAT"
- $ cc_float = "/float=ieee/ieee_mode=denorm_results"
- $ cc_large = ",_LARGEFILE"
- $ endif
- $ cc_qual1 = ""
- $ cc_qual2 = ""
- $ if (f$type(CURL_CCDEFS) .nes. "")
- $ then
- $ CURL_CCDEFS = f$edit(CURL_CCDEFS, "TRIM")
- $ cc_defs = cc_defs + ", " + CURL_CCDEFS
- $ endif
- $ msg_qual = "/object = ''objdir'"
- $ ssl_opt = ""
- $!
- $! Allow arguments to be grouped together with comma or separated by spaces
- $! Do no know if we will need more than 8.
- $ args = "," + p1 + "," + p2 + "," + p3 + "," + p4 + ","
- $ args = args + p5 + "," + p6 + "," + p7 + "," + p8 + ","
- $!
- $! Provide lower case version to simplify parsing.
- $ args_lower = f$edit(args, "LOWERCASE,COLLAPSE")
- $!
- $ args_len = f$length(args)
- $ args_lower_len = f$length(args_lower)
- $!
- $ clean = 0
- $ if f$locate(",clean,", args_lower) .lt. args_lower_len
- $ then
- $ clean = 1
- $ endif
- $ clean_all = 0
- $ if f$locate(",clean_all,", args_lower) .lt. args_lower_len
- $ then
- $ clean = 1
- $ clean_all = 1
- $ endif
- $ if f$locate(",realclean,", args_lower) .lt. args_lower_len
- $ then
- $ clean = 1
- $ clean_all = 1
- $ endif
- $!
- $ if clean .ne. 0
- $ then
- $ prods = "''exedir'*.*;*"
- $ if (f$search(prods) .nes. "") then delete /log 'prods'
- $ prods = proc_dev_dir + arch_name + ".DIR;1"
- $ if (f$search(prods) .nes. "") then set prot=o:rwed 'prods'
- $ if (f$search(prods) .nes. "") then delete /log 'prods'
- $ file = "[]config_vms.h"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[]config.h"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[]curl-config."
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[]libcurl.pc"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[.lib.cxx_repository]cxx$demangler_db."
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[.src.cxx_repository]cxx$demangler_db."
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[.lib]config_vms.h"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[...]curl_crtl_init"
- $ if f$search("''file'.lis") .nes. "" then delete/log 'file'.lis;*
- $ if f$search("''file'.obj") .nes. "" then delete/log 'file'.obj;*
- $ file = "[...]gnv$curlmsg"
- $ if f$search("''file'.lis") .nes. "" then delete/log 'file'.lis;*
- $ if f$search("''file'.obj") .nes. "" then delete/log 'file'.obj;*
- $ if f$search("''file'.exe") .nes. "" then delete/log 'file'.exe;*
- $ file = "[...]curlmsg"
- $ if f$search("''file'.lis") .nes. "" then delete/log 'file'.lis;*
- $ if f$search("''file'.obj") .nes. "" then delete/log 'file'.obj;*
- $ if f$search("''file'.exe") .nes. "" then delete/log 'file'.exe;*
- $ file = "[...]report_openssl_version"
- $ if f$search("''file'.lis") .nes. "" then delete/log 'file'.lis;*
- $ if f$search("''file'.obj") .nes. "" then delete/log 'file'.obj;*
- $ if f$search("''file'.exe") .nes. "" then delete/log 'file'.exe;*
- $ file = "[...]hp_ssl_release_info.txt"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[...]gnv_libcurl_xfer.mar_exact"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[...]gnv_libcurl_xfer"
- $ if f$search("''file'.lis") .nes. "" then delete/log 'file'.lis;*
- $ if f$search("''file'.obj") .nes. "" then delete/log 'file'.obj;*
- $ if f$search("''file'.opt") .nes. "" then delete/log 'file'.opt;*
- $ file = "[...]curl-*_original_src.bck"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[...]curl_d-*_original_src.bck"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[...]curl-*_vms_src.bck"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[...]curl_d-*_vms_src.bck"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[...]curl-*.release_notes"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[...]curl_d-*.release_notes"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[...]*curl*.pcsi$desc"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[...]*curl_d*.pcsi$desc"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[...]*curl*.pcsi$text"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $ file = "[...]*curl_d*.pcsi$text"
- $ if f$search(file) .nes. "" then delete/log 'file';*
- $!
- $ if clean_all .eq. 0 then goto Common_Exit
- $ endif
- $!
- $!
- $ if clean_all .ne. 0
- $ then
- $ file = "[...]gnv$libcurl"
- $ if f$search("''file'.exe") .nes. "" then delete/log 'file'.exe;*
- $ if f$search("''file'.map") .nes. "" then delete/log 'file'.map;*
- $ if f$search("''file'.dsf") .nes. "" then delete/log 'file'.dsf;*
- $ file = "[.src]curl"
- $ if f$search("''file'.exe") .nes. "" then delete/log 'file'.exe;*
- $ if f$search("''file'.map") .nes. "" then delete/log 'file'.map;*
- $ if f$search("''file'.dsf") .nes. "" then delete/log 'file'.dsf;*
- $ prods = proc_dev_dir - delim + ".ALPHA" + delim + "*.*;*"
- $ if (f$search(prods) .nes. "") then delete /log 'prods'
- $ prods = proc_dev_dir + "ALPHA" + ".DIR;1"
- $ if (f$search(prods) .nes. "") then set prot=o:rwed 'prods'
- $ if (f$search(prods) .nes. "") then delete /log 'prods'
- $ prods = proc_dev_dir - delim + ".IA64" + delim + "*.*;*"
- $ if (f$search(prods) .nes. "") then delete /log 'prods'
- $ prods = proc_dev_dir + "IA64" + ".DIR;1"
- $ if (f$search(prods) .nes. "") then set prot=o:rwed 'prods'
- $ if (f$search(prods) .nes. "") then delete /log 'prods'
- $ prods = proc_dev_dir - delim + ".VAX" + delim + "*.*;*"
- $ if (f$search(prods) .nes. "") then delete /log 'prods'
- $ prods = proc_dev_dir + "VAX"+ ".DIR;1"
- $ if (f$search(prods) .nes. "") then set prot=o:rwed 'prods'
- $ if (f$search(prods) .nes. "") then delete /log 'prods'
- $ file = "[...]macro32_exactcase"
- $ if f$search("''file'.exe") .nes. "" then delete/log 'file'.exe;*
- $ if f$search("''file'.jnl") .nes. "" then delete/log 'file'.jnl;*
- $ goto Common_Exit
- $ endif
- $!
- $ build_64 = 0
- $ if f$locate(",64,", args_lower) .lt. args_lower_len
- $ then
- $ cc_qual1 = cc_qual1 + " /POINTER = 64"
- $ build_64 = 1
- $ endif
- $!
- $ args_loc = f$locate(",ccqual=", args_lower)
- $ if args_loc .lt. args_lower_len
- $ then
- $ arg = f$extract(args_loc + 1, args_lower_len, args_lower)
- $ arg_val = f$element(0, ",", arg)
- $ cc_qual2 = f$element(1, "=", arg_val);
- $ endif
- $!
- $! On Alpha/IA64 no size penalty for compiling /debug/optimize
- $! by default.
- $ if f$locate(",debug,", args_lower) .lt. args_lower_len
- $ then
- $ cc_debug = "/debug/nooptimize"
- $ endif
- $!
- $! We normally want IEEE float if it is available. Programs that are
- $! calling libcurl will typically prefer IEEE behavior, unless on the
- $! VAX where we have no choice.
- $!
- $ if f$locate(",noieee,", args_lower) .lt. args_lower_len
- $ then
- $ cc_float = ""
- $ endif
- $!
- $! Normally we want large file if it is available.
- $ if f$locate(",nolarge,", args_lower) .lt. args_lower_len
- $ then
- $ write sys$output "Handling of large files disabled."
- $ cc_large = ""
- $ endif
- $ if cc_large .nes. ""
- $ then
- $ cc_defs = cc_defs + cc_large
- $ endif
- $!
- $ if f$locate(",noldap,", args_lower) .lt. args_lower_len
- $ then
- $ ldap = 0
- $ endif
- $!
- $ if f$locate(",list,", args_lower) .lt. args_lower_len
- $ then
- $ list = 1
- $ endif
- $ if f$locate(",fulllist,", args_lower) .lt. args_lower_len
- $ then
- $ list = 1
- $ full_list = 1
- $ endif
- $!
- $ if f$locate(",nohpssl,", args_lower) .lt. args_lower_len
- $ then
- $ nohpssl = 1
- $ endif
- $!
- $ if f$locate(",nossl,", args_lower) .lt. args_lower_len
- $ then
- $ nossl = 1
- $ endif
- $!
- $ if f$locate(",osslolb,", args_lower) .lt. args_lower_len
- $ then
- $ osslolb = 1
- $ endif
- $!
- $ if f$locate(",nozlib,", args_lower) .lt. args_lower_len
- $ then
- $ nozlib = 1
- $ endif
- $!
- $ if f$locate(",nokerberos,", args_lower) .lt. args_lower_len
- $ then
- $ nokerberos = 1
- $ endif
- $!
- $!
- $! CC /LIST, LINK /MAP, and MESSAGE /LIST are defaults in batch mode,
- $! so be explicit when they're not desired.
- $!
- $
- $ if list .eq. 0
- $ then
- $ cc_qual1 = cc_qual1 + "/nolist"
- $ msg_qual = msg_qual + "/nolist"
- $ else
- $ msg_qual = msg_qual + "/list='objdir'"
- $ if (full_list .ne. 0)
- $ then
- $ cc_qual1 = cc_qual1 + cc_full_list
- $ else
- $ cc_qual1 = cc_qual1 + cc_list
- $ endif
- $ endif
- $ cc_qual1 = cc_qual1 + cc_names + cc_float + cc_debug
- $!
- $! Create product directory, if needed.
- $!
- $ if (f$search(proc_dev_dir + arch_name + ".DIR;1") .eqs. "")
- $ then
- $ create /directory 'exedir'
- $ endif
- $!
- $! Detect available (but not prohibited) SSL software.
- $!
- $ libsslshr_line = ""
- $ libcryptoshr_line = ""
- $ if (.not. nossl)
- $ then
- $ if (f$trnlnm("OPENSSL") .nes. "")
- $ then
- $! cc_defs = cc_defs + ", USE_OPENSSL=1"
- $ if ((f$trnlnm("SSL$INCLUDE") .nes. "") .and. (.not. nohpssl))
- $ then
- $! Use HP SSL.
- $ hpssl = 1
- $!
- $! Older SSL only has lib*_shr32 images
- $!-----------------------------------------------
- $ libsslshr = "sys$share:ssl$libssl_shr"
- $ if (f$search("''libsslshr'.exe") .eqs. "") .or. (.not. build_64)
- $ then
- $ libsslshr = libsslshr + "32"
- $ endif
- $ libcryptoshr = "sys$share:ssl$libcrypto_shr"
- $ if (f$search("''libcryptoshr'.exe") .eqs. "") .or. (.not. build_64)
- $ then
- $ libcryptoshr = libcryptoshr + "32"
- $ endif
- $ libsslshr_line = "''libsslshr'.exe/share"
- $ libcryptoshr_line = "''libcryptoshr'.exe/share"
- $ else
- $! Use OpenSSL. Assume object libraries, unless shared images
- $! are found (and not prohibited).
- $! TODO: We do not know how to automatically choose based on the
- $! pointer size.
- $!
- $ openssl = 1
- $ libsslshr_line = "ssllib:libssl.olb/lib"
- $ libcryptoshr_line = "ssllib:libcrypto.olb/lib"
- $ ssl_opt = ", ssllib:libssl.olb /library" + -
- ", ssllib:libcrypto.olb /library"
- $ if (osslolb .eq. 0)
- $ then
- if ((f$search("ssllib:ssl_libcrypto.exe") .nes. "") .and. -
- (f$search("ssllib:ssl_libssl.exe") .nes. ""))
- $ then
- $! OpenSSL shared images with "SSL_xxx.EXE names.
- $ openssl = 2
- $ libsslshr_line = "ssllib:ssl_libssl_shr.exe/share"
- $ libcryptoshr_line = "ssllib:ssl_libcrypto_shr.exe/share"
- $ else
- $ if ((f$search("ssllib:libcrypto.exe") .nes. "") .and. -
- (f$search("ssllib:libssl.exe") .nes. ""))
- $ then
- $! OpenSSL shared images with "xxx.EXE names.
- $ openssl = 3
- $ libsslshr_line = "ssllib:libssl_shr.exe/share"
- $ libcryptoshr_line = "ssllib:libcrypto_shr.exe/share"
- $ endif
- $ endif
- $ endif
- $ endif
- $ endif
- $ endif
- $!
- $! LDAP.
- $!
- $ if f$search("SYS$SHARE:LDAP$SHR.EXE") .eqs. ""
- $ then
- $ ldap = 0
- $ endif
- $ if (ldap .eq. 0)
- $ then
- $! cc_defs = cc_defs + ", CURL_DISABLE_LDAP=1"
- $ else
- $ 'vo_c' "%CURL-I-BLDHPLDAP, building with HP LDAP support"
- $ endif
- $!
- $! KERBEROS
- $ gssrtlshr_line = ""
- $ try_shr = "sys$share:gss$rtl"
- $ if f$search("''try_shr'.exe") .eqs. ""
- $ then
- $ nokerberos = 1
- $ endif
- $ curl_sys_krbinc = ""
- $ if nokerberos .eq. 0
- $ then
- $ 'vo_c' "%CURL-I-BLDHPKERBEROS, building with HP KERBEROS support"
- $ curl_sys_krbinc = "sys$sysroot:[kerberos.include]"
- $ gssrtlshr_line = "''try_shr'/share"
- $ endif
- $!
- $!
- $! LIBZ
- $ libzshr_line = ""
- $ try_shr = "gnv$libzshr"
- $ if build_64
- $ then
- $! First look for 64-bit
- $ if f$search("''try_shr'64") .eqs. ""
- $ then
- $! Second look for the J.F. Pieronne 64-bit shared image
- $ try_shr = "LIBZ_SHR64"
- $ if f$search(try_shr) .eqs. "" then nozlib = 1
- $ endif
- $ else
- $! First look for 32-bit
- $ if f$search("''try_shr'32") .eqs. ""
- $ then
- $! Second look for old 32-bit image
- $ if f$search(try_shr) .eqs. ""
- $ then
- $! Third look for the J.F. Pieronne 32-bit shared image
- $ try_shr = "LIBZ_SHR32"
- $ if f$search(try_shr) .eqs. "" then nozlib = 1
- $ endif
- $ endif
- $ endif
- $ if f$search(try_shr) .eqs. ""
- $ then
- $ nozlib = 1
- $ endif
- $ curl_sys_zlibinc = ""
- $ if nozlib .eq. 0
- $ then
- $ libzshr_line = "''try_shr'/share"
- $ if f$locate("LIBZ", try_shr) .eq. 0
- $ then
- $ 'vo_c' "%CURL-I-BLDJFPLIBZ, building with JFP LIBZ support"
- $ curl_sys_zlibinc = "LIBZ:"
- $ else
- $ 'vo_c' "%CURL-I-BLDGNVLIBZ, building with GNV LIBZ support"
- $ curl_sys_zlibinc = "GNV$ZLIB_INCLUDE:"
- $ endif
- $ endif
- $!
- $! Form CC qualifiers.
- $!
- $ cc_defs = "/define = (''cc_defs')"
- $ cc_qual2 = cc_qual2 + " /object = ''objdir'"
- $ cc_qual2 = cc_qual2 + "/nested_include_directory=none"
- $!
- $ 'vo_c' "CC opts:", -
- " ''cc_defs'", -
- " ''cc_qual1'", -
- " ''cc_qual2'"
- $!
- $! Inform the victim of our plans.
- $!
- $ if (hpssl)
- $ then
- $ 'vo_c' "%CURL-I-BLDHPSSL, building with HP SSL support"
- $ else
- $ if (openssl .ne. 0)
- $ then
- $ if (openssl .eq. 1)
- $ then
- $ 'vo_c' -
- "%CURL-I-BLDOSSL_OLB, building with OpenSSL (object library) support"
- $ else
- $ 'vo_c' -
- "%CURL-I-BLDOSSL_EXE, building with OpenSSL (shared image) support"
- $ endif
- $ else
- $ 'vo_c' "%CURL-I-BLDNOSSL, building with NO SSL support"
- $ endif
- $ endif
- $!
- $! Announce destination and SSL directories.
- $!
- $ 'vo_c' " OBJDIR = ''objdir'"
- $ 'vo_c' " EXEDIR = ''exedir'"
- $!
- $ if (openssl .ne. 0)
- $ then
- $ ssllib = f$trnlnm("ssllib")
- $ if (ssllib .eqs. "")
- $ then
- $ ssllib = "(undefined)"
- $ endif
- $ 'vo_c' " SSLLIB = ''ssllib'"
- $!
- $! TODO: Why are we translating the logical name?
- $! The logical aname used to find the shared image should just be used
- $! as translating it could result in the wrong location at run time.
- $ if (openssl .eq. 1)
- $ then
- $ ossl_lib1 = f$trnlnm("ssllib")+ "LIBSSL.OLB"
- $ ossl_lib2 = f$trnlnm("ssllib")+ "LIBCRYPTO.OLB"
- $ msg = "object libraries"
- $ else
- $ if (openssl .eq. 2)
- $ then
- $ ossl_lib1 = f$trnlnm("ssllib")+ "SSL_LIBSSL.EXE"
- $ ossl_lib2 = f$trnlnm("ssllib")+ "SSL_LIBCRYPTO.EXE"
- $ else
- $ ossl_lib1 = f$trnlnm("ssllib")+ "LIBSSL.EXE"
- $ ossl_lib2 = f$trnlnm("ssllib")+ "LIBCRYPTO.EXE"
- $ endif
- $ msg = "shared images"
- $ endif
- $ if ((f$search(ossl_lib1) .eqs. "") .or. -
- (f$search(ossl_lib2) .eqs. ""))
- $ then
- $ write sys$output "Can't find OpenSSL ''msg':"
- $ write sys$output " ''ossl_lib1'"
- $ write sys$output " ''ossl_lib2'"
- $ goto Common_Exit
- $ endif
- $ endif
- $!
- $! Define the "curl" (process) logical name for "#include <curl/xxx.h>".
- $!
- $ curl = f$trnlnm("curl", "LNM$PROCESS")
- $ if (curl .nes. "")
- $ then
- $ write sys$output ""
- $ write sys$output -
- "Process logical name ""curl"" is already defined, but this procedure"
- $ write sys$output -
- "would override that definition. Use a command like"
- $ write sys$output -
- " deassign /process curl"
- $ write sys$output -
- "to cancel that logical name definition, and then and re-run this procedure."
- $ write sys$output ""
- $ goto Common_Exit
- $ endif
- $ curl_logical = top_dev_dir + ".include.curl" + delim
- $ curl_sys_inc2 = curl_logical
- $ curl_sys_inc1 = top_dev_dir + ".include" + delim
- $! define curl 'top_dev_dir'.include.curl'delim'
- $!
- $! Generate config file into the product directory.
- $!
- $! call MoveIfDiff [.lib]config-vms.h 'objdir'curl_config.h
- $!
- $ conf_params = ""
- $ if nossl .ne. 0 then conf_params = conf_params + ",nossl"
- $ if nohpssl .ne. 0 then conf_params = conf_params + ",nohpssl,"
- $ if ldap .eq. 0 then conf_params = conf_params + ",noldap,"
- $ if nozlib .ne. 0 then conf_params = conf_params + ",nozlib,"
- $ if nokerberos .ne. 0 then conf_params = conf_params + ",nokerberos"
- $ conf_params = conf_params - ","
- $!
- $!
- $ new_conf = f$search("''objdir'curl_config.h")
- $ if new_conf .eqs. ""
- $ then
- $! set ver
- $ write sys$output "Generating curl custom config_vms.h"
- $ @'proc_dev_dir'generate_config_vms_h_curl.com ''conf_params'
- $!
- $ write sys$output "Generating curl_config.h"
- $ conf_in = f$search("[.lib]curl_config*.*in")
- $ if conf_in .eqs. ""
- $ then
- $ write sys$output "Can not find [.lib]curl_config*.*in file!"
- $ goto common_exit
- $ endif
- $ @'proc_dev_dir'config_h.com 'conf_in'
- $ copy config.h 'objdir'curl_config.h
- $ delete config.h;
- $! set nover
- $ endif
- $!
- $!
- $ on control_y then goto Common_Exit
- $!
- $ set default 'proc_dev_dir'
- $ sys_inc = "''curl_sys_inc1', ''curl_sys_inc2', ''curl_logical'"
- $ if curl_sys_krbinc .nes. ""
- $ then
- $ sys_inc = sys_inc + ",''curl_sys_krbinc'"
- $ endif
- $ if curl_sys_zlibinc .nes. ""
- $ then
- $ sys_inc = sys_inc + ",''curl_sys_zlibinc'"
- $ endif
- $! Build LIB
- $ cc_include = "/include=([-.lib],[-.lib.vtls],[-.packages.vms]"
- $ cc_include = cc_include + ",[-.packages.vms.''arch_name'])"
- $ call build "[--.lib]" "*.c" "''objdir'CURLLIB.OLB" "amigaos, nwlib, nwos"
- $ if ($status .eq. ctrl_y) then goto Common_Exit
- $! Build VTLS
- $ cc_include = "/include=([--.lib.vtls],[--.lib],[--.src]"
- $ cc_include = cc_include + ",[--.packages.vms],[--.packages.vms.''arch_name'])"
- $ call build "[--.lib.vtls]" "*.c" "''objdir'CURLLIB.OLB" "amigaos, nwlib, nwos"
- $! Build SRC
- $ cc_include = "/include=([-.src],[-.lib],[-.lib.vtls]"
- $ cc_include = cc_include + ",[-.packages.vms],[-.packages.vms.''arch_name'])"
- $ call build "[--.src]" "*.c" "''objdir'CURLSRC.OLB"
- $ if ($status .eq. ctrl_y) then goto Common_Exit
- $! Build MSG
- $ call build "[]" "*.msg" "''objdir'CURLSRC.OLB"
- $ if ($status .eq. ctrl_y) then goto Common_Exit
- $!
- $!
- $ if (openssl .ne. 0)
- $ then
- $ if (openssl .eq. 1)
- $ then
- $ 'vo_l' "%CURL-I-LINK_OSSL, linking with OpenSSL (object library)"
- $ else
- $ 'vo_l' "%CURL-I-LINK_HPSSL, linking with OpenSSL (shared image)"
- $ endif
- $ else
- $ if (hpssl)
- $ then
- $ 'vo_l' "%CURL-I-LINK_HPSSL, linking with HP SSL"
- $ else
- $ 'vo_l' "%CURL-I-LINK_NOSSL, linking with NO SSL support"
- $ endif
- $ endif
- $!
- $!
- $! GNV helper files for building the test curl binary.
- $!-----------------------------------------------
- $ create 'exedir'gnv$curl.opt
- $ open/append opt 'exedir'gnv$curl.opt
- $ if libzshr_line .nes. "" then write opt libzshr_line
- $ if gssrtlshr_line .nes. "" then write opt gssrtlshr_line
- $ if libcryptoshr_line .nes. "" then write opt libcryptoshr_line
- $ if libsslshr_line .nes. "" then write opt libsslshr_line
- $ close opt
- $!
- $!
- $! Create the libcurl
- $!------------------------------------------------------
- $ create 'exedir'gnv_libcurl_linker.opt
- $ open/append opt 'exedir'gnv_libcurl_linker.opt
- $ if libzshr_line .nes. "" then write opt libzshr_line
- $ if gssrtlshr_line .nes. "" then write opt gssrtlshr_line
- $ if libcryptoshr_line .nes. "" then write opt libcryptoshr_line
- $ if libsslshr_line .nes. "" then write opt libsslshr_line
- $ close opt
- $!
- $!
- $! If we are not on VAX, then we want the debug symbol table in
- $! a separate file.
- $! VAX needs the tool_main unquoted in uppercase,
- $! Alpha and IA64 need tool_main quoted in exact case when parse style is
- $! extended.
- $ link_dsf1 = ""
- $ link_dsf2 = ""
- $ tool_main = "tool_main"
- $ if arch_name .nes. "VAX"
- $ then
- $ if parse_style .eqs. "EXTENDED"
- $ then
- $ tool_main = """tool_main"""
- $ endif
- $ link_dsf1 = "/dsf=" + exedir + "CURL.DSF"
- $ link_dsf2 = "/dsf=" + exedir + "CURL_DEBUG.DSF"
- $ endif
- $ if (list .eq. 0)
- $ then
- $ link_map1 = "/nomap"
- $ link_map2 = "/nomap"
- $ else
- $ link_map1 = "/map=" + exedir + "CURL.MAP"
- $ link_map2 = "/map=" + exedir + "CURL_DEBUG.MAP"
- $ endif
- $!
- $!
- $! Make a normal image.
- $ set ver
- $ link 'link_map1' 'link_dsf1' /executable = 'exedir'CURL.EXE -
- 'objdir'curlsrc.olb /library /include = ('tool_main', curlmsg), -
- 'objdir'curllib.olb /library, -
- 'exedir'gnv$curl.opt/opt
- $!
- $! Also make a debug copy.
- $ link/debug 'link_map2' 'link_dsf2' /executable = 'exedir'CURL_DEBUG.EXE -
- 'objdir'curlsrc.olb /library /include = ('tool_main', curlmsg), -
- 'objdir'curllib.olb /library, -
- 'exedir'gnv$curl.opt/opt
- $ set nover
- $!
- $ goto Common_Exit
- $!
- $! Subroutine to build everything with a filetype passed in via P2 in
- $! the directory passed in via P1 and put it in the object library named
- $! via P3. Exclude items in P4.
- $!
- $build: subroutine
- $ build_def = f$environment("default")
- $ on control_y then goto EndLoop ! SS$_CONTROLY
- $ sts = 1 ! SS$_NORMAL.
- $! set noon
- $ set default 'p1'
- $ search = "sys$disk:" + p2
- $ reset = f$search("reset")
- $ if f$search( p3) .eqs. ""
- $ then
- $ librarian /create /object 'p3'
- $ endif
- $ reject_list__ = "," + f$edit(p4, "COLLAPSE, UPCASE") + ","
- $ reject_list___len = f$length(reject_list__)
- $ reset = f$search( "reset", 1)
- $Loop:
- $ file = f$search( search, 1)
- $ if file .eqs. "" then goto EndLoop
- $! Skip a name if it's in the P4 exclusion list.
- $ if (p4 .nes. "")
- $ then
- $ name__ = "," + -
- f$edit(f$parse(file, , , "NAME", "SYNTAX_ONLY"), "UPCASE") + -
- ","
- $ if (f$locate(name__, reject_list__) .lt. reject_list___len)
- $ then
- $ goto Loop
- $ endif
- $ endif
- $ objfile = f$parse("''objdir'.OBJ;", file)
- $ obj = f$search(objfile, 2)
- $ if (obj .nes. "")
- $ then
- $ if (f$cvtime(f$file(file,"rdt")) .gts. f$cvtime(f$file(obj,"rdt")))
- $ then
- $ call compile 'file'
- $ sts = $status
- $ if .not. sts
- $ then
- $ goto EndLoop
- $ endif
- $ librarian /object 'p3' 'objfile'
- $ else
- $ 'vo_o' "%CURL-I-OBJUTD, ", objfile, " is up to date"
- $ endif
- $ else
- $ 'vo_o' "%CURL-I-OBJDNE, ", file, " does not exist"
- $ call compile 'file'
- $ sts = $status
- $ if .not. sts
- $ then
- $ goto EndLoop
- $ endif
- $ librarian /object 'p3' 'objfile'
- $ endif
- $ goto Loop
- $EndLoop:
- $!!! purge
- $ set default 'build_def'
- $ exit 'sts'
- $ endsubroutine ! Build
- $!
- $! Based on the file TYPE, do the right compile command.
- $! Only C and MSG supported.
- $!
- $compile: subroutine
- $ on control_y then return ctrl_y ! SS$_CONTROLY
- $! set noon
- $ file = p1
- $ qual = p2+ p3+ p4+ p5+ p6+ p7+ p8
- $ typ = f$edit(f$parse(file, , , "TYPE"), "UPCASE") - "."
- $ if (typ .eqs. "C")
- $ then
- $ 'vo_c' "CC (opts) ", file
- $ define/user curl 'curl_logical'
- $ if curl_sys_krbinc .nes. "" then define/user gssapi 'curl_sys_krbinc'
- $ define/user decc$system_include 'sys_inc'
- $ CC 'cc_defs' -
- 'cc_qual1' -
- 'cc_qual2' -
- 'cc_include' -
- 'file'
- $ else
- $ cmd_msg = "MESSAGE " + msg_qual
- $ x = cmd_'typ'
- $ 'vo_c' x, " ", file
- $ 'x' 'file'
- $ endif
- $ ENDSUBROUTINE ! Compile
- $!
- $! Do a diff of the file specified in P1 with that in P2. If different
- $! copy P1 to P2. This also covers if P2 doesn't exist, but not if P2
- $! is an invalid filespec.
- $!
- $MoveIfDiff: subroutine
- $ set NoOn
- $ define /user_mode sys$error nl:
- $ define /user_mode sys$output nl:
- $ differences 'p1' 'p2'
- $ status = $status
- $ if (status .ne. %X006C8009) ! if status is not "no diff"
- $ then
- $ copy 'p1' 'p2'
- $ purge /nolog 'p2'
- $ endif
- $ on control_y then return ctrl_y ! SS$_CONTROLY
- $ ENDSUBROUTINE ! MoveIfDiff
- $!
- $Common_Exit:
- $ set default 'orig_def'
- $ exit
|