Visual Studio 2017 Build Support

Started by Tanay Varmaover 8 years ago2 messages
#1Tanay Varma
Tanay.Varma@microsoft.com
2 attachment(s)

Hello,

This is with respect to the original thread on "visual studio 2017 build support" created by Haribabu Kommi (kommi.haribabu@gmail.com).
</messages/by-id/CAJrrPGcZpraBCe6fJ963kVzKdM7AWPTYmXJ=8neaP87Wed9qvA@mail.gmail.com&gt;
/messages/by-id/CAJrrPGcZpraBCe6fJ963kVzKdM7AWPTYmXJ=8neaP87Wed9qvA@mail.gmail.com

Firstly, I would like to thank Haribabu Kommi for authoring the patch.

I am posting a small update to the final patch submitted by Haribabu Kommi to also support the recent v15.3 Release of Visual Stuido 2017 which upgrades the VC tools to version 14.11.

It would be great if this patch could be accepted so that Postgres could be built using the latest VS tools.

I have attached a copy of the output of the regression tests to confirm that this patch works. (check.txt)

Thanks,

Tanay Varma

Attachments:

0001-VS-2017-build-support-to-PostgreSQL-updated.patchapplication/octet-stream; name=0001-VS-2017-build-support-to-PostgreSQL-updated.patchDownload
diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgml
index 1861e7e..b4c403a 100644
--- a/doc/src/sgml/install-windows.sgml
+++ b/doc/src/sgml/install-windows.sgml
@@ -19,10 +19,10 @@
  <para>
   There are several different ways of building PostgreSQL on
   <productname>Windows</productname>. The simplest way to build with
-  Microsoft tools is to install <productname>Visual Studio Express 2015
+  Microsoft tools is to install <productname>Visual Studio Express 2017
   for Windows Desktop</productname> and use the included
   compiler. It is also possible to build with the full
-  <productname>Microsoft Visual C++ 2005 to 2015</productname>.
+  <productname>Microsoft Visual C++ 2005 to 2017</productname>.
   In some cases that requires the installation of the
   <productname>Windows SDK</productname> in addition to the compiler.
  </para>
@@ -69,19 +69,19 @@
   <productname>Visual Studio Express</productname> or some versions of the
   <productname>Microsoft Windows SDK</productname>. If you do not already have a
   <productname>Visual Studio</productname> environment set up, the easiest
-  ways are to use the compilers from <productname>Visual Studio Express 2015
+  ways are to use the compilers from <productname>Visual Studio Express 2017
   for Windows Desktop</productname> or those in the <productname>Windows SDK
-  7.1</productname>, which are both free downloads from Microsoft.
+  8.1</productname>, which are both free downloads from Microsoft.
  </para>
 
  <para>
   Both 32-bit and 64-bit builds are possible with the Microsoft Compiler suite.
   32-bit PostgreSQL builds are possible with
   <productname>Visual Studio 2005</productname> to
-  <productname>Visual Studio 2015</productname> (including Express editions),
-  as well as standalone Windows SDK releases 6.0 to 7.1.
+  <productname>Visual Studio 2017</productname> (including Express editions),
+  as well as standalone Windows SDK releases 6.0 to 8.1.
   64-bit PostgreSQL builds are supported with
-  <productname>Microsoft Windows SDK</productname> version 6.0a to 7.1 or
+  <productname>Microsoft Windows SDK</productname> version 6.0a to 8.1 or
   <productname>Visual Studio 2008</productname> and above. Compilation
   is supported down to <productname>Windows XP</productname> and
   <productname>Windows Server 2003</> when building with
@@ -89,6 +89,8 @@
   <productname>Visual Studio 2013</productname>. Building with
   <productname>Visual Studio 2015</productname> is supported down to
   <productname>Windows Vista</> and <productname>Windows Server 2008</>.
+   Building with <productname>Visual Studio 2017</productname> is supported
+   down to <productname>Windows 7 SP1</> and <productname>Windows Server 2012 R2</>.
  </para>
 
  <para>
diff --git a/src/tools/msvc/MSBuildProject.pm b/src/tools/msvc/MSBuildProject.pm
index 27329f9..d58c1fd 100644
--- a/src/tools/msvc/MSBuildProject.pm
+++ b/src/tools/msvc/MSBuildProject.pm
@@ -483,4 +483,27 @@ sub new
 	return $self;
 }
 
+package VC2017Project;
+
+#
+# Package that encapsulates a Visual C++ 2017 project file
+#
+
+use strict;
+use warnings;
+use base qw(VC2012Project);
+
+sub new
+{
+	my $classname = shift;
+	my $self      = $classname->SUPER::_new(@_);
+	bless($self, $classname);
+
+	$self->{vcver}           = '14.10';
+	$self->{PlatformToolset} = 'v141';
+	$self->{ToolsVersion}    = '14.1';
+
+	return $self;
+}
+
 1;
diff --git a/src/tools/msvc/README b/src/tools/msvc/README
index b61ddb8..48082ca 100644
--- a/src/tools/msvc/README
+++ b/src/tools/msvc/README
@@ -4,7 +4,7 @@ MSVC build
 ==========
 
 This directory contains the tools required to build PostgreSQL using
-Microsoft Visual Studio 2005 - 2011. This builds the whole backend, not just
+Microsoft Visual Studio 2005 - 2017. This builds the whole backend, not just
 the libpq frontend library. For more information, see the documentation
 chapter "Installation on Windows" and the description below.
 
@@ -92,11 +92,12 @@ These configuration arguments are passed over to Mkvcbuild::mkvcbuild
 (Mkvcbuild.pm) which creates the Visual Studio project and solution files.
 It does this by using VSObjectFactory::CreateSolution to create an object
 implementing the Solution interface (this could be either a VS2005Solution,
-a VS2008Solution, a VS2010Solution or a VS2012Solution, all in Solution.pm,
-depending on the user's build environment) and adding objects implementing
-the corresponding Project interface (VC2005Project or VC2008Project from
-VCBuildProject.pm or VC2010Project or VC2012Project from MSBuildProject.pm)
-to it.
+a VS2008Solution, a VS2010Solution or a VS2012Solution or a VS2013Solution,
+or a VS2015Solution or a VS2017Solution, all in Solution.pm, depending on
+the user's build environment) and adding objects implementing the corresponding
+Project interface (VC2005Project or VC2008Project from VCBuildProject.pm or
+VC2010Project or VC2012Project or VC2013Project or VC2015Project or VC2017Project
+from MSBuildProject.pm) to it.
 When Solution::Save is called, the implementations of Solution and Project
 save their content in the appropriate format.
 The final step of starting the appropriate build program (msbuild or vcbuild)
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index 01e5846..448ff04 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -851,6 +851,32 @@ sub new
 	return $self;
 }
 
+package VS2017Solution;
+
+#
+# Package that encapsulates a Visual Studio 2017 solution file
+#
+
+use Carp;
+use strict;
+use warnings;
+use base qw(Solution);
+
+sub new
+{
+	my $classname = shift;
+	my $self      = $classname->SUPER::_new(@_);
+	bless($self, $classname);
+
+	$self->{solutionFileVersion}        = '12.00';
+	$self->{vcver}                      = '14.10';
+	$self->{visualStudioName}           = 'Visual Studio 2017';
+	$self->{VisualStudioVersion}        = '14.10.25019.0';
+	$self->{MinimumVisualStudioVersion} = '10.0.40219.1';
+
+	return $self;
+}
+
 sub GetAdditionalHeaders
 {
 	my ($self, $f) = @_;
diff --git a/src/tools/msvc/VSObjectFactory.pm b/src/tools/msvc/VSObjectFactory.pm
index 4190ada..1630bf7 100644
--- a/src/tools/msvc/VSObjectFactory.pm
+++ b/src/tools/msvc/VSObjectFactory.pm
@@ -53,8 +53,13 @@ sub CreateSolution
 	{
 		return new VS2015Solution(@_);
 	}
+	elsif ($visualStudioVersion eq '14.10' || $visualStudioVersion eq '14.11')
+	{
+		return new VS2017Solution(@_);
+	}
 	else
 	{
+		croak $visualStudioVersion;
 		croak "The requested Visual Studio version is not supported.";
 	}
 }
@@ -92,6 +97,10 @@ sub CreateProject
 	{
 		return new VC2015Project(@_);
 	}
+	elsif ($visualStudioVersion eq '14.10')
+	{
+		return new VC2017Project(@_);
+	}
 	else
 	{
 		croak "The requested Visual Studio version is not supported.";
check.txttext/plain; name=check.txtDownload
#2Haribabu Kommi
kommi.haribabu@gmail.com
In reply to: Tanay Varma (#1)
Re: Visual Studio 2017 Build Support

On Fri, Sep 1, 2017 at 11:06 AM, Tanay Varma <Tanay.Varma@microsoft.com>
wrote:

Hello,

This is with respect to the original thread on “visual studio 2017 build
support” created by Haribabu Kommi (kommi.haribabu@gmail.com).

</messages/by-id/CAJrrPGcZpraBCe6fJ963kVzKdM7AWPTYmXJ=8neaP87Wed9qvA@mail.gmail.com&gt;

/messages/by-id/CAJrrPGcZpraBCe6fJ963kVzKdM7AW
PTYmXJ=8neaP87Wed9qvA@mail.gmail.com

Firstly, I would like to thank Haribabu Kommi for authoring the patch.

I am posting a small update to the final patch submitted by Haribabu Kommi
to also support the recent* v15.3 Release of Visual Stuido 2017 which
upgrades the VC tools to version 14.11.*

It would be great if this patch could be accepted so that Postgres could
be built using the latest VS tools.

Hi,

Thanks for the review and change the patch to support the latest VS 2017.
In [1]/messages/by-id/CAJrrPGe=4jMkREOffnaDU93OerJwkVborPGE5O1Z1h1Jj-hUrg@mail.gmail.com, I already posted an updated patch that provides the support for
latest VS 2017,
may be you could have missed to check it. And also that patch includes the
fix for any
future version number updates from VS 2017.

[1]: /messages/by-id/CAJrrPGe=4jMkREOffnaDU93OerJwkVborPGE5O1Z1h1Jj-hUrg@mail.gmail.com
/messages/by-id/CAJrrPGe=4jMkREOffnaDU93OerJwkVborPGE5O1Z1h1Jj-hUrg@mail.gmail.com

Regards,
Hari Babu
Fujitsu Australia