mirror of
https://github.com/curl/curl.git
synced 2025-02-17 14:59:45 +08:00
Add in the files needed to build libcurl shared images on VMS.
Update the packages/vms/readme file to be current. Also some files for the GNV based build were either missing or needed an update. curl_crtl_init.c is a special file that is run before main() to set up the proper C runtime behavior. generate_vax_transfer.com generates the VAX transfer vector modules from the gnv_libcurl_symbols.opt file. gnv_conftest.c_first is a helper file needed for configure scripts to come up with the expected answers on VMS. gnv_libcurl_symbols.opt is the public symbols for the libcurl shared image. gnv_link_curl.com builds the shared libcurl image and rebuilds other programs to use it. macro32_exactcase.patch is a hack to make a local copy of the VMS Macro32 assembler case sensitive, which is needed to build the VAX transfer modules. report_openssl_version.c is a tool for help verify that the libcurl shared image is being built for a minium version of openssl.
This commit is contained in:
parent
ca786233d2
commit
2ad688ed7c
311
packages/vms/curl_crtl_init.c
Normal file
311
packages/vms/curl_crtl_init.c
Normal file
@ -0,0 +1,311 @@
|
||||
/* File: curl_crtl_init.c
|
||||
*
|
||||
* This file makes sure that the DECC Unix settings are correct for
|
||||
* the mode the the program is run in.
|
||||
*
|
||||
* The CRTL has not been initialized at the time that these routines
|
||||
* are called, so many routines can not be called.
|
||||
*
|
||||
* This is a module that provides a LIB$INITIALIZE routine that
|
||||
* will turn on some CRTL features that are not enabled by default.
|
||||
*
|
||||
* The CRTL features can also be turned on via logical names, but that
|
||||
* impacts all programs and some aren't ready, willing, or able to handle
|
||||
* those settings.
|
||||
*
|
||||
* On VMS versions that are too old to use the feature setting API, this
|
||||
* module falls back to using logical names.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Unix headers */
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
/* VMS specific headers */
|
||||
#include <descrip.h>
|
||||
#include <lnmdef.h>
|
||||
#include <stsdef.h>
|
||||
|
||||
#pragma member_alignment save
|
||||
#pragma nomember_alignment longword
|
||||
#pragma message save
|
||||
#pragma message disable misalgndmem
|
||||
struct itmlst_3 {
|
||||
unsigned short int buflen;
|
||||
unsigned short int itmcode;
|
||||
void *bufadr;
|
||||
unsigned short int *retlen;
|
||||
};
|
||||
#pragma message restore
|
||||
#pragma member_alignment restore
|
||||
|
||||
#ifdef __VAX
|
||||
#define ENABLE "ENABLE"
|
||||
#define DISABLE "DISABLE"
|
||||
#else
|
||||
|
||||
#define ENABLE TRUE
|
||||
#define DISABLE 0
|
||||
int decc$feature_get_index (const char *name);
|
||||
int decc$feature_set_value (int index, int mode, int value);
|
||||
#endif
|
||||
|
||||
int SYS$TRNLNM(
|
||||
const unsigned long * attr,
|
||||
const struct dsc$descriptor_s * table_dsc,
|
||||
struct dsc$descriptor_s * name_dsc,
|
||||
const unsigned char * acmode,
|
||||
const struct itmlst_3 * item_list);
|
||||
int SYS$CRELNM(
|
||||
const unsigned long * attr,
|
||||
const struct dsc$descriptor_s * table_dsc,
|
||||
const struct dsc$descriptor_s * name_dsc,
|
||||
const unsigned char * acmode,
|
||||
const struct itmlst_3 * item_list);
|
||||
|
||||
|
||||
/* Take all the fun out of simply looking up a logical name */
|
||||
static int sys_trnlnm
|
||||
(const char * logname,
|
||||
char * value,
|
||||
int value_len)
|
||||
{
|
||||
const $DESCRIPTOR(table_dsc, "LNM$FILE_DEV");
|
||||
const unsigned long attr = LNM$M_CASE_BLIND;
|
||||
struct dsc$descriptor_s name_dsc;
|
||||
int status;
|
||||
unsigned short result;
|
||||
struct itmlst_3 itlst[2];
|
||||
|
||||
itlst[0].buflen = value_len;
|
||||
itlst[0].itmcode = LNM$_STRING;
|
||||
itlst[0].bufadr = value;
|
||||
itlst[0].retlen = &result;
|
||||
|
||||
itlst[1].buflen = 0;
|
||||
itlst[1].itmcode = 0;
|
||||
|
||||
name_dsc.dsc$w_length = strlen(logname);
|
||||
name_dsc.dsc$a_pointer = (char *)logname;
|
||||
name_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
|
||||
name_dsc.dsc$b_class = DSC$K_CLASS_S;
|
||||
|
||||
status = SYS$TRNLNM(&attr, &table_dsc, &name_dsc, 0, itlst);
|
||||
|
||||
if ($VMS_STATUS_SUCCESS(status)) {
|
||||
|
||||
/* Null terminate and return the string */
|
||||
/*--------------------------------------*/
|
||||
value[result] = '\0';
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/* How to simply create a logical name */
|
||||
static int sys_crelnm
|
||||
(const char * logname,
|
||||
const char * value)
|
||||
{
|
||||
int ret_val;
|
||||
const char * proc_table = "LNM$PROCESS_TABLE";
|
||||
struct dsc$descriptor_s proc_table_dsc;
|
||||
struct dsc$descriptor_s logname_dsc;
|
||||
struct itmlst_3 item_list[2];
|
||||
|
||||
proc_table_dsc.dsc$a_pointer = (char *) proc_table;
|
||||
proc_table_dsc.dsc$w_length = strlen(proc_table);
|
||||
proc_table_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
|
||||
proc_table_dsc.dsc$b_class = DSC$K_CLASS_S;
|
||||
|
||||
logname_dsc.dsc$a_pointer = (char *) logname;
|
||||
logname_dsc.dsc$w_length = strlen(logname);
|
||||
logname_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
|
||||
logname_dsc.dsc$b_class = DSC$K_CLASS_S;
|
||||
|
||||
item_list[0].buflen = strlen(value);
|
||||
item_list[0].itmcode = LNM$_STRING;
|
||||
item_list[0].bufadr = (char *)value;
|
||||
item_list[0].retlen = NULL;
|
||||
|
||||
item_list[1].buflen = 0;
|
||||
item_list[1].itmcode = 0;
|
||||
|
||||
ret_val = SYS$CRELNM(NULL, &proc_table_dsc, &logname_dsc, NULL, item_list);
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
|
||||
/* Start of DECC RTL Feature handling */
|
||||
|
||||
/*
|
||||
** Sets default value for a feature
|
||||
*/
|
||||
#ifdef __VAX
|
||||
static void set_feature_default(const char *name, const char *value)
|
||||
{
|
||||
sys_crelnm(name, value);
|
||||
}
|
||||
#else
|
||||
static void set_feature_default(const char *name, int value)
|
||||
{
|
||||
int index;
|
||||
|
||||
index = decc$feature_get_index(name);
|
||||
|
||||
if (index > 0)
|
||||
decc$feature_set_value (index, 0, value);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void set_features(void)
|
||||
{
|
||||
int status;
|
||||
char unix_shell_name[255];
|
||||
int use_unix_settings = 1;
|
||||
|
||||
status = sys_trnlnm("GNV$UNIX_SHELL",
|
||||
unix_shell_name, sizeof unix_shell_name -1);
|
||||
if (!$VMS_STATUS_SUCCESS(status)) {
|
||||
unix_shell_name[0] = 0;
|
||||
use_unix_settings = 0;
|
||||
}
|
||||
|
||||
/* ACCESS should check ACLs or it is lying. */
|
||||
set_feature_default("DECC$ACL_ACCESS_CHECK", ENABLE);
|
||||
|
||||
/* We always want the new parse style */
|
||||
set_feature_default ("DECC$ARGV_PARSE_STYLE" , ENABLE);
|
||||
|
||||
|
||||
/* Unless we are in POSIX compliant mode, we want the old POSIX root
|
||||
* enabled.
|
||||
*/
|
||||
set_feature_default("DECC$DISABLE_POSIX_ROOT", DISABLE);
|
||||
|
||||
/* EFS charset, means UTF-8 support */
|
||||
/* VTF-7 support is controlled by a feature setting called UTF8 */
|
||||
set_feature_default ("DECC$EFS_CHARSET", ENABLE);
|
||||
set_feature_default ("DECC$EFS_CASE_PRESERVE", ENABLE);
|
||||
|
||||
/* Support timestamps when available */
|
||||
set_feature_default ("DECC$EFS_FILE_TIMESTAMPS", ENABLE);
|
||||
|
||||
/* Cache environment variables - performance improvements */
|
||||
set_feature_default ("DECC$ENABLE_GETENV_CACHE", ENABLE);
|
||||
|
||||
/* Start out with new file attribute inheritance */
|
||||
#ifdef __VAX
|
||||
set_feature_default ("DECC$EXEC_FILEATTR_INHERITANCE", "2");
|
||||
#else
|
||||
set_feature_default ("DECC$EXEC_FILEATTR_INHERITANCE", 2);
|
||||
#endif
|
||||
|
||||
/* Don't display trailing dot after files without type */
|
||||
set_feature_default ("DECC$READDIR_DROPDOTNOTYPE", ENABLE);
|
||||
|
||||
/* For standard output channels buffer output until terminator */
|
||||
/* Gets rid of output logs with single character lines in them. */
|
||||
set_feature_default ("DECC$STDIO_CTX_EOL", ENABLE);
|
||||
|
||||
/* Fix mv aa.bb aa */
|
||||
set_feature_default ("DECC$RENAME_NO_INHERIT", ENABLE);
|
||||
|
||||
if (use_unix_settings) {
|
||||
|
||||
/* POSIX requires that open files be able to be removed */
|
||||
set_feature_default ("DECC$ALLOW_REMOVE_OPEN_FILES", ENABLE);
|
||||
|
||||
/* Default to outputting UNIX filesnames in VMS routines */
|
||||
set_feature_default ("DECC$FILENAME_UNIX_ONLY", ENABLE);
|
||||
/* FILENAME_UNIX_ONLY Implicitly sets */
|
||||
/* decc$disable_to_vms_logname_translation */
|
||||
|
||||
set_feature_default ("DECC$FILE_PERMISSION_UNIX", ENABLE);
|
||||
|
||||
set_feature_default ("DECC$FILE_SHARING", ENABLE);
|
||||
|
||||
set_feature_default ("DECC$FILE_OWNER_UNIX", ENABLE);
|
||||
set_feature_default ("DECC$POSIX_SEEK_STREAM_FILE", ENABLE);
|
||||
|
||||
} else {
|
||||
set_feature_default("DECC$FILENAME_UNIX_REPORT", ENABLE);
|
||||
}
|
||||
|
||||
/* When reporting UNIX filenames, glob the same way */
|
||||
set_feature_default ("DECC$GLOB_UNIX_STYLE", ENABLE);
|
||||
|
||||
/* The VMS version numbers on Unix filenames is incompatible with most */
|
||||
/* ported packages. */
|
||||
set_feature_default("DECC$FILENAME_UNIX_NO_VERSION", ENABLE);
|
||||
|
||||
/* The VMS version numbers on Unix filenames is incompatible with most */
|
||||
/* ported packages. */
|
||||
set_feature_default("DECC$UNIX_PATH_BEFORE_LOGNAME", ENABLE);
|
||||
|
||||
/* Set strtol to proper behavior */
|
||||
set_feature_default("DECC$STRTOL_ERANGE", ENABLE);
|
||||
|
||||
/* Commented here to prevent future bugs: A program or user should */
|
||||
/* never ever enable DECC$POSIX_STYLE_UID. */
|
||||
/* It will probably break all code that accesses UIDs */
|
||||
/* do_not_set_default ("DECC$POSIX_STYLE_UID", TRUE); */
|
||||
}
|
||||
|
||||
|
||||
/* Some boilerplate to force this to be a proper LIB$INITIALIZE section */
|
||||
|
||||
#pragma nostandard
|
||||
#pragma extern_model save
|
||||
#ifdef __VAX
|
||||
#pragma extern_model strict_refdef "LIB$INITIALIZE" nowrt, long, nopic
|
||||
#else
|
||||
#pragma extern_model strict_refdef "LIB$INITIALIZE" nowrt, long
|
||||
# if __INITIAL_POINTER_SIZE
|
||||
# pragma __pointer_size __save
|
||||
# pragma __pointer_size 32
|
||||
# else
|
||||
# pragma __required_pointer_size __save
|
||||
# pragma __required_pointer_size 32
|
||||
# endif
|
||||
#endif
|
||||
/* Set our contribution to the LIB$INITIALIZE array */
|
||||
void (* const iniarray[])(void) = {set_features, } ;
|
||||
#ifndef __VAX
|
||||
# if __INITIAL_POINTER_SIZE
|
||||
# pragma __pointer_size __restore
|
||||
# else
|
||||
# pragma __required_pointer_size __restore
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
** Force a reference to LIB$INITIALIZE to ensure it
|
||||
** exists in the image.
|
||||
*/
|
||||
int LIB$INITIALIZE(void);
|
||||
#ifdef __DECC
|
||||
#pragma extern_model strict_refdef
|
||||
#endif
|
||||
int lib_init_ref = (int) LIB$INITIALIZE;
|
||||
#ifdef __DECC
|
||||
#pragma extern_model restore
|
||||
#pragma standard
|
||||
#endif
|
274
packages/vms/generate_vax_transfer.com
Normal file
274
packages/vms/generate_vax_transfer.com
Normal file
@ -0,0 +1,274 @@
|
||||
$! File: generate_vax_transfer.com
|
||||
$!
|
||||
$! $Id$
|
||||
$!
|
||||
$! File to generate and compile the VAX transfer vectors from reading in the
|
||||
$! Alpha/Itanium gnv_libcurl_symbols.opt file.
|
||||
$!
|
||||
$! This procedure patches the VAX Macro32 assembler to be case sensitive
|
||||
$! and then compiles the generated
|
||||
$!
|
||||
$! The output of this procedure is:
|
||||
$! gnv_libcurl_xfer.mar_exact
|
||||
$! gnv_libcurl_xfer.obj
|
||||
$! gnv_libcurl_xfer.opt
|
||||
$! macro32_exactcase.exe
|
||||
$!
|
||||
$! 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.
|
||||
$!
|
||||
$! 20-Jul-2013 J. Malmberg
|
||||
$!============================================================================
|
||||
$!
|
||||
$! Save this so we can get back.
|
||||
$ default_dir = f$environment("default")
|
||||
$!
|
||||
$ on warning then goto all_exit
|
||||
$!
|
||||
$! Want hard tabs in the generated file.
|
||||
$ tab[0,8] = 9
|
||||
$!
|
||||
$! This procedure is used on VAX only
|
||||
$ if (f$getsyi("HW_MODEL") .ge. 1024)
|
||||
$ then
|
||||
$ write sys$output "This procedure is only used on VAX."
|
||||
$ goto all_exit
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$! Get the libcurl version to generate the ident string.
|
||||
$! ident string is max of 31 characters.
|
||||
$!
|
||||
$ ident_string = "unknown"
|
||||
$ open/read cver [-.-.include.curl]curlver.h
|
||||
$cver_loop:
|
||||
$ read/end=cver_loop_end cver line_in
|
||||
$ line_in = f$edit(line_in, "COMPRESS,TRIM")
|
||||
$ if line_in .eqs. "" then goto cver_loop
|
||||
$ code = f$extract(0, 1, line_in)
|
||||
$ if code .nes. "#" then goto cver_loop
|
||||
$ directive = f$element(0, " ", line_in)
|
||||
$ if directive .nes. "#define" then goto cver_loop
|
||||
$ name = f$element(1, " ", line_in)
|
||||
$ if name .nes. "LIBCURL_VERSION" then goto cver_loop
|
||||
$ ident_string = f$element(2, " ", line_in) - "" - ""
|
||||
$cver_loop_end:
|
||||
$ close cver
|
||||
$!
|
||||
$ open/read aopt gnv_libcurl_symbols.opt
|
||||
$!
|
||||
$! Write out the header
|
||||
$ gosub do_header
|
||||
$!
|
||||
$ open/append vopt gnv_libcurl_xfer.mar_exact
|
||||
$ write vopt tab,".IDENT /", ident_string, "/"
|
||||
$!
|
||||
$ write vopt tab, ".PSECT LIBCURL_XFERVECTORS -"
|
||||
$ write vopt tab,tab,tab, "PIC,USR,CON,REL,GBL,SHR,EXE,RD,NOWRT,QUAD"
|
||||
$ write vopt ""
|
||||
$ write vopt tab, "SPARE", tab, "; never delete this spare"
|
||||
$ write vopt ";"
|
||||
$ write vopt ";", tab, "Exact case and upper case transfer vectors"
|
||||
$!
|
||||
$ alias_count = 0
|
||||
$vector_loop:
|
||||
$!
|
||||
$! Read in symbol_vector
|
||||
$!
|
||||
$ read/end=vector_loop_end aopt line_in
|
||||
$ line = f$edit(line_in, "UNCOMMENT,COMPRESS,TRIM")
|
||||
$ if line .eqs. "" then goto vector_loop
|
||||
$!
|
||||
$ line_u = f$edit(line, "UPCASE")
|
||||
$ key = f$element(0, "=", line_u)
|
||||
$ if (key .eqs. "SYMBOL_VECTOR")
|
||||
$ then
|
||||
$ symbol_string = f$element(1, "=", line) - "("
|
||||
$ symbol_type = f$element(2, "=", line_u) - ")"
|
||||
$ symbol_name = f$element(1, "/", symbol_string)
|
||||
$ if symbol_type .nes. "PROCEDURE"
|
||||
$ then
|
||||
$ write sys$output "%CURLBUILD-W-NOTPROC, " + -
|
||||
$ "This procedure can only handle procedure vectors"
|
||||
$ write sys$output -
|
||||
"Data vectors require manual construction for which this procedure or"
|
||||
$ write sys$output -
|
||||
"the shared library needs to be updated to resolve."
|
||||
$ write sys$output -
|
||||
"the preferred solution is to have a procedure return the address of the "
|
||||
$ write sys$output -
|
||||
"the variable instead of having a variable, as if the size of the variable "
|
||||
write sys$output -
|
||||
"changes, the symbol vector is no longer backwards compatible."
|
||||
$ endif
|
||||
$ if (symbol_name .eqs. "/")
|
||||
$ then
|
||||
$ symbol_name = symbol_string
|
||||
$ write vopt tab, symbol_type, tab, symbol_name
|
||||
$ else
|
||||
$ alias_count = alias_count + 1
|
||||
$ symbol_alias = f$element(0, "/", symbol_string)
|
||||
$ write vopt -
|
||||
tab, "''symbol_type_U", tab, symbol_name, tab, symbol_alias
|
||||
$ endif
|
||||
$ endif
|
||||
$ goto vector_loop
|
||||
$vector_loop_end:
|
||||
$!
|
||||
$! End of pass one, second pass needed if aliases exist
|
||||
$ close aopt
|
||||
$!
|
||||
$ if alias_count .eq. 0 then goto finish_file
|
||||
$!
|
||||
$! Start pass 2, write stub routine header
|
||||
$!
|
||||
$ open/read aopt gnv_libcurl_symbols.opt
|
||||
$!
|
||||
$alias_loop:
|
||||
$!
|
||||
$! Read in symbol_vector
|
||||
$!
|
||||
$ read/end=alias_loop_end aopt line_in
|
||||
$ line = f$edit(line_in, "UNCOMMENT,COMPRESS,TRIM")
|
||||
$ if line .eqs. "" then goto alias_loop
|
||||
$!
|
||||
$ line_u = f$edit(line, "UPCASE")
|
||||
$ key = f$element(0, "=", line_u)
|
||||
$ if (key .eqs. "SYMBOL_VECTOR")
|
||||
$ then
|
||||
$ symbol_string = f$element(1, "=", line) - "("
|
||||
$ symbol_type = f$element(2, "=", line_u) - ")"
|
||||
$ symbol_name = f$element(1, "/", symbol_string)
|
||||
$ if (symbol_name .eqs. "/")
|
||||
$ then
|
||||
$ symbol_name = symbol_string
|
||||
$ else
|
||||
$ alias_count = alias_count + 1
|
||||
$ symbol_alias = f$element(0, "/", symbol_string)
|
||||
$ write vopt tab, ".ENTRY", tab, symbol_alias, ", ^M<>"
|
||||
$ endif
|
||||
$ endif
|
||||
$ goto alias_loop
|
||||
$! read in symbol_vector
|
||||
$! if not alias, then loop
|
||||
$! write out subroutine name
|
||||
$!
|
||||
$alias_loop_end:
|
||||
$!
|
||||
$ write vopt tab, "MOVL #1, R0"
|
||||
$ write vopt tab, "RET"
|
||||
$!
|
||||
$finish_file:
|
||||
$!
|
||||
$ write vopt ""
|
||||
$ write vopt tab, ".END"
|
||||
$!
|
||||
$ close aopt
|
||||
$ close vopt
|
||||
$!
|
||||
$! Patch the Macro32 compiler
|
||||
$!----------------------------
|
||||
$ patched_macro = "sys$disk:[]macro32_exactcase.exe"
|
||||
$ if f$search(patched_macro) .eqs. ""
|
||||
$ then
|
||||
$ copy sys$system:macro32.exe 'patched_macro'
|
||||
$ patch @macro32_exactcase.patch
|
||||
$ endif
|
||||
$ define/user macro32 'patched_macro'
|
||||
$ macro/object=gnv_libcurl_xfer.obj gnv_libcurl_xfer.mar_exact
|
||||
$!
|
||||
$! Create the option file for linking the shared image.
|
||||
$ create gnv_libcurl_xfer.opt
|
||||
$ open/append lco gnv_libcurl_xfer.opt
|
||||
$ write lco "gsmatch=lequal,1,1"
|
||||
$ write lco "cluster=transfer_vector,,,''default_dir'gnv_libcurl_xfer"
|
||||
$ write lco "collect=libcurl_global, libcurl_xfervectors"
|
||||
$ close lco
|
||||
$!
|
||||
$!
|
||||
$ goto all_exit
|
||||
$!
|
||||
$! Process the header
|
||||
$do_header:
|
||||
$!
|
||||
$! Force the mode of the file to same as text editor generated.
|
||||
$ create gnv_libcurl_xfer.mar_exact
|
||||
$deck
|
||||
; File: gnv_libcurl_xfer.mar_exact
|
||||
;
|
||||
; VAX transfer vectors
|
||||
;
|
||||
; This needs to be compiled with a specialized patch on Macro32 to make it
|
||||
; preserve the case of symbols instead of converting it to uppercase.
|
||||
;
|
||||
; This patched Macro32 requires all directives to be in upper case.
|
||||
;
|
||||
; There are three sets of symbols for transfer vectors here.
|
||||
;
|
||||
; The first for upper case which matches the tradition method of generating
|
||||
; VAX transfer vectors.
|
||||
;
|
||||
; The second is the exact case for compatibilty with open source C programs
|
||||
; that expect exact case symbols in images. These are separated because a
|
||||
; previous kit had only upper case symbols.
|
||||
;
|
||||
; The third is the routine stub that is used to resolve part of the upper
|
||||
; case transfer vectors, with exact case entry symbols.
|
||||
;
|
||||
; When you add routines, you need to add them after the second set of transfer
|
||||
; vectors for both upper and exact case, and then additional entry points
|
||||
; in upper case added to stub routines.
|
||||
;
|
||||
;*************************************************************************
|
||||
|
||||
.TITLE libcurl_xfer - Transfer vector for libcurl
|
||||
.DISABLE GLOBAL
|
||||
|
||||
;
|
||||
; Macro to generate a transfer vector entry
|
||||
;
|
||||
.MACRO PROCEDURE NAME
|
||||
.EXTRN 'NAME
|
||||
.ALIGN QUAD
|
||||
.TRANSFER 'NAME
|
||||
.MASK 'NAME
|
||||
JMP 'NAME+2
|
||||
.ENDM
|
||||
|
||||
.MACRO PROCEDUREU NAME NAMEU
|
||||
.EXTRN 'NAME
|
||||
.ALIGN QUAD
|
||||
.TRANSFER 'NAMEU
|
||||
.MASK 'NAME
|
||||
JMP 'NAME+2
|
||||
|
||||
.ENDM
|
||||
;
|
||||
;
|
||||
; Macro to reserve a spare entry.
|
||||
;
|
||||
.MACRO SPARE
|
||||
.ALIGN QUAD
|
||||
.ALIGN QUAD
|
||||
.QUAD 0
|
||||
.ENDM
|
||||
|
||||
$EOD
|
||||
$!
|
||||
$!
|
||||
$ return
|
||||
$!
|
||||
$all_exit:
|
||||
$set def 'default_dir'
|
||||
$exit '$status'
|
61
packages/vms/gnv_conftest.c_first
Normal file
61
packages/vms/gnv_conftest.c_first
Normal file
@ -0,0 +1,61 @@
|
||||
/* File: GNV$CONFTEST.C_FIRST
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* Copyright 2009, John Malmberg
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
/* This is needed for Configure tests to get the correct exit status */
|
||||
void __posix_exit(int __status);
|
||||
#define exit(__p1) __posix_exit(__p1)
|
||||
|
||||
/* Fake pass the test to find a standard ldap routine that we know is */
|
||||
/* present on VMS, but with the wrong case for the symbol */
|
||||
char ldap_url_parse(void) {return 0;}
|
||||
|
||||
/* These are to pass the test that does not use headers */
|
||||
/* Because configure does an #undef which keeps us from using #define */
|
||||
/* char CRYPTO_add_lock(void) {return 0;} */
|
||||
char SSL_connnect(void) {return 0;}
|
||||
char ENGINE_init(void) {return 0;}
|
||||
char RAND_status(void) {return 0;}
|
||||
/* char RAND_screen(void) {return 0;} In headers, but not present */
|
||||
char RAND_egd(void) {return 0;}
|
||||
char CRYPTO_cleanup_all_ex_data(void) {return 0;}
|
||||
char SSL_get_shutdown(void) {return 0;}
|
||||
char ENGINE_load_builtin_engines (void) {return 0;}
|
||||
|
||||
/* And these are to pass the test that uses headers. */
|
||||
/* Because the HP OpenSSL transfer vectors are currently in Upper case only */
|
||||
#pragma message disable macroredef
|
||||
#define CRYPTO_add_lock CRYPTO_ADD_LOCK
|
||||
#define SSL_connect SSL_CONNECT
|
||||
#define ENGINE_init ENGINE_INIT
|
||||
#define RAND_status RAND_STATUS
|
||||
/* #define RAND_screen RAND_SCREEN */
|
||||
#define RAND_egd RAND_EGD
|
||||
#define CRYPTO_cleanup_all_ex_data CRYPTO_CLEANUP_ALL_EX_DATA
|
||||
#define SSL_get_shutdown SSL_GET_SHUTDOWN
|
||||
#define ENGINE_load_builtin_engines ENGINE_LOAD_BUILTIN_ENGINES
|
||||
|
||||
/* Can not use the #define macro to fix the case on CRYPTO_lock because */
|
||||
/* there is a macro CRYPTO_LOCK that is a number */
|
||||
|
||||
/* After all the work to get configure to pass the CRYPTO_LOCK tests,
|
||||
* it turns out that VMS does not have the CRYPTO_LOCK symbol in the
|
||||
* transfer vector, even though it is in the header file.
|
||||
*/
|
||||
|
181
packages/vms/gnv_libcurl_symbols.opt
Normal file
181
packages/vms/gnv_libcurl_symbols.opt
Normal file
@ -0,0 +1,181 @@
|
||||
! File GNV$LIBCURL_SYMBOLS.OPT
|
||||
!
|
||||
! $Id$
|
||||
!
|
||||
! This file must be manually maintained to allow upward compatibility
|
||||
! The SYMBOL_VECTORs are set up so that applications can be compiled
|
||||
! with either case sensitive symbol names or the default of uppercase.
|
||||
! This is because many of the Open Source applications that would call
|
||||
! the LIBCURL library need to be built with case sensitive names.
|
||||
!
|
||||
! Automatic generation is currently not practical because the order of
|
||||
! the entries are important for upward compatibility.
|
||||
!
|
||||
! The GSMATCH is manually set to the major version of 1, with the minor
|
||||
! version being the next two sections multiplied by a power of 10 to
|
||||
! become the minor version.
|
||||
! So LIBCURL 7.18.1 becomes 1,718010.
|
||||
! And a future LIBCURL of 7.18.2 would be 1,718020 if new routines were added.
|
||||
!
|
||||
! This leaves some spare digits for minor patches.
|
||||
!
|
||||
! Note that the GSMATCH does not need to have any real relationship to the
|
||||
! actual package version number.
|
||||
!
|
||||
! New SYMBOL_VECTORs must be added to the end of this list, and added
|
||||
! in pairs for both exact and with an uppercase alias.
|
||||
! If the public symbol is more than 31 characters long, then a special
|
||||
! shortened symbol will be exported, and three aliases should be created,
|
||||
! The aliases will be the special shortened uppercase alias, and both
|
||||
! upper and lowercase versions of a truncated name (preferred) or a
|
||||
! modified manually shortened name if a truncated name will not be
|
||||
! unique.
|
||||
!
|
||||
! Routines can not be removed, the functionality must be maintained.
|
||||
! If a new routine is supplied where the arguments are incompatible with
|
||||
! the older version, both versions are needed to be maintained.
|
||||
! The old version can be given a different name, but must be in the same
|
||||
! SYMBOL_VECTOR positions in this file.
|
||||
!
|
||||
! Changing the number of parameters for an existing routine does not require
|
||||
! maintaining multiple versions as long as the routine can be called with
|
||||
! the old number of parameters.
|
||||
!
|
||||
! Copyright 2009, John Malmberg
|
||||
!
|
||||
! Permission to use, copy, modify, and/or distribute this software for any
|
||||
! purpose with or without fee is hereby granted, provided that the above
|
||||
! copyright notice and this permission notice appear in all copies.
|
||||
!
|
||||
! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||
! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
!============================================================================
|
||||
GSMATCH=LEQUAL,1,719050
|
||||
CASE_SENSITIVE=YES
|
||||
SYMBOL_VECTOR=(curl_strequal=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_STREQUAL/curl_strequal=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_strnequal=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_STRNEQUAL/curl_strnequal=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_formadd=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_FORMADD/curl_formadd=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_formget=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_FORMGET/curl_formget=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_formfree=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_FORMFREE/curl_formfree=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_getenv=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_GETENV/curl_getenv=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_version=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_VERSION/curl_version=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_easy_escape=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_EASY_ESCAPE/curl_easy_escape=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_escape=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_ESCAPE/curl_escape=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_easy_unescape=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_EASY_UNESCAPE/curl_easy_unescape=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_unescape=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_UNESCAPE/curl_unescape=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_free=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_FREE/curl_free=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_global_init=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_GLOBAL_INIT/curl_global_init=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_global_init_mem=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_GLOBAL_INIT_MEM/curl_global_init_mem=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_global_cleanup=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_GLOBAL_CLEANUP/curl_global_cleanup=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_slist_append=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_SLIST_APPEND/curl_slist_append=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_slist_free_all=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_SLIST_FREE_ALL/curl_slist_free_all=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_getdate=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_GETDATE/curl_getdate=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_share_init=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_SHARE_INIT/curl_share_init=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_share_setopt=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_SHARE_SETOPT/curl_share_setopt=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_share_cleanup=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_SHARE_CLEANUP/curl_share_cleanup=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_version_info=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_VERSION_INFO/curl_version_info=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_easy_strerror=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_EASY_STRERROR/curl_easy_strerror=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_share_strerror=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_SHARE_STRERROR/curl_share_strerror=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_easy_pause=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_EASY_PAUSE/curl_easy_pause=PROCEDURE)
|
||||
!
|
||||
! easy.h
|
||||
SYMBOL_VECTOR=(curl_easy_init=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_EASY_INIT/curl_easy_init=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_easy_setopt=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_EASY_SETOPT/curl_easy_setopt=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_easy_perform=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_EASY_PERFORM/curl_easy_perform=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_easy_cleanup=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_EASY_CLEANUP/curl_easy_cleanup=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_easy_getinfo=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_EASY_GETINFO/curl_easy_getinfo=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_easy_duphandle=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_EASY_DUPHANDLE/curl_easy_duphandle=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_easy_reset=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_EASY_RESET/curl_easy_reset=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_easy_recv=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_EASY_RECV/curl_easy_recv=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_easy_send=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_EASY_SEND/curl_easy_send=PROCEDURE)
|
||||
!
|
||||
! multi.h
|
||||
SYMBOL_VECTOR=(curl_multi_init=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_INIT/curl_multi_init=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_multi_add_handle=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_ADD_HANDLE/curl_multi_add_handle=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_multi_remove_handle=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_REMOVE_HANDLE/curl_multi_remove_handle=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_multi_fdset=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_FDSET/curl_multi_fdset=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_multi_perform=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_PERFORM/curl_multi_perform=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_multi_cleanup=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_CLEANUP/curl_multi_cleanup=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_multi_info_read=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_INFO_READ/curl_multi_info_read=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_multi_strerror=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_STRERROR/curl_multi_strerror=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_multi_socket=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_SOCKET/curl_multi_socket=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_multi_socket_action=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_SOCKET_ACTION/curl_multi_socket_action=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_multi_socket_all=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_SOCKET_ALL/curl_multi_socket_all=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_multi_timeout=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_TIMEOUT/curl_multi_timeout=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_multi_setopt=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_SETOPT/curl_multi_setopt=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_multi_assign=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MULTI_ASSIGN/curl_multi_assign=PROCEDURE)
|
||||
!
|
||||
! mprintf.h
|
||||
SYMBOL_VECTOR=(curl_mprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MPRINTF/curl_mprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_mfprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MFPRINTF/curl_mfprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_msprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MSPRINTF/curl_msprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_msnprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MSNPRINTF/curl_msnprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_mvprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MVPRINTF/curl_mvprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_mvfprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MVFPRINTF/curl_mvfprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_mvsprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MVSPRINTF/curl_mvsprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_mvsnprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MVSNPRINTF/curl_mvsnprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_maprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MAPRINTF/curl_maprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(curl_mvaprintf=PROCEDURE)
|
||||
SYMBOL_VECTOR=(CURL_MVAPRINTF/curl_mvaprintf=PROCEDURE)
|
845
packages/vms/gnv_link_curl.com
Normal file
845
packages/vms/gnv_link_curl.com
Normal file
@ -0,0 +1,845 @@
|
||||
$! File: gnv_link_curl.com
|
||||
$!
|
||||
$! $Id$
|
||||
$!
|
||||
$! File to build images using gnv$libcurl.exe
|
||||
$!
|
||||
$! Copyright 2009, John Malmberg
|
||||
$!
|
||||
$! Permission to use, copy, modify, and/or distribute this software for any
|
||||
$! purpose with or without fee is hereby granted, provided that the above
|
||||
$! copyright notice and this permission notice appear in all copies.
|
||||
$!
|
||||
$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||
$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
$!
|
||||
$! 10-Jun-2009 J. Malmberg
|
||||
$!============================================================================
|
||||
$!
|
||||
$! Save this so we can get back.
|
||||
$ default_dir = f$environment("default")
|
||||
$ define/job gnv_packages_vms 'default_dir'
|
||||
$!
|
||||
$ on warning then goto all_exit
|
||||
$!
|
||||
$! On VAX, we need to generate a Macro transfer vector.
|
||||
$ parse_style = "TRADITIONAL"
|
||||
$ if (f$getsyi("HW_MODEL") .lt. 1024)
|
||||
$ then
|
||||
$ @generate_vax_transfer.com
|
||||
$ 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"
|
||||
$!
|
||||
$! Extended parsing option starts with VMS 7.3-1.
|
||||
$! There is no 7.4, so that simplifies the parse a bit.
|
||||
$!
|
||||
$ node_swvers = f$getsyi("node_swvers")
|
||||
$ version_patch = f$extract(1, f$length(node_swvers), node_swvers)
|
||||
$ maj_ver = f$element(0, ".", version_patch)
|
||||
$ min_ver_patch = f$element(1, ".", version_patch)
|
||||
$ min_ver = f$element(0, "-", min_ver_patch)
|
||||
$ patch = f$element(1, "-", min_ver_patch)
|
||||
$ if patch .eqs. "-" then patch = ""
|
||||
$ parse_x = 0
|
||||
$ if maj_ver .ges. "8"
|
||||
$ then
|
||||
$ parse_x = 1
|
||||
$ else
|
||||
$ if maj_ver .eqs. "7" .and. min_ver .ges. "3" .and. patch .nes. ""
|
||||
$ then
|
||||
$ parse_x = 1
|
||||
$ endif
|
||||
$ endif
|
||||
$ if parse_x
|
||||
$ then
|
||||
$ parse_style = f$getjpi("", "parse_style_perm")
|
||||
$ endif
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$! Move to where the base directories.
|
||||
$ set def [--]
|
||||
$!
|
||||
$!
|
||||
$! Build the Message file.
|
||||
$!--------------------------
|
||||
$ if f$search("[.packages.vms]curlmsg.obj") .eqs. ""
|
||||
$ then
|
||||
$ message [.packages.vms]curlmsg.msg/object=[.packages.vms]
|
||||
$ endif
|
||||
$ if f$search("gnv$curlmsg.exe") .eqs. ""
|
||||
$ then
|
||||
$ link/share=gnv$curlmsg.exe [.packages.vms]curlmsg.obj
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$! Need to build the common init module.
|
||||
$!-------------------------------------------
|
||||
$ cflags = "/list/show=(expan,includ)"
|
||||
$ init_obj = "[.packages.vms]curl_crtl_init.obj"
|
||||
$ if f$search(init_obj) .eqs. ""
|
||||
$ then
|
||||
$ cc'cflags' 'default_dir'curl_crtl_init.c/obj='init_obj'
|
||||
$ endif
|
||||
$ purge 'init_obj'
|
||||
$ rename 'init_obj' ;1
|
||||
$!
|
||||
$!
|
||||
$! Need to build the module to test the HP OpenSSL version
|
||||
$!--------------------------------------------------------
|
||||
$ if arch_name .nes. "VAX"
|
||||
$ then
|
||||
$ rpt_obj = "[.packages.vms]report_openssl_version.obj
|
||||
$ if f$search(rpt_obj) .eqs. ""
|
||||
$ then
|
||||
$ cc'cflags' 'default_dir'report_openssl_version.c/obj='rpt_obj'
|
||||
$ endif
|
||||
$ purge 'rpt_obj'
|
||||
$ rename 'rpt_obj' ;1
|
||||
$!
|
||||
$ link/exe='default_dir'report_openssl_version.exe 'rpt_obj'
|
||||
$ report_openssl_version := $'default_dir'report_openssl_version.exe
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$ base_link_opt_file = "[.packages.vms.''arch_name']gnv_libcurl_linker.opt"
|
||||
$ share_link_opt_file = "[.packages.vms.''arch_name']gnv_ssl_libcurl_linker.opt"
|
||||
$ if f$search(base_link_opt_file) .eqs. ""
|
||||
$ then
|
||||
$ base_link_opt_file = "[.packages.vms]gnv_libcurl_linker.opt"
|
||||
$ share_link_opt_file = "[.packages.vms]gnv_ssl_libcurl_linker.opt"
|
||||
$ if f$search(base_link_opt_file) .eqs. ""
|
||||
$ then
|
||||
$ write sys$output "Can not find base library option file!"
|
||||
$ goto all_exit
|
||||
$ endif
|
||||
$ endif
|
||||
$!
|
||||
$! Create the a new option file with special fixup for HP SSL
|
||||
$! For a shared image, we always want ZLIB and 32 bit HPSSL
|
||||
$!
|
||||
$ if f$search("gnv$libzshr32") .eqs. ""
|
||||
$ then
|
||||
$ write sys$output "VMSPORTS/GNV LIBZ Shared image not found!"
|
||||
$ goto all_exit
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$! Need to check the version of the HP SSL shared image.
|
||||
$!
|
||||
$! VAX platform can not be checked this way, it appears symbol lookup
|
||||
$! was disabled. VAX has not been updated in a while.
|
||||
$ if arch_name .eqs. "VAX"
|
||||
$ then
|
||||
$ hp_ssl_libcrypto32 = "sys$common:[syslib]ssl$libcrypto_shr32.exe"
|
||||
$ hp_ssl_libssl32 = "sys$common:[syslib]ssl$libssl_shr32.exe"
|
||||
$ if f$search(hp_ssl_libcrypto32) .nes. ""
|
||||
$ then
|
||||
$ use_hp_ssl = 1
|
||||
$ curl_ssl_libcrypto32 = hp_ssl_libcrypto32
|
||||
$ curl_ssl_libssl32 = hp_ssl_libssl32
|
||||
$ curl_ssl_version = "OpenSSL/0.9.6g"
|
||||
$ else
|
||||
$ write sys$output "HP OpenSSL Shared images not found!"
|
||||
$ goto all_exit
|
||||
$ endif
|
||||
$ else
|
||||
$!
|
||||
$! Minimum HP version we can use reports:
|
||||
$! "OpenSSL 0.9.8w 23 Apr 2012"
|
||||
$!
|
||||
$ use_hp_ssl = 0
|
||||
$ hp_ssl_libcrypto32 = "sys$share:ssl$libcrypto_shr32.exe"
|
||||
$ hp_ssl_libssl32 = "sys$share:ssl$libssl_shr32.exe"
|
||||
$ if f$search(hp_ssl_libcrypto32) .nes. ""
|
||||
$ then
|
||||
$ curl_ssl_libcrypto32 = hp_ssl_libcrypto32
|
||||
$ curl_ssl_libssl32 = hp_ssl_libssl32
|
||||
$ report_openssl_version 'hp_ssl_libcrypto32' hp_ssl_version
|
||||
$ endif
|
||||
$!
|
||||
$ if f$type(hp_ssl_version) .eqs. "STRING"
|
||||
$ then
|
||||
$ curl_ssl_version = hp_ssl_version
|
||||
$ full_version = f$element(1, " ", hp_ssl_version)
|
||||
$ ver_maj = f$element(0, ".", full_version)
|
||||
$ ver_min = f$element(1, ".", full_version)
|
||||
$ ver_patch = f$element(2, ".", full_version)
|
||||
$ ver_patch_len = f$length(ver_patch)
|
||||
$ ver_patchnum = f$extract(0, ver_patch_len - 1, ver_patch)
|
||||
$ ver_patchltr = f$extract(ver_patch_len - 1, 1, ver_patch)
|
||||
$ if 'ver_maj' .ge. 0
|
||||
$ then
|
||||
$ if 'ver_min' .ge. 9
|
||||
$ then
|
||||
$ if 'ver_patchnum' .ge. 8
|
||||
$ then
|
||||
$ if ver_patchltr .ges. "w" then use_hp_ssl = 1
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$ if use_hp_ssl .eq. 0
|
||||
$ then
|
||||
$ write sys$output -
|
||||
" HP OpenSSL version of ""''hp_ssl_version'"" is too old for shared libcurl!"
|
||||
$ endif
|
||||
$ else
|
||||
$ write sys$output "Unable to get version of HP OpenSSL"
|
||||
$ endif
|
||||
$!
|
||||
$ gnv_ssl_libcrypto32 = "gnv$gnu:[lib]ssl$libcrypto_shr32.exe"
|
||||
$ gnv_ssl_libssl32 = "gnv$gnu:[lib]ssl$libssl_shr32.exe"
|
||||
$ if f$search(gnv_ssl_libcrypto32) .nes. ""
|
||||
$ then
|
||||
$ report_openssl_version 'gnv_ssl_libcrypto32' gnv_ssl_version
|
||||
$ endif
|
||||
$!
|
||||
$ use_gnv_ssl = 0
|
||||
$ if f$type(gnv_ssl_version) .eqs. "STRING"
|
||||
$ then
|
||||
$ gnv_full_version = f$element(1, " ", gnv_ssl_version)
|
||||
$ gnv_ver_maj = f$element(0, ".", gnv_full_version)
|
||||
$ gnv_ver_min = f$element(1, ".", gnv_full_version)
|
||||
$ gnv_ver_patch = f$element(2, ".", gnv_full_version)
|
||||
$ gnv_ver_patch_len = f$length(gnv_ver_patch)
|
||||
$ gnv_ver_patchnum = f$extract(0, gnv_ver_patch_len - 1, gnv_ver_patch)
|
||||
$ gnv_ver_patchltr = f$extract(gnv_ver_patch_len - 1, 1, gnv_ver_patch)
|
||||
$ if 'gnv_ver_maj' .ge. 0
|
||||
$ then
|
||||
$ if 'gnv_ver_min' .ge. 9
|
||||
$ then
|
||||
$ if 'gnv_ver_patchnum' .ge. 8
|
||||
$ then
|
||||
$ if gnv_ver_patchltr .ges. "w" then use_gnv_ssl = 1
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$ if use_gnv_ssl .eq. 0
|
||||
$ then
|
||||
$ write sys$output -
|
||||
"GNV OpenSSL version of ""''gnv_ssl_version'" is too old for shared libcurl!"
|
||||
$ endif
|
||||
$!
|
||||
$! Prefer to break the tie with the lowest supported version
|
||||
$! For simplicity, if the GNV image is present, it will be used.
|
||||
$! Version tuple is not a simple compare.
|
||||
$!
|
||||
$ if use_gnv_ssl .eq. 1 then
|
||||
$ curl_ssl_libcrypto32 = gnv_ssl_libcrypto32
|
||||
$ curl_ssl_libssl32 = gnv_ssl_libssl32
|
||||
$ curl_ssl_version = gnv_ssl_version
|
||||
$ use_hp_ssl = 0
|
||||
$ endif
|
||||
!$!
|
||||
$ else
|
||||
$ write sys$output "Unable to get version of GNV OpenSSL"
|
||||
$ endif
|
||||
$!
|
||||
$! Need to write a release note section about HP OpenSSL
|
||||
$!
|
||||
$create 'default_dir'hp_ssl_release_info.txt
|
||||
$deck
|
||||
This package is built on with the OpenSSL version listed below and requires
|
||||
the shared images from the HP OpenSSL product that is kitted with that
|
||||
version or a compatible later version.
|
||||
|
||||
For Alpha and IA64 platforms, see the url below to register to get the
|
||||
download URL. The kit will be HP 1.4-467 or later.
|
||||
http://h71000.www7.hp.com/openvms/products/ssl/ssl.html
|
||||
|
||||
For VAX, use the same registration, but remove the kit name from any of the
|
||||
download URLs provided and put in CPQ-VAXVMS-SSL-V0101-B-1.PCSI-DCX_VAXEXE
|
||||
|
||||
If your system can not be upgraded to a compatible version of OpenSSL, then
|
||||
you can extract the two shared images from the kit and place them in the
|
||||
[vms$common.gnv.lib]directory of the volume that you are installing GNV and
|
||||
or GNV compatible components like Curl.
|
||||
|
||||
If GNV is installed, you must run the GNV startup procedure before these steps
|
||||
and before installing Curl.
|
||||
|
||||
|
||||
1. make sure that [vms$common.gnv.lib] exists by using the following
|
||||
commands. We want the directory to be in lowercase except on VAX.
|
||||
|
||||
$SET PROCESS/PARSE=extend !If not VAX.
|
||||
$CREATE/DIR device:[vms$common.gnv.lib]/prot=w:re
|
||||
|
||||
2. Extract the ssl$crypto_shr32.exe and ssl$libssl_shr32.exe images.
|
||||
|
||||
$PRODUCT EXTRACT FILE -
|
||||
/select=(ssl$libcrypto_shr32.exe,ssl$libssl_shr32.exe)-
|
||||
/source=device:[dir] -
|
||||
/destination=device:[vms$common.gnv.lib]
|
||||
|
||||
The [vms$common.sys$startup}curl_startup.com procedure will then configure
|
||||
libcurl to use these shared images instead of the system ones.
|
||||
|
||||
When you upgrade SSL on VMS to the newer version of HP SSL, then these copies
|
||||
should be deleted.
|
||||
|
||||
$eod
|
||||
$!
|
||||
$ open/append sslr 'default_dir'hp_ssl_release_info.txt
|
||||
$ write sslr "OpenSSL version used for building this kit: ",curl_ssl_version
|
||||
$ write sslr ""
|
||||
$ close sslr
|
||||
$!
|
||||
$!
|
||||
$! LIBZ
|
||||
$ libzshr_line = ""
|
||||
$ try_shr = "gnv$libzshr32"
|
||||
$ if f$search(try_shr) .nes. ""
|
||||
$ then
|
||||
$ libzshr_line = "''try_shr'/share"
|
||||
$ else
|
||||
$ write sys$output "''try_shr' image not found!"
|
||||
$ goto all_exit
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$ gssrtlshr_line = ""
|
||||
$ if arch_name .nes. "VAX"
|
||||
$ then
|
||||
$ try_shr = "sys$share:gss$rtl"
|
||||
$ if f$search("''try_shr'.exe") .nes. ""
|
||||
$ then
|
||||
$ gssrtlshr_line = "''try_shr'/share"
|
||||
$ else
|
||||
$ write sys$output "''try_shr' image not found!"
|
||||
$ goto all_exit
|
||||
$ endif
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$!
|
||||
$ if f$search(share_link_opt_file) .eqs. ""
|
||||
$ then
|
||||
$ create 'share_link_opt_file'
|
||||
$ open/append slopt 'share_link_opt_file'
|
||||
$ if libzshr_line .nes. "" then write slopt libzshr_line
|
||||
$ if gssrtlshr_line .nes. "" then write slopt gssrtlshr_line
|
||||
$ write slopt "gnv$curl_ssl_libcryptoshr32/share"
|
||||
$ write slopt "gnv$curl_ssl_libsslshr32/share"
|
||||
$ close slopt
|
||||
$ endif
|
||||
$!
|
||||
$! DCL build puts curllib in architecture directory
|
||||
$! GNV build uses the makefile.
|
||||
$ libfile = "[.packages.vms.''arch_name']curllib.olb"
|
||||
$ if f$search(libfile) .nes. ""
|
||||
$ then
|
||||
$ olb_file = libfile
|
||||
$ else
|
||||
$ ! GNV based build
|
||||
$ libfile = "[.lib.^.libs]libcurl.a"
|
||||
$ if f$search(libfile) .nes. ""
|
||||
$ then
|
||||
$ olb_file = libfile
|
||||
$ else
|
||||
$ write sys$output -
|
||||
"Can not build shared image, libcurl object library not found!"
|
||||
$ goto all_exit
|
||||
$ endif
|
||||
$ endif
|
||||
$!
|
||||
$gnv_libcurl_share = "''default_dir'gnv$libcurl.exe"
|
||||
$!
|
||||
$set ver
|
||||
$ if f$search(gnv_libcurl_share) .eqs. ""
|
||||
$ then
|
||||
$ if arch_name .nes. "VAX"
|
||||
$ then
|
||||
$ define/user gnv$curl_ssl_libcryptoshr32 'curl_ssl_libcrypto32'
|
||||
$ define/user gnv$curl_ssl_libsslshr32 'curl_ssl_libssl32'
|
||||
$ link/dsf='default_dir'gnv$libcurl.dsf/share='gnv_libcurl_share' -
|
||||
/map='default_dir'gnv$libcurl.map -
|
||||
gnv_packages_vms:gnv_libcurl_symbols.opt/opt,-
|
||||
'olb_file'/lib,-
|
||||
'share_link_opt_file'/opt
|
||||
$ else
|
||||
$! VAX will not allow the logical name hack for the
|
||||
$! SSL libcryto library, it is pulling it in twice if I try it.
|
||||
$ link/share='gnv_libcurl_share'/map='default_dir'gnv$libcurl.map -
|
||||
gnv_packages_vms:gnv_libcurl_xfer.opt/opt,-
|
||||
'olb_file'/lib,-
|
||||
'base_link_opt_file'/opt
|
||||
$ endif
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$ if f$search("[.src]curl-tool_main.o") .nes. ""
|
||||
$ then
|
||||
$! From src/makefile.inc:
|
||||
$! # libcurl has sources that provide functions named curlx_* that aren't
|
||||
$! # part of the official API, but we re-use the code here to avoid
|
||||
$! # duplication.
|
||||
$!
|
||||
$!
|
||||
$ if f$search("[.src]curl.exe") .eqs. ""
|
||||
$ then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.src]curl.exe/dsf=[.src]curl.dsf -
|
||||
[.src]curl-tool_main.o, [.src]curl-tool_binmode.o, -
|
||||
[.src]curl-tool_bname.o, [.src]curl-tool_cb_dbg.o, -
|
||||
[.src]curl-tool_cb_hdr.o, [.src]curl-tool_cb_prg.o, -
|
||||
[.src]curl-tool_cb_rea.o, [.src]curl-tool_cb_see.o, -
|
||||
[.src]curl-tool_cb_wrt.o, [.src]curl-tool_cfgable.o, -
|
||||
[.src]curl-tool_convert.o, [.src]curl-tool_dirhie.o, -
|
||||
[.src]curl-tool_doswin.o, [.src]curl-tool_easysrc.o, -
|
||||
[.src]curl-tool_formparse.o, [.src]curl-tool_getparam.o, -
|
||||
[.src]curl-tool_getpass.o, [.src]curl-tool_help.o, -
|
||||
[.src]curl-tool_helpers.o, [.src]curl-tool_homedir.o, -
|
||||
[.src]curl-tool_hugehelp.o, [.src]curl-tool_libinfo.o, -
|
||||
[.src]curl-tool_metalink.o, [.src]curl-tool_mfiles.o, -
|
||||
[.src]curl-tool_msgs.o, [.src]curl-tool_operate.o, -
|
||||
[.src]curl-tool_operhlp.o, [.src]curl-tool_panykey.o, -
|
||||
[.src]curl-tool_paramhlp.o, [.src]curl-tool_parsecfg.o, -
|
||||
[.src]curl-tool_setopt.o, [.src]curl-tool_sleep.o, -
|
||||
[.src]curl-tool_urlglob.o, [.src]curl-tool_util.o, -
|
||||
[.src]curl-tool_vms.o, [.src]curl-tool_writeenv.o, -
|
||||
[.src]curl-tool_writeout.o, [.src]curl-tool_xattr.o, -
|
||||
[.src]curl-strtoofft.o, [.src]curl-strdup.o, [.src]curl-rawstr.o, -
|
||||
[.src]curl-nonblock.o, gnv_packages_vms:curlmsg.obj,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
gnv_packages_vms:curl_crtl_init.obj
|
||||
$ endif
|
||||
$ else
|
||||
$ curl_exe = "[.src]curl.exe"
|
||||
$ curl_dsf = "[.src]curl.dsf"
|
||||
$ curl_main = "[.packages.vms.''arch_name']tool_main.obj"
|
||||
$ curl_src = "[.packages.vms.''arch_name']curlsrc.olb"
|
||||
$ curl_lib = "[.packages.vms.''arch_name']curllib.olb"
|
||||
$ strtoofft = "strtoofft"
|
||||
$ strdup = "strdup"
|
||||
$ rawstr = "rawstr"
|
||||
$ nonblock = "nonblock"
|
||||
$!
|
||||
$! Extended parse style requires special quoting
|
||||
$!
|
||||
$ if (arch_name .nes. "VAX") .and. (parse_style .eqs. "EXTENDED")
|
||||
$ then
|
||||
$ strtoofft = """strtoofft"""
|
||||
$ strdup = """strdup"""
|
||||
$ rawstr = """rawstr"""
|
||||
$ nonblock = """nonblock"""
|
||||
$ endif
|
||||
$ if f$search(curl_exe) .eqs. ""
|
||||
$ then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe='curl_exe'/dsf='curl_dsf' -
|
||||
'curl_main','curl_src'/lib, -
|
||||
'curl_lib'/library/include=-
|
||||
('strtoofft', 'strdup', 'rawstr', 'nonblock'),-
|
||||
gnv_packages_vms:curlmsg.obj,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
gnv_packages_vms:curl_crtl_init.obj
|
||||
$ endif
|
||||
$ endif
|
||||
$!
|
||||
$set nover
|
||||
$!
|
||||
$! in6addr_missing so skip building:
|
||||
$! [.server]sws.o
|
||||
$! [.server]sockfilt.o
|
||||
$! [.server]tftpd.o
|
||||
$!
|
||||
$!
|
||||
$ target = "10-at-a-time"
|
||||
$ if f$search("[.docs.examples]''target'.o") .eqs. ""
|
||||
$ then
|
||||
$ write sys$output "examples not built"
|
||||
$ goto all_exit
|
||||
$ endif
|
||||
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$ then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$ target = "anyauthput"
|
||||
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$ then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$ target = "certinfo"
|
||||
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$ then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$ target = "cookie_interface"
|
||||
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$ then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$ target = "debug"
|
||||
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$ then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$ target = "fileupload"
|
||||
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$ then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$ target = "fopen"
|
||||
$ if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$ then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$ endif
|
||||
$!
|
||||
$!
|
||||
$target = "ftpget"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "ftpgetresp"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "ftpupload"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "getinfo"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "getinmemory"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "http-post"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "httpcustomheader"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "httpput"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "https"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "multi-app"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "multi-debugcallback"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "multi-double"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "multi-post"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "multi-single"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "persistant"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "post-callback"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "postit2"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "sendrecv"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "sepheaders"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "simple"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "simplepost"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$!
|
||||
$target = "simplessl"
|
||||
$if f$search("[.docs.examples]''target'.exe") .eqs. ""
|
||||
$then
|
||||
$ define/user gnv$libcurl 'gnv_libcurl_share'
|
||||
$ link'ldebug'/exe=[.docs.examples]'target'.exe-
|
||||
/dsf=[.docs.examples]'target'.dsf -
|
||||
[.docs.examples]'target'.o,-
|
||||
gnv$'target'.opt/opt,-
|
||||
sys$input:/opt
|
||||
gnv$libcurl/share
|
||||
$endif
|
||||
$!
|
||||
$! =============== End of docs/examples =========================
|
||||
$!
|
||||
$!
|
||||
$all_exit:
|
||||
$set def 'default_dir'
|
||||
$exit '$status'
|
||||
$!
|
11
packages/vms/macro32_exactcase.patch
Normal file
11
packages/vms/macro32_exactcase.patch
Normal file
@ -0,0 +1,11 @@
|
||||
macro32_exactcase.exe
|
||||
SE EC
|
||||
^X00000001
|
||||
RE /I
|
||||
^X00012B1D
|
||||
'BICB2 #^X00000020,R3'
|
||||
EXIT
|
||||
'BICB2 #^X00000000,R3'
|
||||
EXI
|
||||
U
|
||||
EXI
|
100
packages/vms/report_openssl_version.c
Normal file
100
packages/vms/report_openssl_version.c
Normal file
@ -0,0 +1,100 @@
|
||||
/* File: report_openssl_version.c
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* This file dynamically loads the openssl shared image to report the
|
||||
* version string.
|
||||
*
|
||||
* It will optionally place that version string in a DCL symbol.
|
||||
*
|
||||
* Usage: report_openssl_version <shared_image> [<dcl_symbol>]
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <dlfcn.h>
|
||||
#include <openssl/opensslv.h>
|
||||
#include <openssl/crypto.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <descrip.h>
|
||||
#include <libclidef.h>
|
||||
#include <stsdef.h>
|
||||
#include <errno.h>
|
||||
|
||||
unsigned long LIB$SET_SYMBOL(
|
||||
const struct dsc$descriptor_s * symbol,
|
||||
const struct dsc$descriptor_s * value,
|
||||
const unsigned long * table_type);
|
||||
|
||||
int main(int argc, char ** argv) {
|
||||
|
||||
|
||||
void * libptr;
|
||||
const char * (*ssl_version)(int t);
|
||||
const char * version;
|
||||
|
||||
if (argc < 1) {
|
||||
puts("report_openssl_version filename");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
libptr = dlopen(argv[1], 0);
|
||||
|
||||
ssl_version = (const char * (*)(int))dlsym(libptr, "SSLeay_version");
|
||||
if ((void *)ssl_version == NULL) {
|
||||
ssl_version = (const char * (*)(int))dlsym(libptr, "ssleay_version");
|
||||
if ((void *)ssl_version == NULL) {
|
||||
ssl_version = (const char * (*)(int))dlsym(libptr, "SSLEAY_VERSION");
|
||||
}
|
||||
}
|
||||
|
||||
dlclose(libptr);
|
||||
|
||||
if ((void *)ssl_version == NULL) {
|
||||
puts("Unable to lookup version of OpenSSL");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
version = ssl_version(SSLEAY_VERSION);
|
||||
|
||||
puts(version);
|
||||
|
||||
/* Was a symbol argument given? */
|
||||
if (argc > 1) {
|
||||
int status;
|
||||
struct dsc$descriptor_s symbol_dsc;
|
||||
struct dsc$descriptor_s value_dsc;
|
||||
const unsigned long table_type = LIB$K_CLI_LOCAL_SYM;
|
||||
|
||||
symbol_dsc.dsc$a_pointer = argv[2];
|
||||
symbol_dsc.dsc$w_length = strlen(argv[2]);
|
||||
symbol_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
|
||||
symbol_dsc.dsc$b_class = DSC$K_CLASS_S;
|
||||
|
||||
value_dsc.dsc$a_pointer = (char *)version; /* Cast ok */
|
||||
value_dsc.dsc$w_length = strlen(version);
|
||||
value_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
|
||||
value_dsc.dsc$b_class = DSC$K_CLASS_S;
|
||||
|
||||
status = LIB$SET_SYMBOL(&symbol_dsc, &value_dsc, &table_type);
|
||||
if (!$VMS_STATUS_SUCCESS(status)) {
|
||||
exit(status);
|
||||
}
|
||||
}
|
||||
|
||||
exit(0);
|
||||
}
|
Loading…
Reference in New Issue
Block a user