For VMS, implement the possibility to choose 64-bit pointers with
authorRichard Levitte <levitte@openssl.org>
Fri, 25 Mar 2011 09:39:46 +0000 (09:39 +0000)
committerRichard Levitte <levitte@openssl.org>
Fri, 25 Mar 2011 09:39:46 +0000 (09:39 +0000)
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
apps/makeapps.com
apps/openssl.c
crypto/crypto-lib.com
engines/makeengines.com
makevms.com
ssl/ssl-lib.com
test/maketests.com

index d92a823..794e1de 100644 (file)
@@ -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)
index 8924f50..95b6ecd 100644 (file)
@@ -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.
index 950c9c8..dab057b 100644 (file)
@@ -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)
                {
index a4dffe9..3a5296c 100644 (file)
@@ -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
 $!
index 39b50ab..046b1a7 100644 (file)
@@ -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
 $!
index 2800760..516937e 100755 (executable)
@@ -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.
index 6f7cbc0..23e7dde 100644 (file)
@@ -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.
index 83325a0..1e803a2 100644 (file)
@@ -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.