Commit cff89b17 authored by Andy Polyakov's avatar Andy Polyakov
Browse files

Configurations/unix-Makefile.tmpl: switch to "natural" AIX shared libraries.



AIX treats its shared libraries in unique manner, by placing multiple
shared objects of different versions and bitnesses, into .a file.
So far we have been naively linking with version-less libcrypto|ssl.so,
which poses long-term maintenance problems. One could choose to link
straight with libcrypto.so.X.Y [or libcrypto.X.Y.so], but it would be
inconsistent with the way AIX [or Unix] does things.

Reviewed-by: default avatarRichard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6487)
parent b48d4397
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -1113,11 +1113,14 @@ my %targets = (
        thread_scheme    => "pthreads",
        dso_scheme       => "dlfcn",
        shared_target    => "self",
        shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)",
        bin_lflags       => shared("-Wl,-bsvr4"),
        module_ldflags   => "-Wl,-G,-bsymbolic,-bexpall,-bnolibpath",
        shared_ldflag    => "-Wl,-G,-bsymbolic,-bnolibpath",
        shared_defflag   => "-Wl,-bE:",
        shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)",
        dso_extension    => ".so",
        lib_extension    => shared("_a.a"),
        shared_extension_simple => shared(".a"),
    },
    "aix-gcc" => {
        inherit_from     => [ "aix-common", asm("ppc32_asm") ],
@@ -1142,6 +1145,7 @@ my %targets = (
        bn_ops           => "SIXTY_FOUR_BIT_LONG RC4_CHAR",
        perlasm_scheme   => "aix64",
        shared_ldflag    => add_before("-shared -static-libgcc"),
        shared_extension => "64.so.\$(SHLIB_VERSION_NUMBER)",
        AR               => add("-X64"),
        RANLIB           => add("-X64"),
    },
@@ -1173,6 +1177,7 @@ my %targets = (
        perlasm_scheme   => "aix64",
        dso_scheme       => "dlfcn",
        shared_cflag     => "-qpic",
        shared_extension => "64.so.\$(SHLIB_VERSION_NUMBER)",
        AR               => add("-X64"),
        RANLIB           => add("-X64"),
    },
+34 −10
Original line number Diff line number Diff line
@@ -16,6 +16,10 @@

     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/ }

     our $sover_dirname = $config{shlib_version_number};
     $sover_dirname =~ s|\.|_|g
         if $config{target} =~ /^mingw/;
@@ -506,7 +510,7 @@ install_dev:
		s2=`echo "$$s" | cut -f2 -d";"`; \
		fn1=`basename $$s1`; \
		fn2=`basename $$s2`; \
		: {- output_off() if windowsdll(); "" -}; \
		: {- output_off(); output_on() unless windowsdll() or sharedaix(); "" -}; \
		$(ECHO) "install $$s1 -> $(DESTDIR)$(libdir)/$$fn1"; \
		cp $$s1 $(DESTDIR)$(libdir)/$$fn1.new; \
		chmod 755 $(DESTDIR)$(libdir)/$$fn1.new; \
@@ -516,13 +520,28 @@ install_dev:
			$(ECHO) "link $(DESTDIR)$(libdir)/$$fn2 -> $(DESTDIR)$(libdir)/$$fn1"; \
			ln -sf $$fn1 $(DESTDIR)$(libdir)/$$fn2; \
		fi; \
		: {- output_on() if windowsdll(); "" -}{- output_off() unless windowsdll(); "" -}; \
		: {- output_off() unless windowsdll() or sharedaix(); output_on() if windowsdll(); "" -}; \
		$(ECHO) "install $$s2 -> $(DESTDIR)$(libdir)/$$fn2"; \
		cp $$s2 $(DESTDIR)$(libdir)/$$fn2.new; \
		chmod 755 $(DESTDIR)$(libdir)/$$fn2.new; \
		mv -f $(DESTDIR)$(libdir)/$$fn2.new \
		      $(DESTDIR)$(libdir)/$$fn2; \
		: {- output_on() unless windowsdll(); "" -}; \
		: {- output_off() if windowsdll(); output_on() if sharedaix(); "" -}; \
		a=$(DESTDIR)$(libdir)/$$fn2; \
		$(ECHO) "install $$s1 -> $$a"; \
		if [ -f $$a ]; then ( trap "rm -rf /tmp/ar.$$$$" INT 0; \
			mkdir /tmp/ar.$$$$; ( cd /tmp/ar.$$$$; \
			cp -f $$a $$a.new; \
			for so in `$(AR) t $$a`; do \
				$(AR) x $$a $$so; \
				chmod u+w $$so; \
				strip -X32_64 -e $$so; \
				$(AR) r $$a.new $$so; \
			done; \
		)); fi; \
		$(AR) r $$a.new $$s1; \
		mv -f $$a.new $$a; \
		: {- output_off() if sharedaix(); output_on(); "" -}; \
	done
	@ : {- output_on() if $disabled{shared}; "" -}
	@$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(libdir)/pkgconfig
@@ -562,11 +581,11 @@ uninstall_dev:
		fn1=`basename $$s1`; \
		fn2=`basename $$s2`; \
		: {- output_off() if windowsdll(); "" -}; \
		$(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn1"; \
		$(RM) $(DESTDIR)$(libdir)/$$fn1; \
		if [ "$$fn1" != "$$fn2" ]; then \
		$(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn2"; \
		$(RM) $(DESTDIR)$(libdir)/$$fn2; \
		if [ "$$fn1" != "$$fn2" -a -f "$(DESTDIR)$(libdir)/$$fn1" ]; then \
			$(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn1"; \
			$(RM) $(DESTDIR)$(libdir)/$$fn1; \
		fi; \
		: {- output_on() if windowsdll(); "" -}{- output_off() unless windowsdll(); "" -}; \
		$(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn2"; \
@@ -1104,6 +1123,11 @@ EOF
	cp -p $shlib'\$(SHLIB_EXT)' apps/
	cp -p $shlib'\$(SHLIB_EXT)' test/
	cp -p $shlib'\$(SHLIB_EXT)' fuzz/
EOF
      } elsif (sharedaix()) {
          $recipe .= <<"EOF";
	rm -f $target && \\
	\$(AR) r $target $target_full
EOF
      } else {
          $recipe .= <<"EOF";
@@ -1168,8 +1192,8 @@ EOF
          push @linkdirs, $d unless grep { $d eq $_ } @linkdirs;
      }
      my $linkflags = join("", map { "-L$_ " } @linkdirs);
      my $linklibs = join("", map { if ($_ =~ /\.a$/) {
                                        " $_";
      my $linklibs = join("", map { if ($_ =~ s/\.a$//) {
                                        " $_$libext";
                                    } else {
                                        my $f = basename($_);
                                        (my $l = $f) =~ s/^lib//;