mirror of
https://github.com/moparisthebest/curl
synced 2024-11-11 12:05:06 -05:00
265b14d6b3
Warning: this will make existing curl command lines that use metalink to stop working. Reasons for removal: 1. We've found several security problems and issues involving the metalink support in curl. The issues are not detailed here. When working on those, it become apparent to the team that several of the problems are due to the system design, metalink library API and what the metalink RFC says. They are very hard to fix on the curl side only. 2. The metalink usage with curl was only very briefly documented and was not following the "normal" curl usage pattern in several ways, making it surprising and non-intuitive which could lead to further security issues. 3. The metalink library was last updated 6 years ago and wasn't so active the years before that either. An unmaintained library means there's a security problem waiting to happen. This is probably reason enough. 4. Metalink requires an XML parsing library, which is complex code (even the smaller alternatives) and to this day often gets security updates. 5. Metalink is not a widely used curl feature. In the 2020 curl user survey, only 1.4% of the responders said that they'd are using it. In 2021 that number was 1.2%. Searching the web also show very few traces of it being used, even with other tools. 6. The torrent format and associated technology clearly won for downloading large files from multiple sources in parallel. Cloes #7176
853 lines
25 KiB
Plaintext
853 lines
25 KiB
Plaintext
$! File: gnv_link_curl.com
|
|
$!
|
|
$! $Id$
|
|
$!
|
|
$! File to build images using gnv$libcurl.exe
|
|
$!
|
|
$! Copyright 2009 - 2021, John Malmberg
|
|
$!
|
|
$! Permission to use, copy, modify, and/or distribute this software for any
|
|
$! purpose with or without fee is hereby granted, provided that the above
|
|
$! copyright notice and this permission notice appear in all copies.
|
|
$!
|
|
$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
|
$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
$!
|
|
$! 10-Jun-2009 J. Malmberg
|
|
$!============================================================================
|
|
$!
|
|
$! Save this so we can get back.
|
|
$ default_dir = f$environment("default")
|
|
$ define/job gnv_packages_vms 'default_dir'
|
|
$!
|
|
$ on warning then goto all_exit
|
|
$!
|
|
$! On VAX, we need to generate a Macro transfer vector.
|
|
$ parse_style = "TRADITIONAL"
|
|
$ if (f$getsyi("HW_MODEL") .lt. 1024)
|
|
$ then
|
|
$ @generate_vax_transfer.com
|
|
$ 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
|
|
$!
|
|
$!
|
|
$! Move to where the base directories.
|
|
$ set def [--]
|
|
$!
|
|
$!
|
|
$! Build the Message file.
|
|
$!--------------------------
|
|
$ if f$search("[.packages.vms]curlmsg.obj") .eqs. ""
|
|
$ then
|
|
$ message [.packages.vms]curlmsg.msg/object=[.packages.vms]
|
|
$ endif
|
|
$ if f$search("gnv$curlmsg.exe") .eqs. ""
|
|
$ then
|
|
$ link/share=gnv$curlmsg.exe [.packages.vms]curlmsg.obj
|
|
$ endif
|
|
$!
|
|
$!
|
|
$! Need to build the common init module.
|
|
$!-------------------------------------------
|
|
$ cflags = "/list/show=(expan,includ)"
|
|
$ init_obj = "[.packages.vms]curl_crtl_init.obj"
|
|
$ if f$search(init_obj) .eqs. ""
|
|
$ then
|
|
$ cc'cflags' 'default_dir'curl_crtl_init.c/obj='init_obj'
|
|
$ endif
|
|
$ purge 'init_obj'
|
|
$ rename 'init_obj' ;1
|
|
$!
|
|
$!
|
|
$! Need to build the module to test the HP OpenSSL version
|
|
$!--------------------------------------------------------
|
|
$ if arch_name .nes. "VAX"
|
|
$ then
|
|
$ rpt_obj = "[.packages.vms]report_openssl_version.obj
|
|
$ if f$search(rpt_obj) .eqs. ""
|
|
$ then
|
|
$ cc'cflags' 'default_dir'report_openssl_version.c/obj='rpt_obj'
|
|
$ endif
|
|
$ purge 'rpt_obj'
|
|
$ rename 'rpt_obj' ;1
|
|
$!
|
|
$ link/exe='default_dir'report_openssl_version.exe 'rpt_obj'
|
|
$ report_openssl_version := $'default_dir'report_openssl_version.exe
|
|
$ endif
|
|
$!
|
|
$!
|
|
$ base_link_opt_file = "[.packages.vms.''arch_name']gnv_libcurl_linker.opt"
|
|
$ share_link_opt_file = "[.packages.vms.''arch_name']gnv_ssl_libcurl_linker.opt"
|
|
$ if f$search(base_link_opt_file) .eqs. ""
|
|
$ then
|
|
$ base_link_opt_file = "[.packages.vms]gnv_libcurl_linker.opt"
|
|
$ share_link_opt_file = "[.packages.vms]gnv_ssl_libcurl_linker.opt"
|
|
$ if f$search(base_link_opt_file) .eqs. ""
|
|
$ then
|
|
$ write sys$output "Can not find base library option file!"
|
|
$ goto all_exit
|
|
$ endif
|
|
$ endif
|
|
$!
|
|
$! Create the a new option file with special fixup for HP SSL
|
|
$! For a shared image, we always want ZLIB and 32 bit HPSSL
|
|
$!
|
|
$ if f$search("gnv$libzshr32") .eqs. ""
|
|
$ then
|
|
$ write sys$output "VMSPORTS/GNV LIBZ Shared image not found!"
|
|
$ goto all_exit
|
|
$ endif
|
|
$!
|
|
$!
|
|
$! Need to check the version of the HP SSL shared image.
|
|
$!
|
|
$! VAX platform can not be checked this way, it appears symbol lookup
|
|
$! was disabled. VAX has not been updated in a while.
|
|
$ if arch_name .eqs. "VAX"
|
|
$ then
|
|
$ hp_ssl_libcrypto32 = "sys$common:[syslib]ssl$libcrypto_shr32.exe"
|
|
$ hp_ssl_libssl32 = "sys$common:[syslib]ssl$libssl_shr32.exe"
|
|
$ if f$search(hp_ssl_libcrypto32) .nes. ""
|
|
$ then
|
|
$ use_hp_ssl = 1
|
|
$ curl_ssl_libcrypto32 = hp_ssl_libcrypto32
|
|
$ curl_ssl_libssl32 = hp_ssl_libssl32
|
|
$ curl_ssl_version = "OpenSSL/0.9.6g"
|
|
$ else
|
|
$ write sys$output "HP OpenSSL Shared images not found!"
|
|
$ goto all_exit
|
|
$ endif
|
|
$ else
|
|
$!
|
|
$! Minimum HP version we can use reports:
|
|
$! "OpenSSL 0.9.8w 23 Apr 2012"
|
|
$!
|
|
$ use_hp_ssl = 0
|
|
$ hp_ssl_libcrypto32 = "sys$share:ssl$libcrypto_shr32.exe"
|
|
$ hp_ssl_libssl32 = "sys$share:ssl$libssl_shr32.exe"
|
|
$ if f$search(hp_ssl_libcrypto32) .nes. ""
|
|
$ then
|
|
$ curl_ssl_libcrypto32 = hp_ssl_libcrypto32
|
|
$ curl_ssl_libssl32 = hp_ssl_libssl32
|
|
$ report_openssl_version 'hp_ssl_libcrypto32' hp_ssl_version
|
|
$ endif
|
|
$!
|
|
$ if f$type(hp_ssl_version) .eqs. "STRING"
|
|
$ then
|
|
$ curl_ssl_version = hp_ssl_version
|
|
$ full_version = f$element(1, " ", hp_ssl_version)
|
|
$ ver_maj = f$element(0, ".", full_version)
|
|
$ ver_min = f$element(1, ".", full_version)
|
|
$ ver_patch = f$element(2, ".", full_version)
|
|
$! ! ver_patch is typically both a number and some letters
|
|
$ ver_patch_len = f$length(ver_patch)
|
|
$ ver_patchltr = ""
|
|
$ver_patch_loop:
|
|
$ ver_patchltr_c = f$extract(ver_patch_len - 1, 1, ver_patch)
|
|
$ if ver_patchltr_c .les. "9" then goto ver_patch_loop_end
|
|
$ ver_patchltr = ver_patchltr_c + ver_patchltr
|
|
$ ver_patch_len = ver_patch_len - 1
|
|
$ goto ver_patch_loop
|
|
$ver_patch_loop_end:
|
|
$ ver_patchnum = ver_patch - ver_patchltr
|
|
$ if 'ver_maj' .ge. 0
|
|
$ then
|
|
$ if 'ver_min' .ge. 9
|
|
$ then
|
|
$ if 'ver_patchnum' .ge. 8
|
|
$ then
|
|
$ if ver_patchltr .ges. "w" then use_hp_ssl = 1
|
|
$ endif
|
|
$ endif
|
|
$ endif
|
|
$set nover
|
|
$ if use_hp_ssl .eq. 0
|
|
$ then
|
|
$ write sys$output -
|
|
" HP OpenSSL version of ""''hp_ssl_version'"" is too old for shared libcurl!"
|
|
$ endif
|
|
$ else
|
|
$ write sys$output "Unable to get version of HP OpenSSL"
|
|
$ endif
|
|
$!
|
|
$ gnv_ssl_libcrypto32 = "gnv$gnu:[lib]ssl$libcrypto_shr32.exe"
|
|
$ gnv_ssl_libssl32 = "gnv$gnu:[lib]ssl$libssl_shr32.exe"
|
|
$ if f$search(gnv_ssl_libcrypto32) .nes. ""
|
|
$ then
|
|
$ report_openssl_version 'gnv_ssl_libcrypto32' gnv_ssl_version
|
|
$ endif
|
|
$!
|
|
$ use_gnv_ssl = 0
|
|
$ if f$type(gnv_ssl_version) .eqs. "STRING"
|
|
$ then
|
|
$ gnv_full_version = f$element(1, " ", gnv_ssl_version)
|
|
$ gnv_ver_maj = f$element(0, ".", gnv_full_version)
|
|
$ gnv_ver_min = f$element(1, ".", gnv_full_version)
|
|
$ gnv_ver_patch = f$element(2, ".", gnv_full_version)
|
|
$ gnv_ver_patch_len = f$length(gnv_ver_patch)
|
|
$ gnv_ver_patchnum = f$extract(0, gnv_ver_patch_len - 1, gnv_ver_patch)
|
|
$ gnv_ver_patchltr = f$extract(gnv_ver_patch_len - 1, 1, gnv_ver_patch)
|
|
$ if 'gnv_ver_maj' .ge. 0
|
|
$ then
|
|
$ if 'gnv_ver_min' .ge. 9
|
|
$ then
|
|
$ if 'gnv_ver_patchnum' .ge. 8
|
|
$ then
|
|
$ if gnv_ver_patchltr .ges. "w" then use_gnv_ssl = 1
|
|
$ endif
|
|
$ endif
|
|
$ endif
|
|
$ if use_gnv_ssl .eq. 0
|
|
$ then
|
|
$ write sys$output -
|
|
"GNV OpenSSL version of ""''gnv_ssl_version'" is too old for shared libcurl!"
|
|
$ endif
|
|
$!
|
|
$! Prefer to break the tie with the lowest supported version
|
|
$! For simplicity, if the GNV image is present, it will be used.
|
|
$! Version tuple is not a simple compare.
|
|
$!
|
|
$ if use_gnv_ssl .eq. 1 then
|
|
$ curl_ssl_libcrypto32 = gnv_ssl_libcrypto32
|
|
$ curl_ssl_libssl32 = gnv_ssl_libssl32
|
|
$ curl_ssl_version = gnv_ssl_version
|
|
$ use_hp_ssl = 0
|
|
$ endif
|
|
!$!
|
|
$ else
|
|
$ write sys$output "Unable to get version of GNV OpenSSL"
|
|
$ endif
|
|
$!
|
|
$! Need to write a release note section about HP OpenSSL
|
|
$!
|
|
$create 'default_dir'hp_ssl_release_info.txt
|
|
$deck
|
|
This package is built on with the OpenSSL version listed below and requires
|
|
the shared images from the HP OpenSSL product that is kitted with that
|
|
version or a compatible later version.
|
|
|
|
For Alpha and IA64 platforms, see the url below to register to get the
|
|
download URL. The kit will be HP 1.4-467 or later.
|
|
https://h41379.www4.hpe.com/openvms/products/ssl/ssl.html
|
|
|
|
For VAX, use the same registration, but remove the kit name from any of the
|
|
download URLs provided and put in CPQ-VAXVMS-SSL-V0101-B-1.PCSI-DCX_VAXEXE
|
|
|
|
If your system can not be upgraded to a compatible version of OpenSSL, then
|
|
you can extract the two shared images from the kit and place them in the
|
|
[vms$common.gnv.lib]directory of the volume that you are installing GNV and
|
|
or GNV compatible components like Curl.
|
|
|
|
If GNV is installed, you must run the GNV startup procedure before these steps
|
|
and before installing Curl.
|
|
|
|
|
|
1. make sure that [vms$common.gnv.lib] exists by using the following
|
|
commands. We want the directory to be in lowercase except on VAX.
|
|
|
|
$SET PROCESS/PARSE=extend !If not VAX.
|
|
$CREATE/DIR device:[vms$common.gnv.lib]/prot=w:re
|
|
|
|
2. Extract the ssl$crypto_shr32.exe and ssl$libssl_shr32.exe images.
|
|
|
|
$PRODUCT EXTRACT FILE -
|
|
/select=(ssl$libcrypto_shr32.exe,ssl$libssl_shr32.exe)-
|
|
/source=device:[dir] -
|
|
/options=noconfirm -
|
|
/destination=device:[vms$common.gnv.lib] SSL
|
|
|
|
The [vms$common.sys$startup}curl_startup.com procedure will then configure
|
|
libcurl to use these shared images instead of the system ones.
|
|
|
|
When you upgrade SSL on VMS to the newer version of HP SSL, then these copies
|
|
should be deleted.
|
|
|
|
$eod
|
|
$!
|
|
$ open/append sslr 'default_dir'hp_ssl_release_info.txt
|
|
$ write sslr "OpenSSL version used for building this kit: ",curl_ssl_version
|
|
$ write sslr ""
|
|
$ close sslr
|
|
$!
|
|
$!
|
|
$! LIBZ
|
|
$ libzshr_line = ""
|
|
$ try_shr = "gnv$libzshr32"
|
|
$ if f$search(try_shr) .nes. ""
|
|
$ then
|
|
$ libzshr_line = "''try_shr'/share"
|
|
$ else
|
|
$ write sys$output "''try_shr' image not found!"
|
|
$ goto all_exit
|
|
$ endif
|
|
$!
|
|
$!
|
|
$ gssrtlshr_line = ""
|
|
$ if arch_name .nes. "VAX"
|
|
$ then
|
|
$ try_shr = "sys$share:gss$rtl"
|
|
$ if f$search("''try_shr'.exe") .nes. ""
|
|
$ then
|
|
$ gssrtlshr_line = "''try_shr'/share"
|
|
$ else
|
|
$ write sys$output "''try_shr' image not found!"
|
|
$ goto all_exit
|
|
$ endif
|
|
$ endif
|
|
$!
|
|
$!
|
|
$!
|
|
$ if f$search(share_link_opt_file) .eqs. ""
|
|
$ then
|
|
$ create 'share_link_opt_file'
|
|
$ open/append slopt 'share_link_opt_file'
|
|
$ if libzshr_line .nes. "" then write slopt libzshr_line
|
|
$ if gssrtlshr_line .nes. "" then write slopt gssrtlshr_line
|
|
$ write slopt "gnv$curl_ssl_libcryptoshr32/share"
|
|
$ write slopt "gnv$curl_ssl_libsslshr32/share"
|
|
$ close slopt
|
|
$ endif
|
|
$!
|
|
$! DCL build puts curllib in architecture directory
|
|
$! GNV build uses the makefile.
|
|
$ libfile = "[.packages.vms.''arch_name']curllib.olb"
|
|
$ if f$search(libfile) .nes. ""
|
|
$ then
|
|
$ olb_file = libfile
|
|
$ else
|
|
$ ! GNV based build
|
|
$ libfile = "[.lib.^.libs]libcurl.a"
|
|
$ if f$search(libfile) .nes. ""
|
|
$ then
|
|
$ olb_file = libfile
|
|
$ else
|
|
$ write sys$output -
|
|
"Can not build shared image, libcurl object library not found!"
|
|
$ goto all_exit
|
|
$ endif
|
|
$ endif
|
|
$!
|
|
$gnv_libcurl_share = "''default_dir'gnv$libcurl.exe"
|
|
$!
|
|
$ if f$search(gnv_libcurl_share) .eqs. ""
|
|
$ then
|
|
$ if arch_name .nes. "VAX"
|
|
$ then
|
|
$ define/user gnv$curl_ssl_libcryptoshr32 'curl_ssl_libcrypto32'
|
|
$ define/user gnv$curl_ssl_libsslshr32 'curl_ssl_libssl32'
|
|
$ link/dsf='default_dir'gnv$libcurl.dsf/share='gnv_libcurl_share' -
|
|
/map='default_dir'gnv$libcurl.map -
|
|
gnv_packages_vms:gnv_libcurl_symbols.opt/opt,-
|
|
'olb_file'/lib,-
|
|
'share_link_opt_file'/opt
|
|
$ else
|
|
$! VAX will not allow the logical name hack for the
|
|
$! SSL libcryto library, it is pulling it in twice if I try it.
|
|
$ link/share='gnv_libcurl_share'/map='default_dir'gnv$libcurl.map -
|
|
gnv_packages_vms:gnv_libcurl_xfer.opt/opt,-
|
|
'olb_file'/lib,-
|
|
'base_link_opt_file'/opt
|
|
$ endif
|
|
$ endif
|
|
$!
|
|
$!
|
|
$ if f$search("[.src]curl-tool_main.o") .nes. ""
|
|
$ then
|
|
$! From src/makefile.inc:
|
|
$! # libcurl has sources that provide functions named curlx_* that aren't
|
|
$! # part of the official API, but we re-use the code here to avoid
|
|
$! # duplication.
|
|
$!
|
|
$!
|
|
$ if f$search("[.src]curl.exe") .eqs. ""
|
|
$ then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.src]curl.exe/dsf=[.src]curl.dsf -
|
|
[.src]curl-tool_main.o, [.src]curl-tool_binmode.o, -
|
|
[.src]curl-tool_bname.o, [.src]curl-tool_cb_dbg.o, -
|
|
[.src]curl-tool_cb_hdr.o, [.src]curl-tool_cb_prg.o, -
|
|
[.src]curl-tool_cb_rea.o, [.src]curl-tool_cb_see.o, -
|
|
[.src]curl-tool_cb_wrt.o, [.src]curl-tool_cfgable.o, -
|
|
[.src]curl-tool_convert.o, [.src]curl-tool_dirhie.o, -
|
|
[.src]curl-tool_doswin.o, [.src]curl-tool_easysrc.o, -
|
|
[.src]curl-tool_formparse.o, [.src]curl-tool_getparam.o, -
|
|
[.src]curl-tool_getpass.o, [.src]curl-tool_help.o, -
|
|
[.src]curl-tool_helpers.o, [.src]curl-tool_homedir.o, -
|
|
[.src]curl-tool_hugehelp.o, [.src]curl-tool_libinfo.o, -
|
|
[.src]curl-tool_mfiles.o, -
|
|
[.src]curl-tool_msgs.o, [.src]curl-tool_operate.o, -
|
|
[.src]curl-tool_operhlp.o, [.src]curl-tool_panykey.o, -
|
|
[.src]curl-tool_paramhlp.o, [.src]curl-tool_parsecfg.o, -
|
|
[.src]curl-tool_setopt.o, [.src]curl-tool_sleep.o, -
|
|
[.src]curl-tool_urlglob.o, [.src]curl-tool_util.o, -
|
|
[.src]curl-tool_vms.o, [.src]curl-tool_writeenv.o, -
|
|
[.src]curl-tool_writeout.o, [.src]curl-tool_xattr.o, -
|
|
[.src]curl-strtoofft.o, [.src]curl-strdup.o, [.src]curl-strcase.o, -
|
|
[.src]curl-nonblock.o, gnv_packages_vms:curlmsg.obj,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
gnv_packages_vms:curl_crtl_init.obj
|
|
$ endif
|
|
$ else
|
|
$ curl_exe = "[.src]curl.exe"
|
|
$ curl_dsf = "[.src]curl.dsf"
|
|
$ curl_main = "[.packages.vms.''arch_name']tool_main.obj"
|
|
$ curl_src = "[.packages.vms.''arch_name']curlsrc.olb"
|
|
$ curl_lib = "[.packages.vms.''arch_name']curllib.olb"
|
|
$ strcase = "strcase"
|
|
$ nonblock = "nonblock"
|
|
$ warnless = "warnless"
|
|
$!
|
|
$! Extended parse style requires special quoting
|
|
$!
|
|
$ if (arch_name .nes. "VAX") .and. (parse_style .eqs. "EXTENDED")
|
|
$ then
|
|
$ strcase = """strcase"""
|
|
$ nonblock = """nonblock"""
|
|
$ warnless = """warnless"""
|
|
$ endif
|
|
$ if f$search(curl_exe) .eqs. ""
|
|
$ then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe='curl_exe'/dsf='curl_dsf' -
|
|
'curl_main','curl_src'/lib, -
|
|
'curl_lib'/library/include=-
|
|
('strcase','nonblock','warnless'),-
|
|
gnv_packages_vms:curlmsg.obj,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
gnv_packages_vms:curl_crtl_init.obj
|
|
$ endif
|
|
$ endif
|
|
$!
|
|
$!
|
|
$!
|
|
$! in6addr_missing so skip building:
|
|
$! [.server]sws.o
|
|
$! [.server]sockfilt.o
|
|
$! [.server]tftpd.o
|
|
$!
|
|
$!
|
|
$ target = "10-at-a-time"
|
|
$ if f$search("[.docs.examples]''target'.o") .eqs. ""
|
|
$ then
|
|
$ write sys$output "examples not built"
|
|
$ goto all_exit
|
|
$ endif
|
|
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$ then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$ endif
|
|
$!
|
|
$!
|
|
$ target = "anyauthput"
|
|
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$ then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$ endif
|
|
$!
|
|
$!
|
|
$ target = "certinfo"
|
|
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$ then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$ endif
|
|
$!
|
|
$!
|
|
$ target = "cookie_interface"
|
|
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$ then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$ endif
|
|
$!
|
|
$!
|
|
$ target = "debug"
|
|
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$ then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$ endif
|
|
$!
|
|
$!
|
|
$ target = "fileupload"
|
|
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$ then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$ endif
|
|
$!
|
|
$!
|
|
$ target = "fopen"
|
|
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$ then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$ endif
|
|
$!
|
|
$!
|
|
$target = "ftpget"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "ftpgetresp"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "ftpupload"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "getinfo"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "getinmemory"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "http-post"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "httpcustomheader"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "httpput"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "https"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "multi-app"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "multi-debugcallback"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "multi-double"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "multi-post"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "multi-single"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "persistent"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "post-callback"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "postit2"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "sendrecv"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "sepheaders"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "simple"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "simplepost"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$!
|
|
$target = "simplessl"
|
|
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
|
$then
|
|
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
|
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
|
/dsf=[.docs.examples]'target'.dsf -
|
|
[.docs.examples]'target'.o,-
|
|
gnv$'target'.opt/opt,-
|
|
sys$input:/opt
|
|
gnv$libcurl/share
|
|
$endif
|
|
$!
|
|
$! =============== End of docs/examples =========================
|
|
$!
|
|
$!
|
|
$all_exit:
|
|
$set def 'default_dir'
|
|
$exit '$status'
|
|
$!
|