diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm index 308a4b4..08fdc14 100644 --- a/src/tools/msvc/Mkvcbuild.pm +++ b/src/tools/msvc/Mkvcbuild.pm @@ -103,7 +103,7 @@ sub mkvcbuild 'src\backend\port\win32_shmem.c'); $postgres->ReplaceFile('src\backend\port\pg_latch.c', 'src\backend\port\win32_latch.c'); - $postgres->AddFiles('src\port', @pgportfiles); + $postgres->AddFiles('src\port', @pgportfiles); $postgres->AddFiles('src\common', @pgcommonbkndfiles); $postgres->AddDir('src\timezone'); $postgres->AddFiles('src\backend\parser', 'scan.l', 'gram.y'); @@ -128,11 +128,13 @@ sub mkvcbuild }); $snowball->AddIncludeDir('src\include\snowball'); $snowball->AddReference($postgres); + $snowball->AddResourceFile('src\backend\snowball', 'snowball'); my $plpgsql = $solution->AddProject('plpgsql', 'dll', 'PLs', 'src\pl\plpgsql\src'); $plpgsql->AddFiles('src\pl\plpgsql\src', 'pl_gram.y'); $plpgsql->AddReference($postgres); + $plpgsql->AddResourceFile('src\pl\plpgsql\src', 'plpgsql'); if ($solution->{options}->{perl}) { @@ -206,6 +208,7 @@ sub mkvcbuild } } $plperl->AddReference($postgres); + $plperl->AddResourceFile('src\pl\plperl', 'plperl'); my @perl_libs = grep { /perl\d+.lib$/ } glob($solution->{options}->{perl} . '\lib\CORE\perl*.lib'); @@ -245,6 +248,7 @@ sub mkvcbuild $plpython->AddIncludeDir($pyprefix . '\include'); $plpython->AddLibrary($pyprefix . "\\Libs\\python$pyver.lib"); $plpython->AddReference($postgres); + $plpython->AddResourceFile('src\pl\plpython', 'plpython'); } if ($solution->{options}->{tcl}) @@ -253,6 +257,7 @@ sub mkvcbuild $solution->AddProject('pltcl', 'dll', 'PLs', 'src\pl\tcl'); $pltcl->AddIncludeDir($solution->{options}->{tcl} . '\include'); $pltcl->AddReference($postgres); + $pltcl->AddResourceFile('src\pl\tcl', 'pltcl'); if (-e $solution->{options}->{tcl} . '\lib\tcl85.lib') { $pltcl->AddLibrary( @@ -284,6 +289,8 @@ sub mkvcbuild 'src\backend\replication\libpqwalreceiver'); $libpqwalreceiver->AddIncludeDir('src\interfaces\libpq'); $libpqwalreceiver->AddReference($postgres, $libpq); + $libpqwalreceiver->AddResourceFile('src\backend\replication\libpqwalreceiver', + 'libpqwalreceiver'); my $pgtypes = $solution->AddProject( 'libpgtypes', 'dll', @@ -292,6 +299,8 @@ sub mkvcbuild $pgtypes->AddReference($libpgport); $pgtypes->UseDef('src\interfaces\ecpg\pgtypeslib\pgtypeslib.def'); $pgtypes->AddIncludeDir('src\interfaces\ecpg\include'); + $pgtypes->AddResourceFile('src\interfaces\ecpg\pgtypeslib', + 'libpgtypes'); my $libecpg = $solution->AddProject('libecpg', 'dll', 'interfaces', 'src\interfaces\ecpg\ecpglib'); @@ -302,6 +311,8 @@ sub mkvcbuild $libecpg->UseDef('src\interfaces\ecpg\ecpglib\ecpglib.def'); $libecpg->AddLibrary('wsock32.lib'); $libecpg->AddReference($libpq, $pgtypes, $libpgport); + $libecpg->AddResourceFile('src\interfaces\ecpg\ecpglib', + 'libecpg'); my $libecpgcompat = $solution->AddProject( 'libecpg_compat', 'dll', @@ -310,6 +321,8 @@ sub mkvcbuild $libecpgcompat->AddIncludeDir('src\interfaces\libpq'); $libecpgcompat->UseDef('src\interfaces\ecpg\compatlib\compatlib.def'); $libecpgcompat->AddReference($pgtypes, $libecpg, $libpgport); + $libecpgcompat->AddResourceFile('src\interfaces\ecpg\compatlib', + 'libecpg_compat'); my $ecpg = $solution->AddProject('ecpg', 'exe', 'interfaces', 'src\interfaces\ecpg\preproc'); @@ -332,6 +345,8 @@ sub mkvcbuild $pgregress_ecpg->AddDefine('HOST_TUPLE="i686-pc-win32vc"'); $pgregress_ecpg->AddDefine('FRONTEND'); $pgregress_ecpg->AddReference($libpgcommon, $libpgport); + $pgregress_ecpg->AddResourceFile('src\interfaces\ecpg\test', + 'pg_regress_ecpg'); my $isolation_tester = $solution->AddProject('isolationtester', 'exe', 'misc'); @@ -347,6 +362,8 @@ sub mkvcbuild $isolation_tester->AddDefine('FRONTEND'); $isolation_tester->AddLibrary('wsock32.lib'); $isolation_tester->AddReference($libpq, $libpgcommon, $libpgport); + $isolation_tester->AddResourceFile('src\test\isolation', + 'isolation'); my $pgregress_isolation = $solution->AddProject('pg_isolation_regress', 'exe', 'misc'); @@ -435,6 +452,7 @@ sub mkvcbuild $zic->AddFiles('src\timezone', 'zic.c', 'ialloc.c', 'scheck.c', 'localtime.c'); $zic->AddReference($libpgcommon, $libpgport); + $zic->AddResourceFile('src\timezone', 'zic'); if ($solution->{options}->{xml}) { @@ -501,6 +519,7 @@ sub mkvcbuild } $pgcrypto->AddReference($postgres); $pgcrypto->AddLibrary('wsock32.lib'); + $pgcrypto->AddResourceFile('contrib\pgcrypto', 'pgcrypto'); my $mf = Project::read_file('contrib/pgcrypto/Makefile'); GenerateContribSqlFiles('pgcrypto', $mf); @@ -535,6 +554,7 @@ sub mkvcbuild 'src\backend\utils\mb\conversion_procs\\' . $sub . '\\' . $1); } $p->AddReference($postgres); + $p->AddResourceFile('src\backend\utils\mb\conversion_procs\\' . $sub, $sub); } $mf = Project::read_file('src\bin\scripts\Makefile'); @@ -590,12 +610,13 @@ sub mkvcbuild $pgregress->AddIncludeDir('src\port'); $pgregress->AddDefine('HOST_TUPLE="i686-pc-win32vc"'); $pgregress->AddReference($libpgcommon, $libpgport); + $pgregress->AddResourceFile('src\test\regress', 'pg_regress'); # fix up pg_xlogdump once it's been set up # files symlinked on Unix are copied on windows my $pg_xlogdump = (grep { $_->{name} eq 'pg_xlogdump' } - @{ $solution->{projects}->{contrib} })[0]; + @{ $solution->{projects}->{contrib} })[0]; $pg_xlogdump->AddDefine('FRONTEND'); foreach my $xf (glob('src/backend/access/rmgrdesc/*desc.c')) { @@ -603,9 +624,8 @@ sub mkvcbuild copy($xf, "contrib/pg_xlogdump/$bf"); $pg_xlogdump->AddFile("contrib\\pg_xlogdump\\$bf"); } - copy( - 'src/backend/access/transam/xlogreader.c', - 'contrib/pg_xlogdump/xlogreader.c'); + copy('src/backend/access/transam/xlogreader.c', + 'contrib/pg_xlogdump/xlogreader.c'); $solution->Save(); return $solution->{vcver}; @@ -672,6 +692,7 @@ sub AddContrib } } } + AddContribResourceFile($proj, $mf, 'contrib\\' . $n, $dn); AdjustContribProj($proj); } elsif ($mf =~ /^MODULES\s*=\s*(.*)$/mg) @@ -681,12 +702,14 @@ sub AddContrib my $proj = $solution->AddProject($mod, 'dll', 'contrib'); $proj->AddFile('contrib\\' . $n . '\\' . $mod . '.c'); $proj->AddReference($postgres); + AddContribResourceFile($proj, $mf, 'contrib\\' . $n, $mod); AdjustContribProj($proj); } } elsif ($mf =~ /^PROGRAM\s*=\s*(.*)$/mg) { - my $proj = $solution->AddProject($1, 'exe', 'contrib'); + my $dn = $1; + my $proj = $solution->AddProject($dn, 'exe', 'contrib'); $mf =~ s{\\\s*[\r\n]+}{}mg; $mf =~ /^OBJS\s*=\s*(.*)$/gm || croak "Could not find objects in PROGRAM for $n\n"; @@ -697,6 +720,7 @@ sub AddContrib $o =~ s/\.o$/.c/; $proj->AddFile('contrib\\' . $n . '\\' . $o); } + AddContribResourceFile($proj, $mf, 'contrib\\' . $n, $dn); AdjustContribProj($proj); } else @@ -708,6 +732,29 @@ sub AddContrib GenerateContribSqlFiles($n, $mf); } +sub AddContribResourceFile +{ + my $proj = shift; + my $mf = shift; + my $dir = shift; + my $name = shift; + + # See if this contrib Makefile contains a description and then + # generate its resource file. If no explicit file description is + # given use the module name. + if ($mf =~ /^PGFILEDESC\s*=\s*\"([^\"]+)\"/m) + { + my $desc = $1; + my $ico; + if ($mf =~ /^PGAPPICON\s*=\s*(.*)$/m) { $ico = $1; } + $proj->AddResourceFile($dir, $desc, $ico); + } + else + { + $proj->AddResourceFile($dir, $name); + } +} + sub GenerateContribSqlFiles { my $n = shift;