AIX: Implement shared_target = "aix-solib" support
[openssl.git] / Configurations / unix-Makefile.tmpl
index f7e55b3abea4ad6818fc115d5713f52192ee4cef..25c713e952c48a0923710208ec3ab478e1ba5f9f 100644 (file)
      sub windowsdll { $config{target} =~ /^(?:Cygwin|mingw)/ }
 
      # Shared AIX support is special. We put libcrypto[64].so.ver into
-     # libcrypto.a and use libcrypto_a.a as static one.
-     sub sharedaix  { !$disabled{shared} && $config{target} =~ /^aix/ }
+     # libcrypto.a and use libcrypto_a.a as static one, unless using
+     # shared_target style aix-solib.  In that mode, create
+     # libcrypto.so as a link-import library that inserts runtime
+     # dependencies on libcrypto.so.ver, and the static library is
+     # named libcrypto.a.
+     sub sharedaix  { !$disabled{shared} && $target{shared_target} =~ /^aix(?!-solib$)/ }
+     sub sharedaix_solib  { !$disabled{shared} && $target{shared_target} =~ /^aix-solib$/ }
 
      our $sover_dirname = platform->shlib_version_as_filename();
 
@@ -760,12 +765,12 @@ install_dev: install_runtime_libs
                fn1=`basename "$$s1"`; \
                fn2=`basename "$$s2"`; \
                fn3=`basename "$$s3"`; \
-               : {- output_off(); output_on() unless windowsdll() or sharedaix(); "" -}; \
+               : {- output_off(); output_on() unless windowsdll() or sharedaix() or sharedaix_solib(); "" -}; \
                if [ "$$fn2" != "" ]; then \
                        $(ECHO) "link $(DESTDIR)$(libdir)/$$fn2 -> $(DESTDIR)$(libdir)/$$fn1"; \
                        ln -sf $$fn1 "$(DESTDIR)$(libdir)/$$fn2"; \
                fi; \
-               : {- output_off() unless windowsdll() or sharedaix(); output_on() if windowsdll(); "" -}; \
+               : {- output_off() unless windowsdll() or sharedaix() or sharedaix_solib(); output_on() if windowsdll() or sharedaix_solib(); "" -}; \
                if [ "$$fn3" != "" ]; then \
                        $(ECHO) "install $$s3 -> $(DESTDIR)$(libdir)/$$fn3"; \
                        cp $$s3 "$(DESTDIR)$(libdir)/$$fn3.new"; \
@@ -773,7 +778,7 @@ install_dev: install_runtime_libs
                        mv -f "$(DESTDIR)$(libdir)/$$fn3.new" \
                              "$(DESTDIR)$(libdir)/$$fn3"; \
                fi; \
-               : {- output_off() if windowsdll(); output_on() if sharedaix(); "" -}; \
+               : {- output_off() if windowsdll() or sharedaix_solib(); output_on() if sharedaix(); "" -}; \
                a="$(DESTDIR)$(libdir)/$$fn2"; \
                $(ECHO) "install $$s1 -> $$a"; \
                if [ -f $$a ]; then ( trap "rm -rf /tmp/ar.$$$$" INT 0; \
@@ -1790,6 +1795,8 @@ EOF
       # libraries for DLLs are a thing.  On platforms that have this mechanism,
       # $import has the name of this import library.  On platforms that don't
       # have this mechanism, $import will be |undef|.
+      # It's also used on AIX in solib mode, which creates import libraries
+      # for the shared libraries.
       my $import = platform->sharedlib_import($args{lib});
       # $simple is for platforms where full shared library names include the
       # shared library version, and there's a simpler name that doesn't include
@@ -1850,9 +1857,18 @@ EOF
           }
       }
       if (defined $import) {
+          if (sharedaix_solib()) {
+              $recipe .= <<"EOF";
+$import: $full $defs[0]
+       rm -f $import && \\
+       echo \\#!$full > $import && \\
+        cat $defs[0] >>$import
+EOF
+          } else {
       $recipe .= <<"EOF";
 $import: $full
 EOF
+          }
       }
       $recipe .= <<"EOF";
 $full: $fulldeps