1$! File: setup_gnv_curl_build.com
2$!
3$! $Id$
4$!
5$! Set up build environment for building Curl under GNV on VMS.
6$!
7$! GNV needs some files moved into the other directories to help with
8$! the configure script and the build.
9$!
10$! Copyright 2009, John Malmberg
11$!
12$! Permission to use, copy, modify, and/or distribute this software for any
13$! purpose with or without fee is hereby granted, provided that the above
14$! copyright notice and this permission notice appear in all copies.
15$!
16$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
17$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
18$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
19$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
21$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
22$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23$!
24$! 30-May-2009  J. Malmberg
25$!
26$!=======================================================================
27$!
28$! Save this so we can get back.
29$ default_dir = f$environment("default")
30$!
31$! Move to where the Configure script is.
32$ set def [--]
33$!
34$! Get the path to where the Configure script is.
35$ base_dir = f$environment("default")
36$!
37$! Allow arguments to be grouped together with comma or separated by spaces
38$! Do no know if we will need more than 8.
39$ args = "," + p1 + "," + p2 + "," + p3 + "," + p4 + ","
40$ args = args + p5 + "," + p6 + "," + p7 + "," + p8 + ","
41$!
42$! Provide lower case version to simplify parsing.
43$ args_lower = f$edit(args, "LOWERCASE,COLLAPSE")
44$!
45$ args_len = f$length(args)
46$ args_lower_len = f$length(args_lower)
47$!
48$ tests = 0
49$ if f$locate(",test", args_lower) .lt. args_lower_len
50$ then
51$   tests = 1
52$ endif
53$!
54$ examples = 0
55$ if f$locate(",exam", args_lower) .lt. args_lower_len
56$ then
57$   examples = 1
58$ endif
59$!
60$! We want detailed build logs.
61$ clist = "/list/show=(expan,includ)"
62$!
63$! We want full symbol names in exact case.  Need a commmon
64$! repository for all directories.
65$ cnames = "/names=(shortened,as_is)/repository=''base_dir'"
66$!
67$! Set the compiler options for GNV CC wrapper to inherit.
68$ cc :== cc'clist''cnames'/nested_include_directory=none
69$ cxx :== cxx'clist''cnames'/nested_include_directory=none
70$ pointer_size = "32"
71$! Note 64 bit pointers requires all libraries to either have
72$! 64 bit pointers or have #pragma directives.
73$! Currently building curl on VMS with 64 bit pointers does not work.
74$!
75$! A logical name to make it easier to find some of the hacks.
76$ define/job gnv_hacks 'base_dir'
77$!
78$! A logical name to find the [.packages.vms] directory where we started.
79$ define/job gnv_packages_vms 'default_dir'
80$!
81$! Kerberos headers:
82$ if f$trnlnm("gssapi") .eqs. ""
83$ then
84$   if f$search("sys$sysroot:[kerberos]include.dir") .nes. ""
85$   then
86$       define/job gssapi sys$sysroot:[kerberos.include]
87$   endif
88$ endif
89$!
90$! OpenSSL headers
91$ if f$trnlnm("openssl") .eqs. ""
92$ then
93$   if f$trnlnm("ssl$include") .nes. ""
94$   then
95$       define/job openssl ssl$include:
96$   endif
97$ endif
98$!
99$! C compiler include path.
100$ define/job decc$system_include prj_root:[.include.curl],-
101    [-.packages.vms],-
102    ssl$include:,gnv$gnu:[usr.include],-
103    gnv$gnu:[usr.include.libz],gnv$gnu:[include],-
104    gnv$zlib_include:,-
105    sys$sysroot:[kerberos.include]
106$!
107$! Set up a include list for the compiler to find all the header files
108$! that they need.
109$!
110$ define/job decc$user_include src_root:[.include.curl]
111$ define ssl_lib sys$library:
112$!
113$! Calculate what is needed in the option files
114$ libzshr_line = ""
115$ try_shr = "gnv$libzshr''pointer_size'"
116$ if f$search(try_shr) .nes. "" then libzshr_line = "''try_shr'/share"
117$ if (libzshr_line .eqs. "")
118$ then
119$   try_shr = "sys$share:" + try_shr
120$   if f$search("''try_shr'.exe") .nes. ""
121$   then
122$       libzshr_line = "''try_shr'/share"
123$   endif
124$ endif
125$!
126$! Kerberos
127$ gssrtlshr_line = ""
128$ try_shr = "sys$share:gss$rtl"
129$ if f$search("''try_shr'.exe") .nes. ""
130$ then
131$   gssrtlshr_line = "''try_shr'/share"
132$ endif
133$!
134$! HP OpenSSL
135$ libcryptoshr_line = ""
136$ try_shr = "sys$share:ssl$libcrypto_shr''pointer_size'"
137$ if f$search("''try_shr'.exe") .nes. ""
138$ then
139$   libcryptoshr_line = "''try_shr'/share"
140$ endif
141$!
142$ libsslshr_line = ""
143$ try_shr = "sys$share:ssl$libssl_shr''pointer_size'"
144$ if f$search("''try_shr'.exe") .nes. ""
145$ then
146$   libsslshr_line = "''try_shr'/share"
147$ endif
148$!
149$!
150$! Copy over the gnv$conftest* files to base directory.
151$!-----------------------------------------------------
152$ copy 'default_dir'gnv_conftest.c_first 'base_dir'gnv$conftest.c_first
153$ create 'base_dir'gnv$conftest.opt
154$ open/append opt 'base_dir'gnv$conftest.opt
155$ if libzshr_line .nes. "" then write opt libzshr_line
156$ if libcryptoshr_line .nes. "" then write opt libcryptoshr_line
157$ if libsslshr_line .nes. "" then write opt libsslshr_line
158$ close opt
159$ purge 'base_dir'gnv$conftest.*
160$ rename 'base_dir'gnv$conftest.* ;1
161$!
162$!
163$!
164$! GNV helper files for building the test curl binary.
165$!-----------------------------------------------
166$ create [.src]gnv$curl.opt
167$ open/append opt [.src]gnv$curl.opt
168$ write opt "gnv_packages_vms:curlmsg.obj"
169$ if libzshr_line .nes. "" then write opt libzshr_line
170$ if gssrtlshr_line .nes. "" then write opt gssrtlshr_line
171$ if libcryptoshr_line .nes. "" then write opt libcryptoshr_line
172$ if libsslshr_line .nes. "" then write opt libsslshr_line
173$ close opt
174$ purge [.src]gnv$*.*
175$ rename [.src]gnv$*.* ;1
176$!
177$!
178$! Create the libcurl
179$!------------------------------------------------------
180$ create 'default_dir'gnv_libcurl_linker.opt
181$ open/append opt 'default_dir'gnv_libcurl_linker.opt
182$ if libzshr_line .nes. "" then write opt libzshr_line
183$ if gssrtlshr_line .nes. "" then write opt gssrtlshr_line
184$ if libcryptoshr_line .nes. "" then write opt libcryptoshr_line
185$ if libsslshr_line .nes. "" then write opt libsslshr_line
186$ close opt
187$!
188$!
189$! Create the template linker file
190$!---------------------------------
191$ create 'default_dir'gnv_template_linker.opt
192$ open/append opt 'default_dir'gnv_template_linker.opt
193$ write opt "gnv_vms_common:vms_curl_init_unix.obj"
194$ if libzshr_line .nes. "" then write opt libzshr_line
195$ if gssrtlshr_line .nes. "" then write opt gssrtlshr_line
196$ if libcryptoshr_line .nes. "" then write opt libcryptoshr_line
197$ if libsslshr_line .nes. "" then write opt libsslshr_line
198$ close opt
199$!
200$! Copy over the gnv$*.opt files for [.docs.examples]
201$!----------------------------------------------------
202$ if examples .ne. 0
203$ then
204$   example_apps = "10-at-a-time,anyauthput,certinfo,cookie_interface,debug"
205$   example_apps = example_apps + ",fileupload,fopen,ftpget,ftpgetresp"
206$   example_apps = example_apps + ",ftpupload,getinfo,getinmemory"
207$   example_apps = example_apps + ",http-post,httpcustomheader,httpput"
208$   example_apps = example_apps + ",https,multi-app,multi-debugcallback"
209$   example_apps = example_apps + ",multi-double,multi-post,multi-single"
210$   example_apps = example_apps + ",persistant,post-callback,postit2"
211$   example_apps = example_apps + ",sendrecv,sepheaders,simple,simplepost"
212$   example_apps = example_apps + ",simplessl"
213$!
214$   i = 0
215$example_loop:
216$      ap_name = f$element(i, ",", example_apps)
217$      if ap_name .eqs. "," then goto example_loop_end
218$      if ap_name .eqs. "" then goto example_loop_end
219$      copy 'default_dir'gnv_template_linker.opt -
220           [.docs.examples]gnv$'ap_name'.opt
221$      i = i + 1
222$      goto example_loop
223$example_loop_end:
224$!
225$! clean up the copy.
226$    purge [.docs.examples]gnv$*.opt
227$    rename [.docs.examples]gnv$*.opt ;1
228$ endif
229$!
230$!
231$ if tests .ne. 0
232$ then
233$   libtest_apps = "lib500,lib501,lib502,lib503,lib504,lib505,lib506,lib507"
234$   libtest_apps = libtest_apps + ",lib508,lib510,lib511,lib512,lib513,lib514"
235$   libtest_apps = libtest_apps + ",lib515,lib516,lib517,lib518,lib519,lib520"
236$   libtest_apps = libtest_apps + ",lib521,lib523,lib524,lib525,lib526,lib527"
237$   libtest_apps = libtest_apps + ",lib529,lib530,lib532,lib533,lib536,lib537"
238$   libtest_apps = libtest_apps + ",lib539,lib540,lib541,lib542,lib543,lib544"
239$   libtest_apps = libtest_apps + ",lib545,lib547,lib548,lib549,lib552,lib553"
240$   libtest_apps = libtest_apps + ",lib554,lib555,lib556,lib557,lib558,lib559"
241$   libtest_apps = libtest_apps + ",lib560,lib562,lib564"
242$   i = 0
243$libtest_loop:
244$     ap_name = f$element(i, ",", libtest_apps)
245$     if ap_name .eqs. "," then goto libtest_loop_end
246$     if ap_name .eqs. "" then goto libtest_loop_end
247$     copy 'default_dir'gnv_template_linker.opt -
248          [.tests.libtest]gnv$'ap_name'.opt
249$     i = i + 1
250$     goto libtest_loop
251$libtest_loop_end:
252$!
253$! clean up the copy.
254$   purge [.tests.libtest]gnv$*.opt
255$   rename [.tests.libtest]gnv$*.opt ;1
256$ endif
257$!
258$!
259$! Build the Message file.
260$!--------------------------
261$ if f$search("[.packages.vms]curlmsg.obj") .eqs. ""
262$ then
263$   message [.packages.vms]curlmsg.msg/object=[.packages.vms]
264$ endif
265$ if f$search("gnv$curlmsg.exe") .eqs. ""
266$ then
267$   link/share=gnv$curlmsg.exe [.packages.vms]curlmsg.obj
268$ endif
269$!
270$!
271$!
272$! Need to build the common init module.
273$!-------------------------------------------
274$ init_obj = "[.packages.vms]curl_crtl_init.obj"
275$ if f$search(init_obj) .eqs. ""
276$ then
277$   cc'cflags' 'default_dir'curl_crtl_init.c/obj='init_obj'
278$   purge 'init_obj'
279$   rename 'init_obj' ;1
280$ endif
281$!
282$all_exit:
283$!
284$ set def 'default_dir'
285$!
286$! Verify can break things in bash, especially in Configure scripts.
287$ set nover
288$ exit
289