Skip to content

Commit 73c1c04

Browse files
committed
Attempt to fix pg_pathman build for Win32
1 parent cd8968c commit 73c1c04

File tree

1 file changed

+86
-40
lines changed

1 file changed

+86
-40
lines changed

src/tools/msvc/Mkvcbuild.pm

Lines changed: 86 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -793,6 +793,10 @@ sub AddContrib
793793
my $proj = $solution->AddProject($1, 'exe', 'contrib', "$subdir/$n");
794794
AdjustContribProj($proj);
795795
}
796+
elsif ($mf =~ /^DATA_TSEARCH\s*=\s*(.*)$/mg)
797+
{
798+
# This is ispell dictionary project
799+
}
796800
else
797801
{
798802
croak "Could not determine contrib module type for $n\n";
@@ -802,50 +806,92 @@ sub AddContrib
802806
GenerateContribSqlFiles($n, $mf);
803807
}
804808

805-
sub GenerateContribSqlFiles
806-
{
807-
my $n = shift;
808-
my $mf = shift;
809-
$mf =~ s{\\\r?\n}{}g;
810-
if ($mf =~ /^DATA_built\s*=\s*(.*)$/mg)
811-
{
812-
my $l = $1;
813-
814-
# Strip out $(addsuffix) rules
815-
if (index($l, '$(addsuffix ') >= 0)
816-
{
817-
my $pcount = 0;
818-
my $i;
819-
for ($i = index($l, '$(addsuffix ') + 12; $i < length($l); $i++)
820-
{
821-
$pcount++ if (substr($l, $i, 1) eq '(');
822-
$pcount-- if (substr($l, $i, 1) eq ')');
823-
last if ($pcount < 0);
809+
sub SubstituteMakefileVariables {
810+
local $_ = shift; # Line to substitue
811+
my $mf = shift; # Makefile text
812+
while (/\$\((\w+)\)/) {
813+
my $varname = $1;
814+
if ($mf =~ /^$varname\s*=\s*(.*)$/mg) {
815+
my $varvalue=$1;
816+
s/\$\($varname\)/$varvalue/g;
824817
}
825-
$l =
826-
substr($l, 0, index($l, '$(addsuffix ')) . substr($l, $i + 1);
827-
}
828-
829-
foreach my $d (split /\s+/, $l)
830-
{
831-
my $in = "$d.in";
832-
my $out = "$d";
818+
}
819+
return $_;
820+
}
833821

834-
if (Solution::IsNewer("contrib/$n/$out", "contrib/$n/$in"))
835-
{
836-
print "Building $out from $in (contrib/$n)...\n";
837-
my $cont = Project::read_file("contrib/$n/$in");
838-
my $dn = $out;
839-
$dn =~ s/\.sql$//;
840-
$cont =~ s/MODULE_PATHNAME/\$libdir\/$dn/g;
822+
sub GenerateContribSqlFiles
823+
{
824+
my $n = shift;
825+
my $mf = shift;
826+
$mf =~ s{\\\r?\n}{}g;
827+
if ($mf =~ /^DATA_built\s*=\s*(.*)$/mg)
828+
{
829+
my $l = $1;
830+
# Strip out $(addsuffix) rules
831+
if (index($l, '$(addsuffix ') >= 0)
832+
{
833+
my $pcount = 0;
834+
my $i;
835+
for ($i = index($l, '$(addsuffix ') + 12; $i < length($l); $i++)
836+
{
837+
$pcount++ if (substr($l, $i, 1) eq '(');
838+
$pcount-- if (substr($l, $i, 1) eq ')');
839+
last if ($pcount < 0);
840+
}
841+
$l =
842+
substr($l, 0, index($l, '$(addsuffix ')) . substr($l, $i + 1);
843+
}
844+
# perform variable substitutions in the makefile
845+
$l = SubstituteMakefileVariables($l,$mf);
846+
foreach my $d (split /\s+/, $l)
847+
{
848+
print STDERR "Generating file $d\n";
849+
if ( -f "$d.in" ) {
850+
my $in = "$d.in";
851+
my $out = "$d";
852+
if (Solution::IsNewer("contrib/$n/$out", "contrib/$n/$in"))
853+
{
854+
print "Building $out from $in (contrib/$n)...\n";
855+
my $cont = Project::read_file("contrib/$n/$in");
856+
my $dn = $out;
857+
$dn =~ s/\.sql$//;
858+
$cont =~ s/MODULE_PATHNAME/\$libdir\/$dn/g;
859+
my $o;
860+
open($o, ">contrib/$n/$out")
861+
|| croak "Could not write to contrib/$n/$d";
862+
print $o $cont;
863+
close($o);
864+
}
865+
} else {
866+
# Search for makefile rule.
867+
# For now we do not process rule command and assume
868+
# that we should just concatenate all prerequisites
869+
#
870+
my @prereq = ();
871+
my $target;
872+
my @rules = $mf =~ /^(\S+)\s*:\s*([^=].*)$/mg;
873+
RULE:
874+
while (@rules) {
875+
$target = SubstituteMakefileVariables(shift @rules,$mf);
876+
@prereq = split(/\s+/,SubstituteMakefileVariables(shift @rules,$mf));
877+
last RULE if ($target eq $d);
878+
@prereq = ();
879+
}
880+
croak "Don't know how to build contrib/$n/$d" unless @prereq;
881+
print STDERR "building $d from @prereq\n";
841882
my $o;
842-
open($o, ">contrib/$n/$out")
843-
|| croak "Could not write to contrib/$n/$d";
844-
print $o $cont;
845-
close($o);
883+
open $o, ">contrib/$n/$d"
884+
or croak("Couldn't write to contrib/$n/$d:$!");
885+
for my $in (@prereq) {
886+
my $data = Project::read_file("contrib/$n/$in");
887+
print $o $data;
888+
close $i;
889+
}
890+
close $o;
891+
846892
}
847-
}
848-
}
893+
}
894+
}
849895
}
850896

851897
sub AdjustContribProj

0 commit comments

Comments
 (0)