summaryrefslogtreecommitdiffstats
path: root/Configurations
diff options
context:
space:
mode:
authorViktor Dukhovni <openssl-users@dukhovni.org>2017-11-20 21:30:04 -0500
committerViktor Dukhovni <openssl-users@dukhovni.org>2017-11-30 18:27:50 -0500
commite6f38fb817d831ed093f7d7140325783b5556d8f (patch)
tree5a705df0f336c020dbd1a7800bb74c3b47c0bc75 /Configurations
parenta61c15eb9b8d0ef513d695c854516958e2ccf1eb (diff)
Make possible variant SONAMEs and symbol versions
This small change in the Unix template and shared library build scripts enables building "variant" shared libraries. A "variant" shared library has a non-default SONAME, and non default symbol versions. This makes it possible to build (say) an OpenSSL 1.1.0 library that can coexist without conflict in the same process address space as the system's default OpenSSL library which may be OpenSSL 1.0.2. Such "variant" shared libraries make it possible to link applications against a custom OpenSSL library installed in /opt/openssl/1.1 or similar location, and not risk conflict with an indirectly loaded OpenSSL runtime that is required by some other dependency. Variant shared libraries have been fully tested under Linux, and build successfully on MacOS/X producing variant DYLD names. MacOS/X Darwin has no symbol versioning, but has a non-flat library namespace. Variant libraries may therefore support multiple OpenSSL libraries in the same address space also with MacOS/X, despite lack of symbol versions, but this has not been verified. Variant shared libraries are optional and off by default. Reviewed-by: Richard Levitte <levitte@openssl.org>
Diffstat (limited to 'Configurations')
-rw-r--r--Configurations/README21
-rw-r--r--Configurations/unix-Makefile.tmpl3
2 files changed, 23 insertions, 1 deletions
diff --git a/Configurations/README b/Configurations/README
index 47971c27b5..eecf1ea72e 100644
--- a/Configurations/README
+++ b/Configurations/README
@@ -86,6 +86,27 @@ In each table entry, the following keys are significant:
files. On unix, this defaults to "" (NOTE:
this is here for future use, it's not
implemented yet)
+ shlib_variant => A "variant" identifier inserted between the base
+ shared library name and the extension. On "unixy"
+ platforms (BSD, Linux, Solaris, MacOS/X, ...) this
+ supports installation of custom OpenSSL libraries
+ that don't conflict with other builds of OpenSSL
+ installed on the system. The variant identifier
+ becomes part of the SONAME of the library and also
+ any symbol versions (symbol versions are not used or
+ needed with MacOS/X). For example, on a system
+ where a default build would normally create the SSL
+ shared library as 'libssl.so -> libssl.so.1.1' with
+ the value of the symlink as the SONAME, a target
+ definition that sets 'shlib_variant => "-abc"' will
+ create 'libssl.so -> libssl-abc.so.1.1', again with
+ an SONAME equal to the value of the symlink. The
+ symbol versions associated with the variant library
+ would then be 'OPENSSL_ABC_<version>' rather than
+ the default 'OPENSSL_<version>'. The string inserted
+ into symbol versions is obtained by mapping all
+ letters in the "variant" identifier to upper case
+ and all non-alphanumeric characters to '_'.
thread_scheme => The type of threads is used on the
configured platform. Currently known
diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl
index f044e95ff9..39c44022df 100644
--- a/Configurations/unix-Makefile.tmpl
+++ b/Configurations/unix-Makefile.tmpl
@@ -8,6 +8,7 @@
our $exeext = $target{exe_extension} || "";
our $libext = $target{lib_extension} || ".a";
our $shlibext = $target{shared_extension} || ".so";
+ our $shlibvariant = $target{shlib_variant} || "";
our $shlibextsimple = $target{shared_extension_simple} || ".so";
our $shlibextimport = $target{shared_import_extension} || "";
our $dsoext = $target{dso_extension} || ".so";
@@ -40,7 +41,7 @@
sub shlib {
return () if $disabled{shared};
my $lib = shift;
- return $unified_info{sharednames}->{$lib} . $shlibext;
+ return $unified_info{sharednames}->{$lib}. $shlibvariant. $shlibext;
}
sub shlib_simple {
return () if $disabled{shared};