1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-25 01:28:51 -05:00
curl/packages/vms/config_h.com

2150 lines
56 KiB
Plaintext
Raw Normal View History

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-04 16:56:44 -05:00
$! File: config_h.com
$!
$! $Id: config_h.com,v 1.1.1.1 2012/12/02 19:25:21 wb8tyw Exp $
$!
$! This procedure attempts to figure out how to build a config.h file
$! for the current project.
$!
$! P1 specifies the config.h.in file or equivalent. If it is not specified
$! then this procedure will search for several common names of the file.
$!
$! The CONFIGURE shell script will be examined for hints and a few symbols
$! but most of the tests will not produce valid results on OpenVMS. Some
$! will produce false positives and some will produce false negatives.
$!
$! It is easier to just read the config.h_in file and make up tests based
$! on what is in it!
$!
$! This file will create an empty config_vms.h file if one does not exist.
$! The config_vms.h is intended for manual edits to handle things that
$! this procedure can not.
$!
$! The config_vms.h will be invoked by the resulting config.h file.
$!
$! This procedure knows about the DEC C RTL on the system it is on.
$! Future versions may be handle the GNV, the OpenVMS porting library,
$! and others.
$!
$! This procedure may not guess the options correctly for all architectures,
$! and is a work in progress.
$!
$! Copyright 2011 - 2020, John Malmberg
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-04 16:56:44 -05:00
$!
$! 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.
$!
$! 15-Jan-2001 J. Malmberg Original
$! 29-Apr-2001 J. Malmberg Also look for config.*in* in a [.include]
$! subdirectory
$! 30-Apr-2001 J. Malmberg Update for SAMBA checks
$! 09-Apr-2005 J. Malmberg Update for RSYNC and large file.
$! 29-Sep-2011 J. Malmberg Update for Bash 4.2
$! 01-Mar-2012 J. Malmberg Warn about getcwd(0,0)
$! 21-Dec-2012 J. Malmberg Update for gawk
$! 29-Dec-2012 J. Malmberg Update for curl
$!============================================================================
$!
$ss_normal = 1
$ss_abort = 44
$ss_control_y = 1556
$status = ss_normal
$on control_y then goto control_y
$on warning then goto general_error
$!on warning then set ver
$!
$! Some information for writing timestamps to created files
$!----------------------------------------------------------
$my_proc = f$environment("PROCEDURE")
$my_proc_file = f$parse(my_proc,,,"NAME") + f$parse(my_proc,,,"TYPE")
$tab[0,8] = 9
$datetime = f$element(0,".",f$cvtime(,"ABSOLUTE","DATETIME"))
$username = f$edit(f$getjpi("","USERNAME"),"TRIM")
$!
$pid = f$getjpi("","PID")
$tfile1 = "SYS$SCRATCH:config_h_temp1_''pid'.TEMP"
$dchfile = "SYS$SCRATCH:config_h_decc_''pid'.TEMP"
$starhfile = "SYS$SCRATCH:config_h_starlet_''pid'.TEMP"
$configure_script = "SYS$SCRATCH:configure_script_''pid'.TEMP"
$!
$! Get the system type
$!----------------------
$arch_type = f$getsyi("arch_type")
$!
$! Does config_vms.h exist?
$!-------------------------
$update_config_vms = 0
$file = f$search("sys$disk:[]config_vms.h")
$if file .nes. ""
$then
$ write sys$output "Found existing custom file ''file'."
$else
$ update_config_vms = 1
$ write sys$output "Creating new sys$disk:[]config_vms.h for you."
$ gosub write_config_vms
$endif
$!
$!
$! On some platforms, DCL search has problems with searching a file
$! on a NFS mounted volume. So copy it to sys$scratch:
$!
$if f$search(configure_script) .nes. "" then delete 'configure_script';*
$copy sys$disk:[]configure 'configure_script'
$!
$ssl_header_dir = "OPENSSL:"
$if f$trnlnm("OPENSSL") .eqs. ""
$then
$ ssl_header_dir = "SSL$INCLUDE:"
$endif
$!
$!
$! Write out the header
$!----------------------
$gosub write_config_h_header
$!
$!
$!
$! config.h.in could have at least five different names depending
$! on how it was transferred to OpenVMS
$!------------------------------------------------------------------
$if p1 .nes. ""
$then
$ cfile = p1
$else
$ cfile = f$search("sys$disk:[]config.h.in")
$ if cfile .eqs. ""
$ then
$ cfile = f$search("sys$disk:[]config.h_in")
$ if cfile .eqs. ""
$ then
$ cfile = f$search("sys$disk:[]configh.in")
$ if cfile .eqs. ""
$ then
$ cfile = f$search("sys$disk:[]config__2eh.in")
$ if cfile .eqs. ""
$ then
$ cfile = f$search("sys$disk:[]config.h__2ein")
$ endif
$ endif
$ endif
$ endif
$endif
$if f$trnlnm("PRJ_INCLUDE") .nes. ""
$then
$ cfile = f$search("PRJ_INCLUDE:config.h.in")
$ if cfile .eqs. ""
$ then
$ cfile = f$search("PRJ_INCLUDE:config.h_in")
$ if cfile .eqs. ""
$ then
$ cfile = f$search("PRJ_INCLUDE:config__2eh.in")
$ if cfile .eqs. ""
$ then
$ cfile = f$search("PRJ_INCLUDE:config__2eh.in")
$ if cfile .eqs. ""
$ then
$ cfile = f$search("PRJ_INCLUDE:config.h__2ein")
$ endif
$ endif
$ endif
$ endif
$endif
$if cfile .eqs. ""
$then
$ write sys$output "Can not find sys$disk:config.h.in"
$ line_out = "Looked for config.h.in, config.h_in, configh.in, "
$ line_out = line_out + "config__2eh.in, config.h__2ein"
$ write/symbol sys$output line_out
$ if f$trnlnm("PRJ_INCLUDE") .nes. ""
$ then
$ write sys$output "Also looked in PRJ_INCLUDE: for these files."
$ endif
$!
$ write tf ""
$ write tf -
" /* Could not find sys$disk:config.h.in */"
$ write tf -
" /* Looked also for config.h_in, configh.in, config__2eh.in, */"
$ write tf -
" /* config.h__2ein */"
$ if f$trnlnm("PRJ_INCLUDE") .nes. ""
$ then
$ write tf -
" /* Also looked in PRJ_INCLUDE: for these files. */"
$ endif
$ write tf -
"/*--------------------------------------------------------------*/
$ write tf ""
$ goto write_tail
$endif
$!
$!
$! Locate the DECC libraries in use
$!-----------------------------------
$decc_rtldef = f$parse("decc$rtldef","sys$library:.tlb;0")
$decc_starletdef = f$parse("sys$starlet_c","sys$library:.tlb;0")
$decc_shr = f$parse("decc$shr","sys$share:.exe;0")
$!
$! Dump the DECC header names into a file
$!----------------------------------------
$if f$search(dchfile) .nes. "" then delete 'dchfile';*
$if f$search(tfile1) .nes. "" then delete 'tfile1';*
$define/user sys$output 'tfile1'
$library/list 'decc_rtldef'
$open/read/error=rtldef_loop1_end tf1 'tfile1'
$open/write/error=rtldef_loop1_end tf2 'dchfile'
$rtldef_loop1:
$ read/end=rtldef_loop1_end tf1 line_in
$ line_in = f$edit(line_in,"TRIM,COMPRESS")
$ key1 = f$element(0," ",line_in)
$ key2 = f$element(1," ",line_in)
$ if key1 .eqs. " " .or. key1 .eqs. "" then goto rtldef_loop1
$ if key2 .nes. " " .and. key2 .nes. "" then goto rtldef_loop1
$ write tf2 "|",key1,"|"
$ goto rtldef_loop1
$rtldef_loop1_end:
$if f$trnlnm("tf1","lnm$process",,"SUPERVISOR") .nes. "" then close tf1
$if f$trnlnm("tf2","lnm$process",,"SUPERVISOR") .nes. "" then close tf2
$if f$search(tfile1) .nes. "" then delete 'tfile1';*
$!
$! Dump the STARLET header names into a file
$!----------------------------------------
$if f$search(starhfile) .nes. "" then delete 'starhfile';*
$if f$search(tfile1) .nes. "" then delete 'tfile1';*
$define/user sys$output 'tfile1'
$library/list 'decc_starletdef'
$open/read/error=stardef_loop1_end tf1 'tfile1'
$open/write/error=stardef_loop1_end tf2 'starhfile'
$stardef_loop1:
$ read/end=stardef_loop1_end tf1 line_in
$ line_in = f$edit(line_in,"TRIM,COMPRESS")
$ key1 = f$element(0," ",line_in)
$ key2 = f$element(1," ",line_in)
$ if key1 .eqs. " " .or. key1 .eqs. "" then goto stardef_loop1
$ if key2 .nes. " " .and. key2 .nes. "" then goto stardef_loop1
$ write tf2 "|",key1,"|"
$ goto stardef_loop1
$stardef_loop1_end:
$if f$trnlnm("tf1","lnm$process",,"SUPERVISOR") .nes. "" then close tf1
$if f$trnlnm("tf2","lnm$process",,"SUPERVISOR") .nes. "" then close tf2
$if f$search(tfile1) .nes. "" then delete 'tfile1';*
$!
$!
$! Now calculate what should be in the file from reading
$! config.h.in and CONFIGURE.
$!---------------------------------------------------------------
$open/read inf 'cfile'
$do_comment = 0
$if_block = 0
$cfgh_in_loop1:
$!set nover
$ read/end=cfgh_in_loop1_end inf line_in
$ xline = f$edit(line_in,"TRIM,COMPRESS")
$!
$! Blank line handling
$!---------------------
$ if xline .eqs. ""
$ then
$ write tf ""
$ goto cfgh_in_loop1
$ endif
$ xlen = f$length(xline)
$ key = f$extract(0,2,xline)
$!
$! deal with comments by copying exactly
$!-----------------------------------------
$ if (do_comment .eq. 1) .or. (key .eqs. "/*")
$ then
$ do_comment = 1
$ write tf line_in
$ key = f$extract(xlen - 2, 2, xline)
$ if key .eqs. "*/" then do_comment = 0
$ goto cfgh_in_loop1
$ endif
$!
$! Some quick parsing
$!----------------------
$ keyif = f$extract(0,3,xline)
$ key1 = f$element(0," ",xline)
$ key2 = f$element(1," ",xline)
$ key2a = f$element(0,"_",key2)
$ key2b = f$element(1,"_",key2)
$ key2_len = f$length(key2)
$ key2_h = f$extract(key2_len - 2, 2, key2)
$ key2_t = f$extract(key2_len - 5, 5, key2)
$ if key2_t .eqs. "_TYPE" then key2_h = "_T"
$ key64 = 0
$ if f$locate("64", xline) .lt. xlen then key64 = 1
$!
$!write sys$output "xline = ''xline'"
$!
$! Comment out this section of the ifblock
$!-----------------------------------------
$ if if_block .ge. 3
$ then
$ write tf "/* ", xline, " */"
$ if keyif .eqs. "#en" then if_block = 0
$ goto cfgh_in_loop1
$ endif
$!
$! Handle the end of an ifblock
$!-------------------------------
$ if keyif .eqs. "#en"
$ then
$ write tf xline
$ if_block = 0
$ goto cfgh_in_loop1
$ endif
$!
$ if key1 .eqs. "#ifndef"
$ then
$! Manual check for _ALL_SOURCE on AIX error
$!-----------------------------------------------
$ if key2 .eqs. "_ALL_SOURCE"
$ then
$ write tf "/* ", xline, " */"
$!
$! Ignore the rest of the block
$!--------------------------------------
$ if_block = 3
$ goto cfgh_in_loop1
$ endif
$ endif
$!
$!
$! Default action for an #if/#else/#endif
$!------------------------------------------
$ if keyif .eqs. "#if" .or. keyif .eqs. "#el"
$ then
$ if_block = 1
$ write tf xline
$ goto cfgh_in_loop1
$ endif
$!
$!
$! Process "normal?" stuff
$!---------------------------
$ if key1 .eqs. "#undef"
$ then
$ key2c = f$element(2, "_", key2)
$ if (key2c .eqs. "_") .or. (key2c .eqs. "H") then key2c = ""
$ key2d = f$element(3, "_", key2)
$ if (key2d .eqs. "_") .or. (key2d .eqs. "H") then key2d = ""
$ key2e = f$element(4, "_", key2)
$ if (key2e .eqs. "_") .or. (key2e .eqs. "H") then key2e = ""
$ if key2d .eqs. "T"
$ then
$ if key2e .eqs. "TYPE"
$ then
$ key2_h = "_T"
$ key2d = ""
$ endif
$ endif
$!
$ double_under = 0
$!
$! Process FCNTL directives
$!-------------------------------------
$ if (key2b .eqs. "FCNTL") .and. (key2c .eqs. "O") .and. -
(key2d .eqs. "NONBLOCK")
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! Process GETADDRINFO directives
$!-------------------------------------
$ if key2 .eqs. "GETADDRINFO_THREADSAFE"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! Process IOCTL directives
$!-------------------------------------
$ if (key2b .eqs. "IOCTL") .and. (key2c .nes. "")
$ then
$ if (key2c .eqs. "FIONBIO") .or. (key2c .eqs. "SIOCGIFADDR")
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ endif
$!
$!
$! Manual check for LL on
$!-----------------------------------------------
$ if key2 .eqs. "LL"
$ then
$ write tf "#ifndef __VAX
$ write tf "#define HAVE_''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "bool_t"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' short"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "bits16_t"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' short"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "u_bits16_t"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' unsigned short"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "bits32_t"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "u_bits32_t"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' unsigned int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "intmax_t"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#ifdef __VAX"
$ write tf "#define ''key2' long"
$ write tf "#else"
$ write tf "#define ''key2' long long"
$ write tf "#endif"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "uintmax_t"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#ifdef __VAX"
$ write tf "#define ''key2' unsigned long"
$ write tf "#else"
$ write tf "#define ''key2' unsigned long long"
$ write tf "#endif"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "socklen_t"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "GETGROUPS_T"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' gid_t"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_DECL_SYS_SIGLIST"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 0"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_SYS_ERRLIST"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_STRUCT_DIRENT_D_INO"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_STRUCT_TIMEVAL"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! ! The header files have this information, however
$! ! The ioctl() call only works on sockets.
$! if key2 .eqs. "FIONREAD_IN_SYS_IOCTL"
$! then
$! write tf "#ifndef ''key2'"
$! write tf "#define ''key2' 1"
$! write tf "#endif"
$! goto cfgh_in_loop1
$! endif
$!
$! ! The header files have this information, however
$! ! The ioctl() call only works on sockets.
$! if key2 .eqs. "GWINSZ_IN_SYS_IOCTL"
$! then
$! write tf "#ifndef ''key2'"
$! write tf "#define ''key2' 1"
$! write tf "#endif"
$! goto cfgh_in_loop1
$! endif
$!
$! ! The header files have this information, however
$! ! The ioctl() call only works on sockets.
$! if key2 .eqs. "STRUCT_WINSIZE_IN_SYS_IOCTL"
$! then
$! write tf "#ifndef ''key2'"
$! write tf "#define ''key2' 0"
$! write tf "#endif"
$! goto cfgh_in_loop1
$! endif
$!
$ if key2 .eqs. "HAVE_STRUCT_TM_TM_ZONE"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_TM_ZONE"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_TIMEVAL"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "WEXITSTATUS_OFFSET"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 2"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_GETPW_DECLS"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_DECL_CONFSTR"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_DECL_PRINTF"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_DECL_SBRK"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_DECL_STRSIGNAL"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 0"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2a .eqs. "HAVE_DECL_STRTOLD"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 0"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_DECL_STRTOIMAX"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 0"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_DECL_STRTOL"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_DECL_STRTOLL"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_DECL_STRTOUL"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_DECL_STRTOULL"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_DECL_STRTOUMAX"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 0"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "GETPGRP_VOID"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "NAMED_PIPES_MISSING"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "OPENDIR_NOT_ROBUST"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "PGRP_PIPE"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "CAN_REDEFINE_GETENV"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_PRINTF_A_FORMAT"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "CTYPE_NON_ASCII"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_LANGINFO_CODESET"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 0"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! This wants execve() to do this automagically to pass.
$! if key2 .eqs. "HAVE_HASH_BANG_EXEC"
$! then
$! write tf "#ifndef ''key2'"
$! write tf "#define ''key2' 1"
$! write tf "#endif"
$! goto cfgh_in_loop1
$! endif
$!
$ if key2 .eqs. "ICONV_CONST"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2'"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "VOID_SIGHANDLER"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_POSIX_SIGNALS"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "UNUSABLE_RT_SIGNALS"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2a .eqs. "HAVE_DECL_FPURGE"
$ then
$ write tf "#ifndef ''key2a'"
$ write tf "#define ''key2a' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_DECL_SETREGID"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_POSIX_SIGSETJMP"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "HAVE_LIBDL"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2b .eqs. "RAND" .and. key2c .nes. "" .and. key2d .eqs. ""
$ then
$ if (key2c .eqs. "EGD") .or. -
(key2c .eqs. "STATUS") .or. -
(key2c .eqs. "SCREEN")
$ then
$ if f$search("''ssl_header_dir'rand.h") .nes. ""
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ else
$ write tf "/* #undef ''key2' */"
$ endif
$ endif
$ endif
$!
$ if key2 .eqs. "STRCOLL_BROKEN"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2 .eqs. "DUP_BROKEN"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! This is for a test that getcwd(0,0) works.
$! It does not on VMS.
$!--------------------------
$ if key2 .eqs. "GETCWD_BROKEN"
$ then
$ write sys$output ""
$ write sys$output -
"%CONFIG_H-I-NONPORT, ''key2' being tested for!"
$ write sys$output -
"-CONFIG_H-I-GETCWD, GETCWD(0,0) does not work on VMS."
$ write sys$output -
"-CONFIG_H-I-GETCWD2, Work around hack probably required."
$ write sys$output -
"-CONFIG_H-I-REVIEW, Manual Code review required!"
$ if update_config_vms
$ then
$ open/append tfcv sys$disk:[]config_vms.h
$ write tfcv ""
$ write tfcv -
"/* Check config.h for use of ''key2' settings */"
$ write tfcv ""
$ close tfcv
$ endif
$
$ goto cfgh_in_loop1
$ endif
$!
$ if (key2a .eqs. "HAVE") .or. (key2a .eqs. "STAT") .or. -
(key2 .eqs. "ENABLE_IPV6") .or. (key2b .eqs. "LDAP")
$ then
$!
$! Process extra underscores
$!------------------------------------
$ if f$locate("HAVE___", key2) .lt. key2_len
$ then
$ key2b = "__" + key2d
$ key2d = ""
$ double_under = 1
$ else
$ if f$locate("HAVE__", key2) .lt. key2_len
$ then
$ key2b = "_" + key2c
$ key2c = ""
$ double_under = 1
$ endif
$ endif
$!
$ if (key2_h .eqs. "_H") .or. (key2 .eqs. "ENABLE_IPV6") .or. -
(key2b .eqs. "LDAP")
$ then
$!
$! Looking for a header file
$!---------------------------------------
$ headf = key2b
$ if key2c .nes. "" then headf = headf + "_" + key2c
$ if key2d .nes. "" then headf = headf + "_" + key2d
$!
$! (key2b .eqs. "READLINE")
$!
$! Some special parsing
$!------------------------------------------
$ if (key2b .eqs. "SYS") .or. (key2b .eqs. "ARPA") .or. -
(key2b .eqs. "NET") .or. (key2b .eqs. "NETINET")
$ then
$ if key2c .nes. ""
$ then
$ headf = key2c
$ if key2d .nes. "" then headf = key2c + "_" + key2d
$ endif
$ endif
$!
$! And of course what's life with out some special cases
$!--------------------------------------------------------------------
$ if key2 .eqs. "ENABLE_IPV6"
$ then
$ headf = "in6"
$ endif
$!
$ if key2b .eqs. "LDAP"
$ then
$ if (key2 .eqs. "HAVE_LDAP_SSL") .or. -
(key2 .eqs. "HAVE_LDAP_URL_PARSE")
$ then
$ headf = "ldap"
$ endif
$ endif
$!
$!
$ if key2b .eqs. "FILE"
$ then
$ write sys$output ""
$ write sys$output -
"%CONFIG_H-I-NONPORT, ''key2' being asked for!"
$ write sys$output -
"-CONFIG_H-I-FILE_OLD, file.h will not be configured as is obsolete!"
$ write sys$output -
"-CONFIG_H_I-FCNTL_NEW, "Expecting fcntl.h to be configured instead!"
$ write sys$output -
"-CONFIG_H_I-FCNTL_CHK, "Unable to verify at this time!"
$ write sys$output -
"-CONFIG_H-I-REVIEW, Manual Code review required!"
$!
$ if update_config_vms
$ then
$ open/append tfcv sys$disk:[]config_vms.h
$ write tfcv ""
$ write tfcv -
"/* Check config.h for use of fcntl.h instead of file.h */"
$ write tfcv ""
$ close tfcv
$ endif
$ endif
$!
$! Now look it up in the DEC C RTL
$!---------------------------------------------
$ define/user sys$output nl:
$ define/user sys$error nl:
$ search/output=nl: 'dchfile' |'headf'|/exact
$ if '$severity' .eq. 1
$ then
$ if key64 then write tf "#ifndef __VAX"
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$if p2 .nes. "" then write sys$output "''dchfile' - #define ''key2' 1"
$ write tf "#endif"
$ if key64 then write tf "#endif"
$set nover
$ goto cfgh_in_loop1
$ endif
$!
$!
$! Now look it up in the DEC C STARLET_C
$!---------------------------------------------
$ define/user sys$output nl:
$ define/user sys$error nl:
$ search/output=nl: 'starhfile' |'headf'|/exact
$ if '$severity' .eq. 1
$ then
$ if key64 then write tf "#ifndef __VAX"
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$if p2 .nes. "" then write sys$output "''starfile' - #define ''key2' 1"
$ write tf "#endif"
$ if key64 then write tf "#endif"
$set nover
$ goto cfgh_in_loop1
$ endif
$!
$! Now look for OPENSSL headers
$!---------------------------------------------------------
$ if key2b .eqs. "OPENSSL"
$ then
$ headf = headf - "OPENSSL_"
$ header = f$search("''ssl_header_dir'''headf'.h")
$ if header .nes. ""
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$set nover
$ goto cfgh_in_loop1
$ endif
$ endif
$!
$! Now look for Kerberos
$!------------------------------------------------------------
$ if key2b .eqs. "GSSAPI"
$ then
$ header_dir = "sys$sysroot:[kerberos.include]"
$ headf = headf - "GSSAPI_"
$ header = f$search("''header_dir'''headf'.h")
$ if header .nes. ""
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$set nover
$ goto cfgh_in_loop1
$ endif
$ endif
$!
$set nover
$ else
$!
$! Looking for a routine or a symbol
$!------------------------------------------------
$ if key2c .eqs. "MACRO"
$ then
$ if (key2b .eqs. "FILE") .or. (key2b .eqs. "DATE") -
.or. (key2b .eqs. "LINE") .or. (key2b .eqs. "TIME")
$ then
$ write tf "#ifndef HAVE_''key2b'"
$ write tf "#define HAVE_''key2b' 1"
$ write tf "#endif"
$ endif
$ goto cfgh_in_loop1
$ endif
$!
$! Special false tests
$!-------------------------------------
$ if double_under
$ then
$ if key2b .eqs. "_FCNTL" .or. key2b .eqs. "__FCNTL"
$ then
$ write tf "/* #undef HAVE_''key2b' */"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2b .eqs. "_STAT" .or. key2b .eqs. "__STAT"
$ then
$ write tf "/* #undef HAVE_''key2b' */"
$ goto cfgh_in_loop1
$ endif
$!
$ if key2b .eqs. "_READ" .or. key2b .eqs. "__READ"
$ then
$ write tf "/* #undef HAVE_''key2b' */"
$ goto cfgh_in_loop1
$ endif
$ endif
$!
$ keysym = key2b
$ if key2c .nes. "" then keysym = keysym + "_" + key2c
$ if key2d .nes. "" then keysym = keysym + "_" + key2d
$ if key2e .nes. "" then keysym = keysym + "_" + key2e
$!
$!
$! Stat structure members
$!-------------------------------------
$ if key2b .eqs. "STRUCT"
$ then
$ if key2c .eqs. "STAT" .and (key2d .nes. "")
$ then
$ key2b = key2b + "_" + key2c + "_" + key2d
$ key2c = key2e
$ key2d = ""
$ key2e = ""
$ endif
$ endif
$ if (key2b .eqs. "ST") .or. (key2b .eqs. "STRUCT_STAT_ST")
$ then
$ keysym = "ST" + "_" + key2c
$ keysym = f$edit(keysym,"LOWERCASE")
$ endif
$ if key2a .eqs. "STAT"
$ then
$ if (f$locate("STATVFS", key2b) .eq. 0) .and. key2c .eqs. ""
$ then
$ keysym = f$edit(key2b, "LOWERCASE")
$ endif
$!$ if (key2b .eqs. "STATVFS" .or. key2b .eqs. "STATFS2" -
$! .or. key2b .eqs. "STATFS3") .and. key2c .nes. ""
$!
$ if (key2b .eqs. "STATVFS") .and. key2c .nes. ""
$ then
$! Should really verify that the structure
$! named by key2b actually exists first.
$!------------------------------------------------------------
$!
$! Statvfs structure members
$!-------------------------------------------------
$ keysym = "f_" + f$edit(key2c,"LOWERCASE")
$ endif
$ endif
$!
$! UTMPX structure members
$!--------------------------------------
$ if key2b .eqs. "UT" .and. key2c .eqs. "UT"
$ then
$ keysym = "ut_" + f$edit(key2d,"LOWERCASE")
$ endif
$!
$ if f$locate("MMAP",key2) .lt. key2_len
$ then
$ write sys$output ""
$ write sys$output -
"%CONFIG_H-I-NONPORT, ''key2' being asked for!"
$ write sys$output -
"-CONFIG_H-I-MMAP, MMAP operations only work on STREAM and BINARY files!"
$ write sys$output -
"-CONFIG_H-I-REVIEW, Manual Code review required!"
$ if update_config_vms
$ then
$ open/append tfcv sys$disk:[]config_vms.h
$ write tfcv ""
$ write tfcv -
"/* Check config.h for use of ''key2' settings */"
$ write tfcv ""
$ close tfcv
$ endif
$ endif
$!
$!
$ if keysym .eqs. "CRYPT"
$ then
$ write sys$output ""
$ write sys$output -
"%CONFIG_H-I-NONPORT, ''key2' being asked for!"
$ write sys$output -
"-CONFIG_H-I-CRYPT, CRYPT operations on the VMS SYSUAF may not work!"
$ write sys$output -
"-CONFIG_H-I-REVIEW, Manual Code review required!"
$ if update_config_vms
$ then
$ open/append tfcv sys$disk:[]config_vms.h
$ write tfcv ""
$ write tfcv -
"/* Check config.h for use of ''keysym' */"
$ write tfcv ""
$ close tfcv
$ endif
$ endif
$!
$!
$ if keysym .eqs. "EXECL"
$ then
$ write sys$output ""
$ write sys$output -
"%CONFIG_H-I-NONPORT, ''key2' being asked for!"
$ write sys$output -
"-CONFIG_H-I-EXCEL, EXECL configured, Will probably not work."
$ write sys$output -
"-CONFIG_H-I-REVIEW, Manual Code review required!"
$ if update_config_vms
$ then
$ open/append tfcv sys$disk:[]config_vms.h
$ write tfcv ""
$ write tfcv -
"/* Check config.h for use of ''keysym' */"
$ write tfcv ""
$ close tfcv
$ endif
$ endif
$!
$!
$! Process if cpp supports ANSI-C stringizing '#' operator
$!-----------------------------------------------------------------------
$ if keysym .eqs. "STRINGIZE"
$ then
$ write tf "#ifndef HAVE_STRINGIZE"
$ write tf "#define HAVE_STRINGSIZE 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if keysym .eqs. "VOLATILE"
$ then
$ write tf "#ifndef HAVE_VOLATILE"
$ write tf "#define HAVE_VOLATILE 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if keysym .eqs. "ALLOCA"
$ then
$ write tf "#ifndef HAVE_ALLOCA"
$ write tf "#define HAVE_ALLOCA 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if keysym .eqs. "ERRNO_DECL"
$ then
$ write tf "#ifndef HAVE_ERRNO_DECL"
$ write tf "#define HAVE_ERRNO_DECL 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if keysym .eqs. "LONGLONG"
$ then
$ write tf "#ifndef __VAX"
$ write tf "#pragma message disable longlongtype"
$ write tf "#ifndef HAVE_LONGLONG"
$ write tf "#define HAVE_LONGLONG 1"
$ write tf "#endif"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! May need to test compiler version
$!-----------------------------------------------
$ if keysym .eqs. "LONG_LONG"
$ then
$ write tf "#ifndef __VAX"
$ write tf "#pragma message disable longlongtype"
$ write tf "#ifndef HAVE_LONG_LONG"
$ write tf "#define HAVE_LONG_LONG 1"
$ write tf "#endif"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! May need to test compiler version
$!-----------------------------------------------
$ if keysym .eqs. "UNSIGNED_LONG_LONG"
$ then
$ write tf "#ifndef __VAX"
$ write tf "#pragma message disable longlongtype"
$ write tf "#ifndef HAVE_UNSIGNED_LONG_LONG"
$ write tf "#define HAVE_UNSIGNED_LONG_LONG 1"
$ write tf "#endif"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! May need to test compiler version
$!-----------------------------------------------
$ if keysym .eqs. "UNSIGNED_LONG_LONG_INT"
$ then
$ write tf "#ifndef __VAX"
$ write tf "#pragma message disable longlongtype"
$ write tf "#ifndef HAVE_UNSIGNED_LONG_LONG_INT"
$ write tf "#define HAVE_UNSIGNED_LONG_LONG_INT 1"
$ write tf "#endif"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! May need to test compiler version
$!-----------------------------------------------
$ if keysym .eqs. "LONG_DOUBLE"
$ then
$ write tf "#ifndef __VAX"
$ write tf "#pragma message disable longlongtype"
$ write tf "#ifndef HAVE_LONG_DOUBLE"
$ write tf "#define HAVE_LONG_DOUBLE 1"
$ write tf "#endif"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$ if keysym .eqs. "FCNTL_LOCK"
$ then
$ write sys$output -
"%CONFIG_H-I-NONPORT, ''key2' being asked for!
$ write sys$output -
"-CONFIG_H-I-REVIEW, Manual Code review required!"
$ goto cfgh_in_loop1
$ endif
$!
$!
$! These libraries are provided by the DEC C RTL
$!-------------------------------------------------------------
$ if keysym .eqs. "LIBINET" .or. keysym .eqs. "LIBSOCKET"
$ then
$ write tf "#ifndef HAVE_''keysym'"
$ write tf "#define HAVE_''keysym' 1"
$if p2 .nes. "" then write sys$output "''decc_shr' #define ''keysym' 1"
$ write tf "#endif
$ goto cfgh_in_loop1
$ endif
$!
$ if keysym .eqs. "HERRNO" then keysym = "h_errno"
$ if keysym .eqs. "UTIMBUF" then keysym = "utimbuf"
$ if key2c .eqs. "STRUCT"
$ then
$ keysym = f$edit(key2d,"LOWERCASE")
$ else
$ if key2_h .eqs. "_T"
$ then
$ if key2_t .eqs. "_TYPE"
$ then
$ keysym = f$extract(0, key2_len - 5, key2) - "HAVE_"
$ endif
$ keysym = f$edit(keysym,"LOWERCASE")
$ endif
$ endif
$!
$! Check the DEC C RTL shared image first
$!------------------------------------------------------
$ if f$search(tfile1) .nes. "" then delete 'tfile1';*
$ define/user sys$output nl:
$ define/user sys$error nl:
$ search/format=nonull/out='tfile1' 'decc_shr' 'keysym'
$ if '$severity' .eq. 1
$ then
$!
$! Not documented, but from observation
$!------------------------------------------------------
$ define/user sys$output nl:
$ define/user sys$error nl:
$ if arch_type .eq. 3
$ then
$ keyterm = "''keysym'<SOH>"
$ else
$ if arch_type .eq. 2
$ then
$ keyterm = "''keysym'<BS>"
$ else
$ keyterm = "''keysym'<STX>"
$ endif
$ endif
$ search/out=nl: 'tfile1' -
"$''keyterm'","$g''keyterm'","$__utc_''keyterm'",-
"$__utctz_''keyterm'","$__bsd44_''keyterm'","$bsd_''keyterm'",-
"$''keysym'decc$","$G''keysym'decc$","$GX''keyterm'"
$ severity = '$severity'
$!
$!
$! Of course the 64 bit stuff is different
$!---------------------------------------------------------
$ if severity .ne. 1 .and. key64
$ then
$ define/user sys$output nl:
$ define/user sys$error nl:
$ search/out=nl: 'tfile1' "$_''keyterm'"
$! search/out 'tfile1' "$_''keyterm'"
$ severity = '$severity'
$ endif
$!
$! Unix compatibility routines
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-04 16:56:44 -05:00
$!---------------------------------------------
$ if severity .ne. 1
$ then
$ define/user sys$output nl:
$ define/user sys$error nl:
$ search/out=nl: 'tfile1' -
"$__unix_''keyterm'","$__vms_''keyterm'","$_posix_''keyterm'"
$ severity = '$severity'
$ endif
$!
$! Show the result of the search
$!------------------------------------------------
$ if 'severity' .eq. 1
$ then
$ if key64 then write tf "#ifndef __VAX"
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$if p2 .nes. "" then write sys$output "''decc_shr' #define ''key2' 1"
$ write tf "#endif"
$ if key64 then write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ endif
$ if f$search(tfile1) .nes. "" then delete 'tfile1';*
$!
$! Check the DECC Header files next
$!----------------------------------------------
$ define/user sys$output nl:
$ define/user sys$error nl:
$ search/out=nl: 'decc_rtldef' -
"''keysym';", "''keysym'[", "struct ''keysym'"/exact
$ severity = '$severity'
$ if severity .eq. 1
$ then
$ if key64 then write tf "#ifndef __VAX"
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$if p2 .nes. "" then write sys$output "''decc_rtldef' #define ''key2' 1"
$ write tf "#endif"
$ if key64 then write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! Check kerberos
$!--------------------------------------------
$ if f$search("SYS$SYSROOT:[kerberos]include.dir") .nes. ""
$ then
$ test_mit = "SYS$SYSROOT:[kerberos.include]gssapi_krb5.h"
$ if (key2 .eqs. "HAVE_GSSAPI")
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! This is really do we have the newer MIT Kerberos
$!----------------------------------------------------------------------
$ if (key2 .eqs. "HAVE_GSSMIT")
$ then
$ if f$search(test_mit) .nes. ""
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ else
$ write tf "#ifdef ''key2'"
$ write tf "#undef ''key2'"
$ endif
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! Older MIT looks like Heimdal
$!------------------------------------------------
$ if (key2 .eqs. "HAVE_HEIMDAL")
$ then
$ if f$search(test_mit) .eqs. ""
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' 1"
$ else
$ write tf "#ifdef ''key2'"
$ write tf "#undef ''key2'"
$ endif
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ endif
$!
$ endif
$ write tf "/* ", xline, " */"
$ goto cfgh_in_loop1
$ endif
$!
$!
$! Process SIZEOF directives found in SAMBA and others
$!----------------------------------------------------------
$ if key2a .eqs. "SIZEOF"
$ then
$ if key2b .eqs. "INO" .and. key2_h .eqs. "_T"
$ then
$ write tf "#ifndef SIZEOF_INO_T"
$ write tf "#if !__USING_STD_STAT
$ write tf "#define SIZEOF_INO_T 6"
$ write tf "#else
$ write tf "#define SIZEOF_INO_T 8"
$ write tf "#endif
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2b .eqs. "INTMAX" .and. key2_h .eqs. "_T"
$ then
$ write tf "#ifndef SIZEOF_INTMAX_T"
$ write tf "#ifdef __VAX"
$ write tf "#define SIZEOF_INTMAX_T 4"
$ write tf "#else"
$ write tf "#define SIZEOF_INTMAX_T 8"
$ write tf "#endif"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2b .eqs. "OFF" .and. key2_h .eqs. "_T"
$ then
$ write tf "#ifndef SIZEOF_OFF_T"
$ write tf "#if __USE_OFF64_T"
$ write tf "#define SIZEOF_OFF_T 8"
$ write tf "#else"
$ write tf "#define SIZEOF_OFF_T 4"
$ write tf "#endif"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2b .eqs. "CHAR" .and. key2_h .eqs. "_P"
$ then
$ write tf "#ifndef SIZEOF_CHAR_P"
$ write tf "#if __INITIAL_POINTER_SIZE == 64"
$ write tf "#define SIZEOF_CHAR_P 8"
$ write tf "#else"
$ write tf "#define SIZEOF_CHAR_P 4"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2b .eqs. "VOIDP"
$ then
$ write tf "#ifndef SIZEOF_VOIDP"
$ write tf "#if __INITIAL_POINTER_SIZE == 64"
$ write tf "#define SIZEOF_VOIDP 8"
$ write tf "#else"
$ write tf "#define SIZEOF_VOIDP 4"
$ write tf "#endif"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2b .eqs. "INT"
$ then
$ write tf "#ifndef SIZEOF_INT"
$ write tf "#define SIZEOF_INT 4"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2b .eqs. "SIZE" .and. key2_h .eqs. "_T"
$ then
$ write tf "#ifndef SIZEOF_SIZE_T"
$ write tf "#define SIZEOF_SIZE_T 4"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2b .eqs. "TIME" .and. key2_h .eqs. "_T"
$ then
$ write tf "#ifndef SIZEOF_TIME_T"
$ write tf "#define SIZEOF_TIME_T 4"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2b .eqs. "DOUBLE"
$ then
$ write tf "#ifndef SIZEOF_DOUBLE"
$ write tf "#define SIZEOF_DOUBLE 8"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2b .eqs. "LONG"
$ then
$ if key2c .eqs. ""
$ then
$ write tf "#ifndef SIZEOF_LONG"
$ write tf "#define SIZEOF_LONG 4"
$ write tf "#endif"
$ else
$ write tf "#ifndef SIZEOF_LONG_LONG"
$ write tf "#ifndef __VAX"
$ write tf "#define SIZEOF_LONG_LONG 8"
$ write tf "#endif"
$ write tf "#endif"
$ endif
$ goto cfgh_in_loop1
$ endif
$ if key2b .eqs. "SHORT"
$ then
$ write tf "#ifndef SIZEOF_SHORT"
$ write tf "#define SIZEOF_SHORT 2"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ write tf "/* ", xline, " */"
$ goto cfgh_in_loop1
$ endif
$!
$! Process NEED directives
$!-------------------------------
$ if key2a .eqs. "NEED"
$ then
$ if key2b .eqs. "STRINGS" .and. key2_h .eqs. "_H"
$ then
$ write tf "#ifndef NEED_STRINGS_H"
$ write tf "#define NEED_STRINGS_H 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ write tf "/* ", xline, " */"
$ goto cfgh_in_loop1
$ endif
$!
$! Process GETHOSTNAME directives
$!-------------------------------------
$ if key2 .eqs. "GETHOSTNAME_TYPE_ARG2"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#ifdef _DECC_V4_SOURCE"
$ write tf "#define ''key2' int"
$ write tf "#else"
$ write tf "#define ''key2' size_t"
$ write tf "#endif"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! Process GETNAMEINFO directives
$!-------------------------------------
$ if key2a .eqs. "GETNAMEINFO"
$ then
$ if key2 .eqs. "GETNAMEINFO_QUAL_ARG1"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' const"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "GETNAMEINFO_TYPE_ARG1"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' struct sockaddr *"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "GETNAMEINFO_TYPE_ARG2"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' size_t"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "GETNAMEINFO_TYPE_ARG46"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' size_t"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "GETNAMEINFO_TYPE_ARG7"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ endif
$!
$! Process RECV directives
$!-------------------------------------
$ if key2a .eqs. "RECV"
$ then
$ if key2 .eqs. "RECV_TYPE_ARG1"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "RECV_TYPE_ARG2"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' void *"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "RECV_TYPE_ARG3"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' size_t"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "RECV_TYPE_ARG4"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "RECV_TYPE_RETV"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ endif
$!
$!
$! Process RECVFROM directives
$!-------------------------------------
$ if key2a .eqs. "RECVFROM"
$ then
$ if key2 .eqs. "RECVFROM_QUAL_ARG5"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2'"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "RECVFROM_TYPE_ARG1"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "RECVFROM_TYPE_ARG2"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' void *"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "RECVFROM_TYPE_ARG3"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' size_t"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "RECVFROM_TYPE_ARG4"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "RECVFROM_TYPE_ARG5"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' struct sockaddr"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "RECVFROM_TYPE_ARG6"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' unsigned int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "RECVFROM_TYPE_RETV"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ endif
$!
$! Process SELECT directives
$!-------------------------------------
$ if key2a .eqs. "SELECT"
$ then
$ if key2 .eqs. "SELECT_QUAL_ARG5"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' const"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "SELECT_TYPE_ARG1"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "SELECT_TYPE_ARG2"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' void *"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "SELECT_TYPE_ARG234"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' fd_set *"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "SELECT_TYPE_ARG5"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' struct timeval *"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "SELECT_TYPE_RETV"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ endif
$!
$! Process SEND directives
$!-------------------------------------
$ if key2a .eqs. "SEND"
$ then
$ if key2 .eqs. "SEND_QUAL_ARG2"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' const"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "SEND_TYPE_ARG1"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "SEND_TYPE_ARG2"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' void *"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "SEND_TYPE_ARG3"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' size_t"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "SEND_TYPE_ARG4"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ if key2 .eqs. "SEND_TYPE_RETV"
$ then
$ write tf "#ifndef ''key2'"
$ write tf "#define ''key2' int"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$ endif
$!
$!
$! Process STATFS directives
$!-------------------------------
$! if key2a .eqs. "STATFS"
$! then
$! write tf "/* ", xline, " */"
$! goto cfgh_in_loop1
$! endif
$!
$! Process inline directive
$!------------------------------
$ if key2 .eqs. "inline"
$ then
$ write tf "#ifndef inline"
$ write tf "#define inline __inline"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! Process restrict directive
$!--------------------------------
$ if key2 .eqs. "restrict"
$ then
$ write tf "#ifndef restrict"
$ write tf "#define restrict __restrict"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! Process RETSIGTYPE directive
$!----------------------------------
$ if key2 .eqs. "RETSIGTYPE"
$ then
$ write tf "#ifndef RETSIGTYPE"
$ write tf "#define RETSIGTYPE void"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! Process STDC_HEADERS (SAMBA!)
$!---------------------------
$ if key2 .eqs. "STDC_HEADERS"
$ then
$ write tf "#ifndef STDC_HEADERS"
$ write tf "#define STDC_HEADERS 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! Process PROTOTYPES directive
$!-------------------------------------
$ if key2 .eqs. "PROTOTYPES"
$ then
$ write tf "#ifndef PROTOTYPES"
$ write tf "#define PROTOTYPES 1"
$ write tf "#endif"
$ goto cfgh_in_loop1
$ endif
$!
$! Special for SEEKDIR_RETURNS_VOID
$!---------------------------------------
$ if key2 .eqs. "SEEKDIR_RETURNS_VOID"
$ then
$ write tf "#ifndef SEEKDIR_RETURNS_VOID"
$ write tf "#define SEEKDIR_RETURNS_VOID 1"
$ write tf "#endif"
$ endif
$!
$! Unknown - See if CONFIGURE can give a clue for this
$!----------------------------------------------------------
$ pflag = 0
$ set_flag = 0
$! gproj_name = proj_name - "_VMS" - "-VMS"
$ if f$search(tfile1) .nes. "" then delete 'tfile1';*
$ define/user sys$output nl:
$ define/user sys$error nl:
$! if f$locate("FILE", key2) .lt. key2_len then pflag = 1
$! if f$locate("DIR", key2) .eq. key2_len - 3 then pflag = 1
$! if f$locate("PATH", key2) .eq. key2_len - 4 then pflag = 1
$!
$ search/out='tfile1' 'configure_script' "''key2'="/exact
$ search_sev = '$severity'
$ if 'search_sev' .eq. 1
$ then
$ open/read/err=unknown_cf_rd_error sf 'tfile1'
$search_file_rd_loop:
$ read/end=unknown_cf_rd_err sf line_in
$ line_in = f$edit(line_in, "TRIM")
$ skey1 = f$element(0,"=",line_in)
$ if skey1 .eqs. key2
$ then
$ skey2 = f$element(1,"=",line_in)
$ skey2a = f$extract(0,2,skey2)
$!
$!
$! We can not handle assignment to shell symbols.
$! For now skip them.
$!------------------------------------------------------------
$ if f$locate("$", skey2) .lt. f$length(skey2)
$ then
$ write tf "/* ", xline, " */"
$ set_flag = 1
$ goto found_in_configure
$ endif
$!
$! Keep these two cases separate to make it easier to add
$! more future intelligence to this routine
$!----------------------------------------------------------------------
$ if skey2a .eqs. """`"
$ then
$! if pflag .eq. 1
$! then
$! write tf "#ifndef ''key2'"
$! write tf "#define ",key2," """,gproj_name,"_",key2,""""
$! write tf "#endif"
$! else
$! Ignore this for now
$!------------------------------------------
$ write tf "/* ", xline, " */"
$! endif
$ set_flag = 1
$ goto found_in_configure
$ endif
$ if skey2a .eqs. """$"
$ then
$! if pflag .eq. 1
$! then
$! write tf "#ifndef ''key2'"
$! write tf "#define ",key2," """,gproj_name,"_",key2,""""
$! write tf "#endif"
$! else
$! Ignore this for now
$!-------------------------------------------
$ write tf "/* ", xline, " */"
$! endif
$ set_flag = 1
$ goto found_in_configure
$ endif
$!
$! Remove multiple layers of quotes if present
$!----------------------------------------------------------
$ if f$extract(0, 1, skey2) .eqs. "'"
$ then
$ skey2 = skey2 - "'" - "'" - "'" - "'"
$ endif
$ if f$extract(0, 1, skey2) .eqs. """"
$ then
$ skey2 = skey2 - """" - """" - """" - """"
$ endif
$ write tf "#ifndef ''key2'"
$ if skey2 .eqs. ""
$ then
$ write tf "#define ",key2
$ else
$! Only quote non-numbers
$!----------------------------------------
$ if f$string(skey2+0) .eqs. skey2
$ then
$ write tf "#define ",key2," ",skey2
$ else
$ write tf "#define ",key2," """,skey2,""""
$ endif
$ endif
$ write tf "#endif"
$ set_flag = 1
$ else
$ goto search_file_rd_loop
$! if pflag .eq. 1
$! then
$! write tf "#ifndef ''key2'"
$! write tf "#define ",key2," """,gproj_name,"_",key2,""""
$! write tf "#endif"
$! set_flag = 1
$! endif
$ endif
$found_in_configure:
$unknown_cf_rd_err:
$ if f$trnlnm("sf","lnm$process",,"SUPERVISOR") .nes. ""
$ then
$ close sf
$ endif
$ if f$search(tfile1) .nes. "" then delete 'tfile1';*
$ if set_flag .eq. 1 then goto cfgh_in_loop1
$ endif
$ endif
$!
$!
$!
$! If it falls through everything else, comment it out
$!-----------------------------------------------------
$ write tf "/* ", xline, " */"
$ goto cfgh_in_loop1
$cfgh_in_loop1_end:
$close inf
$!
$!
$! Write out the tail
$!--------------------
$write_tail:
$gosub write_config_h_tail
$!
$! Exit and clean up
$!--------------------
$general_error:
$status = '$status'
$all_exit:
$set noon
$if f$trnlnm("sf","lnm$process",,"SUPERVISOR") .nes. "" then close sf
$if f$trnlnm("tf","lnm$process",,"SUPERVISOR") .nes. "" then close tf
$if f$trnlnm("inf","lnm$process",,"SUPERVISOR") .nes. "" then close inf
$if f$trnlnm("tf1","lnm$process",,"SUPERVISOR") .nes. "" then close tf1
$if f$trnlnm("tf2","lnm$process",,"SUPERVISOR") .nes. "" then close tf2
$if f$trnlnm("tfcv","lnm$process",,"SUPERVISOR") .nes. "" then close tfcv
$if f$type(tfile1) .eqs. "STRING"
$then
$ if f$search(tfile1) .nes. "" then delete 'tfile1';*
$endif
$if f$type(dchfile) .eqs. "STRING"
$then
$ if f$search(dchfile) .nes. "" then delete 'dchfile';*
$endif
$if f$type(starhfile) .eqs. "STRING"
$then
$ if f$search(starhfile) .nes. "" then delete 'starhfile';*
$endif
$if f$type(configure_script) .eqs. "STRING"
$then
$ if f$search(configure_script) .nes. "" then delete 'configure_script';*
$endif
$exit 'status'
$!
$!
$control_y:
$ status = ss_control_y
$ goto all_exit
$!
$!
$!
$! Gosub to write a new config_vms.h
$!-----------------------------------
$write_config_vms:
$outfile = "sys$disk:[]config_vms.h"
$create 'outfile'
$open/append tf 'outfile'
$write tf "/* File: config_vms.h"
$write tf "**"
$write tf "** This file contains the manual edits needed for porting"
$!write tf "** the ''proj_name' package to OpenVMS.
$write tf "**"
$write tf "** Edit this file as needed. The procedure that automatically"
$write tf "** generated this header stub will not overwrite or make any"
$write tf "** changes to this file."
$write tf "**"
$write tf -
"** ", datetime, tab, username, tab, "Generated by ''my_proc_file'"
$write tf "**"
$write tf -
"**========================================================================*/"
$write tf ""
$close tf
$return
$!
$! gosub to write out a documentation header for config.h
$!----------------------------------------------------------------
$write_config_h_header:
$outfile = "sys$disk:[]config.h"
$create 'outfile'
$open/append tf 'outfile'
$write tf "#ifndef CONFIG_H"
$write tf "#define CONFIG_H"
$write tf "/* File: config.h"
$write tf "**"
$write tf -
"** This file contains the options needed for porting "
$write tf "** the project on a VMS system."
$write tf "**"
$write tf "** Try not to make any edits to this file, as it is"
$write tf "** automagically generated."
$write tf "**"
$write tf "** Manual edits should be made to the config_vms.h file."
$write tf "**"
$write tf -
"** ", datetime, tab, username, tab, "Generated by ''my_proc_file'"
$write tf "**"
$write tf -
"**========================================================================*/"
$write tf ""
$write tf "#if (__CRTL_VER >= 70200000) && !defined (__VAX)"
$write tf "#define _LARGEFILE 1"
$write tf "#endif"
$write tf ""
$write tf "#ifndef __VAX"
$write tf "#ifdef __CRTL_VER"
$write tf "#if __CRTL_VER >= 80200000"
$write tf "#define _USE_STD_STAT 1"
$write tf "#endif"
$write tf "#endif"
$write tf "#endif"
$write tf ""
$!
$write tf " /* Allow compiler builtins */"
$write tf "/*-------------------------*/"
$write tf "#ifdef __DECC_VER"
2020-12-25 00:52:59 -05:00
$write tf "#include <non_existent_dir:builtins.h>"
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-04 16:56:44 -05:00
$write tf "#endif"
$!
$write tf ""
$return
$!
$! gosub to write out the tail for config.h and close it
$!---------------------------------------------------------
$write_config_h_tail:
$write tf ""
$write tf " /* Include the hand customized settings */"
$write tf "/*--------------------------------------*/"
$write tf "#include ""config_vms.h"""
$write tf ""
$write tf "#endif /* CONFIG_H */"
$close tf
$return
$!