From b913a94d0a2a917d47012c7361dde440426f9102 Mon Sep 17 00:00:00 2001
From: Magnus Hagander <magnus@hagander.net>
Date: Tue, 21 Aug 2007 15:10:41 +0000
Subject: [PATCH] Build snowball DLL for tsearch-in-core. (Still needs to build
 the .sql output files, but this handles the C part of the build)

---
 src/tools/msvc/Mkvcbuild.pm |  9 ++++++++-
 src/tools/msvc/Project.pm   | 15 ++++++++++++++-
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index a1eb2af64b4..54a60f72d3c 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -3,7 +3,7 @@ package Mkvcbuild;
 #
 # Package that generates build files for msvc build
 #
-# $PostgreSQL: pgsql/src/tools/msvc/Mkvcbuild.pm,v 1.15 2007/07/23 10:16:54 mha Exp $
+# $PostgreSQL: pgsql/src/tools/msvc/Mkvcbuild.pm,v 1.16 2007/08/21 15:10:41 mha Exp $
 #
 use Carp;
 use Win32;
@@ -70,6 +70,13 @@ sub mkvcbuild
     $postgres->AddLibrary('wldap32.lib') if ($solution->{options}->{ldap});
     $postgres->FullExportDLL('postgres.lib');
 
+    my $snowball = $solution->AddProject('dict_snowball','dll','','src\backend\snowball');
+    $snowball->RelocateFiles('src\backend\snowball\libstemmer', sub {
+        return shift !~ /dict_snowball.c$/;
+    });
+    $snowball->AddIncludeDir('src\include\snowball');
+    $snowball->AddReference($postgres);
+
     my $plpgsql = $solution->AddProject('plpgsql','dll','PLs','src\pl\plpgsql\src');
     $plpgsql->AddFiles('src\pl\plpgsql\src','scan.l','gram.y');
     $plpgsql->AddReference($postgres);
diff --git a/src/tools/msvc/Project.pm b/src/tools/msvc/Project.pm
index 0d4f486a60b..23749844e6d 100644
--- a/src/tools/msvc/Project.pm
+++ b/src/tools/msvc/Project.pm
@@ -3,11 +3,12 @@ package Project;
 #
 # Package that encapsulates a Visual C++ project file generation
 #
-# $PostgreSQL: pgsql/src/tools/msvc/Project.pm,v 1.13 2007/07/25 10:51:03 mha Exp $
+# $PostgreSQL: pgsql/src/tools/msvc/Project.pm,v 1.14 2007/08/21 15:10:41 mha Exp $
 #
 use Carp;
 use strict;
 use warnings;
+use File::Basename;
 
 sub new
 {
@@ -96,6 +97,18 @@ sub RemoveFile
     confess("Could not find file $filename to remove\n");
 }
 
+sub RelocateFiles
+{
+    my ($self, $targetdir, $proc) = @_;
+    foreach my $f (keys %{$self->{files}}) {
+        my $r = &$proc($f);
+        if ($r) {
+           $self->RemoveFile($f);
+           $self->AddFile($targetdir . '\\' . basename($f));
+        }
+    }
+}
+
 sub AddReference
 {
     my $self = shift;
-- 
GitLab