2013-07-31 23:35:19 -04:00
|
|
|
$! File: gnv_link_curl.com
|
|
|
|
$!
|
|
|
|
$! $Id$
|
|
|
|
$!
|
|
|
|
$! File to build images using gnv$libcurl.exe
|
|
|
|
$!
|
|
|
|
$! Copyright 2009, 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)
|
2015-01-15 22:28:34 -05:00
|
|
|
$! ! ver_patch is typically both a number and some letters
|
2013-07-31 23:35:19 -04:00
|
|
|
$ ver_patch_len = f$length(ver_patch)
|
2015-01-15 22:28:34 -05:00
|
|
|
$ 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
|
2013-07-31 23:35:19 -04:00
|
|
|
$ 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
|
2015-01-15 22:28:34 -05:00
|
|
|
$set nover
|
2013-07-31 23:35:19 -04:00
|
|
|
$ 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.
|
2017-08-08 15:22:34 -04:00
|
|
|
https://h41379.www4.hpe.com/openvms/products/ssl/ssl.html
|
2013-07-31 23:35:19 -04:00
|
|
|
|
|
|
|
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] -
|
2013-08-08 07:11:29 -04:00
|
|
|
/options=noconfirm -
|
|
|
|
/destination=device:[vms$common.gnv.lib] SSL
|
2013-07-31 23:35:19 -04:00
|
|
|
|
|
|
|
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_metalink.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, -
|
2016-10-31 10:19:26 -04:00
|
|
|
[.src]curl-strtoofft.o, [.src]curl-strdup.o, [.src]curl-strcase.o, -
|
2013-07-31 23:35:19 -04:00
|
|
|
[.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"
|
2016-10-31 10:19:26 -04:00
|
|
|
$ strcase = "strcase"
|
2013-07-31 23:35:19 -04:00
|
|
|
$ nonblock = "nonblock"
|
2014-12-21 10:24:55 -05:00
|
|
|
$ warnless = "warnless"
|
2013-07-31 23:35:19 -04:00
|
|
|
$!
|
|
|
|
$! Extended parse style requires special quoting
|
|
|
|
$!
|
|
|
|
$ if (arch_name .nes. "VAX") .and. (parse_style .eqs. "EXTENDED")
|
|
|
|
$ then
|
2016-10-31 10:19:26 -04:00
|
|
|
$ strcase = """strcase"""
|
2013-07-31 23:35:19 -04:00
|
|
|
$ nonblock = """nonblock"""
|
2014-12-21 10:24:55 -05:00
|
|
|
$ warnless = """warnless"""
|
2013-07-31 23:35:19 -04:00
|
|
|
$ 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=-
|
2016-10-31 10:19:26 -04:00
|
|
|
('strcase','nonblock','warnless'),-
|
2013-07-31 23:35:19 -04:00
|
|
|
gnv_packages_vms:curlmsg.obj,-
|
|
|
|
sys$input:/opt
|
|
|
|
gnv$libcurl/share
|
|
|
|
gnv_packages_vms:curl_crtl_init.obj
|
|
|
|
$ endif
|
|
|
|
$ endif
|
|
|
|
$!
|
2014-12-21 10:24:55 -05:00
|
|
|
$!
|
2013-07-31 23:35:19 -04:00
|
|
|
$!
|
|
|
|
$! 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 = "persistant"
|
|
|
|
$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'
|
|
|
|
$!
|