]> granicus.if.org Git - postgresql/blobdiff - src/tools/msvc/VSObjectFactory.pm
Fix compile-time warnings on all perl code
[postgresql] / src / tools / msvc / VSObjectFactory.pm
index d255becfe8b9751cd0ebe99b990e0cd6a2b9fe38..3745f8f8a1ae90473673b6f5bb9fa782defe7020 100644 (file)
@@ -20,6 +20,8 @@ our (@ISA, @EXPORT);
 @ISA    = qw(Exporter);
 @EXPORT = qw(CreateSolution CreateProject DetermineVisualStudioVersion);
 
+no warnings qw(redefine); ## no critic
+
 sub CreateSolution
 {
        my $visualStudioVersion = shift;
@@ -49,8 +51,20 @@ sub CreateSolution
        {
                return new VS2013Solution(@_);
        }
+       elsif ($visualStudioVersion eq '14.00')
+       {
+               return new VS2015Solution(@_);
+       }
+
+       # visual 2017 hasn't changed the nmake version to 15, so adjust the check to support it.
+       elsif (($visualStudioVersion ge '14.10')
+               or ($visualStudioVersion eq '15.00'))
+       {
+               return new VS2017Solution(@_);
+       }
        else
        {
+               croak $visualStudioVersion;
                croak "The requested Visual Studio version is not supported.";
        }
 }
@@ -84,55 +98,58 @@ sub CreateProject
        {
                return new VC2013Project(@_);
        }
+       elsif ($visualStudioVersion eq '14.00')
+       {
+               return new VC2015Project(@_);
+       }
+
+       # visual 2017 hasn't changed the nmake version to 15, so adjust the check to support it.
+       elsif (($visualStudioVersion ge '14.10')
+               or ($visualStudioVersion eq '15.00'))
+       {
+               return new VC2017Project(@_);
+       }
        else
        {
+               croak $visualStudioVersion;
                croak "The requested Visual Studio version is not supported.";
        }
 }
 
 sub DetermineVisualStudioVersion
 {
-       my $nmakeVersion = shift;
-
-       if (!defined($nmakeVersion))
-       {
 
-# Determine version of nmake command, to set proper version of visual studio
-# we use nmake as it has existed for a long time and still exists in current visual studio versions
-               open(P, "nmake /? 2>&1 |")
-                 || croak
-"Unable to determine Visual Studio version: The nmake command wasn't found.";
-               while (<P>)
-               {
-                       chomp;
-                       if (/(\d+)\.(\d+)\.\d+(\.\d+)?$/)
-                       {
-                               return _GetVisualStudioVersion($1, $2);
-                       }
-               }
-               close(P);
-       }
-       elsif ($nmakeVersion =~ /(\d+)\.(\d+)\.\d+(\.\d+)?$/)
+       # 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+)?$/m)
        {
                return _GetVisualStudioVersion($1, $2);
        }
+
        croak
-"Unable to determine Visual Studio version: The nmake version could not be determined.";
+         "Unable to determine Visual Studio version: The nmake version could not be determined.";
 }
 
 sub _GetVisualStudioVersion
 {
        my ($major, $minor) = @_;
-       if ($major > 12)
+
+       # visual 2017 hasn't changed the nmake version to 15, so still using the older version for comparison.
+       if ($major > 14)
        {
                carp
-"The determined version of Visual Studio is newer than the latest supported version. Returning the latest supported version instead.";
-               return '12.00';
+                 "The determined version of Visual Studio is newer than the latest supported version. Returning the latest supported version instead.";
+               return '14.00';
        }
        elsif ($major < 6)
        {
                croak
-"Unable to determine Visual Studio version: Visual Studio versions before 6.0 aren't supported.";
+                 "Unable to determine Visual Studio version: Visual Studio versions before 6.0 aren't supported.";
        }
        return "$major.$minor";
 }