1$! File: MAKE_PCSI_CURL_KIT_NAME.COM
2$!
3$! $Id$
4$!
5$! Calculates the PCSI kit name for use in building an installation kit.
6$! PCSI is HP's PolyCenter Software Installation Utility.
7$!
8$! The results are stored in as logical names so that other procedures
9$! can use them.
10$!
11$! Copyright 2009, John Malmberg
12$!
13$! Permission to use, copy, modify, and/or distribute this software for any
14$! purpose with or without fee is hereby granted, provided that the above
15$! copyright notice and this permission notice appear in all copies.
16$!
17$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
18$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
19$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
20$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
21$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
22$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
23$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
24$!
25$! 11-Jun-2009 J. Malmberg
26$!
27$!========================================================================
28$!
29$! Save default
30$ default_dir = f$environment("DEFAULT")
31$!
32$! Move to the base directories
33$ set def [--]
34$!
35$! Put things back on error.
36$ on warning then goto all_exit
37$!
38$! The producer is the name or common abbreviation for the entity that is
39$! making the kit.  It must be set as a logical name before running this
40$! procedure.
41$!
42$! HP documents the producer as the legal owner of the software, but for
43$! open source work, it should document who is creating the package for
44$! distribution.
45$!
46$ producer = f$trnlnm("GNV_PCSI_PRODUCER")
47$ if producer .eqs. ""
48$ then
49$   write sys$output "The logical name GNV_PCSI_PRODUCER needs to be defined."
50$   write sys$output "This should be set to the common abbreviation or name of"
51$   write sys$output "the entity creating this kit.  If you are an individual"
52$   write sys$output "then use your initials."
53$   goto all_exit
54$ endif
55$ producer_full_name = f$trnlnm("GNV_PCSI_PRODUCER_FULL_NAME")
56$ if producer_full_name .eqs. ""
57$ then
58$   write sys$output "The logical name GNV_PCSI_PRODUCER_FULL_NAME needs to"
59$   write sys$output "be defined.  This should be set to the full name of"
60$   write sys$output "the entity creating this kit.  If you are an individual"
61$   write sys$output "then use your name."
62$   write sys$output "EX: DEFINE GNV_PCSI_PRODUCER_FULL_NAME ""First M. Last"""
63$   goto all_exit
64$ endif
65$!
66$ write sys$output "*****"
67$ write sys$output "***** Producer = ''producer'"
68$ write sys$output "*****"
69$!
70$!
71$! Base is one of 'VMS', 'AXPVMS', 'I64VMS', 'VAXVMS' and indicates what
72$! binaries are in the kit.  A kit with just 'VMS' can be installed on all
73$! architectures.
74$!
75$ base = "VMS"
76$ arch_type = f$getsyi("ARCH_NAME")
77$ code = f$extract(0, 1, arch_type)
78$ if (code .eqs. "I") then base = "I64VMS"
79$ if (code .eqs. "V") then base = "VAXVMS"
80$ if (code .eqs. "A") then base = "AXPVMS"
81$!
82$!
83$ product = "curl"
84$!
85$!
86$! We need to get the version from curlver_h.  It will have a line like
87$! #define LIBCURL_VERSION "7.31.0"
88$!   or
89$! #define LIBCURL_VERSION "7.32.0-20130731".
90$!
91$! The dash indicates that this is a daily pre-release.
92$!
93$!
94$ open/read/error=version_loop_end vhf [.include.curl]curlver.h
95$ version_loop:
96$   read vhf line_in
97$   if line_in .eqs. "" then goto version_loop
98$   if f$locate("#define LIBCURL_VERSION ", line_in) .ne. 0
99$   then
100$       goto version_loop
101$   endif
102$   raw_version = f$element(2," ", line_in) - """" - """"
103$ version_loop_end:
104$ close vhf
105$!
106$!
107$ eco_level = ""
108$ if f$search("''default_dir'vms_eco_level.h") .nes. ""
109$ then
110$   open/read ef 'default_dir'vms_eco_level.h
111$ecolevel_loop:
112$       read/end=ecolevel_loop_end ef line_in
113$       prefix = f$element(0, " ", line_in)
114$       if prefix .nes. "#define" then goto ecolevel_loop
115$       key = f$element(1, " ", line_in)
116$       value = f$element(2, " ", line_in) - """" - """"
117$       if key .eqs. "VMS_ECO_LEVEL"
118$       then
119$           eco_level = "''value'"
120$           if eco_level .eqs. "0"
121$           then
122$               eco_level = ""
123$           else
124$               eco_level = "E" + eco_level
125$           endif
126$           goto ecolevel_loop_end
127$       endif
128$       goto ecolevel_loop
129$ecolevel_loop_end:
130$   close ef
131$ endif
132$!
133$!
134$! This translates to V0732-0 or D0732-0
135$! We encode the snapshot date into the version as an ECO since a daily
136$! can never have an ECO.
137$!
138$! version_type = 'V' for a production release, and 'D' for a build from a
139$! daiy snapshot of the curl source.
140$ majorver = f$element(0, ".", raw_version)
141$ minorver = f$element(1, ".", raw_version)
142$ raw_update = f$element(2, ".", raw_version)
143$ update = f$element(0, "-", raw_update)
144$ if update .eqs. "0" then update = ""
145$ daily_tag = f$element(1, "-", raw_update)
146$ vtype = "V"
147$ patch = ""
148$ if daily_tag .nes. "-"
149$ then
150$   vtype = "D"
151$   daily_tag_len = f$length(daily_tag)
152$   daily_tag = f$extract(4, daily_tag_len - 4, daily_tag)
153$   patch = vtype + daily_tag
154$   product = product + "_d"
155$ else
156$   daily_tag = ""
157$   if eco_level .nes. "" then patch = eco_level
158$ endif
159$!
160$!
161$ version_fao = "!2ZB!2ZB"
162$ mmversion = f$fao(version_fao, 'majorver', 'minorver')
163$ version = vtype + "''mmversion'"
164$ if update .nes. "" .or. patch .nes. ""
165$ then
166$!  The presence of a patch implies an update
167$   if update .eqs. "" .and. patch .nes. "" then update = "0"
168$   version = version + "-" + update + patch
169$   fversion = version
170$ else
171$   fversion = version
172$   version = version + "-"
173$ endif
174$!
175$! Kit type 1 is complete kit, the only type that this procedure will make.
176$ kittype = 1
177$!
178$! Write out a logical name for the resulting base kit name.
179$ name = "''producer'-''base'-''product'-''version'-''kittype'"
180$ define GNV_PCSI_KITNAME "''name'"
181$ fname = "''product'-''fversion'"
182$ define GNV_PCSI_FILENAME_BASE "''fname'"
183$ write sys$output "*****"
184$ write sys$output "***** GNV_PCSI_KITNAME = ''name'."
185$ write sys$output "***** GNV_PCSI_FILENAME_BASE = ''fname'."
186$ write sys$output "*****"
187$!
188$all_exit:
189$ set def 'default_dir'
190$ exit '$status'
191