1$! File: Build_GNV_CURL_PCSI_DESC.COM 2$! 3$! $Id$ 4$! 5$! Build the *.pcsi$text file in the following sections: 6$! Required software dependencies. 7$! install/upgrade/postinstall steps. 8$! 1. Duplicate filenames need an alias procedure. (N/A for curl) 9$! 2. ODS-5 filenames need an alias procedure. (N/A for curl) 10$! 3. Special alias links for executables (curl. -> curl.exe) 11$! if a lot, then an alias procedure is needed. 12$! 4. Rename the files to lowercase. 13$! Move Release Notes to destination 14$! Source kit option 15$! Create directory lines 16$! Add file lines for curl. 17$! Add Link alias procedure file (N/A for curl) 18$! Add [.SYS$STARTUP]curl_startup file 19$! Add Release notes file. 20$! 21$! The file PCSI_GNV_CURL_FILE_LIST.TXT is read in to get the files other 22$! than the release notes file and the source backup file. 23$! 24$! The PCSI system can really only handle ODS-2 format filenames and 25$! assumes that there is only one source directory. It also assumes that 26$! all destination files with the same name come from the same source file. 27$! Fortunately CURL does not trip most of these issues, so those steps 28$! above are marked N/A. 29$! 30$! A rename action section is needed to make sure that the files are 31$! created in the GNV$GNU: in the correct case, and to create the alias 32$! link [usr.bin]curl. for [usr.bin]curl.exe. 33$! 34$! Copyright 2009, John Malmberg 35$! 36$! Permission to use, copy, modify, and/or distribute this software for any 37$! purpose with or without fee is hereby granted, provided that the above 38$! copyright notice and this permission notice appear in all copies. 39$! 40$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 41$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 42$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 43$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 44$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 45$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT 46$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 47$! 48$! 49$! 15-Jun-2009 J. Malmberg 50$! 51$!=========================================================================== 52$! 53$ kit_name = f$trnlnm("GNV_PCSI_KITNAME") 54$ if kit_name .eqs. "" 55$ then 56$ write sys$output "@MAKE_PCSI_CURL_KIT_NAME.COM has not been run." 57$ goto all_exit 58$ endif 59$ producer = f$trnlnm("GNV_PCSI_PRODUCER") 60$ if producer .eqs. "" 61$ then 62$ write sys$output "@MAKE_PCSI_CURL_KIT_NAME.COM has not been run." 63$ goto all_exit 64$ endif 65$ filename_base = f$trnlnm("GNV_PCSI_FILENAME_BASE") 66$ if filename_base .eqs. "" 67$ then 68$ write sys$output "@MAKE_PCSI_CURL_KIT_NAME.COM has not been run." 69$ goto all_exit 70$ endif 71$! 72$! 73$! Parse the kit name into components. 74$!--------------------------------------- 75$ producer = f$element(0, "-", kit_name) 76$ base = f$element(1, "-", kit_name) 77$ product = f$element(2, "-", kit_name) 78$ mmversion = f$element(3, "-", kit_name) 79$ majorver = f$extract(0, 3, mmversion) 80$ minorver = f$extract(3, 2, mmversion) 81$ updatepatch = f$element(4, "-", kit_name) 82$ if updatepatch .eqs. "-" then updatepatch = "" 83$! 84$! kit type of "D" means a daily build 85$ kit_type = f$edit(f$extract(0, 1, majorver), "upcase") 86$! 87$! 88$ product_line = "product ''producer' ''base' ''product'" 89$ if updatepatch .eqs. "" 90$ then 91$ product_name = " ''majorver'.''minorver'" 92$ else 93$ product_name = " ''majorver'.''minorver'-''updatepatch'" 94$ endif 95$ product_line = product_line + " ''product_name' full;" 96$!write sys$output product_line 97$! 98$! 99$! 100$! Create the file as a VMS text file. 101$!---------------------------------------- 102$ base_file = kit_name 103$ create 'base_file'.pcsi$desc 104$! 105$! 106$! Start building file. 107$!---------------------- 108$ open/append pdsc 'base_file'.pcsi$desc 109$! 110$ write pdsc product_line 111$! 112$! Required product dependencies. 113$!---------------------------------- 114$ vmsprd = "DEC" 115$ if base .eqs. "I64VMS" then vmsprd = "HP" 116$ vsiprd = "VSI" 117$! 118$ write pdsc " software ''vmsprd' ''base' VMS ;" 119$ arch_type = f$getsyi("ARCH_NAME") 120$ node_swvers = f$getsyi("node_swvers") 121$ vernum = f$extract(1, f$length(node_swvers), node_swvers) 122$ majver = f$element(0, ".", vernum) 123$ minverdash = f$element(1, ".", vernum) 124$ minver = f$element(0, "-", minverdash) 125$ dashver = f$element(1, "-", minverdash) 126$ if dashver .eqs. "-" then dashver = "" 127$ vmstag = majver + minver + dashver 128$ code = f$extract(0, 1, arch_type) 129$ arch_code = f$extract(0, 1, arch_type) 130$ line_out = - 131 " if ((not <software ''vsiprd' ''base' VMS version minimum" + - 132 " ''node_swvers'>) and" + - 133 " (not <software ''vmsprd' ''base' VMS version minimum ''node_swvers'>));" 134$ write pdsc line_out 135$ write pdsc " error NEED_VMS''vmstag';" 136$ write pdsc " end if;" 137$! 138$write pdsc " software VMSPORTS ''base' ZLIB ;" 139$write pdsc - 140 " if (not <software VMSPORTS ''base' ZLIB version minimum V1.2-8>) ;" 141$write pdsc " error NEED_ZLIB;" 142$write pdsc " end if;" 143$! 144$! 145$! 146$! install/upgrade/postinstall steps. 147$!----------------------------------- 148$! 1. Duplicate filenames need an alias procedure. (N/A for curl) 149$! 2. ODS-5 filenames need an alias procedure. (N/A for curl) 150$! 3. Special alias links for executables (curl. -> curl.exe) 151$! if a lot, then an alias procedure is needed. 152$! 4. Rename the files to lowercase. 153$! 154$! 155$! Alias links needed. 156$!------------------------- 157$ add_alias_lines = "" 158$ rem_alias_lines = "" 159$ line_out = "" 160$! 161$! Read through the file list to set up aliases and rename commands. 162$!--------------------------------------------------------------------- 163$ open/read flst pcsi_gnv_curl_file_list.txt 164$! 165$inst_alias_loop: 166$ read/end=inst_alias_loop_end flst line_in 167$ line_in = f$edit(line_in,"compress,trim,uncomment") 168$ if line_in .eqs. "" then goto inst_alias_loop 169$ pathname = f$element(0, " ", line_in) 170$ linkflag = f$element(1, " ", line_in) 171 172$ if linkflag .nes. "->" then goto inst_alias_write 173$! 174$ linktarget = f$element(2, " ", line_in) 175$ if kit_type .eqs. "D" 176$ then 177$ old_start = f$locate("[gnv.usr", pathname) 178$ if old_start .lt. f$length(pathname) 179$ then 180$ pathname = "[gnv.beta" + pathname - "[gnv.usr" 181$ linktarget = "[gnv.beta" + linktarget - "[gnv.usr" 182$ endif 183$ endif 184$ nlink = "pcsi$destination:" + pathname 185$ ntarg = "pcsi$destination:" + linktarget 186$ new_add_alias_line = - 187 """if f$search(""""''nlink'"""") .eqs. """""""" then" + - 188 " set file/enter=''nlink' ''ntarg'""" 189$ if add_alias_lines .nes. "" 190$ then 191$ add_alias_lines = add_alias_lines + "," + new_add_alias_line 192$ else 193$ add_alias_lines = new_add_alias_line 194$ endif 195$! 196$ new_rem_alias_line = - 197 """if f$search(""""''nlink'"""") .nes. """""""" then" + - 198 " set file/remove ''nlink';""" 199$ if rem_alias_lines .nes. "" 200$ then 201$ rem_alias_lines = rem_alias_lines + "," + new_rem_alias_line 202$ else 203$ rem_alias_lines = new_rem_alias_line 204$ endif 205$! 206$ goto inst_alias_loop 207$! 208$inst_alias_write: 209$! 210$! execute install / remove 211$ write pdsc " execute install (" 212$! add aliases 213$ i = 0 214$ex_ins_loop: 215$ line = f$element(i, ",", add_alias_lines) 216$ i = i + 1 217$ if line .eqs. "" then goto ex_ins_loop 218$ if line .eqs. "," then goto ex_ins_loop_end 219$ if line_out .nes. "" then write pdsc line_out,"," 220$ line_out = line 221$ goto ex_ins_loop 222$ex_ins_loop_end: 223$ write pdsc line_out 224$ line_out = "" 225$ write pdsc " )" 226$ write pdsc " remove (" 227$! remove aliases 228$ i = 0 229$ex_rem_loop: 230$ line = f$element(i, ",", rem_alias_lines) 231$ i = i + 1 232$ if line .eqs. "" then goto ex_rem_loop 233$ if line .eqs. "," then goto ex_rem_loop_end 234$ if line_out .nes. "" then write pdsc line_out,"," 235$ line_out = line 236$ goto ex_rem_loop 237$ex_rem_loop_end: 238$ write pdsc line_out 239$ line_out = "" 240$ write pdsc " ) ;" 241$! 242$! execute upgrade 243$ write pdsc " execute upgrade (" 244$ i = 0 245$ex_upg_loop: 246$ line = f$element(i, ",", rem_alias_lines) 247$ i = i + 1 248$ if line .eqs. "" then goto ex_upg_loop 249$ if line .eqs. "," then goto ex_upg_loop_end 250$ if line_out .nes. "" then write pdsc line_out,"," 251$ line_out = line 252$ goto ex_upg_loop 253$ex_upg_loop_end: 254$ write pdsc line_out 255$ line_out = "" 256$! remove aliases 257$ write pdsc " ) ;" 258$! 259$! execute postinstall 260$ write pdsc " execute postinstall (" 261$ if arch_code .nes. "V" 262$ then 263$ line_out = " ""set process/parse=extended""" 264$ endif 265$ i = 0 266$ex_pins_loop: 267$ line = f$element(i, ",", add_alias_lines) 268$ i = i + 1 269$ if line .eqs. "" then goto ex_pins_loop 270$ if line .eqs. "," then goto ex_pins_loop_end 271$ if line_out .nes. "" then write pdsc line_out,"," 272$ line_out = line 273$ goto ex_pins_loop 274$ex_pins_loop_end: 275$ if line_out .eqs. "" then line_out = " ""continue""" 276$! write pdsc line_out 277$! line_out = "" 278$! add aliases and follow with renames. 279$! 280$goto inst_dir 281$! 282$inst_dir_loop: 283$ read/end=inst_alias_loop_end flst line_in 284$ line_in = f$edit(line_in,"compress,trim,uncomment") 285$ if line_in .eqs. "" then goto inst_dir_loop 286$inst_dir: 287$ pathname = f$element(0, " ", line_in) 288$ if kit_type .eqs. "D" 289$ then 290$ if pathname .eqs. "[gnv]usr.dir" 291$ then 292$ pathname = "[gnv]beta.dir" 293$ else 294$ old_start = f$locate("[gnv.usr", pathname) 295$ if old_start .lt. f$length(pathname) 296$ then 297$ pathname = "[gnv.beta" + pathname - "[gnv.usr" 298$ endif 299$ endif 300$ endif 301$! 302$! Ignore the directory entries for now. 303$!----------------------------------------- 304$ filedir = f$parse(pathname,,,"DIRECTORY") 305$ if pathname .eqs. filedir then goto inst_dir_loop 306$! 307$! process .dir extensions for rename 308$! If this is not a directory then start processing files. 309$!------------------------- 310$ filetype = f$parse(pathname,,,"TYPE") 311$ filetype_u = f$edit(filetype, "upcase") 312$ filename = f$parse(pathname,,,"NAME") 313$ if filetype_u .nes. ".DIR" then goto inst_file 314$! 315$! process directory lines for rename. 316$!-------------------------------------- 317$ if line_out .nes. "" 318$ then 319$ write pdsc line_out,"," 320$ line_out = "" 321$ endif 322$ if arch_code .nes. "V" 323$ then 324$ if line_out .nes. "" then write pdsc line_out,"," 325$ line_out = " ""rename pcsi$destination:''pathname' ''filename'.DIR""" 326$ else 327$ if line_out .nes. "" then write pdsc line_out 328$ line_out = "" 329$ endif 330$ goto inst_dir_loop 331$! 332$! 333$! process file lines for rename 334$!--------------------------------- 335$inst_file_loop: 336$ read/end=inst_alias_loop_end flst line_in 337$ line_in = f$edit(line_in,"compress,trim,uncomment") 338$ if line_in .eqs. "" then goto inst_dir_loop 339$ pathname = f$element(0, " ", line_in) 340$ if kit_type .eqs. "D" 341$ then 342$ if pathname .eqs. "[gnv]usr.dir" 343$ then 344$ pathname = "[gnv]beta.dir" 345$ else 346$ old_start = f$locate("[gnv.usr", pathname) 347$ if old_start .lt. f$length(pathname) 348$ then 349$ pathname = "[gnv.beta" + pathname - "[gnv.usr" 350$ endif 351$ endif 352$ endif 353$! 354$! Filenames with $ in them are VMS special and do not need to be lowercase. 355$! -------------------------------------------------------------------------- 356$ if f$locate("$", pathname) .lt. f$length(pathname) then goto inst_file_loop 357$! 358$ filetype = f$parse(pathname,,,"TYPE") 359$ filename = f$parse(pathname,,,"NAME") + filetype 360$inst_file: 361$ if arch_code .nes. "V" 362$ then 363$ if line_out .nes. "" then write pdsc line_out,"," 364$ filetype = f$parse(pathname,,,"TYPE") 365$ filename = f$parse(pathname,,,"NAME") + filetype 366$ line_out = " ""rename pcsi$destination:''pathname' ''filename'""" 367$ else 368$ if line_out .nes. "" then write pdsc line_out 369$ line_out = "" 370$ endif 371$ goto inst_file_loop 372$! 373$inst_alias_loop_end: 374$! 375$write pdsc line_out 376$write pdsc " ) ;" 377$close flst 378$! 379$! Move Release Notes to destination 380$!------------------------------------- 381$write pdsc " information RELEASE_NOTES phase after ;" 382$! 383$! Source kit option 384$!--------------------- 385$write pdsc " option SOURCE default 0;" 386$write pdsc " directory ""[gnv.common_src]"" PROTECTION PUBLIC ;" 387$write pdsc - 388 " file ""[gnv.common_src]''filename_base'_original_src.bck""" 389$write pdsc - 390 " source [common_src]''filename_base'_original_src.bck ;" 391$if f$search("gnv$gnu:[vms_src]''filename_base'_vms_src.bck") .nes. "" 392$then 393$ write pdsc " directory ""[gnv.vms_src]"" PROTECTION PUBLIC ;" 394$ write pdsc " file ""[gnv.vms_src]''filename_base'_vms_src.bck""" 395$ write pdsc " source [vms_src]''filename_base'_vms_src.bck ;" 396$endif 397$write pdsc " end option;" 398$! 399$! 400$! Read through the file list again. 401$!---------------------------------- 402$open/read flst pcsi_gnv_curl_file_list.txt 403$! 404$! 405$! Create directory lines 406$!------------------------- 407$flst_dir_loop: 408$ read/end=flst_loop_end flst line_in 409$ line_in = f$edit(line_in,"compress,trim,uncomment") 410$ if line_in .eqs. "" then goto flst_dir_loop 411$! 412$ filename = f$element(0, " ", line_in) 413$ linkflag = f$element(1, " ", line_in) 414$ if linkflag .eqs. "->" then goto flst_dir_loop 415$! 416$! Ignore .dir extensions 417$!------------------------- 418$ filetype = f$edit(f$parse(filename,,,"TYPE"), "upcase") 419$ if filetype .eqs. ".DIR" then goto flst_dir_loop 420$! 421$ destname = filename 422$ if kit_type .eqs. "D" 423$ then 424$ old_start = f$locate("[gnv.usr", destname) 425$ if old_start .lt. f$length(destname) 426$ then 427$ destname = "[gnv.beta" + destname - "[gnv.usr" 428$ endif 429$ endif 430$! 431$! It should be just a directory then. 432$!------------------------------------- 433$ filedir = f$edit(f$parse(filename,,,"DIRECTORY"), "lowercase") 434$! If this is not a directory then start processing files. 435$!--------------------------------------------------------- 436$ if filename .nes. filedir then goto flst_file 437$! 438$ write pdsc " directory ""''destname'"" PROTECTION PUBLIC ;" 439$ goto flst_dir_loop 440$! 441$! 442$! Add file lines for curl. 443$!--------------------------- 444$flst_file_loop: 445$ read/end=flst_loop_end flst line_in 446$ line_in = f$edit(line_in,"compress,trim,uncomment") 447$ if line_in .eqs. "" then goto inst_file_loop 448$ filename = f$element(0, " ", line_in) 449$ destname = filename 450$ if kit_type .eqs. "D" 451$ then 452$ old_start = f$locate("[gnv.usr", destname) 453$ if old_start .lt. f$length(destname) 454$ then 455$ destname = "[gnv.beta" + destname - "[gnv.usr" 456$ endif 457$ endif 458$flst_file: 459$ srcfile = filename - "gnv." 460$ write pdsc " file ""''destname'"" " 461$ write pdsc " source ""''srcfile'"" ;" 462$ goto flst_file_loop 463$! 464$flst_loop_end: 465$ close flst 466$! 467$! Add Link alias procedure file (N/A for curl) 468$!------------------------------------------------ 469$! 470$! Add [.SYS$STARTUP]curl_startup file 471$!--------------------------------------- 472$ if kit_type .eqs. "D" 473$ then 474$ write pdsc " file ""[sys$startup]curl_daily_startup.com""" 475$ else 476$ write pdsc " file ""[sys$startup]curl_startup.com""" 477$ endif 478$ write pdsc " source [usr.lib]curl_startup.com ;" 479$! 480$! Add Release notes file. 481$!------------------------------ 482$ write pdsc - 483 " file ""[SYSHLP]''filename_base'.release_notes"" release notes ;" 484$! 485$! Close the product file 486$!------------------------ 487$ write pdsc "end product;" 488$! 489$close pdsc 490$! 491$all_exit: 492$ exit 493