diff options
Diffstat (limited to 'src/tools/msvc/VSObjectFactory.pm')
-rw-r--r-- | src/tools/msvc/VSObjectFactory.pm | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/src/tools/msvc/VSObjectFactory.pm b/src/tools/msvc/VSObjectFactory.pm deleted file mode 100644 index 9df2ab4282a..00000000000 --- a/src/tools/msvc/VSObjectFactory.pm +++ /dev/null @@ -1,174 +0,0 @@ - -# Copyright (c) 2021-2023, PostgreSQL Global Development Group - -package VSObjectFactory; - -# -# Package that creates Visual Studio wrapper objects for msvc build -# -# src/tools/msvc/VSObjectFactory.pm -# - -use Carp; -use strict; -use warnings; - -use Exporter; -use Project; -use Solution; -use MSBuildProject; - -our (@ISA, @EXPORT); -@ISA = qw(Exporter); -@EXPORT = qw(CreateSolution CreateProject DetermineVisualStudioVersion); - -no warnings qw(redefine); ## no critic - -sub CreateSolution -{ - my $visualStudioVersion = shift; - - if (!defined($visualStudioVersion)) - { - $visualStudioVersion = DetermineVisualStudioVersion(); - } - - if ($visualStudioVersion eq '14.00') - { - return new VS2015Solution(@_); - } - - # The version of nmake bundled in Visual Studio 2017 is greater - # than 14.10 and less than 14.20. And the version number is - # actually 15.00. - elsif ( - ($visualStudioVersion ge '14.10' && $visualStudioVersion lt '14.20') - || $visualStudioVersion eq '15.00') - { - return new VS2017Solution(@_); - } - - # The version of nmake bundled in Visual Studio 2019 is greater - # than 14.20 and less than 14.30. And the version number is - # actually 16.00. - elsif ( - ($visualStudioVersion ge '14.20' && $visualStudioVersion lt '14.30') - || $visualStudioVersion eq '16.00') - { - return new VS2019Solution(@_); - } - - # The version of nmake bundled in Visual Studio 2022 is greater - # than 14.30 and less than 14.40. And the version number is - # actually 17.00. - elsif ( - ($visualStudioVersion ge '14.30' && $visualStudioVersion lt '14.40') - || $visualStudioVersion eq '17.00') - { - return new VS2022Solution(@_); - } - else - { - croak - "The requested Visual Studio version $visualStudioVersion is not supported."; - } -} - -sub CreateProject -{ - my $visualStudioVersion = shift; - - if (!defined($visualStudioVersion)) - { - $visualStudioVersion = DetermineVisualStudioVersion(); - } - - if ($visualStudioVersion eq '14.00') - { - return new VC2015Project(@_); - } - - # The version of nmake bundled in Visual Studio 2017 is greater - # than 14.10 and less than 14.20. And the version number is - # actually 15.00. - elsif ( - ($visualStudioVersion ge '14.10' && $visualStudioVersion lt '14.20') - || $visualStudioVersion eq '15.00') - { - return new VC2017Project(@_); - } - - # The version of nmake bundled in Visual Studio 2019 is greater - # than 14.20 and less than 14.30. And the version number is - # actually 16.00. - elsif ( - ($visualStudioVersion ge '14.20' && $visualStudioVersion lt '14.30') - || $visualStudioVersion eq '16.00') - { - return new VC2019Project(@_); - } - - # The version of nmake bundled in Visual Studio 2022 is greater - # than 14.30 and less than 14.40. And the version number is - # actually 17.00. - elsif ( - ($visualStudioVersion ge '14.30' && $visualStudioVersion lt '14.40') - || $visualStudioVersion eq '17.00') - { - return new VC2022Project(@_); - } - else - { - croak - "The requested Visual Studio version $visualStudioVersion is not supported."; - } -} - -sub DetermineVisualStudioVersion -{ - if ($^O eq "MSWin32") - { - # To determine version of Visual Studio we use nmake as it has - # existed for a long time and still exists in current Visual - # Studio versions. - my $output = `nmake /? 2>&1`; - $? >> 8 == 0 - or croak - "Unable to determine Visual Studio version: The nmake command wasn't found."; - if ($output =~ /(\d+)\.(\d+)\.\d+(\.\d+)?/) - { - return _GetVisualStudioVersion($1, $2); - } - - croak - "Unable to determine Visual Studio version: The nmake version could not be determined."; - } - else - { - # fake version - return '17.00'; - } -} - -sub _GetVisualStudioVersion -{ - my ($major, $minor) = @_; - - # The major visual studio that is supported has nmake - # version <= 14.40, so stick with it as the latest version - # if bumping on something even newer. - if ($major >= 14 && $minor >= 40) - { - carp - "The determined version of Visual Studio is newer than the latest supported version. Returning the latest supported version instead."; - return '14.30'; - } - elsif ($major < 12) - { - croak - "Unable to determine Visual Studio version: Visual Studio versions before 12.0 aren't supported."; - } - return "$major.$minor"; -} - -1; |