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