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: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/6487)
This commit is contained in:
parent
b48d4397b8
commit
cff89b179c
2 changed files with 40 additions and 11 deletions
|
@ -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"),
|
||||
},
|
||||
|
|
|
@ -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; \
|
||||
$(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//;
|
||||
|
|
Loading…
Reference in a new issue