fix: for exporters to work for build config, there may be two include dirs
For CMake / pkg-config configuration files to be used for an uninstalled build, the include directory in the build directory isn't enough, if that one is separate from the source directory. The include directory in the source directory must be accounted for too. This includes some lighter refactoring of util/mkinstallvars.pl, with the result that almost all variables in builddata.pm and installdata.pm have become arrays, even though unnecessarily for most of them; it was simpler that way. The CMake / pkg-config templates are adapted accordingly. Reviewed-by: Neil Horman <nhorman@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/24918)
This commit is contained in:
parent
a82d9e572c
commit
accd835f8d
5 changed files with 84 additions and 46 deletions
|
@ -131,7 +131,8 @@ DEPEND[openssl.pc]=builddata.pm
|
||||||
DEPEND[openssl.pc]=libcrypto.pc libssl.pc
|
DEPEND[openssl.pc]=libcrypto.pc libssl.pc
|
||||||
|
|
||||||
GENERATE[builddata.pm]=util/mkinstallvars.pl \
|
GENERATE[builddata.pm]=util/mkinstallvars.pl \
|
||||||
PREFIX=. BINDIR=apps LIBDIR= INCLUDEDIR=include APPLINKDIR=ms \
|
PREFIX=. BINDIR=apps APPLINKDIR=ms \
|
||||||
|
LIBDIR= INCLUDEDIR=include "INCLUDEDIR=$(SRCDIR)/include" \
|
||||||
ENGINESDIR=engines MODULESDIR=providers \
|
ENGINESDIR=engines MODULESDIR=providers \
|
||||||
"VERSION=$(VERSION)" "LDLIBS=$(LIB_EX_LIBS)"
|
"VERSION=$(VERSION)" "LDLIBS=$(LIB_EX_LIBS)"
|
||||||
|
|
||||||
|
|
|
@ -89,10 +89,10 @@ unset(_ossl_undefined_targets)
|
||||||
# Set up the import path, so all other import paths are made relative this file
|
# Set up the import path, so all other import paths are made relative this file
|
||||||
get_filename_component(_ossl_prefix "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
get_filename_component(_ossl_prefix "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||||||
{-
|
{-
|
||||||
# For each component in $OpenSSL::safe::installdata::CMAKECONFIGDIR relative to
|
# For each component in $OpenSSL::safe::installdata::CMAKECONFIGDIR[0] relative to
|
||||||
# $OpenSSL::safe::installdata::PREFIX, have CMake figure out the parent directory.
|
# $OpenSSL::safe::installdata::PREFIX[0], have CMake figure out the parent directory.
|
||||||
my $d = join('/', unixify(catdir($OpenSSL::safe::installdata::LIBDIR_REL_PREFIX,
|
my $d = join('/', unixify(catdir($OpenSSL::safe::installdata::LIBDIR_REL_PREFIX[0],
|
||||||
$OpenSSL::safe::installdata::CMAKECONFIGDIR_REL_LIBDIR), 1));
|
$OpenSSL::safe::installdata::CMAKECONFIGDIR_REL_LIBDIR[0]), 1));
|
||||||
$OUT = '';
|
$OUT = '';
|
||||||
if ($d ne '.') {
|
if ($d ne '.') {
|
||||||
$OUT .= 'get_filename_component(_ossl_prefix "${_ossl_prefix}" PATH)' . "\n"
|
$OUT .= 'get_filename_component(_ossl_prefix "${_ossl_prefix}" PATH)' . "\n"
|
||||||
|
@ -129,13 +129,15 @@ set(OPENSSL_VERSION_FIX "${OpenSSL_VERSION_PATCH}")
|
||||||
set(OPENSSL_FOUND YES)
|
set(OPENSSL_FOUND YES)
|
||||||
|
|
||||||
# Directories and names
|
# Directories and names
|
||||||
set(OPENSSL_LIBRARY_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::LIBDIR_REL_PREFIX, 1); -}")
|
set(OPENSSL_LIBRARY_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::LIBDIR_REL_PREFIX[0], 1); -}")
|
||||||
set(OPENSSL_INCLUDE_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::INCLUDEDIR_REL_PREFIX, 1); -}")
|
set(OPENSSL_INCLUDE_DIR{- $OUT = '';
|
||||||
set(OPENSSL_ENGINES_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::LIBDIR_REL_PREFIX, 1); -}/{- unixify($OpenSSL::safe::installdata::ENGINESDIR_REL_LIBDIR, 1); -}")
|
$OUT .= ' "${_ossl_prefix}/' . $_ . '"'
|
||||||
set(OPENSSL_MODULES_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::LIBDIR_REL_PREFIX, 1); -}/{- unixify($OpenSSL::safe::installdata::MODULESDIR_REL_LIBDIR, 1); -}")
|
foreach (@OpenSSL::safe::installdata::INCLUDEDIR_REL_PREFIX); -})
|
||||||
set(OPENSSL_RUNTIME_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::BINDIR_REL_PREFIX, 1); -}")
|
set(OPENSSL_ENGINES_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::LIBDIR_REL_PREFIX[0], 1); -}/{- unixify($OpenSSL::safe::installdata::ENGINESDIR_REL_LIBDIR[0], 1); -}")
|
||||||
|
set(OPENSSL_MODULES_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::LIBDIR_REL_PREFIX[0], 1); -}/{- unixify($OpenSSL::safe::installdata::MODULESDIR_REL_LIBDIR[0], 1); -}")
|
||||||
|
set(OPENSSL_RUNTIME_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::BINDIR_REL_PREFIX[0], 1); -}")
|
||||||
{- output_off() if $disabled{uplink}; "" -}
|
{- output_off() if $disabled{uplink}; "" -}
|
||||||
set(OPENSSL_APPLINK_SOURCE "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::APPLINKDIR_REL_PREFIX, 1); -}/applink.c")
|
set(OPENSSL_APPLINK_SOURCE "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::APPLINKDIR_REL_PREFIX[0], 1); -}/applink.c")
|
||||||
{- output_on() if $disabled{uplink}; "" -}
|
{- output_on() if $disabled{uplink}; "" -}
|
||||||
set(OPENSSL_PROGRAM "${OPENSSL_RUNTIME_DIR}/{- platform->bin('openssl') -}")
|
set(OPENSSL_PROGRAM "${OPENSSL_RUNTIME_DIR}/{- platform->bin('openssl') -}")
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,22 @@
|
||||||
prefix={- $OpenSSL::safe::installdata::PREFIX -}
|
prefix={- $OpenSSL::safe::installdata::PREFIX[0] -}
|
||||||
exec_prefix=${prefix}
|
exec_prefix=${prefix}
|
||||||
libdir={- $OpenSSL::safe::installdata::LIBDIR_REL_PREFIX
|
libdir={- $OpenSSL::safe::installdata::LIBDIR_REL_PREFIX[0]
|
||||||
? '${exec_prefix}/' . $OpenSSL::safe::installdata::LIBDIR_REL_PREFIX
|
? '${exec_prefix}/' . $OpenSSL::safe::installdata::LIBDIR_REL_PREFIX[0]
|
||||||
: $OpenSSL::safe::installdata::libdir -}
|
: $OpenSSL::safe::installdata::libdir[0] -}
|
||||||
includedir=${prefix}/{- $OpenSSL::safe::installdata::INCLUDEDIR_REL_PREFIX -}
|
includedir={- $OUT = '';
|
||||||
enginesdir=${libdir}/{- $OpenSSL::safe::installdata::ENGINESDIR_REL_LIBDIR -}
|
$OUT .= '${prefix}/' . $_ . ' '
|
||||||
modulesdir=${libdir}/{- $OpenSSL::safe::installdata::MODULESDIR_REL_LIBDIR -}
|
foreach (@OpenSSL::safe::installdata::INCLUDEDIR_REL_PREFIX); -}
|
||||||
|
enginesdir=${libdir}/{- $OpenSSL::safe::installdata::ENGINESDIR_REL_LIBDIR[0] -}
|
||||||
|
modulesdir=${libdir}/{- $OpenSSL::safe::installdata::MODULESDIR_REL_LIBDIR[0] -}
|
||||||
|
|
||||||
Name: OpenSSL-libcrypto
|
Name: OpenSSL-libcrypto
|
||||||
Description: OpenSSL cryptography library
|
Description: OpenSSL cryptography library
|
||||||
Version: {- $OpenSSL::safe::installdata::VERSION -}
|
Version: {- $OpenSSL::safe::installdata::VERSION -}
|
||||||
Libs: -L${libdir} -lcrypto
|
Libs: -L${libdir} -lcrypto
|
||||||
Libs.private: {- join(' ', @OpenSSL::safe::installdata::LDLIBS) -}
|
Libs.private: {- join(' ', @OpenSSL::safe::installdata::LDLIBS) -}
|
||||||
Cflags: -I${includedir}
|
Cflags:{- $OUT = ' -I${includedir}';
|
||||||
|
if (scalar @OpenSSL::safe::installdata::INCLUDEDIR_REL_PREFIX > 1) {
|
||||||
|
$OUT = '';
|
||||||
|
$OUT .= ' -I${prefix}/' . $_ . ' '
|
||||||
|
foreach (@OpenSSL::safe::installdata::INCLUDEDIR_REL_PREFIX);
|
||||||
|
} -}
|
||||||
|
|
|
@ -3,11 +3,18 @@ exec_prefix=${prefix}
|
||||||
libdir={- $OpenSSL::safe::installdata::LIBDIR_REL_PREFIX
|
libdir={- $OpenSSL::safe::installdata::LIBDIR_REL_PREFIX
|
||||||
? '${exec_prefix}/' . $OpenSSL::safe::installdata::LIBDIR_REL_PREFIX
|
? '${exec_prefix}/' . $OpenSSL::safe::installdata::LIBDIR_REL_PREFIX
|
||||||
: $OpenSSL::safe::installdata::libdir -}
|
: $OpenSSL::safe::installdata::libdir -}
|
||||||
includedir=${prefix}/{- $OpenSSL::safe::installdata::INCLUDEDIR_REL_PREFIX -}
|
includedir={- $OUT = '';
|
||||||
|
$OUT .= '${prefix}/' . $_ . ' '
|
||||||
|
foreach (@OpenSSL::safe::installdata::INCLUDEDIR_REL_PREFIX); -}
|
||||||
|
|
||||||
Name: OpenSSL-libssl
|
Name: OpenSSL-libssl
|
||||||
Description: Secure Sockets Layer and cryptography libraries
|
Description: Secure Sockets Layer and cryptography libraries
|
||||||
Version: {- $OpenSSL::safe::installdata::VERSION -}
|
Version: {- $OpenSSL::safe::installdata::VERSION -}
|
||||||
Requires.private: libcrypto
|
Requires.private: libcrypto
|
||||||
Libs: -L${libdir} -lssl
|
Libs: -L${libdir} -lssl
|
||||||
Cflags: -I${includedir}
|
Cflags:{- $OUT = ' -I${includedir}';
|
||||||
|
if (scalar @OpenSSL::safe::installdata::INCLUDEDIR_REL_PREFIX > 1) {
|
||||||
|
$OUT = '';
|
||||||
|
$OUT .= ' -I${prefix}/' . $_ . ' '
|
||||||
|
foreach (@OpenSSL::safe::installdata::INCLUDEDIR_REL_PREFIX);
|
||||||
|
} -}
|
||||||
|
|
|
@ -32,10 +32,11 @@ foreach (@others) { $all{$_} = 1 }
|
||||||
print STDERR "DEBUG: all keys: ", join(", ", sort keys %all), "\n";
|
print STDERR "DEBUG: all keys: ", join(", ", sort keys %all), "\n";
|
||||||
|
|
||||||
my %keys = ();
|
my %keys = ();
|
||||||
|
my %values = ();
|
||||||
foreach (@ARGV) {
|
foreach (@ARGV) {
|
||||||
(my $k, my $v) = m|^([^=]*)=(.*)$|;
|
(my $k, my $v) = m|^([^=]*)=(.*)$|;
|
||||||
$keys{$k} = 1;
|
$keys{$k} = 1;
|
||||||
$ENV{$k} = $v;
|
push @{$values{$k}}, $v;
|
||||||
}
|
}
|
||||||
|
|
||||||
# warn if there are missing values, and also if there are unexpected values
|
# warn if there are missing values, and also if there are unexpected values
|
||||||
|
@ -49,11 +50,12 @@ foreach my $k (sort keys %keys) {
|
||||||
# This shouldn't be needed, but just in case we get relative paths that
|
# This shouldn't be needed, but just in case we get relative paths that
|
||||||
# should be absolute, make sure they actually are.
|
# should be absolute, make sure they actually are.
|
||||||
foreach my $k (@absolutes) {
|
foreach my $k (@absolutes) {
|
||||||
my $v = $ENV{$k} || '.';
|
my $v = $values{$k} || [ '.' ];
|
||||||
print STDERR "DEBUG: $k = $v => ";
|
die "Can't have more than one $k\n" if scalar @$v > 1;
|
||||||
$v = File::Spec->rel2abs($v) if $v;
|
print STDERR "DEBUG: $k = $v->[0] => ";
|
||||||
$ENV{$k} = $v;
|
$v = [ map { File::Spec->rel2abs($_) } @$v ];
|
||||||
print STDERR "$k = $ENV{$k}\n";
|
$values{$k} = $v;
|
||||||
|
print STDERR "$k = $v->[0]\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
# Absolute paths for the subdir variables are computed. This provides
|
# Absolute paths for the subdir variables are computed. This provides
|
||||||
|
@ -66,18 +68,31 @@ foreach my $k (@absolutes) {
|
||||||
foreach my $pair (@subdirs) {
|
foreach my $pair (@subdirs) {
|
||||||
my ($var, $subdir_vars) = @$pair;
|
my ($var, $subdir_vars) = @$pair;
|
||||||
foreach my $k (@$subdir_vars) {
|
foreach my $k (@$subdir_vars) {
|
||||||
my $v = $ENV{$k} || '.';
|
my $kr = "${k}_REL_${var}";
|
||||||
print STDERR "DEBUG: $k = $v => ";
|
my $v2 = $values{$k} || [ '.' ];
|
||||||
if (File::Spec->file_name_is_absolute($v)) {
|
$values{$k} = []; # We're rebuilding it
|
||||||
my $kr = "${k}_REL_${var}";
|
print STDERR "DEBUG: $k = ",
|
||||||
$ENV{$kr} = File::Spec->abs2rel($v, $ENV{$var});
|
(scalar @$v2 > 1 ? "[ " . join(", ", @$v2) . " ]" : $v2->[0]),
|
||||||
print STDERR "$kr = $ENV{$kr}\n";
|
" => ";
|
||||||
} else {
|
foreach my $v (@$v2) {
|
||||||
my $kr = "${k}_REL_${var}";
|
if (File::Spec->file_name_is_absolute($v)) {
|
||||||
$ENV{$kr} = $v;
|
push @{$values{$k}}, $v;
|
||||||
$ENV{$k} = File::Spec->rel2abs($v, $ENV{$var});
|
push @{$values{$kr}},
|
||||||
print STDERR "$k = $ENV{$k} , $kr = $v\n";
|
File::Spec->abs2rel($v, $values{$var}->[0]);
|
||||||
|
} else {
|
||||||
|
push @{$values{$kr}}, $v;
|
||||||
|
push @{$values{$k}},
|
||||||
|
File::Spec->rel2abs($v, $values{$var}->[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
print STDERR join(", ",
|
||||||
|
map {
|
||||||
|
my $v = $values{$_};
|
||||||
|
"$_ = " . (scalar @$v > 1
|
||||||
|
? "[ " . join(", ", @$v) . " ]"
|
||||||
|
: $v->[0]);
|
||||||
|
} ($k, $kr)),
|
||||||
|
"\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,13 +107,13 @@ our \@EXPORT = qw(
|
||||||
_____
|
_____
|
||||||
|
|
||||||
foreach my $k (@absolutes) {
|
foreach my $k (@absolutes) {
|
||||||
print " \$$k\n";
|
print " \@$k\n";
|
||||||
}
|
}
|
||||||
foreach my $pair (@subdirs) {
|
foreach my $pair (@subdirs) {
|
||||||
my ($var, $subdir_vars) = @$pair;
|
my ($var, $subdir_vars) = @$pair;
|
||||||
foreach my $k (@$subdir_vars) {
|
foreach my $k (@$subdir_vars) {
|
||||||
my $k2 = "${k}_REL_${var}";
|
my $k2 = "${k}_REL_${var}";
|
||||||
print " \$$k \$$k2\n";
|
print " \@$k \@$k2\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,24 +124,30 @@ print <<_____;
|
||||||
_____
|
_____
|
||||||
|
|
||||||
foreach my $k (@absolutes) {
|
foreach my $k (@absolutes) {
|
||||||
print "our \$$k" . ' ' x (27 - length($k)) . "= '$ENV{$k}';\n";
|
print "our \@$k" . ' ' x (27 - length($k)) . "= ( '",
|
||||||
|
join("', '", @{$values{$k}}),
|
||||||
|
"' );\n";
|
||||||
}
|
}
|
||||||
foreach my $pair (@subdirs) {
|
foreach my $pair (@subdirs) {
|
||||||
my ($var, $subdir_vars) = @$pair;
|
my ($var, $subdir_vars) = @$pair;
|
||||||
foreach my $k (@$subdir_vars) {
|
foreach my $k (@$subdir_vars) {
|
||||||
my $k2 = "${k}_REL_${var}";
|
my $k2 = "${k}_REL_${var}";
|
||||||
print "our \$$k" . ' ' x (27 - length($k)) . "= '$ENV{$k}';\n";
|
print "our \@$k" . ' ' x (27 - length($k)) . "= ( '",
|
||||||
print "our \$$k2" . ' ' x (27 - length($k2)) . "= '$ENV{$k2}';\n";
|
join("', '", @{$values{$k}}),
|
||||||
|
"' );\n";
|
||||||
|
print "our \@$k2" . ' ' x (27 - length($k2)) . "= ( '",
|
||||||
|
join("', '", @{$values{$k2}}),
|
||||||
|
"' );\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
print <<_____;
|
print <<_____;
|
||||||
our \$VERSION = '$ENV{VERSION}';
|
our \$VERSION = '$values{VERSION}->[0]';
|
||||||
our \@LDLIBS =
|
our \@LDLIBS =
|
||||||
# Unix and Windows use space separation, VMS uses comma separation
|
# Unix and Windows use space separation, VMS uses comma separation
|
||||||
\$^O eq 'VMS'
|
\$^O eq 'VMS'
|
||||||
? split(/ *, */, '$ENV{LDLIBS}')
|
? split(/ *, */, '$values{LDLIBS}->[0]')
|
||||||
: split(/ +/, '$ENV{LDLIBS}');
|
: split(/ +/, '$values{LDLIBS}->[0]');
|
||||||
|
|
||||||
1;
|
1;
|
||||||
_____
|
_____
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue