From d793a3253bada9b61e5ccd5f8caaa4bfc4f4faa6 Mon Sep 17 00:00:00 2001 From: "Randall S. Becker" Date: Mon, 30 Aug 2021 15:24:39 -0400 Subject: [PATCH] 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 Reviewed-by: Richard Levitte Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/16472) --- Configurations/50-nonstop.conf | 10 ++++++ Configurations/README.md | 7 ++++ Configurations/unix-Makefile.tmpl | 56 ++++++++++++++++++------------- 3 files changed, 49 insertions(+), 24 deletions(-) diff --git a/Configurations/50-nonstop.conf b/Configurations/50-nonstop.conf index 50c37f3ded..3264bc9b85 100644 --- a/Configurations/50-nonstop.conf +++ b/Configurations/50-nonstop.conf @@ -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', diff --git a/Configurations/README.md b/Configurations/README.md index 53f2277f8c..4b6e4bbee2 100644 --- a/Configurations/README.md +++ b/Configurations/README.md @@ -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 diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl index a72fdd558b..db65f18074 100644 --- a/Configurations/unix-Makefile.tmpl +++ b/Configurations/unix-Makefile.tmpl @@ -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(); "" -}