From 957689611b355f3514bd9051829f3a9a0d9d4517 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Tue, 23 Oct 2018 14:36:23 +0200 Subject: Rework building: Windows changes to handle extensions and product names Add platform::Windows, which is a generic Windows module, and platform::Windows::MSVC, which is a module specifically for MS Visual C. This reworks Configurations/windows-makeffile.tmpl to work out product names in platform::Windows. Something to be noted is that the new functionality ignores the *_extension config attributes, as they were never used. Reviewed-by: Tim Hudson Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/7473) --- Configurations/platform/Windows.pm | 65 +++++++++++++++++++++++++++++++++ Configurations/platform/Windows/MSVC.pm | 33 +++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 Configurations/platform/Windows.pm create mode 100644 Configurations/platform/Windows/MSVC.pm (limited to 'Configurations/platform') diff --git a/Configurations/platform/Windows.pm b/Configurations/platform/Windows.pm new file mode 100644 index 0000000000..3e13f6e86f --- /dev/null +++ b/Configurations/platform/Windows.pm @@ -0,0 +1,65 @@ +package platform::Windows; + +use strict; +use warnings; +use Carp; + +use vars qw(@ISA); + +require platform::BASE; +@ISA = qw(platform::BASE); + +# Assume someone set @INC right before loading this module +use configdata; + +sub binext { '.exe' } +sub dsoext { '.dll' } +sub shlibext { '.dll' } +sub libext { '.lib' } +sub defext { '.def' } +sub objext { '.obj' } +sub depext { '.d' } +sub asmext { '.asm' } + +# Other extra that aren't defined in platform::BASE +sub resext { '.res' } +sub shlibextimport { '.lib' } +sub shlibvariant { $target{shlib_variant} || '' } + +sub staticname { + # Non-installed libraries are *always* static, and their names remain + # the same, except for the mandatory extension + my $in_libname = platform::BASE->staticname($_[1]); + return $in_libname + unless ( grep { platform::BASE->staticname($_) eq $in_libname } + @{$unified_info{install}->{libraries}} ); + + # To make sure not to clash with an import library, we make the static + # variant of our installed libraries get '_static' added to their names. + return platform::BASE->staticname($_[1]) + . ($disabled{shared} ? '' : '_static'); +} + +# To mark forward compatibility, we include the OpenSSL major release version +# number in the installed shared library names. +(my $sover_filename = $config{shlib_version}) =~ s|\.|_|g; +sub shlib_version_as_filename { + return $sover_filename +} +sub sharedname { + return platform::BASE::__concat(platform::BASE->sharedname($_[1]), + "-", + $_[0]->shlib_version_as_filename(), + ($_[0]->shlibvariant() // '')); +} + +sub sharedname_import { + return platform::BASE::__isshared($_[1]) ? $_[1] : undef; +} + +sub sharedlib_import { + return platform::BASE::__concat($_[0]->sharedname_import($_[1]), + $_[0]->shlibextimport()); +} + +1; diff --git a/Configurations/platform/Windows/MSVC.pm b/Configurations/platform/Windows/MSVC.pm new file mode 100644 index 0000000000..6109749221 --- /dev/null +++ b/Configurations/platform/Windows/MSVC.pm @@ -0,0 +1,33 @@ +package platform::Windows::MSVC; + +use strict; +use warnings; +use Carp; + +use vars qw(@ISA); + +require platform::Windows; +@ISA = qw(platform::Windows); + +# Assume someone set @INC right before loading this module +use configdata; + +sub pdbext { '.pdb' } + +sub staticlibpdb { + return platform::BASE::__concat($_[0]->staticname($_[1]), $_[0]->pdbext()); +} + +sub sharedlibpdb { + return platform::BASE::__concat($_[0]->sharedname($_[1]), $_[0]->pdbext()); +} + +sub dsopdb { + return platform::BASE::__concat($_[0]->dsoname($_[1]), $_[0]->pdbext()); +} + +sub binpdb { + return platform::BASE::__concat($_[0]->binname($_[1]), $_[0]->pdbext()); +} + +1; -- cgit v1.2.3