Support multibin to allow multiple binary models to co-exist.

This change parallels the implementation of multilib and initially
only applies to the NonStop platform's DLL loader limitations.

Fixes: #16460

Signed-off-by: Randall S. Becker <rsbecker@nexbridge.com>

Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/16472)
This commit is contained in:
Randall S. Becker 2021-08-30 15:24:39 -04:00 committed by Tomas Mraz
parent c99209264d
commit d793a3253b
3 changed files with 49 additions and 24 deletions

View File

@ -202,6 +202,7 @@
'nonstop-efloat-x86_64', 'nonstop-efloat-x86_64',
'nonstop-model-put' ], 'nonstop-model-put' ],
multilib => '-put', multilib => '-put',
multibin => '-put',
}, },
'nonstop-nsx_64' => { 'nonstop-nsx_64' => {
inherit_from => [ 'nonstop-common', inherit_from => [ 'nonstop-common',
@ -209,6 +210,7 @@
'nonstop-lp64-x86_64', 'nonstop-lp64-x86_64',
'nonstop-efloat-x86_64' ], 'nonstop-efloat-x86_64' ],
multilib => '64', multilib => '64',
multibin => '64',
disable => ['threads'], disable => ['threads'],
}, },
'nonstop-nsx_64_put' => { 'nonstop-nsx_64_put' => {
@ -218,6 +220,7 @@
'nonstop-efloat-x86_64', 'nonstop-efloat-x86_64',
'nonstop-model-put' ], 'nonstop-model-put' ],
multilib => '64-put', multilib => '64-put',
multibin => '64-put',
}, },
'nonstop-nsx_spt' => { 'nonstop-nsx_spt' => {
inherit_from => [ 'nonstop-common', inherit_from => [ 'nonstop-common',
@ -226,6 +229,7 @@
'nonstop-efloat-x86_64', 'nonstop-efloat-x86_64',
'nonstop-model-spt' ], 'nonstop-model-spt' ],
multilib => '-spt', multilib => '-spt',
multibin => '-spt',
}, },
'nonstop-nsx_spt_floss' => { 'nonstop-nsx_spt_floss' => {
inherit_from => [ 'nonstop-common', inherit_from => [ 'nonstop-common',
@ -235,6 +239,7 @@
'nonstop-model-floss', 'nonstop-model-floss',
'nonstop-model-spt'], 'nonstop-model-spt'],
multilib => '-spt', multilib => '-spt',
multibin => '-spt',
}, },
'nonstop-nsx_g' => { 'nonstop-nsx_g' => {
inherit_from => [ 'nonstop-common', inherit_from => [ 'nonstop-common',
@ -265,6 +270,7 @@
'nonstop-efloat-itanium', 'nonstop-efloat-itanium',
'nonstop-model-put' ], 'nonstop-model-put' ],
multilib => '-put', multilib => '-put',
multibin => '-put',
}, },
'nonstop-nse_64' => { 'nonstop-nse_64' => {
inherit_from => [ 'nonstop-common', inherit_from => [ 'nonstop-common',
@ -272,6 +278,7 @@
'nonstop-lp64-itanium', 'nonstop-lp64-itanium',
'nonstop-efloat-itanium' ], 'nonstop-efloat-itanium' ],
multilib => '64', multilib => '64',
multibin => '64',
disable => ['threads'], disable => ['threads'],
}, },
'nonstop-nse_64_put' => { 'nonstop-nse_64_put' => {
@ -281,6 +288,7 @@
'nonstop-efloat-itanium', 'nonstop-efloat-itanium',
'nonstop-model-put' ], 'nonstop-model-put' ],
multilib => '64-put', multilib => '64-put',
multibin => '64-put',
}, },
'nonstop-nse_spt' => { 'nonstop-nse_spt' => {
inherit_from => [ 'nonstop-common', inherit_from => [ 'nonstop-common',
@ -289,6 +297,7 @@
'nonstop-efloat-itanium', 'nonstop-efloat-itanium',
'nonstop-model-spt' ], 'nonstop-model-spt' ],
multilib => '-spt', multilib => '-spt',
multibin => '-spt',
}, },
'nonstop-nse_spt_floss' => { 'nonstop-nse_spt_floss' => {
inherit_from => [ 'nonstop-common', inherit_from => [ 'nonstop-common',
@ -297,6 +306,7 @@
'nonstop-efloat-itanium', 'nonstop-efloat-itanium',
'nonstop-model-floss', 'nonstop-model-spt' ], 'nonstop-model-floss', 'nonstop-model-spt' ],
multilib => '-spt', multilib => '-spt',
multibin => '-spt',
}, },
'nonstop-nse_g' => { 'nonstop-nse_g' => {
inherit_from => [ 'nonstop-common', inherit_from => [ 'nonstop-common',

View File

@ -203,6 +203,13 @@ In each table entry, the following keys are significant:
to have the different variants in different to have the different variants in different
directories. directories.
multibin => On systems that support having multiple
implementations of a library and binaries
(typically a 32-bit and a 64-bit variant),
this is used to have the different variants
in different binary directories. This setting
works in conjunction with multilib.
bn_ops => Building options (was just bignum options in bn_ops => Building options (was just bignum options in
the earlier history of this option, hence the the earlier history of this option, hence the
name). This is a string of words that describe name). This is a string of words that describe

View File

@ -311,6 +311,14 @@ MODULESDIR=$(libdir)/ossl-modules
# libraries and applications # libraries and applications
LIBRPATH=$(libdir) LIBRPATH=$(libdir)
BINDIR={- our $bindir = $config{bindir};
unless ($bindir) {
$bindir = "bin$target{multibin}";
}
file_name_is_absolute($bindir) ? "" : $bindir -}
bindir={- file_name_is_absolute($bindir)
? $bindir : '$(INSTALLTOP)/$(BINDIR)' -}
MANDIR=$(INSTALLTOP)/share/man MANDIR=$(INSTALLTOP)/share/man
DOCDIR=$(INSTALLTOP)/share/doc/$(BASENAME) DOCDIR=$(INSTALLTOP)/share/doc/$(BASENAME)
HTMLDIR=$(DOCDIR)/html HTMLDIR=$(DOCDIR)/html
@ -871,18 +879,18 @@ install_runtime_libs: build_libs
@ : {- output_off() if windowsdll(); "" -} @ : {- output_off() if windowsdll(); "" -}
@$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(libdir) @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(libdir)
@ : {- output_on() if windowsdll(); output_off() unless windowsdll(); "" -} @ : {- output_on() if windowsdll(); output_off() unless windowsdll(); "" -}
@$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(INSTALLTOP)/bin @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(bindir)/
@ : {- output_on() unless windowsdll(); "" -} @ : {- output_on() unless windowsdll(); "" -}
@$(ECHO) "*** Installing runtime libraries" @$(ECHO) "*** Installing runtime libraries"
@set -e; for s in dummy $(INSTALL_SHLIBS); do \ @set -e; for s in dummy $(INSTALL_SHLIBS); do \
if [ "$$s" = "dummy" ]; then continue; fi; \ if [ "$$s" = "dummy" ]; then continue; fi; \
fn=`basename $$s`; \ fn=`basename $$s`; \
: {- output_off() unless windowsdll(); "" -}; \ : {- output_off() unless windowsdll(); "" -}; \
$(ECHO) "install $$s -> $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ $(ECHO) "install $$s -> $(DESTDIR)$(bindir)/$$fn"; \
cp $$s $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ cp $$s $(DESTDIR)$(bindir)/$$fn.new; \
chmod 755 $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ chmod 755 $(DESTDIR)$(bindir)/$$fn.new; \
mv -f $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new \ mv -f $(DESTDIR)$(bindir)/$$fn.new \
$(DESTDIR)$(INSTALLTOP)/bin/$$fn; \ $(DESTDIR)$(bindir)/$$fn; \
: {- output_on() unless windowsdll(); "" -}{- output_off() if windowsdll(); "" -}; \ : {- output_on() unless windowsdll(); "" -}{- output_off() if windowsdll(); "" -}; \
$(ECHO) "install $$s -> $(DESTDIR)$(libdir)/$$fn"; \ $(ECHO) "install $$s -> $(DESTDIR)$(libdir)/$$fn"; \
cp $$s $(DESTDIR)$(libdir)/$$fn.new; \ cp $$s $(DESTDIR)$(libdir)/$$fn.new; \
@ -894,25 +902,25 @@ install_runtime_libs: build_libs
install_programs: install_runtime_libs build_programs install_programs: install_runtime_libs build_programs
@[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1) @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
@$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(INSTALLTOP)/bin @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(bindir)
@$(ECHO) "*** Installing runtime programs" @$(ECHO) "*** Installing runtime programs"
@set -e; for x in dummy $(INSTALL_PROGRAMS); do \ @set -e; for x in dummy $(INSTALL_PROGRAMS); do \
if [ "$$x" = "dummy" ]; then continue; fi; \ if [ "$$x" = "dummy" ]; then continue; fi; \
fn=`basename $$x`; \ fn=`basename $$x`; \
$(ECHO) "install $$x -> $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ $(ECHO) "install $$x -> $(DESTDIR)$(bindir)/$$fn"; \
cp $$x $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ cp $$x $(DESTDIR)$(bindir)/$$fn.new; \
chmod 755 $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ chmod 755 $(DESTDIR)$(bindir)/$$fn.new; \
mv -f $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new \ mv -f $(DESTDIR)$(bindir)/$$fn.new \
$(DESTDIR)$(INSTALLTOP)/bin/$$fn; \ $(DESTDIR)$(bindir)/$$fn; \
done done
@set -e; for x in dummy $(BIN_SCRIPTS); do \ @set -e; for x in dummy $(BIN_SCRIPTS); do \
if [ "$$x" = "dummy" ]; then continue; fi; \ if [ "$$x" = "dummy" ]; then continue; fi; \
fn=`basename $$x`; \ fn=`basename $$x`; \
$(ECHO) "install $$x -> $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ $(ECHO) "install $$x -> $(DESTDIR)$(bindir)/$$fn"; \
cp $$x $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ cp $$x $(DESTDIR)$(bindir)/$$fn.new; \
chmod 755 $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ chmod 755 $(DESTDIR)$(bindir)/$$fn.new; \
mv -f $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new \ mv -f $(DESTDIR)$(bindir)/$$fn.new \
$(DESTDIR)$(INSTALLTOP)/bin/$$fn; \ $(DESTDIR)$(bindir)/$$fn; \
done done
uninstall_runtime: uninstall_programs uninstall_runtime_libs uninstall_runtime: uninstall_programs uninstall_runtime_libs
@ -923,17 +931,17 @@ uninstall_programs:
do \ do \
if [ "$$x" = "dummy" ]; then continue; fi; \ if [ "$$x" = "dummy" ]; then continue; fi; \
fn=`basename $$x`; \ fn=`basename $$x`; \
$(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ $(ECHO) "$(RM) $(DESTDIR)$(bindir)/$$fn"; \
$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn; \ $(RM) $(DESTDIR)$(bindir)/$$fn; \
done; done;
@set -e; for x in dummy $(BIN_SCRIPTS); \ @set -e; for x in dummy $(BIN_SCRIPTS); \
do \ do \
if [ "$$x" = "dummy" ]; then continue; fi; \ if [ "$$x" = "dummy" ]; then continue; fi; \
fn=`basename $$x`; \ fn=`basename $$x`; \
$(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ $(ECHO) "$(RM) $(DESTDIR)$(bindir)/$$fn"; \
$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn; \ $(RM) $(DESTDIR)$(bindir)/$$fn; \
done done
-$(RMDIR) $(DESTDIR)$(INSTALLTOP)/bin -$(RMDIR) $(DESTDIR)$(bindir)
uninstall_runtime_libs: uninstall_runtime_libs:
@$(ECHO) "*** Uninstalling runtime libraries" @$(ECHO) "*** Uninstalling runtime libraries"
@ -941,8 +949,8 @@ uninstall_runtime_libs:
@set -e; for s in dummy $(INSTALL_SHLIBS); do \ @set -e; for s in dummy $(INSTALL_SHLIBS); do \
if [ "$$s" = "dummy" ]; then continue; fi; \ if [ "$$s" = "dummy" ]; then continue; fi; \
fn=`basename $$s`; \ fn=`basename $$s`; \
$(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ $(ECHO) "$(RM) $(DESTDIR)$(bindir)/$$fn"; \
$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn; \ $(RM) $(DESTDIR)$(bindir)/$$fn; \
done done
@ : {- output_on() unless windowsdll(); "" -} @ : {- output_on() unless windowsdll(); "" -}