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-model-put' ],
multilib => '-put',
multibin => '-put',
},
'nonstop-nsx_64' => {
inherit_from => [ 'nonstop-common',
@ -209,6 +210,7 @@
'nonstop-lp64-x86_64',
'nonstop-efloat-x86_64' ],
multilib => '64',
multibin => '64',
disable => ['threads'],
},
'nonstop-nsx_64_put' => {
@ -218,6 +220,7 @@
'nonstop-efloat-x86_64',
'nonstop-model-put' ],
multilib => '64-put',
multibin => '64-put',
},
'nonstop-nsx_spt' => {
inherit_from => [ 'nonstop-common',
@ -226,6 +229,7 @@
'nonstop-efloat-x86_64',
'nonstop-model-spt' ],
multilib => '-spt',
multibin => '-spt',
},
'nonstop-nsx_spt_floss' => {
inherit_from => [ 'nonstop-common',
@ -235,6 +239,7 @@
'nonstop-model-floss',
'nonstop-model-spt'],
multilib => '-spt',
multibin => '-spt',
},
'nonstop-nsx_g' => {
inherit_from => [ 'nonstop-common',
@ -265,6 +270,7 @@
'nonstop-efloat-itanium',
'nonstop-model-put' ],
multilib => '-put',
multibin => '-put',
},
'nonstop-nse_64' => {
inherit_from => [ 'nonstop-common',
@ -272,6 +278,7 @@
'nonstop-lp64-itanium',
'nonstop-efloat-itanium' ],
multilib => '64',
multibin => '64',
disable => ['threads'],
},
'nonstop-nse_64_put' => {
@ -281,6 +288,7 @@
'nonstop-efloat-itanium',
'nonstop-model-put' ],
multilib => '64-put',
multibin => '64-put',
},
'nonstop-nse_spt' => {
inherit_from => [ 'nonstop-common',
@ -289,6 +297,7 @@
'nonstop-efloat-itanium',
'nonstop-model-spt' ],
multilib => '-spt',
multibin => '-spt',
},
'nonstop-nse_spt_floss' => {
inherit_from => [ 'nonstop-common',
@ -297,6 +306,7 @@
'nonstop-efloat-itanium',
'nonstop-model-floss', 'nonstop-model-spt' ],
multilib => '-spt',
multibin => '-spt',
},
'nonstop-nse_g' => {
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
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
the earlier history of this option, hence the
name). This is a string of words that describe

View File

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