| From File: curl_gnv_build_steps.txt |
| |
| Copyright 2009 - 2020, John Malmberg |
| |
| Permission to use, copy, modify, and/or distribute this software for any |
| purpose with or without fee is hereby granted, provided that the above |
| copyright notice and this permission notice appear in all copies. |
| |
| THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT |
| OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| |
| Currently building Curl using GNV takes longer than building Curl via DCL. |
| The GNV procedure actually uses the same configure and makefiles that |
| Unix builds use. |
| |
| Building CURL on OpenVMS using GNV requires GNV V2.1-2 or the updated |
| images that are available via anonymous FTP at encompasserve.org in the gnv |
| directory. It also requires the GNV Bash 4.2.45 kit as an update from the |
| same location or from the sourceforge.net GNV project. |
| |
| The HP C 7.x compiler was used for building the GNV version. |
| |
| The source kits are provided in backup savesets inside of the PCSI install kit. |
| |
| Backup save sets are currently the only distribution medium that I can be |
| sure is installed on a target VMS system that will correctly unpack files |
| with extended character sets in them. You may need to adjust the ownership |
| of the restored files, since /Interchange/noconvert was not available at the |
| time that this document was written. |
| |
| [gnv.common_src]curl_*_original_src.bck is the original source of the curl kit |
| as provided by the curl project. [gnv.vms_src]curl-*_vms_src.bck, if present, |
| has the OpenVMS specific files that are used for building that are not yet in |
| the curl source kits for that release distributed https://curl.se |
| |
| These backup savesets should be restored to different directory trees on |
| an ODS-5 volume(s) which are referenced by concealed rooted logical names. |
| |
| SRC_ROOT: is for the source files common to all platforms. |
| VMS_ROOT: is for the source files that are specific to OpenVMS. |
| Note, you should create the VMS_ROOT: directory tree even if it is |
| initially empty. This is where you should put edits if you are |
| making changes. |
| LCL_ROOT: is manually created to have the same base and sub-directories as |
| SRC_ROOT: and VMS_ROOT: |
| |
| The logical name REF_ROOT: may be defined to be a search list for |
| VMS_ROOT:,SRC_ROOT: |
| |
| The logical name PRJ_ROOT: is defined to be a search list for |
| LCL_ROOT:,VMS_ROOT:,SRC_ROOT: |
| |
| For the make install process to work, it must have write access to the |
| directories referenced by the GNU: logical name. |
| |
| In future releases of GNV, and with GNV Bash 4.3.30 installed, this name |
| should be GNV$GNU: |
| |
| As directly updating those directories would probably be disruptive to other |
| users of the system and require elevated privilege, this can be handled by |
| creating a separate directory tree to install into which can be referenced |
| by the concealed rooted logical name new_gnu:. A concealed logical name of |
| OLD_GNU: can be set up to reference the real GNV directory tree. |
| |
| Then a local copy of the GNU/GNV$GNU logical names can be set up as a search |
| list such as NEW_GNU:,OLD_GNU: |
| |
| The directory NEW_GNU:[usr] should be created. The make install phase should |
| create all the other directories. |
| |
| The make install process may abort if curl is already because it can not |
| uninstall the older version of curl because it does not have permission. |
| |
| The file stage_curl_install.com is used set up a new_gnu: directory tree |
| for testing. The PCSI kitting procedure uses these files as input. |
| |
| These files do not create the directories in the VMS_ROOT and LCL_ROOT |
| directory trees. You can create them with commands similar to: |
| |
| $ create/dir lcl_root:[curl]/prot=w:re |
| $ copy src_root:[curl...]*.dir - |
| lcl_root:[curl...]/prot=(o:rwed,w:re) |
| $ create/dir vms_root:[curl]/prot=w:re |
| $ copy src_root:[curl...]*.dir - |
| vms_root:[curl...]/prot=(o:rwed,w:re) |
| |
| One of the ways with to protect the source from being modified is to have |
| the directories under src_root: owned by a user or resource where the build |
| username only has read access to it. |
| |
| |
| Note to builders: |
| |
| GNV currently has a bug where configure scripts take a long time to run. |
| Some of the configure steps take a while to complete, and on a 600 Mhz |
| DS10 with IDE disks, taking an hour to run the CURL configure is normal. |
| |
| The following messages can be ignored and may get fixed in a future version |
| of GNV. The GNV$*.OPT files are used to find the libraries as many have |
| different names on VMS than on Unix. The Bash environment variable |
| GNV_CC_QUALIFIERS can override all other settings for the C Compiler. |
| |
| ? cc: No support for switch -warnprotos |
| ? cc: Unrecognized file toomanyargs |
| ? cc: Warning: library "ssl" not found |
| ? cc: Warning: library "crypto" not found |
| ? cc: Warning: library "gssapi" not found |
| ? cc: Warning: library "z" not found |
| u unimplemented switch - ignored |
| |
| |
| With these search lists set up and the properly, curl can be built by |
| setting your default to PRJ_ROOT:[curl.packages.vms] and then issuing |
| either the command: |
| |
| $ @pcsi_product_gnv_curl.com |
| |
| or |
| |
| $ @build_gnv_curl.com. |
| |
| The GNV configure procedure takes considerably longer than the DCL build |
| procedure takes. It is of use for testing the GNV build environment, and |
| may not have been kept up to date. |
| |
| The pcsi_product_gnv_curl.com needs the following logical names which |
| are described in the section below: |
| |
| gnv_pcsi_producer |
| gnv_pcsi_producer_full_name |
| stage_root |
| vms_root1 (Optional if vms_root is on a NFS volume) |
| src_root1 (Optional if src_root is on a NFS volume) |
| |
| The pcsi_product_gnv_curl.com is described in more detail below. It does |
| the following steps. The build steps are only done if they are needed to |
| allow using either DCL or GNV based building procedures. |
| |
| $ @build_vms list |
| |
| $ @gnv_link_curl.com |
| |
| $ @build_gnv_curl_release_notes.com |
| |
| $ @backup_gnv_curl_src.com |
| |
| $ @build_gnv_curl_pcsi_desc.com |
| |
| $ @build_gnv_curl_pcsi_text.com |
| |
| $ @stage_curl_install remove |
| $ @stage_curl_install |
| |
| Then builds the kit. |
| |
| The build_gnv_curl.com command procedure does the following: |
| |
| $ @setup_gnv_curl_build.com |
| |
| $ bash gnv_curl_configure.sh |
| |
| $ @clean_gnv_curl.com |
| |
| $ bash make_gnv_curl_install.sh |
| |
| $ @gnv_link_curl.com |
| |
| $ @stage_curl_install.com |
| |
| $ purge new_gnu:[*...]/log |
| |
| To clean up after a GNV based build to start over, the following commands are |
| used: |
| |
| $ bash |
| bash$ cd ../.. |
| bash$ make clean |
| bash$ exit |
| |
| Then run the @clean_gnv_curl.com. Use the parameter "realclean" if you are |
| going to run the setup_gnv_curl_build.com and configure script again. |
| |
| $ @clean_gnv_curl.com realclean |
| |
| If new public symbols have been added, adjust the file gnv_libcurl_symbols.opt |
| to have the new symbols. If the symbols are longer than 32 characters, |
| then they will need to have the original be exact case CRC shortened and |
| an alias in upper case with CRC shortened, in addition to having an exact |
| case truncated alias and an uppercase truncated alias. |
| |
| The *.EXE files are not moved to the new_gnu: directory. |
| |
| After you are satisfied with the results of your build, you can move the |
| files from new_gnu: to old_gnu: at your convenience. |
| |
| Building a PCSI kit for an architecture takes the following steps after |
| making sure that you have a working build environment. |
| |
| Note that it requires manually creating two logical names as described |
| below. It is intentional that they be manually set. This is for |
| branding the PCSI kit based on who is making the kit. |
| |
| 1. Make sure that you have a staging directory that can be referenced |
| by the path STAGE_ROOT:[KIT] |
| |
| 2. Edit the file curl_release_note_start.txt or other text files to |
| reflect any changes. |
| |
| 3. Define the logical name GNV_PCSI_PRODUCER to indicate who is making |
| the distribution. For making updates to an existing open source |
| kit you may need to keep the producer the same. |
| |
| 4. Define the logical name GNV_PCSI_PRODUCER_FULL_NAME to be your full |
| name or full name of your company. |
| |
| 5. If you are producing an update kit, then update the file |
| vms_eco_level.h by changing the value for the VMS_ECO_LEVEL macro. |
| This file is currently only used in building the PCSI kit. |
| |
| 6. Edit the file PCSI_GNV_CURL_FILE_LIST.TXT if there are new files added |
| to the kit. These files should all be ODS-2 legal filenames and |
| directories. |
| |
| A limitation of the PCSI kitting procedure is that when selecting files, |
| it tends to ignore the directory structure and assumes that all files |
| with the same name are the same file, so every file placed in the kit |
| must have a unique name. Then a procedure needs to be added to the kit |
| to create an alias link on install and remove the link on remove. |
| |
| Since at this time curl does not need this alias procedure, the steps |
| to automatically build it are not included here. |
| |
| While newer versions of PCSI can support ODS-5 filenames, not all versions |
| of PCSI on systems that have ODS-5 filenames do. So as a post install |
| step, the PCSI kit built by these steps does a rename to the correct |
| case as a post install step. |
| |
| 7. Edit the build_curl_pcsi_desc.com and build_curl_pcsi_text.com if you |
| have changed the version of ZLIB that curl is built against. |
| |
| 8. Prepare to backup the files for building the kit. |
| |
| Note that if src_root: or vms_root: are NFS mounted disks, the |
| step of backing up the source files will probably hang or fail. |
| |
| You need to copy the source files to VMS mounted disks and create |
| logical names SRC_ROOT1 and VMS_ROOT1 to work around this to to |
| reference local disks. Make sure src_root1:[000000] and |
| vms_root1:[000000] exist and can be written to. |
| |
| The command procedure compare_curl_source can be used to check |
| those directories and keep them up to date. |
| |
| @compare_curl_source.com SRCBCK UPDATE |
| |
| This compares the reference project source with the backup |
| staging directory for it and updates with any changes. |
| |
| @compare_curl_source.com VMSBCK UPDATE |
| |
| This compares the VMS specific source with the backup |
| staging directory for it and updates with any changes. |
| |
| Leave off "UPDATE" to just check without doing any changes. |
| |
| If you are not using NFS mounted disks and do not want to have a |
| separate directory for staging the sources for backup make sure |
| that src_root1: and vms_root1: do not exist. |
| |
| 9. Build the PCSI kit with @pcsi_product_gnv_curl.com |
| |
| The following message is normal: |
| %PCSI-I-CANNOTVAL, cannot validate |
| EAGLE$DQA0:[stage_root.][kit]VMSPORTS-AXPVMS-CURL-V0731-0-1.PCSI;1 |
| -PCSI-I-NOTSIGNED, product kit is not signed and therefore has |
| no manifest file |
| |
| This will result in an uncompressed kit for the target platform. |
| On Alpha and Integrity, the pcsi_product_gnv_curl.com can be used with |
| the "COMPRESSED" parameter to build both a compressed and uncompressed |
| kits. |
| |
| Good Luck. |