50e83cdde6
There was a catch 22, where 'make depend' directly after configuring in an otherwise pristine build tree would fail because buildinf.h didn't exist yet. This change has the depend building targets depend on the same other targets as the object file building targets, so the generation of buildinf.h and similar files would kick in during 'make depend'. Reviewed-by: Rich Salz <rsalz@openssl.org>
633 lines
27 KiB
Cheetah
633 lines
27 KiB
Cheetah
## 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}}) -}
|
|
|
|
# DESTDIR 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=(DESTDIR=STAGING:[USER]). The result will end up in
|
|
# STAGING:[USER.OPENSSL].
|
|
# Normally it is left empty.
|
|
DESTDIR=
|
|
|
|
# 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 = "$(DESTDIR)"
|
|
$(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 "$(DESTDIR)" .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 "$(DESTDIR)" .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 "$(DESTDIR)" .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 "$(DESTDIR)" .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 "$(DESTDIR)" .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 "$(DESTDIR)" .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};
|
|
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 $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 : $deps
|
|
${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.
|
|
-}
|