vcxproj: also link-or-copy builtins
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Mon, 29 Jul 2019 20:08:13 +0000 (13:08 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 29 Jul 2019 21:51:43 +0000 (14:51 -0700)
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>
config.mak.uname
contrib/buildsystems/Generators/Vcxproj.pm
index 6d0ed923b84eafca3a98c6dc57b38b84534514b8..db7f06b95fda4ea8de9f409e11f594c163220463 100644 (file)
@@ -703,6 +703,21 @@ vcxproj:
        perl contrib/buildsystems/generate -g Vcxproj
        git add -f git.sln {*,*/lib,t/helper/*}/*.vcxproj
 
+       # Generate the LinkOrCopyBuiltins.targets file
+       (echo '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">' && \
+        echo '  <Target Name="CopyBuiltins_AfterBuild" AfterTargets="AfterBuild">' && \
+        for name in $(BUILT_INS);\
+        do \
+          echo '    <Copy SourceFiles="$$(OutDir)\git.exe" DestinationFiles="$$(OutDir)\'"$$name"'" SkipUnchangedFiles="true" UseHardlinksIfPossible="true" />'; \
+        done && \
+        for name in $(REMOTE_CURL_ALIASES); \
+        do \
+          echo '    <Copy SourceFiles="$$(OutDir)\'"$(REMOTE_CURL_PRIMARY)"'" DestinationFiles="$$(OutDir)\'"$$name"'" SkipUnchangedFiles="true" UseHardlinksIfPossible="true" />'; \
+        done && \
+        echo '  </Target>' && \
+        echo '</Project>') >git/LinkOrCopyBuiltins.targets
+       git add -f git/LinkOrCopyBuiltins.targets
+
        # Add command-list.h
        $(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 command-list.h
        git add -f command-list.h
index e65d78e16df6455ac26cfea7e39054a7e485b8cb..576ccabe1dbda06b90ee70a1882ef726315a2182 100644 (file)
@@ -274,6 +274,9 @@ sub createProject {
   </Target>
 EOM
     }
+    if ($target eq 'git') {
+      print F "  <Import Project=\"LinkOrCopyBuiltins.targets\" />\n";
+    }
     print F << "EOM";
 </Project>
 EOM