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