[openssl-commits] [openssl] master update

Richard Levitte levitte at openssl.org
Wed Feb 10 13:43:34 UTC 2016


The branch master has been updated
       via  907d2c2f62c45199d12138e597bf343283b80b12 (commit)
       via  f578075a93c7418f72ba000d1225cb0d9fd7df5d (commit)
       via  0f53f939a10ad9eeee555dc235936e515118f216 (commit)
       via  e84193e43dbd3da23845ef9fcfcb5e364049a396 (commit)
       via  9c44c29ef2cadb2f0ff214096ccf731ce2660d64 (commit)
       via  242ffb05a2e4aa3fc7ffc131037e077b7e242189 (commit)
       via  fcf80c469aa722f7c6eca68d23d86d22f7f7efb9 (commit)
       via  567a9e6fe0ff3badfa22cf018d87c94ed5a8aeb3 (commit)
       via  deb02194d246d865ff3837deb500a901e2269109 (commit)
      from  5482dac9f4de7eb73d1b9c776be9495735f7e299 (commit)


- Log -----------------------------------------------------------------
commit 907d2c2f62c45199d12138e597bf343283b80b12
Author: Richard Levitte <levitte at openssl.org>
Date:   Sat Jan 30 07:17:01 2016 +0100

    unified build system: add CHANGES & NEWS
    
    Reviewed-by: Rich Salz <rsalz at openssl.org>

commit f578075a93c7418f72ba000d1225cb0d9fd7df5d
Author: Richard Levitte <levitte at openssl.org>
Date:   Sat Jan 30 07:15:59 2016 +0100

    unified build scheme: rewrite INSTALL.VMS
    
    There is more to be added, but this will at least tell people how to try.
    
    Reviewed-by: Rich Salz <rsalz at openssl.org>

commit 0f53f939a10ad9eeee555dc235936e515118f216
Author: Richard Levitte <levitte at openssl.org>
Date:   Sat Jan 30 07:15:30 2016 +0100

    clean away old VMS cruft
    
    The old building scripts get removed, they are hopelessly gone in bit
    rot by now.
    
    Also remove the old symbol hacks.  They were needed needed to shorten
    some names to 31 characters, and to resolve other symbol clashes.
    Because we now compile with /NAMES=(AS_IS,SHORTENED), this is no
    longer required.
    
    Reviewed-by: Rich Salz <rsalz at openssl.org>

commit e84193e43dbd3da23845ef9fcfcb5e364049a396
Author: Richard Levitte <levitte at openssl.org>
Date:   Sat Jan 30 07:14:58 2016 +0100

    unified build scheme: add a "unified" template for VMS descrip.mms
    
    As part of this, change util/mkdef.pl to stop adding libraries to
    depend on in its output.  mkdef.pl should ONLY output a symbol
    vector.
    
    Because symbol names can't be longer than 31 characters, we use the
    compiler to shorten those that are longer down to 23 characters plus
    an 8 character CRC.  To make sure users of our header files will pick
    up on that automatically, add the DEC C supported extra headers files
    __decc_include_prologue.h and __decc_include_epilogue.h.
    
    Furthermore, we add a config.com, so VMS people can configure just as
    comfortably as any Unix folks, thusly:
    
        @config
    
    Reviewed-by: Rich Salz <rsalz at openssl.org>

commit 9c44c29ef2cadb2f0ff214096ccf731ce2660d64
Author: Richard Levitte <levitte at openssl.org>
Date:   Thu Feb 4 16:40:40 2016 +0100

    unified build scheme: add instructions for travis to build with --unified
    
    Reviewed-by: Rich Salz <rsalz at openssl.org>

commit 242ffb05a2e4aa3fc7ffc131037e077b7e242189
Author: Richard Levitte <levitte at openssl.org>
Date:   Sat Jan 30 03:31:52 2016 +0100

    unified build scheme: Try to nudge users to try the "unified" build
    
    This commit SHALL be reverted before final release.
    
    Reviewed-by: Rich Salz <rsalz at openssl.org>

commit fcf80c469aa722f7c6eca68d23d86d22f7f7efb9
Author: Richard Levitte <levitte at openssl.org>
Date:   Sat Jan 30 05:45:29 2016 +0100

    unified build scheme: add the tweaks to build on Cygwin & Mingw
    
    Cygwin and Mingw name their libraries a bit differently from the rest
    of the POSIXly universe, we need to adapt to that.
    
    In Makefile.tmpl, it means that some hunks will only be output
    conditionally.
    
    This also means that shared_extension for the Cygwin and Mingw
    configurations in Configurations/10-main.conf are changing from .dll.a
    to .dll.  Makefile.shared does a fine job without having them
    specified, and it's much easier to work with tucking an extra .a at
    the end of files in the installation recipes than any amount of name
    rewrites, especially with the support of the SHARED_NAME in the top
    build.info.
    
    Reviewed-by: Rich Salz <rsalz at openssl.org>

commit 567a9e6fe0ff3badfa22cf018d87c94ed5a8aeb3
Author: Richard Levitte <levitte at openssl.org>
Date:   Sat Jan 30 03:25:40 2016 +0100

    unified build scheme: add a "unified" template for Unix Makefile
    
    This also adds all the raw sections needed for some files.
    
    Reviewed-by: Rich Salz <rsalz at openssl.org>

commit deb02194d246d865ff3837deb500a901e2269109
Author: Richard Levitte <levitte at openssl.org>
Date:   Sat Jan 30 03:21:39 2016 +0100

    unified build scheme: give util/dofile.pl the possibility to output selectively
    
    Under certain conditions, one might not want to output certain
    sections of a template file.  This adds the functions output_off() and
    output_on(), reachable inside the templates.  And example usage in a
    Makefile template could be this:
    
    	@ : {- output_off() if $config{no_shared}; "" -}
    	... lines dealing with shared libraries
    	@ : {- output_on() -}
    
    Reviewed-by: Rich Salz <rsalz at openssl.org>

-----------------------------------------------------------------------

Summary of changes:
 .travis.yml                               |   16 +
 CHANGES                                   |   19 +
 Configurations/00-base-templates.conf     |    1 +
 Configurations/10-main.conf               |   68 +-
 Configurations/README                     |    2 +
 Configurations/descrip.mms.tmpl           |  634 ++++++++++++
 Configurations/unix-Makefile.tmpl         |  784 +++++++++++++++
 Configure                                 |   49 +-
 INSTALL.VMS                               |  324 +-----
 Makefile.in                               |   17 +
 Makefile.shared                           |    6 +-
 NEWS                                      |    1 +
 README.PERL                               |   18 +
 VMS/TODO                                  |   18 -
 VMS/WISHLIST.TXT                          |    4 -
 engines/alpha.opt => VMS/engine.opt       |    1 +
 VMS/install-vms.com                       |   67 --
 VMS/multinet_shr.opt                      |    1 -
 VMS/openssl_shutdown.com.in               |   59 ++
 VMS/openssl_startup.com                   |  108 --
 VMS/openssl_startup.com.in                |  115 +++
 VMS/openssl_undo.com                      |   20 -
 VMS/openssl_utils.com                     |   56 +-
 VMS/socketshr_shr.opt                     |    1 -
 VMS/tcpip_shr_decc.opt                    |    1 -
 VMS/translatesyms.pl                      |   55 +
 VMS/ucx_shr_decc.opt                      |    1 -
 VMS/ucx_shr_decc_log.opt                  |    1 -
 VMS/ucx_shr_vaxc.opt                      |    1 -
 apps/CA.com                               |  221 ----
 apps/build.info                           |    9 +-
 apps/install-apps.com                     |  107 --
 apps/makeapps.com                         | 1169 ----------------------
 build.info                                |   20 +
 config.com                                |   65 ++
 crypto/aes/build.info                     |   59 ++
 crypto/bf/build.info                      |    7 +
 crypto/bn/build.info                      |   90 ++
 crypto/build.info                         |   42 +
 crypto/camellia/build.info                |    9 +
 crypto/cast/build.info                    |    7 +
 crypto/chacha/build.info                  |   12 +
 crypto/crypto-lib.com                     | 1427 --------------------------
 crypto/des/build.info                     |   14 +
 crypto/ec/build.info                      |   17 +
 crypto/install-crypto.com                 |  197 ----
 crypto/md5/build.info                     |   15 +
 crypto/modes/build.info                   |   27 +
 crypto/poly1305/build.info                |   12 +
 crypto/rand/build.info                    |    2 +-
 crypto/rc4/build.info                     |   27 +
 crypto/rc5/build.info                     |    7 +
 crypto/ripemd/build.info                  |    7 +
 crypto/sha/build.info                     |   77 ++
 crypto/whrlpool/build.info                |    8 +
 engines/axp.opt                           |    1 -
 engines/build.info                        |    7 +
 engines/ia64.opt                          |    1 -
 engines/makeengines.com                   | 1118 ---------------------
 engines/vax.opt                           |    9 -
 include/openssl/__decc_include_epilogue.h |    7 +
 include/openssl/__decc_include_prologue.h |   11 +
 include/openssl/symhacks.h                |  367 +------
 install.com                               |  136 ---
 makevms.com                               | 1548 -----------------------------
 ssl/install-ssl.com                       |  116 ---
 ssl/ssl-lib.com                           |  956 ------------------
 test/clean_test.com                       |   35 -
 test/maketests.com                        | 1099 --------------------
 test/tests.com                            |  405 --------
 util/deltree.com                          |   34 -
 util/dofile.pl                            |   91 +-
 util/libeay.num                           |  203 ++--
 util/mkdef.pl                             |   33 +-
 util/ssleay.num                           |   57 +-
 75 files changed, 2619 insertions(+), 9717 deletions(-)
 create mode 100644 Configurations/descrip.mms.tmpl
 create mode 100644 Configurations/unix-Makefile.tmpl
 delete mode 100644 VMS/TODO
 delete mode 100644 VMS/WISHLIST.TXT
 rename engines/alpha.opt => VMS/engine.opt (74%)
 delete mode 100755 VMS/install-vms.com
 delete mode 100644 VMS/multinet_shr.opt
 create mode 100644 VMS/openssl_shutdown.com.in
 delete mode 100755 VMS/openssl_startup.com
 create mode 100644 VMS/openssl_startup.com.in
 delete mode 100755 VMS/openssl_undo.com
 delete mode 100644 VMS/socketshr_shr.opt
 delete mode 100644 VMS/tcpip_shr_decc.opt
 create mode 100644 VMS/translatesyms.pl
 delete mode 100644 VMS/ucx_shr_decc.opt
 delete mode 100644 VMS/ucx_shr_decc_log.opt
 delete mode 100644 VMS/ucx_shr_vaxc.opt
 delete mode 100644 apps/CA.com
 delete mode 100755 apps/install-apps.com
 delete mode 100644 apps/makeapps.com
 create mode 100644 config.com
 delete mode 100644 crypto/crypto-lib.com
 delete mode 100755 crypto/install-crypto.com
 delete mode 100644 engines/axp.opt
 delete mode 100644 engines/ia64.opt
 delete mode 100644 engines/makeengines.com
 delete mode 100644 engines/vax.opt
 create mode 100644 include/openssl/__decc_include_epilogue.h
 create mode 100644 include/openssl/__decc_include_prologue.h
 delete mode 100644 install.com
 delete mode 100755 makevms.com
 delete mode 100755 ssl/install-ssl.com
 delete mode 100644 ssl/ssl-lib.com
 delete mode 100755 test/clean_test.com
 delete mode 100644 test/maketests.com
 delete mode 100644 test/tests.com
 delete mode 100644 util/deltree.com

diff --git a/.travis.yml b/.travis.yml
index e3ab38f..cb23320 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -29,6 +29,10 @@ env:
     - CONFIG_OPTS="shared"
     - CONFIG_OPTS="no-asm"
     - CONFIG_OPTS="--debug --strict-warnings enable-crypto-mdebug enable-rc5 enable-md2"
+    - CONFIG_OPTS="--unified"
+    - CONFIG_OPTS="--unified shared"
+    - CONFIG_OPTS="--unified no-asm"
+    - CONFIG_OPTS="--unified --debug --strict-warnings enable-crypto-mdebug enable-rc5 enable-md2"
 
 matrix:
     include:
@@ -61,11 +65,23 @@ matrix:
           env: CONFIG_OPTS="no-asm"
         - compiler: x86_64-w64-mingw32-gcc
           env: CONFIG_OPTS="no-asm"
+        - compiler: i686-w64-mingw32-gcc
+          env: CONFIG_OPTS="--unified shared"
+        - compiler: x86_64-w64-mingw32-gcc
+          env: CONFIG_OPTS="--unified shared"
+        - compiler: i686-w64-mingw32-gcc
+          env: CONFIG_OPTS="--unified no-asm"
+        - compiler: x86_64-w64-mingw32-gcc
+          env: CONFIG_OPTS="--unified no-asm"
     allow_failures:
         - compiler: i686-w64-mingw32-gcc
           env: CONFIG_OPTS="--debug --strict-warnings enable-crypto-mdebug enable-rc5 enable-md2"
         - compiler: x86_64-w64-mingw32-gcc
           env: CONFIG_OPTS="--debug --strict-warnings enable-crypto-mdebug enable-rc5 enable-md2"
+        - compiler: i686-w64-mingw32-gcc
+          env: CONFIG_OPTS="--unified --debug --strict-warnings enable-crypto-mdebug enable-rc5 enable-md2"
+        - compiler: x86_64-w64-mingw32-gcc
+          env: CONFIG_OPTS="--unified --debug --strict-warnings enable-crypto-mdebug enable-rc5 enable-md2"
 
 before_script:
     - sh .travis-create-release.sh $TRAVIS_OS_NAME
diff --git a/CHANGES b/CHANGES
index d0bd6ac..0bbc257 100644
--- a/CHANGES
+++ b/CHANGES
@@ -3,6 +3,25 @@
  _______________
 
  Changes between 1.0.2f and 1.1.0  [xx XXX xxxx]
+
+  *) New "unified" build system
+
+     The "unified" build system is aimed to be a common system for all
+     platforms we support.  With it comes new support for VMS.
+
+     This system builds supports building in a differnt directory tree
+     than the source tree.  It produces one Makefile (for unix family
+     or lookalikes), or one descrip.mms (for VMS).
+
+     The source of information to make the Makefile / descrip.mms is
+     small files called 'build.info', holding the necessary
+     information for each directory with source to compile, and a
+     template in Configurations, like unix-Makefile.tmpl or
+     descrip.mms.tmpl.
+
+     We rely heavily on the perl module Text::Template.
+     [Richard Levitte]
+
   *) Added support for auto-initialisation and de-initialisation of the library.
      OpenSSL no longer requires explicit init or deinit routines to be called,
      except in certain circumstances. See the
diff --git a/Configurations/00-base-templates.conf b/Configurations/00-base-templates.conf
index 713e374..1771e3d 100644
--- a/Configurations/00-base-templates.conf
+++ b/Configurations/00-base-templates.conf
@@ -12,6 +12,7 @@
 	thread_cflags	=> "",
 	thread_defines	=> [],
 
+	apps_extra_src	=> "",
 	cpuid_asm_src	=> "mem_clr.c",
 	bn_asm_src	=> "bn_asm.c",
 	ec_asm_src	=> "",
diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf
index c5c1424..28322e3 100644
--- a/Configurations/10-main.conf
+++ b/Configurations/10-main.conf
@@ -1174,7 +1174,7 @@
         shared_target    => "cygwin-shared",
         shared_cflag     => "-D_WINDLL -DOPENSSL_USE_APPLINK",
         shared_ldflag    => "-mno-cygwin",
-        shared_extension => ".dll.a",
+        shared_extension => ".dll",
     },
     "mingw64" => {
         # As for OPENSSL_USE_APPLINK. Applink makes it possible to use
@@ -1199,7 +1199,7 @@
         shared_target    => "cygwin-shared",
         shared_cflag     => "-D_WINDLL",
         shared_ldflag    => "-mno-cygwin",
-        shared_extension => ".dll.a",
+        shared_extension => ".dll",
     },
 
 #### UEFI
@@ -1232,7 +1232,7 @@
         shared_target    => "cygwin-shared",
         shared_cflag     => "-D_WINDLL",
         shared_ldflag    => "-shared",
-        shared_extension => ".dll.a",
+        shared_extension => ".dll",
     },
     "Cygwin-x86_64" => {
         inherit_from     => [ asm("x86_64_asm") ],
@@ -1247,7 +1247,7 @@
         shared_target    => "cygwin-shared",
         shared_cflag     => "-D_WINDLL",
         shared_ldflag    => "-shared",
-        shared_extension => ".dll.a",
+        shared_extension => ".dll",
     },
     # Backward compatibility for those using this target
     "Cygwin" => {
@@ -1523,4 +1523,64 @@
         ranlib           => "$ENV{'RANLIB'}",
     },
 
+    ##### VMS
+    "vms-generic" => {
+        template         => 1,
+        cc               => "CC/DECC",
+        cflags           => "/STANDARD=RELAXED/NOLIST/PREFIX=ALL/NAMES=(AS_IS,SHORTENED)",
+        debug_cflags     => "/NOOPTIMIZE/DEBUG",
+        release_cflags   => "/OPTIMIZE/NODEBUG",
+        lflags           => "/MAP",
+        debug_lflags     => "/DEBUG/TRACEBACK",
+        release_lflags   => "/NODEBUG/NOTRACEBACK",
+        shared_target    => "vms-shared",
+
+        apps_extra_src   => "vms_decc_init.c",
+        build_file       => "descrip.mms",
+        build_scheme     => [ "unified", "VMS" ],
+    },
+
+    # VMS on VAX is *unsupported*
+    #"vms-asm" => {
+    #   template          => 1,
+    #   bn_obj            => "[.asm]vms.obj vms-helper.obj"
+    #},
+    #"vms-vax" => {
+    #   inherit_from      => [ "vms-generic", asm("vms-asm") ],
+    #   as                => "MACRO",
+    #   debug_aflags      => "/NOOPTIMIZE/DEBUG",
+    #   release_aflags    => "/OPTIMIZE/NODEBUG",
+    #   bn_opts           => "THIRTY_TWO_BIT RC4_CHAR RC4_CHUNK DES_PTR BF_PTR",
+    #},
+    "vms-alpha" => {
+        inherit_from     => [ "vms-generic" ],
+        #as               => "???",
+        #debug_aflags     => "/NOOPTIMIZE/DEBUG",
+        #release_aflags   => "/OPTIMIZE/NODEBUG",
+        bn_opts          => "SIXTY_FOUR_BIT RC4_INT RC4_CHUNK_LL DES_PTR BF_PTR",
+    },
+    "vms-alpha-P32" => {
+	inherit_from	 => [ "vms-alpha" ],
+	cflags		 => add("/POINTER_SIZE=32"),
+    },
+    "vms-alpha-P64" => {
+	inherit_from	 => [ "vms-alpha" ],
+	cflags		 => add("/POINTER_SIZE=64"),
+    },
+    "vms-ia64" => {
+        inherit_from     => [ "vms-generic" ],
+        #as               => "I4S",
+        #debug_aflags     => "/NOOPTIMIZE/DEBUG",
+        #release_aflags   => "/OPTIMIZE/NODEBUG",
+        bn_opts          => "SIXTY_FOUR_BIT RC4_INT RC4_CHUNK_LL DES_PTR BF_PTR",
+    },
+    "vms-ia64-P32" => {
+	inherit_from	 => [ "vms-ia64" ],
+	cflags		 => add("/POINTER_SIZE=32"),
+    },
+    "vms-ia64-P64" => {
+	inherit_from	 => [ "vms-ia64" ],
+	cflags		 => add("/POINTER_SIZE=64"),
+    },
+
 );
diff --git a/Configurations/README b/Configurations/README
index 9f6071e..b67506a 100644
--- a/Configurations/README
+++ b/Configurations/README
@@ -163,6 +163,8 @@ In each table entry, the following keys are significant:
                                                 export vars as
                                                 accessor functions.
 
+        apps_extra_src  => Extra source to build apps/openssl, as
+                           needed by the target.
         cpuid_asm_src   => assembler implementation of cpuid code as
                            well as OPENSSL_cleanse().
                            Default to mem_clr.c
diff --git a/Configurations/descrip.mms.tmpl b/Configurations/descrip.mms.tmpl
new file mode 100644
index 0000000..0d5c7ba
--- /dev/null
+++ b/Configurations/descrip.mms.tmpl
@@ -0,0 +1,634 @@
+## descrip.mms to build OpenSSL on OpenVMS
+##
+## {- join("\n## ", @autowarntext) -}
+{-
+  use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs/;
+
+  # Our prefix, claimed when speaking with the VSI folks Tuesday
+  # January 26th 2016
+  our $osslprefix = 'OSSL$';
+  (our $osslprefix_q = $osslprefix) =~ s/\$/\\\$/;
+
+  our $sourcedir = $config{sourcedir};
+  our $builddir = $config{builddir};
+  sub sourcefile {
+      catfile($sourcedir, @_);
+  }
+  sub buildfile {
+      catfile($builddir, @_);
+  }
+  sub sourcedir {
+      catdir($sourcedir, @_);
+  }
+  sub builddir {
+      catdir($builddir, @_);
+  }
+  sub tree {
+      (my $x = shift) =~ s|\]$|...]|;
+      $x
+  }
+  sub move {
+      my $f = catdir(@_);
+      my $b = abs2rel(rel2abs("."),rel2abs($f));
+      $sourcedir = catdir($b,$sourcedir)
+          if !file_name_is_absolute($sourcedir);
+      $builddir = catdir($b,$builddir)
+          if !file_name_is_absolute($builddir);
+      "";
+  }
+
+  # This is a horrible hack, but is needed because recursive inclusion of files
+  # in different directories does not work well with HP C.
+  my $sd = sourcedir("crypto", "async", "arch");
+  foreach (grep /\[\.crypto\.async\.arch\].*\.o$/, keys %{$unified_info{sources}}) {
+      (my $x = $_) =~ s|\.o$|.OBJ|;
+      $unified_info{before}->{$x}
+          = qq(arch = F\$PARSE("$sd","A.;",,,"SYNTAX_ONLY") - "A.;"
+        define arch 'arch');
+      $unified_info{after}->{$x}
+          = qq(deassign arch);
+  }
+  my $sd1 = sourcedir("ssl","record");
+  my $sd2 = sourcedir("ssl","statem");
+  $unified_info{before}->{"[.crypto.ct]ct_lib.OBJ"}
+      = $unified_info{before}->{"[.test]heartbeat_test.OBJ"}
+      = $unified_info{before}->{"[.test]ssltest.OBJ"}
+      = qq(record = F\$PARSE("$sd1","A.;",,,"SYNTAX_ONLY") - "A.;"
+        define record 'record'
+        statem = F\$PARSE("$sd2","A.;",,,"SYNTAX_ONLY") - "A.;"
+        define statem 'statem');
+  $unified_info{after}->{"[.crypto.ct]ct_lib.OBJ"}
+      = $unified_info{after}->{"[.test]heartbeat_test.OBJ"}
+      = $unified_info{after}->{"[.test]ssltest.OBJ"}
+      = qq(deassign statem
+        deassign record);
+  foreach (grep /^\[\.ssl\.(?:record|statem)\].*\.o$/, keys %{$unified_info{sources}}) {
+      (my $x = $_) =~ s|\.o$|.OBJ|;
+      $unified_info{before}->{$x}
+          = qq(record = F\$PARSE("$sd1","A.;",,,"SYNTAX_ONLY") - "A.;"
+        define record 'record'
+        statem = F\$PARSE("$sd2","A.;",,,"SYNTAX_ONLY") - "A.;"
+        define statem 'statem');
+      $unified_info{after}->{$x}
+          = qq(deassign statem
+        deassign record);
+  }
+  #use Data::Dumper;
+  #print STDERR "DEBUG: before:\n", Dumper($unified_info{before});
+  #print STDERR "DEBUG: after:\n", Dumper($unified_info{after});
+  "";
+-}
+PLATFORM={- $config{target} -}
+OPTIONS={- $config{options} -}
+CONFIGURE_ARGS=({- join(", ",quotify_l(@{$config{perlargv}})) -})
+SRCDIR={- $config{sourcedir} -}
+BUILDDIR={- $config{builddir} -}
+
+VERSION={- $config{version} -}
+MAJOR={- $config{major} -}
+MINOR={- $config{minor} -}
+SHLIB_VERSION_NUMBER={- $config{shlib_version_number} -}
+SHLIB_VERSION_HISTORY={- $config{shlib_version_history} -}
+SHLIB_MAJOR={- $config{shlib_major} -}
+SHLIB_MINOR={- $config{shlib_minor} -}
+SHLIB_TARGET={- $target{shared_target} -}
+
+EXE_EXT=.EXE
+LIB_EXT=.OLB
+SHLIB_EXT=.EXE
+OBJ_EXT=.OBJ
+DEP_EXT=.MMS
+
+LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @{$unified_info{libraries}}) -}
+SHLIBS={- join(" ", map { $_."\$(SHLIB_EXT)" } map { $unified_info{sharednames}->{$_} || () } @{$unified_info{libraries}}) -}
+ENGINES={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{engines}}) -}
+PROGRAMS={- join(", ", map { "-\n\t".$_.".EXE" } grep { !m|^\[\.test\]| } @{$unified_info{programs}}) -}
+TESTPROGS={- join(", ", map { "-\n\t".$_.".EXE" } grep { m|^\[\.test\]| } @{$unified_info{programs}}) -}
+SCRIPTS={- join(", ", map { "-\n\t".$_ } @{$unified_info{scripts}}) -}
+
+# INSTALL_PREFIX is for package builders so that they can configure for, say,
+# SYS$COMMON:[OPENSSL] and yet have everything installed in STAGING:[USER].
+# In that case, configure with --prefix=SYS$COMMON:[OPENSSL] and then run
+# MMS with /MACROS=(INSTALL_PREFIX=STAGING:[USER]).  The result will end
+# up in STAGING:[USER.OPENSSL].
+# Note that INSTALL_PREFIX can also be given at configuration time, with
+# --install_prefix.
+# Normally it is left empty.
+INSTALL_PREFIX={- $config{install_prefix} -}
+
+# Do not edit this manually. Use Configure --prefix=DIR to change this!
+INSTALLTOP={- catdir($config{prefix}) || "SYS\$COMMON:[OPENSSL-\$(MAJOR).\$(MINOR)]" -}
+# This is the standard central area to store certificates, private keys...
+OPENSSLDIR={- catdir($config{openssldir}) ||
+              $config{prefix} ? catdir($config{prefix},"SSL")
+                              : "SYS\$COMMON:[SSL]" -}
+# Where installed engines reside
+ENGINESDIR={- $osslprefix -}ENGINES:
+
+CC= {- $target{cc} -}
+CFLAGS= /DEFINE=({- join(",", @{$config{defines}},"OPENSSLDIR=\"\"\"\$(OPENSSLDIR)\"\"\"","ENGINESDIR=\"\"\"\$(ENGINESDIR)\"\"\"") -}) {- $config{cflags} -}
+DEPFLAG= /DEFINE=({- join(",", @{$config{depdefines}}) -})
+LDFLAGS= {- $config{lflags} -}
+EX_LIBS= {- $config{ex_libs} ? ",".$config{ex_libs} : "" -}
+
+PERL={- $config{perl} -}
+
+# We let the C compiler driver to take care of .s files. This is done in
+# order to be excused from maintaining a separate set of architecture
+# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
+# gcc, then the driver will automatically translate it to -xarch=v8plus
+# and pass it down to assembler.
+AS={- $target{as} -}
+ASFLAG={- $target{asflags} -}
+
+# .FIRST and .LAST are special targets with MMS and MMK.
+# The defines in there are for C.  includes that look like
+# this:
+#
+#    #include <openssl/foo.h>
+#    #include "internal/bar.h"
+#
+# will use the logical names to find the files.  Expecting
+# DECompHP C to find files in subdirectories of whatever was
+# given with /INCLUDE is a fantasy, unfortunately.
+NODEBUG=@
+.FIRST :
+        $(NODEBUG) openssl_inc1 = F$PARSE("[.include.openssl]","A.;",,,"syntax_only") - "A.;"
+        $(NODEBUG) openssl_inc2 = F$PARSE("{- catdir($config{sourcedir},"[.include.openssl]") -}","a.;",,,"SYNTAX_ONLY") - "A.;"
+        $(NODEBUG) internal_inc1 = F$PARSE("[.crypto.include.internal]","A.;",,,"SYNTAX_ONLY") - "A.;"
+        $(NODEBUG) internal_inc2 = F$PARSE("{- catdir($config{sourcedir},"[.include.internal]") -}","A.;",,,"SYNTAX_ONLY") - "A.;"
+        $(NODEBUG) internal_inc3 = F$PARSE("{- catdir($config{sourcedir},"[.crypto.include.internal]") -}","A.;",,,"SYNTAX_ONLY") - "A.;"
+        $(NODEBUG) DEFINE openssl 'openssl_inc1','openssl_inc2'
+        $(NODEBUG) DEFINE internal 'internal_inc1','internal_inc2','internal_inc3'
+        $(NODEBUG) staging_dir = "$(INSTALL_PREFIX)"
+        $(NODEBUG) IF staging_dir .NES. "" THEN -
+                staging_dir = F$PARSE("A.;",staging_dir,"[]",,"SYNTAX_ONLY") - "A.;"
+        $(NODEBUG) !
+        $(NODEBUG) ! Installation logical names
+        $(NODEBUG) !
+        $(NODEBUG) installtop_dev = F$PARSE(staging_dir,"$(INSTALLTOP)",,"DEVICE","SYNTAX_ONLY")
+        $(NODEBUG) ! Because there are no routines to merge directories, we have to
+        $(NODEBUG) ! do it ourselves
+        $(NODEBUG) IF staging_dir .NES. "" THEN -
+                staging_dir = F$PARSE(staging_dir,"[000000]",,"DIRECTORY","SYNTAX_ONLY")
+        $(NODEBUG) installtop_dir = F$PARSE("$(INSTALLTOP)","[000000]",,"DIRECTORY","SYNTAX_ONLY")
+        $(NODEBUG) IF staging_dir .NES. "" .AND. staging_dir .NES. "[000000]" THEN -
+                installtop_dir = staging_dir - "]" + "." + (installtop_dir - "[")
+        $(NODEBUG) installtop_dir = installtop_dir - "]" + ".]"
+        $(NODEBUG) DEFINE ossl_installroot 'installtop_dev''installtop_dir'
+        $(NODEBUG) !
+        $(NODEBUG) datatop = F$PARSE("$(OPENSSLDIR)","[000000]A.;",,,"SYNTAX_ONLY") -
+                - "]A.;" + ".]"
+        $(NODEBUG) IF "$(INSTALL_PREFIX)" .EQS. "" THEN -
+                DEFINE ossl_dataroot 'datatop'
+        $(NODEBUG) !
+        $(NODEBUG) ! Figure out the architecture
+        $(NODEBUG) !
+        $(NODEBUG) arch == f$edit( f$getsyi( "arch_name"), "upcase")
+        $(NODEBUG) !
+        $(NODEBUG) ! Set up logical names for the libraries, so LINK and
+        $(NODEBUG) ! running programs can use them.
+        $(NODEBUG) !
+        $(NODEBUG) {- join("\n\t\$(NODEBUG) ", map { "DEFINE ".uc($_)." 'F\$ENV(\"DEFAULT\")'".uc($_)."\$(SHLIB_EXT)" } map { $unified_info{sharednames}->{$_} || () } @{$unified_info{libraries}}) || "!" -}
+
+.LAST :
+        $(NODEBUG) {- join("\n\t\$(NODEBUG) ", map { "DEASSIGN ".uc($_) } map { $unified_info{sharednames}->{$_} || () } @{$unified_info{libraries}}) || "!" -}
+        $(NODEBUG) IF "$(INSTALL_PREFIX)" .EQS. "" THEN DEASSIGN ossl_dataroot
+        $(NODEBUG) DEASSIGN ossl_installroot
+        $(NODEBUG) DEASSIGN internal
+        $(NODEBUG) DEASSIGN openssl
+.DEFAULT :
+        @ ! MMS cannot handle no actions...
+
+# The main targets ###################################################
+
+all : descrip.mms, $(LIBS), $(ENGINES), $(PROGRAMS), $(SCRIPTS), $(TESTPROGS)
+
+test tests : $(TESTPROGS), rehash
+        SET DEFAULT [.test]{- move("test") -}
+        DEFINE SRCTOP {- sourcedir() -}
+        DEFINE BLDTOP {- builddir() -}
+        $(PERL) {- sourcefile("test", "run_tests.pl") -} $(TESTS)
+        DEASSIGN BLDTOP
+        DEASSIGN SRCTOP
+        SET DEFAULT [-]{- move("..") -}
+
+list-tests :
+        @ TOP=$(SRCDIR) PERL=$(PERL) $(PERL) {- catfile($config{sourcedir},"test", "run_tests.pl") -} list
+
+# Because VMS wants the generation number (or *) to delete files, we can't
+# use $(LIBS), $(PROGRAMS) and $(TESTPROGS) directly.
+libclean :
+        - DELETE []OSSL$LIB*.OLB;*,OSSL$LIB*.LIS;*
+        - DELETE [.crypto...]*.OBJ;*,*.LIS;*
+        - DELETE [.ssl...]*.OBJ;*,*.LIS;*
+        - DELETE [.engines...]*.OBJ;*,*.LIS;*
+        - DELETE []CXX$DEMANGLER_DB.;*
+
+install : install_sw install_docs
+
+uninstall : uninstall_docs uninstall_sw
+
+clean : libclean
+        - DELETE []OSSL$LIB*.EXE;*,OSSL$LIB*.MAP;*,OSSL$LIB*.OPT;*
+        - DELETE [.engines...]LIB*.EXE;*,LIB*.MAP;*,LIB*.OPT;*
+        - DELETE [.apps]*.EXE;*,*.MAP;*,*.OPT;*
+        - DELETE [.apps]*.OBJ;*,*.LIS;*
+        - DELETE [.test]*.EXE;*,*.MAP;*,*.OPT;*
+        - DELETE [.test]*.OBJ;*,*.LIS;*
+        - DELETE [.test]*.LOG;*
+        - DELETE []*.MAP;*
+
+DCLEAN_CMD=$(PERL) -pe "if (/^# DO NOT DELETE.*/) { exit(0); }"
+dclean :
+        $(DCLEAN_CMD) < descrip.mms > descrip.mms.new
+        RENAME descrip.mms.new descrip.mms
+        PURGE descrip.mms
+
+{- our @deps = map { (my $x = $_) =~ s|\.o$|\$(DEP_EXT)|; $x; }
+               grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ }
+               keys %{$unified_info{sources}};
+   ""; -}
+depend : {- join(",-\n\t", @deps); -}
+        $(DCLEAN_CMD) < descrip.mms > descrip.mms.new
+        OPEN/APPEND DESCRIP descrip.mms.new
+        WRITE DESCRIP "# DO NOT DELETE THIS LINE -- make depend depends on it."
+        {- join("\n\t", map { "TYPE $_ /OUTPUT=DESCRIP:" } @deps); -}
+        CLOSE DESCRIP
+        RENAME descrip.mms.new descrip.mms
+        PURGE descrip.mms
+
+# Install helper targets #############################################
+
+install_sw : all install_dev install_engines install_runtime install_config
+        @ WRITE SYS$OUTPUT ""
+        @ WRITE SYS$OUTPUT "######################################################################"
+        @ WRITE SYS$OUTPUT ""
+        @ WRITE SYS$OUTPUT "Installation complete"
+        @ WRITE SYS$OUTPUT ""
+        @ IF "$(INSTALL_PREFIX)" .NES. "" THEN EXIT 1
+        @ WRITE SYS$OUTPUT "Run @$(INSTALLTOP)openssl_startup to set up logical names"
+        @ WRITE SYS$OUTPUT "then run @$(INSTALLTOP)openssl_setup to define commands"
+        @ WRITE SYS$OUTPUT ""
+
+uninstall_sw : uninstall_dev uninstall_engines uninstall_runtime uninstall_config
+
+install_docs : install_man_docs install_html_docs
+
+uninstall_docs : uninstall_man_docs uninstall_html_docs
+
+install_dev : check_INSTALLTOP
+        @ WRITE SYS$OUTPUT "*** Installing development files"
+        @ ! Install header files
+        CREATE/DIR ossl_installroot:[include.openssl]
+        COPY/PROT=W:R openssl:*.h ossl_installroot:[include.openssl]
+        @ ! Install libraries
+        CREATE/DIR ossl_installroot:['arch'.LIB]
+        {- join("\n        ",
+                map { "COPY/PROT=W:R $_.OLB ossl_installroot:['arch'.LIB]" }
+                @{$unified_info{libraries}}) -}
+        @ {- output_off() if $config{no_shared}; "" -} !
+        {- join("\n        ",
+                map { "COPY/PROT=W:RE $_.EXE ossl_installroot:['arch'.LIB]" }
+                map { $unified_info{sharednames}->{$_} || () } 
+                @{$unified_info{libraries}}) -}
+        @ {- output_on() -} !
+
+install_runtime : check_INSTALLTOP
+        @ WRITE SYS$OUTPUT "*** Installing runtime files"
+        @ ! Install the main program
+        CREATE/DIR ossl_installroot:['arch'.EXE]
+        COPY/PROT=W:RE [.APPS]openssl.EXE ossl_installroot:['arch'.EXE]
+        @ ! Install scripts
+        CREATE/DIR ossl_installroot:[EXE]
+        COPY/PROT=W:RE [.APPS]CA.pl ossl_installroot:[EXE]
+        COPY/PROT=W:RE [.TOOLS]c_rehash. ossl_installroot:[EXE]c_rehash.pl
+        @ ! Install configuration file
+        COPY/PROT=W:RE {- sourcefile("apps", "openssl-vms.cnf") -} -
+                ossl_installroot:[000000]openssl.cnf
+
+install_engines : check_INSTALLTOP
+        @ {- output_off() if $config{no_shared}; "" -} !
+        @ WRITE SYS$OUTPUT "*** Installing engines"
+        CREATE/DIR ossl_installroot:['arch'.ENGINES]
+        COPY/PROT=W:RE [.ENGINES]*.EXE ossl_installroot:['arch'.ENGINES]
+        @ {- output_on() -} !
+
+install_config : [.VMS]openssl_startup.com [.VMS]openssl_shutdown.com -
+                 check_INSTALLTOP
+        IF "$(INSTALL_PREFIX)" .EQS. "" THEN -
+                IF F$SEARCH("OSSL_DATAROOT:[000000]CERTS.DIR;1") .EQS. "" THEN -
+                CREATE/DIR/PROT=(S:RWED,O:RWE,G:RE,W:RE) OSSL_DATAROOT:[CERTS]
+        IF "$(INSTALL_PREFIX)" .EQS. "" THEN -
+                IF F$SEARCH("OSSL_DATAROOT:[000000]PRIVATE.DIR;1") .EQS. "" THEN -
+                CREATE/DIR/PROT=(S:RWED,O:RWE,G:,W:) OSSL_DATAROOT:[PRIVATE]
+        CREATE/DIR ossl_installroot:[SYS$STARTUP]
+        COPY/PROT=W:RE -
+                [.VMS]openssl_startup.com,openssl_shutdown.com -
+                ossl_installroot:[SYS$STARTUP]
+        COPY/PROT=W:RE -
+                {- sourcefile("VMS", "openssl_utils.com") -} -
+                ossl_installroot:[SYS$STARTUP]
+
+[.VMS]openssl_startup.com : vmsconfig.pm
+        CREATE/DIR [.VMS]
+        $(PERL) "-I." "-Mvmsconfig" {- sourcefile("util", "dofile.pl") -} -
+                {- sourcefile("VMS", "openssl_startup.com.in") -} -
+                > [.VMS]openssl_startup.com
+
+[.VMS]openssl_shutdown.com : vmsconfig.pm
+        CREATE/DIR [.VMS]
+        $(PERL) "-I." "-Mvmsconfig" {- sourcefile("util", "dofile.pl") -} -
+                {- sourcefile("VMS", "openssl_shutdown.com.in") -} -
+                > [.VMS]openssl_shutdown.com
+
+vmsconfig.pm : descrip.mms
+        OPEN/WRITE/SHARE=READ CONFIG []vmsconfig.pm
+        WRITE CONFIG "package vmsconfig;"
+        WRITE CONFIG "use strict; use warnings;"
+        WRITE CONFIG "use Exporter;"
+        WRITE CONFIG "our @ISA = qw(Exporter);"
+        WRITE CONFIG "our @EXPORT = qw(%config %target %withargs %unified_info);"
+        WRITE CONFIG "our %config = ("
+        WRITE CONFIG "  target => '{- $config{target} -}',"
+        WRITE CONFIG "  version => '$(MAJOR).$(MINOR)',"
+        WRITE CONFIG "  no_shared => '","{- $config{no_shared} -}","',"
+        WRITE CONFIG "  INSTALLTOP => '$(INSTALLTOP)',"
+        WRITE CONFIG "  OPENSSLDIR => '$(OPENSSLDIR)',"
+        WRITE CONFIG "  pointersize => '","{- $target{pointersize} -}","',"
+        WRITE CONFIG "  shared_libs => ["
+        {- join("\n        ", map { "WRITE CONFIG \"    '$_'," } map { $unified_info{sharednames}->{$_} || () } @{$unified_info{libraries}}) || "\@ !" -}
+        WRITE CONFIG "  ],"
+        WRITE CONFIG ");"
+        WRITE CONFIG "our %target = ();"
+        WRITE CONFIG "our %withargs = ();"
+        WRITE CONFIG "our %unified_info = ();"
+        WRITE CONFIG "1;"
+        CLOSE CONFIG
+
+check_INSTALLTOP :
+        @ IF "$(INSTALLTOP)" .EQS. "" THEN -
+                WRITE SYS$ERROR "INSTALLTOP should not be empty"
+        @ IF "$(INSTALLTOP)" .EQS. "" THEN -
+                EXIT %x10000002
+
+# Helper targets #####################################################
+
+rehash : [.apps]openssl.exe, copy-certs
+        !MCR [.apps]openssl.exe rehash {- builddir("certs", "demo") -}
+        $(PERL) [.tools]c_rehash. [.certs.demo]
+
+copy-certs :
+        @ IF F$SEARCH("{- buildfile("certs.dir") -}") .EQS. "" THEN -
+             CREATE/DIR {- builddir("certs") -}
+        -@ IF "{- sourcedir("certs") -}" .NES. "{- builddir("certs") -}" THEN -
+             COPY {- tree(sourcedir("certs")) -}*.* {- tree(builddir("certs")) -}
+
+# Developer targets ##################################################
+
+debug_logicals :
+        SH LOGICAL/PROC openssl,internal,ossl_installroot
+        IF "$(INSTALL_PREFIX)" .EQS. "" THEN -
+                SH LOGICAL/PROC ossl_dataroot
+
+# Building targets ###################################################
+
+descrip.mms : {- sourcefile("Configurations", "descrip.mms.tmpl") -} $(SRCDIR)Configure ! $(SRCDIR)config.com
+        @ WRITE SYS$OUTPUT "descrip.mms is older than $?."
+        @ WRITE SYS$OUTPUT "Reconfiguring..."
+        perl $(SRCDIR)Configure reconf
+        @ WRITE SYS$OUTPUT "*************************************************"
+        @ WRITE SYS$OUTPUT "***                                           ***"
+        @ WRITE SYS$OUTPUT "***   Please run the same mms command again   ***"
+        @ WRITE SYS$OUTPUT "***                                           ***"
+        @ WRITE SYS$OUTPUT "*************************************************"
+        @ exit %10000000
+
+{-
+  use File::Basename;
+  use File::Spec::Functions qw/abs2rel rel2abs catfile catdir/;
+  sub src2dep {
+      my %args = @_;
+      my $dep = $args{obj};
+
+      # Because VMS C isn't very good at combining a /INCLUDE path with
+      # #includes having a relative directory (like '#include "../foo.h"),
+      # the best choice is to move to the first source file's intended
+      # directory before compiling, and make sure to write the object file
+      # in the correct position (important when the object tree is other
+      # than the source tree).
+      my $forward = dirname($args{srcs}->[0]);
+      my $backward = abs2rel(rel2abs("."), rel2abs($forward));
+      my $depd = abs2rel(rel2abs(dirname($dep)), rel2abs($forward));
+      my $depn = basename($dep);
+      my $srcs =
+          join(", ",
+               map { abs2rel(rel2abs($_), rel2abs($forward)) } @{$args{srcs}});
+      my $incs =
+          "/INCLUDE=(".join(",",
+                            map {
+                               file_name_is_absolute($_)
+                               ? $_ : catdir($backward,$_)
+                            } @{$args{incs}}).")";
+      my $before = $unified_info{before}->{$dep.".OBJ"} || "\@ !";
+      my $after = $unified_info{after}->{$dep.".OBJ"} || "\@ !";
+
+      return <<"EOF";
+$dep.MMS : $srcs
+        ${before}
+        SET DEFAULT $forward
+        \$(CC) \$(CFLAGS)${incs} /MMS=(TARGET=.OBJ)/OBJECT=${depd}${depn}.MMS $srcs
+        SET DEFAULT $backward
+        ${after}
+        - PURGE $dep.MMS
+EOF
+  }
+  sub src2obj {
+      my %args = @_;
+      my $obj = $args{obj};
+      my $deps = join(", -\n\t\t", @{$args{srcs}}, @{$args{deps}});
+
+      # Because VMS C isn't very good at combining a /INCLUDE path with
+      # #includes having a relative directory (like '#include "../foo.h"),
+      # the best choice is to move to the first source file's intended
+      # directory before compiling, and make sure to write the object file
+      # in the correct position (important when the object tree is other
+      # than the source tree).
+      my $forward = dirname($args{srcs}->[0]);
+      my $backward = abs2rel(rel2abs("."), rel2abs($forward));
+      my $objd = abs2rel(rel2abs(dirname($obj)), rel2abs($forward));
+      my $objn = basename($obj);
+      my $srcs =
+          join(", ",
+               map { abs2rel(rel2abs($_), rel2abs($forward)) } @{$args{srcs}});
+      my $incs =
+          "/INCLUDE=(".join(",",
+                            map {
+                               file_name_is_absolute($_)
+                               ? $_ : catdir($backward,$_)
+                            } @{$args{incs}}).")";
+      my $before = $unified_info{before}->{$obj.".OBJ"} || "\@ !";
+      my $after = $unified_info{after}->{$obj.".OBJ"} || "\@ !";
+
+      return <<"EOF";
+$obj.OBJ : $deps
+        ${before}
+        SET DEFAULT $forward
+        \$(CC) \$(CFLAGS)${incs} /OBJECT=${objd}${objn}.OBJ /REPOSITORY=$backward $srcs
+        SET DEFAULT $backward
+        ${after}
+        - PURGE $obj.OBJ
+EOF
+  }
+  sub libobj2shlib {
+      my %args = @_;
+      my $lib = $args{lib};
+      my $shlib = $args{shlib};
+      my $libd = dirname($lib);
+      my $libn = basename($lib);
+      (my $mkdef_key = $libn) =~ s/^${osslprefix_q}lib//i;
+      my @deps = map {
+          $config{no_shared} ? $_.".OLB"
+              : $unified_info{sharednames}->{$_}.".EXE"; } @{$args{deps}};
+      my $deps = join(", -\n\t\t", @deps);
+      my $shlib_target = $config{no_shared} ? "" : $target{shared_target};
+      my $ordinalsfile = defined($args{ordinals}) ? $args{ordinals}->[1] : "";
+      my $engine_opt = abs2rel(rel2abs(catfile($config{sourcedir},
+                                               "VMS", "engine.opt")),
+                               rel2abs($config{builddir}));
+      my $mkdef_pl = abs2rel(rel2abs(catfile($config{sourcedir},
+                                             "util", "mkdef.pl")),
+                             rel2abs($config{builddir}));
+      my $translatesyms_pl = abs2rel(rel2abs(catfile($config{sourcedir},
+                                                     "VMS", "translatesyms.pl")),
+                                     rel2abs($config{builddir}));
+      # The "[]" hack is because in .OPT files, each line inherits the
+      # previous line's file spec as default, so if no directory spec
+      # is present in the current line and the previous line has one that
+      # doesn't apply, you're in for a surprise.
+      my $write_opt =
+          join("\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_;
+                             $x =~ s|(\.EXE)|$1/SHARE|;
+                             $x =~ s|(\.LIB)|$1/LIB|;
+                             "WRITE OPT_FILE \"$x\"" } @deps)
+          || "\@ !";
+      return <<"EOF";
+$shlib.EXE : $lib.OLB $deps $ordinalsfile
+        IF "$mkdef_key" .EQS. "ssl" .OR. "$mkdef_key" .EQS. "crypto" THEN -
+           \$(PERL) $mkdef_pl "$mkdef_key" "VMS" > $shlib.SYMVEC-tmp
+        IF "$mkdef_key" .EQS. "ssl" .OR. "$mkdef_key" .EQS. "crypto" THEN -
+           \$(PERL) $translatesyms_pl \$(BUILDDIR)CXX\$DEMANGLER_DB. < $shlib.SYMVEC-tmp > $shlib.SYMVEC
+        OPEN/WRITE/SHARE=READ OPT_FILE $shlib.OPT
+        WRITE OPT_FILE "IDENTIFICATION=""V$config{version}"""
+        IF "$mkdef_key" .NES. "ssl" .AND. "$mkdef_key" .NES. "crypto" THEN -
+           TYPE $engine_opt /OUTPUT=OPT_FILE:
+        IF "$mkdef_key" .EQS. "ssl" .OR. "$mkdef_key" .EQS. "crypto" THEN -
+           TYPE $shlib.SYMVEC /OUTPUT=OPT_FILE:
+        WRITE OPT_FILE "$lib.OLB/LIBRARY"
+        $write_opt ! Comment to protect from empty line
+        CLOSE OPT_FILE
+        LINK /MAP=$shlib.MAP /FULL/SHARE=$shlib.EXE $shlib.OPT/OPT \$(EX_LIBS)
+        - DELETE $shlib.SYMVEC;*
+        - PURGE $shlib.EXE,$shlib.OPT,$shlib.MAP
+EOF
+  }
+  sub obj2dynlib {
+      my %args = @_;
+      my $lib = $args{lib};
+      my $libd = dirname($lib);
+      my $libn = basename($lib);
+      (my $libn_nolib = $libn) =~ s/^lib//;
+      my @objs = map { "$_.OBJ" } @{$args{objs}};
+      my @deps = map {
+          $config{no_shared} ? $_.".OLB"
+              : $unified_info{sharednames}->{$_}.".EXE"; } @{$args{deps}};
+      my $deps = join(", -\n\t\t", @objs, @deps);
+      my $shlib_target = $config{no_shared} ? "" : $target{shared_target};
+      my $engine_opt = abs2rel(rel2abs(catfile($config{sourcedir},
+                                               "VMS", "engine.opt")),
+                               rel2abs($config{builddir}));
+      # The "[]" hack is because in .OPT files, each line inherits the
+      # previous line's file spec as default, so if no directory spec
+      # is present in the current line and the previous line has one that
+      # doesn't apply, you're in for a surprise.
+      my $write_opt =
+          join(",-\"\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_;
+                                 "WRITE OPT_FILE \"$x" } @objs).
+          "\"\n\t".
+          join("\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_;
+                             $x =~ s|(\.EXE)|$1/SHARE|;
+                             $x =~ s|(\.LIB)|$1/LIB|;
+                             "WRITE OPT_FILE \"$x\"" } @deps)
+          || "\@ !";
+      return <<"EOF";
+$lib.EXE : $deps
+        OPEN/WRITE/SHARE=READ OPT_FILE $lib.OPT
+        TYPE $engine_opt /OUTPUT=OPT_FILE:
+        $write_opt
+        CLOSE OPT_FILE
+        LINK /MAP=$lib.MAP /FULL/SHARE=$lib.EXE $lib.OPT/OPT \$(EX_LIBS)
+        - PURGE $lib.EXE,$lib.OPT,$lib.MAP
+EOF
+  }
+  sub obj2lib {
+      my %args = @_;
+      my $lib = $args{lib};
+      my $objs = join(", -\n\t\t", map { $_.".OBJ" } (@{$args{objs}}));
+      my $fill_lib = join("\n\t", (map { "LIBRARY/REPLACE $lib.OLB $_.OBJ" }
+                                    @{$args{objs}}));
+      return <<"EOF";
+$lib.OLB : $objs
+        LIBRARY/CREATE/OBJECT $lib
+        $fill_lib
+        - PURGE $lib.OLB
+EOF
+  }
+  sub obj2bin {
+      my %args = @_;
+      my $bin = $args{bin};
+      my $bind = dirname($bin);
+      my $binn = basename($bin);
+      my @objs = map { "$_.OBJ" } @{$args{objs}};
+      my @deps = map {
+          $config{no_shared} ? $_.".OLB"
+              : $unified_info{sharednames}->{$_}.".EXE"; } @{$args{deps}};
+      my $deps = join(", -\n\t\t", @objs, @deps);
+      # The "[]" hack is because in .OPT files, each line inherits the
+      # previous line's file spec as default, so if no directory spec
+      # is present in the current line and the previous line has one that
+      # doesn't apply, you're in for a surprise.
+      my $write_opt =
+          join(",-\"\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_;
+                                 "WRITE OPT_FILE \"$x" } @objs).
+          "\"\n\t".
+          join("\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_;
+                             $x =~ s|(\.EXE)|$1/SHARE|;
+                             $x =~ s|(\.OLB)|$1/LIB|;
+                             "WRITE OPT_FILE \"$x\"" } @deps)
+          || "\@ !";
+      return <<"EOF";
+$bin.EXE : $deps
+        OPEN/WRITE/SHARE=READ OPT_FILE $bin.OPT
+        $write_opt
+        CLOSE OPT_FILE
+        LINK/EXEC=$bin.EXE \$(LDFLAGS) $bin.OPT/OPT \$(EX_LIBS)
+        - PURGE $bin.EXE,$bin.OPT
+EOF
+  }
+  sub in2script {
+      my %args = @_;
+      my $script = $args{script};
+      return "" if grep { $_ eq $script } @{$args{sources}}; # No overwrite!
+      my $sources = join(" ", @{$args{sources}});
+      my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
+                                           "util", "dofile.pl")),
+                           rel2abs($config{builddir}));
+      return <<"EOF";
+$script : $sources
+        \$(PERL) "-I\$(BUILDDIR)" "-Mconfigdata" $dofile $sources > $script
+        SET FILE/PROT=(S:RWED,O:RWED,G:RE,W:RE) $script
+        PURGE $script
+EOF
+  }
+  ""    # Important!  This becomes part of the template result.
+-}
diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl
new file mode 100644
index 0000000..4888dd0
--- /dev/null
+++ b/Configurations/unix-Makefile.tmpl
@@ -0,0 +1,784 @@
+##
+## Makefile for OpenSSL
+##
+## {- join("\n## ", @autowarntext) -}
+{-
+     sub windowsdll { $config{target} =~ /^(?:Cygwin|mingw)/ }
+     sub shlib_ext { $target{shared_extension} || ".so" }
+     sub shlib_ext_simple { (my $x = $target{shared_extension})
+                                =~ s/\.\$\(SHLIB_MAJOR\)\.\$\(SHLIB_MINOR\)//;
+                            $x }
+-}
+PLATFORM={- $config{target} -}
+OPTIONS={- $config{options} -}
+CONFIGURE_ARGS=({- join(", ",quotify_l(@{$config{perlargv}})) -})
+SRCDIR={- $config{sourcedir} -}
+BLDDIR={- $config{builddir} -}
+
+VERSION={- $config{version} -}
+MAJOR={- $config{major} -}
+MINOR={- $config{minor} -}
+SHLIB_VERSION_NUMBER={- $config{shlib_version_number} -}
+SHLIB_VERSION_HISTORY={- $config{shlib_version_history} -}
+SHLIB_MAJOR={- $config{shlib_major} -}
+SHLIB_MINOR={- $config{shlib_minor} -}
+SHLIB_TARGET={- $target{shared_target} -}
+
+EXE_EXT={- $target{exe_extension} || "" -}
+LIB_EXT={- $target{lib_extension} || ".a" -}
+SHLIB_EXT={- shlib_ext() -}
+SHLIB_EXT_SIMPLE={- shlib_ext_simple() -}
+OBJ_EXT={- $target{obj_extension} || ".o" -}
+DEP_EXT={- $target{dep_extension} || ".d" -}
+
+LIBS={- join(" ", map { $_."\$(LIB_EXT)" } @{$unified_info{libraries}}) -}
+SHLIBS={- join(" ", map { $_."\$(SHLIB_EXT)" } map { $unified_info{sharednames}->{$_} || () } @{$unified_info{libraries}}) -}
+ENGINES={- join(" ", map { $_."\$(SHLIB_EXT_SIMPLE)" } @{$unified_info{engines}}) -}
+PROGRAMS={- join(" ", map { $_."\$(EXE_EXT)" } grep { !m|^test/| } @{$unified_info{programs}}) -}
+TESTPROGS={- join(" ", map { $_."\$(EXE_EXT)" } grep { m|^test/| } @{$unified_info{programs}}) -}
+SCRIPTS={- join(" ", @{$unified_info{scripts}}) -}
+BIN_SCRIPTS=$(BLDDIR)/tools/c_rehash
+MISC_SCRIPTS=$(SRCDIR)/tools/c_hash $(SRCDIR)/tools/c_info \
+	     $(SRCDIR)/tools/c_issuer $(SRCDIR)/tools/c_name \
+	     $(BLDDIR)/apps/CA.pl $(SRCDIR)/apps/tsget
+
+# INSTALL_PREFIX is for package builders so that they can configure
+# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
+# Normally it is left empty.
+INSTALL_PREFIX={- $config{install_prefix} -}
+
+# Do not edit these manually. Use Configure with --prefix or --openssldir
+# to change this!  Short explanation in the top comment in Configure
+INSTALLTOP={- # $prefix is used in the OPENSSLDIR perl snippet
+	      #
+	      our $prefix = $config{prefix} || "/usr/local";
+              $prefix -}
+OPENSSLDIR={- #
+	      # The logic here is that if no --openssldir was given,
+	      # OPENSSLDIR will get the value from $prefix plus "/ssl".
+	      # If --openssldir was given and the value is an absolute
+	      # path, OPENSSLDIR will get its value without change.
+	      # If the value from --openssldir is a relative path,
+	      # OPENSSLDIR will get $prefix with the --openssldir
+	      # value appended as a subdirectory.
+	      #
+              use File::Spec::Functions;
+              our $openssldir =
+                  $config{openssldir} ?
+                      (file_name_is_absolute($config{openssldir}) ?
+                           $config{openssldir}
+                           : catdir($prefix, $config{openssldir}))
+                      : catdir($prefix, "ssl");
+              $openssldir -}
+LIBDIR={- #
+          # if $prefix/lib$target{multilib} is not an existing
+          # directory, then assume that it's not searched by linker
+          # automatically, in which case adding $target{multilib} suffix
+          # causes more grief than we're ready to tolerate, so don't...
+          our $multilib =
+              -d "$prefix/lib$target{multilib}" ? $target{multilib} : "";
+          our $libdir = $config{libdir} || "lib$multilib";
+          $libdir -}
+ENGINESDIR={- use File::Spec::Functions;
+              catdir($prefix,$libdir,"engines") -}
+
+MANDIR=$(OPENSSLDIR)/man
+HTMLDIR=$(OPENSSLDIR)/html
+
+MANSUFFIX=ssl
+HTMLSUFFIX=html
+
+
+
+CROSS_COMPILE= {- $config{cross_compile_prefix} -}
+CC= $(CROSS_COMPILE){- $target{cc} -}
+CFLAGS={- join(" ",(map { "-D".$_} @{$config{defines}}),"-DOPENSSLDIR=\"\\\"\$(OPENSSLDIR)\\\"\"","-DENGINESDIR=\"\\\"\$(ENGINESDIR)\\\"\"") -} {- $config{cflags} -}
+DEPFLAGS= {- join(" ",map { "-D".$_} @{$config{depdefines}}) -}
+LDFLAGS= {- $config{lflags} -}
+PLIB_LDFLAGS= {- $config{plib_lflags} -}
+EX_LIBS= {- $config{ex_libs} -}
+SHARED_LDFLAGS={- $target{shared_ldflag}
+                  # Unlike other OSes (like Solaris, Linux, Tru64,
+                  # IRIX) BSD run-time linkers (tested OpenBSD, NetBSD
+                  # and FreeBSD) "demand" RPATH set on .so objects.
+                  # Apparently application RPATH is not global and
+                  # does not apply to .so linked with other .so.
+                  # Problem manifests itself when libssl.so fails to
+                  # load libcrypto.so. One can argue that we should
+                  # engrave this into Makefile.shared rules or into
+                  # BSD-* config lines above. Meanwhile let's try to
+                  # be cautious and pass -rpath to linker only when
+                  # $prefix is not /usr.
+                  . ($config{target} =~ m|^BSD-| && $prefix !~ m|^/usr/.*$|
+                     ? " -Wl,-rpath,\$\$(LIBRPATH)" : "") -}
+
+PERL={- $config{perl} -}
+
+ARFLAGS= {- $target{arflags} -}
+AR=$(CROSS_COMPILE){- $target{ar} || "ar" -} $(ARFLAGS) r
+RANLIB= {- $target{ranlib} -}
+NM= $(CROSS_COMPILE){- $target{nm} || "nm" -}
+RM= rm -f
+TAR= {- $target{tar} || "tar" -}
+TARFLAGS= {- $target{tarflags} -}
+
+BASENAME=       openssl
+NAME=           $(BASENAME)-$(VERSION)
+TARFILE=        ../$(NAME).tar
+
+# We let the C compiler driver to take care of .s files. This is done in
+# order to be excused from maintaining a separate set of architecture
+# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
+# gcc, then the driver will automatically translate it to -xarch=v8plus
+# and pass it down to assembler.
+AS=$(CC) -c
+ASFLAG=$(CFLAGS)
+PERLASM_SCHEME= {- $target{perlasm_scheme} -}
+
+# For x86 assembler: Set PROCESSOR to 386 if you want to support
+# the 80386.
+PROCESSOR= {- $config{processor} -}
+
+# The main targets ###################################################
+
+all: Makefile libcrypto.pc libssl.pc openssl.pc $(ENGINES) $(PROGRAMS) $(SCRIPTS) $(TESTPROGS)
+
+test tests: $(TESTPROGS) rehash
+	( cd test; \
+	  SRCTOP=../$(SRCDIR) \
+	  BLDTOP=../$(BLDDIR) \
+	    $(PERL) ../$(SRCDIR)/test/run_tests.pl $(TESTS) )
+
+list-tests:
+	@TOP=$(SRCDIR) PERL=$(PERL) $(PERL) $(SRCDIR)/test/run_tests.pl list
+
+libclean:
+	-rm -f `find $(BLDDIR) -name '*$(LIB_EXT)' -o -name '*$(SHLIB_EXT)'`
+
+install: install_sw install_docs
+
+uninstall: uninstall_docs uninstall_sw
+
+clean: libclean
+	rm -f $(PROGRAMS) $(TESTPROGS)
+	rm -f `find $(BLDDIR) -name '*$(DEP_EXT)'`
+	rm -f `find $(BLDDIR) -name '*$(OBJ_EXT)'`
+	rm -f $(BLDDIR)/core $(BLDDIR)/rehash.time
+	rm -f $(BLDDIR)/tags $(BLDDIR)/TAGS
+	rm -f $(BLDDIR)/openssl.pc $(BLDDIR)/libcrypto.pc $(BLDDIR)/libssl.pc
+	-rm -f `find $(BLDDIR) -type l`
+	rm -f $(TARFILE)
+
+DCLEAN_CMD=sed -e '/^DO NOT DELETE.*/,$$d'
+dclean:
+	$(DCLEAN_CMD) < Makefile >Makefile.new
+	mv -f Makefile.new Makefile
+
+DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|\$(DEP_EXT)|; $x; }
+                  grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ }
+                  keys %{$unified_info{sources}}); -}
+depend: $(DEPS)
+	( $(DCLEAN_CMD) < Makefile; \
+	  echo '# DO NOT DELETE THIS LINE -- make depend depends on it.'; \
+	  echo; \
+	  cat `find . -name '*$(DEP_EXT)'` ) > Makefile.new
+	mv -f Makefile.new Makefile
+
+# Install helper targets #############################################
+
+install_sw: all install_dev install_engines install_runtime
+
+uninstall_sw: uninstall_dev uninstall_engines uninstall_runtime
+
+install_docs: install_man_docs install_html_docs
+
+uninstall_docs: uninstall_man_docs uninstall_html_docs
+
+install_dev:
+	@[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+	@echo "*** Installing development files"
+	@$(PERL) $(SRCDIR)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl
+	@set -e; for i in $(SRCDIR)/include/openssl/*.h \
+			  $(BLDDIR)/include/openssl/*.h; do \
+		fn=`basename $$i`; \
+		echo "install $$i -> $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$fn"; \
+		cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$fn; \
+		chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$fn; \
+	done
+	@$(PERL) $(SRCDIR)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)
+	@set -e; for l in $(LIBS); do \
+		fn=`basename $$l`; \
+		echo "install $$l -> $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn"; \
+		cp $$l $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.new; \
+		$(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.new; \
+		chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.new; \
+		mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.new \
+		      $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn; \
+	done
+	@ : {- output_off() if $config{no_shared}; "" -}
+	@set -e; for s in $(SHLIBS); do \
+		fn=`basename $$s`; \
+		echo "install $$s -> $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn"; \
+		cp $$s $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.new; \
+		chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.new; \
+		mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.new \
+		      $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn; \
+		if [ "$(SHLIB_EXT)" != "$(SHLIB_EXT_SIMPLE)" ]; then \
+			echo "link $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn2 -> $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn"; \
+			fn2=`basename $$fn $(SHLIB_EXT)`$(SHLIB_EXT_SIMPLE); \
+			ln -sf $$fn $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn2; \
+		fi; \
+		: {- output_off() unless windowsdll(); "" -}; \
+		echo "install $$s.a -> $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.a"; \
+		cp $$s.a $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.a.new; \
+		chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.a.new; \
+		mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.a.new \
+		      $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.a; \
+		: {- output_on() -}; \
+	done
+	@ : {- output_on() -}
+	@$(PERL) $(SRCDIR)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
+	@echo "install libcrypto.pc -> $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc"
+	@cp libcrypto.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
+	@chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc
+	@echo "install libssl.pc -> $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc"
+	@cp libssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
+	@chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc
+	@echo "install openssl.pc -> $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc"
+	@cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
+	@chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc
+
+uninstall_dev:
+	@echo "*** Uninstalling development files"
+	@set -e; for i in $(SRCDIR)/include/openssl/*.h \
+			  $(BLDDIR)/include/openssl/*.h; do \
+		fn=`basename $$i`; \
+		echo "$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$fn"; \
+		$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$fn; \
+	done
+	@set -e; for l in $(LIBS); do \
+		fn=`basename $$l`; \
+		echo "$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn"; \
+		$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn; \
+	done
+	@set -e; for s in $(SHLIBS); do \
+		fn=`basename $$s`; \
+		if [ "$(SHLIB_EXT)" != "$(SHLIB_EXT_SIMPLE)" ]; then \
+			fn2=`basename $$fn $(SHLIB_EXT)`$(SHLIB_EXT_SIMPLE); \
+			echo "$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn2"; \
+			$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn2; \
+		fi; \
+		echo "$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn"; \
+		$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn; \
+		: {- output_off() unless windowsdll(); "" -}; \
+		echo "$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.a"; \
+		$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$fn.a; \
+		: {- output_on() -}; \
+	done
+	@echo "$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc"
+	@$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc
+	@echo "$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc"
+	@$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc
+	@echo "$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc"
+	@$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc
+
+install_engines:
+	@[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+	@$(PERL) $(SRCDIR)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/
+	@echo "*** Installing engines"
+	@set -e; for e in $(ENGINES); do \
+		fn=`basename $$e`; \
+		echo "install $$e -> $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn"; \
+		cp $$e $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$fn.new; \
+		chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$fn.new; \
+		mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$fn.new \
+		      $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$fn; \
+	done
+
+uninstall_engines:
+	@echo "*** Uninstalling engines"
+	@set -e; for e in $(ENGINES); do \
+		fn=`basename $$e`; \
+		echo "$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn"; \
+		$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$fn; \
+	done
+
+install_runtime:
+	@[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+	@$(PERL) $(SRCDIR)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin
+	@$(PERL) $(SRCDIR)/util/mkdir-p.pl $(INSTALL_PREFIX)$(OPENSSLDIR)/misc
+	@echo "*** Installing runtime files"
+	: {- output_off() unless windowsdll(); "" -};
+	@set -e; for s in $(SHLIBS); do \
+		fn=`basename $$i`; \
+		echo "install $$s -> $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn"; \
+		cp $$s $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn.new; \
+		chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn.new; \
+		mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn.new \
+		      $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn; \
+	done
+	: {- output_on() -};
+	@set -e; for x in $(PROGRAMS); do \
+		fn=`basename $$x`; \
+		echo "install $$x -> $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn"; \
+		cp $$x $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn.new; \
+		chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn.new; \
+		mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn.new \
+		      $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn; \
+	done
+	@set -e; for x in $(BIN_SCRIPTS); do \
+		fn=`basename $$x`; \
+		echo "install $$x -> $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn"; \
+		cp $$x $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn.new; \
+		chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn.new; \
+		mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn.new \
+		      $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn; \
+	done
+	@set -e; for x in $(MISC_SCRIPTS); do \
+		fn=`basename $$x`; \
+		echo "install $$x -> $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$fn"; \
+		cp $$x $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$fn.new; \
+		chmod 755 $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$fn.new; \
+		mv -f $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$fn.new \
+		      $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$fn; \
+	done
+	@echo "install $(SRCDIR)/apps/openssl.cnf -> $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf"
+	@cp $(SRCDIR)/apps/openssl.cnf $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf.new
+	@chmod 644 $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf.new
+	@mv -f  $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf.new $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf
+
+uninstall_runtime:
+	@echo "*** Uninstalling runtime files"
+	@set -e; for x in $(PROGRAMS); \
+	do  \
+		fn=`basename $$x`; \
+		echo "$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn"; \
+		$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn; \
+	done;
+	@set -e; for x in $(BIN_SCRIPTS); \
+	do  \
+		fn=`basename $$x`; \
+		echo "$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn"; \
+		$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn; \
+	done
+	@set -e; for x in $(MISC_SCRIPTS); \
+	do  \
+		fn=`basename $$x`; \
+		echo "$(RM) $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$fn"; \
+		$(RM) $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$fn; \
+	done
+	: {- output_off() unless windowsdll(); "" -};
+	@set -e; for s in $(SHLIBS); do \
+		fn=`basename $$i`; \
+		echo "$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn"; \
+		$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$fn; \
+	done
+	: {- output_on() -};
+	$(RM) $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf
+
+# A method to extract all names from a .pod file
+# The first sed extracts everything between "=head1 NAME" and the next =head1
+# The second sed joins all the lines into one
+# The third sed removes the description and turns all commas into spaces
+# Voilà, you have a space separated list of names!
+EXTRACT_NAMES=sed -e '1,/^=head1  *NAME *$$/d;/^=head1/,$$d' | \
+              sed -e ':a;{N;s/\n/ /;ba}' | \
+              sed -e 's/ - .*$$//;s/,/ /g'
+PROCESS_PODS=\
+	set -e; \
+	here=`cd $(SRCDIR); pwd`; \
+	point=$$here/util/point.sh; \
+	for ds in apps:1 crypto:3 ssl:3; do \
+	    defdir=`echo $$ds | cut -f1 -d:`; \
+	    defsec=`echo $$ds | cut -f2 -d:`; \
+	    for p in $(SRCDIR)/doc/$$defdir/*.pod; do \
+		SEC=`sed -ne 's/^=for  *comment  *openssl_manual_section: *\([0-9]\) *$$/\1/p' $$p`; \
+		[ -z "$$SEC" ] && SEC=$$defsec; \
+		fn=`basename $$p .pod`; \
+		NAME=`echo $$fn | tr [a-z] [A-Z]`; \
+		suf=`eval "echo $$OUTSUFFIX"`; \
+		top=`eval "echo $$OUTTOP"`; \
+		$(PERL) $(SRCDIR)/util/mkdir-p.pl $$top/man$$SEC; \
+		echo "install $$p -> $$top/man$$SEC/$$fn$$suf"; \
+		cat $$p | eval "$$GENERATE" \
+			>  $$top/man$$SEC/$$fn$$suf; \
+		names=`cat $$p | $(EXTRACT_NAMES)`; \
+		( cd $$top/man$$SEC; \
+		  for n in $$names; do \
+		      if [ "$$n" != "$$fn" ]; then \
+			  echo "link $$top/man$$SEC/$$n$$suf -> $$top/man$$SEC/$$fn$$suf"; \
+			  PLATFORM=$(PLATFORM) $$point $$fn$$suf $$n$$suf; \
+		      fi; \
+		  done ); \
+	    done; \
+	done
+UNINSTALL_DOCS=\
+	set -e; \
+	here=`cd $(SRCDIR); pwd`; \
+	for ds in apps:1 crypto:3 ssl:3; do \
+	    defdir=`echo $$ds | cut -f1 -d:`; \
+	    defsec=`echo $$ds | cut -f2 -d:`; \
+	    for p in $(SRCDIR)/doc/$$defdir/*.pod; do \
+		SEC=`sed -ne 's/^=for  *comment  *openssl_manual_section: *\([0-9]\) *$$/\1/p' $$p`; \
+		[ -z "$$SEC" ] && SEC=$$defsec; \
+		fn=`basename $$p .pod`; \
+		suf=`eval "echo $$OUTSUFFIX"`; \
+		top=`eval "echo $$OUTTOP"`; \
+		echo "$(RM) $$top/man$$SEC/$$fn$$suf"; \
+	        $(RM) $$top/man$$SEC/$$fn$$suf; \
+		names=`cat $$p | $(EXTRACT_NAMES)`; \
+		for n in $$names; do \
+		    if [ "$$n" != "$$fn" ]; then \
+			echo "$(RM) $$top/man$$SEC/$$n$$suf"; \
+			$(RM) $$top/man$$SEC/$$n$$suf; \
+		    fi; \
+		done; \
+	    done; \
+	done
+
+install_man_docs:
+	@[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+	@echo "*** Installing manpages"
+	@\
+	OUTSUFFIX='.$${SEC}$(MANSUFFIX)'; \
+	OUTTOP="$(INSTALL_PREFIX)$(MANDIR)"; \
+	GENERATE='pod2man --name=$$NAME --section=$$SEC --center=OpenSSL --release=$(VERSION)'; \
+	$(PROCESS_PODS)
+
+uninstall_man_docs:
+	@echo "*** Uninstalling manpages"
+	@\
+	OUTSUFFIX='.$${SEC}$(MANSUFFIX)'; \
+	OUTTOP="$(INSTALL_PREFIX)$(MANDIR)"; \
+	$(UNINSTALL_DOCS)
+
+install_html_docs:
+	@[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+	@echo "*** Installing HTML manpages"
+	@\
+	OUTSUFFIX='.$(HTMLSUFFIX)'; \
+	OUTTOP="$(INSTALL_PREFIX)$(HTMLDIR)"; \
+	GENERATE="pod2html --podroot=$(SRCDIR)/doc --htmldir=.. \
+			   --podpath=apps:crypto:ssl \
+		  | sed -e 's|href=\"http://man.he.net/man|href=\"../man|g'"; \
+	$(PROCESS_PODS)
+
+uninstall_html_docs:
+	@echo "*** Uninstalling manpages"
+	@\
+	OUTSUFFIX='.$(HTMLSUFFIX)'; \
+	OUTTOP="$(INSTALL_PREFIX)$(HTMLDIR)"; \
+	$(UNINSTALL_DOCS)
+
+
+# Developer targets (note: these are only available on Unix) #########
+
+update: errors ordinals tags test_ordinals
+
+# Test coverage is a good idea for the future
+#coverage: $(PROGRAMS) $(TESTPROGRAMS)
+#	...
+
+# Currently disabled, util/selftest.pl needs a rewrite
+#report:
+#	SRCDIR=$(SRCDIR) @$(PERL) util/selftest.pl
+
+lint:
+	lint -DLINT $(INCLUDES) $(SRCS)
+
+errors:
+	( cd $(SRCDIR); $(PERL) util/ck_errf.pl -strict */*.c */*/*.c )
+	( cd $(SRCDIR); $(PERL) util/mkerr.pl -recurse -write )
+	( cd $(SRCDIR)/engines; \
+	  for e in *.ec; do \
+	      $(PERL) ../util/mkerr.pl -conf $$e \
+		      -nostatic -staticloader -write *.c; \
+	  done )
+	( cd $(SRCDIR)/crypto/ct; \
+	  $(PERL) ../../util/mkerr.pl -conf ct.ec -hprefix internal/ -write *.c )
+
+ordinals:
+	( b=`pwd`; cd $(SRCDIR); $(PERL) -I$$b util/mkdef.pl crypto update )
+	( b=`pwd`; cd $(SRCDIR); $(PERL) -I$$b util/mkdef.pl ssl update )
+
+test_ordinals:
+	( cd test; \
+	  SRCTOP=../$(SRCDIR) \
+	  BLDTOP=../$(BLDDIR) \
+	    $(PERL) ../$(SRCDIR)/test/run_tests.pl test_ordinals )
+
+tags TAGS: FORCE
+	rm -f TAGS tags
+	-ctags -R .
+	-etags `find . -name '*.[ch]' -o -name '*.pm'`
+
+# Release targets (note: only available on Unix) #####################
+
+tar:
+	TMPDIR=/var/tmp/openssl-copy.$$$$; \
+	DISTDIR=openssl-$(VERSION); \
+	mkdir -p $$TMPDIR/$$DISTDIR; \
+	(cd $(SRCDIR); \
+	 git ls-tree -r --name-only --full-tree HEAD \
+	 | while read F; do \
+	       mkdir -p $$TMPDIR/$$DISTDIR/`dirname $$F`; \
+	       cp $$F $$TMPDIR/$$DISTDIR/$$F; \
+	   done); \
+	(cd $$TMPDIR; \
+	 [ -n "$(PREPARE_CMD)" ] && $(PREPARE_CMD); \
+	 find $$TMPDIR/$$DISTDIR -type d -print | xargs chmod 755; \
+	 find $$TMPDIR/$$DISTDIR -type f -print | xargs chmod a+r; \
+	 find $$TMPDIR/$$DISTDIR -type f -perm -0100 -print | xargs chmod a+x; \
+	 $(TAR) $(TARFLAGS) --owner 0 --group 0 -cvf - $$DISTDIR) \
+	| (cd $(SRCDIR); gzip --best > $(TARFILE).gz); \
+	rm -rf $$TMPDIR
+	cd $(SRCDIR); ls -l $(TARFILE).gz
+
+dist:
+	@$(MAKE) PREPARE_CMD='./Configure dist' tar
+
+# Helper targets #####################################################
+
+rehash: link-utils copy-certs
+	@if [ -z "$(CROSS_COMPILE)" ]; then \
+		(OPENSSL="$(BLDDIR)/util/shlib_wrap.sh apps/openssl"; \
+		[ -x "$(BLDDIR)/openssl.exe" ] && OPENSSL="$(BLDDIR)/openssl.exe" || :; \
+		OPENSSL_DEBUG_MEMORY=on; OPENSSL_CONF=/dev/null ; \
+		export OPENSSL OPENSSL_DEBUG_MEMORY OPENSSL_CONF; \
+		$$OPENSSL rehash certs/demo \
+		|| $(PERL) tools/c_rehash certs/demo) && \
+		touch rehash.time; \
+	else :; fi
+
+link-utils: $(BLDDIR)/util/opensslwrap.sh $(BLDDIR)/util/shlib_wrap.sh
+
+$(BLDDIR)/util/opensslwrap.sh: Makefile
+	@if [ "$(SRCDIR)" != "$(BLDDIR)" ]; then \
+	    mkdir -p "$(BLDDIR)/util"; \
+	    ln -sf "../$(SRCDIR)/util/opensslwrap.sh" "$(BLDDIR)/util"; \
+	fi
+$(BLDDIR)/util/shlib_wrap.sh: Makefile
+	@if [ "$(SRCDIR)" != "$(BLDDIR)" ]; then \
+	    mkdir -p "$(BLDDIR)/util"; \
+	    ln -sf "../$(SRCDIR)/util/shlib_wrap.sh" "$(BLDDIR)/util"; \
+	fi
+
+copy-certs: FORCE
+	@if [ "$(SRCDIR)" != "$(BLDDIR)" ]; then \
+	    cp -R "$(SRCDIR)/certs" "$(BLDDIR)/"; \
+	fi
+
+FORCE :
+
+# Building targets ###################################################
+
+libcrypto.pc libssl.pc openssl.pc: Makefile $(LIBS)
+libcrypto.pc:
+	@ ( echo 'prefix=$(INSTALLTOP)'; \
+	    echo 'exec_prefix=$${prefix}'; \
+	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
+	    echo 'includedir=$${prefix}/include'; \
+	    echo ''; \
+	    echo 'Name: OpenSSL-libcrypto'; \
+	    echo 'Description: OpenSSL cryptography library'; \
+	    echo 'Version: '$(VERSION); \
+	    echo 'Libs: -L$${libdir} -lcrypto'; \
+	    echo 'Libs.private: $(EX_LIBS)'; \
+	    echo 'Cflags: -I$${includedir}' ) > libcrypto.pc
+
+libssl.pc:
+	@ ( echo 'prefix=$(INSTALLTOP)'; \
+	    echo 'exec_prefix=$${prefix}'; \
+	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
+	    echo 'includedir=$${prefix}/include'; \
+	    echo ''; \
+	    echo 'Name: OpenSSL-libssl'; \
+	    echo 'Description: Secure Sockets Layer and cryptography libraries'; \
+	    echo 'Version: '$(VERSION); \
+	    echo 'Requires.private: libcrypto'; \
+	    echo 'Libs: -L$${libdir} -lssl'; \
+	    echo 'Libs.private: $(EX_LIBS)'; \
+	    echo 'Cflags: -I$${includedir}' ) > libssl.pc
+
+openssl.pc:
+	@ ( echo 'prefix=$(INSTALLTOP)'; \
+	    echo 'exec_prefix=$${prefix}'; \
+	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
+	    echo 'includedir=$${prefix}/include'; \
+	    echo ''; \
+	    echo 'Name: OpenSSL'; \
+	    echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
+	    echo 'Version: '$(VERSION); \
+	    echo 'Requires: libssl libcrypto' ) > openssl.pc
+
+# Note on the use of $(MFLAGS): this was an older variant of MAKEFLAGS which
+# wasn't passed down automatically.  It's quite safe to use it like we do
+# below; if it doesn't exist, the result will be empty and 'make' will pick
+# up $(MAKEFLAGS) which is passed down as an environment variable.
+Makefile: {- $config{build_file_template} -} $(SRCDIR)/Configure $(SRCDIR)/config
+	@echo "Makefile is older than {- $config{build_file_template} -}, $(SRCDIR)/Configure or $(SRCDIR)/config."
+	@echo "Reconfiguring..."
+	$(SRCDIR)/Configure reconf
+	@echo "**************************************************"
+	@echo "***                                            ***"
+	@echo "***   Please run the same make command again   ***"
+	@echo "***                                            ***"
+	@echo "**************************************************"
+	@false
+
+{-
+  use File::Basename;
+  use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs/;
+  sub src2dep {
+      my %args = @_;
+      my $dep = $args{obj}.'$(DEP_EXT)';
+      my $obj = $args{obj}.'$(OBJ_EXT)';
+      my $srcs = join(" ", @{$args{srcs}});
+      my $incs = join(" ", map { " -I".$_ } @{$args{incs}});
+      my $makedepprog = $config{makedepprog};
+      if ($makedepprog eq "makedepend") {
+          return <<"EOF";
+$dep : $srcs
+	rm -f \$\@.tmp; touch \$\@.tmp
+	\$(MAKEDEPEND) -f\$\@.tmp -o"|$obj"\
+	    -- -DOPENSSL_DOING_MAKEDEPEND \$(DEPFLAGS)$incs \
+	    -- $srcs
+	sed -e 's/^.*|//' -e 's/ \\/\\(\\\\.\\|[^ ]\\)*//g' -e '/: *\$/d' -e '/^\\(#.*\\| *\\)\$/d' \$\@.tmp > \$\@
+	rm \$\@.tmp
+EOF
+      }
+      return <<"EOF";
+$dep : $srcs Makefile
+	\$(CC) -DOPENSSL_DOING_MAKEDEPEND \$(DEPFLAGS)$incs -MM -MF \$\@ -MQ $obj $srcs
+EOF
+  }
+  sub src2obj {
+      my %args = @_;
+      my $obj = $args{obj}.'$(OBJ_EXT)';
+      my $srcs = join(" ", @{$args{srcs}});
+      my $deps = join(" ", @{$args{srcs}}, @{$args{deps}});
+      my $incs = join(" ", map { " -I".$_ } @{$args{incs}});
+      return <<"EOF";
+$obj : $deps
+	\$(CC) \$(CFLAGS)$incs -c -o \$\@ $srcs
+EOF
+  }
+  # On Unix, we build shlibs from static libs, so we're ignoring the
+  # object file array.  We *know* this routine is only called when we've
+  # configure 'shared'.
+  sub libobj2shlib {
+      my %args = @_;
+      my $lib = $args{lib};
+      my $shlib = $args{shlib};
+      my $libd = dirname($lib);
+      my $libn = basename($lib);
+      (my $libname = $libn) =~ s/^lib//;
+      my $shlibdeps = join("", map { my $d = dirname($_);
+                                     my $f = basename($_);
+                                     (my $l = $f) =~ s/^lib//;
+                                     " -L$d -l$l" } @{$args{deps}});
+      my $deps = join(" ",map { $_."\$(SHLIB_EXT_SIMPLE)" } @{$args{deps}});
+      my $shlib_target = $target{shared_target};
+      my $ordinalsfile = defined($args{ordinals}) ? $args{ordinals}->[1] : "";
+      my $targets =
+         "$shlib".shlib_ext() .
+         (shlib_ext() ne shlib_ext_simple()
+          ? " $shlib".shlib_ext_simple() : "");
+      return <<"EOF"
+$targets : $lib\$(LIB_EXT) $deps $ordinalsfile
+	\$(MAKE) -f \$(SRCDIR)/Makefile.shared -e \\
+		PERL=\$(PERL) SRCDIR="\$(SRCDIR)" DSTDIR="$libd" \\
+                INSTALLTOP="\$(INSTALLTOP)" LIBDIR="\$(LIBDIR)" \\
+                LIBDEPS="\$(PLIB_LDFLAGS) $shlibdeps \$(EX_LIBS)" \\
+                LIBNAME=$libname LIBVERSION=\$(SHLIB_MAJOR).\$(SHLIB_MINOR) \\
+                LIBCOMPATVERSIONS=";\$(SHLIB_VERSION_HISTORY)" \\
+                CC="\$(CC)" CFLAGS="\$(CFLAGS)" LDFLAGS="\$(LDFLAGS)" \\
+                SHARED_LDFLAGS="\$(SHARED_LDFLAGS)" SHLIB_EXT=\$(SHLIB_EXT) \\
+                link_a.$shlib_target
+EOF
+	  . (windowsdll() ? <<"EOF" : "");
+	rm -f apps/$shlib\$(SHLIB_EXT)
+	rm -f test/$shlib\$(SHLIB_EXT)
+	cp -p $shlib\$(SHLIB_EXT) apps/
+	cp -p $shlib\$(SHLIB_EXT) test/
+EOF
+  }
+  sub obj2dynlib {
+      my %args = @_;
+      my $lib = $args{lib};
+      my $libd = dirname($lib);
+      my $libn = basename($lib);
+      (my $libname = $libn) =~ s/^lib//;
+      my $shlibdeps = join("", map { my $d = dirname($_);
+                                     my $f = basename($_);
+                                     (my $l = $f) =~ s/^lib//;
+                                     " -L$d -l$l" } @{$args{deps}});
+      my $deps = join(" ",map { $_."\$(SHLIB_EXT_SIMPLE)" } @{$args{deps}});
+      my $shlib_target = $target{shared_target};
+      my $objs = join(" ", map { $_."\$(OBJ_EXT)" } @{$args{objs}});
+      return <<"EOF";
+$lib\$(SHLIB_EXT_SIMPLE): $objs $deps
+	\$(MAKE) -f \$(SRCDIR)/Makefile.shared -e \\
+                PERL=\$(PERL) SRCDIR="\$(SRCDIR)" DSTDIR="$libd" \\
+                LIBDEPS="\$(PLIB_LDFLAGS) $shlibdeps \$(EX_LIBS)" \\
+                LIBNAME=$libname LDFLAGS="\$(LDFLAGS)" \\
+                CC="\$(CC)" CFLAGS="\$(CFLAGS)" \\
+                SHARED_LDFLAGS="\$(SHARED_LDFLAGS)" \\
+		SHLIB_EXT=\$(SHLIB_EXT_SIMPLE) \\
+		LIBEXTRAS="$objs" \\
+                link_o.$shlib_target
+EOF
+  }
+  sub obj2lib {
+      my %args = @_;
+      my $lib = $args{lib};
+      my $objs = join(" ", map { $_."\$(OBJ_EXT)" } @{$args{objs}});
+      return <<"EOF";
+$lib\$(LIB_EXT) : $objs
+	\$(AR) \$\@ $objs
+	\$(RANLIB) \$\@ || echo Never mind.
+EOF
+  }
+  sub obj2bin {
+      my %args = @_;
+      my $bin = $args{bin};
+      my $bind = dirname($bin);
+      my $binn = basename($bin);
+      my $objs = join(" ", map { $_."\$(OBJ_EXT)" } @{$args{objs}});
+      my $deps = join(" ",
+                      (map { $_."\$(OBJ_EXT)" } @{$args{objs}}),
+                      (map { $_.($config{no_shared} ? "\$(LIB_EXT)" : "\$(SHLIB_EXT)" ) }
+                       @{$args{deps}}));
+      my $libdeps = join("", map { my $d = dirname($_);
+                                   my $f = basename($_);
+                                   $d = "." if $d eq $f;
+                                   (my $l = $f) =~ s/^lib//;
+                                   " -L$d -l$l" } @{$args{deps}});
+      my $shlib_target = $config{no_shared} ? "" : $target{shared_target};
+      return <<"EOF";
+$bin\$(EXE_EXT) : $deps
+	\$(RM) $bin\$(EXE_EXT)
+	\$(MAKE) -f \$(SRCDIR)/Makefile.shared -e \\
+                PERL=\$(PERL) SRCDIR=\$(SRCDIR) \\
+		APPNAME=$bin OBJECTS="$objs" \\
+		LIBDEPS="\$(PLIB_LDFLAGS) \$(LDFLAGS) $libdeps \$(EX_LIBS)" \\
+                CC="\$(CC)" CFLAGS="\$(CFLAGS)" LDFLAGS="\$(LDFLAGS)" \\
+                LIBRPATH="\$(INSTALLTOP)/\$(LIBDIR)" \\
+		link_app.$shlib_target
+EOF
+  }
+  sub in2script {
+      my %args = @_;
+      my $script = $args{script};
+      my $sources = join(" ", @{$args{sources}});
+      my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
+                                           "util", "dofile.pl")),
+                           rel2abs($config{builddir}));
+      return <<"EOF";
+$script : $sources
+	\$(PERL) "-I\$(BLDDIR)" -Mconfigdata "$dofile" $sources > "$script"
+	chmod a+x $script
+EOF
+  }
+  ""    # Important!  This becomes part of the template result.
+-}
diff --git a/Configure b/Configure
index 75b8558..61d28a7 100755
--- a/Configure
+++ b/Configure
@@ -405,6 +405,7 @@ my $no_sse2=0;
 
 my $user_cflags="";
 my @user_defines=();
+my $unified = 0;
 $config{depdefines}=[];
 $config{openssl_experimental_defines}=[];
 $config{openssl_api_defines}=[];
@@ -575,7 +576,11 @@ foreach (@argvcopy)
 		}
 	elsif (/^[-+]/)
 		{
-		if (/^--prefix=(.*)$/)
+		if (/^--unified$/)
+			{
+			$unified=1;
+			}
+		elsif (/^--prefix=(.*)$/)
 			{
 			$config{prefix}=$1;
 			die "Directory given with --prefix MUST be absolute\n"
@@ -844,6 +849,15 @@ $target{nm} = "nm";
 $target{build_scheme} = [ $target{build_scheme} ]
     if ref($target{build_scheme}) ne "ARRAY";
 
+###### TO BE REMOVED BEFORE FINAL RELEASE
+######
+###### If the user has chosen --unified, we give it to them.
+if ($target{build_file} eq "Makefile"
+    && $target{build_scheme}->[0] eq "unixmake"
+    && $unified) {
+    $target{build_scheme} = [ "unified", "unix" ];
+}
+
 my ($builder, $builder_platform, @builder_opts) =
     @{$target{build_scheme}};
 
@@ -1885,6 +1899,39 @@ print <<"EOF" if ($warn_make_depend);
 	make depend
 EOF
 
+###### TO BE REMOVED BEFORE FINAL RELEASE
+######
+###### If the user hasn't chosen --unified, try to nudge them.
+if ($target{build_file} eq "Makefile"
+    && $target{build_scheme}->[0] eq "unixmake"
+    && !$unified) {
+
+    my $plausible_builddir =
+        abs2rel(rel2abs("../_openssl-build_$target"),rel2abs("."));
+    my $plausible_to_sourcedir =
+        abs2rel(rel2abs("."),rel2abs("../_openssl-build_$target"));
+    print <<"EOF";
+
+----------------------------------------------------------------------
+Please consider configuring with the flag --unified .
+It's to test out a new "unified" building system.
+
+One cool feature is that you can have your build directory elsewhere,
+for example:
+
+    make clean          # Clean the current configuration away
+    mkdir $plausible_builddir
+    cd $plausible_builddir
+    $plausible_to_sourcedir/config --unified
+    make
+    make test
+
+Please report any problem you have.
+----------------------------------------------------------------------
+
+EOF
+}
+
 exit(0);
 
 ######################################################################
diff --git a/INSTALL.VMS b/INSTALL.VMS
index 7fc3389..01f2ee7 100644
--- a/INSTALL.VMS
+++ b/INSTALL.VMS
@@ -1,302 +1,66 @@
-			VMS Installation instructions
-			written by Richard Levitte
-			<richard at levitte.org>
 
+ INSTALLATION ON THE VMS PLATFORM
+ --------------------------------
 
-Intro:
-======
+ Intro
+ -----
 
-This file is divided in the following parts:
+ This file is divided in the following parts:
 
-  Requirements			- Mandatory reading.
-  Checking the distribution	- Mandatory reading.
-  Compilation			- Mandatory reading.
-  Logical names			- Mandatory reading.
-  Test				- Mandatory reading.
-  Installation			- Mandatory reading.
-  Backward portability		- Read if it's an issue.
-  Possible bugs or quirks	- A few warnings on things that
-				  may go wrong or may surprise you.
-  TODO				- Things that are to come.
+   Requirements                 - Mandatory reading.
+   Cheking the distribution     - Mandatory reading.
+   Quick start
+   Test                         <TO BE ADDED>
+   Installation                 <TO BE ADDED>
+   Backward portability         <TO BE ADDED>
+   Possible bugs and quirks     <TO BE ADDED>
 
 
-Requirements:
-=============
+ Requirements
+ ------------
 
-To build and install OpenSSL, you will need:
+ To build and install OpenSSL, you will need:
 
- * Perl 5 with core modules.  If you don't want to build it yourself,
-   we suggest you look here: http://sourceforge.net/projects/vmsperlkit/files/
- * DEC C or some other ANSI C compiler.  VAX C is *not* supported.
-   [Note: OpenSSL has only been tested with DEC C.  Compiling with 
-    a different ANSI C compiler may require some work]
+  * Perl 5 with core modules (please read README.PERL)
+  * The perl module Text::Template (please read README.PERL)
+  * DEC C or some other ANSI C compiler.  VAX C is *not* supported.
+    [Note: OpenSSL has only been tested with DEC C.  Compiling with 
+     a different ANSI C compiler may require some work]
 
-Checking the distribution:
-==========================
+ Checking the distribution
+ -------------------------
 
-There have been reports of places where the distribution didn't quite get
-through, for example if you've copied the tree from a NFS-mounted Unix
-mount point.
+ There have been reports of places where the distribution didn't quite
+ get through, for example if you've copied the tree from a NFS-mounted
+ Unix mount point.
 
-The easiest way to check if everything got through as it should is to check
-for one of the following files:
+ The easiest way to check if everything got through as it should is to
+ check for one of the following files:
 
-	[.CRYPTO]OPENSSLCONF.H_IN
-	[.CRYPTO]OPENSSLCONF_H.IN
+  [.crypto]opensslconf^.h.in
 
-They should never exist both at once, but one of them should (preferably
-the first variant).  If you can't find any of those two, something went
-wrong.
+ The best way to get a correct distribution is to download the gzipped
+ tar file from ftp://ftp.openssl.org/source/, use GUNZIP to uncompress
+ it and use VMSTAR to unpack the resulting tar file.
 
-The best way to get a correct distribution is to download the gzipped tar
-file from ftp://ftp.openssl.org/source/, use GUNZIP to uncompress it and
-use VMSTAR to unpack the resulting tar file.
+ GUNZIP is available {FIXME: where is it available?}
 
-GUNZIP is available in many places on the net.  One of the distribution
-points is the WKU software archive, ftp://ftp.wku.edu/vms/fileserv/ .
+ VMSTAR is available {FIXME: where is it available?}
 
-VMSTAR is also available in many places on the net.  The recommended place
-to find information about it is http://www.free.lp.se/vmstar/ .
 
+ Quick start
+ -----------
 
-Compilation:
-============
+ If you want to just get on with it, do this:
 
-I've used the very good command procedures written by Robert Byer
-<byer at mail.all-net.net>, and just slightly modified them, making
-them slightly more general and easier to maintain.
+  $ @config
+  $ mms
+  $ mms test
+  $ mmm install
 
-You can actually compile in almost any directory separately.  Look
-for a command procedure name xxx-LIB.COM (in the library directories)
-or MAKExxx.COM (in the program directories) and read the comments at
-the top to understand how to use them.  However, if you want to
-compile all you can get, the simplest is to use MAKEVMS.COM in the top
-directory.  The syntax is the following:
+ This will buidl and install OpenSSL in the default location, which is
+ SYS$COMMON:[OPENSSL-'VERSION'].  If you want it to be anywhere else,
+ run config.com like this:
 
-  @MAKEVMS <option> <bits> <debug-p> [<compiler>]
+  $ @config --prefix=PROGRAM:[OPENSSL]
 
-<option> must be one of the following:
-
-      ALL       Just build "everything".
-      CONFIG    Just build the "[.CRYPTO]OPENSSLCONF.H" file.
-      BUILDINF  Just build the "[.INCLUDE]BUILDINF.H" file.
-      SOFTLINKS Just copies some files, to simulate Unix soft links.
-      BUILDALL  Same as ALL, except CONFIG, BUILDINF and SOFTLINKS aren't done.
-      RSAREF    Just build the "[.xxx.EXE.RSAREF]LIBRSAGLUE.OLB" library.
-      CRYPTO    Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library.
-      SSL       Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library.
-      TEST      Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL.
-      APPS      Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL.
-
-<bits> must be one of the following:
-
-      ""        compile using default pointer size
-      32        compile using 32 bit pointer size
-      64        compile using 64 bit pointer size
-
-<debug-p> must be one of the following:
-
-      DEBUG     compile with debugging info (will not optimize)
-      NODEBUG   compile without debugging info (will optimize)
-
-<compiler> must be one of the following:
-
-      DECC      For DEC C.
-      GNUC      For GNU C.
-
-
-You will find the crypto library in [.xxx.EXE.CRYPTO] (where xxx is VAX,
-ALPHA or IA64), called SSL_LIBCRYPTO32.OLB or SSL_LIBCRYPTO.OLB depending
-on how it was built.  You will find the SSL library in [.xxx.EXE.SSL],
-named SSL_LIBSSL32.OLB or SSL_LIBSSL.OLB, and you will find a bunch of
-useful programs in [.xxx.EXE.APPS].  However, these shouldn't be used
-right off unless it's just to test them.  For production use, make sure
-you install first, see Installation below.
-
-Note 1: Some programs in this package require a TCP/IP library.
-
-Note 2: if you want to compile the crypto library only, please make sure
-        you have at least done a @MAKEVMS CONFIG, a @MAKEVMS BUILDINF and
-        a @MAKEVMS SOFTLINKS.  A lot of things will break if you don't.
-
-
-Logical names:
-==============
-
-There are a few things that can't currently be given through the command
-line.  Instead, logical names are used.
-
-Currently, the logical names supported are:
-
-      OPENSSL_NO_ASM    with value YES, the assembler parts of OpenSSL will
-                        not be used.  Instead, plain C implementations are
-                        used.  This is good to try if something doesn't work.
-      OPENSSL_NO_'alg'  with value YES, the corresponding crypto algorithm,
-                        protocol or other routine will not be implemented if
-                        disabling it is supported.  Supported algorithms to
-                        do this with are: AES, BF, CAMELLIA, CAST, CMS, COMP,
-                        DES, DGRAM, DH, DSA, EC, EC2M, ECDH, ECDSA, ENGINE,
-                        ERR, GOST, HEARTBEATS, HMAC, IDEA, MD2, MD4,
-                        MD5, OCB, OCSP, PSK, RC2, RC4, RC5, RMD160, RSA, SCTP,
-                        SEED, SOCK, SRP, SRTP, WHIRLPOOL.  So, for
-                        example, having the logical name OPENSSL_NO_RSA with
-                        the value YES means that the LIBCRYPTO.OLB library
-                        will not contain an RSA implementation.
-      OPENSSL_EXPERIMENTAL_'alg'
-                        with value YES, the corresponding experimental
-                        algorithm is enabled.  Note that is also requires
-                        the application using this to define the C macro
-                        OPENSSL_EXPERIMENTAL_'alg'.  Supported algorithms
-                        to do this with are: JPAKE, STORE.
-
-Test:
-=====
-
-Testing is very simple, just do the following:
-
-  @[.TEST]TESTS
-
-If a test fails, try with defining the logical name OPENSSL_NO_ASM (yes,
-it's an ugly hack!) and rebuild. Please send a bug report to
-<openssl-bugs at openssl.org>, including the output of "openssl version -a"
-and of the failed test.
-
-
-Installation:
-=============
-
-Installation is easy, just do the following:
-
-  @INSTALL <root> <bits>
-
-<root> is the directory in which everything will be installed,
-subdirectories, libraries, header files, programs and startup command
-procedures.
-
-<bits> works the same way as for MAKEVMS.COM
-
-N.B.: INSTALL.COM builds a new directory structure, different from
-the directory tree where you have now build OpenSSL.
-
-In the [.VMS] subdirectory of the installation, you will find the
-following command procedures:
-
-  OPENSSL_STARTUP.COM
-
-        defines all needed logical names.  Takes one argument that
-        tells it in what logical name table to insert the logical
-        names.  If you insert if it SYS$MANAGER:SYSTARTUP_VMS.COM, the
-        call should look like this: 
-
-          @openssldev:[openssldir.VMS]OPENSSL_STARTUP "/SYSTEM"
-
-  OPENSSL_UTILS.COM
-
-        sets up the symbols to the applications.  Should be called
-        from for example SYS$MANAGER:SYLOGIN.COM 
-
-  OPENSSL_UNDO.COM
-
-	deassigns the logical names created with OPENSSL_STARTUP.COM.
-
-The logical names that are set up are the following:
-
-  SSLROOT       a dotted concealed logical name pointing at the
-                root directory.
-
-  SSLCERTS      Initially an empty directory, this is the default
-		location for certificate files.
-  SSLPRIVATE	Initially an empty directory, this is the default
-		location for private key files.
-
-  SSLEXE        Contains the openssl binary and a few other utility
-		programs.
-  SSLINCLUDE    Contains the header files needed if you want to
-		compile programs with libcrypto or libssl.
-  SSLLIB        Contains the OpenSSL library files themselves:
-  		- SSL_LIBCRYPTO32.OLB and SSL_LIBSSL32.OLB or
-		- SSL_LIBCRYPTO.OLB and SSL_LIBSSL.OLB
-
-  OPENSSL	Same as SSLINCLUDE.  This is because the standard
-		way to include OpenSSL header files from version
-		0.9.3 and on is:
-
-			#include <openssl/header.h>
-
-		For more info on this issue, see the INSTALL. file
-		(the NOTE in section 4 of "Installation in Detail").
-		You don't need to "deleting old header files"!!!
-
-
-Backward portability:
-=====================
-
-One great problem when you build a library is making sure it will work
-on as many versions of VMS as possible.  Especially, code compiled on
-OpenVMS version 7.x and above tend to be unusable in version 6.x or
-lower, because some C library routines have changed names internally
-(the C programmer won't usually see it, because the old name is
-maintained through C macros).  One obvious solution is to make sure
-you have a development machine with an old enough version of OpenVMS.
-However, if you are stuck with a bunch of Alphas running OpenVMS version
-7.1, you seem to be out of luck.  Fortunately, the DEC C header files
-are cluttered with conditionals that make some declarations and definitions
-dependent on the OpenVMS version or the C library version, *and* you
-can use those macros to simulate older OpenVMS or C library versions,
-by defining the macros _VMS_V6_SOURCE, __VMS_VER and __CTRL_VER with
-correct values.  In the compilation scripts, I've provided the possibility
-for the user to influence the creation of such macros, through a bunch of
-symbols, all having names starting with USER_.  Here's the list of them:
-
-  USER_CCFLAGS		 - Used to give additional qualifiers to the
-			   compiler.  It can't be used to define macros
-			   since the scripts will do such things as well.
-			   To do such things, use USER_CCDEFS.
-  USER_CCDEFS		 - Used to define macros on the command line.  The
-			   value of this symbol will be inserted inside a
-			   /DEFINE=(...).
-  USER_CCDISABLEWARNINGS - Used to disable some warnings.  The value is
-			   inserted inside a /DISABLE=WARNING=(...).
-
-So, to maintain backward compatibility with older VMS versions, do the
-following before you start compiling:
-
-  $ USER_CCDEFS := _VMS_V6_SOURCE=1,__VMS_VER=60000000,__CRTL_VER=60000000
-  $ USER_CCDISABLEWARNINGS := PREOPTW
-
-The USER_CCDISABLEWARNINGS is there because otherwise, DEC C will complain
-that those macros have been changed.
-
-Note: Currently, this is only useful for library compilation.  The
-      programs will still be linked with the current version of the
-      C library shareable image, and will thus complain if they are
-      faced with an older version of the same C library shareable image.
-      This will probably be fixed in a future revision of OpenSSL.
-
-
-Possible bugs or quirks:
-========================
-
-I'm not perfectly sure all the programs will use the SSLCERTS:
-directory by default, it may very well be that you have to give them
-extra arguments.  Please experiment.
-
-
-TODO:
-=====
-
-There are a few things that need to be worked out in the VMS version of
-OpenSSL, still:
-
-- Description files. ("Makefile's" :-))
-- Script code to link an already compiled build tree.
-- A VMSINSTALlable version (way in the future, unless someone else hacks).
-- shareable images (DLL for you Windows folks).
-
-There may be other things that I have missed and that may be desirable.
-Please send mail to <openssl-users at openssl.org> or to me directly if you
-have any ideas.
-
---
-Richard Levitte <richard at levitte.org>
-2000-02-27, 2011-03-18
diff --git a/Makefile.in b/Makefile.in
index 44362d0..8083a54 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -372,6 +372,23 @@ do_$(SHLIB_TARGET):
 			LIBDEPS="$$libs $(EX_LIBS)" \
 			link_a.$(SHLIB_TARGET); \
 		libs="-l$$i $$libs"; \
+		case "$(PLATFORM)" in \
+		Cygwin*) \
+			rm -f apps/cyg$$i-$(SHLIB_MAJOR).$(SHLIB_MINOR).dll; \
+			rm -f test/cyg$$i-$(SHLIB_MAJOR).$(SHLIB_MINOR).dll; \
+			cp cyg$$i-$(SHLIB_MAJOR).$(SHLIB_MINOR).dll apps/; \
+			cp cyg$$i-$(SHLIB_MAJOR).$(SHLIB_MINOR).dll test/; \
+			;; \
+		mingw*) \
+			case $$i in \
+				crypto) i=libeay32;; \
+				ssl) i=ssleay32;; \
+			esac; \
+			rm -f apps/$$i.dll; \
+			rm -f test/$$i.dll; \
+			cp $$i.dll apps/; \
+			cp $$i.dll test/; \
+		esac; \
 	done
 
 libcrypto.pc: Makefile
diff --git a/Makefile.shared b/Makefile.shared
index af2dc8c..a474f16 100644
--- a/Makefile.shared
+++ b/Makefile.shared
@@ -310,12 +310,8 @@ link_a.cygwin:
 	ALLSYMSFLAGS='-Wl,--whole-archive'; \
 	NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
 	SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a $$extras"; \
-	[ -f apps/$$dll_name ] && rm apps/$$dll_name; \
-	[ -f test/$$dll_name ] && rm test/$$dll_name; \
 	$(LINK_SO_A) || exit 1; \
-	rm $$extras; \
-	cp -p $$dll_name apps/; \
-	cp -p $$dll_name test/
+	rm $$extras
 link_app.cygwin:
 	@if expr "$(CFLAGS)" : '.*OPENSSL_USE_APPLINK' > /dev/null; then \
 		LIBDEPS="$(SRCDIR)/crypto/applink.o $${LIBDEPS:-$(LIBDEPS)}"; \
diff --git a/NEWS b/NEWS
index b33af1c..2f91e2d 100644
--- a/NEWS
+++ b/NEWS
@@ -33,6 +33,7 @@
         directory location rather than --openssldir.  The latter becomes
         the directory for certs, private key and openssl.cnf exclusively.
       o Reworked BIO networking library, with full support for IPv6.
+      o New "unified" build system
 
   Major changes between OpenSSL 1.0.2e and OpenSSL 1.0.2f [28 Jan 2016]
 
diff --git a/README.PERL b/README.PERL
index 472b27e..f667d7f 100644
--- a/README.PERL
+++ b/README.PERL
@@ -37,6 +37,15 @@
  package that we know of is ActiveState Perl, available from
  http://www.activestate.com/ActivePerl.
 
+ Notes on Perl on VMS
+ --------------------
+
+ You will need to install Perl separately.  One way to do so is to
+ download the source from http://perl.org/, unpacking it, reading
+ README.vms and follow instructions.  Another way is to download a
+ .PCSI file from http://sourceforge.net/projects/vmsperlkit/files/
+ and install it using the POLYCENTER install tool.
+
  Notes on Perl modules we use
  ----------------------------
 
@@ -97,3 +106,12 @@
     seen the tests succeed!):
 
         $ cpan -f -i Text::Template
+
+    Note: on VMS, you must quote any argument that contains upper case
+    characters, so the lines above would be:
+
+        $ cpan -i "Text::Template"
+
+    and:
+
+        $ cpan -f -i "Text::Template"
diff --git a/VMS/TODO b/VMS/TODO
deleted file mode 100644
index 359e069..0000000
--- a/VMS/TODO
+++ /dev/null
@@ -1,18 +0,0 @@
-TODO:
-=====
-
-There are a few things that need to be worked out in the VMS version of
-OpenSSL, still:
-
-- Description files. ("Makefile's" :-))
-- Script code to link an already compiled build tree.
-- A VMSINSTALlable version (way in the future, unless someone else hacks).
-- shareable images (DLL for you Windows folks).
-
-There may be other things that I have missed and that may be desirable.
-Please send mail to <openssl-users at openssl.org> or to me directly if you
-have any ideas.
-
---
-Richard Levitte <richard at levitte.org>
-1999-05-24
diff --git a/VMS/WISHLIST.TXT b/VMS/WISHLIST.TXT
deleted file mode 100644
index c151fc8..0000000
--- a/VMS/WISHLIST.TXT
+++ /dev/null
@@ -1,4 +0,0 @@
-* Have the building procedure contain a LINK-only possibility.
-  Wished by Mark Daniel <mark.daniel at dsto.defence.gov.au>
-
-  One way to enable that is also to go over to DESCRIP.MMS files.
diff --git a/engines/alpha.opt b/VMS/engine.opt
similarity index 74%
rename from engines/alpha.opt
rename to VMS/engine.opt
index 1dc71bf..1c73c80 100644
--- a/engines/alpha.opt
+++ b/VMS/engine.opt
@@ -1 +1,2 @@
+CASE_SENSITIVE=YES
 SYMBOL_VECTOR=(bind_engine=PROCEDURE,v_check=PROCEDURE)
diff --git a/VMS/install-vms.com b/VMS/install-vms.com
deleted file mode 100755
index 7da8b21..0000000
--- a/VMS/install-vms.com
+++ /dev/null
@@ -1,67 +0,0 @@
-$! install-vms.com -- Installs the files in a given directory tree
-$!
-$! Author: Richard Levitte <richard at levitte.org>
-$! Time of creation: 23-MAY-1998 19:22
-$!
-$! P1	root of the directory tree
-$!
-$!
-$! Announce/identify.
-$!
-$ proc = f$environment( "procedure")
-$ write sys$output "@@@ "+ -
-   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
-$!
-$ on error then goto tidy
-$ on control_c then goto tidy
-$!
-$ if p1 .eqs. ""
-$ then
-$   write sys$output "First argument missing."
-$   write sys$output -
-     "Should be the directory where you want things installed."
-$   exit
-$ endif
-$
-$ if (f$getsyi( "cpu") .lt. 128)
-$ then
-$   arch = "VAX"
-$ else
-$   arch = f$edit( f$getsyi( "arch_name"), "upcase")
-$   if (arch .eqs. "") then arch = "UNK"
-$ endif
-$
-$ root = f$parse( P1, "[]A.;0", , , "SYNTAX_ONLY, NO_CONCEAL")- "A.;0"
-$ root_dev = f$parse( root, , , "device", "syntax_only")
-$ root_dir = f$parse( root, , , "directory", "syntax_only") - -
-   "[000000." - "][" - "[" - "]"
-$ root = root_dev + "[" + root_dir
-$
-$ define /nolog wrk_sslroot 'root'.] /translation_attributes = concealed
-$ define /nolog wrk_sslinclude wrk_sslroot:[include]
-$
-$ if f$parse( "wrk_sslroot:[000000]") .eqs. "" then -
-   create /directory /log wrk_sslroot:[000000]
-$ if f$parse( "wrk_sslinclude:") .eqs. "" then -
-   create /directory /log wrk_sslinclude:
-$ if f$parse( "wrk_sslroot:[vms]") .eqs. "" then -
-   create /directory /log wrk_sslroot:[vms]
-$!
-$ copy /log /protection = world:re openssl_startup.com wrk_sslroot:[vms]
-$ copy /log /protection = world:re openssl_undo.com wrk_sslroot:[vms]
-$ copy /log /protection = world:re openssl_utils.com wrk_sslroot:[vms]
-$!
-$ tidy:
-$!
-$ call deass wrk_sslroot
-$ call deass wrk_sslinclude
-$!
-$ exit
-$!
-$ deass: subroutine
-$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
-$ then
-$   deassign /process 'p1'
-$ endif
-$ endsubroutine
-$!
diff --git a/VMS/multinet_shr.opt b/VMS/multinet_shr.opt
deleted file mode 100644
index 610f42d..0000000
--- a/VMS/multinet_shr.opt
+++ /dev/null
@@ -1 +0,0 @@
-multinet:multinet_socket_library.exe/share
diff --git a/VMS/openssl_shutdown.com.in b/VMS/openssl_shutdown.com.in
new file mode 100644
index 0000000..85cc26d
--- /dev/null
+++ b/VMS/openssl_shutdown.com.in
@@ -0,0 +1,59 @@
+$	! OpenSSL shutdown script
+$	!
+$	! This script deassigns the logical names used by the installation
+$	! of OpenSSL.  It can do so at any level, defined by P1.
+$	!
+$	! P1	Qualifier(s) for DEASSIGN.
+$	!	Default: /PROCESS
+$	!
+$	! P2	If the value is "NOALIASES", no alias logical names are
+$	!	deassigned.
+$
+$	status = %x10000001	! Generic success
+$
+$	! In case there's a problem
+$	ON CONTROL_Y THEN GOTO bailout
+$	ON ERROR THEN GOTO bailout
+$
+$	! Find the architecture
+$	IF F$GETSYI("CPU") .LT. 128
+$	THEN
+$	    arch := VAX
+$	ELSE
+$	    arch := F$EDIT(F$GETSYI("ARCH_NAME"),"UPCASE")
+$	    IF arch .EQS. "" THEN GOTO unknown_arch
+$	ENDIF
+$
+$	! Generated information
+$	VERSION := {- $config{version} -}
+$	INSTALLTOP := {- $config{INSTALLTOP} -}
+$	POINTER_SIZE = {- $config{pointersize} -}
+$
+$	! Abbrevs
+$	DEAS := DEASSIGN /NOLOG 'P1'
+$	v    =  VERSION - "." - "."
+$
+$	DEAS OSSL$ROOT'v'
+$	DEAS OSSL$INCLUDE'v'
+$	DEAS OSSL$LIB'v'
+$	DEAS OSSL$SHARE'v'
+$	DEAS OSSL$ENGINES'v'
+$	DEAS OSSL$EXE'v'
+$       {- output_off() if $config{no_shared} -}
+$       {- join("\n\$       ", map { "DEAS $_'v'" } map { $unified_info{sharednames}->{$_} || () } @{$unified_info{libraries}}) -}
+$       {- output_on() -}
+$	IF P2 .NES. "NOALIASES"
+$	THEN
+$	    DEAS OSSL$ROOT
+$	    DEAS OSSL$INCLUDE
+$	    DEAS OSSL$LIB
+$	    DEAS OSSL$SHARE
+$	    DEAS OSSL$ENGINES
+$	    DEAS OSSL$EXE
+$	    DEAS OPENSSL
+$           {- output_off() if $config{no_shared} -}
+$           {- join("\n\$           ", map { "DEAS $_" } map { $unified_info{sharednames}->{$_} || () } @{$unified_info{libraries}}) -}
+$           {- output_on() -}
+$	ENDIF
+$
+$	EXIT 'status'
diff --git a/VMS/openssl_startup.com b/VMS/openssl_startup.com
deleted file mode 100755
index 04bbbde..0000000
--- a/VMS/openssl_startup.com
+++ /dev/null
@@ -1,108 +0,0 @@
-$!
-$! Startup file for OpenSSL 1.x.
-$!
-$! 2011-03-05 SMS.
-$!
-$! This procedure must reside in the OpenSSL installation directory.
-$! It will fail if it is copied to a different location.
-$!
-$! P1  qualifier(s) for DEFINE.  For example, "/SYSTEM" to get the
-$!     logical names defined in the system logical name table.
-$!
-$! P2  "64", to use executables which were built with 64-bit pointers.
-$!
-$! Good (default) and bad status values.
-$!
-$ status =    %x00010001 ! RMS$_NORMAL, normal successful completion.
-$ rms_e_fnf = %x00018292 ! RMS$_FNF, file not found.
-$!
-$! Prepare for problems.
-$!
-$ orig_dev_dir = f$environment( "DEFAULT")
-$ on control_y then goto clean_up
-$ on error then goto clean_up
-$!
-$! Determine hardware architecture.
-$!
-$ if (f$getsyi( "cpu") .lt. 128)
-$ then
-$   arch_name = "VAX"
-$ else
-$   arch_name = f$edit( f$getsyi( "arch_name"), "upcase")
-$   if (arch_name .eqs. "") then arch_name = "UNK"
-$ endif
-$!
-$ if (p2 .eqs. "64")
-$ then
-$   arch_name_exe = arch_name+ "_64"
-$ else
-$   arch_name_exe = arch_name
-$ endif
-$!
-$! Derive the OpenSSL installation device:[directory] from the location
-$! of this command procedure.
-$!
-$ proc = f$environment( "procedure")
-$ proc_dev_dir = f$parse( "A.;", proc, , , "no_conceal") - "A.;"
-$ proc_dev = f$parse( proc_dev_dir, , , "device", "syntax_only")
-$ proc_dir = f$parse( proc_dev_dir, , , "directory", "syntax_only") - -
-   ".][000000"- "[000000."- "]["- "["- "]"
-$ proc_dev_dir = proc_dev+ "["+ proc_dir+ "]"
-$ set default 'proc_dev_dir'
-$ set default [-]
-$ ossl_dev_dir = f$environment( "default")
-$!
-$! Check existence of expected directories (to see if this procedure has
-$! been moved away from its proper place).
-$!
-$ if ((f$search( "certs.dir;1") .eqs. "") .or. -
-   (f$search( "include.dir;1") .eqs. "") .or. -
-   (f$search( "private.dir;1") .eqs. "") .or. -
-   (f$search( "vms.dir;1") .eqs. ""))
-$ then
-$    write sys$output -
-      "   Can't find expected common OpenSSL directories in:"
-$    write sys$output "   ''ossl_dev_dir'"
-$    status = rms_e_fnf
-$    goto clean_up
-$ endif
-$!
-$ if ((f$search( "''arch_name_exe'_exe.dir;1") .eqs. "") .or. -
-   (f$search( "''arch_name'_lib.dir;1") .eqs. ""))
-$ then
-$    write sys$output -
-      "   Can't find expected architecture-specific OpenSSL directories in:"
-$    write sys$output "   ''ossl_dev_dir'"
-$    status = rms_e_fnf
-$    goto clean_up
-$ endif
-$!
-$! All seems well (enough).  Define the OpenSSL logical names.
-$!
-$ ossl_root = ossl_dev_dir- "]"+ ".]"
-$ define /translation_attributes = concealed /nolog'p1 SSLROOT 'ossl_root'
-$ define /nolog 'p1' SSLCERTS     sslroot:[certs]
-$ define /nolog 'p1' SSLINCLUDE   sslroot:[include]
-$ define /nolog 'p1' SSLPRIVATE   sslroot:[private]
-$ define /nolog 'p1' SSLEXE       sslroot:['arch_name_exe'_exe]
-$ define /nolog 'p1' SSLLIB       sslroot:['arch_name'_lib]
-$!
-$! Defining OPENSSL lets a C program use "#include <openssl/{foo}.h>":
-$ define /nolog 'p1' OPENSSL      SSLINCLUDE:
-$!
-$! Run a site-specific procedure, if it exists.
-$!
-$ if f$search( "sslroot:[vms]openssl_systartup.com") .nes."" then -
-   @ sslroot:[vms]openssl_systartup.com
-$!
-$! Restore the original default dev:[dir] (if known).
-$!
-$ clean_up:
-$!
-$ if (f$type( orig_dev_dir) .nes. "")
-$ then
-$    set default 'orig_dev_dir'
-$ endif
-$!
-$ EXIT 'status'
-$!
diff --git a/VMS/openssl_startup.com.in b/VMS/openssl_startup.com.in
new file mode 100644
index 0000000..a968b44
--- /dev/null
+++ b/VMS/openssl_startup.com.in
@@ -0,0 +1,115 @@
+$	! OpenSSL startup script
+$	!
+$	! This script defines the logical names used by the installation
+$	! of OpenSSL.  It can provide those logical names at any level,
+$	! defined by P1.
+$	!
+$	! The logical names created are:
+$	!
+$	!	OSSL$ROOTnnn	Installation root
+$	!	OSSL$EXEnnn	Where the executables are located
+$	!	OSSL$LIBnnn	Where the library files are located
+$	!	OSSL$SHAREnnn	Where the sahreable images are located
+$	!	OSSL$INCLUDEnnn	Include directory root
+$	!	OSSL$ENGINESnnn	Where the sahreable images are located
+$	!
+$	! In all these, nnn is the OpenSSL version number.  This allows
+$	! several OpenSSL versions to be installed simultaneously.
+$	!
+$	! In addition, unless P2 is "NOALIASES", these logical names are
+$	! created:
+$	!
+$	!	OSSL$ROOT	Alias for OSSL$ROOTnnn
+$	!	OSSL$EXE	Alias for OSSL$EXEnnn
+$	!	OSSL$LIB	Alias for OSSL$LIBnnn
+$	!	OSSL$SHARE	Alias for OSSL$SHAREnnn
+$	!	OSSL$INCLUDE	Alias for OSSL$INCLUDEnnn
+$	!	OPENSSL		is OSSL$INCLUDE:[OPENSSL]
+$	!	OSSL$ENGINES	Alias for OSSL$ENGINESnnn
+$	!
+$	! P1	Qualifier(s) for DEFINE.  "/SYSTEM" would be typical when
+$	!	calling this script from SYS$STARTUP:SYSTARTUP_VMS.COM,
+$	!	while "/PROCESS" would be typical for a personal install.
+$	!	Default: /PROCESS
+$	!
+$	! P2	If the value is "NOALIASES", no alias logical names are
+$	!	created.
+$
+$	status = %x10000001	! Generic success
+$
+$	! In case there's a problem
+$	ON CONTROL_Y THEN GOTO bailout
+$	ON ERROR THEN GOTO bailout
+$
+$	! Find the architecture
+$	IF F$GETSYI("CPU") .LT. 128
+$	THEN
+$	    arch := VAX
+$	ELSE
+$	    arch := F$EDIT(F$GETSYI("ARCH_NAME"),"UPCASE")
+$	    IF arch .EQS. "" THEN GOTO unknown_arch
+$	ENDIF
+$
+$	! Generated information
+$	VERSION := {- $config{version} -}
+$	INSTALLTOP := {- $config{INSTALLTOP} -}
+$	OPENSSLDIR := {- $config{OPENSSLDIR} -}
+$	POINTER_SIZE = {- $config{pointersize} -}
+$
+$	! Make sure that INSTALLTOP and OPENSSLDIR become something one
+$	! can build concealed logical names on
+$	INSTALLTOP_ = F$PARSE("A.;",INSTALLTOP,,,"NO_CONCEAL") - "A.;" -
+		     - ".][000000" - "[000000." - "][" - "]" + ".]"
+$	OPENSSLDIR_ = F$PARSE("A.;",OPENSSLDIR,,,"NO_CONCEAL") - "A.;" -
+		     - ".][000000" - "[000000." - "][" - "]" + ".]"
+$	DEFINE /TRANSLATION=CONCEALED /NOLOG WRK_INSTALLTOP 'INSTALLTOP_'
+$
+$	! Check that things are in place, and specifically, the stuff
+$	! belonging to this architecture
+$	IF F$SEARCH("WRK_INSTALLTOP:[000000]INCLUDE.DIR;1") .EQS. "" -
+	   .OR. F$SEARCH("WRK_INSTALLTOP:[000000]''arch'.DIR;1") .EQS. "" -
+	   .OR. F$SEARCH("WRK_INSTALLTOP:[''arch']LIB.DIR;1") .EQS. "" -
+	   .OR. F$SEARCH("WRK_INSTALLTOP:[''arch']EXE.DIR;1") .EQS. "" -
+	   .OR. F$SEARCH("WRK_INSTALLTOP:[000000]openssl.cnf;1") .EQS. ""
+$	THEN
+$	    WRITE SYS$ERROR "''INSTALLTOP' doesn't look like an OpenSSL installation for ''arch'"
+$	    status = %x00018292 ! RMS$_FNF, file not found
+$	    GOTO bailout
+$	ENDIF
+$
+$	! Abbrevs
+$	DEFT := DEFINE /TRANSLATION=CONCEALED /NOLOG 'P1'
+$	DEF  := DEFINE /NOLOG 'P1'
+$	v    =  VERSION - "." - "."
+$
+$	DEFT OSSL$INSTROOT'v'	'INSTALLTOP_'
+$	DEFT OSSL$INCLUDE'v'	OSSL$INSTROOT:[INCLUDE.]
+$	DEF  OSSL$LIB'v'	OSSL$INSTROOT:['arch'.LIB]
+$	DEF  OSSL$SHARE'v'	OSSL$INSTROOT:['arch'.LIB]
+$	DEF  OSSL$ENGINES'v'	OSSL$INSTROOT:['arch'.ENGINES]
+$	DEF  OSSL$EXE'v'	OSSL$INSTROOT:['arch'.EXE]
+$       {- output_off() if $config{no_shared} -}
+$       {- join("\n\$       ", map { "DEF  $_'v' OSSL\$SHARE:$_" } map { $unified_info{sharednames}->{$_} || () } @{$unified_info{libraries}}) -}
+$       {- output_on() -}
+$	IF P2 .NES. "NOALIASES"
+$	THEN
+$	    DEF OSSL$INSTROOT	OSSL$INSTROOT'v'
+$	    DEF OSSL$INCLUDE	OSSL$INCLUDE'v'
+$	    DEF OSSL$LIB	OSSL$LIB'v'
+$	    DEF OSSL$SHARE	OSSL$SHARE'v'
+$	    DEF OSSL$ENGINES	OSSL$ENGINES'v'
+$	    DEF OSSL$EXE	OSSL$EXE'v'
+$	    DEF OPENSSL		OSSL$INCLUDE:[OPENSSL]
+$       {- output_off() if $config{no_shared} -}
+$       {- join("\n\$           ", map { "DEF  $_ $_'v'" } map { $unified_info{sharednames}->{$_} || () } @{$unified_info{libraries}}) -}
+$       {- output_on() -}
+$	ENDIF
+$
+$	DEFT OSSL$DATAROOT	'OPENSSLDIR_'
+$	DEF  OSSL$CERTS		OSSL$DATAROOT:[CERTS]
+$	DEF  OSSL$PRIVATE	OSSL$DATAROOT:[PRIVATE]
+$
+$ bailout:
+$	DEASSIGN WRK_INSTALLTOP
+$
+$	EXIT 'status'
diff --git a/VMS/openssl_undo.com b/VMS/openssl_undo.com
deleted file mode 100755
index d1623a3..0000000
--- a/VMS/openssl_undo.com
+++ /dev/null
@@ -1,20 +0,0 @@
-$!
-$! Deassign OpenSSL logical names.
-$!
-$ call deass "OPENSSL" "''p1'"
-$ call deass "SSLCERTS" "''p1'"
-$ call deass "SSLEXE" "''p1'"
-$ call deass "SSLINCLUDE" "''p1'"
-$ call deass "SSLLIB" "''p1'"
-$ call deass "SSLPRIVATE" "''p1'"
-$ call deass "SSLROOT" "''p1'"
-$!
-$ exit
-$!
-$deass: subroutine
-$ if (f$trnlnm( p1) .nes. "")
-$ then
-$    deassign 'p2' 'p1'
-$ endif
-$ endsubroutine
-$!
diff --git a/VMS/openssl_utils.com b/VMS/openssl_utils.com
index 64f4915..b9dea72 100644
--- a/VMS/openssl_utils.com
+++ b/VMS/openssl_utils.com
@@ -1,46 +1,12 @@
-$!
-$!  APPS.COM
-$!  Written By:  Robert Byer
-$!               Vice-President
-$!               A-Com Computing, Inc.
-$!               byer at mail.all-net.net
-$!
-$!
-$! Slightly modified by Richard Levitte <richard at levitte.org>
-$!
-$!
-$! Always define OPENSSL.  Others are optional (non-null P1).
-$!
-$ OPENSSL  :== $SSLEXE:OPENSSL
+$	! OpenSSL utilities
+$	!
 $
-$ IF (P1 .NES. "")
-$ THEN
-$     VERIFY   :== $SSLEXE:OPENSSL VERIFY
-$     ASN1PARSE:== $SSLEXE:OPENSSL ASN1PARS
-$! REQ could conflict with REQUEST.
-$     OREQ     :== $SSLEXE:OPENSSL REQ
-$     DGST     :== $SSLEXE:OPENSSL DGST
-$     DH       :== $SSLEXE:OPENSSL DH
-$     ENC      :== $SSLEXE:OPENSSL ENC
-$     GENDH    :== $SSLEXE:OPENSSL GENDH
-$     ERRSTR   :== $SSLEXE:OPENSSL ERRSTR
-$     CA       :== $SSLEXE:OPENSSL CA
-$     CRL      :== $SSLEXE:OPENSSL CRL
-$     RSA      :== $SSLEXE:OPENSSL RSA
-$     DSA      :== $SSLEXE:OPENSSL DSA
-$     DSAPARAM :== $SSLEXE:OPENSSL DSAPARAM
-$     X509     :== $SSLEXE:OPENSSL X509
-$     GENRSA   :== $SSLEXE:OPENSSL GENRSA
-$     GENDSA   :== $SSLEXE:OPENSSL GENDSA
-$     S_SERVER :== $SSLEXE:OPENSSL S_SERVER
-$     S_CLIENT :== $SSLEXE:OPENSSL S_CLIENT
-$     SPEED    :== $SSLEXE:OPENSSL SPEED
-$     S_TIME   :== $SSLEXE:OPENSSL S_TIME
-$     VERSION  :== $SSLEXE:OPENSSL VERSION
-$     PKCS7    :== $SSLEXE:OPENSSL PKCS7
-$     CRL2PKCS7:== $SSLEXE:OPENSSL CRL2P7
-$     SESS_ID  :== $SSLEXE:OPENSSL SESS_ID
-$     CIPHERS  :== $SSLEXE:OPENSSL CIPHERS
-$     NSEQ     :== $SSLEXE:OPENSSL NSEQ
-$     PKCS12   :== $SSLEXE:OPENSSL PKCS12
-$ ENDIF
+$	OPENSSL		:== $OSSL$EXE:OPENSSL
+$
+$	IF F$SYMBOL(PERL) .EQS. "STRING"
+$	THEN
+$	    OSSLCA	:== 'PERL' OSSL$EXE:CA.pl
+$	    OSSLREHASH	:== 'PERL' OSSL$EXE:c_rehash.pl
+$	ELSE
+$	    WRITE SYS$ERROR "NOTE: no perl => no OSSLCA or OSSLREHASH"
+$	ENDIF
diff --git a/VMS/socketshr_shr.opt b/VMS/socketshr_shr.opt
deleted file mode 100644
index f6e3131..0000000
--- a/VMS/socketshr_shr.opt
+++ /dev/null
@@ -1 +0,0 @@
-socketshr/share
diff --git a/VMS/tcpip_shr_decc.opt b/VMS/tcpip_shr_decc.opt
deleted file mode 100644
index 33b159e..0000000
--- a/VMS/tcpip_shr_decc.opt
+++ /dev/null
@@ -1 +0,0 @@
-sys$share:tcpip$ipc_shr.exe/share
diff --git a/VMS/translatesyms.pl b/VMS/translatesyms.pl
new file mode 100644
index 0000000..8ffdbd8
--- /dev/null
+++ b/VMS/translatesyms.pl
@@ -0,0 +1,55 @@
+#! /usr/bin/perl
+
+# This script will translate any SYMBOL_VECTOR item that has a translation
+# in CXX$DEMANGLER_DB.  The latter is generated by and CC/DECC command that
+# uses the qualifier /REPOSITORY with the build directory as value.  When
+# /NAMES=SHORTENED has been used, this file will hold the translations from
+# the original symbols to the shortened variants.
+#
+# CXX$DEMAGLER_DB. is an ISAM file, but with the magic of RMS, it can be
+# read as a text file, with each record as one line.
+#
+# The lines will have the following syntax for any symbol found that's longer
+# than 31 characters:
+#
+# LONG_symbol_34567890123{cksum}$LONG_symbol_34567890123_more_than_31_chars
+#
+# $ is present at the end of the shortened symbol name, and is preceded by a
+# 7 character checksum.  The $ makes it easy to separate the shortened name
+# from the original one.
+
+use strict;
+use warnings;
+
+usage() if scalar @ARGV < 1;
+
+my %translations = ();
+
+open DEMANGLER_DATA, $ARGV[0]
+    or die "Couldn't open $ARGV[0]: $!\n";
+while(<DEMANGLER_DATA>) {
+    chomp;
+    (my $translated, my $original) = split /\$/;
+    $translations{$original} = $translated.'$';
+}
+close DEMANGLER_DATA;
+
+$| = 1;                         # Autoflush
+while(<STDIN>) {
+    s@
+      ((?:[A-Za-z0-9_]+)\/)?([A-Za-z0-9_]+)=(PROCEDURE|DATA)
+     @
+      if (defined($translations{$2})) {
+          my $trans = $translations{$2};
+          my $trans_uc = uc $trans;
+          if (defined($1) && $trans ne $trans_uc) {
+              "$trans_uc/$trans=$3"
+          } else {
+              "$trans=$3"
+          }
+      } else {
+          $&
+      }
+     @gxe;
+    print $_;
+}
diff --git a/VMS/ucx_shr_decc.opt b/VMS/ucx_shr_decc.opt
deleted file mode 100644
index 28d84f4..0000000
--- a/VMS/ucx_shr_decc.opt
+++ /dev/null
@@ -1 +0,0 @@
-sys$share:ucx$ipc_shr.exe/share
diff --git a/VMS/ucx_shr_decc_log.opt b/VMS/ucx_shr_decc_log.opt
deleted file mode 100644
index c9d9a96..0000000
--- a/VMS/ucx_shr_decc_log.opt
+++ /dev/null
@@ -1 +0,0 @@
-ucx$ipc_shr/share
diff --git a/VMS/ucx_shr_vaxc.opt b/VMS/ucx_shr_vaxc.opt
deleted file mode 100644
index 86bfaf0..0000000
--- a/VMS/ucx_shr_vaxc.opt
+++ /dev/null
@@ -1 +0,0 @@
-sys$library:ucx$ipc.olb/library
diff --git a/apps/CA.com b/apps/CA.com
deleted file mode 100644
index 95925d3..0000000
--- a/apps/CA.com
+++ /dev/null
@@ -1,221 +0,0 @@
-$! CA - wrapper around ca to make it easier to use ... basically ca requires
-$!      some setup stuff to be done before you can use it and this makes
-$!      things easier between now and when Eric is convinced to fix it :-)
-$!
-$! CA -newca ... will setup the right stuff
-$! CA -newreq ... will generate a certificate request 
-$! CA -sign ... will sign the generated request and output 
-$!
-$! At the end of that grab newreq.pem and newcert.pem (one has the key 
-$! and the other the certificate) and cat them together and that is what
-$! you want/need ... I'll make even this a little cleaner later.
-$!
-$! default openssl.cnf file has setup as per the following
-$! demoCA ... where everything is stored
-$
-$ IF F$TYPE(OPENSSL_CONFIG) .EQS. "" THEN OPENSSL_CONFIG := SSLLIB:OPENSSL.CNF
-$
-$ DAYS   = "-days 365"
-$ REQ    = openssl + " req " + OPENSSL_CONFIG
-$ CA     = openssl + " ca " + OPENSSL_CONFIG
-$ VERIFY = openssl + " verify"
-$ X509   = openssl + " x509"
-$ PKCS12 = openssl + " pkcs12"
-$ echo   = "write sys$Output"
-$ RET = 1
-$!
-$! 2010-12-20 SMS.
-$! Use a concealed logical name to reduce command line lengths, to
-$! avoid DCL errors on VAX:
-$!     %DCL-W-TKNOVF, command element is too long - shorten
-$! (Path segments like "openssl-1_0_1-stable-SNAP-20101217" accumulate
-$! quickly.)
-$!
-$ CATOP = F$PARSE( F$ENVIRONMENT( "DEFAULT"), "[]")- "].;"+ ".demoCA.]"
-$ define /translation_attributes = concealed CATOP 'CATOP'
-$!
-$ on error then goto clean_up
-$ on control_y then goto clean_up
-$!
-$ CAKEY  = "CATOP:[private]cakey.pem"
-$ CACERT = "CATOP:[000000]cacert.pem"
-$
-$ __INPUT := SYS$COMMAND
-$!
-$ i = 1
-$opt_loop:
-$ if i .gt. 8 then goto opt_loop_end
-$
-$ prog_opt = F$EDIT(P'i',"lowercase")
-$
-$ IF (prog_opt .EQS. "?" .OR. prog_opt .EQS. "-h" .OR. prog_opt .EQS. "-help") 
-$ THEN
-$   echo "usage: CA -newcert|-newreq|-newca|-sign|-verify" 
-$   goto clean_up
-$ ENDIF
-$!
-$ IF (prog_opt .EQS. "-input")
-$ THEN
-$   ! Get input from somewhere other than SYS$COMMAND
-$   i = i + 1
-$   __INPUT = P'i'
-$   GOTO opt_loop_continue
-$ ENDIF
-$!
-$ IF (prog_opt .EQS. "-newcert")
-$ THEN
-$   ! Create a certificate.
-$   DEFINE /USER_MODE SYS$INPUT '__INPUT'
-$   REQ -new -x509 -keyout newreq.pem -out newreq.pem 'DAYS'
-$   RET=$STATUS
-$   echo "Certificate (and private key) is in newreq.pem"
-$   GOTO opt_loop_continue
-$ ENDIF
-$!
-$ IF (prog_opt .EQS. "-newreq")
-$ THEN
-$   ! Create a certificate request
-$   DEFINE /USER_MODE SYS$INPUT '__INPUT'
-$   REQ -new -keyout newreq.pem -out newreq.pem 'DAYS'
-$   RET=$STATUS
-$   echo "Request (and private key) is in newreq.pem"
-$   GOTO opt_loop_continue
-$ ENDIF
-$!
-$ IF (prog_opt .EQS. "-newca")
-$ THEN
-$   ! If explicitly asked for or it doesn't exist then setup the directory
-$   ! structure that Eric likes to manage things.
-$   IF F$SEARCH( "CATOP:[000000]serial.") .EQS. ""
-$   THEN
-$     CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[000000]
-$     CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[certs]
-$     CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[crl]
-$     CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[newcerts]
-$     CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[private]
-$
-$     OPEN /WRITE ser_file CATOP:[000000]serial. 
-$     WRITE ser_file "01"
-$     CLOSE ser_file
-$     APPEND /NEW_VERSION NL: CATOP:[000000]index.txt
-$
-$     ! The following is to make sure access() doesn't get confused.  It
-$     ! really needs one file in the directory to give correct answers...
-$     COPY NLA0: CATOP:[certs].;
-$     COPY NLA0: CATOP:[crl].;
-$     COPY NLA0: CATOP:[newcerts].;
-$     COPY NLA0: CATOP:[private].;
-$   ENDIF
-$!
-$   IF F$SEARCH( CAKEY) .EQS. ""
-$   THEN
-$     READ '__INPUT' FILE -
-       /PROMPT="CA certificate filename (or enter to create): "
-$     IF (FILE .NES. "") .AND. (F$SEARCH(FILE) .NES. "")
-$     THEN
-$       COPY 'FILE' 'CAKEY'
-$       RET=$STATUS
-$     ELSE
-$       echo "Making CA certificate ..."
-$       DEFINE /USER_MODE SYS$INPUT '__INPUT'
-$       REQ -new -x509 -keyout 'CAKEY' -out 'CACERT' 'DAYS'
-$       RET=$STATUS
-$     ENDIF
-$   ENDIF
-$   GOTO opt_loop_continue
-$ ENDIF
-$!
-$ IF (prog_opt .EQS. "-pkcs12")
-$ THEN
-$   i = i + 1
-$   cname = P'i'
-$   IF cname .EQS. "" THEN cname = "My certificate"
-$   PKCS12 -in newcert.pem -inkey newreq.pem -certfile 'CACERT' -
-     -out newcert.p12 -export -name "''cname'"
-$   RET=$STATUS
-$   goto clean_up
-$ ENDIF
-$!
-$ IF (prog_opt .EQS. "-xsign")
-$ THEN
-$!
-$   DEFINE /USER_MODE SYS$INPUT '__INPUT'
-$   CA -policy policy_anything -infiles newreq.pem
-$   RET=$STATUS
-$   GOTO opt_loop_continue
-$ ENDIF
-$!
-$ IF ((prog_opt .EQS. "-sign") .OR. (prog_opt .EQS. "-signreq"))
-$ THEN
-$!   
-$   DEFINE /USER_MODE SYS$INPUT '__INPUT'
-$   CA -policy policy_anything -out newcert.pem -infiles newreq.pem
-$   RET=$STATUS
-$   type newcert.pem
-$   echo "Signed certificate is in newcert.pem"
-$   GOTO opt_loop_continue
-$ ENDIF
-$!
-$ IF (prog_opt .EQS. "-signcert")
-$  THEN
-$!   
-$   echo "Cert passphrase will be requested twice - bug?"
-$   DEFINE /USER_MODE SYS$INPUT '__INPUT'
-$   X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem
-$   DEFINE /USER_MODE SYS$INPUT '__INPUT'
-$   CA -policy policy_anything -out newcert.pem -infiles tmp.pem
-y
-y
-$   type newcert.pem
-$   echo "Signed certificate is in newcert.pem"
-$   GOTO opt_loop_continue
-$ ENDIF
-$!
-$ IF (prog_opt .EQS. "-verify")
-$ THEN
-$!   
-$   i = i + 1
-$   IF (p'i' .EQS. "")
-$   THEN
-$     DEFINE /USER_MODE SYS$INPUT '__INPUT'
-$     VERIFY "-CAfile" 'CACERT' newcert.pem
-$   ELSE
-$     j = i
-$    verify_opt_loop:
-$     IF j .GT. 8 THEN GOTO verify_opt_loop_end
-$     IF p'j' .NES. ""
-$     THEN 
-$       DEFINE /USER_MODE SYS$INPUT '__INPUT'
-$       __tmp = p'j'
-$       VERIFY "-CAfile" 'CACERT' '__tmp'
-$       tmp=$STATUS
-$       IF tmp .NE. 0 THEN RET=tmp
-$     ENDIF
-$     j = j + 1
-$     GOTO verify_opt_loop
-$    verify_opt_loop_end:
-$   ENDIF
-$   
-$   GOTO opt_loop_end
-$ ENDIF
-$!
-$ IF (prog_opt .NES. "")
-$ THEN
-$!   
-$   echo "Unknown argument ''prog_opt'"
-$   RET = 3
-$   goto clean_up
-$ ENDIF
-$
-$opt_loop_continue:
-$ i = i + 1
-$ GOTO opt_loop
-$
-$opt_loop_end:
-$!
-$clean_up:
-$!
-$ if f$trnlnm( "CATOP", "LNM$PROCESS") .nes. "" then -
-   deassign /process CATOP
-$!
-$ EXIT 'RET'
diff --git a/apps/build.info b/apps/build.info
index f365aee..173f1bc 100644
--- a/apps/build.info
+++ b/apps/build.info
@@ -9,9 +9,16 @@ SOURCE[openssl]=\
         s_client.c s_server.c s_time.c sess_id.c smime.c speed.c spkac.c \
         srp.c ts.c verify.c version.c x509.c rehash.c \
         apps.c opt.c s_cb.c s_socket.c \
-        app_rand.c
+        app_rand.c \
+        {- $target{apps_extra_src} -}
 INCLUDE[openssl]={- rel2abs(catdir($builddir,"../include")) -} .. ../include
 DEPEND[openssl]=../libssl
 
 SCRIPTS=CA.pl
 SOURCE[CA.pl]=CA.pl.in
+
+BEGINRAW[Makefile]
+{- $builddir -}/progs.h: {- $sourcedir -}/progs.pl {- $builddir -}/../Makefile
+	$(RM) {- $builddir -}/progs.h
+	$(PERL) {- $sourcedir -}/progs.pl $(COMMANDS) >{- $builddir -}/progs.h
+ENDRAW[Makefile]
diff --git a/apps/install-apps.com b/apps/install-apps.com
deleted file mode 100755
index 7a553aa..0000000
--- a/apps/install-apps.com
+++ /dev/null
@@ -1,107 +0,0 @@
-$! INSTALL.COM -- Installs the files in a given directory tree
-$!
-$! Author: Richard Levitte <richard at levitte.org>
-$! Time of creation: 22-MAY-1998 10:13
-$!
-$! P1  root of the directory tree
-$! P2  "64" for 64-bit pointers.
-$!
-$!
-$! Announce/identify.
-$!
-$ proc = f$environment( "procedure")
-$ write sys$output "@@@ "+ -
-   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
-$!
-$ on error then goto tidy
-$ on control_c then goto tidy
-$!
-$ if (p1 .eqs. "")
-$ then
-$   write sys$output "First argument missing."
-$   write sys$output -
-     "It should be the directory where you want things installed."
-$   exit
-$ endif
-$!
-$ if (f$getsyi("cpu") .lt. 128)
-$ then
-$   arch = "VAX"
-$ else
-$   arch = f$edit( f$getsyi( "arch_name"), "upcase")
-$   if (arch .eqs. "") then arch = "UNK"
-$ endif
-$!
-$ archd = arch
-$!
-$ if (p2 .nes. "")
-$ then
-$   if (p2 .eqs. "64")
-$   then
-$     archd = arch+ "_64"
-$   else
-$     if (p2 .nes. "32")
-$     then
-$       write sys$output "Second argument invalid."
-$       write sys$output "It should be "32", "64", or nothing."
-$       exit
-$     endif
-$   endif
-$ endif
-$!
-$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
-$ root_dev = f$parse(root,,,"device","syntax_only")
-$ root_dir = f$parse(root,,,"directory","syntax_only") - -
-   "[000000." - "][" - "[" - "]"
-$ root = root_dev + "[" + root_dir
-$!
-$ define /nolog wrk_sslroot 'root'.] /trans=conc
-$ define /nolog wrk_sslxexe wrk_sslroot:['archd'_exe]
-$!
-$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
-   create /directory /log wrk_sslroot:[000000]
-$ if f$parse("wrk_sslxexe:") .eqs. "" then -
-   create /directory /log wrk_sslxexe:
-$!
-$ exe := openssl
-$!
-$ exe_dir := [-.'archd'.exe.apps]
-$!
-$! Executables.
-$!
-$ i = 0
-$ loop_exe:
-$   e = f$edit(f$element( i, ",", exe), "trim")
-$   i = i + 1
-$   if e .eqs. "," then goto loop_exe_end
-$   set noon
-$   file = exe_dir+ e+ ".exe"
-$   if f$search( file) .nes. ""
-$   then
-$     copy /protection = w:re 'file' wrk_sslxexe: /log
-$   endif
-$   set on
-$ goto loop_exe
-$ loop_exe_end:
-$!
-$! Miscellaneous.
-$!
-$ set noon
-$ copy /protection = w:re ca.com wrk_sslxexe:ca.com /log
-$ copy /protection = w:re openssl-vms.cnf wrk_sslroot:[000000]openssl.cnf /log
-$ set on
-$!
-$ tidy:
-$!
-$ call deass wrk_sslroot
-$ call deass wrk_sslxexe
-$!
-$ exit
-$!
-$ deass: subroutine
-$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
-$ then
-$   deassign /process 'p1'
-$ endif
-$ endsubroutine
-$!
diff --git a/apps/makeapps.com b/apps/makeapps.com
deleted file mode 100644
index 2724cc6..0000000
--- a/apps/makeapps.com
+++ /dev/null
@@ -1,1169 +0,0 @@
-$!
-$!  MAKEAPPS.COM
-$!  Written By:  Robert Byer
-$!               Vice-President
-$!               A-Com Computing, Inc.
-$!               byer at mail.all-net.net
-$!
-$!  Changes by Richard Levitte <richard at levitte.org>
-$!             Zoltan Arpadffy <zoli at polarhome.com>   
-$!
-$!  This command files compiles and creates all the various different
-$!  "application" programs for the different types of encryption for OpenSSL.
-$!  The EXE's are placed in the directory [.xxx.EXE.APPS] where "xxx" denotes
-$!  ALPHA, IA64 or VAX, depending on your machine architecture.
-$!
-$!  It was written so it would try to determine what "C" compiler to
-$!  use or you can specify which "C" compiler to use.
-$!
-$!  Specify DEBUG or NODEBUG as P1 to compile with or without debugger
-$!  information.
-$!
-$!  Specify which compiler at P2 to try to compile under.
-$!
-$!	   VAXC	 For VAX C.
-$!	   DECC	 For DEC C.
-$!	   GNUC	 For GNU C.
-$!
-$!  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
-$!  keywords:
-$!
-$!	UCX		for UCX
-$!	SOCKETSHR	for SOCKETSHR+NETLIB
-$!	TCPIP		for TCPIP (post UCX)
-$!
-$!  P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
-$!
-$!  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
-$!  name may be included ("dev:[dir]libz_64.olb", for example).
-$!
-$!
-$! Announce/identify.
-$!
-$ proc = f$environment( "procedure")
-$ write sys$output "@@@ "+ -
-   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
-$!
-$ on control_c then goto exit
-$!
-$! Define A TCP/IP Library That We Will Need To Link To.
-$! (That Is, If We Need To Link To One.)
-$!
-$ TCPIP_LIB = ""
-$ ZLIB_LIB = ""
-$!
-$! Check What Architecture We Are Using.
-$!
-$ IF (F$GETSYI("CPU").LT.128)
-$ THEN
-$!
-$!  The Architecture Is VAX.
-$!
-$   ARCH = "VAX"
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  The Architecture Is Alpha, IA64 or whatever comes in the future.
-$!
-$   ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
-$   IF (ARCH .EQS. "") THEN ARCH = "UNK"
-$!
-$! End The Architecture Check.
-$!
-$ ENDIF
-$!
-$ ARCHD = ARCH
-$ LIB32 = "32"
-$ OPT_FILE = ""
-$ POINTER_SIZE = ""
-$!
-$! Define what programs should be compiled
-$!
-$ PROGRAMS := OPENSSL
-$!
-$! Check To Make Sure We Have Valid Command Line Parameters.
-$!
-$ GOSUB CHECK_OPTIONS
-$!
-$! Define The CRYPTO Library.
-$!
-$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
-$!
-$! Define The SSL Library.
-$!
-$ SSL_LIB := SYS$DISK:[-.'ARCHD'.EXE.SSL]SSL_LIBSSL'LIB32'.OLB
-$!
-$! Define The OBJ and EXE Directories.
-$!
-$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.APPS]
-$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.APPS]
-$!
-$! Specify the destination directory in any /MAP option.
-$!
-$ if (LINKMAP .eqs. "MAP")
-$ then
-$   LINKMAP = LINKMAP+ "=''EXE_DIR'"
-$ endif
-$!
-$! Add the location prefix to the linker options file name.
-$!
-$ if (OPT_FILE .nes. "")
-$ then
-$   OPT_FILE = EXE_DIR+ OPT_FILE
-$ endif
-$!
-$! Initialise logical names and such
-$!
-$ GOSUB INITIALISE
-$!
-$! Tell The User What Kind of Machine We Run On.
-$!
-$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
-$!
-$! Check To See If The OBJ Directory Exists.
-$!
-$ IF (F$PARSE(OBJ_DIR).EQS."")
-$ THEN
-$!
-$!  It Dosen't Exist, So Create It.
-$!
-$   CREATE/DIRECTORY 'OBJ_DIR'
-$!
-$! End The OBJ Directory Check.
-$!
-$ ENDIF
-$!
-$! Check To See If The EXE Directory Exists.
-$!
-$ IF (F$PARSE(EXE_DIR).EQS."")
-$ THEN
-$!
-$!  It Dosen't Exist, So Create It.
-$!
-$   CREATE/DIRECTORY 'EXE_DIR'
-$!
-$! End The EXE Directory Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Have The Proper Libraries.
-$!
-$ GOSUB LIB_CHECK
-$!
-$! Check To See If We Have A Linker Option File.
-$!
-$ GOSUB CHECK_OPT_FILE
-$!
-$! Define The Application Files.
-$! NOTE: Some might think this list ugly.  However, it's made this way to
-$! reflect the E_OBJ variable in Makefile as closely as possible, thereby
-$! making it fairly easy to verify that the lists are the same.
-$!
-$ LIB_OPENSSL = "VERIFY,ASN1PARS,REQ,DGST,DHPARAM,ENC,PASSWD,ERRSTR,"+-
-	     	"CA,PKCS7,CRL2P7,CRL,"+-
-	      	"RSA,RSAUTL,DSA,DSAPARAM,EC,ECPARAM,"+-
-	      	"X509,GENRSA,GENDSA,GENPKEY,S_SERVER,S_CLIENT,SPEED,"+-
-	      	"S_TIME,APPS,S_CB,S_SOCKET,APP_RAND,VERSION,SESS_ID,"+-
-	      	"CIPHERS,NSEQ,PKCS12,PKCS8,PKEY,PKEYPARAM,PKEYUTL,"+ -
-	      	"SPKAC,SMIME,CMS,RAND,ENGINE,OCSP,PRIME,TS,SRP"
-$!
-$ LIB_OPENSSL = LIB_OPENSSL+ ",VMS_DECC_INIT"
-$!
-$ TCPIP_PROGRAMS = ",,"
-$ IF COMPILER .EQS. "VAXC" THEN -
-     TCPIP_PROGRAMS = ",OPENSSL,"
-$!
-$! Setup exceptional compilations
-$!
-$ COMPILEWITH_CC2 = ",S_SOCKET,S_SERVER,S_CLIENT,"
-$!
-$ PHASE := LIB
-$!
-$ RESTART: 
-$!
-$!  Define An App Counter And Set It To "0".
-$!
-$ APP_COUNTER = 0
-$!
-$!  Top Of The App Loop.
-$!
-$ NEXT_APP:
-$!
-$!  Make The Application File Name
-$!
-$ CURRENT_APP = F$EDIT(F$ELEMENT(APP_COUNTER,",",PROGRAMS),"TRIM")
-$!
-$!  Create The Executable File Name.
-$!
-$   EXE_FILE = EXE_DIR + CURRENT_APP + ".EXE"
-$!
-$!  Check To See If We Are At The End Of The File List.
-$!
-$ IF (CURRENT_APP.EQS.",")
-$ THEN
-$   IF (PHASE.EQS."LIB")
-$   THEN
-$     PHASE := APP
-$     GOTO RESTART
-$   ELSE
-$     GOTO APP_DONE
-$   ENDIF
-$ ENDIF
-$!
-$!  Increment The Counter.
-$!
-$ APP_COUNTER = APP_COUNTER + 1
-$!
-$!  Decide if we're building the object files or not.
-$!
-$ IF (PHASE.EQS."LIB")
-$ THEN
-$!
-$!  Define A Library File Counter And Set It To "-1".
-$!  -1 Means The Application File Name Is To Be Used.
-$!
-$   LIB_COUNTER = -1
-$!
-$!  Create a .OPT file for the object files
-$!
-$   OPEN /WRITE OBJECTS 'EXE_DIR''CURRENT_APP'.OPT
-$!
-$!  Top Of The File Loop.
-$!
-$  NEXT_LIB:
-$!
-$!  O.K, Extract The File Name From The File List.
-$!
-$   IF LIB_COUNTER .GE. 0
-$   THEN
-$     FILE_NAME = F$EDIT(F$ELEMENT(LIB_COUNTER,",",LIB_'CURRENT_APP'),"TRIM")
-$   ELSE
-$     FILE_NAME = CURRENT_APP
-$   ENDIF
-$!
-$!  Check To See If We Are At The End Of The File List.
-$!
-$   IF (FILE_NAME.EQS.",")
-$   THEN
-$     CLOSE OBJECTS
-$     GOTO NEXT_APP
-$   ENDIF
-$!
-$!  Increment The Counter.
-$!
-$   LIB_COUNTER = LIB_COUNTER + 1
-$!
-$!  Create The Source File Name.
-$!
-$   SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
-$!
-$!  Create The Object File Name.
-$!
-$   OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
-$   ON WARNING THEN GOTO NEXT_LIB
-$!
-$!  Check To See If The File We Want To Compile Actually Exists.
-$!
-$   IF (F$SEARCH(SOURCE_FILE).EQS."")
-$   THEN
-$!
-$!    Tell The User That The File Dosen't Exist.
-$!
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
-$     WRITE SYS$OUTPUT ""
-$!
-$!    Exit The Build.
-$!
-$     GOTO EXIT
-$!
-$!  End The File Exist Check.
-$!
-$   ENDIF
-$!
-$!  Tell The User What We Are Building.
-$!
-$   IF (PHASE.EQS."LIB")
-$   THEN
-$     WRITE SYS$OUTPUT "Compiling The ",FILE_NAME,".C File."
-$   ELSE
-$     WRITE SYS$OUTPUT "Building The ",FILE_NAME," Application Program."
-$   ENDIF
-$!
-$!  Compile The File.
-$!
-$   ON ERROR THEN GOTO NEXT_LIB
-$   IF COMPILEWITH_CC2 - FILE_NAME .NES. COMPILEWITH_CC2
-$   THEN
-$     CC2/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
-$   ELSE
-$     CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
-$   ENDIF
-$   WRITE OBJECTS OBJECT_FILE
-$!
-$   GOTO NEXT_LIB
-$ ENDIF
-$!
-$!  Check if this program works well without a TCPIP library
-$!
-$ IF TCPIP_LIB .EQS. "" .AND. TCPIP_PROGRAMS - CURRENT_APP .NES. TCPIP_PROGRAMS
-$ THEN
-$   WRITE SYS$OUTPUT CURRENT_APP," needs a TCP/IP library.  Can't link.  Skipping..."
-$   GOTO NEXT_APP
-$ ENDIF
-$!
-$! Link The Program.
-$!
-$ ON WARNING THEN GOTO NEXT_APP
-$!
-$! Don't Link With The RSAREF Routines And TCP/IP Library.
-$!
-$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /EXE='EXE_FILE' -
-  'EXE_DIR''CURRENT_APP'.OPT /OPTIONS, -
-  'SSL_LIB' /LIBRARY, -
-  'CRYPTO_LIB' /LIBRARY -
-  'TCPIP_LIB' -
-  'ZLIB_LIB' -
-  ,'OPT_FILE' /OPTIONS
-$!
-$! Go Back And Do It Again.
-$!
-$ GOTO NEXT_APP
-$!
-$! All Done With This File.
-$!
-$ APP_DONE:
-$ EXIT:
-$!
-$! All Done, Time To Clean Up And Exit.
-$!
-$ GOSUB CLEANUP
-$ EXIT
-$!
-$! Check For The Link Option FIle.
-$!
-$ CHECK_OPT_FILE:
-$!
-$! Check To See If We Need To Make A VAX C Option File.
-$!
-$ IF (COMPILER.EQS."VAXC")
-$ THEN
-$!
-$!  Check To See If We Already Have A VAX C Linker Option File.
-$!
-$   IF (F$SEARCH(OPT_FILE).EQS."")
-$   THEN
-$!
-$!    We Need A VAX C Linker Option File.
-$!
-$     CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File To Link Against 
-! The Sharable VAX C Runtime Library.
-!
-SYS$SHARE:VAXCRTL.EXE/SHARE
-$EOD
-$!
-$!  End The Option File Check.
-$!
-$   ENDIF
-$!
-$! End The VAXC Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Need A GNU C Option File.
-$!
-$ IF (COMPILER.EQS."GNUC")
-$ THEN
-$!
-$!  Check To See If We Already Have A GNU C Linker Option File.
-$!
-$   IF (F$SEARCH(OPT_FILE).EQS."")
-$   THEN
-$!
-$!    We Need A GNU C Linker Option File.
-$!
-$     CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File To Link Against 
-! The Sharable C Runtime Library.
-!
-GNU_CC:[000000]GCCLIB/LIBRARY
-SYS$SHARE:VAXCRTL/SHARE
-$EOD
-$!
-$!  End The Option File Check.
-$!
-$   ENDIF
-$!
-$! End The GNU C Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Need A DEC C Option File.
-$!
-$ IF (COMPILER.EQS."DECC")
-$ THEN
-$!
-$!  Check To See If We Already Have A DEC C Linker Option File.
-$!
-$   IF (F$SEARCH(OPT_FILE).EQS."")
-$   THEN
-$!
-$!    Figure Out If We Need An AXP Or A VAX Linker Option File.
-$!
-$     IF ARCH.EQS."VAX"
-$     THEN
-$!
-$!      We Need A DEC C Linker Option File For VAX.
-$!
-$       CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File To Link Against 
-! The Sharable DEC C Runtime Library.
-!
-SYS$SHARE:DECC$SHR.EXE/SHARE
-$EOD
-$!
-$!    Else...
-$!
-$     ELSE
-$!
-$!      Create The non-VAX Linker Option File.
-$!
-$       CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File For non-VAX To Link Against 
-! The Sharable C Runtime Library.
-!
-SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
-SYS$SHARE:CMA$OPEN_RTL/SHARE
-$EOD
-$!
-$!    End The DEC C Option File Check.
-$!
-$     ENDIF
-$!
-$!  End The Option File Search.
-$!
-$   ENDIF
-$!
-$! End The DEC C Check.
-$!
-$ ENDIF
-$!
-$!  Tell The User What Linker Option File We Are Using.
-$!
-$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."	
-$!
-$! Time To RETURN.
-$!
-$ RETURN
-$!
-$! Check To See If We Have The Appropiate Libraries.
-$!
-$ LIB_CHECK:
-$!
-$! Look For The Library LIBCRYPTO.OLB.
-$!
-$ IF (F$SEARCH(CRYPTO_LIB).EQS."")
-$ THEN
-$!
-$!  Tell The User We Can't Find The LIBCRYPTO.OLB Library.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "Can't Find The Library ",CRYPTO_LIB,"."
-$   WRITE SYS$OUTPUT "We Can't Link Without It."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Since We Can't Link Without It, Exit.
-$!
-$   EXIT
-$!
-$! End The Crypto Library Check.
-$!
-$ ENDIF
-$!
-$! Look For The Library LIBSSL.OLB.
-$!
-$ IF (F$SEARCH(SSL_LIB).EQS."")
-$ THEN
-$!
-$!  Tell The User We Can't Find The LIBSSL.OLB Library.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "Can't Find The Library ",SSL_LIB,"."
-$   WRITE SYS$OUTPUT "Some Of The Test Programs Need To Link To It."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Since We Can't Link Without It, Exit.
-$!
-$   EXIT
-$!
-$! End The SSL Library Check.
-$!
-$ ENDIF
-$!
-$! Time To Return.
-$!
-$ RETURN
-$!
-$! Check The User's Options.
-$!
-$ CHECK_OPTIONS:
-$!
-$! Check To See If P1 Is Blank.
-$!
-$ IF (P1.EQS."NODEBUG")
-$ THEN
-$!
-$!  P1 Is NODEBUG, So Compile Without Debugger Information.
-$!
-$   DEBUGGER  = "NODEBUG"
-$   LINKMAP = "NOMAP"
-$   TRACEBACK = "NOTRACEBACK" 
-$   GCC_OPTIMIZE = "OPTIMIZE"
-$   CC_OPTIMIZE = "OPTIMIZE"
-$   WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
-$   WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  Check To See If We Are To Compile With Debugger Information.
-$!
-$   IF (P1.EQS."DEBUG")
-$   THEN
-$!
-$!    Compile With Debugger Information.
-$!
-$     DEBUGGER  = "DEBUG"
-$     LINKMAP = "MAP"
-$     TRACEBACK = "TRACEBACK"
-$     GCC_OPTIMIZE = "NOOPTIMIZE"
-$     CC_OPTIMIZE = "NOOPTIMIZE"
-$     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
-$     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
-$   ELSE
-$!
-$!    Tell The User Entered An Invalid Option.
-$!
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
-$     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
-$     WRITE SYS$OUTPUT ""
-$!
-$!    Time To EXIT.
-$!
-$     EXIT
-$!
-$!  End The Valid Argument Check.
-$!
-$   ENDIF
-$!
-$! End The P1 Check.
-$!
-$ ENDIF
-$!
-$! Check P6 (POINTER_SIZE).
-$!
-$ IF (P6 .NES. "") .AND. (ARCH .NES. "VAX")
-$ THEN
-$!
-$   IF (P6 .EQS. "32")
-$   THEN
-$     POINTER_SIZE = " /POINTER_SIZE=32"
-$   ELSE
-$     POINTER_SIZE = F$EDIT( P6, "COLLAPSE, UPCASE")
-$     IF ((POINTER_SIZE .EQS. "64") .OR. -
-       (POINTER_SIZE .EQS. "64=") .OR. -
-       (POINTER_SIZE .EQS. "64=ARGV"))
-$     THEN
-$       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_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:
-$           ! %DCL-W-NOVALU, value not allowed - remove value specification
-$           !  \64=\
-$           !
-$           ! If the compiler was run, logicals defined in /USER would
-$           ! 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_MODE SYS$ERROR
-$           DEASSIGN /USER_MODE SYS$OUTPUT
-$         ELSE
-$           POINTER_SIZE = POINTER_SIZE + "=ARGV"
-$         ENDIF
-$         SET ON
-$       ENDIF
-$       POINTER_SIZE = " /POINTER_SIZE=''POINTER_SIZE'"
-$!
-$     ELSE
-$!
-$!      Tell The User Entered An Invalid Option.
-$!
-$       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 (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.
-$!
-$       EXIT
-$!
-$     ENDIF
-$!
-$   ENDIF
-$!
-$! End The P6 (POINTER_SIZE) Check.
-$!
-$ ENDIF
-$!
-$! Set basic C compiler /INCLUDE directories.
-$!
-$ CC_INCLUDES = "SYS$DISK:[-],SYS$DISK:[-.CRYPTO]"
-$!
-$! Check To See If P2 Is Blank.
-$!
-$ IF (P2.EQS."")
-$ THEN
-$!
-$!  O.K., The User Didn't Specify A Compiler, Let's Try To
-$!  Find Out Which One To Use.
-$!
-$!  Check To See If We Have GNU C.
-$!
-$   IF (F$TRNLNM("GNU_CC").NES."")
-$   THEN
-$!
-$!    Looks Like GNUC, Set To Use GNUC.
-$!
-$     P2 = "GNUC"
-$!
-$!  Else...
-$!
-$   ELSE
-$!
-$!  Check To See If We Have VAXC Or DECC.
-$!
-$     IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
-$     THEN 
-$!
-$!      Looks Like DECC, Set To Use DECC.
-$!
-$       P2 = "DECC"
-$!
-$!    Else...
-$!
-$     ELSE
-$!
-$!      Looks Like VAXC, Set To Use VAXC.
-$!
-$       P2 = "VAXC"
-$!
-$!    End The VAXC Compiler Check.
-$!
-$     ENDIF
-$!
-$!  End The DECC & VAXC Compiler Check.
-$!
-$   ENDIF
-$!
-$!  End The Compiler Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Have A Option For P3.
-$!
-$ IF (P3.EQS."")
-$ THEN
-$!
-$!  Find out what socket library we have available
-$!
-$   IF F$PARSE("SOCKETSHR:") .NES. ""
-$   THEN
-$!
-$!    We have SOCKETSHR, and it is my opinion that it's the best to use.
-$!
-$     P3 = "SOCKETSHR"
-$!
-$!    Tell the user
-$!
-$     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
-$!
-$!    Else, let's look for something else
-$!
-$   ELSE
-$!
-$!    Like UCX (the reason to do this before Multinet is that the UCX
-$!    emulation is easier to use...)
-$!
-$     IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
-	 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
-	 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
-$     THEN
-$!
-$!	Last resort: a UCX or UCX-compatible library
-$!
-$	P3 = "UCX"
-$!
-$!      Tell the user
-$!
-$       WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
-$!
-$!	That was all...
-$!
-$     ENDIF
-$   ENDIF
-$ ENDIF
-$!
-$! Set Up Initial CC Definitions, Possibly With User Ones
-$!
-$ CCDEFS = "MONOLITH"
-$ 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"
-$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
-	CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
-$!
-$! Check To See If We Have A ZLIB Option.
-$!
-$ ZLIB = P7
-$ IF (ZLIB .NES. "")
-$ THEN
-$!
-$!  Check for expected ZLIB files.
-$!
-$   err = 0
-$   file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
-$   if (f$search( file1) .eqs. "")
-$   then
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
-$     WRITE SYS$OUTPUT "    Can't find header: ''file1'"
-$     err = 1
-$   endif
-$   file1 = f$parse( "A.;", ZLIB)- "A.;"
-$!
-$   file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
-$   if (f$search( file2) .eqs. "")
-$   then
-$     if (err .eq. 0)
-$     then
-$       WRITE SYS$OUTPUT ""
-$       WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
-$     endif
-$     WRITE SYS$OUTPUT "    Can't find library: ''file2'"
-$     WRITE SYS$OUTPUT ""
-$     err = err+ 2
-$   endif
-$   if (err .eq. 1)
-$   then
-$     WRITE SYS$OUTPUT ""
-$   endif
-$!
-$   if (err .ne. 0)
-$   then
-$     EXIT
-$   endif
-$!
-$   CCDEFS = """ZLIB=1"", "+ CCDEFS
-$   CC_INCLUDES = CC_INCLUDES+ ", "+ file1
-$   ZLIB_LIB = ", ''file2' /library"
-$!
-$!  Print info
-$!
-$   WRITE SYS$OUTPUT "ZLIB library spec: ", file2
-$!
-$! End The ZLIB Check.
-$!
-$ ENDIF
-$!
-$!  Check To See If The User Entered A Valid Parameter.
-$!
-$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
-$ THEN
-$!
-$!  Check To See If The User Wanted DECC.
-$!
-$   IF (P2.EQS."DECC")
-$   THEN
-$!
-$!    Looks Like DECC, Set To Use DECC.
-$!
-$     COMPILER = "DECC"
-$!
-$!    Tell The User We Are Using DECC.
-$!
-$     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
-$!
-$!    Use DECC...
-$!
-$     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" + -
-       " /INCLUDE=(''CC_INCLUDES') " + CCEXTRAFLAGS
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_DECC_OPTIONS.OPT"
-$!
-$!  End DECC Check.
-$!
-$   ENDIF
-$!
-$!  Check To See If We Are To Use VAXC.
-$!
-$   IF (P2.EQS."VAXC")
-$   THEN
-$!
-$!    Looks Like VAXC, Set To Use VAXC.
-$!
-$     COMPILER = "VAXC"
-$!
-$!    Tell The User We Are Using VAX C.
-$     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
-$!
-$!    Compile Using VAXC.
-$!
-$     CC = "CC"
-$     IF ARCH.NES."VAX"
-$     THEN
-$	WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
-$	EXIT
-$     ENDIF
-$     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
-$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
-	   "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
-$     CCDEFS = CCDEFS + ",""VAXC"""
-$!
-$!    Define <sys> As SYS$COMMON:[SYSLIB]
-$!
-$     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
-$!
-$!  End VAXC Check
-$!
-$   ENDIF
-$!
-$!  Check To See If We Are To Use GNU C.
-$!
-$   IF (P2.EQS."GNUC")
-$   THEN
-$!
-$!    Looks Like GNUC, Set To Use GNUC.
-$!
-$     COMPILER = "GNUC"
-$!
-$!    Tell The User We Are Using GNUC.
-$!
-$     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
-$!
-$!    Use GNU C...
-$!
-$     IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
-$     CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
-	   "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
-$!
-$!  End The GNU C Check.
-$!
-$   ENDIF
-$!
-$!  Set up default defines
-$!
-$   CCDEFS = """FLAT_INC=1""," + CCDEFS
-$!
-$!  Else The User Entered An Invalid Argument.
-$!
-$ ELSE
-$!
-$!  Tell The User We Don't Know What They Want.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
-$   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
-$   WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Time To EXIT.
-$!
-$   EXIT
-$ ENDIF
-$!
-$! Time to check the contents, and to make sure we get the correct library.
-$!
-$ IF P3.EQS."SOCKETSHR" .OR. P3.EQS."MULTINET" .OR. P3.EQS."UCX" -
-     .OR. P3.EQS."TCPIP" .OR. P3.EQS."NONE"
-$ THEN
-$!
-$!  Check to see if SOCKETSHR was chosen
-$!
-$   IF P3.EQS."SOCKETSHR"
-$   THEN
-$!
-$!    Set the library to use SOCKETSHR
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
-$!
-$!    Done with SOCKETSHR
-$!
-$   ENDIF
-$!
-$!  Check to see if MULTINET was chosen
-$!
-$   IF P3.EQS."MULTINET"
-$   THEN
-$!
-$!    Set the library to use UCX emulation.
-$!
-$     P3 = "UCX"
-$!
-$!    Done with MULTINET
-$!
-$   ENDIF
-$!
-$!  Check to see if UCX was chosen
-$!
-$   IF P3.EQS."UCX"
-$   THEN
-$!
-$!    Set the library to use UCX.
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
-$     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
-$     THEN
-$       TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
-$     ELSE
-$       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
-	  TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
-$     ENDIF
-$!
-$!    Done with UCX
-$!
-$   ENDIF
-$!
-$!  Check to see if TCPIP (post UCX) was chosen
-$!
-$   IF P3.EQS."TCPIP"
-$   THEN
-$!
-$!    Set the library to use TCPIP.
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
-$!
-$!    Done with TCPIP
-$!
-$   ENDIF
-$!
-$!  Check to see if NONE was chosen
-$!
-$   IF P3.EQS."NONE"
-$   THEN
-$!
-$!    Do not use TCPIP.
-$!
-$     TCPIP_LIB = ""
-$!
-$!    Done with TCPIP
-$!
-$   ENDIF
-$!
-$!  Add TCP/IP type to CC definitions.
-$!
-$   CCDEFS = CCDEFS + ",TCPIP_TYPE_''P3'"
-$!
-$!  Print info
-$!
-$   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
-$!
-$!  Else The User Entered An Invalid Argument.
-$!
-$ ELSE
-$!
-$!  Tell The User We Don't Know What They Want.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
-$   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
-$   WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP (post UCX) TCP/IP library."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Time To EXIT.
-$!
-$   EXIT
-$!
-$!  Done with TCP/IP libraries
-$!
-$ ENDIF
-$!
-$! Finish up the definition of CC.
-$!
-$ IF COMPILER .EQS. "DECC"
-$ THEN
-$   IF CCDISABLEWARNINGS .NES. ""
-$   THEN
-$     CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
-$   ENDIF
-$ ELSE
-$   CCDISABLEWARNINGS = ""
-$ ENDIF
-$ CC2 = CC + " /DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
-$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
-$!
-$! Show user the result
-$!
-$ WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC
-$!
-$! Special Threads For OpenVMS v7.1 Or Later
-$!
-$! Written By:  Richard Levitte
-$!              richard at levitte.org
-$!
-$!
-$! Check To See If We Have A Option For P4.
-$!
-$ IF (P4.EQS."")
-$ THEN
-$!
-$!  Get The Version Of VMS We Are Using.
-$!
-$   ISSEVEN :=
-$   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
-$   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
-$!
-$!  Check To See If The VMS Version Is v7.1 Or Later.
-$!
-$   IF (TMP.GE.71)
-$   THEN
-$!
-$!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
-$!
-$     ISSEVEN := ,PTHREAD_USE_D4
-$!
-$!  End The VMS Version Check.
-$!
-$   ENDIF
-$!
-$! End The P4 Check.
-$!
-$ ENDIF
-$!
-$! Check if the user wanted to compile just a subset of all the programs.
-$!
-$ IF P5 .NES. ""
-$ THEN
-$   PROGRAMS = P5
-$ ENDIF
-$!
-$!  Time To RETURN...
-$!
-$ RETURN
-$!
-$ INITIALISE:
-$!
-$! Save old value of the logical name OPENSSL
-$!
-$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
-$!
-$! Save directory information
-$!
-$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
-$ __HERE = F$EDIT(__HERE,"UPCASE")
-$ __TOP = __HERE - "APPS]"
-$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
-$!
-$! Set up the logical name OPENSSL to point at the include directory
-$!
-$ DEFINE OPENSSL /NOLOG '__INCLUDE'
-$!
-$! Done
-$!
-$ RETURN
-$!
-$ CLEANUP:
-$!
-$! Restore the saved logical name OPENSSL, if it had a value.
-$!
-$ if (f$type( __SAVE_OPENSSL) .nes. "")
-$ then
-$   IF __SAVE_OPENSSL .EQS. ""
-$   THEN
-$     DEASSIGN OPENSSL
-$   ELSE
-$     DEFINE /NOLOG OPENSSL '__SAVE_OPENSSL'
-$   ENDIF
-$ endif
-$!
-$! Close any open files.
-$!
-$ if (f$trnlnm( "objects", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
-   close objects
-$!
-$! Done
-$!
-$ RETURN
-$!
diff --git a/build.info b/build.info
index a518efe..9a3d9bd 100644
--- a/build.info
+++ b/build.info
@@ -5,3 +5,23 @@ ORDINALS[libssl]=ssl
 INCLUDE[libcrypto]={- rel2abs(catdir($builddir,"include")) -} . crypto/include include
 INCLUDE[libssl]={- rel2abs(catdir($builddir,"include")) -} . include
 DEPEND[libssl]=libcrypto
+
+IF[{- $config{target} =~ /^Cygwin/ -}]
+ SHARED_NAME[libcrypto]=cygcrypto-{- $config{shlib_major}.".".$config{shlib_minor} -}
+ SHARED_NAME[libssl]=cygssl-{- $config{shlib_major}.".".$config{shlib_minor} -}
+ELSIF[{- $config{target} =~ /^mingw/ -}]
+ SHARED_NAME[libcrypto]=libeay32
+ SHARED_NAME[libssl]=ssleay32
+ENDIF
+
+# VMS has a cultural standard where all libraries are prefixed.
+# For OpenSSL, the choice is 'ossl$' (this prefix was claimed in a
+# conversation with VSI, Tuesday January 26 2016)
+# Also, it seems it's usual to have a suffix to the shared library name
+# for the different pointer sizes that were built for.
+IF[{- $config{target} =~ /^vms/ -}]
+ RENAME[libcrypto]=ossl$libcrypto
+ RENAME[libssl]=ossl$libssl
+ SHARED_NAME[libcrypto]=ossl$libcrypto_shr{- $target{pointer_size} -}
+ SHARED_NAME[libssl]=ossl$libssl_shr{- $target{pointer_size} -}
+ENDIF
diff --git a/config.com b/config.com
new file mode 100644
index 0000000..1beb74a
--- /dev/null
+++ b/config.com
@@ -0,0 +1,65 @@
+$	! OpenSSL config: determine the architecture and run Configure
+$	!
+$	! Very simple for the moment, it will take the following arguments:
+$	!
+$	! 32		sets /POINTER_SIZE=32
+$	! 64		sets /POINTER_SIZE=64
+$	! DEBUG		sets debugging
+$	! HELP		prints a usage and exits
+$
+$	arch == f$edit( f$getsyi( "arch_name"), "lowercase")
+$	pointer_size = ""
+$	debug = ""
+$	here = F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"),,,"SYNTAX_ONLY") - "A.;"
+$
+$	collected_args = ""
+$	P_index = 0
+$	LOOP1:
+$	    P_index = P_index + 1
+$	    IF P_index .GT. 8 THEN GOTO ENDLOOP1
+$	    P1 = F$EDIT(P1,"TRIM")
+$	    IF P1 .EQS. "HELP" THEN GOTO USAGE
+$	    IF P1 .EQS. "32"
+$	    THEN
+$		pointer_size = "-P32"
+$		P1 = ""
+$	    ENDIF
+$	    IF P1 .EQS. "64"
+$	    THEN
+$		pointer_size = "-P64"
+$		P1 = ""
+$	    ENDIF
+$	    IF P1 .EQS. "DEBUG"
+$	    THEN
+$		debug = "--debug"
+$		P1 = ""
+$	    ENDIF
+$	    IF P1 .NES. "" THEN -
+	       collected_args = collected_args + " " + P1
+$	    P1 = P2
+$	    P2 = P3
+$	    P3 = P4
+$	    P4 = P5
+$	    P5 = P6
+$	    P6 = P7
+$	    P7 = P8
+$	    P8 = ""
+$	    GOTO LOOP1
+$	ENDLOOP1:
+$
+$	target = "vms-''arch'''pointer_size'"
+$	PERL 'here'Configure "''target'" 'debug' 'collected_args'
+$	EXIT $STATUS
+$
+$ USAGE:
+$	TYPE SYS$INPUT
+$	DECK
+usage: @config [options]
+
+  32		build with 32-bit pointer size
+  64		build with 64-bit pointer size
+  DEBUG		build with debugging
+  HELP		this text
+
+Any other option is simply passed to Configure.
+$	EOD
diff --git a/crypto/aes/build.info b/crypto/aes/build.info
index c8a8c5d..6484da6 100644
--- a/crypto/aes/build.info
+++ b/crypto/aes/build.info
@@ -2,3 +2,62 @@ LIBS=../../libcrypto
 SOURCE[../../libcrypto]=\
         aes_misc.c aes_ecb.c aes_cfb.c aes_ofb.c \
         aes_ige.c aes_wrap.c {- $target{aes_asm_src} -}
+
+BEGINRAW[Makefile]
+##### AES assembler implementations
+
+{- $builddir -}/aes-ia64.s: {- $sourcedir -}/asm/aes-ia64.S
+	$(CC) $(CFLAGS) -E asm/aes-ia64.S > $@
+
+{- $builddir -}/aes-586.s:	{- $sourcedir -}/asm/aes-586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/aes-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+{- $builddir -}/vpaes-x86.s:	{- $sourcedir -}/asm/vpaes-x86.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/vpaes-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+{- $builddir -}/aesni-x86.s:	{- $sourcedir -}/asm/aesni-x86.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/aesni-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+
+{- $builddir -}/aes-x86_64.s: {- $sourcedir -}/asm/aes-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/aes-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/vpaes-x86_64.s:	{- $sourcedir -}/asm/vpaes-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/vpaes-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/bsaes-x86_64.s:	{- $sourcedir -}/asm/bsaes-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/bsaes-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/aesni-x86_64.s: {- $sourcedir -}/asm/aesni-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/aesni-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/aesni-sha1-x86_64.s:	{- $sourcedir -}/asm/aesni-sha1-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/aesni-sha1-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/aesni-sha256-x86_64.s:	{- $sourcedir -}/asm/aesni-sha256-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/aesni-sha256-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/aesni-mb-x86_64.s:	{- $sourcedir -}/asm/aesni-mb-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/aesni-mb-x86_64.pl $(PERLASM_SCHEME) > $@
+
+{- $builddir -}/aes-sparcv9.s: {- $sourcedir -}/asm/aes-sparcv9.pl
+	$(PERL) {- $sourcedir -}/asm/aes-sparcv9.pl $(CFLAGS) > $@
+{- $builddir -}/aest4-sparcv9.s: {- $sourcedir -}/asm/aest4-sparcv9.pl {- $sourcetop -}/crypto/perlasm/sparcv9_modes.pl
+	$(PERL) {- $sourcedir -}/asm/aest4-sparcv9.pl $(CFLAGS) > $@
+
+{- $builddir -}/aes-ppc.s:	{- $sourcedir -}/asm/aes-ppc.pl
+	$(PERL) {- $sourcedir -}/asm/aes-ppc.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/vpaes-ppc.s:	{- $sourcedir -}/asm/vpaes-ppc.pl
+	$(PERL) {- $sourcedir -}/asm/vpaes-ppc.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/aesp8-ppc.s:	{- $sourcedir -}/asm/aesp8-ppc.pl
+	$(PERL) {- $sourcedir -}/asm/aesp8-ppc.pl $(PERLASM_SCHEME) $@
+
+{- $builddir -}/aes-parisc.s:	{- $sourcedir -}/asm/aes-parisc.pl
+	$(PERL) {- $sourcedir -}/asm/aes-parisc.pl $(PERLASM_SCHEME) $@
+
+{- $builddir -}/aes-mips.S:	{- $sourcedir -}/asm/aes-mips.pl
+	$(PERL) {- $sourcedir -}/asm/aes-mips.pl $(PERLASM_SCHEME) $@
+
+{- $builddir -}/aesv8-armx.S:	{- $sourcedir -}/asm/aesv8-armx.pl
+	$(PERL) {- $sourcedir -}/asm/aesv8-armx.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/vpaes-armv8.S:	{- $sourcedir -}/asm/vpaes-armv8.pl
+	$(PERL) {- $sourcedir -}/asm/vpaes-armv8.pl $(PERLASM_SCHEME) $@
+
+# GNU make "catch all"
+{- $builddir -}/aes-%.S:	{- $sourcedir -}/asm/aes-%.pl
+	$(PERL) $< $(PERLASM_SCHEME) $@
+{- $builddir -}/bsaes-%.S:	{- $sourcedir -}/asm/bsaes-%.pl
+	$(PERL) $< $(PERLASM_SCHEME) $@
+
+ENDRAW[Makefile]
diff --git a/crypto/bf/build.info b/crypto/bf/build.info
index d471b31..b4aa7f9 100644
--- a/crypto/bf/build.info
+++ b/crypto/bf/build.info
@@ -1,2 +1,9 @@
 LIBS=../../libcrypto
 SOURCE[../../libcrypto]=bf_skey.c bf_ecb.c bf_enc.c bf_cfb64.c bf_ofb64.c 
+
+BEGINRAW[Makefile]
+##### BF assembler implementations
+
+{- $builddir -}/bf-586.s:	{- $sourcedir -}/asm/bf-586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl {- $sourcetop -}/crypto/perlasm/cbc.pl
+	$(PERL) {- $sourcedir -}/asm/bf-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+ENDRAW[Makefile]
diff --git a/crypto/bn/build.info b/crypto/bn/build.info
index 7525b86..66f62dc 100644
--- a/crypto/bn/build.info
+++ b/crypto/bn/build.info
@@ -6,3 +6,93 @@ SOURCE[../../libcrypto]=\
         {- $target{bn_asm_src} -} \
         bn_recp.c bn_mont.c bn_mpi.c bn_exp2.c bn_gf2m.c bn_nist.c \
         bn_depr.c bn_const.c bn_x931p.c bn_intern.c bn_dh.c bn_srp.c
+
+BEGINRAW[Makefile]
+##### BN assembler implementations
+
+{- $builddir -}/bn-586.s:	{- $sourcedir -}/asm/bn-586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/bn-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+{- $builddir -}/co-586.s:	{- $sourcedir -}/asm/co-586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/co-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+{- $builddir -}/x86-mont.s:	{- $sourcedir -}/asm/x86-mont.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/x86-mont.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+{- $builddir -}/x86-gf2m.s:	{- $sourcedir -}/asm/x86-gf2m.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/x86-gf2m.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+
+{- $builddir -}/sparcv8.o:	{- $sourcedir -}/asm/sparcv8.S
+	$(CC) $(CFLAGS) -c {- $sourcedir -}/asm/sparcv8.S
+{- $builddir -}/bn-sparcv9.o:	{- $sourcedir -}/asm/sparcv8plus.S
+	$(CC) $(CFLAGS) -c -o $@ {- $sourcedir -}/asm/sparcv8plus.S
+{- $builddir -}/sparcv9a-mont.s:	{- $sourcedir -}/asm/sparcv9a-mont.pl
+	$(PERL) {- $sourcedir -}/asm/sparcv9a-mont.pl $(CFLAGS) > $@
+{- $builddir -}/sparcv9-mont.s:		{- $sourcedir -}/asm/sparcv9-mont.pl
+	$(PERL) {- $sourcedir -}/asm/sparcv9-mont.pl $(CFLAGS) > $@
+{- $builddir -}/vis3-mont.s:		{- $sourcedir -}/asm/vis3-mont.pl
+	$(PERL) {- $sourcedir -}/asm/vis3-mont.pl $(CFLAGS) > $@
+{- $builddir -}/sparct4-mont.S:	{- $sourcedir -}/asm/sparct4-mont.pl
+	$(PERL) {- $sourcedir -}/asm/sparct4-mont.pl $(CFLAGS) > $@
+{- $builddir -}/sparcv9-gf2m.S:	{- $sourcedir -}/asm/sparcv9-gf2m.pl
+	$(PERL) {- $sourcedir -}/asm/sparcv9-gf2m.pl $(CFLAGS) > $@
+
+{- $builddir -}/bn-mips3.o:	{- $sourcedir -}/asm/mips3.s
+	@if [ "$(CC)" = "gcc" ]; then \
+		ABI=`expr "$(CFLAGS)" : ".*-mabi=\([n3264]*\)"` && \
+		as -$$ABI -O -o $@ {- $sourcedir -}/asm/mips3.s; \
+	else	$(CC) -c $(CFLAGS) -o $@ {- $sourcedir -}/asm/mips3.s; fi
+
+{- $builddir -}/bn-mips.s:	{- $sourcedir -}/asm/mips.pl
+	$(PERL) {- $sourcedir -}/asm/mips.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/mips-mont.s:	{- $sourcedir -}/asm/mips-mont.pl
+	$(PERL)	{- $sourcedir -}/asm/mips-mont.pl $(PERLASM_SCHEME) $@
+
+{- $builddir -}/bn-s390x.o:	{- $sourcedir -}/asm/s390x.S
+	$(CC) $(CFLAGS) -c -o $@ {- $sourcedir -}/asm/s390x.S
+{- $builddir -}/s390x-gf2m.s:	{- $sourcedir -}/asm/s390x-gf2m.pl
+	$(PERL) {- $sourcedir -}/asm/s390x-gf2m.pl $(PERLASM_SCHEME) $@
+
+{- $builddir -}/x86_64-mont.s:	{- $sourcedir -}/asm/x86_64-mont.pl
+	$(PERL) {- $sourcedir -}/asm/x86_64-mont.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/x86_64-mont5.s:	{- $sourcedir -}/asm/x86_64-mont5.pl
+	$(PERL) {- $sourcedir -}/asm/x86_64-mont5.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/x86_64-gf2m.s:	{- $sourcedir -}/asm/x86_64-gf2m.pl
+	$(PERL) {- $sourcedir -}/asm/x86_64-gf2m.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/rsaz-x86_64.s:	{- $sourcedir -}/asm/rsaz-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/rsaz-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/rsaz-avx2.s:	{- $sourcedir -}/asm/rsaz-avx2.pl 
+	$(PERL) {- $sourcedir -}/asm/rsaz-avx2.pl $(PERLASM_SCHEME) > $@
+
+{- $builddir -}/bn-ia64.s:	{- $sourcedir -}/asm/ia64.S
+	$(CC) $(CFLAGS) -E {- $sourcedir -}/asm/ia64.S > $@
+{- $builddir -}/ia64-mont.s:	{- $sourcedir -}/asm/ia64-mont.pl
+	$(PERL) {- $sourcedir -}/asm/ia64-mont.pl $@ $(CFLAGS)
+
+# GNU assembler fails to compile PA-RISC2 modules, insist on calling
+# vendor assembler...
+{- $builddir -}/pa-risc2W.o: {- $sourcedir -}/asm/pa-risc2W.s
+	$(PERL) $(TOP)/util/fipsas.pl $(TOP) $< /usr/ccs/bin/as -o pa-risc2W.o {- $sourcedir -}/asm/pa-risc2W.s
+{- $builddir -}/pa-risc2.o: {- $sourcedir -}/asm/pa-risc2.s
+	$(PERL) $(TOP)/util/fipsas.pl $(TOP) $< /usr/ccs/bin/as -o pa-risc2.o {- $sourcedir -}/asm/pa-risc2.s
+
+{- $builddir -}/parisc-mont.s:	{- $sourcedir -}/asm/parisc-mont.pl
+	$(PERL) {- $sourcedir -}/asm/parisc-mont.pl $(PERLASM_SCHEME) $@
+
+# ppc - AIX, Linux, MacOS X...
+{- $builddir -}/bn-ppc.s:	{- $sourcedir -}/asm/ppc.pl;	$(PERL) {- $sourcedir -}/asm/ppc.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/ppc-mont.s:	{- $sourcedir -}/asm/ppc-mont.pl;$(PERL) {- $sourcedir -}/asm/ppc-mont.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/ppc64-mont.s:	{- $sourcedir -}/asm/ppc64-mont.pl;$(PERL) {- $sourcedir -}/asm/ppc64-mont.pl $(PERLASM_SCHEME) $@
+
+{- $builddir -}/alpha-mont.s:	{- $sourcedir -}/asm/alpha-mont.pl
+	(preproc=$$$$.$@.S; trap "rm $$preproc" INT; \
+	$(PERL) {- $sourcedir -}/asm/alpha-mont.pl > $$preproc && \
+	$(CC) -E -P $$preproc > $@ && rm $$preproc)
+
+# GNU make "catch all"
+{- $builddir -}/%-mont.S:	{- $sourcedir -}/asm/%-mont.pl
+	$(PERL) $< $(PERLASM_SCHEME) $@
+{- $builddir -}/%-gf2m.S:	{- $sourcedir -}/asm/%-gf2m.pl
+	$(PERL) $< $(PERLASM_SCHEME) $@
+
+{- $builddir -}/armv4-mont.o:	{- $builddir -}/armv4-mont.S
+{- $builddir -}/armv4-gf2m.o:	{- $builddir -}/armv4-gf2m.S
+{- $builddir -}/armv8-mont.o:	{- $builddir -}/armv8-mont.S
+ENDRAW[Makefile]
diff --git a/crypto/build.info b/crypto/build.info
index 90f301a..b3591a0 100644
--- a/crypto/build.info
+++ b/crypto/build.info
@@ -1,3 +1,4 @@
+{- use File::Spec::Functions qw/catdir catfile/; -}
 LIBS=../libcrypto
 SOURCE[../libcrypto]=\
         cryptlib.c mem.c mem_dbg.c cversion.c ex_data.c cpt_err.c \
@@ -8,3 +9,44 @@ EXTRA=  ../ms/uplink-x86.pl ../ms/uplink.c ../ms/applink.c \
         ppccpuid.pl pariscid.pl alphacpuid.pl arm64cpuid.pl armv4cpuid.pl
 
 DEPEND[cversion.o]=buildinf.h
+
+BEGINRAW[descrip.mms]
+[.crypto]buildinf.h : descrip.mms
+	$(PERL) {- catfile(catdir($sourcedir, "[-]"), "util", "mkbuildinf.pl") -} "$(CC) $(CFLAGS)" "$(PLATFORM)" > [.crypto]buildinf.h
+ENDRAW[descrip.mms]
+
+BEGINRAW[Makefile]
+crypto/buildinf.h : Makefile
+	$(PERL) $(SRCDIR)/util/mkbuildinf.pl "$(CC) $(CFLAGS)" "$(PLATFORM)" > crypto/buildinf.h
+
+##### APPLINK, UPLINK and CPUID assembler implementations
+
+{- $builddir -}/applink.o:	$(SRCDIR)/ms/applink.c
+	$(CC) $(CFLAGS) -c -o $@ $(TOP)/ms/applink.c
+
+{- $builddir -}/uplink.o:	$(SRCDIR)/ms/uplink.c {- $builddir -}/applink.o
+	$(CC) $(CFLAGS) -c -o $@ $(TOP)/ms/uplink.c
+
+{- $builddir -}/uplink-x86.s:	$(SRCDIR)/ms/uplink-x86.pl
+	$(PERL) $(TOP)/ms/uplink-x86.pl $(PERLASM_SCHEME) > $@
+
+{- $builddir -}/x86cpuid.s:	{- $sourcedir -}/x86cpuid.pl {- $sourcedir -}/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/x86cpuid.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+
+{- $builddir -}/x86_64cpuid.s:	{- $sourcedir -}/x86_64cpuid.pl
+	$(PERL) {- $sourcedir -}/x86_64cpuid.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/ia64cpuid.s:	{- $sourcedir -}/ia64cpuid.S
+	$(CC) $(CFLAGS) -E {- $sourcedir -}/ia64cpuid.S > $@
+{- $builddir -}/ppccpuid.s:	{- $sourcedir -}/ppccpuid.pl
+	$(PERL) {- $sourcedir -}/ppccpuid.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/pariscid.s:	{- $sourcedir -}/pariscid.pl
+	$(PERL) {- $sourcedir -}/pariscid.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/alphacpuid.s:	{- $sourcedir -}/alphacpuid.pl
+	(preproc=$$$$.$@.S; trap "rm $$preproc" INT; \
+	$(PERL) {- $sourcedir -}/alphacpuid.pl > $$preproc && \
+	$(CC) -E -P $$preproc > $@ && rm $$preproc)
+{- $builddir -}/arm64cpuid.S:	{- $sourcedir -}/arm64cpuid.pl
+	$(PERL) {- $sourcedir -}/arm64cpuid.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/armv4cpuid.S:	{- $sourcedir -}/armv4cpuid.pl
+	$(PERL) {- $sourcedir -}/armv4cpuid.pl $(PERLASM_SCHEME) > $@
+ENDRAW[Makefile]
diff --git a/crypto/camellia/build.info b/crypto/camellia/build.info
index aeffc10..abd86b7 100644
--- a/crypto/camellia/build.info
+++ b/crypto/camellia/build.info
@@ -2,3 +2,12 @@ LIBS=../../libcrypto
 SOURCE[../../libcrypto]=\
         cmll_ecb.c cmll_ofb.c cmll_cfb.c cmll_ctr.c \
         {- $target{cmll_asm_src} -}
+
+BEGINRAW[Makefile]
+{- $builddir -}/cmll-x86.s:	{- $sourcedir -}/asm/cmll-x86.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/cmll-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+{- $builddir -}/cmll-x86_64.s:  {- $sourcedir -}/asm/cmll-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/cmll-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/cmllt4-sparcv9.s: {- $sourcedir -}/asm/cmllt4-sparcv9.pl {- $sourcetop -}/crypto/perlasm/sparcv9_modes.pl
+	$(PERL) {- $sourcedir -}/asm/cmllt4-sparcv9.pl $(CFLAGS) > $@
+ENDRAW[Makefile]
diff --git a/crypto/cast/build.info b/crypto/cast/build.info
index 27271c8..6c32fb1 100644
--- a/crypto/cast/build.info
+++ b/crypto/cast/build.info
@@ -1,3 +1,10 @@
 LIBS=../../libcrypto
 SOURCE[../../libcrypto]=\
         c_skey.c c_ecb.c {- $target{cast_asm_src} -} c_cfb64.c c_ofb64.c
+
+BEGINRAW[Makefile]
+##### CAST assembler implementations
+
+{- $builddir -}/cast-586.s:	{- $sourcedir -}/asm/cast-586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl {- $sourcetop -}/crypto/perlasm/cbc.pl
+	$(PERL)	{- $sourcedir -}/asm/cast-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+ENDRAW[Makefile]
diff --git a/crypto/chacha/build.info b/crypto/chacha/build.info
index 47e0536..c56c624 100644
--- a/crypto/chacha/build.info
+++ b/crypto/chacha/build.info
@@ -1,2 +1,14 @@
 LIBS=../../libcrypto
 SOURCE[../../libcrypto]={- $target{chacha_asm_src} -}
+
+BEGINRAW[Makefile(unix)]
+##### CHACHA assembler implementations
+
+{- $builddir -}/chacha-x86.s:		{- $sourcedir -}/asm/chacha-x86.pl
+	$(PERL) {- $sourcedir -}/asm/chacha-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+{- $builddir -}/chacha-x86_64.s:	{- $sourcedir -}/asm/chacha-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/chacha-x86_64.pl $(PERLASM_SCHEME) > $@
+
+{- $builddir -}/chacha-%.S:	{- $sourcedir -}/asm/chacha-%.pl
+	$(PERL) $< $(PERLASM_SCHEME) $@
+ENDRAW[Makefile(unix)]
diff --git a/crypto/crypto-lib.com b/crypto/crypto-lib.com
deleted file mode 100644
index 12b8204..0000000
--- a/crypto/crypto-lib.com
+++ /dev/null
@@ -1,1427 +0,0 @@
-$!
-$!  CRYPTO-LIB.COM
-$!  Written By:  Robert Byer
-$!               Vice-President
-$!               A-Com Computing, Inc.
-$!               byer at mail.all-net.net
-$!
-$!  Changes by Richard Levitte <richard at levitte.org>
-$!             Zoltan Arpadffy <arpadffy at polarhome.com>
-$!
-$!  This command files compiles and creates the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" 
-$!  library for OpenSSL.  The "xxx" denotes the machine architecture, ALPHA,
-$!  IA64 or VAX.
-$!
-$!  It was re-written so it would try to determine what "C" compiler to use 
-$!  or you can specify which "C" compiler to use.
-$!
-$!  Specify the following as P1 to build just that part or ALL to just
-$!  build everything.
-$!
-$!    	LIBRARY    To just compile the [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library.
-$!	ALL	   To do both LIBRARY and APPS
-$!
-$!  Specify DEBUG or NODEBUG as P2 to compile with or without debugger
-$!  information.
-$!
-$!  Specify which compiler at P3 to try to compile under.
-$!
-$!	VAXC	   For VAX C.
-$!	DECC	   For DEC C.
-$!	GNUC	   For GNU C.
-$!
-$!  If you don't specify a compiler, it will try to determine which
-$!  "C" compiler to use.
-$!
-$!  P4, if defined, sets a TCP/IP library to use, through one of the following
-$!  keywords:
-$!
-$!	UCX	   For UCX
-$!	TCPIP	   For TCPIP (post UCX)
-$!	SOCKETSHR  For SOCKETSHR+NETLIB
-$!
-$!  P5, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
-$!
-$!  P6, if defined, sets a choice of crypto methods to compile.
-$!  WARNING: this should only be done to recompile some part of an already
-$!  fully compiled library.
-$!
-$!  P7, 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).
-$!
-$!  P8, if defined, specifies a directory where ZLIB files (zlib.h,
-$!  libz.olb) may be found.  Optionally, a non-default object library
-$!  name may be included ("dev:[dir]libz_64.olb", for example).
-$!
-$!
-$! Announce/identify.
-$!
-$ proc = f$environment( "procedure")
-$ write sys$output "@@@ "+ -
-   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
-$!
-$! Define A TCP/IP Library That We Will Need To Link To.
-$! (That Is, If We Need To Link To One.)
-$!
-$ TCPIP_LIB = ""
-$ ZLIB_LIB = ""
-$!
-$! Check Which Architecture We Are Using.
-$!
-$ IF (F$GETSYI("CPU").LT.128)
-$ THEN
-$!
-$!  The Architecture Is VAX
-$!
-$   ARCH = "VAX"
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  The Architecture Is Alpha, IA64 or whatever comes in the future.
-$!
-$   ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
-$   IF (ARCH .EQS. "") THEN ARCH = "UNK"
-$!
-$! End The Architecture Check.
-$!
-$ ENDIF
-$!
-$ ARCHD = ARCH
-$ LIB32 = "32"
-$ OPT_FILE = ""
-$ POINTER_SIZE = ""
-$!
-$! Check if there's a SDIRS variable defined
-$!
-$ IF "''SDIRS'" .NES. ""
-$ THEN
-$!
-$!   If SDIRS was defined, define ENCRYPT_TYPES from it
-$!
-$     ENCRYPT_TYPES = "Basic,''SDIRS'"
-$!
-$! Otherwise
-$!
-$ ELSE
-$!
-$!   Define The Different Encryption Types.
-$!   NOTE: Some might think this list ugly.  However, it's made this way to
-$!   reflect the SDIRS variable in [-]Makefile.in as closely as possible,
-$!   thereby making it fairly easy to verify that the lists are the same.
-$!
-$   ET_WHIRLPOOL = "WHRLPOOL"
-$   IF ARCH .EQS. "VAX" THEN ET_WHIRLPOOL = ""
-$   ENCRYPT_TYPES = "Basic,"+ -
-		    "OBJECTS,"+ -
-		    "MD2,MD4,MD5,SHA,MDC2,HMAC,RIPEMD,"+ET_WHIRLPOOL+","+ -
-		    "DES,AES,RC2,RC4,RC5,IDEA,BF,CAST,CAMELLIA,SEED,MODES,"+ -
-		    "BN,EC,RSA,DSA,ECDSA,DH,ECDH,DSO,ENGINE,"+ -
-		    "BUFFER,BIO,STACK,LHASH,RAND,ERR,"+ -
-		    "EVP,ASN1,PEM,X509,X509V3,CONF,TXT_DB,PKCS7,PKCS12,COMP,OCSP,UI,"+ -
-		    "CMS,PQUEUE,TS,JPAKE,SRP,STORE,CMAC"
-$ ENDIF
-$!
-$! Check To Make Sure We Have Valid Command Line Parameters.
-$!
-$ GOSUB CHECK_OPTIONS
-$!
-$! Define The OBJ and EXE Directories.
-$!
-$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.CRYPTO]
-$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]
-$!
-$! Specify the destination directory in any /MAP option.
-$!
-$ if (LINKMAP .eqs. "MAP")
-$ then
-$   LINKMAP = LINKMAP+ "=''EXE_DIR'"
-$ endif
-$!
-$! Add the location prefix to the linker options file name.
-$!
-$ if (OPT_FILE .nes. "")
-$ then
-$   OPT_FILE = EXE_DIR+ OPT_FILE
-$ endif
-$!
-$! Initialise logical names and such
-$!
-$ GOSUB INITIALISE
-$!
-$! Tell The User What Kind of Machine We Run On.
-$!
-$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
-$!
-$!
-$! Check To See If The Architecture Specific OBJ Directory Exists.
-$!
-$ IF (F$PARSE(OBJ_DIR).EQS."")
-$ THEN
-$!
-$!  It Dosen't Exist, So Create It.
-$!
-$   CREATE/DIR 'OBJ_DIR'
-$!
-$! End The Architecture Specific OBJ Directory Check.
-$!
-$ ENDIF
-$!
-$! Check To See If The Architecture Specific Directory Exists.
-$!
-$ IF (F$PARSE(EXE_DIR).EQS."")
-$ THEN
-$!
-$!  It Dosen't Exist, So Create It.
-$!
-$   CREATE/DIRECTORY 'EXE_DIR'
-$!
-$! End The Architecture Specific Directory Check.
-$!
-$ ENDIF
-$!
-$! Define The Library Name.
-$!
-$ LIB_NAME := 'EXE_DIR'SSL_LIBCRYPTO'LIB32'.OLB
-$!
-$! Define The CRYPTO-LIB We Are To Use.
-$!
-$ CRYPTO_LIB := 'EXE_DIR'SSL_LIBCRYPTO'LIB32'.OLB
-$!
-$! Check To See If We Already Have A "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" Library...
-$!
-$ IF (F$SEARCH(LIB_NAME).EQS."")
-$ THEN
-$!
-$! Guess Not, Create The Library.
-$!
-$   LIBRARY/CREATE/OBJECT 'LIB_NAME'
-$!
-$! End The Library Check.
-$!
-$ ENDIF
-$!
-$! Build our options file for the application
-$!
-$ GOSUB CHECK_OPT_FILE
-$!
-$! Define The Different Encryption "library" Strings.
-$!
-$ LIB_ = "cryptlib,mem,mem_clr,mem_dbg,cversion,ex_data,cpt_err,"+ -
-	"ebcdic,uid,o_time,o_str,o_dir,thr_id,lock,"+ -
-	"o_init,o_fips"
-$ LIB_OBJECTS = "o_names,obj_dat,obj_lib,obj_err,obj_xref"
-$ LIB_MD2 = "md2_dgst,md2_one"
-$ LIB_MD4 = "md4_dgst,md4_one"
-$ LIB_MD5 = "md5_dgst,md5_one"
-$ LIB_SHA = "sha1dgst,sha1_one,sha256,sha512"
-$ LIB_MDC2 = "mdc2dgst,mdc2_one"
-$ LIB_HMAC = "hmac,hm_ameth,hm_pmeth"
-$ LIB_RIPEMD = "rmd_dgst,rmd_one"
-$ LIB_WHRLPOOL = "wp_dgst,wp_block"
-$ LIB_DES = "set_key,ecb_enc,cbc_enc,"+ -
-	"ecb3_enc,cfb64enc,cfb64ede,cfb_enc,ofb64ede,"+ -
-	"enc_read,enc_writ,ofb64enc,"+ -
-	"ofb_enc,str2key,pcbc_enc,qud_cksm,rand_key,"+ -
-	"des_enc,fcrypt_b,"+ -
-	"fcrypt,xcbc_enc,rpc_enc,cbc_cksm,"+ -
-	"read2pwd"
-$ LIB_AES = "aes_misc,aes_ecb,aes_cfb,aes_ofb,aes_ige,aes_wrap,"+ -
-	"aes_core,aes_cbc"
-$ LIB_RC2 = "rc2_ecb,rc2_skey,rc2_cbc,rc2cfb64,rc2ofb64"
-$ LIB_RC4 = "rc4_enc,rc4_skey"
-$ LIB_RC5 = "rc5_skey,rc5_ecb,rc5_enc,rc5cfb64,rc5ofb64"
-$ LIB_IDEA = "i_cbc,i_cfb64,i_ofb64,i_ecb,i_skey"
-$ LIB_BF = "bf_skey,bf_ecb,bf_enc,bf_cfb64,bf_ofb64"
-$ LIB_CAST = "c_skey,c_ecb,c_enc,c_cfb64,c_ofb64"
-$ LIB_CAMELLIA = "cmll_ecb,cmll_ofb,cmll_cfb,cmll_ctr,camellia,cmll_misc,cmll_cbc"
-$ LIB_SEED = "seed,seed_ecb,seed_cbc,seed_cfb,seed_ofb"
-$ LIB_MODES = "cbc128,ctr128,cts128,cfb128,ofb128,gcm128,"+ -
-	"ccm128,xts128,wrap128,ocb128"
-$ LIB_BN_ASM = "[.asm]vms.mar,vms-helper"
-$ IF F$TRNLNM("OPENSSL_NO_ASM") .OR. ARCH .NES. "VAX" THEN -
-     LIB_BN_ASM = "bn_asm"
-$ LIB_BN = "bn_add,bn_div,bn_exp,bn_lib,bn_ctx,bn_mul,bn_mod,"+ -
-	"bn_print,bn_rand,bn_shift,bn_word,bn_blind,"+ -
-	"bn_kron,bn_sqrt,bn_gcd,bn_prime,bn_err,bn_sqr,"+LIB_BN_ASM+","+ -
-	"bn_recp,bn_mont,bn_mpi,bn_exp2,bn_gf2m,bn_nist,"+ -
-	"bn_depr,bn_const,bn_x931p,bn_intern,bn_dh,bn_srp"
-$ LIB_EC = "ec_lib,ecp_smpl,ecp_mont,ecp_nist,ec_cvt,ec_mult,"+ -
-	"ec_err,ec_curve,ec_check,ec_print,ec_asn1,ec_key,"+ -
-	"ec2_smpl,ec2_mult,ec_ameth,ec_pmeth,eck_prn,"+ -
-	"ecp_nistp224,ecp_nistp256,ecp_nistp521,ecp_nistputil,"+ -
-	"ecp_oct,ec2_oct,ec_oct"
-$ LIB_RSA = "rsa_eay,rsa_gen,rsa_lib,rsa_sign,rsa_saos,rsa_err,"+ -
-	"rsa_pk1,rsa_ssl,rsa_none,rsa_oaep,rsa_chk,rsa_null,"+ -
-	"rsa_pss,rsa_x931,rsa_asn1,rsa_depr,rsa_ameth,rsa_prn,"+ -
-	"rsa_pmeth,rsa_crpt,rsa_x931g"
-$ LIB_DSA = "dsa_gen,dsa_key,dsa_lib,dsa_asn1,dsa_vrf,dsa_sign,"+ -
-	"dsa_err,dsa_ossl,dsa_depr,dsa_ameth,dsa_pmeth,dsa_prn"
-$ LIB_ECDSA = "ecs_lib,ecs_asn1,ecs_ossl,ecs_sign,ecs_vrf,ecs_err"
-$ LIB_DH = "dh_asn1,dh_gen,dh_key,dh_lib,dh_check,dh_err,dh_depr,"+ -
-	"dh_ameth,dh_pmeth,dh_prn,dh_rfc5114,dh_kdf"
-$ LIB_ECDH = "ech_lib,ech_ossl,ech_key,ech_err,ech_kdf"
-$ LIB_DSO = "dso_dl,dso_dlfcn,dso_err,dso_lib,dso_null,"+ -
-	"dso_openssl,dso_win32,dso_vms"
-$ LIB_ENGINE = "eng_err,eng_lib,eng_list,eng_init,eng_ctrl,"+ -
-	"eng_table,eng_pkey,eng_fat,eng_all,"+ -
-	"tb_rsa,tb_dsa,tb_ecdsa,tb_dh,tb_ecdh,tb_rand,tb_store,"+ -
-	"tb_cipher,tb_digest,tb_pkmeth,tb_asnmth,"+ -
-	"eng_openssl,eng_cnf,eng_dyn,eng_cryptodev,"+ -
-	"eng_rdrand"
-$ LIB_BUFFER = "buffer,buf_str,buf_err"
-$ LIB_BIO = "bio_lib,bio_cb,bio_err,"+ -
-	"bss_mem,bss_null,bss_fd,"+ -
-	"bss_file,bss_sock,bss_conn,"+ -
-	"bf_null,bf_buff,b_print,b_dump,"+ -
-	"b_sock,bss_acpt,bf_nbio,bss_log,bss_bio,"+ -
-	"bss_dgram,"+ -
-	"bf_lbuf"	! The last one is VMS specific
-$ LIB_STACK = "stack"
-$ LIB_LHASH = "lhash,lh_stats"
-$ LIB_RAND = "md_rand,randfile,rand_lib,rand_err,rand_egd,"+ -
-	"rand_win,rand_unix,rand_vms,rand_os2,rand_nw"
-$ LIB_ERR = "err,err_all,err_prn"
-$ LIB_EVP_1 = "encode,digest,evp_enc,evp_key,evp_acnf,evp_cnf,"+ -
-	"e_des,e_bf,e_idea,e_des3,e_camellia,"+ -
-	"e_rc4,e_aes,names,e_seed,"+ -
-	"e_xcbc_d,e_rc2,e_cast,e_rc5"
-$ LIB_EVP_2 = "m_null,m_md2,m_md4,m_md5,m_sha1,m_wp," + -
-	"m_dss1,m_mdc2,m_ripemd,m_ecdsa,"+ -
-	"p_open,p_seal,p_sign,p_verify,p_lib,p_enc,p_dec,"+ -
-	"bio_md,bio_b64,bio_enc,evp_err,e_null,"+ -
-	"c_all,c_allc,c_alld,evp_lib,bio_ok,"+-
-	"evp_pkey,evp_pbe,p5_crpt,p5_crpt2"
-$ LIB_EVP_3 = "e_old,pmeth_lib,pmeth_fn,pmeth_gn,m_sigver,"+ -
-	"e_aes_cbc_hmac_sha1,e_aes_cbc_hmac_sha256,e_rc4_hmac_md5"
-$ LIB_ASN1_1 = "a_object,a_bitstr,a_utctm,a_gentm,a_time,a_int,a_octet,"+ -
-	"a_print,a_type,a_set,a_dup,a_d2i_fp,a_i2d_fp,"+ -
-	"a_enum,a_utf8,a_sign,a_digest,a_verify,a_mbstr,a_strex,"+ -
-	"x_algor,x_val,x_pubkey,x_sig,x_req,x_attrib,x_bignum,"+ -
-	"x_long,x_name,x_x509,x_x509a,x_crl,x_info,x_spki,nsseq,"+ -
-	"d2i_pu,d2i_pr,i2d_pu,i2d_pr"
-$ LIB_ASN1_2 = "t_req,t_x509,t_x509a,t_crl,t_pkey,t_spki,t_bitst,"+ -
-	"tasn_new,tasn_fre,tasn_enc,tasn_dec,tasn_utl,tasn_typ,"+ -
-	"tasn_prn,tasn_scn,ameth_lib,"+ -
-	"f_int,f_string,n_pkey,"+ -
-	"f_enum,x_pkey,a_bool,x_exten,bio_asn1,bio_ndef,asn_mime,"+ -
-	"asn1_gen,asn1_par,asn1_lib,asn1_err,a_bytes,a_strnid,"+ -
-	"evp_asn1,asn_pack,p5_pbe,p5_pbev2,p8_pkey,asn_moid,"+ -
-	"asn_mstbl"
-$ LIB_PEM = "pem_sign,pem_seal,pem_info,pem_lib,pem_all,pem_err,"+ -
-	"pem_x509,pem_xaux,pem_oth,pem_pk8,pem_pkey,pvkfmt"
-$ LIB_X509 = "x509_def,x509_d2,x509_r2x,x509_cmp,"+ -
-	"x509_obj,x509_req,x509spki,x509_vfy,"+ -
-	"x509_set,x509cset,x509rset,x509_err,"+ -
-	"x509name,x509_v3,x509_ext,x509_att,"+ -
-	"x509type,x509_lu,x_all,x509_txt,"+ -
-	"x509_trs,by_file,by_dir,x509_vpm"
-$ LIB_X509V3 = "v3_bcons,v3_bitst,v3_conf,v3_extku,v3_ia5,v3_lib,"+ -
-	"v3_prn,v3_utl,v3err,v3_genn,v3_alt,v3_skey,v3_akey,v3_pku,"+ -
-	"v3_int,v3_enum,v3_sxnet,v3_cpols,v3_crld,v3_purp,v3_info,"+ -
-	"v3_akeya,v3_pmaps,v3_pcons,v3_ncons,v3_pcia,v3_pci,"+ -
-	"pcy_cache,pcy_node,pcy_data,pcy_map,pcy_tree,pcy_lib,"+ -
-	"v3_asid,v3_addr,v3_scts"
-$ LIB_CONF = "conf_err,conf_lib,conf_api,conf_def,conf_mod,conf_mall,conf_sap"
-$ LIB_TXT_DB = "txt_db"
-$ LIB_PKCS7 = "pk7_asn1,pk7_lib,pkcs7err,pk7_doit,pk7_smime,pk7_attr,"+ -
-	"pk7_mime,bio_pk7"
-$ LIB_PKCS12 = "p12_add,p12_asn,p12_attr,p12_crpt,p12_crt,p12_decr,"+ -
-	"p12_init,p12_key,p12_kiss,p12_mutl,"+ -
-	"p12_utl,p12_npas,pk12err,p12_p8d,p12_p8e"
-$ LIB_COMP = "comp_lib,comp_err,"+ -
-	"c_zlib"
-$ LIB_OCSP = "ocsp_asn,ocsp_ext,ocsp_ht,ocsp_lib,ocsp_cl,"+ -
-	"ocsp_srv,ocsp_prn,ocsp_vfy,ocsp_err,v3_ocsp"
-$ LIB_UI = "ui_err,ui_lib,ui_openssl,ui_util"
-$ LIB_CMS = "cms_lib,cms_asn1,cms_att,cms_io,cms_smime,cms_err,"+ -
-	"cms_sd,cms_dd,cms_cd,cms_env,cms_enc,cms_ess,"+ -
-	"cms_pwri,cms_kari"
-$ LIB_PQUEUE = "pqueue"
-$ LIB_TS = "ts_err,ts_req_utils,ts_req_print,ts_rsp_utils,ts_rsp_print,"+ -
-	"ts_rsp_sign,ts_rsp_verify,ts_verify_ctx,ts_lib,ts_conf,"+ -
-	"ts_asn1"
-$ LIB_JPAKE = "jpake,jpake_err"
-$ LIB_SRP = "srp_lib,srp_vfy"
-$ LIB_STORE = "str_err,str_lib,str_meth,str_mem"
-$ LIB_CMAC = "cmac,cm_ameth,cm_pmeth"
-$!
-$! Setup exceptional compilations
-$!
-$ CC3_SHOWN = 0
-$ CC4_SHOWN = 0
-$ CC5_SHOWN = 0
-$ CC6_SHOWN = 0
-$!
-$! The following lists must have leading and trailing commas, and no
-$! embedded spaces.  (They are scanned for ",name,".)
-$!
-$ ! Add definitions for no threads on OpenVMS 7.1 and higher.
-$ COMPILEWITH_CC3 = ",bss_rtcp,"
-$ ! Disable the DOLLARID warning.  Not needed with /STANDARD=RELAXED.
-$ COMPILEWITH_CC4 = "" !!! ",a_utctm,bss_log,o_time,o_dir,"
-$ ! Disable disjoint optimization on VAX with DECC.
-$ COMPILEWITH_CC5 = ",md2_dgst,md4_dgst,md5_dgst,mdc2dgst," + -
-                    "seed,sha_dgst,sha1dgst,rmd_dgst,bf_enc,"
-$ ! Disable the MIXLINKAGE warning.
-$ COMPILEWITH_CC6 = "" !!! ",enc_read,set_key,"
-$!
-$! Figure Out What Other Modules We Are To Build.
-$!
-$ BUILD_SET:
-$!
-$! Define A Module Counter.
-$!
-$ MODULE_COUNTER = 0
-$!
-$! Top Of The Loop.
-$!
-$ MODULE_NEXT:
-$!
-$! Extract The Module Name From The Encryption List.
-$!
-$ MODULE_NAME = F$ELEMENT(MODULE_COUNTER,",",ENCRYPT_TYPES)
-$!
-$! Check To See If We Are At The End Of The Module List.
-$!
-$ IF (MODULE_NAME.EQS.",") 
-$ THEN 
-$!
-$!  We Are At The End Of The Module List, Go To MODULE_DONE.
-$!
-$   GOTO MODULE_DONE
-$!
-$! End The Module List Check.
-$!
-$ ENDIF
-$!
-$! Increment The Moudle Counter.
-$!
-$ MODULE_COUNTER = MODULE_COUNTER + 1
-$
-$ IF MODULE_NAME.EQS."" THEN GOTO MODULE_NEXT
-$ MODULE_NAME1 = MODULE_NAME
-$ IF MODULE_NAME.EQS."Basic" THEN MODULE_NAME = ""
-$!
-$! Check if the library module name actually is defined
-$!
-$ PART_COUNTER = -1
-$ IF F$TYPE(LIB_'MODULE_NAME'_1) .NES. ""
-$ THEN
-$   PART_COUNTER = 1
-$ ELSE
-$   IF F$TYPE(LIB_'MODULE_NAME') .EQS. ""
-$   THEN
-$     WRITE SYS$ERROR ""
-$     WRITE SYS$ERROR "The module ",MODULE_NAME1," does not exist.  Continuing..."
-$     WRITE SYS$ERROR ""
-$     GOTO MODULE_NEXT
-$   ENDIF
-$ ENDIF
-$!
-$! Tell The User What Module We Are Building.
-$!
-$ WRITE SYS$OUTPUT "Compiling The ",MODULE_NAME1," Library Files. (",BUILDALL,")"
-$!
-$! Create The Library Module Names.
-$!
-$ PART_NEXT:
-$ IF PART_COUNTER .EQ. 0 THEN GOTO MODULE_NEXT
-$
-$ IF PART_COUNTER .LT. 0
-$ THEN
-$   LIB_MODULE = "LIB_" + MODULE_NAME
-$ ELSE
-$   LIB_MODULE = "LIB_" + MODULE_NAME + "_''PART_COUNTER'"
-$ ENDIF
-$!
-$! If there are no more parts, go to the next module
-$!
-$ IF F$TYPE('LIB_MODULE') .EQS. "" THEN GOTO MODULE_NEXT
-$!
-$! Increment The Counter.
-$!
-$ PART_COUNTER = PART_COUNTER + 1
-$!
-$!  Define A File Counter And Set It To "0".
-$!
-$ FILE_COUNTER = 0
-$!
-$! Top Of The File Loop.
-$!
-$ NEXT_FILE:
-$!
-$! Extract The File Name From The File List.
-$!
-$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",'LIB_MODULE')
-$!
-$! Check To See If We Are At The End Of The File List.
-$!
-$ IF (FILE_NAME.EQS.",") 
-$ THEN 
-$!
-$!  We Are At The End Of The File List, Goto FILE_DONE.
-$!
-$   GOTO FILE_DONE
-$!
-$! End The File List Check.
-$!
-$ ENDIF
-$!
-$! Increment The Counter.
-$!
-$ FILE_COUNTER = FILE_COUNTER + 1
-$!
-$! Create The Source File Name.
-$!
-$ TMP_FILE_NAME = F$ELEMENT(1,"]",FILE_NAME)
-$ IF TMP_FILE_NAME .EQS. "]" THEN TMP_FILE_NAME = FILE_NAME
-$ IF F$ELEMENT(0,".",TMP_FILE_NAME) .EQS. TMP_FILE_NAME THEN -
-	FILE_NAME = FILE_NAME + ".c"
-$ IF (MODULE_NAME.NES."")
-$ THEN
-$   SOURCE_FILE = "SYS$DISK:[." + MODULE_NAME+ "]" + FILE_NAME
-$ ELSE
-$   SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME
-$ ENDIF
-$ SOURCE_FILE = SOURCE_FILE - "]["
-$!
-$! Create The Object File Name.
-$!
-$ OBJECT_FILE = OBJ_DIR + F$PARSE(FILE_NAME,,,"NAME","SYNTAX_ONLY") + ".OBJ"
-$ ON WARNING THEN GOTO NEXT_FILE
-$!
-$! Check To See If The File We Want To Compile Is Actually There.
-$!
-$ IF (F$SEARCH(SOURCE_FILE).EQS."")
-$ THEN
-$!
-$!  Tell The User That The File Doesn't Exist.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Doesn't Exist."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Exit The Build.
-$!
-$   GOTO EXIT
-$!
-$! End The File Exist Check.
-$!
-$ ENDIF
-$!
-$! Tell The User We Are Compiling The File.
-$!
-$ WRITE SYS$OUTPUT "        ",FILE_NAME,""
-$!
-$! Compile The File.
-$!
-$ ON ERROR THEN GOTO NEXT_FILE
-$ FILE_NAME0 = ","+ F$ELEMENT(0,".",FILE_NAME)+ ","
-$ IF FILE_NAME - ".mar" .NES. FILE_NAME
-$ THEN
-$   MACRO/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
-$ ELSE
-$   IF COMPILEWITH_CC3 - FILE_NAME0 .NES. COMPILEWITH_CC3
-$   THEN
-$     write sys$output "        \Using special rule (3)"
-$     if (.not. CC3_SHOWN)
-$     then
-$       CC3_SHOWN = 1
-$       x = "    "+ CC3
-$       write /symbol sys$output x
-$     endif
-$     CC3/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
-$   ELSE
-$     IF COMPILEWITH_CC4 - FILE_NAME0 .NES. COMPILEWITH_CC4
-$     THEN
-$       write /symbol sys$output "        \Using special rule (4)"
-$       if (.not. CC4_SHOWN)
-$       then
-$         CC4_SHOWN = 1
-$         x = "    "+ CC4
-$         write /symbol sys$output x
-$       endif
-$       CC4/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
-$     ELSE
-$       IF CC5_DIFFERENT .AND. -
-         (COMPILEWITH_CC5 - FILE_NAME0 .NES. COMPILEWITH_CC5)
-$       THEN
-$         write sys$output "        \Using special rule (5)"
-$         if (.not. CC5_SHOWN)
-$         then
-$           CC5_SHOWN = 1
-$           x = "    "+ CC5
-$           write /symbol sys$output x
-$         endif
-$         CC5/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
-$       ELSE
-$         IF COMPILEWITH_CC6 - FILE_NAME0 .NES. COMPILEWITH_CC6
-$         THEN
-$           write sys$output "        \Using special rule (6)"
-$           if (.not. CC6_SHOWN)
-$           then
-$             CC6_SHOWN = 1
-$             x = "    "+ CC6
-$             write /symbol sys$output x
-$           endif
-$           CC6/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
-$         ELSE
-$           CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
-$         ENDIF
-$       ENDIF
-$     ENDIF
-$   ENDIF
-$ ENDIF
-$!
-$! Add It To The Library.
-$!
-$ LIBRARY/REPLACE 'LIB_NAME' 'OBJECT_FILE'
-$!
-$! Time To Clean Up The Object File.
-$!
-$ DELETE 'OBJECT_FILE';*
-$!
-$! Go Back And Do It Again.
-$!
-$ GOTO NEXT_FILE
-$!
-$! All Done With This Library Part.
-$!
-$ FILE_DONE:
-$!
-$! Go Back And Get The Next Part.
-$!
-$ GOTO PART_NEXT
-$!
-$! All Done With This Module.
-$!
-$ MODULE_DONE:
-$!
-$! Tell The User That We Are All Done.
-$!
-$ WRITE SYS$OUTPUT "All Done..."
-$ EXIT:
-$ GOSUB CLEANUP
-$ EXIT
-$!
-$! Check For The Link Option FIle.
-$!
-$ CHECK_OPT_FILE:
-$!
-$! Check To See If We Need To Make A VAX C Option File.
-$!
-$ IF (COMPILER.EQS."VAXC")
-$ THEN
-$!
-$!  Check To See If We Already Have A VAX C Linker Option File.
-$!
-$   IF (F$SEARCH(OPT_FILE).EQS."")
-$   THEN
-$!
-$!    We Need A VAX C Linker Option File.
-$!
-$     CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File To Link Against 
-! The Sharable VAX C Runtime Library.
-!
-SYS$SHARE:VAXCRTL.EXE/SHARE
-$EOD
-$!
-$!  End The Option File Check.
-$!
-$   ENDIF
-$!
-$! End The VAXC Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Need A GNU C Option File.
-$!
-$ IF (COMPILER.EQS."GNUC")
-$ THEN
-$!
-$!  Check To See If We Already Have A GNU C Linker Option File.
-$!
-$   IF (F$SEARCH(OPT_FILE).EQS."")
-$   THEN
-$!
-$!    We Need A GNU C Linker Option File.
-$!
-$     CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File To Link Against 
-! The Sharable C Runtime Library.
-!
-GNU_CC:[000000]GCCLIB/LIBRARY
-SYS$SHARE:VAXCRTL/SHARE
-$EOD
-$!
-$!  End The Option File Check.
-$!
-$   ENDIF
-$!
-$! End The GNU C Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Need A DEC C Option File.
-$!
-$ IF (COMPILER.EQS."DECC")
-$ THEN
-$!
-$!  Check To See If We Already Have A DEC C Linker Option File.
-$!
-$   IF (F$SEARCH(OPT_FILE).EQS."")
-$   THEN
-$!
-$!    Figure Out If We Need A non-VAX Or A VAX Linker Option File.
-$!
-$     IF ARCH .EQS. "VAX"
-$     THEN
-$!
-$!      We Need A DEC C Linker Option File For VAX.
-$!
-$       CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File To Link Against 
-! The Sharable DEC C Runtime Library.
-!
-SYS$SHARE:DECC$SHR.EXE/SHARE
-$EOD
-$!
-$!    Else...
-$!
-$     ELSE
-$!
-$!      Create The non-VAX Linker Option File.
-$!
-$       CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File For non-VAX To Link Against 
-! The Sharable C Runtime Library.
-!
-SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
-SYS$SHARE:CMA$OPEN_RTL/SHARE
-$EOD
-$!
-$!    End The DEC C Option File Check.
-$!
-$     ENDIF
-$!
-$!  End The Option File Search.
-$!
-$   ENDIF
-$!
-$! End The DEC C Check.
-$!
-$ ENDIF
-$!
-$!  Tell The User What Linker Option File We Are Using.
-$!
-$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."
-$!
-$! Time To RETURN.
-$!
-$ RETURN
-$!
-$! Check The User's Options.
-$!
-$ CHECK_OPTIONS:
-$!
-$! Check To See If P1 Is Blank.
-$!
-$ IF (P1.EQS."ALL")
-$ THEN
-$!
-$!   P1 Is Blank, So Build Everything.
-$!
-$    BUILDALL = "TRUE"
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  Else, Check To See If P1 Has A Valid Argument.
-$!
-$   IF (P1.EQS."LIBRARY")
-$   THEN
-$!
-$!    A Valid Argument.
-$!
-$     BUILDALL = P1
-$!
-$!  Else...
-$!
-$   ELSE
-$!
-$!    Tell The User We Don't Know What They Want.
-$!
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "    ALL      :  Just Build Everything."
-$     WRITE SYS$OUTPUT "    LIBRARY  :  To Compile Just The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library."
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "    ALPHA[64]:  Alpha Architecture."
-$     WRITE SYS$OUTPUT "    IA64[64] :  IA64 Architecture."
-$     WRITE SYS$OUTPUT "    VAX      :  VAX Architecture."
-$     WRITE SYS$OUTPUT ""
-$!
-$!    Time To EXIT.
-$!
-$     EXIT
-$!
-$!  End The Valid Argument Check.
-$!
-$   ENDIF
-$!
-$! End The P1 Check.
-$!
-$ ENDIF
-$!
-$! Check To See If P2 Is Blank.
-$!
-$ IF (P2.EQS."NODEBUG")
-$ THEN
-$!
-$!  P2 Is NODEBUG, So Compile Without The Debugger Information.
-$!
-$   DEBUGGER = "NODEBUG"
-$   LINKMAP = "NOMAP"
-$   TRACEBACK = "NOTRACEBACK" 
-$   GCC_OPTIMIZE = "OPTIMIZE"
-$   CC_OPTIMIZE = "OPTIMIZE"
-$   MACRO_OPTIMIZE = "OPTIMIZE"
-$   WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
-$   WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
-$ ELSE
-$!
-$!  Check To See If We Are To Compile With Debugger Information.
-$!
-$   IF (P2.EQS."DEBUG")
-$   THEN
-$!
-$!    Compile With Debugger Information.
-$!
-$     DEBUGGER = "DEBUG"
-$     LINKMAP = "MAP"
-$     TRACEBACK = "TRACEBACK"
-$     GCC_OPTIMIZE = "NOOPTIMIZE"
-$     CC_OPTIMIZE = "NOOPTIMIZE"
-$     MACRO_OPTIMIZE = "NOOPTIMIZE"
-$     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
-$     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
-$   ELSE 
-$!
-$!    They Entered An Invalid Option.
-$!
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "     DEBUG   :  Compile With The Debugger Information."
-$     WRITE SYS$OUTPUT "     NODEBUG :  Compile Without The Debugger Information."
-$     WRITE SYS$OUTPUT ""
-$!
-$!    Time To EXIT.
-$!
-$     EXIT
-$!
-$!  End The Valid Argument Check.
-$!
-$   ENDIF
-$!
-$! End The P2 Check.
-$!
-$ ENDIF
-$!
-$! Special Threads For OpenVMS v7.1 Or Later
-$!
-$! Written By:  Richard Levitte
-$!              richard at levitte.org
-$!
-$!
-$! Check To See If We Have A Option For P5.
-$!
-$ IF (P5.EQS."")
-$ THEN
-$!
-$!  Get The Version Of VMS We Are Using.
-$!
-$   ISSEVEN :=
-$   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
-$   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
-$!
-$!  Check To See If The VMS Version Is v7.1 Or Later.
-$!
-$   IF (TMP.GE.71)
-$   THEN
-$!
-$!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
-$!
-$     ISSEVEN := ,PTHREAD_USE_D4
-$!
-$!  End The VMS Version Check.
-$!
-$   ENDIF
-$!
-$! End The P5 Check.
-$!
-$ ENDIF
-$!
-$! Check P7 (POINTER_SIZE).
-$!
-$ IF (P7 .NES. "") .AND. (ARCH .NES. "VAX")
-$ THEN
-$!
-$   IF (P7 .EQS. "32")
-$   THEN
-$     POINTER_SIZE = " /POINTER_SIZE=32"
-$   ELSE
-$     POINTER_SIZE = F$EDIT( P7, "COLLAPSE, UPCASE")
-$     IF ((POINTER_SIZE .EQS. "64") .OR. -
-       (POINTER_SIZE .EQS. "64=") .OR. -
-       (POINTER_SIZE .EQS. "64=ARGV"))
-$     THEN
-$       ARCHD = ARCH+ "_64"
-$       LIB32 = ""
-$       POINTER_SIZE = " /POINTER_SIZE=64"
-$     ELSE
-$!
-$!      Tell The User Entered An Invalid Option.
-$!
-$       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 (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.
-$!
-$       EXIT
-$!
-$     ENDIF
-$!
-$   ENDIF
-$!
-$! End The P7 (POINTER_SIZE) Check.
-$!
-$ ENDIF
-$!
-$! Set basic C compiler /INCLUDE directories.
-$!
-$ CC_INCLUDES = "SYS$DISK:[.''ARCHD'],SYS$DISK:[],SYS$DISK:[-],"+ -
-   "SYS$DISK:[.ENGINE.VENDOR_DEFNS],SYS$DISK:[.EVP],SYS$DISK:[.ASN1],"+ -
-   "SYS$DISK:[.MODES]"
-$!
-$! Check To See If P3 Is Blank.
-$!
-$ IF (P3.EQS."")
-$ THEN
-$!
-$!  O.K., The User Didn't Specify A Compiler, Let's Try To
-$!  Find Out Which One To Use.
-$!
-$!  Check To See If We Have GNU C.
-$!
-$   IF (F$TRNLNM("GNU_CC").NES."")
-$   THEN
-$!
-$!    Looks Like GNUC, Set To Use GNUC.
-$!
-$     P3 = "GNUC"
-$!
-$!  Else...
-$!
-$   ELSE
-$!
-$!    Check To See If We Have VAXC Or DECC.
-$!
-$     IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
-$     THEN 
-$!
-$!      Looks Like DECC, Set To Use DECC.
-$!
-$       P3 = "DECC"
-$!
-$!    Else...
-$!
-$     ELSE
-$!
-$!      Looks Like VAXC, Set To Use VAXC.
-$!
-$       P3 = "VAXC"
-$!
-$!    End The VAXC Compiler Check.
-$!
-$     ENDIF
-$!
-$!  End The DECC & VAXC Compiler Check.
-$!
-$   ENDIF
-$!
-$!  End The Compiler Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Have A Option For P4.
-$!
-$ IF (P4.EQS."")
-$ THEN
-$!
-$!  Find out what socket library we have available
-$!
-$   IF F$PARSE("SOCKETSHR:") .NES. ""
-$   THEN
-$!
-$!    We have SOCKETSHR, and it is my opinion that it's the best to use.
-$!
-$     P4 = "SOCKETSHR"
-$!
-$!    Tell the user
-$!
-$     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
-$!
-$!    Else, let's look for something else
-$!
-$   ELSE
-$!
-$!    Like UCX (the reason to do this before Multinet is that the UCX
-$!    emulation is easier to use...)
-$!
-$     IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
-	 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
-	 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
-$     THEN
-$!
-$!	Last resort: a UCX or UCX-compatible library
-$!
-$	P4 = "UCX"
-$!
-$!      Tell the user
-$!
-$       WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
-$!
-$!	That was all...
-$!
-$     ENDIF
-$   ENDIF
-$ ENDIF
-$!
-$! Set Up Initial CC Definitions, Possibly With User Ones
-$!
-$ CCDEFS = "TCPIP_TYPE_''P4',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,FOUNDCR"
-$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
-	CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
-$!
-$! Check To See If We Have A ZLIB Option.
-$!
-$ ZLIB = P8
-$ IF (ZLIB .NES. "")
-$ THEN
-$!
-$!  Check for expected ZLIB files.
-$!
-$   err = 0
-$   file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
-$   if (f$search( file1) .eqs. "")
-$   then
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
-$     WRITE SYS$OUTPUT "    Can't find header: ''file1'"
-$     err = 1
-$   endif
-$   file1 = f$parse( "A.;", ZLIB)- "A.;"
-$!
-$   file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
-$   if (f$search( file2) .eqs. "")
-$   then
-$     if (err .eq. 0)
-$     then
-$       WRITE SYS$OUTPUT ""
-$       WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
-$     endif
-$     WRITE SYS$OUTPUT "    Can't find library: ''file2'"
-$     WRITE SYS$OUTPUT ""
-$     err = err+ 2
-$   endif
-$   if (err .eq. 1)
-$   then
-$     WRITE SYS$OUTPUT ""
-$   endif
-$!
-$   if (err .ne. 0)
-$   then
-$     EXIT
-$   endif
-$!
-$   CCDEFS = """ZLIB=1"", "+ CCDEFS
-$   CC_INCLUDES = CC_INCLUDES+ ", "+ file1
-$   ZLIB_LIB = ", ''file2' /library"
-$!
-$!  Print info
-$!
-$   WRITE SYS$OUTPUT "ZLIB library spec: ", file2
-$!
-$! End The ZLIB Check.
-$!
-$ ENDIF
-$!
-$!  Check To See If The User Entered A Valid Parameter.
-$!
-$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
-$ THEN
-$!
-$!    Check To See If The User Wanted DECC.
-$!
-$   IF (P3.EQS."DECC")
-$   THEN
-$!
-$!    Looks Like DECC, Set To Use DECC.
-$!
-$     COMPILER = "DECC"
-$!
-$!    Tell The User We Are Using DECC.
-$!
-$     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
-$!
-$!    Use DECC...
-$!
-$     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" + -
-       " /INCLUDE=(''CC_INCLUDES')"+ -
-       CCEXTRAFLAGS
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_DECC_OPTIONS.OPT"
-$!
-$!  End DECC Check.
-$!
-$   ENDIF
-$!
-$!  Check To See If We Are To Use VAXC.
-$!
-$   IF (P3.EQS."VAXC")
-$   THEN
-$!
-$!    Looks Like VAXC, Set To Use VAXC.
-$!
-$     COMPILER = "VAXC"
-$!
-$!    Tell The User We Are Using VAX C.
-$!
-$     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
-$!
-$!    Compile Using VAXC.
-$!
-$     CC = "CC"
-$     IF ARCH.NES."VAX"
-$     THEN
-$	WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
-$	EXIT
-$     ENDIF
-$     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
-$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
-       "/INCLUDE=(''CC_INCLUDES')"+ -
-	   CCEXTRAFLAGS
-$     CCDEFS = """VAXC""," + CCDEFS
-$!
-$!    Define <sys> As SYS$COMMON:[SYSLIB]
-$!
-$     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
-$!
-$!  End VAXC Check
-$!
-$   ENDIF
-$!
-$!  Check To See If We Are To Use GNU C.
-$!
-$   IF (P3.EQS."GNUC")
-$   THEN
-$!
-$!    Looks Like GNUC, Set To Use GNUC.
-$!
-$     COMPILER = "GNUC"
-$!
-$!    Tell The User We Are Using GNUC.
-$!
-$     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
-$!
-$!    Use GNU C...
-$!
-$     CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
-       "/INCLUDE=(''CC_INCLUDES')"+ -
-	   CCEXTRAFLAGS
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
-$!
-$!  End The GNU C Check.
-$!
-$   ENDIF
-$!
-$!  Set up default defines
-$!
-$   CCDEFS = """FLAT_INC=1""," + CCDEFS
-$!
-$!  Finish up the definition of CC.
-$!
-$   IF COMPILER .EQS. "DECC"
-$   THEN
-$     IF CCDISABLEWARNINGS .EQS. ""
-$     THEN
-$       CC4DISABLEWARNINGS = "DOLLARID"
-$       CC6DISABLEWARNINGS = "MIXLINKAGE"
-$     ELSE
-$       CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
-$       CC6DISABLEWARNINGS = CCDISABLEWARNINGS + ",MIXLINKAGE"
-$       CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
-$     ENDIF
-$     CC4DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
-$     CC6DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC6DISABLEWARNINGS + "))"
-$   ELSE
-$     CCDISABLEWARNINGS = ""
-$     CC4DISABLEWARNINGS = ""
-$     CC6DISABLEWARNINGS = ""
-$   ENDIF
-$   CC3 = CC + " /DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS
-$   CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
-$   IF ARCH .EQS. "VAX" .AND. COMPILER .EQS. "DECC" .AND. P2 .NES. "DEBUG"
-$   THEN
-$     CC5 = CC + " /OPTIMIZE=NODISJOINT"
-$     CC5_DIFFERENT = 1
-$   ELSE
-$     CC5 = CC
-$     CC5_DIFFERENT = 0
-$   ENDIF
-$   CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS
-$   CC6 = CC - CCDISABLEWARNINGS + CC6DISABLEWARNINGS
-$!
-$!  Show user the result
-$!
-$   WRITE/SYMBOL SYS$OUTPUT "Main C Compiling Command: ",CC
-$!
-$!  Else The User Entered An Invalid Argument.
-$!
-$ ELSE
-$!
-$!  Tell The User We Don't Know What They Want.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
-$   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
-$   WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Time To EXIT.
-$!
-$   EXIT
-$!
-$! End The Valid Argument Check.
-$!
-$ ENDIF
-$!
-$! Build a MACRO command for the architecture at hand
-$!
-$ IF ARCH .EQS. "VAX" THEN MACRO = "MACRO/''DEBUGGER'"
-$ IF ARCH .NES. "VAX" THEN MACRO = "MACRO/MIGRATION/''DEBUGGER'/''MACRO_OPTIMIZE'"
-$!
-$!  Show user the result
-$!
-$   WRITE/SYMBOL SYS$OUTPUT "Main MACRO Compiling Command: ",MACRO
-$!
-$! Time to check the contents, and to make sure we get the correct library.
-$!
-$ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX" -
-     .OR. P4.EQS."TCPIP" .OR. P4.EQS."NONE"
-$ THEN
-$!
-$!  Check to see if SOCKETSHR was chosen
-$!
-$   IF P4.EQS."SOCKETSHR"
-$   THEN
-$!
-$!    Set the library to use SOCKETSHR
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
-$!
-$!    Done with SOCKETSHR
-$!
-$   ENDIF
-$!
-$!  Check to see if MULTINET was chosen
-$!
-$   IF P4.EQS."MULTINET"
-$   THEN
-$!
-$!    Set the library to use UCX emulation.
-$!
-$     P4 = "UCX"
-$!
-$!    Done with MULTINET
-$!
-$   ENDIF
-$!
-$!  Check to see if UCX was chosen
-$!
-$   IF P4.EQS."UCX"
-$   THEN
-$!
-$!    Set the library to use UCX.
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
-$     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
-$     THEN
-$       TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
-$     ELSE
-$       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
-	  TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
-$     ENDIF
-$!
-$!    Done with UCX
-$!
-$   ENDIF
-$!
-$!  Check to see if TCPIP was chosen
-$!
-$   IF P4.EQS."TCPIP"
-$   THEN
-$!
-$!    Set the library to use TCPIP (post UCX).
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
-$!
-$!    Done with TCPIP
-$!
-$   ENDIF
-$!
-$!  Check to see if NONE was chosen
-$!
-$   IF P4.EQS."NONE"
-$   THEN
-$!
-$!    Do not use a TCPIP library.
-$!
-$     TCPIP_LIB = ""
-$!
-$!    Done with TCPIP
-$!
-$   ENDIF
-$!
-$!  Print info
-$!
-$   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
-$!
-$!  Else The User Entered An Invalid Argument.
-$!
-$ ELSE
-$!
-$!  Tell The User We Don't Know What They Want.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The Option ",P4," Is Invalid.  The Valid Options Are:"
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
-$   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
-$   WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP (post UCX) TCP/IP library."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Time To EXIT.
-$!
-$   EXIT
-$!
-$!  Done with TCP/IP libraries
-$!
-$ ENDIF
-$!
-$! Check if the user wanted to compile just a subset of all the encryption
-$! methods.
-$!
-$ IF P6 .NES. ""
-$ THEN
-$   ENCRYPT_TYPES = P6
-$ ENDIF
-$!
-$!  Time To RETURN...
-$!
-$ RETURN
-$!
-$ INITIALISE:
-$!
-$! Save old value of the logical name OPENSSL
-$!
-$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
-$!
-$! Save directory information
-$!
-$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
-$ __HERE = F$EDIT(__HERE,"UPCASE")
-$ __TOP = __HERE - "CRYPTO]"
-$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
-$ __INTERNAL = __TOP + "CRYPTO.INCLUDE.INTERNAL]"
-$!
-$! Set up the logical name OPENSSL to point at the include directory
-$!
-$ DEFINE OPENSSL/NOLOG '__INCLUDE'
-$ DEFINE INTERNAL/NOLOG '__INTERNAL'
-$!
-$! Done
-$!
-$ RETURN
-$!
-$ CLEANUP:
-$!
-$! Restore the logical name OPENSSL if it had a value
-$!
-$ IF __SAVE_OPENSSL .EQS. ""
-$ THEN
-$   DEASSIGN OPENSSL
-$   DEASSIGN INTERNAL
-$ ELSE
-$   DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
-$ ENDIF
-$!
-$! Done
-$!
-$ RETURN
diff --git a/crypto/des/build.info b/crypto/des/build.info
index 5113867..5fabddf 100644
--- a/crypto/des/build.info
+++ b/crypto/des/build.info
@@ -7,3 +7,17 @@ SOURCE[../../libcrypto]=\
         {- $target{des_asm_src} -} \
         fcrypt.c xcbc_enc.c rpc_enc.c  cbc_cksm.c \
         read2pwd.c
+
+BEGINRAW[Makefile]
+##### DES assembler implementations
+
+{- $builddir -}/des_enc-sparc.S:	{- $sourcedir -}/asm/des_enc.m4
+	m4 -B 8192 {- $sourcedir -}/asm/des_enc.m4 > $@
+{- $builddir -}/dest4-sparcv9.s:	{- $sourcedir -}/asm/dest4-sparcv9.pl
+	$(PERL) {- $sourcedir -}/asm/dest4-sparcv9.pl $(CFLAGS) > $@
+
+{- $builddir -}/des-586.s:	{- $sourcedir -}/asm/des-586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl {- $sourcetop -}/crypto/perlasm/cbc.pl
+	$(PERL) {- $sourcedir -}/asm/des-586.pl $(PERLASM_SCHEME) $(CFLAGS) > $@
+{- $builddir -}/crypt586.s:	{- $sourcedir -}/asm/crypt586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl {- $sourcetop -}/crypto/perlasm/cbc.pl
+	$(PERL) {- $sourcedir -}/asm/crypt586.pl $(PERLASM_SCHEME) $(CFLAGS) > $@
+ENDRAW[Makefile]
diff --git a/crypto/ec/build.info b/crypto/ec/build.info
index 1e68559..8ba6db0 100644
--- a/crypto/ec/build.info
+++ b/crypto/ec/build.info
@@ -6,3 +6,20 @@ SOURCE[../../libcrypto]=\
         ecp_nistp224.c ecp_nistp256.c ecp_nistp521.c ecp_nistputil.c \
         ecp_oct.c ec2_oct.c ec_oct.c ec_kmeth.c ecdh_ossl.c ecdh_kdf.c \
         ecdsa_ossl.c ecdsa_sign.c ecdsa_vrf.c {- $target{ec_asm_src} -}
+
+BEGINRAW[Makefile]
+{- $builddir -}/ecp_nistz256-x86.s:	{- $sourcedir -}/asm/ecp_nistz256-x86.pl
+	$(PERL) {- $sourcedir -}/asm/ecp_nistz256-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+
+{- $builddir -}/ecp_nistz256-x86_64.s: {- $sourcedir -}/asm/ecp_nistz256-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/ecp_nistz256-x86_64.pl $(PERLASM_SCHEME) > $@
+
+{- $builddir -}/ecp_nistz256-avx2.s:   {- $sourcedir -}/asm/ecp_nistz256-avx2.pl
+	$(PERL) {- $sourcedir -}/asm/ecp_nistz256-avx2.pl $(PERLASM_SCHEME) > $@
+
+{- $builddir -}/ecp_nistz256-sparcv9.S:	{- $sourcedir -}/asm/ecp_nistz256-sparcv9.pl
+	$(PERL) {- $sourcedir -}/asm/ecp_nistz256-sparcv9.pl $(CFLAGS) > $@
+
+{- $builddir -}/ecp_nistz256-%.S:	{- $sourcedir -}/asm/ecp_nistz256-%.pl
+	$(PERL) $< $(PERLASM_SCHEME) $@
+ENDRAW[Makefile]
diff --git a/crypto/install-crypto.com b/crypto/install-crypto.com
deleted file mode 100755
index 5b011f6..0000000
--- a/crypto/install-crypto.com
+++ /dev/null
@@ -1,197 +0,0 @@
-$! INSTALL.COM -- Installs the files in a given directory tree
-$!
-$! Author: Richard Levitte <richard at levitte.org>
-$! Time of creation: 22-MAY-1998 10:13
-$!
-$! Changes by Zoltan Arpadffy <zoli at polarhome.com>
-$!
-$! P1  root of the directory tree
-$! P2  "64" for 64-bit pointers.
-$!
-$!
-$! Announce/identify.
-$!
-$ proc = f$environment( "procedure")
-$ write sys$output "@@@ "+ -
-   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
-$!
-$ on error then goto tidy
-$ on control_c then goto tidy
-$!
-$ if (p1 .eqs. "")
-$ then
-$   write sys$output "First argument missing."
-$   write sys$output -
-     "It should be the directory where you want things installed."
-$     exit
-$ endif
-$!
-$ if (f$getsyi( "cpu") .lt. 128)
-$ then
-$   arch = "VAX"
-$ else
-$   arch = f$edit( f$getsyi( "arch_name"), "upcase")
-$   if (arch .eqs. "") then arch = "UNK"
-$ endif
-$!
-$ archd = arch
-$ lib32 = "32"
-$ shr = "_SHR32"
-$!
-$ if (p2 .nes. "")
-$ then
-$   if (p2 .eqs. "64")
-$   then
-$     archd = arch+ "_64"
-$     lib32 = ""
-$     shr = "_SHR"
-$   else
-$     if (p2 .nes. "32")
-$     then
-$       write sys$output "Second argument invalid."
-$       write sys$output "It should be "32", "64", or nothing."
-$       exit
-$     endif
-$   endif
-$ endif
-$!
-$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
-$ root_dev = f$parse( root, , , "device", "syntax_only")
-$ root_dir = f$parse( root, , , "directory", "syntax_only") - -
-   "[000000." - "][" - "[" - "]"
-$ root = root_dev + "[" + root_dir
-$!
-$ define /nolog wrk_sslroot 'root'.] /trans=conc
-$ define /nolog wrk_sslinclude wrk_sslroot:[include]
-$ define /nolog wrk_sslxlib wrk_sslroot:['arch'_lib]
-$!
-$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
-   create /directory /log wrk_sslroot:[000000]
-$ if f$parse("wrk_sslinclude:") .eqs. "" then -
-   create /directory /log wrk_sslinclude:
-$ if f$parse("wrk_sslxlib:") .eqs. "" then -
-   create /directory /log wrk_sslxlib:
-$!
-$ sdirs := , -
-   'archd', -
-   objects, -
-   md2, md4, md5, sha, mdc2, hmac, ripemd, whrlpool, -
-   des, aes, rc2, rc4, rc5, idea, bf, cast, camellia, seed, modes, -
-   bn, ec, rsa, dsa, ecdsa, dh, ecdh, dso, engine, -
-   buffer, bio, stack, lhash, rand, err, -
-   evp, asn1, pem, x509, x509v3, conf, txt_db, pkcs7, pkcs12, comp, ocsp, -
-   ui, -
-   cms, pqueue, ts, jpake, srp, store, cmac
-$!
-$ exheader_ := crypto.h, opensslv.h, ebcdic.h, symhacks.h, ossl_typ.h
-$ exheader_'archd' := opensslconf.h
-$ exheader_objects := objects.h, obj_mac.h
-$ exheader_md2 := md2.h
-$ exheader_md4 := md4.h
-$ exheader_md5 := md5.h
-$ exheader_sha := sha.h
-$ exheader_mdc2 := mdc2.h
-$ exheader_hmac := hmac.h
-$ exheader_ripemd := ripemd.h
-$ exheader_whrlpool := whrlpool.h
-$ exheader_des := des.h
-$ exheader_aes := aes.h
-$ exheader_rc2 := rc2.h
-$ exheader_rc4 := rc4.h
-$ exheader_rc5 := rc5.h
-$ exheader_idea := idea.h
-$ exheader_bf := blowfish.h
-$ exheader_cast := cast.h
-$ exheader_camellia := camellia.h
-$ exheader_seed := seed.h
-$ exheader_modes := modes.h
-$ exheader_bn := bn.h
-$ exheader_ec := ec.h
-$ exheader_rsa := rsa.h
-$ exheader_dsa := dsa.h
-$ exheader_ecdsa := ecdsa.h
-$ exheader_dh := dh.h
-$ exheader_ecdh := ecdh.h
-$ exheader_dso := dso.h
-$ exheader_engine := engine.h
-$ exheader_buffer := buffer.h
-$ exheader_bio := bio.h
-$ exheader_stack := stack.h, safestack.h
-$ exheader_lhash := lhash.h
-$ exheader_rand := rand.h
-$ exheader_err := err.h
-$ exheader_evp := evp.h
-$ exheader_asn1 := asn1.h, asn1_mac.h, asn1t.h
-$ exheader_pem := pem.h, pem2.h
-$ exheader_x509 := x509.h, x509_vfy.h
-$ exheader_x509v3 := x509v3.h
-$ exheader_conf := conf.h, conf_api.h
-$ exheader_txt_db := txt_db.h
-$ exheader_pkcs7 := pkcs7.h
-$ exheader_pkcs12 := pkcs12.h
-$ exheader_comp := comp.h
-$ exheader_ocsp := ocsp.h
-$ exheader_ui := ui.h
-$ exheader_cms := cms.h
-$ exheader_pqueue := pqueue.h
-$ exheader_ts := ts.h
-$ exheader_jpake := jpake.h
-$ exheader_srp := srp.h
-$! exheader_store := store.h, str_compat.h
-$ exheader_store := store.h
-$ exheader_cmac := cmac.h
-$ libs := ssl_libcrypto
-$!
-$ exe_dir := [-.'archd'.exe.crypto]
-$!
-$! Header files.
-$!
-$ i = 0
-$ loop_sdirs: 
-$   d = f$edit( f$element( i, ",", sdirs), "trim")
-$   i = i + 1
-$   if d .eqs. "," then goto loop_sdirs_end
-$   tmp = exheader_'d'
-$   if (d .nes. "") then d = "."+ d
-$   copy /protection = w:re ['d']'tmp' wrk_sslinclude: /log
-$ goto loop_sdirs
-$ loop_sdirs_end:
-$!
-$! Object libraries, shareable images.
-$!
-$ i = 0
-$ loop_lib: 
-$   e = f$edit( f$element( i, ",", libs), "trim")
-$   i = i + 1
-$   if e .eqs. "," then goto loop_lib_end
-$   set noon
-$   file = exe_dir+ e+ lib32+ ".olb"
-$   if f$search( file) .nes. ""
-$   then
-$     copy /protection = w:re 'file' wrk_sslxlib: /log
-$   endif
-$!
-$   file = exe_dir+ e+ shr+ ".exe"
-$   if f$search( file) .nes. ""
-$   then
-$     copy /protection = w:re 'file' wrk_sslxlib: /log
-$   endif
-$   set on
-$ goto loop_lib
-$ loop_lib_end:
-$!
-$ tidy:
-$!
-$ call deass wrk_sslroot
-$ call deass wrk_sslinclude
-$ call deass wrk_sslxlib
-$!
-$ exit
-$!
-$ deass: subroutine
-$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
-$ then
-$   deassign /process 'p1'
-$ endif
-$ endsubroutine
-$!
diff --git a/crypto/md5/build.info b/crypto/md5/build.info
index 3a03853..eff8c6f 100644
--- a/crypto/md5/build.info
+++ b/crypto/md5/build.info
@@ -1,3 +1,18 @@
 LIBS=../../libcrypto
 SOURCE[../../libcrypto]=\
         md5_dgst.c md5_one.c {- $target{md5_asm_src} -}
+
+BEGINRAW[Makefile]
+{- $builddir -}/md5-586.s:	{- $sourcedir -}/asm/md5-586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/md5-586.pl $(PERLASM_SCHEME) $(CFLAGS) > $@
+
+{- $builddir -}/md5-x86_64.s:	{- $sourcedir -}/asm/md5-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/md5-x86_64.pl $(PERLASM_SCHEME) > $@
+
+{- $builddir -}/md5-ia64.s: {- $sourcedir -}/asm/md5-ia64.S
+	$(CC) $(CFLAGS) -E {- $sourcedir -}/asm/md5-ia64.S | \
+	$(PERL) -ne 's/;\s+/;\n/g; print;' > $@
+
+{- $builddir -}/md5-sparcv9.S:	{- $sourcedir -}/asm/md5-sparcv9.pl
+	$(PERL) {- $sourcedir -}/asm/md5-sparcv9.pl $@ $(CFLAGS)
+ENDRAW[Makefile]
diff --git a/crypto/modes/build.info b/crypto/modes/build.info
index 98ca345..d10a97d 100644
--- a/crypto/modes/build.info
+++ b/crypto/modes/build.info
@@ -3,3 +3,30 @@ SOURCE[../../libcrypto]=\
         cbc128.c ctr128.c cts128.c cfb128.c ofb128.c gcm128.c \
         ccm128.c xts128.c wrap128.c ocb128.c \
         {- $target{modes_asm_src} -}
+
+BEGINRAW[Makefile]
+{- $builddir -}/ghash-ia64.s:	{- $sourcedir -}/asm/ghash-ia64.pl
+	$(PERL) {- $sourcedir -}/asm/ghash-ia64.pl $@ $(CFLAGS)
+{- $builddir -}/ghash-x86.s:	{- $sourcedir -}/asm/ghash-x86.pl
+	$(PERL) {- $sourcedir -}/asm/ghash-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+{- $builddir -}/ghash-x86_64.s:	{- $sourcedir -}/asm/ghash-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/ghash-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/aesni-gcm-x86_64.s:	{- $sourcedir -}/asm/aesni-gcm-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/aesni-gcm-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/ghash-sparcv9.s:	{- $sourcedir -}/asm/ghash-sparcv9.pl
+	$(PERL) {- $sourcedir -}/asm/ghash-sparcv9.pl $@ $(CFLAGS)
+{- $builddir -}/ghash-alpha.s:	{- $sourcedir -}/asm/ghash-alpha.pl
+	(preproc=$$$$.$@.S; trap "rm $$preproc" INT; \
+	$(PERL) {- $sourcedir -}/asm/ghash-alpha.pl > $$preproc && \
+	$(CC) -E -P $$preproc > $@ && rm $$preproc)
+{- $builddir -}/ghash-parisc.s:	{- $sourcedir -}/asm/ghash-parisc.pl
+	$(PERL) {- $sourcedir -}/asm/ghash-parisc.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/ghashv8-armx.S:	{- $sourcedir -}/asm/ghashv8-armx.pl
+	$(PERL) {- $sourcedir -}/asm/ghashv8-armx.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/ghashp8-ppc.s:	{- $sourcedir -}/asm/ghashp8-ppc.pl
+	$(PERL) {- $sourcedir -}/asm/ghashp8-ppc.pl $(PERLASM_SCHEME) $@
+
+# GNU make "catch all"
+{- $builddir -}/ghash-%.S:	{- $sourcedir -}/asm/ghash-%.pl
+	$(PERL) $< $(PERLASM_SCHEME) $@
+ENDRAW[Makefile]
diff --git a/crypto/poly1305/build.info b/crypto/poly1305/build.info
index 35d4fa8..0b59b9f 100644
--- a/crypto/poly1305/build.info
+++ b/crypto/poly1305/build.info
@@ -1,3 +1,15 @@
 LIBS=../../libcrypto
 SOURCE[../../libcrypto]=\
         poly1305.c {- $target{poly1305_asm_src} -}
+
+BEGINRAW[Makefile(unix)]
+{- $builddir -}/poly1305-sparcv9.S:	{- $sourcedir -}/asm/poly1305-sparcv9.pl
+	$(PERL) {- $sourcedir -}/asm/poly1305-sparcv9.pl > $@
+{- $builddir -}/poly1305-x86.s:		{- $sourcedir -}/asm/poly1305-x86.pl
+	$(PERL) {- $sourcedir -}/asm/poly1305-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+{- $builddir -}/poly1305-x86_64.s:	{- $sourcedir -}/asm/poly1305-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/poly1305-x86_64.pl $(PERLASM_SCHEME) > $@
+
+{- $builddir -}/poly1305-%.S:	{- $sourcedir -}/asm/poly1305-%.pl
+	$(PERL) $< $(PERLASM_SCHEME) $@
+ENDRAW[Makefile(unix)]
diff --git a/crypto/rand/build.info b/crypto/rand/build.info
index 6dfce13..b0712b2 100644
--- a/crypto/rand/build.info
+++ b/crypto/rand/build.info
@@ -1,4 +1,4 @@
 LIBS=../../libcrypto
 SOURCE[../../libcrypto]=\
         md_rand.c randfile.c rand_lib.c rand_err.c rand_egd.c \
-        rand_win.c rand_unix.c rand_os2.c rand_nw.c
+        rand_win.c rand_unix.c rand_vms.c rand_os2.c rand_nw.c
diff --git a/crypto/rc4/build.info b/crypto/rc4/build.info
index 9e77a81..f2c4e2a 100644
--- a/crypto/rc4/build.info
+++ b/crypto/rc4/build.info
@@ -1,3 +1,30 @@
 LIBS=../../libcrypto
 SOURCE[../../libcrypto]=\
         {- $target{rc4_asm_src} -}
+
+BEGINRAW[Makefile]
+{- $builddir -}/rc4-586.s:	{- $sourcedir -}/asm/rc4-586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/rc4-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+
+{- $builddir -}/rc4-x86_64.s: {- $sourcedir -}/asm/rc4-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/rc4-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/rc4-md5-x86_64.s:	{- $sourcedir -}/asm/rc4-md5-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/rc4-md5-x86_64.pl $(PERLASM_SCHEME) > $@
+
+{- $builddir -}/rc4-ia64.S: {- $sourcedir -}/asm/rc4-ia64.pl
+	$(PERL) {- $sourcedir -}/asm/rc4-ia64.pl $(CFLAGS) > $@
+
+{- $builddir -}/rc4-parisc.s:	{- $sourcedir -}/asm/rc4-parisc.pl
+	$(PERL) {- $sourcedir -}/asm/rc4-parisc.pl $(PERLASM_SCHEME) $@
+
+{- $builddir -}/rc4-ia64.s: rc4-ia64.S
+	@case `awk '/^#define RC4_INT/{print$$NF}' $(TOP)/include/openssl/opensslconf.h` in \
+	int)	set -x; $(CC) $(CFLAGS) -DSZ=4 -E rc4-ia64.S > $@ ;; \
+	char)	set -x; $(CC) $(CFLAGS) -DSZ=1 -E rc4-ia64.S > $@ ;; \
+	*)	exit 1 ;; \
+	esac
+
+# GNU make "catch all"
+{- $builddir -}/rc4-%.s:	{- $sourcedir -}/asm/rc4-%.pl
+	$(PERL) $< $(PERLASM_SCHEME) $@
+ENDRAW[Makefile]
diff --git a/crypto/rc5/build.info b/crypto/rc5/build.info
index 956d21f..af38f92 100644
--- a/crypto/rc5/build.info
+++ b/crypto/rc5/build.info
@@ -1,3 +1,10 @@
 LIBS=../../libcrypto
 SOURCE[../../libcrypto]=\
         rc5_skey.c rc5_ecb.c {- $target{rc5_asm_src} -} rc5cfb64.c rc5ofb64.c
+
+BEGINRAW[Makefile]
+##### RC5 assembler implementations
+
+{- $builddir -}/rc5-586.s: {- $sourcedir -}/asm/rc5-586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl {- $sourcetop -}/crypto/perlasm/cbc.pl
+	$(PERL) {- $sourcedir -}/asm/rc5-586.pl $(PERLASM_SCHEME) $(CFLAGS) > $@
+ENDRAW[Makefile]
diff --git a/crypto/ripemd/build.info b/crypto/ripemd/build.info
index c5dd4c4..5f63598 100644
--- a/crypto/ripemd/build.info
+++ b/crypto/ripemd/build.info
@@ -1,3 +1,10 @@
 LIBS=../../libcrypto
 SOURCE[../../libcrypto]=\
         rmd_dgst.c rmd_one.c {- $target{rmd160_asm_src} -}
+
+BEGINRAW[Makefile]
+##### RMD160 assembler implementations
+
+{- $builddir -}/rmd-586.s:	{- $sourcedir -}/asm/rmd-586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/rmd-586.pl $(PERLASM_SCHEME) $(CFLAGS) > $@
+ENDRAW[Makefile]
diff --git a/crypto/sha/build.info b/crypto/sha/build.info
index eef0e46..1af0497 100644
--- a/crypto/sha/build.info
+++ b/crypto/sha/build.info
@@ -1,3 +1,80 @@
 LIBS=../../libcrypto
 SOURCE[../../libcrypto]=\
         sha1dgst.c sha1_one.c sha256.c sha512.c {- $target{sha1_asm_src} -}
+
+BEGINRAW[Makefile]
+##### SHA assembler implementations
+
+{- $builddir -}/sha1-586.s:	{- $sourcedir -}/asm/sha1-586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/sha1-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+{- $builddir -}/sha256-586.s:	{- $sourcedir -}/asm/sha256-586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/sha256-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+{- $builddir -}/sha512-586.s:	{- $sourcedir -}/asm/sha512-586.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/sha512-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+
+{- $builddir -}/sha1-ia64.s:   {- $sourcedir -}/asm/sha1-ia64.pl
+	(cd asm; $(PERL) sha1-ia64.pl ../$@ $(CFLAGS))
+{- $builddir -}/sha256-ia64.s: {- $sourcedir -}/asm/sha512-ia64.pl
+	(cd asm; $(PERL) sha512-ia64.pl ../$@ $(CFLAGS))
+{- $builddir -}/sha512-ia64.s: {- $sourcedir -}/asm/sha512-ia64.pl
+	(cd asm; $(PERL) sha512-ia64.pl ../$@ $(CFLAGS))
+
+{- $builddir -}/sha256-armv4.S: {- $sourcedir -}/asm/sha256-armv4.pl
+	$(PERL) $< $(PERLASM_SCHEME) $@
+
+{- $builddir -}/sha1-alpha.s:	{- $sourcedir -}/asm/sha1-alpha.pl
+	(preproc=$$$$.$@.S; trap "rm $$preproc" INT; \
+	$(PERL) {- $sourcedir -}/asm/sha1-alpha.pl > $$preproc && \
+	$(CC) -E -P $$preproc > $@ && rm $$preproc)
+
+# Solaris make has to be explicitly told
+{- $builddir -}/sha1-x86_64.s:	{- $sourcedir -}/asm/sha1-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/sha1-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/sha1-mb-x86_64.s:	{- $sourcedir -}/asm/sha1-mb-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/sha1-mb-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/sha256-x86_64.s:{- $sourcedir -}/asm/sha512-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/sha512-x86_64.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/sha256-mb-x86_64.s:	{- $sourcedir -}/asm/sha256-mb-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/sha256-mb-x86_64.pl $(PERLASM_SCHEME) > $@
+{- $builddir -}/sha512-x86_64.s:{- $sourcedir -}/asm/sha512-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/sha512-x86_64.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/sha1-sparcv9.S:	{- $sourcedir -}/asm/sha1-sparcv9.pl
+	$(PERL) {- $sourcedir -}/asm/sha1-sparcv9.pl $@ $(CFLAGS)
+{- $builddir -}/sha256-sparcv9.S:{- $sourcedir -}/asm/sha512-sparcv9.pl
+	$(PERL) {- $sourcedir -}/asm/sha512-sparcv9.pl $@ $(CFLAGS)
+{- $builddir -}/sha512-sparcv9.S:{- $sourcedir -}/asm/sha512-sparcv9.pl
+	$(PERL) {- $sourcedir -}/asm/sha512-sparcv9.pl $@ $(CFLAGS)
+
+{- $builddir -}/sha1-ppc.s:	{- $sourcedir -}/asm/sha1-ppc.pl
+	$(PERL) {- $sourcedir -}/asm/sha1-ppc.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/sha256-ppc.s:	{- $sourcedir -}/asm/sha512-ppc.pl
+	$(PERL) {- $sourcedir -}/asm/sha512-ppc.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/sha512-ppc.s:	{- $sourcedir -}/asm/sha512-ppc.pl
+	$(PERL) {- $sourcedir -}/asm/sha512-ppc.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/sha256p8-ppc.s:	{- $sourcedir -}/asm/sha512p8-ppc.pl
+	$(PERL) {- $sourcedir -}/asm/sha512p8-ppc.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/sha512p8-ppc.s:	{- $sourcedir -}/asm/sha512p8-ppc.pl
+	$(PERL) {- $sourcedir -}/asm/sha512p8-ppc.pl $(PERLASM_SCHEME) $@
+
+{- $builddir -}/sha1-parisc.s:	{- $sourcedir -}/asm/sha1-parisc.pl
+	$(PERL) {- $sourcedir -}/asm/sha1-parisc.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/sha256-parisc.s:{- $sourcedir -}/asm/sha512-parisc.pl
+	$(PERL) {- $sourcedir -}/asm/sha512-parisc.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/sha512-parisc.s:{- $sourcedir -}/asm/sha512-parisc.pl
+	$(PERL) {- $sourcedir -}/asm/sha512-parisc.pl $(PERLASM_SCHEME) $@
+
+{- $builddir -}/sha1-mips.S:	{- $sourcedir -}/asm/sha1-mips.pl
+	$(PERL) {- $sourcedir -}/asm/sha1-mips.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/sha256-mips.S:	{- $sourcedir -}/asm/sha512-mips.pl
+	$(PERL) {- $sourcedir -}/asm/sha512-mips.pl $(PERLASM_SCHEME) $@
+{- $builddir -}/sha512-mips.S:	{- $sourcedir -}/asm/sha512-mips.pl
+	$(PERL) {- $sourcedir -}/asm/sha512-mips.pl $(PERLASM_SCHEME) $@
+
+# GNU make "catch all"
+{- $builddir -}/sha1-%.S:	{- $sourcedir -}/asm/sha1-%.pl
+		$(PERL) $< $(PERLASM_SCHEME) $@
+{- $builddir -}/sha256-%.S:	{- $sourcedir -}/asm/sha512-%.pl
+	$(PERL) $< $(PERLASM_SCHEME) $@
+{- $builddir -}/sha512-%.S:	{- $sourcedir -}/asm/sha512-%.pl
+	$(PERL) $< $(PERLASM_SCHEME) $@
+ENDRAW[Makefile]
diff --git a/crypto/whrlpool/build.info b/crypto/whrlpool/build.info
index 64f1407..6b996a8 100644
--- a/crypto/whrlpool/build.info
+++ b/crypto/whrlpool/build.info
@@ -1,2 +1,10 @@
 LIBS=../../libcrypto
 SOURCE[../../libcrypto]=wp_dgst.c {- $target{wp_asm_src} -}
+
+BEGINRAW[Makefile]
+{- $builddir -}/wp-mmx.s:	{- $sourcedir -}/asm/wp-mmx.pl {- $sourcetop -}/crypto/perlasm/x86asm.pl
+	$(PERL) {- $sourcedir -}/asm/wp-mmx.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+
+{- $builddir -}/wp-x86_64.s: {- $sourcedir -}/asm/wp-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/wp-x86_64.pl $(PERLASM_SCHEME) > $@
+ENDRAW[Makefile]
diff --git a/engines/axp.opt b/engines/axp.opt
deleted file mode 100644
index 1dc71bf..0000000
--- a/engines/axp.opt
+++ /dev/null
@@ -1 +0,0 @@
-SYMBOL_VECTOR=(bind_engine=PROCEDURE,v_check=PROCEDURE)
diff --git a/engines/build.info b/engines/build.info
index 0c8e04b..b5362ac 100644
--- a/engines/build.info
+++ b/engines/build.info
@@ -20,3 +20,10 @@ ELSE
  DEPEND[libossltest]=../libcrypto
  INCLUDE[libossltest]={- rel2abs(catdir($builddir,"../include")) -} ../include
 ENDIF
+
+BEGINRAW[Makefile]
+{- $builddir -}/e_padlock-x86.s:	{- $sourcedir -}/asm/e_padlock-x86.pl
+	$(PERL) {- $sourcedir -}/asm/e_padlock-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+{- $builddir -}/e_padlock-x86_64.s:	{- $sourcedir -}/asm/e_padlock-x86_64.pl
+	$(PERL) {- $sourcedir -}/asm/e_padlock-x86_64.pl $(PERLASM_SCHEME) > $@
+ENDRAW[Makefile]
diff --git a/engines/ia64.opt b/engines/ia64.opt
deleted file mode 100644
index 1dc71bf..0000000
--- a/engines/ia64.opt
+++ /dev/null
@@ -1 +0,0 @@
-SYMBOL_VECTOR=(bind_engine=PROCEDURE,v_check=PROCEDURE)
diff --git a/engines/makeengines.com b/engines/makeengines.com
deleted file mode 100644
index 944e415..0000000
--- a/engines/makeengines.com
+++ /dev/null
@@ -1,1118 +0,0 @@
-$!
-$!  MAKEENGINES.COM
-$!  Written By:  Richard Levitte
-$!               richard at levitte.org
-$!
-$!  This command file compiles and creates the various engines in form
-$!  of shared images.  They are placed in [.xxx.EXE.ENGINES], where "xxx"
-$!  is ALPHA, IA64 or VAX, depending on your hardware.
-$!
-$!  P1	if this is ENGINES or ALL, the engines will build, otherwise not.
-$!
-$!  P2	DEBUG or NODEBUG to compile with or without debugger information.
-$!
-$!  P3  VAXC		for VAX C
-$!	DECC		for DEC C
-$!	GNUC		for GNU C (untested)
-$!
-$!  P4	if defined, sets the TCP/IP libraries to use.  UCX or TCPIP is
-$!	used by default since most other implementations come with a
-$!	compatibility library.  The value must be one of the following:
-$!
-$!	UCX		for UCX
-$!	SOCKETSHR	for SOCKETSHR+NETLIB
-$!	TCPIP		for TCPIP (post UCX)
-$!
-$!  P5	if defined, tells the compiler not to use special threads.
-$!
-$!  P6	if defined, denotes which engines to build.  If not defined,
-$!	all available engines are built.
-$!
-$!  P7, 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).
-$!
-$!  P8, if defined, specifies a directory where ZLIB files (zlib.h,
-$!  libz.olb) may be found.  Optionally, a non-default object library
-$!  name may be included ("dev:[dir]libz_64.olb", for example).
-$!
-$!-----------------------------------------------------------------------------
-$!
-$! Announce/identify.
-$!
-$ proc = f$environment( "procedure")
-$ write sys$output "@@@ "+ -
-   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
-$!
-$ on control_c then goto exit
-$!
-$! Set the default TCP/IP library to link against if needed
-$!
-$ TCPIP_LIB = ""
-$ ZLIB_LIB = ""
-$!
-$! Check What Architecture We Are Using.
-$!
-$ IF (F$GETSYI("CPU").LT.128)
-$ THEN
-$!
-$!  The Architecture Is VAX.
-$!
-$   ARCH = "VAX"
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  The Architecture Is Alpha, IA64 or whatever comes in the future.
-$!
-$   ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
-$   IF (ARCH .EQS. "") THEN ARCH = "UNK"
-$!
-$! End The Architecture Check.
-$!
-$ ENDIF
-$!
-$ ARCHD = ARCH
-$ LIB32 = "32"
-$ OPT_FILE = ""
-$ POINTER_SIZE = ""
-$!
-$! Set the names of the engines we want to build
-$! NOTE: Some might think this list ugly.  However, it's made this way to
-$! reflect the LIBNAMES variable in Makefile as closely as possible,
-$! thereby making it fairly easy to verify that the lists are the same.
-$! NOTE: gmp isn't built, as it's mostly a test engine and brings in another
-$! library that isn't necessarely ported to VMS.
-$!
-$ ENGINES = "," + P6
-$ IF ENGINES .EQS. "," THEN -
-	ENGINES = ",padlock,capi,"
-$!
-$! GOST requires a 64-bit integer type, unavailable on VAX.
-$!
-$ IF (ARCH .NES. "VAX") THEN -
-       ENGINES = ENGINES+ ",gost"
-$!
-$! Check options.
-$!
-$ OPT_PHASE = P1
-$ ACCEPT_PHASE = "ALL,ENGINES"
-$ OPT_DEBUG = P2
-$ OPT_COMPILER = P3
-$ OPT_TCPIP_LIB = P4
-$ OPT_SPECIAL_THREADS = P5
-$ OPT_POINTER_SIZE = P7
-$ ZLIB = P8
-$
-$ GOSUB CHECK_OPTIONS
-$!
-$! Set the goal directories, and create them if necessary
-$!
-$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.ENGINES]
-$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.ENGINES]
-$ IF F$PARSE(OBJ_DIR) .EQS. "" THEN CREATE/DIRECTORY 'OBJ_DIR'
-$ IF F$PARSE(EXE_DIR) .EQS. "" THEN CREATE/DIRECTORY 'EXE_DIR'
-$!
-$! Set the goal files, and create them if necessary
-$!
-$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
-$ IF F$SEARCH(CRYPTO_LIB) .EQS. "" THEN LIBRARY/CREATE/OBJECT 'CRYPTO_LIB'
-$!
-$! Specify the destination directory in any /MAP option.
-$!
-$ if (LINKMAP .eqs. "MAP")
-$ then
-$   LINKMAP = LINKMAP+ "=''EXE_DIR'"
-$ endif
-$!
-$! Add the location prefix to the linker options file name.
-$!
-$ if (OPT_FILE .nes. "")
-$ then
-$   OPT_FILE = EXE_DIR+ OPT_FILE
-$ endif
-$!
-$! Initialise.
-$!
-$ GOSUB INITIALISE
-$ GOSUB CHECK_OPT_FILE
-$!
-$! Define what goes into each engine.  VAX includes a transfer vector.
-$!
-$ ENGINE_ = ""
-$ TV_OBJ = ""
-$ IF ARCH .EQS. "VAX"
-$ THEN
-$   ENGINE_ = "engine_vector.mar"
-$   TV_OBJ_NAME = OBJ_DIR + F$PARSE(ENGINE_,,,"NAME","SYNTAX_ONLY") + ".OBJ"
-$   TV_OBJ = ",''TV_OBJ_NAME'"
-$ ENDIF
-$ ENGINE_padlock = "e_padlock"
-$ ENGINE_capi = "e_capi"
-$ 
-$ ENGINE_gost_SUBDIR = "ccgost"
-$ ENGINE_gost = "e_gost_err,gost2001_keyx,gost2001,gost89,gost94_keyx,"+ -
-		"gost_ameth,gost_asn1,gost_crypt,gost_ctl,gost_eng,"+ -
-		"gosthash,gost_keywrap,gost_md,gost_params,gost_pmeth,"+ -
-		"gost_sign"
-$!
-$! Define which programs need to be linked with a TCP/IP library
-$!
-$ TCPIP_ENGINES = ",,"
-$ IF COMPILER .EQS. "VAXC" THEN -
-     TCPIP_ENGINES = ",,"
-$!
-$! Set up two loops, one that keeps track of the engines,
-$! and one that keeps track of all the files going into
-$! the current engine.
-$!
-$! Here's the start of the engine loop.
-$!
-$ ENGINE_COUNTER = 0
-$ ENGINE_NEXT:
-$!
-$! Extract the current engine name, and if we've reached the end, stop
-$!
-$ ENGINE_NAME = F$ELEMENT(ENGINE_COUNTER,",",ENGINES)
-$ IF (ENGINE_NAME.EQS.",") THEN GOTO ENGINE_DONE
-$!
-$ ENGINE_COUNTER = ENGINE_COUNTER + 1
-$!
-$! Set up the engine library names.
-$!
-$ LIB_ENGINE = "ENGINE_" + ENGINE_NAME
-$!
-$! Check if the library module name actually is defined
-$!
-$ IF F$TYPE('LIB_ENGINE') .EQS. ""
-$ THEN
-$   WRITE SYS$ERROR ""
-$   WRITE SYS$ERROR "The module ",ENGINE_NAME," does not exist.  Continuing..."
-$   WRITE SYS$ERROR ""
-$   GOTO ENGINE_NEXT
-$ ENDIF
-$!
-$! Talk to the user
-$!
-$ IF ENGINE_NAME .NES. ""
-$ THEN
-$   WRITE SYS$OUTPUT "Compiling The ",ENGINE_NAME," Library Files. (",BUILDALL,")"
-$ ELSE
-$   WRITE SYS$OUTPUT "Compiling Support Files. (",BUILDALL,")"
-$ ENDIF
-$!
-$! Create a .OPT file for the object files (for a real engine name).
-$!
-$ IF ENGINE_NAME .NES. ""
-$ THEN
-$   OPEN /WRITE OBJECTS 'EXE_DIR''ENGINE_NAME'.OPT
-$ ENDIF
-$!
-$! Here's the start of per-engine module loop.
-$!
-$ FILE_COUNTER = 0
-$ FILE_NEXT:
-$!
-$! Extract the file name from the file list, and if we've reached the end, stop
-$!
-$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",'LIB_ENGINE')
-$ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
-$!
-$ FILE_COUNTER = FILE_COUNTER + 1
-$!
-$ IF FILE_NAME .EQS. "" THEN GOTO FILE_NEXT
-$!
-$! Set up the source and object reference
-$!
-$ IF F$TYPE('LIB_ENGINE'_SUBDIR) .EQS. ""
-$ THEN
-$     SOURCE_FILE = F$PARSE(FILE_NAME,"SYS$DISK:[].C",,,"SYNTAX_ONLY")
-$ ELSE
-$     SOURCE_FILE = F$PARSE(FILE_NAME,"SYS$DISK:[."+'LIB_ENGINE'_SUBDIR+"].C",,,"SYNTAX_ONLY")
-$ ENDIF
-$ OBJECT_FILE = OBJ_DIR + F$PARSE(FILE_NAME,,,"NAME","SYNTAX_ONLY") + ".OBJ"
-$!
-$! If we get some problem, we just go on trying to build the next module.
-$ ON WARNING THEN GOTO FILE_NEXT
-$!
-$! Check if the module we want to compile is actually there.
-$!
-$ IF F$SEARCH(SOURCE_FILE) .EQS. ""
-$ THEN
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Doesn't Exist."
-$   WRITE SYS$OUTPUT ""
-$   GOTO EXIT
-$ ENDIF
-$!
-$! Talk to the user.
-$!
-$ WRITE SYS$OUTPUT "	",FILE_NAME,""
-$!
-$! Do the dirty work.
-$!
-$ ON ERROR THEN GOTO FILE_NEXT
-$ IF F$EDIT(F$PARSE(SOURCE_FILE,,,"TYPE","SYNTAX_ONLY"),"UPCASE") .EQS. ".MAR"
-$ THEN
-$   MACRO/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
-$ ELSE
-$   CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
-$ ENDIF
-$!
-$! Write the entry to the .OPT file (for a real engine name).
-$!
-$ IF ENGINE_NAME .NES. ""
-$ THEN
-$   WRITE OBJECTS OBJECT_FILE
-$ ENDIF
-$!
-$! Next file
-$!
-$ GOTO FILE_NEXT
-$!
-$ FILE_DONE:
-$!
-$! Do not link the support files.
-$!
-$ IF ENGINE_NAME .EQS. "" THEN GOTO ENGINE_NEXT
-$!
-$! Close the linker options file (for a real engine name).
-$!
-$ CLOSE OBJECTS
-$!
-$! Now, there are two ways to handle this.  We can either build 
-$! shareable images or stick the engine object file into libcrypto.
-$! For now, the latter is NOT supported.
-$!
-$!!!!! LIBRARY/REPLACE 'CRYPTO_LIB' 'OBJECT_FILE'
-$!
-$! For shareable libraries, we need to do things a little differently
-$! depending on if we link with a TCP/IP library or not.
-$!
-$ ENGINE_OPT := SYS$DISK:[]'ARCH'.OPT
-$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /SHARE='EXE_DIR''ENGINE_NAME'.EXE -
-   'EXE_DIR''ENGINE_NAME'.OPT /OPTIONS -
-   'TV_OBJ', -
-   'CRYPTO_LIB' /LIBRARY, -
-   'ENGINE_OPT' /OPTIONS -
-   'TCPIP_LIB' -
-   'ZLIB_LIB' -
-   ,'OPT_FILE' /OPTIONS
-$!
-$! Next engine
-$!
-$ GOTO ENGINE_NEXT
-$!
-$ ENGINE_DONE:
-$!
-$! Talk to the user
-$!
-$ WRITE SYS$OUTPUT "All Done..."
-$ EXIT:
-$ GOSUB CLEANUP
-$ EXIT
-$!
-$! Check For The Link Option FIle.
-$!
-$ CHECK_OPT_FILE:
-$!
-$! Check To See If We Need To Make A VAX C Option File.
-$!
-$ IF (COMPILER.EQS."VAXC")
-$ THEN
-$!
-$!  Check To See If We Already Have A VAX C Linker Option File.
-$!
-$   IF (F$SEARCH(OPT_FILE).EQS."")
-$   THEN
-$!
-$!    We Need A VAX C Linker Option File.
-$!
-$     CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File To Link Against 
-! The Sharable VAX C Runtime Library.
-!
-SYS$SHARE:VAXCRTL.EXE/SHARE
-$EOD
-$!
-$!  End The Option File Check.
-$!
-$   ENDIF
-$!
-$! End The VAXC Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Need A GNU C Option File.
-$!
-$ IF (COMPILER.EQS."GNUC")
-$ THEN
-$!
-$!  Check To See If We Already Have A GNU C Linker Option File.
-$!
-$   IF (F$SEARCH(OPT_FILE).EQS."")
-$   THEN
-$!
-$!    We Need A GNU C Linker Option File.
-$!
-$     CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File To Link Against 
-! The Sharable C Runtime Library.
-!
-GNU_CC:[000000]GCCLIB/LIBRARY
-SYS$SHARE:VAXCRTL/SHARE
-$EOD
-$!
-$!  End The Option File Check.
-$!
-$   ENDIF
-$!
-$! End The GNU C Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Need A DEC C Option File.
-$!
-$ IF (COMPILER.EQS."DECC")
-$ THEN
-$!
-$!  Check To See If We Already Have A DEC C Linker Option File.
-$!
-$   IF (F$SEARCH(OPT_FILE).EQS."")
-$   THEN
-$!
-$!    Figure Out If We Need A non-VAX Or A VAX Linker Option File.
-$!
-$     IF ARCH .EQS. "VAX"
-$     THEN
-$!
-$!      We Need A DEC C Linker Option File For VAX.
-$!
-$       CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File To Link Against 
-! The Sharable DEC C Runtime Library.
-!
-SYS$SHARE:DECC$SHR.EXE/SHARE
-$EOD
-$!
-$!    Else...
-$!
-$     ELSE
-$!
-$!      Create The non-VAX Linker Option File.
-$!
-$       CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File For non-VAX To Link Against 
-! The Sharable C Runtime Library.
-!
-SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
-SYS$SHARE:CMA$OPEN_RTL/SHARE
-$EOD
-$!
-$!    End The DEC C Option File Check.
-$!
-$     ENDIF
-$!
-$!  End The Option File Search.
-$!
-$   ENDIF
-$!
-$! End The DEC C Check.
-$!
-$ ENDIF
-$!
-$!  Tell The User What Linker Option File We Are Using.
-$!
-$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."	
-$!
-$! Time To RETURN.
-$!
-$ RETURN
-$!
-$! Check The User's Options.
-$!
-$ CHECK_OPTIONS:
-$!
-$! Check To See If OPT_PHASE Is Blank.
-$!
-$ IF (OPT_PHASE.EQS."ALL")
-$ THEN
-$!
-$!   OPT_PHASE Is Blank, So Build Everything.
-$!
-$    BUILDALL = "ALL"
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  Else, Check To See If OPT_PHASE Has A Valid Argument.
-$!
-$   IF ("," + ACCEPT_PHASE + ",") - ("," + OPT_PHASE + ",") -
-       .NES. ("," + ACCEPT_PHASE + ",")
-$   THEN
-$!
-$!    A Valid Argument.
-$!
-$     BUILDALL = OPT_PHASE
-$!
-$!  Else...
-$!
-$   ELSE
-$!
-$!    Tell The User We Don't Know What They Want.
-$!
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The option ",OPT_PHASE," is invalid.  The valid options are:"
-$     WRITE SYS$OUTPUT ""
-$     IF ("," + ACCEPT_PHASE + ",") - ",ALL," -
-	.NES. ("," + ACCEPT_PHASE + ",") THEN -
-	WRITE SYS$OUTPUT "    ALL      :  just build everything."
-$     IF ("," + ACCEPT_PHASE + ",") - ",ENGINES," -
-	.NES. ("," + ACCEPT_PHASE + ",") THEN -
-	WRITE SYS$OUTPUT "    ENGINES  :  to compile just the [.xxx.EXE.ENGINES]*.EXE hareable images."
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT " where 'xxx' stands for:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "    ALPHA[64]:  Alpha architecture."
-$     WRITE SYS$OUTPUT "    IA64[64] :  IA64 architecture."
-$     WRITE SYS$OUTPUT "    VAX      :  VAX architecture."
-$     WRITE SYS$OUTPUT ""
-$!
-$!    Time To EXIT.
-$!
-$     EXIT
-$!
-$!  End The Valid Argument Check.
-$!
-$   ENDIF
-$!
-$! End The OPT_PHASE Check.
-$!
-$ ENDIF
-$!
-$! Check To See If OPT_DEBUG Is Blank.
-$!
-$ IF (OPT_DEBUG.EQS."NODEBUG")
-$ THEN
-$!
-$!  OPT_DEBUG Is NODEBUG, So Compile Without The Debugger Information.
-$!
-$   DEBUGGER = "NODEBUG"
-$   LINKMAP = "NOMAP"
-$   TRACEBACK = "NOTRACEBACK" 
-$   GCC_OPTIMIZE = "OPTIMIZE"
-$   CC_OPTIMIZE = "OPTIMIZE"
-$   MACRO_OPTIMIZE = "OPTIMIZE"
-$   WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
-$   WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
-$ ELSE
-$!
-$!  Check To See If We Are To Compile With Debugger Information.
-$!
-$   IF (OPT_DEBUG.EQS."DEBUG")
-$   THEN
-$!
-$!    Compile With Debugger Information.
-$!
-$     DEBUGGER = "DEBUG"
-$     LINKMAP = "MAP"
-$     TRACEBACK = "TRACEBACK"
-$     GCC_OPTIMIZE = "NOOPTIMIZE"
-$     CC_OPTIMIZE = "NOOPTIMIZE"
-$     MACRO_OPTIMIZE = "NOOPTIMIZE"
-$     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
-$     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
-$   ELSE 
-$!
-$!    They Entered An Invalid Option.
-$!
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ",OPT_DEBUG," Is Invalid.  The Valid Options Are:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "     DEBUG   :  Compile With The Debugger Information."
-$     WRITE SYS$OUTPUT "     NODEBUG :  Compile Without The Debugger Information."
-$     WRITE SYS$OUTPUT ""
-$!
-$!    Time To EXIT.
-$!
-$     EXIT
-$!
-$!  End The Valid Argument Check.
-$!
-$   ENDIF
-$!
-$! End The OPT_DEBUG Check.
-$!
-$ ENDIF
-$!
-$! Special Threads For OpenVMS v7.1 Or Later
-$!
-$! Written By:  Richard Levitte
-$!              richard at levitte.org
-$!
-$!
-$! Check To See If We Have A Option For OPT_SPECIAL_THREADS.
-$!
-$ IF (OPT_SPECIAL_THREADS.EQS."")
-$ THEN
-$!
-$!  Get The Version Of VMS We Are Using.
-$!
-$   ISSEVEN :=
-$   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
-$   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
-$!
-$!  Check To See If The VMS Version Is v7.1 Or Later.
-$!
-$   IF (TMP.GE.71)
-$   THEN
-$!
-$!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
-$!
-$     ISSEVEN := ,PTHREAD_USE_D4
-$!
-$!  End The VMS Version Check.
-$!
-$   ENDIF
-$!
-$! End The OPT_SPECIAL_THREADS Check.
-$!
-$ ENDIF
-$!
-$! Check OPT_POINTER_SIZE (P7).
-$!
-$ IF (OPT_POINTER_SIZE .NES. "") .AND. (ARCH .NES. "VAX")
-$ THEN
-$!
-$   IF (OPT_POINTER_SIZE .EQS. "32")
-$   THEN
-$     POINTER_SIZE = " /POINTER_SIZE=32"
-$   ELSE
-$     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
-$       ARCHD = ARCH+ "_64"
-$       LIB32 = ""
-$       POINTER_SIZE = " /POINTER_SIZE=64"
-$     ELSE
-$!
-$!      Tell The User Entered An Invalid Option.
-$!
-$       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 (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.
-$!
-$       EXIT
-$!
-$     ENDIF
-$!
-$   ENDIF
-$!
-$! End The OPT_POINTER_SIZE Check.
-$!
-$ ENDIF
-$!
-$! Set basic C compiler /INCLUDE directories.
-$!
-$ CC_INCLUDES = "SYS$DISK:[],SYS$DISK:[.VENDOR_DEFNS]"
-$!
-$! Check To See If OPT_COMPILER Is Blank.
-$!
-$ IF (OPT_COMPILER.EQS."")
-$ THEN
-$!
-$!  O.K., The User Didn't Specify A Compiler, Let's Try To
-$!  Find Out Which One To Use.
-$!
-$!  Check To See If We Have GNU C.
-$!
-$   IF (F$TRNLNM("GNU_CC").NES."")
-$   THEN
-$!
-$!    Looks Like GNUC, Set To Use GNUC.
-$!
-$     OPT_COMPILER = "GNUC"
-$!
-$!  Else...
-$!
-$   ELSE
-$!
-$!    Check To See If We Have VAXC Or DECC.
-$!
-$     IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
-$     THEN 
-$!
-$!      Looks Like DECC, Set To Use DECC.
-$!
-$       OPT_COMPILER = "DECC"
-$!
-$!    Else...
-$!
-$     ELSE
-$!
-$!      Looks Like VAXC, Set To Use VAXC.
-$!
-$       OPT_COMPILER = "VAXC"
-$!
-$!    End The VAXC Compiler Check.
-$!
-$     ENDIF
-$!
-$!  End The DECC & VAXC Compiler Check.
-$!
-$   ENDIF
-$!
-$!  End The Compiler Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Have A Option For OPT_TCPIP_LIB.
-$!
-$ IF (OPT_TCPIP_LIB.EQS."")
-$ THEN
-$!
-$!  Find out what socket library we have available
-$!
-$   IF F$PARSE("SOCKETSHR:") .NES. ""
-$   THEN
-$!
-$!    We have SOCKETSHR, and it is my opinion that it's the best to use.
-$!
-$     OPT_TCPIP_LIB = "SOCKETSHR"
-$!
-$!    Tell the user
-$!
-$     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
-$!
-$!    Else, let's look for something else
-$!
-$   ELSE
-$!
-$!    Like UCX (the reason to do this before Multinet is that the UCX
-$!    emulation is easier to use...)
-$!
-$     IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
-	 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
-	 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
-$     THEN
-$!
-$!	Last resort: a UCX or UCX-compatible library
-$!
-$	OPT_TCPIP_LIB = "UCX"
-$!
-$!      Tell the user
-$!
-$       WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
-$!
-$!	That was all...
-$!
-$     ENDIF
-$   ENDIF
-$ ENDIF
-$!
-$! Set Up Initial CC Definitions, Possibly With User Ones
-$!
-$ 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"
-$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
-	CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
-$!
-$! Check To See If We Have A ZLIB Option.
-$!
-$ IF (ZLIB .NES. "")
-$ THEN
-$!
-$!  Check for expected ZLIB files.
-$!
-$   err = 0
-$   file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
-$   if (f$search( file1) .eqs. "")
-$   then
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
-$     WRITE SYS$OUTPUT "    Can't find header: ''file1'"
-$     err = 1
-$   endif
-$   file1 = f$parse( "A.;", ZLIB)- "A.;"
-$!
-$   file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
-$   if (f$search( file2) .eqs. "")
-$   then
-$     if (err .eq. 0)
-$     then
-$       WRITE SYS$OUTPUT ""
-$       WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
-$     endif
-$     WRITE SYS$OUTPUT "    Can't find library: ''file2'"
-$     WRITE SYS$OUTPUT ""
-$     err = err+ 2
-$   endif
-$   if (err .eq. 1)
-$   then
-$     WRITE SYS$OUTPUT ""
-$   endif
-$!
-$   if (err .ne. 0)
-$   then
-$     EXIT
-$   endif
-$!
-$   CCDEFS = """ZLIB=1"", "+ CCDEFS
-$   CC_INCLUDES = CC_INCLUDES+ ", "+ file1
-$   ZLIB_LIB = ", ''file2' /library"
-$!
-$!  Print info
-$!
-$   WRITE SYS$OUTPUT "ZLIB library spec: ", file2
-$!
-$! End The ZLIB Check.
-$!
-$ ENDIF
-$!
-$!  Check To See If The User Entered A Valid Parameter.
-$!
-$ IF (OPT_COMPILER.EQS."VAXC").OR.(OPT_COMPILER.EQS."DECC").OR.(OPT_COMPILER.EQS."GNUC")
-$ THEN
-$!
-$!    Check To See If The User Wanted DECC.
-$!
-$   IF (OPT_COMPILER.EQS."DECC")
-$   THEN
-$!
-$!    Looks Like DECC, Set To Use DECC.
-$!
-$     COMPILER = "DECC"
-$!
-$!    Tell The User We Are Using DECC.
-$!
-$     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
-$!
-$!    Use DECC...
-$!
-$     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" + -
-       " /INCLUDE=(''CC_INCLUDES') " + -
-       CCEXTRAFLAGS
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_DECC_OPTIONS.OPT"
-$!
-$!  End DECC Check.
-$!
-$   ENDIF
-$!
-$!  Check To See If We Are To Use VAXC.
-$!
-$   IF (OPT_COMPILER.EQS."VAXC")
-$   THEN
-$!
-$!    Looks Like VAXC, Set To Use VAXC.
-$!
-$     COMPILER = "VAXC"
-$!
-$!    Tell The User We Are Using VAX C.
-$!
-$     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
-$!
-$!    Compile Using VAXC.
-$!
-$     CC = "CC"
-$     IF ARCH.NES."VAX"
-$     THEN
-$	WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
-$	EXIT
-$     ENDIF
-$     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
-$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
-	   "/INCLUDE=(''CC_INCLUDES')" + -
-	   CCEXTRAFLAGS
-$     CCDEFS = """VAXC""," + CCDEFS
-$!
-$!    Define <sys> As SYS$COMMON:[SYSLIB]
-$!
-$     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
-$!
-$!  End VAXC Check
-$!
-$   ENDIF
-$!
-$!  Check To See If We Are To Use GNU C.
-$!
-$   IF (OPT_COMPILER.EQS."GNUC")
-$   THEN
-$!
-$!    Looks Like GNUC, Set To Use GNUC.
-$!
-$     COMPILER = "GNUC"
-$!
-$!    Tell The User We Are Using GNUC.
-$!
-$     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
-$!
-$!    Use GNU C...
-$!
-$     CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
-	   "/INCLUDE=(''CC_INCLUDES')" + -
-	   CCEXTRAFLAGS
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
-$!
-$!  End The GNU C Check.
-$!
-$   ENDIF
-$!
-$!  Set up default defines
-$!
-$   CCDEFS = """FLAT_INC=1""," + CCDEFS
-$!
-$!  Finish up the definition of CC.
-$!
-$   IF COMPILER .EQS. "DECC"
-$   THEN
-$     IF CCDISABLEWARNINGS .NES. ""
-$     THEN
-$       CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
-$     ENDIF
-$   ELSE
-$     CCDISABLEWARNINGS = ""
-$   ENDIF
-$   CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
-$!
-$!  Show user the result
-$!
-$   WRITE/SYMBOL SYS$OUTPUT "Main C Compiling Command: ",CC
-$!
-$!  Else The User Entered An Invalid Argument.
-$!
-$ ELSE
-$!
-$!  Tell The User We Don't Know What They Want.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The Option ",OPT_COMPILER," Is Invalid.  The Valid Options Are:"
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
-$   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
-$   WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Time To EXIT.
-$!
-$   EXIT
-$!
-$! End The Valid Argument Check.
-$!
-$ ENDIF
-$!
-$! Build a MACRO command for the architecture at hand
-$!
-$ IF ARCH .EQS. "VAX"
-$ THEN
-$   MACRO = "MACRO/''DEBUGGER'"
-$ ELSE
-$   MACRO = "MACRO/MIGRATION/''DEBUGGER'/''MACRO_OPTIMIZE'"
-$ ENDIF
-$!
-$!  Show user the result
-$!
-$ WRITE/SYMBOL SYS$OUTPUT "Main MACRO Compiling Command: ",MACRO
-$!
-$! Time to check the contents, and to make sure we get the correct library.
-$!
-$ IF OPT_TCPIP_LIB.EQS."SOCKETSHR" .OR. OPT_TCPIP_LIB.EQS."MULTINET" -
-     .OR. OPT_TCPIP_LIB.EQS."UCX" .OR. OPT_TCPIP_LIB.EQS."TCPIP" -
-     .OR. OPT_TCPIP_LIB.EQS."NONE"
-$ THEN
-$!
-$!  Check to see if SOCKETSHR was chosen
-$!
-$   IF OPT_TCPIP_LIB.EQS."SOCKETSHR"
-$   THEN
-$!
-$!    Set the library to use SOCKETSHR
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
-$!
-$!    Done with SOCKETSHR
-$!
-$   ENDIF
-$!
-$!  Check to see if MULTINET was chosen
-$!
-$   IF OPT_TCPIP_LIB.EQS."MULTINET"
-$   THEN
-$!
-$!    Set the library to use UCX emulation.
-$!
-$     OPT_TCPIP_LIB = "UCX"
-$!
-$!    Done with MULTINET
-$!
-$   ENDIF
-$!
-$!  Check to see if UCX was chosen
-$!
-$   IF OPT_TCPIP_LIB.EQS."UCX"
-$   THEN
-$!
-$!    Set the library to use UCX.
-$!
-$     TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
-$     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
-$     THEN
-$       TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
-$     ELSE
-$       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
-	  TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
-$     ENDIF
-$!
-$!    Done with UCX
-$!
-$   ENDIF
-$!
-$!  Check to see if TCPIP was chosen
-$!
-$   IF OPT_TCPIP_LIB.EQS."TCPIP"
-$   THEN
-$!
-$!    Set the library to use TCPIP (post UCX).
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
-$!
-$!    Done with TCPIP
-$!
-$   ENDIF
-$!
-$!  Check to see if NONE was chosen
-$!
-$   IF OPT_TCPIP_LIB.EQS."NONE"
-$   THEN
-$!
-$!    Do not use a TCPIP library.
-$!
-$     TCPIP_LIB = ""
-$!
-$!    Done with TCPIP
-$!
-$   ENDIF
-$!
-$!  Print info
-$!
-$   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
-$!
-$!  Else The User Entered An Invalid Argument.
-$!
-$ ELSE
-$!
-$!  Tell The User We Don't Know What They Want.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The Option ",OPT_TCPIP_LIB," Is Invalid.  The Valid Options Are:"
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
-$   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
-$   WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP (post UCX) TCP/IP library."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Time To EXIT.
-$!
-$   EXIT
-$!
-$!  Done with TCP/IP libraries
-$!
-$ ENDIF
-$!
-$!  Time To RETURN...
-$!
-$ RETURN
-$!
-$ INITIALISE:
-$!
-$! Save old value of the logical name OPENSSL
-$!
-$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
-$!
-$! Save directory information
-$!
-$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
-$ __HERE = F$EDIT(__HERE,"UPCASE")
-$ __TOP = __HERE - "ENGINES]"
-$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
-$!
-$! Set up the logical name OPENSSL to point at the include directory
-$!
-$ DEFINE OPENSSL /NOLOG '__INCLUDE'
-$!
-$! Done
-$!
-$ RETURN
-$!
-$ CLEANUP:
-$!
-$! Restore the saved logical name OPENSSL, if it had a value.
-$!
-$ if (f$type( __SAVE_OPENSSL) .nes. "")
-$ then
-$   IF __SAVE_OPENSSL .EQS. ""
-$   THEN
-$     DEASSIGN OPENSSL
-$   ELSE
-$     DEFINE /NOLOG OPENSSL '__SAVE_OPENSSL'
-$   ENDIF
-$ endif
-$!
-$! Close any open files.
-$!
-$ if (f$trnlnm( "objects", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
-   close objects
-$!
-$! Done
-$!
-$ RETURN
-$!
diff --git a/engines/vax.opt b/engines/vax.opt
deleted file mode 100644
index 72e6bd8..0000000
--- a/engines/vax.opt
+++ /dev/null
@@ -1,9 +0,0 @@
-!
-! Ensure transfer vector is at beginning of image
-!
-CLUSTER=FIRST
-COLLECT=FIRST,$$ENGINE
-!
-! make psects nonshareable so image can be installed.
-!
-PSECT_ATTR=$CHAR_STRING_CONSTANTS,NOWRT
diff --git a/include/openssl/__decc_include_epilogue.h b/include/openssl/__decc_include_epilogue.h
new file mode 100644
index 0000000..584384f
--- /dev/null
+++ b/include/openssl/__decc_include_epilogue.h
@@ -0,0 +1,7 @@
+/*
+ * This file is only used by HP C on VMS, and is included automatically
+ * after each header file from this directory
+ */
+
+/* restore state.  Must correspond to the save in __decc_include_prologue.h */
+#pragma names restore
diff --git a/include/openssl/__decc_include_prologue.h b/include/openssl/__decc_include_prologue.h
new file mode 100644
index 0000000..455181c
--- /dev/null
+++ b/include/openssl/__decc_include_prologue.h
@@ -0,0 +1,11 @@
+/*
+ * This file is only used by HP C on VMS, and is included automatically
+ * after each header file from this directory
+ */
+
+/* save state */
+#pragma names save
+/* have the compiler shorten symbols larger than 31 chars to 23 chars
+ * followed by a 8 hex char CRC
+ */
+#pragma names as_is,shortened
diff --git a/include/openssl/symhacks.h b/include/openssl/symhacks.h
index f78a584..394f914 100644
--- a/include/openssl/symhacks.h
+++ b/include/openssl/symhacks.h
@@ -57,373 +57,8 @@
 
 # include <openssl/e_os2.h>
 
-/*
- * Hacks to solve the problem with linkers incapable of handling very long
- * symbol names.  In the case of VMS, the limit is 31 characters on VMS for
- * VAX.
- */
-/*
- * Note that this affects util/libeay.num and util/ssleay.num...  you may
- * change those manually, but that's not recommended, as those files are
- * controlled centrally and updated on Unix, and the central definition may
- * disagree with yours, which in turn may come with shareable library
- * incompatibilities.
- */
-# ifdef OPENSSL_SYS_VMS
-
-/* Hack a long name in crypto/asn1/a_mbstr.c */
-#  undef ASN1_STRING_set_default_mask_asc
-#  define ASN1_STRING_set_default_mask_asc        ASN1_STRING_set_def_mask_asc
-
-/* Hack the names created with DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE) */
-#  undef PEM_read_NETSCAPE_CERT_SEQUENCE
-#  define PEM_read_NETSCAPE_CERT_SEQUENCE         PEM_read_NS_CERT_SEQ
-#  undef PEM_write_NETSCAPE_CERT_SEQUENCE
-#  define PEM_write_NETSCAPE_CERT_SEQUENCE        PEM_write_NS_CERT_SEQ
-#  undef PEM_read_bio_NETSCAPE_CERT_SEQUENCE
-#  define PEM_read_bio_NETSCAPE_CERT_SEQUENCE     PEM_read_bio_NS_CERT_SEQ
-#  undef PEM_write_bio_NETSCAPE_CERT_SEQUENCE
-#  define PEM_write_bio_NETSCAPE_CERT_SEQUENCE    PEM_write_bio_NS_CERT_SEQ
-#  undef PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE
-#  define PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE PEM_write_cb_bio_NS_CERT_SEQ
-
-/* Hack the names created with DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO) */
-#  undef PEM_read_PKCS8_PRIV_KEY_INFO
-#  define PEM_read_PKCS8_PRIV_KEY_INFO            PEM_read_P8_PRIV_KEY_INFO
-#  undef PEM_write_PKCS8_PRIV_KEY_INFO
-#  define PEM_write_PKCS8_PRIV_KEY_INFO           PEM_write_P8_PRIV_KEY_INFO
-#  undef PEM_read_bio_PKCS8_PRIV_KEY_INFO
-#  define PEM_read_bio_PKCS8_PRIV_KEY_INFO        PEM_read_bio_P8_PRIV_KEY_INFO
-#  undef PEM_write_bio_PKCS8_PRIV_KEY_INFO
-#  define PEM_write_bio_PKCS8_PRIV_KEY_INFO       PEM_write_bio_P8_PRIV_KEY_INFO
-#  undef PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO
-#  define PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO    PEM_wrt_cb_bio_P8_PRIV_KEY_INFO
-
-/* Hack other PEM names */
-#  undef PEM_write_bio_PKCS8PrivateKey_nid
-#  define PEM_write_bio_PKCS8PrivateKey_nid       PEM_write_bio_PKCS8PrivKey_nid
-
-/* Hack some long X509 names */
-#  undef X509_REVOKED_get_ext_by_critical
-#  define X509_REVOKED_get_ext_by_critical        X509_REVOKED_get_ext_by_critic
-#  undef X509_policy_tree_get0_user_policies
-#  define X509_policy_tree_get0_user_policies     X509_pcy_tree_get0_usr_policies
-#  undef X509_policy_node_get0_qualifiers
-#  define X509_policy_node_get0_qualifiers        X509_pcy_node_get0_qualifiers
-#  undef X509_STORE_CTX_get_explicit_policy
-#  define X509_STORE_CTX_get_explicit_policy      X509_STORE_CTX_get_expl_policy
-#  undef X509_STORE_CTX_get0_current_issuer
-#  define X509_STORE_CTX_get0_current_issuer      X509_STORE_CTX_get0_cur_issuer
-
-/* Hack some long CRYPTO names */
-#  undef CRYPTO_set_dynlock_destroy_callback
-#  define CRYPTO_set_dynlock_destroy_callback     CRYPTO_set_dynlock_destroy_cb
-#  undef CRYPTO_set_dynlock_create_callback
-#  define CRYPTO_set_dynlock_create_callback      CRYPTO_set_dynlock_create_cb
-#  undef CRYPTO_set_dynlock_lock_callback
-#  define CRYPTO_set_dynlock_lock_callback        CRYPTO_set_dynlock_lock_cb
-#  undef CRYPTO_get_dynlock_lock_callback
-#  define CRYPTO_get_dynlock_lock_callback        CRYPTO_get_dynlock_lock_cb
-#  undef CRYPTO_get_dynlock_destroy_callback
-#  define CRYPTO_get_dynlock_destroy_callback     CRYPTO_get_dynlock_destroy_cb
-#  undef CRYPTO_get_dynlock_create_callback
-#  define CRYPTO_get_dynlock_create_callback      CRYPTO_get_dynlock_create_cb
-
-/* Hack some long SSL/TLS names */
-#  undef SSL_CTX_set_default_verify_paths
-#  define SSL_CTX_set_default_verify_paths        SSL_CTX_set_def_verify_paths
-#  undef SSL_get_ex_data_X509_STORE_CTX_idx
-#  define SSL_get_ex_data_X509_STORE_CTX_idx      SSL_get_ex_d_X509_STORE_CTX_idx
-#  undef SSL_add_file_cert_subjects_to_stack
-#  define SSL_add_file_cert_subjects_to_stack     SSL_add_file_cert_subjs_to_stk
-#  undef SSL_add_dir_cert_subjects_to_stack
-#  define SSL_add_dir_cert_subjects_to_stack      SSL_add_dir_cert_subjs_to_stk
-#  undef SSL_CTX_use_certificate_chain_file
-#  define SSL_CTX_use_certificate_chain_file      SSL_CTX_use_cert_chain_file
-#  undef SSL_CTX_set_cert_verify_callback
-#  define SSL_CTX_set_cert_verify_callback        SSL_CTX_set_cert_verify_cb
-#  undef SSL_CTX_set_default_passwd_cb_userdata
-#  define SSL_CTX_set_default_passwd_cb_userdata  SSL_CTX_set_def_passwd_cb_ud
-#  undef SSL_COMP_get_compression_methods
-#  define SSL_COMP_get_compression_methods        SSL_COMP_get_compress_methods
-#  undef ssl_add_clienthello_renegotiate_ext
-#  define ssl_add_clienthello_renegotiate_ext     ssl_add_clienthello_reneg_ext
-#  undef ssl_add_serverhello_renegotiate_ext
-#  define ssl_add_serverhello_renegotiate_ext     ssl_add_serverhello_reneg_ext
-#  undef ssl_parse_clienthello_renegotiate_ext
-#  define ssl_parse_clienthello_renegotiate_ext   ssl_parse_clienthello_reneg_ext
-#  undef ssl_parse_serverhello_renegotiate_ext
-#  define ssl_parse_serverhello_renegotiate_ext   ssl_parse_serverhello_reneg_ext
-#  undef SSL_srp_server_param_with_username
-#  define SSL_srp_server_param_with_username      SSL_srp_server_param_with_un
-#  undef SSL_CTX_set_srp_client_pwd_callback
-#  define SSL_CTX_set_srp_client_pwd_callback     SSL_CTX_set_srp_client_pwd_cb
-#  undef SSL_CTX_set_srp_verify_param_callback
-#  define SSL_CTX_set_srp_verify_param_callback   SSL_CTX_set_srp_vfy_param_cb
-#  undef SSL_CTX_set_srp_username_callback
-#  define SSL_CTX_set_srp_username_callback       SSL_CTX_set_srp_un_cb
-#  undef ssl_add_clienthello_use_srtp_ext
-#  define ssl_add_clienthello_use_srtp_ext        ssl_add_clihello_use_srtp_ext
-#  undef ssl_add_serverhello_use_srtp_ext
-#  define ssl_add_serverhello_use_srtp_ext        ssl_add_serhello_use_srtp_ext
-#  undef ssl_parse_clienthello_use_srtp_ext
-#  define ssl_parse_clienthello_use_srtp_ext      ssl_parse_clihello_use_srtp_ext
-#  undef ssl_parse_serverhello_use_srtp_ext
-#  define ssl_parse_serverhello_use_srtp_ext      ssl_parse_serhello_use_srtp_ext
-#  undef SSL_CTX_set_next_protos_advertised_cb
-#  define SSL_CTX_set_next_protos_advertised_cb   SSL_CTX_set_next_protos_adv_cb
-#  undef SSL_CTX_set_next_proto_select_cb
-#  define SSL_CTX_set_next_proto_select_cb        SSL_CTX_set_next_proto_sel_cb
-#  undef SSL_CTX_set_not_resumable_session_callback
-#  define SSL_CTX_set_not_resumable_session_callback \
-                                                SSL_CTX_set_not_resumbl_sess_cb
-#  undef SSL_set_not_resumable_session_callback
-#  define SSL_set_not_resumable_session_callback  SSL_set_not_resumbl_sess_cb
-#  undef ssl_check_clienthello_tlsext_late
-#  define ssl_check_clienthello_tlsext_late       ssl_chk_clienthello_tlsext_late
-#  undef ssl3_cbc_record_digest_supported
-#  define ssl3_cbc_record_digest_supported        ssl3_cbc_rcd_digest_supported
-#  undef SSL_COMP_set0_compression_methods
-#  define SSL_COMP_set0_compression_methods       SSL_COMP_set0_compr_methods
-#  undef SSL_COMP_free_compression_methods
-#  define SSL_COMP_free_compression_methods       SSL_COMP_free_compr_methods
-
-/* Hack some long ENGINE names */
-#  undef ENGINE_get_default_BN_mod_exp_crt
-#  define ENGINE_get_default_BN_mod_exp_crt       ENGINE_get_def_BN_mod_exp_crt
-#  undef ENGINE_set_default_BN_mod_exp_crt
-#  define ENGINE_set_default_BN_mod_exp_crt       ENGINE_set_def_BN_mod_exp_crt
-#  undef ENGINE_set_load_privkey_function
-#  define ENGINE_set_load_privkey_function        ENGINE_set_load_privkey_fn
-#  undef ENGINE_get_load_privkey_function
-#  define ENGINE_get_load_privkey_function        ENGINE_get_load_privkey_fn
-#  undef ENGINE_unregister_pkey_asn1_meths
-#  define ENGINE_unregister_pkey_asn1_meths       ENGINE_unreg_pkey_asn1_meths
-#  undef ENGINE_register_all_pkey_asn1_meths
-#  define ENGINE_register_all_pkey_asn1_meths     ENGINE_reg_all_pkey_asn1_meths
-#  undef ENGINE_set_default_pkey_asn1_meths
-#  define ENGINE_set_default_pkey_asn1_meths      ENGINE_set_def_pkey_asn1_meths
-#  undef ENGINE_get_pkey_asn1_meth_engine
-#  define ENGINE_get_pkey_asn1_meth_engine        ENGINE_get_pkey_asn1_meth_eng
-#  undef ENGINE_set_load_ssl_client_cert_function
-#  define ENGINE_set_load_ssl_client_cert_function \
-                                                ENGINE_set_ld_ssl_clnt_cert_fn
-#  undef ENGINE_get_ssl_client_cert_function
-#  define ENGINE_get_ssl_client_cert_function     ENGINE_get_ssl_client_cert_fn
-
-/* Hack some long OCSP names */
-#  undef OCSP_REQUEST_get_ext_by_critical
-#  define OCSP_REQUEST_get_ext_by_critical        OCSP_REQUEST_get_ext_by_crit
-#  undef OCSP_BASICRESP_get_ext_by_critical
-#  define OCSP_BASICRESP_get_ext_by_critical      OCSP_BASICRESP_get_ext_by_crit
-#  undef OCSP_SINGLERESP_get_ext_by_critical
-#  define OCSP_SINGLERESP_get_ext_by_critical     OCSP_SINGLERESP_get_ext_by_crit
-
-/* Hack some long EVP names */
-#  undef EVP_PKEY_meth_set_verify_recover
-#  define EVP_PKEY_meth_set_verify_recover        EVP_PKEY_meth_set_vrfy_recover
-
-/* Hack some long EC names */
-#  undef EC_GROUP_set_point_conversion_form
-#  define EC_GROUP_set_point_conversion_form      EC_GROUP_set_point_conv_form
-#  undef EC_GROUP_get_point_conversion_form
-#  define EC_GROUP_get_point_conversion_form      EC_GROUP_get_point_conv_form
-#  undef EC_GROUP_clear_free_all_extra_data
-#  define EC_GROUP_clear_free_all_extra_data      EC_GROUP_clr_free_all_xtra_data
-#  undef EC_KEY_set_public_key_affine_coordinates
-#  define EC_KEY_set_public_key_affine_coordinates \
-                                                EC_KEY_set_pub_key_aff_coords
-#  undef EC_POINT_set_Jprojective_coordinates_GFp
-#  define EC_POINT_set_Jprojective_coordinates_GFp \
-                                                EC_POINT_set_Jproj_coords_GFp
-#  undef EC_POINT_get_Jprojective_coordinates_GFp
-#  define EC_POINT_get_Jprojective_coordinates_GFp \
-                                                EC_POINT_get_Jproj_coords_GFp
-#  undef EC_POINT_set_affine_coordinates_GFp
-#  define EC_POINT_set_affine_coordinates_GFp     EC_POINT_set_affine_coords_GFp
-#  undef EC_POINT_get_affine_coordinates_GFp
-#  define EC_POINT_get_affine_coordinates_GFp     EC_POINT_get_affine_coords_GFp
-#  undef EC_POINT_set_compressed_coordinates_GFp
-#  define EC_POINT_set_compressed_coordinates_GFp EC_POINT_set_compr_coords_GFp
-#  undef EC_POINT_set_affine_coordinates_GF2m
-#  define EC_POINT_set_affine_coordinates_GF2m    EC_POINT_set_affine_coords_GF2m
-#  undef EC_POINT_get_affine_coordinates_GF2m
-#  define EC_POINT_get_affine_coordinates_GF2m    EC_POINT_get_affine_coords_GF2m
-#  undef EC_POINT_set_compressed_coordinates_GF2m
-#  define EC_POINT_set_compressed_coordinates_GF2m \
-                                                EC_POINT_set_compr_coords_GF2m
-#  undef ec_GF2m_simple_group_clear_finish
-#  define ec_GF2m_simple_group_clear_finish       ec_GF2m_simple_grp_clr_finish
-#  undef ec_GF2m_simple_group_check_discriminant
-#  define ec_GF2m_simple_group_check_discriminant ec_GF2m_simple_grp_chk_discrim
-#  undef ec_GF2m_simple_point_clear_finish
-#  define ec_GF2m_simple_point_clear_finish       ec_GF2m_simple_pt_clr_finish
-#  undef ec_GF2m_simple_point_set_to_infinity
-#  define ec_GF2m_simple_point_set_to_infinity    ec_GF2m_simple_pt_set_to_inf
-#  undef ec_GF2m_simple_points_make_affine
-#  define ec_GF2m_simple_points_make_affine       ec_GF2m_simple_pts_make_affine
-#  undef ec_GF2m_simple_point_set_affine_coordinates
-#  define ec_GF2m_simple_point_set_affine_coordinates \
-                                                ec_GF2m_smp_pt_set_af_coords
-#  undef ec_GF2m_simple_point_get_affine_coordinates
-#  define ec_GF2m_simple_point_get_affine_coordinates \
-                                                ec_GF2m_smp_pt_get_af_coords
-#  undef ec_GF2m_simple_set_compressed_coordinates
-#  define ec_GF2m_simple_set_compressed_coordinates \
-                                                ec_GF2m_smp_set_compr_coords
-#  undef ec_GFp_simple_group_set_curve_GFp
-#  define ec_GFp_simple_group_set_curve_GFp       ec_GFp_simple_grp_set_curve_GFp
-#  undef ec_GFp_simple_group_get_curve_GFp
-#  define ec_GFp_simple_group_get_curve_GFp       ec_GFp_simple_grp_get_curve_GFp
-#  undef ec_GFp_simple_group_clear_finish
-#  define ec_GFp_simple_group_clear_finish        ec_GFp_simple_grp_clear_finish
-#  undef ec_GFp_simple_group_set_generator
-#  define ec_GFp_simple_group_set_generator       ec_GFp_simple_grp_set_generator
-#  undef ec_GFp_simple_group_get0_generator
-#  define ec_GFp_simple_group_get0_generator      ec_GFp_simple_grp_gt0_generator
-#  undef ec_GFp_simple_group_get_cofactor
-#  define ec_GFp_simple_group_get_cofactor        ec_GFp_simple_grp_get_cofactor
-#  undef ec_GFp_simple_point_clear_finish
-#  define ec_GFp_simple_point_clear_finish        ec_GFp_simple_pt_clear_finish
-#  undef ec_GFp_simple_point_set_to_infinity
-#  define ec_GFp_simple_point_set_to_infinity     ec_GFp_simple_pt_set_to_inf
-#  undef ec_GFp_simple_points_make_affine
-#  define ec_GFp_simple_points_make_affine        ec_GFp_simple_pts_make_affine
-#  undef ec_GFp_simple_set_Jprojective_coordinates_GFp
-#  define ec_GFp_simple_set_Jprojective_coordinates_GFp \
-                                                ec_GFp_smp_set_Jproj_coords_GFp
-#  undef ec_GFp_simple_get_Jprojective_coordinates_GFp
-#  define ec_GFp_simple_get_Jprojective_coordinates_GFp \
-                                                ec_GFp_smp_get_Jproj_coords_GFp
-#  undef ec_GFp_simple_point_set_affine_coordinates_GFp
-#  define ec_GFp_simple_point_set_affine_coordinates_GFp \
-                                                ec_GFp_smp_pt_set_af_coords_GFp
-#  undef ec_GFp_simple_point_get_affine_coordinates_GFp
-#  define ec_GFp_simple_point_get_affine_coordinates_GFp \
-                                                ec_GFp_smp_pt_get_af_coords_GFp
-#  undef ec_GFp_simple_set_compressed_coordinates_GFp
-#  define ec_GFp_simple_set_compressed_coordinates_GFp \
-                                                ec_GFp_smp_set_compr_coords_GFp
-#  undef ec_GFp_simple_point_set_affine_coordinates
-#  define ec_GFp_simple_point_set_affine_coordinates \
-                                                ec_GFp_smp_pt_set_af_coords
-#  undef ec_GFp_simple_point_get_affine_coordinates
-#  define ec_GFp_simple_point_get_affine_coordinates \
-                                                ec_GFp_smp_pt_get_af_coords
-#  undef ec_GFp_simple_set_compressed_coordinates
-#  define ec_GFp_simple_set_compressed_coordinates \
-                                                ec_GFp_smp_set_compr_coords
-#  undef ec_GFp_simple_group_check_discriminant
-#  define ec_GFp_simple_group_check_discriminant  ec_GFp_simple_grp_chk_discrim
-
-/* Hack som long STORE names */
-#  undef STORE_method_set_initialise_function
-#  define STORE_method_set_initialise_function    STORE_meth_set_initialise_fn
-#  undef STORE_method_set_cleanup_function
-#  define STORE_method_set_cleanup_function       STORE_meth_set_cleanup_fn
-#  undef STORE_method_set_generate_function
-#  define STORE_method_set_generate_function      STORE_meth_set_generate_fn
-#  undef STORE_method_set_modify_function
-#  define STORE_method_set_modify_function        STORE_meth_set_modify_fn
-#  undef STORE_method_set_revoke_function
-#  define STORE_method_set_revoke_function        STORE_meth_set_revoke_fn
-#  undef STORE_method_set_delete_function
-#  define STORE_method_set_delete_function        STORE_meth_set_delete_fn
-#  undef STORE_method_set_list_start_function
-#  define STORE_method_set_list_start_function    STORE_meth_set_list_start_fn
-#  undef STORE_method_set_list_next_function
-#  define STORE_method_set_list_next_function     STORE_meth_set_list_next_fn
-#  undef STORE_method_set_list_end_function
-#  define STORE_method_set_list_end_function      STORE_meth_set_list_end_fn
-#  undef STORE_method_set_update_store_function
-#  define STORE_method_set_update_store_function  STORE_meth_set_update_store_fn
-#  undef STORE_method_set_lock_store_function
-#  define STORE_method_set_lock_store_function    STORE_meth_set_lock_store_fn
-#  undef STORE_method_set_unlock_store_function
-#  define STORE_method_set_unlock_store_function  STORE_meth_set_unlock_store_fn
-#  undef STORE_method_get_initialise_function
-#  define STORE_method_get_initialise_function    STORE_meth_get_initialise_fn
-#  undef STORE_method_get_cleanup_function
-#  define STORE_method_get_cleanup_function       STORE_meth_get_cleanup_fn
-#  undef STORE_method_get_generate_function
-#  define STORE_method_get_generate_function      STORE_meth_get_generate_fn
-#  undef STORE_method_get_modify_function
-#  define STORE_method_get_modify_function        STORE_meth_get_modify_fn
-#  undef STORE_method_get_revoke_function
-#  define STORE_method_get_revoke_function        STORE_meth_get_revoke_fn
-#  undef STORE_method_get_delete_function
-#  define STORE_method_get_delete_function        STORE_meth_get_delete_fn
-#  undef STORE_method_get_list_start_function
-#  define STORE_method_get_list_start_function    STORE_meth_get_list_start_fn
-#  undef STORE_method_get_list_next_function
-#  define STORE_method_get_list_next_function     STORE_meth_get_list_next_fn
-#  undef STORE_method_get_list_end_function
-#  define STORE_method_get_list_end_function      STORE_meth_get_list_end_fn
-#  undef STORE_method_get_update_store_function
-#  define STORE_method_get_update_store_function  STORE_meth_get_update_store_fn
-#  undef STORE_method_get_lock_store_function
-#  define STORE_method_get_lock_store_function    STORE_meth_get_lock_store_fn
-#  undef STORE_method_get_unlock_store_function
-#  define STORE_method_get_unlock_store_function  STORE_meth_get_unlock_store_fn
-
-/* Hack some long TS names */
-#  undef TS_RESP_CTX_set_status_info_cond
-#  define TS_RESP_CTX_set_status_info_cond        TS_RESP_CTX_set_stat_info_cond
-#  undef TS_RESP_CTX_set_clock_precision_digits
-#  define TS_RESP_CTX_set_clock_precision_digits  TS_RESP_CTX_set_clk_prec_digits
-#  undef TS_CONF_set_clock_precision_digits
-#  define TS_CONF_set_clock_precision_digits      TS_CONF_set_clk_prec_digits
-
-/* Hack some long CMS names */
-#  undef CMS_RecipientInfo_ktri_get0_algs
-#  define CMS_RecipientInfo_ktri_get0_algs        CMS_RecipInfo_ktri_get0_algs
-#  undef CMS_RecipientInfo_ktri_get0_signer_id
-#  define CMS_RecipientInfo_ktri_get0_signer_id   CMS_RecipInfo_ktri_get0_sigr_id
-#  undef CMS_OtherRevocationInfoFormat_it
-#  define CMS_OtherRevocationInfoFormat_it        CMS_OtherRevocInfoFormat_it
-#  undef CMS_KeyAgreeRecipientIdentifier_it
-#  define CMS_KeyAgreeRecipientIdentifier_it      CMS_KeyAgreeRecipIdentifier_it
-#  undef CMS_OriginatorIdentifierOrKey_it
-#  define CMS_OriginatorIdentifierOrKey_it        CMS_OriginatorIdOrKey_it
-#  undef cms_SignerIdentifier_get0_signer_id
-#  define cms_SignerIdentifier_get0_signer_id     cms_SignerId_get0_signer_id
-#  undef CMS_RecipientInfo_kari_get0_orig_id
-#  define CMS_RecipientInfo_kari_get0_orig_id     CMS_RecipInfo_kari_get0_orig_id
-#  undef CMS_RecipientInfo_kari_get0_reks
-#  define CMS_RecipientInfo_kari_get0_reks        CMS_RecipInfo_kari_get0_reks
-#  undef CMS_RecipientInfo_kari_set0_pkey
-#  define CMS_RecipientInfo_kari_set0_pkey        CMS_RecipInfo_kari_set0_pkey
-#  undef CMS_RecipientInfo_kari_orig_id_cmp
-#  define CMS_RecipientInfo_kari_orig_id_cmp      CMS_RecipInfo_kari_orig_id_cmp
-#  undef CMS_RecipientEncryptedKey_cert_cmp
-#  define CMS_RecipientEncryptedKey_cert_cmp      CMS_RecipEncryptedKey_cert_cmp
-#  undef CMS_RecipientEncryptedKey_get0_id
-#  define CMS_RecipientEncryptedKey_get0_id       CMS_RecipEncryptedKey_get0_id
-
-/* Hack some long DTLS1 names */
-#  undef dtls1_retransmit_buffered_messages
-#  define dtls1_retransmit_buffered_messages      dtls1_retransmit_buffered_msgs
-
-/* Hack some long SRP names */
-#  undef SRP_generate_server_master_secret
-#  define SRP_generate_server_master_secret       SRP_gen_server_master_secret
-#  undef SRP_generate_client_master_secret
-#  define SRP_generate_client_master_secret       SRP_gen_client_master_secret
-
-/* Hack some long UI names */
-#  undef UI_method_get_prompt_constructor
-#  define UI_method_get_prompt_constructor        UI_method_get_prompt_constructr
-#  undef UI_method_set_prompt_constructor
-#  define UI_method_set_prompt_constructor        UI_method_set_prompt_constructr
-
-/* Hack some long RSA names */
-#  undef RSA_padding_check_PKCS1_OAEP_mgf1
-#  define RSA_padding_check_PKCS1_OAEP_mgf1       RSA_padding_chk_PKCS1_OAEP_mgf1
-
-# endif                         /* defined OPENSSL_SYS_VMS */
-
 /* Case insensitive linking causes problems.... */
-# if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_OS2)
+# if defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_VMS)
 #  undef ERR_load_CRYPTO_strings
 #  define ERR_load_CRYPTO_strings                 ERR_load_CRYPTOlib_strings
 #  undef OCSP_crlID_new
diff --git a/install.com b/install.com
deleted file mode 100644
index 6a0ea2d..0000000
--- a/install.com
+++ /dev/null
@@ -1,136 +0,0 @@
-$! INSTALL.COM -- Installs the files in a given directory tree
-$!
-$! Author: Richard Levitte <richard at levitte.org>
-$! Time of creation: 22-MAY-1998 10:13
-$!
-$! P1  root of the directory tree
-$! P2  "64" for 64-bit pointers.
-$!
-$!
-$! Announce/identify.
-$!
-$ proc = f$environment( "procedure")
-$ write sys$output "@@@ "+ -
-   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
-$!
-$ def_orig = f$environment( "default")
-$ on error then goto tidy
-$ on control_c then goto tidy
-$!
-$ if (p1 .eqs. "")
-$ then
-$   write sys$output "First argument missing."
-$   write sys$output -
-     "It should be the directory where you want things installed."
-$   exit
-$ endif
-$!
-$ if (f$getsyi("cpu") .lt. 128)
-$ then
-$   arch = "VAX"
-$ else
-$   arch = f$edit( f$getsyi( "arch_name"), "upcase")
-$   if (arch .eqs. "") then arch = "UNK"
-$ endif
-$!
-$ archd = arch
-$!
-$ if (p2 .nes. "")
-$ then
-$   if (p2 .eqs. "64")
-$   then
-$     archd = arch+ "_64"
-$   else
-$     if (p2 .nes. "32")
-$     then
-$       write sys$output "Second argument invalid."
-$       write sys$output "It should be "32", "64", or nothing."
-$       exit
-$     endif
-$   endif
-$ endif
-$!
-$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
-$ root_dev = f$parse( root, , , "device", "syntax_only")
-$ root_dir = f$parse( root, , , "directory", "syntax_only") -
-		   - ".][000000" - "[000000." - "][" - "[" - "]"
-$ root = root_dev + "[" + root_dir
-$!
-$ define /nolog wrk_sslroot 'root'.] /trans=conc
-$ define /nolog wrk_sslcerts wrk_sslroot:[certs]
-$ define /nolog wrk_sslinclude wrk_sslroot:[include]
-$ define /nolog wrk_ssllib wrk_sslroot:[lib]
-$ define /nolog wrk_sslprivate wrk_sslroot:[private]
-$ define /nolog wrk_sslxexe wrk_sslroot:['archd'_exe]
-$ define /nolog wrk_sslxlib wrk_sslroot:['arch'_lib]
-$!
-$! Exhibit the destination directory.
-$!
-$ write sys$output "   Installing to (WRK_SSLROOT) ="
-$ write sys$output "    ''f$trnlnm( "wrk_sslroot")'"
-$ write sys$output ""
-$!
-$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
-   create /directory /log wrk_sslroot:[000000]
-$ if f$parse("wrk_sslxexe:") .eqs. "" then -
-   create /directory /log wrk_sslxexe:
-$ if f$parse("wrk_sslxlib:") .eqs. "" then -
-   create /directory /log wrk_sslxlib:
-$ if f$parse("wrk_ssllib:") .eqs. "" then -
-   create /directory /log wrk_ssllib:
-$ if f$parse("wrk_sslinclude:") .eqs. "" then -
-   create /directory /log wrk_sslinclude:
-$ if f$parse("wrk_sslcerts:") .eqs. "" then -
-   create /directory /log wrk_sslcerts:
-$ if f$parse("wrk_sslprivate:") .eqs. "" then -
-   create /directory /log wrk_sslprivate:
-$ if f$parse("wrk_sslroot:[VMS]") .EQS. "" THEN -
-   create /directory /log wrk_sslroot:[VMS]
-$!
-$ sdirs := CRYPTO, SSL, APPS, VMS !!!, RSAREF, TEST, TOOLS
-$ exheader := e_os2.h
-$!
-$ copy /protection = w:re 'exheader' wrk_sslinclude: /log
-$!
-$ i = 0
-$ loop_sdirs: 
-$   d = f$edit( f$element(i, ",", sdirs), "trim")
-$   i = i + 1
-$   if d .eqs. "," then goto loop_sdirs_end
-$   write sys$output "Installing ", d, " files."
-$   set default [.'d']
-$   @ install-'d'.com 'root'] 'p2'
-$   set default 'def_orig'
-$ goto loop_sdirs
-$ loop_sdirs_end:
-$!
-$ write sys$output ""
-$ write sys$output "	Installation done!"
-$ write sys$output ""
-$ if (f$search( root+ "...]*.*;-1") .nes. "")
-$ then
-$   write sys$output "	You might want to purge ", root, "...]"
-$   write sys$output ""
-$ endif
-$!
-$ tidy:
-$!
-$ set default 'def_orig'
-$!
-$ call deass wrk_sslroot
-$ call deass wrk_sslcerts
-$ call deass wrk_sslinclude
-$ call deass wrk_ssllib
-$ call deass wrk_sslprivate
-$ call deass wrk_sslxexe
-$ call deass wrk_sslxlib
-$!
-$ exit
-$!
-$ deass: subroutine
-$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
-$ then
-$   deassign /process 'p1'
-$ endif
-$ endsubroutine
-$!
diff --git a/makevms.com b/makevms.com
deleted file mode 100755
index bfaf261..0000000
--- a/makevms.com
+++ /dev/null
@@ -1,1548 +0,0 @@
-$!
-$! MAKEVMS.COM
-$! Original Author:  UNKNOWN
-$! Rewritten By:  Robert Byer
-$!                Vice-President
-$!                A-Com Computing, Inc.
-$!                byer at mail.all-net.net
-$!
-$! Changes by Richard Levitte <richard at levitte.org>
-$!	      Zoltan Arpadffy <zoli at polarhome.com>
-$!
-$! This procedure creates the SSL libraries of "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB"
-$! "[.xxx.EXE.SSL]LIBSSL.OLB"
-$! The "xxx" denotes the machine architecture of ALPHA, IA64 or VAX.
-$!
-$! This procedures accepts two command line options listed below.
-$!
-$! P1 specifies one of the following build options:
-$!
-$!      ALL       Just build "everything".
-$!      CONFIG    Just build the "[.CRYPTO._xxx]OPENSSLCONF.H" file.
-$!      BUILDINF  Just build the "[.CRYPTO._xxx]BUILDINF.H" file.
-$!      SOFTLINKS Just fix the Unix soft links.
-$!      BUILDALL  Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done.
-$!      CRYPTO    Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library.
-$!      CRYPTO/x  Just build the x part of the
-$!                "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library.
-$!      SSL       Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library.
-$!      TEST      Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL.
-$!      APPS      Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL.
-$!      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]).
-$!               (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.
-$!
-$! P4 specifies which compiler to try to compile under.
-$!
-$!	  VAXC	 For VAX C.
-$!	  DECC	 For DEC C.
-$!	  GNUC	 For GNU C.
-$!	  LINK   To only link the programs from existing object files.
-$!               (not yet implemented)
-$!
-$! If you don't specify a compiler, it will try to determine which
-$! "C" compiler to use.
-$!
-$! P5, if defined, sets a TCP/IP library to use, through one of the following
-$! keywords:
-$!
-$!	UCX		for UCX or UCX emulation
-$!	TCPIP		for TCP/IP Services or TCP/IP Services emulation
-$!			(this is prefered over UCX)
-$!	SOCKETSHR	for SOCKETSHR+NETLIB
-$!	NONE		to avoid specifying which TCP/IP implementation to
-$!			use at build time (this works with DEC C).  This is
-$!			the default.
-$!
-$! P6, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up).
-$!
-$! P7, if defined, specifies a directory where ZLIB files (zlib.h,
-$! libz.olb) may be found.  Optionally, a non-default object library
-$! name may be included ("dev:[dir]libz_64.olb", for example).
-$!
-$!
-$! Announce/identify.
-$!
-$ proc = f$environment( "procedure")
-$ write sys$output "@@@ "+ -
-   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
-$!
-$ DEF_ORIG = F$ENVIRONMENT( "DEFAULT")
-$ ON ERROR THEN GOTO TIDY
-$ ON CONTROL_C THEN GOTO TIDY
-$!
-$! Check if we're in a batch job, and make sure we get to 
-$! the directory this script is in
-$!
-$ IF F$MODE() .EQS. "BATCH"
-$ THEN
-$   COMNAME=F$ENVIRONMENT("PROCEDURE")
-$   COMPATH=F$PARSE("A.;",COMNAME) - "A.;"
-$   SET DEF 'COMPATH'
-$ ENDIF
-$!
-$! Check What Architecture We Are Using.
-$!
-$ IF (F$GETSYI("CPU").LT.128)
-$ THEN
-$!
-$!  The Architecture Is VAX.
-$!
-$   ARCH = "VAX"
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  The Architecture Is Alpha, IA64 or whatever comes in the future.
-$!
-$   ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
-$   IF (ARCH .EQS. "") THEN ARCH = "UNK"
-$!
-$! End The Architecture Check.
-$!
-$ ENDIF
-$!
-$ ARCHD = ARCH
-$ LIB32 = "32"
-$ POINTER_SIZE = ""
-$!
-$! Get VMS version.
-$!
-$ VMS_VERSION = f$edit( f$getsyi( "VERSION"), "TRIM")
-$!
-$! Check To Make Sure We Have Valid Command Line Parameters.
-$!
-$ GOSUB CHECK_OPTIONS
-$!
-$! Check To See What We Are To Do.
-$!
-$ IF (BUILDCOMMAND.EQS."ALL")
-$ THEN
-$!
-$!  Start with building the OpenSSL configuration file.
-$!
-$   GOSUB CONFIG
-$!
-$!  Create The "BUILDINF.H" Include File.
-$!
-$   GOSUB BUILDINF
-$!
-$!  Fix The Unix Softlinks.
-$!
-$   GOSUB SOFTLINKS
-$!
-$ ENDIF
-$!
-$ IF (BUILDCOMMAND.EQS."ALL".OR.BUILDCOMMAND.EQS."BUILDALL")
-$ THEN
-$!
-$!  Build The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library.
-$!
-$   GOSUB CRYPTO
-$!
-$!  Build The [.xxx.EXE.SSL]LIBSSL.OLB Library.
-$!
-$   GOSUB SSL
-$!
-$!  Build The [.xxx.EXE.TEST] OpenSSL Test Utilities.
-$!
-$   GOSUB TEST
-$!
-$!  Build The [.xxx.EXE.APPS] OpenSSL Application Utilities.
-$!
-$   GOSUB APPS
-$!
-$!  Build The [.xxx.EXE.ENGINES] OpenSSL Shareable Engines.
-$!
-$   GOSUB ENGINES
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!    Build Just What The User Wants Us To Build.
-$!
-$     GOSUB 'BUILDCOMMAND'
-$!
-$ ENDIF
-$!
-$! Time To EXIT.
-$!
-$ GOTO TIDY
-$!
-$! Rebuild The [.CRYPTO._xxx]OPENSSLCONF.H" file.
-$!
-$ CONFIG:
-$!
-$! Tell The User We Are Creating The [.CRYPTO._xxx]OPENSSLCONF.H File.
-$!
-$ WRITE SYS$OUTPUT "Creating [.CRYPTO.''ARCHD']OPENSSLCONF.H Include File."
-$!
-$! First, make sure the directory exists.
-$!
-$ IF F$PARSE("SYS$DISK:[.CRYPTO.''ARCHD']") .EQS. "" THEN -
-     CREATE/DIRECTORY SYS$DISK:[.CRYPTO.'ARCHD']
-$!
-$! Different tar/UnZip versions/option may have named the file differently
-$ IF F$SEARCH("[.crypto]opensslconf.h_in") .NES. ""
-$ THEN
-$   OPENSSLCONF_H_IN = "[.crypto]opensslconf.h_in"
-$ ELSE
-$   IF F$SEARCH( "[.crypto]opensslconf_h.in") .NES. ""
-$   THEN
-$     OPENSSLCONF_H_IN = "[.crypto]opensslconf_h.in"
-$   ELSE
-$     ! For ODS-5
-$     IF F$SEARCH( "[.crypto]opensslconf.h.in") .NES. ""
-$     THEN
-$       OPENSSLCONF_H_IN = "[.crypto]opensslconf.h.in"
-$     ELSE
-$       WRITE SYS$ERROR "Couldn't find a [.crypto]opensslconf.h.in.  Exiting!"
-$       $STATUS = %X00018294 ! "%RMS-F-FNF, file not found".
-$       GOTO TIDY
-$     ENDIF
-$   ENDIF
-$ ENDIF
-$!
-$! Create The [.CRYPTO._xxx]OPENSSLCONF.H File.
-$! Make sure it has the right format.
-$!
-$ OSCH_NAME = "SYS$DISK:[.CRYPTO.''ARCHD']OPENSSLCONF.H"
-$ CREATE /FDL=SYS$INPUT: 'OSCH_NAME'
-RECORD
-        FORMAT stream_lf
-$ OPEN /APPEND H_FILE 'OSCH_NAME'
-$!
-$! Write The [.CRYPTO._xxx]OPENSSLCONF.H File.
-$!
-$ WRITE H_FILE "/* This file was automatically built using makevms.com */"
-$ WRITE H_FILE "/* and ''OPENSSLCONF_H_IN' */"
-$!
-$! Write a few macros that indicate how this system was built.
-$!
-$ WRITE H_FILE ""
-$ WRITE H_FILE "#ifndef OPENSSL_SYS_VMS"
-$ WRITE H_FILE "# define OPENSSL_SYS_VMS"
-$ WRITE H_FILE "#endif"
-$
-$!
-$! Defined the full SDIRS here.  It will be pruned depending on configuration.
-$! This is an exact copy of what's found in Makefile.in, with spaces replaced
-$! with commas.
-$!
-$ SDIRS := -
-        objects,-
-        md2,md4,md5,sha,mdc2,hmac,ripemd,whrlpool,-
-        des,aes,rc2,rc4,rc5,idea,bf,cast,camellia,seed,modes,-
-        bn,ec,rsa,dsa,ecdsa,dh,ecdh,dso,engine,-
-        buffer,bio,stack,lhash,rand,err,-
-        evp,asn1,pem,x509,x509v3,conf,txt_db,pkcs7,pkcs12,comp,ocsp,ui,-
-        cms,pqueue,ts,jpake,srp,store,cmac
-$
-$! One of the best way to figure out what the list should be is to do
-$! the following on a Unix system:
-$!   grep OPENSSL_NO_ crypto/include/internal/*.h crypto/*/*.h ssl/*.h engines/*.h engines/*/*.h|grep ':# *if'|sed -e 's/^.*def //'|sort|uniq
-$! For that reason, the list will also always end up in alphabetical order
-$ CONFIG_LOGICALS := AES,-
-		     ASM,INLINE_ASM,-
-		     BF,-
-		     CAMELLIA,-
-		     CAST,-
-		     CMS,-
-		     COMP,-
-		     DEPRECATED,-
-		     DES,-
-		     DGRAM,-
-		     DH,-
-		     DSA,-
-		     EC,-
-		     EC2M,-
-		     ECDH,-
-		     ECDSA,-
-		     EC_NISTP_64_GCC_128,-
-		     ENGINE,-
-		     ERR,-
-		     GMP,-
-		     GOST,-
-		     HEARTBEATS,-
-		     HMAC,-
-		     IDEA,-
-		     JPAKE,-
-		     MD2,-
-		     MD4,-
-		     MD5,-
-		     MDC2,-
-		     NEXTPROTONEG,-
-		     OCB,-
-		     OCSP,-
-		     PSK,-
-		     RC2,-
-		     RC4,-
-		     RC5,-
-		     RFC3779,-
-		     RMD160,-
-		     RSA,-
-		     SCT,-
-                     SCRYPT,-
-		     SCTP,-
-		     SEED,-
-		     SOCK,-
-		     SRP,-
-		     SRTP,-
-		     SSL3_METHOD,-
-		     SSL_TRACE,-
-		     STATIC_ENGINE,-
-		     STDIO,-
-		     STORE,-
-		     UNIT_TEST,-
-		     WHIRLPOOL
-$ CONFIG_EXPERIMENTAL := JPAKE,-
-			 STORE
-$! The following rules, which dictate how some algorithm choices affect
-$! others, are picked from Configure.
-$! Quick syntax:
-$!  list = item[ ; list]
-$!  item = algos / dependents
-$!  algos = algo [, algos]
-$!  dependents = dependent [, dependents]
-$! When a list of algos is specified in one item, it means that they must
-$! all be disabled for the rule to apply.
-$! When a list of dependents is specified in one item, it means that they
-$! will all be disabled if the rule applies.
-$! Rules are checked sequentially.  If a rule disables an algorithm, it will
-$! affect all following rules that depend on that algorithm being disabled.
-$! To force something to be enabled or disabled, have no algorithms in the
-$! algos part.
-$ CONFIG_DISABLE_RULES := RIJNDAEL/AES;-
-			  RMD160/RIPEMD;-
-			  DES/MDC2;-
-			  EC/ECDSA,ECDH;-
-			  MD5/SSL3,TLS1;-
-			  SHA/SSL3,TLS1;-
-			  RSA,DSA/SSL3,TLS1;-
-			  DH/SSL3,TLS1;-
-			  EC/GOST;-
-			  DSA/GOST;-
-			  DH/GOST;-
-			  /STATIC_ENGINE;-
-			  /DEPRECATED;-
-			  /EC_NISTP_64_GCC_128;-
-			  /GMP;-
-			  /MD2;-
-			  /RC5;-
-			  /RFC3779;-
-			  /SCTP;-
-			  /SSL_TRACE;-
-			  /UNIT_TEST
-$ CONFIG_ENABLE_RULES := ZLIB_DYNAMIC/ZLIB;-
-			 /THREADS
-$
-$! Architecture specific rule addtions
-$ IF ARCH .EQS. "VAX"
-$ THEN
-$   ! Disable algorithms that require 64-bit integers in C
-$   CONFIG_DISABLE_RULES = CONFIG_DISABLE_RULES + -
-			   ";/GOST" + -
-			   ";/WHIRLPOOL"
-$ ENDIF
-$
-$! Keep track of things to remove from SDIRS, have the items surrounded
-$! with commas
-$ SKIP_SDIRS = ","
-$
-$ CONFIG_LOG_I = 0
-$ CONFIG_LOG_LOOP11:
-$   CONFIG_LOG_E = F$EDIT(F$ELEMENT(CONFIG_LOG_I,",",CONFIG_LOGICALS),"TRIM")
-$   CONFIG_LOG_I = CONFIG_LOG_I + 1
-$   IF CONFIG_LOG_E .EQS. "" THEN GOTO CONFIG_LOG_LOOP11
-$   IF CONFIG_LOG_E .EQS. "," THEN GOTO CONFIG_LOG_LOOP11_END
-$   IF F$TRNLNM("OPENSSL_NO_"+CONFIG_LOG_E)
-$   THEN
-$       CONFIG_DISABLED_'CONFIG_LOG_E' := YES
-$       CONFIG_ENABLED_'CONFIG_LOG_E' := NO
-$	CONFIG_CHANGED_'CONFIG_LOG_E' := YES
-$	IF (SKIP_SDIRS - (","+CONFIG_LOG_E+",")) .EQS. SKIP_SDIRS THEN -
-	    SKIP_SDIRS = SKIP_SDIRS + CONFIG_LOG_E + ","
-$   ELSE
-$       CONFIG_DISABLED_'CONFIG_LOG_E' := NO
-$       CONFIG_ENABLED_'CONFIG_LOG_E' := YES
-$	! Because all non-experimental algorithms are assumed
-$	! enabled by default
-$	CONFIG_CHANGED_'CONFIG_LOG_E' := NO
-$	IF (SKIP_SDIRS - (","+CONFIG_LOG_E+",")) .NES. SKIP_SDIRS THEN -
-	    SKIP_SDIRS = SKIP_SDIRS - (CONFIG_LOG_E + ",")
-$   ENDIF
-$   GOTO CONFIG_LOG_LOOP11
-$ CONFIG_LOG_LOOP11_END:
-$
-$ CONFIG_LOG_I = 0
-$ CONFIG_LOG_LOOP12:
-$   CONFIG_LOG_E = F$EDIT(F$ELEMENT(CONFIG_LOG_I,",",CONFIG_EXPERIMENTAL),"TRIM")
-$   CONFIG_LOG_I = CONFIG_LOG_I + 1
-$   IF CONFIG_LOG_E .EQS. "" THEN GOTO CONFIG_LOG_LOOP12
-$   IF CONFIG_LOG_E .EQS. "," THEN GOTO CONFIG_LOG_LOOP12_END
-$   IF F$TRNLNM("OPENSSL_EXPERIMENTAL_"+CONFIG_LOG_E)
-$   THEN
-$	CONFIG_DISABLED_'CONFIG_LOG_E' := NO
-$	CONFIG_ENABLED_'CONFIG_LOG_E' := YES
-$	CONFIG_CHANGED_'CONFIG_LOG_E' := YES
-$	IF (SKIP_SDIRS - (","+CONFIG_LOG_E+",")) .NES. SKIP_SDIRS THEN -
-	    SKIP_SDIRS = SKIP_SDIRS - (CONFIG_LOG_E + ",")
-$   ELSE
-$	CONFIG_DISABLED_'CONFIG_LOG_E' := YES
-$	CONFIG_ENABLED_'CONFIG_LOG_E' := NO
-$	! Because all experimental algorithms are assumed
-$	! disabled by default
-$	CONFIG_CHANGED_'CONFIG_LOG_E' := NO
-$	IF (SKIP_SDIRS - (","+CONFIG_LOG_E+",")) .EQS. SKIP_SDIRS THEN -
-	    SKIP_SDIRS = SKIP_SDIRS + CONFIG_LOG_E + ","
-$   ENDIF
-$   GOTO CONFIG_LOG_LOOP12
-$ CONFIG_LOG_LOOP12_END:
-$
-$! Apply cascading disable rules
-$ CONFIG_DISABLE_I = 0
-$ CONFIG_DISABLE_LOOP0:
-$   CONFIG_DISABLE_E = F$EDIT(F$ELEMENT(CONFIG_DISABLE_I,";", -
-     CONFIG_DISABLE_RULES),"TRIM")
-$   CONFIG_DISABLE_I = CONFIG_DISABLE_I + 1
-$   IF CONFIG_DISABLE_E .EQS. "" THEN GOTO CONFIG_DISABLE_LOOP0
-$   IF CONFIG_DISABLE_E .EQS. ";" THEN GOTO CONFIG_DISABLE_LOOP0_END
-$
-$   CONFIG_DISABLE_ALGOS = F$EDIT(F$ELEMENT(0,"/",CONFIG_DISABLE_E),"TRIM")
-$   CONFIG_DISABLE_DEPENDENTS = F$EDIT(F$ELEMENT(1,"/",CONFIG_DISABLE_E),"TRIM")
-$   TO_DISABLE := YES
-$   CONFIG_ALGO_I = 0
-$   CONFIG_DISABLE_LOOP1:
-$     CONFIG_ALGO_E = F$EDIT(F$ELEMENT(CONFIG_ALGO_I,",", -
-       CONFIG_DISABLE_ALGOS),"TRIM")
-$     CONFIG_ALGO_I = CONFIG_ALGO_I + 1
-$     IF CONFIG_ALGO_E .EQS. "" THEN GOTO CONFIG_DISABLE_LOOP1
-$     IF CONFIG_ALGO_E .EQS. "," THEN GOTO CONFIG_DISABLE_LOOP1_END
-$     IF F$TYPE(CONFIG_DISABLED_'CONFIG_ALGO_E') .EQS. ""
-$     THEN
-$	TO_DISABLE := NO
-$     ELSE
-$	IF .NOT. CONFIG_DISABLED_'CONFIG_ALGO_E' THEN TO_DISABLE := NO
-$     ENDIF
-$     GOTO CONFIG_DISABLE_LOOP1
-$   CONFIG_DISABLE_LOOP1_END:
-$
-$   IF TO_DISABLE
-$   THEN
-$     CONFIG_DEPENDENT_I = 0
-$     CONFIG_DISABLE_LOOP2:
-$	CONFIG_DEPENDENT_E = F$EDIT(F$ELEMENT(CONFIG_DEPENDENT_I,",", -
-         CONFIG_DISABLE_DEPENDENTS),"TRIM")
-$	CONFIG_DEPENDENT_I = CONFIG_DEPENDENT_I + 1
-$	IF CONFIG_DEPENDENT_E .EQS. "" THEN GOTO CONFIG_DISABLE_LOOP2
-$	IF CONFIG_DEPENDENT_E .EQS. "," THEN GOTO CONFIG_DISABLE_LOOP2_END
-$       CONFIG_DISABLED_'CONFIG_DEPENDENT_E' := YES
-$       CONFIG_ENABLED_'CONFIG_DEPENDENT_E' := NO
-$	! Better not to assume defaults at this point...
-$	CONFIG_CHANGED_'CONFIG_DEPENDENT_E' := YES
-$	IF (SKIP_SDIRS - (","+CONFIG_DEPENDENT_E+",")) .EQS. SKIP_SDIRS THEN -
-	    SKIP_SDIRS = SKIP_SDIRS + CONFIG_DEPENDENT_E + ","
-$	WRITE SYS$ERROR -
-         "''CONFIG_DEPENDENT_E' disabled by rule ''CONFIG_DISABLE_E'"
-$	GOTO CONFIG_DISABLE_LOOP2
-$     CONFIG_DISABLE_LOOP2_END:
-$   ENDIF
-$   GOTO CONFIG_DISABLE_LOOP0
-$ CONFIG_DISABLE_LOOP0_END:
-$	
-$! Apply cascading enable rules
-$ CONFIG_ENABLE_I = 0
-$ CONFIG_ENABLE_LOOP0:
-$   CONFIG_ENABLE_E = F$EDIT(F$ELEMENT(CONFIG_ENABLE_I,";", -
-     CONFIG_ENABLE_RULES),"TRIM")
-$   CONFIG_ENABLE_I = CONFIG_ENABLE_I + 1
-$   IF CONFIG_ENABLE_E .EQS. "" THEN GOTO CONFIG_ENABLE_LOOP0
-$   IF CONFIG_ENABLE_E .EQS. ";" THEN GOTO CONFIG_ENABLE_LOOP0_END
-$
-$   CONFIG_ENABLE_ALGOS = F$EDIT(F$ELEMENT(0,"/",CONFIG_ENABLE_E),"TRIM")
-$   CONFIG_ENABLE_DEPENDENTS = F$EDIT(F$ELEMENT(1,"/",CONFIG_ENABLE_E),"TRIM")
-$   TO_ENABLE := YES
-$   CONFIG_ALGO_I = 0
-$   CONFIG_ENABLE_LOOP1:
-$     CONFIG_ALGO_E = F$EDIT(F$ELEMENT(CONFIG_ALGO_I,",", -
-       CONFIG_ENABLE_ALGOS),"TRIM")
-$     CONFIG_ALGO_I = CONFIG_ALGO_I + 1
-$     IF CONFIG_ALGO_E .EQS. "" THEN GOTO CONFIG_ENABLE_LOOP1
-$     IF CONFIG_ALGO_E .EQS. "," THEN GOTO CONFIG_ENABLE_LOOP1_END
-$     IF F$TYPE(CONFIG_ENABLED_'CONFIG_ALGO_E') .EQS. ""
-$     THEN
-$	TO_ENABLE := NO
-$     ELSE
-$	IF .NOT. CONFIG_ENABLED_'CONFIG_ALGO_E' THEN TO_ENABLE := NO
-$     ENDIF
-$     GOTO CONFIG_ENABLE_LOOP1
-$   CONFIG_ENABLE_LOOP1_END:
-$
-$   IF TO_ENABLE
-$   THEN
-$     CONFIG_DEPENDENT_I = 0
-$     CONFIG_ENABLE_LOOP2:
-$	CONFIG_DEPENDENT_E = F$EDIT(F$ELEMENT(CONFIG_DEPENDENT_I,",", -
-         CONFIG_ENABLE_DEPENDENTS),"TRIM")
-$	CONFIG_DEPENDENT_I = CONFIG_DEPENDENT_I + 1
-$	IF CONFIG_DEPENDENT_E .EQS. "" THEN GOTO CONFIG_ENABLE_LOOP2
-$	IF CONFIG_DEPENDENT_E .EQS. "," THEN GOTO CONFIG_ENABLE_LOOP2_END
-$       CONFIG_DISABLED_'CONFIG_DEPENDENT_E' := NO
-$       CONFIG_ENABLED_'CONFIG_DEPENDENT_E' := YES
-$	! Better not to assume defaults at this point...
-$	CONFIG_CHANGED_'CONFIG_DEPENDENT_E' := YES
-$	IF (SKIP_SDIRS - (","+CONFIG_DEPENDENT_E+",")) .NES. SKIP_SDIRS THEN -
-	    SKIP_SDIRS = SKIP_SDIRS - (CONFIG_DEPENDENT_E + ",")
-$	WRITE SYS$ERROR -
-         "''CONFIG_DEPENDENT_E' enabled by rule ''CONFIG_ENABLE_E'"
-$	GOTO CONFIG_ENABLE_LOOP2
-$     CONFIG_ENABLE_LOOP2_END:
-$   ENDIF
-$   GOTO CONFIG_ENABLE_LOOP0
-$ CONFIG_ENABLE_LOOP0_END:
-$
-$! Fix SDIRS
-$ SDIRS = ","+F$EDIT(SDIRS,"COLLAPSE")+","
-$ CONFIG_SKIP_I = 0
-$ CONFIG_SDIRS_LOOP1:
-$   CONFIG_SKIP_E = F$EDIT(F$ELEMENT(CONFIG_SKIP_I,",",SKIP_SDIRS),"TRIM")
-$   CONFIG_SKIP_I = CONFIG_SKIP_I + 1
-$   IF CONFIG_SKIP_E .EQS. "" THEN GOTO CONFIG_SDIRS_LOOP1
-$   IF CONFIG_SKIP_E .EQS. "," THEN GOTO CONFIG_SDIRS_LOOP1_END
-$   IF (SDIRS - (","+CONFIG_SKIP_E+",")) .NES. SDIRS THEN -
-       SDIRS = SDIRS - (CONFIG_SKIP_E+",")
-$   GOTO CONFIG_SDIRS_LOOP1
-$ CONFIG_SDIRS_LOOP1_END: 
-$ 
-$! Write to the configuration
-$ CONFIG_LOG_I = 0
-$ CONFIG_LOG_LOOP2:
-$   CONFIG_LOG_E = F$EDIT(F$ELEMENT(CONFIG_LOG_I,",",CONFIG_LOGICALS),"TRIM")
-$   CONFIG_LOG_I = CONFIG_LOG_I + 1
-$   IF CONFIG_LOG_E .EQS. "" THEN GOTO CONFIG_LOG_LOOP2
-$   IF CONFIG_LOG_E .EQS. "," THEN GOTO CONFIG_LOG_LOOP2_END
-$   IF CONFIG_DISABLED_'CONFIG_LOG_E'
-$   THEN
-$     WRITE H_FILE "#ifndef OPENSSL_NO_",CONFIG_LOG_E
-$     WRITE H_FILE "# define OPENSSL_NO_",CONFIG_LOG_E
-$     WRITE H_FILE "#endif"
-$   ELSE
-$     IF CONFIG_CHANGED_'CONFIG_LOG_E'
-$     THEN
-$	WRITE H_FILE "#ifndef OPENSSL_EXPERIMENTAL_",CONFIG_LOG_E
-$	WRITE H_FILE "# ifndef OPENSSL_NO_",CONFIG_LOG_E
-$	WRITE H_FILE "#  define OPENSSL_NO_",CONFIG_LOG_E
-$	WRITE H_FILE "# endif"
-$	WRITE H_FILE "#endif"
-$
-$	IF F$TYPE(USER_CCDEFS) .NES. ""
-$	THEN
-$	  USER_CCDEFS = USER_CCDEFS + ",OPENSSL_EXPERIMENTAL_" + CONFIG_LOG_E
-$       ELSE
-$	  USER_CCDEFS = "OPENSSL_EXPERIMENTAL_" + CONFIG_LOG_E
-$       ENDIF
-$     ENDIF
-$   ENDIF
-$   GOTO CONFIG_LOG_LOOP2
-$ CONFIG_LOG_LOOP2_END:
-$
-$ WRITE/SYMBOL SYS$ERROR "SDIRS = """,SDIRS,""""
-$!
-$ WRITE H_FILE ""
-$ WRITE H_FILE "/* STCP support comes with TCPIP 5.7 ECO 2 "
-$ WRITE H_FILE " * enable on newer systems / 2012-02-24 arpadffy */"
-$ WRITE H_FILE "#define OPENSSL_NO_SCTP"
-$ WRITE H_FILE ""
-$!
-$! Add in the common "crypto/opensslconf.h.in".
-$!
-$ TYPE 'OPENSSLCONF_H_IN' /OUTPUT=H_FILE:
-$!
-$ IF ARCH .NES. "VAX"
-$ THEN
-$!
-$!  Write the non-VAX specific data
-$!
-$   WRITE H_FILE "#if defined(HEADER_RC4_H)"
-$   WRITE H_FILE "#undef RC4_INT"
-$   WRITE H_FILE "#define RC4_INT unsigned int"
-$   WRITE H_FILE "#endif"
-$!
-$   WRITE H_FILE "#if defined(HEADER_DES_LOCL_H)"
-$   WRITE H_FILE "typedef unsigned int OSSL_DES_LONG;"
-$   WRITE H_FILE "#endif"
-$!
-$   WRITE H_FILE "#if defined(HEADER_BN_H)"
-$   WRITE H_FILE "#undef BN_LLONG"	! Never define with SIXTY_FOUR_BIT
-$   WRITE H_FILE "#undef SIXTY_FOUR_BIT_LONG"
-$   WRITE H_FILE "#undef SIXTY_FOUR_BIT"
-$   WRITE H_FILE "#define SIXTY_FOUR_BIT"
-$   WRITE H_FILE "#undef THIRTY_TWO_BIT"
-$   WRITE H_FILE "#endif"
-$
-$   WRITE H_FILE "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION"
-$!
-$!  Else...
-$!
-$ ELSE
-$!
-$!  Write the VAX specific data
-$!
-$   WRITE H_FILE "#if defined(HEADER_RC4_H)"
-$   WRITE H_FILE "#undef RC4_INT"
-$   WRITE H_FILE "#define RC4_INT unsigned char"
-$   WRITE H_FILE "#endif"
-$!
-$   WRITE H_FILE "#if defined(HEADER_DES_LOCL_H)"
-$   WRITE H_FILE "typedef unsigned int OSSL_DES_LONG;"
-$   WRITE H_FILE "#endif"
-$!
-$   WRITE H_FILE "#if defined(HEADER_BN_H)"
-$   WRITE H_FILE "#undef BN_LLONG"	! VAX C/DEC C doesn't have long long
-$   WRITE H_FILE "#undef SIXTY_FOUR_BIT_LONG"
-$   WRITE H_FILE "#undef SIXTY_FOUR_BIT"
-$   WRITE H_FILE "#undef THIRTY_TWO_BIT"
-$   WRITE H_FILE "#define THIRTY_TWO_BIT"
-$   WRITE H_FILE "#endif"
-$!
-$   WRITE H_FILE "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION"
-$   WRITE H_FILE "#define OPENSSL_EXPORT_VAR_AS_FUNCTION"
-$!
-$!  End
-$!
-$ ENDIF
-$!
-$! Close the [.CRYPTO._xxx]OPENSSLCONF.H file
-$!
-$ CLOSE H_FILE
-$!
-$! Purge The [.CRYPTO._xxx]OPENSSLCONF.H file
-$!
-$ PURGE SYS$DISK:[.CRYPTO.'ARCHD']OPENSSLCONF.H
-$!
-$! That's All, Time To RETURN.
-$!
-$ RETURN
-$!
-$! Rebuild The "[.CRYPTO._xxx]BUILDINF.H" file.
-$!
-$ BUILDINF:
-$!
-$! Tell The User We Are Creating The [.CRYPTO._xxx]BUILDINF.H File.
-$!
-$ WRITE SYS$OUTPUT "Creating [.CRYPTO.''ARCHD']BUILDINF.H Include File."
-$!
-$! Create The [.CRYPTO._xxx]BUILDINF.H File.
-$!
-$ BIH_NAME = "SYS$DISK:[.CRYPTO.''ARCHD']BUILDINF.H"
-$ CREATE /FDL=SYS$INPUT: 'BIH_NAME'
-RECORD
-        FORMAT stream_lf
-$!
-$ OPEN /APPEND H_FILE 'bih_name'
-$!
-$! Get The Current Date & Time.
-$!
-$ TIME = F$TIME()
-$!
-$! Write The [.CRYPTO._xxx]BUILDINF.H File.
-$!
-$ CFLAGS = ""
-$ if (POINTER_SIZE .nes. "")
-$ then
-$   CFLAGS = CFLAGS+ "/POINTER_SIZE=''POINTER_SIZE'"
-$ endif
-$ if (ZLIB .nes. "")
-$ then
-$   if (CFLAGS .nes. "") then CFLAGS = CFLAGS+ " "
-$   CFLAGS = CFLAGS+ "/DEFINE=ZLIB"
-$ endif
-$! 
-$ WRITE H_FILE "#define CFLAGS ""''CFLAGS'"""
-$ WRITE H_FILE "#define PLATFORM ""VMS ''ARCHD' ''VMS_VERSION'"""
-$ WRITE H_FILE "#define DATE ""''TIME'"" "
-$!
-$! Close The [.CRYPTO._xxx]BUILDINF.H File.
-$!
-$ CLOSE H_FILE
-$!
-$! Purge The [.CRYPTO._xxx]BUILDINF.H File.
-$!
-$ PURGE SYS$DISK:[.CRYPTO.'ARCHD']BUILDINF.H
-$!
-$! Delete [.CRYPTO]BUILDINF.H File, as there might be some residue from Unix.
-$!
-$ IF F$SEARCH("[.CRYPTO]BUILDINF.H") .NES. "" THEN -
-     DELETE SYS$DISK:[.CRYPTO]BUILDINF.H;*
-$!
-$! That's All, Time To RETURN.
-$!
-$ RETURN
-$!
-$! Copy a lot of files around.
-$!
-$ SOFTLINKS: 
-$!
-$!!!! Tell The User We Are Partly Rebuilding The [.APPS] Directory.
-$!!!!
-$!!! WRITE SYS$OUTPUT "Rebuilding The '[.APPS]MD4.C', '[.APPS]MD5.C' And '[.APPS]RD160.C' Files."
-$!!!!
-$!!! DELETE SYS$DISK:[.APPS]MD4.C;*,MD5.C;*,RMD160.C;*
-$!!!!
-$!!!! Copy MD4.C from [.CRYPTO.MD4] into [.APPS]
-$!!!!
-$!!! COPY SYS$DISK:[.CRYPTO.MD4]MD4.C SYS$DISK:[.APPS]
-$!!!!
-$!!!! Copy MD5.C from [.CRYPTO.MD5] into [.APPS]
-$!!!! Tell The User We Are Rebuilding The [.include.openssl] Directory.
-$!!!!
-$!!!! Copy RMD160.C from [.CRYPTO.RIPEMD] into [.APPS]
-$!!!!
-$!!! COPY SYS$DISK:[.CRYPTO.RIPEMD]RMD160.C SYS$DISK:[.APPS]
-$!
-$! Ensure that the [.include.openssl] directory contains a full set of
-$! real header files.  The distribution kit may have left real or fake
-$! symlinks there.  Rather than think about what's there, simply delete
-$! the destination files (fake or real symlinks) before copying the real
-$! header files in.  (Copying a real header file onto a real symlink
-$! merely duplicates the real header file at its source.)
-$!
-$! Tell The User We Are Rebuilding The [.include.openssl] Directory.
-$!
-$ WRITE SYS$OUTPUT "Rebuilding The '[.include.openssl]' Directory."
-$!
-$! First, make sure the directory exists.  If it did exist, delete all
-$! the existing header files (or fake or real symlinks).
-$!
-$ if f$parse( "sys$disk:[.include.openssl]") .eqs. ""
-$ then
-$   create /directory sys$disk:[.include.openssl]
-$ else
-$   delete sys$disk:[.include.openssl]*.h;*
-$ endif
-$!
-$! Copy All The ".H" Files From The Main Directory.
-$!
-$ EXHEADER := e_os2.h
-$ copy 'exheader' sys$disk:[.include.openssl]
-$!
-$! Copy All The ".H" Files From The [.CRYPTO] Directory Tree.
-$!
-$ HEADER_SDIRS := , -
-   'ARCHD', -
-   OBJECTS, -
-   MD2, MD4, MD5, SHA, MDC2, HMAC, RIPEMD, WHRLPOOL, -
-   DES, AES, RC2, RC4, RC5, IDEA, BF, CAST, CAMELLIA, SEED, MODES, -
-   BN, EC, RSA, DSA, ECDSA, DH, ECDH, DSO, ENGINE, -
-   BUFFER, BIO, STACK, LHASH, RAND, ERR, -
-   EVP, ASN1, PEM, X509, X509V3, CONF, TXT_DB, PKCS7, PKCS12, -
-   COMP, OCSP, UI, -
-   CMS, PQUEUE, TS, JPAKE, SRP, STORE, CMAC
-$!
-$ EXHEADER_ := crypto.h, opensslv.h, ebcdic.h, symhacks.h, ossl_typ.h
-$ EXHEADER_'ARCHD' := opensslconf.h
-$ EXHEADER_OBJECTS := objects.h, obj_mac.h
-$ EXHEADER_MD2 := md2.h
-$ EXHEADER_MD4 := md4.h
-$ EXHEADER_MD5 := md5.h
-$ EXHEADER_SHA := sha.h
-$ EXHEADER_MDC2 := mdc2.h
-$ EXHEADER_HMAC := hmac.h
-$ EXHEADER_RIPEMD := ripemd.h
-$ EXHEADER_WHRLPOOL := whrlpool.h
-$ EXHEADER_DES := des.h
-$ EXHEADER_AES := aes.h
-$ EXHEADER_RC2 := rc2.h
-$ EXHEADER_RC4 := rc4.h
-$ EXHEADER_RC5 := rc5.h
-$ EXHEADER_IDEA := idea.h
-$ EXHEADER_BF := blowfish.h
-$ EXHEADER_CAST := cast.h
-$ EXHEADER_CAMELLIA := camellia.h
-$ EXHEADER_SEED := seed.h
-$ EXHEADER_MODES := modes.h
-$ EXHEADER_BN := bn.h
-$ EXHEADER_EC := ec.h
-$ EXHEADER_RSA := rsa.h
-$ EXHEADER_DSA := dsa.h
-$ EXHEADER_ECDSA := ecdsa.h
-$ EXHEADER_DH := dh.h
-$ EXHEADER_ECDH := ecdh.h
-$ EXHEADER_DSO := dso.h
-$ EXHEADER_ENGINE := engine.h
-$ EXHEADER_BUFFER := buffer.h
-$ EXHEADER_BIO := bio.h
-$ EXHEADER_STACK := stack.h, safestack.h
-$ EXHEADER_LHASH := lhash.h
-$ EXHEADER_RAND := rand.h
-$ EXHEADER_ERR := err.h
-$ EXHEADER_EVP := evp.h
-$ EXHEADER_ASN1 := asn1.h, asn1_mac.h, asn1t.h
-$ EXHEADER_PEM := pem.h, pem2.h
-$ EXHEADER_X509 := x509.h, x509_vfy.h
-$ EXHEADER_X509V3 := x509v3.h
-$ EXHEADER_CONF := conf.h, conf_api.h
-$ EXHEADER_TXT_DB := txt_db.h
-$ EXHEADER_PKCS7 := pkcs7.h
-$ EXHEADER_PKCS12 := pkcs12.h
-$ EXHEADER_COMP := comp.h
-$ EXHEADER_OCSP := ocsp.h
-$ EXHEADER_UI := ui.h
-$ EXHEADER_CMS := cms.h
-$ EXHEADER_PQUEUE := pqueue.h
-$ EXHEADER_TS := ts.h
-$ EXHEADER_JPAKE := jpake.h
-$ EXHEADER_SRP := srp.h
-$!!! EXHEADER_STORE := store.h, str_compat.h
-$ EXHEADER_STORE := store.h
-$ EXHEADER_CMAC := cmac.h
-$!
-$ i = 0
-$ loop_header_sdirs:
-$   sdir = f$edit( f$element( i, ",", header_sdirs), "trim")
-$   i = i + 1
-$   if (sdir .eqs. ",") then goto loop_header_sdirs_end
-$   hdr_list = exheader_'sdir'
-$   if (sdir .nes. "") then sdir = "."+ sdir
-$   copy [.crypto'sdir']'hdr_list' sys$disk:[.include.openssl]
-$ goto loop_header_sdirs
-$ loop_header_sdirs_end:
-$!
-$! Copy All The ".H" Files From The [.SSL] Directory.
-$!
-$! (keep these in the same order as ssl/Makefile)
-$ EXHEADER := ssl.h, ssl2.h, ssl3.h, ssl23.h, tls1.h, dtls1.h, srtp.h
-$ copy sys$disk:[.ssl]'exheader' sys$disk:[.include.openssl]
-$!
-$! Purge the [.include.openssl] header files.
-$!
-$ purge sys$disk:[.include.openssl]*.h
-$!
-$! That's All, Time To RETURN.
-$!
-$ RETURN
-$!
-$! Build The "[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO''LIB32'.OLB" Library.
-$!
-$ CRYPTO:
-$!
-$! Tell The User What We Are Doing.
-$!
-$ WRITE SYS$OUTPUT ""
-$ WRITE SYS$OUTPUT -
-   "Building The [.",ARCHD,".EXE.CRYPTO]SSL_LIBCRYPTO''LIB32'.OLB Library."
-$!
-$! Go To The [.CRYPTO] Directory.
-$!
-$ SET DEFAULT SYS$DISK:[.CRYPTO]
-$!
-$! Build The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library.
-$!  
-$ @CRYPTO-LIB LIBRARY 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" -
-   "''ISSEVEN'" "''BUILDPART'" "''POINTER_SIZE'" "''ZLIB'"
-$!
-$! Go Back To The Main Directory.
-$!
-$ SET DEFAULT [-]
-$!
-$! Time To RETURN.
-$!
-$ RETURN
-$!
-$! Build The "[.xxx.EXE.SSL]SSL_LIBSSL''LIB32'.OLB" Library.
-$!
-$ SSL:
-$!
-$! Tell The User What We Are Doing.
-$!
-$ WRITE SYS$OUTPUT ""
-$ WRITE SYS$OUTPUT -
-   "Building The [.",ARCHD,".EXE.SSL]SSL_LIBSSL''LIB32'.OLB Library."
-$!
-$! Go To The [.SSL] Directory.
-$!
-$ SET DEFAULT SYS$DISK:[.SSL]
-$!
-$! Build The [.xxx.EXE.SSL]LIBSSL.OLB Library.
-$!
-$ @SSL-LIB LIBRARY 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" -
-   "''ISSEVEN'" "''POINTER_SIZE'" "''ZLIB'"
-$!
-$! Go Back To The Main Directory.
-$!
-$ SET DEFAULT [-]
-$!
-$! Time To Return.
-$!
-$ RETURN
-$!
-$! Build The OpenSSL Test Programs.
-$!
-$ TEST:
-$!
-$! Tell The User What We Are Doing.
-$!
-$ WRITE SYS$OUTPUT ""
-$ WRITE SYS$OUTPUT "Building The OpenSSL [.",ARCHD,".EXE.TEST] Test Utilities."
-$!
-$! Go To The [.TEST] Directory.
-$!
-$ SET DEFAULT SYS$DISK:[.TEST]
-$!
-$! Build The Test Programs.
-$!
-$ @MAKETESTS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" "''ISSEVEN'" -
-   "''POINTER_SIZE'" "''ZLIB'"
-$!
-$! Go Back To The Main Directory.
-$!
-$ SET DEFAULT [-]
-$!
-$! That's All, Time To RETURN.
-$!
-$ RETURN
-$!
-$! Build The OpenSSL Application Programs.
-$!
-$ APPS:
-$!
-$! Tell The User What We Are Doing.
-$!
-$ WRITE SYS$OUTPUT ""
-$ WRITE SYS$OUTPUT "Building OpenSSL [.",ARCHD,".EXE.APPS] Applications."
-$!
-$! Go To The [.APPS] Directory.
-$!
-$ SET DEFAULT SYS$DISK:[.APPS]
-$!
-$! Build The Application Programs.
-$!
-$ @MAKEAPPS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" "''ISSEVEN'" -
-   "" "''POINTER_SIZE'" "''ZLIB'"
-$!
-$! Go Back To The Main Directory.
-$!
-$ SET DEFAULT [-]
-$!
-$! That's All, Time To RETURN.
-$!
-$ RETURN
-$!
-$! Build The OpenSSL Application Programs.
-$!
-$ ENGINES:
-$!
-$! Tell The User What We Are Doing.
-$!
-$ WRITE SYS$OUTPUT ""
-$ WRITE SYS$OUTPUT "Building OpenSSL [.",ARCHD,".EXE.ENGINES] Engines."
-$!
-$! Go To The [.ENGINES] Directory.
-$!
-$ SET DEFAULT SYS$DISK:[.ENGINES]
-$!
-$! Build The Application Programs.
-$!
-$ @MAKEENGINES ENGINES 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" -
-   "''ISSEVEN'" "''BUILDPART'" "''POINTER_SIZE'" "''ZLIB'"
-$!
-$! Go Back To The Main Directory.
-$!
-$ SET DEFAULT [-]
-$!
-$! That's All, Time To RETURN.
-$!
-$ RETURN
-$!
-$! Check The User's Options.
-$!
-$ CHECK_OPTIONS:
-$!
-$! Check if there's a "part", and separate it out
-$!
-$ BUILDPART = F$ELEMENT(1,"/",P1)
-$ IF BUILDPART .EQS. "/"
-$ THEN
-$   BUILDPART = ""
-$ ELSE
-$   P1 = F$EXTRACT(0,F$LENGTH(P1) - F$LENGTH(BUILDPART) - 1, P1)
-$ ENDIF
-$!
-$! Check To See If P1 Is Blank.
-$!
-$ IF (P1.EQS."ALL")
-$ THEN
-$!
-$!   P1 Is ALL, So Build Everything.
-$!
-$    BUILDCOMMAND = "ALL"
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  Else, Check To See If P1 Has A Valid Argument.
-$!
-$   IF (P1.EQS."CONFIG").OR.(P1.EQS."BUILDINF").OR.(P1.EQS."SOFTLINKS") -
-       .OR.(P1.EQS."BUILDALL") -
-       .OR.(P1.EQS."CRYPTO").OR.(P1.EQS."SSL") -
-       .OR.(P1.EQS."TEST").OR.(P1.EQS."APPS") -
-       .OR.(P1.EQS."ENGINES")
-$   THEN
-$!
-$!    A Valid Argument.
-$!
-$     BUILDCOMMAND = P1
-$!
-$!  Else...
-$!
-$   ELSE
-$!
-$!    Tell The User We Don't Know What They Want.
-$!
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "USAGE:   @MAKEVMS.COM [Target] [Pointer size] [Debug option] <Compiler>"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "Example: @MAKEVMS.COM ALL """" NODEBUG "
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Target ",P1," Is Invalid.  The Valid Target Options Are:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "    ALL      :  Just Build Everything."
-$     WRITE SYS$OUTPUT "    CONFIG   :  Just build the [.CRYPTO._xxx]OPENSSLCONF.H file."
-$     WRITE SYS$OUTPUT "    BUILDINF :  Just build the [.CRYPTO._xxx]BUILDINF.H file."
-$     WRITE SYS$OUTPUT "    SOFTLINKS:  Just Fix The Unix soft links."
-$     WRITE SYS$OUTPUT "    BUILDALL :  Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done."
-$     WRITE SYS$OUTPUT "    CRYPTO   :  To Build Just The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library."
-$     WRITE SYS$OUTPUT "    CRYPTO/x :  To Build Just The x Part Of The"
-$     WRITE SYS$OUTPUT "                [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library."
-$     WRITE SYS$OUTPUT "    SSL      :  To Build Just The [.xxx.EXE.SSL]LIBSSL.OLB Library."
-$     WRITE SYS$OUTPUT "    TEST     :  To Build Just The OpenSSL Test Programs."
-$     WRITE SYS$OUTPUT "    APPS     :  To Build Just The OpenSSL Application Programs."
-$     WRITE SYS$OUTPUT "    ENGINES  :  To Build Just The ENGINES"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "    ALPHA[64]:  Alpha Architecture."
-$     WRITE SYS$OUTPUT "    IA64[64] :  IA64 Architecture."
-$     WRITE SYS$OUTPUT "    VAX      :  VAX Architecture."
-$     WRITE SYS$OUTPUT ""
-$!
-$!    Time To EXIT.
-$!
-$     GOTO TIDY
-$!
-$!  End The Valid Argument Check.
-$!
-$   ENDIF
-$!
-$! End The P1 Check.
-$!
-$ ENDIF
-$!
-$! Check P2 (POINTER_SIZE).
-$!
-$ IF (P2 .NES. "") .AND. (ARCH .NES. "VAX")
-$ THEN
-$!
-$   IF (P2 .EQS. "32")
-$   THEN
-$     POINTER_SIZE = "32"
-$   ELSE
-$     POINTER_SIZE = F$EDIT( P2, "COLLAPSE, UPCASE")
-$     IF ((POINTER_SIZE .EQS. "64") .OR. -
-       (POINTER_SIZE .EQS. "64=") .OR. -
-       (POINTER_SIZE .EQS. "64=ARGV"))
-$     THEN
-$       ARCHD = ARCH+ "_64"
-$       LIB32 = ""
-$     ELSE
-$!
-$!      Tell The User Entered An Invalid Option.
-$!
-$       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 (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.
-$!
-$       GOTO TIDY
-$!
-$     ENDIF
-$!
-$   ENDIF
-$!
-$! End The P2 (POINTER_SIZE) Check.
-$!
-$ ENDIF
-$!
-$! Check To See If P3 Is Blank.
-$!
-$ IF (P3.EQS."NODEBUG")
-$ THEN
-$!
-$!   P3 Is NODEBUG, So Compile Without Debugger Information.
-$!
-$    DEBUGGER = "NODEBUG"
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  Check To See If We Are To Compile With Debugger Information.
-$!
-$   IF (P3.EQS."DEBUG")
-$   THEN
-$!
-$!    Compile With Debugger Information.
-$!
-$     DEBUGGER = "DEBUG"
-$!
-$!  Else...
-$!
-$   ELSE
-$!
-$!    Tell The User Entered An Invalid Option.
-$!
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
-$     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
-$     WRITE SYS$OUTPUT ""
-$!
-$!    Time To EXIT.
-$!
-$     GOTO TIDY
-$!
-$!  End The Valid Argument Check.
-$!
-$   ENDIF
-$!
-$! End The P3 Check.
-$!
-$ ENDIF
-$!
-$! Check To See If P4 Is Blank.
-$!
-$ IF (P4.EQS."")
-$ THEN
-$!
-$!  O.K., The User Didn't Specify A Compiler, Let's Try To
-$!  Find Out Which One To Use.
-$!
-$!  Check To See If We Have GNU C.
-$!
-$   IF (F$TRNLNM("GNU_CC").NES."")
-$   THEN
-$!
-$!    Looks Like GNUC, Set To Use GNUC.
-$!
-$     COMPILER = "GNUC"
-$!
-$!    Tell The User We Are Using GNUC.
-$!
-$     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
-$!
-$!  End The GNU C Compiler Check.
-$!
-$   ENDIF
-$!
-$!  Check To See If We Have VAXC Or DECC.
-$!
-$   IF (F$GETSYI("CPU").GE.128).OR.(F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC")
-$   THEN 
-$!
-$!    Looks Like DECC, Set To Use DECC.
-$!
-$     COMPILER = "DECC"
-$!
-$!    Tell The User We Are Using DECC.
-$!
-$     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
-$!
-$!  Else...
-$!
-$   ELSE
-$!
-$!    Looks Like VAXC, Set To Use VAXC.
-$!
-$     COMPILER = "VAXC"
-$!
-$!    Tell The User We Are Using VAX C.
-$!
-$     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
-$!
-$!  End The DECC & VAXC Compiler Check.
-$!
-$   ENDIF
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  Check To See If The User Entered A Valid Parameter.
-$!
-$   IF (P4.EQS."VAXC").OR.(P4.EQS."DECC").OR.(P4.EQS."GNUC")!.OR.(P4.EQS."LINK")
-$   THEN
-$!
-$!    Check To See If The User Wanted To Just LINK.
-$!
-$     IF (P4.EQS."LINK")
-$     THEN
-$!
-$!      Looks Like LINK-only
-$!
-$       COMPILER = "LINK"
-$!
-$!      Tell The User We Are Only Linking.
-$!
-$       WRITE SYS$OUTPUT "LINK Only.  This actually NOT YET SUPPORTED!"
-$!
-$!    End LINK Check.
-$!
-$     ENDIF
-$!
-$!    Check To See If The User Wanted DECC.
-$!
-$     IF (P4.EQS."DECC")
-$     THEN
-$!
-$!      Looks Like DECC, Set To Use DECC.
-$!
-$       COMPILER = "DECC"
-$!
-$!      Tell The User We Are Using DECC.
-$!
-$       WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
-$!
-$!    End DECC Check.
-$!
-$     ENDIF
-$!
-$!    Check To See If We Are To Use VAXC.
-$!
-$     IF (P4.EQS."VAXC")
-$     THEN
-$!
-$!      Looks Like VAXC, Set To Use VAXC.
-$!
-$       COMPILER = "VAXC"
-$!
-$!      Tell The User We Are Using VAX C.
-$!
-$       WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
-$!
-$!    End VAXC Check
-$!
-$     ENDIF
-$!
-$!    Check To See If We Are To Use GNU C.
-$!
-$     IF (P4.EQS."GNUC")
-$     THEN
-$!
-$!      Looks Like GNUC, Set To Use GNUC.
-$!
-$       COMPILER = "GNUC"
-$!
-$!      Tell The User We Are Using GNUC.
-$!
-$       WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
-$!
-$!    End The GNU C Check.
-$!
-$     ENDIF
-$!
-$!  Else The User Entered An Invalid Argument.
-$!
-$   ELSE
-$!
-$!    Tell The User We Don't Know What They Want.
-$!
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ",P4," Is Invalid.  The Valid Options Are:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
-$     WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
-$     WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
-$     WRITE SYS$OUTPUT ""
-$!
-$!    Time To EXIT.
-$!
-$     GOTO TIDY
-$!
-$!  End The Valid Argument Check.
-$!
-$   ENDIF
-$!
-$! End The P4 Check.
-$!
-$ ENDIF
-$!
-$! Time to check the contents of P5, and to make sure we get the correct
-$! library.
-$!
-$ IF P5.EQS."SOCKETSHR" .OR. P5.EQS."MULTINET" .OR. P5.EQS."UCX" -
-     .OR. P5.EQS."TCPIP" .OR. P5.EQS."NONE"
-$ THEN
-$!
-$!  Check to see if SOCKETSHR was chosen
-$!
-$   IF P5.EQS."SOCKETSHR"
-$   THEN
-$!
-$!    Set the library to use SOCKETSHR
-$!
-$     TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
-$!
-$!    Tell the user
-$!
-$     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
-$!
-$!    Done with SOCKETSHR
-$!
-$   ENDIF
-$!
-$!  Check to see if MULTINET was chosen
-$!
-$   IF P5.EQS."MULTINET"
-$   THEN
-$!
-$!    Set the library to use UCX emulation.
-$!
-$     P5 = "UCX"
-$!
-$!    Tell the user
-$!
-$     WRITE SYS$OUTPUT "Using MultiNet via UCX emulation for TCP/IP"
-$!
-$!    Done with MULTINET
-$!
-$   ENDIF
-$!
-$!  Check to see if UCX was chosen
-$!
-$   IF P5.EQS."UCX"
-$   THEN
-$!
-$!    Set the library to use UCX.
-$!
-$     TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
-$!
-$!    Tell the user
-$!
-$     WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
-$!
-$!    Done with UCX
-$!
-$   ENDIF
-$!
-$!  Check to see if TCPIP was chosen
-$!
-$   IF P5.EQS."TCPIP"
-$   THEN
-$!
-$!    Set the library to use TCPIP (post UCX).
-$!
-$     TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
-$!
-$!    Tell the user
-$!
-$     WRITE SYS$OUTPUT "Using TCPIP (post UCX) for TCP/IP"
-$!
-$!    Done with TCPIP
-$!
-$   ENDIF
-$!
-$!  Check to see if NONE was chosen
-$!
-$   IF P5.EQS."NONE"
-$   THEN
-$!
-$!    Do not use a TCPIP library.
-$!
-$     TCPIP_LIB = ""
-$!
-$!    Tell the user
-$!
-$     WRITE SYS$OUTPUT "A specific TCPIP library will not be used."
-$!
-$!    Done with NONE.
-$!
-$   ENDIF
-$!
-$!  Set the TCPIP_TYPE symbol
-$!
-$   TCPIP_TYPE = P5
-$!
-$!  Print info
-$!
-$   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
-$!
-$!  Else The User Entered An Invalid Argument.
-$!
-$ ELSE
-$   IF P5 .NES. ""
-$   THEN
-$!
-$!    Tell The User We Don't Know What They Want.
-$!
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ",P5," Is Invalid.  The Valid Options Are:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
-$     WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
-$     WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP TCP/IP (post UCX) library."
-$     WRITE SYS$OUTPUT "    NONE       :  To not link with a specific TCP/IP library."
-$     WRITE SYS$OUTPUT ""
-$!
-$!    Time To EXIT.
-$!
-$     GOTO TIDY
-$   ELSE
-$!
-$! If TCPIP is not defined, then hardcode it to make
-$! it clear that no TCPIP is desired.
-$!
-$     IF P5 .EQS. ""
-$     THEN
-$       TCPIP_LIB = ""
-$       TCPIP_TYPE = "NONE"
-$     ELSE
-$!
-$!    Set the TCPIP_TYPE symbol
-$!
-$       TCPIP_TYPE = P5
-$     ENDIF
-$   ENDIF
-$!
-$!  Done with TCP/IP libraries
-$!
-$ ENDIF
-$!
-$! Special Threads For OpenVMS v7.1 Or Later
-$!
-$! Written By:  Richard Levitte
-$!              richard at levitte.org
-$!
-$!
-$! Check To See If We Have A Option For P6.
-$!
-$ IF (P6.EQS."")
-$ THEN
-$!
-$!  Get The Version Of VMS We Are Using.
-$!
-$   ISSEVEN :=
-$   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,VMS_VERSION))
-$   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
-$!
-$!  Check To See If The VMS Version Is v7.1 Or Later.
-$!
-$   IF (TMP.GE.71)
-$   THEN
-$!
-$!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
-$!
-$     ISSEVEN := ,PTHREAD_USE_D4
-$!
-$!  End The VMS Version Check.
-$!
-$   ENDIF
-$!
-$! End The P6 Check.
-$!
-$ ENDIF
-$!
-$!
-$! Check To See If We Have A ZLIB Option.
-$!
-$ ZLIB = P7
-$ IF (ZLIB .NES. "")
-$ THEN
-$!
-$!  Check for expected ZLIB files.
-$!
-$   err = 0
-$   file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
-$   if (f$search( file1) .eqs. "")
-$   then
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
-$     WRITE SYS$OUTPUT "    Can't find header: ''file1'"
-$     err = 1
-$   endif
-$!
-$   file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
-$   if (f$search( file2) .eqs. "")
-$   then
-$     if (err .eq. 0)
-$     then
-$       WRITE SYS$OUTPUT ""
-$       WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
-$     endif
-$     WRITE SYS$OUTPUT "    Can't find library: ''file2'"
-$     WRITE SYS$OUTPUT ""
-$     err = err+ 2
-$   endif
-$   if (err .eq. 1)
-$   then
-$     WRITE SYS$OUTPUT ""
-$   endif
-$!
-$   if (err .ne. 0)
-$   then
-$     GOTO TIDY
-$   endif
-$!
-$!  Print info
-$!
-$   WRITE SYS$OUTPUT "ZLIB library spec: ", file2
-$!
-$! End The ZLIB Check.
-$!
-$ ENDIF
-$!
-$!  Time To RETURN...
-$!
-$ RETURN
-$!
-$ TIDY:
-$!
-$! Close any open files.
-$!
-$ if (f$trnlnm( "h_file", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
-   close h_file
-$!
-$! Restore the original default device:[directory].
-$!
-$ SET DEFAULT 'DEF_ORIG'
-$!
-$ EXIT
-$!
diff --git a/ssl/install-ssl.com b/ssl/install-ssl.com
deleted file mode 100755
index c213357..0000000
--- a/ssl/install-ssl.com
+++ /dev/null
@@ -1,116 +0,0 @@
-$! INSTALL-SSL.COM -- Installs the files in a given directory tree
-$!
-$! Author: Richard Levitte <richard at levitte.org>
-$! Time of creation: 22-MAY-1998 10:13
-$!
-$! P1  root of the directory tree
-$! P2  "64" for 64-bit pointers.
-$!
-$!
-$! Announce/identify.
-$!
-$ proc = f$environment( "procedure")
-$ write sys$output "@@@ "+ -
-   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
-$!
-$ on error then goto tidy
-$ on control_c then goto tidy
-$!
-$ if p1 .eqs. ""
-$ then
-$   write sys$output "First argument missing."
-$   write sys$output -
-     "It should be the directory where you want things installed."
-$   exit
-$ endif
-$!
-$ if (f$getsyi( "cpu") .lt. 128)
-$ then
-$     arch = "VAX"
-$ else
-$     arch = f$edit( f$getsyi( "arch_name"), "upcase")
-$     if (arch .eqs. "") then arch = "UNK"
-$ endif
-$!
-$ archd = arch
-$ lib32 = "32"
-$ shr = "_SHR32"
-$!
-$ if (p2 .nes. "")
-$ then
-$   if (p2 .eqs. "64")
-$   then
-$     archd = arch+ "_64"
-$     lib32 = ""
-$     shr = "_SHR"
-$   else
-$     if (p2 .nes. "32")
-$     then
-$       write sys$output "Second argument invalid."
-$       write sys$output "It should be "32", "64", or nothing."
-$       exit
-$     endif
-$   endif
-$ endif
-$!
-$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
-$ root_dev = f$parse(root,,,"device","syntax_only")
-$ root_dir = f$parse(root,,,"directory","syntax_only") - -
-   "[000000." - "][" - "[" - "]"
-$ root = root_dev + "[" + root_dir
-$!
-$ define /nolog wrk_sslroot 'root'.] /trans=conc
-$ define /nolog wrk_sslinclude wrk_sslroot:[include]
-$ define /nolog wrk_sslxlib wrk_sslroot:['arch'_lib]
-$!
-$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
-   create /directory /log wrk_sslroot:[000000]
-$ if f$parse("wrk_sslinclude:") .eqs. "" then -
-   create /directory /log wrk_sslinclude:
-$ if f$parse("wrk_sslxlib:") .eqs. "" then -
-   create /directory /log wrk_sslxlib:
-$!
-$ exheader := ssl.h, ssl2.h, ssl3.h, tls1.h, dtls1.h, srtp.h
-$ libs := ssl_libssl
-$!
-$ xexe_dir := [-.'archd'.exe.ssl]
-$!
-$ copy /protection = w:re 'exheader' wrk_sslinclude: /log
-$!
-$ i = 0
-$ loop_lib: 
-$   e = f$edit(f$element(i, ",", libs),"trim")
-$   i = i + 1
-$   if e .eqs. "," then goto loop_lib_end
-$   set noon
-$! Object library.
-$   file = xexe_dir+ e+ lib32+ ".olb"
-$   if f$search( file) .nes. ""
-$   then
-$     copy /protection = w:re 'file' wrk_sslxlib: /log
-$   endif
-$! Shareable image.
-$   file = xexe_dir+ e+ shr+ ".exe"
-$   if f$search( file) .nes. ""
-$   then
-$     copy /protection = w:re 'file' wrk_sslxlib: /log
-$   endif
-$   set on
-$ goto loop_lib
-$ loop_lib_end:
-$!
-$ tidy:
-$!
-$ call deass wrk_sslroot
-$ call deass wrk_sslinclude
-$ call deass wrk_sslxlib
-$!
-$ exit
-$!
-$ deass: subroutine
-$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
-$ then
-$   deassign /process 'p1'
-$ endif
-$ endsubroutine
-$!
diff --git a/ssl/ssl-lib.com b/ssl/ssl-lib.com
deleted file mode 100644
index 5ccdbf3..0000000
--- a/ssl/ssl-lib.com
+++ /dev/null
@@ -1,956 +0,0 @@
-$!
-$!  SSL-LIB.COM
-$!  Written By:  Robert Byer
-$!               Vice-President
-$!               A-Com Computing, Inc.
-$!               byer at mail.all-net.net
-$!
-$!  Changes by Richard Levitte <richard at levitte.org>
-$!
-$!  This command file compiles and creates the "[.xxx.EXE.SSL]LIBSSL.OLB" 
-$!  library for OpenSSL.  The "xxx" denotes the machine architecture of
-$!  ALPHA, IA64 or VAX.
-$!
-$!  It is written to detect what type of machine you are compiling on
-$!  (i.e. ALPHA or VAX) and which "C" compiler you have (i.e. VAXC, DECC 
-$!  or GNU C) or you can specify which compiler to use.
-$!
-$!  Specify the following as P1 to build just that part or ALL to just
-$!  build everything.
-$!
-$!    		LIBRARY    To just compile the [.xxx.EXE.SSL]LIBSSL.OLB Library.
-$!
-$!  Specify DEBUG or NODEBUG as P2 to compile with or without debugger
-$!  information.
-$!
-$!  Specify which compiler at P3 to try to compile under.
-$!
-$!	   VAXC	 For VAX C.
-$!	   DECC	 For DEC C.
-$!	   GNUC	 For GNU C.
-$!
-$!  If you don't specify a compiler, it will try to determine which
-$!  "C" compiler to use.
-$!
-$!  P4, if defined, sets a TCP/IP library to use, through one of the following
-$!  keywords:
-$!
-$!	UCX		for UCX
-$!	TCPIP		for TCPIP (post UCX)
-$!	SOCKETSHR	for SOCKETSHR+NETLIB
-$!
-$!  P5, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
-$!
-$!  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
-$!  name may be included ("dev:[dir]libz_64.olb", for example).
-$!
-$!
-$! Announce/identify.
-$!
-$ proc = f$environment( "procedure")
-$ write sys$output "@@@ "+ -
-   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
-$!
-$! Define A TCP/IP Library That We Will Need To Link To.
-$! (That Is, If We Need To Link To One.)
-$!
-$ TCPIP_LIB = ""
-$ ZLIB_LIB = ""
-$!
-$! Check What Architecture We Are Using.
-$!
-$ IF (F$GETSYI("CPU").LT.128)
-$ THEN
-$!
-$!  The Architecture Is VAX.
-$!
-$   ARCH = "VAX"
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  The Architecture Is Alpha, IA64 or whatever comes in the future.
-$!
-$   ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
-$   IF (ARCH .EQS. "") THEN ARCH = "UNK"
-$!
-$! End The Architecture Check.
-$!
-$ ENDIF
-$!
-$ ARCHD = ARCH
-$ LIB32 = "32"
-$ OPT_FILE = ""
-$ POINTER_SIZE = ""
-$!
-$! Check To Make Sure We Have Valid Command Line Parameters.
-$!
-$ GOSUB CHECK_OPTIONS
-$!
-$! Define The OBJ and EXE Directories.
-$!
-$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.SSL]
-$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.SSL]
-$!
-$! Specify the destination directory in any /MAP option.
-$!
-$ if (LINKMAP .eqs. "MAP")
-$ then
-$   LINKMAP = LINKMAP+ "=''EXE_DIR'"
-$ endif
-$!
-$! Add the location prefix to the linker options file name.
-$!
-$ if (OPT_FILE .nes. "")
-$ then
-$   OPT_FILE = EXE_DIR+ OPT_FILE
-$ endif
-$!
-$! Initialise logical names and such
-$!
-$ GOSUB INITIALISE
-$!
-$! Tell The User What Kind of Machine We Run On.
-$!
-$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
-$!
-$! Check To See If The Architecture Specific OBJ Directory Exists.
-$!
-$ IF (F$PARSE(OBJ_DIR).EQS."")
-$ THEN
-$!
-$!  It Dosen't Exist, So Create It.
-$!
-$   CREATE/DIR 'OBJ_DIR'
-$!
-$! End The Architecture Specific OBJ Directory Check.
-$!
-$ ENDIF
-$!
-$! Check To See If The Architecture Specific Directory Exists.
-$!
-$ IF (F$PARSE(EXE_DIR).EQS."")
-$ THEN
-$!
-$!  It Dosen't Exist, So Create It.
-$!
-$   CREATE/DIR 'EXE_DIR'
-$!
-$! End The Architecture Specific Directory Check.
-$!
-$ ENDIF
-$!
-$! Define The Library Name.
-$!
-$ SSL_LIB := 'EXE_DIR'SSL_LIBSSL'LIB32'.OLB
-$!
-$! Define The CRYPTO-LIB We Are To Use.
-$!
-$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
-$!
-$! Check To See What We Are To Do.
-$!
-$ IF (BUILDALL.EQS."TRUE")
-$ THEN
-$!
-$!  Since Nothing Special Was Specified, Do Everything.
-$!
-$   GOSUB LIBRARY
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  Build Just What The User Wants Us To Build.
-$!
-$   GOSUB 'BUILDALL'
-$!
-$! End The BUILDALL Check.
-$!
-$ ENDIF
-$!
-$! Time To EXIT.
-$!
-$ EXIT:
-$ GOSUB CLEANUP
-$ EXIT   
-$!
-$! Compile The Library.
-$!
-$ LIBRARY:
-$!
-$! Check To See If We Already Have A "[.xxx.EXE.SSL]SSL_LIBSSL''LIB32'.OLB" Library...
-$!
-$ IF (F$SEARCH(SSL_LIB).EQS."")
-$ THEN
-$!
-$! Guess Not, Create The Library.
-$!
-$   LIBRARY/CREATE/OBJECT 'SSL_LIB'
-$!
-$! End The Library Exist Check.
-$!
-$ ENDIF
-$!
-$! Define The Different SSL "library" Files.
-$!
-$ LIB_SSL = "s3_srvr, s3_clnt, s3_lib, s3_enc,s3_pkt,s3_both,s3_cbc,"+ -
-	    "t1_meth,  t1_srvr, t1_clnt, t1_lib, t1_enc,       t1_ext,"+ -
-	    "d1_meth,  d1_srvr, d1_clnt, d1_lib,        d1_pkt,"+ -
-	    "d1_both,d1_srtp,"+ -
-	    "ssl_lib,ssl_cert,ssl_sess,"+ -
-	    "ssl_ciph,ssl_stat,ssl_rsa,"+ -
-	    "ssl_asn1,ssl_txt,ssl_init,ssl_conf,"+ -
-	    "bio_ssl,ssl_err,t1_reneg,tls_srp,t1_trce,ssl_utst"
-$!
-$! Tell The User That We Are Compiling The Library.
-$!
-$ WRITE SYS$OUTPUT "Building The ",SSL_LIB," Library."
-$!
-$! Define A File Counter And Set It To "0"
-$!
-$ FILE_COUNTER = 0
-$!
-$! Top Of The File Loop.
-$!
-$ NEXT_FILE:
-$!
-$! O.K, Extract The File Name From The File List.
-$!
-$ FILE_NAME = F$EDIT(F$ELEMENT(FILE_COUNTER,",",LIB_SSL),"TRIM")
-$!
-$! Check To See If We Are At The End Of The File List.
-$!
-$ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
-$!
-$! Increment The Counter.
-$!
-$ FILE_COUNTER = FILE_COUNTER + 1
-$!
-$! Create The Source File Name.
-$!
-$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
-$!
-$! Create The Object File Name.
-$!
-$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
-$ ON WARNING THEN GOTO NEXT_FILE
-$!
-$! Check To See If The File We Want To Compile Is Actually There.
-$!
-$ IF (F$SEARCH(SOURCE_FILE).EQS."")
-$ THEN
-$!
-$!  Tell The User That The File Dosen't Exist.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Exit The Build.
-$!
-$   EXIT
-$!
-$! End The File Exists Check.
-$!
-$ ENDIF
-$!
-$!  Tell The User What File We Are Compiling.
-$!
-$ WRITE SYS$OUTPUT "	",FILE_NAME,".c"
-$!
-$! Compile The File.
-$!
-$ ON ERROR THEN GOTO NEXT_FILE
-$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
-$!
-$! Add It To The Library.
-$!
-$ LIBRARY/REPLACE/OBJECT 'SSL_LIB' 'OBJECT_FILE'
-$!
-$! Time To Clean Up The Object File.
-$!
-$ DELETE 'OBJECT_FILE';*
-$!
-$! Go Back And Get The Next File Name.
-$!
-$ GOTO NEXT_FILE
-$!
-$! All Done With This Library.
-$!
-$ FILE_DONE:
-$!
-$! Tell The User That We Are All Done.
-$!
-$ WRITE SYS$OUTPUT "Library ",SSL_LIB," Compiled."
-$!
-$! Time To RETURN.
-$!
-$ RETURN
-$!
-$! Check The User's Options.
-$!
-$ CHECK_OPTIONS:
-$!
-$! Check To See If P1 Is Blank.
-$!
-$ IF (P1.EQS."ALL")
-$ THEN
-$!
-$!   P1 Is Blank, So Build Everything.
-$!
-$    BUILDALL = "TRUE"
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  Else, Check To See If P1 Has A Valid Argument.
-$!
-$   IF (P1.EQS."LIBRARY")
-$   THEN
-$!
-$!    A Valid Argument.
-$!
-$     BUILDALL = P1
-$!
-$!  Else...
-$!
-$   ELSE
-$!
-$!    Tell The User We Don't Know What They Want.
-$!
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "    ALL      :  Just Build Everything."
-$     WRITE SYS$OUTPUT "    LIBRARY  :  To Compile Just The [.xxx.EXE.SSL]LIBSSL.OLB Library."
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "    ALPHA[64]:  Alpha Architecture."
-$     WRITE SYS$OUTPUT "    IA64[64] :  IA64 Architecture."
-$     WRITE SYS$OUTPUT "    VAX      :  VAX Architecture."
-$     WRITE SYS$OUTPUT ""
-$!
-$!    Time To EXIT.
-$!
-$     EXIT
-$!
-$!  End The Valid Argument Check.
-$!
-$   ENDIF
-$!
-$! End The P1 Check.
-$!
-$ ENDIF
-$!
-$! Check To See If P2 Is Blank.
-$!
-$ IF (P2.EQS."NODEBUG")
-$ THEN
-$!
-$!  P2 Is NODEBUG, So Compile Without Debugger Information.
-$!
-$   DEBUGGER  = "NODEBUG"
-$   LINKMAP = "NOMAP"
-$   TRACEBACK = "NOTRACEBACK" 
-$   GCC_OPTIMIZE = "OPTIMIZE"
-$   CC_OPTIMIZE = "OPTIMIZE"
-$   WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
-$   WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  Check To See If We Are To Compile With Debugger Information.
-$!
-$   IF (P2.EQS."DEBUG")
-$   THEN
-$!
-$!    Compile With Debugger Information.
-$!
-$     DEBUGGER  = "DEBUG"
-$     LINKMAP = "MAP"
-$     TRACEBACK = "TRACEBACK"
-$     GCC_OPTIMIZE = "NOOPTIMIZE"
-$     CC_OPTIMIZE = "NOOPTIMIZE"
-$     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
-$     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
-$   ELSE
-$!
-$!    Tell The User Entered An Invalid Option.
-$!
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
-$     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
-$     WRITE SYS$OUTPUT ""
-$!
-$!    Time To EXIT.
-$!
-$     EXIT
-$!
-$!  End The Valid Argument Check.
-$!
-$   ENDIF
-$!
-$! End The P2 Check.
-$!
-$ ENDIF
-$!
-$! Special Threads For OpenVMS v7.1 Or Later
-$!
-$! Written By:  Richard Levitte
-$!              richard at levitte.org
-$!
-$!
-$! Check To See If We Have A Option For P5.
-$!
-$ IF (P5.EQS."")
-$ THEN
-$!
-$!  Get The Version Of VMS We Are Using.
-$!
-$   ISSEVEN :=
-$   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
-$   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
-$!
-$!  Check To See If The VMS Version Is v7.1 Or Later.
-$!
-$   IF (TMP.GE.71)
-$   THEN
-$!
-$!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
-$!
-$     ISSEVEN := ,PTHREAD_USE_D4
-$!
-$!  End The VMS Version Check.
-$!
-$   ENDIF
-$!
-$! End The P5 Check.
-$!
-$ ENDIF
-$!
-$! Check P6 (POINTER_SIZE).
-$!
-$ IF (P6 .NES. "") .AND. (ARCH .NES. "VAX")
-$ THEN
-$!
-$   IF (P6 .EQS. "32")
-$   THEN
-$     POINTER_SIZE = " /POINTER_SIZE=32"
-$   ELSE
-$     POINTER_SIZE = F$EDIT( P6, "COLLAPSE, UPCASE")
-$     IF ((POINTER_SIZE .EQS. "64") .OR. -
-       (POINTER_SIZE .EQS. "64=") .OR. -
-       (POINTER_SIZE .EQS. "64=ARGV"))
-$     THEN
-$       ARCHD = ARCH+ "_64"
-$       LIB32 = ""
-$       POINTER_SIZE = " /POINTER_SIZE=64"
-$     ELSE
-$!
-$!      Tell The User Entered An Invalid Option.
-$!
-$       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 (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.
-$!
-$       EXIT
-$!
-$     ENDIF
-$!
-$   ENDIF
-$!
-$! End The P6 (POINTER_SIZE) Check.
-$!
-$ ENDIF
-$!
-$! Set basic C compiler /INCLUDE directories.
-$!
-$ CC_INCLUDES = "SYS$DISK:[-.CRYPTO],SYS$DISK:[-]"
-$!
-$! Check To See If P3 Is Blank.
-$!
-$ IF (P3.EQS."")
-$ THEN
-$!
-$!  O.K., The User Didn't Specify A Compiler, Let's Try To
-$!  Find Out Which One To Use.
-$!
-$!  Check To See If We Have GNU C.
-$!
-$   IF (F$TRNLNM("GNU_CC").NES."")
-$   THEN
-$!
-$!    Looks Like GNUC, Set To Use GNUC.
-$!
-$     P3 = "GNUC"
-$!
-$!  End The GNU C Compiler Check.
-$!
-$   ELSE
-$!
-$!  Check To See If We Have VAXC Or DECC.
-$!
-$     IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
-$     THEN 
-$!
-$!      Looks Like DECC, Set To Use DECC.
-$!
-$       P3 = "DECC"
-$!
-$!      Else...
-$!
-$     ELSE
-$!
-$!      Looks Like VAXC, Set To Use VAXC.
-$!
-$       P3 = "VAXC"
-$!
-$!    End The VAXC Compiler Check.
-$!
-$     ENDIF
-$!
-$!  End The DECC & VAXC Compiler Check.
-$!
-$   ENDIF
-$!
-$!  End The Compiler Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Have A Option For P4.
-$!
-$ IF (P4.EQS."")
-$ THEN
-$!
-$!  Find out what socket library we have available
-$!
-$   IF F$PARSE("SOCKETSHR:") .NES. ""
-$   THEN
-$!
-$!    We have SOCKETSHR, and it is my opinion that it's the best to use.
-$!
-$     P4 = "SOCKETSHR"
-$!
-$!    Tell the user
-$!
-$     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
-$!
-$!    Else, let's look for something else
-$!
-$   ELSE
-$!
-$!    Like UCX (the reason to do this before Multinet is that the UCX
-$!    emulation is easier to use...)
-$!
-$     IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
-	 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
-	 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
-$     THEN
-$!
-$!	Last resort: a UCX or UCX-compatible library
-$!
-$	P4 = "UCX"
-$!
-$!      Tell the user
-$!
-$       WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
-$!
-$!	That was all...
-$!
-$     ENDIF
-$   ENDIF
-$ ENDIF
-$!
-$! Set Up Initial CC Definitions, Possibly With User Ones
-$!
-$ 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"
-$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
-	CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
-$!
-$! Check To See If We Have A ZLIB Option.
-$!
-$ ZLIB = P7
-$ IF (ZLIB .NES. "")
-$ THEN
-$!
-$!  Check for expected ZLIB files.
-$!
-$   err = 0
-$   file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
-$   if (f$search( file1) .eqs. "")
-$   then
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
-$     WRITE SYS$OUTPUT "    Can't find header: ''file1'"
-$     err = 1
-$   endif
-$   file1 = f$parse( "A.;", ZLIB)- "A.;"
-$!
-$   file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
-$   if (f$search( file2) .eqs. "")
-$   then
-$     if (err .eq. 0)
-$     then
-$       WRITE SYS$OUTPUT ""
-$       WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
-$     endif
-$     WRITE SYS$OUTPUT "    Can't find library: ''file2'"
-$     WRITE SYS$OUTPUT ""
-$     err = err+ 2
-$   endif
-$   if (err .eq. 1)
-$   then
-$     WRITE SYS$OUTPUT ""
-$   endif
-$!
-$   if (err .ne. 0)
-$   then
-$     EXIT
-$   endif
-$!
-$   CCDEFS = """ZLIB=1"", "+ CCDEFS
-$   CC_INCLUDES = CC_INCLUDES+ ", "+ file1
-$   ZLIB_LIB = ", ''file2' /library"
-$!
-$!  Print info
-$!
-$   WRITE SYS$OUTPUT "ZLIB library spec: ", file2
-$!
-$! End The ZLIB Check.
-$!
-$ ENDIF
-$!
-$!  Check To See If The User Entered A Valid Parameter.
-$!
-$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
-$ THEN
-$!
-$!  Check To See If The User Wanted DECC.
-$!
-$   IF (P3.EQS."DECC")
-$   THEN
-$!
-$!    Looks Like DECC, Set To Use DECC.
-$!
-$     COMPILER = "DECC"
-$!
-$!    Tell The User We Are Using DECC.
-$!
-$     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
-$!
-$!    Use DECC...
-$!
-$     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" + -
-       " /INCLUDE=(''CC_INCLUDES') " + CCEXTRAFLAGS
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_DECC_OPTIONS.OPT"
-$!
-$!  End DECC Check.
-$!
-$   ENDIF
-$!
-$!  Check To See If We Are To Use VAXC.
-$!
-$   IF (P3.EQS."VAXC")
-$   THEN
-$!
-$!    Looks Like VAXC, Set To Use VAXC.
-$!
-$     COMPILER = "VAXC"
-$!
-$!    Tell The User We Are Using VAX C.
-$!
-$     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
-$!
-$!    Compile Using VAXC.
-$!
-$     CC = "CC"
-$     IF ARCH.NES."VAX"
-$     THEN
-$	WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
-$	EXIT
-$     ENDIF
-$     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
-$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
-	   "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
-$     CCDEFS = CCDEFS + ",""VAXC"""
-$!
-$!    Define <sys> As SYS$COMMON:[SYSLIB]
-$!
-$     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
-$!
-$!  End VAXC Check
-$!
-$   ENDIF
-$!
-$!  Check To See If We Are To Use GNU C.
-$!
-$   IF (P3.EQS."GNUC")
-$   THEN
-$!
-$!    Looks Like GNUC, Set To Use GNUC.
-$!
-$     COMPILER = "GNUC"
-$!
-$!    Tell The User We Are Using GNUC.
-$!
-$     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
-$!
-$!    Use GNU C...
-$!
-$     IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
-$     CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
-	   "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
-$!
-$!  End The GNU C Check.
-$!
-$   ENDIF
-$!
-$!  Set up default defines
-$!
-$   CCDEFS = """FLAT_INC=1""," + CCDEFS
-$!
-$!  Finish up the definition of CC.
-$!
-$   IF COMPILER .EQS. "DECC"
-$   THEN
-$     IF CCDISABLEWARNINGS .EQS. ""
-$     THEN
-$       CC4DISABLEWARNINGS = "DOLLARID"
-$     ELSE
-$       CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
-$       CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
-$     ENDIF
-$     CC4DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
-$   ELSE
-$     CCDISABLEWARNINGS = ""
-$     CC4DISABLEWARNINGS = ""
-$   ENDIF
-$   CC2 = CC + " /DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
-$   CC3 = CC + " /DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS
-$   CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
-$   IF COMPILER .EQS. "DECC"
-$   THEN
-$     CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS
-$   ELSE
-$     CC4 = CC
-$   ENDIF
-$!
-$!  Show user the result
-$!
-$   WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC
-$!
-$!  Else The User Entered An Invalid Argument.
-$!
-$ ELSE
-$!
-$!  Tell The User We Don't Know What They Want.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
-$   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
-$   WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Time To EXIT.
-$!
-$   EXIT
-$ ENDIF
-$!
-$! Time to check the contents, and to make sure we get the correct library.
-$!
-$ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX" -
-     .OR. P4.EQS."TCPIP" .OR. P4.EQS."NONE"
-$ THEN
-$!
-$!  Check to see if SOCKETSHR was chosen
-$!
-$   IF P4.EQS."SOCKETSHR"
-$   THEN
-$!
-$!    Set the library to use SOCKETSHR
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
-$!
-$!    Done with SOCKETSHR
-$!
-$   ENDIF
-$!
-$!  Check to see if MULTINET was chosen
-$!
-$   IF P4.EQS."MULTINET"
-$   THEN
-$!
-$!    Set the library to use UCX emulation.
-$!
-$     P4 = "UCX"
-$!
-$!    Done with MULTINET
-$!
-$   ENDIF
-$!
-$!  Check to see if UCX was chosen
-$!
-$   IF P4.EQS."UCX"
-$   THEN
-$!
-$!    Set the library to use UCX.
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
-$     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
-$     THEN
-$       TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
-$     ELSE
-$       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
-	  TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
-$     ENDIF
-$!
-$!    Done with UCX
-$!
-$   ENDIF
-$!
-$!  Check to see if TCPIP was chosen
-$!
-$   IF P4.EQS."TCPIP"
-$   THEN
-$!
-$!    Set the library to use TCPIP (post UCX).
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
-$!
-$!    Done with TCPIP
-$!
-$   ENDIF
-$!
-$!  Check to see if NONE was chosen
-$!
-$   IF P4.EQS."NONE"
-$   THEN
-$!
-$!    Do not use a TCPIP library.
-$!
-$     TCPIP_LIB = ""
-$!
-$!    Done with NONE
-$!
-$   ENDIF
-$!
-$!  Print info
-$!
-$   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
-$!
-$!  Else The User Entered An Invalid Argument.
-$!
-$ ELSE
-$!
-$!  Tell The User We Don't Know What They Want.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The Option ",P4," Is Invalid.  The Valid Options Are:"
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
-$   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
-$   WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP (post UCX) TCP/IP library."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Time To EXIT.
-$!
-$   EXIT
-$!
-$!  Done with TCP/IP libraries
-$!
-$ ENDIF
-$!
-$!  Time To RETURN...
-$!
-$ RETURN
-$!
-$ INITIALISE:
-$!
-$! Save old value of the logical name OPENSSL
-$!
-$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
-$!
-$! Save directory information
-$!
-$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
-$ __HERE = F$EDIT(__HERE,"UPCASE")
-$ __TOP = __HERE - "SSL]"
-$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
-$!
-$! Set up the logical name OPENSSL to point at the include directory
-$!
-$ DEFINE OPENSSL/NOLOG '__INCLUDE'
-$!
-$! Done
-$!
-$ RETURN
-$!
-$ CLEANUP:
-$!
-$! Restore the logical name OPENSSL if it had a value
-$!
-$ IF __SAVE_OPENSSL .EQS. ""
-$ THEN
-$   DEASSIGN OPENSSL
-$ ELSE
-$   DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
-$ ENDIF
-$!
-$! Done
-$!
-$ RETURN
diff --git a/test/clean_test.com b/test/clean_test.com
deleted file mode 100755
index 7df633f..0000000
--- a/test/clean_test.com
+++ /dev/null
@@ -1,35 +0,0 @@
-$!
-$! Delete various test results files.
-$!
-$ def_orig = f$environment( "default")
-$ proc = f$environment( "procedure")
-$ proc_dev_dir = f$parse( "A.;", proc) - "A.;"
-$!
-$ on control_c then goto tidy
-$ on error then goto tidy
-$!
-$ set default 'proc_dev_dir'
-$!
-$ files := *.cms;*, *.srl;*, *.ss;*, -
-   cms.err;*, cms.out;*, newreq.pem;*, -
-   p.txt-zlib-cipher;*, -
-   smtst.txt;*, testkey.pem;*, testreq.pem;*, -
-   test_*.err;*, test_*.out;*, -
-   .rnd;*
-$!
-$ delim = ","
-$ i = 0
-$ loop:
-$    file = f$edit( f$element( i, delim, files), "trim")
-$    if (file .eqs. delim) then goto loop_end
-$    if (f$search( file) .nes. "") then -
-      delete 'p1' 'file'
-$    i = i+ 1
-$ goto loop
-$ loop_end:
-$!
-$ tidy:
-$ 
-$ if (f$type( def_orig) .nes. "") then -
-   set default 'def_orig'
-$!
diff --git a/test/maketests.com b/test/maketests.com
deleted file mode 100644
index b0ff39d..0000000
--- a/test/maketests.com
+++ /dev/null
@@ -1,1099 +0,0 @@
-$!
-$!  MAKETESTS.COM
-$!  Written By:  Robert Byer
-$!               Vice-President
-$!               A-Com Computing, Inc.
-$!               byer at mail.all-net.net
-$!
-$!  Changes by Richard Levitte <richard at levitte.org>
-$!
-$!  This command files compiles and creates all the various different
-$!  "test" programs for the different types of encryption for OpenSSL.
-$!  It was written so it would try to determine what "C" compiler to
-$!  use or you can specify which "C" compiler to use.
-$!
-$!  The test "executables" will be placed in a directory called
-$!  [.xxx.EXE.TEST] where "xxx" denotes ALPHA, IA64, or VAX, depending
-$!  on your machine architecture.
-$!
-$!  Specify DEBUG or NODEBUG P1 to compile with or without debugger
-$!  information.
-$!
-$!  Specify which compiler at P2 to try to compile under.
-$!
-$!	   VAXC	 For VAX C.
-$!	   DECC	 For DEC C.
-$!	   GNUC	 For GNU C.
-$!
-$!  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
-$!  keywords:
-$!
-$!	UCX		for UCX
-$!	SOCKETSHR	for SOCKETSHR+NETLIB
-$!
-$!  P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
-$!
-$!
-$!  P5, 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).
-$!
-$!  P6, if defined, specifies a directory where ZLIB files (zlib.h,
-$!  libz.olb) may be found.  Optionally, a non-default object library
-$!  name may be included ("dev:[dir]libz_64.olb", for example).
-$!
-$!
-$! Announce/identify.
-$!
-$ proc = f$environment( "procedure")
-$ write sys$output "@@@ "+ -
-   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
-$!
-$! Define A TCP/IP Library That We Will Need To Link To.
-$! (That is, If We Need To Link To One.)
-$!
-$ TCPIP_LIB = ""
-$ ZLIB_LIB = ""
-$!
-$! Check Which Architecture We Are Using.
-$!
-$ if (f$getsyi( "cpu") .lt. 128)
-$ then
-$    ARCH = "VAX"
-$ else
-$    ARCH = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
-$    if (ARCH .eqs. "") then ARCH = "UNK"
-$ endif
-$!
-$ ARCHD = ARCH
-$ LIB32 = "32"
-$ OPT_FILE = ""
-$ POINTER_SIZE = ""
-$!
-$! Check To Make Sure We Have Valid Command Line Parameters.
-$!
-$ GOSUB CHECK_OPTIONS
-$!
-$! Define The OBJ and EXE Directories.
-$!
-$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.TEST]
-$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.TEST]
-$!
-$! Specify the destination directory in any /MAP option.
-$!
-$ if (LINKMAP .eqs. "MAP")
-$ then
-$   LINKMAP = LINKMAP+ "=''EXE_DIR'"
-$ endif
-$!
-$! Add the location prefix to the linker options file name.
-$!
-$ if (OPT_FILE .nes. "")
-$ then
-$   OPT_FILE = EXE_DIR+ OPT_FILE
-$ endif
-$!
-$! Initialise logical names and such
-$!
-$ GOSUB INITIALISE
-$!
-$! Tell The User What Kind of Machine We Run On.
-$!
-$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
-$!
-$! Define The CRYPTO-LIB We Are To Use.
-$!
-$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
-$!
-$! Define The SSL We Are To Use.
-$!
-$ SSL_LIB := SYS$DISK:[-.'ARCHD'.EXE.SSL]SSL_LIBSSL'LIB32'.OLB
-$!
-$! Create the OBJ and EXE Directories, if needed.
-$!
-$ IF (F$PARSE(OBJ_DIR).EQS."") THEN -
-   CREATE /DIRECTORY 'OBJ_DIR'
-$ IF (F$PARSE(EXE_DIR).EQS."") THEN -
-   CREATE /DIRECTORY 'EXE_DIR'
-$!
-$! Check To See If We Have The Proper Libraries.
-$!
-$ GOSUB LIB_CHECK
-$!
-$! Check To See If We Have A Linker Option File.
-$!
-$ GOSUB CHECK_OPT_FILE
-$!
-$! Define The TEST Files.
-$! NOTE: Some might think this list ugly.  However, it's made this way to
-$! reflect the EXE variable in Makefile as closely as possible,
-$! thereby making it fairly easy to verify that the lists are the same.
-$!
-$ TEST_FILES = "BNTEST,ECTEST,ECDSATEST,ECDHTEST,IDEATEST,"+ -
-	       "MD2TEST,MD4TEST,MD5TEST,HMACTEST,WP_TEST,"+ -
-	       "RC2TEST,RC4TEST,RC5TEST,"+ -
-	       "DESTEST,SHA1TEST,SHA256T,SHA512T,"+ -
-	       "MDC2TEST,RMDTEST,"+ -
-	       "RANDTEST,DHTEST,ENGINETEST,"+ -
-	       "GOST2814789TEST,"+ -
-	       "BFTEST,CASTTEST,SSLTEST,"+ -
-	       "EXPTEST,DSATEST,RSA_TEST,"+ -
-	       "EVP_TEST,EVP_EXTRA_TEST,IGETEST,"+ -
-	       "JPAKETEST,SRPTEST,V3NAMETEST,"+ -
-	       "HEARTBEAT_TEST,P5_CRPT2_TEST,"+ -
-	       "CONSTANT_TIME_TEST"
-$! Should we add MTTEST,PQ_TEST,LH_TEST,DIVTEST,TABTEST as well?
-$!
-$! Additional directory information.
-$ T_D_BNTEST             := [-.crypto.bn]
-$ T_D_ECTEST             := [-.crypto.ec]
-$ T_D_ECDSATEST          := [-.crypto.ecdsa]
-$ T_D_ECDHTEST           := [-.crypto.ecdh]
-$ T_D_IDEATEST           := [-.crypto.idea]
-$ T_D_MD2TEST            := [-.crypto.md2]
-$ T_D_MD4TEST            := [-.crypto.md4]
-$ T_D_MD5TEST            := [-.crypto.md5]
-$ T_D_HMACTEST           := [-.crypto.hmac]
-$ T_D_WP_TEST            := [-.crypto.whrlpool]
-$ T_D_RC2TEST            := [-.crypto.rc2]
-$ T_D_RC4TEST            := [-.crypto.rc4]
-$ T_D_RC5TEST            := [-.crypto.rc5]
-$ T_D_DESTEST            := [-.crypto.des]
-$ T_D_SHATEST            := [-.crypto.sha]
-$ T_D_SHA1TEST           := [-.crypto.sha]
-$ T_D_SHA256T            := [-.crypto.sha]
-$ T_D_SHA512T            := [-.crypto.sha]
-$ T_D_MDC2TEST           := [-.crypto.mdc2]
-$ T_D_RMDTEST            := [-.crypto.ripemd]
-$ T_D_RANDTEST           := [-.crypto.rand]
-$ T_D_DHTEST             := [-.crypto.dh]
-$ T_D_ENGINETEST         := [-.crypto.engine]
-$ T_D_GOST2814789TEST    := [-.engines.ccgost]
-$ T_D_BFTEST             := [-.crypto.bf]
-$ T_D_CASTTEST           := [-.crypto.cast]
-$ T_D_SSLTEST            := [-.ssl]
-$ T_D_EXPTEST            := [-.crypto.bn]
-$ T_D_DSATEST            := [-.crypto.dsa]
-$ T_D_RSA_TEST           := [-.crypto.rsa]
-$ T_D_EVP_TEST           := [-.crypto.evp]
-$ T_D_EVP_EXTRA_TEST     := [-.crypto.evp]
-$ T_D_IGETEST            := [-.test]
-$ T_D_JPAKETEST          := [-.crypto.jpake]
-$ T_D_SRPTEST            := [-.crypto.srp]
-$ T_D_V3NAMETEST         := [-.crypto.x509v3]
-$ T_D_HEARTBEAT_TEST     := [-.ssl]
-$ T_D_P5_CRPT2_TEST      := [-.crypto.evp]
-$ T_D_CONSTANT_TIME_TEST := [-.crypto]
-$!
-$ TCPIP_PROGRAMS = ",,"
-$ IF COMPILER .EQS. "VAXC" THEN -
-     TCPIP_PROGRAMS = ",SSLTEST,"
-$!
-$! Define A File Counter And Set It To "0".
-$!
-$ FILE_COUNTER = 0
-$!
-$! Top Of The File Loop.
-$!
-$ NEXT_FILE:
-$!
-$! O.K, Extract The File Name From The File List.
-$!
-$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",TEST_FILES)
-$!
-$! Check To See If We Are At The End Of The File List.
-$!
-$ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
-$!
-$! Increment The Counter.
-$!
-$ FILE_COUNTER = FILE_COUNTER + 1
-$!
-$! Create The Source File Name.
-$!
-$ SOURCE_FILE = "SYS$DISK:" + T_D_'FILE_NAME' + FILE_NAME + ".C"
-$!
-$! Create The Object File Name.
-$!
-$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
-$!
-$! Create The Executable File Name.
-$!
-$ EXE_FILE = EXE_DIR + FILE_NAME + ".EXE"
-$ ON WARNING THEN GOTO NEXT_FILE
-$!
-$! Check To See If The File We Want To Compile Actually Exists.
-$!
-$ IF (F$SEARCH(SOURCE_FILE).EQS."")
-$ THEN
-$!
-$!  Tell The User That The File Dosen't Exist.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Exit The Build.
-$!
-$   GOTO EXIT
-$ ENDIF
-$!
-$! Tell The User What We Are Building.
-$!
-$ WRITE SYS$OUTPUT "Building The ",FILE_NAME," Test Program."
-$!
-$! Compile The File.
-$!
-$ ON ERROR THEN GOTO NEXT_FILE
-$ CC /OBJECT='OBJECT_FILE' 'SOURCE_FILE'
-$ ON WARNING THEN GOTO NEXT_FILE
-$!
-$! Check If What We Are About To Compile Works Without A TCP/IP Library.
-$!
-$ IF ((TCPIP_LIB.EQS."").AND.((TCPIP_PROGRAMS-FILE_NAME).NES.TCPIP_PROGRAMS))
-$ THEN
-$!
-$!  Inform The User That A TCP/IP Library Is Needed To Compile This Program.
-$!
-$   WRITE SYS$OUTPUT -
-	  FILE_NAME," Needs A TCP/IP Library.  Can't Link.  Skipping..."
-$   GOTO NEXT_FILE
-$!
-$! End The TCP/IP Library Check.
-$!
-$ ENDIF
-$!
-$! Link The Program, Check To See If We Need To Link With RSAREF Or Not.
-$! Check To See If We Are To Link With A Specific TCP/IP Library.
-$!
-$!  Don't Link With The RSAREF Routines And TCP/IP Library.
-$!
-$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /EXECTABLE = 'EXE_FILE' -
-   'OBJECT_FILE', -
-   'SSL_LIB' /LIBRARY, -
-   'CRYPTO_LIB' /LIBRARY -
-   'TCPIP_LIB' -
-   'ZLIB_LIB' -
-   ,'OPT_FILE' /OPTIONS
-$!
-$! Go Back And Do It Again.
-$!
-$ GOTO NEXT_FILE
-$!
-$! All Done With This Library Part.
-$!
-$ FILE_DONE:
-$!
-$! All Done, Time To Exit.
-$!
-$ EXIT:
-$ GOSUB CLEANUP
-$ EXIT
-$!
-$! Check For The Link Option FIle.
-$!
-$ CHECK_OPT_FILE:
-$!
-$! Check To See If We Need To Make A VAX C Option File.
-$!
-$ IF (COMPILER.EQS."VAXC")
-$ THEN
-$!
-$!  Check To See If We Already Have A VAX C Linker Option File.
-$!
-$   IF (F$SEARCH(OPT_FILE).EQS."")
-$   THEN
-$!
-$!    We Need A VAX C Linker Option File.
-$!
-$     CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File To Link Against 
-! The Sharable VAX C Runtime Library.
-!
-SYS$SHARE:VAXCRTL.EXE /SHAREABLE
-$EOD
-$!
-$!  End The Option File Check.
-$!
-$   ENDIF
-$!
-$! End The VAXC Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Need A GNU C Option File.
-$!
-$ IF (COMPILER.EQS."GNUC")
-$ THEN
-$!
-$!  Check To See If We Already Have A GNU C Linker Option File.
-$!
-$   IF (F$SEARCH(OPT_FILE).EQS."")
-$   THEN
-$!
-$!    We Need A GNU C Linker Option File.
-$!
-$     CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File To Link Against 
-! The Sharable C Runtime Library.
-!
-GNU_CC:[000000]GCCLIB.OLB /LIBRARY
-SYS$SHARE:VAXCRTL.EXE /SHAREABLE
-$EOD
-$!
-$!  End The Option File Check.
-$!
-$   ENDIF
-$!
-$! End The GNU C Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Need A DEC C Option File.
-$!
-$ IF (COMPILER.EQS."DECC")
-$ THEN
-$!
-$!  Check To See If We Already Have A DEC C Linker Option File.
-$!
-$   IF (F$SEARCH(OPT_FILE).EQS."")
-$   THEN
-$!
-$!    Figure Out If We Need A non-VAX Or A VAX Linker Option File.
-$!
-$     IF (ARCH.EQS."VAX")
-$     THEN
-$!
-$!      We Need A DEC C Linker Option File For VAX.
-$!
-$       CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File To Link Against 
-! The Sharable DEC C Runtime Library.
-!
-SYS$SHARE:DECC$SHR.EXE /SHAREABLE
-$EOD
-$!
-$!    Else...
-$!
-$     ELSE
-$!
-$!      Create The non-VAX Linker Option File.
-$!
-$       CREATE 'OPT_FILE'
-$DECK
-!
-! Default System Options File For non-VAX To Link Against 
-! The Sharable C Runtime Library.
-!
-SYS$SHARE:CMA$OPEN_LIB_SHR.EXE /SHAREABLE
-SYS$SHARE:CMA$OPEN_RTL.EXE /SHAREABLE
-$EOD
-$!
-$!    End The DEC C Option File Check.
-$!
-$     ENDIF
-$!
-$!  End The Option File Search.
-$!
-$   ENDIF
-$!
-$! End The DEC C Check.
-$!
-$ ENDIF
-$!
-$!  Tell The User What Linker Option File We Are Using.
-$!
-$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."	
-$!
-$! Time To RETURN.
-$!
-$ RETURN
-$!
-$! Check To See If We Have The Appropiate Libraries.
-$!
-$ LIB_CHECK:
-$!
-$! Look For The Library LIBCRYPTO.OLB.
-$!
-$ IF (F$SEARCH(CRYPTO_LIB).EQS."")
-$ THEN
-$!
-$!  Tell The User We Can't Find The LIBCRYPTO.OLB Library.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "Can't Find The Library ",CRYPTO_LIB,"."
-$   WRITE SYS$OUTPUT "We Can't Link Without It."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Since We Can't Link Without It, Exit.
-$!
-$   EXIT
-$!
-$! End The Crypto Library Check.
-$!
-$ ENDIF
-$!
-$! Look For The Library LIBSSL.OLB.
-$!
-$ IF (F$SEARCH(SSL_LIB).EQS."")
-$ THEN
-$!
-$!  Tell The User We Can't Find The LIBSSL.OLB Library.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "Can't Find The Library ",SSL_LIB,"."
-$   WRITE SYS$OUTPUT "Some Of The Test Programs Need To Link To It."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Since We Can't Link Without It, Exit.
-$!
-$   EXIT
-$!
-$! End The SSL Library Check.
-$!
-$ ENDIF
-$!
-$! Time To Return.
-$!
-$ RETURN
-$!
-$! Check The User's Options.
-$!
-$ CHECK_OPTIONS:
-$!
-$! Set basic C compiler /INCLUDE directories.
-$!
-$ CC_INCLUDES = "SYS$DISK:[],SYS$DISK:[-],SYS$DISK:[-.CRYPTO]"
-$!
-$! Check To See If P1 Is Blank.
-$!
-$ IF (P1.EQS."NODEBUG")
-$ THEN
-$!
-$!  P1 Is NODEBUG, So Compile Without Debugger Information.
-$!
-$   DEBUGGER  = "NODEBUG"
-$   LINKMAP = "NOMAP"
-$   TRACEBACK = "NOTRACEBACK" 
-$   GCC_OPTIMIZE = "OPTIMIZE"
-$   CC_OPTIMIZE = "OPTIMIZE"
-$   WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
-$   WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
-$!
-$! Else...
-$!
-$ ELSE
-$!
-$!  Check To See If We Are To Compile With Debugger Information.
-$!
-$   IF (P1.EQS."DEBUG")
-$   THEN
-$!
-$!    Compile With Debugger Information.
-$!
-$     DEBUGGER  = "DEBUG"
-$     LINKMAP = "MAP"
-$     TRACEBACK = "TRACEBACK"
-$     GCC_OPTIMIZE = "NOOPTIMIZE"
-$     CC_OPTIMIZE = "NOOPTIMIZE"
-$     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
-$     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
-$!
-$!  Else...
-$!
-$   ELSE
-$!
-$!    Tell The User Entered An Invalid Option.
-$!
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
-$     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
-$     WRITE SYS$OUTPUT ""
-$!
-$!    Time To EXIT.
-$!
-$     EXIT
-$!
-$!  End The Valid Argument Check.
-$!
-$   ENDIF
-$!
-$! End The P1 Check.
-$!
-$ ENDIF
-$!
-$! Check P5 (POINTER_SIZE).
-$!
-$ IF (P5 .NES. "") .AND. (ARCH .NES. "VAX")
-$ THEN
-$!
-$   IF (P5 .EQS. "32")
-$   THEN
-$     POINTER_SIZE = " /POINTER_SIZE=32"
-$   ELSE
-$     POINTER_SIZE = F$EDIT( P5, "COLLAPSE, UPCASE")
-$     IF ((POINTER_SIZE .EQS. "64") .OR. -
-       (POINTER_SIZE .EQS. "64=") .OR. -
-       (POINTER_SIZE .EQS. "64=ARGV"))
-$     THEN
-$       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_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:
-$           ! %DCL-W-NOVALU, value not allowed - remove value specification
-$           !  \64=\
-$           !
-$           ! If the compiler was run, logicals defined in /USER would
-$           ! 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_MODE SYS$ERROR
-$           DEASSIGN /USER_MODE SYS$OUTPUT
-$         ELSE
-$           POINTER_SIZE = POINTER_SIZE + "=ARGV"
-$         ENDIF
-$         SET ON
-$       ENDIF
-$       POINTER_SIZE = " /POINTER_SIZE=''POINTER_SIZE'"
-$     ELSE
-$!
-$!      Tell The User Entered An Invalid Option.
-$!
-$       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 (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.
-$!
-$       EXIT
-$!
-$     ENDIF
-$!
-$   ENDIF
-$!
-$! End The P5 (POINTER_SIZE) Check.
-$!
-$ ENDIF
-$!
-$! Check To See If P2 Is Blank.
-$!
-$ IF (P2.EQS."")
-$ THEN
-$!
-$!  O.K., The User Didn't Specify A Compiler, Let's Try To
-$!  Find Out Which One To Use.
-$!
-$!  Check To See If We Have GNU C.
-$!
-$   IF (F$TRNLNM("GNU_CC").NES."")
-$   THEN
-$!
-$!    Looks Like GNUC, Set To Use GNUC.
-$!
-$     P2 = "GNUC"
-$!
-$!  End The GNU C Compiler Check.
-$!
-$   ELSE
-$!
-$!  Check To See If We Have VAXC Or DECC.
-$!
-$     IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
-$     THEN 
-$!
-$!      Looks Like DECC, Set To Use DECC.
-$!
-$       P2 = "DECC"
-$!
-$!      Else...
-$!
-$     ELSE
-$!
-$!      Looks Like VAXC, Set To Use VAXC.
-$!
-$       P2 = "VAXC"
-$!
-$!    End The VAXC Compiler Check.
-$!
-$     ENDIF
-$!
-$!  End The DECC & VAXC Compiler Check.
-$!
-$   ENDIF
-$!
-$!  End The Compiler Check.
-$!
-$ ENDIF
-$!
-$! Check To See If We Have A Option For P3.
-$!
-$ IF (P3.EQS."")
-$ THEN
-$!
-$!  Find out what socket library we have available
-$!
-$   IF F$PARSE("SOCKETSHR:") .NES. ""
-$   THEN
-$!
-$!    We have SOCKETSHR, and it is my opinion that it's the best to use.
-$!
-$     P3 = "SOCKETSHR"
-$!
-$!    Tell the user
-$!
-$     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
-$!
-$!    Else, let's look for something else
-$!
-$   ELSE
-$!
-$!    Like UCX (the reason to do this before Multinet is that the UCX
-$!    emulation is easier to use...)
-$!
-$     IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
-	 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
-	 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
-$     THEN
-$!
-$!	Last resort: a UCX or UCX-compatible library
-$!
-$	P3 = "UCX"
-$!
-$!      Tell the user
-$!
-$       WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
-$!
-$!	That was all...
-$!
-$     ENDIF
-$   ENDIF
-$ ENDIF
-$!
-$! Set Up Initial CC Definitions, Possibly With User Ones
-$!
-$ CCDEFS = "TCPIP_TYPE_''P3'"
-$ 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"
-$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
-	CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
-$!
-$! Check To See If We Have A ZLIB Option.
-$!
-$ ZLIB = P6
-$ IF (ZLIB .NES. "")
-$ THEN
-$!
-$!  Check for expected ZLIB files.
-$!
-$   err = 0
-$   file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
-$   if (f$search( file1) .eqs. "")
-$   then
-$     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
-$     WRITE SYS$OUTPUT "    Can't find header: ''file1'"
-$     err = 1
-$   endif
-$   file1 = f$parse( "A.;", ZLIB)- "A.;"
-$!
-$   file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
-$   if (f$search( file2) .eqs. "")
-$   then
-$     if (err .eq. 0)
-$     then
-$       WRITE SYS$OUTPUT ""
-$       WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
-$     endif
-$     WRITE SYS$OUTPUT "    Can't find library: ''file2'"
-$     WRITE SYS$OUTPUT ""
-$     err = err+ 2
-$   endif
-$   if (err .eq. 1)
-$   then
-$     WRITE SYS$OUTPUT ""
-$   endif
-$!
-$   if (err .ne. 0)
-$   then
-$     GOTO EXIT
-$   endif
-$!
-$   CCDEFS = """ZLIB=1"", "+ CCDEFS
-$   CC_INCLUDES = CC_INCLUDES+ ", "+ file1
-$   ZLIB_LIB = ", ''file2' /library"
-$!
-$!  Print info
-$!
-$   WRITE SYS$OUTPUT "ZLIB library spec: ", file2
-$!
-$! End The P8 Check.
-$!
-$ ENDIF
-$!
-$!  Check To See If The User Entered A Valid Parameter.
-$!
-$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
-$ THEN
-$!
-$!  Check To See If The User Wanted DECC.
-$!
-$   IF (P2.EQS."DECC")
-$   THEN
-$!
-$!    Looks Like DECC, Set To Use DECC.
-$!
-$     COMPILER = "DECC"
-$!
-$!    Tell The User We Are Using DECC.
-$!
-$     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
-$!
-$!    Use DECC...
-$!
-$     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" + -
-       " /INCLUDE=(''CC_INCLUDES') " + CCEXTRAFLAGS
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_DECC_OPTIONS.OPT"
-$!
-$!  End DECC Check.
-$!
-$   ENDIF
-$!
-$!  Check To See If We Are To Use VAXC.
-$!
-$   IF (P2.EQS."VAXC")
-$   THEN
-$!
-$!    Looks Like VAXC, Set To Use VAXC.
-$!
-$     COMPILER = "VAXC"
-$!
-$!    Tell The User We Are Using VAX C.
-$!
-$     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
-$!
-$!    Compile Using VAXC.
-$!
-$     CC = "CC"
-$     IF ARCH.NES."VAX"
-$     THEN
-$	WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
-$	EXIT
-$     ENDIF
-$     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC /VAXC"
-$     CC = CC + "/''CC_OPTIMIZE' /''DEBUGGER' /NOLIST" + -
-	   "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
-$     CCDEFS = CCDEFS + ",""VAXC"""
-$!
-$!    Define <sys> As SYS$COMMON:[SYSLIB]
-$!
-$     DEFINE /NOLOG SYS SYS$COMMON:[SYSLIB]
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
-$!
-$!  End VAXC Check
-$!
-$   ENDIF
-$!
-$!  Check To See If We Are To Use GNU C.
-$!
-$   IF (P2.EQS."GNUC")
-$   THEN
-$!
-$!    Looks Like GNUC, Set To Use GNUC.
-$!
-$     COMPILER = "GNUC"
-$!
-$!    Tell The User We Are Using GNUC.
-$!
-$     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
-$!
-$!    Use GNU C...
-$!
-$     CC = "GCC /NOCASE_HACK /''GCC_OPTIMIZE' /''DEBUGGER' /NOLIST" + -
-	   "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
-$!
-$!    Define The Linker Options File Name.
-$!
-$     OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
-$!
-$!  End The GNU C Check.
-$!
-$   ENDIF
-$!
-$!  Set up default defines
-$!
-$   CCDEFS = """FLAT_INC=1""," + CCDEFS
-$!
-$!  Finish up the definition of CC.
-$!
-$   IF COMPILER .EQS. "DECC"
-$   THEN
-$     IF CCDISABLEWARNINGS .EQS. ""
-$     THEN
-$       CC4DISABLEWARNINGS = "DOLLARID"
-$     ELSE
-$       CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
-$       CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
-$     ENDIF
-$     CC4DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
-$   ELSE
-$     CCDISABLEWARNINGS = ""
-$     CC4DISABLEWARNINGS = ""
-$   ENDIF
-$   CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
-$!
-$!  Show user the result
-$!
-$   WRITE /SYMBOL SYS$OUTPUT "Main Compiling Command: ", CC
-$!
-$!  Else The User Entered An Invalid Argument.
-$!
-$ ELSE
-$!
-$!  Tell The User We Don't Know What They Want.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
-$   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
-$   WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Time To EXIT.
-$!
-$   EXIT
-$ ENDIF
-$!
-$! Time to check the contents, and to make sure we get the correct library.
-$!
-$ IF P3.EQS."SOCKETSHR" .OR. P3.EQS."MULTINET" .OR. P3.EQS."UCX" -
-     .OR. P3.EQS."TCPIP" .OR. P3.EQS."NONE"
-$ THEN
-$!
-$!  Check to see if SOCKETSHR was chosen
-$!
-$   IF P3.EQS."SOCKETSHR"
-$   THEN
-$!
-$!    Set the library to use SOCKETSHR
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
-$!
-$!    Done with SOCKETSHR
-$!
-$   ENDIF
-$!
-$!  Check to see if MULTINET was chosen
-$!
-$   IF P3.EQS."MULTINET"
-$   THEN
-$!
-$!    Set the library to use UCX emulation.
-$!
-$     P3 = "UCX"
-$!
-$!    Done with MULTINET
-$!
-$   ENDIF
-$!
-$!  Check to see if UCX was chosen
-$!
-$   IF P3.EQS."UCX"
-$   THEN
-$!
-$!    Set the library to use UCX.
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
-$     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
-$     THEN
-$       TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
-$     ELSE
-$       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
-	  TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
-$     ENDIF
-$!
-$!    Done with UCX
-$!
-$   ENDIF
-$!
-$!  Check to see if TCPIP was chosen
-$!
-$   IF P3.EQS."TCPIP"
-$   THEN
-$!
-$!    Set the library to use TCPIP (post UCX).
-$!
-$     TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
-$!
-$!    Done with TCPIP
-$!
-$   ENDIF
-$!
-$!  Check to see if NONE was chosen
-$!
-$   IF P3.EQS."NONE"
-$   THEN
-$!
-$!    Do not use a TCPIP library.
-$!
-$     TCPIP_LIB = ""
-$!
-$!    Done with NONE
-$!
-$   ENDIF
-$!
-$!  Print info
-$!
-$   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
-$!
-$!  Else The User Entered An Invalid Argument.
-$!
-$ ELSE
-$!
-$!  Tell The User We Don't Know What They Want.
-$!
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
-$   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
-$   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
-$   WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP (post UCX) TCP/IP library."
-$   WRITE SYS$OUTPUT ""
-$!
-$!  Time To EXIT.
-$!
-$   EXIT
-$!
-$!  Done with TCP/IP libraries
-$!
-$ ENDIF
-$!
-$! Special Threads For OpenVMS v7.1 Or Later
-$!
-$! Written By:  Richard Levitte
-$!              richard at levitte.org
-$!
-$!
-$! Check To See If We Have A Option For P4.
-$!
-$ IF (P4.EQS."")
-$ THEN
-$!
-$!  Get The Version Of VMS We Are Using.
-$!
-$   ISSEVEN :=
-$   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
-$   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
-$!
-$!  Check To See If The VMS Version Is v7.1 Or Later.
-$!
-$   IF (TMP.GE.71)
-$   THEN
-$!
-$!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
-$!
-$     ISSEVEN := ,PTHREAD_USE_D4
-$!
-$!  End The VMS Version Check.
-$!
-$   ENDIF
-$!
-$! End The P4 Check.
-$!
-$ ENDIF
-$!
-$!  Time To RETURN...
-$!
-$ RETURN
-$!
-$ INITIALISE:
-$!
-$! Save old value of the logical name OPENSSL
-$!
-$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
-$!
-$! Save directory information
-$!
-$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
-$ __HERE = F$EDIT(__HERE,"UPCASE")
-$ __TOP = __HERE - "TEST]"
-$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
-$ __INTERNAL = __TOP + "CRYPTO.INCLUDE.INTERNAL]"
-$!
-$! Set up the logical name OPENSSL to point at the include directory
-$!
-$ DEFINE OPENSSL /NOLOG '__INCLUDE'
-$ DEFINE INTERNAL /NOLOG '__INTERNAL'
-$!
-$! Done
-$!
-$ RETURN
-$!
-$ CLEANUP:
-$!
-$! Restore the logical name OPENSSL if it had a value
-$!
-$ IF __SAVE_OPENSSL .EQS. ""
-$ THEN
-$   DEASSIGN OPENSSL
-$   DEASSIGN INTERNAL
-$ ELSE
-$   DEFINE /NOLOG OPENSSL '__SAVE_OPENSSL'
-$ ENDIF
-$!
-$! Done
-$!
-$ RETURN
diff --git a/test/tests.com b/test/tests.com
deleted file mode 100644
index f01d169..0000000
--- a/test/tests.com
+++ /dev/null
@@ -1,405 +0,0 @@
-$! TESTS.COM  --  Performs the necessary tests
-$!
-$! P1	tests to be performed.  Empty means all.
-$! P2	Pointer size: "", "32", or "64".
-$!
-$! Announce/identify.
-$!
-$	proc = f$environment( "procedure")
-$	write sys$output "@@@ "+ -
-	 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
-$!
-$	__proc = f$element(0,";",f$environment("procedure"))
-$	__here = f$parse(f$parse("A.;",__proc) - "A.;","[]A.;") - "A.;"
-$	__save_default = f$environment("default")
-$	__arch = "VAX"
-$	if f$getsyi("cpu") .ge. 128 then -
-	   __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
-$	if __arch .eqs. "" then __arch = "UNK"
-$!
-$	__archd = __arch
-$       pointer_size = ""
-$	if (p2 .eq. "64")
-$	then
-$	  pointer_size = "64"
-$	  __archd = __arch+ "_64"
-$	endif
-$!
-$	texe_dir := sys$disk:[-.'__archd'.exe.test]
-$	exe_dir := sys$disk:[-.'__archd'.exe.apps]
-$	engines_dir := sys$disk:[-.'__archd'.exe.engines]
-$
-$	set default '__here'
-$
-$       ROOT = F$PARSE("sys$disk:[-]A.;0",,,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
-$       ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
-$       ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
-                   - ".][000000" - "[000000." - "][" - "[" - "]"
-$       ROOT = ROOT_DEV + "[" + ROOT_DIR
-$       DEFINE/NOLOG SSLROOT 'ROOT'.APPS.] /TRANS=CONC
-$	openssl_conf := sslroot:[000000]openssl-vms.cnf
-$
-$	on control_y then goto exit
-$	on error then goto exit
-$
-$	if p1 .nes. ""
-$	then
-$	    tests = p1
-$	else
-$! NOTE: This list reflects the list of dependencies following the
-$! "alltests" target in Makefile.  This should make it easy to see
-$! if there's a difference that needs to be taken care of.
-$	    tests := -
-	test_des,test_idea,test_sha,test_md4,test_md5,test_hmac,-
-	test_md2,test_mdc2,test_wp,-
-	test_rmd,test_rc2,test_rc4,test_rc5,test_bf,test_cast,-
-	test_rand,test_bn,test_ec,test_ecdsa,test_ecdh,-
-	test_enc,test_x509,test_rsa,test_crl,test_sid,-
-	test_gen,test_req,test_pkcs7,test_verify,test_dh,test_dsa,-
-	test_ss,test_ca,test_engine,test_evp,test_evp_extra,test_ssl,test_tsa,-
-	test_ige,test_jpake,test_srp,test_cms,test_v3name,test_ocsp,-
-	test_gost2814789,test_heartbeat,test_p5_crpt2,-
-	test_constant_time
-$	endif
-$	tests = f$edit(tests,"COLLAPSE")
-$
-$	BNTEST :=		bntest
-$	ECTEST :=		ectest
-$	ECDSATEST :=		ecdsatest
-$	ECDHTEST :=		ecdhtest
-$	EXPTEST :=		exptest
-$	IDEATEST :=		ideatest
-$	SHA1TEST :=		sha1test
-$	SHA256TEST :=		sha256t
-$	SHA512TEST :=		sha512t
-$	MDC2TEST :=		mdc2test
-$	RMDTEST :=		rmdtest
-$	MD2TEST :=		md2test
-$	MD4TEST :=		md4test
-$	MD5TEST :=		md5test
-$	HMACTEST :=		hmactest
-$	WPTEST :=		wp_test
-$	RC2TEST :=		rc2test
-$	RC4TEST :=		rc4test
-$	RC5TEST :=		rc5test
-$	BFTEST :=		bftest
-$	CASTTEST :=		casttest
-$	DESTEST :=		destest
-$	RANDTEST :=		randtest
-$	DHTEST :=		dhtest
-$	DSATEST :=		dsatest
-$	METHTEST :=		methtest
-$	SSLTEST :=		ssltest
-$	RSATEST :=		rsa_test
-$	ENGINETEST :=		enginetest
-$	GOST2814789TEST :=	gost2814789test
-$	EVPTEST :=		evp_test
-$	EVPEXTRATEST :=		evp_extra_test
-$	P5_CRPT2_TEST :=	p5_crpt2_test
-$	IGETEST :=		igetest
-$	JPAKETEST :=		jpaketest
-$	SRPTEST :=		srptest
-$	V3NAMETEST :=		v3nametest
-$	HEARTBEATTEST :=	heartbeat_test
-$	CONSTTIMETEST :=	constant_time_test
-$!
-$	tests_i = 0
-$ loop_tests:
-$	tests_e = f$element(tests_i,",",tests)
-$	tests_i = tests_i + 1
-$	if tests_e .eqs. "," then goto exit
-$	write sys$output "---> ''tests_e'"
-$	gosub 'tests_e'
-$	goto loop_tests
-$
-$ test_evp:
-$	mcr 'texe_dir''evptest' 'ROOT'.CRYPTO.EVP]evptests.txt
-$	return
-$ test_evp_extra:
-$	mcr 'texe_dir''evpextratest'
-$	return
-$ test_p5_crpt2:
-$	mcr 'texe_dir''p5_crpt2_test'
-$	return
-$ test_des:
-$	mcr 'texe_dir''destest'
-$	return
-$ test_idea:
-$	mcr 'texe_dir''ideatest'
-$	return
-$ test_sha:
-$	mcr 'texe_dir''sha1test'
-$	mcr 'texe_dir''sha256test'
-$	mcr 'texe_dir''sha512test'
-$	return
-$ test_mdc2:
-$	mcr 'texe_dir''mdc2test'
-$	return
-$ test_md5:
-$	mcr 'texe_dir''md5test'
-$	return
-$ test_md4:
-$	mcr 'texe_dir''md4test'
-$	return
-$ test_hmac:
-$	mcr 'texe_dir''hmactest'
-$	return
-$ test_wp:
-$	mcr 'texe_dir''wptest'
-$	return
-$ test_md2:
-$	mcr 'texe_dir''md2test'
-$	return
-$ test_rmd:
-$	mcr 'texe_dir''rmdtest'
-$	return
-$ test_bf:
-$	mcr 'texe_dir''bftest'
-$	return
-$ test_cast:
-$	mcr 'texe_dir''casttest'
-$	return
-$ test_rc2:
-$	mcr 'texe_dir''rc2test'
-$	return
-$ test_rc4:
-$	mcr 'texe_dir''rc4test'
-$	return
-$ test_rc5:
-$	mcr 'texe_dir''rc5test'
-$	return
-$ test_rand:
-$	mcr 'texe_dir''randtest'
-$	return
-$ test_gost2814789:
-$	define/user OPENSSL_ENGINES 'engines_dir'
-$	mcr 'texe_dir''gost2814789test'
-$	return
-$ test_enc:
-$	@testenc.com 'pointer_size'
-$	return
-$ test_x509:
-$	set noon
-$	define sys$error test_x509.err
-$	write sys$output "test normal x509v1 certificate"
-$	@tx509.com "" 'pointer_size'
-$	write sys$output "test first x509v3 certificate"
-$	@tx509.com v3-cert1.pem 'pointer_size'
-$	write sys$output "test second x509v3 certificate"
-$	@tx509.com v3-cert2.pem 'pointer_size'
-$	deassign sys$error
-$	set on
-$	return
-$ test_rsa:
-$	set noon
-$	define sys$error test_rsa.err
-$	@trsa.com "" 'pointer_size'
-$	deassign sys$error
-$	mcr 'texe_dir''rsatest'
-$	set on
-$	return
-$ test_crl:
-$	set noon
-$	define sys$error test_crl.err
-$	@tcrl.com "" 'pointer_size'
-$	deassign sys$error
-$	set on
-$	return
-$ test_sid:
-$	set noon
-$	define sys$error test_sid.err
-$	@tsid.com "" 'pointer_size'
-$	deassign sys$error
-$	set on
-$	return
-$ test_req:
-$	set noon
-$	define sys$error test_req.err
-$	@treq.com "" 'pointer_size'
-$	@treq.com testreq2.pem 'pointer_size'
-$	deassign sys$error
-$	set on
-$	return
-$ test_pkcs7:
-$	set noon
-$	define sys$error test_pkcs7.err
-$	@tpkcs7.com "" 'pointer_size'
-$	@tpkcs7d.com "" 'pointer_size'
-$	deassign sys$error
-$	set on
-$	return
-$ test_bn:
-$	write sys$output -
-	      "starting big number library test, could take a while..."
-$	set noon
-$	define sys$error test_bn.err
-$	define sys$output test_bn.out
-$	@ bctest.com
-$	status = $status
-$	deassign sys$error
-$	deassign sys$output
-$	set on
-$	if (status)
-$	then
-$	    create /fdl = sys$input bntest-vms.tmp
-FILE
-	ORGANIZATION	sequential
-RECORD
-	FORMAT		stream_lf
-$	    define /user_mode sys$output bntest-vms.tmp
-$	    mcr 'texe_dir''bntest'
-$	    define /user_mode sys$input bntest-vms.tmp
-$	    define /user_mode sys$output bntest-vms.out
-$	    bc
-$	    @ bntest.com bntest-vms.out
-$	    status = $status
-$	    if (status)
-$	    then
-$		delete bntest-vms.out;*
-$		delete bntest-vms.tmp;*
-$	    endif
-$	else
-$	    create /fdl = sys$input bntest-vms.sh
-FILE
-	ORGANIZATION	sequential
-RECORD
-	FORMAT		stream_lf
-$	    open /append bntest_file bntest-vms.sh
-$	    type /output = bntest_file sys$input:
-<< __FOO__ sh -c "`sh ./bctest`" | perl -e '$i=0; while (<STDIN>) {if (/^test (.*)/) {print STDERR "\nverify $1";} elsif (!/^0$/) {die "\nFailed! bc: $_";} else {print STDERR "."; $i++;}} print STDERR "\n$i tests passed\n"'
-$	    define /user_mode sys$output bntest-vms.tmp
-$	    mcr 'texe_dir''bntest'
-$	    copy bntest-vms.tmp bntest_file
-$	    delete bntest-vms.tmp;*
-$	    type /output = bntest_file sys$input:
-__FOO__
-$	    close bntest_file
-$	    write sys$output "-- copy the [.test]bntest-vms.sh and [.test]bctest files to a Unix system and"
-$	    write sys$output "-- run bntest-vms.sh through sh or bash to verify that the bignum operations"
-$	    write sys$output "-- went well."
-$	    write sys$output ""
-$	endif
-$	write sys$output "test a^b%c implementations"
-$	mcr 'texe_dir''exptest'
-$	return
-$ test_ec:
-$	write sys$output "test elliptic curves"
-$	mcr 'texe_dir''ectest'
-$	return
-$ test_ecdsa:
-$	write sys$output "test ecdsa"
-$	mcr 'texe_dir''ecdsatest'
-$	return
-$ test_ecdh:
-$	write sys$output "test ecdh"
-$	mcr 'texe_dir''ecdhtest'
-$	return
-$ test_verify:
-$	write sys$output "The following command should have some OK's and some failures"
-$	write sys$output "There are definitly a few expired certificates"
-$	@tverify.com 'pointer_size'
-$	return
-$ test_dh:
-$	write sys$output "Generate a set of DH parameters"
-$	mcr 'texe_dir''dhtest'
-$	return
-$ test_dsa:
-$	write sys$output "Generate a set of DSA parameters"
-$	mcr 'texe_dir''dsatest'
-$	return
-$ test_gen:
-$	write sys$output "Generate and verify a certificate request"
-$	@testgen.com 'pointer_size'
-$	return
-$ maybe_test_ss:
-$	testss_RDT = f$cvtime(f$file_attributes("testss.com","RDT"))
-$	if f$cvtime(f$file_attributes("keyU.ss","RDT")) .les. testss_RDT then -
-		goto test_ss
-$	if f$cvtime(f$file_attributes("certU.ss","RDT")) .les. testss_RDT then -
-		goto test_ss
-$	if f$cvtime(f$file_attributes("certCA.ss","RDT")) .les. testss_RDT then -
-		goto test_ss
-$	return
-$ test_ss:
-$	write sys$output "Generate and certify a test certificate"
-$	@testss.com 'pointer_size'
-$	return
-$ test_engine: 
-$	write sys$output "Manipulate the ENGINE structures"
-$	mcr 'texe_dir''enginetest'
-$	return
-$ test_ssl:
-$	write sys$output "test SSL protocol"
-$	gosub maybe_test_ss
-$	@testssl.com keyU.ss certU.ss certCA.ss 'pointer_size'
-$	return
-$ test_ca:
-$	set noon
-$	define /user_mode sys$output test_ca.out
-$	mcr 'exe_dir'openssl no-rsa
-$	save_severity=$SEVERITY
-$	set on
-$	if save_severity
-$	then
-$	    write sys$output "skipping CA.com test -- requires RSA"
-$	else
-$	    write sys$output "Generate and certify a test certificate via the 'ca' program"
-$	    @testca.com 'pointer_size'
-$	endif
-$	return
-$ test_aes: 
-$!	write sys$output "test AES"
-$!	!mcr 'texe_dir''aestest'
-$	return
-$ test_tsa:
-$	set noon
-$	define /user_mode sys$output nla0:
-$	mcr 'exe_dir'openssl no-rsa
-$	save_severity=$SEVERITY
-$	set on
-$	if save_severity
-$	then
-$	    write sys$output "skipping testtsa.com test -- requires RSA"
-$	else
-$	    @testtsa.com "" "" "" 'pointer_size'
-$	endif
-$	return
-$ test_ige: 
-$	write sys$output "Test IGE mode"
-$	mcr 'texe_dir''igetest'
-$	return
-$ test_jpake: 
-$	write sys$output "Test JPAKE"
-$	mcr 'texe_dir''jpaketest'
-$	return
-$ test_cms:
-$	write sys$output "CMS consistency test"
-$	! Define the logical name used to find openssl.exe in the perl script.
-$	define /user_mode osslx 'exe_dir'
-$	perl CMS-TEST.PL
-$	return
-$ test_srp: 
-$	write sys$output "Test SRP"
-$	mcr 'texe_dir''srptest'
-$	return
-$ test_v3name:
-$	write sys$output "Test X509v3_check_*"
-$	mcr 'texe_dir''v3nametest'
-$	return
-$ test_ocsp:
-$	write sys$output "Test OCSP"
-$	@tocsp.com
-$	return
-$ test_heartbeat:
-$	mcr 'texe_dir''heartbeattest'
-$	return
-$ test_constant_time:
-$	write sys$output "Test constant time utilites"
-$	mcr 'texe_dir''consttimetest'
-$	return
-$
-$ exit:
-$	mcr 'exe_dir'openssl version -a
-$	set default '__save_default'
-$	deassign sslroot
-$	exit
diff --git a/util/deltree.com b/util/deltree.com
deleted file mode 100644
index 9f36b1a..0000000
--- a/util/deltree.com
+++ /dev/null
@@ -1,34 +0,0 @@
-$! DELTREE.COM
-$
-$ call deltree 'p1'
-$ exit $status
-$
-$ deltree: subroutine ! P1 is a name of a directory
-$	on control_y then goto dt_STOP
-$	on warning then goto dt_exit
-$	_dt_def = f$trnlnm("SYS$DISK")+f$directory()
-$	if f$parse(p1) .eqs. "" then exit
-$	set default 'f$parse(p1,,,"DEVICE")''f$parse(p1,,,"DIRECTORY")'
-$	p1 = f$parse(p1,,,"NAME") + f$parse(p1,,,"TYPE")
-$	_fp = f$parse(".DIR",p1)
-$ dt_loop:
-$	_f = f$search(_fp)
-$	if _f .eqs. "" then goto dt_loopend
-$	call deltree [.'f$parse(_f,,,"NAME")']*.*
-$	goto dt_loop
-$ dt_loopend:
-$	_fp = f$parse(p1,".;*")
-$	if f$search(_fp) .eqs. "" then goto dt_exit
-$	set noon
-$	set file/prot=(S:RWED,O:RWED,G:RWED,W:RWED) '_fp'
-$	set on
-$	delete/nolog '_fp'
-$ dt_exit:
-$	set default '_dt_def'
-$	goto dt_end
-$ dt_STOP:
-$	set default '_dt_def'
-$	stop/id=""
-$	exit
-$ dt_end:
-$	endsubroutine
diff --git a/util/dofile.pl b/util/dofile.pl
index 780759b..76dfe2b 100644
--- a/util/dofile.pl
+++ b/util/dofile.pl
@@ -10,23 +10,76 @@ use warnings;
 
 use Getopt::Std;
 
-# Because we know that Text::Template isn't a core Perl module, we use
-# a fallback in case it's not installed on the system
-use File::Basename;
-use File::Spec::Functions;
-use lib catdir(dirname(__FILE__));
-use with_fallback qw(Text::Template);
-
 # We actually expect to get the following hash tables from configdata:
 #
 #    %config
 #    %target
 #    %withargs
+#    %unified_info
 #
 # We just do a minimal test to see that we got what we expected.
 # $config{target} must exist as an absolute minimum.
 die "You must run this script with -Mconfigdata\n" if !exists($config{target});
 
+# Make a subclass of Text::Template to override append_text_to_result,
+# as recommended here:
+#
+# http://search.cpan.org/~mjd/Text-Template-1.46/lib/Text/Template.pm#Automatic_postprocessing_of_template_hunks
+
+package OpenSSL::Template;
+
+# Because we know that Text::Template isn't a core Perl module, we use
+# a fallback in case it's not installed on the system
+use File::Basename;
+use File::Spec::Functions;
+use lib catdir(dirname(__FILE__));
+use with_fallback qw(Text::Template);
+
+use parent qw/Text::Template/;
+
+# Override constructor
+sub new {
+    my ($class) = shift;
+
+    # Call the constructor of the parent class, Person.
+    my $self = $class->SUPER::new( @_ );
+    # Add few more attributes
+    $self->{_output_off}   = 0;	# Default to output hunks
+    bless $self, $class;
+    return $self;
+}
+
+sub append_text_to_output {
+    my $self = shift;
+
+    if ($self->{_output_off} == 0) {
+	$self->SUPER::append_text_to_output(@_);
+    }
+
+    return;
+}
+
+sub output_reset_on {
+    my $self = shift;
+    $self->{_output_off} = 0;
+}
+
+sub output_on {
+    my $self = shift;
+    if (--$self->{_output_off} < 0) {
+	$self->{_output_off} = 0;
+    }
+}
+
+sub output_off {
+    my $self = shift;
+    $self->{_output_off}++;
+}
+
+# Come back to main
+
+package main;
+
 # Helper functions for the templates #################################
 
 # It might be practical to quotify some strings and have them protected
@@ -98,7 +151,7 @@ my @autowarntext = ("WARNING: do not edit!",
 my $prev_linecount = 0;
 my $text =
     @ARGV
-    ? join("", map { my $x = Text::Template::_load_text($_);
+    ? join("", map { my $x = "{- output_reset_on() -}".Text::Template::_load_text($_);
                      my $linecount = $x =~ tr/\n//;
                      $prev_linecount = ($linecount += $prev_linecount);
                      $lines{$linecount} = $_;
@@ -110,13 +163,31 @@ my $text =
 # Load the full template (combination of files) into Text::Template
 # and fill it up with our data.  Output goes directly to STDOUT
 
-my $template = Text::Template->new(TYPE => 'STRING', SOURCE => $text );
+my $template = OpenSSL::Template->new(TYPE => 'STRING', SOURCE => $text );
+
+sub output_reset_on {
+    $template->output_reset_on();
+    "";
+}
+sub output_on {
+    $template->output_on();
+    "";
+}
+sub output_off {
+    $template->output_off();
+    "";
+}
+
 $template->fill_in(OUTPUT => \*STDOUT,
                    HASH => { config => \%config,
                              target => \%target,
                              withargs => \%withargs,
+                             unified_info => \%unified_info,
                              autowarntext => \@autowarntext,
                              quotify1 => \&quotify1,
-                             quotify_l => \&quotify_l },
+                             quotify_l => \&quotify_l,
+                             output_reset_on => \&output_reset_on,
+                             output_on => \&output_on,
+                             output_off => \&output_off },
                    DELIMITERS => [ "{-", "-}" ],
                    BROKEN => \&broken);
diff --git a/util/libeay.num b/util/libeay.num
index d53697c..6ff18ad 100755
--- a/util/libeay.num
+++ b/util/libeay.num
@@ -605,8 +605,7 @@ X509_REVOKED_free                       613	1_1_0	EXIST::FUNCTION:
 X509_REVOKED_get_ext                    614	1_1_0	EXIST::FUNCTION:
 X509_REVOKED_get_ext_by_NID             615	1_1_0	EXIST::FUNCTION:
 X509_REVOKED_get_ext_by_OBJ             616	1_1_0	EXIST::FUNCTION:
-X509_REVOKED_get_ext_by_critical        617	1_1_0	EXIST:!VMS:FUNCTION:
-X509_REVOKED_get_ext_by_critic          617	1_1_0	EXIST:VMS:FUNCTION:
+X509_REVOKED_get_ext_by_critical        617	1_1_0	EXIST::FUNCTION:
 X509_REVOKED_get_ext_count              618	1_1_0	EXIST::FUNCTION:
 X509_REVOKED_new                        619	1_1_0	EXIST::FUNCTION:
 X509_SIG_free                           620	1_1_0	EXIST::FUNCTION:
@@ -1136,14 +1135,10 @@ ERR_load_X509V3_strings                 1164	1_1_0	EXIST::FUNCTION:
 NETSCAPE_CERT_SEQUENCE_free             1165	1_1_0	EXIST::FUNCTION:
 NETSCAPE_CERT_SEQUENCE_new              1166	1_1_0	EXIST::FUNCTION:
 OBJ_txt2obj                             1167	1_1_0	EXIST::FUNCTION:
-PEM_read_NETSCAPE_CERT_SEQUENCE         1168	1_1_0	EXIST:!VMS:FUNCTION:
-PEM_read_NS_CERT_SEQ                    1168	1_1_0	EXIST:VMS:FUNCTION:
-PEM_read_bio_NETSCAPE_CERT_SEQUENCE     1169	1_1_0	EXIST:!VMS:FUNCTION:
-PEM_read_bio_NS_CERT_SEQ                1169	1_1_0	EXIST:VMS:FUNCTION:
-PEM_write_NETSCAPE_CERT_SEQUENCE        1170	1_1_0	EXIST:!VMS:FUNCTION:
-PEM_write_NS_CERT_SEQ                   1170	1_1_0	EXIST:VMS:FUNCTION:
-PEM_write_bio_NETSCAPE_CERT_SEQUENCE    1171	1_1_0	EXIST:!VMS:FUNCTION:
-PEM_write_bio_NS_CERT_SEQ               1171	1_1_0	EXIST:VMS:FUNCTION:
+PEM_read_NETSCAPE_CERT_SEQUENCE         1168	1_1_0	EXIST::FUNCTION:
+PEM_read_bio_NETSCAPE_CERT_SEQUENCE     1169	1_1_0	EXIST::FUNCTION:
+PEM_write_NETSCAPE_CERT_SEQUENCE        1170	1_1_0	EXIST::FUNCTION:
+PEM_write_bio_NETSCAPE_CERT_SEQUENCE    1171	1_1_0	EXIST::FUNCTION:
 X509V3_EXT_add                          1172	1_1_0	EXIST::FUNCTION:
 X509V3_EXT_add_alias                    1173	1_1_0	EXIST::FUNCTION:
 X509V3_EXT_add_conf                     1174	1_1_0	EXIST::FUNCTION:
@@ -1426,21 +1421,17 @@ d2i_ASN1_SET_OF_PKCS7_RECIP_INFO        1753	1_1_0	NOEXIST::FUNCTION:
 PKCS5_PBE_add                           1775	1_1_0	EXIST::FUNCTION:
 PEM_write_bio_PKCS8                     1776	1_1_0	EXIST::FUNCTION:
 i2d_PKCS8_fp                            1777	1_1_0	EXIST::FUNCTION:STDIO
-PEM_read_bio_PKCS8_PRIV_KEY_INFO        1778	1_1_0	EXIST:!VMS:FUNCTION:
-PEM_read_bio_P8_PRIV_KEY_INFO           1778	1_1_0	EXIST:VMS:FUNCTION:
+PEM_read_bio_PKCS8_PRIV_KEY_INFO        1778	1_1_0	EXIST::FUNCTION:
 d2i_PKCS8_bio                           1779	1_1_0	EXIST::FUNCTION:
 d2i_PKCS8_PRIV_KEY_INFO_fp              1780	1_1_0	EXIST::FUNCTION:STDIO
-PEM_write_bio_PKCS8_PRIV_KEY_INFO       1781	1_1_0	EXIST:!VMS:FUNCTION:
-PEM_write_bio_P8_PRIV_KEY_INFO          1781	1_1_0	EXIST:VMS:FUNCTION:
+PEM_write_bio_PKCS8_PRIV_KEY_INFO       1781	1_1_0	EXIST::FUNCTION:
 PEM_read_PKCS8                          1782	1_1_0	EXIST::FUNCTION:
 d2i_PKCS8_PRIV_KEY_INFO_bio             1783	1_1_0	EXIST::FUNCTION:
 d2i_PKCS8_fp                            1784	1_1_0	EXIST::FUNCTION:STDIO
 PEM_write_PKCS8                         1785	1_1_0	EXIST::FUNCTION:
-PEM_read_PKCS8_PRIV_KEY_INFO            1786	1_1_0	EXIST:!VMS:FUNCTION:
-PEM_read_P8_PRIV_KEY_INFO               1786	1_1_0	EXIST:VMS:FUNCTION:
+PEM_read_PKCS8_PRIV_KEY_INFO            1786	1_1_0	EXIST::FUNCTION:
 PEM_read_bio_PKCS8                      1787	1_1_0	EXIST::FUNCTION:
-PEM_write_PKCS8_PRIV_KEY_INFO           1788	1_1_0	EXIST:!VMS:FUNCTION:
-PEM_write_P8_PRIV_KEY_INFO              1788	1_1_0	EXIST:VMS:FUNCTION:
+PEM_write_PKCS8_PRIV_KEY_INFO           1788	1_1_0	EXIST::FUNCTION:
 PKCS5_PBE_keyivgen                      1789	1_1_0	EXIST::FUNCTION:
 i2d_PKCS8_bio                           1790	1_1_0	EXIST::FUNCTION:
 i2d_PKCS8_PRIV_KEY_INFO_fp              1791	1_1_0	EXIST::FUNCTION:STDIO
@@ -1538,8 +1529,7 @@ ASN1_OCTET_STRING_cmp                   1955	1_1_0	EXIST::FUNCTION:
 ASN1_BIT_STRING_new                     1957	1_1_0	EXIST::FUNCTION:
 X509_get_ext_d2i                        1958	1_1_0	EXIST::FUNCTION:
 PEM_read_bio_X509_AUX                   1959	1_1_0	EXIST::FUNCTION:
-ASN1_STRING_set_default_mask_asc        1960	1_1_0	EXIST:!VMS:FUNCTION:
-ASN1_STRING_set_def_mask_asc            1960	1_1_0	EXIST:VMS:FUNCTION:
+ASN1_STRING_set_default_mask_asc        1960	1_1_0	EXIST::FUNCTION:
 PEM_write_bio_RSA_PUBKEY                1961	1_1_0	EXIST::FUNCTION:RSA
 ASN1_INTEGER_cmp                        1963	1_1_0	EXIST::FUNCTION:
 d2i_RSA_PUBKEY_fp                       1964	1_1_0	EXIST::FUNCTION:RSA,STDIO
@@ -1685,8 +1675,7 @@ CRYPTO_is_mem_check_on                  2160	1_1_0	NOEXIST::FUNCTION:
 CRYPTO_set_mem_debug_functions          2161	1_1_0	NOEXIST::FUNCTION:
 CRYPTO_set_mem_debug_options            2164	1_1_0	NOEXIST::FUNCTION:
 PEM_write_PKCS8PrivateKey_nid           2165	1_1_0	EXIST::FUNCTION:STDIO
-PEM_write_bio_PKCS8PrivateKey_nid       2166	1_1_0	EXIST:!VMS:FUNCTION:
-PEM_write_bio_PKCS8PrivKey_nid          2166	1_1_0	EXIST:VMS:FUNCTION:
+PEM_write_bio_PKCS8PrivateKey_nid       2166	1_1_0	EXIST::FUNCTION:
 d2i_PKCS8PrivateKey_bio                 2167	1_1_0	EXIST::FUNCTION:
 ASN1_NULL_free                          2168	1_1_0	EXIST::FUNCTION:
 d2i_ASN1_NULL                           2169	1_1_0	EXIST::FUNCTION:
@@ -1819,21 +1808,15 @@ d2i_RSA_NET                             2408	1_1_0	NOEXIST::FUNCTION:
 DSO_bind_func                           2409	1_1_0	EXIST::FUNCTION:
 CRYPTO_get_new_dynlockid                2410	1_1_0	EXIST::FUNCTION:
 sk_new_null                             2411	1_1_0	EXIST::FUNCTION:
-CRYPTO_set_dynlock_destroy_callback     2412	1_1_0	EXIST:!VMS:FUNCTION:
-CRYPTO_set_dynlock_destroy_cb           2412	1_1_0	EXIST:VMS:FUNCTION:
+CRYPTO_set_dynlock_destroy_callback     2412	1_1_0	EXIST::FUNCTION:
 CRYPTO_destroy_dynlockid                2413	1_1_0	EXIST::FUNCTION:
 CRYPTO_set_dynlock_size                 2414	1_1_0	NOEXIST::FUNCTION:
-CRYPTO_set_dynlock_create_callback      2415	1_1_0	EXIST:!VMS:FUNCTION:
-CRYPTO_set_dynlock_create_cb            2415	1_1_0	EXIST:VMS:FUNCTION:
-CRYPTO_set_dynlock_lock_callback        2416	1_1_0	EXIST:!VMS:FUNCTION:
-CRYPTO_set_dynlock_lock_cb              2416	1_1_0	EXIST:VMS:FUNCTION:
-CRYPTO_get_dynlock_lock_callback        2417	1_1_0	EXIST:!VMS:FUNCTION:
-CRYPTO_get_dynlock_lock_cb              2417	1_1_0	EXIST:VMS:FUNCTION:
-CRYPTO_get_dynlock_destroy_callback     2418	1_1_0	EXIST:!VMS:FUNCTION:
-CRYPTO_get_dynlock_destroy_cb           2418	1_1_0	EXIST:VMS:FUNCTION:
+CRYPTO_set_dynlock_create_callback      2415	1_1_0	EXIST::FUNCTION:
+CRYPTO_set_dynlock_lock_callback        2416	1_1_0	EXIST::FUNCTION:
+CRYPTO_get_dynlock_lock_callback        2417	1_1_0	EXIST::FUNCTION:
+CRYPTO_get_dynlock_destroy_callback     2418	1_1_0	EXIST::FUNCTION:
 CRYPTO_get_dynlock_value                2419	1_1_0	EXIST::FUNCTION:
-CRYPTO_get_dynlock_create_callback      2420	1_1_0	EXIST:!VMS:FUNCTION:
-CRYPTO_get_dynlock_create_cb            2420	1_1_0	EXIST:VMS:FUNCTION:
+CRYPTO_get_dynlock_create_callback      2420	1_1_0	EXIST::FUNCTION:
 c2i_ASN1_BIT_STRING                     2421	1_1_0	NOEXIST::FUNCTION:
 i2c_ASN1_BIT_STRING                     2422	1_1_0	NOEXIST::FUNCTION:
 RAND_poll                               2423	1_1_0	EXIST::FUNCTION:
@@ -1887,7 +1870,6 @@ ENGINE_get_default_RSA                  2470	1_1_0	EXIST::FUNCTION:ENGINE
 ENGINE_get_BN_mod_exp                   2471	1_1_0	NOEXIST::FUNCTION:
 DSA_get_default_openssl_method          2472	1_1_0	NOEXIST::FUNCTION:
 ENGINE_set_DH                           2473	1_1_0	EXIST::FUNCTION:ENGINE
-ENGINE_set_def_BN_mod_exp_crt           2474	1_1_0	NOEXIST::FUNCTION:
 ENGINE_set_default_BN_mod_exp_crt       2474	1_1_0	NOEXIST::FUNCTION:
 ENGINE_init                             2475	1_1_0	EXIST::FUNCTION:ENGINE
 DH_get_default_openssl_method           2476	1_1_0	NOEXIST::FUNCTION:
@@ -1909,7 +1891,6 @@ ENGINE_get_RAND                         2491	1_1_0	EXIST::FUNCTION:ENGINE
 ENGINE_get_first                        2492	1_1_0	EXIST::FUNCTION:ENGINE
 ENGINE_by_id                            2493	1_1_0	EXIST::FUNCTION:ENGINE
 ENGINE_set_finish_function              2494	1_1_0	EXIST::FUNCTION:ENGINE
-ENGINE_get_def_BN_mod_exp_crt           2495	1_1_0	NOEXIST::FUNCTION:
 ENGINE_get_default_BN_mod_exp_crt       2495	1_1_0	NOEXIST::FUNCTION:
 RSA_get_default_openssl_method          2496	1_1_0	NOEXIST::FUNCTION:
 ENGINE_set_RSA                          2497	1_1_0	EXIST::FUNCTION:ENGINE
@@ -1997,8 +1978,7 @@ ASN1_PRINTABLE_new                      2571	1_1_0	EXIST::FUNCTION:
 HMAC_Init_ex                            2572	1_1_0	EXIST::FUNCTION:
 d2i_KRB5_AUTHENT                        2573	1_1_0	NOEXIST::FUNCTION:
 OCSP_archive_cutoff_new                 2574	1_1_0	EXIST::FUNCTION:
-EC_POINT_set_Jprojective_coordinates_GFp 2575	1_1_0	EXIST:!VMS:FUNCTION:EC
-EC_POINT_set_Jproj_coords_GFp           2575	1_1_0	EXIST:VMS:FUNCTION:EC
+EC_POINT_set_Jprojective_coordinates_GFp 2575	1_1_0	EXIST::FUNCTION:EC
 _ossl_old_des_is_weak_key               2576	1_1_0	NOEXIST::FUNCTION:
 OCSP_BASICRESP_get_ext_by_OBJ           2577	1_1_0	EXIST::FUNCTION:
 EC_POINT_oct2point                      2578	1_1_0	EXIST::FUNCTION:EC
@@ -2023,8 +2003,7 @@ GENERAL_NAME_it                         2594	1_1_0	EXIST:EXPORT_VAR_AS_FUNCTION:
 ASN1_GENERALIZEDTIME_it                 2595	1_1_0	EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 ASN1_GENERALIZEDTIME_it                 2595	1_1_0	EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
 X509_STORE_set_flags                    2596	1_1_0	EXIST::FUNCTION:
-EC_POINT_set_compressed_coordinates_GFp 2597	1_1_0	EXIST:!VMS:FUNCTION:EC
-EC_POINT_set_compr_coords_GFp           2597	1_1_0	EXIST:VMS:FUNCTION:EC
+EC_POINT_set_compressed_coordinates_GFp 2597	1_1_0	EXIST::FUNCTION:EC
 OCSP_response_status_str                2598	1_1_0	EXIST::FUNCTION:
 d2i_OCSP_REVOKEDINFO                    2599	1_1_0	EXIST::FUNCTION:
 OCSP_basic_add1_cert                    2600	1_1_0	EXIST::FUNCTION:
@@ -2038,8 +2017,7 @@ X509_CRL_sort                           2607	1_1_0	EXIST::FUNCTION:
 X509_REVOKED_set_revocationDate         2608	1_1_0	EXIST::FUNCTION:
 ENGINE_register_RAND                    2609	1_1_0	EXIST::FUNCTION:ENGINE
 OCSP_SERVICELOC_new                     2610	1_1_0	EXIST::FUNCTION:
-EC_POINT_set_affine_coordinates_GFp     2611	1_1_0	EXIST:!VMS:FUNCTION:EC
-EC_POINT_set_affine_coords_GFp          2611	1_1_0	EXIST:VMS:FUNCTION:EC
+EC_POINT_set_affine_coordinates_GFp     2611	1_1_0	EXIST::FUNCTION:EC
 _ossl_old_des_options                   2612	1_1_0	NOEXIST::FUNCTION:
 SXNET_it                                2613	1_1_0	EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 SXNET_it                                2613	1_1_0	EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
@@ -2081,24 +2059,21 @@ X509_REVOKED_it                         2642	1_1_0	EXIST:EXPORT_VAR_AS_FUNCTION:
 ASN1_STRING_encode                      2643	1_1_0	NOEXIST::FUNCTION:
 EVP_aes_128_ecb                         2644	1_1_0	EXIST::FUNCTION:AES
 KRB5_AUTHENT_free                       2645	1_1_0	NOEXIST::FUNCTION:
-OCSP_BASICRESP_get_ext_by_critical      2646	1_1_0	EXIST:!VMS:FUNCTION:
-OCSP_BASICRESP_get_ext_by_crit          2646	1_1_0	EXIST:VMS:FUNCTION:
+OCSP_BASICRESP_get_ext_by_critical      2646	1_1_0	EXIST::FUNCTION:
 OCSP_cert_status_str                    2647	1_1_0	EXIST::FUNCTION:
 d2i_OCSP_REQUEST                        2648	1_1_0	EXIST::FUNCTION:
 UI_dup_info_string                      2649	1_1_0	EXIST::FUNCTION:
 _ossl_old_des_xwhite_in2out             2650	1_1_0	NOEXIST::FUNCTION:
 PKCS12_it                               2651	1_1_0	EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 PKCS12_it                               2651	1_1_0	EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
-OCSP_SINGLERESP_get_ext_by_critical     2652	1_1_0	EXIST:!VMS:FUNCTION:
-OCSP_SINGLERESP_get_ext_by_crit         2652	1_1_0	EXIST:VMS:FUNCTION:
+OCSP_SINGLERESP_get_ext_by_critical     2652	1_1_0	EXIST::FUNCTION:
 OCSP_CERTSTATUS_free                    2653	1_1_0	EXIST::FUNCTION:
 _ossl_old_des_crypt                     2654	1_1_0	NOEXIST::FUNCTION:
 ASN1_item_i2d                           2655	1_1_0	EXIST::FUNCTION:
 EVP_DecryptFinal_ex                     2656	1_1_0	EXIST::FUNCTION:
 ENGINE_load_openssl                     2657	1_1_0	NOEXIST::FUNCTION:
 ENGINE_get_cmd_defns                    2658	1_1_0	EXIST::FUNCTION:ENGINE
-ENGINE_set_load_privkey_function        2659	1_1_0	EXIST:!VMS:FUNCTION:ENGINE
-ENGINE_set_load_privkey_fn              2659	1_1_0	EXIST:VMS:FUNCTION:ENGINE
+ENGINE_set_load_privkey_function        2659	1_1_0	EXIST::FUNCTION:ENGINE
 EVP_EncryptFinal_ex                     2660	1_1_0	EXIST::FUNCTION:
 ENGINE_set_default_digests              2661	1_1_0	EXIST::FUNCTION:ENGINE
 X509_get0_pubkey_bitstr                 2662	1_1_0	EXIST::FUNCTION:
@@ -2239,15 +2214,13 @@ BN_mod_add                              2774	1_1_0	EXIST::FUNCTION:
 KRB5_AUTHDATA_free                      2775	1_1_0	NOEXIST::FUNCTION:
 _ossl_old_des_cbc_cksum                 2776	1_1_0	NOEXIST::FUNCTION:
 ASN1_item_verify                        2777	1_1_0	EXIST::FUNCTION:
-EC_POINT_get_Jprojective_coordinates_GFp 2779	1_1_0	EXIST:!VMS:FUNCTION:EC
-EC_POINT_get_Jproj_coords_GFp           2779	1_1_0	EXIST:VMS:FUNCTION:EC
+EC_POINT_get_Jprojective_coordinates_GFp 2779	1_1_0	EXIST::FUNCTION:EC
 ZLONG_it                                2780	1_1_0	EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 ZLONG_it                                2780	1_1_0	EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
 ASN1_TIME_check                         2782	1_1_0	EXIST::FUNCTION:
 UI_get0_user_data                       2783	1_1_0	EXIST::FUNCTION:
 HMAC_CTX_cleanup                        2784	1_1_0	NOEXIST::FUNCTION:
 DSA_up_ref                              2785	1_1_0	EXIST::FUNCTION:DSA
-_ossl_odes_ede3_cfb64_encrypt           2786	1_1_0	NOEXIST::FUNCTION:
 _ossl_old_des_ede3_cfb64_encrypt        2786	1_1_0	NOEXIST::FUNCTION:
 ASN1_BMPSTRING_it                       2787	1_1_0	EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 ASN1_BMPSTRING_it                       2787	1_1_0	EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
@@ -2316,7 +2289,6 @@ X509_CRL_set_lastUpdate                 2837	1_1_0	EXIST::FUNCTION:
 OCSP_BASICRESP_free                     2838	1_1_0	EXIST::FUNCTION:
 OCSP_BASICRESP_add1_ext_i2d             2839	1_1_0	EXIST::FUNCTION:
 d2i_KRB5_AUTHENTBODY                    2840	1_1_0	NOEXIST::FUNCTION:
-CRYPTO_set_ex_data_impl                 2841	1_1_0	NOEXIST::FUNCTION:
 CRYPTO_set_ex_data_implementation       2841	1_1_0	NOEXIST::FUNCTION:
 KRB5_ENCDATA_new                        2842	1_1_0	NOEXIST::FUNCTION:
 DSO_up_ref                              2843	1_1_0	EXIST::FUNCTION:
@@ -2394,8 +2366,7 @@ RSAPrivateKey_it                        2906	1_1_0	EXIST:!EXPORT_VAR_AS_FUNCTION
 RSAPrivateKey_it                        2906	1_1_0	EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:RSA
 ENGINE_register_all_DH                  2907	1_1_0	EXIST::FUNCTION:ENGINE
 i2d_EDIPARTYNAME                        2908	1_1_0	EXIST::FUNCTION:
-EC_POINT_get_affine_coordinates_GFp     2909	1_1_0	EXIST:!VMS:FUNCTION:EC
-EC_POINT_get_affine_coords_GFp          2909	1_1_0	EXIST:VMS:FUNCTION:EC
+EC_POINT_get_affine_coordinates_GFp     2909	1_1_0	EXIST::FUNCTION:EC
 OCSP_CRLID_new                          2910	1_1_0	EXIST::FUNCTION:
 ENGINE_get_flags                        2911	1_1_0	EXIST::FUNCTION:ENGINE
 OCSP_ONEREQ_it                          2912	1_1_0	EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
@@ -2515,7 +2486,6 @@ ENGINE_get_cipher_engine                3008	1_1_0	EXIST::FUNCTION:ENGINE
 ENGINE_register_all_ciphers             3009	1_1_0	EXIST::FUNCTION:ENGINE
 EC_POINT_copy                           3010	1_1_0	EXIST::FUNCTION:EC
 BN_kronecker                            3011	1_1_0	EXIST::FUNCTION:
-_ossl_odes_ede3_ofb64_encrypt           3012	1_1_0	NOEXIST::FUNCTION:
 _ossl_old_des_ede3_ofb64_encrypt        3012	1_1_0	NOEXIST::FUNCTION:
 UI_method_get_reader                    3013	1_1_0	EXIST::FUNCTION:
 OCSP_BASICRESP_get_ext_count            3014	1_1_0	EXIST::FUNCTION:
@@ -2690,8 +2660,7 @@ OCSP_response_create                    3158	1_1_0	EXIST::FUNCTION:
 _ossl_old_des_xcbc_encrypt              3159	1_1_0	NOEXIST::FUNCTION:
 PKCS7_it                                3160	1_1_0	EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 PKCS7_it                                3160	1_1_0	EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
-OCSP_REQUEST_get_ext_by_critical        3161	1_1_0	EXIST:!VMS:FUNCTION:
-OCSP_REQUEST_get_ext_by_crit            3161	1_1_0	EXIST:VMS:FUNCTION:
+OCSP_REQUEST_get_ext_by_critical        3161	1_1_0	EXIST::FUNCTION:
 ENGINE_set_flags                        3162	1_1_0	EXIST::FUNCTION:ENGINE
 _ossl_old_des_ecb_encrypt               3163	1_1_0	NOEXIST::FUNCTION:
 OCSP_response_get1_basic                3164	1_1_0	EXIST::FUNCTION:
@@ -2704,8 +2673,7 @@ ASN1_TIME_to_generalizedtime            3169	1_1_0	EXIST::FUNCTION:
 BIGNUM_it                               3170	1_1_0	EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 BIGNUM_it                               3170	1_1_0	EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
 AES_cbc_encrypt                         3171	1_1_0	EXIST::FUNCTION:AES
-ENGINE_get_load_privkey_function        3172	1_1_0	EXIST:!VMS:FUNCTION:ENGINE
-ENGINE_get_load_privkey_fn              3172	1_1_0	EXIST:VMS:FUNCTION:ENGINE
+ENGINE_get_load_privkey_function        3172	1_1_0	EXIST::FUNCTION:ENGINE
 OCSP_RESPONSE_free                      3173	1_1_0	EXIST::FUNCTION:
 UI_method_set_reader                    3174	1_1_0	EXIST::FUNCTION:
 i2d_ASN1_T61STRING                      3175	1_1_0	EXIST::FUNCTION:
@@ -2874,7 +2842,6 @@ ERR_set_mark                            3332	1_1_0	EXIST::FUNCTION:
 X509_STORE_CTX_set0_crls                3333	1_1_0	EXIST::FUNCTION:
 ENGINE_set_STORE                        3334	1_1_0	NOEXIST::FUNCTION:
 ENGINE_register_ECDSA                   3335	1_1_0	NOEXIST::FUNCTION:
-STORE_meth_set_list_start_fn            3336	1_1_0	NOEXIST::FUNCTION:
 STORE_method_set_list_start_function    3336	1_1_0	NOEXIST::FUNCTION:
 BN_BLINDING_invert_ex                   3337	1_1_0	EXIST::FUNCTION:
 NAME_CONSTRAINTS_free                   3338	1_1_0	EXIST::FUNCTION:
@@ -2895,15 +2862,13 @@ NAME_CONSTRAINTS_it                     3350	1_1_0	EXIST:EXPORT_VAR_AS_FUNCTION:
 ECDH_get_default_method                 3351	1_1_0	NOEXIST::FUNCTION:
 PKCS12_add_safe                         3352	1_1_0	EXIST::FUNCTION:
 EC_KEY_new_by_curve_name                3353	1_1_0	EXIST::FUNCTION:EC
-STORE_meth_get_update_store_fn          3354	1_1_0	NOEXIST::FUNCTION:
 STORE_method_get_update_store_function  3354	1_1_0	NOEXIST::FUNCTION:
 ENGINE_register_ECDH                    3355	1_1_0	NOEXIST::FUNCTION:
 SHA512_Update                           3356	1_1_0	EXIST:!VMSVAX:FUNCTION:
 i2d_ECPrivateKey                        3357	1_1_0	EXIST::FUNCTION:EC
 BN_get0_nist_prime_192                  3358	1_1_0	EXIST::FUNCTION:
 STORE_modify_certificate                3359	1_1_0	NOEXIST::FUNCTION:
-EC_POINT_set_affine_coordinates_GF2m    3360	1_1_0	EXIST:!VMS:FUNCTION:EC,EC2M
-EC_POINT_set_affine_coords_GF2m         3360	1_1_0	EXIST:VMS:FUNCTION:EC,EC2M
+EC_POINT_set_affine_coordinates_GF2m    3360	1_1_0	EXIST::FUNCTION:EC,EC2M
 BN_GF2m_mod_exp_arr                     3361	1_1_0	EXIST::FUNCTION:EC2M
 STORE_ATTR_INFO_modify_number           3362	1_1_0	NOEXIST::FUNCTION:
 X509_keyid_get0                         3363	1_1_0	EXIST::FUNCTION:
@@ -2919,7 +2884,6 @@ EC_GROUP_check_discriminant             3372	1_1_0	EXIST::FUNCTION:EC
 i2o_ECPublicKey                         3373	1_1_0	EXIST::FUNCTION:EC
 EC_KEY_precompute_mult                  3374	1_1_0	EXIST::FUNCTION:EC
 a2i_IPADDRESS                           3375	1_1_0	EXIST::FUNCTION:
-STORE_meth_set_initialise_fn            3376	1_1_0	NOEXIST::FUNCTION:
 STORE_method_set_initialise_function    3376	1_1_0	NOEXIST::FUNCTION:
 X509_STORE_CTX_set_depth                3377	1_1_0	EXIST::FUNCTION:
 X509_VERIFY_PARAM_inherit               3378	1_1_0	EXIST::FUNCTION:
@@ -2950,8 +2914,7 @@ STORE_get_method                        3401	1_1_0	NOEXIST::FUNCTION:
 EC_KEY_get_key_method_data              3402	1_1_0	NOEXIST::FUNCTION:
 ECDSA_sign_ex                           3403	1_1_0	EXIST::FUNCTION:EC
 STORE_parse_attrs_end                   3404	1_1_0	NOEXIST::FUNCTION:
-EC_GROUP_get_point_conversion_form      3405	1_1_0	EXIST:!VMS:FUNCTION:EC
-EC_GROUP_get_point_conv_form            3405	1_1_0	EXIST:VMS:FUNCTION:EC
+EC_GROUP_get_point_conversion_form      3405	1_1_0	EXIST::FUNCTION:EC
 STORE_method_set_store_function         3406	1_1_0	NOEXIST::FUNCTION:
 STORE_ATTR_INFO_in                      3407	1_1_0	NOEXIST::FUNCTION:
 PEM_read_bio_ECPKParameters             3408	1_1_0	EXIST::FUNCTION:EC
@@ -2969,13 +2932,10 @@ POLICY_MAPPING_free                     3419	1_1_0	EXIST::FUNCTION:
 BN_GF2m_mod_div                         3420	1_1_0	EXIST::FUNCTION:EC2M
 X509_VERIFY_PARAM_set_flags             3421	1_1_0	EXIST::FUNCTION:
 EC_KEY_free                             3422	1_1_0	EXIST::FUNCTION:EC
-STORE_meth_set_list_next_fn             3423	1_1_0	NOEXIST::FUNCTION:
 STORE_method_set_list_next_function     3423	1_1_0	NOEXIST::FUNCTION:
 PEM_write_bio_ECPrivateKey              3424	1_1_0	EXIST::FUNCTION:EC
 d2i_EC_PUBKEY                           3425	1_1_0	EXIST::FUNCTION:EC
-STORE_meth_get_generate_fn              3426	1_1_0	NOEXIST::FUNCTION:
 STORE_method_get_generate_function      3426	1_1_0	NOEXIST::FUNCTION:
-STORE_meth_set_list_end_fn              3427	1_1_0	NOEXIST::FUNCTION:
 STORE_method_set_list_end_function      3427	1_1_0	NOEXIST::FUNCTION:
 pqueue_print                            3428	1_1_0	NOEXIST::FUNCTION:
 EC_GROUP_have_precompute_mult           3429	1_1_0	EXIST::FUNCTION:EC
@@ -2997,8 +2957,7 @@ EC_POINT_dup                            3444	1_1_0	EXIST::FUNCTION:EC
 GENERAL_SUBTREE_new                     3445	1_1_0	EXIST::FUNCTION:
 STORE_list_crl_endp                     3446	1_1_0	NOEXIST::FUNCTION:
 EC_get_builtin_curves                   3447	1_1_0	EXIST::FUNCTION:EC
-X509_policy_node_get0_qualifiers        3448	1_1_0	EXIST:!VMS:FUNCTION:
-X509_pcy_node_get0_qualifiers           3448	1_1_0	EXIST:VMS:FUNCTION:
+X509_policy_node_get0_qualifiers        3448	1_1_0	EXIST::FUNCTION:
 STORE_list_crl_end                      3449	1_1_0	NOEXIST::FUNCTION:
 EVP_PKEY_set1_EC_KEY                    3450	1_1_0	EXIST::FUNCTION:EC
 BN_GF2m_mod_sqrt_arr                    3451	1_1_0	EXIST::FUNCTION:EC2M
@@ -3026,7 +2985,6 @@ i2d_ECParameters                        3472	1_1_0	EXIST::FUNCTION:EC
 i2d_ECPKParameters                      3473	1_1_0	EXIST::FUNCTION:EC
 BN_GENCB_call                           3474	1_1_0	EXIST::FUNCTION:
 d2i_ECPKParameters                      3475	1_1_0	EXIST::FUNCTION:EC
-STORE_meth_set_generate_fn              3476	1_1_0	NOEXIST::FUNCTION:
 STORE_method_set_generate_function      3476	1_1_0	NOEXIST::FUNCTION:
 ENGINE_set_ECDH                         3477	1_1_0	NOEXIST::FUNCTION:
 NAME_CONSTRAINTS_new                    3478	1_1_0	EXIST::FUNCTION:
@@ -3037,12 +2995,10 @@ STORE_ATTR_INFO_set_cstr                3482	1_1_0	NOEXIST::FUNCTION:
 STORE_list_crl_next                     3483	1_1_0	NOEXIST::FUNCTION:
 STORE_ATTR_INFO_in_range                3484	1_1_0	NOEXIST::FUNCTION:
 ECParameters_print                      3485	1_1_0	EXIST::FUNCTION:EC
-STORE_meth_set_delete_fn                3486	1_1_0	NOEXIST::FUNCTION:
 STORE_method_set_delete_function        3486	1_1_0	NOEXIST::FUNCTION:
 STORE_list_certificate_next             3487	1_1_0	NOEXIST::FUNCTION:
 ASN1_generate_nconf                     3488	1_1_0	EXIST::FUNCTION:
 BN_GF2m_mod_mul                         3490	1_1_0	EXIST::FUNCTION:EC2M
-STORE_meth_get_list_next_fn             3491	1_1_0	NOEXIST::FUNCTION:
 STORE_method_get_list_next_function     3491	1_1_0	NOEXIST::FUNCTION:
 STORE_ATTR_INFO_get0_dn                 3492	1_1_0	NOEXIST::FUNCTION:
 STORE_list_private_key_next             3493	1_1_0	NOEXIST::FUNCTION:
@@ -3053,7 +3009,6 @@ STORE_get_private_key                   3497	1_1_0	NOEXIST::FUNCTION:
 EVP_PKEY_get_attr_count                 3498	1_1_0	EXIST::FUNCTION:
 STORE_ATTR_INFO_new                     3499	1_1_0	NOEXIST::FUNCTION:
 EC_GROUP_get_curve_GF2m                 3500	1_1_0	EXIST::FUNCTION:EC,EC2M
-STORE_meth_set_revoke_fn                3501	1_1_0	NOEXIST::FUNCTION:
 STORE_method_set_revoke_function        3501	1_1_0	NOEXIST::FUNCTION:
 STORE_store_number                      3502	1_1_0	NOEXIST::FUNCTION:
 BN_is_prime_ex                          3503	1_1_0	EXIST::FUNCTION:
@@ -3076,20 +3031,17 @@ STORE_list_private_key_end              3520	1_1_0	NOEXIST::FUNCTION:
 i2d_EC_PUBKEY                           3521	1_1_0	EXIST::FUNCTION:EC
 ECDSA_get_default_method                3522	1_1_0	NOEXIST::FUNCTION:
 ASN1_put_eoc                            3523	1_1_0	EXIST::FUNCTION:
-X509_STORE_CTX_get_explicit_policy      3524	1_1_0	EXIST:!VMS:FUNCTION:
-X509_STORE_CTX_get_expl_policy          3524	1_1_0	EXIST:VMS:FUNCTION:
+X509_STORE_CTX_get_explicit_policy      3524	1_1_0	EXIST::FUNCTION:
 X509_VERIFY_PARAM_table_cleanup         3525	1_1_0	EXIST::FUNCTION:
 STORE_modify_private_key                3526	1_1_0	NOEXIST::FUNCTION:
 X509_VERIFY_PARAM_free                  3527	1_1_0	EXIST::FUNCTION:
 EC_METHOD_get_field_type                3528	1_1_0	EXIST::FUNCTION:EC
 EC_GFp_nist_method                      3529	1_1_0	EXIST::FUNCTION:EC
-STORE_meth_set_modify_fn                3530	1_1_0	NOEXIST::FUNCTION:
 STORE_method_set_modify_function        3530	1_1_0	NOEXIST::FUNCTION:
 STORE_parse_attrs_next                  3531	1_1_0	NOEXIST::FUNCTION:
 ENGINE_load_padlock                     3532	1_1_0	NOEXIST::FUNCTION:
 EC_GROUP_set_curve_name                 3533	1_1_0	EXIST::FUNCTION:EC
 X509_CERT_PAIR_it                       3534	1_1_0	NOEXIST::FUNCTION:
-STORE_meth_get_revoke_fn                3535	1_1_0	NOEXIST::FUNCTION:
 STORE_method_get_revoke_function        3535	1_1_0	NOEXIST::FUNCTION:
 STORE_method_set_get_function           3536	1_1_0	NOEXIST::FUNCTION:
 STORE_modify_number                     3537	1_1_0	NOEXIST::FUNCTION:
@@ -3109,16 +3061,13 @@ EC_KEY_generate_key                     3550	1_1_0	EXIST::FUNCTION:EC
 SHA384_Update                           3551	1_1_0	EXIST:!VMSVAX:FUNCTION:
 BN_GF2m_arr2poly                        3552	1_1_0	EXIST::FUNCTION:EC2M
 STORE_method_get_get_function           3553	1_1_0	NOEXIST::FUNCTION:
-STORE_meth_set_cleanup_fn               3554	1_1_0	NOEXIST::FUNCTION:
 STORE_method_set_cleanup_function       3554	1_1_0	NOEXIST::FUNCTION:
 EC_GROUP_check                          3555	1_1_0	EXIST::FUNCTION:EC
 d2i_ECPrivateKey_bio                    3556	1_1_0	EXIST::FUNCTION:EC
 EC_KEY_insert_key_method_data           3557	1_1_0	NOEXIST::FUNCTION:
-STORE_meth_get_lock_store_fn            3558	1_1_0	NOEXIST::FUNCTION:
 STORE_method_get_lock_store_function    3558	1_1_0	NOEXIST::FUNCTION:
 X509_VERIFY_PARAM_get_depth             3559	1_1_0	EXIST::FUNCTION:
 SHA224_Final                            3560	1_1_0	EXIST::FUNCTION:
-STORE_meth_set_update_store_fn          3561	1_1_0	NOEXIST::FUNCTION:
 STORE_method_set_update_store_function  3561	1_1_0	NOEXIST::FUNCTION:
 SHA224_Update                           3562	1_1_0	EXIST::FUNCTION:
 d2i_ECPrivateKey                        3563	1_1_0	EXIST::FUNCTION:EC
@@ -3141,7 +3090,6 @@ STORE_revoke_private_key                3579	1_1_0	NOEXIST::FUNCTION:
 BN_nist_mod_224                         3580	1_1_0	EXIST::FUNCTION:
 SHA512_Final                            3581	1_1_0	EXIST:!VMSVAX:FUNCTION:
 STORE_ATTR_INFO_modify_dn               3582	1_1_0	NOEXIST::FUNCTION:
-STORE_meth_get_initialise_fn            3583	1_1_0	NOEXIST::FUNCTION:
 STORE_method_get_initialise_function    3583	1_1_0	NOEXIST::FUNCTION:
 STORE_delete_number                     3584	1_1_0	NOEXIST::FUNCTION:
 i2d_EC_PUBKEY_bio                       3585	1_1_0	EXIST::FUNCTION:EC
@@ -3150,7 +3098,6 @@ EC_GROUP_get_asn1_flag                  3587	1_1_0	EXIST::FUNCTION:EC
 STORE_ATTR_INFO_in_ex                   3588	1_1_0	NOEXIST::FUNCTION:
 STORE_list_crl_start                    3589	1_1_0	NOEXIST::FUNCTION:
 ECDH_get_ex_new_index                   3590	1_1_0	NOEXIST::FUNCTION:
-STORE_meth_get_modify_fn                3591	1_1_0	NOEXIST::FUNCTION:
 STORE_method_get_modify_function        3591	1_1_0	NOEXIST::FUNCTION:
 v2i_ASN1_BIT_STRING                     3592	1_1_0	EXIST::FUNCTION:
 STORE_store_certificate                 3593	1_1_0	NOEXIST::FUNCTION:
@@ -3160,11 +3107,9 @@ STORE_ATTR_INFO_set_sha1str             3596	1_1_0	NOEXIST::FUNCTION:
 BN_GF2m_mod_inv                         3597	1_1_0	EXIST::FUNCTION:EC2M
 BN_GF2m_mod_exp                         3598	1_1_0	EXIST::FUNCTION:EC2M
 STORE_modify_public_key                 3599	1_1_0	NOEXIST::FUNCTION:
-STORE_meth_get_list_start_fn            3600	1_1_0	NOEXIST::FUNCTION:
 STORE_method_get_list_start_function    3600	1_1_0	NOEXIST::FUNCTION:
 EC_GROUP_get0_seed                      3601	1_1_0	EXIST::FUNCTION:EC
 STORE_store_arbitrary                   3602	1_1_0	NOEXIST::FUNCTION:
-STORE_meth_set_unlock_store_fn          3603	1_1_0	NOEXIST::FUNCTION:
 STORE_method_set_unlock_store_function  3603	1_1_0	NOEXIST::FUNCTION:
 BN_GF2m_mod_div_arr                     3604	1_1_0	EXIST::FUNCTION:EC2M
 ENGINE_set_ECDSA                        3605	1_1_0	NOEXIST::FUNCTION:
@@ -3179,8 +3124,7 @@ ECDH_set_ex_data                        3613	1_1_0	NOEXIST::FUNCTION:
 STORE_generate_key                      3614	1_1_0	NOEXIST::FUNCTION:
 BN_nist_mod_521                         3615	1_1_0	EXIST::FUNCTION:
 X509_policy_tree_get0_level             3616	1_1_0	EXIST::FUNCTION:
-EC_GROUP_set_point_conversion_form      3617	1_1_0	EXIST:!VMS:FUNCTION:EC
-EC_GROUP_set_point_conv_form            3617	1_1_0	EXIST:VMS:FUNCTION:EC
+EC_GROUP_set_point_conversion_form      3617	1_1_0	EXIST::FUNCTION:EC
 PEM_read_EC_PUBKEY                      3618	1_1_0	EXIST::FUNCTION:EC
 i2d_ECDSA_SIG                           3619	1_1_0	EXIST::FUNCTION:EC
 ECDSA_OpenSSL                           3620	1_1_0	NOEXIST::FUNCTION:
@@ -3189,12 +3133,10 @@ EC_KEY_get_enc_flags                    3622	1_1_0	EXIST::FUNCTION:EC
 ASN1_const_check_infinite_end           3623	1_1_0	EXIST::FUNCTION:
 EVP_PKEY_delete_attr                    3624	1_1_0	EXIST::FUNCTION:
 ECDSA_set_default_method                3625	1_1_0	NOEXIST::FUNCTION:
-EC_POINT_set_compressed_coordinates_GF2m 3626	1_1_0	EXIST:!VMS:FUNCTION:EC,EC2M
-EC_POINT_set_compr_coords_GF2m          3626	1_1_0	EXIST:VMS:FUNCTION:EC,EC2M
+EC_POINT_set_compressed_coordinates_GF2m 3626	1_1_0	EXIST::FUNCTION:EC,EC2M
 EC_GROUP_cmp                            3627	1_1_0	EXIST::FUNCTION:EC
 STORE_revoke_certificate                3628	1_1_0	NOEXIST::FUNCTION:
 BN_get0_nist_prime_256                  3629	1_1_0	EXIST::FUNCTION:
-STORE_meth_get_delete_fn                3630	1_1_0	NOEXIST::FUNCTION:
 STORE_method_get_delete_function        3630	1_1_0	NOEXIST::FUNCTION:
 SHA224_Init                             3631	1_1_0	EXIST::FUNCTION:
 PEM_read_ECPrivateKey                   3632	1_1_0	EXIST::FUNCTION:EC
@@ -3222,13 +3164,11 @@ X509_VERIFY_PARAM_add0_policy           3652	1_1_0	EXIST::FUNCTION:
 BN_GF2m_mod_solve_quad                  3653	1_1_0	EXIST::FUNCTION:EC2M
 SHA256                                  3654	1_1_0	EXIST::FUNCTION:
 i2d_ECPrivateKey_fp                     3655	1_1_0	EXIST::FUNCTION:EC,STDIO
-X509_policy_tree_get0_user_policies     3656	1_1_0	EXIST:!VMS:FUNCTION:
-X509_pcy_tree_get0_usr_policies         3656	1_1_0	EXIST:VMS:FUNCTION:
+X509_policy_tree_get0_user_policies     3656	1_1_0	EXIST::FUNCTION:
 OPENSSL_DIR_read                        3657	1_1_0	EXIST::FUNCTION:
 ENGINE_register_all_ECDSA               3658	1_1_0	NOEXIST::FUNCTION:
 X509_VERIFY_PARAM_lookup                3659	1_1_0	EXIST::FUNCTION:
-EC_POINT_get_affine_coordinates_GF2m    3660	1_1_0	EXIST:!VMS:FUNCTION:EC,EC2M
-EC_POINT_get_affine_coords_GF2m         3660	1_1_0	EXIST:VMS:FUNCTION:EC,EC2M
+EC_POINT_get_affine_coordinates_GF2m    3660	1_1_0	EXIST::FUNCTION:EC,EC2M
 EC_GROUP_dup                            3661	1_1_0	EXIST::FUNCTION:EC
 ENGINE_get_default_ECDSA                3662	1_1_0	NOEXIST::FUNCTION:
 EC_KEY_new                              3663	1_1_0	EXIST::FUNCTION:EC
@@ -3248,7 +3188,6 @@ X509_STORE_set1_param                   3676	1_1_0	EXIST::FUNCTION:
 STORE_method_get_ctrl_function          3677	1_1_0	NOEXIST::FUNCTION:
 STORE_free                              3678	1_1_0	NOEXIST::FUNCTION:
 PEM_write_ECPrivateKey                  3679	1_1_0	EXIST::FUNCTION:EC
-STORE_meth_get_unlock_store_fn          3680	1_1_0	NOEXIST::FUNCTION:
 STORE_method_get_unlock_store_function  3680	1_1_0	NOEXIST::FUNCTION:
 STORE_get_ex_data                       3681	1_1_0	NOEXIST::FUNCTION:
 EC_KEY_set_public_key                   3682	1_1_0	EXIST::FUNCTION:EC
@@ -3286,7 +3225,6 @@ EC_GROUP_new_by_curve_name              3711	1_1_0	EXIST::FUNCTION:EC
 SHA256_Final                            3712	1_1_0	EXIST::FUNCTION:
 DH_generate_parameters_ex               3713	1_1_0	EXIST::FUNCTION:DH
 PEM_read_bio_ECPrivateKey               3714	1_1_0	EXIST::FUNCTION:EC
-STORE_meth_get_cleanup_fn               3715	1_1_0	NOEXIST::FUNCTION:
 STORE_method_get_cleanup_function       3715	1_1_0	NOEXIST::FUNCTION:
 ENGINE_get_ECDH                         3716	1_1_0	NOEXIST::FUNCTION:
 d2i_ECDSA_SIG                           3717	1_1_0	EXIST::FUNCTION:EC
@@ -3328,7 +3266,6 @@ d2i_EC_PUBKEY_fp                        3751	1_1_0	EXIST::FUNCTION:EC,STDIO
 PKCS7_set0_type_other                   3752	1_1_0	EXIST::FUNCTION:
 PEM_read_bio_X509_CERT_PAIR             3753	1_1_0	NOEXIST::FUNCTION:
 pqueue_next                             3754	1_1_0	NOEXIST::FUNCTION:
-STORE_meth_get_list_end_fn              3755	1_1_0	NOEXIST::FUNCTION:
 STORE_method_get_list_end_function      3755	1_1_0	NOEXIST::FUNCTION:
 EVP_PKEY_add1_attr_by_OBJ               3756	1_1_0	EXIST::FUNCTION:
 X509_VERIFY_PARAM_set_time              3757	1_1_0	EXIST::FUNCTION:
@@ -3547,8 +3484,7 @@ CMS_unsigned_get0_data_by_OBJ           3959	1_1_0	EXIST::FUNCTION:CMS
 PEM_write_bio_CMS                       3960	1_1_0	EXIST::FUNCTION:CMS
 CMS_unsigned_get_attr                   3961	1_1_0	EXIST::FUNCTION:CMS
 CMS_RecipientInfo_ktri_cert_cmp         3962	1_1_0	EXIST::FUNCTION:CMS
-CMS_RecipientInfo_ktri_get0_algs        3963	1_1_0	EXIST:!VMS:FUNCTION:CMS
-CMS_RecipInfo_ktri_get0_algs            3963	1_1_0	EXIST:VMS:FUNCTION:CMS
+CMS_RecipientInfo_ktri_get0_algs        3963	1_1_0	EXIST::FUNCTION:CMS
 CMS_ContentInfo_free                    3964	1_1_0	EXIST::FUNCTION:CMS
 CMS_final                               3965	1_1_0	EXIST::FUNCTION:CMS
 CMS_add_simple_smimecap                 3966	1_1_0	EXIST::FUNCTION:CMS
@@ -3619,8 +3555,7 @@ CMS_get1_certs                          4028	1_1_0	EXIST::FUNCTION:CMS
 CMS_signed_add1_attr_by_NID             4029	1_1_0	EXIST::FUNCTION:CMS
 CMS_unsigned_add1_attr_by_txt           4030	1_1_0	EXIST::FUNCTION:CMS
 CMS_dataFinal                           4031	1_1_0	EXIST::FUNCTION:CMS
-CMS_RecipientInfo_ktri_get0_signer_id   4032	1_1_0	EXIST:!VMS:FUNCTION:CMS
-CMS_RecipInfo_ktri_get0_sigr_id         4032	1_1_0	EXIST:VMS:FUNCTION:CMS
+CMS_RecipientInfo_ktri_get0_signer_id   4032	1_1_0	EXIST::FUNCTION:CMS
 i2d_CMS_ReceiptRequest                  4033	1_1_0	EXIST::FUNCTION:CMS
 CMS_add1_recipient_cert                 4034	1_1_0	EXIST::FUNCTION:CMS
 CMS_dataInit                            4035	1_1_0	EXIST::FUNCTION:CMS
@@ -3632,10 +3567,8 @@ CMS_set1_eContentType                   4040	1_1_0	EXIST::FUNCTION:CMS
 CMS_ReceiptRequest_create0              4041	1_1_0	EXIST::FUNCTION:CMS
 CMS_add1_signer                         4042	1_1_0	EXIST::FUNCTION:CMS
 CMS_RecipientInfo_set0_pkey             4043	1_1_0	EXIST::FUNCTION:CMS
-ENGINE_set_load_ssl_client_cert_function 4044	1_1_0	EXIST:!VMS:FUNCTION:ENGINE
-ENGINE_set_ld_ssl_clnt_cert_fn          4044	1_1_0	EXIST:VMS:FUNCTION:ENGINE
-ENGINE_get_ssl_client_cert_function     4045	1_1_0	EXIST:!VMS:FUNCTION:ENGINE
-ENGINE_get_ssl_client_cert_fn           4045	1_1_0	EXIST:VMS:FUNCTION:ENGINE
+ENGINE_set_load_ssl_client_cert_function 4044	1_1_0	EXIST::FUNCTION:ENGINE
+ENGINE_get_ssl_client_cert_function     4045	1_1_0	EXIST::FUNCTION:ENGINE
 ENGINE_load_ssl_client_cert             4046	1_1_0	EXIST::FUNCTION:ENGINE
 ENGINE_load_capi                        4047	1_1_0	NOEXIST::FUNCTION:
 OPENSSL_isservice                       4048	1_1_0	EXIST::FUNCTION:
@@ -3729,8 +3662,7 @@ EVP_PKEY_set_type_str                   4136	1_1_0	EXIST::FUNCTION:
 EVP_PKEY_CTX_get_keygen_info            4137	1_1_0	EXIST::FUNCTION:
 TS_REQ_set_policy_id                    4138	1_1_0	EXIST::FUNCTION:
 d2i_TS_RESP_fp                          4139	1_1_0	EXIST::FUNCTION:STDIO
-ENGINE_get_pkey_asn1_meth_engine        4140	1_1_0	EXIST:!VMS:FUNCTION:ENGINE
-ENGINE_get_pkey_asn1_meth_eng           4140	1_1_0	EXIST:VMS:FUNCTION:ENGINE
+ENGINE_get_pkey_asn1_meth_engine        4140	1_1_0	EXIST::FUNCTION:ENGINE
 WHIRLPOOL_Init                          4141	1_1_0	EXIST::FUNCTION:WHIRLPOOL
 TS_RESP_set_status_info                 4142	1_1_0	EXIST::FUNCTION:
 EVP_PKEY_keygen                         4143	1_1_0	EXIST::FUNCTION:
@@ -3784,8 +3716,7 @@ PEM_write_bio_PKCS7_stream              4189	1_1_0	EXIST::FUNCTION:
 TS_MSG_IMPRINT_print_bio                4190	1_1_0	EXIST::FUNCTION:
 BN_asc2bn                               4191	1_1_0	EXIST::FUNCTION:
 TS_REQ_get_policy_id                    4192	1_1_0	EXIST::FUNCTION:
-ENGINE_set_default_pkey_asn1_meths      4193	1_1_0	EXIST:!VMS:FUNCTION:ENGINE
-ENGINE_set_def_pkey_asn1_meths          4193	1_1_0	EXIST:VMS:FUNCTION:ENGINE
+ENGINE_set_default_pkey_asn1_meths      4193	1_1_0	EXIST::FUNCTION:ENGINE
 d2i_TS_ACCURACY                         4194	1_1_0	EXIST::FUNCTION:
 DSO_global_lookup                       4195	1_1_0	EXIST::FUNCTION:
 TS_CONF_set_tsa_name                    4196	1_1_0	EXIST::FUNCTION:
@@ -3862,8 +3793,7 @@ d2i_ESS_ISSUER_SERIAL                   4265	1_1_0	EXIST::FUNCTION:
 ISSUING_DIST_POINT_new                  4266	1_1_0	EXIST::FUNCTION:
 ASN1_TIME_adj                           4267	1_1_0	EXIST::FUNCTION:
 TS_OBJ_print_bio                        4268	1_1_0	EXIST::FUNCTION:
-EVP_PKEY_meth_set_verify_recover        4269	1_1_0	EXIST:!VMS:FUNCTION:
-EVP_PKEY_meth_set_vrfy_recover          4269	1_1_0	EXIST:VMS:FUNCTION:
+EVP_PKEY_meth_set_verify_recover        4269	1_1_0	EXIST::FUNCTION:
 TS_RESP_get_status_info                 4270	1_1_0	EXIST::FUNCTION:
 CMS_stream                              4271	1_1_0	EXIST::FUNCTION:CMS
 EVP_PKEY_CTX_set_cb                     4272	1_1_0	EXIST::FUNCTION:
@@ -3962,8 +3892,7 @@ i2d_ESS_CERT_ID                         4364	1_1_0	EXIST::FUNCTION:
 TS_VERIFY_CTX_new                       4365	1_1_0	EXIST::FUNCTION:
 TS_RESP_CTX_set_extension_cb            4366	1_1_0	EXIST::FUNCTION:
 ENGINE_register_all_pkey_meths          4367	1_1_0	EXIST::FUNCTION:ENGINE
-TS_RESP_CTX_set_status_info_cond        4368	1_1_0	EXIST:!VMS:FUNCTION:
-TS_RESP_CTX_set_stat_info_cond          4368	1_1_0	EXIST:VMS:FUNCTION:
+TS_RESP_CTX_set_status_info_cond        4368	1_1_0	EXIST::FUNCTION:
 EVP_PKEY_verify                         4369	1_1_0	EXIST::FUNCTION:
 WHIRLPOOL_Final                         4370	1_1_0	EXIST::FUNCTION:WHIRLPOOL
 X509_CRL_METHOD_new                     4371	1_1_0	EXIST::FUNCTION:
@@ -3993,8 +3922,7 @@ TS_CONF_set_signer_key                  4394	1_1_0	EXIST::FUNCTION:
 TS_ACCURACY_get_millis                  4395	1_1_0	EXIST::FUNCTION:
 TS_RESP_get_token                       4396	1_1_0	EXIST::FUNCTION:
 TS_ACCURACY_dup                         4397	1_1_0	EXIST::FUNCTION:
-ENGINE_register_all_pkey_asn1_meths     4398	1_1_0	EXIST:!VMS:FUNCTION:ENGINE
-ENGINE_reg_all_pkey_asn1_meths          4398	1_1_0	EXIST:VMS:FUNCTION:ENGINE
+ENGINE_register_all_pkey_asn1_meths     4398	1_1_0	EXIST::FUNCTION:ENGINE
 X509_CRL_set_default_method             4399	1_1_0	EXIST::FUNCTION:
 CRYPTO_THREADID_hash                    4400	1_1_0	EXIST::FUNCTION:
 CMS_ContentInfo_print_ctx               4401	1_1_0	EXIST::FUNCTION:CMS
@@ -4059,8 +3987,7 @@ BIO_asn1_get_suffix                     4458	1_1_0	EXIST::FUNCTION:
 TS_REQ_free                             4459	1_1_0	EXIST::FUNCTION:
 EVP_PKEY_meth_free                      4460	1_1_0	EXIST::FUNCTION:
 TS_REQ_get_exts                         4461	1_1_0	EXIST::FUNCTION:
-TS_RESP_CTX_set_clock_precision_digits  4462	1_1_0	EXIST:!VMS:FUNCTION:
-TS_RESP_CTX_set_clk_prec_digits         4462	1_1_0	EXIST:VMS:FUNCTION:
+TS_RESP_CTX_set_clock_precision_digits  4462	1_1_0	EXIST::FUNCTION:
 TS_RESP_CTX_add_failure_info            4463	1_1_0	EXIST::FUNCTION:
 i2d_TS_RESP_bio                         4464	1_1_0	EXIST::FUNCTION:
 EVP_PKEY_CTX_get0_peerkey               4465	1_1_0	EXIST::FUNCTION:
@@ -4088,16 +4015,14 @@ TS_ACCURACY_free                        4486	1_1_0	EXIST::FUNCTION:
 TS_RESP_get_tst_info                    4487	1_1_0	EXIST::FUNCTION:
 EVP_PKEY_derive_set_peer                4488	1_1_0	EXIST::FUNCTION:
 PEM_read_bio_Parameters                 4489	1_1_0	EXIST::FUNCTION:
-TS_CONF_set_clock_precision_digits      4490	1_1_0	EXIST:!VMS:FUNCTION:
-TS_CONF_set_clk_prec_digits             4490	1_1_0	EXIST:VMS:FUNCTION:
+TS_CONF_set_clock_precision_digits      4490	1_1_0	EXIST::FUNCTION:
 ESS_ISSUER_SERIAL_dup                   4491	1_1_0	EXIST::FUNCTION:
 TS_ACCURACY_get_micros                  4492	1_1_0	EXIST::FUNCTION:
 ASN1_PCTX_get_str_flags                 4493	1_1_0	EXIST::FUNCTION:
 NAME_CONSTRAINTS_check                  4494	1_1_0	EXIST::FUNCTION:
 ASN1_BIT_STRING_check                   4495	1_1_0	EXIST::FUNCTION:
 X509_check_akid                         4496	1_1_0	EXIST::FUNCTION:
-ENGINE_unregister_pkey_asn1_meths       4497	1_1_0	EXIST:!VMS:FUNCTION:ENGINE
-ENGINE_unreg_pkey_asn1_meths            4497	1_1_0	EXIST:VMS:FUNCTION:ENGINE
+ENGINE_unregister_pkey_asn1_meths       4497	1_1_0	EXIST::FUNCTION:ENGINE
 ASN1_PCTX_free                          4498	1_1_0	EXIST::FUNCTION:
 PEM_write_bio_ASN1_stream               4499	1_1_0	EXIST::FUNCTION:
 i2d_ASN1_bio_stream                     4500	1_1_0	EXIST::FUNCTION:
@@ -4146,15 +4071,12 @@ OCSP_REQ_CTX_set1_req                   4542	1_1_0	EXIST::FUNCTION:
 X509_STORE_set_verify_cb                4543	1_1_0	EXIST::FUNCTION:
 X509_STORE_CTX_get0_current_crl         4544	1_1_0	EXIST::FUNCTION:
 X509_STORE_CTX_get0_parent_ctx          4545	1_1_0	EXIST::FUNCTION:
-X509_STORE_CTX_get0_current_issuer      4546	1_1_0	EXIST:!VMS:FUNCTION:
-X509_STORE_CTX_get0_cur_issuer          4546	1_1_0	EXIST:VMS:FUNCTION:
+X509_STORE_CTX_get0_current_issuer      4546	1_1_0	EXIST::FUNCTION:
 X509_issuer_name_hash_old               4547	1_1_0	EXIST::FUNCTION:MD5
 X509_subject_name_hash_old              4548	1_1_0	EXIST::FUNCTION:MD5
 EVP_CIPHER_CTX_copy                     4549	1_1_0	EXIST::FUNCTION:
-UI_method_get_prompt_constructor        4550	1_1_0	EXIST:!VMS:FUNCTION:
-UI_method_get_prompt_constructr         4550	1_1_0	EXIST:VMS:FUNCTION:
-UI_method_set_prompt_constructor        4551	1_1_0	EXIST:!VMS:FUNCTION:
-UI_method_set_prompt_constructr         4551	1_1_0	EXIST:VMS:FUNCTION:
+UI_method_get_prompt_constructor        4550	1_1_0	EXIST::FUNCTION:
+UI_method_set_prompt_constructor        4551	1_1_0	EXIST::FUNCTION:
 EVP_read_pw_string_min                  4552	1_1_0	EXIST::FUNCTION:
 CRYPTO_cts128_encrypt                   4553	1_1_0	EXIST::FUNCTION:
 CRYPTO_cts128_decrypt_block             4554	1_1_0	EXIST::FUNCTION:
@@ -4188,8 +4110,7 @@ SRP_Calc_A                              4581	1_1_0	EXIST::FUNCTION:SRP
 SRP_Verify_A_mod_N                      4582	1_1_0	EXIST::FUNCTION:SRP
 SRP_VBASE_init                          4583	1_1_0	EXIST::FUNCTION:SRP
 SRP_Verify_B_mod_N                      4584	1_1_0	EXIST::FUNCTION:SRP
-EC_KEY_set_public_key_affine_coordinates 4585	1_1_0	EXIST:!VMS:FUNCTION:EC
-EC_KEY_set_pub_key_aff_coords           4585	1_1_0	EXIST:VMS:FUNCTION:EC
+EC_KEY_set_public_key_affine_coordinates 4585	1_1_0	EXIST::FUNCTION:EC
 EVP_aes_192_ctr                         4586	1_1_0	EXIST::FUNCTION:AES
 EVP_PKEY_meth_get0_info                 4587	1_1_0	EXIST::FUNCTION:
 EVP_PKEY_meth_copy                      4588	1_1_0	EXIST::FUNCTION:
@@ -4333,15 +4254,13 @@ CMS_RecipientInfo_kari_decrypt          4724	1_1_0	EXIST::FUNCTION:CMS
 CMS_SignerInfo_get0_pkey_ctx            4725	1_1_0	EXIST::FUNCTION:CMS
 ECDSA_METHOD_set_flags                  4726	1_1_0	NOEXIST::FUNCTION:
 ECDSA_METHOD_set_sign_setup             4727	1_1_0	NOEXIST::FUNCTION:
-CMS_RecipientInfo_kari_orig_id_cmp      4728	1_1_0	EXIST:!VMS:FUNCTION:CMS
-CMS_RecipInfo_kari_orig_id_cmp          4728	1_1_0	EXIST:VMS:FUNCTION:CMS
+CMS_RecipientInfo_kari_orig_id_cmp      4728	1_1_0	EXIST::FUNCTION:CMS
 CMS_RecipientInfo_kari_get0_alg         4729	1_1_0	EXIST::FUNCTION:CMS
 EVP_aes_192_wrap                        4730	1_1_0	EXIST::FUNCTION:AES
 EVP_aes_128_cbc_hmac_sha256             4731	1_1_0	EXIST::FUNCTION:AES
 DH_compute_key_padded                   4732	1_1_0	EXIST::FUNCTION:DH
 ECDSA_METHOD_set_sign                   4733	1_1_0	NOEXIST::FUNCTION:
-CMS_RecipientEncryptedKey_cert_cmp      4734	1_1_0	EXIST:!VMS:FUNCTION:CMS
-CMS_RecipEncryptedKey_cert_cmp          4734	1_1_0	EXIST:VMS:FUNCTION:CMS
+CMS_RecipientEncryptedKey_cert_cmp      4734	1_1_0	EXIST::FUNCTION:CMS
 DH_KDF_X9_42                            4735	1_1_0	EXIST::FUNCTION:CMS,DH
 RSA_OAEP_PARAMS_free                    4736	1_1_0	EXIST::FUNCTION:RSA
 EVP_des_ede3_wrap                       4737	1_1_0	EXIST::FUNCTION:DES
@@ -4350,29 +4269,23 @@ RSA_OAEP_PARAMS_it                      4738	1_1_0	EXIST:EXPORT_VAR_AS_FUNCTION:
 ASN1_TIME_diff                          4739	1_1_0	EXIST::FUNCTION:
 EVP_aes_256_cbc_hmac_sha256             4740	1_1_0	EXIST::FUNCTION:AES
 CMS_SignerInfo_get0_signature           4741	1_1_0	EXIST::FUNCTION:CMS
-CMS_RecipientInfo_kari_get0_reks        4742	1_1_0	EXIST:!VMS:FUNCTION:CMS
-CMS_RecipInfo_kari_get0_reks            4742	1_1_0	EXIST:VMS:FUNCTION:CMS
+CMS_RecipientInfo_kari_get0_reks        4742	1_1_0	EXIST::FUNCTION:CMS
 EVP_aes_128_wrap                        4743	1_1_0	EXIST::FUNCTION:AES
 CMS_SignerInfo_get0_md_ctx              4744	1_1_0	EXIST::FUNCTION:CMS
 OPENSSL_gmtime_diff                     4745	1_1_0	EXIST::FUNCTION:
-CMS_RecipientInfo_kari_set0_pkey        4746	1_1_0	EXIST:!VMS:FUNCTION:CMS
-CMS_RecipInfo_kari_set0_pkey            4746	1_1_0	EXIST:VMS:FUNCTION:CMS
+CMS_RecipientInfo_kari_set0_pkey        4746	1_1_0	EXIST::FUNCTION:CMS
 i2d_RSA_OAEP_PARAMS                     4747	1_1_0	EXIST::FUNCTION:RSA
 d2i_RSA_OAEP_PARAMS                     4748	1_1_0	EXIST::FUNCTION:RSA
 ECDH_KDF_X9_62                          4749	1_1_0	EXIST::FUNCTION:EC
 CMS_RecipientInfo_kari_get0_ctx         4750	1_1_0	EXIST::FUNCTION:CMS
 ECDSA_METHOD_new                        4751	1_1_0	NOEXIST::FUNCTION:
 CMS_RecipientInfo_get0_pkey_ctx         4752	1_1_0	EXIST::FUNCTION:CMS
-CMS_RecipientEncryptedKey_get0_id       4753	1_1_0	EXIST:!VMS:FUNCTION:CMS
-CMS_RecipEncryptedKey_get0_id           4753	1_1_0	EXIST:VMS:FUNCTION:CMS
-RSA_pad_check_PKCS1_OAEP_mgf1           4754	1_1_0	NOEXIST::FUNCTION:
-RSA_padding_check_PKCS1_OAEP_mgf1       4754	1_1_0	EXIST:!VMS:FUNCTION:RSA
-RSA_padding_chk_PKCS1_OAEP_mgf1         4754	1_1_0	EXIST:VMS:FUNCTION:RSA
+CMS_RecipientEncryptedKey_get0_id       4753	1_1_0	EXIST::FUNCTION:CMS
+RSA_padding_check_PKCS1_OAEP_mgf1       4754	1_1_0	EXIST::FUNCTION:RSA
 ECDSA_METHOD_set_verify                 4755	1_1_0	NOEXIST::FUNCTION:
 CMS_SharedInfo_encode                   4756	1_1_0	EXIST::FUNCTION:CMS
 RSA_padding_add_PKCS1_OAEP_mgf1         4757	1_1_0	EXIST::FUNCTION:RSA
-CMS_RecipientInfo_kari_get0_orig_id     4758	1_1_0	EXIST:!VMS:FUNCTION:CMS
-CMS_RecipInfo_kari_get0_orig_id         4758	1_1_0	EXIST:VMS:FUNCTION:CMS
+CMS_RecipientInfo_kari_get0_orig_id     4758	1_1_0	EXIST::FUNCTION:CMS
 ECDSA_METHOD_free                       4759	1_1_0	NOEXIST::FUNCTION:
 X509_VERIFY_PARAM_get_count             4760	1_1_0	EXIST::FUNCTION:
 X509_VERIFY_PARAM_get0_name             4761	1_1_0	EXIST::FUNCTION:
diff --git a/util/mkdef.pl b/util/mkdef.pl
index ff68d86..aa85ec8 100755
--- a/util/mkdef.pl
+++ b/util/mkdef.pl
@@ -1225,12 +1225,8 @@ EOF
                 }
         elsif ($VMS)
                 {
-                my $libref = $name eq "ssl" ? "LIBCRYPTO.EXE /SHARE" : "";
                 print OUT <<"EOF";
-IDENTIFICATION="V$version"
 CASE_SENSITIVE=YES
-LIB$libname.OLB /LIBRARY
-$libref
 SYMBOL_VECTOR=(-
 EOF
                 $symvtextcount = 16; # length of "SYMBOL_VECTOR=(-"
@@ -1297,34 +1293,35 @@ EOF
 						print OUT "        $s2;\n";
                                         } elsif ($VMS) {
                                             while(++$prevnum < $n) {
-                                                my $symline="SPARE, SPARE -";
-                                                if ($symvtextcount + length($symline) + 1 > 1024) {
+                                                my $symline=" ,SPARE -\n  ,SPARE -\n";
+                                                if ($symvtextcount + length($symline) - 2 > 1024) {
                                                     print OUT ")\nSYMBOL_VECTOR=(-\n";
                                                     $symvtextcount = 16; # length of "SYMBOL_VECTOR=(-"
                                                 }
-                                                if ($symvtextcount > 16) {
-                                                    $symline = ",".$symline;
+                                                if ($symvtextcount == 16) {
+                                                    # Take away first comma
+                                                    $symline =~ s/,//;
                                                 }
-                                                print OUT "    $symline\n";
-                                                $symvtextcount += length($symline);
+                                                print OUT $symline;
+                                                $symvtextcount += length($symline) - 2;
                                             }
                                             (my $s_uc = $s) =~ tr/a-z/A-Z/;
                                             my $symtype=
                                                 $v ? "DATA" : "PROCEDURE";
                                             my $symline=
                                                 ($s_uc ne $s
-                                                 ? "$s_uc/$s=$symtype, $s=$symtype"
-                                                 : "$s=$symtype, SPARE")
-                                                ." -";
-                                            if ($symvtextcount + length($symline) + 1 > 1024) {
+                                                 ? " ,$s_uc/$s=$symtype -\n  ,$s=$symtype -\n"
+                                                 : " ,$s=$symtype -\n  ,SPARE -\n");
+                                            if ($symvtextcount + length($symline) - 2 > 1024) {
                                                 print OUT ")\nSYMBOL_VECTOR=(-\n";
                                                 $symvtextcount = 16; # length of "SYMBOL_VECTOR=(-"
                                             }
-                                            if ($symvtextcount > 16) {
-                                                $symline = ",".$symline;
+                                            if ($symvtextcount == 16) {
+                                                # Take away first comma
+                                                $symline =~ s/,//;
                                             }
-                                            print OUT "    $symline\n";
-                                            $symvtextcount += length($symline);
+                                            print OUT $symline;
+                                            $symvtextcount += length($symline) - 2;
 					} elsif($v && !$OS2) {
 						printf OUT "    %s%-39s @%-8d DATA\n",
 								($W32)?"":"_",$s2,$n;
diff --git a/util/ssleay.num b/util/ssleay.num
index 3d1a34b..6e339f6 100755
--- a/util/ssleay.num
+++ b/util/ssleay.num
@@ -126,8 +126,7 @@ SSL_SESSION_set_timeout                 137	1_1_0	EXIST::FUNCTION:
 SSL_CTX_get_ex_data                     138	1_1_0	EXIST::FUNCTION:
 SSL_CTX_get_quiet_shutdown              140	1_1_0	EXIST::FUNCTION:
 SSL_CTX_load_verify_locations           141	1_1_0	EXIST::FUNCTION:
-SSL_CTX_set_default_verify_paths        142	1_1_0	EXIST:!VMS:FUNCTION:
-SSL_CTX_set_def_verify_paths            142	1_1_0	EXIST:VMS:FUNCTION:
+SSL_CTX_set_default_verify_paths        142	1_1_0	EXIST::FUNCTION:
 SSL_CTX_set_ex_data                     143	1_1_0	EXIST::FUNCTION:
 SSL_CTX_set_quiet_shutdown              145	1_1_0	EXIST::FUNCTION:
 SSL_SESSION_get_ex_data                 146	1_1_0	EXIST::FUNCTION:
@@ -154,8 +153,7 @@ TLSv1_server_method                     171	1_1_0	EXIST::FUNCTION:
 TLSv1_client_method                     172	1_1_0	EXIST::FUNCTION:
 BIO_new_buffer_ssl_connect              173	1_1_0	EXIST::FUNCTION:
 BIO_new_ssl_connect                     174	1_1_0	EXIST::FUNCTION:
-SSL_get_ex_data_X509_STORE_CTX_idx      175	1_1_0	EXIST:!VMS:FUNCTION:
-SSL_get_ex_d_X509_STORE_CTX_idx         175	1_1_0	EXIST:VMS:FUNCTION:
+SSL_get_ex_data_X509_STORE_CTX_idx      175	1_1_0	EXIST::FUNCTION:
 SSL_CTX_set_tmp_dh_callback             176	1_1_0	EXIST::FUNCTION:DH
 SSL_CTX_set_tmp_rsa_callback            177	1_1_0	NOEXIST::FUNCTION:
 SSL_CTX_set_timeout                     178	1_1_0	EXIST::FUNCTION:
@@ -165,25 +163,20 @@ SSL_CTX_set_cert_store                  181	1_1_0	EXIST::FUNCTION:
 SSL_want                                182	1_1_0	EXIST::FUNCTION:
 SSL_library_init                        183	1_1_0	NOEXIST::FUNCTION:
 SSL_COMP_add_compression_method         184	1_1_0	EXIST::FUNCTION:
-SSL_add_file_cert_subjects_to_stack     185	1_1_0	EXIST:!VMS:FUNCTION:
-SSL_add_file_cert_subjs_to_stk          185	1_1_0	EXIST:VMS:FUNCTION:
+SSL_add_file_cert_subjects_to_stack     185	1_1_0	EXIST::FUNCTION:
 SSL_set_tmp_rsa_callback                186	1_1_0	NOEXIST::FUNCTION:
 SSL_set_tmp_dh_callback                 187	1_1_0	EXIST::FUNCTION:DH
-SSL_add_dir_cert_subjects_to_stack      188	1_1_0	EXIST:!VMS:FUNCTION:
-SSL_add_dir_cert_subjs_to_stk           188	1_1_0	EXIST:VMS:FUNCTION:
+SSL_add_dir_cert_subjects_to_stack      188	1_1_0	EXIST::FUNCTION:
 SSL_set_session_id_context              189	1_1_0	EXIST::FUNCTION:
-SSL_CTX_use_certificate_chain_file      222	1_1_0	EXIST:!VMS:FUNCTION:
-SSL_CTX_use_cert_chain_file             222	1_1_0	EXIST:VMS:FUNCTION:
+SSL_CTX_use_certificate_chain_file      222	1_1_0	EXIST::FUNCTION:
 SSL_CTX_set_verify_depth                225	1_1_0	EXIST::FUNCTION:
 SSL_set_verify_depth                    226	1_1_0	EXIST::FUNCTION:
 SSL_CTX_get_verify_depth                228	1_1_0	EXIST::FUNCTION:
 SSL_get_verify_depth                    229	1_1_0	EXIST::FUNCTION:
 SSL_CTX_set_session_id_context          231	1_1_0	EXIST::FUNCTION:
-SSL_CTX_set_cert_verify_callback        232	1_1_0	EXIST:!VMS:FUNCTION:
-SSL_CTX_set_cert_verify_cb              232	1_1_0	EXIST:VMS:FUNCTION:
+SSL_CTX_set_cert_verify_callback        232	1_1_0	EXIST::FUNCTION:
 SSL_test_functions                      233	1_1_0	EXIST::FUNCTION:UNIT_TEST
-SSL_CTX_set_default_passwd_cb_userdata  235	1_1_0	EXIST:!VMS:FUNCTION:
-SSL_CTX_set_def_passwd_cb_ud            235	1_1_0	EXIST:VMS:FUNCTION:
+SSL_CTX_set_default_passwd_cb_userdata  235	1_1_0	EXIST::FUNCTION:
 SSL_set_purpose                         236	1_1_0	EXIST::FUNCTION:
 SSL_CTX_set_trust                       237	1_1_0	EXIST::FUNCTION:
 SSL_CTX_set_purpose                     238	1_1_0	EXIST::FUNCTION:
@@ -224,8 +217,7 @@ SSL_get_current_compression             272	1_1_0	EXIST::FUNCTION:
 DTLSv1_method                           273	1_1_0	EXIST::FUNCTION:
 SSL_get_current_expansion               274	1_1_0	EXIST::FUNCTION:
 DTLSv1_server_method                    275	1_1_0	EXIST::FUNCTION:
-SSL_COMP_get_compression_methods        276	1_1_0	EXIST:!VMS:FUNCTION:
-SSL_COMP_get_compress_methods           276	1_1_0	EXIST:VMS:FUNCTION:
+SSL_COMP_get_compression_methods        276	1_1_0	EXIST::FUNCTION:
 SSL_SESSION_get_id                      277	1_1_0	EXIST::FUNCTION:
 SSL_CTX_sess_set_new_cb                 278	1_1_0	EXIST::FUNCTION:
 SSL_CTX_sess_get_get_cb                 279	1_1_0	EXIST::FUNCTION:
@@ -265,11 +257,9 @@ SSL_renegotiate_abbreviated             312	1_1_0	EXIST::FUNCTION:
 TLSv1_1_method                          313	1_1_0	EXIST::FUNCTION:
 TLSv1_1_client_method                   314	1_1_0	EXIST::FUNCTION:
 TLSv1_1_server_method                   315	1_1_0	EXIST::FUNCTION:
-SSL_CTX_set_srp_client_pwd_callback     316	1_1_0	EXIST:!VMS:FUNCTION:SRP
-SSL_CTX_set_srp_client_pwd_cb           316	1_1_0	EXIST:VMS:FUNCTION:SRP
+SSL_CTX_set_srp_client_pwd_callback     316	1_1_0	EXIST::FUNCTION:SRP
 SSL_get_srp_g                           317	1_1_0	EXIST::FUNCTION:SRP
-SSL_CTX_set_srp_username_callback       318	1_1_0	EXIST:!VMS:FUNCTION:SRP
-SSL_CTX_set_srp_un_cb                   318	1_1_0	EXIST:VMS:FUNCTION:SRP
+SSL_CTX_set_srp_username_callback       318	1_1_0	EXIST::FUNCTION:SRP
 SSL_get_srp_userinfo                    319	1_1_0	EXIST::FUNCTION:SRP
 SSL_set_srp_server_param                320	1_1_0	EXIST::FUNCTION:SRP
 SSL_set_srp_server_param_pw             321	1_1_0	EXIST::FUNCTION:SRP
@@ -277,22 +267,17 @@ SSL_get_srp_N                           322	1_1_0	EXIST::FUNCTION:SRP
 SSL_get_srp_username                    323	1_1_0	EXIST::FUNCTION:SRP
 SSL_CTX_set_srp_password                324	1_1_0	EXIST::FUNCTION:SRP
 SSL_CTX_set_srp_strength                325	1_1_0	EXIST::FUNCTION:SRP
-SSL_CTX_set_srp_verify_param_callback   326	1_1_0	EXIST:!VMS:FUNCTION:SRP
-SSL_CTX_set_srp_vfy_param_cb            326	1_1_0	EXIST:VMS:FUNCTION:SRP
-SSL_CTX_set_srp_miss_srp_un_cb          327	1_1_0	NOEXIST::FUNCTION:
+SSL_CTX_set_srp_verify_param_callback   326	1_1_0	EXIST::FUNCTION:SRP
 SSL_CTX_set_srp_missing_srp_username_callback 327	1_1_0	NOEXIST::FUNCTION:
 SSL_CTX_set_srp_cb_arg                  328	1_1_0	EXIST::FUNCTION:SRP
 SSL_CTX_set_srp_username                329	1_1_0	EXIST::FUNCTION:SRP
 SSL_CTX_SRP_CTX_init                    330	1_1_0	EXIST::FUNCTION:SRP
 SSL_SRP_CTX_init                        331	1_1_0	EXIST::FUNCTION:SRP
 SRP_Calc_A_param                        332	1_1_0	EXIST::FUNCTION:SRP
-SRP_gen_server_master_secret            333	1_1_0	NOEXIST::FUNCTION:
 SRP_generate_server_master_secret       333	1_1_0	NOEXIST::FUNCTION:
 SSL_CTX_SRP_CTX_free                    334	1_1_0	EXIST::FUNCTION:SRP
-SRP_gen_client_master_secret            335	1_1_0	NOEXIST::FUNCTION:
 SRP_generate_client_master_secret       335	1_1_0	NOEXIST::FUNCTION:
-SSL_srp_server_param_with_username      336	1_1_0	EXIST:!VMS:FUNCTION:SRP
-SSL_srp_server_param_with_un            336	1_1_0	EXIST:VMS:FUNCTION:SRP
+SSL_srp_server_param_with_username      336	1_1_0	EXIST::FUNCTION:SRP
 SRP_have_to_put_srp_username            337	1_1_0	NOEXIST::FUNCTION:
 SSL_SRP_CTX_free                        338	1_1_0	EXIST::FUNCTION:SRP
 SSL_set_debug                           339	1_1_0	EXIST::FUNCTION:DEPRECATEDIN_1_1_0
@@ -311,15 +296,13 @@ SSL_SESSION_get_id_len                  351	1_1_0	NOEXIST::FUNCTION:
 kssl_ctx_get0_client_princ              352	1_1_0	NOEXIST::FUNCTION:
 SSL_export_keying_material              353	1_1_0	EXIST::FUNCTION:
 SSL_set_tlsext_use_srtp                 354	1_1_0	EXIST::FUNCTION:SRTP
-SSL_CTX_set_next_protos_advertised_cb   355	1_1_0	EXIST:!VMS:FUNCTION:NEXTPROTONEG
-SSL_CTX_set_next_protos_adv_cb          355	1_1_0	EXIST:VMS:FUNCTION:NEXTPROTONEG
+SSL_CTX_set_next_protos_advertised_cb   355	1_1_0	EXIST::FUNCTION:NEXTPROTONEG
 SSL_get0_next_proto_negotiated          356	1_1_0	EXIST::FUNCTION:NEXTPROTONEG
 SSL_get_selected_srtp_profile           357	1_1_0	EXIST::FUNCTION:SRTP
 SSL_CTX_set_tlsext_use_srtp             358	1_1_0	EXIST::FUNCTION:SRTP
 SSL_select_next_proto                   359	1_1_0	EXIST::FUNCTION:
 SSL_get_srtp_profiles                   360	1_1_0	EXIST::FUNCTION:SRTP
-SSL_CTX_set_next_proto_select_cb        361	1_1_0	EXIST:!VMS:FUNCTION:NEXTPROTONEG
-SSL_CTX_set_next_proto_sel_cb           361	1_1_0	EXIST:VMS:FUNCTION:NEXTPROTONEG
+SSL_CTX_set_next_proto_select_cb        361	1_1_0	EXIST::FUNCTION:NEXTPROTONEG
 SSL_SESSION_get_compress_id             362	1_1_0	EXIST::FUNCTION:
 SSL_get0_param                          363	1_1_0	EXIST::FUNCTION:
 SSL_CTX_get0_privatekey                 364	1_1_0	EXIST::FUNCTION:
@@ -333,8 +316,7 @@ SSL_CTX_set_srv_supp_data               371	1_1_0	NOEXIST::FUNCTION:
 SSL_CONF_cmd_argv                       372	1_1_0	EXIST::FUNCTION:
 DTLSv1_2_server_method                  373	1_1_0	EXIST::FUNCTION:
 SSL_COMP_set0_compress_methods          374	1_1_0	NOEXIST::FUNCTION:
-SSL_COMP_set0_compression_methods       374	1_1_0	EXIST:!VMS:FUNCTION:
-SSL_COMP_set0_compr_methods             374	1_1_0	EXIST:VMS:FUNCTION:
+SSL_COMP_set0_compression_methods       374	1_1_0	EXIST::FUNCTION:
 SSL_CTX_set_cert_cb                     375	1_1_0	EXIST::FUNCTION:
 SSL_CTX_add_client_custom_ext           376	1_1_0	EXIST::FUNCTION:
 SSL_is_server                           377	1_1_0	EXIST::FUNCTION:
@@ -367,21 +349,18 @@ DTLSv1_2_method                         404	1_1_0	EXIST::FUNCTION:
 DTLS_server_method                      405	1_1_0	EXIST::FUNCTION:
 SSL_CTX_use_serverinfo_file             406	1_1_0	EXIST::FUNCTION:
 SSL_COMP_free_compress_methods          407	1_1_0	NOEXIST::FUNCTION:
-SSL_COMP_free_compression_methods       407	1_1_0	EXIST:!VMS:FUNCTION:
-SSL_COMP_free_compr_methods             407	1_1_0	EXIST:VMS:FUNCTION:
+SSL_COMP_free_compression_methods       407	1_1_0	EXIST::FUNCTION:
 SSL_extension_supported                 409	1_1_0	EXIST::FUNCTION:
 SSL_CTX_get_security_callback           410	1_1_0	EXIST::FUNCTION:
 SSL_SESSION_print_keylog                411	1_1_0	EXIST::FUNCTION:
-SSL_CTX_set_not_resumable_session_callback 412	1_1_0	EXIST:!VMS:FUNCTION:
-SSL_CTX_set_not_resumbl_sess_cb         412	1_1_0	EXIST:VMS:FUNCTION:
+SSL_CTX_set_not_resumable_session_callback 412	1_1_0	EXIST::FUNCTION:
 SSL_get0_security_ex_data               413	1_1_0	EXIST::FUNCTION:
 SSL_CTX_set_security_callback           414	1_1_0	EXIST::FUNCTION:
 SSL_get1_supported_ciphers              415	1_1_0	EXIST::FUNCTION:
 SSL_set_security_level                  416	1_1_0	EXIST::FUNCTION:
 SSL_set0_security_ex_data               417	1_1_0	EXIST::FUNCTION:
 SSL_CTX_set_security_level              418	1_1_0	EXIST::FUNCTION:
-SSL_set_not_resumable_session_callback  419	1_1_0	EXIST:!VMS:FUNCTION:
-SSL_set_not_resumbl_sess_cb             419	1_1_0	EXIST:VMS:FUNCTION:
+SSL_set_not_resumable_session_callback  419	1_1_0	EXIST::FUNCTION:
 SSL_get_security_callback               420	1_1_0	EXIST::FUNCTION:
 SSL_get_security_level                  421	1_1_0	EXIST::FUNCTION:
 SSL_CTX_set0_security_ex_data           422	1_1_0	EXIST::FUNCTION:


More information about the openssl-commits mailing list