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 http://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 verions
      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.
