mirror of
https://github.com/postgres/postgres.git
synced 2025-06-27 23:21:58 +03:00
Support for building with MS Visual Studio 2010.
Brar Piening, reviewed by Craig Ringer.
This commit is contained in:
122
src/tools/msvc/VSObjectFactory.pm
Normal file
122
src/tools/msvc/VSObjectFactory.pm
Normal file
@ -0,0 +1,122 @@
|
||||
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 VCBuildProject;
|
||||
use MSBuildProject;
|
||||
|
||||
our (@ISA, @EXPORT);
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(CreateSolution CreateProject DetermineVisualStudioVersion);
|
||||
|
||||
sub CreateSolution
|
||||
{
|
||||
my $visualStudioVersion = shift;
|
||||
|
||||
if (!defined($visualStudioVersion))
|
||||
{
|
||||
$visualStudioVersion = DetermineVisualStudioVersion();
|
||||
}
|
||||
|
||||
if ($visualStudioVersion eq '8.00')
|
||||
{
|
||||
return new VS2005Solution(@_);
|
||||
}
|
||||
elsif ($visualStudioVersion eq '9.00')
|
||||
{
|
||||
return new VS2008Solution(@_);
|
||||
}
|
||||
elsif ($visualStudioVersion eq '10.00')
|
||||
{
|
||||
return new VS2010Solution(@_);
|
||||
}
|
||||
else
|
||||
{
|
||||
croak "The requested Visual Studio version is not supported.";
|
||||
}
|
||||
}
|
||||
|
||||
sub CreateProject
|
||||
{
|
||||
my $visualStudioVersion = shift;
|
||||
|
||||
if (!defined($visualStudioVersion))
|
||||
{
|
||||
$visualStudioVersion = DetermineVisualStudioVersion();
|
||||
}
|
||||
|
||||
if ($visualStudioVersion eq '8.00')
|
||||
{
|
||||
return new VC2005Project(@_);
|
||||
}
|
||||
elsif ($visualStudioVersion eq '9.00')
|
||||
{
|
||||
return new VC2008Project(@_);
|
||||
}
|
||||
elsif ($visualStudioVersion eq '10.00')
|
||||
{
|
||||
return new VC2010Project(@_);
|
||||
}
|
||||
else
|
||||
{
|
||||
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 verison of visual studio
|
||||
# we use nmake as it has existed for a long time and still exists in visual studio 2010
|
||||
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+)?$/)
|
||||
{
|
||||
return _GetVisualStudioVersion($1, $2);
|
||||
}
|
||||
croak "Unable to determine Visual Studio version: The nmake version could not be determined.";
|
||||
}
|
||||
|
||||
sub _GetVisualStudioVersion
|
||||
{
|
||||
my($major, $minor) = @_;
|
||||
if ($major > 10)
|
||||
{
|
||||
carp
|
||||
"The determined version of Visual Studio is newer than the latest supported version. Returning the latest supported version instead.";
|
||||
return '10.00';
|
||||
}
|
||||
elsif ($major < 6)
|
||||
{
|
||||
croak
|
||||
"Unable to determine Visual Studio version: Visual Studio versions before 6.0 aren't supported.";
|
||||
}
|
||||
return "$major.$minor";
|
||||
}
|
||||
|
||||
1;
|
Reference in New Issue
Block a user