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@openssl.org>
			
			
This commit is contained in:
		@@ -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	=> "",
 | 
			
		||||
 
 | 
			
		||||
@@ -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"),
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										634
									
								
								Configurations/descrip.mms.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										634
									
								
								Configurations/descrip.mms.tmpl
									
									
									
									
									
										Normal file
									
								
							@@ -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.
 | 
			
		||||
-}
 | 
			
		||||
							
								
								
									
										2
									
								
								VMS/engine.opt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								VMS/engine.opt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
CASE_SENSITIVE=YES
 | 
			
		||||
SYMBOL_VECTOR=(bind_engine=PROCEDURE,v_check=PROCEDURE)
 | 
			
		||||
							
								
								
									
										59
									
								
								VMS/openssl_shutdown.com.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								VMS/openssl_shutdown.com.in
									
									
									
									
									
										Normal file
									
								
							@@ -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'
 | 
			
		||||
							
								
								
									
										115
									
								
								VMS/openssl_startup.com.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								VMS/openssl_startup.com.in
									
									
									
									
									
										Normal file
									
								
							@@ -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'
 | 
			
		||||
@@ -1,46 +1,12 @@
 | 
			
		||||
$!
 | 
			
		||||
$!  APPS.COM
 | 
			
		||||
$!  Written By:  Robert Byer
 | 
			
		||||
$!               Vice-President
 | 
			
		||||
$!               A-Com Computing, Inc.
 | 
			
		||||
$!               byer@mail.all-net.net
 | 
			
		||||
$!
 | 
			
		||||
$!
 | 
			
		||||
$! Slightly modified by Richard Levitte <richard@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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										55
									
								
								VMS/translatesyms.pl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								VMS/translatesyms.pl
									
									
									
									
									
										Normal file
									
								
							@@ -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 $_;
 | 
			
		||||
}
 | 
			
		||||
@@ -9,7 +9,8 @@ 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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								build.info
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								build.info
									
									
									
									
									
								
							@@ -13,3 +13,15 @@ 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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										65
									
								
								config.com
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								config.com
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
@@ -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 \
 | 
			
		||||
@@ -9,6 +10,11 @@ EXTRA=  ../ms/uplink-x86.pl ../ms/uplink.c ../ms/applink.c \
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								include/openssl/__decc_include_epilogue.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								include/openssl/__decc_include_epilogue.h
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
							
								
								
									
										11
									
								
								include/openssl/__decc_include_prologue.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								include/openssl/__decc_include_prologue.h
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user