mirror of
https://github.com/QuasarApp/openssl.git
synced 2025-04-28 18:54:36 +00:00
Rework building: VMS changes to handle extensions and product names
Add platform::VMS, which is a generic VMS module. Additional modules to support specific building aspects (such as specific compilers) may be added later, but since we currently work on file names and those are generic enough, this is also enough. This reworks Configurations/descrip.mms.tmpl to work out product names in platform::VMS terms. Something to be noted is that the new functionality ignores the *_extension config attributes, as they were never used. VMS is very consistent in its use of extensions, so there is no reason to believe much will change in this respect. Reviewed-by: Tim Hudson <tjh@openssl.org> Reviewed-by: Paul Dale <paul.dale@oracle.com> (Merged from https://github.com/openssl/openssl/pull/7473)
This commit is contained in:
parent
957689611b
commit
c162a8c344
@ -164,10 +164,10 @@ my %targets=(
|
||||
return [ @incs ];
|
||||
}),
|
||||
|
||||
shared_extension => ".exe",
|
||||
|
||||
build_file => "descrip.mms",
|
||||
build_scheme => [ "unified", "VMS" ],
|
||||
|
||||
perl_platform => 'VMS',
|
||||
},
|
||||
|
||||
uplink_common => {
|
||||
|
@ -5,12 +5,9 @@
|
||||
use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs/;
|
||||
use File::Basename;
|
||||
|
||||
# Our prefix, claimed when speaking with the VSI folks Tuesday
|
||||
# January 26th 2016
|
||||
our $osslprefix = 'OSSL$';
|
||||
(our $osslprefix_q = $osslprefix) =~ s/\$/\\\$/;
|
||||
(our $osslprefix_q = platform->osslprefix()) =~ s/\$/\\\$/;
|
||||
|
||||
our $sover_dirname = sprintf "%02d%02d", split(/\./, $config{shlib_version});
|
||||
our $sover_dirname = platform->shlib_version_as_filename();
|
||||
our $osslver = sprintf "%02d%02d", split(/\./, $config{version});
|
||||
|
||||
our $sourcedir = $config{sourcedir};
|
||||
@ -44,27 +41,27 @@
|
||||
# Because we need to make two computations of these data,
|
||||
# we store them in arrays for reuse
|
||||
our @libs =
|
||||
map { (my $x = $_) =~ s/\.a$//; $x }
|
||||
map { platform->staticname($_) }
|
||||
@{$unified_info{libraries}};
|
||||
our @shlibs =
|
||||
map { $unified_info{sharednames}->{$_} || () }
|
||||
grep(!/\.a$/, @{$unified_info{libraries}});
|
||||
map { platform->sharedname($_) // () }
|
||||
@{$unified_info{libraries}};
|
||||
our @install_libs =
|
||||
map { (my $x = $_) =~ s/\.a$//; $x }
|
||||
map { platform->staticname($_) }
|
||||
@{$unified_info{install}->{libraries}};
|
||||
our @install_shlibs =
|
||||
map { $unified_info{sharednames}->{$_} || () }
|
||||
grep(!/\.a$/, @{$unified_info{install}->{libraries}});
|
||||
map { platform->sharedname($_) // () }
|
||||
@{$unified_info{install}->{libraries}};
|
||||
|
||||
# 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}
|
||||
my $obj = platform->obj($_);
|
||||
$unified_info{before}->{$obj}
|
||||
= qq(arch_include = F\$PARSE("$sd","A.;",,,"SYNTAX_ONLY") - "A.;"
|
||||
define arch 'arch_include');
|
||||
$unified_info{after}->{$x}
|
||||
$unified_info{after}->{$obj}
|
||||
= qq(deassign arch);
|
||||
}
|
||||
my $sd1 = sourcedir("ssl","record");
|
||||
@ -72,13 +69,13 @@
|
||||
my @ssl_locl_users = grep(/^\[\.(?:ssl\.(?:record|statem)|test)\].*\.o$/,
|
||||
keys %{$unified_info{sources}});
|
||||
foreach (@ssl_locl_users) {
|
||||
(my $x = $_) =~ s|\.o$|.OBJ|;
|
||||
$unified_info{before}->{$x}
|
||||
my $obj = platform->obj($_);
|
||||
$unified_info{before}->{$obj}
|
||||
= qq(record_include = F\$PARSE("$sd1","A.;",,,"SYNTAX_ONLY") - "A.;"
|
||||
define record 'record_include'
|
||||
statem_include = F\$PARSE("$sd2","A.;",,,"SYNTAX_ONLY") - "A.;"
|
||||
define statem 'statem_include');
|
||||
$unified_info{after}->{$x}
|
||||
$unified_info{after}->{$obj}
|
||||
= qq(deassign statem
|
||||
deassign record);
|
||||
}
|
||||
@ -110,30 +107,20 @@ MINOR={- $config{minor} -}
|
||||
SHLIB_VERSION_NUMBER={- $config{shlib_version} -}
|
||||
SHLIB_TARGET={- $target{shared_target} -}
|
||||
|
||||
EXE_EXT=.EXE
|
||||
LIB_EXT=.OLB
|
||||
SHLIB_EXT=.EXE
|
||||
OBJ_EXT=.OBJ
|
||||
DEP_EXT=.D
|
||||
|
||||
LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @libs) -}
|
||||
SHLIBS={- join(", ", map { "-\n\t".$_.".EXE" } @shlibs) -}
|
||||
ENGINES={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{engines}}) -}
|
||||
PROGRAMS={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{programs}}) -}
|
||||
SCRIPTS={- join(", ", map { "-\n\t".$_ } @{$unified_info{scripts}}) -}
|
||||
{- output_off() if $disabled{makedepend}; "" -}
|
||||
DEPS={- our @deps = map { (my $x = $_) =~ s|\.o$|\$(DEP_EXT)|; $x; }
|
||||
DEPS={- our @deps = map { platform->isobj($_) ? platform->dep($_) : $_ }
|
||||
grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ }
|
||||
keys %{$unified_info{sources}};
|
||||
join(", ", map { "-\n\t".$_ } @deps); -}
|
||||
{- output_on() if $disabled{makedepend}; "" -}
|
||||
GENERATED_MANDATORY={- join(", ", map { "-\n\t".$_ } @{$unified_info{depends}->{""}} ) -}
|
||||
GENERATED={- # common0.tmpl provides @generated
|
||||
join(", ", map { my $x = $_;
|
||||
$x =~ s|\.[sS]$|.asm|;
|
||||
$x =~ s|\.ld$|.OPT|;
|
||||
"-\n\t".$x }
|
||||
@generated) -}
|
||||
join(", ", map { platform->convertext($_) } @generated) -}
|
||||
|
||||
INSTALL_LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @install_libs) -}
|
||||
INSTALL_SHLIBS={- join(", ", map { "-\n\t".$_.".EXE" } @install_shlibs) -}
|
||||
@ -165,9 +152,9 @@ OPENSSLDIR={- catdir($config{openssldir}) or
|
||||
$config{prefix} ? catdir($config{prefix},"COMMON")
|
||||
: "SYS\$COMMON:[OPENSSL-COMMON]" -}
|
||||
# The same, but for C
|
||||
OPENSSLDIR_C={- $osslprefix -}DATAROOT:[000000]
|
||||
OPENSSLDIR_C={- platform->osslprefix() -}DATAROOT:[000000]
|
||||
# Where installed engines reside, for C
|
||||
ENGINESDIR_C={- $osslprefix -}ENGINES{- $sover_dirname.$target{pointer_size} -}:
|
||||
ENGINESDIR_C={- platform->osslprefix() -}ENGINES{- $sover_dirname.$target{pointer_size} -}:
|
||||
|
||||
##### User defined commands and flags ################################
|
||||
|
||||
@ -694,12 +681,10 @@ reconfigure reconf :
|
||||
# Helper function to figure out dependencies on libraries
|
||||
# It takes a list of library names and outputs a list of dependencies
|
||||
sub compute_lib_depends {
|
||||
if ($disabled{shared}) {
|
||||
return map { $_ =~ /\.a$/ ? $`.".OLB" : $_.".OLB" } @_;
|
||||
}
|
||||
return map { $_ =~ /\.a$/
|
||||
? $`.".OLB"
|
||||
: $unified_info{sharednames}->{$_}.".EXE" } @_;
|
||||
# Depending on shared libraries:
|
||||
# On Windows POSIX layers, we depend on {libname}.dll.a
|
||||
# On Unix platforms, we depend on {shlibname}.so
|
||||
return map { platform->sharedlib($_) // platform->staticlib($_) } @_;
|
||||
}
|
||||
|
||||
# Helper function to deal with inclusion directory specs.
|
||||
@ -750,8 +735,8 @@ reconfigure reconf :
|
||||
my $generator_incs = join("", map { ' "-I'.$_.'"' } @{$args{generator_incs}});
|
||||
my $deps = join(", -\n\t\t", @{$args{generator_deps}}, @{$args{deps}});
|
||||
|
||||
if ($args{src} =~ /\.ld$/) {
|
||||
(my $target = $args{src}) =~ s/\.ld$/.OPT/;
|
||||
if (platform->isdef($args{src})) {
|
||||
my $target = platform->def($args{src});
|
||||
my $mkdef = sourcefile('util', 'mkdef.pl');
|
||||
my $ord_ver = $args{intent} eq 'lib' ? ' --version $(VERSION)' : '';
|
||||
my $ord_name =
|
||||
@ -763,7 +748,7 @@ reconfigure reconf :
|
||||
$target : $args{generator}->[0] $deps $mkdef
|
||||
\$(PERL) $mkdef$ord_ver --ordinals $args{generator}->[0] --name $ord_name "--OS" "VMS"$case_insensitive > $target
|
||||
EOF
|
||||
} elsif ($args{src} !~ /\.[sS]$/) {
|
||||
} elsif (!platform->isasm($args{src})) {
|
||||
my $target = $args{src};
|
||||
if ($args{generator}->[0] =~ m|^.*\.in$|) {
|
||||
my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
|
||||
@ -781,7 +766,7 @@ $target : $args{generator}->[0] $deps
|
||||
EOF
|
||||
}
|
||||
} else {
|
||||
(my $target = $args{src}) =~ s/\.[sS]$/.asm/;
|
||||
my $target = platform->asm($args{src});
|
||||
if ($args{generator}->[0] =~ /\.pl$/) {
|
||||
$generator = '$(PERL)'.$generator_incs.' '.$generator;
|
||||
} elsif ($args{generator}->[0] =~ /\.S$/) {
|
||||
@ -844,9 +829,8 @@ EOF
|
||||
|
||||
sub src2obj {
|
||||
my %args = @_;
|
||||
my @srcs = map { (my $x = $_) =~ s/\.s$/.asm/; $x
|
||||
} ( @{$args{srcs}} );
|
||||
(my $obj = $args{obj}) =~ s|\.o$||;
|
||||
my @srcs = map { (my $x = $_) =~ s/\.s$/.asm/; $x } ( @{$args{srcs}} );
|
||||
my $obj = platform->obj($args{obj});
|
||||
my $deps = join(", -\n\t\t", @srcs, @{$args{deps}});
|
||||
|
||||
# Because VMS C isn't very good at combining a /INCLUDE path with
|
||||
@ -858,11 +842,25 @@ EOF
|
||||
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 $objn = basename($obj, platform->objext());
|
||||
my $srcs =
|
||||
join(", ", map { abs2rel(rel2abs($_), rel2abs($forward)) } @srcs);
|
||||
my $before = $unified_info{before}->{$obj.".OBJ"} || "\@ !";
|
||||
my $after = $unified_info{after}->{$obj.".OBJ"} || "\@ !";
|
||||
my $before = $unified_info{before}->{$obj} || "\@ !";
|
||||
my $after = $unified_info{after}->{$obj} || "\@ !";
|
||||
|
||||
if ($srcs[0] =~ /\.asm$/) {
|
||||
my $asflags = { shlib => ' $(LIB_ASFLAGS)',
|
||||
lib => ' $(LIB_ASFLAGS)',
|
||||
dso => ' $(DSO_ASFLAGS)',
|
||||
bin => ' $(BIN_ASFLAGS)' } -> {$args{intent}};
|
||||
return <<"EOF";
|
||||
$obj : $deps
|
||||
${before}
|
||||
SET DEFAULT $forward
|
||||
\$(AS) $asflags \$(ASOUTFLAG)${objd}${objn}.OBJ $srcs
|
||||
SET DEFAULT $backward
|
||||
EOF
|
||||
}
|
||||
|
||||
my $cflags;
|
||||
if ($args{installed}) {
|
||||
@ -928,10 +926,10 @@ EOF
|
||||
}
|
||||
|
||||
my $depbuild = $disabled{makedepend} ? ""
|
||||
: " /MMS=(FILE=${objd}${objn}.D,TARGET=$obj.OBJ)";
|
||||
: " /MMS=(FILE=${objd}${objn}.D,TARGET=$obj)";
|
||||
|
||||
return <<"EOF";
|
||||
$obj.OBJ : $deps
|
||||
$obj : $deps
|
||||
${before}
|
||||
SET DEFAULT $forward
|
||||
\@ $incs_on
|
||||
@ -941,20 +939,18 @@ $obj.OBJ : $deps
|
||||
\@ $incs_off
|
||||
SET DEFAULT $backward
|
||||
${after}
|
||||
- PURGE $obj.OBJ
|
||||
- PURGE $obj
|
||||
EOF
|
||||
}
|
||||
sub obj2shlib {
|
||||
my %args = @_;
|
||||
my $lib = $args{lib};
|
||||
my $shlib = $args{shlib};
|
||||
my $libd = dirname($lib);
|
||||
my $libn = basename($lib);
|
||||
my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x }
|
||||
grep { $_ =~ m|\.o$| }
|
||||
my $shlibname = platform->sharedname($args{lib});
|
||||
my $shlib = platform->sharedlib($args{lib});
|
||||
my @objs = map { platform->convertext($_) }
|
||||
grep { platform->isobj($_) }
|
||||
@{$args{objs}};
|
||||
my @defs = map { (my $x = $_) =~ s|\.ld$|.OPT|; $x }
|
||||
grep { $_ =~ m|\.ld$| }
|
||||
my @defs = map { platform->convertext($_) }
|
||||
grep { platform->isdef($_) }
|
||||
@{$args{objs}};
|
||||
my @deps = compute_lib_depends(@{$args{deps}});
|
||||
die "More than one symbol vector" if scalar @defs > 1;
|
||||
@ -978,16 +974,16 @@ EOF
|
||||
"WRITE OPT_FILE \"$x\"" } @deps)
|
||||
|| "\@ !";
|
||||
return <<"EOF"
|
||||
$shlib.EXE : $deps
|
||||
$shlib : $deps
|
||||
\$(PERL) $translatesyms_pl \$(BLDDIR)CXX\$DEMANGLER_DB. < $defs[0] > $defs[0]-translated
|
||||
OPEN/WRITE/SHARE=READ OPT_FILE $lib-components.OPT
|
||||
OPEN/WRITE/SHARE=READ OPT_FILE $shlibname-components.OPT
|
||||
$write_opt1
|
||||
$write_opt2
|
||||
CLOSE OPT_FILE
|
||||
LINK \$(LIB_LDFLAGS)/SHARE=\$\@ $defs[0]-translated/OPT,-
|
||||
$lib-components.OPT/OPT \$(LIB_EX_LIBS)
|
||||
DELETE $defs[0]-translated;*,$lib-components.OPT;*
|
||||
PURGE $shlib.EXE,$shlib.MAP
|
||||
$shlibname-components.OPT/OPT \$(LIB_EX_LIBS)
|
||||
DELETE $defs[0]-translated;*,$shlibname-components.OPT;*
|
||||
PURGE $shlibname.EXE,$shlibname.MAP
|
||||
EOF
|
||||
. ($config{target} =~ m|alpha| ? "" : <<"EOF"
|
||||
SET IMAGE/FLAGS=(NOCALL_DEBUG) \$\@
|
||||
@ -996,15 +992,13 @@ EOF
|
||||
}
|
||||
sub obj2dso {
|
||||
my %args = @_;
|
||||
my $lib = $args{lib};
|
||||
my $libd = dirname($lib);
|
||||
my $libn = basename($lib);
|
||||
(my $libn_nolib = $libn) =~ s/^lib//;
|
||||
my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x }
|
||||
grep { $_ =~ m|\.o$| }
|
||||
my $dsoname = platform->dsoname($args{lib});
|
||||
my $dso = platform->dso($args{lib});
|
||||
my @objs = map { platform->convertext($_) }
|
||||
grep { platform->isobj($_) }
|
||||
@{$args{objs}};
|
||||
my @defs = map { (my $x = $_) =~ s|\.ld$|.OPT|; $x }
|
||||
grep { $_ =~ m|\.ld$| }
|
||||
my @defs = map { platform->convertext($_) }
|
||||
grep { platform->isdef($_) }
|
||||
@{$args{objs}};
|
||||
my @deps = compute_lib_depends(@{$args{deps}});
|
||||
my $deps = join(", -\n\t\t", @objs, @defs, @deps);
|
||||
@ -1025,14 +1019,14 @@ EOF
|
||||
"WRITE OPT_FILE \"$x\"" } @deps)
|
||||
|| "\@ !";
|
||||
return <<"EOF"
|
||||
$lib.EXE : $deps
|
||||
OPEN/WRITE/SHARE=READ OPT_FILE $lib-components.OPT
|
||||
$dso : $deps
|
||||
OPEN/WRITE/SHARE=READ OPT_FILE $dsoname-components.OPT
|
||||
$write_opt1
|
||||
$write_opt2
|
||||
CLOSE OPT_FILE
|
||||
LINK \$(DSO_LDFLAGS)/SHARE=\$\@ $defs[0]/OPT,-
|
||||
$lib-components.OPT/OPT \$(DSO_EX_LIBS)
|
||||
- PURGE $lib.EXE,$lib.OPT,$lib.MAP
|
||||
$dsoname-components.OPT/OPT \$(DSO_EX_LIBS)
|
||||
- PURGE $dsoname.EXE,$dsoname.OPT,$dsoname.MAP
|
||||
EOF
|
||||
. ($config{target} =~ m|alpha| ? "" : <<"EOF"
|
||||
SET IMAGE/FLAGS=(NOCALL_DEBUG) \$\@
|
||||
@ -1041,24 +1035,26 @@ EOF
|
||||
}
|
||||
sub obj2lib {
|
||||
my %args = @_;
|
||||
(my $lib = $args{lib}) =~ s/\.a$//;
|
||||
my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x } @{$args{objs}};
|
||||
my $lib = platform->staticlib($args{lib});
|
||||
my @objs = map { platform->convertext($_) }
|
||||
grep { platform->isobj($_) }
|
||||
@{$args{objs}};
|
||||
my $objs = join(", -\n\t\t", @objs);
|
||||
my $fill_lib = join("\n\t", (map { "LIBRARY/REPLACE $lib.OLB $_" }
|
||||
@objs));
|
||||
my $fill_lib = join("\n\t", (map { "LIBRARY/REPLACE $lib $_" } @objs));
|
||||
return <<"EOF";
|
||||
$lib.OLB : $objs
|
||||
LIBRARY/CREATE/OBJECT $lib.OLB
|
||||
$lib : $objs
|
||||
LIBRARY/CREATE/OBJECT $lib
|
||||
$fill_lib
|
||||
- PURGE $lib.OLB
|
||||
- PURGE $lib
|
||||
EOF
|
||||
}
|
||||
sub obj2bin {
|
||||
my %args = @_;
|
||||
my $bin = $args{bin};
|
||||
my $bind = dirname($bin);
|
||||
my $binn = basename($bin);
|
||||
my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x } @{$args{objs}};
|
||||
my $bin = platform->bin($args{bin});
|
||||
my $binname = platform->binname($args{bin});
|
||||
my @objs = map { platform->convertext($_) }
|
||||
grep { platform->isobj($_) }
|
||||
@{$args{objs}};
|
||||
my $objs = join(",", @objs);
|
||||
my @deps = compute_lib_depends(@{$args{deps}});
|
||||
my $deps = join(", -\n\t\t", @objs, @deps);
|
||||
@ -1113,19 +1109,19 @@ EOF
|
||||
# isn't necessary. If there are other warnings, however, we show them
|
||||
# and let it break the build.
|
||||
return <<"EOF"
|
||||
$bin.EXE : $deps
|
||||
$bin : $deps
|
||||
$analyse_objs
|
||||
@ OPEN/WRITE/SHARE=READ OPT_FILE $bin.OPT
|
||||
@ OPEN/WRITE/SHARE=READ OPT_FILE $binname.OPT
|
||||
$write_opt1
|
||||
$write_opt2
|
||||
@ CLOSE OPT_FILE
|
||||
TYPE $bin.opt ! For debugging
|
||||
- pipe SPAWN/WAIT/NOLOG/OUT=$bin.LINKLOG -
|
||||
LINK \$(BIN_LDFLAGS)/EXEC=\$\@ $bin.OPT/OPT \$(BIN_EX_LIBS) ; -
|
||||
TYPE $binname.OPT ! For debugging
|
||||
- pipe SPAWN/WAIT/NOLOG/OUT=$binname.LINKLOG -
|
||||
LINK \$(BIN_LDFLAGS)/EXEC=\$\@ $binname.OPT/OPT \$(BIN_EX_LIBS) ; -
|
||||
link_status = \$status ; link_severity = link_status .AND. 7
|
||||
@ search_severity = 1
|
||||
-@ IF link_severity .EQ. 0 THEN -
|
||||
pipe SEARCH $bin.LINKLOG "%","-"/MATCH=AND | -
|
||||
pipe SEARCH $binname.LINKLOG "%","-"/MATCH=AND | -
|
||||
SPAWN/WAIT/NOLOG/OUT=NLA0: -
|
||||
SEARCH SYS\$INPUT: "-W-MULDEF,"/MATCH=NOR ; -
|
||||
search_severity = \$severity
|
||||
@ -1136,10 +1132,10 @@ $bin.EXE : $deps
|
||||
@ IF search_severity .EQ. 3 THEN link_severity = 1
|
||||
@ ! At this point, if link_severity shows that there was a fault
|
||||
@ ! or warning, make sure to restore the linking status.
|
||||
-@ IF .NOT. link_severity THEN TYPE $bin.LINKLOG
|
||||
-@ DELETE $bin.LINKLOG;*
|
||||
-@ IF .NOT. link_severity THEN TYPE $binname.LINKLOG
|
||||
-@ DELETE $binname.LINKLOG;*
|
||||
@ IF .NOT. link_severity THEN SPAWN/WAIT/NOLOG EXIT 'link_status'
|
||||
- PURGE $bin.EXE,$bin.OPT
|
||||
- PURGE $bin,$binname.OPT
|
||||
EOF
|
||||
. ($config{target} =~ m|alpha| ? "" : <<"EOF"
|
||||
SET IMAGE/FLAGS=(NOCALL_DEBUG) \$\@
|
||||
|
66
Configurations/platform/VMS.pm
Normal file
66
Configurations/platform/VMS.pm
Normal file
@ -0,0 +1,66 @@
|
||||
package platform::VMS;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Carp;
|
||||
|
||||
use vars qw(@ISA);
|
||||
|
||||
require platform::BASE;
|
||||
@ISA = qw(platform::BASE);
|
||||
|
||||
# Assume someone set @INC right before loading this module
|
||||
use configdata;
|
||||
|
||||
# VMS has a cultural standard where all installed libraries are prefixed.
|
||||
# For OpenSSL, the choice is 'ossl$' (this prefix was claimed in a
|
||||
# conversation with VSI, Tuesday January 26 2016)
|
||||
sub osslprefix { 'OSSL$' }
|
||||
|
||||
sub binext { '.EXE' }
|
||||
sub dsoext { '.EXE' }
|
||||
sub shlibext { '.EXE' }
|
||||
sub libext { '.OLB' }
|
||||
sub defext { '.OPT' }
|
||||
sub objext { '.OBJ' }
|
||||
sub depext { '.D' }
|
||||
sub asmext { '.ASM' }
|
||||
|
||||
# Other extra that aren't defined in platform::BASE
|
||||
sub shlibvariant { $target{shlib_variant} || '' }
|
||||
|
||||
sub optext { '.OPT' }
|
||||
sub optname { return $_[1] }
|
||||
sub opt { return $_[0]->optname($_[1]) . $_[0]->optext() }
|
||||
|
||||
# Other projects include the pointer size in the name of installed libraries,
|
||||
# so we do too.
|
||||
sub staticname {
|
||||
# Non-installed libraries are *always* static, and their names remain
|
||||
# the same, except for the mandatory extension
|
||||
my $in_libname = platform::BASE->staticname($_[1]);
|
||||
return $in_libname
|
||||
unless ( grep { platform::BASE->staticname($_) eq $in_libname }
|
||||
@{$unified_info{install}->{libraries}} );
|
||||
|
||||
return platform::BASE::__concat($_[0]->osslprefix(),
|
||||
platform::BASE->staticname($_[1]),
|
||||
$target{pointer_size});
|
||||
}
|
||||
|
||||
# To enable installation of multiple major OpenSSL releases, we include the
|
||||
# version number in installed shared library names.
|
||||
my $sover_filename =
|
||||
join('', map { sprintf "%02d", $_ } split(m|\.|, $config{shlib_version}));
|
||||
sub shlib_version_as_filename {
|
||||
return $sover_filename;
|
||||
}
|
||||
sub sharedname {
|
||||
return platform::BASE::__concat($_[0]->osslprefix(),
|
||||
platform::BASE->sharedname($_[1]),
|
||||
$_[0]->shlib_version_as_filename(),
|
||||
($_[0]->shlibvariant() // ''),
|
||||
"_shr$target{pointer_size}");
|
||||
}
|
||||
|
||||
1;
|
@ -1131,7 +1131,6 @@ $target{exe_extension}=".exe" if ($config{target} eq "DJGPP"
|
||||
$target{exe_extension}=".pm" if ($config{target} =~ /vos/);
|
||||
$target{def_extension}=".ld";
|
||||
$target{def_extension}=".def" if $config{target} =~ /^mingw/;
|
||||
$target{def_extension}=".opt" if $config{target} =~ /^vms/;
|
||||
($target{shared_extension_simple}=$target{shared_extension})
|
||||
=~ s|\.\$\(SHLIB_VERSION_NUMBER\)||
|
||||
unless defined($target{shared_extension_simple});
|
||||
|
@ -1,10 +1,7 @@
|
||||
${-
|
||||
use File::Spec::Functions qw(rel2abs);
|
||||
|
||||
my $bldtop = rel2abs($config{builddir});
|
||||
our %names = ( map { $_ => $bldtop.$_.".EXE" }
|
||||
map { $unified_info{sharednames}->{$_} || () }
|
||||
@{$unified_info{libraries}} );
|
||||
our %names = ( map { platform->sharedname($_) =>
|
||||
$bldtop.platform->sharedlib($_) }
|
||||
@{$unified_info{install}->{libraries}} );
|
||||
"" -}
|
||||
$ ! Create a local environment with the shared library logical names
|
||||
$ ! properly set. Undo this with unlocal_shlib.com
|
||||
@ -15,7 +12,7 @@ $ DEFINE/TABLE='OPENSSL_NAMES' OSSL_FLAG YES
|
||||
$
|
||||
$ NAMES := {- join(",", keys %names); -}
|
||||
{-
|
||||
join("\n", map { "\$ __$_ = \"".$names{$_}."\"" } keys %names);
|
||||
join("\n", map { "\$ __$_ = \"".$names{$_}."\"" } sort keys %names);
|
||||
-}
|
||||
$ I = 0
|
||||
$ LOOP:
|
||||
|
@ -1,17 +1,14 @@
|
||||
${-
|
||||
use File::Spec::Functions qw(rel2abs);
|
||||
|
||||
my $bldtop = rel2abs($config{builddir});
|
||||
our %names = ( map { $_ => $bldtop.$_.".EXE" }
|
||||
map { $unified_info{sharednames}->{$_} || () }
|
||||
@{$unified_info{libraries}} );
|
||||
our %names = ( map { platform->sharedname($_) =>
|
||||
$bldtop.platform->sharedlib($_) }
|
||||
@{$unified_info{install}->{libraries}} );
|
||||
"" -}
|
||||
$ ! Remove the local environment created by local_shlib.com
|
||||
$
|
||||
$ OPENSSL_NAMES := OPENSSL_NAMES_'F$GETJPI("","PID")'
|
||||
$ IF F$TRNLNM("OSSL_FLAG",OPENSSL_NAMES) .EQS. "" THEN EXIT 0
|
||||
$
|
||||
$ NAMES := {- join(",", keys %names); -}
|
||||
$ NAMES := {- join(",", sort keys %names); -}
|
||||
$ I = 0
|
||||
$ LOOP:
|
||||
$ E = F$ELEMENT(I,",",NAMES)
|
||||
|
Loading…
x
Reference in New Issue
Block a user