Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/external/curl/packages/vms/curl_gnv_build_steps.txt
2066 views
1
From File: curl_gnv_build_steps.txt
2
3
Copyright (C) John Malmberg
4
5
Permission to use, copy, modify, and/or distribute this software for any
6
purpose with or without fee is hereby granted, provided that the above
7
copyright notice and this permission notice appear in all copies.
8
9
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
15
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17
SPDX-License-Identifier: ISC
18
19
Currently building Curl using GNV takes longer than building Curl via DCL.
20
The GNV procedure actually uses the same configure and makefiles that
21
Unix builds use.
22
23
Building CURL on OpenVMS using GNV requires GNV V2.1-2 or the updated
24
images that are available via anonymous FTP at encompasserve.org in the gnv
25
directory. It also requires the GNV Bash 4.2.45 kit as an update from the
26
same location or from the sourceforge.net GNV project.
27
28
The HP C 7.x compiler was used for building the GNV version.
29
30
The source kits are provided in backup savesets inside of the PCSI install kit.
31
32
Backup save sets are currently the only distribution medium that I can be
33
sure is installed on a target VMS system that will correctly unpack files
34
with extended character sets in them. You may need to adjust the ownership
35
of the restored files, since /Interchange/noconvert was not available at the
36
time that this document was written.
37
38
[gnv.common_src]curl_*_original_src.bck is the original source of the curl kit
39
as provided by the curl project. [gnv.vms_src]curl-*_vms_src.bck, if present,
40
has the OpenVMS specific files that are used for building that are not yet in
41
the curl source kits for that release distributed https://curl.se
42
43
These backup savesets should be restored to different directory trees on
44
an ODS-5 volume(s) which are referenced by concealed rooted logical names.
45
46
SRC_ROOT: is for the source files common to all platforms.
47
VMS_ROOT: is for the source files that are specific to OpenVMS.
48
Note, you should create the VMS_ROOT: directory tree even if it is
49
initially empty. This is where you should put edits if you are
50
making changes.
51
LCL_ROOT: is manually created to have the same base and sub-directories as
52
SRC_ROOT: and VMS_ROOT:
53
54
The logical name REF_ROOT: may be defined to be a search list for
55
VMS_ROOT:,SRC_ROOT:
56
57
The logical name PRJ_ROOT: is defined to be a search list for
58
LCL_ROOT:,VMS_ROOT:,SRC_ROOT:
59
60
For the make install process to work, it must have write access to the
61
directories referenced by the GNU: logical name.
62
63
In future releases of GNV, and with GNV Bash 4.3.30 installed, this name
64
should be GNV$GNU:
65
66
As directly updating those directories would probably be disruptive to other
67
users of the system and require elevated privilege, this can be handled by
68
creating a separate directory tree to install into which can be referenced
69
by the concealed rooted logical name new_gnu:. A concealed logical name of
70
OLD_GNU: can be set up to reference the real GNV directory tree.
71
72
Then a local copy of the GNU/GNV$GNU logical names can be set up as a search
73
list such as NEW_GNU:,OLD_GNU:
74
75
The directory NEW_GNU:[usr] should be created. The make install phase should
76
create all the other directories.
77
78
The make install process may abort if curl is already because it can not
79
uninstall the older version of curl because it does not have permission.
80
81
The file stage_curl_install.com is used set up a new_gnu: directory tree
82
for testing. The PCSI kitting procedure uses these files as input.
83
84
These files do not create the directories in the VMS_ROOT and LCL_ROOT
85
directory trees. You can create them with commands similar to:
86
87
$ create/dir lcl_root:[curl]/prot=w:re
88
$ copy src_root:[curl...]*.dir -
89
lcl_root:[curl...]/prot=(o:rwed,w:re)
90
$ create/dir vms_root:[curl]/prot=w:re
91
$ copy src_root:[curl...]*.dir -
92
vms_root:[curl...]/prot=(o:rwed,w:re)
93
94
One of the ways with to protect the source from being modified is to have
95
the directories under src_root: owned by a user or resource where the build
96
username only has read access to it.
97
98
99
Note to builders:
100
101
GNV currently has a bug where configure scripts take a long time to run.
102
Some of the configure steps take a while to complete, and on a 600 Mhz
103
DS10 with IDE disks, taking an hour to run the CURL configure is normal.
104
105
The following messages can be ignored and may get fixed in a future version
106
of GNV. The GNV$*.OPT files are used to find the libraries as many have
107
different names on VMS than on Unix. The Bash environment variable
108
GNV_CC_QUALIFIERS can override all other settings for the C Compiler.
109
110
? cc: No support for switch -warnprotos
111
? cc: Unrecognized file toomanyargs
112
? cc: Warning: library "ssl" not found
113
? cc: Warning: library "crypto" not found
114
? cc: Warning: library "gssapi" not found
115
? cc: Warning: library "z" not found
116
u unimplemented switch - ignored
117
118
119
With these search lists set up and the properly, curl can be built by
120
setting your default to PRJ_ROOT:[curl.packages.vms] and then issuing
121
either the command:
122
123
$ @pcsi_product_gnv_curl.com
124
125
or
126
127
$ @build_gnv_curl.com.
128
129
The GNV configure procedure takes considerably longer than the DCL build
130
procedure takes. It is of use for testing the GNV build environment, and
131
may not have been kept up to date.
132
133
The pcsi_product_gnv_curl.com needs the following logical names which
134
are described in the section below:
135
136
gnv_pcsi_producer
137
gnv_pcsi_producer_full_name
138
stage_root
139
vms_root1 (Optional if vms_root is on a NFS volume)
140
src_root1 (Optional if src_root is on a NFS volume)
141
142
The pcsi_product_gnv_curl.com is described in more detail below. It does
143
the following steps. The build steps are only done if they are needed to
144
allow using either DCL or GNV based building procedures.
145
146
$ @build_vms list
147
148
$ @gnv_link_curl.com
149
150
$ @build_gnv_curl_release_notes.com
151
152
$ @backup_gnv_curl_src.com
153
154
$ @build_gnv_curl_pcsi_desc.com
155
156
$ @build_gnv_curl_pcsi_text.com
157
158
$ @stage_curl_install remove
159
$ @stage_curl_install
160
161
Then builds the kit.
162
163
The build_gnv_curl.com command procedure does the following:
164
165
$ @setup_gnv_curl_build.com
166
167
$ bash gnv_curl_configure.sh
168
169
$ @clean_gnv_curl.com
170
171
$ bash make_gnv_curl_install.sh
172
173
$ @gnv_link_curl.com
174
175
$ @stage_curl_install.com
176
177
$ purge new_gnu:[*...]/log
178
179
To clean up after a GNV based build to start over, the following commands are
180
used:
181
182
$ bash
183
bash$ cd ../..
184
bash$ make clean
185
bash$ exit
186
187
Then run the @clean_gnv_curl.com. Use the parameter "realclean" if you are
188
going to run the setup_gnv_curl_build.com and configure script again.
189
190
$ @clean_gnv_curl.com realclean
191
192
If new public symbols have been added, adjust the file gnv_libcurl_symbols.opt
193
to have the new symbols. If the symbols are longer than 32 characters,
194
then they will need to have the original be exact case CRC shortened and
195
an alias in upper case with CRC shortened, in addition to having an exact
196
case truncated alias and an uppercase truncated alias.
197
198
The *.EXE files are not moved to the new_gnu: directory.
199
200
After you are satisfied with the results of your build, you can move the
201
files from new_gnu: to old_gnu: at your convenience.
202
203
Building a PCSI kit for an architecture takes the following steps after
204
making sure that you have a working build environment.
205
206
Note that it requires manually creating two logical names as described
207
below. It is intentional that they be manually set. This is for
208
branding the PCSI kit based on who is making the kit.
209
210
1. Make sure that you have a staging directory that can be referenced
211
by the path STAGE_ROOT:[KIT]
212
213
2. Edit the file curl_release_note_start.txt or other text files to
214
reflect any changes.
215
216
3. Define the logical name GNV_PCSI_PRODUCER to indicate who is making
217
the distribution. For making updates to an existing open source
218
kit you may need to keep the producer the same.
219
220
4. Define the logical name GNV_PCSI_PRODUCER_FULL_NAME to be your full
221
name or full name of your company.
222
223
5. If you are producing an update kit, then update the file
224
vms_eco_level.h by changing the value for the VMS_ECO_LEVEL macro.
225
This file is currently only used in building the PCSI kit.
226
227
6. Edit the file PCSI_GNV_CURL_FILE_LIST.TXT if there are new files added
228
to the kit. These files should all be ODS-2 legal filenames and
229
directories.
230
231
A limitation of the PCSI kitting procedure is that when selecting files,
232
it tends to ignore the directory structure and assumes that all files
233
with the same name are the same file, so every file placed in the kit
234
must have a unique name. Then a procedure needs to be added to the kit
235
to create an alias link on install and remove the link on remove.
236
237
Since at this time curl does not need this alias procedure, the steps
238
to automatically build it are not included here.
239
240
While newer versions of PCSI can support ODS-5 filenames, not all versions
241
of PCSI on systems that have ODS-5 filenames do. So as a post install
242
step, the PCSI kit built by these steps does a rename to the correct
243
case as a post install step.
244
245
7. Edit the build_curl_pcsi_desc.com and build_curl_pcsi_text.com if you
246
have changed the version of ZLIB that curl is built against.
247
248
8. Prepare to backup the files for building the kit.
249
250
Note that if src_root: or vms_root: are NFS mounted disks, the
251
step of backing up the source files will probably hang or fail.
252
253
You need to copy the source files to VMS mounted disks and create
254
logical names SRC_ROOT1 and VMS_ROOT1 to work around this to
255
reference local disks. Make sure src_root1:[000000] and
256
vms_root1:[000000] exist and can be written to.
257
258
The command procedure compare_curl_source can be used to check
259
those directories and keep them up to date.
260
261
@compare_curl_source.com SRCBCK UPDATE
262
263
This compares the reference project source with the backup
264
staging directory for it and updates with any changes.
265
266
@compare_curl_source.com VMSBCK UPDATE
267
268
This compares the VMS specific source with the backup
269
staging directory for it and updates with any changes.
270
271
Leave off "UPDATE" to just check without doing any changes.
272
273
If you are not using NFS mounted disks and do not want to have a
274
separate directory for staging the sources for backup make sure
275
that src_root1: and vms_root1: do not exist.
276
277
9. Build the PCSI kit with @pcsi_product_gnv_curl.com
278
279
The following message is normal:
280
%PCSI-I-CANNOTVAL, cannot validate
281
EAGLE$DQA0:[stage_root.][kit]VMSPORTS-AXPVMS-CURL-V0731-0-1.PCSI;1
282
-PCSI-I-NOTSIGNED, product kit is not signed and therefore has
283
no manifest file
284
285
This will result in an uncompressed kit for the target platform.
286
On Alpha and Integrity, the pcsi_product_gnv_curl.com can be used with
287
the "COMPRESSED" parameter to build both a compressed and uncompressed
288
kits.
289
290
Good Luck.
291
292