Annotation of embedaddon/curl/packages/vms/curl_gnv_build_steps.txt, revision 1.1.1.1

1.1       misho       1: From File: curl_gnv_build_steps.txt
                      2: 
                      3:  Copyright 2009 - 2020, John Malmberg
                      4: 
                      5:  Permission to use, copy, modify, and/or distribute this software for any
                      6:  purpose with or without fee is hereby granted, provided that the above
                      7:  copyright notice and this permission notice appear in all copies.
                      8: 
                      9:  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                     10:  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     11:  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     12:  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     13:  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     14:  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
                     15:  OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     16: 
                     17: Currently building Curl using GNV takes longer than building Curl via DCL.
                     18: The GNV procedure actually uses the same configure and makefiles that
                     19: Unix builds use.
                     20: 
                     21: Building CURL on OpenVMS using GNV requires GNV V2.1-2 or the updated
                     22: images that are available via anonymous FTP at encompasserve.org in the gnv
                     23: directory.  It also requires the GNV Bash 4.2.45 kit as an update from the
                     24: same location or from the sourceforge.net GNV project.
                     25: 
                     26: The HP C 7.x compiler was used for building the GNV version.
                     27: 
                     28: The source kits are provided in backup savesets inside of the PCSI install kit.
                     29: 
                     30: Backup save sets are currently the only distribution medium that I can be
                     31: sure is installed on a target VMS system that will correctly unpack files
                     32: with extended character sets in them.  You may need to adjust the ownership
                     33: of the restored files, since /Interchange/noconvert was not available at the
                     34: time that this document was written.
                     35: 
                     36: [gnv.common_src]curl_*_original_src.bck is the original source of the curl kit
                     37: as provided by the curl project.  [gnv.vms_src]curl-*_vms_src.bck, if present,
                     38: has the OpenVMS specific files that are used for building that are not yet in
                     39: the curl source kits for that release distributed https://curl.haxx.se
                     40: 
                     41: These backup savesets should be restored to different directory trees on
                     42: an ODS-5 volume(s) which are referenced by concealed rooted logical names.
                     43: 
                     44: SRC_ROOT: is for the source files common to all platforms.
                     45: VMS_ROOT: is for the source files that are specific to OpenVMS.
                     46:           Note, you should create the VMS_ROOT: directory tree even if it is
                     47:           initially empty.  This is where you should put edits if you are
                     48:           making changes.
                     49: LCL_ROOT: is manually created to have the same base and sub-directories as
                     50:           SRC_ROOT: and VMS_ROOT:
                     51: 
                     52: The logical name REF_ROOT: may be defined to be a search list for
                     53: VMS_ROOT:,SRC_ROOT:
                     54: 
                     55: The logical name PRJ_ROOT: is defined to be a search list for
                     56: LCL_ROOT:,VMS_ROOT:,SRC_ROOT:
                     57: 
                     58: For the make install process to work, it must have write access to the
                     59: directories referenced by the GNU: logical name.
                     60: 
                     61: In future releases of GNV, and with GNV Bash 4.3.30 installed, this name
                     62: should be GNV$GNU:
                     63: 
                     64: As directly updating those directories would probably be disruptive to other
                     65: users of the system and require elevated privilege, this can be handled by
                     66: creating a separate directory tree to install into which can be referenced
                     67: by the concealed rooted logical name new_gnu:.  A concealed logical name of
                     68: OLD_GNU: can be set up to reference the real GNV directory tree.
                     69: 
                     70: Then a local copy of the GNU/GNV$GNU logical names can be set up as a search
                     71: list such as NEW_GNU:,OLD_GNU:
                     72: 
                     73: The directory NEW_GNU:[usr] should be created.  The make install phase should
                     74: create all the other directories.
                     75: 
                     76: The make install process may abort if curl is already because it can not
                     77: uninstall the older version of curl because it does not have permission.
                     78: 
                     79: The file stage_curl_install.com is used set up a new_gnu: directory tree
                     80: for testing.  The PCSI kitting procedure uses these files as input.
                     81: 
                     82: These files do not create the directories in the VMS_ROOT and LCL_ROOT
                     83: directory trees.  You can create them with commands similar to:
                     84: 
                     85:   $ create/dir lcl_root:[curl]/prot=w:re
                     86:   $ copy src_root:[curl...]*.dir -
                     87:     lcl_root:[curl...]/prot=(o:rwed,w:re)
                     88:   $ create/dir vms_root:[curl]/prot=w:re
                     89:   $ copy src_root:[curl...]*.dir -
                     90:     vms_root:[curl...]/prot=(o:rwed,w:re)
                     91: 
                     92: One of the ways with to protect the source from being modified is to have
                     93: the directories under src_root: owned by a user or resource where the build
                     94: username only has read access to it.
                     95: 
                     96: 
                     97: Note to builders:
                     98: 
                     99: GNV currently has a bug where configure scripts take a long time to run.
                    100: Some of the configure steps take a while to complete, and on a 600 Mhz
                    101: DS10 with IDE disks, taking an hour to run the CURL configure is normal.
                    102: 
                    103: The following messages can be ignored and may get fixed in a future version
                    104: of GNV.  The GNV$*.OPT files are used to find the libraries as many have
                    105: different names on VMS than on Unix.  The Bash environment variable
                    106: GNV_CC_QUALIFIERS can override all other settings for the C Compiler.
                    107: 
                    108: ? cc: No support for switch -warnprotos
                    109: ? cc: Unrecognized file toomanyargs
                    110: ? cc: Warning: library "ssl" not found
                    111: ? cc: Warning: library "crypto" not found
                    112: ? cc: Warning: library "gssapi" not found
                    113: ? cc: Warning: library "z" not found
                    114: u unimplemented switch - ignored
                    115: 
                    116: 
                    117: With these search lists set up and the properly, curl can be built by
                    118: setting your default to PRJ_ROOT:[curl.packages.vms] and then issuing
                    119: either the command:
                    120: 
                    121:   $ @pcsi_product_gnv_curl.com
                    122: 
                    123: or
                    124: 
                    125:   $ @build_gnv_curl.com.
                    126: 
                    127: The GNV configure procedure takes considerably longer than the DCL build
                    128: procedure takes.  It is of use for testing the GNV build environment, and
                    129: may not have been kept up to date.
                    130: 
                    131: The pcsi_product_gnv_curl.com needs the following logical names which
                    132: are described in the section below:
                    133: 
                    134:   gnv_pcsi_producer
                    135:   gnv_pcsi_producer_full_name
                    136:   stage_root
                    137:   vms_root1 (Optional if vms_root is on a NFS volume)
                    138:   src_root1 (Optional if src_root is on a NFS volume)
                    139: 
                    140: The pcsi_product_gnv_curl.com is described in more detail below.  It does
                    141: the following steps.  The build steps are only done if they are needed to
                    142: allow using either DCL or GNV based building procedures.
                    143: 
                    144:   $ @build_vms list
                    145: 
                    146:   $ @gnv_link_curl.com
                    147: 
                    148:   $ @build_gnv_curl_release_notes.com
                    149: 
                    150:   $ @backup_gnv_curl_src.com
                    151: 
                    152:   $ @build_gnv_curl_pcsi_desc.com
                    153: 
                    154:   $ @build_gnv_curl_pcsi_text.com
                    155: 
                    156:   $ @stage_curl_install remove
                    157:   $ @stage_curl_install
                    158: 
                    159:   Then builds the kit.
                    160: 
                    161: The build_gnv_curl.com command procedure does the following:
                    162: 
                    163:   $ @setup_gnv_curl_build.com
                    164: 
                    165:   $ bash gnv_curl_configure.sh
                    166: 
                    167:   $ @clean_gnv_curl.com
                    168: 
                    169:   $ bash make_gnv_curl_install.sh
                    170: 
                    171:   $ @gnv_link_curl.com
                    172: 
                    173:   $ @stage_curl_install.com
                    174: 
                    175:   $ purge new_gnu:[*...]/log
                    176: 
                    177: To clean up after a GNV based build to start over, the following commands are
                    178: used:
                    179: 
                    180:    $ bash
                    181:    bash$ cd ../..
                    182:    bash$ make clean
                    183:    bash$ exit
                    184: 
                    185: Then run the @clean_gnv_curl.com.  Use the parameter "realclean" if you are
                    186: going to run the setup_gnv_curl_build.com and configure script again.
                    187: 
                    188:    $ @clean_gnv_curl.com realclean
                    189: 
                    190: If new public symbols have been added, adjust the file gnv_libcurl_symbols.opt
                    191: to have the new symbols.  If the symbols are longer than 32 characters,
                    192: then they will need to have the original be exact case CRC shortened and
                    193: an alias in upper case with CRC shortened, in addition to having an exact
                    194: case truncated alias and an uppercase truncated alias.
                    195: 
                    196: The *.EXE files are not moved to the new_gnu: directory.
                    197: 
                    198: After you are satisfied with the results of your build, you can move the
                    199: files from new_gnu: to old_gnu: at your convenience.
                    200: 
                    201: Building a PCSI kit for an architecture takes the following steps after
                    202: making sure that you have a working build environment.
                    203: 
                    204: Note that it requires manually creating two logical names as described
                    205: below.  It is intentional that they be manually set.  This is for
                    206: branding the PCSI kit based on who is making the kit.
                    207: 
                    208:    1. Make sure that you have a staging directory that can be referenced
                    209:       by the path STAGE_ROOT:[KIT]
                    210: 
                    211:    2. Edit the file curl_release_note_start.txt or other text files to
                    212:       reflect any changes.
                    213: 
                    214:    3. Define the logical name GNV_PCSI_PRODUCER to indicate who is making
                    215:       the distribution.  For making updates to an existing open source
                    216:       kit you may need to keep the producer the same.
                    217: 
                    218:    4. Define the logical name GNV_PCSI_PRODUCER_FULL_NAME to be your full
                    219:       name or full name of your company.
                    220: 
                    221:    5. If you are producing an update kit, then update the file
                    222:       vms_eco_level.h by changing the value for the VMS_ECO_LEVEL macro.
                    223:       This file is currently only used in building the PCSI kit.
                    224: 
                    225:    6. Edit the file PCSI_GNV_CURL_FILE_LIST.TXT if there are new files added
                    226:       to the kit.  These files should all be ODS-2 legal filenames and
                    227:       directories.
                    228: 
                    229:       A limitation of the PCSI kitting procedure is that when selecting files,
                    230:       it tends to ignore the directory structure and assumes that all files
                    231:       with the same name are the same file, so every file placed in the kit
                    232:       must have a unique name.  Then a procedure needs to be added to the kit
                    233:       to create an alias link on install and remove the link on remove.
                    234: 
                    235:       Since at this time curl does not need this alias procedure, the steps
                    236:       to automatically build it are not included here.
                    237: 
                    238:       While newer versions of PCSI can support ODS-5 filenames, not all versions
                    239:       of PCSI on systems that have ODS-5 filenames do.  So as a post install
                    240:       step, the PCSI kit built by these steps does a rename to the correct
                    241:       case as a post install step.
                    242: 
                    243:    7. Edit the build_curl_pcsi_desc.com and build_curl_pcsi_text.com if you
                    244:       have changed the version of ZLIB that curl is built against.
                    245: 
                    246:    8. Prepare to backup the files for building the kit.
                    247: 
                    248:       Note that if src_root: or vms_root: are NFS mounted disks, the
                    249:       step of backing up the source files will probably hang or fail.
                    250: 
                    251:       You need to copy the source files to VMS mounted disks and create
                    252:       logical names SRC_ROOT1 and VMS_ROOT1 to work around this to to
                    253:       reference local disks.  Make sure src_root1:[000000] and
                    254:       vms_root1:[000000] exist and can be written to.
                    255: 
                    256:       The command procedure compare_curl_source can be used to check
                    257:       those directories and keep them up to date.
                    258: 
                    259:          @compare_curl_source.com SRCBCK UPDATE
                    260: 
                    261:          This compares the reference project source with the backup
                    262:          staging directory for it and updates with any changes.
                    263: 
                    264:          @compare_curl_source.com VMSBCK UPDATE
                    265: 
                    266:          This compares the VMS specific source with the backup
                    267:          staging directory for it and updates with any changes.
                    268: 
                    269:          Leave off "UPDATE" to just check without doing any changes.
                    270: 
                    271:       If you are not using NFS mounted disks and do not want to have a
                    272:       separate directory for staging the sources for backup make sure
                    273:       that src_root1: and vms_root1: do not exist.
                    274: 
                    275:    9. Build the PCSI kit with @pcsi_product_gnv_curl.com
                    276: 
                    277:        The following message is normal:
                    278:           %PCSI-I-CANNOTVAL, cannot validate
                    279:             EAGLE$DQA0:[stage_root.][kit]VMSPORTS-AXPVMS-CURL-V0731-0-1.PCSI;1
                    280:           -PCSI-I-NOTSIGNED, product kit is not signed and therefore has
                    281:           no manifest file
                    282: 
                    283:        This will result in an uncompressed kit for the target platform.
                    284:        On Alpha and Integrity, the pcsi_product_gnv_curl.com can be used with
                    285:        the "COMPRESSED" parameter to build both a compressed and uncompressed
                    286:        kits.
                    287: 
                    288: Good Luck.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>