diff -Napcdr -x .git postgresql/doc/src/sgml/install-windows.sgml postgresql_dev/doc/src/sgml/install-windows.sgml
*** postgresql/doc/src/sgml/install-windows.sgml Wed Sep 28 19:23:58 2011
--- postgresql_dev/doc/src/sgml/install-windows.sgml Wed Sep 28 19:32:22 2011
***************
*** 20,29 ****
There are several different ways of building PostgreSQL on
Windows. The simplest way to build with
Microsoft tools is to install a supported version of the
! Microsoft Platform SDK and use the included
compiler. It is also possible to build with the full
! Microsoft Visual C++ 2005 or 2008. In some cases
! that requires the installation of the Platform SDK
in addition to the compiler.
--- 20,29 ----
There are several different ways of building PostgreSQL on
Windows. The simplest way to build with
Microsoft tools is to install a supported version of the
! Microsoft Windows SDK and use the included
compiler. It is also possible to build with the full
! Microsoft Visual C++ 2005, 2008 or 2010. In some cases
! that requires the installation of the Windows SDK
in addition to the compiler.
***************
*** 69,100 ****
Building with Visual C++ or the
! Platform SDK
PostgreSQL can be built using the Visual C++ compiler suite from Microsoft.
These compilers can be either from Visual Studio,
Visual Studio Express or some versions of the
! Platform SDK. If you do not already have a
Visual Studio environment set up, the easiest
! way us to use the compilers in the Platform SDK,
which is a free download from Microsoft.
! PostgreSQL supports the compilers from
! Visual Studio 2005 and
! Visual Studio 2008. When using the Platform SDK
! only, or when building for 64-bit Windows, only
! Visual Studio 2008 is supported.
! Visual Studio 2010 is not yet supported.
!
!
!
! When building using the Platform SDK, versions
! 6.0 to 7.0 of the SDK are supported. Older or newer versions will not work.
! In particular, versions from 7.0a and later will not work, since
! they include compilers from Visual Studio 2010.
--- 69,94 ----
Building with Visual C++ or the
! Microsoft Windows SDK
PostgreSQL can be built using the Visual C++ compiler suite from Microsoft.
These compilers can be either from Visual Studio,
Visual Studio Express or some versions of the
! Microsoft Windows SDK. If you do not already have a
Visual Studio environment set up, the easiest
! way is to use the compilers in the Windows SDK,
which is a free download from Microsoft.
! PostgreSQL is known to support compilation using the compilers shipped with
! Visual Studio 2005 to
! Visual Studio 2010 (including Express editions),
! as well as standalone Windows SDK releases 6.0 to 7.1.
! 64-bit PostgreSQL builds are only supported with
! Microsoft Windows SDK version 6.0a and above or
! Visual Studio 2008 and above.
***************
*** 104,114 ****
Cygwin present in your system PATH. Also, make
sure you have all the required Visual C++ tools available in the PATH. In
Visual Studio, start the
! Visual Studio Command Prompt. In the
! Platform SDK, start the
! CMD shell listed under the SDK on the Start Menu.
If you wish to build a 64-bit version, you must use the 64-bit version of
the command, and vice versa.
All commands should be run from the src\tools\msvc
directory.
--- 98,110 ----
Cygwin present in your system PATH. Also, make
sure you have all the required Visual C++ tools available in the PATH. In
Visual Studio, start the
! Visual Studio Command Prompt.
If you wish to build a 64-bit version, you must use the 64-bit version of
the command, and vice versa.
+ In the Microsoft Windows SDK, start the
+ CMD shell listed under the SDK on the Start Menu.
+ In recent SDK versions you can change the targeted CPU architecture by using
+ the setenv command.
All commands should be run from the src\tools\msvc
directory.
*************** $ENV{PATH}=$ENV{PATH} . ';c:\some\where\
*** 148,164 ****
! Microsoft Platform SDK
It is recommended that you upgrade to the latest supported version
! of the Microsoft Platform SDK (currently
! version 7.0), available for download from
>.
You must always include the
Windows Headers and Libraries part of the SDK.
! If you install the Platform SDK
including the Visual C++ Compilers,
you don't need Visual Studio to build.
--- 144,160 ----
! Microsoft Windows SDK
It is recommended that you upgrade to the latest supported version
! of the Microsoft Windows SDK (currently
! version 7.1), available for download from
>.
You must always include the
Windows Headers and Libraries part of the SDK.
! If you install the Windows SDK
including the Visual C++ Compilers,
you don't need Visual Studio to build.
*************** $ENV{PATH}=$ENV{PATH} . ';c:\some\where\
*** 202,207 ****
--- 198,207 ----
Bison can be downloaded from >.
Flex can be downloaded from
>.
+ If you are using msysGit for accessing the
+ PostgreSQL Git repository you probably already
+ have recent versions of bison and flex in your Git
+ binary directory.
*************** $ENV{DOCROOT}='c:\docbook';
*** 479,485 ****
static library to link into an application. For normal use the
MinGW or
Visual Studio or
! Platform SDK method is recommended.
--- 479,485 ----
static library to link into an application. For normal use the
MinGW or
Visual Studio or
! Windows SDK method is recommended.
diff -Napcdr -x .git postgresql/src/tools/msvc/Install.pm postgresql_dev/src/tools/msvc/Install.pm
*** postgresql/src/tools/msvc/Install.pm Mon Aug 15 18:08:31 2011
--- postgresql_dev/src/tools/msvc/Install.pm Wed Sep 28 19:26:02 2011
*************** sub Install
*** 56,66 ****
my $majorver = DetermineMajorVersion();
print "Installing version $majorver for $conf in $target\n";
! EnsureDirectories(
! $target, 'bin', 'lib', 'share',
! 'share/timezonesets','share/extension', 'share/contrib','doc',
! 'doc/extension', 'doc/contrib','symbols', 'share/tsearch_data'
! );
CopySolutionOutput($conf, $target);
lcopy($target . '/lib/libpq.dll', $target . '/bin/libpq.dll');
--- 56,63 ----
my $majorver = DetermineMajorVersion();
print "Installing version $majorver for $conf in $target\n";
! EnsureDirectories($target, 'bin', 'lib', 'share','share/timezonesets','share/extension',
! 'share/contrib','doc','doc/extension', 'doc/contrib','symbols', 'share/tsearch_data');
CopySolutionOutput($conf, $target);
lcopy($target . '/lib/libpq.dll', $target . '/bin/libpq.dll');
*************** sub CopySolutionOutput
*** 186,191 ****
--- 183,195 ----
my $rem = qr{Project\("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"\) = "([^"]+)"};
my $sln = read_file("pgsql.sln") || croak "Could not open pgsql.sln\n";
+
+ my $vcproj = 'vcproj';
+ if ($sln =~ /Microsoft Visual Studio Solution File, Format Version (\d+)\.\d+/ && $1 >= 11)
+ {
+ $vcproj = 'vcxproj';
+ }
+
print "Copying build output files...";
while ($sln =~ $rem)
{
*************** sub CopySolutionOutput
*** 195,220 ****
$sln =~ s/$rem//;
! my $proj = read_file("$pf.vcproj") || croak "Could not open $pf.vcproj\n";
! if ($proj !~ qr{ConfigurationType="([^"]+)"})
! {
! croak "Could not parse $pf.vcproj\n";
! }
! if ($1 == 1)
{
! $dir = "bin";
! $ext = "exe";
}
! elsif ($1 == 2)
{
! $dir = "lib";
! $ext = "dll";
}
else
{
!
! # Static lib, such as libpgport, only used internally during build, don't install
! next;
}
lcopy("$conf\\$pf\\$pf.$ext","$target\\$dir\\$pf.$ext")
|| croak "Could not copy $pf.$ext\n";
--- 199,246 ----
$sln =~ s/$rem//;
! my $proj = read_file("$pf.$vcproj") || croak "Could not open $pf.$vcproj\n";
! if ($vcproj eq 'vcproj' && $proj =~ qr{ConfigurationType="([^"]+)"})
{
! if ($1 == 1)
! {
! $dir = "bin";
! $ext = "exe";
! }
! elsif ($1 == 2)
! {
! $dir = "lib";
! $ext = "dll";
! }
! else
! {
!
! # Static lib, such as libpgport, only used internally during build, don't install
! next;
! }
}
! elsif ($vcproj eq 'vcxproj' && $proj =~ qr{(\w+)})
{
! if ($1 eq 'Application')
! {
! $dir = "bin";
! $ext = "exe";
! }
! elsif ($1 eq 'DynamicLibrary')
! {
! $dir = "lib";
! $ext = "dll";
! }
! else # 'StaticLibrary'
! {
!
! # Static lib, such as libpgport, only used internally during build, don't install
! next;
! }
}
else
{
! croak "Could not parse $pf.$vcproj\n";
}
lcopy("$conf\\$pf\\$pf.$ext","$target\\$dir\\$pf.$ext")
|| croak "Could not copy $pf.$ext\n";
*************** sub CopyIncludeFiles
*** 470,477 ****
$target . '/include/server/',
'src/include/', 'pg_config.h', 'pg_config_os.h'
);
! CopyFiles('Grammar header', $target . '/include/server/parser/','src/backend/parser/',
! 'gram.h');
CopySetOfFiles('',[ glob("src\\include\\*.h") ],$target . '/include/server/');
my $D;
opendir($D, 'src/include') || croak "Could not opendir on src/include!\n";
--- 496,502 ----
$target . '/include/server/',
'src/include/', 'pg_config.h', 'pg_config_os.h'
);
! CopyFiles('Grammar header', $target . '/include/server/parser/','src/backend/parser/','gram.h');
CopySetOfFiles('',[ glob("src\\include\\*.h") ],$target . '/include/server/');
my $D;
opendir($D, 'src/include') || croak "Could not opendir on src/include!\n";
diff -Napcdr -x .git postgresql/src/tools/msvc/Mkvcbuild.pm postgresql_dev/src/tools/msvc/Mkvcbuild.pm
*** postgresql/src/tools/msvc/Mkvcbuild.pm Wed Sep 28 19:23:58 2011
--- postgresql_dev/src/tools/msvc/Mkvcbuild.pm Wed Sep 28 19:26:02 2011
*************** sub mkvcbuild
*** 45,51 ****
chdir('..\..\..') if (-d '..\msvc' && -d '..\..\..\src');
die 'Must run from root or msvc directory' unless (-d 'src\tools\msvc' && -d 'src');
! $solution = new Solution($config);
our @pgportfiles = qw(
chklocale.c crypt.c fseeko.c getrusage.c inet_aton.c random.c srandom.c
--- 45,53 ----
chdir('..\..\..') if (-d '..\msvc' && -d '..\..\..\src');
die 'Must run from root or msvc directory' unless (-d 'src\tools\msvc' && -d 'src');
! my $vsVersion = VSObjectFactory::DetermineVisualStudioVersion();
!
! $solution = VSObjectFactory::CreateSolution($vsVersion, $config);
our @pgportfiles = qw(
chklocale.c crypt.c fseeko.c getrusage.c inet_aton.c random.c srandom.c
*************** sub mkvcbuild
*** 490,495 ****
--- 492,498 ----
$pgregress->AddReference($libpgport);
$solution->Save();
+ return $solution->{vcver};
}
#####################
diff -Napcdr -x .git postgresql/src/tools/msvc/Project.pm postgresql_dev/src/tools/msvc/Project.pm
*** postgresql/src/tools/msvc/Project.pm Mon Aug 15 18:08:31 2011
--- postgresql_dev/src/tools/msvc/Project.pm Wed Sep 28 19:26:02 2011
*************** use strict;
*** 10,18 ****
use warnings;
use File::Basename;
! sub new
{
! my ($junk, $name, $type, $solution) = @_;
my $good_types = {
lib => 1,
exe => 1,
--- 10,18 ----
use warnings;
use File::Basename;
! sub _new
{
! my ($classname, $name, $type, $solution) = @_;
my $good_types = {
lib => 1,
exe => 1,
*************** sub new
*** 20,43 ****
};
confess("Bad project type: $type\n") unless exists $good_types->{$type};
my $self = {
! name => $name,
! type => $type,
! guid => Win32::GuidGen(),
! files => {},
! references => [],
! libraries => [],
! suffixlib => [],
! includes => '',
! prefixincludes => '',
! defines => ';',
! solution => $solution,
! disablewarnings => '4018;4244;4273;4102;4090;4267',
disablelinkerwarnings => '',
! vcver => $solution->{vcver},
! platform => $solution->{platform},
};
! bless $self;
return $self;
}
--- 20,46 ----
};
confess("Bad project type: $type\n") unless exists $good_types->{$type};
my $self = {
! name => $name,
! type => $type,
! guid => Win32::GuidGen(),
! files => {},
! references => [],
! libraries => [],
! suffixlib => [],
! includes => '',
! prefixincludes => '',
! defines => ';',
! solution => $solution,
! disablewarnings => '4018;4244;4273;4102;4090;4267',
disablelinkerwarnings => '',
!
! # vcver has to be set in derived classes
! vcver => undef,
! filenameExtension => '.vcproj',
! platform => $solution->{platform},
};
! bless($self, $classname);
return $self;
}
*************** sub Save
*** 355,371 ****
$self->DisableLinkerWarnings('4197') if ($self->{platform} eq 'x64');
# Dump the project
! open(F, ">$self->{name}.vcproj") || croak("Could not write to $self->{name}.vcproj\n");
$self->WriteHeader(*F);
! $self->WriteReferences(*F);
! print F <
EOF
my @dirstack = ();
my %uniquefiles;
! foreach my $f (sort keys %{ $self->{files} })
{
! confess "Bad format filename '$f'\n" unless ($f =~ /^(.*)\\([^\\]+)\.[r]?[cyl]$/);
my $dir = $1;
my $file = $2;
--- 358,407 ----
$self->DisableLinkerWarnings('4197') if ($self->{platform} eq 'x64');
# Dump the project
! open(F, ">$self->{name}$self->{filenameExtension}")
! || croak("Could not write to $self->{name}$self->{filenameExtension}\n");
$self->WriteHeader(*F);
! $self->WriteFiles(*F);
! $self->Footer(*F);
! close(F);
! }
!
! sub GenerateCustomTool
! {
! my ($self, $desc, $tool, $output, $cfg) = @_;
! if (!defined($cfg))
! {
! return $self->GenerateCustomTool($desc, $tool, $output, 'Debug')
! .$self->GenerateCustomTool($desc, $tool, $output, 'Release');
! }
! return
! "{platform}\">";
! }
!
! sub WriteReferences
! {
! my ($self, $f) = @_;
! print $f " \n";
! foreach my $ref (@{$self->{references}})
! {
! print $f
! " {guid}\" Name=\"$ref->{name}\" />\n";
! }
! print $f " \n";
! }
!
! sub WriteFiles
! {
! my ($self, $f) = @_;
! print $f <
EOF
my @dirstack = ();
my %uniquefiles;
! foreach my $fileNameWithPath (sort keys %{ $self->{files} })
{
! confess "Bad format filename '$fileNameWithPath'\n"
! unless ($fileNameWithPath =~ /^(.*)\\([^\\]+)\.[r]?[cyl]$/);
my $dir = $1;
my $file = $2;
*************** EOF
*** 377,383 ****
last if (length($dir) == length(join('\\',@dirstack)));
last if (substr($dir, length(join('\\',@dirstack)),1) eq '\\');
}
! print F ' ' x $#dirstack . " \n";
pop @dirstack;
}
--- 413,419 ----
last if (length($dir) == length(join('\\',@dirstack)));
last if (substr($dir, length(join('\\',@dirstack)),1) eq '\\');
}
! print $f ' ' x $#dirstack . " \n";
pop @dirstack;
}
*************** EOF
*** 388,414 ****
$left =~ s/^\\//;
my @pieces = split /\\/, $left;
push @dirstack, $pieces[0];
! print F ' ' x $#dirstack . " \n";
}
! print F ' ' x $#dirstack . " '
! . $self->GenerateCustomTool('Running bison on ' . $f,
! 'cmd /V:ON /c src\tools\msvc\pgbison.bat ' . $f, $of)
. '' . "\n";
}
! elsif ($f =~ /\.l$/)
{
! my $of = $f;
$of =~ s/\.l$/.c/;
! print F '>'
! . $self->GenerateCustomTool('Running flex on ' . $f,
! 'src\tools\msvc\pgflex.bat ' . $f,$of)
. '' . "\n";
}
elsif (defined($uniquefiles{$file}))
--- 424,450 ----
$left =~ s/^\\//;
my @pieces = split /\\/, $left;
push @dirstack, $pieces[0];
! print $f ' ' x $#dirstack . " \n";
}
! print $f ' ' x $#dirstack . " '
! . $self->GenerateCustomTool('Running bison on ' . $fileNameWithPath,
! "perl src\\tools\\msvc\\pgbison.pl $fileNameWithPath", $of)
. '' . "\n";
}
! elsif ($fileNameWithPath =~ /\.l$/)
{
! my $of = $fileNameWithPath;
$of =~ s/\.l$/.c/;
! print $f '>'
! . $self->GenerateCustomTool('Running flex on ' . $fileNameWithPath,
! "perl src\\tools\\msvc\\pgflex.pl $fileNameWithPath", $of)
. '' . "\n";
}
elsif (defined($uniquefiles{$file}))
*************** EOF
*** 417,423 ****
# File already exists, so fake a new name
my $obj = $dir;
$obj =~ s/\\/_/g;
! print F
">{platform}\">{name}\\$obj"
. "_$file.obj\" />{platform}\">{name}\\$obj"
. "_$file.obj\" />\n";
--- 453,459 ----
# File already exists, so fake a new name
my $obj = $dir;
$obj =~ s/\\/_/g;
! print $f
">{platform}\">{name}\\$obj"
. "_$file.obj\" />{platform}\">{name}\\$obj"
. "_$file.obj\" />\n";
*************** EOF
*** 425,464 ****
else
{
$uniquefiles{$file} = 1;
! print F " />\n";
}
}
while ($#dirstack >= 0)
{
! print F ' ' x $#dirstack . " \n";
pop @dirstack;
}
! $self->Footer(*F);
! close(F);
! }
!
! sub GenerateCustomTool
! {
! my ($self, $desc, $tool, $output, $cfg) = @_;
! if (!defined($cfg))
! {
! return $self->GenerateCustomTool($desc, $tool, $output, 'Debug')
! .$self->GenerateCustomTool($desc, $tool, $output, 'Release');
! }
! return
! "{platform}\">";
! }
!
! sub WriteReferences
! {
! my ($self, $f) = @_;
! print $f " \n";
! foreach my $ref (@{$self->{references}})
! {
! print $f
! " {guid}\" Name=\"$ref->{name}\" />\n";
! }
! print $f " \n";
}
sub WriteHeader
--- 461,477 ----
else
{
$uniquefiles{$file} = 1;
! print $f " />\n";
}
}
while ($#dirstack >= 0)
{
! print $f ' ' x $#dirstack . " \n";
pop @dirstack;
}
! print $f <
! EOF
}
sub WriteHeader
*************** EOF
*** 478,489 ****
print $f <
EOF
}
! sub WriteConfiguration
{
! my ($self, $f, $cfgname, $p) = @_;
! my $cfgtype = ($self->{type} eq "exe")?1:($self->{type} eq "dll"?2:4);
my $libcfg = (uc $cfgname eq "RELEASE")?"MD":"MDd";
my $libs = '';
foreach my $lib (@{$self->{libraries}})
--- 491,502 ----
print $f <
EOF
+ $self->WriteReferences($f);
}
! sub GetAdditionalLinkerDependencies
{
! my ($self, $cfgname, $seperator) = @_;
my $libcfg = (uc $cfgname eq "RELEASE")?"MD":"MDd";
my $libs = '';
foreach my $lib (@{$self->{libraries}})
*************** sub WriteConfiguration
*** 497,506 ****
last;
}
}
! $libs .= $xlib . " ";
}
! $libs =~ s/ $//;
$libs =~ s/__CFGNAME__/$cfgname/g;
my $targetmachine = $self->{platform} eq 'Win32' ? 1 : 17;
--- 510,527 ----
last;
}
}
! $libs .= $xlib . $seperator;
}
! $libs =~ s/.$//;
$libs =~ s/__CFGNAME__/$cfgname/g;
+ return $libs;
+ }
+
+ sub WriteConfiguration
+ {
+ my ($self, $f, $cfgname, $p) = @_;
+ my $cfgtype = ($self->{type} eq "exe")?1:($self->{type} eq "dll"?2:4);
+ my $libs = $self->GetAdditionalLinkerDependencies($cfgname, ' ');
my $targetmachine = $self->{platform} eq 'Win32' ? 1 : 17;
*************** sub Footer
*** 563,569 ****
my ($self, $f) = @_;
print $f <
EOF
--- 584,589 ----
diff -Napcdr -x .git postgresql/src/tools/msvc/Solution.pm postgresql_dev/src/tools/msvc/Solution.pm
*** postgresql/src/tools/msvc/Solution.pm Mon Aug 15 18:08:31 2011
--- postgresql_dev/src/tools/msvc/Solution.pm Wed Sep 28 19:26:02 2011
*************** package Solution;
*** 8,17 ****
use Carp;
use strict;
use warnings;
! sub new
{
! my $junk = shift;
my $options = shift;
my $self = {
projects => {},
--- 8,18 ----
use Carp;
use strict;
use warnings;
+ use VSObjectFactory;
! sub _new
{
! my $classname = shift;
my $options = shift;
my $self = {
projects => {},
*************** sub new
*** 21,27 ****
vcver => undef,
platform => undef,
};
! bless $self;
# integer_datetimes is now the default
$options->{integer_datetimes} = 1
--- 22,28 ----
vcver => undef,
platform => undef,
};
! bless($self, $classname);
# integer_datetimes is now the default
$options->{integer_datetimes} = 1
*************** sub new
*** 53,80 ****
die "Bad wal_segsize $options->{wal_segsize}"
unless grep {$_ == $options->{wal_segsize}} (1,2,4,8,16,32,64);
! $self->DetermineToolVersions();
return $self;
}
! sub DetermineToolVersions
{
my $self = shift;
- # Determine version of vcbuild command, to set proper verison of visual studio
- open(P,"vcbuild /? |") || die "vcbuild command not found";
- my $line =
;
- close(P);
- if ($line !~ /^Microsoft\s*\(R\) Visual C\+\+ [^-]+ - \D+(\d+)\.00\.\d+/)
- {
- die "Unable to determine vcbuild version from first line of output!";
- }
- if ($1 == 8) { $self->{vcver} = '8.00' }
- elsif ($1 == 9) { $self->{vcver} = '9.00' }
- else { die "Unsupported version of Visual Studio: $1" }
- print "Detected Visual Studio version $self->{vcver}\n";
-
# Determine if we are in 32 or 64-bit mode. Do this by seeing if CL has
# 64-bit only parameters.
$self->{platform} = 'Win32';
--- 54,68 ----
die "Bad wal_segsize $options->{wal_segsize}"
unless grep {$_ == $options->{wal_segsize}} (1,2,4,8,16,32,64);
! $self->DeterminePlatform();
return $self;
}
! sub DeterminePlatform
{
my $self = shift;
# Determine if we are in 32 or 64-bit mode. Do this by seeing if CL has
# 64-bit only parameters.
$self->{platform} = 'Win32';
*************** sub AddProject
*** 428,434 ****
{
my ($self, $name, $type, $folder, $initialdir) = @_;
! my $proj = new Project($name, $type, $self);
push @{$self->{projects}->{$folder}}, $proj;
$proj->AddDir($initialdir) if ($initialdir);
if ($self->{options}->{zlib})
--- 416,422 ----
{
my ($self, $name, $type, $folder, $initialdir) = @_;
! my $proj = VSObjectFactory::CreateProject($self->{vcver}, $name, $type, $self);
push @{$self->{projects}->{$folder}}, $proj;
$proj->AddDir($initialdir) if ($initialdir);
if ($self->{options}->{zlib})
*************** sub Save
*** 488,495 ****
open(SLN,">pgsql.sln") || croak "Could not write to pgsql.sln\n";
print SLN <{projects}})
--- 476,483 ----
open(SLN,">pgsql.sln") || croak "Could not write to pgsql.sln\n";
print SLN <{solutionFileVersion}
! # $self->{visualStudioName}
EOF
foreach my $fld (keys %{$self->{projects}})
*************** EOF
*** 497,503 ****
foreach my $proj (@{$self->{projects}->{$fld}})
{
print SLN <{name}", "$proj->{name}.vcproj", "$proj->{guid}"
EndProject
EOF
}
--- 485,491 ----
foreach my $proj (@{$self->{projects}->{$fld}})
{
print SLN <{name}", "$proj->{name}$proj->{filenameExtension}", "$proj->{guid}"
EndProject
EOF
}
diff -Napcdr -x .git postgresql/src/tools/msvc/VC2005Project.pm postgresql_dev/src/tools/msvc/VC2005Project.pm
*** postgresql/src/tools/msvc/VC2005Project.pm Thu Jan 1 00:00:00 1970
--- postgresql_dev/src/tools/msvc/VC2005Project.pm Wed Sep 28 19:26:02 2011
***************
*** 0 ****
--- 1,25 ----
+ package VC2005Project;
+
+ #
+ # Package that encapsulates a Visual C++ 2005 project file
+ #
+ # src/tools/msvc/VC2005Project.pm
+ #
+
+ use Carp;
+ use strict;
+ use warnings;
+ use base qw(Project);
+
+ sub new
+ {
+ my $classname = shift;
+ my $self = $classname->SUPER::_new(@_);
+ bless($self, $classname);
+
+ $self->{vcver} = '8.00';
+
+ return $self;
+ }
+
+ 1;
diff -Napcdr -x .git postgresql/src/tools/msvc/VC2008Project.pm postgresql_dev/src/tools/msvc/VC2008Project.pm
*** postgresql/src/tools/msvc/VC2008Project.pm Thu Jan 1 00:00:00 1970
--- postgresql_dev/src/tools/msvc/VC2008Project.pm Wed Sep 28 19:26:02 2011
***************
*** 0 ****
--- 1,25 ----
+ package VC2008Project;
+
+ #
+ # Package that encapsulates a Visual C++ 2008 project file
+ #
+ # src/tools/msvc/VC2008Project.pm
+ #
+
+ use Carp;
+ use strict;
+ use warnings;
+ use base qw(Project);
+
+ sub new
+ {
+ my $classname = shift;
+ my $self = $classname->SUPER::_new(@_);
+ bless($self, $classname);
+
+ $self->{vcver} = '9.00';
+
+ return $self;
+ }
+
+ 1;
diff -Napcdr -x .git postgresql/src/tools/msvc/VC2010Project.pm postgresql_dev/src/tools/msvc/VC2010Project.pm
*** postgresql/src/tools/msvc/VC2010Project.pm Thu Jan 1 00:00:00 1970
--- postgresql_dev/src/tools/msvc/VC2010Project.pm Wed Sep 28 19:26:02 2011
***************
*** 0 ****
--- 1,368 ----
+ package VC2010Project;
+
+ #
+ # Package that encapsulates a Visual C++ 2010 project file
+ #
+ # src/tools/msvc/VC2010Project.pm
+ #
+
+ use Carp;
+ use strict;
+ use warnings;
+ use base qw(Project);
+
+ sub new
+ {
+ my $classname = shift;
+ my $self = $classname->SUPER::_new(@_);
+ bless($self, $classname);
+
+ $self->{vcver} = '10.00';
+ $self->{filenameExtension} = '.vcxproj';
+
+ return $self;
+ }
+
+ sub AddDefine
+ {
+ my ($self, $def) = @_;
+
+ $self->{defines} .= $def . ';';
+ }
+
+ sub WriteReferences
+ {
+ my ($self, $f) = @_;
+
+ my @references = @{$self->{references}};
+
+ if (scalar(@references))
+ {
+ print $f <
+ EOF
+ foreach my $ref (@references)
+ {
+ print $f <
+ $ref->{guid}
+
+ EOF
+ }
+ print $f <
+ EOF
+ }
+ }
+
+ sub WriteFiles
+ {
+ my ($self, $f) = @_;
+ print $f <
+ EOF
+ my @grammarFiles = ();
+ my @resourceFiles = ();
+ my %uniquefiles;
+ foreach my $fileNameWithPath (sort keys %{ $self->{files} })
+ {
+ confess "Bad format filename '$fileNameWithPath'\n"
+ unless ($fileNameWithPath =~ /^(.*)\\([^\\]+)\.[r]?[cyl]$/);
+ my $dir = $1;
+ my $fileName = $2;
+ if ($fileNameWithPath =~ /\.y$/ or $fileNameWithPath =~ /\.l$/)
+ {
+ push @grammarFiles, $fileNameWithPath;
+ }
+ elsif ($fileNameWithPath =~ /\.rc$/)
+ {
+ push @resourceFiles, $fileNameWithPath;
+ }
+ elsif (defined($uniquefiles{$fileName}))
+ {
+
+ # File already exists, so fake a new name
+ my $obj = $dir;
+ $obj =~ s/\\/_/g;
+
+ print $f <
+ .\\debug\\$self->{name}\\${obj}_$fileName.obj
+ .\\release\\$self->{name}\\${obj}_$fileName.obj
+
+ EOF
+ }
+ else
+ {
+ $uniquefiles{$fileName} = 1;
+ print $f <
+ EOF
+ }
+
+ }
+ print $f <
+ EOF
+ if (scalar(@grammarFiles))
+ {
+ print $f <
+ EOF
+ foreach my $grammarFile (@grammarFiles)
+ {
+ (my $outputFile = $grammarFile) =~ s/\.(y|l)$/.c/;
+ if ($grammarFile =~ /\.y$/)
+ {
+ $outputFile =~ s{^src\\pl\\plpgsql\\src\\gram.c$}{src\\pl\\plpgsql\\src\\pl_gram.c};
+ print $f <
+ Running bison on $grammarFile
+ perl "src\\tools\\msvc\\pgbison.pl" "$grammarFile"
+ %(AdditionalInputs)
+ $outputFile;%(Outputs)
+ Running bison on $grammarFile
+ perl "src\\tools\\msvc\\pgbison.pl" "$grammarFile"
+ %(AdditionalInputs)
+ $outputFile;%(Outputs)
+
+ EOF
+ }
+ else #if ($grammarFile =~ /\.l$/)
+ {
+ print $f <
+ Running flex on $grammarFile
+ perl "src\\tools\\msvc\\pgflex.pl" "$grammarFile"
+ %(AdditionalInputs)
+ $outputFile;%(Outputs)
+ Running flex on $grammarFile
+ perl "src\\tools\\msvc\\pgflex.pl" "$grammarFile"
+ %(AdditionalInputs)
+ $outputFile;%(Outputs)
+
+ EOF
+ }
+ }
+ print $f <
+ EOF
+ }
+ if (scalar(@resourceFiles))
+ {
+ print $f <
+ EOF
+ foreach my $rcFile (@resourceFiles)
+ {
+ print $f <
+ EOF
+ }
+ print $f <
+ EOF
+ }
+ }
+
+ sub WriteHeader
+ {
+ my ($self, $f) = @_;
+
+ print $f <
+
+
+ EOF
+ $self->WriteConfigurationHeader($f, 'Debug');
+ $self->WriteConfigurationHeader($f, 'Release');
+ print $f <
+
+ $self->{guid}
+
+
+ EOF
+ $self->WriteConfigurationPropertyGroup($f, 'Release',{ wholeopt=>'false' });
+ $self->WriteConfigurationPropertyGroup($f, 'Debug',{ wholeopt=>'false' });
+ print $f <
+
+
+ EOF
+ $self->WritePropertySheetsPropertyGroup($f, 'Release');
+ $self->WritePropertySheetsPropertyGroup($f, 'Debug');
+ print $f <
+
+ <_ProjectFileVersion>10.0.30319.1
+ EOF
+ $self->WriteAdditionalProperties($f, 'Debug');
+ $self->WriteAdditionalProperties($f, 'Release');
+ print $f <
+ EOF
+ $self->WriteItemDefinitionGroup(
+ $f, 'Debug',
+ {
+ defs=>'_DEBUG;DEBUG=1;',
+ opt=>'Disabled',
+ strpool=>'false',
+ runtime=>'MultiThreadedDebugDLL'
+ }
+ );
+ $self->WriteItemDefinitionGroup($f, 'Release',
+ { defs=>'', opt=>'Full', strpool=>'true', runtime=>'MultiThreadedDLL' });
+ }
+
+ sub WriteConfigurationHeader
+ {
+ my ($self, $f, $cfgname) = @_;
+ print $f <
+ $cfgname
+ $self->{platform}
+
+ EOF
+ }
+
+ sub WriteConfigurationPropertyGroup
+ {
+ my ($self, $f, $cfgname, $p) = @_;
+ my $cfgtype =
+ ($self->{type} eq "exe")
+ ?'Application'
+ :($self->{type} eq "dll"?'DynamicLibrary':'StaticLibrary');
+
+ print $f <
+ $cfgtype
+ false
+ MultiByte
+ $p->{wholeopt}
+
+ EOF
+ }
+
+ sub WritePropertySheetsPropertyGroup
+ {
+ my ($self, $f, $cfgname) = @_;
+ print $f <
+
+
+ EOF
+ }
+
+ sub WriteAdditionalProperties
+ {
+ my ($self, $f, $cfgname) = @_;
+ print $f <.\\$cfgname\\$self->{name}\\
+ .\\$cfgname\\$self->{name}\\
+ false
+ EOF
+ }
+
+ sub WriteItemDefinitionGroup
+ {
+ my ($self, $f, $cfgname, $p) = @_;
+ my $cfgtype =
+ ($self->{type} eq "exe")
+ ?'Application'
+ :($self->{type} eq "dll"?'DynamicLibrary':'StaticLibrary');
+ my $libs = $self->GetAdditionalLinkerDependencies($cfgname, ';');
+
+ my $targetmachine = $self->{platform} eq 'Win32' ? 'MachineX86' : 'MachineX64';
+
+ my $includes = $self->{includes};
+ unless ($includes eq '' or $includes =~ /;$/)
+ {
+ $includes .= ';';
+ }
+ print $f <
+
+ $p->{opt}
+ $self->{prefixincludes}src/include;src/include/port/win32;src/include/port/win32_msvc;$includes\%(AdditionalIncludeDirectories)
+ WIN32;_WINDOWS;__WINDOWS__;__WIN32__;EXEC_BACKEND;WIN32_STACK_RLIMIT=4194304;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE$self->{defines}$p->{defs}\%(PreprocessorDefinitions)
+ $p->{strpool}
+ $p->{runtime}
+ $self->{disablewarnings};\%(DisableSpecificWarnings)
+ /MP \%(AdditionalOptions)
+
+
+ .\\$cfgname\\$self->{name}\\
+ .\\$cfgname\\$self->{name}\\
+ .\\$cfgname\\$self->{name}\\
+ false
+ Level3
+ true
+ ProgramDatabase
+ Default
+
+
+ .\\$cfgname\\$self->{name}\\$self->{name}.$self->{type}
+ $libs;\%(AdditionalDependencies)
+ true
+ \%(AdditionalLibraryDirectories)
+ libc;\%(IgnoreSpecificDefaultLibraries)
+ 4194304
+ true
+ .\\$cfgname\\$self->{name}\\$self->{name}.pdb
+ false
+ .\\$cfgname\\$self->{name}\\$self->{name}.map
+ Console
+ $targetmachine
+ EOF
+ if ($self->{disablelinkerwarnings})
+ {
+ print $f
+ " /ignore:$self->{disablelinkerwarnings} \%(AdditionalOptions)\n";
+ }
+ if ($self->{implib})
+ {
+ my $l = $self->{implib};
+ $l =~ s/__CFGNAME__/$cfgname/g;
+ print $f " $l\n";
+ }
+ if ($self->{def})
+ {
+ my $d = $self->{def};
+ $d =~ s/__CFGNAME__/$cfgname/g;
+ print $f " $d\n";
+ }
+ print $f <
+
+ src\\include;\%(AdditionalIncludeDirectories)
+
+ EOF
+ if ($self->{builddef})
+ {
+ print $f <
+ Generate DEF file
+ perl src\\tools\\msvc\\gendef.pl $cfgname\\$self->{name} $self->{platform}
+
+ EOF
+ }
+ print $f <
+ EOF
+ }
+
+ sub Footer
+ {
+ my ($self, $f) = @_;
+ $self->WriteReferences($f);
+
+ print $f <
+
+
+
+ EOF
+ }
+
+ 1;
diff -Napcdr -x .git postgresql/src/tools/msvc/VS2005Solution.pm postgresql_dev/src/tools/msvc/VS2005Solution.pm
*** postgresql/src/tools/msvc/VS2005Solution.pm Thu Jan 1 00:00:00 1970
--- postgresql_dev/src/tools/msvc/VS2005Solution.pm Wed Sep 28 19:26:02 2011
***************
*** 0 ****
--- 1,27 ----
+ package VS2005Solution;
+
+ #
+ # Package that encapsulates a Visual Studio 2005 solution file
+ #
+ # src/tools/msvc/VS2005Solution.pm
+ #
+
+ 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} = '9.00';
+ $self->{vcver} = '8.00';
+ $self->{visualStudioName} = 'Visual Studio 2005';
+
+ return $self;
+ }
+
+ 1;
diff -Napcdr -x .git postgresql/src/tools/msvc/VS2008Solution.pm postgresql_dev/src/tools/msvc/VS2008Solution.pm
*** postgresql/src/tools/msvc/VS2008Solution.pm Thu Jan 1 00:00:00 1970
--- postgresql_dev/src/tools/msvc/VS2008Solution.pm Wed Sep 28 19:26:02 2011
***************
*** 0 ****
--- 1,27 ----
+ package VS2008Solution;
+
+ #
+ # Package that encapsulates a Visual Studio 2008 solution file
+ #
+ # src/tools/msvc/VS2008Solution.pm
+ #
+
+ 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} = '10.00';
+ $self->{vcver} = '9.00';
+ $self->{visualStudioName} = 'Visual Studio 2008';
+
+ return $self;
+ }
+
+ 1;
diff -Napcdr -x .git postgresql/src/tools/msvc/VS2010Solution.pm postgresql_dev/src/tools/msvc/VS2010Solution.pm
*** postgresql/src/tools/msvc/VS2010Solution.pm Thu Jan 1 00:00:00 1970
--- postgresql_dev/src/tools/msvc/VS2010Solution.pm Wed Sep 28 19:26:02 2011
***************
*** 0 ****
--- 1,27 ----
+ package VS2010Solution;
+
+ #
+ # Package that encapsulates a Visual Studio 2010 solution file
+ #
+ # src/tools/msvc/VS2010Solution.pm
+ #
+
+ 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} = '11.00';
+ $self->{vcver} = '10.00';
+ $self->{visualStudioName} = 'Visual Studio 2010';
+
+ return $self;
+ }
+
+ 1;
diff -Napcdr -x .git postgresql/src/tools/msvc/VSObjectFactory.pm postgresql_dev/src/tools/msvc/VSObjectFactory.pm
*** postgresql/src/tools/msvc/VSObjectFactory.pm Thu Jan 1 00:00:00 1970
--- postgresql_dev/src/tools/msvc/VSObjectFactory.pm Wed Sep 28 19:26:02 2011
***************
*** 0 ****
--- 1,126 ----
+ 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 VC2005Project;
+ use VC2008Project;
+ use VC2010Project;
+ use VS2005Solution;
+ use VS2008Solution;
+ use VS2010Solution;
+
+ our (@ISA, @EXPORT_OK);
+ @ISA = qw(Exporter);
+ @EXPORT_OK = 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(
)
+ {
+ 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;
diff -Napcdr -x .git postgresql/src/tools/msvc/build.pl postgresql_dev/src/tools/msvc/build.pl
*** postgresql/src/tools/msvc/build.pl Mon Aug 15 18:08:31 2011
--- postgresql_dev/src/tools/msvc/build.pl Wed Sep 28 19:26:02 2011
*************** our $config;
*** 33,39 ****
require "config_default.pl";
require "config.pl" if (-f "src/tools/msvc/config.pl");
! Mkvcbuild::mkvcbuild($config);
# check what sort of build we are doing
--- 33,39 ----
require "config_default.pl";
require "config.pl" if (-f "src/tools/msvc/config.pl");
! my $vcver = Mkvcbuild::mkvcbuild($config);
# check what sort of build we are doing
*************** elsif ($ARGV[0] ne "RELEASE")
*** 50,56 ****
# ... and do it
! if ($buildwhat)
{
system("vcbuild $buildwhat.vcproj $bconf");
}
--- 50,60 ----
# ... and do it
! if ($buildwhat and $vcver eq '10.00')
! {
! system("msbuild $buildwhat.vcxproj /verbosity:detailed /p:Configuration=$bconf");
! }
! elsif ($buildwhat)
{
system("vcbuild $buildwhat.vcproj $bconf");
}
diff -Napcdr -x .git postgresql/src/tools/msvc/builddoc.pl postgresql_dev/src/tools/msvc/builddoc.pl
*** postgresql/src/tools/msvc/builddoc.pl Mon Aug 15 18:08:31 2011
--- postgresql_dev/src/tools/msvc/builddoc.pl Wed Sep 28 19:26:02 2011
*************** $cmd =
*** 69,76 ****
."| findstr /V \"DTDDECL catalog entries are not supported\" ";
system($cmd); # die "openjade" if $?;
print "Running collateindex...\n";
! $cmd ="perl \"$docroot/$dsssl/bin/collateindex.pl\" -f -g -i bookindex "
! ."-o bookindex.sgml HTML.index";
system($cmd);
die "collateindex" if $?;
mkdir "html";
--- 69,76 ----
."| findstr /V \"DTDDECL catalog entries are not supported\" ";
system($cmd); # die "openjade" if $?;
print "Running collateindex...\n";
! $cmd =
! "perl \"$docroot/$dsssl/bin/collateindex.pl\" -f -g -i bookindex "."-o bookindex.sgml HTML.index";
system($cmd);
die "collateindex" if $?;
mkdir "html";
diff -Napcdr -x .git postgresql/src/tools/msvc/clean.bat postgresql_dev/src/tools/msvc/clean.bat
*** postgresql/src/tools/msvc/clean.bat Mon Aug 15 18:08:31 2011
--- postgresql_dev/src/tools/msvc/clean.bat Wed Sep 28 19:26:02 2011
*************** if exist ..\msvc if exist ..\..\..\src c
*** 10,17 ****
--- 10,21 ----
if exist debug rd /s /q debug
if exist release rd /s /q release
for %%f in (*.vcproj) do del %%f
+ for %%f in (*.vcxproj) do del %%f
+ for %%f in (*.vcxproj.user) do del %%f
if exist pgsql.sln del /q pgsql.sln
if exist pgsql.sln.cache del /q pgsql.sln.cache
+ if exist pgsql.sdf del /q pgsql.sdf
+ if exist pgsql.suo del /q /a:H pgsql.suo
del /s /q src\bin\win32ver.rc 2> NUL
del /s /q src\interfaces\win32ver.rc 2> NUL
if exist src\backend\win32ver.rc del /q src\backend\win32ver.rc