                             _   _ ____  _
                         ___| | | |  _ \| |
                        / __| | | | |_) | |
                       ( (__| |_| |  _ <| |___
                        \___|\___/|_| \_\_____|
                             for OpenVMS

History:

 9-MAR-2004, Created this readme. file.  Marty Kuhrt (MSK).
15-MAR-2004, MSK, Updated to reflect the new files in this directory.
14-FEB-2005, MSK, removed config-vms.h_with* file comments
10-FEB-2010, SMS. General update.
14-Jul-2013, JEM, General Update, add GNV build information.


The release notes installed by the PCSI kit consist of this file and the
curl_gnv_build_steps.txt and other useful information.

Prerequisites:

OpenVMS V7.0 or later (any platform)
DECC V6.5 or later
OpenSSL or hp SSL, if you want SSL support

What is Here:

This directory contains the following files for a DCL based build.

backup_gnv_curl_src.com  This procedure backs up the source modules for
                        creating a PCSI kit.

build_curl-config_script.com
                        Procedure to create the curl-config script.

build_gnv_curl.com      This procedure does a build of curl using the
                        GNV utilities and then uses DCL tools to build
                        the libcurl shared image.  The setup_gnv_curl_build.com
                        procedure must be run first.

build_gnv_curl_pcsi_desc.com
                        This procedure builds the pcsi$desc file for
                        creating a PCSI based package.

build_gnv_curl_pcsi_text.com
                        This procedure builds the pcsi$text file for
                        creating a PCSI based package.

build_gnv_curl_release_notes.com
                        This procedure creates the release notes for
                        a PCSI kit based on curl_release_note_start.txt,
                        this readme file, and the curl_gnv_build_steps.txt

build_libcurl_pc.com    Procedure to create a libcurl.pc file.

build_vms.com           DCL based build procedure.

clean_gnv_curl.com      This procedure cleans up the files generated by
                        a GNV based build.

config_h.com            DCL based procedure used by build_vms.com
                        to run generate the curl_config.h file.
                        This is a generic procedure that does most
                        of the work for generating config.h files.

compare_curl_source.com Procedure to compare the working directory
                        with a repository directory or a backup staging
                        directory.

curl_crtl_init.c        A special pre-initialization routine to for
                        programs to behave more Unix like when run
                        under GNV.

curl_gnv_build_steps.txt
                        Detailed instructions on how to built curl using
                        GNV and how to build the libcurl shared image and
                        PCSI kit.

curl_release_note_start.txt
                        The first part of the curl release notes.

curl_startup.com        A procedure run at VMS startup to install the
                        libcurl shared image and to set up the needed
                        logical names.

curlmsg.h               C header defining curl status code macros.

curlmsg.msg             Error message source for curlmsg.h and curlmsg.sdl.

curlmsg.sdl             SDL source defining curl status code constants.

curlmsg_vms.h           Mapping of curl status codes to VMS-form codes.

generate_config_vms_h_curl.com
                        DCL procedure to generate the curl specific
                        definitions for curl_config.h that config_h.com
                        can not properly generate.

generate_vax_transfer.com
                        DCL procedure to read an Alpha/IA64 symbol vector
                        linker option file and generate the VAX transfer
                        vector modules.

gnv_conftest.c_first    A helper file for the configure script.

gnv_curl_configure.sh   A script to run the configure script with the
                        options needed for VMS.

gnv_libcurl_symbols.opt The symbol vectors needed for Alpha and IA64
                        libcurl shared image.

gnv_link_curl.com       Links the libcurl shared image and then links a curl
                        image to use the libcurl.

macro32_exactcase.patch The patch file needed to modify VAX Macro32 to be
                        case sensitive and case preserving.

Makefile.am             curl kit file list for this directory.

Makefile.in             curl kit makefile source for this directory.

make_gnv_curl_install.sh
                        Script to do a make install using GNV after running
                        the configure script.

make_pcsi_curl_kit_name.com
                        This generates the name of the PCSI kit based on
                        the version of curl being built.

pcsi_gnv_curl_file_list.txt
                        This is a text file describing what files should
                        be included in a PCSI kit.

pcsi_product_gnv_curl.com
                        This generates the PCSI kit after the libcurl
                        shared image has been made.

readme.                 This file.

report_openssl_version.c
                        Program to check that the openssl version is new
                        enough for building a shared libcurl image.

setup_gnv_curl_build.com
                        This procedure sets up symbols and logical names
                        for a GNV build environment and also copies some
                        helper files.

stage_curl_install.com  This procedure sets up new_gnu: directory tree to
                        for testing the install and building the PCSI kit.
                        It takes a "remove" option to remove all the staged
                        files.

vms_eco_level.h         This sets the ECO level for the PCSI kit name.


How to Build:

The GNV based build and the DCL based build procedures are not compatible
and you must make sure that none of the build files are present before
running a different type of build.  Use the "REALCLEAN" option for
BUILD_VMS.COM and the "REALCLEAN" option for clean_gnv_curl.com.

The (brute-force) DCL based builder is [.packages.vms]build_vms.com.
Comments in this procedure describe various optional parameters which
enable or disable optional program features, or which control the build
in other ways.  Product files (.EXE, .H, .LIS, .MAP, .OBJ, .OLB, ...)
should be produced in an architecture-specific subdirectory under this
directory ([.ALPHA], [.IA64], [.VAX]).

The file curl_gnv_build_steps.txt contains information on buildling using
the GNV tool kit, building a shared libcurl, and producting a PCSI kit for
distribution.  The curl_gnv_build_steps.text is included in the release
notes file of the PCSI kit.

The building with 64 bit pointers does not currently work.

The build procedure will detect if HP OpenSSL, LDAP, and Kerberos are
installed and default to building with them.

The build procedure will also detect if a compatible ZLIB shared image
is installed from a PCSI kit and default to using it.

   Example build commands:

      @ [.packages.vms]build_vms.com CLEAN
      @ [.packages.vms]build_vms.com LARGE LDAP
      submit /noprint [.packages.vms]build_vms.com /param = (LARGE, LDAP)

The build_vms.com procedure does not build the shared image file or the PCSI
kit.  If you have built a curl with ZLIB and HPSSL support as well as if
LDAP and Kerberos installed, you can use the GNV_LINK_CURL.COM file.

The GNV_LINK_CURL.COM contains information on how to link and run with a newer
version of HP SSL than what may be install on an Alpha or IA64 based system.

To build the PCSI kit, follow the instructions in the file
curl_gnv_build_steps.txt.

Other Notes:

This release fixes known bugs #22, and #57 in the [curl.docs]known_bugs.
file.

The libcurl formdata.c module and Curl tools post form now have some
understanding of VMS file types.  Files will be posted in STREAM_LF format.

The Curl tool now has some understanding of VMS file types and will upload the
files in STREAM_LF format.

When CURL is uploading a VARIABLE format VMS file, it is less efficient as in
order to get the file size, it will first read the entire file once, and then
read the file again for the actual upload.

The Curl tool will now always download files into STREAM_LF format.  Even if a
file by that name with a different format already exists.  This is needed to
allow interrupted downloads to be continued.


The libcurl file module still does not understand VMS file types and requires
the input files to be in STREAM_LF to work property.

The test suites are not supported as of 7.11.0.

The curlmsg.sdl and curlmsg.h files are generated from curlmsg.msg.
This is not done automatically, since the .MSG file is a hand edit
of the relevant stuff from the curl.h file.  If you want to do this
yourself you'll need the SDL package from the freeware collection.
