Fix vcbuild failures and chkpass dependency caused by 854adb8
authorAndrew Dunstan <andrew@dunslane.net>
Mon, 27 Apr 2015 14:50:46 +0000 (10:50 -0400)
committerAndrew Dunstan <andrew@dunslane.net>
Mon, 27 Apr 2015 14:56:04 +0000 (10:56 -0400)
Switching the Windows build scripts to use forward slashes instead of
backslashes has caused a couple of issues in VC builds:
- The file tree list was not correctly generated, build script
  generating vcproj file missing tree dependencies when listing items in
  Filter.
- VC builds do not accept file paths with forward slashes, perhaps it
  could be possible to use a Condition but it seems safer to simply
  enforce the file paths to use backslashes in the vcproj files.
- chkpass had an unneeded dependency with libpgport and libpgcommon to
  make build succeed but actually it is not necessary as crypt.c is
  already listed for this project and should be replaced with a fake name
  as it is a unique file.

Michael Paquier

src/tools/msvc/MSBuildProject.pm
src/tools/msvc/Mkvcbuild.pm
src/tools/msvc/VCBuildProject.pm

index a16f9acefcabea0229778951d50b43ff272cd45e..3d60b64ec9cbf508468f57a918034a7c78e896f5 100644 (file)
@@ -143,7 +143,7 @@ EOF
 
            # File already exists, so fake a new name
            my $obj = $dir;
-           $obj =~ s/\\/_/g;
+           $obj =~ s!/!_!g;
 
            print $f <<EOF;
     <ClCompile Include="$fileNameWithPath">
index 344b75ff82b828a2695d458096ce78d30dab842e..cfb9b24a0226ee23300b70320c645b39d9d913f4 100644 (file)
@@ -33,12 +33,10 @@ my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
   ('dblink', 'oid2name', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
-   'chkpass',
    'oid2name',
    'pg_standby',
    'vacuumlo');
 my @contrib_uselibpgcommon = (
-   'chkpass',
    'oid2name',
    'pg_standby',
    'vacuumlo');
index dda662f3695bb107778724d595e3f2eb7aaa13cd..3a24c4e52fa27f441c9d78093c248641ece741e3 100644 (file)
@@ -75,43 +75,48 @@ EOF
        my $dir  = $1;
        my $file = $2;
 
-  # Walk backwards down the directory stack and close any dirs we're done with
+       # Walk backwards down the directory stack and close any dirs
+       # we're done with.
        while ($#dirstack >= 0)
        {
-           if (join('\\', @dirstack) eq
-               substr($dir, 0, length(join('\\', @dirstack))))
+           if (join('/', @dirstack) eq
+               substr($dir, 0, length(join('/', @dirstack))))
            {
-               last if (length($dir) == length(join('\\', @dirstack)));
+               last if (length($dir) == length(join('/', @dirstack)));
                last
-                 if (substr($dir, length(join('\\', @dirstack)), 1) eq '\\');
+                 if (substr($dir, length(join('/', @dirstack)), 1) eq '/');
            }
            print $f ' ' x $#dirstack . "  </Filter>\n";
            pop @dirstack;
        }
 
        # Now walk forwards and create whatever directories are needed
-       while (join('\\', @dirstack) ne $dir)
+       while (join('/', @dirstack) ne $dir)
        {
-           my $left = substr($dir, length(join('\\', @dirstack)));
-           $left =~ s/^\\//;
-           my @pieces = split /\\/, $left;
+           my $left = substr($dir, length(join('/', @dirstack)));
+           $left =~ s/^\///;
+           my @pieces = split /\//, $left;
            push @dirstack, $pieces[0];
            print $f ' ' x $#dirstack
              . "  <Filter Name=\"$pieces[0]\" Filter=\"\">\n";
        }
 
+       # VC builds do not like file paths with forward slashes.
+       my $fileNameWithPathFormatted = $fileNameWithPath;
+       $fileNameWithPathFormatted =~ s/\//\\/g;
+
        print $f ' ' x $#dirstack
-         . "   <File RelativePath=\"$fileNameWithPath\"";
+         . "   <File RelativePath=\"$fileNameWithPathFormatted\"";
        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};
+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)
+               "perl src/tools/msvc/pgbison.pl $fileNameWithPath", $of)
              . '</File>' . "\n";
        }
        elsif ($fileNameWithPath =~ /\.l$/)
@@ -121,7 +126,7 @@ s{^src\\pl\\plpgsql\\src\\gram.c$}{src\\pl\\plpgsql\\src\\pl_gram.c};
            print $f '>'
              . $self->GenerateCustomTool(
                'Running flex on ' . $fileNameWithPath,
-               "perl src\\tools\\msvc\\pgflex.pl $fileNameWithPath", $of)
+               "perl src/tools/msvc/pgflex.pl $fileNameWithPath", $of)
              . '</File>' . "\n";
        }
        elsif (defined($uniquefiles{$file}))
@@ -129,7 +134,7 @@ s{^src\\pl\\plpgsql\\src\\gram.c$}{src\\pl\\plpgsql\\src\\pl_gram.c};
 
            # File already exists, so fake a new name
            my $obj = $dir;
-           $obj =~ s/\\/_/g;
+           $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"