Skip to content

Commit

Permalink
util/mkdef.pl: Produce version scripts from unversioned symbols
Browse files Browse the repository at this point in the history
This allows setting up export maps for DSOs as well in a uniform way.
This also means that util/mkdef.pl no longer picks up the target
version from configdata.pm, and it has to be given on the command line
instead.  This may be used to give modules separate versions as well,
if desirable.

Reviewed-by: Tim Hudson <[email protected]>
(Merged from openssl#7347)
  • Loading branch information
levitte committed Oct 5, 2018
1 parent 52d78cc commit 9762463
Showing 1 changed file with 33 additions and 18 deletions.
51 changes: 33 additions & 18 deletions util/mkdef.pl
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@

my $name = undef; # internal library/module name
my $ordinals_file = undef; # the ordinals file to use
my $version = undef; # the version to use for the library
my $OS = undef; # the operating system family
my $verbose = 0;
my $ctest = 0;

GetOptions('name=s' => \$name,
'ordinals=s' => \$ordinals_file,
'version=s' => \$version,
'OS=s' => \$OS,
'ctest' => \$ctest,
'verbose' => \$verbose)
Expand Down Expand Up @@ -231,20 +233,29 @@ sub sorter_linux {

sub writer_linux {
my $thisversion = '';
my $prevversion = '';
my $currversion_s = '';
my $prevversion_s = '';
my $indent = 0;

for (@_) {
if ($thisversion && $_->version() ne $thisversion) {
die "$ordinals_file: It doesn't make sense to have both versioned ",
"and unversioned symbols"
if $thisversion eq '*';
print <<"_____";
}$prevversion;
}${prevversion_s};
_____
$prevversion = " OPENSSL${SO_VARIANT}_$thisversion";
$prevversion_s = " OPENSSL${SO_VARIANT}_$thisversion";
$thisversion = ''; # Trigger start of next section
}
unless ($thisversion) {
$indent = 0;
$thisversion = $_->version();
$currversion_s = '';
$currversion_s = "OPENSSL${SO_VARIANT}_$thisversion "
if $thisversion ne '*';
print <<"_____";
OPENSSL${SO_VARIANT}_$thisversion {
${currversion_s}{
global:
_____
}
Expand All @@ -253,7 +264,7 @@ sub writer_linux {

print <<"_____";
local: *;
}$prevversion;
}${prevversion_s};
_____
}

Expand Down Expand Up @@ -305,8 +316,10 @@ sub writer_VMS {
}
}

print <<"_____" if defined $version;
IDENTIFICATION=$version
_____
print <<"_____";
IDENTIFICATION=$config{version}
CASE_SENSITIVE=YES
SYMBOL_VECTOR=(-
_____
Expand Down Expand Up @@ -348,20 +361,22 @@ sub writer_VMS {
)
_____

my ($libvmajor, $libvminor, $libvedit, $libvpatch) =
$config{version} =~ /^(\d+)_(\d+)_(\d+)([a-z]{0,2})-.*$/;
my $libvpatchnum = 0;
for (split '', $libvpatch // '') {
$libvpatchnum += ord(lc($_)) - 96;
# To compensate because the letter 'z' is always followed by another,
# i.e. doesn't add any value on its own
$libvpatchnum-- if lc($_) eq 'z';
}
my $match1 = $libvmajor * 100 + $libvminor;
my $match2 = $libvedit * 100 + $libvpatchnum;
print <<"_____";
if (defined $version) {
my ($libvmajor, $libvminor, $libvedit, $libvpatch) =
$version =~ /^(\d+)_(\d+)_(\d+)([a-z]{0,2})(?:-.*)?$/;
my $libvpatchnum = 0;
for (split '', $libvpatch // '') {
$libvpatchnum += ord(lc($_)) - 96;
# To compensate because the letter 'z' is always followed by
# another, i.e. doesn't add any value on its own
$libvpatchnum-- if lc($_) eq 'z';
}
my $match1 = $libvmajor * 100 + $libvminor;
my $match2 = $libvedit * 100 + $libvpatchnum;
print <<"_____";
GSMATCH=LEQUAL,$match1,$match2
_____
}
}

sub writer_ctest {
Expand Down

0 comments on commit 9762463

Please sign in to comment.