Support multibin to allow multiple binary models to co-exist.
authorRandall S. Becker <rsbecker@nexbridge.com>
Mon, 30 Aug 2021 19:24:39 +0000 (15:24 -0400)
committerTomas Mraz <tomas@openssl.org>
Thu, 22 Dec 2022 11:31:07 +0000 (12:31 +0100)
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)

Configurations/50-nonstop.conf
Configurations/README.md
Configurations/unix-Makefile.tmpl

index 50c37f3dedee59717839ef85f1d1986dcab6e116..3264bc9b8599bce25766f5069a31a43e7df2f0f3 100644 (file)
                               'nonstop-efloat-x86_64',
                               'nonstop-model-put' ],
         multilib         => '-put',
+        multibin         => '-put',
     },
     'nonstop-nsx_64' => {
         inherit_from     => [ 'nonstop-common',
                               'nonstop-lp64-x86_64',
                               'nonstop-efloat-x86_64' ],
         multilib         => '64',
+        multibin         => '64',
         disable          => ['threads'],
     },
     'nonstop-nsx_64_put' => {
                               'nonstop-efloat-x86_64',
                               'nonstop-model-put' ],
         multilib         => '64-put',
+        multibin         => '64-put',
     },
     'nonstop-nsx_spt' => {
         inherit_from     => [ 'nonstop-common',
                               'nonstop-efloat-x86_64',
                               'nonstop-model-spt' ],
         multilib         => '-spt',
+        multibin         => '-spt',
     },
     'nonstop-nsx_spt_floss' => {
         inherit_from     => [ 'nonstop-common',
                               'nonstop-model-floss',
                               'nonstop-model-spt'],
         multilib         => '-spt',
+        multibin         => '-spt',
     },
     'nonstop-nsx_g' => {
         inherit_from     => [ 'nonstop-common',
                               'nonstop-efloat-itanium',
                               'nonstop-model-put' ],
         multilib         => '-put',
+        multibin         => '-put',
     },
     'nonstop-nse_64' => {
         inherit_from     => [ 'nonstop-common',
                               'nonstop-lp64-itanium',
                               'nonstop-efloat-itanium' ],
         multilib         => '64',
+        multibin         => '64',
         disable          => ['threads'],
     },
     'nonstop-nse_64_put' => {
                               'nonstop-efloat-itanium',
                               'nonstop-model-put' ],
         multilib         => '64-put',
+        multibin         => '64-put',
     },
     'nonstop-nse_spt' => {
         inherit_from     => [ 'nonstop-common',
                               'nonstop-efloat-itanium',
                               'nonstop-model-spt' ],
         multilib         => '-spt',
+        multibin         => '-spt',
     },
     'nonstop-nse_spt_floss' => {
         inherit_from     => [ 'nonstop-common',
                               'nonstop-efloat-itanium',
                               'nonstop-model-floss', 'nonstop-model-spt' ],
         multilib         => '-spt',
+        multibin         => '-spt',
     },
     'nonstop-nse_g' => {
         inherit_from     => [ 'nonstop-common',
index 53f2277f8c56001311e45b0f57efda226b97d5f2..4b6e4bbee20e9d9cc6d942508608e182b97c3cc0 100644 (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
index a72fdd558b3339817c5ebe05b7ab2767ba1bd5fb..db65f1807420e0091160c93f28c2bb8ae16fa776 100644 (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(); "" -}