Brar Piening wrote:
The attached patch includes documentation changes and excludes my versions of pgbison.pl and pgflex.pl which have been replaced by Andrews' versions that are already commited.
Building current head today I noticed that the patch doesn't apply cleanly anymore.
Attached is a new version. Regards, Brar
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 <productname>Windows</productname>. The simplest way to build with Microsoft tools is to install a supported version of the ! <productname>Microsoft Platform SDK</productname> and use the included compiler. It is also possible to build with the full ! <productname>Microsoft Visual C++ 2005 or 2008</productname>. In some cases ! that requires the installation of the <productname>Platform SDK</productname> in addition to the compiler. </para> --- 20,29 ---- There are several different ways of building PostgreSQL on <productname>Windows</productname>. The simplest way to build with Microsoft tools is to install a supported version of the ! <productname>Microsoft Windows SDK</productname> and use the included compiler. It is also possible to build with the full ! <productname>Microsoft Visual C++ 2005, 2008 or 2010</productname>. In some cases ! that requires the installation of the <productname>Windows SDK</productname> in addition to the compiler. </para> *************** *** 69,100 **** <sect1 id="install-windows-full"> <title>Building with <productname>Visual C++</productname> or the ! <productname>Platform SDK</productname></title> <para> PostgreSQL can be built using the Visual C++ compiler suite from Microsoft. These compilers can be either from <productname>Visual Studio</productname>, <productname>Visual Studio Express</productname> or some versions of the ! <productname>Platform SDK</productname>. If you do not already have a <productname>Visual Studio</productname> environment set up, the easiest ! way us to use the compilers in the <productname>Platform SDK</productname>, which is a free download from Microsoft. </para> <para> ! PostgreSQL supports the compilers from ! <productname>Visual Studio 2005</productname> and ! <productname>Visual Studio 2008</productname>. When using the Platform SDK ! only, or when building for 64-bit Windows, only ! <productname>Visual Studio 2008</productname> is supported. ! <productname>Visual Studio 2010</productname> is not yet supported. ! </para> ! ! <para> ! When building using the <productname>Platform SDK</productname>, 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 <productname>Visual Studio 2010</productname>. </para> <para> --- 69,94 ---- <sect1 id="install-windows-full"> <title>Building with <productname>Visual C++</productname> or the ! <productname>Microsoft Windows SDK</productname></title> <para> PostgreSQL can be built using the Visual C++ compiler suite from Microsoft. These compilers can be either from <productname>Visual Studio</productname>, <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 ! way is to use the compilers in the <productname>Windows SDK</productname>, which is a free download from Microsoft. </para> <para> ! PostgreSQL is known to support compilation using the compilers shipped with ! <productname>Visual Studio 2005</productname> to ! <productname>Visual Studio 2010</productname> (including Express editions), ! as well as standalone Windows SDK releases 6.0 to 7.1. ! 64-bit PostgreSQL builds are only supported with ! <productname>Microsoft Windows SDK</productname> version 6.0a and above or ! <productname>Visual Studio 2008</productname> and above. </para> <para> *************** *** 104,114 **** <productname>Cygwin</productname> present in your system PATH. Also, make sure you have all the required Visual C++ tools available in the PATH. In <productname>Visual Studio</productname>, start the ! <application>Visual Studio Command Prompt</application>. In the ! <productname>Platform SDK</productname>, start the ! <application>CMD shell</application> 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 <filename>src\tools\msvc</filename> directory. </para> --- 98,110 ---- <productname>Cygwin</productname> present in your system PATH. Also, make sure you have all the required Visual C++ tools available in the PATH. In <productname>Visual Studio</productname>, start the ! <application>Visual Studio Command Prompt</application>. If you wish to build a 64-bit version, you must use the 64-bit version of the command, and vice versa. + In the <productname>Microsoft Windows SDK</productname>, start the + <application>CMD shell</application> listed under the SDK on the Start Menu. + In recent SDK versions you can change the targeted CPU architecture by using + the <command>setenv</command> command. All commands should be run from the <filename>src\tools\msvc</filename> directory. </para> *************** $ENV{PATH}=$ENV{PATH} . ';c:\some\where\ *** 148,164 **** <variablelist> <varlistentry> ! <term><productname>Microsoft Platform SDK</productname></term> <listitem><para> It is recommended that you upgrade to the latest supported version ! of the <productname>Microsoft Platform SDK</productname> (currently ! version 7.0), available for download from <ulink url="http://www.microsoft.com/downloads/"></>. </para> <para> You must always include the <application>Windows Headers and Libraries</application> part of the SDK. ! If you install the <productname>Platform SDK</productname> including the <application>Visual C++ Compilers</application>, you don't need <productname>Visual Studio</productname> to build. </para></listitem> --- 144,160 ---- <variablelist> <varlistentry> ! <term><productname>Microsoft Windows SDK</productname></term> <listitem><para> It is recommended that you upgrade to the latest supported version ! of the <productname>Microsoft Windows SDK</productname> (currently ! version 7.1), available for download from <ulink url="http://www.microsoft.com/downloads/"></>. </para> <para> You must always include the <application>Windows Headers and Libraries</application> part of the SDK. ! If you install the <productname>Windows SDK</productname> including the <application>Visual C++ Compilers</application>, you don't need <productname>Visual Studio</productname> to build. </para></listitem> *************** $ENV{PATH}=$ENV{PATH} . ';c:\some\where\ *** 202,207 **** --- 198,207 ---- Bison can be downloaded from <ulink url="http://gnuwin32.sourceforge.net"></>. Flex can be downloaded from <ulink url="http://www.postgresql.org/ftp/misc/winflex/"></>. + If you are using <productname>msysGit</productname> for accessing the + PostgreSQL <productname>Git</productname> repository you probably already + have recent versions of bison and flex in your <productname>Git</productname> + binary directory. </para> <note> *************** $ENV{DOCROOT}='c:\docbook'; *** 479,485 **** static library to link into an application. For normal use the <productname>MinGW</productname> or <productname>Visual Studio</productname> or ! <productname>Platform SDK</productname> method is recommended. </para> <para> --- 479,485 ---- static library to link into an application. For normal use the <productname>MinGW</productname> or <productname>Visual Studio</productname> or ! <productname>Windows SDK</productname> method is recommended. </para> <para> 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{<ConfigurationType>(\w+)</ConfigurationType>}) { ! 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; <Files> 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 ! "<FileConfiguration Name=\"$cfg|$self->{platform}\"><Tool Name=\"VCCustomBuildTool\" Description=\"$desc\" CommandLine=\"$tool\" AdditionalDependencies=\"\" Outputs=\"$output\" /></FileConfiguration>"; ! } ! ! sub WriteReferences ! { ! my ($self, $f) = @_; ! print $f " <References>\n"; ! foreach my $ref (@{$self->{references}}) ! { ! print $f ! " <ProjectReference ReferencedProjectIdentifier=\"$ref->{guid}\" Name=\"$ref->{name}\" />\n"; ! } ! print $f " </References>\n"; ! } ! ! sub WriteFiles ! { ! my ($self, $f) = @_; ! print $f <<EOF; <Files> 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 . " </Filter>\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 . " </Filter>\n"; pop @dirstack; } *************** EOF *** 388,414 **** $left =~ s/^\\//; my @pieces = split /\\/, $left; push @dirstack, $pieces[0]; ! print F ' ' x $#dirstack . " <Filter Name=\"$pieces[0]\" Filter=\"\">\n"; } ! print F ' ' x $#dirstack . " <File RelativePath=\"$f\""; ! if ($f =~ /\.y$/) { ! my $of = $f; $of =~ s/\.y$/.c/; $of =~ s{^src\\pl\\plpgsql\\src\\gram.c$}{src\\pl\\plpgsql\\src\\pl_gram.c}; ! print F '>' ! . $self->GenerateCustomTool('Running bison on ' . $f, ! 'cmd /V:ON /c src\tools\msvc\pgbison.bat ' . $f, $of) . '</File>' . "\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) . '</File>' . "\n"; } elsif (defined($uniquefiles{$file})) --- 424,450 ---- $left =~ s/^\\//; my @pieces = split /\\/, $left; push @dirstack, $pieces[0]; ! print $f ' ' x $#dirstack . " <Filter Name=\"$pieces[0]\" Filter=\"\">\n"; } ! print $f ' ' x $#dirstack . " <File RelativePath=\"$fileNameWithPath\""; ! if ($fileNameWithPath =~ /\.y$/) { ! my $of = $fileNameWithPath; $of =~ s/\.y$/.c/; $of =~ s{^src\\pl\\plpgsql\\src\\gram.c$}{src\\pl\\plpgsql\\src\\pl_gram.c}; ! print $f '>' ! . $self->GenerateCustomTool('Running bison on ' . $fileNameWithPath, ! "perl src\\tools\\msvc\\pgbison.pl $fileNameWithPath", $of) . '</File>' . "\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) . '</File>' . "\n"; } elsif (defined($uniquefiles{$file})) *************** EOF *** 417,423 **** # File already exists, so fake a new name my $obj = $dir; $obj =~ s/\\/_/g; ! print F "><FileConfiguration Name=\"Debug|$self->{platform}\"><Tool Name=\"VCCLCompilerTool\" ObjectFile=\".\\debug\\$self->{name}\\$obj" . "_$file.obj\" /></FileConfiguration><FileConfiguration Name=\"Release|$self->{platform}\"><Tool Name=\"VCCLCompilerTool\" ObjectFile=\".\\release\\$self->{name}\\$obj" . "_$file.obj\" /></FileConfiguration></File>\n"; --- 453,459 ---- # File already exists, so fake a new name my $obj = $dir; $obj =~ s/\\/_/g; ! print $f "><FileConfiguration Name=\"Debug|$self->{platform}\"><Tool Name=\"VCCLCompilerTool\" ObjectFile=\".\\debug\\$self->{name}\\$obj" . "_$file.obj\" /></FileConfiguration><FileConfiguration Name=\"Release|$self->{platform}\"><Tool Name=\"VCCLCompilerTool\" ObjectFile=\".\\release\\$self->{name}\\$obj" . "_$file.obj\" /></FileConfiguration></File>\n"; *************** EOF *** 425,464 **** else { $uniquefiles{$file} = 1; ! print F " />\n"; } } while ($#dirstack >= 0) { ! print F ' ' x $#dirstack . " </Filter>\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 ! "<FileConfiguration Name=\"$cfg|$self->{platform}\"><Tool Name=\"VCCustomBuildTool\" Description=\"$desc\" CommandLine=\"$tool\" AdditionalDependencies=\"\" Outputs=\"$output\" /></FileConfiguration>"; ! } ! ! sub WriteReferences ! { ! my ($self, $f) = @_; ! print $f " <References>\n"; ! foreach my $ref (@{$self->{references}}) ! { ! print $f ! " <ProjectReference ReferencedProjectIdentifier=\"$ref->{guid}\" Name=\"$ref->{name}\" />\n"; ! } ! print $f " </References>\n"; } sub WriteHeader --- 461,477 ---- else { $uniquefiles{$file} = 1; ! print $f " />\n"; } } while ($#dirstack >= 0) { ! print $f ' ' x $#dirstack . " </Filter>\n"; pop @dirstack; } ! print $f <<EOF; ! </Files> ! EOF } sub WriteHeader *************** EOF *** 478,489 **** print $f <<EOF; </Configurations> 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; </Configurations> 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; - </Files> <Globals/> </VisualStudioProject> 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 = <P>; - 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 <<EOF; ! Microsoft Visual Studio Solution File, Format Version 9.00 ! # Visual Studio 2005 EOF foreach my $fld (keys %{$self->{projects}}) --- 476,483 ---- open(SLN,">pgsql.sln") || croak "Could not write to pgsql.sln\n"; print SLN <<EOF; ! Microsoft Visual Studio Solution File, Format Version $self->{solutionFileVersion} ! # $self->{visualStudioName} EOF foreach my $fld (keys %{$self->{projects}}) *************** EOF *** 497,503 **** foreach my $proj (@{$self->{projects}->{$fld}}) { print SLN <<EOF; ! Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "$proj->{name}", "$proj->{name}.vcproj", "$proj->{guid}" EndProject EOF } --- 485,491 ---- foreach my $proj (@{$self->{projects}->{$fld}}) { print SLN <<EOF; ! Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "$proj->{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; + <ItemGroup> + EOF + foreach my $ref (@references) + { + print $f <<EOF; + <ProjectReference Include="$ref->{name}$ref->{filenameExtension}"> + <Project>$ref->{guid}</Project> + </ProjectReference> + EOF + } + print $f <<EOF; + </ItemGroup> + EOF + } + } + + sub WriteFiles + { + my ($self, $f) = @_; + print $f <<EOF; + <ItemGroup> + 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 <<EOF; + <ClCompile Include="$fileNameWithPath"> + <ObjectFileName Condition="'\$(Configuration)|\$(Platform)'=='Debug|$self->{platform}'">.\\debug\\$self->{name}\\${obj}_$fileName.obj</ObjectFileName> + <ObjectFileName Condition="'\$(Configuration)|\$(Platform)'=='Release|$self->{platform}'">.\\release\\$self->{name}\\${obj}_$fileName.obj</ObjectFileName> + </ClCompile> + EOF + } + else + { + $uniquefiles{$fileName} = 1; + print $f <<EOF; + <ClCompile Include="$fileNameWithPath" /> + EOF + } + + } + print $f <<EOF; + </ItemGroup> + EOF + if (scalar(@grammarFiles)) + { + print $f <<EOF; + <ItemGroup> + 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 <<EOF; + <CustomBuild Include="$grammarFile"> + <Message Condition="'\$(Configuration)|\$(Platform)'=='Debug|$self->{platform}'">Running bison on $grammarFile</Message> + <Command Condition="'\$(Configuration)|\$(Platform)'=='Debug|$self->{platform}'">perl "src\\tools\\msvc\\pgbison.pl" "$grammarFile"</Command> + <AdditionalInputs Condition="'\$(Configuration)|\$(Platform)'=='Debug|$self->{platform}'">%(AdditionalInputs)</AdditionalInputs> + <Outputs Condition="'\$(Configuration)|\$(Platform)'=='Debug|$self->{platform}'">$outputFile;%(Outputs)</Outputs> + <Message Condition="'\$(Configuration)|\$(Platform)'=='Release|$self->{platform}'">Running bison on $grammarFile</Message> + <Command Condition="'\$(Configuration)|\$(Platform)'=='Release|$self->{platform}'">perl "src\\tools\\msvc\\pgbison.pl" "$grammarFile"</Command> + <AdditionalInputs Condition="'\$(Configuration)|\$(Platform)'=='Release|$self->{platform}'">%(AdditionalInputs)</AdditionalInputs> + <Outputs Condition="'\$(Configuration)|\$(Platform)'=='Release|$self->{platform}'">$outputFile;%(Outputs)</Outputs> + </CustomBuild> + EOF + } + else #if ($grammarFile =~ /\.l$/) + { + print $f <<EOF; + <CustomBuild Include="$grammarFile"> + <Message Condition="'\$(Configuration)|\$(Platform)'=='Debug|$self->{platform}'">Running flex on $grammarFile</Message> + <Command Condition="'\$(Configuration)|\$(Platform)'=='Debug|$self->{platform}'">perl "src\\tools\\msvc\\pgflex.pl" "$grammarFile"</Command> + <AdditionalInputs Condition="'\$(Configuration)|\$(Platform)'=='Debug|$self->{platform}'">%(AdditionalInputs)</AdditionalInputs> + <Outputs Condition="'\$(Configuration)|\$(Platform)'=='Debug|$self->{platform}'">$outputFile;%(Outputs)</Outputs> + <Message Condition="'\$(Configuration)|\$(Platform)'=='Release|$self->{platform}'">Running flex on $grammarFile</Message> + <Command Condition="'\$(Configuration)|\$(Platform)'=='Release|$self->{platform}'">perl "src\\tools\\msvc\\pgflex.pl" "$grammarFile"</Command> + <AdditionalInputs Condition="'\$(Configuration)|\$(Platform)'=='Release|$self->{platform}'">%(AdditionalInputs)</AdditionalInputs> + <Outputs Condition="'\$(Configuration)|\$(Platform)'=='Release|$self->{platform}'">$outputFile;%(Outputs)</Outputs> + </CustomBuild> + EOF + } + } + print $f <<EOF; + </ItemGroup> + EOF + } + if (scalar(@resourceFiles)) + { + print $f <<EOF; + <ItemGroup> + EOF + foreach my $rcFile (@resourceFiles) + { + print $f <<EOF; + <ResourceCompile Include="$rcFile" /> + EOF + } + print $f <<EOF; + </ItemGroup> + EOF + } + } + + sub WriteHeader + { + my ($self, $f) = @_; + + print $f <<EOF; + <?xml version="1.0" encoding="Windows-1252"?> + <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + EOF + $self->WriteConfigurationHeader($f, 'Debug'); + $self->WriteConfigurationHeader($f, 'Release'); + print $f <<EOF; + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>$self->{guid}</ProjectGuid> + </PropertyGroup> + <Import Project="\$(VCTargetsPath)\\Microsoft.Cpp.Default.props" /> + EOF + $self->WriteConfigurationPropertyGroup($f, 'Release',{ wholeopt=>'false' }); + $self->WriteConfigurationPropertyGroup($f, 'Debug',{ wholeopt=>'false' }); + print $f <<EOF; + <Import Project="\$(VCTargetsPath)\\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + EOF + $self->WritePropertySheetsPropertyGroup($f, 'Release'); + $self->WritePropertySheetsPropertyGroup($f, 'Debug'); + print $f <<EOF; + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + EOF + $self->WriteAdditionalProperties($f, 'Debug'); + $self->WriteAdditionalProperties($f, 'Release'); + print $f <<EOF; + </PropertyGroup> + 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 <<EOF; + <ProjectConfiguration Include="$cfgname|$self->{platform}"> + <Configuration>$cfgname</Configuration> + <Platform>$self->{platform}</Platform> + </ProjectConfiguration> + EOF + } + + sub WriteConfigurationPropertyGroup + { + my ($self, $f, $cfgname, $p) = @_; + my $cfgtype = + ($self->{type} eq "exe") + ?'Application' + :($self->{type} eq "dll"?'DynamicLibrary':'StaticLibrary'); + + print $f <<EOF; + <PropertyGroup Condition="'\$(Configuration)|\$(Platform)'=='$cfgname|$self->{platform}'" Label="Configuration"> + <ConfigurationType>$cfgtype</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>MultiByte</CharacterSet> + <WholeProgramOptimization>$p->{wholeopt}</WholeProgramOptimization> + </PropertyGroup> + EOF + } + + sub WritePropertySheetsPropertyGroup + { + my ($self, $f, $cfgname) = @_; + print $f <<EOF; + <ImportGroup Condition="'\$(Configuration)|\$(Platform)'=='$cfgname|$self->{platform}'" Label="PropertySheets"> + <Import Project="\$(UserRootDir)\\Microsoft.Cpp.\$(Platform).user.props" Condition="exists('\$(UserRootDir)\\Microsoft.Cpp.\$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + EOF + } + + sub WriteAdditionalProperties + { + my ($self, $f, $cfgname) = @_; + print $f <<EOF; + <OutDir Condition="'\$(Configuration)|\$(Platform)'=='$cfgname|$self->{platform}'">.\\$cfgname\\$self->{name}\\</OutDir> + <IntDir Condition="'\$(Configuration)|\$(Platform)'=='$cfgname|$self->{platform}'">.\\$cfgname\\$self->{name}\\</IntDir> + <LinkIncremental Condition="'\$(Configuration)|\$(Platform)'=='$cfgname|$self->{platform}'">false</LinkIncremental> + 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 <<EOF; + <ItemDefinitionGroup Condition="'\$(Configuration)|\$(Platform)'=='$cfgname|$self->{platform}'"> + <ClCompile> + <Optimization>$p->{opt}</Optimization> + <AdditionalIncludeDirectories>$self->{prefixincludes}src/include;src/include/port/win32;src/include/port/win32_msvc;$includes\%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_WINDOWS;__WINDOWS__;__WIN32__;EXEC_BACKEND;WIN32_STACK_RLIMIT=4194304;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE$self->{defines}$p->{defs}\%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>$p->{strpool}</StringPooling> + <RuntimeLibrary>$p->{runtime}</RuntimeLibrary> + <DisableSpecificWarnings>$self->{disablewarnings};\%(DisableSpecificWarnings)</DisableSpecificWarnings> + <AdditionalOptions>/MP \%(AdditionalOptions)</AdditionalOptions> + <AssemblerOutput> + </AssemblerOutput> + <AssemblerListingLocation>.\\$cfgname\\$self->{name}\\</AssemblerListingLocation> + <ObjectFileName>.\\$cfgname\\$self->{name}\\</ObjectFileName> + <ProgramDataBaseFileName>.\\$cfgname\\$self->{name}\\</ProgramDataBaseFileName> + <BrowseInformation>false</BrowseInformation> + <WarningLevel>Level3</WarningLevel> + <SuppressStartupBanner>true</SuppressStartupBanner> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <CompileAs>Default</CompileAs> + </ClCompile> + <Link> + <OutputFile>.\\$cfgname\\$self->{name}\\$self->{name}.$self->{type}</OutputFile> + <AdditionalDependencies>$libs;\%(AdditionalDependencies)</AdditionalDependencies> + <SuppressStartupBanner>true</SuppressStartupBanner> + <AdditionalLibraryDirectories>\%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <IgnoreSpecificDefaultLibraries>libc;\%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> + <StackReserveSize>4194304</StackReserveSize> + <GenerateDebugInformation>true</GenerateDebugInformation> + <ProgramDatabaseFile>.\\$cfgname\\$self->{name}\\$self->{name}.pdb</ProgramDatabaseFile> + <GenerateMapFile>false</GenerateMapFile> + <MapFileName>.\\$cfgname\\$self->{name}\\$self->{name}.map</MapFileName> + <SubSystem>Console</SubSystem> + <TargetMachine>$targetmachine</TargetMachine> + EOF + if ($self->{disablelinkerwarnings}) + { + print $f + " <AdditionalOptions>/ignore:$self->{disablelinkerwarnings} \%(AdditionalOptions)</AdditionalOptions>\n"; + } + if ($self->{implib}) + { + my $l = $self->{implib}; + $l =~ s/__CFGNAME__/$cfgname/g; + print $f " <ImportLibrary>$l</ImportLibrary>\n"; + } + if ($self->{def}) + { + my $d = $self->{def}; + $d =~ s/__CFGNAME__/$cfgname/g; + print $f " <ModuleDefinitionFile>$d</ModuleDefinitionFile>\n"; + } + print $f <<EOF; + </Link> + <ResourceCompile> + <AdditionalIncludeDirectories>src\\include;\%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ResourceCompile> + EOF + if ($self->{builddef}) + { + print $f <<EOF; + <PreLinkEvent> + <Message>Generate DEF file</Message> + <Command>perl src\\tools\\msvc\\gendef.pl $cfgname\\$self->{name} $self->{platform}</Command> + </PreLinkEvent> + EOF + } + print $f <<EOF; + </ItemDefinitionGroup> + EOF + } + + sub Footer + { + my ($self, $f) = @_; + $self->WriteReferences($f); + + print $f <<EOF; + <Import Project="\$(VCTargetsPath)\\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> + </Project> + 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(<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; 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
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers