1From 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 19Currently building Curl using GNV takes longer than building Curl via DCL. 20The GNV procedure actually uses the same configure and makefiles that 21Unix builds use. 22 23Building CURL on OpenVMS using GNV requires GNV V2.1-2 or the updated 24images that are available via anonymous FTP at encompasserve.org in the gnv 25directory. It also requires the GNV Bash 4.2.45 kit as an update from the 26same location or from the sourceforge.net GNV project. 27 28The HP C 7.x compiler was used for building the GNV version. 29 30The source kits are provided in backup savesets inside of the PCSI install kit. 31 32Backup save sets are currently the only distribution medium that I can be 33sure is installed on a target VMS system that will correctly unpack files 34with extended character sets in them. You may need to adjust the ownership 35of the restored files, since /Interchange/noconvert was not available at the 36time that this document was written. 37 38[gnv.common_src]curl_*_original_src.bck is the original source of the curl kit 39as provided by the curl project. [gnv.vms_src]curl-*_vms_src.bck, if present, 40has the OpenVMS specific files that are used for building that are not yet in 41the curl source kits for that release distributed https://curl.se 42 43These backup savesets should be restored to different directory trees on 44an ODS-5 volume(s) which are referenced by concealed rooted logical names. 45 46SRC_ROOT: is for the source files common to all platforms. 47VMS_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. 51LCL_ROOT: is manually created to have the same base and sub-directories as 52 SRC_ROOT: and VMS_ROOT: 53 54The logical name REF_ROOT: may be defined to be a search list for 55VMS_ROOT:,SRC_ROOT: 56 57The logical name PRJ_ROOT: is defined to be a search list for 58LCL_ROOT:,VMS_ROOT:,SRC_ROOT: 59 60For the make install process to work, it must have write access to the 61directories referenced by the GNU: logical name. 62 63In future releases of GNV, and with GNV Bash 4.3.30 installed, this name 64should be GNV$GNU: 65 66As directly updating those directories would probably be disruptive to other 67users of the system and require elevated privilege, this can be handled by 68creating a separate directory tree to install into which can be referenced 69by the concealed rooted logical name new_gnu:. A concealed logical name of 70OLD_GNU: can be set up to reference the real GNV directory tree. 71 72Then a local copy of the GNU/GNV$GNU logical names can be set up as a search 73list such as NEW_GNU:,OLD_GNU: 74 75The directory NEW_GNU:[usr] should be created. The make install phase should 76create all the other directories. 77 78The make install process may abort if curl is already because it can not 79uninstall the older version of curl because it does not have permission. 80 81The file stage_curl_install.com is used set up a new_gnu: directory tree 82for testing. The PCSI kitting procedure uses these files as input. 83 84These files do not create the directories in the VMS_ROOT and LCL_ROOT 85directory 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 94One of the ways with to protect the source from being modified is to have 95the directories under src_root: owned by a user or resource where the build 96username only has read access to it. 97 98 99Note to builders: 100 101GNV currently has a bug where configure scripts take a long time to run. 102Some of the configure steps take a while to complete, and on a 600 Mhz 103DS10 with IDE disks, taking an hour to run the CURL configure is normal. 104 105The following messages can be ignored and may get fixed in a future version 106of GNV. The GNV$*.OPT files are used to find the libraries as many have 107different names on VMS than on Unix. The Bash environment variable 108GNV_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 116u unimplemented switch - ignored 117 118 119With these search lists set up and the properly, curl can be built by 120setting your default to PRJ_ROOT:[curl.packages.vms] and then issuing 121either the command: 122 123 $ @pcsi_product_gnv_curl.com 124 125or 126 127 $ @build_gnv_curl.com. 128 129The GNV configure procedure takes considerably longer than the DCL build 130procedure takes. It is of use for testing the GNV build environment, and 131may not have been kept up to date. 132 133The pcsi_product_gnv_curl.com needs the following logical names which 134are 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 142The pcsi_product_gnv_curl.com is described in more detail below. It does 143the following steps. The build steps are only done if they are needed to 144allow 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 163The 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 179To clean up after a GNV based build to start over, the following commands are 180used: 181 182 $ bash 183 bash$ cd ../.. 184 bash$ make clean 185 bash$ exit 186 187Then run the @clean_gnv_curl.com. Use the parameter "realclean" if you are 188going to run the setup_gnv_curl_build.com and configure script again. 189 190 $ @clean_gnv_curl.com realclean 191 192If new public symbols have been added, adjust the file gnv_libcurl_symbols.opt 193to have the new symbols. If the symbols are longer than 32 characters, 194then they will need to have the original be exact case CRC shortened and 195an alias in upper case with CRC shortened, in addition to having an exact 196case truncated alias and an uppercase truncated alias. 197 198The *.EXE files are not moved to the new_gnu: directory. 199 200After you are satisfied with the results of your build, you can move the 201files from new_gnu: to old_gnu: at your convenience. 202 203Building a PCSI kit for an architecture takes the following steps after 204making sure that you have a working build environment. 205 206Note that it requires manually creating two logical names as described 207below. It is intentional that they be manually set. This is for 208branding 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 290Good Luck. 291