xref: /curl/packages/vms/gnv_link_curl.com (revision ab6d5442)
1$! File: gnv_link_curl.com
2$!
3$! File to build images using gnv$libcurl.exe
4$!
5$! Copyright (C) John Malmberg
6$!
7$! Permission to use, copy, modify, and/or distribute this software for any
8$! purpose with or without fee is hereby granted, provided that the above
9$! copyright notice and this permission notice appear in all copies.
10$!
11$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
17$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18$!
19$! SPDX-License-Identifier: ISC
20$!
21$!============================================================================
22$!
23$! Save this so we can get back.
24$ default_dir = f$environment("default")
25$ define/job gnv_packages_vms 'default_dir'
26$!
27$ on warning then goto all_exit
28$!
29$! On VAX, we need to generate a Macro transfer vector.
30$ parse_style = "TRADITIONAL"
31$ if (f$getsyi("HW_MODEL") .lt. 1024)
32$ then
33$   @generate_vax_transfer.com
34$   arch_name = "VAX"
35$ else
36$    arch_name = ""
37$    arch_name = arch_name + f$edit(f$getsyi("ARCH_NAME"), "UPCASE")
38$    if (arch_name .eqs. "") then arch_name = "UNK"
39$!
40$!   Extended parsing option starts with VMS 7.3-1.
41$!   There is no 7.4, so that simplifies the parse a bit.
42$!
43$    node_swvers = f$getsyi("node_swvers")
44$    version_patch = f$extract(1, f$length(node_swvers), node_swvers)
45$    maj_ver = f$element(0, ".", version_patch)
46$    min_ver_patch = f$element(1, ".", version_patch)
47$    min_ver = f$element(0, "-", min_ver_patch)
48$    patch = f$element(1, "-", min_ver_patch)
49$    if patch .eqs. "-" then patch = ""
50$    parse_x = 0
51$    if maj_ver .ges. "8"
52$    then
53$       parse_x = 1
54$    else
55$       if maj_ver .eqs. "7" .and. min_ver .ges. "3" .and. patch .nes. ""
56$       then
57$          parse_x = 1
58$       endif
59$    endif
60$    if parse_x
61$    then
62$       parse_style = f$getjpi("", "parse_style_perm")
63$    endif
64$ endif
65$!
66$!
67$! Move to where the base directories.
68$ set def [--]
69$!
70$!
71$! Build the Message file.
72$!--------------------------
73$ if f$search("[.packages.vms]curlmsg.obj") .eqs. ""
74$ then
75$   message [.packages.vms]curlmsg.msg/object=[.packages.vms]
76$ endif
77$ if f$search("gnv$curlmsg.exe") .eqs. ""
78$ then
79$   link/share=gnv$curlmsg.exe [.packages.vms]curlmsg.obj
80$ endif
81$!
82$!
83$! Need to build the common init module.
84$!-------------------------------------------
85$ cflags = "/list/show=(expan,includ)"
86$ init_obj = "[.packages.vms]curl_crtl_init.obj"
87$ if f$search(init_obj) .eqs. ""
88$ then
89$   cc'cflags' 'default_dir'curl_crtl_init.c/obj='init_obj'
90$ endif
91$ purge 'init_obj'
92$ rename 'init_obj' ;1
93$!
94$!
95$! Need to build the module to test the HP OpenSSL version
96$!--------------------------------------------------------
97$ if arch_name .nes. "VAX"
98$ then
99$   rpt_obj = "[.packages.vms]report_openssl_version.obj
100$   if f$search(rpt_obj) .eqs. ""
101$   then
102$       cc'cflags' 'default_dir'report_openssl_version.c/obj='rpt_obj'
103$   endif
104$   purge 'rpt_obj'
105$   rename 'rpt_obj' ;1
106$!
107$   link/exe='default_dir'report_openssl_version.exe 'rpt_obj'
108$   report_openssl_version := $'default_dir'report_openssl_version.exe
109$ endif
110$!
111$!
112$ base_link_opt_file = "[.packages.vms.''arch_name']gnv_libcurl_linker.opt"
113$ share_link_opt_file = "[.packages.vms.''arch_name']gnv_ssl_libcurl_linker.opt"
114$ if f$search(base_link_opt_file) .eqs. ""
115$ then
116$   base_link_opt_file = "[.packages.vms]gnv_libcurl_linker.opt"
117$   share_link_opt_file = "[.packages.vms]gnv_ssl_libcurl_linker.opt"
118$   if f$search(base_link_opt_file) .eqs. ""
119$   then
120$       write sys$output "Can not find base library option file!"
121$       goto all_exit
122$   endif
123$ endif
124$!
125$! Create the a new option file with special fixup for HP SSL
126$! For a shared image, we always want ZLIB and 32 bit HPSSL
127$!
128$ if f$search("gnv$libzshr32") .eqs. ""
129$ then
130$   write sys$output "VMSPORTS/GNV LIBZ Shared image not found!"
131$   goto all_exit
132$ endif
133$!
134$!
135$! Need to check the version of the HP SSL shared image.
136$!
137$! VAX platform can not be checked this way, it appears symbol lookup
138$! was disabled.  VAX has not been updated in a while.
139$ if arch_name .eqs. "VAX"
140$ then
141$   hp_ssl_libcrypto32 = "sys$common:[syslib]ssl$libcrypto_shr32.exe"
142$   hp_ssl_libssl32 = "sys$common:[syslib]ssl$libssl_shr32.exe"
143$   if f$search(hp_ssl_libcrypto32) .nes. ""
144$   then
145$       use_hp_ssl = 1
146$       curl_ssl_libcrypto32 = hp_ssl_libcrypto32
147$       curl_ssl_libssl32 = hp_ssl_libssl32
148$       curl_ssl_version = "OpenSSL/0.9.6g"
149$   else
150$       write sys$output "HP OpenSSL Shared images not found!"
151$       goto all_exit
152$   endif
153$ else
154$!
155$!   Minimum HP version we can use reports:
156$!   "OpenSSL 0.9.8w 23 Apr 2012"
157$!
158$   use_hp_ssl = 0
159$   hp_ssl_libcrypto32 = "sys$share:ssl$libcrypto_shr32.exe"
160$   hp_ssl_libssl32 = "sys$share:ssl$libssl_shr32.exe"
161$   if f$search(hp_ssl_libcrypto32) .nes. ""
162$   then
163$       curl_ssl_libcrypto32 = hp_ssl_libcrypto32
164$       curl_ssl_libssl32 = hp_ssl_libssl32
165$       report_openssl_version 'hp_ssl_libcrypto32' hp_ssl_version
166$   endif
167$!
168$   if f$type(hp_ssl_version) .eqs. "STRING"
169$   then
170$       curl_ssl_version = hp_ssl_version
171$       full_version = f$element(1, " ", hp_ssl_version)
172$       ver_maj = f$element(0, ".", full_version)
173$       ver_min = f$element(1, ".", full_version)
174$       ver_patch = f$element(2, ".", full_version)
175$!      ! ver_patch is typically both a number and some letters
176$       ver_patch_len = f$length(ver_patch)
177$       ver_patchltr = ""
178$ver_patch_loop:
179$           ver_patchltr_c = f$extract(ver_patch_len - 1, 1, ver_patch)
180$           if ver_patchltr_c .les. "9" then goto ver_patch_loop_end
181$           ver_patchltr = ver_patchltr_c + ver_patchltr
182$           ver_patch_len = ver_patch_len - 1
183$           goto ver_patch_loop
184$ver_patch_loop_end:
185$       ver_patchnum = ver_patch - ver_patchltr
186$       if 'ver_maj' .ge. 0
187$       then
188$           if 'ver_min' .ge. 9
189$           then
190$               if 'ver_patchnum' .ge. 8
191$               then
192$                   if ver_patchltr .ges. "w" then use_hp_ssl = 1
193$               endif
194$           endif
195$       endif
196$set nover
197$       if use_hp_ssl .eq. 0
198$       then
199$           write sys$output -
200   " HP OpenSSL version of ""''hp_ssl_version'"" is too old for shared libcurl!"
201$       endif
202$   else
203$       write sys$output "Unable to get version of HP OpenSSL"
204$   endif
205$!
206$   gnv_ssl_libcrypto32 = "gnv$gnu:[lib]ssl$libcrypto_shr32.exe"
207$   gnv_ssl_libssl32 = "gnv$gnu:[lib]ssl$libssl_shr32.exe"
208$   if f$search(gnv_ssl_libcrypto32) .nes. ""
209$   then
210$       report_openssl_version 'gnv_ssl_libcrypto32' gnv_ssl_version
211$   endif
212$!
213$   use_gnv_ssl = 0
214$   if f$type(gnv_ssl_version) .eqs. "STRING"
215$   then
216$       gnv_full_version = f$element(1, " ", gnv_ssl_version)
217$       gnv_ver_maj = f$element(0, ".", gnv_full_version)
218$       gnv_ver_min = f$element(1, ".", gnv_full_version)
219$       gnv_ver_patch = f$element(2, ".", gnv_full_version)
220$       gnv_ver_patch_len = f$length(gnv_ver_patch)
221$       gnv_ver_patchnum = f$extract(0, gnv_ver_patch_len - 1, gnv_ver_patch)
222$       gnv_ver_patchltr = f$extract(gnv_ver_patch_len - 1, 1, gnv_ver_patch)
223$       if 'gnv_ver_maj' .ge. 0
224$       then
225$           if 'gnv_ver_min' .ge. 9
226$           then
227$               if 'gnv_ver_patchnum' .ge. 8
228$               then
229$                   if gnv_ver_patchltr .ges. "w" then use_gnv_ssl = 1
230$               endif
231$           endif
232$       endif
233$       if use_gnv_ssl .eq. 0
234$       then
235$           write sys$output -
236   "GNV OpenSSL version of ""''gnv_ssl_version'" is too old for shared libcurl!"
237$       endif
238$!
239$!      Prefer to break the tie with the lowest supported version
240$!      For simplicity, if the GNV image is present, it will be used.
241$!      Version tuple is not a simple compare.
242$!
243$       if use_gnv_ssl .eq. 1 then
244$           curl_ssl_libcrypto32 = gnv_ssl_libcrypto32
245$           curl_ssl_libssl32 = gnv_ssl_libssl32
246$           curl_ssl_version = gnv_ssl_version
247$           use_hp_ssl = 0
248$       endif
249!$!
250$   else
251$       write sys$output "Unable to get version of GNV OpenSSL"
252$   endif
253$!
254$!  Need to write a release note section about HP OpenSSL
255$!
256$create 'default_dir'hp_ssl_release_info.txt
257$deck
258This package is built on with the OpenSSL version listed below and requires
259the shared images from the HP OpenSSL product that is kitted with that
260version or a compatible later version.
261
262For Alpha and IA64 platforms, see the url below to register to get the
263download URL.  The kit will be HP 1.4-467 or later.
264  https://h41379.www4.hpe.com/openvms/products/ssl/ssl.html
265
266For VAX, use the same registration, but remove the kit name from any of the
267download URLs provided and put in CPQ-VAXVMS-SSL-V0101-B-1.PCSI-DCX_VAXEXE
268
269If your system can not be upgraded to a compatible version of OpenSSL, then
270you can extract the two shared images from the kit and place them in the
271[vms$common.gnv.lib]directory of the volume that you are installing GNV and
272or GNV compatible components like Curl.
273
274If GNV is installed, you must run the GNV startup procedure before these steps
275and before installing Curl.
276
277
278  1.  make sure that [vms$common.gnv.lib] exists by using the following
279      commands.  We want the directory to be in lowercase except on VAX.
280
281    $SET PROCESS/PARSE=extend !If not VAX.
282    $CREATE/DIR device:[vms$common.gnv.lib]/prot=w:re
283
284  2. Extract the ssl$crypto_shr32.exe and ssl$libssl_shr32.exe images.
285
286    $PRODUCT EXTRACT FILE -
287      /select=(ssl$libcrypto_shr32.exe,ssl$libssl_shr32.exe)-
288      /source=device:[dir] -
289      /options=noconfirm -
290      /destination=device:[vms$common.gnv.lib] SSL
291
292The [vms$common.sys$startup}curl_startup.com procedure will then configure
293libcurl to use these shared images instead of the system ones.
294
295When you upgrade SSL on VMS to the newer version of HP SSL, then these copies
296should be deleted.
297
298$eod
299$!
300$ open/append sslr 'default_dir'hp_ssl_release_info.txt
301$ write sslr "OpenSSL version used for building this kit: ",curl_ssl_version
302$ write sslr ""
303$ close sslr
304$!
305$!
306$! LIBZ
307$ libzshr_line = ""
308$ try_shr = "gnv$libzshr32"
309$ if f$search(try_shr) .nes. ""
310$ then
311$   libzshr_line = "''try_shr'/share"
312$ else
313$   write sys$output "''try_shr' image not found!"
314$   goto all_exit
315$ endif
316$!
317$!
318$ gssrtlshr_line = ""
319$ if arch_name .nes. "VAX"
320$ then
321$   try_shr = "sys$share:gss$rtl"
322$   if f$search("''try_shr'.exe") .nes. ""
323$   then
324$       gssrtlshr_line = "''try_shr'/share"
325$   else
326$       write sys$output "''try_shr' image not found!"
327$       goto all_exit
328$   endif
329$ endif
330$!
331$!
332$!
333$ if f$search(share_link_opt_file) .eqs. ""
334$ then
335$   create 'share_link_opt_file'
336$   open/append slopt 'share_link_opt_file'
337$   if libzshr_line .nes. "" then write slopt libzshr_line
338$   if gssrtlshr_line .nes. "" then write slopt gssrtlshr_line
339$   write slopt "gnv$curl_ssl_libcryptoshr32/share"
340$   write slopt "gnv$curl_ssl_libsslshr32/share"
341$   close slopt
342$ endif
343$!
344$! DCL build puts curllib in architecture directory
345$! GNV build uses the makefile.
346$ libfile = "[.packages.vms.''arch_name']curllib.olb"
347$ if f$search(libfile) .nes. ""
348$ then
349$   olb_file = libfile
350$ else
351$   ! GNV based build
352$   libfile = "[.lib.^.libs]libcurl.a"
353$   if f$search(libfile) .nes. ""
354$   then
355$       olb_file = libfile
356$   else
357$       write sys$output -
358  "Can not build shared image, libcurl object library not found!"
359$       goto all_exit
360$   endif
361$ endif
362$!
363$gnv_libcurl_share = "''default_dir'gnv$libcurl.exe"
364$!
365$ if f$search(gnv_libcurl_share) .eqs. ""
366$ then
367$   if arch_name .nes. "VAX"
368$   then
369$       define/user gnv$curl_ssl_libcryptoshr32 'curl_ssl_libcrypto32'
370$       define/user gnv$curl_ssl_libsslshr32 'curl_ssl_libssl32'
371$       link/dsf='default_dir'gnv$libcurl.dsf/share='gnv_libcurl_share' -
372            /map='default_dir'gnv$libcurl.map -
373            gnv_packages_vms:gnv_libcurl_symbols.opt/opt,-
374            'olb_file'/lib,-
375            'share_link_opt_file'/opt
376$   else
377$!      VAX will not allow the logical name hack for the
378$!      SSL libcryto library, it is pulling it in twice if I try it.
379$       link/share='gnv_libcurl_share'/map='default_dir'gnv$libcurl.map -
380            gnv_packages_vms:gnv_libcurl_xfer.opt/opt,-
381            'olb_file'/lib,-
382            'base_link_opt_file'/opt
383$   endif
384$ endif
385$!
386$!
387$ if f$search("[.src]curl-tool_main.o") .nes. ""
388$ then
389$!  From src/makefile.inc:
390$!  # libcurl has sources that provide functions named curlx_* that aren't
391$!  # part of the official API, but we reuse the code here to avoid
392$!  # duplication.
393$!
394$!
395$   if f$search("[.src]curl.exe") .eqs. ""
396$   then
397$       define/user gnv$libcurl 'gnv_libcurl_share'
398$       link'ldebug'/exe=[.src]curl.exe/dsf=[.src]curl.dsf -
399           [.src]curl-tool_main.o, [.src]curl-tool_binmode.o, -
400           [.src]curl-tool_bname.o, [.src]curl-tool_cb_dbg.o, -
401           [.src]curl-tool_cb_hdr.o, [.src]curl-tool_cb_prg.o, -
402           [.src]curl-tool_cb_rea.o, [.src]curl-tool_cb_see.o, -
403           [.src]curl-tool_cb_soc.o, -
404           [.src]curl-tool_cb_wrt.o, [.src]curl-tool_cfgable.o, -
405           [.src]curl-tool_convert.o, [.src]curl-tool_dirhie.o, -
406           [.src]curl-tool_doswin.o, [.src]curl-tool_easysrc.o, -
407           [.src]curl-tool_formparse.o, [.src]curl-tool_getparam.o, -
408           [.src]curl-tool_getpass.o, [.src]curl-tool_help.o, -
409           [.src]curl-tool_helpers.o, [.src]curl-tool_homedir.o, -
410           [.src]curl-tool_hugehelp.o, [.src]curl-tool_libinfo.o, -
411           [.src]curl-tool_mfiles.o, -
412           [.src]curl-tool_msgs.o, [.src]curl-tool_operate.o, -
413           [.src]curl-tool_operhlp.o, -
414           [.src]curl-tool_paramhlp.o, [.src]curl-tool_parsecfg.o, -
415           [.src]curl-tool_setopt.o, [.src]curl-tool_sleep.o, -
416           [.src]curl-tool_urlglob.o, [.src]curl-tool_util.o, -
417           [.src]curl-tool_vms.o, [.src]curl-tool_writeenv.o, -
418           [.src]curl-tool_writeout.o, [.src]curl-tool_xattr.o, -
419           [.src]curl-strtoofft.o, [.src]curl-strdup.o, [.src]curl-strcase.o, -
420           [.src]curl-nonblock.o, gnv_packages_vms:curlmsg.obj,-
421           sys$input:/opt
422gnv$libcurl/share
423gnv_packages_vms:curl_crtl_init.obj
424$   endif
425$ else
426$   curl_exe = "[.src]curl.exe"
427$   curl_dsf = "[.src]curl.dsf"
428$   curl_main = "[.packages.vms.''arch_name']tool_main.obj"
429$   curl_src = "[.packages.vms.''arch_name']curlsrc.olb"
430$   curl_lib = "[.packages.vms.''arch_name']curllib.olb"
431$   strcase = "strcase"
432$   nonblock = "nonblock"
433$   warnless = "warnless"
434$!
435$!  Extended parse style requires special quoting
436$!
437$   if (arch_name .nes. "VAX") .and. (parse_style .eqs. "EXTENDED")
438$   then
439$       strcase = """strcase"""
440$       nonblock = """nonblock"""
441$       warnless = """warnless"""
442$   endif
443$   if f$search(curl_exe) .eqs. ""
444$   then
445$       define/user gnv$libcurl 'gnv_libcurl_share'
446$       link'ldebug'/exe='curl_exe'/dsf='curl_dsf' -
447           'curl_main','curl_src'/lib, -
448           'curl_lib'/library/include=-
449           ('strcase','nonblock','warnless'),-
450           gnv_packages_vms:curlmsg.obj,-
451           sys$input:/opt
452gnv$libcurl/share
453gnv_packages_vms:curl_crtl_init.obj
454$   endif
455$ endif
456$!
457$!
458$!
459$! in6addr_missing so skip building:
460$! [.server]sws.o
461$! [.server]sockfilt.o
462$! [.server]tftpd.o
463$!
464$!
465$ target = "10-at-a-time"
466$ if f$search("[.docs.examples]''target'.o") .eqs. ""
467$ then
468$   write sys$output "examples not built"
469$   goto all_exit
470$ endif
471$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
472$ then
473$   define/user gnv$libcurl 'gnv_libcurl_share'
474$   link'ldebug'/exe=[.docs.examples]'target'.exe-
475    /dsf=[.docs.examples]'target'.dsf -
476    [.docs.examples]'target'.o,-
477    gnv$'target'.opt/opt,-
478    sys$input:/opt
479gnv$libcurl/share
480$ endif
481$!
482$!
483$ target = "anyauthput"
484$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
485$ then
486$   define/user gnv$libcurl 'gnv_libcurl_share'
487$   link'ldebug'/exe=[.docs.examples]'target'.exe-
488    /dsf=[.docs.examples]'target'.dsf -
489    [.docs.examples]'target'.o,-
490    gnv$'target'.opt/opt,-
491    sys$input:/opt
492gnv$libcurl/share
493$ endif
494$!
495$!
496$ target = "certinfo"
497$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
498$ then
499$   define/user gnv$libcurl 'gnv_libcurl_share'
500$   link'ldebug'/exe=[.docs.examples]'target'.exe-
501    /dsf=[.docs.examples]'target'.dsf -
502    [.docs.examples]'target'.o,-
503    gnv$'target'.opt/opt,-
504    sys$input:/opt
505gnv$libcurl/share
506$ endif
507$!
508$!
509$ target = "cookie_interface"
510$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
511$ then
512$   define/user gnv$libcurl 'gnv_libcurl_share'
513$   link'ldebug'/exe=[.docs.examples]'target'.exe-
514    /dsf=[.docs.examples]'target'.dsf -
515    [.docs.examples]'target'.o,-
516    gnv$'target'.opt/opt,-
517    sys$input:/opt
518gnv$libcurl/share
519$ endif
520$!
521$!
522$ target = "debug"
523$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
524$ then
525$   define/user gnv$libcurl 'gnv_libcurl_share'
526$   link'ldebug'/exe=[.docs.examples]'target'.exe-
527    /dsf=[.docs.examples]'target'.dsf -
528    [.docs.examples]'target'.o,-
529    gnv$'target'.opt/opt,-
530    sys$input:/opt
531gnv$libcurl/share
532$ endif
533$!
534$!
535$ target = "fileupload"
536$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
537$ then
538$   define/user gnv$libcurl 'gnv_libcurl_share'
539$   link'ldebug'/exe=[.docs.examples]'target'.exe-
540    /dsf=[.docs.examples]'target'.dsf -
541    [.docs.examples]'target'.o,-
542    gnv$'target'.opt/opt,-
543    sys$input:/opt
544gnv$libcurl/share
545$ endif
546$!
547$!
548$ target = "fopen"
549$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
550$ then
551$   define/user gnv$libcurl 'gnv_libcurl_share'
552$   link'ldebug'/exe=[.docs.examples]'target'.exe-
553    /dsf=[.docs.examples]'target'.dsf -
554    [.docs.examples]'target'.o,-
555    gnv$'target'.opt/opt,-
556    sys$input:/opt
557gnv$libcurl/share
558$ endif
559$!
560$!
561$target = "ftpget"
562$if f$search("[.docs.examples]''target'.exe") .eqs. ""
563$then
564$   define/user gnv$libcurl 'gnv_libcurl_share'
565$   link'ldebug'/exe=[.docs.examples]'target'.exe-
566    /dsf=[.docs.examples]'target'.dsf -
567    [.docs.examples]'target'.o,-
568    gnv$'target'.opt/opt,-
569    sys$input:/opt
570gnv$libcurl/share
571$endif
572$!
573$!
574$target = "ftpgetresp"
575$if f$search("[.docs.examples]''target'.exe") .eqs. ""
576$then
577$   define/user gnv$libcurl 'gnv_libcurl_share'
578$   link'ldebug'/exe=[.docs.examples]'target'.exe-
579    /dsf=[.docs.examples]'target'.dsf -
580    [.docs.examples]'target'.o,-
581    gnv$'target'.opt/opt,-
582    sys$input:/opt
583gnv$libcurl/share
584$endif
585$!
586$!
587$target = "ftpupload"
588$if f$search("[.docs.examples]''target'.exe") .eqs. ""
589$then
590$   define/user gnv$libcurl 'gnv_libcurl_share'
591$   link'ldebug'/exe=[.docs.examples]'target'.exe-
592    /dsf=[.docs.examples]'target'.dsf -
593    [.docs.examples]'target'.o,-
594    gnv$'target'.opt/opt,-
595    sys$input:/opt
596gnv$libcurl/share
597$endif
598$!
599$!
600$target = "getinfo"
601$if f$search("[.docs.examples]''target'.exe") .eqs. ""
602$then
603$   define/user gnv$libcurl 'gnv_libcurl_share'
604$   link'ldebug'/exe=[.docs.examples]'target'.exe-
605    /dsf=[.docs.examples]'target'.dsf -
606    [.docs.examples]'target'.o,-
607    gnv$'target'.opt/opt,-
608    sys$input:/opt
609gnv$libcurl/share
610$endif
611$!
612$!
613$target = "getinmemory"
614$if f$search("[.docs.examples]''target'.exe") .eqs. ""
615$then
616$   define/user gnv$libcurl 'gnv_libcurl_share'
617$   link'ldebug'/exe=[.docs.examples]'target'.exe-
618    /dsf=[.docs.examples]'target'.dsf -
619    [.docs.examples]'target'.o,-
620    gnv$'target'.opt/opt,-
621    sys$input:/opt
622gnv$libcurl/share
623$endif
624$!
625$!
626$target = "http-post"
627$if f$search("[.docs.examples]''target'.exe") .eqs. ""
628$then
629$   define/user gnv$libcurl 'gnv_libcurl_share'
630$   link'ldebug'/exe=[.docs.examples]'target'.exe-
631    /dsf=[.docs.examples]'target'.dsf -
632    [.docs.examples]'target'.o,-
633    gnv$'target'.opt/opt,-
634    sys$input:/opt
635gnv$libcurl/share
636$endif
637$!
638$!
639$target = "httpcustomheader"
640$if f$search("[.docs.examples]''target'.exe") .eqs. ""
641$then
642$   define/user gnv$libcurl 'gnv_libcurl_share'
643$   link'ldebug'/exe=[.docs.examples]'target'.exe-
644    /dsf=[.docs.examples]'target'.dsf -
645    [.docs.examples]'target'.o,-
646    gnv$'target'.opt/opt,-
647    sys$input:/opt
648gnv$libcurl/share
649$endif
650$!
651$!
652$target = "httpput"
653$if f$search("[.docs.examples]''target'.exe") .eqs. ""
654$then
655$   define/user gnv$libcurl 'gnv_libcurl_share'
656$   link'ldebug'/exe=[.docs.examples]'target'.exe-
657    /dsf=[.docs.examples]'target'.dsf -
658    [.docs.examples]'target'.o,-
659    gnv$'target'.opt/opt,-
660    sys$input:/opt
661gnv$libcurl/share
662$endif
663$!
664$!
665$target = "https"
666$if f$search("[.docs.examples]''target'.exe") .eqs. ""
667$then
668$   define/user gnv$libcurl 'gnv_libcurl_share'
669$   link'ldebug'/exe=[.docs.examples]'target'.exe-
670    /dsf=[.docs.examples]'target'.dsf -
671    [.docs.examples]'target'.o,-
672    gnv$'target'.opt/opt,-
673    sys$input:/opt
674gnv$libcurl/share
675$endif
676$!
677$!
678$target = "multi-app"
679$if f$search("[.docs.examples]''target'.exe") .eqs. ""
680$then
681$   define/user gnv$libcurl 'gnv_libcurl_share'
682$   link'ldebug'/exe=[.docs.examples]'target'.exe-
683    /dsf=[.docs.examples]'target'.dsf -
684    [.docs.examples]'target'.o,-
685    gnv$'target'.opt/opt,-
686    sys$input:/opt
687gnv$libcurl/share
688$endif
689$!
690$!
691$target = "multi-debugcallback"
692$if f$search("[.docs.examples]''target'.exe") .eqs. ""
693$then
694$   define/user gnv$libcurl 'gnv_libcurl_share'
695$   link'ldebug'/exe=[.docs.examples]'target'.exe-
696    /dsf=[.docs.examples]'target'.dsf -
697    [.docs.examples]'target'.o,-
698    gnv$'target'.opt/opt,-
699    sys$input:/opt
700gnv$libcurl/share
701$endif
702$!
703$!
704$target = "multi-double"
705$if f$search("[.docs.examples]''target'.exe") .eqs. ""
706$then
707$   define/user gnv$libcurl 'gnv_libcurl_share'
708$   link'ldebug'/exe=[.docs.examples]'target'.exe-
709    /dsf=[.docs.examples]'target'.dsf -
710    [.docs.examples]'target'.o,-
711    gnv$'target'.opt/opt,-
712    sys$input:/opt
713gnv$libcurl/share
714$endif
715$!
716$!
717$target = "multi-post"
718$if f$search("[.docs.examples]''target'.exe") .eqs. ""
719$then
720$   define/user gnv$libcurl 'gnv_libcurl_share'
721$   link'ldebug'/exe=[.docs.examples]'target'.exe-
722    /dsf=[.docs.examples]'target'.dsf -
723    [.docs.examples]'target'.o,-
724    gnv$'target'.opt/opt,-
725    sys$input:/opt
726gnv$libcurl/share
727$endif
728$!
729$!
730$target = "multi-single"
731$if f$search("[.docs.examples]''target'.exe") .eqs. ""
732$then
733$   define/user gnv$libcurl 'gnv_libcurl_share'
734$   link'ldebug'/exe=[.docs.examples]'target'.exe-
735    /dsf=[.docs.examples]'target'.dsf -
736    [.docs.examples]'target'.o,-
737    gnv$'target'.opt/opt,-
738    sys$input:/opt
739gnv$libcurl/share
740$endif
741$!
742$!
743$target = "persistent"
744$if f$search("[.docs.examples]''target'.exe") .eqs. ""
745$then
746$   define/user gnv$libcurl 'gnv_libcurl_share'
747$   link'ldebug'/exe=[.docs.examples]'target'.exe-
748    /dsf=[.docs.examples]'target'.dsf -
749    [.docs.examples]'target'.o,-
750    gnv$'target'.opt/opt,-
751    sys$input:/opt
752gnv$libcurl/share
753$endif
754$!
755$!
756$target = "post-callback"
757$if f$search("[.docs.examples]''target'.exe") .eqs. ""
758$then
759$   define/user gnv$libcurl 'gnv_libcurl_share'
760$   link'ldebug'/exe=[.docs.examples]'target'.exe-
761    /dsf=[.docs.examples]'target'.dsf -
762    [.docs.examples]'target'.o,-
763    gnv$'target'.opt/opt,-
764    sys$input:/opt
765gnv$libcurl/share
766$endif
767$!
768$!
769$target = "postit2"
770$if f$search("[.docs.examples]''target'.exe") .eqs. ""
771$then
772$   define/user gnv$libcurl 'gnv_libcurl_share'
773$   link'ldebug'/exe=[.docs.examples]'target'.exe-
774    /dsf=[.docs.examples]'target'.dsf -
775    [.docs.examples]'target'.o,-
776    gnv$'target'.opt/opt,-
777    sys$input:/opt
778gnv$libcurl/share
779$endif
780$!
781$!
782$target = "sendrecv"
783$if f$search("[.docs.examples]''target'.exe") .eqs. ""
784$then
785$   define/user gnv$libcurl 'gnv_libcurl_share'
786$   link'ldebug'/exe=[.docs.examples]'target'.exe-
787    /dsf=[.docs.examples]'target'.dsf -
788    [.docs.examples]'target'.o,-
789    gnv$'target'.opt/opt,-
790    sys$input:/opt
791gnv$libcurl/share
792$endif
793$!
794$!
795$target = "sepheaders"
796$if f$search("[.docs.examples]''target'.exe") .eqs. ""
797$then
798$   define/user gnv$libcurl 'gnv_libcurl_share'
799$   link'ldebug'/exe=[.docs.examples]'target'.exe-
800    /dsf=[.docs.examples]'target'.dsf -
801    [.docs.examples]'target'.o,-
802    gnv$'target'.opt/opt,-
803    sys$input:/opt
804gnv$libcurl/share
805$endif
806$!
807$!
808$target = "simple"
809$if f$search("[.docs.examples]''target'.exe") .eqs. ""
810$then
811$   define/user gnv$libcurl 'gnv_libcurl_share'
812$   link'ldebug'/exe=[.docs.examples]'target'.exe-
813    /dsf=[.docs.examples]'target'.dsf -
814    [.docs.examples]'target'.o,-
815    gnv$'target'.opt/opt,-
816    sys$input:/opt
817gnv$libcurl/share
818$endif
819$!
820$!
821$target = "simplepost"
822$if f$search("[.docs.examples]''target'.exe") .eqs. ""
823$then
824$   define/user gnv$libcurl 'gnv_libcurl_share'
825$   link'ldebug'/exe=[.docs.examples]'target'.exe-
826    /dsf=[.docs.examples]'target'.dsf -
827    [.docs.examples]'target'.o,-
828    gnv$'target'.opt/opt,-
829    sys$input:/opt
830gnv$libcurl/share
831$endif
832$!
833$!
834$target = "simplessl"
835$if f$search("[.docs.examples]''target'.exe") .eqs. ""
836$then
837$   define/user gnv$libcurl 'gnv_libcurl_share'
838$   link'ldebug'/exe=[.docs.examples]'target'.exe-
839    /dsf=[.docs.examples]'target'.dsf -
840    [.docs.examples]'target'.o,-
841    gnv$'target'.opt/opt,-
842    sys$input:/opt
843gnv$libcurl/share
844$endif
845$!
846$! =============== End of docs/examples =========================
847$!
848$!
849$all_exit:
850$set def 'default_dir'
851$exit '$status'
852$!
853