Commit 85299451 authored by Richard Levitte's avatar Richard Levitte
Browse files

Windows: Produce a static version of the public libraries, always



When building shared libraries on Windows, we had a clash between
'libcrypto.lib' the static routine library and 'libcrypto.lib' the
import library.

We now change it so the static versions of our libraries get '_static'
appended to their names.  These will never get installed, but can
still be used for our internal purposes, such as internal tests.

When building non-shared, the renaming mechanism doesn't come into
play.  In that case, the static libraries 'libcrypto.lib' and
'libssl.lib' are installed, just as always.

Fixes #7492

Reviewed-by: default avatarTim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/7496)

(cherry picked from commit b3023ced6b6a4aece6f4d4ec1f6a93b1c03712b6)
parent 28361a0b
Loading
Loading
Loading
Loading
+7 −17
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@

 sub lib {
     (my $lib = shift) =~ s/\.a$//;
     $lib .= '_static'
         if (defined $unified_info{sharednames}->{$lib});
     return $lib . $libext;
 }

@@ -74,7 +76,7 @@ MINOR={- $config{minor} -}

SHLIB_VERSION_NUMBER={- $config{shlib_version_number} -}

LIBS={- join(" ", map { lib($_) } @{$unified_info{libraries}}) -}
LIBS={- join(" ", map { ( shlib_import($_), lib($_) ) } @{$unified_info{libraries}}) -}
SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{libraries}}) -}
SHLIBPDBS={- join(" ", map { local $shlibext = ".pdb"; shlib($_) } @{$unified_info{libraries}}) -}
ENGINES={- join(" ", map { dso($_) } @{$unified_info{engines}}) -}
@@ -92,7 +94,7 @@ GENERATED={- # common0.tmpl provides @generated
             join(" ", map { (my $x = $_) =~ s|\.[sS]$|.asm|; $x }
                       @generated) -}

INSTALL_LIBS={- join(" ", map { quotify1(lib($_)) } @{$unified_info{install}->{libraries}}) -}
INSTALL_LIBS={- join(" ", map { quotify1(shlib_import($_) or lib($_)) } @{$unified_info{install}->{libraries}}) -}
INSTALL_SHLIBS={- join(" ", map { quotify_l(shlib($_)) } @{$unified_info{install}->{libraries}}) -}
INSTALL_SHLIBPDBS={- join(" ", map { local $shlibext = ".pdb"; quotify_l(shlib($_)) } @{$unified_info{install}->{libraries}}) -}
INSTALL_ENGINES={- join(" ", map { quotify1(dso($_)) } @{$unified_info{install}->{engines}}) -}
@@ -486,11 +488,6 @@ reconfigure reconf:
     if ($disabled{shared}) {
	 return map { lib($_) } @_;
     }
     foreach (@_) {
         (my $l = $_) =~ s/\.a$//;
         die "Linking with static variants of shared libraries is not supported in this configuration\n"
             if $l ne $_ && shlib($l);
     }
     return map { shlib_import($_) or lib($_) } @_;
 }

@@ -677,20 +674,13 @@ EOF
 }
 sub obj2lib {
     my %args = @_;
     my $lib = $args{lib};

     # Because static libs and import libs are both named the same in native
     # Windows, we can't have both.  We skip the static lib in that case,
     # as the shared libs are what we use anyway.
     return "" unless $disabled{"shared"} || $lib =~ /\.a$/;

     $lib =~ s/\.a$//;
     my $lib = lib($args{lib});
     my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } @{$args{objs}};
     my $objs = join("\n", @objs);
     my $deps = join(" ", @objs);
     return <<"EOF";
$lib$libext: $deps
	\$(AR) \$(ARFLAGS) \$(AROUTFLAG)$lib$libext @<<
$lib: $deps
	\$(AR) \$(ARFLAGS) \$(AROUTFLAG)$lib @<<
$objs
<<
EOF
+2 −4
Original line number Diff line number Diff line
@@ -434,10 +434,8 @@ INCLUDE_MAIN___test_libtestutil_OLB = /INCLUDE=MAIN
  # available through the shared library (at least on Linux, Solaris, Windows
  # and VMS, where the exported symbols are those listed in util/*.num), these
  # programs are forcibly linked with the static libraries, where all symbols
  # are always available.  This excludes linking these programs natively on
  # Windows when building shared libraries, since the static libraries share
  # names with the DLL import libraries.
  IF[{- $disabled{shared} || $target{build_scheme}->[1] ne 'windows' -}]
  # are always available.
  IF[1]
    PROGRAMS_NO_INST=asn1_internal_test modes_internal_test x509_internal_test \
                     tls13encryptiontest wpackettest ctype_internal_test \
                     rdrand_sanitytest