From File: curl_gnv_build_steps.txt

 Copyright 2009, 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
procecure 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 archictecture 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.
