vcxproj: also link-or-copy builtins

The default location for `.exe` files linked by Visual Studio depends on the mode (debug vs release) and the architecture. Meaning: after a full build, there is a `git.exe` in the top-level directory, but none of the built-ins are linked.. When running a test script in Git Bash, it therefore would pick up the wrong, say, `git-receive-pack.exe`: the one installed at the same time as the Git Bash. Absolutely not what we want. We want to have confidence that our test covers the MSVC-built Git executables, and not some random stuff. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Johannes Schindelin committed Jul 29, 2019 at 13:08 UTC b18ae14a8f6da9a04d0a6e4698d8ccea4afb546d
2 files changed +18
config.mak.uname
+15
@@ -703,6 +703,21 @@ vcxproj:
703 perl contrib/buildsystems/generate -g Vcxproj
704 git add -f git.sln {*,*/lib,t/helper/*}/*.vcxproj
705
706 + # Generate the LinkOrCopyBuiltins.targets file
707 + (echo '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">' && \
708 + echo ' <Target Name="CopyBuiltins_AfterBuild" AfterTargets="AfterBuild">' && \
709 + for name in $(BUILT_INS);\
710 + do \
711 + echo ' <Copy SourceFiles="$$(OutDir)\git.exe" DestinationFiles="$$(OutDir)\'"$$name"'" SkipUnchangedFiles="true" UseHardlinksIfPossible="true" />'; \
712 + done && \
713 + for name in $(REMOTE_CURL_ALIASES); \
714 + do \
715 + echo ' <Copy SourceFiles="$$(OutDir)\'"$(REMOTE_CURL_PRIMARY)"'" DestinationFiles="$$(OutDir)\'"$$name"'" SkipUnchangedFiles="true" UseHardlinksIfPossible="true" />'; \
716 + done && \
717 + echo ' </Target>' && \
718 + echo '</Project>') >git/LinkOrCopyBuiltins.targets
719 + git add -f git/LinkOrCopyBuiltins.targets
720 +
721 # Add command-list.h
722 $(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 command-list.h
723 git add -f command-list.h
contrib/buildsystems/Generators/Vcxproj.pm
+3
@@ -274,6 +274,9 @@ EOM
274 </Target>
275 EOM
276 }
277 + if ($target eq 'git') {
278 + print F " <Import Project=\"LinkOrCopyBuiltins.targets\" />\n";
279 + }
280 print F << "EOM";
281 </Project>
282 EOM