public inbox for git@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] meson: wire up gitk and git-gui
@ 2025-08-19  8:18 Patrick Steinhardt
  2025-08-19  8:18 ` [PATCH 1/3] git-gui: move into "subprojects/" Patrick Steinhardt
                   ` (5 more replies)
  0 siblings, 6 replies; 29+ messages in thread
From: Patrick Steinhardt @ 2025-08-19  8:18 UTC (permalink / raw)
  To: git; +Cc: Johannes Sixt

Hi,

I have upstreamed support for Meson into both gitk [1] and git-gui [2].
This small patch series wires up support in Git.

To the best of my knowledge this is the last missing piece for feature
compatibility with our Makefile. As such, from my point of view, I think
that we can stop treating the Meson build system as experimental and
instead officially endorse it. Once merged I'll thus send another patch
series that updates our documentation in various different places to
also mention how to build Git with Meson.

Thanks!

Patrick

[1]: https://github.com/j6t/gitk/pull/8
[2]: https://github.com/j6t/git-gui/pull/9

---
Patrick Steinhardt (3):
      git-gui: move into "subprojects/"
      gitk: move into "subprojects/"
      meson: wire up gitk and git-gui

 Documentation/SubmittingPatches                       |   4 ++--
 Documentation/gitk.adoc                               |   2 +-
 Makefile                                              |  18 +++++++++---------
 meson.build                                           |  14 ++++++++++++++
 meson_options.txt                                     |   4 ++++
 subprojects/.gitignore                                |   2 ++
 {git-gui => subprojects/git-gui}/.gitattributes       |   0
 {git-gui => subprojects/git-gui}/.gitignore           |   0
 .../git-gui}/GIT-GUI-BUILD-OPTIONS.in                 |   0
 {git-gui => subprojects/git-gui}/GIT-VERSION-GEN      |   0
 {git-gui => subprojects/git-gui}/Makefile             |   0
 {git-gui => subprojects/git-gui}/README.md            |   0
 {git-gui => subprojects/git-gui}/generate-git-gui.sh  |   0
 {git-gui => subprojects/git-gui}/generate-script.sh   |   0
 {git-gui => subprojects/git-gui}/generate-tclindex.sh |   0
 {git-gui => subprojects/git-gui}/git-gui--askpass.sh  |   0
 {git-gui => subprojects/git-gui}/git-gui.sh           |   0
 {git-gui => subprojects/git-gui}/lib/about.tcl        |   0
 {git-gui => subprojects/git-gui}/lib/blame.tcl        |   0
 {git-gui => subprojects/git-gui}/lib/branch.tcl       |   0
 .../git-gui}/lib/branch_checkout.tcl                  |   0
 .../git-gui}/lib/branch_create.tcl                    |   0
 .../git-gui}/lib/branch_delete.tcl                    |   0
 .../git-gui}/lib/branch_rename.tcl                    |   0
 {git-gui => subprojects/git-gui}/lib/browser.tcl      |   0
 {git-gui => subprojects/git-gui}/lib/checkout_op.tcl  |   0
 {git-gui => subprojects/git-gui}/lib/choose_font.tcl  |   0
 .../git-gui}/lib/choose_repository.tcl                |   0
 {git-gui => subprojects/git-gui}/lib/choose_rev.tcl   |   0
 {git-gui => subprojects/git-gui}/lib/chord.tcl        |   0
 {git-gui => subprojects/git-gui}/lib/class.tcl        |   0
 {git-gui => subprojects/git-gui}/lib/commit.tcl       |   0
 {git-gui => subprojects/git-gui}/lib/console.tcl      |   0
 {git-gui => subprojects/git-gui}/lib/database.tcl     |   0
 {git-gui => subprojects/git-gui}/lib/date.tcl         |   0
 {git-gui => subprojects/git-gui}/lib/diff.tcl         |   0
 {git-gui => subprojects/git-gui}/lib/encoding.tcl     |   0
 {git-gui => subprojects/git-gui}/lib/error.tcl        |   0
 {git-gui => subprojects/git-gui}/lib/git-gui.ico      | Bin
 {git-gui => subprojects/git-gui}/lib/index.tcl        |   0
 {git-gui => subprojects/git-gui}/lib/line.tcl         |   0
 {git-gui => subprojects/git-gui}/lib/logo.tcl         |   0
 {git-gui => subprojects/git-gui}/lib/merge.tcl        |   0
 {git-gui => subprojects/git-gui}/lib/mergetool.tcl    |   0
 {git-gui => subprojects/git-gui}/lib/meson.build      |   0
 {git-gui => subprojects/git-gui}/lib/option.tcl       |   0
 {git-gui => subprojects/git-gui}/lib/remote.tcl       |   0
 {git-gui => subprojects/git-gui}/lib/remote_add.tcl   |   0
 .../git-gui}/lib/remote_branch_delete.tcl             |   0
 {git-gui => subprojects/git-gui}/lib/search.tcl       |   0
 {git-gui => subprojects/git-gui}/lib/shortcut.tcl     |   0
 {git-gui => subprojects/git-gui}/lib/spellcheck.tcl   |   0
 {git-gui => subprojects/git-gui}/lib/sshkey.tcl       |   0
 {git-gui => subprojects/git-gui}/lib/status_bar.tcl   |   0
 {git-gui => subprojects/git-gui}/lib/themed.tcl       |   0
 {git-gui => subprojects/git-gui}/lib/tools.tcl        |   0
 {git-gui => subprojects/git-gui}/lib/tools_dlg.tcl    |   0
 {git-gui => subprojects/git-gui}/lib/transport.tcl    |   0
 {git-gui => subprojects/git-gui}/lib/win32.tcl        |   0
 .../git-gui}/lib/win32_shortcut.js                    |   0
 {git-gui => subprojects/git-gui}/meson.build          |   0
 {git-gui => subprojects/git-gui}/po/.gitignore        |   0
 {git-gui => subprojects/git-gui}/po/README            |   0
 {git-gui => subprojects/git-gui}/po/bg.po             |   0
 {git-gui => subprojects/git-gui}/po/de.po             |   0
 {git-gui => subprojects/git-gui}/po/el.po             |   0
 {git-gui => subprojects/git-gui}/po/fr.po             |   0
 {git-gui => subprojects/git-gui}/po/glossary/Makefile |   0
 {git-gui => subprojects/git-gui}/po/glossary/bg.po    |   0
 {git-gui => subprojects/git-gui}/po/glossary/de.po    |   0
 {git-gui => subprojects/git-gui}/po/glossary/el.po    |   0
 {git-gui => subprojects/git-gui}/po/glossary/fr.po    |   0
 .../git-gui}/po/glossary/git-gui-glossary.pot         |   0
 .../git-gui}/po/glossary/git-gui-glossary.txt         |   0
 {git-gui => subprojects/git-gui}/po/glossary/it.po    |   0
 {git-gui => subprojects/git-gui}/po/glossary/pt_br.po |   0
 {git-gui => subprojects/git-gui}/po/glossary/pt_pt.po |   0
 .../git-gui}/po/glossary/txt-to-pot.sh                |   0
 {git-gui => subprojects/git-gui}/po/glossary/zh_cn.po |   0
 {git-gui => subprojects/git-gui}/po/hu.po             |   0
 {git-gui => subprojects/git-gui}/po/it.po             |   0
 {git-gui => subprojects/git-gui}/po/ja.po             |   0
 {git-gui => subprojects/git-gui}/po/meson.build       |   0
 {git-gui => subprojects/git-gui}/po/nb.po             |   0
 {git-gui => subprojects/git-gui}/po/po2msg.sh         |   0
 {git-gui => subprojects/git-gui}/po/pt_br.po          |   0
 {git-gui => subprojects/git-gui}/po/pt_pt.po          |   0
 {git-gui => subprojects/git-gui}/po/ru.po             |   0
 {git-gui => subprojects/git-gui}/po/sv.po             |   0
 {git-gui => subprojects/git-gui}/po/vi.po             |   0
 {git-gui => subprojects/git-gui}/po/zh_cn.po          |   0
 {git-gui => subprojects/git-gui}/windows/git-gui.sh   |   0
 {gitk-git => subprojects/gitk}/.gitignore             |   0
 {gitk-git => subprojects/gitk}/Makefile               |   0
 {gitk-git => subprojects/gitk}/generate-tcl.sh        |   0
 {gitk-git => subprojects/gitk}/gitk                   |   0
 {gitk-git => subprojects/gitk}/meson.build            |   0
 {gitk-git => subprojects/gitk}/po/.gitignore          |   0
 {gitk-git => subprojects/gitk}/po/bg.po               |   0
 {gitk-git => subprojects/gitk}/po/ca.po               |   0
 {gitk-git => subprojects/gitk}/po/de.po               |   0
 {gitk-git => subprojects/gitk}/po/es.po               |   0
 {gitk-git => subprojects/gitk}/po/fr.po               |   0
 {gitk-git => subprojects/gitk}/po/hu.po               |   0
 {gitk-git => subprojects/gitk}/po/it.po               |   0
 {gitk-git => subprojects/gitk}/po/ja.po               |   0
 {gitk-git => subprojects/gitk}/po/meson.build         |   0
 {gitk-git => subprojects/gitk}/po/po2msg.sh           |   0
 {gitk-git => subprojects/gitk}/po/pt_br.po            |   0
 {gitk-git => subprojects/gitk}/po/pt_pt.po            |   0
 {gitk-git => subprojects/gitk}/po/ru.po               |   0
 {gitk-git => subprojects/gitk}/po/sv.po               |   0
 {gitk-git => subprojects/gitk}/po/ta.po               |   0
 {gitk-git => subprojects/gitk}/po/vi.po               |   0
 {gitk-git => subprojects/gitk}/po/zh_cn.po            |   0
 115 files changed, 32 insertions(+), 12 deletions(-)


---
base-commit: c44beea485f0f2feaf460e2ac87fdd5608d63cf0
change-id: 20250703-b4-pks-meson-tcl-tk-bb75616c8048


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [PATCH 1/3] git-gui: move into "subprojects/"
  2025-08-19  8:18 [PATCH 0/3] meson: wire up gitk and git-gui Patrick Steinhardt
@ 2025-08-19  8:18 ` Patrick Steinhardt
  2025-08-19  9:36   ` Karthik Nayak
  2025-08-19  8:18 ` [PATCH 2/3] gitk: " Patrick Steinhardt
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 29+ messages in thread
From: Patrick Steinhardt @ 2025-08-19  8:18 UTC (permalink / raw)
  To: git; +Cc: Johannes Sixt

The "git-gui" project has recently gained support for being built with
Meson, but it is not yet wired up in Git's own Meson build instructions.
"git-gui" itself is wired up as a standalone project, which means that
we can trivially make it available via `subproject("git-gui")`.

So far the theory. In practice thoguh the `subproject()` function comes
with a couple of limitations. Most importantly, all subprojects need to
be contained in the same directory, and that directory cannot be the
top-level directory of the parent project. Right now we use the default
subproject directory ("subprojects/") for a couple of fallbacks in case
some important dependencies couldn't be found.

This means that we cannot just include the "git-gui" directory as a
subproject as it lives in our root directory. There are three options:

  - We move "git-gui" into "subprojects/". It requires a bit of churn,
    but should otherwise not have any significant downsides.

  - We create a symlink pointing from "subprojects/git-gui" to the
    top-level directory. This may not work on Windows.

  - We can create a "git-gui.wrap" file that knows to pull a specific
    commit from upstream and build it. This would mean that Meson and
    Makefiles now have different sources of truth for which version of
    "git-gui" we build.

The first option feels like the most sensible solution. It creates churn
and requires us to adapt the pull-request workflow a bit. But this
should be a one-time cost.

In theory we could also rename the "subprojects/" directory by passing
the "subproject_dir" argument to our `project()` call. But the name
feels quite fitting for our purpose, as well.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 Documentation/SubmittingPatches                             |   2 +-
 Makefile                                                    |  12 ++++++------
 subprojects/.gitignore                                      |   1 +
 {git-gui => subprojects/git-gui}/.gitattributes             |   0
 {git-gui => subprojects/git-gui}/.gitignore                 |   0
 {git-gui => subprojects/git-gui}/GIT-GUI-BUILD-OPTIONS.in   |   0
 {git-gui => subprojects/git-gui}/GIT-VERSION-GEN            |   0
 {git-gui => subprojects/git-gui}/Makefile                   |   0
 {git-gui => subprojects/git-gui}/README.md                  |   0
 {git-gui => subprojects/git-gui}/generate-git-gui.sh        |   0
 {git-gui => subprojects/git-gui}/generate-script.sh         |   0
 {git-gui => subprojects/git-gui}/generate-tclindex.sh       |   0
 {git-gui => subprojects/git-gui}/git-gui--askpass.sh        |   0
 {git-gui => subprojects/git-gui}/git-gui.sh                 |   0
 {git-gui => subprojects/git-gui}/lib/about.tcl              |   0
 {git-gui => subprojects/git-gui}/lib/blame.tcl              |   0
 {git-gui => subprojects/git-gui}/lib/branch.tcl             |   0
 {git-gui => subprojects/git-gui}/lib/branch_checkout.tcl    |   0
 {git-gui => subprojects/git-gui}/lib/branch_create.tcl      |   0
 {git-gui => subprojects/git-gui}/lib/branch_delete.tcl      |   0
 {git-gui => subprojects/git-gui}/lib/branch_rename.tcl      |   0
 {git-gui => subprojects/git-gui}/lib/browser.tcl            |   0
 {git-gui => subprojects/git-gui}/lib/checkout_op.tcl        |   0
 {git-gui => subprojects/git-gui}/lib/choose_font.tcl        |   0
 {git-gui => subprojects/git-gui}/lib/choose_repository.tcl  |   0
 {git-gui => subprojects/git-gui}/lib/choose_rev.tcl         |   0
 {git-gui => subprojects/git-gui}/lib/chord.tcl              |   0
 {git-gui => subprojects/git-gui}/lib/class.tcl              |   0
 {git-gui => subprojects/git-gui}/lib/commit.tcl             |   0
 {git-gui => subprojects/git-gui}/lib/console.tcl            |   0
 {git-gui => subprojects/git-gui}/lib/database.tcl           |   0
 {git-gui => subprojects/git-gui}/lib/date.tcl               |   0
 {git-gui => subprojects/git-gui}/lib/diff.tcl               |   0
 {git-gui => subprojects/git-gui}/lib/encoding.tcl           |   0
 {git-gui => subprojects/git-gui}/lib/error.tcl              |   0
 {git-gui => subprojects/git-gui}/lib/git-gui.ico            | Bin
 {git-gui => subprojects/git-gui}/lib/index.tcl              |   0
 {git-gui => subprojects/git-gui}/lib/line.tcl               |   0
 {git-gui => subprojects/git-gui}/lib/logo.tcl               |   0
 {git-gui => subprojects/git-gui}/lib/merge.tcl              |   0
 {git-gui => subprojects/git-gui}/lib/mergetool.tcl          |   0
 {git-gui => subprojects/git-gui}/lib/meson.build            |   0
 {git-gui => subprojects/git-gui}/lib/option.tcl             |   0
 {git-gui => subprojects/git-gui}/lib/remote.tcl             |   0
 {git-gui => subprojects/git-gui}/lib/remote_add.tcl         |   0
 .../git-gui}/lib/remote_branch_delete.tcl                   |   0
 {git-gui => subprojects/git-gui}/lib/search.tcl             |   0
 {git-gui => subprojects/git-gui}/lib/shortcut.tcl           |   0
 {git-gui => subprojects/git-gui}/lib/spellcheck.tcl         |   0
 {git-gui => subprojects/git-gui}/lib/sshkey.tcl             |   0
 {git-gui => subprojects/git-gui}/lib/status_bar.tcl         |   0
 {git-gui => subprojects/git-gui}/lib/themed.tcl             |   0
 {git-gui => subprojects/git-gui}/lib/tools.tcl              |   0
 {git-gui => subprojects/git-gui}/lib/tools_dlg.tcl          |   0
 {git-gui => subprojects/git-gui}/lib/transport.tcl          |   0
 {git-gui => subprojects/git-gui}/lib/win32.tcl              |   0
 {git-gui => subprojects/git-gui}/lib/win32_shortcut.js      |   0
 {git-gui => subprojects/git-gui}/meson.build                |   0
 {git-gui => subprojects/git-gui}/po/.gitignore              |   0
 {git-gui => subprojects/git-gui}/po/README                  |   0
 {git-gui => subprojects/git-gui}/po/bg.po                   |   0
 {git-gui => subprojects/git-gui}/po/de.po                   |   0
 {git-gui => subprojects/git-gui}/po/el.po                   |   0
 {git-gui => subprojects/git-gui}/po/fr.po                   |   0
 {git-gui => subprojects/git-gui}/po/glossary/Makefile       |   0
 {git-gui => subprojects/git-gui}/po/glossary/bg.po          |   0
 {git-gui => subprojects/git-gui}/po/glossary/de.po          |   0
 {git-gui => subprojects/git-gui}/po/glossary/el.po          |   0
 {git-gui => subprojects/git-gui}/po/glossary/fr.po          |   0
 .../git-gui}/po/glossary/git-gui-glossary.pot               |   0
 .../git-gui}/po/glossary/git-gui-glossary.txt               |   0
 {git-gui => subprojects/git-gui}/po/glossary/it.po          |   0
 {git-gui => subprojects/git-gui}/po/glossary/pt_br.po       |   0
 {git-gui => subprojects/git-gui}/po/glossary/pt_pt.po       |   0
 {git-gui => subprojects/git-gui}/po/glossary/txt-to-pot.sh  |   0
 {git-gui => subprojects/git-gui}/po/glossary/zh_cn.po       |   0
 {git-gui => subprojects/git-gui}/po/hu.po                   |   0
 {git-gui => subprojects/git-gui}/po/it.po                   |   0
 {git-gui => subprojects/git-gui}/po/ja.po                   |   0
 {git-gui => subprojects/git-gui}/po/meson.build             |   0
 {git-gui => subprojects/git-gui}/po/nb.po                   |   0
 {git-gui => subprojects/git-gui}/po/po2msg.sh               |   0
 {git-gui => subprojects/git-gui}/po/pt_br.po                |   0
 {git-gui => subprojects/git-gui}/po/pt_pt.po                |   0
 {git-gui => subprojects/git-gui}/po/ru.po                   |   0
 {git-gui => subprojects/git-gui}/po/sv.po                   |   0
 {git-gui => subprojects/git-gui}/po/vi.po                   |   0
 {git-gui => subprojects/git-gui}/po/zh_cn.po                |   0
 {git-gui => subprojects/git-gui}/windows/git-gui.sh         |   0
 89 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index 86ca7f6a78a..3aca70728c7 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -699,7 +699,7 @@ rebase when I receive your patches).
 Some parts of the system have dedicated maintainers with their own
 repositories.
 
-- `git-gui/` comes from the git-gui project, maintained by Johannes Sixt:
+- `subprojects/git-gui/` comes from the git-gui project, maintained by Johannes Sixt:
 
         https://github.com/j6t/git-gui
 
diff --git a/Makefile b/Makefile
index e11340c1ae7..834b79ca7ec 100644
--- a/Makefile
+++ b/Makefile
@@ -2457,7 +2457,7 @@ endif
 
 all::
 ifndef NO_TCLTK
-	$(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
+	$(QUIET_SUBDIR0)subprojects/git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
 	$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
 endif
 	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'
@@ -3569,7 +3569,7 @@ ifndef NO_PERL
 endif
 ifndef NO_TCLTK
 	$(MAKE) -C gitk-git install
-	$(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install
+	$(MAKE) -C subprojects/git-gui gitexecdir='$(gitexec_instdir_SQ)' install
 endif
 ifneq (,$X)
 	$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_COMMANDS_TO_INSTALL) $(OTHER_PROGRAMS))), test '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p' -ef '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p$X' || $(RM) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p';)
@@ -3665,8 +3665,8 @@ GIT_ARCHIVE_EXTRA_FILES = \
 	--prefix=$(GIT_TARNAME)/ \
 	--add-file=configure \
 	--add-file=.dist-tmp-dir/version \
-	--prefix=$(GIT_TARNAME)/git-gui/ \
-	--add-file=.dist-tmp-dir/git-gui/version
+	--prefix=$(GIT_TARNAME)/subprojects/git-gui/ \
+	--add-file=.dist-tmp-dir/subprojects/git-gui/version
 ifdef DC_SHA1_SUBMODULE
 GIT_ARCHIVE_EXTRA_FILES += \
 	--prefix=$(GIT_TARNAME)/sha1collisiondetection/ \
@@ -3681,7 +3681,7 @@ dist: git-archive$(X) configure
 	@$(RM) -r .dist-tmp-dir
 	@mkdir .dist-tmp-dir
 	@echo $(GIT_VERSION) > .dist-tmp-dir/version
-	@$(MAKE) -C git-gui TARDIR=../.dist-tmp-dir/git-gui dist-version
+	@$(MAKE) -C subprojects/git-gui TARDIR=../.dist-tmp-dir/subprojects/git-gui dist-version
 	./git-archive --format=tar \
 		$(GIT_ARCHIVE_EXTRA_FILES) \
 		--prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar
@@ -3787,7 +3787,7 @@ endif
 	$(MAKE) -C t/ clean
 ifndef NO_TCLTK
 	$(MAKE) -C gitk-git clean
-	$(MAKE) -C git-gui clean
+	$(MAKE) -C subprojects/git-gui clean
 endif
 	$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-BUILD-OPTIONS
 	$(RM) GIT-USER-AGENT GIT-PREFIX
diff --git a/subprojects/.gitignore b/subprojects/.gitignore
index 63ea916ef5f..96388dbdd22 100644
--- a/subprojects/.gitignore
+++ b/subprojects/.gitignore
@@ -1 +1,2 @@
 /*/
+!/git-gui/
diff --git a/git-gui/.gitattributes b/subprojects/git-gui/.gitattributes
similarity index 100%
rename from git-gui/.gitattributes
rename to subprojects/git-gui/.gitattributes
diff --git a/git-gui/.gitignore b/subprojects/git-gui/.gitignore
similarity index 100%
rename from git-gui/.gitignore
rename to subprojects/git-gui/.gitignore
diff --git a/git-gui/GIT-GUI-BUILD-OPTIONS.in b/subprojects/git-gui/GIT-GUI-BUILD-OPTIONS.in
similarity index 100%
rename from git-gui/GIT-GUI-BUILD-OPTIONS.in
rename to subprojects/git-gui/GIT-GUI-BUILD-OPTIONS.in
diff --git a/git-gui/GIT-VERSION-GEN b/subprojects/git-gui/GIT-VERSION-GEN
similarity index 100%
rename from git-gui/GIT-VERSION-GEN
rename to subprojects/git-gui/GIT-VERSION-GEN
diff --git a/git-gui/Makefile b/subprojects/git-gui/Makefile
similarity index 100%
rename from git-gui/Makefile
rename to subprojects/git-gui/Makefile
diff --git a/git-gui/README.md b/subprojects/git-gui/README.md
similarity index 100%
rename from git-gui/README.md
rename to subprojects/git-gui/README.md
diff --git a/git-gui/generate-git-gui.sh b/subprojects/git-gui/generate-git-gui.sh
similarity index 100%
rename from git-gui/generate-git-gui.sh
rename to subprojects/git-gui/generate-git-gui.sh
diff --git a/git-gui/generate-script.sh b/subprojects/git-gui/generate-script.sh
similarity index 100%
rename from git-gui/generate-script.sh
rename to subprojects/git-gui/generate-script.sh
diff --git a/git-gui/generate-tclindex.sh b/subprojects/git-gui/generate-tclindex.sh
similarity index 100%
rename from git-gui/generate-tclindex.sh
rename to subprojects/git-gui/generate-tclindex.sh
diff --git a/git-gui/git-gui--askpass.sh b/subprojects/git-gui/git-gui--askpass.sh
similarity index 100%
rename from git-gui/git-gui--askpass.sh
rename to subprojects/git-gui/git-gui--askpass.sh
diff --git a/git-gui/git-gui.sh b/subprojects/git-gui/git-gui.sh
similarity index 100%
rename from git-gui/git-gui.sh
rename to subprojects/git-gui/git-gui.sh
diff --git a/git-gui/lib/about.tcl b/subprojects/git-gui/lib/about.tcl
similarity index 100%
rename from git-gui/lib/about.tcl
rename to subprojects/git-gui/lib/about.tcl
diff --git a/git-gui/lib/blame.tcl b/subprojects/git-gui/lib/blame.tcl
similarity index 100%
rename from git-gui/lib/blame.tcl
rename to subprojects/git-gui/lib/blame.tcl
diff --git a/git-gui/lib/branch.tcl b/subprojects/git-gui/lib/branch.tcl
similarity index 100%
rename from git-gui/lib/branch.tcl
rename to subprojects/git-gui/lib/branch.tcl
diff --git a/git-gui/lib/branch_checkout.tcl b/subprojects/git-gui/lib/branch_checkout.tcl
similarity index 100%
rename from git-gui/lib/branch_checkout.tcl
rename to subprojects/git-gui/lib/branch_checkout.tcl
diff --git a/git-gui/lib/branch_create.tcl b/subprojects/git-gui/lib/branch_create.tcl
similarity index 100%
rename from git-gui/lib/branch_create.tcl
rename to subprojects/git-gui/lib/branch_create.tcl
diff --git a/git-gui/lib/branch_delete.tcl b/subprojects/git-gui/lib/branch_delete.tcl
similarity index 100%
rename from git-gui/lib/branch_delete.tcl
rename to subprojects/git-gui/lib/branch_delete.tcl
diff --git a/git-gui/lib/branch_rename.tcl b/subprojects/git-gui/lib/branch_rename.tcl
similarity index 100%
rename from git-gui/lib/branch_rename.tcl
rename to subprojects/git-gui/lib/branch_rename.tcl
diff --git a/git-gui/lib/browser.tcl b/subprojects/git-gui/lib/browser.tcl
similarity index 100%
rename from git-gui/lib/browser.tcl
rename to subprojects/git-gui/lib/browser.tcl
diff --git a/git-gui/lib/checkout_op.tcl b/subprojects/git-gui/lib/checkout_op.tcl
similarity index 100%
rename from git-gui/lib/checkout_op.tcl
rename to subprojects/git-gui/lib/checkout_op.tcl
diff --git a/git-gui/lib/choose_font.tcl b/subprojects/git-gui/lib/choose_font.tcl
similarity index 100%
rename from git-gui/lib/choose_font.tcl
rename to subprojects/git-gui/lib/choose_font.tcl
diff --git a/git-gui/lib/choose_repository.tcl b/subprojects/git-gui/lib/choose_repository.tcl
similarity index 100%
rename from git-gui/lib/choose_repository.tcl
rename to subprojects/git-gui/lib/choose_repository.tcl
diff --git a/git-gui/lib/choose_rev.tcl b/subprojects/git-gui/lib/choose_rev.tcl
similarity index 100%
rename from git-gui/lib/choose_rev.tcl
rename to subprojects/git-gui/lib/choose_rev.tcl
diff --git a/git-gui/lib/chord.tcl b/subprojects/git-gui/lib/chord.tcl
similarity index 100%
rename from git-gui/lib/chord.tcl
rename to subprojects/git-gui/lib/chord.tcl
diff --git a/git-gui/lib/class.tcl b/subprojects/git-gui/lib/class.tcl
similarity index 100%
rename from git-gui/lib/class.tcl
rename to subprojects/git-gui/lib/class.tcl
diff --git a/git-gui/lib/commit.tcl b/subprojects/git-gui/lib/commit.tcl
similarity index 100%
rename from git-gui/lib/commit.tcl
rename to subprojects/git-gui/lib/commit.tcl
diff --git a/git-gui/lib/console.tcl b/subprojects/git-gui/lib/console.tcl
similarity index 100%
rename from git-gui/lib/console.tcl
rename to subprojects/git-gui/lib/console.tcl
diff --git a/git-gui/lib/database.tcl b/subprojects/git-gui/lib/database.tcl
similarity index 100%
rename from git-gui/lib/database.tcl
rename to subprojects/git-gui/lib/database.tcl
diff --git a/git-gui/lib/date.tcl b/subprojects/git-gui/lib/date.tcl
similarity index 100%
rename from git-gui/lib/date.tcl
rename to subprojects/git-gui/lib/date.tcl
diff --git a/git-gui/lib/diff.tcl b/subprojects/git-gui/lib/diff.tcl
similarity index 100%
rename from git-gui/lib/diff.tcl
rename to subprojects/git-gui/lib/diff.tcl
diff --git a/git-gui/lib/encoding.tcl b/subprojects/git-gui/lib/encoding.tcl
similarity index 100%
rename from git-gui/lib/encoding.tcl
rename to subprojects/git-gui/lib/encoding.tcl
diff --git a/git-gui/lib/error.tcl b/subprojects/git-gui/lib/error.tcl
similarity index 100%
rename from git-gui/lib/error.tcl
rename to subprojects/git-gui/lib/error.tcl
diff --git a/git-gui/lib/git-gui.ico b/subprojects/git-gui/lib/git-gui.ico
similarity index 100%
rename from git-gui/lib/git-gui.ico
rename to subprojects/git-gui/lib/git-gui.ico
diff --git a/git-gui/lib/index.tcl b/subprojects/git-gui/lib/index.tcl
similarity index 100%
rename from git-gui/lib/index.tcl
rename to subprojects/git-gui/lib/index.tcl
diff --git a/git-gui/lib/line.tcl b/subprojects/git-gui/lib/line.tcl
similarity index 100%
rename from git-gui/lib/line.tcl
rename to subprojects/git-gui/lib/line.tcl
diff --git a/git-gui/lib/logo.tcl b/subprojects/git-gui/lib/logo.tcl
similarity index 100%
rename from git-gui/lib/logo.tcl
rename to subprojects/git-gui/lib/logo.tcl
diff --git a/git-gui/lib/merge.tcl b/subprojects/git-gui/lib/merge.tcl
similarity index 100%
rename from git-gui/lib/merge.tcl
rename to subprojects/git-gui/lib/merge.tcl
diff --git a/git-gui/lib/mergetool.tcl b/subprojects/git-gui/lib/mergetool.tcl
similarity index 100%
rename from git-gui/lib/mergetool.tcl
rename to subprojects/git-gui/lib/mergetool.tcl
diff --git a/git-gui/lib/meson.build b/subprojects/git-gui/lib/meson.build
similarity index 100%
rename from git-gui/lib/meson.build
rename to subprojects/git-gui/lib/meson.build
diff --git a/git-gui/lib/option.tcl b/subprojects/git-gui/lib/option.tcl
similarity index 100%
rename from git-gui/lib/option.tcl
rename to subprojects/git-gui/lib/option.tcl
diff --git a/git-gui/lib/remote.tcl b/subprojects/git-gui/lib/remote.tcl
similarity index 100%
rename from git-gui/lib/remote.tcl
rename to subprojects/git-gui/lib/remote.tcl
diff --git a/git-gui/lib/remote_add.tcl b/subprojects/git-gui/lib/remote_add.tcl
similarity index 100%
rename from git-gui/lib/remote_add.tcl
rename to subprojects/git-gui/lib/remote_add.tcl
diff --git a/git-gui/lib/remote_branch_delete.tcl b/subprojects/git-gui/lib/remote_branch_delete.tcl
similarity index 100%
rename from git-gui/lib/remote_branch_delete.tcl
rename to subprojects/git-gui/lib/remote_branch_delete.tcl
diff --git a/git-gui/lib/search.tcl b/subprojects/git-gui/lib/search.tcl
similarity index 100%
rename from git-gui/lib/search.tcl
rename to subprojects/git-gui/lib/search.tcl
diff --git a/git-gui/lib/shortcut.tcl b/subprojects/git-gui/lib/shortcut.tcl
similarity index 100%
rename from git-gui/lib/shortcut.tcl
rename to subprojects/git-gui/lib/shortcut.tcl
diff --git a/git-gui/lib/spellcheck.tcl b/subprojects/git-gui/lib/spellcheck.tcl
similarity index 100%
rename from git-gui/lib/spellcheck.tcl
rename to subprojects/git-gui/lib/spellcheck.tcl
diff --git a/git-gui/lib/sshkey.tcl b/subprojects/git-gui/lib/sshkey.tcl
similarity index 100%
rename from git-gui/lib/sshkey.tcl
rename to subprojects/git-gui/lib/sshkey.tcl
diff --git a/git-gui/lib/status_bar.tcl b/subprojects/git-gui/lib/status_bar.tcl
similarity index 100%
rename from git-gui/lib/status_bar.tcl
rename to subprojects/git-gui/lib/status_bar.tcl
diff --git a/git-gui/lib/themed.tcl b/subprojects/git-gui/lib/themed.tcl
similarity index 100%
rename from git-gui/lib/themed.tcl
rename to subprojects/git-gui/lib/themed.tcl
diff --git a/git-gui/lib/tools.tcl b/subprojects/git-gui/lib/tools.tcl
similarity index 100%
rename from git-gui/lib/tools.tcl
rename to subprojects/git-gui/lib/tools.tcl
diff --git a/git-gui/lib/tools_dlg.tcl b/subprojects/git-gui/lib/tools_dlg.tcl
similarity index 100%
rename from git-gui/lib/tools_dlg.tcl
rename to subprojects/git-gui/lib/tools_dlg.tcl
diff --git a/git-gui/lib/transport.tcl b/subprojects/git-gui/lib/transport.tcl
similarity index 100%
rename from git-gui/lib/transport.tcl
rename to subprojects/git-gui/lib/transport.tcl
diff --git a/git-gui/lib/win32.tcl b/subprojects/git-gui/lib/win32.tcl
similarity index 100%
rename from git-gui/lib/win32.tcl
rename to subprojects/git-gui/lib/win32.tcl
diff --git a/git-gui/lib/win32_shortcut.js b/subprojects/git-gui/lib/win32_shortcut.js
similarity index 100%
rename from git-gui/lib/win32_shortcut.js
rename to subprojects/git-gui/lib/win32_shortcut.js
diff --git a/git-gui/meson.build b/subprojects/git-gui/meson.build
similarity index 100%
rename from git-gui/meson.build
rename to subprojects/git-gui/meson.build
diff --git a/git-gui/po/.gitignore b/subprojects/git-gui/po/.gitignore
similarity index 100%
rename from git-gui/po/.gitignore
rename to subprojects/git-gui/po/.gitignore
diff --git a/git-gui/po/README b/subprojects/git-gui/po/README
similarity index 100%
rename from git-gui/po/README
rename to subprojects/git-gui/po/README
diff --git a/git-gui/po/bg.po b/subprojects/git-gui/po/bg.po
similarity index 100%
rename from git-gui/po/bg.po
rename to subprojects/git-gui/po/bg.po
diff --git a/git-gui/po/de.po b/subprojects/git-gui/po/de.po
similarity index 100%
rename from git-gui/po/de.po
rename to subprojects/git-gui/po/de.po
diff --git a/git-gui/po/el.po b/subprojects/git-gui/po/el.po
similarity index 100%
rename from git-gui/po/el.po
rename to subprojects/git-gui/po/el.po
diff --git a/git-gui/po/fr.po b/subprojects/git-gui/po/fr.po
similarity index 100%
rename from git-gui/po/fr.po
rename to subprojects/git-gui/po/fr.po
diff --git a/git-gui/po/glossary/Makefile b/subprojects/git-gui/po/glossary/Makefile
similarity index 100%
rename from git-gui/po/glossary/Makefile
rename to subprojects/git-gui/po/glossary/Makefile
diff --git a/git-gui/po/glossary/bg.po b/subprojects/git-gui/po/glossary/bg.po
similarity index 100%
rename from git-gui/po/glossary/bg.po
rename to subprojects/git-gui/po/glossary/bg.po
diff --git a/git-gui/po/glossary/de.po b/subprojects/git-gui/po/glossary/de.po
similarity index 100%
rename from git-gui/po/glossary/de.po
rename to subprojects/git-gui/po/glossary/de.po
diff --git a/git-gui/po/glossary/el.po b/subprojects/git-gui/po/glossary/el.po
similarity index 100%
rename from git-gui/po/glossary/el.po
rename to subprojects/git-gui/po/glossary/el.po
diff --git a/git-gui/po/glossary/fr.po b/subprojects/git-gui/po/glossary/fr.po
similarity index 100%
rename from git-gui/po/glossary/fr.po
rename to subprojects/git-gui/po/glossary/fr.po
diff --git a/git-gui/po/glossary/git-gui-glossary.pot b/subprojects/git-gui/po/glossary/git-gui-glossary.pot
similarity index 100%
rename from git-gui/po/glossary/git-gui-glossary.pot
rename to subprojects/git-gui/po/glossary/git-gui-glossary.pot
diff --git a/git-gui/po/glossary/git-gui-glossary.txt b/subprojects/git-gui/po/glossary/git-gui-glossary.txt
similarity index 100%
rename from git-gui/po/glossary/git-gui-glossary.txt
rename to subprojects/git-gui/po/glossary/git-gui-glossary.txt
diff --git a/git-gui/po/glossary/it.po b/subprojects/git-gui/po/glossary/it.po
similarity index 100%
rename from git-gui/po/glossary/it.po
rename to subprojects/git-gui/po/glossary/it.po
diff --git a/git-gui/po/glossary/pt_br.po b/subprojects/git-gui/po/glossary/pt_br.po
similarity index 100%
rename from git-gui/po/glossary/pt_br.po
rename to subprojects/git-gui/po/glossary/pt_br.po
diff --git a/git-gui/po/glossary/pt_pt.po b/subprojects/git-gui/po/glossary/pt_pt.po
similarity index 100%
rename from git-gui/po/glossary/pt_pt.po
rename to subprojects/git-gui/po/glossary/pt_pt.po
diff --git a/git-gui/po/glossary/txt-to-pot.sh b/subprojects/git-gui/po/glossary/txt-to-pot.sh
similarity index 100%
rename from git-gui/po/glossary/txt-to-pot.sh
rename to subprojects/git-gui/po/glossary/txt-to-pot.sh
diff --git a/git-gui/po/glossary/zh_cn.po b/subprojects/git-gui/po/glossary/zh_cn.po
similarity index 100%
rename from git-gui/po/glossary/zh_cn.po
rename to subprojects/git-gui/po/glossary/zh_cn.po
diff --git a/git-gui/po/hu.po b/subprojects/git-gui/po/hu.po
similarity index 100%
rename from git-gui/po/hu.po
rename to subprojects/git-gui/po/hu.po
diff --git a/git-gui/po/it.po b/subprojects/git-gui/po/it.po
similarity index 100%
rename from git-gui/po/it.po
rename to subprojects/git-gui/po/it.po
diff --git a/git-gui/po/ja.po b/subprojects/git-gui/po/ja.po
similarity index 100%
rename from git-gui/po/ja.po
rename to subprojects/git-gui/po/ja.po
diff --git a/git-gui/po/meson.build b/subprojects/git-gui/po/meson.build
similarity index 100%
rename from git-gui/po/meson.build
rename to subprojects/git-gui/po/meson.build
diff --git a/git-gui/po/nb.po b/subprojects/git-gui/po/nb.po
similarity index 100%
rename from git-gui/po/nb.po
rename to subprojects/git-gui/po/nb.po
diff --git a/git-gui/po/po2msg.sh b/subprojects/git-gui/po/po2msg.sh
similarity index 100%
rename from git-gui/po/po2msg.sh
rename to subprojects/git-gui/po/po2msg.sh
diff --git a/git-gui/po/pt_br.po b/subprojects/git-gui/po/pt_br.po
similarity index 100%
rename from git-gui/po/pt_br.po
rename to subprojects/git-gui/po/pt_br.po
diff --git a/git-gui/po/pt_pt.po b/subprojects/git-gui/po/pt_pt.po
similarity index 100%
rename from git-gui/po/pt_pt.po
rename to subprojects/git-gui/po/pt_pt.po
diff --git a/git-gui/po/ru.po b/subprojects/git-gui/po/ru.po
similarity index 100%
rename from git-gui/po/ru.po
rename to subprojects/git-gui/po/ru.po
diff --git a/git-gui/po/sv.po b/subprojects/git-gui/po/sv.po
similarity index 100%
rename from git-gui/po/sv.po
rename to subprojects/git-gui/po/sv.po
diff --git a/git-gui/po/vi.po b/subprojects/git-gui/po/vi.po
similarity index 100%
rename from git-gui/po/vi.po
rename to subprojects/git-gui/po/vi.po
diff --git a/git-gui/po/zh_cn.po b/subprojects/git-gui/po/zh_cn.po
similarity index 100%
rename from git-gui/po/zh_cn.po
rename to subprojects/git-gui/po/zh_cn.po
diff --git a/git-gui/windows/git-gui.sh b/subprojects/git-gui/windows/git-gui.sh
similarity index 100%
rename from git-gui/windows/git-gui.sh
rename to subprojects/git-gui/windows/git-gui.sh

-- 
2.51.0.261.g7ce5a0a67e.dirty


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 2/3] gitk: move into "subprojects/"
  2025-08-19  8:18 [PATCH 0/3] meson: wire up gitk and git-gui Patrick Steinhardt
  2025-08-19  8:18 ` [PATCH 1/3] git-gui: move into "subprojects/" Patrick Steinhardt
@ 2025-08-19  8:18 ` Patrick Steinhardt
  2025-08-20  5:49   ` [PATCH] doc/gitk: update reference to the external project Johannes Sixt
  2025-08-19  8:18 ` [PATCH 3/3] meson: wire up gitk and git-gui Patrick Steinhardt
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 29+ messages in thread
From: Patrick Steinhardt @ 2025-08-19  8:18 UTC (permalink / raw)
  To: git; +Cc: Johannes Sixt

Move the "gitk-git" project into "subprojects/" with the same reasoning
as in the preceding commit.

While at it, lose the "-git" suffix. There isn't any (obvious?) reason
why that suffix exists as the project is called "gitk", not "gitk-git".

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 Documentation/SubmittingPatches                | 2 +-
 Documentation/gitk.adoc                        | 2 +-
 Makefile                                       | 6 +++---
 subprojects/.gitignore                         | 1 +
 {gitk-git => subprojects/gitk}/.gitignore      | 0
 {gitk-git => subprojects/gitk}/Makefile        | 0
 {gitk-git => subprojects/gitk}/generate-tcl.sh | 0
 {gitk-git => subprojects/gitk}/gitk            | 0
 {gitk-git => subprojects/gitk}/meson.build     | 0
 {gitk-git => subprojects/gitk}/po/.gitignore   | 0
 {gitk-git => subprojects/gitk}/po/bg.po        | 0
 {gitk-git => subprojects/gitk}/po/ca.po        | 0
 {gitk-git => subprojects/gitk}/po/de.po        | 0
 {gitk-git => subprojects/gitk}/po/es.po        | 0
 {gitk-git => subprojects/gitk}/po/fr.po        | 0
 {gitk-git => subprojects/gitk}/po/hu.po        | 0
 {gitk-git => subprojects/gitk}/po/it.po        | 0
 {gitk-git => subprojects/gitk}/po/ja.po        | 0
 {gitk-git => subprojects/gitk}/po/meson.build  | 0
 {gitk-git => subprojects/gitk}/po/po2msg.sh    | 0
 {gitk-git => subprojects/gitk}/po/pt_br.po     | 0
 {gitk-git => subprojects/gitk}/po/pt_pt.po     | 0
 {gitk-git => subprojects/gitk}/po/ru.po        | 0
 {gitk-git => subprojects/gitk}/po/sv.po        | 0
 {gitk-git => subprojects/gitk}/po/ta.po        | 0
 {gitk-git => subprojects/gitk}/po/vi.po        | 0
 {gitk-git => subprojects/gitk}/po/zh_cn.po     | 0
 27 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index 3aca70728c7..7492db36d0a 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -705,7 +705,7 @@ repositories.
 
    Contibutions should go via the git mailing list.
 
-- `gitk-git/` comes from the gitk project, maintained by Johannes Sixt:
+- `subprojects/gitk/` comes from the gitk project, maintained by Johannes Sixt:
 
 	https://github.com/j6t/gitk
 
diff --git a/Documentation/gitk.adoc b/Documentation/gitk.adoc
index 58ce40ddb11..284266711f1 100644
--- a/Documentation/gitk.adoc
+++ b/Documentation/gitk.adoc
@@ -170,7 +170,7 @@ tcl/tk.
 versions are distributed as part of the Git suite for the convenience
 of end users.
 
-gitk-git/ comes from Paul Mackerras's gitk project:
+subprojects/gitk/ comes from Paul Mackerras's gitk project:
 
 	git://ozlabs.org/~paulus/gitk
 
diff --git a/Makefile b/Makefile
index 834b79ca7ec..861b0b98594 100644
--- a/Makefile
+++ b/Makefile
@@ -2458,7 +2458,7 @@ endif
 all::
 ifndef NO_TCLTK
 	$(QUIET_SUBDIR0)subprojects/git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
-	$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
+	$(QUIET_SUBDIR0)subprojects/gitk $(QUIET_SUBDIR1) all
 endif
 	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'
 
@@ -3568,7 +3568,7 @@ ifndef NO_PERL
 	(cd '$(DESTDIR_SQ)$(perllibdir_SQ)' && umask 022 && $(TAR) xof -)
 endif
 ifndef NO_TCLTK
-	$(MAKE) -C gitk-git install
+	$(MAKE) -C subprojects/gitk install
 	$(MAKE) -C subprojects/git-gui gitexecdir='$(gitexec_instdir_SQ)' install
 endif
 ifneq (,$X)
@@ -3786,7 +3786,7 @@ endif
 	$(MAKE) -C templates/ clean
 	$(MAKE) -C t/ clean
 ifndef NO_TCLTK
-	$(MAKE) -C gitk-git clean
+	$(MAKE) -C subprojects/gitk clean
 	$(MAKE) -C subprojects/git-gui clean
 endif
 	$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-BUILD-OPTIONS
diff --git a/subprojects/.gitignore b/subprojects/.gitignore
index 96388dbdd22..fd66efe7100 100644
--- a/subprojects/.gitignore
+++ b/subprojects/.gitignore
@@ -1,2 +1,3 @@
 /*/
 !/git-gui/
+!/gitk/
diff --git a/gitk-git/.gitignore b/subprojects/gitk/.gitignore
similarity index 100%
rename from gitk-git/.gitignore
rename to subprojects/gitk/.gitignore
diff --git a/gitk-git/Makefile b/subprojects/gitk/Makefile
similarity index 100%
rename from gitk-git/Makefile
rename to subprojects/gitk/Makefile
diff --git a/gitk-git/generate-tcl.sh b/subprojects/gitk/generate-tcl.sh
similarity index 100%
rename from gitk-git/generate-tcl.sh
rename to subprojects/gitk/generate-tcl.sh
diff --git a/gitk-git/gitk b/subprojects/gitk/gitk
similarity index 100%
rename from gitk-git/gitk
rename to subprojects/gitk/gitk
diff --git a/gitk-git/meson.build b/subprojects/gitk/meson.build
similarity index 100%
rename from gitk-git/meson.build
rename to subprojects/gitk/meson.build
diff --git a/gitk-git/po/.gitignore b/subprojects/gitk/po/.gitignore
similarity index 100%
rename from gitk-git/po/.gitignore
rename to subprojects/gitk/po/.gitignore
diff --git a/gitk-git/po/bg.po b/subprojects/gitk/po/bg.po
similarity index 100%
rename from gitk-git/po/bg.po
rename to subprojects/gitk/po/bg.po
diff --git a/gitk-git/po/ca.po b/subprojects/gitk/po/ca.po
similarity index 100%
rename from gitk-git/po/ca.po
rename to subprojects/gitk/po/ca.po
diff --git a/gitk-git/po/de.po b/subprojects/gitk/po/de.po
similarity index 100%
rename from gitk-git/po/de.po
rename to subprojects/gitk/po/de.po
diff --git a/gitk-git/po/es.po b/subprojects/gitk/po/es.po
similarity index 100%
rename from gitk-git/po/es.po
rename to subprojects/gitk/po/es.po
diff --git a/gitk-git/po/fr.po b/subprojects/gitk/po/fr.po
similarity index 100%
rename from gitk-git/po/fr.po
rename to subprojects/gitk/po/fr.po
diff --git a/gitk-git/po/hu.po b/subprojects/gitk/po/hu.po
similarity index 100%
rename from gitk-git/po/hu.po
rename to subprojects/gitk/po/hu.po
diff --git a/gitk-git/po/it.po b/subprojects/gitk/po/it.po
similarity index 100%
rename from gitk-git/po/it.po
rename to subprojects/gitk/po/it.po
diff --git a/gitk-git/po/ja.po b/subprojects/gitk/po/ja.po
similarity index 100%
rename from gitk-git/po/ja.po
rename to subprojects/gitk/po/ja.po
diff --git a/gitk-git/po/meson.build b/subprojects/gitk/po/meson.build
similarity index 100%
rename from gitk-git/po/meson.build
rename to subprojects/gitk/po/meson.build
diff --git a/gitk-git/po/po2msg.sh b/subprojects/gitk/po/po2msg.sh
similarity index 100%
rename from gitk-git/po/po2msg.sh
rename to subprojects/gitk/po/po2msg.sh
diff --git a/gitk-git/po/pt_br.po b/subprojects/gitk/po/pt_br.po
similarity index 100%
rename from gitk-git/po/pt_br.po
rename to subprojects/gitk/po/pt_br.po
diff --git a/gitk-git/po/pt_pt.po b/subprojects/gitk/po/pt_pt.po
similarity index 100%
rename from gitk-git/po/pt_pt.po
rename to subprojects/gitk/po/pt_pt.po
diff --git a/gitk-git/po/ru.po b/subprojects/gitk/po/ru.po
similarity index 100%
rename from gitk-git/po/ru.po
rename to subprojects/gitk/po/ru.po
diff --git a/gitk-git/po/sv.po b/subprojects/gitk/po/sv.po
similarity index 100%
rename from gitk-git/po/sv.po
rename to subprojects/gitk/po/sv.po
diff --git a/gitk-git/po/ta.po b/subprojects/gitk/po/ta.po
similarity index 100%
rename from gitk-git/po/ta.po
rename to subprojects/gitk/po/ta.po
diff --git a/gitk-git/po/vi.po b/subprojects/gitk/po/vi.po
similarity index 100%
rename from gitk-git/po/vi.po
rename to subprojects/gitk/po/vi.po
diff --git a/gitk-git/po/zh_cn.po b/subprojects/gitk/po/zh_cn.po
similarity index 100%
rename from gitk-git/po/zh_cn.po
rename to subprojects/gitk/po/zh_cn.po

-- 
2.51.0.261.g7ce5a0a67e.dirty


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 3/3] meson: wire up gitk and git-gui
  2025-08-19  8:18 [PATCH 0/3] meson: wire up gitk and git-gui Patrick Steinhardt
  2025-08-19  8:18 ` [PATCH 1/3] git-gui: move into "subprojects/" Patrick Steinhardt
  2025-08-19  8:18 ` [PATCH 2/3] gitk: " Patrick Steinhardt
@ 2025-08-19  8:18 ` Patrick Steinhardt
  2025-08-19  9:40   ` Karthik Nayak
  2025-08-19 15:49 ` [PATCH 0/3] " Junio C Hamano
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 29+ messages in thread
From: Patrick Steinhardt @ 2025-08-19  8:18 UTC (permalink / raw)
  To: git; +Cc: Johannes Sixt

Wire up both gitk and git-gui in Meson as subprojects. These two
programs should be the last missing pieces for feature compatibility
with our Makefile.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 meson.build       | 14 ++++++++++++++
 meson_options.txt |  4 ++++
 2 files changed, 18 insertions(+)

diff --git a/meson.build b/meson.build
index 5dd299b496..edf7b69a00 100644
--- a/meson.build
+++ b/meson.build
@@ -239,7 +239,9 @@ git = find_program('git', dirs: program_path, native: true, required: false)
 sed = find_program('sed', dirs: program_path, native: true)
 shell = find_program('sh', dirs: program_path, native: true)
 tar = find_program('tar', dirs: program_path, native: true)
+tclsh = find_program('tclsh', required: get_option('git_gui'), native: false)
 time = find_program('time', dirs: program_path, required: get_option('benchmarks'))
+wish = find_program('wish', required: get_option('git_gui').enabled() or get_option('gitk').enabled(), native: false)
 
 # Detect the target shell that is used by Git at runtime. Note that we prefer
 # "/bin/sh" over a PATH-based lookup, which provides a working shell on most
@@ -2207,6 +2209,16 @@ configure_file(
   configuration: build_options_config,
 )
 
+gitk_option = get_option('gitk').disable_auto_if(not wish.found())
+if gitk_option.allowed()
+  subproject('gitk')
+endif
+
+git_gui_option = get_option('git_gui').disable_auto_if(not tclsh.found() or not wish.found())
+if git_gui_option.allowed()
+  subproject('git-gui')
+endif
+
 # Development environments can be used via `meson devenv -C <builddir>`. This
 # allows you to execute test scripts directly with the built Git version and
 # puts the built version of Git in your PATH.
@@ -2233,6 +2245,8 @@ summary({
   'curl': curl,
   'expat': expat,
   'gettext': intl,
+  'gitk': gitk_option.allowed(),
+  'git-gui': git_gui_option.allowed(),
   'gitweb': gitweb_option.allowed(),
   'iconv': iconv,
   'pcre2': pcre2,
diff --git a/meson_options.txt b/meson_options.txt
index 1668f260a1..8fa330771b 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -41,6 +41,10 @@ option('expat', type: 'feature', value: 'enabled',
   description: 'Build helpers used to push to remotes with the HTTP transport.')
 option('gettext', type: 'feature', value: 'auto',
   description: 'Build translation files.')
+option('gitk', type: 'feature', value: 'auto',
+  description: 'Build the Gitk graphical repository browser. Requires Tcl/Tk.')
+option('git_gui', type: 'feature', value: 'auto',
+  description: 'Build the git-gui graphical user interface for Git. Requires Tcl/Tk.')
 option('gitweb', type: 'feature', value: 'auto',
   description: 'Build Git web interface. Requires Perl.')
 option('iconv', type: 'feature', value: 'auto',

-- 
2.51.0.261.g7ce5a0a67e.dirty


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* Re: [PATCH 1/3] git-gui: move into "subprojects/"
  2025-08-19  8:18 ` [PATCH 1/3] git-gui: move into "subprojects/" Patrick Steinhardt
@ 2025-08-19  9:36   ` Karthik Nayak
  0 siblings, 0 replies; 29+ messages in thread
From: Karthik Nayak @ 2025-08-19  9:36 UTC (permalink / raw)
  To: Patrick Steinhardt, git; +Cc: Johannes Sixt

[-- Attachment #1: Type: text/plain, Size: 1888 bytes --]

Patrick Steinhardt <ps@pks.im> writes:

> The "git-gui" project has recently gained support for being built with
> Meson, but it is not yet wired up in Git's own Meson build instructions.
> "git-gui" itself is wired up as a standalone project, which means that
> we can trivially make it available via `subproject("git-gui")`.
>
> So far the theory. In practice thoguh the `subproject()` function comes

s/thoguh/though

> with a couple of limitations. Most importantly, all subprojects need to
> be contained in the same directory, and that directory cannot be the
> top-level directory of the parent project. Right now we use the default
> subproject directory ("subprojects/") for a couple of fallbacks in case
> some important dependencies couldn't be found.
>
> This means that we cannot just include the "git-gui" directory as a
> subproject as it lives in our root directory. There are three options:
>
>   - We move "git-gui" into "subprojects/". It requires a bit of churn,
>     but should otherwise not have any significant downsides.
>
>   - We create a symlink pointing from "subprojects/git-gui" to the
>     top-level directory. This may not work on Windows.
>
>   - We can create a "git-gui.wrap" file that knows to pull a specific
>     commit from upstream and build it. This would mean that Meson and
>     Makefiles now have different sources of truth for which version of
>     "git-gui" we build.
>
> The first option feels like the most sensible solution. It creates churn
> and requires us to adapt the pull-request workflow a bit. But this
> should be a one-time cost.
>
> In theory we could also rename the "subprojects/" directory by passing
> the "subproject_dir" argument to our `project()` call. But the name
> feels quite fitting for our purpose, as well.
>

Okay makes sense. The most significant changes are in the top three
files and make sense.

[snip]

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 690 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 3/3] meson: wire up gitk and git-gui
  2025-08-19  8:18 ` [PATCH 3/3] meson: wire up gitk and git-gui Patrick Steinhardt
@ 2025-08-19  9:40   ` Karthik Nayak
  2025-08-24 17:25     ` Patrick Steinhardt
  0 siblings, 1 reply; 29+ messages in thread
From: Karthik Nayak @ 2025-08-19  9:40 UTC (permalink / raw)
  To: Patrick Steinhardt, git; +Cc: Johannes Sixt

[-- Attachment #1: Type: text/plain, Size: 3114 bytes --]

Patrick Steinhardt <ps@pks.im> writes:

> Wire up both gitk and git-gui in Meson as subprojects. These two
> programs should be the last missing pieces for feature compatibility
> with our Makefile.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
>  meson.build       | 14 ++++++++++++++
>  meson_options.txt |  4 ++++
>  2 files changed, 18 insertions(+)
>
> diff --git a/meson.build b/meson.build
> index 5dd299b496..edf7b69a00 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -239,7 +239,9 @@ git = find_program('git', dirs: program_path, native: true, required: false)
>  sed = find_program('sed', dirs: program_path, native: true)
>  shell = find_program('sh', dirs: program_path, native: true)
>  tar = find_program('tar', dirs: program_path, native: true)
> +tclsh = find_program('tclsh', required: get_option('git_gui'), native: false)
>  time = find_program('time', dirs: program_path, required: get_option('benchmarks'))
> +wish = find_program('wish', required: get_option('git_gui').enabled() or get_option('gitk').enabled(), native: false)
>
>  # Detect the target shell that is used by Git at runtime. Note that we prefer
>  # "/bin/sh" over a PATH-based lookup, which provides a working shell on most
> @@ -2207,6 +2209,16 @@ configure_file(
>    configuration: build_options_config,
>  )
>
> +gitk_option = get_option('gitk').disable_auto_if(not wish.found())

Since 'wish' is defined as required above when 'gitk' is enabled, would
it even come here if there is no 'wish'?

> +if gitk_option.allowed()
> +  subproject('gitk')
> +endif
> +
> +git_gui_option = get_option('git_gui').disable_auto_if(not tclsh.found() or not wish.found())
> +if git_gui_option.allowed()
> +  subproject('git-gui')
> +endif
> +
>  # Development environments can be used via `meson devenv -C <builddir>`. This
>  # allows you to execute test scripts directly with the built Git version and
>  # puts the built version of Git in your PATH.
> @@ -2233,6 +2245,8 @@ summary({
>    'curl': curl,
>    'expat': expat,
>    'gettext': intl,
> +  'gitk': gitk_option.allowed(),
> +  'git-gui': git_gui_option.allowed(),
>    'gitweb': gitweb_option.allowed(),
>    'iconv': iconv,
>    'pcre2': pcre2,
> diff --git a/meson_options.txt b/meson_options.txt
> index 1668f260a1..8fa330771b 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -41,6 +41,10 @@ option('expat', type: 'feature', value: 'enabled',
>    description: 'Build helpers used to push to remotes with the HTTP transport.')
>  option('gettext', type: 'feature', value: 'auto',
>    description: 'Build translation files.')
> +option('gitk', type: 'feature', value: 'auto',
> +  description: 'Build the Gitk graphical repository browser. Requires Tcl/Tk.')
> +option('git_gui', type: 'feature', value: 'auto',
> +  description: 'Build the git-gui graphical user interface for Git. Requires Tcl/Tk.')
>  option('gitweb', type: 'feature', value: 'auto',
>    description: 'Build Git web interface. Requires Perl.')
>  option('iconv', type: 'feature', value: 'auto',
>
> --
> 2.51.0.261.g7ce5a0a67e.dirty

The rest look good.

Thanks,
Karthik

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 690 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 0/3] meson: wire up gitk and git-gui
  2025-08-19  8:18 [PATCH 0/3] meson: wire up gitk and git-gui Patrick Steinhardt
                   ` (2 preceding siblings ...)
  2025-08-19  8:18 ` [PATCH 3/3] meson: wire up gitk and git-gui Patrick Steinhardt
@ 2025-08-19 15:49 ` Junio C Hamano
  2025-08-24 17:25   ` Patrick Steinhardt
  2025-08-19 22:25 ` Ramsay Jones
  2026-02-04  8:38 ` [PATCH v2] " Patrick Steinhardt
  5 siblings, 1 reply; 29+ messages in thread
From: Junio C Hamano @ 2025-08-19 15:49 UTC (permalink / raw)
  To: Patrick Steinhardt; +Cc: git, Johannes Sixt

Patrick Steinhardt <ps@pks.im> writes:

> Hi,
>
> I have upstreamed support for Meson into both gitk [1] and git-gui [2].
> This small patch series wires up support in Git.
>
> To the best of my knowledge this is the last missing piece for feature
> compatibility with our Makefile. As such, from my point of view, I think
> that we can stop treating the Meson build system as experimental and
> instead officially endorse it. Once merged I'll thus send another patch
> series that updates our documentation in various different places to
> also mention how to build Git with Meson.

Good.

With such a documentation, it would help folks to verify (and make
extra fixup if needed) to see how well feature parity is achieved
and peel that experimental label.

Having said that, I somehow feel that ...

>  {git-gui => subprojects/git-gui}/.gitattributes       |   0
> ...
>  {gitk-git => subprojects/gitk}/.gitignore             |   0

... a move like this is bending the source to match the limitation
of the tool, making the people who use (write, read, and build from)
the source to pay for the price, which is backwards.  The tool, be
it Meson or Make or CMake, should be serving the project, not the
other way around.  In our current build system, we don't have to
have borrowed code (from gitk, git-gui, sha1dc, or xdiff) inside a
specific subdirectory.

But I may change my mind while reading the real patches, not the
diffstat.

Thanks.

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 0/3] meson: wire up gitk and git-gui
  2025-08-19  8:18 [PATCH 0/3] meson: wire up gitk and git-gui Patrick Steinhardt
                   ` (3 preceding siblings ...)
  2025-08-19 15:49 ` [PATCH 0/3] " Junio C Hamano
@ 2025-08-19 22:25 ` Ramsay Jones
  2025-08-24 17:25   ` Patrick Steinhardt
  2026-02-04  8:38 ` [PATCH v2] " Patrick Steinhardt
  5 siblings, 1 reply; 29+ messages in thread
From: Ramsay Jones @ 2025-08-19 22:25 UTC (permalink / raw)
  To: Patrick Steinhardt, git; +Cc: Johannes Sixt



On 19/08/2025 09:18, Patrick Steinhardt wrote:
> Hi,
> 
> I have upstreamed support for Meson into both gitk [1] and git-gui [2].
> This small patch series wires up support in Git.

Just a quick FYI, but I think git-gui needs some changes equivalent to
commit 586919c3b2 ("meson: fix installation when -Dlibexexdir is set",
2025-07-16).

[I don't understand the difference between subdir() and subproject(), so
I'm not quite sure how to proceed, but I guess git-gui is a separate
project root and 'options' will be passed as-is with a new context?]

gitk doesn't install anything in the libexecdir, so should not need a
similar change.

> To the best of my knowledge this is the last missing piece for feature
> compatibility with our Makefile. As such, from my point of view, I think
> that we can stop treating the Meson build system as experimental and
> instead officially endorse it. Once merged I'll thus send another patch
> series that updates our documentation in various different places to
> also mention how to build Git with Meson.

Hmm, that seems a little soon to me. ;) I still have quite a few 'misc build
updates (part #3)' patches to send to the list (yes, I have been a bit tardy;
sorry about that).

Also, let's not forget the 'quoting nightmare' [0], which has still not been
addressed.

ATB,
Ramsay Jones

[0] https://public-inbox.org/git/a5795bfa-cc02-4c9a-b7d2-4924a94cd0db@ramsayjones.plus.com/



^ permalink raw reply	[flat|nested] 29+ messages in thread

* [PATCH] doc/gitk: update reference to the external project
  2025-08-19  8:18 ` [PATCH 2/3] gitk: " Patrick Steinhardt
@ 2025-08-20  5:49   ` Johannes Sixt
  2025-08-20  6:16     ` [PATCH v2] " Johannes Sixt
  0 siblings, 1 reply; 29+ messages in thread
From: Johannes Sixt @ 2025-08-20  5:49 UTC (permalink / raw)
  To: git; +Cc: Patrick Steinhardt

Gitk is now maintained by Johannes Sixt and the repository can be
cloned from a new URL. b59358100c20 (Update the official repo of
gitk, 2024-12-24) could have updated this instance in the manual,
too, but the opportunity was missed. Update it now.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
---

Am 19.08.25 um 10:18 schrieb Patrick Steinhardt:
> +++ b/Documentation/SubmittingPatches

> -- `gitk-git/` comes from the gitk project, maintained by Johannes Sixt:
> +- `subprojects/gitk/` comes from the gitk project, maintained by Johannes Sixt:
>  
>  	https://github.com/j6t/gitk

> +++ b/Documentation/gitk.adoc

> -gitk-git/ comes from Paul Mackerras's gitk project:
> +subprojects/gitk/ comes from Paul Mackerras's gitk project:
>  
>  	git://ozlabs.org/~paulus/gitk
Let's fix this outdated reference!

 Documentation/gitk.adoc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Documentation/gitk.adoc b/Documentation/gitk.adoc
index 58ce40ddb1..33a5648ab8 100644
--- a/Documentation/gitk.adoc
+++ b/Documentation/gitk.adoc
@@ -170,9 +170,9 @@ tcl/tk.
 versions are distributed as part of the Git suite for the convenience
 of end users.
 
-gitk-git/ comes from Paul Mackerras's gitk project:
+`gitk-git/` comes from Johannes Sixt's gitk project:
 
-	git://ozlabs.org/~paulus/gitk
+	https://github.com/j6t/gitk
 
 SEE ALSO
 --------
-- 
2.51.0.205.g9a02ae2892


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v2] doc/gitk: update reference to the external project
  2025-08-20  5:49   ` [PATCH] doc/gitk: update reference to the external project Johannes Sixt
@ 2025-08-20  6:16     ` Johannes Sixt
  2025-08-20 15:34       ` Junio C Hamano
  0 siblings, 1 reply; 29+ messages in thread
From: Johannes Sixt @ 2025-08-20  6:16 UTC (permalink / raw)
  To: git; +Cc: Patrick Steinhardt

Gitk is now maintained by Johannes Sixt and the repository can be
cloned from a new URL. b59358100c20 (Update the official repo of
gitk, 2024-12-24) could have updated this instance in the manual,
too, but the opportunity was missed. Update it now. Do give credit
to Paul Mackerras as the inventor of the program.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
---
 I just noticed that I would have removed the last user-visible
 mention of Paul. Don't do that.

 Documentation/gitk.adoc | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/Documentation/gitk.adoc b/Documentation/gitk.adoc
index 58ce40ddb1..5b34dcd077 100644
--- a/Documentation/gitk.adoc
+++ b/Documentation/gitk.adoc
@@ -163,16 +163,16 @@ used by default. If '$XDG_CONFIG_HOME' is not set it defaults to
 
 History
 -------
-Gitk was the first graphical repository browser. It's written in
-tcl/tk.
+Gitk was the first graphical repository browser, written by
+Paul Mackerras in Tcl/Tk.
 
 'gitk' is actually maintained as an independent project, but stable
 versions are distributed as part of the Git suite for the convenience
 of end users.
 
-gitk-git/ comes from Paul Mackerras's gitk project:
+`gitk-git/` comes from Johannes Sixt's gitk project:
 
-	git://ozlabs.org/~paulus/gitk
+	https://github.com/j6t/gitk
 
 SEE ALSO
 --------
-- 
2.51.0.205.g9a02ae2892

1:  5a2ed392c1 ! 1:  48668308f7 doc/gitk: update reference to the external project
    @@ Commit message
         Gitk is now maintained by Johannes Sixt and the repository can be
         cloned from a new URL. b59358100c20 (Update the official repo of
         gitk, 2024-12-24) could have updated this instance in the manual,
    -    too, but the opportunity was missed. Update it now.
    +    too, but the opportunity was missed. Update it now. Do give credit
    +    to Paul Mackerras as the inventor of the program.
     
         Signed-off-by: Johannes Sixt <j6t@kdbg.org>
     
      ## Documentation/gitk.adoc ##
    -@@ Documentation/gitk.adoc: tcl/tk.
    +@@ Documentation/gitk.adoc: used by default. If '$XDG_CONFIG_HOME' is not set it defaults to
    + 
    + History
    + -------
    +-Gitk was the first graphical repository browser. It's written in
    +-tcl/tk.
    ++Gitk was the first graphical repository browser, written by
    ++Paul Mackerras in Tcl/Tk.
    + 
    + 'gitk' is actually maintained as an independent project, but stable
      versions are distributed as part of the Git suite for the convenience
      of end users.
      

^ permalink raw reply related	[flat|nested] 29+ messages in thread

* Re: [PATCH v2] doc/gitk: update reference to the external project
  2025-08-20  6:16     ` [PATCH v2] " Johannes Sixt
@ 2025-08-20 15:34       ` Junio C Hamano
  0 siblings, 0 replies; 29+ messages in thread
From: Junio C Hamano @ 2025-08-20 15:34 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: git, Patrick Steinhardt

Johannes Sixt <j6t@kdbg.org> writes:

> Gitk is now maintained by Johannes Sixt and the repository can be
> cloned from a new URL. b59358100c20 (Update the official repo of
> gitk, 2024-12-24) could have updated this instance in the manual,
> too, but the opportunity was missed. Update it now. Do give credit
> to Paul Mackerras as the inventor of the program.
>
> Signed-off-by: Johannes Sixt <j6t@kdbg.org>
> ---

Thanks for the update.  This is long overdue.  I forgot that this
manual page was carried in my tree.

>  I just noticed that I would have removed the last user-visible
>  mention of Paul. Don't do that.
>
>  Documentation/gitk.adoc | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/gitk.adoc b/Documentation/gitk.adoc
> index 58ce40ddb1..5b34dcd077 100644
> --- a/Documentation/gitk.adoc
> +++ b/Documentation/gitk.adoc
> @@ -163,16 +163,16 @@ used by default. If '$XDG_CONFIG_HOME' is not set it defaults to
>  
>  History
>  -------
> -Gitk was the first graphical repository browser. It's written in
> -tcl/tk.
> +Gitk was the first graphical repository browser, written by
> +Paul Mackerras in Tcl/Tk.
>  
>  'gitk' is actually maintained as an independent project, but stable
>  versions are distributed as part of the Git suite for the convenience
>  of end users.
>  
> -gitk-git/ comes from Paul Mackerras's gitk project:
> +`gitk-git/` comes from Johannes Sixt's gitk project:
>  
> -	git://ozlabs.org/~paulus/gitk
> +	https://github.com/j6t/gitk
>  
>  SEE ALSO
>  --------

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 3/3] meson: wire up gitk and git-gui
  2025-08-19  9:40   ` Karthik Nayak
@ 2025-08-24 17:25     ` Patrick Steinhardt
  0 siblings, 0 replies; 29+ messages in thread
From: Patrick Steinhardt @ 2025-08-24 17:25 UTC (permalink / raw)
  To: Karthik Nayak; +Cc: git, Johannes Sixt

On Tue, Aug 19, 2025 at 02:40:55AM -0700, Karthik Nayak wrote:
> Patrick Steinhardt <ps@pks.im> writes:
> > diff --git a/meson.build b/meson.build
> > index 5dd299b496..edf7b69a00 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -2207,6 +2209,16 @@ configure_file(
> >    configuration: build_options_config,
> >  )
> >
> > +gitk_option = get_option('gitk').disable_auto_if(not wish.found())
> 
> Since 'wish' is defined as required above when 'gitk' is enabled, would
> it even come here if there is no 'wish'?

Yeah, it can happen. We're checking for `enabled()`, not `allowed()`.
This means that we only require "wish" in case the user has explicitly
asked us to enable gitk or git-gui. Otherwise, if the user has "auto"
configured for these we may end up finding one, but not both of these
commands. So we do have to auto-disable the feature in that case.

Patrick

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 0/3] meson: wire up gitk and git-gui
  2025-08-19 22:25 ` Ramsay Jones
@ 2025-08-24 17:25   ` Patrick Steinhardt
  0 siblings, 0 replies; 29+ messages in thread
From: Patrick Steinhardt @ 2025-08-24 17:25 UTC (permalink / raw)
  To: Ramsay Jones; +Cc: git, Johannes Sixt

On Tue, Aug 19, 2025 at 11:25:02PM +0100, Ramsay Jones wrote:
> 
> 
> On 19/08/2025 09:18, Patrick Steinhardt wrote:
> > Hi,
> > 
> > I have upstreamed support for Meson into both gitk [1] and git-gui [2].
> > This small patch series wires up support in Git.
> 
> Just a quick FYI, but I think git-gui needs some changes equivalent to
> commit 586919c3b2 ("meson: fix installation when -Dlibexexdir is set",
> 2025-07-16).

Ah, thanks for the hint. Will eventually fix it upstream.

> [I don't understand the difference between subdir() and subproject(), so
> I'm not quite sure how to proceed, but I guess git-gui is a separate
> project root and 'options' will be passed as-is with a new context?]

Yup. This is done so that both gitk and git-gui can also be installed
standalone.

> gitk doesn't install anything in the libexecdir, so should not need a
> similar change.
> 
> > To the best of my knowledge this is the last missing piece for feature
> > compatibility with our Makefile. As such, from my point of view, I think
> > that we can stop treating the Meson build system as experimental and
> > instead officially endorse it. Once merged I'll thus send another patch
> > series that updates our documentation in various different places to
> > also mention how to build Git with Meson.
> 
> Hmm, that seems a little soon to me. ;) I still have quite a few 'misc build
> updates (part #3)' patches to send to the list (yes, I have been a bit tardy;
> sorry about that).

Looking forward to them : 

> Also, let's not forget the 'quoting nightmare' [0], which has still not been
> addressed.

Fair, that one is still outstanding. But I guess with "feature
compatibility" I was rather referring to actually user-facing things
that Meson cannot do yet. I guess overall it will still take a bit of
time for smaller follow-up fixes to land. But in most cases I think that
Meson can be used without issues now.

Patrick

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 0/3] meson: wire up gitk and git-gui
  2025-08-19 15:49 ` [PATCH 0/3] " Junio C Hamano
@ 2025-08-24 17:25   ` Patrick Steinhardt
  2025-08-26  0:40     ` Junio C Hamano
  0 siblings, 1 reply; 29+ messages in thread
From: Patrick Steinhardt @ 2025-08-24 17:25 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Johannes Sixt

On Tue, Aug 19, 2025 at 08:49:35AM -0700, Junio C Hamano wrote:
> Patrick Steinhardt <ps@pks.im> writes:
> Having said that, I somehow feel that ...
> 
> >  {git-gui => subprojects/git-gui}/.gitattributes       |   0
> > ...
> >  {gitk-git => subprojects/gitk}/.gitignore             |   0
> 
> ... a move like this is bending the source to match the limitation
> of the tool, making the people who use (write, read, and build from)
> the source to pay for the price, which is backwards.  The tool, be
> it Meson or Make or CMake, should be serving the project, not the
> other way around.  In our current build system, we don't have to
> have borrowed code (from gitk, git-gui, sha1dc, or xdiff) inside a
> specific subdirectory.
> 
> But I may change my mind while reading the real patches, not the
> diffstat.

I'm not much of a fan of these changes either, and agree that this is a
limitation of the tool. I think it isn't _too_ bad, but I would've
preferred to not require this step.

If this is proving to be a blocker we can also change upstream to not be
a separate project. That'd have the downside that it cannot be used
standalone, but the upside that we can just put these directories
wherever we want and then include them via `subdir()`.

I think taking the pain once though and renaming is preferred so that
both gitk and git-gui can also be used with Meson standalone.

Patrick

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 0/3] meson: wire up gitk and git-gui
  2025-08-24 17:25   ` Patrick Steinhardt
@ 2025-08-26  0:40     ` Junio C Hamano
  2025-09-02 13:00       ` Patrick Steinhardt
  0 siblings, 1 reply; 29+ messages in thread
From: Junio C Hamano @ 2025-08-26  0:40 UTC (permalink / raw)
  To: Patrick Steinhardt; +Cc: git, Johannes Sixt

Patrick Steinhardt <ps@pks.im> writes:

> If this is proving to be a blocker we can also change upstream to not be
> a separate project.

What do "upstream" refer to in this sentence?  Meson?

If you are talking about "gitk" and/or "git-gui", then such an
alternative version of these patches would not change the picture an
iota, wrt "the limitation of the tool should not force the sources
that might consider using the tool to pay the price---which might be
proving to be a blocker", no?

Not that I am saying it _is_ a blocker.  But the above sounds like
making things worse for no gain, so I must be misunderstanding what
you meant X-<.

So, ... confused.

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 0/3] meson: wire up gitk and git-gui
  2025-08-26  0:40     ` Junio C Hamano
@ 2025-09-02 13:00       ` Patrick Steinhardt
  0 siblings, 0 replies; 29+ messages in thread
From: Patrick Steinhardt @ 2025-09-02 13:00 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Johannes Sixt

On Mon, Aug 25, 2025 at 05:40:17PM -0700, Junio C Hamano wrote:
> Patrick Steinhardt <ps@pks.im> writes:
> 
> > If this is proving to be a blocker we can also change upstream to not be
> > a separate project.
> 
> What do "upstream" refer to in this sentence?  Meson?
> 
> If you are talking about "gitk" and/or "git-gui", then such an
> alternative version of these patches would not change the picture an
> iota, wrt "the limitation of the tool should not force the sources
> that might consider using the tool to pay the price---which might be
> proving to be a blocker", no?

gitk/git-gui in this case.

> Not that I am saying it _is_ a blocker.  But the above sounds like
> making things worse for no gain, so I must be misunderstanding what
> you meant X-<.
> 
> So, ... confused.

So, to hopefully alleviate the confusion, there's two ways to include a
certain directory into Meson:

  - `subdir()` includes directories at arbitrary locations. The
    directory is treated as part of the project that calls `subdir()`.
    This is mostly done to segregate the project into multiple different
    components to keep things more maintainable.

  - `subproject()` includes directories in a specific location. The
    difference is that these are treated as separate projects, so there
    is a certain boundary between the top-level project and its
    subproject. Things done in the subproject won't taint anything in
    the superproject.

Right now I'm using `subproject()`, which has the effect that both gitk
and git-gui can be compiled standalone with Meson, but also as part of
the Git project. It does have the limitation though that the project
must be in a specific directory.

What I was trying to say is that we could convert the build instructions
of gitk and git-gui to not be standalone projects anymore. This would
mean that we can include the subdirectory from any arbitrary location,
but they cannot be built standalone without Git anymore.

Using `subproject()` is a much better fit for our specific use case,
even though we have to move things around. I'm not particularly fond of
this limitation, but I haven't found a better way to achieve this until
now.

So yes, it's a limitation we get from Meson. But it's easy to work
around this limitation by moving the projects into the "subprojects",
which is a one-time cost, only. I've said for a long time anyway that I
think our top-level directory could use some cleanup to make things a
bit more discoverable for new contributors, e.g. by move all the code
files into a "lib/" folder. So that's probably part of why I don't see
this refactoring as a huge downside, even if it is working around a
limitation.

Patrick

^ permalink raw reply	[flat|nested] 29+ messages in thread

* [PATCH v2] meson: wire up gitk and git-gui
  2025-08-19  8:18 [PATCH 0/3] meson: wire up gitk and git-gui Patrick Steinhardt
                   ` (4 preceding siblings ...)
  2025-08-19 22:25 ` Ramsay Jones
@ 2026-02-04  8:38 ` Patrick Steinhardt
  2026-02-04 10:00   ` Karthik Nayak
                     ` (2 more replies)
  5 siblings, 3 replies; 29+ messages in thread
From: Patrick Steinhardt @ 2026-02-04  8:38 UTC (permalink / raw)
  To: git; +Cc: Johannes Sixt

Wire up both gitk and git-gui in Meson as subprojects. These two
programs should be the last missing pieces for feature compatibility
with our Makefile for distributors.

Note that Meson expects subprojects to live in the "subprojects/"
directory. Create symlinks to fulfill this requirement.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
Hi,

I have upstreamed support for Meson into both gitk [1] and git-gui [2].
This small patch series wires up support in Git.

Changes in v2:
  - Use symlinks instead of moving both gitk and git-gui into the
    "subprojects/" directory.
  - Rebased on v2.53.0, as it's been a while since v1 :)
  - Link to v1: https://lore.kernel.org/r/20250819-b4-pks-meson-tcl-tk-v1-0-6bcaff0bc0a0@pks.im

Thanks!

Patrick

[1]: https://github.com/j6t/gitk/pull/8
[2]: https://github.com/j6t/git-gui/pull/9
---
 meson.build         | 14 ++++++++++++++
 meson_options.txt   |  4 ++++
 subprojects/git-gui |  1 +
 subprojects/gitk    |  1 +
 4 files changed, 20 insertions(+)

diff --git a/meson.build b/meson.build
index dd52efd1c8..e96953afec 100644
--- a/meson.build
+++ b/meson.build
@@ -239,7 +239,9 @@ git = find_program('git', dirs: program_path, native: true, required: false)
 sed = find_program('sed', dirs: program_path, native: true)
 shell = find_program('sh', dirs: program_path, native: true)
 tar = find_program('tar', dirs: program_path, native: true)
+tclsh = find_program('tclsh', required: get_option('git_gui'), native: false)
 time = find_program('time', dirs: program_path, required: get_option('benchmarks'))
+wish = find_program('wish', required: get_option('git_gui').enabled() or get_option('gitk').enabled(), native: false)
 
 # Detect the target shell that is used by Git at runtime. Note that we prefer
 # "/bin/sh" over a PATH-based lookup, which provides a working shell on most
@@ -2250,6 +2252,16 @@ configure_file(
   configuration: build_options_config,
 )
 
+gitk_option = get_option('gitk').disable_auto_if(not wish.found())
+if gitk_option.allowed()
+  subproject('gitk')
+endif
+
+git_gui_option = get_option('git_gui').disable_auto_if(not tclsh.found() or not wish.found())
+if git_gui_option.allowed()
+  subproject('git-gui')
+endif
+
 # Development environments can be used via `meson devenv -C <builddir>`. This
 # allows you to execute test scripts directly with the built Git version and
 # puts the built version of Git in your PATH.
@@ -2276,6 +2288,8 @@ summary({
   'curl': curl,
   'expat': expat,
   'gettext': intl,
+  'gitk': gitk_option.allowed(),
+  'git-gui': git_gui_option.allowed(),
   'gitweb': gitweb_option.allowed(),
   'iconv': iconv,
   'pcre2': pcre2,
diff --git a/meson_options.txt b/meson_options.txt
index e0be260ae1..659cbb218f 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -43,6 +43,10 @@ option('expat', type: 'feature', value: 'enabled',
   description: 'Build helpers used to push to remotes with the HTTP transport.')
 option('gettext', type: 'feature', value: 'auto',
   description: 'Build translation files.')
+option('gitk', type: 'feature', value: 'auto',
+  description: 'Build the Gitk graphical repository browser. Requires Tcl/Tk.')
+option('git_gui', type: 'feature', value: 'auto',
+  description: 'Build the git-gui graphical user interface for Git. Requires Tcl/Tk.')
 option('gitweb', type: 'feature', value: 'auto',
   description: 'Build Git web interface. Requires Perl.')
 option('iconv', type: 'feature', value: 'auto',
diff --git a/subprojects/git-gui b/subprojects/git-gui
new file mode 120000
index 0000000000..c6d917088b
--- /dev/null
+++ b/subprojects/git-gui
@@ -0,0 +1 @@
+../git-gui
\ No newline at end of file
diff --git a/subprojects/gitk b/subprojects/gitk
new file mode 120000
index 0000000000..b66ad18ae5
--- /dev/null
+++ b/subprojects/gitk
@@ -0,0 +1 @@
+../gitk-git
\ No newline at end of file

---
base-commit: 67ad42147a7acc2af6074753ebd03d904476118f
change-id: 20250703-b4-pks-meson-tcl-tk-bb75616c8048


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* Re: [PATCH v2] meson: wire up gitk and git-gui
  2026-02-04  8:38 ` [PATCH v2] " Patrick Steinhardt
@ 2026-02-04 10:00   ` Karthik Nayak
  2026-02-04 11:56     ` Patrick Steinhardt
  2026-02-04 17:53   ` Junio C Hamano
  2026-02-05  9:37   ` Jeff King
  2 siblings, 1 reply; 29+ messages in thread
From: Karthik Nayak @ 2026-02-04 10:00 UTC (permalink / raw)
  To: Patrick Steinhardt, git; +Cc: Johannes Sixt

[-- Attachment #1: Type: text/plain, Size: 2698 bytes --]

Patrick Steinhardt <ps@pks.im> writes:

> Wire up both gitk and git-gui in Meson as subprojects. These two
> programs should be the last missing pieces for feature compatibility
> with our Makefile for distributors.
>
> Note that Meson expects subprojects to live in the "subprojects/"
> directory. Create symlinks to fulfill this requirement.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
> Hi,
>
> I have upstreamed support for Meson into both gitk [1] and git-gui [2].
> This small patch series wires up support in Git.
>
> Changes in v2:
>   - Use symlinks instead of moving both gitk and git-gui into the
>     "subprojects/" directory.
>   - Rebased on v2.53.0, as it's been a while since v1 :)
>   - Link to v1: https://lore.kernel.org/r/20250819-b4-pks-meson-tcl-tk-v1-0-6bcaff0bc0a0@pks.im
>
> Thanks!
>
> Patrick


So in the previous version, we moved these projects into 'subprojects/',
but we now use symlinks instead. Do you know if there is perhaps an
issue in Meson to support configurable subproject paths? If so, we could
eventually drop the symlink.

>
> [1]: https://github.com/j6t/gitk/pull/8
> [2]: https://github.com/j6t/git-gui/pull/9
> ---
>  meson.build         | 14 ++++++++++++++
>  meson_options.txt   |  4 ++++
>  subprojects/git-gui |  1 +
>  subprojects/gitk    |  1 +
>  4 files changed, 20 insertions(+)
>
> diff --git a/meson.build b/meson.build
> index dd52efd1c8..e96953afec 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -239,7 +239,9 @@ git = find_program('git', dirs: program_path, native: true, required: false)
>  sed = find_program('sed', dirs: program_path, native: true)
>  shell = find_program('sh', dirs: program_path, native: true)
>  tar = find_program('tar', dirs: program_path, native: true)
> +tclsh = find_program('tclsh', required: get_option('git_gui'), native: false)
>  time = find_program('time', dirs: program_path, required: get_option('benchmarks'))
> +wish = find_program('wish', required: get_option('git_gui').enabled() or get_option('gitk').enabled(), native: false)
>
>  # Detect the target shell that is used by Git at runtime. Note that we prefer
>  # "/bin/sh" over a PATH-based lookup, which provides a working shell on most
> @@ -2250,6 +2252,16 @@ configure_file(
>    configuration: build_options_config,
>  )
>
> +gitk_option = get_option('gitk').disable_auto_if(not wish.found())
> +if gitk_option.allowed()
> +  subproject('gitk')
> +endif
> +
> +git_gui_option = get_option('git_gui').disable_auto_if(not tclsh.found() or not wish.found())
> +if git_gui_option.allowed()
> +  subproject('git-gui')
> +endif
> +

So gitk requires 'wish' to exist, whereas 'git_gui' also requires
'tclsh'. Looks good.

[snip]

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 690 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v2] meson: wire up gitk and git-gui
  2026-02-04 10:00   ` Karthik Nayak
@ 2026-02-04 11:56     ` Patrick Steinhardt
  0 siblings, 0 replies; 29+ messages in thread
From: Patrick Steinhardt @ 2026-02-04 11:56 UTC (permalink / raw)
  To: Karthik Nayak; +Cc: git, Johannes Sixt

On Wed, Feb 04, 2026 at 05:00:11AM -0500, Karthik Nayak wrote:
> Patrick Steinhardt <ps@pks.im> writes:
> 
> > Wire up both gitk and git-gui in Meson as subprojects. These two
> > programs should be the last missing pieces for feature compatibility
> > with our Makefile for distributors.
> >
> > Note that Meson expects subprojects to live in the "subprojects/"
> > directory. Create symlinks to fulfill this requirement.
> >
> > Signed-off-by: Patrick Steinhardt <ps@pks.im>
> > ---
> > Hi,
> >
> > I have upstreamed support for Meson into both gitk [1] and git-gui [2].
> > This small patch series wires up support in Git.
> >
> > Changes in v2:
> >   - Use symlinks instead of moving both gitk and git-gui into the
> >     "subprojects/" directory.
> >   - Rebased on v2.53.0, as it's been a while since v1 :)
> >   - Link to v1: https://lore.kernel.org/r/20250819-b4-pks-meson-tcl-tk-v1-0-6bcaff0bc0a0@pks.im
> >
> > Thanks!
> >
> > Patrick
> 
> 
> So in the previous version, we moved these projects into 'subprojects/',
> but we now use symlinks instead. Do you know if there is perhaps an
> issue in Meson to support configurable subproject paths? If so, we could
> eventually drop the symlink.

There already is such support: you can configure subprojects to live in
an arbitrary location by setting the `subproject_dir` parameter in the
`project()` call. But there are some restrictions in place here:

  - It cannot be an absolute path.

  - It must not start with a dot.

  - It must not contain "../".

So that means it's not possible to specify the top-level directory, and
that seems to be a concious decision.

Patrick

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v2] meson: wire up gitk and git-gui
  2026-02-04  8:38 ` [PATCH v2] " Patrick Steinhardt
  2026-02-04 10:00   ` Karthik Nayak
@ 2026-02-04 17:53   ` Junio C Hamano
  2026-02-05  6:58     ` Patrick Steinhardt
  2026-02-05  9:37   ` Jeff King
  2 siblings, 1 reply; 29+ messages in thread
From: Junio C Hamano @ 2026-02-04 17:53 UTC (permalink / raw)
  To: Patrick Steinhardt; +Cc: git, Johannes Sixt

Patrick Steinhardt <ps@pks.im> writes:

> Wire up both gitk and git-gui in Meson as subprojects. These two
> programs should be the last missing pieces for feature compatibility
> with our Makefile for distributors.
>
> Note that Meson expects subprojects to live in the "subprojects/"
> directory. Create symlinks to fulfill this requirement.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
> Hi,
>
> I have upstreamed support for Meson into both gitk [1] and git-gui [2].
> This small patch series wires up support in Git.
>
> Changes in v2:
>   - Use symlinks instead of moving both gitk and git-gui into the
>     "subprojects/" directory.

Just being curious (as I cannot offer an alternative if the answer
turns out to be "oops, no"), but is Windows, which has been symlink
challenged for quite some time, happy with this?

> diff --git a/subprojects/git-gui b/subprojects/git-gui
> new file mode 120000
> index 0000000000..c6d917088b
> --- /dev/null
> +++ b/subprojects/git-gui
> @@ -0,0 +1 @@
> +../git-gui
> \ No newline at end of file
> diff --git a/subprojects/gitk b/subprojects/gitk
> new file mode 120000
> index 0000000000..b66ad18ae5
> --- /dev/null
> +++ b/subprojects/gitk
> @@ -0,0 +1 @@
> +../gitk-git
> \ No newline at end of file

Completely unrelated, but I think there needs a way to decorate a
.gitattributes pattern specify symlinks (and non-symlinks), just
like "foo/" makes the pattern match only to a directory and not file
"foo", so that whitespace=incomplete-lines does not kick in for
them.  Alternatively, make symbolic links excempt from
whitespace=incomplete-lines rule altogether.


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v2] meson: wire up gitk and git-gui
  2026-02-04 17:53   ` Junio C Hamano
@ 2026-02-05  6:58     ` Patrick Steinhardt
  0 siblings, 0 replies; 29+ messages in thread
From: Patrick Steinhardt @ 2026-02-05  6:58 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Johannes Sixt

On Wed, Feb 04, 2026 at 09:53:10AM -0800, Junio C Hamano wrote:
> Patrick Steinhardt <ps@pks.im> writes:
> 
> > Wire up both gitk and git-gui in Meson as subprojects. These two
> > programs should be the last missing pieces for feature compatibility
> > with our Makefile for distributors.
> >
> > Note that Meson expects subprojects to live in the "subprojects/"
> > directory. Create symlinks to fulfill this requirement.
> >
> > Signed-off-by: Patrick Steinhardt <ps@pks.im>
> > ---
> > Hi,
> >
> > I have upstreamed support for Meson into both gitk [1] and git-gui [2].
> > This small patch series wires up support in Git.
> >
> > Changes in v2:
> >   - Use symlinks instead of moving both gitk and git-gui into the
> >     "subprojects/" directory.
> 
> Just being curious (as I cannot offer an alternative if the answer
> turns out to be "oops, no"), but is Windows, which has been symlink
> challenged for quite some time, happy with this?

I think the answer is "it depends". Modern Windows does have native
symlink support enabled in case Developer Mode is turned on to the best
of my knowledge, but not by default. Solutions like Cygwin or MSYS2 know
to emulate symlink support -- in the case of Cygwin they look and behave
like symlinks for most of the part, in MSYS2 they use a deep copy.

So I expect that it should work in those cases, but I have not tested on
Windows.

Patrick

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v2] meson: wire up gitk and git-gui
  2026-02-04  8:38 ` [PATCH v2] " Patrick Steinhardt
  2026-02-04 10:00   ` Karthik Nayak
  2026-02-04 17:53   ` Junio C Hamano
@ 2026-02-05  9:37   ` Jeff King
  2026-02-05 11:55     ` Patrick Steinhardt
  2 siblings, 1 reply; 29+ messages in thread
From: Jeff King @ 2026-02-05  9:37 UTC (permalink / raw)
  To: Patrick Steinhardt; +Cc: git, Johannes Sixt

On Wed, Feb 04, 2026 at 09:38:11AM +0100, Patrick Steinhardt wrote:

> Wire up both gitk and git-gui in Meson as subprojects. These two
> programs should be the last missing pieces for feature compatibility
> with our Makefile for distributors.
> 
> Note that Meson expects subprojects to live in the "subprojects/"
> directory. Create symlinks to fulfill this requirement.

The GitHub Actions win+Meson job fails for 'jch' with:

  Project name: gitk
  Project version: undefined
  Program sh found: YES (C:\Program Files\Git\bin\sh.EXE)
  Program wish found: YES (C:\Program Files\Git\mingw64\bin\wish.EXE)
  Program chmod found: YES (C:\Program Files\Git\usr\bin\chmod.EXE)
  Program mv found: YES (C:\Program Files\Git\usr\bin\mv.EXE)
  Program sed found: YES (C:\Program Files\Git\usr\bin\sed.EXE)
  Program msgfmt found: NO

  subprojects\gitk\meson.build:28:3: ERROR: Program 'msgfmt' not found or not executable

I didn't investigate, but presumably it is related to this topic.

-Peff

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v2] meson: wire up gitk and git-gui
  2026-02-05  9:37   ` Jeff King
@ 2026-02-05 11:55     ` Patrick Steinhardt
  2026-02-06 15:39       ` Patrick Steinhardt
  0 siblings, 1 reply; 29+ messages in thread
From: Patrick Steinhardt @ 2026-02-05 11:55 UTC (permalink / raw)
  To: Jeff King; +Cc: git, Johannes Sixt

On Thu, Feb 05, 2026 at 04:37:48AM -0500, Jeff King wrote:
> On Wed, Feb 04, 2026 at 09:38:11AM +0100, Patrick Steinhardt wrote:
> 
> > Wire up both gitk and git-gui in Meson as subprojects. These two
> > programs should be the last missing pieces for feature compatibility
> > with our Makefile for distributors.
> > 
> > Note that Meson expects subprojects to live in the "subprojects/"
> > directory. Create symlinks to fulfill this requirement.
> 
> The GitHub Actions win+Meson job fails for 'jch' with:
> 
>   Project name: gitk
>   Project version: undefined
>   Program sh found: YES (C:\Program Files\Git\bin\sh.EXE)
>   Program wish found: YES (C:\Program Files\Git\mingw64\bin\wish.EXE)
>   Program chmod found: YES (C:\Program Files\Git\usr\bin\chmod.EXE)
>   Program mv found: YES (C:\Program Files\Git\usr\bin\mv.EXE)
>   Program sed found: YES (C:\Program Files\Git\usr\bin\sed.EXE)
>   Program msgfmt found: NO
> 
>   subprojects\gitk\meson.build:28:3: ERROR: Program 'msgfmt' not found or not executable
> 
> I didn't investigate, but presumably it is related to this topic.

Oh, indeed. It seems like the logic to handle a missing msgfmt
executable already exists, but that I forgot to mark the executable as
optional itself. So we need the below patch to fix this.

The nice thing is that this verifies that things actually work with the
symlink on Windows :)

I've created https://github.com/j6t/gitk/pull/37 to fix the issue,
thanks!

Patrick

diff --git a/gitk-git/meson.build b/gitk-git/meson.build
index ca3c0cec58..aecc068d30 100644
--- a/gitk-git/meson.build
+++ b/gitk-git/meson.build
@@ -25,6 +25,6 @@ custom_target(
   install_dir: get_option('bindir'),
 )
 
-if find_program('msgfmt').found()
+if find_program('msgfmt', required: false).found()
   subdir('po')
 endif


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* Re: [PATCH v2] meson: wire up gitk and git-gui
  2026-02-05 11:55     ` Patrick Steinhardt
@ 2026-02-06 15:39       ` Patrick Steinhardt
  2026-02-06 22:23         ` Junio C Hamano
  2026-02-11 21:05         ` Junio C Hamano
  0 siblings, 2 replies; 29+ messages in thread
From: Patrick Steinhardt @ 2026-02-06 15:39 UTC (permalink / raw)
  To: Jeff King; +Cc: git, Johannes Sixt, Junio C Hamano

On Thu, Feb 05, 2026 at 12:55:04PM +0100, Patrick Steinhardt wrote:
> On Thu, Feb 05, 2026 at 04:37:48AM -0500, Jeff King wrote:
> > On Wed, Feb 04, 2026 at 09:38:11AM +0100, Patrick Steinhardt wrote:
> > 
> > > Wire up both gitk and git-gui in Meson as subprojects. These two
> > > programs should be the last missing pieces for feature compatibility
> > > with our Makefile for distributors.
> > > 
> > > Note that Meson expects subprojects to live in the "subprojects/"
> > > directory. Create symlinks to fulfill this requirement.
> > 
> > The GitHub Actions win+Meson job fails for 'jch' with:
> > 
> >   Project name: gitk
> >   Project version: undefined
> >   Program sh found: YES (C:\Program Files\Git\bin\sh.EXE)
> >   Program wish found: YES (C:\Program Files\Git\mingw64\bin\wish.EXE)
> >   Program chmod found: YES (C:\Program Files\Git\usr\bin\chmod.EXE)
> >   Program mv found: YES (C:\Program Files\Git\usr\bin\mv.EXE)
> >   Program sed found: YES (C:\Program Files\Git\usr\bin\sed.EXE)
> >   Program msgfmt found: NO
> > 
> >   subprojects\gitk\meson.build:28:3: ERROR: Program 'msgfmt' not found or not executable
> > 
> > I didn't investigate, but presumably it is related to this topic.
> 
> Oh, indeed. It seems like the logic to handle a missing msgfmt
> executable already exists, but that I forgot to mark the executable as
> optional itself. So we need the below patch to fix this.
> 
> The nice thing is that this verifies that things actually work with the
> symlink on Windows :)
> 
> I've created https://github.com/j6t/gitk/pull/37 to fix the issue,
> thanks!

The fix has been merged upstream. I've created [1] to verify that the CI
now succeeds.

Junio, I'm not really sure how to proceed here, as I cannot send the
subtree merge via mail to the best of my knowledge. Shall I instead send
a new version that just includes the upstream commit, or will you handle
the update?

Thanks!

Patrick

[1]: https://github.com/git/git/pull/2190

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v2] meson: wire up gitk and git-gui
  2026-02-06 15:39       ` Patrick Steinhardt
@ 2026-02-06 22:23         ` Junio C Hamano
  2026-02-09  8:32           ` Patrick Steinhardt
  2026-02-11 21:05         ` Junio C Hamano
  1 sibling, 1 reply; 29+ messages in thread
From: Junio C Hamano @ 2026-02-06 22:23 UTC (permalink / raw)
  To: Patrick Steinhardt; +Cc: Jeff King, git, Johannes Sixt

Patrick Steinhardt <ps@pks.im> writes:

> The fix has been merged upstream. I've created [1] to verify that the CI
> now succeeds.
>
> Junio, I'm not really sure how to proceed here, as I cannot send the
> subtree merge via mail to the best of my knowledge. Shall I instead send
> a new version that just includes the upstream commit, or will you handle
> the update?

Whenever j6t says his tree is ready, I'll pull from him to get the
update.  This "wire up" patch does not need any changes, right?  If
so, things will start working when I pull from j6t.

Thanks.

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v2] meson: wire up gitk and git-gui
  2026-02-06 22:23         ` Junio C Hamano
@ 2026-02-09  8:32           ` Patrick Steinhardt
  0 siblings, 0 replies; 29+ messages in thread
From: Patrick Steinhardt @ 2026-02-09  8:32 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeff King, git, Johannes Sixt

On Fri, Feb 06, 2026 at 02:23:09PM -0800, Junio C Hamano wrote:
> Patrick Steinhardt <ps@pks.im> writes:
> 
> > The fix has been merged upstream. I've created [1] to verify that the CI
> > now succeeds.
> >
> > Junio, I'm not really sure how to proceed here, as I cannot send the
> > subtree merge via mail to the best of my knowledge. Shall I instead send
> > a new version that just includes the upstream commit, or will you handle
> > the update?
> 
> Whenever j6t says his tree is ready, I'll pull from him to get the
> update.  This "wire up" patch does not need any changes, right?  If
> so, things will start working when I pull from j6t.

Yeah, exactly. Thanks!

Patrick

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v2] meson: wire up gitk and git-gui
  2026-02-06 15:39       ` Patrick Steinhardt
  2026-02-06 22:23         ` Junio C Hamano
@ 2026-02-11 21:05         ` Junio C Hamano
  2026-02-11 22:41           ` Johannes Sixt
  1 sibling, 1 reply; 29+ messages in thread
From: Junio C Hamano @ 2026-02-11 21:05 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: Jeff King, git, Patrick Steinhardt

Patrick Steinhardt <ps@pks.im> writes:

> On Thu, Feb 05, 2026 at 12:55:04PM +0100, Patrick Steinhardt wrote:
>
>> I've created https://github.com/j6t/gitk/pull/37 to fix the issue,
>> thanks!
>
> The fix has been merged upstream. I've created [1] to verify that the CI
> now succeeds.

Hannes, I see that in your tree

  https://github.com/j6t/gitk/commit/ddae547e3775638c238c11f30120f1e7e763fba8 

has Patrick's fix.  Is it a good time for me to pull from you, or do
you want/need to finish any housekeeping tasks like tagging before I
do?

This will hopefully help us unblock one of in-flight topics.

Thanks.

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v2] meson: wire up gitk and git-gui
  2026-02-11 21:05         ` Junio C Hamano
@ 2026-02-11 22:41           ` Johannes Sixt
  2026-02-11 22:56             ` Junio C Hamano
  0 siblings, 1 reply; 29+ messages in thread
From: Johannes Sixt @ 2026-02-11 22:41 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeff King, git, Patrick Steinhardt

Am 11.02.26 um 22:05 schrieb Junio C Hamano:
> Patrick Steinhardt <ps@pks.im> writes:
>> On Thu, Feb 05, 2026 at 12:55:04PM +0100, Patrick Steinhardt wrote:
>> The fix has been merged upstream. I've created [1] to verify that the CI
>> now succeeds.
> 
> Hannes, I see that in your tree
> 
>   https://github.com/j6t/gitk/commit/ddae547e3775638c238c11f30120f1e7e763fba8 
> 
> has Patrick's fix.  Is it a good time for me to pull from you, or do
> you want/need to finish any housekeeping tasks like tagging before I
> do?
> 
> This will hopefully help us unblock one of in-flight topics.
Please feel free to pull this commit (it's today's master).

I was pondering whether I want to include more topics in the next pull
request, but I didn't find the time to make up my mind. So, let's take
the fast route for now.

-- Hannes


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v2] meson: wire up gitk and git-gui
  2026-02-11 22:41           ` Johannes Sixt
@ 2026-02-11 22:56             ` Junio C Hamano
  0 siblings, 0 replies; 29+ messages in thread
From: Junio C Hamano @ 2026-02-11 22:56 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: Jeff King, git, Patrick Steinhardt

Johannes Sixt <j6t@kdbg.org> writes:

> Am 11.02.26 um 22:05 schrieb Junio C Hamano:
>> Patrick Steinhardt <ps@pks.im> writes:
>>> On Thu, Feb 05, 2026 at 12:55:04PM +0100, Patrick Steinhardt wrote:
>>> The fix has been merged upstream. I've created [1] to verify that the CI
>>> now succeeds.
>> 
>> Hannes, I see that in your tree
>> 
>>   https://github.com/j6t/gitk/commit/ddae547e3775638c238c11f30120f1e7e763fba8 
>> 
>> has Patrick's fix.  Is it a good time for me to pull from you, or do
>> you want/need to finish any housekeeping tasks like tagging before I
>> do?
>> 
>> This will hopefully help us unblock one of in-flight topics.
> Please feel free to pull this commit (it's today's master).
>
> I was pondering whether I want to include more topics in the next pull
> request, but I didn't find the time to make up my mind. So, let's take
> the fast route for now.
>
> -- Hannes

Thanks!

^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2026-02-11 22:57 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-19  8:18 [PATCH 0/3] meson: wire up gitk and git-gui Patrick Steinhardt
2025-08-19  8:18 ` [PATCH 1/3] git-gui: move into "subprojects/" Patrick Steinhardt
2025-08-19  9:36   ` Karthik Nayak
2025-08-19  8:18 ` [PATCH 2/3] gitk: " Patrick Steinhardt
2025-08-20  5:49   ` [PATCH] doc/gitk: update reference to the external project Johannes Sixt
2025-08-20  6:16     ` [PATCH v2] " Johannes Sixt
2025-08-20 15:34       ` Junio C Hamano
2025-08-19  8:18 ` [PATCH 3/3] meson: wire up gitk and git-gui Patrick Steinhardt
2025-08-19  9:40   ` Karthik Nayak
2025-08-24 17:25     ` Patrick Steinhardt
2025-08-19 15:49 ` [PATCH 0/3] " Junio C Hamano
2025-08-24 17:25   ` Patrick Steinhardt
2025-08-26  0:40     ` Junio C Hamano
2025-09-02 13:00       ` Patrick Steinhardt
2025-08-19 22:25 ` Ramsay Jones
2025-08-24 17:25   ` Patrick Steinhardt
2026-02-04  8:38 ` [PATCH v2] " Patrick Steinhardt
2026-02-04 10:00   ` Karthik Nayak
2026-02-04 11:56     ` Patrick Steinhardt
2026-02-04 17:53   ` Junio C Hamano
2026-02-05  6:58     ` Patrick Steinhardt
2026-02-05  9:37   ` Jeff King
2026-02-05 11:55     ` Patrick Steinhardt
2026-02-06 15:39       ` Patrick Steinhardt
2026-02-06 22:23         ` Junio C Hamano
2026-02-09  8:32           ` Patrick Steinhardt
2026-02-11 21:05         ` Junio C Hamano
2026-02-11 22:41           ` Johannes Sixt
2026-02-11 22:56             ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox