From d135906dbcab367f968d7989233884f554d42945 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Fri, 25 Mar 2011 09:39:46 +0000 Subject: [PATCH] For VMS, implement the possibility to choose 64-bit pointers with different options: "64" The build system will choose /POINTER_SIZE=64=ARGV if the compiler supports it, otherwise /POINTER_SIZE=64. "64=" The build system will force /POINTER_SIZE=64. "64=ARGV" The build system will force /POINTER_SIZE=64=ARGV. --- VMS/mkshared.com | 2 ++ apps/makeapps.com | 49 ++++++++++++++++++++++--------- apps/openssl.c | 64 ++++++++++++++++++++++------------------- crypto/crypto-lib.com | 29 +++++++++++++------ engines/makeengines.com | 29 +++++++++++++------ makevms.com | 29 +++++++++++++------ ssl/ssl-lib.com | 50 +++++++++++++++++++++++++------- test/maketests.com | 45 ++++++++++++++++++++--------- 8 files changed, 207 insertions(+), 90 deletions(-) diff --git a/VMS/mkshared.com b/VMS/mkshared.com index d92a823f0b..794e1de62a 100644 --- a/VMS/mkshared.com +++ b/VMS/mkshared.com @@ -328,6 +328,8 @@ $ entrycount=0 $ loop: $ read /end=loop_end /err=loop_end libnum line $ lin = f$edit( line, "COMPRESS,TRIM") +$! Skip a "#" comment line. +$ if (f$extract( 0, 1, lin) .eqs. "#") then goto loop $ entrynum = f$int(f$element( 1, " ", lin)) $ entryinfo = f$element( 2, " ", lin) $ curentry = f$element( 0, " ", lin) diff --git a/apps/makeapps.com b/apps/makeapps.com index 8924f50f6d..95b6ecdd1c 100644 --- a/apps/makeapps.com +++ b/apps/makeapps.com @@ -40,11 +40,15 @@ $! $! P5, if defined, sets a choice of programs to compile. $! $! P6, if defined, specifies the C pointer size. Ignored on VAX. +$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.) $! Supported values are: $! $! "" Compile with default (/NOPOINTER_SIZE) $! 32 Compile with /POINTER_SIZE=32 (SHORT) $! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]) +$! (Automatically select ARGV if compiler supports it.) +$! 64= Compile with /POINTER_SIZE=64 (LONG). +$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV). $! $! P7, if defined, specifies a directory where ZLIB files (zlib.h, $! libz.olb) may be found. Optionally, a non-default object library @@ -597,13 +601,22 @@ $ IF (P6 .EQS. "32") $ THEN $ POINTER_SIZE = "/POINTER_SIZE=32" $ ELSE -$ IF (P6 .EQS. "64") +$ POINTER_SIZE = F$EDIT( P6, "COLLAPSE, UPCASE") +$ IF ((POINTER_SIZE .EQS. "64") .OR. - + (POINTER_SIZE .EQS. "64=") .OR. - + (POINTER_SIZE .EQS. "64=ARGV")) $ THEN -$ POINTER_SIZE = "/POINTER_SIZE=64" +$ ARCHD = ARCH+ "_64" +$ LIB32 = "" +$ IF (F$EXTRACT( 2, 1, POINTER_SIZE) .EQS. "=") +$ THEN +$! Explicit user choice: "64" or "64=ARGV". +$ IF (POINTER_SIZE .EQS. "64=") THEN POINTER_SIZE = "64" +$ ELSE $ SET NOON -$ DEFINE /USER SYS$OUTPUT NL: -$ DEFINE /USER SYS$ERROR NL: -$ CC /POINTER_SIZE=64=ARGV NL: +$ DEFINE /USER_MODE SYS$OUTPUT NL: +$ DEFINE /USER_MODE SYS$ERROR NL: +$ CC /NOLIST /NOOBJECT /POINTER_SIZE=64=ARGV NL: $ IF ($STATUS .AND. %X0FFF0000) .EQ. %X00030000 $ THEN $ ! If we got here, it means DCL complained like this: @@ -615,14 +628,15 @@ $ ! have been deassigned automatically. However, when DCL $ ! complains, they aren't, so we do it here (it might be $ ! unnecessary, but just in case there will be another error $ ! message further on that we don't want to miss) -$ DEASSIGN/USER SYS$ERROR -$ DEASSIGN/USER SYS$OUTPUT +$ DEASSIGN /USER_MODE SYS$ERROR +$ DEASSIGN /USER_MODE SYS$OUTPUT $ ELSE $ POINTER_SIZE = POINTER_SIZE + "=ARGV" $ ENDIF $ SET ON -$ ARCHD = ARCH+ "_64" -$ LIB32 = "" +$ ENDIF +$ POINTER_SIZE = "/POINTER_SIZE=''POINTER_SIZE'" +$! $ ELSE $! $! Tell The User Entered An Invalid Option. @@ -631,9 +645,16 @@ $ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT "The Option ", P6, - " Is Invalid. The Valid Options Are:" $ WRITE SYS$OUTPUT "" -$ WRITE SYS$OUTPUT " """" : Compile with default (short) pointers." -$ WRITE SYS$OUTPUT " 32 : Compile with 32-bit (short) pointers." -$ WRITE SYS$OUTPUT " 64 : Compile with 64-bit (long) pointers." +$ WRITE SYS$OUTPUT - + " """" : Compile with default (short) pointers." +$ WRITE SYS$OUTPUT - + " 32 : Compile with 32-bit (short) pointers." +$ WRITE SYS$OUTPUT - + " 64 : Compile with 64-bit (long) pointers (auto ARGV)." +$ WRITE SYS$OUTPUT - + " 64= : Compile with 64-bit (long) pointers (no ARGV)." +$ WRITE SYS$OUTPUT - + " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)." $ WRITE SYS$OUTPUT "" $! $! Time To EXIT. @@ -832,8 +853,8 @@ $! $ CC = "CC" $ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" - THEN CC = "CC/DECC" -$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=RELAXED"+ - - "''POINTER_SIZE'/NOLIST/PREFIX=ALL" + - +$ CC = CC + "/''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ - + "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + - "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS $! $! Define The Linker Options File Name. diff --git a/apps/openssl.c b/apps/openssl.c index 950c9c8bf2..dab057bbff 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -212,8 +212,13 @@ static void lock_dbg_cb(int mode, int type, const char *file, int line) } } +#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64) +# define ARGV _Argv +#else +# define ARGV Argv +#endif -int main(int Argc, char *_Argv[]) +int main(int Argc, char *ARGV[]) { ARGS arg; #define PROG_NAME_SIZE 39 @@ -228,25 +233,33 @@ int main(int Argc, char *_Argv[]) LHASH_OF(FUNCTION) *prog=NULL; long errline; -#if defined( OPENSSL_SYS_VMS) && !defined( VMS_TRUST_ARGV) - /* 2011-03-08 SMS. - * "HP C V7.3-009 on OpenVMS Alpha V8.3" with 64-bit - * pointers (at least) may not NULL-terminate argv[] - * as expected. If necessary, use a (properly) - * NULL-terminated duplicate of argv[]. - */ - /* 2011-03-20 RL. - * Additionally, when the argument vector is full of - * 32-bit pointers and we have a 64-bit pointer size - * everywhere else, we need to make a copy of it using - * 64-bit pointers. Hence the odd conditinal. +#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64) + /* 2011-03-22 SMS. + * If we have 32-bit pointers everywhere, then we're safe, and + * we bypass this mess, as on non-VMS systems. (See ARGV, + * above.) + * Problem 1: Compaq/HP C before V7.3 always used 32-bit + * pointers for argv[]. + * Fix 1: For a 32-bit argv[], when we're using 64-bit pointers + * everywhere else, we always allocate and use a 64-bit + * duplicate of argv[]. + * Problem 2: Compaq/HP C V7.3 (Alpha, IA64) before ECO1 failed + * to NULL-terminate a 64-bit argv[]. (As this was written, the + * compiler ECO was available only on IA64.) + * Fix 2: Unless advised not to (VMS_TRUST_ARGV), we test a + * 64-bit argv[argc] for NULL, and, if necessary, use a + * (properly) NULL-terminated (64-bit) duplicate of argv[]. + * The same code is used in either case to duplicate argv[]. + * Some of these decisions could be handled in preprocessing, + * but the code tends to get even uglier, and the penalty for + * deciding at compile- or run-time is tiny. */ char **Argv = NULL; int free_Argv = 0; - if (_Argv[ Argc] != NULL -# if defined(__INITIAL_POINTER_SIZE) - || sizeof(_Argv) < (__INITIAL_POINTER_SIZE / 8) + if ((sizeof( _Argv) < 8) /* 32-bit argv[]. */ +# if !defined( VMS_TRUST_ARGV) + || (_Argv[ Argc] != NULL) /* Untrusted argv[argc] not NULL. */ # endif ) { @@ -256,24 +269,17 @@ int main(int Argc, char *_Argv[]) { ret = -1; goto end; } for(i = 0; i < Argc; i++) Argv[i] = _Argv[i]; - Argv[ Argc] = NULL; + Argv[ Argc] = NULL; /* Certain NULL termination. */ free_Argv = 1; } else { - /* 2011-03-20 RL. - * If we didn't copy the argument vector, then simply - * assign our variable. This will never happen when - * the argument vector pointer size was smaller than - * the initial pointer size, so even if the case might - * look unsafe, it isn't, it's just there to shut the - * compiler up. - */ + /* Use the known-good 32-bit argv[] (which needs the + * type cast to satisfy the compiler), or the trusted or + * tested-good 64-bit argv[] as-is. */ Argv = (char **)_Argv; } -#else - char **Argv = _Argv; -#endif +#endif /* defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64) */ arg.data=NULL; arg.count=0; @@ -420,7 +426,7 @@ end: BIO_free(bio_err); bio_err=NULL; } -#if defined( OPENSSL_SYS_VMS) && !defined( VMS_TRUST_ARGV) +#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64) /* Free any duplicate Argv[] storage. */ if (free_Argv) { diff --git a/crypto/crypto-lib.com b/crypto/crypto-lib.com index a4dffe9160..3a5296cf3f 100644 --- a/crypto/crypto-lib.com +++ b/crypto/crypto-lib.com @@ -52,7 +52,10 @@ $! Supported values are: $! $! "" Compile with default (/NOPOINTER_SIZE) $! 32 Compile with /POINTER_SIZE=32 (SHORT) -$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]) +$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]). +$! (Automatically select ARGV if compiler supports it.) +$! 64= Compile with /POINTER_SIZE=64 (LONG). +$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV). $! $! P8, if defined, specifies a directory where ZLIB files (zlib.h, $! libz.olb) may be found. Optionally, a non-default object library @@ -975,11 +978,14 @@ $ IF (P7 .EQS. "32") $ THEN $ POINTER_SIZE = "/POINTER_SIZE=32" $ ELSE -$ IF (P7 .EQS. "64") +$ POINTER_SIZE = F$EDIT( P7, "COLLAPSE, UPCASE") +$ IF ((POINTER_SIZE .EQS. "64") .OR. - + (POINTER_SIZE .EQS. "64=") .OR. - + (POINTER_SIZE .EQS. "64=ARGV")) $ THEN -$ POINTER_SIZE = "/POINTER_SIZE=64" $ ARCHD = ARCH+ "_64" $ LIB32 = "" +$ POINTER_SIZE = "/POINTER_SIZE=64" $ ELSE $! $! Tell The User Entered An Invalid Option. @@ -988,9 +994,16 @@ $ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT "The Option ", P7, - " Is Invalid. The Valid Options Are:" $ WRITE SYS$OUTPUT "" -$ WRITE SYS$OUTPUT " """" : Compile with default (short) pointers." -$ WRITE SYS$OUTPUT " 32 : Compile with 32-bit (short) pointers." -$ WRITE SYS$OUTPUT " 64 : Compile with 64-bit (long) pointers." +$ WRITE SYS$OUTPUT - + " """" : Compile with default (short) pointers." +$ WRITE SYS$OUTPUT - + " 32 : Compile with 32-bit (short) pointers." +$ WRITE SYS$OUTPUT - + " 64 : Compile with 64-bit (long) pointers (auto ARGV)." +$ WRITE SYS$OUTPUT - + " 64= : Compile with 64-bit (long) pointers (no ARGV)." +$ WRITE SYS$OUTPUT - + " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)." $ WRITE SYS$OUTPUT "" $! $! Time To EXIT. @@ -1190,8 +1203,8 @@ $! $ CC = "CC" $ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" - THEN CC = "CC/DECC" -$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=RELAXED"+ - - "''POINTER_SIZE'/NOLIST/PREFIX=ALL" + - +$ CC = CC + "/''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ - + "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + - "/INCLUDE=(''CC_INCLUDES')"+ - CCEXTRAFLAGS $! diff --git a/engines/makeengines.com b/engines/makeengines.com index 39b50ab3c9..046b1a70d1 100644 --- a/engines/makeengines.com +++ b/engines/makeengines.com @@ -34,6 +34,9 @@ $! $! "" Compile with default (/NOPOINTER_SIZE) $! 32 Compile with /POINTER_SIZE=32 (SHORT) $! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]) +$! (Automatically select ARGV if compiler supports it.) +$! 64= Compile with /POINTER_SIZE=64 (LONG). +$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV). $! $! P8, if defined, specifies a directory where ZLIB files (zlib.h, $! libz.olb) may be found. Optionally, a non-default object library @@ -608,11 +611,14 @@ $ IF (OPT_POINTER_SIZE .EQS. "32") $ THEN $ POINTER_SIZE = "/POINTER_SIZE=32" $ ELSE -$ IF (OPT_POINTER_SIZE .EQS. "64") +$ POINTER_SIZE = F$EDIT( OPT_POINTER_SIZE, "COLLAPSE, UPCASE") +$ IF ((POINTER_SIZE .EQS. "64") .OR. - + (POINTER_SIZE .EQS. "64=") .OR. - + (POINTER_SIZE .EQS. "64=ARGV")) $ THEN -$ POINTER_SIZE = "/POINTER_SIZE=64" $ ARCHD = ARCH+ "_64" $ LIB32 = "" +$ POINTER_SIZE = "/POINTER_SIZE=64" $ ELSE $! $! Tell The User Entered An Invalid Option. @@ -621,9 +627,16 @@ $ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT "The Option ", OPT_POINTER_SIZE, - " Is Invalid. The Valid Options Are:" $ WRITE SYS$OUTPUT "" -$ WRITE SYS$OUTPUT " """" : Compile with default (short) pointers." -$ WRITE SYS$OUTPUT " 32 : Compile with 32-bit (short) pointers." -$ WRITE SYS$OUTPUT " 64 : Compile with 64-bit (long) pointers." +$ WRITE SYS$OUTPUT - + " """" : Compile with default (short) pointers." +$ WRITE SYS$OUTPUT - + " 32 : Compile with 32-bit (short) pointers." +$ WRITE SYS$OUTPUT - + " 64 : Compile with 64-bit (long) pointers (auto ARGV)." +$ WRITE SYS$OUTPUT - + " 64= : Compile with 64-bit (long) pointers (no ARGV)." +$ WRITE SYS$OUTPUT - + " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)." $ WRITE SYS$OUTPUT "" $! $! Time To EXIT. @@ -742,7 +755,7 @@ $ CCDEFS = "TCPIP_TYPE_''OPT_TCPIP_LIB',DSO_VMS" $ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS $ CCEXTRAFLAGS = "" $ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS -$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX" +$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX" $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN - CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS $! @@ -821,8 +834,8 @@ $! $ CC = "CC" $ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" - THEN CC = "CC/DECC" -$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=RELAXED"+ - - "''POINTER_SIZE'/NOLIST/PREFIX=ALL" + - +$ CC = CC + "/''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ - + "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + - "/INCLUDE=(''CC_INCLUDES')" + - CCEXTRAFLAGS $! diff --git a/makevms.com b/makevms.com index 2800760c67..516937e86c 100755 --- a/makevms.com +++ b/makevms.com @@ -32,11 +32,15 @@ $! APPS Just build the "[.xxx.EXE.APPS]" application programs for Open $! ENGINES Just build the "[.xxx.EXE.ENGINES]" application programs for OpenSSL. $! $! P2, if defined, specifies the C pointer size. Ignored on VAX. +$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.) $! Supported values are: $! -$! "" Compile with default (/NOPOINTER_SIZE) -$! 32 Compile with /POINTER_SIZE=32 (SHORT) -$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]) +$! "" Compile with default (/NOPOINTER_SIZE). +$! 32 Compile with /POINTER_SIZE=32 (SHORT). +$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]). +$! (Automatically select ARGV if compiler supports it.) +$! 64= Compile with /POINTER_SIZE=64 (LONG). +$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV). $! $! P3 specifies DEBUG or NODEBUG, to compile with or without debugging $! information. @@ -1045,9 +1049,11 @@ $ IF (P2 .EQS. "32") $ THEN $ POINTER_SIZE = "32" $ ELSE -$ IF (P2 .EQS. "64") +$ POINTER_SIZE = F$EDIT( P2, "COLLAPSE, UPCASE") +$ IF ((POINTER_SIZE .EQS. "64") .OR. - + (POINTER_SIZE .EQS. "64=") .OR. - + (POINTER_SIZE .EQS. "64=ARGV")) $ THEN -$ POINTER_SIZE = "64" $ ARCHD = ARCH+ "_64" $ LIB32 = "" $ ELSE @@ -1058,9 +1064,16 @@ $ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT "The Option ", P2, - " Is Invalid. The Valid Options Are:" $ WRITE SYS$OUTPUT "" -$ WRITE SYS$OUTPUT " """" : Compile with default (short) pointers." -$ WRITE SYS$OUTPUT " 32 : Compile with 32-bit (short) pointers." -$ WRITE SYS$OUTPUT " 64 : Compile with 64-bit (long) pointers." +$ WRITE SYS$OUTPUT - + " """" : Compile with default (short) pointers." +$ WRITE SYS$OUTPUT - + " 32 : Compile with 32-bit (short) pointers." +$ WRITE SYS$OUTPUT - + " 64 : Compile with 64-bit (long) pointers (auto ARGV)." +$ WRITE SYS$OUTPUT - + " 64= : Compile with 64-bit (long) pointers (no ARGV)." +$ WRITE SYS$OUTPUT - + " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)." $ WRITE SYS$OUTPUT "" $! $! Time To EXIT. diff --git a/ssl/ssl-lib.com b/ssl/ssl-lib.com index 6f7cbc0202..23e7dde8b2 100644 --- a/ssl/ssl-lib.com +++ b/ssl/ssl-lib.com @@ -48,6 +48,9 @@ $! $! "" Compile with default (/NOPOINTER_SIZE) $! 32 Compile with /POINTER_SIZE=32 (SHORT) $! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]) +$! (Automatically select ARGV if compiler supports it.) +$! 64= Compile with /POINTER_SIZE=64 (LONG). +$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV). $! $! P7, if defined, specifies a directory where ZLIB files (zlib.h, $! libz.olb) may be found. Optionally, a non-default object library @@ -158,6 +161,10 @@ $! Define The CRYPTO-LIB We Are To Use. $! $ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB $! +$! Set up exceptional compilations. +$! +$ CC5_SHOWN = 0 +$! $! Check To See What We Are To Do. $! $ IF (BUILDALL.EQS."TRUE") @@ -216,6 +223,8 @@ $ LIB_SSL = "s2_meth,s2_srvr,s2_clnt,s2_lib,s2_enc,s2_pkt,"+ - "ssl_asn1,ssl_txt,ssl_algs,"+ - "bio_ssl,ssl_err,kssl,tls_srp,t1_reneg" $! +$ COMPILEWITH_CC5 = "" +$! $! Tell The User That We Are Compiling The Library. $! $ WRITE SYS$OUTPUT "Building The ",SSL_LIB," Library." @@ -329,6 +338,8 @@ $! End The SSL_TASK.C File Check. $! $ ENDIF $! +$ COMPILEWITH_CC5 = "" !!! ",ssl_task," +$! $! Tell The User We Are Creating The SSL_TASK. $! $ WRITE SYS$OUTPUT "Creating SSL_TASK OSU HTTP SSL Engine." @@ -342,11 +353,20 @@ $! Compile The File. $! $ ON ERROR THEN GOTO SSL_TASK_END $! +$ FILE_NAME0 = ","+ F$ELEMENT(0,".",FILE_NAME)+ "," +$ IF COMPILEWITH_CC5 - FILE_NAME0 .NES. COMPILEWITH_CC5 +$ THEN +$ if (.not. CC5_SHOWN) +$ then +$ CC5_SHOWN = 1 $ write sys$output " \Using special rule (5)" $ x = " "+ CC5 $ write /symbol sys$output x -$! -$ CC5/OBJECT='OBJ_DIR''FILE_NAME'.OBJ SYS$DISK:[]'FILE_NAME'.C +$ endif +$ CC5 /OBJECT='OBJ_DIR''FILE_NAME'.OBJ SYS$DISK:[]'FILE_NAME'.C +$ ELSE +$ CC /OBJECT='OBJ_DIR''FILE_NAME'.OBJ SYS$DISK:[]'FILE_NAME'.C +$ ENDIF $! $! Link The Program. $! @@ -690,11 +710,14 @@ $ IF (P6 .EQS. "32") $ THEN $ POINTER_SIZE = "/POINTER_SIZE=32" $ ELSE -$ IF (P6 .EQS. "64") +$ POINTER_SIZE = F$EDIT( P6, "COLLAPSE, UPCASE") +$ IF ((POINTER_SIZE .EQS. "64") .OR. - + (POINTER_SIZE .EQS. "64=") .OR. - + (POINTER_SIZE .EQS. "64=ARGV")) $ THEN -$ POINTER_SIZE = "/POINTER_SIZE=64" $ ARCHD = ARCH+ "_64" $ LIB32 = "" +$ POINTER_SIZE = "/POINTER_SIZE=64" $ ELSE $! $! Tell The User Entered An Invalid Option. @@ -703,9 +726,16 @@ $ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT "The Option ", P6, - " Is Invalid. The Valid Options Are:" $ WRITE SYS$OUTPUT "" -$ WRITE SYS$OUTPUT " """" : Compile with default (short) pointers." -$ WRITE SYS$OUTPUT " 32 : Compile with 32-bit (short) pointers." -$ WRITE SYS$OUTPUT " 64 : Compile with 64-bit (long) pointers." +$ WRITE SYS$OUTPUT - + " """" : Compile with default (short) pointers." +$ WRITE SYS$OUTPUT - + " 32 : Compile with 32-bit (short) pointers." +$ WRITE SYS$OUTPUT - + " 64 : Compile with 64-bit (long) pointers (auto ARGV)." +$ WRITE SYS$OUTPUT - + " 64= : Compile with 64-bit (long) pointers (no ARGV)." +$ WRITE SYS$OUTPUT - + " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)." $ WRITE SYS$OUTPUT "" $! $! Time To EXIT. @@ -824,7 +854,7 @@ $ CCDEFS = "TCPIP_TYPE_''P4'" $ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS $ CCEXTRAFLAGS = "" $ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS -$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR" +$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR" $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN - CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS $! @@ -904,8 +934,8 @@ $! $ CC = "CC" $ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" - THEN CC = "CC/DECC" -$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=RELAXED"+ - - "''POINTER_SIZE'/NOLIST/PREFIX=ALL" + - +$ CC = CC + "/''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ - + "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + - "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS $! $! Define The Linker Options File Name. diff --git a/test/maketests.com b/test/maketests.com index 83325a0322..1e803a2b5f 100644 --- a/test/maketests.com +++ b/test/maketests.com @@ -25,7 +25,7 @@ $! VAXC For VAX C. $! DECC For DEC C. $! GNUC For GNU C. $! -$! If you don't speficy a compiler, it will try to determine which +$! If you don't specify a compiler, it will try to determine which $! "C" compiler to use. $! $! P3, if defined, sets a TCP/IP library to use, through one of the following @@ -43,6 +43,9 @@ $! $! "" Compile with default (/NOPOINTER_SIZE) $! 32 Compile with /POINTER_SIZE=32 (SHORT) $! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]) +$! (Automatically select ARGV if compiler supports it.) +$! 64= Compile with /POINTER_SIZE=64 (LONG). +$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV). $! $! P6, if defined, specifies a directory where ZLIB files (zlib.h, $! libz.olb) may be found. Optionally, a non-default object library @@ -536,13 +539,22 @@ $ IF (P5 .EQS. "32") $ THEN $ POINTER_SIZE = "/POINTER_SIZE=32" $ ELSE -$ IF (P5 .EQS. "64") +$ POINTER_SIZE = F$EDIT( P5, "COLLAPSE, UPCASE") +$ IF ((POINTER_SIZE .EQS. "64") .OR. - + (POINTER_SIZE .EQS. "64=") .OR. - + (POINTER_SIZE .EQS. "64=ARGV")) $ THEN -$ POINTER_SIZE = "/POINTER_SIZE=64" +$ ARCHD = ARCH+ "_64" +$ LIB32 = "" +$ IF (F$EXTRACT( 2, 1, POINTER_SIZE) .EQS. "=") +$ THEN +$! Explicit user choice: "64" or "64=ARGV". +$ IF (POINTER_SIZE .EQS. "64=") THEN POINTER_SIZE = "64" +$ ELSE $ SET NOON -$ DEFINE /USER SYS$OUTPUT NL: -$ DEFINE /USER SYS$ERROR NL: -$ CC /POINTER_SIZE=64=ARGV NL: +$ DEFINE /USER_MODE SYS$OUTPUT NL: +$ DEFINE /USER_MODE SYS$ERROR NL: +$ CC /NOLIST /NOOBJECT /POINTER_SIZE=64=ARGV NL: $ IF ($STATUS .AND. %X0FFF0000) .EQ. %X00030000 $ THEN $ ! If we got here, it means DCL complained like this: @@ -554,14 +566,14 @@ $ ! have been deassigned automatically. However, when DCL $ ! complains, they aren't, so we do it here (it might be $ ! unnecessary, but just in case there will be another error $ ! message further on that we don't want to miss) -$ DEASSIGN/USER SYS$ERROR -$ DEASSIGN/USER SYS$OUTPUT +$ DEASSIGN /USER_MODE SYS$ERROR +$ DEASSIGN /USER_MODE SYS$OUTPUT $ ELSE $ POINTER_SIZE = POINTER_SIZE + "=ARGV" $ ENDIF $ SET ON -$ ARCHD = ARCH+ "_64" -$ LIB32 = "" +$ ENDIF +$ POINTER_SIZE = "/POINTER_SIZE=''POINTER_SIZE'" $ ELSE $! $! Tell The User Entered An Invalid Option. @@ -570,9 +582,16 @@ $ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT "The Option ", P5, - " Is Invalid. The Valid Options Are:" $ WRITE SYS$OUTPUT "" -$ WRITE SYS$OUTPUT " """" : Compile with default (short) pointers." -$ WRITE SYS$OUTPUT " 32 : Compile with 32-bit (short) pointers." -$ WRITE SYS$OUTPUT " 64 : Compile with 64-bit (long) pointers." +$ WRITE SYS$OUTPUT - + " """" : Compile with default (short) pointers." +$ WRITE SYS$OUTPUT - + " 32 : Compile with 32-bit (short) pointers." +$ WRITE SYS$OUTPUT - + " 64 : Compile with 64-bit (long) pointers (auto ARGV)." +$ WRITE SYS$OUTPUT - + " 64= : Compile with 64-bit (long) pointers (no ARGV)." +$ WRITE SYS$OUTPUT - + " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)." $ WRITE SYS$OUTPUT "" $! $! Time To EXIT. -- 2.25.1