1
0
mirror of https://github.com/moparisthebest/curl synced 2024-08-13 17:03:50 -04:00
curl/packages/vms/generate_config_vms_h_curl.com
John E. Malmberg 25f351424b VMS: fix and generate the VMS build config
config_h.com is a new file that generates a config.h file based on the
curl_config.h.in file and a quick scan of the configure script.  This is
actually a generic procedure that is shared with other VMS packages.

The existing pre-built config-vms.h had over 100 entries that were not
correct and in some cases conflicted with the build options available in
the build_vms.com.

generate_config_vms_h_curl.com is a helper procedure to the
config_h.com.  It covers the cases that the generic config_h.com is not
able to figure out, and accepts input from the build_vms.com procedure.

build_curlbuild_h.com is a new file to generate the curlbuild.h file
that Curl is now using when it is using a curl_config.h file.

post-config-vms.h is a new file that is needed to provide VMS specific
definitions, and most of them need to be set before the system header
files are included.

The VMS build procedure is fixed:

   1. Fixed to link in the correct HP ssl library.
   2. Fixed to detect if HP Kerberos is installed.
   3. Fixed to detect if HP LDAP is installed.
   4. Fixed to detect if gnv$libzshr is installed.
   5. Simplified the input parameter parsing to not use a loop.
   6. Warn that 64 bit pointer option support is not complete
      in comments.
   7. Default to IEEE floating if platform supports it so
      resulting libcurl will be compatible with other
      open source projects on VMS.
   8. Default to LARGEFILE if platform supports it.
   9. Default to enable SSL, LDAP, Kerberos, libz
      if the libraries are present.
   10. Build with exact case global symbols for libcurl.
   11. Generate linker option file needed.
   12. Compiler list option only commonly needed items.
   13. fulllist option for those who really want it.
   14. Create debug symbol file on Alpha, IA64.
2013-02-05 23:08:57 +01:00

446 lines
13 KiB
Plaintext

$! File: GENERATE_CONFIG_H_CURL.COM
$!
$! $Id$
$!
$! Curl like most open source products uses a variant of a config.h file.
$! Depending on the curl version, this could be config.h or curl_config.h.
$!
$! For GNV based builds, the configure script is run and that produces
$! a [curl_]config.h file. Configure scripts on VMS generally do not
$! know how to do everything, so there is also a [-.lib]config-vms.h file
$! that has VMS specific code that compensates for bugs in some of the
$! VMS shared images.
$!
$! This generates a [curl_]config.h file and also a config_vms.h file,
$! which is used to supplement that file. Note that the config_vms.h file
$! and the [.lib]config-vms.h file do two different tasks and that the
$! filenames are slightly different.
$!
$!
$! Copyright 2013, 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.
$!
$!
$! 06-Jan-2013 J. Malmberg
$!
$!=========================================================================
$!
$! Allow arguments to be grouped together with comma or separated by spaces
$! Do no know if we will need more than 8.
$args = "," + p1 + "," + p2 + "," + p3 + "," + p4 + ","
$args = args + p5 + "," + p6 + "," + p7 + "," + p8 + ","
$!
$! Provide lower case version to simplify parsing.
$args_lower = f$edit(args, "LOWERCASE")
$!
$args_len = f$length(args)
$!
$if (f$getsyi("HW_MODEL") .lt. 1024)
$then
$ arch_name = "VAX"
$else
$ arch_name = ""
$ arch_name = arch_name + f$edit(f$getsyi("ARCH_NAME"), "UPCASE")
$ if (arch_name .eqs. "") then arch_name = "UNK"
$endif
$!
$!
$nossl = 0
$nohpssl = 1
$hpssl = 0
$libidn = 0
$libssh2 = 0
$noldap = 0
$nozlib = 0
$nokerberos = 0
$!
$! First check to see if SSL is disabled.
$!---------------------------------------
$if f$locate(",nossl,", args_lower) .lt. args_len then nossl = 1
$if .not. nossl
$then
$!
$! ssl$* logicals means HP ssl is present
$!----------------------------------------
$ if f$trnlnm("ssl$root") .nes. ""
$ then
$ nohpssl = 0
$ hpssl = 1
$ endif
$!
$! HP defines OPENSSL as SSL$INCLUDE as a convenience for linking.
$! As it is a violation of VMS standards for this to be provided,
$! some sites may have removed it, but if present, assume that
$! it indicates which OpenSSL to use.
$!------------------------------------
$ openssl_lnm = f$trnlnm("OPENSSL")
$ if (openssl_lnm .nes. "SYS$INCLUDE")
$ then
$! Non HP SSL is installed, default to use it.
$ nohpssl = 1
$ hpssl = 0
$ endif
$!
$! Now check to see if hpssl has been specifically disabled
$!----------------------------------------------------------
$ if f$locate(",nohpssl,", args_lower) .lt. args_len
$ then
$ nohpssl = 1
$ hpssl = 0
$ endif
$!
$! Finally check to see if hp ssl has been specifically included.
$!----------------------------------------------------------------
$ if f$locate(",nohpssl,", args_lower) .lt. args_len
$ then
$ nohpssl = 1
$ hpssl = 0
$ endif
$endif
$!
$! Did someone port LIBIDN in the GNV compatible way?
$!------------------------------------------------------
$if f$trnlnm("GNV$LIBIDNSHR") .nes. ""
$then
$ write sys$output "NOTICE: A LIBIDN port has been detected."
$ write sys$output " This port of curl for VMS has not been tested with it."
$ if f$locate(",libidn,", args_lower) .lt. args_len
$ then
$ libidn = 1
$ endif
$ if .not. libidn
$ then
$ write sys$output " LIBIDN support is not enabled."
$ write sys$output "Run with the ""libidn"" parameter to attempt to use."
$ else
$ write sys$output " Untested LIBIDN support requested."
$ endif
$endif
$!
$! Did someone port LIBSSH2 in the GNV compatible way?
$!------------------------------------------------------
$if f$trnlnm("GNV$LIBSSH2SHR") .nes. ""
$then
$ write sys$output "NOTICE: A LIBSSH2 port has been detected."
$ write sys$output " This port of curl for VMS has not been tested with it."
$ if f$locate(",libssh2,", args_lower) .lt. args_len
$ then
$ libssh2 = 1
$ endif
$ if .not. libssh2
$ then
$ write sys$output " LIBSSH2 support is not enabled."
$ write sys$output "Run with the ""libssh2"" parameter to attempt to use."
$ else
$ write sys$output " Untested LIBSSH2 support requested."
$ endif
$endif
$!
$! LDAP suppressed?
$if f$locate(",noldap,", args_lower) .lt. args_len
$then
$ noldap = 1
$endif
$if f$search("SYS$SHARE:LDAP$SHR.EXE") .eqs. ""
$then
$ noldap = 1
$endif
$!
$if f$locate(",nokerberos,", args_lower) .lt. args_len then nokerberos = 1
$if .not. nokerberos
$then
$! If kerberos is installed: sys$share:gss$rtl.exe exists.
$ if f$search("sys$shsare:gss$rtl.exe") .eqs. ""
$ then
$ nokerberos = 1
$ endif
$endif
$!
$!
$! Is GNV compatible LIBZ present?
$!------------------------------------------------------
$if f$trnlnm("GNV$LIBZSHR") .nes. ""
$then
$ if f$locate(",nozlib,", args_lower) .lt. args_len
$ then
$ nozlib = 1
$ endif
$! if .not. nozlib
$! then
$! write sys$output " GNV$LIBZSHR support is enabled."
$! else
$! write sys$output " GNV$LIBZSHR support is disabled by nozlib."
$! endif
$else
$ nozlib = 1
$endif
$!
$!
$! Start the configuration file.
$! Need to do a create and then an append to make the file have the
$! typical file attributes of a VMS text file.
$create sys$disk:[curl.lib]config_vms.h
$open/append cvh sys$disk:[curl.lib]config_vms.h
$!
$! Write the defines to prevent multiple includes.
$! These are probably not needed in this case,
$! but are best practice to put on all header files.
$write cvh "#ifndef __CONFIG_VMS_H__"
$write cvh "#define __CONFIG_VMS_H__"
$write cvh ""
$write cvh "/* Define cpu-machine-OS */"
$!
$! Curl uses an OS macro to set the build environment.
$!----------------------------------------------------
$! Now the DCL builds usually say xxx-HP-VMS and configure scripts
$! may put DEC or COMPAQ or HP for the middle part.
$!
$write cvh "#if defined(__alpha)"
$write cvh "#define OS ""ALPHA-HP-VMS"""
$write cvh "#elif defined(__vax)"
$write cvh "#define OS ""VAX-HP-VMS"""
$write cvh "#elif defined(__ia64)"
$write cvh "#define OS ""IA64-HP-VMS""
$write cvh "#else"
$write cvh "#define OS ""UNKNOWN-HP-VMS""
$write cvh "#endif"
$write cvh ""
$!
$! We are now setting this on the GNV build, so also do this
$! for compatibility.
$write cvh "/* Location of default ca path */"
$write cvh "#define curl_ca_path ""gnv$curl_ca_path"""
$!
$! NTLM_WB_ENABLED requires fork() but configure does not know this
$! We have to disble this in th configure command line.
$! config_h.com finds that configure defaults to it being enabled so
$! reports it. So we need to turn it off here.
$!
$write cvh "#ifdef NTLM_WB_ENABLED"
$write cvh "#undef NTLM_WB_ENABLED"
$write cvh "#endif"
$!
$! The config_h.com finds a bunch of default disable commands in
$! configure and will incorrectly disable these options. The config_h.com
$! is a generic procedure and it would break more things to try to fix it
$! to special case it for curl. So we will fix it here.
$!
$! We do them all here, even the ones that config_h.com currently gets correct.
$!
$write cvh "#ifdef CURL_DISABLE_COOKIES"
$write cvh "#undef CURL_DISABLE_COOKIES"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_CRYPTO_AUTH"
$write cvh "#undef CURL_DISABLE_CRYPTO_AUTH"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_DICT"
$write cvh "#undef CURL_DISABLE_DICT"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_FILE"
$write cvh "#undef CURL_DISABLE_FILE"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_FTP"
$write cvh "#undef CURL_DISABLE_FTP"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_GOPHER"
$write cvh "#undef CURL_DISABLE_GOPHER"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_HTTP"
$write cvh "#undef CURL_DISABLE_HTTP"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_IMAP"
$write cvh "#undef CURL_DISABLE_IMAP"
$write cvh "#endif"
$if .not. noldap
$then
$ write cvh "#ifdef CURL_DISABLE_LDAP"
$ write cvh "#undef CURL_DISABLE_LDAP"
$ write cvh "#endif"
$ if .not. nossl
$ then
$ write cvh "#ifdef CURL_DISABLE_LDAPS"
$ write cvh "#undef CURL_DISABLE_LDAPS"
$ write cvh "#endif"
$ endif
$endif
$write cvh "#ifdef CURL_DISABLE_LIBCURL_OPTION"
$write cvh "#undef CURL_DISABLE_LIBCURL_OPTION"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_POP3"
$write cvh "#undef CURL_DISABLE_POP3"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_PROXY"
$write cvh "#undef CURL_DISABLE_PROXY"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_RTSP"
$write cvh "#undef CURL_DISABLE_RTSP"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_SMTP"
$write cvh "#undef CURL_DISABLE_SMTP"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_TELNET"
$write cvh "#undef CURL_DISABLE_TELNET"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_TFTP"
$write cvh "#undef CURL_DISABLE_TFTP"
$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_POP3"
$write cvh "#undef CURL_DISABLE_POP3"
$write cvh "#endif"
$if .not. nossl
$then
$ write cvh "#ifdef CURL_DISABLE_TLS_SRP"
$ write cvh "#undef CURL_DISABLE_TLS_SRP"
$ write cvh "#endif"
$!
$endif
$write cvh "#ifdef CURL_DISABLE_VERBOSE_STRINGS"
$write cvh "#undef CURL_DISABLE_VERBOSE_STRINGS"
$write cvh "#endif"
$!
$! configure defaults to USE_*, a real configure on VMS chooses different.
$write cvh "#ifdef USE_ARES"
$write cvh "#undef USE_ARES"
$write cvh "#endif"
$write cvh "#ifdef USE_AXTLS"
$write cvh "#undef USE_AXTLS"
$write cvh "#endif"
$write cvh "#ifdef USE_CYASSL"
$write cvh "#undef USE_CYASSL"
$write cvh "#endif"
$write cvh "#ifdef USE_DARWINSSL"
$write cvh "#undef USE_DARWINSSL"
$write cvh "#endif"
$write cvh "#ifdef USE_GNUTLS"
$write cvh "#undef USE_GNUTLS"
$write cvh "#endif"
$write cvh "#ifdef USE_GNUTLS_NETTLE"
$write cvh "#undef USE_GNUTLS_NETTLE"
$write cvh "#endif"
$write cvh "#ifdef USE_LIBRTMP"
$write cvh "#undef USE_LIBRTMP"
$write cvh "#endif"
$write cvh "#ifdef USE_MANUAL"
$write cvh "#undef USE_MANUAL"
$write cvh "#endif"
$write cvh "#ifdef USE_NSS"
$write cvh "#undef USE_NSS"
$write cvh "#endif"
$write cvh "#ifdef USE_OPENLDAP"
$write cvh "#undef USE_OPENLDAP"
$write cvh "#endif"
$write cvh "#ifdef USE_POLARSSL"
$write cvh "#undef USE_POLARSSL"
$write cvh "#endif"
$write cvh "#ifdef USE_SCHANNEL"
$write cvh "#undef USE_SCHANNEL"
$write cvh "#endif"
$write cvh "#ifdef USE_THREADS_POSIX"
$write cvh "#undef USE_THREADS_POSIX"
$write cvh "#endif"
$write cvh "#ifdef USE_TLS_SRP"
$write cvh "#undef USE_TLS_SRP"
$write cvh "#endif"
$write cvh "#ifdef USE_WINDOWS_SSPI"
$write cvh "#undef USE_WINDOWS_SSPI"
$write cvh "#endif"
$!
$!
$! Note:
$! The CURL_EXTERN_SYMBOL is used for platforms that need the compiler
$! to know about universal symbols. VMS does not need this support so
$! we do not set it here.
$!
$!
$! I can not figure out where the C compiler is finding the ALLOCA.H file
$! in the text libraries, so CONFIG_H.COM can not find it either.
$! Usually the header file name is the module name in the text library.
$! It does not appear to hurt anything to not find header file, so we
$! are not overriding it here.
$!
$!
$! Check to see if OpenSSL is present.
$!----------------------------------
$ssl_include = f$trnlnm("OPENSSL")
$if ssl_include .eqs. ""
$then
$ ssl_include = f$trnlnm("ssl$include")
$endif
$if ssl_include .eqs. "" then nossl = 1
$!
$if .not. nossl
$then
$!
$ write cvh "#ifndef USE_OPENSSL"
$ write cvh "#define USE_OPENSSL 1"
$ write cvh "#endif"
$ write cvh "#ifndef USE_SSLEAY"
$ write cvh "#define USE_SSLEAY 1"
$ write cvh "#endif"
$endif
$!
$!
$! LibIDN not ported to VMS at this time.
$! This is for international domain name support.
$! Allow explicit experimentation.
$if libidn
$then
$ write cvh "#define HAVE_IDNA_STRERROR 1"
$ write cvh "#define HAVE_IDNA_FREE 1"
$ write cvh "#define HAVE_IDNA_FREE_H 1"
$ write cvh "#define HAVE_LIBIDN 1"
$else
$ write cvh "#ifdef HAVE_LIBIDN"
$ write cvh "#undef HAVE_LIBIDN"
$ write cvh "#endif"
$endif
$!
$! LibSSH2 not ported to VMS at this time.
$! Allow explicit experimentation.
$if libssh2
$then
$ write cvh "#define HAVE_LIBSSH2_EXIT 1"
$ write cvh "#define HAVE_LIBSSH2_H 1"
$ write cvh "#define HAVE_LIBSSH2_INIT 1"
$ write cvh "#define HAVE_LIBSSH2_SCP_SEND64 1"
$ write cvh "#define HAVE_LIBSSH2_SESSION_HANDSHAKE 1"
$ write cvh "#define HAVE_LIBSSH2_VERSION 1
$ write cvh "#define HAVE_LIBSSH2 1
$!
$ write cvh "#ifndef USE_LIBSSH2"
$ write cvh "#define USE_LIBSSH2 1"
$ write cvh "#endif"
$else
$ write cvh "#ifdef USE_LIBSSH2"
$ write cvh "#undef USE_LIBSSH2"
$ write cvh "#endif"
$endif
$!
$!
$if .not. nozlib
$then
$ write cvh "#define HAVE_LIBZ 1"
$ write cvh "#define HAVE_ZLIB_H 1"
$endif
$!
$!
$! Close out the file
$!
$write cvh ""
$write cvh "#endif /* __CONFIG_VMS_H__ */"
$close cvh
$!
$all_exit:
$exit