Skip to content

Commit e30741e

Browse files
dschoGit for Windows Build Agent
authored and
Git for Windows Build Agent
committed
vcxproj: unclash project directories with build outputs
It already caused problems with the test suite that the directory containing `git.vcxproj` is called the same as the Git executable without its file extension: `./git` is ambiguous, it could refer both to the directory `git/` as well as to `git.exe`. Now there is one more problem: when our GitHub workflow runs on the `vs/master` branch, it fails in all but the Windows builds, as they want to write the file `git` but there is already a directory in the way. Let's just go ahead and append `.proj` to all of those directories, e.g. `git.proj/` instead of `git/`. Signed-off-by: Johannes Schindelin <[email protected]>
1 parent 797414b commit e30741e

File tree

2 files changed

+14
-12
lines changed

2 files changed

+14
-12
lines changed

config.mak.uname

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -775,7 +775,7 @@ vcxproj:
775775
# Make .vcxproj files and add them
776776
unset QUIET_GEN QUIET_BUILT_IN; \
777777
perl contrib/buildsystems/generate -g Vcxproj
778-
git add -f git.sln {*,*/lib,t/helper/*}/*.vcxproj
778+
git add -f git.sln {*,*/lib.proj,t/helper/*}/*.vcxproj
779779

780780
# Generate the LinkOrCopyBuiltins.targets and LinkOrCopyRemoteHttp.targets file
781781
(echo '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">' && \
@@ -785,16 +785,16 @@ vcxproj:
785785
echo ' <Copy SourceFiles="$$(OutDir)\git.exe" DestinationFiles="$$(OutDir)\'"$$name"'" SkipUnchangedFiles="true" UseHardlinksIfPossible="true" />'; \
786786
done && \
787787
echo ' </Target>' && \
788-
echo '</Project>') >git/LinkOrCopyBuiltins.targets
788+
echo '</Project>') >git.proj/LinkOrCopyBuiltins.targets
789789
(echo '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">' && \
790790
echo ' <Target Name="CopyBuiltins_AfterBuild" AfterTargets="AfterBuild">' && \
791791
for name in $(REMOTE_CURL_ALIASES); \
792792
do \
793793
echo ' <Copy SourceFiles="$$(OutDir)\'"$(REMOTE_CURL_PRIMARY)"'" DestinationFiles="$$(OutDir)\'"$$name"'" SkipUnchangedFiles="true" UseHardlinksIfPossible="true" />'; \
794794
done && \
795795
echo ' </Target>' && \
796-
echo '</Project>') >git-remote-http/LinkOrCopyRemoteHttp.targets
797-
git add -f git/LinkOrCopyBuiltins.targets git-remote-http/LinkOrCopyRemoteHttp.targets
796+
echo '</Project>') >git-remote-http.proj/LinkOrCopyRemoteHttp.targets
797+
git add -f git.proj/LinkOrCopyBuiltins.targets git-remote-http.proj/LinkOrCopyRemoteHttp.targets
798798

799799
# Add command-list.h and config-list.h
800800
$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 config-list.h command-list.h

contrib/buildsystems/Generators/Vcxproj.pm

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ sub createProject {
5858
my $uuid = generate_guid($name);
5959
$$build_structure{"$prefix${target}_GUID"} = $uuid;
6060
my $vcxproj = $target;
61-
$vcxproj =~ s/(.*\/)?(.*)/$&\/$2.vcxproj/;
62-
$vcxproj =~ s/([^\/]*)(\/lib)\/(lib.vcxproj)/$1$2\/$1_$3/;
61+
$vcxproj =~ s/(.*\/)?(.*)/$&.proj\/$2.vcxproj/;
62+
$vcxproj =~ s/([^\/]*)(\/lib\.proj)\/(lib.vcxproj)/$1$2\/$1_$3/;
6363
$$build_structure{"$prefix${target}_VCXPROJ"} = $vcxproj;
6464

6565
my @srcs = sort(map("$rel_dir\\$_", @{$$build_structure{"$prefix${name}_SOURCES"}}));
@@ -88,7 +88,9 @@ sub createProject {
8888
$defines =~ s/>/&gt;/g;
8989
$defines =~ s/\'//g;
9090

91-
die "Could not create the directory $target for $label project!\n" unless (-d "$target" || mkdir "$target");
91+
my $dir = $vcxproj;
92+
$dir =~ s/\/[^\/]*$//;
93+
die "Could not create the directory $dir for $label project!\n" unless (-d "$dir" || mkdir "$dir");
9294

9395
open F, ">$vcxproj" or die "Could not open $vcxproj for writing!\n";
9496
binmode F, ":crlf :utf8";
@@ -235,14 +237,14 @@ EOM
235237

236238
print F << "EOM";
237239
<ItemGroup>
238-
<ProjectReference Include="$cdup\\libgit\\libgit.vcxproj">
240+
<ProjectReference Include="$cdup\\libgit.proj\\libgit.vcxproj">
239241
<Project>$uuid_libgit</Project>
240242
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
241243
</ProjectReference>
242244
EOM
243245
if (!($name =~ 'xdiff')) {
244246
print F << "EOM";
245-
<ProjectReference Include="$cdup\\xdiff\\lib\\xdiff_lib.vcxproj">
247+
<ProjectReference Include="$cdup\\xdiff\\lib.proj\\xdiff_lib.vcxproj">
246248
<Project>$uuid_xdiff_lib</Project>
247249
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
248250
</ProjectReference>
@@ -251,7 +253,7 @@ EOM
251253
if ($name =~ /(test-(line-buffer|svn-fe)|^git-remote-testsvn)\.exe$/) {
252254
my $uuid_vcs_svn_lib = $$build_structure{"LIBS_vcs-svn/lib_GUID"};
253255
print F << "EOM";
254-
<ProjectReference Include="$cdup\\vcs-svn\\lib\\vcs-svn_lib.vcxproj">
256+
<ProjectReference Include="$cdup\\vcs-svn\\lib.proj\\vcs-svn_lib.vcxproj">
255257
<Project>$uuid_vcs_svn_lib</Project>
256258
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
257259
</ProjectReference>
@@ -328,7 +330,7 @@ sub createGlueProject {
328330
my $vcxproj = $build_structure{"APPS_${appname}_VCXPROJ"};
329331
$vcxproj =~ s/\//\\/g;
330332
$appname =~ s/.*\///;
331-
print F "\"${appname}\", \"${vcxproj}\", \"${uuid}\"";
333+
print F "\"${appname}.proj\", \"${vcxproj}\", \"${uuid}\"";
332334
print F "$SLN_POST";
333335
}
334336
foreach (@libs) {
@@ -338,7 +340,7 @@ sub createGlueProject {
338340
my $vcxproj = $build_structure{"LIBS_${libname}_VCXPROJ"};
339341
$vcxproj =~ s/\//\\/g;
340342
$libname =~ s/\//_/g;
341-
print F "\"${libname}\", \"${vcxproj}\", \"${uuid}\"";
343+
print F "\"${libname}.proj\", \"${vcxproj}\", \"${uuid}\"";
342344
print F "$SLN_POST";
343345
}
344346

0 commit comments

Comments
 (0)