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.haxx.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.
