mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	Support building with Visual Studio 2017
Haribabu Kommi, reviewed by Takeshi Ideriha and Christian Ullrich Backpatch to 9.6
This commit is contained in:
		
							parent
							
								
									8485a25a8c
								
							
						
					
					
						commit
						f2ab3898f3
					
				| @ -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 2008 R2 SP1</>. | ||||
|  </para> | ||||
| 
 | ||||
|  <para> | ||||
|  | ||||
| @ -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}           = '15.00'; | ||||
| 	$self->{PlatformToolset} = 'v141'; | ||||
| 	$self->{ToolsVersion}    = '15.0'; | ||||
| 
 | ||||
| 	return $self; | ||||
| } | ||||
| 
 | ||||
| 1; | ||||
|  | ||||
| @ -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) | ||||
|  | ||||
| @ -849,6 +849,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}                      = '15.00'; | ||||
| 	$self->{visualStudioName}           = 'Visual Studio 2017'; | ||||
| 	$self->{VisualStudioVersion}        = '15.0.26730.3'; | ||||
| 	$self->{MinimumVisualStudioVersion} = '10.0.40219.1'; | ||||
| 
 | ||||
| 	return $self; | ||||
| } | ||||
| 
 | ||||
| sub GetAdditionalHeaders | ||||
| { | ||||
| 	my ($self, $f) = @_; | ||||
|  | ||||
| @ -53,8 +53,14 @@ sub CreateSolution | ||||
| 	{ | ||||
| 		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."; | ||||
| 	} | ||||
| } | ||||
| @ -92,8 +98,14 @@ sub CreateProject | ||||
| 	{ | ||||
| 		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."; | ||||
| 	} | ||||
| } | ||||
| @ -120,6 +132,7 @@ sub DetermineVisualStudioVersion | ||||
| sub _GetVisualStudioVersion | ||||
| { | ||||
| 	my ($major, $minor) = @_; | ||||
| 	# visual 2017 hasn't changed the nmake version to 15, so still using the older version for comparison. | ||||
| 	if ($major > 14) | ||||
| 	{ | ||||
| 		carp | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user