git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 08/12] mingw: rely on MSYS2's metadata instead of hard-coding it

From
Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Date
Sep 9, 2026, 19:17 UTC
Message-ID
<4cc14553dcddbd7fb1a49864ae988bad19626391.1788981436.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.2195.v3.git.1788981436.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>

MSYS2 defines some helpful environment variables, e.g. `MSYSTEM`. There is code in Git for Windows to ensure that that `MSYSTEM` variable is set, hard-coding a default.

However, the existing solution jumps through hoops to reconstruct the proper default, and is even incomplete doing so, as we found out when we extended it to support CLANGARM64.

This is absolutely unnecessary because there is already a perfectly valid `MSYSTEM` value we can use at build time. This is even true when building the MINGW32 variant on a MINGW64 system because `makepkg-mingw` will override the `MSYSTEM` value as per the `MINGW_ARCH` array.

The same is equally true for the `/mingw64`, `/mingw32` and `/clangarm64` prefix: those values are already available via the `MINGW_PREFIX` environment variable, and we just need to pass that setting through.

Only when `MINGW_PREFIX` is not set (as is the case in Git for Windows' minimal SDK, where only `MSYSTEM` is guaranteed to be set correctly), we use as fall-back the top-level directory whose name is the down-cased value of the `MSYSTEM` variable.

Incidentally, this also broadens the support to all the configurations supported by the MSYS2 project, i.e. clang64 & ucrt64, too.

Note: This keeps the same, hard-coded MSYSTEM platform support for CMake
as before, but drops it for Meson (because it is unclear how Meson could
do this in a more flexible manner).
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 config.mak.uname | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/config.mak.uname b/config.mak.uname
index 21f53e3f7e..3a90995587 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -465,14 +465,8 @@ ifeq ($(uname_S),Windows)
 	GIT_VERSION := $(GIT_VERSION).MSVC
 	pathsep = ;
 	# Assume that this is built in Git for Windows' SDK
-        ifeq (MINGW32,$(MSYSTEM))
-		prefix = /mingw32
-        else
-                ifeq (CLANGARM64,$(MSYSTEM))
-			prefix = /clangarm64
-                else
-			prefix = /mingw64
-                endif
+        ifneq (,$(MSYSTEM))
+		prefix = $(MINGW_PREFIX)
         endif
 	# Prepend MSVC 64-bit tool-chain to PATH.
 	#
@@ -755,6 +749,10 @@ ifeq ($(uname_S),MINGW)
 		BASIC_LDFLAGS += -Wl,--dynamicbase
         endif
         ifneq (,$(MSYSTEM))
+                ifeq ($(MINGW_PREFIX),$(filter-out /%,$(MINGW_PREFIX)))
+			# Override if empty or does not start with a slash
+			MINGW_PREFIX := /$(shell echo '$(MSYSTEM)' | tr A-Z a-z)
+                endif
 		prefix = $(MINGW_PREFIX)
 		HOST_CPU = $(patsubst %-w64-mingw32,%,$(MINGW_CHOST))
 		BASIC_LDFLAGS += -Wl,--pic-executable
-- 
gitgitgadget
Previous: Johannes Schindelin via GitGitGadgetNext: Johannes Sixt
Message 46 of 71 in “Upstream some more Git for Windows' patches”
  1. 00/12 Upstream some more Git for Windows' patchesJohannes Schindelin via GitGitGadget, Aug 5, 2026
  2. 01/12 mingw: include the Python parts in the buildJohannes Schindelin via GitGitGadget, Aug 5, 2026
  3. 02/12 mingw: stop hard-coding `CC = gcc`Johannes Schindelin via GitGitGadget, Aug 5, 2026
  4. 03/12 mingw: drop the -D_USE_32BIT_TIME_T optionJohannes Schindelin via GitGitGadget, Aug 5, 2026
  5. 05/12 mingw: avoid over-specifying `--pic-executable`Johannes Schindelin via GitGitGadget, Aug 5, 2026
  6. 04/12 mingw: only use -Wl,--large-address-aware for 32-bit buildsJohannes Schindelin via GitGitGadget, Aug 5, 2026
  7. 08/12 mingw: rely on MSYS2's metadata instead of hard-coding itJohannes Schindelin via GitGitGadget, Aug 5, 2026
  8. Junio C HamanoAug 5, 2026
  9. Johannes SchindelinAug 6, 2026
  10. 06/12 mingw: set the prefix and HOST_CPU as per MSYS2's settingsJohannes Schindelin via GitGitGadget, Aug 5, 2026
  11. 09/12 windows: skip linking `git-<command>` for built-insJohannes Schindelin via GitGitGadget, Aug 5, 2026
  12. Junio C HamanoAug 5, 2026
  13. 07/12 mingw: only enable the MSYS2-specific stuff when compiling in MSYS2Johannes Schindelin via GitGitGadget, Aug 5, 2026
  14. 10/12 mingw: always define `ETC_*` for MSYS2 environmentsJohannes Schindelin via GitGitGadget, Aug 5, 2026
  15. 11/12 mingw: ensure valid CTYPEJohannes Schindelin via GitGitGadget, Aug 5, 2026
  16. 12/12 mingw: allow `git.exe` to be used instead of the "Git wrapper"Johannes Schindelin via GitGitGadget, Aug 5, 2026
  17. Junio C HamanoAug 6, 2026
  18. Johannes SchindelinAug 12, 2026
  19. Junio C HamanoAug 12, 2026
  20. 00/12 Upstream some more Git for Windows' patchesJohannes Schindelin via GitGitGadget, Aug 12, 2026
  21. 01/12 mingw: include the Python parts in the buildJohannes Schindelin via GitGitGadget, Aug 12, 2026
  22. 02/12 mingw: stop hard-coding `CC = gcc`Johannes Schindelin via GitGitGadget, Aug 12, 2026
  23. 03/12 mingw: drop the -D_USE_32BIT_TIME_T optionJohannes Schindelin via GitGitGadget, Aug 12, 2026
  24. 04/12 mingw: only use -Wl,--large-address-aware for 32-bit buildsJohannes Schindelin via GitGitGadget, Aug 12, 2026
  25. 05/12 mingw: avoid over-specifying `--pic-executable`Johannes Schindelin via GitGitGadget, Aug 12, 2026
  26. 06/12 mingw: set the prefix and HOST_CPU as per MSYS2's settingsJohannes Schindelin via GitGitGadget, Aug 12, 2026
  27. 07/12 mingw: only enable the MSYS2-specific stuff when compiling in MSYS2Johannes Schindelin via GitGitGadget, Aug 12, 2026
  28. 08/12 mingw: rely on MSYS2's metadata instead of hard-coding itJohannes Schindelin via GitGitGadget, Aug 12, 2026
  29. Johannes SixtAug 15, 2026
  30. Junio C HamanoAug 31, 2026
  31. Johannes SchindelinSep 9, 2026
  32. Johannes SchindelinSep 9, 2026
  33. 09/12 windows: skip linking `git-<command>` for built-insJohannes Schindelin via GitGitGadget, Aug 12, 2026
  34. 10/12 mingw: always define `ETC_*` for MSYS2 environmentsJohannes Schindelin via GitGitGadget, Aug 12, 2026
  35. 11/12 mingw: ensure valid CTYPEJohannes Schindelin via GitGitGadget, Aug 12, 2026
  36. 12/12 mingw: allow `git.exe` to be used instead of the "Git wrapper"Johannes Schindelin via GitGitGadget, Aug 12, 2026
  37. Johannes SixtAug 15, 2026
  38. 00/12 Upstream some more Git for Windows' patchesJohannes Schindelin via GitGitGadget, Sep 9, 2026
  39. 01/12 mingw: include the Python parts in the buildJohannes Schindelin via GitGitGadget, Sep 9, 2026
  40. 02/12 mingw: stop hard-coding `CC = gcc`Johannes Schindelin via GitGitGadget, Sep 9, 2026
  41. 03/12 mingw: drop the -D_USE_32BIT_TIME_T optionJohannes Schindelin via GitGitGadget, Sep 9, 2026
  42. 04/12 mingw: only use -Wl,--large-address-aware for 32-bit buildsJohannes Schindelin via GitGitGadget, Sep 9, 2026
  43. 05/12 mingw: avoid over-specifying `--pic-executable`Johannes Schindelin via GitGitGadget, Sep 9, 2026
  44. 06/12 mingw: set the prefix and HOST_CPU as per MSYS2's settingsJohannes Schindelin via GitGitGadget, Sep 9, 2026
  45. 07/12 mingw: only enable the MSYS2-specific stuff when compiling in MSYS2Johannes Schindelin via GitGitGadget, Sep 9, 2026
  46. 08/12 mingw: rely on MSYS2's metadata instead of hard-coding itJohannes Schindelin via GitGitGadget, Sep 9, 2026
  47. Johannes SixtSep 9, 2026
  48. Johannes SchindelinSep 9, 2026
  49. Junio C HamanoSep 9, 2026
  50. 09/12 windows: skip linking `git-<command>` for built-insJohannes Schindelin via GitGitGadget, Sep 9, 2026
  51. 10/12 mingw: always define `ETC_*` for MSYS2 environmentsJohannes Schindelin via GitGitGadget, Sep 9, 2026
  52. 11/12 mingw: ensure valid CTYPEJohannes Schindelin via GitGitGadget, Sep 9, 2026
  53. 12/12 mingw: allow `git.exe` to be used instead of the "Git wrapper"Johannes Schindelin via GitGitGadget, Sep 9, 2026
  54. Junio C HamanoSep 9, 2026
  55. 00/13 Upstream some more Git for Windows' patchesJohannes Schindelin via GitGitGadget, Sep 10, 2026
  56. 01/13 mingw: include the Python parts in the buildJohannes Schindelin via GitGitGadget, Sep 10, 2026
  57. 02/13 mingw: stop hard-coding `CC = gcc`Johannes Schindelin via GitGitGadget, Sep 10, 2026
  58. 03/13 mingw: drop the -D_USE_32BIT_TIME_T optionJohannes Schindelin via GitGitGadget, Sep 10, 2026
  59. 04/13 mingw: only use -Wl,--large-address-aware for 32-bit buildsJohannes Schindelin via GitGitGadget, Sep 10, 2026
  60. Oswald BuddenhagenSep 11, 2026
  61. 05/13 mingw: avoid over-specifying `--pic-executable`Johannes Schindelin via GitGitGadget, Sep 10, 2026
  62. 06/13 mingw: set the prefix and HOST_CPU as per MSYS2's settingsJohannes Schindelin via GitGitGadget, Sep 10, 2026
  63. Oswald BuddenhagenSep 11, 2026
  64. 07/13 mingw: only enable the MSYS2-specific stuff when compiling in MSYS2Johannes Schindelin via GitGitGadget, Sep 10, 2026
  65. 08/13 mingw: rely on MSYS2's metadata instead of hard-coding itJohannes Schindelin via GitGitGadget, Sep 10, 2026
  66. 09/13 windows: skip linking `git-<command>` for built-insJohannes Schindelin via GitGitGadget, Sep 10, 2026
  67. 10/13 mingw: always define `ETC_*` for MSYS2 environmentsJohannes Schindelin via GitGitGadget, Sep 10, 2026
  68. 11/13 mingw: ensure valid CTYPEJohannes Schindelin via GitGitGadget, Sep 10, 2026
  69. 12/13 mingw: allow `git.exe` to be used instead of the "Git wrapper"Johannes Schindelin via GitGitGadget, Sep 10, 2026
  70. 13/13 t0060: adjust the code styleJohannes Schindelin via GitGitGadget, Sep 10, 2026
  71. Junio C HamanoSep 10, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.