291 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			291 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								From File: curl_gnv_build_steps.txt
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 Copyright (C) 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.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 SPDX-License-Identifier: ISC
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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
							 | 
						||
| 
								 | 
							
								      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.
							 |