{"thread":{"id":"63983","subject":"[PATCH 0/3] meson: wire up gitk and git-gui","startedAt":"2025-08-19T08:18:41Z","lastAt":"2026-02-11T22:57:00Z","messageCount":29,"participants":["Patrick Steinhardt","Karthik Nayak","Junio C Hamano","Ramsay Jones","Johannes Sixt","Jeff King"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"524394","messageId":"20250819-b4-pks-meson-tcl-tk-v1-0-6bcaff0bc0a0@pks.im","threadId":"63983","inReplyTo":null,"subject":"[PATCH 0/3] meson: wire up gitk and git-gui","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-08-19T08:18:34Z","receivedAt":"2025-08-19T08:18:41Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"Hi,\n\nI have upstreamed support for Meson into both gitk [1] and git-gui [2].\nThis small patch series wires up support in Git.\n\nTo the best of my knowledge this is the last missing piece for feature\ncompatibility with our Makefile. As such, from my point of view, I think\nthat we can stop treating the Meson build system as experimental and\ninstead officially endorse it. Once merged I'll thus send another patch\nseries that updates our documentation in various different places to\nalso mention how to build Git with Meson.\n\nThanks!\n\nPatrick\n\n[1]: https://github.com/j6t/gitk/pull/8\n[2]: https://github.com/j6t/git-gui/pull/9\n\n---\nPatrick Steinhardt (3):\n      git-gui: move into \"subprojects/\"\n      gitk: move into \"subprojects/\"\n      meson: wire up gitk and git-gui\n\n Documentation/SubmittingPatches                       |   4 ++--\n Documentation/gitk.adoc                               |   2 +-\n Makefile                                              |  18 +++++++++---------\n meson.build                                           |  14 ++++++++++++++\n meson_options.txt                                     |   4 ++++\n subprojects/.gitignore                                |   2 ++\n {git-gui => subprojects/git-gui}/.gitattributes       |   0\n {git-gui => subprojects/git-gui}/.gitignore           |   0\n .../git-gui}/GIT-GUI-BUILD-OPTIONS.in                 |   0\n {git-gui => subprojects/git-gui}/GIT-VERSION-GEN      |   0\n {git-gui => subprojects/git-gui}/Makefile             |   0\n {git-gui => subprojects/git-gui}/README.md            |   0\n {git-gui => subprojects/git-gui}/generate-git-gui.sh  |   0\n {git-gui => subprojects/git-gui}/generate-script.sh   |   0\n {git-gui => subprojects/git-gui}/generate-tclindex.sh |   0\n {git-gui => subprojects/git-gui}/git-gui--askpass.sh  |   0\n {git-gui => subprojects/git-gui}/git-gui.sh           |   0\n {git-gui => subprojects/git-gui}/lib/about.tcl        |   0\n {git-gui => subprojects/git-gui}/lib/blame.tcl        |   0\n {git-gui => subprojects/git-gui}/lib/branch.tcl       |   0\n .../git-gui}/lib/branch_checkout.tcl                  |   0\n .../git-gui}/lib/branch_create.tcl                    |   0\n .../git-gui}/lib/branch_delete.tcl                    |   0\n .../git-gui}/lib/branch_rename.tcl                    |   0\n {git-gui => subprojects/git-gui}/lib/browser.tcl      |   0\n {git-gui => subprojects/git-gui}/lib/checkout_op.tcl  |   0\n {git-gui => subprojects/git-gui}/lib/choose_font.tcl  |   0\n .../git-gui}/lib/choose_repository.tcl                |   0\n {git-gui => subprojects/git-gui}/lib/choose_rev.tcl   |   0\n {git-gui => subprojects/git-gui}/lib/chord.tcl        |   0\n {git-gui => subprojects/git-gui}/lib/class.tcl        |   0\n {git-gui => subprojects/git-gui}/lib/commit.tcl       |   0\n {git-gui => subprojects/git-gui}/lib/console.tcl      |   0\n {git-gui => subprojects/git-gui}/lib/database.tcl     |   0\n {git-gui => subprojects/git-gui}/lib/date.tcl         |   0\n {git-gui => subprojects/git-gui}/lib/diff.tcl         |   0\n {git-gui => subprojects/git-gui}/lib/encoding.tcl     |   0\n {git-gui => subprojects/git-gui}/lib/error.tcl        |   0\n {git-gui => subprojects/git-gui}/lib/git-gui.ico      | Bin\n {git-gui => subprojects/git-gui}/lib/index.tcl        |   0\n {git-gui => subprojects/git-gui}/lib/line.tcl         |   0\n {git-gui => subprojects/git-gui}/lib/logo.tcl         |   0\n {git-gui => subprojects/git-gui}/lib/merge.tcl        |   0\n {git-gui => subprojects/git-gui}/lib/mergetool.tcl    |   0\n {git-gui => subprojects/git-gui}/lib/meson.build      |   0\n {git-gui => subprojects/git-gui}/lib/option.tcl       |   0\n {git-gui => subprojects/git-gui}/lib/remote.tcl       |   0\n {git-gui => subprojects/git-gui}/lib/remote_add.tcl   |   0\n .../git-gui}/lib/remote_branch_delete.tcl             |   0\n {git-gui => subprojects/git-gui}/lib/search.tcl       |   0\n {git-gui => subprojects/git-gui}/lib/shortcut.tcl     |   0\n {git-gui => subprojects/git-gui}/lib/spellcheck.tcl   |   0\n {git-gui => subprojects/git-gui}/lib/sshkey.tcl       |   0\n {git-gui => subprojects/git-gui}/lib/status_bar.tcl   |   0\n {git-gui => subprojects/git-gui}/lib/themed.tcl       |   0\n {git-gui => subprojects/git-gui}/lib/tools.tcl        |   0\n {git-gui => subprojects/git-gui}/lib/tools_dlg.tcl    |   0\n {git-gui => subprojects/git-gui}/lib/transport.tcl    |   0\n {git-gui => subprojects/git-gui}/lib/win32.tcl        |   0\n .../git-gui}/lib/win32_shortcut.js                    |   0\n {git-gui => subprojects/git-gui}/meson.build          |   0\n {git-gui => subprojects/git-gui}/po/.gitignore        |   0\n {git-gui => subprojects/git-gui}/po/README            |   0\n {git-gui => subprojects/git-gui}/po/bg.po             |   0\n {git-gui => subprojects/git-gui}/po/de.po             |   0\n {git-gui => subprojects/git-gui}/po/el.po             |   0\n {git-gui => subprojects/git-gui}/po/fr.po             |   0\n {git-gui => subprojects/git-gui}/po/glossary/Makefile |   0\n {git-gui => subprojects/git-gui}/po/glossary/bg.po    |   0\n {git-gui => subprojects/git-gui}/po/glossary/de.po    |   0\n {git-gui => subprojects/git-gui}/po/glossary/el.po    |   0\n {git-gui => subprojects/git-gui}/po/glossary/fr.po    |   0\n .../git-gui}/po/glossary/git-gui-glossary.pot         |   0\n .../git-gui}/po/glossary/git-gui-glossary.txt         |   0\n {git-gui => subprojects/git-gui}/po/glossary/it.po    |   0\n {git-gui => subprojects/git-gui}/po/glossary/pt_br.po |   0\n {git-gui => subprojects/git-gui}/po/glossary/pt_pt.po |   0\n .../git-gui}/po/glossary/txt-to-pot.sh                |   0\n {git-gui => subprojects/git-gui}/po/glossary/zh_cn.po |   0\n {git-gui => subprojects/git-gui}/po/hu.po             |   0\n {git-gui => subprojects/git-gui}/po/it.po             |   0\n {git-gui => subprojects/git-gui}/po/ja.po             |   0\n {git-gui => subprojects/git-gui}/po/meson.build       |   0\n {git-gui => subprojects/git-gui}/po/nb.po             |   0\n {git-gui => subprojects/git-gui}/po/po2msg.sh         |   0\n {git-gui => subprojects/git-gui}/po/pt_br.po          |   0\n {git-gui => subprojects/git-gui}/po/pt_pt.po          |   0\n {git-gui => subprojects/git-gui}/po/ru.po             |   0\n {git-gui => subprojects/git-gui}/po/sv.po             |   0\n {git-gui => subprojects/git-gui}/po/vi.po             |   0\n {git-gui => subprojects/git-gui}/po/zh_cn.po          |   0\n {git-gui => subprojects/git-gui}/windows/git-gui.sh   |   0\n {gitk-git => subprojects/gitk}/.gitignore             |   0\n {gitk-git => subprojects/gitk}/Makefile               |   0\n {gitk-git => subprojects/gitk}/generate-tcl.sh        |   0\n {gitk-git => subprojects/gitk}/gitk                   |   0\n {gitk-git => subprojects/gitk}/meson.build            |   0\n {gitk-git => subprojects/gitk}/po/.gitignore          |   0\n {gitk-git => subprojects/gitk}/po/bg.po               |   0\n {gitk-git => subprojects/gitk}/po/ca.po               |   0\n {gitk-git => subprojects/gitk}/po/de.po               |   0\n {gitk-git => subprojects/gitk}/po/es.po               |   0\n {gitk-git => subprojects/gitk}/po/fr.po               |   0\n {gitk-git => subprojects/gitk}/po/hu.po               |   0\n {gitk-git => subprojects/gitk}/po/it.po               |   0\n {gitk-git => subprojects/gitk}/po/ja.po               |   0\n {gitk-git => subprojects/gitk}/po/meson.build         |   0\n {gitk-git => subprojects/gitk}/po/po2msg.sh           |   0\n {gitk-git => subprojects/gitk}/po/pt_br.po            |   0\n {gitk-git => subprojects/gitk}/po/pt_pt.po            |   0\n {gitk-git => subprojects/gitk}/po/ru.po               |   0\n {gitk-git => subprojects/gitk}/po/sv.po               |   0\n {gitk-git => subprojects/gitk}/po/ta.po               |   0\n {gitk-git => subprojects/gitk}/po/vi.po               |   0\n {gitk-git => subprojects/gitk}/po/zh_cn.po            |   0\n 115 files changed, 32 insertions(+), 12 deletions(-)\n\n\n---\nbase-commit: c44beea485f0f2feaf460e2ac87fdd5608d63cf0\nchange-id: 20250703-b4-pks-meson-tcl-tk-bb75616c8048\n\n"},{"id":"524395","messageId":"20250819-b4-pks-meson-tcl-tk-v1-1-6bcaff0bc0a0@pks.im","threadId":"63983","inReplyTo":"20250819-b4-pks-meson-tcl-tk-v1-0-6bcaff0bc0a0@pks.im","subject":"[PATCH 1/3] git-gui: move into \"subprojects/\"","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-08-19T08:18:35Z","receivedAt":"2025-08-19T08:18:44Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"The \"git-gui\" project has recently gained support for being built with\nMeson, but it is not yet wired up in Git's own Meson build instructions.\n\"git-gui\" itself is wired up as a standalone project, which means that\nwe can trivially make it available via `subproject(\"git-gui\")`.\n\nSo far the theory. In practice thoguh the `subproject()` function comes\nwith a couple of limitations. Most importantly, all subprojects need to\nbe contained in the same directory, and that directory cannot be the\ntop-level directory of the parent project. Right now we use the default\nsubproject directory (\"subprojects/\") for a couple of fallbacks in case\nsome important dependencies couldn't be found.\n\nThis means that we cannot just include the \"git-gui\" directory as a\nsubproject as it lives in our root directory. There are three options:\n\n  - We move \"git-gui\" into \"subprojects/\". It requires a bit of churn,\n    but should otherwise not have any significant downsides.\n\n  - We create a symlink pointing from \"subprojects/git-gui\" to the\n    top-level directory. This may not work on Windows.\n\n  - We can create a \"git-gui.wrap\" file that knows to pull a specific\n    commit from upstream and build it. This would mean that Meson and\n    Makefiles now have different sources of truth for which version of\n    \"git-gui\" we build.\n\nThe first option feels like the most sensible solution. It creates churn\nand requires us to adapt the pull-request workflow a bit. But this\nshould be a one-time cost.\n\nIn theory we could also rename the \"subprojects/\" directory by passing\nthe \"subproject_dir\" argument to our `project()` call. But the name\nfeels quite fitting for our purpose, as well.\n\nSigned-off-by: Patrick Steinhardt <ps@pks.im>\n---\n Documentation/SubmittingPatches                             |   2 +-\n Makefile                                                    |  12 ++++++------\n subprojects/.gitignore                                      |   1 +\n {git-gui => subprojects/git-gui}/.gitattributes             |   0\n {git-gui => subprojects/git-gui}/.gitignore                 |   0\n {git-gui => subprojects/git-gui}/GIT-GUI-BUILD-OPTIONS.in   |   0\n {git-gui => subprojects/git-gui}/GIT-VERSION-GEN            |   0\n {git-gui => subprojects/git-gui}/Makefile                   |   0\n {git-gui => subprojects/git-gui}/README.md                  |   0\n {git-gui => subprojects/git-gui}/generate-git-gui.sh        |   0\n {git-gui => subprojects/git-gui}/generate-script.sh         |   0\n {git-gui => subprojects/git-gui}/generate-tclindex.sh       |   0\n {git-gui => subprojects/git-gui}/git-gui--askpass.sh        |   0\n {git-gui => subprojects/git-gui}/git-gui.sh                 |   0\n {git-gui => subprojects/git-gui}/lib/about.tcl              |   0\n {git-gui => subprojects/git-gui}/lib/blame.tcl              |   0\n {git-gui => subprojects/git-gui}/lib/branch.tcl             |   0\n {git-gui => subprojects/git-gui}/lib/branch_checkout.tcl    |   0\n {git-gui => subprojects/git-gui}/lib/branch_create.tcl      |   0\n {git-gui => subprojects/git-gui}/lib/branch_delete.tcl      |   0\n {git-gui => subprojects/git-gui}/lib/branch_rename.tcl      |   0\n {git-gui => subprojects/git-gui}/lib/browser.tcl            |   0\n {git-gui => subprojects/git-gui}/lib/checkout_op.tcl        |   0\n {git-gui => subprojects/git-gui}/lib/choose_font.tcl        |   0\n {git-gui => subprojects/git-gui}/lib/choose_repository.tcl  |   0\n {git-gui => subprojects/git-gui}/lib/choose_rev.tcl         |   0\n {git-gui => subprojects/git-gui}/lib/chord.tcl              |   0\n {git-gui => subprojects/git-gui}/lib/class.tcl              |   0\n {git-gui => subprojects/git-gui}/lib/commit.tcl             |   0\n {git-gui => subprojects/git-gui}/lib/console.tcl            |   0\n {git-gui => subprojects/git-gui}/lib/database.tcl           |   0\n {git-gui => subprojects/git-gui}/lib/date.tcl               |   0\n {git-gui => subprojects/git-gui}/lib/diff.tcl               |   0\n {git-gui => subprojects/git-gui}/lib/encoding.tcl           |   0\n {git-gui => subprojects/git-gui}/lib/error.tcl              |   0\n {git-gui => subprojects/git-gui}/lib/git-gui.ico            | Bin\n {git-gui => subprojects/git-gui}/lib/index.tcl              |   0\n {git-gui => subprojects/git-gui}/lib/line.tcl               |   0\n {git-gui => subprojects/git-gui}/lib/logo.tcl               |   0\n {git-gui => subprojects/git-gui}/lib/merge.tcl              |   0\n {git-gui => subprojects/git-gui}/lib/mergetool.tcl          |   0\n {git-gui => subprojects/git-gui}/lib/meson.build            |   0\n {git-gui => subprojects/git-gui}/lib/option.tcl             |   0\n {git-gui => subprojects/git-gui}/lib/remote.tcl             |   0\n {git-gui => subprojects/git-gui}/lib/remote_add.tcl         |   0\n .../git-gui}/lib/remote_branch_delete.tcl                   |   0\n {git-gui => subprojects/git-gui}/lib/search.tcl             |   0\n {git-gui => subprojects/git-gui}/lib/shortcut.tcl           |   0\n {git-gui => subprojects/git-gui}/lib/spellcheck.tcl         |   0\n {git-gui => subprojects/git-gui}/lib/sshkey.tcl             |   0\n {git-gui => subprojects/git-gui}/lib/status_bar.tcl         |   0\n {git-gui => subprojects/git-gui}/lib/themed.tcl             |   0\n {git-gui => subprojects/git-gui}/lib/tools.tcl              |   0\n {git-gui => subprojects/git-gui}/lib/tools_dlg.tcl          |   0\n {git-gui => subprojects/git-gui}/lib/transport.tcl          |   0\n {git-gui => subprojects/git-gui}/lib/win32.tcl              |   0\n {git-gui => subprojects/git-gui}/lib/win32_shortcut.js      |   0\n {git-gui => subprojects/git-gui}/meson.build                |   0\n {git-gui => subprojects/git-gui}/po/.gitignore              |   0\n {git-gui => subprojects/git-gui}/po/README                  |   0\n {git-gui => subprojects/git-gui}/po/bg.po                   |   0\n {git-gui => subprojects/git-gui}/po/de.po                   |   0\n {git-gui => subprojects/git-gui}/po/el.po                   |   0\n {git-gui => subprojects/git-gui}/po/fr.po                   |   0\n {git-gui => subprojects/git-gui}/po/glossary/Makefile       |   0\n {git-gui => subprojects/git-gui}/po/glossary/bg.po          |   0\n {git-gui => subprojects/git-gui}/po/glossary/de.po          |   0\n {git-gui => subprojects/git-gui}/po/glossary/el.po          |   0\n {git-gui => subprojects/git-gui}/po/glossary/fr.po          |   0\n .../git-gui}/po/glossary/git-gui-glossary.pot               |   0\n .../git-gui}/po/glossary/git-gui-glossary.txt               |   0\n {git-gui => subprojects/git-gui}/po/glossary/it.po          |   0\n {git-gui => subprojects/git-gui}/po/glossary/pt_br.po       |   0\n {git-gui => subprojects/git-gui}/po/glossary/pt_pt.po       |   0\n {git-gui => subprojects/git-gui}/po/glossary/txt-to-pot.sh  |   0\n {git-gui => subprojects/git-gui}/po/glossary/zh_cn.po       |   0\n {git-gui => subprojects/git-gui}/po/hu.po                   |   0\n {git-gui => subprojects/git-gui}/po/it.po                   |   0\n {git-gui => subprojects/git-gui}/po/ja.po                   |   0\n {git-gui => subprojects/git-gui}/po/meson.build             |   0\n {git-gui => subprojects/git-gui}/po/nb.po                   |   0\n {git-gui => subprojects/git-gui}/po/po2msg.sh               |   0\n {git-gui => subprojects/git-gui}/po/pt_br.po                |   0\n {git-gui => subprojects/git-gui}/po/pt_pt.po                |   0\n {git-gui => subprojects/git-gui}/po/ru.po                   |   0\n {git-gui => subprojects/git-gui}/po/sv.po                   |   0\n {git-gui => subprojects/git-gui}/po/vi.po                   |   0\n {git-gui => subprojects/git-gui}/po/zh_cn.po                |   0\n {git-gui => subprojects/git-gui}/windows/git-gui.sh         |   0\n 89 files changed, 8 insertions(+), 7 deletions(-)\n\ndiff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches\nindex 86ca7f6a78a..3aca70728c7 100644\n--- a/Documentation/SubmittingPatches\n+++ b/Documentation/SubmittingPatches\n@@ -699,7 +699,7 @@ rebase when I receive your patches).\n Some parts of the system have dedicated maintainers with their own\n repositories.\n \n-- `git-gui/` comes from the git-gui project, maintained by Johannes Sixt:\n+- `subprojects/git-gui/` comes from the git-gui project, maintained by Johannes Sixt:\n \n         https://github.com/j6t/git-gui\n \ndiff --git a/Makefile b/Makefile\nindex e11340c1ae7..834b79ca7ec 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -2457,7 +2457,7 @@ endif\n \n all::\n ifndef NO_TCLTK\n-\t$(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all\n+\t$(QUIET_SUBDIR0)subprojects/git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all\n \t$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all\n endif\n \t$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'\n@@ -3569,7 +3569,7 @@ ifndef NO_PERL\n endif\n ifndef NO_TCLTK\n \t$(MAKE) -C gitk-git install\n-\t$(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install\n+\t$(MAKE) -C subprojects/git-gui gitexecdir='$(gitexec_instdir_SQ)' install\n endif\n ifneq (,$X)\n \t$(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';)\n@@ -3665,8 +3665,8 @@ GIT_ARCHIVE_EXTRA_FILES = \\\n \t--prefix=$(GIT_TARNAME)/ \\\n \t--add-file=configure \\\n \t--add-file=.dist-tmp-dir/version \\\n-\t--prefix=$(GIT_TARNAME)/git-gui/ \\\n-\t--add-file=.dist-tmp-dir/git-gui/version\n+\t--prefix=$(GIT_TARNAME)/subprojects/git-gui/ \\\n+\t--add-file=.dist-tmp-dir/subprojects/git-gui/version\n ifdef DC_SHA1_SUBMODULE\n GIT_ARCHIVE_EXTRA_FILES += \\\n \t--prefix=$(GIT_TARNAME)/sha1collisiondetection/ \\\n@@ -3681,7 +3681,7 @@ dist: git-archive$(X) configure\n \t@$(RM) -r .dist-tmp-dir\n \t@mkdir .dist-tmp-dir\n \t@echo $(GIT_VERSION) > .dist-tmp-dir/version\n-\t@$(MAKE) -C git-gui TARDIR=../.dist-tmp-dir/git-gui dist-version\n+\t@$(MAKE) -C subprojects/git-gui TARDIR=../.dist-tmp-dir/subprojects/git-gui dist-version\n \t./git-archive --format=tar \\\n \t\t$(GIT_ARCHIVE_EXTRA_FILES) \\\n \t\t--prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar\n@@ -3787,7 +3787,7 @@ endif\n \t$(MAKE) -C t/ clean\n ifndef NO_TCLTK\n \t$(MAKE) -C gitk-git clean\n-\t$(MAKE) -C git-gui clean\n+\t$(MAKE) -C subprojects/git-gui clean\n endif\n \t$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-BUILD-OPTIONS\n \t$(RM) GIT-USER-AGENT GIT-PREFIX\ndiff --git a/subprojects/.gitignore b/subprojects/.gitignore\nindex 63ea916ef5f..96388dbdd22 100644\n--- a/subprojects/.gitignore\n+++ b/subprojects/.gitignore\n@@ -1 +1,2 @@\n /*/\n+!/git-gui/\ndiff --git a/git-gui/.gitattributes b/subprojects/git-gui/.gitattributes\nsimilarity index 100%\nrename from git-gui/.gitattributes\nrename to subprojects/git-gui/.gitattributes\ndiff --git a/git-gui/.gitignore b/subprojects/git-gui/.gitignore\nsimilarity index 100%\nrename from git-gui/.gitignore\nrename to subprojects/git-gui/.gitignore\ndiff --git a/git-gui/GIT-GUI-BUILD-OPTIONS.in b/subprojects/git-gui/GIT-GUI-BUILD-OPTIONS.in\nsimilarity index 100%\nrename from git-gui/GIT-GUI-BUILD-OPTIONS.in\nrename to subprojects/git-gui/GIT-GUI-BUILD-OPTIONS.in\ndiff --git a/git-gui/GIT-VERSION-GEN b/subprojects/git-gui/GIT-VERSION-GEN\nsimilarity index 100%\nrename from git-gui/GIT-VERSION-GEN\nrename to subprojects/git-gui/GIT-VERSION-GEN\ndiff --git a/git-gui/Makefile b/subprojects/git-gui/Makefile\nsimilarity index 100%\nrename from git-gui/Makefile\nrename to subprojects/git-gui/Makefile\ndiff --git a/git-gui/README.md b/subprojects/git-gui/README.md\nsimilarity index 100%\nrename from git-gui/README.md\nrename to subprojects/git-gui/README.md\ndiff --git a/git-gui/generate-git-gui.sh b/subprojects/git-gui/generate-git-gui.sh\nsimilarity index 100%\nrename from git-gui/generate-git-gui.sh\nrename to subprojects/git-gui/generate-git-gui.sh\ndiff --git a/git-gui/generate-script.sh b/subprojects/git-gui/generate-script.sh\nsimilarity index 100%\nrename from git-gui/generate-script.sh\nrename to subprojects/git-gui/generate-script.sh\ndiff --git a/git-gui/generate-tclindex.sh b/subprojects/git-gui/generate-tclindex.sh\nsimilarity index 100%\nrename from git-gui/generate-tclindex.sh\nrename to subprojects/git-gui/generate-tclindex.sh\ndiff --git a/git-gui/git-gui--askpass.sh b/subprojects/git-gui/git-gui--askpass.sh\nsimilarity index 100%\nrename from git-gui/git-gui--askpass.sh\nrename to subprojects/git-gui/git-gui--askpass.sh\ndiff --git a/git-gui/git-gui.sh b/subprojects/git-gui/git-gui.sh\nsimilarity index 100%\nrename from git-gui/git-gui.sh\nrename to subprojects/git-gui/git-gui.sh\ndiff --git a/git-gui/lib/about.tcl b/subprojects/git-gui/lib/about.tcl\nsimilarity index 100%\nrename from git-gui/lib/about.tcl\nrename to subprojects/git-gui/lib/about.tcl\ndiff --git a/git-gui/lib/blame.tcl b/subprojects/git-gui/lib/blame.tcl\nsimilarity index 100%\nrename from git-gui/lib/blame.tcl\nrename to subprojects/git-gui/lib/blame.tcl\ndiff --git a/git-gui/lib/branch.tcl b/subprojects/git-gui/lib/branch.tcl\nsimilarity index 100%\nrename from git-gui/lib/branch.tcl\nrename to subprojects/git-gui/lib/branch.tcl\ndiff --git a/git-gui/lib/branch_checkout.tcl b/subprojects/git-gui/lib/branch_checkout.tcl\nsimilarity index 100%\nrename from git-gui/lib/branch_checkout.tcl\nrename to subprojects/git-gui/lib/branch_checkout.tcl\ndiff --git a/git-gui/lib/branch_create.tcl b/subprojects/git-gui/lib/branch_create.tcl\nsimilarity index 100%\nrename from git-gui/lib/branch_create.tcl\nrename to subprojects/git-gui/lib/branch_create.tcl\ndiff --git a/git-gui/lib/branch_delete.tcl b/subprojects/git-gui/lib/branch_delete.tcl\nsimilarity index 100%\nrename from git-gui/lib/branch_delete.tcl\nrename to subprojects/git-gui/lib/branch_delete.tcl\ndiff --git a/git-gui/lib/branch_rename.tcl b/subprojects/git-gui/lib/branch_rename.tcl\nsimilarity index 100%\nrename from git-gui/lib/branch_rename.tcl\nrename to subprojects/git-gui/lib/branch_rename.tcl\ndiff --git a/git-gui/lib/browser.tcl b/subprojects/git-gui/lib/browser.tcl\nsimilarity index 100%\nrename from git-gui/lib/browser.tcl\nrename to subprojects/git-gui/lib/browser.tcl\ndiff --git a/git-gui/lib/checkout_op.tcl b/subprojects/git-gui/lib/checkout_op.tcl\nsimilarity index 100%\nrename from git-gui/lib/checkout_op.tcl\nrename to subprojects/git-gui/lib/checkout_op.tcl\ndiff --git a/git-gui/lib/choose_font.tcl b/subprojects/git-gui/lib/choose_font.tcl\nsimilarity index 100%\nrename from git-gui/lib/choose_font.tcl\nrename to subprojects/git-gui/lib/choose_font.tcl\ndiff --git a/git-gui/lib/choose_repository.tcl b/subprojects/git-gui/lib/choose_repository.tcl\nsimilarity index 100%\nrename from git-gui/lib/choose_repository.tcl\nrename to subprojects/git-gui/lib/choose_repository.tcl\ndiff --git a/git-gui/lib/choose_rev.tcl b/subprojects/git-gui/lib/choose_rev.tcl\nsimilarity index 100%\nrename from git-gui/lib/choose_rev.tcl\nrename to subprojects/git-gui/lib/choose_rev.tcl\ndiff --git a/git-gui/lib/chord.tcl b/subprojects/git-gui/lib/chord.tcl\nsimilarity index 100%\nrename from git-gui/lib/chord.tcl\nrename to subprojects/git-gui/lib/chord.tcl\ndiff --git a/git-gui/lib/class.tcl b/subprojects/git-gui/lib/class.tcl\nsimilarity index 100%\nrename from git-gui/lib/class.tcl\nrename to subprojects/git-gui/lib/class.tcl\ndiff --git a/git-gui/lib/commit.tcl b/subprojects/git-gui/lib/commit.tcl\nsimilarity index 100%\nrename from git-gui/lib/commit.tcl\nrename to subprojects/git-gui/lib/commit.tcl\ndiff --git a/git-gui/lib/console.tcl b/subprojects/git-gui/lib/console.tcl\nsimilarity index 100%\nrename from git-gui/lib/console.tcl\nrename to subprojects/git-gui/lib/console.tcl\ndiff --git a/git-gui/lib/database.tcl b/subprojects/git-gui/lib/database.tcl\nsimilarity index 100%\nrename from git-gui/lib/database.tcl\nrename to subprojects/git-gui/lib/database.tcl\ndiff --git a/git-gui/lib/date.tcl b/subprojects/git-gui/lib/date.tcl\nsimilarity index 100%\nrename from git-gui/lib/date.tcl\nrename to subprojects/git-gui/lib/date.tcl\ndiff --git a/git-gui/lib/diff.tcl b/subprojects/git-gui/lib/diff.tcl\nsimilarity index 100%\nrename from git-gui/lib/diff.tcl\nrename to subprojects/git-gui/lib/diff.tcl\ndiff --git a/git-gui/lib/encoding.tcl b/subprojects/git-gui/lib/encoding.tcl\nsimilarity index 100%\nrename from git-gui/lib/encoding.tcl\nrename to subprojects/git-gui/lib/encoding.tcl\ndiff --git a/git-gui/lib/error.tcl b/subprojects/git-gui/lib/error.tcl\nsimilarity index 100%\nrename from git-gui/lib/error.tcl\nrename to subprojects/git-gui/lib/error.tcl\ndiff --git a/git-gui/lib/git-gui.ico b/subprojects/git-gui/lib/git-gui.ico\nsimilarity index 100%\nrename from git-gui/lib/git-gui.ico\nrename to subprojects/git-gui/lib/git-gui.ico\ndiff --git a/git-gui/lib/index.tcl b/subprojects/git-gui/lib/index.tcl\nsimilarity index 100%\nrename from git-gui/lib/index.tcl\nrename to subprojects/git-gui/lib/index.tcl\ndiff --git a/git-gui/lib/line.tcl b/subprojects/git-gui/lib/line.tcl\nsimilarity index 100%\nrename from git-gui/lib/line.tcl\nrename to subprojects/git-gui/lib/line.tcl\ndiff --git a/git-gui/lib/logo.tcl b/subprojects/git-gui/lib/logo.tcl\nsimilarity index 100%\nrename from git-gui/lib/logo.tcl\nrename to subprojects/git-gui/lib/logo.tcl\ndiff --git a/git-gui/lib/merge.tcl b/subprojects/git-gui/lib/merge.tcl\nsimilarity index 100%\nrename from git-gui/lib/merge.tcl\nrename to subprojects/git-gui/lib/merge.tcl\ndiff --git a/git-gui/lib/mergetool.tcl b/subprojects/git-gui/lib/mergetool.tcl\nsimilarity index 100%\nrename from git-gui/lib/mergetool.tcl\nrename to subprojects/git-gui/lib/mergetool.tcl\ndiff --git a/git-gui/lib/meson.build b/subprojects/git-gui/lib/meson.build\nsimilarity index 100%\nrename from git-gui/lib/meson.build\nrename to subprojects/git-gui/lib/meson.build\ndiff --git a/git-gui/lib/option.tcl b/subprojects/git-gui/lib/option.tcl\nsimilarity index 100%\nrename from git-gui/lib/option.tcl\nrename to subprojects/git-gui/lib/option.tcl\ndiff --git a/git-gui/lib/remote.tcl b/subprojects/git-gui/lib/remote.tcl\nsimilarity index 100%\nrename from git-gui/lib/remote.tcl\nrename to subprojects/git-gui/lib/remote.tcl\ndiff --git a/git-gui/lib/remote_add.tcl b/subprojects/git-gui/lib/remote_add.tcl\nsimilarity index 100%\nrename from git-gui/lib/remote_add.tcl\nrename to subprojects/git-gui/lib/remote_add.tcl\ndiff --git a/git-gui/lib/remote_branch_delete.tcl b/subprojects/git-gui/lib/remote_branch_delete.tcl\nsimilarity index 100%\nrename from git-gui/lib/remote_branch_delete.tcl\nrename to subprojects/git-gui/lib/remote_branch_delete.tcl\ndiff --git a/git-gui/lib/search.tcl b/subprojects/git-gui/lib/search.tcl\nsimilarity index 100%\nrename from git-gui/lib/search.tcl\nrename to subprojects/git-gui/lib/search.tcl\ndiff --git a/git-gui/lib/shortcut.tcl b/subprojects/git-gui/lib/shortcut.tcl\nsimilarity index 100%\nrename from git-gui/lib/shortcut.tcl\nrename to subprojects/git-gui/lib/shortcut.tcl\ndiff --git a/git-gui/lib/spellcheck.tcl b/subprojects/git-gui/lib/spellcheck.tcl\nsimilarity index 100%\nrename from git-gui/lib/spellcheck.tcl\nrename to subprojects/git-gui/lib/spellcheck.tcl\ndiff --git a/git-gui/lib/sshkey.tcl b/subprojects/git-gui/lib/sshkey.tcl\nsimilarity index 100%\nrename from git-gui/lib/sshkey.tcl\nrename to subprojects/git-gui/lib/sshkey.tcl\ndiff --git a/git-gui/lib/status_bar.tcl b/subprojects/git-gui/lib/status_bar.tcl\nsimilarity index 100%\nrename from git-gui/lib/status_bar.tcl\nrename to subprojects/git-gui/lib/status_bar.tcl\ndiff --git a/git-gui/lib/themed.tcl b/subprojects/git-gui/lib/themed.tcl\nsimilarity index 100%\nrename from git-gui/lib/themed.tcl\nrename to subprojects/git-gui/lib/themed.tcl\ndiff --git a/git-gui/lib/tools.tcl b/subprojects/git-gui/lib/tools.tcl\nsimilarity index 100%\nrename from git-gui/lib/tools.tcl\nrename to subprojects/git-gui/lib/tools.tcl\ndiff --git a/git-gui/lib/tools_dlg.tcl b/subprojects/git-gui/lib/tools_dlg.tcl\nsimilarity index 100%\nrename from git-gui/lib/tools_dlg.tcl\nrename to subprojects/git-gui/lib/tools_dlg.tcl\ndiff --git a/git-gui/lib/transport.tcl b/subprojects/git-gui/lib/transport.tcl\nsimilarity index 100%\nrename from git-gui/lib/transport.tcl\nrename to subprojects/git-gui/lib/transport.tcl\ndiff --git a/git-gui/lib/win32.tcl b/subprojects/git-gui/lib/win32.tcl\nsimilarity index 100%\nrename from git-gui/lib/win32.tcl\nrename to subprojects/git-gui/lib/win32.tcl\ndiff --git a/git-gui/lib/win32_shortcut.js b/subprojects/git-gui/lib/win32_shortcut.js\nsimilarity index 100%\nrename from git-gui/lib/win32_shortcut.js\nrename to subprojects/git-gui/lib/win32_shortcut.js\ndiff --git a/git-gui/meson.build b/subprojects/git-gui/meson.build\nsimilarity index 100%\nrename from git-gui/meson.build\nrename to subprojects/git-gui/meson.build\ndiff --git a/git-gui/po/.gitignore b/subprojects/git-gui/po/.gitignore\nsimilarity index 100%\nrename from git-gui/po/.gitignore\nrename to subprojects/git-gui/po/.gitignore\ndiff --git a/git-gui/po/README b/subprojects/git-gui/po/README\nsimilarity index 100%\nrename from git-gui/po/README\nrename to subprojects/git-gui/po/README\ndiff --git a/git-gui/po/bg.po b/subprojects/git-gui/po/bg.po\nsimilarity index 100%\nrename from git-gui/po/bg.po\nrename to subprojects/git-gui/po/bg.po\ndiff --git a/git-gui/po/de.po b/subprojects/git-gui/po/de.po\nsimilarity index 100%\nrename from git-gui/po/de.po\nrename to subprojects/git-gui/po/de.po\ndiff --git a/git-gui/po/el.po b/subprojects/git-gui/po/el.po\nsimilarity index 100%\nrename from git-gui/po/el.po\nrename to subprojects/git-gui/po/el.po\ndiff --git a/git-gui/po/fr.po b/subprojects/git-gui/po/fr.po\nsimilarity index 100%\nrename from git-gui/po/fr.po\nrename to subprojects/git-gui/po/fr.po\ndiff --git a/git-gui/po/glossary/Makefile b/subprojects/git-gui/po/glossary/Makefile\nsimilarity index 100%\nrename from git-gui/po/glossary/Makefile\nrename to subprojects/git-gui/po/glossary/Makefile\ndiff --git a/git-gui/po/glossary/bg.po b/subprojects/git-gui/po/glossary/bg.po\nsimilarity index 100%\nrename from git-gui/po/glossary/bg.po\nrename to subprojects/git-gui/po/glossary/bg.po\ndiff --git a/git-gui/po/glossary/de.po b/subprojects/git-gui/po/glossary/de.po\nsimilarity index 100%\nrename from git-gui/po/glossary/de.po\nrename to subprojects/git-gui/po/glossary/de.po\ndiff --git a/git-gui/po/glossary/el.po b/subprojects/git-gui/po/glossary/el.po\nsimilarity index 100%\nrename from git-gui/po/glossary/el.po\nrename to subprojects/git-gui/po/glossary/el.po\ndiff --git a/git-gui/po/glossary/fr.po b/subprojects/git-gui/po/glossary/fr.po\nsimilarity index 100%\nrename from git-gui/po/glossary/fr.po\nrename to subprojects/git-gui/po/glossary/fr.po\ndiff --git a/git-gui/po/glossary/git-gui-glossary.pot b/subprojects/git-gui/po/glossary/git-gui-glossary.pot\nsimilarity index 100%\nrename from git-gui/po/glossary/git-gui-glossary.pot\nrename to subprojects/git-gui/po/glossary/git-gui-glossary.pot\ndiff --git a/git-gui/po/glossary/git-gui-glossary.txt b/subprojects/git-gui/po/glossary/git-gui-glossary.txt\nsimilarity index 100%\nrename from git-gui/po/glossary/git-gui-glossary.txt\nrename to subprojects/git-gui/po/glossary/git-gui-glossary.txt\ndiff --git a/git-gui/po/glossary/it.po b/subprojects/git-gui/po/glossary/it.po\nsimilarity index 100%\nrename from git-gui/po/glossary/it.po\nrename to subprojects/git-gui/po/glossary/it.po\ndiff --git a/git-gui/po/glossary/pt_br.po b/subprojects/git-gui/po/glossary/pt_br.po\nsimilarity index 100%\nrename from git-gui/po/glossary/pt_br.po\nrename to subprojects/git-gui/po/glossary/pt_br.po\ndiff --git a/git-gui/po/glossary/pt_pt.po b/subprojects/git-gui/po/glossary/pt_pt.po\nsimilarity index 100%\nrename from git-gui/po/glossary/pt_pt.po\nrename to subprojects/git-gui/po/glossary/pt_pt.po\ndiff --git a/git-gui/po/glossary/txt-to-pot.sh b/subprojects/git-gui/po/glossary/txt-to-pot.sh\nsimilarity index 100%\nrename from git-gui/po/glossary/txt-to-pot.sh\nrename to subprojects/git-gui/po/glossary/txt-to-pot.sh\ndiff --git a/git-gui/po/glossary/zh_cn.po b/subprojects/git-gui/po/glossary/zh_cn.po\nsimilarity index 100%\nrename from git-gui/po/glossary/zh_cn.po\nrename to subprojects/git-gui/po/glossary/zh_cn.po\ndiff --git a/git-gui/po/hu.po b/subprojects/git-gui/po/hu.po\nsimilarity index 100%\nrename from git-gui/po/hu.po\nrename to subprojects/git-gui/po/hu.po\ndiff --git a/git-gui/po/it.po b/subprojects/git-gui/po/it.po\nsimilarity index 100%\nrename from git-gui/po/it.po\nrename to subprojects/git-gui/po/it.po\ndiff --git a/git-gui/po/ja.po b/subprojects/git-gui/po/ja.po\nsimilarity index 100%\nrename from git-gui/po/ja.po\nrename to subprojects/git-gui/po/ja.po\ndiff --git a/git-gui/po/meson.build b/subprojects/git-gui/po/meson.build\nsimilarity index 100%\nrename from git-gui/po/meson.build\nrename to subprojects/git-gui/po/meson.build\ndiff --git a/git-gui/po/nb.po b/subprojects/git-gui/po/nb.po\nsimilarity index 100%\nrename from git-gui/po/nb.po\nrename to subprojects/git-gui/po/nb.po\ndiff --git a/git-gui/po/po2msg.sh b/subprojects/git-gui/po/po2msg.sh\nsimilarity index 100%\nrename from git-gui/po/po2msg.sh\nrename to subprojects/git-gui/po/po2msg.sh\ndiff --git a/git-gui/po/pt_br.po b/subprojects/git-gui/po/pt_br.po\nsimilarity index 100%\nrename from git-gui/po/pt_br.po\nrename to subprojects/git-gui/po/pt_br.po\ndiff --git a/git-gui/po/pt_pt.po b/subprojects/git-gui/po/pt_pt.po\nsimilarity index 100%\nrename from git-gui/po/pt_pt.po\nrename to subprojects/git-gui/po/pt_pt.po\ndiff --git a/git-gui/po/ru.po b/subprojects/git-gui/po/ru.po\nsimilarity index 100%\nrename from git-gui/po/ru.po\nrename to subprojects/git-gui/po/ru.po\ndiff --git a/git-gui/po/sv.po b/subprojects/git-gui/po/sv.po\nsimilarity index 100%\nrename from git-gui/po/sv.po\nrename to subprojects/git-gui/po/sv.po\ndiff --git a/git-gui/po/vi.po b/subprojects/git-gui/po/vi.po\nsimilarity index 100%\nrename from git-gui/po/vi.po\nrename to subprojects/git-gui/po/vi.po\ndiff --git a/git-gui/po/zh_cn.po b/subprojects/git-gui/po/zh_cn.po\nsimilarity index 100%\nrename from git-gui/po/zh_cn.po\nrename to subprojects/git-gui/po/zh_cn.po\ndiff --git a/git-gui/windows/git-gui.sh b/subprojects/git-gui/windows/git-gui.sh\nsimilarity index 100%\nrename from git-gui/windows/git-gui.sh\nrename to subprojects/git-gui/windows/git-gui.sh\n\n-- \n2.51.0.261.g7ce5a0a67e.dirty\n\n"},{"id":"524396","messageId":"20250819-b4-pks-meson-tcl-tk-v1-2-6bcaff0bc0a0@pks.im","threadId":"63983","inReplyTo":"20250819-b4-pks-meson-tcl-tk-v1-0-6bcaff0bc0a0@pks.im","subject":"[PATCH 2/3] gitk: move into \"subprojects/\"","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-08-19T08:18:36Z","receivedAt":"2025-08-19T08:18:48Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"Move the \"gitk-git\" project into \"subprojects/\" with the same reasoning\nas in the preceding commit.\n\nWhile at it, lose the \"-git\" suffix. There isn't any (obvious?) reason\nwhy that suffix exists as the project is called \"gitk\", not \"gitk-git\".\n\nSigned-off-by: Patrick Steinhardt <ps@pks.im>\n---\n Documentation/SubmittingPatches                | 2 +-\n Documentation/gitk.adoc                        | 2 +-\n Makefile                                       | 6 +++---\n subprojects/.gitignore                         | 1 +\n {gitk-git => subprojects/gitk}/.gitignore      | 0\n {gitk-git => subprojects/gitk}/Makefile        | 0\n {gitk-git => subprojects/gitk}/generate-tcl.sh | 0\n {gitk-git => subprojects/gitk}/gitk            | 0\n {gitk-git => subprojects/gitk}/meson.build     | 0\n {gitk-git => subprojects/gitk}/po/.gitignore   | 0\n {gitk-git => subprojects/gitk}/po/bg.po        | 0\n {gitk-git => subprojects/gitk}/po/ca.po        | 0\n {gitk-git => subprojects/gitk}/po/de.po        | 0\n {gitk-git => subprojects/gitk}/po/es.po        | 0\n {gitk-git => subprojects/gitk}/po/fr.po        | 0\n {gitk-git => subprojects/gitk}/po/hu.po        | 0\n {gitk-git => subprojects/gitk}/po/it.po        | 0\n {gitk-git => subprojects/gitk}/po/ja.po        | 0\n {gitk-git => subprojects/gitk}/po/meson.build  | 0\n {gitk-git => subprojects/gitk}/po/po2msg.sh    | 0\n {gitk-git => subprojects/gitk}/po/pt_br.po     | 0\n {gitk-git => subprojects/gitk}/po/pt_pt.po     | 0\n {gitk-git => subprojects/gitk}/po/ru.po        | 0\n {gitk-git => subprojects/gitk}/po/sv.po        | 0\n {gitk-git => subprojects/gitk}/po/ta.po        | 0\n {gitk-git => subprojects/gitk}/po/vi.po        | 0\n {gitk-git => subprojects/gitk}/po/zh_cn.po     | 0\n 27 files changed, 6 insertions(+), 5 deletions(-)\n\ndiff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches\nindex 3aca70728c7..7492db36d0a 100644\n--- a/Documentation/SubmittingPatches\n+++ b/Documentation/SubmittingPatches\n@@ -705,7 +705,7 @@ repositories.\n \n    Contibutions should go via the git mailing list.\n \n-- `gitk-git/` comes from the gitk project, maintained by Johannes Sixt:\n+- `subprojects/gitk/` comes from the gitk project, maintained by Johannes Sixt:\n \n \thttps://github.com/j6t/gitk\n \ndiff --git a/Documentation/gitk.adoc b/Documentation/gitk.adoc\nindex 58ce40ddb11..284266711f1 100644\n--- a/Documentation/gitk.adoc\n+++ b/Documentation/gitk.adoc\n@@ -170,7 +170,7 @@ tcl/tk.\n versions are distributed as part of the Git suite for the convenience\n of end users.\n \n-gitk-git/ comes from Paul Mackerras's gitk project:\n+subprojects/gitk/ comes from Paul Mackerras's gitk project:\n \n \tgit://ozlabs.org/~paulus/gitk\n \ndiff --git a/Makefile b/Makefile\nindex 834b79ca7ec..861b0b98594 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -2458,7 +2458,7 @@ endif\n all::\n ifndef NO_TCLTK\n \t$(QUIET_SUBDIR0)subprojects/git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all\n-\t$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all\n+\t$(QUIET_SUBDIR0)subprojects/gitk $(QUIET_SUBDIR1) all\n endif\n \t$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'\n \n@@ -3568,7 +3568,7 @@ ifndef NO_PERL\n \t(cd '$(DESTDIR_SQ)$(perllibdir_SQ)' && umask 022 && $(TAR) xof -)\n endif\n ifndef NO_TCLTK\n-\t$(MAKE) -C gitk-git install\n+\t$(MAKE) -C subprojects/gitk install\n \t$(MAKE) -C subprojects/git-gui gitexecdir='$(gitexec_instdir_SQ)' install\n endif\n ifneq (,$X)\n@@ -3786,7 +3786,7 @@ endif\n \t$(MAKE) -C templates/ clean\n \t$(MAKE) -C t/ clean\n ifndef NO_TCLTK\n-\t$(MAKE) -C gitk-git clean\n+\t$(MAKE) -C subprojects/gitk clean\n \t$(MAKE) -C subprojects/git-gui clean\n endif\n \t$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-BUILD-OPTIONS\ndiff --git a/subprojects/.gitignore b/subprojects/.gitignore\nindex 96388dbdd22..fd66efe7100 100644\n--- a/subprojects/.gitignore\n+++ b/subprojects/.gitignore\n@@ -1,2 +1,3 @@\n /*/\n !/git-gui/\n+!/gitk/\ndiff --git a/gitk-git/.gitignore b/subprojects/gitk/.gitignore\nsimilarity index 100%\nrename from gitk-git/.gitignore\nrename to subprojects/gitk/.gitignore\ndiff --git a/gitk-git/Makefile b/subprojects/gitk/Makefile\nsimilarity index 100%\nrename from gitk-git/Makefile\nrename to subprojects/gitk/Makefile\ndiff --git a/gitk-git/generate-tcl.sh b/subprojects/gitk/generate-tcl.sh\nsimilarity index 100%\nrename from gitk-git/generate-tcl.sh\nrename to subprojects/gitk/generate-tcl.sh\ndiff --git a/gitk-git/gitk b/subprojects/gitk/gitk\nsimilarity index 100%\nrename from gitk-git/gitk\nrename to subprojects/gitk/gitk\ndiff --git a/gitk-git/meson.build b/subprojects/gitk/meson.build\nsimilarity index 100%\nrename from gitk-git/meson.build\nrename to subprojects/gitk/meson.build\ndiff --git a/gitk-git/po/.gitignore b/subprojects/gitk/po/.gitignore\nsimilarity index 100%\nrename from gitk-git/po/.gitignore\nrename to subprojects/gitk/po/.gitignore\ndiff --git a/gitk-git/po/bg.po b/subprojects/gitk/po/bg.po\nsimilarity index 100%\nrename from gitk-git/po/bg.po\nrename to subprojects/gitk/po/bg.po\ndiff --git a/gitk-git/po/ca.po b/subprojects/gitk/po/ca.po\nsimilarity index 100%\nrename from gitk-git/po/ca.po\nrename to subprojects/gitk/po/ca.po\ndiff --git a/gitk-git/po/de.po b/subprojects/gitk/po/de.po\nsimilarity index 100%\nrename from gitk-git/po/de.po\nrename to subprojects/gitk/po/de.po\ndiff --git a/gitk-git/po/es.po b/subprojects/gitk/po/es.po\nsimilarity index 100%\nrename from gitk-git/po/es.po\nrename to subprojects/gitk/po/es.po\ndiff --git a/gitk-git/po/fr.po b/subprojects/gitk/po/fr.po\nsimilarity index 100%\nrename from gitk-git/po/fr.po\nrename to subprojects/gitk/po/fr.po\ndiff --git a/gitk-git/po/hu.po b/subprojects/gitk/po/hu.po\nsimilarity index 100%\nrename from gitk-git/po/hu.po\nrename to subprojects/gitk/po/hu.po\ndiff --git a/gitk-git/po/it.po b/subprojects/gitk/po/it.po\nsimilarity index 100%\nrename from gitk-git/po/it.po\nrename to subprojects/gitk/po/it.po\ndiff --git a/gitk-git/po/ja.po b/subprojects/gitk/po/ja.po\nsimilarity index 100%\nrename from gitk-git/po/ja.po\nrename to subprojects/gitk/po/ja.po\ndiff --git a/gitk-git/po/meson.build b/subprojects/gitk/po/meson.build\nsimilarity index 100%\nrename from gitk-git/po/meson.build\nrename to subprojects/gitk/po/meson.build\ndiff --git a/gitk-git/po/po2msg.sh b/subprojects/gitk/po/po2msg.sh\nsimilarity index 100%\nrename from gitk-git/po/po2msg.sh\nrename to subprojects/gitk/po/po2msg.sh\ndiff --git a/gitk-git/po/pt_br.po b/subprojects/gitk/po/pt_br.po\nsimilarity index 100%\nrename from gitk-git/po/pt_br.po\nrename to subprojects/gitk/po/pt_br.po\ndiff --git a/gitk-git/po/pt_pt.po b/subprojects/gitk/po/pt_pt.po\nsimilarity index 100%\nrename from gitk-git/po/pt_pt.po\nrename to subprojects/gitk/po/pt_pt.po\ndiff --git a/gitk-git/po/ru.po b/subprojects/gitk/po/ru.po\nsimilarity index 100%\nrename from gitk-git/po/ru.po\nrename to subprojects/gitk/po/ru.po\ndiff --git a/gitk-git/po/sv.po b/subprojects/gitk/po/sv.po\nsimilarity index 100%\nrename from gitk-git/po/sv.po\nrename to subprojects/gitk/po/sv.po\ndiff --git a/gitk-git/po/ta.po b/subprojects/gitk/po/ta.po\nsimilarity index 100%\nrename from gitk-git/po/ta.po\nrename to subprojects/gitk/po/ta.po\ndiff --git a/gitk-git/po/vi.po b/subprojects/gitk/po/vi.po\nsimilarity index 100%\nrename from gitk-git/po/vi.po\nrename to subprojects/gitk/po/vi.po\ndiff --git a/gitk-git/po/zh_cn.po b/subprojects/gitk/po/zh_cn.po\nsimilarity index 100%\nrename from gitk-git/po/zh_cn.po\nrename to subprojects/gitk/po/zh_cn.po\n\n-- \n2.51.0.261.g7ce5a0a67e.dirty\n\n"},{"id":"524397","messageId":"20250819-b4-pks-meson-tcl-tk-v1-3-6bcaff0bc0a0@pks.im","threadId":"63983","inReplyTo":"20250819-b4-pks-meson-tcl-tk-v1-0-6bcaff0bc0a0@pks.im","subject":"[PATCH 3/3] meson: wire up gitk and git-gui","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-08-19T08:18:37Z","receivedAt":"2025-08-19T08:18:51Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"Wire up both gitk and git-gui in Meson as subprojects. These two\nprograms should be the last missing pieces for feature compatibility\nwith our Makefile.\n\nSigned-off-by: Patrick Steinhardt <ps@pks.im>\n---\n meson.build       | 14 ++++++++++++++\n meson_options.txt |  4 ++++\n 2 files changed, 18 insertions(+)\n\ndiff --git a/meson.build b/meson.build\nindex 5dd299b496..edf7b69a00 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -239,7 +239,9 @@ git = find_program('git', dirs: program_path, native: true, required: false)\n sed = find_program('sed', dirs: program_path, native: true)\n shell = find_program('sh', dirs: program_path, native: true)\n tar = find_program('tar', dirs: program_path, native: true)\n+tclsh = find_program('tclsh', required: get_option('git_gui'), native: false)\n time = find_program('time', dirs: program_path, required: get_option('benchmarks'))\n+wish = find_program('wish', required: get_option('git_gui').enabled() or get_option('gitk').enabled(), native: false)\n \n # Detect the target shell that is used by Git at runtime. Note that we prefer\n # \"/bin/sh\" over a PATH-based lookup, which provides a working shell on most\n@@ -2207,6 +2209,16 @@ configure_file(\n   configuration: build_options_config,\n )\n \n+gitk_option = get_option('gitk').disable_auto_if(not wish.found())\n+if gitk_option.allowed()\n+  subproject('gitk')\n+endif\n+\n+git_gui_option = get_option('git_gui').disable_auto_if(not tclsh.found() or not wish.found())\n+if git_gui_option.allowed()\n+  subproject('git-gui')\n+endif\n+\n # Development environments can be used via `meson devenv -C <builddir>`. This\n # allows you to execute test scripts directly with the built Git version and\n # puts the built version of Git in your PATH.\n@@ -2233,6 +2245,8 @@ summary({\n   'curl': curl,\n   'expat': expat,\n   'gettext': intl,\n+  'gitk': gitk_option.allowed(),\n+  'git-gui': git_gui_option.allowed(),\n   'gitweb': gitweb_option.allowed(),\n   'iconv': iconv,\n   'pcre2': pcre2,\ndiff --git a/meson_options.txt b/meson_options.txt\nindex 1668f260a1..8fa330771b 100644\n--- a/meson_options.txt\n+++ b/meson_options.txt\n@@ -41,6 +41,10 @@ option('expat', type: 'feature', value: 'enabled',\n   description: 'Build helpers used to push to remotes with the HTTP transport.')\n option('gettext', type: 'feature', value: 'auto',\n   description: 'Build translation files.')\n+option('gitk', type: 'feature', value: 'auto',\n+  description: 'Build the Gitk graphical repository browser. Requires Tcl/Tk.')\n+option('git_gui', type: 'feature', value: 'auto',\n+  description: 'Build the git-gui graphical user interface for Git. Requires Tcl/Tk.')\n option('gitweb', type: 'feature', value: 'auto',\n   description: 'Build Git web interface. Requires Perl.')\n option('iconv', type: 'feature', value: 'auto',\n\n-- \n2.51.0.261.g7ce5a0a67e.dirty\n\n"},{"id":"524417","messageId":"CAOLa=ZQQoWeYRJLgnjVhonBoBZQLR=VRJXGpRhyanEG=0ewOOw@mail.gmail.com","threadId":"63983","inReplyTo":"20250819-b4-pks-meson-tcl-tk-v1-1-6bcaff0bc0a0@pks.im","subject":"Re: [PATCH 1/3] git-gui: move into \"subprojects/\"","fromName":"Karthik Nayak","fromEmail":"karthik.188@gmail.com","sentAt":"2025-08-19T09:36:25Z","receivedAt":"2025-08-19T09:36:27Z","isPatch":true,"sender":{"key":"karthik.188@gmail.com","avatar":"https://avatars.githubusercontent.com/u/1786334?v=4"},"body":"Patrick Steinhardt <ps@pks.im> writes:\n\n> The \"git-gui\" project has recently gained support for being built with\n> Meson, but it is not yet wired up in Git's own Meson build instructions.\n> \"git-gui\" itself is wired up as a standalone project, which means that\n> we can trivially make it available via `subproject(\"git-gui\")`.\n>\n> So far the theory. In practice thoguh the `subproject()` function comes\n\ns/thoguh/though\n\n> with a couple of limitations. Most importantly, all subprojects need to\n> be contained in the same directory, and that directory cannot be the\n> top-level directory of the parent project. Right now we use the default\n> subproject directory (\"subprojects/\") for a couple of fallbacks in case\n> some important dependencies couldn't be found.\n>\n> This means that we cannot just include the \"git-gui\" directory as a\n> subproject as it lives in our root directory. There are three options:\n>\n>   - We move \"git-gui\" into \"subprojects/\". It requires a bit of churn,\n>     but should otherwise not have any significant downsides.\n>\n>   - We create a symlink pointing from \"subprojects/git-gui\" to the\n>     top-level directory. This may not work on Windows.\n>\n>   - We can create a \"git-gui.wrap\" file that knows to pull a specific\n>     commit from upstream and build it. This would mean that Meson and\n>     Makefiles now have different sources of truth for which version of\n>     \"git-gui\" we build.\n>\n> The first option feels like the most sensible solution. It creates churn\n> and requires us to adapt the pull-request workflow a bit. But this\n> should be a one-time cost.\n>\n> In theory we could also rename the \"subprojects/\" directory by passing\n> the \"subproject_dir\" argument to our `project()` call. But the name\n> feels quite fitting for our purpose, as well.\n>\n\nOkay makes sense. The most significant changes are in the top three\nfiles and make sense.\n\n[snip]\n"},{"id":"524418","messageId":"CAOLa=ZTScBdh_JEvSez20+4cqnKaPaJmmmAGqGtdbzcTz703VQ@mail.gmail.com","threadId":"63983","inReplyTo":"20250819-b4-pks-meson-tcl-tk-v1-3-6bcaff0bc0a0@pks.im","subject":"Re: [PATCH 3/3] meson: wire up gitk and git-gui","fromName":"Karthik Nayak","fromEmail":"karthik.188@gmail.com","sentAt":"2025-08-19T09:40:55Z","receivedAt":"2025-08-19T09:40:56Z","isPatch":true,"sender":{"key":"karthik.188@gmail.com","avatar":"https://avatars.githubusercontent.com/u/1786334?v=4"},"body":"Patrick Steinhardt <ps@pks.im> writes:\n\n> Wire up both gitk and git-gui in Meson as subprojects. These two\n> programs should be the last missing pieces for feature compatibility\n> with our Makefile.\n>\n> Signed-off-by: Patrick Steinhardt <ps@pks.im>\n> ---\n>  meson.build       | 14 ++++++++++++++\n>  meson_options.txt |  4 ++++\n>  2 files changed, 18 insertions(+)\n>\n> diff --git a/meson.build b/meson.build\n> index 5dd299b496..edf7b69a00 100644\n> --- a/meson.build\n> +++ b/meson.build\n> @@ -239,7 +239,9 @@ git = find_program('git', dirs: program_path, native: true, required: false)\n>  sed = find_program('sed', dirs: program_path, native: true)\n>  shell = find_program('sh', dirs: program_path, native: true)\n>  tar = find_program('tar', dirs: program_path, native: true)\n> +tclsh = find_program('tclsh', required: get_option('git_gui'), native: false)\n>  time = find_program('time', dirs: program_path, required: get_option('benchmarks'))\n> +wish = find_program('wish', required: get_option('git_gui').enabled() or get_option('gitk').enabled(), native: false)\n>\n>  # Detect the target shell that is used by Git at runtime. Note that we prefer\n>  # \"/bin/sh\" over a PATH-based lookup, which provides a working shell on most\n> @@ -2207,6 +2209,16 @@ configure_file(\n>    configuration: build_options_config,\n>  )\n>\n> +gitk_option = get_option('gitk').disable_auto_if(not wish.found())\n\nSince 'wish' is defined as required above when 'gitk' is enabled, would\nit even come here if there is no 'wish'?\n\n> +if gitk_option.allowed()\n> +  subproject('gitk')\n> +endif\n> +\n> +git_gui_option = get_option('git_gui').disable_auto_if(not tclsh.found() or not wish.found())\n> +if git_gui_option.allowed()\n> +  subproject('git-gui')\n> +endif\n> +\n>  # Development environments can be used via `meson devenv -C <builddir>`. This\n>  # allows you to execute test scripts directly with the built Git version and\n>  # puts the built version of Git in your PATH.\n> @@ -2233,6 +2245,8 @@ summary({\n>    'curl': curl,\n>    'expat': expat,\n>    'gettext': intl,\n> +  'gitk': gitk_option.allowed(),\n> +  'git-gui': git_gui_option.allowed(),\n>    'gitweb': gitweb_option.allowed(),\n>    'iconv': iconv,\n>    'pcre2': pcre2,\n> diff --git a/meson_options.txt b/meson_options.txt\n> index 1668f260a1..8fa330771b 100644\n> --- a/meson_options.txt\n> +++ b/meson_options.txt\n> @@ -41,6 +41,10 @@ option('expat', type: 'feature', value: 'enabled',\n>    description: 'Build helpers used to push to remotes with the HTTP transport.')\n>  option('gettext', type: 'feature', value: 'auto',\n>    description: 'Build translation files.')\n> +option('gitk', type: 'feature', value: 'auto',\n> +  description: 'Build the Gitk graphical repository browser. Requires Tcl/Tk.')\n> +option('git_gui', type: 'feature', value: 'auto',\n> +  description: 'Build the git-gui graphical user interface for Git. Requires Tcl/Tk.')\n>  option('gitweb', type: 'feature', value: 'auto',\n>    description: 'Build Git web interface. Requires Perl.')\n>  option('iconv', type: 'feature', value: 'auto',\n>\n> --\n> 2.51.0.261.g7ce5a0a67e.dirty\n\nThe rest look good.\n\nThanks,\nKarthik\n"},{"id":"524450","messageId":"xmqq7byzfh0w.fsf@gitster.g","threadId":"63983","inReplyTo":"20250819-b4-pks-meson-tcl-tk-v1-0-6bcaff0bc0a0@pks.im","subject":"Re: [PATCH 0/3] meson: wire up gitk and git-gui","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-08-19T15:49:35Z","receivedAt":"2025-08-19T15:49:38Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Patrick Steinhardt <ps@pks.im> writes:\n\n> Hi,\n>\n> I have upstreamed support for Meson into both gitk [1] and git-gui [2].\n> This small patch series wires up support in Git.\n>\n> To the best of my knowledge this is the last missing piece for feature\n> compatibility with our Makefile. As such, from my point of view, I think\n> that we can stop treating the Meson build system as experimental and\n> instead officially endorse it. Once merged I'll thus send another patch\n> series that updates our documentation in various different places to\n> also mention how to build Git with Meson.\n\nGood.\n\nWith such a documentation, it would help folks to verify (and make\nextra fixup if needed) to see how well feature parity is achieved\nand peel that experimental label.\n\nHaving said that, I somehow feel that ...\n\n>  {git-gui => subprojects/git-gui}/.gitattributes       |   0\n> ...\n>  {gitk-git => subprojects/gitk}/.gitignore             |   0\n\n... a move like this is bending the source to match the limitation\nof the tool, making the people who use (write, read, and build from)\nthe source to pay for the price, which is backwards.  The tool, be\nit Meson or Make or CMake, should be serving the project, not the\nother way around.  In our current build system, we don't have to\nhave borrowed code (from gitk, git-gui, sha1dc, or xdiff) inside a\nspecific subdirectory.\n\nBut I may change my mind while reading the real patches, not the\ndiffstat.\n\nThanks.\n"},{"id":"524499","messageId":"3571209f-2f4d-4549-978b-ad262ab3b274@ramsayjones.plus.com","threadId":"63983","inReplyTo":"20250819-b4-pks-meson-tcl-tk-v1-0-6bcaff0bc0a0@pks.im","subject":"Re: [PATCH 0/3] meson: wire up gitk and git-gui","fromName":"Ramsay Jones","fromEmail":"ramsay@ramsayjones.plus.com","sentAt":"2025-08-19T22:25:02Z","receivedAt":"2025-08-19T22:28:12Z","isPatch":true,"sender":{"key":"ramsay@ramsayjones.plus.com","avatar":"https://avatars.githubusercontent.com/u/33702710?v=4"},"body":"\n\nOn 19/08/2025 09:18, Patrick Steinhardt wrote:\n> Hi,\n> \n> I have upstreamed support for Meson into both gitk [1] and git-gui [2].\n> This small patch series wires up support in Git.\n\nJust a quick FYI, but I think git-gui needs some changes equivalent to\ncommit 586919c3b2 (\"meson: fix installation when -Dlibexexdir is set\",\n2025-07-16).\n\n[I don't understand the difference between subdir() and subproject(), so\nI'm not quite sure how to proceed, but I guess git-gui is a separate\nproject root and 'options' will be passed as-is with a new context?]\n\ngitk doesn't install anything in the libexecdir, so should not need a\nsimilar change.\n\n> To the best of my knowledge this is the last missing piece for feature\n> compatibility with our Makefile. As such, from my point of view, I think\n> that we can stop treating the Meson build system as experimental and\n> instead officially endorse it. Once merged I'll thus send another patch\n> series that updates our documentation in various different places to\n> also mention how to build Git with Meson.\n\nHmm, that seems a little soon to me. ;) I still have quite a few 'misc build\nupdates (part #3)' patches to send to the list (yes, I have been a bit tardy;\nsorry about that).\n\nAlso, let's not forget the 'quoting nightmare' [0], which has still not been\naddressed.\n\nATB,\nRamsay Jones\n\n[0] https://public-inbox.org/git/a5795bfa-cc02-4c9a-b7d2-4924a94cd0db@ramsayjones.plus.com/\n\n\n"},{"id":"524506","messageId":"77fd0332-cc46-44b5-bbf2-94f326d5d754@kdbg.org","threadId":"63983","inReplyTo":"20250819-b4-pks-meson-tcl-tk-v1-2-6bcaff0bc0a0@pks.im","subject":"[PATCH] doc/gitk: update reference to the external project","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2025-08-20T05:49:53Z","receivedAt":"2025-08-20T05:50:04Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Gitk is now maintained by Johannes Sixt and the repository can be\ncloned from a new URL. b59358100c20 (Update the official repo of\ngitk, 2024-12-24) could have updated this instance in the manual,\ntoo, but the opportunity was missed. Update it now.\n\nSigned-off-by: Johannes Sixt <j6t@kdbg.org>\n---\n\nAm 19.08.25 um 10:18 schrieb Patrick Steinhardt:\n> +++ b/Documentation/SubmittingPatches\n\n> -- `gitk-git/` comes from the gitk project, maintained by Johannes Sixt:\n> +- `subprojects/gitk/` comes from the gitk project, maintained by Johannes Sixt:\n>  \n>  \thttps://github.com/j6t/gitk\n\n> +++ b/Documentation/gitk.adoc\n\n> -gitk-git/ comes from Paul Mackerras's gitk project:\n> +subprojects/gitk/ comes from Paul Mackerras's gitk project:\n>  \n>  \tgit://ozlabs.org/~paulus/gitk\nLet's fix this outdated reference!\n\n Documentation/gitk.adoc | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/Documentation/gitk.adoc b/Documentation/gitk.adoc\nindex 58ce40ddb1..33a5648ab8 100644\n--- a/Documentation/gitk.adoc\n+++ b/Documentation/gitk.adoc\n@@ -170,9 +170,9 @@ tcl/tk.\n versions are distributed as part of the Git suite for the convenience\n of end users.\n \n-gitk-git/ comes from Paul Mackerras's gitk project:\n+`gitk-git/` comes from Johannes Sixt's gitk project:\n \n-\tgit://ozlabs.org/~paulus/gitk\n+\thttps://github.com/j6t/gitk\n \n SEE ALSO\n --------\n-- \n2.51.0.205.g9a02ae2892\n\n"},{"id":"524508","messageId":"249056e7-1332-4e6f-8d07-16c80fd4913e@kdbg.org","threadId":"63983","inReplyTo":"77fd0332-cc46-44b5-bbf2-94f326d5d754@kdbg.org","subject":"[PATCH v2] doc/gitk: update reference to the external project","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2025-08-20T06:16:05Z","receivedAt":"2025-08-20T06:16:16Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Gitk is now maintained by Johannes Sixt and the repository can be\ncloned from a new URL. b59358100c20 (Update the official repo of\ngitk, 2024-12-24) could have updated this instance in the manual,\ntoo, but the opportunity was missed. Update it now. Do give credit\nto Paul Mackerras as the inventor of the program.\n\nSigned-off-by: Johannes Sixt <j6t@kdbg.org>\n---\n I just noticed that I would have removed the last user-visible\n mention of Paul. Don't do that.\n\n Documentation/gitk.adoc | 8 ++++----\n 1 file changed, 4 insertions(+), 4 deletions(-)\n\ndiff --git a/Documentation/gitk.adoc b/Documentation/gitk.adoc\nindex 58ce40ddb1..5b34dcd077 100644\n--- a/Documentation/gitk.adoc\n+++ b/Documentation/gitk.adoc\n@@ -163,16 +163,16 @@ used by default. If '$XDG_CONFIG_HOME' is not set it defaults to\n \n History\n -------\n-Gitk was the first graphical repository browser. It's written in\n-tcl/tk.\n+Gitk was the first graphical repository browser, written by\n+Paul Mackerras in Tcl/Tk.\n \n 'gitk' is actually maintained as an independent project, but stable\n versions are distributed as part of the Git suite for the convenience\n of end users.\n \n-gitk-git/ comes from Paul Mackerras's gitk project:\n+`gitk-git/` comes from Johannes Sixt's gitk project:\n \n-\tgit://ozlabs.org/~paulus/gitk\n+\thttps://github.com/j6t/gitk\n \n SEE ALSO\n --------\n-- \n2.51.0.205.g9a02ae2892\n\n1:  5a2ed392c1 ! 1:  48668308f7 doc/gitk: update reference to the external project\n    @@ Commit message\n         Gitk is now maintained by Johannes Sixt and the repository can be\n         cloned from a new URL. b59358100c20 (Update the official repo of\n         gitk, 2024-12-24) could have updated this instance in the manual,\n    -    too, but the opportunity was missed. Update it now.\n    +    too, but the opportunity was missed. Update it now. Do give credit\n    +    to Paul Mackerras as the inventor of the program.\n     \n         Signed-off-by: Johannes Sixt <j6t@kdbg.org>\n     \n      ## Documentation/gitk.adoc ##\n    -@@ Documentation/gitk.adoc: tcl/tk.\n    +@@ Documentation/gitk.adoc: used by default. If '$XDG_CONFIG_HOME' is not set it defaults to\n    + \n    + History\n    + -------\n    +-Gitk was the first graphical repository browser. It's written in\n    +-tcl/tk.\n    ++Gitk was the first graphical repository browser, written by\n    ++Paul Mackerras in Tcl/Tk.\n    + \n    + 'gitk' is actually maintained as an independent project, but stable\n      versions are distributed as part of the Git suite for the convenience\n      of end users.\n      \n"},{"id":"524533","messageId":"xmqqv7miatxa.fsf@gitster.g","threadId":"63983","inReplyTo":"249056e7-1332-4e6f-8d07-16c80fd4913e@kdbg.org","subject":"Re: [PATCH v2] doc/gitk: update reference to the external project","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-08-20T15:34:25Z","receivedAt":"2025-08-20T15:34:28Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Sixt <j6t@kdbg.org> writes:\n\n> Gitk is now maintained by Johannes Sixt and the repository can be\n> cloned from a new URL. b59358100c20 (Update the official repo of\n> gitk, 2024-12-24) could have updated this instance in the manual,\n> too, but the opportunity was missed. Update it now. Do give credit\n> to Paul Mackerras as the inventor of the program.\n>\n> Signed-off-by: Johannes Sixt <j6t@kdbg.org>\n> ---\n\nThanks for the update.  This is long overdue.  I forgot that this\nmanual page was carried in my tree.\n\n>  I just noticed that I would have removed the last user-visible\n>  mention of Paul. Don't do that.\n>\n>  Documentation/gitk.adoc | 8 ++++----\n>  1 file changed, 4 insertions(+), 4 deletions(-)\n>\n> diff --git a/Documentation/gitk.adoc b/Documentation/gitk.adoc\n> index 58ce40ddb1..5b34dcd077 100644\n> --- a/Documentation/gitk.adoc\n> +++ b/Documentation/gitk.adoc\n> @@ -163,16 +163,16 @@ used by default. If '$XDG_CONFIG_HOME' is not set it defaults to\n>  \n>  History\n>  -------\n> -Gitk was the first graphical repository browser. It's written in\n> -tcl/tk.\n> +Gitk was the first graphical repository browser, written by\n> +Paul Mackerras in Tcl/Tk.\n>  \n>  'gitk' is actually maintained as an independent project, but stable\n>  versions are distributed as part of the Git suite for the convenience\n>  of end users.\n>  \n> -gitk-git/ comes from Paul Mackerras's gitk project:\n> +`gitk-git/` comes from Johannes Sixt's gitk project:\n>  \n> -\tgit://ozlabs.org/~paulus/gitk\n> +\thttps://github.com/j6t/gitk\n>  \n>  SEE ALSO\n>  --------\n"},{"id":"524818","messageId":"aKtK9fYPqLpXeQ1V@pks.im","threadId":"63983","inReplyTo":"CAOLa=ZTScBdh_JEvSez20+4cqnKaPaJmmmAGqGtdbzcTz703VQ@mail.gmail.com","subject":"Re: [PATCH 3/3] meson: wire up gitk and git-gui","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-08-24T17:25:09Z","receivedAt":"2025-08-24T17:25:20Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Tue, Aug 19, 2025 at 02:40:55AM -0700, Karthik Nayak wrote:\n> Patrick Steinhardt <ps@pks.im> writes:\n> > diff --git a/meson.build b/meson.build\n> > index 5dd299b496..edf7b69a00 100644\n> > --- a/meson.build\n> > +++ b/meson.build\n> > @@ -2207,6 +2209,16 @@ configure_file(\n> >    configuration: build_options_config,\n> >  )\n> >\n> > +gitk_option = get_option('gitk').disable_auto_if(not wish.found())\n> \n> Since 'wish' is defined as required above when 'gitk' is enabled, would\n> it even come here if there is no 'wish'?\n\nYeah, it can happen. We're checking for `enabled()`, not `allowed()`.\nThis means that we only require \"wish\" in case the user has explicitly\nasked us to enable gitk or git-gui. Otherwise, if the user has \"auto\"\nconfigured for these we may end up finding one, but not both of these\ncommands. So we do have to auto-disable the feature in that case.\n\nPatrick\n"},{"id":"524819","messageId":"aKtK_4GMLo4_e1dt@pks.im","threadId":"63983","inReplyTo":"3571209f-2f4d-4549-978b-ad262ab3b274@ramsayjones.plus.com","subject":"Re: [PATCH 0/3] meson: wire up gitk and git-gui","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-08-24T17:25:19Z","receivedAt":"2025-08-24T17:25:27Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Tue, Aug 19, 2025 at 11:25:02PM +0100, Ramsay Jones wrote:\n> \n> \n> On 19/08/2025 09:18, Patrick Steinhardt wrote:\n> > Hi,\n> > \n> > I have upstreamed support for Meson into both gitk [1] and git-gui [2].\n> > This small patch series wires up support in Git.\n> \n> Just a quick FYI, but I think git-gui needs some changes equivalent to\n> commit 586919c3b2 (\"meson: fix installation when -Dlibexexdir is set\",\n> 2025-07-16).\n\nAh, thanks for the hint. Will eventually fix it upstream.\n\n> [I don't understand the difference between subdir() and subproject(), so\n> I'm not quite sure how to proceed, but I guess git-gui is a separate\n> project root and 'options' will be passed as-is with a new context?]\n\nYup. This is done so that both gitk and git-gui can also be installed\nstandalone.\n\n> gitk doesn't install anything in the libexecdir, so should not need a\n> similar change.\n> \n> > To the best of my knowledge this is the last missing piece for feature\n> > compatibility with our Makefile. As such, from my point of view, I think\n> > that we can stop treating the Meson build system as experimental and\n> > instead officially endorse it. Once merged I'll thus send another patch\n> > series that updates our documentation in various different places to\n> > also mention how to build Git with Meson.\n> \n> Hmm, that seems a little soon to me. ;) I still have quite a few 'misc build\n> updates (part #3)' patches to send to the list (yes, I have been a bit tardy;\n> sorry about that).\n\nLooking forward to them : \n\n> Also, let's not forget the 'quoting nightmare' [0], which has still not been\n> addressed.\n\nFair, that one is still outstanding. But I guess with \"feature\ncompatibility\" I was rather referring to actually user-facing things\nthat Meson cannot do yet. I guess overall it will still take a bit of\ntime for smaller follow-up fixes to land. But in most cases I think that\nMeson can be used without issues now.\n\nPatrick\n"},{"id":"524820","messageId":"aKtLCAq9Y-59cIbc@pks.im","threadId":"63983","inReplyTo":"xmqq7byzfh0w.fsf@gitster.g","subject":"Re: [PATCH 0/3] meson: wire up gitk and git-gui","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-08-24T17:25:28Z","receivedAt":"2025-08-24T17:25:35Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Tue, Aug 19, 2025 at 08:49:35AM -0700, Junio C Hamano wrote:\n> Patrick Steinhardt <ps@pks.im> writes:\n> Having said that, I somehow feel that ...\n> \n> >  {git-gui => subprojects/git-gui}/.gitattributes       |   0\n> > ...\n> >  {gitk-git => subprojects/gitk}/.gitignore             |   0\n> \n> ... a move like this is bending the source to match the limitation\n> of the tool, making the people who use (write, read, and build from)\n> the source to pay for the price, which is backwards.  The tool, be\n> it Meson or Make or CMake, should be serving the project, not the\n> other way around.  In our current build system, we don't have to\n> have borrowed code (from gitk, git-gui, sha1dc, or xdiff) inside a\n> specific subdirectory.\n> \n> But I may change my mind while reading the real patches, not the\n> diffstat.\n\nI'm not much of a fan of these changes either, and agree that this is a\nlimitation of the tool. I think it isn't _too_ bad, but I would've\npreferred to not require this step.\n\nIf this is proving to be a blocker we can also change upstream to not be\na separate project. That'd have the downside that it cannot be used\nstandalone, but the upside that we can just put these directories\nwherever we want and then include them via `subdir()`.\n\nI think taking the pain once though and renaming is preferred so that\nboth gitk and git-gui can also be used with Meson standalone.\n\nPatrick\n"},{"id":"524907","messageId":"xmqqsehencem.fsf@gitster.g","threadId":"63983","inReplyTo":"aKtLCAq9Y-59cIbc@pks.im","subject":"Re: [PATCH 0/3] meson: wire up gitk and git-gui","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-08-26T00:40:17Z","receivedAt":"2025-08-26T00:40:20Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Patrick Steinhardt <ps@pks.im> writes:\n\n> If this is proving to be a blocker we can also change upstream to not be\n> a separate project.\n\nWhat do \"upstream\" refer to in this sentence?  Meson?\n\nIf you are talking about \"gitk\" and/or \"git-gui\", then such an\nalternative version of these patches would not change the picture an\niota, wrt \"the limitation of the tool should not force the sources\nthat might consider using the tool to pay the price---which might be\nproving to be a blocker\", no?\n\nNot that I am saying it _is_ a blocker.  But the above sounds like\nmaking things worse for no gain, so I must be misunderstanding what\nyou meant X-<.\n\nSo, ... confused.\n"},{"id":"525340","messageId":"aLbqeL1X5CajH-Z8@pks.im","threadId":"63983","inReplyTo":"xmqqsehencem.fsf@gitster.g","subject":"Re: [PATCH 0/3] meson: wire up gitk and git-gui","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-09-02T13:00:40Z","receivedAt":"2025-09-02T13:00:54Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Mon, Aug 25, 2025 at 05:40:17PM -0700, Junio C Hamano wrote:\n> Patrick Steinhardt <ps@pks.im> writes:\n> \n> > If this is proving to be a blocker we can also change upstream to not be\n> > a separate project.\n> \n> What do \"upstream\" refer to in this sentence?  Meson?\n> \n> If you are talking about \"gitk\" and/or \"git-gui\", then such an\n> alternative version of these patches would not change the picture an\n> iota, wrt \"the limitation of the tool should not force the sources\n> that might consider using the tool to pay the price---which might be\n> proving to be a blocker\", no?\n\ngitk/git-gui in this case.\n\n> Not that I am saying it _is_ a blocker.  But the above sounds like\n> making things worse for no gain, so I must be misunderstanding what\n> you meant X-<.\n> \n> So, ... confused.\n\nSo, to hopefully alleviate the confusion, there's two ways to include a\ncertain directory into Meson:\n\n  - `subdir()` includes directories at arbitrary locations. The\n    directory is treated as part of the project that calls `subdir()`.\n    This is mostly done to segregate the project into multiple different\n    components to keep things more maintainable.\n\n  - `subproject()` includes directories in a specific location. The\n    difference is that these are treated as separate projects, so there\n    is a certain boundary between the top-level project and its\n    subproject. Things done in the subproject won't taint anything in\n    the superproject.\n\nRight now I'm using `subproject()`, which has the effect that both gitk\nand git-gui can be compiled standalone with Meson, but also as part of\nthe Git project. It does have the limitation though that the project\nmust be in a specific directory.\n\nWhat I was trying to say is that we could convert the build instructions\nof gitk and git-gui to not be standalone projects anymore. This would\nmean that we can include the subdirectory from any arbitrary location,\nbut they cannot be built standalone without Git anymore.\n\nUsing `subproject()` is a much better fit for our specific use case,\neven though we have to move things around. I'm not particularly fond of\nthis limitation, but I haven't found a better way to achieve this until\nnow.\n\nSo yes, it's a limitation we get from Meson. But it's easy to work\naround this limitation by moving the projects into the \"subprojects\",\nwhich is a one-time cost, only. I've said for a long time anyway that I\nthink our top-level directory could use some cleanup to make things a\nbit more discoverable for new contributors, e.g. by move all the code\nfiles into a \"lib/\" folder. So that's probably part of why I don't see\nthis refactoring as a huge downside, even if it is working around a\nlimitation.\n\nPatrick\n"},{"id":"535120","messageId":"20260204-b4-pks-meson-tcl-tk-v2-1-5bc3ccf3a8ce@pks.im","threadId":"63983","inReplyTo":"20250819-b4-pks-meson-tcl-tk-v1-0-6bcaff0bc0a0@pks.im","subject":"[PATCH v2] meson: wire up gitk and git-gui","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-02-04T08:38:11Z","receivedAt":"2026-02-04T08:38:21Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"Wire up both gitk and git-gui in Meson as subprojects. These two\nprograms should be the last missing pieces for feature compatibility\nwith our Makefile for distributors.\n\nNote that Meson expects subprojects to live in the \"subprojects/\"\ndirectory. Create symlinks to fulfill this requirement.\n\nSigned-off-by: Patrick Steinhardt <ps@pks.im>\n---\nHi,\n\nI have upstreamed support for Meson into both gitk [1] and git-gui [2].\nThis small patch series wires up support in Git.\n\nChanges in v2:\n  - Use symlinks instead of moving both gitk and git-gui into the\n    \"subprojects/\" directory.\n  - Rebased on v2.53.0, as it's been a while since v1 :)\n  - Link to v1: https://lore.kernel.org/r/20250819-b4-pks-meson-tcl-tk-v1-0-6bcaff0bc0a0@pks.im\n\nThanks!\n\nPatrick\n\n[1]: https://github.com/j6t/gitk/pull/8\n[2]: https://github.com/j6t/git-gui/pull/9\n---\n meson.build         | 14 ++++++++++++++\n meson_options.txt   |  4 ++++\n subprojects/git-gui |  1 +\n subprojects/gitk    |  1 +\n 4 files changed, 20 insertions(+)\n\ndiff --git a/meson.build b/meson.build\nindex dd52efd1c8..e96953afec 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -239,7 +239,9 @@ git = find_program('git', dirs: program_path, native: true, required: false)\n sed = find_program('sed', dirs: program_path, native: true)\n shell = find_program('sh', dirs: program_path, native: true)\n tar = find_program('tar', dirs: program_path, native: true)\n+tclsh = find_program('tclsh', required: get_option('git_gui'), native: false)\n time = find_program('time', dirs: program_path, required: get_option('benchmarks'))\n+wish = find_program('wish', required: get_option('git_gui').enabled() or get_option('gitk').enabled(), native: false)\n \n # Detect the target shell that is used by Git at runtime. Note that we prefer\n # \"/bin/sh\" over a PATH-based lookup, which provides a working shell on most\n@@ -2250,6 +2252,16 @@ configure_file(\n   configuration: build_options_config,\n )\n \n+gitk_option = get_option('gitk').disable_auto_if(not wish.found())\n+if gitk_option.allowed()\n+  subproject('gitk')\n+endif\n+\n+git_gui_option = get_option('git_gui').disable_auto_if(not tclsh.found() or not wish.found())\n+if git_gui_option.allowed()\n+  subproject('git-gui')\n+endif\n+\n # Development environments can be used via `meson devenv -C <builddir>`. This\n # allows you to execute test scripts directly with the built Git version and\n # puts the built version of Git in your PATH.\n@@ -2276,6 +2288,8 @@ summary({\n   'curl': curl,\n   'expat': expat,\n   'gettext': intl,\n+  'gitk': gitk_option.allowed(),\n+  'git-gui': git_gui_option.allowed(),\n   'gitweb': gitweb_option.allowed(),\n   'iconv': iconv,\n   'pcre2': pcre2,\ndiff --git a/meson_options.txt b/meson_options.txt\nindex e0be260ae1..659cbb218f 100644\n--- a/meson_options.txt\n+++ b/meson_options.txt\n@@ -43,6 +43,10 @@ option('expat', type: 'feature', value: 'enabled',\n   description: 'Build helpers used to push to remotes with the HTTP transport.')\n option('gettext', type: 'feature', value: 'auto',\n   description: 'Build translation files.')\n+option('gitk', type: 'feature', value: 'auto',\n+  description: 'Build the Gitk graphical repository browser. Requires Tcl/Tk.')\n+option('git_gui', type: 'feature', value: 'auto',\n+  description: 'Build the git-gui graphical user interface for Git. Requires Tcl/Tk.')\n option('gitweb', type: 'feature', value: 'auto',\n   description: 'Build Git web interface. Requires Perl.')\n option('iconv', type: 'feature', value: 'auto',\ndiff --git a/subprojects/git-gui b/subprojects/git-gui\nnew file mode 120000\nindex 0000000000..c6d917088b\n--- /dev/null\n+++ b/subprojects/git-gui\n@@ -0,0 +1 @@\n+../git-gui\n\\ No newline at end of file\ndiff --git a/subprojects/gitk b/subprojects/gitk\nnew file mode 120000\nindex 0000000000..b66ad18ae5\n--- /dev/null\n+++ b/subprojects/gitk\n@@ -0,0 +1 @@\n+../gitk-git\n\\ No newline at end of file\n\n---\nbase-commit: 67ad42147a7acc2af6074753ebd03d904476118f\nchange-id: 20250703-b4-pks-meson-tcl-tk-bb75616c8048\n\n"},{"id":"535122","messageId":"CAOLa=ZSeyKJD07xHKezQzry6KuwNnB=DzwE81Sx0A+b2u41rjA@mail.gmail.com","threadId":"63983","inReplyTo":"20260204-b4-pks-meson-tcl-tk-v2-1-5bc3ccf3a8ce@pks.im","subject":"Re: [PATCH v2] meson: wire up gitk and git-gui","fromName":"Karthik Nayak","fromEmail":"karthik.188@gmail.com","sentAt":"2026-02-04T10:00:11Z","receivedAt":"2026-02-04T10:00:13Z","isPatch":true,"sender":{"key":"karthik.188@gmail.com","avatar":"https://avatars.githubusercontent.com/u/1786334?v=4"},"body":"Patrick Steinhardt <ps@pks.im> writes:\n\n> Wire up both gitk and git-gui in Meson as subprojects. These two\n> programs should be the last missing pieces for feature compatibility\n> with our Makefile for distributors.\n>\n> Note that Meson expects subprojects to live in the \"subprojects/\"\n> directory. Create symlinks to fulfill this requirement.\n>\n> Signed-off-by: Patrick Steinhardt <ps@pks.im>\n> ---\n> Hi,\n>\n> I have upstreamed support for Meson into both gitk [1] and git-gui [2].\n> This small patch series wires up support in Git.\n>\n> Changes in v2:\n>   - Use symlinks instead of moving both gitk and git-gui into the\n>     \"subprojects/\" directory.\n>   - Rebased on v2.53.0, as it's been a while since v1 :)\n>   - Link to v1: https://lore.kernel.org/r/20250819-b4-pks-meson-tcl-tk-v1-0-6bcaff0bc0a0@pks.im\n>\n> Thanks!\n>\n> Patrick\n\n\nSo in the previous version, we moved these projects into 'subprojects/',\nbut we now use symlinks instead. Do you know if there is perhaps an\nissue in Meson to support configurable subproject paths? If so, we could\neventually drop the symlink.\n\n>\n> [1]: https://github.com/j6t/gitk/pull/8\n> [2]: https://github.com/j6t/git-gui/pull/9\n> ---\n>  meson.build         | 14 ++++++++++++++\n>  meson_options.txt   |  4 ++++\n>  subprojects/git-gui |  1 +\n>  subprojects/gitk    |  1 +\n>  4 files changed, 20 insertions(+)\n>\n> diff --git a/meson.build b/meson.build\n> index dd52efd1c8..e96953afec 100644\n> --- a/meson.build\n> +++ b/meson.build\n> @@ -239,7 +239,9 @@ git = find_program('git', dirs: program_path, native: true, required: false)\n>  sed = find_program('sed', dirs: program_path, native: true)\n>  shell = find_program('sh', dirs: program_path, native: true)\n>  tar = find_program('tar', dirs: program_path, native: true)\n> +tclsh = find_program('tclsh', required: get_option('git_gui'), native: false)\n>  time = find_program('time', dirs: program_path, required: get_option('benchmarks'))\n> +wish = find_program('wish', required: get_option('git_gui').enabled() or get_option('gitk').enabled(), native: false)\n>\n>  # Detect the target shell that is used by Git at runtime. Note that we prefer\n>  # \"/bin/sh\" over a PATH-based lookup, which provides a working shell on most\n> @@ -2250,6 +2252,16 @@ configure_file(\n>    configuration: build_options_config,\n>  )\n>\n> +gitk_option = get_option('gitk').disable_auto_if(not wish.found())\n> +if gitk_option.allowed()\n> +  subproject('gitk')\n> +endif\n> +\n> +git_gui_option = get_option('git_gui').disable_auto_if(not tclsh.found() or not wish.found())\n> +if git_gui_option.allowed()\n> +  subproject('git-gui')\n> +endif\n> +\n\nSo gitk requires 'wish' to exist, whereas 'git_gui' also requires\n'tclsh'. Looks good.\n\n[snip]\n"},{"id":"535144","messageId":"aYMz6A1kBUO6FQf9@pks.im","threadId":"63983","inReplyTo":"CAOLa=ZSeyKJD07xHKezQzry6KuwNnB=DzwE81Sx0A+b2u41rjA@mail.gmail.com","subject":"Re: [PATCH v2] meson: wire up gitk and git-gui","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-02-04T11:56:24Z","receivedAt":"2026-02-04T11:56:30Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Wed, Feb 04, 2026 at 05:00:11AM -0500, Karthik Nayak wrote:\n> Patrick Steinhardt <ps@pks.im> writes:\n> \n> > Wire up both gitk and git-gui in Meson as subprojects. These two\n> > programs should be the last missing pieces for feature compatibility\n> > with our Makefile for distributors.\n> >\n> > Note that Meson expects subprojects to live in the \"subprojects/\"\n> > directory. Create symlinks to fulfill this requirement.\n> >\n> > Signed-off-by: Patrick Steinhardt <ps@pks.im>\n> > ---\n> > Hi,\n> >\n> > I have upstreamed support for Meson into both gitk [1] and git-gui [2].\n> > This small patch series wires up support in Git.\n> >\n> > Changes in v2:\n> >   - Use symlinks instead of moving both gitk and git-gui into the\n> >     \"subprojects/\" directory.\n> >   - Rebased on v2.53.0, as it's been a while since v1 :)\n> >   - Link to v1: https://lore.kernel.org/r/20250819-b4-pks-meson-tcl-tk-v1-0-6bcaff0bc0a0@pks.im\n> >\n> > Thanks!\n> >\n> > Patrick\n> \n> \n> So in the previous version, we moved these projects into 'subprojects/',\n> but we now use symlinks instead. Do you know if there is perhaps an\n> issue in Meson to support configurable subproject paths? If so, we could\n> eventually drop the symlink.\n\nThere already is such support: you can configure subprojects to live in\nan arbitrary location by setting the `subproject_dir` parameter in the\n`project()` call. But there are some restrictions in place here:\n\n  - It cannot be an absolute path.\n\n  - It must not start with a dot.\n\n  - It must not contain \"../\".\n\nSo that means it's not possible to specify the top-level directory, and\nthat seems to be a concious decision.\n\nPatrick\n"},{"id":"535185","messageId":"xmqqa4xopf95.fsf@gitster.g","threadId":"63983","inReplyTo":"20260204-b4-pks-meson-tcl-tk-v2-1-5bc3ccf3a8ce@pks.im","subject":"Re: [PATCH v2] meson: wire up gitk and git-gui","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-02-04T17:53:10Z","receivedAt":"2026-02-04T17:53:12Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Patrick Steinhardt <ps@pks.im> writes:\n\n> Wire up both gitk and git-gui in Meson as subprojects. These two\n> programs should be the last missing pieces for feature compatibility\n> with our Makefile for distributors.\n>\n> Note that Meson expects subprojects to live in the \"subprojects/\"\n> directory. Create symlinks to fulfill this requirement.\n>\n> Signed-off-by: Patrick Steinhardt <ps@pks.im>\n> ---\n> Hi,\n>\n> I have upstreamed support for Meson into both gitk [1] and git-gui [2].\n> This small patch series wires up support in Git.\n>\n> Changes in v2:\n>   - Use symlinks instead of moving both gitk and git-gui into the\n>     \"subprojects/\" directory.\n\nJust being curious (as I cannot offer an alternative if the answer\nturns out to be \"oops, no\"), but is Windows, which has been symlink\nchallenged for quite some time, happy with this?\n\n> diff --git a/subprojects/git-gui b/subprojects/git-gui\n> new file mode 120000\n> index 0000000000..c6d917088b\n> --- /dev/null\n> +++ b/subprojects/git-gui\n> @@ -0,0 +1 @@\n> +../git-gui\n> \\ No newline at end of file\n> diff --git a/subprojects/gitk b/subprojects/gitk\n> new file mode 120000\n> index 0000000000..b66ad18ae5\n> --- /dev/null\n> +++ b/subprojects/gitk\n> @@ -0,0 +1 @@\n> +../gitk-git\n> \\ No newline at end of file\n\nCompletely unrelated, but I think there needs a way to decorate a\n.gitattributes pattern specify symlinks (and non-symlinks), just\nlike \"foo/\" makes the pattern match only to a directory and not file\n\"foo\", so that whitespace=incomplete-lines does not kick in for\nthem.  Alternatively, make symbolic links excempt from\nwhitespace=incomplete-lines rule altogether.\n\n"},{"id":"535209","messageId":"aYQ_sk7bWv1dFo09@pks.im","threadId":"63983","inReplyTo":"xmqqa4xopf95.fsf@gitster.g","subject":"Re: [PATCH v2] meson: wire up gitk and git-gui","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-02-05T06:58:58Z","receivedAt":"2026-02-05T06:59:05Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Wed, Feb 04, 2026 at 09:53:10AM -0800, Junio C Hamano wrote:\n> Patrick Steinhardt <ps@pks.im> writes:\n> \n> > Wire up both gitk and git-gui in Meson as subprojects. These two\n> > programs should be the last missing pieces for feature compatibility\n> > with our Makefile for distributors.\n> >\n> > Note that Meson expects subprojects to live in the \"subprojects/\"\n> > directory. Create symlinks to fulfill this requirement.\n> >\n> > Signed-off-by: Patrick Steinhardt <ps@pks.im>\n> > ---\n> > Hi,\n> >\n> > I have upstreamed support for Meson into both gitk [1] and git-gui [2].\n> > This small patch series wires up support in Git.\n> >\n> > Changes in v2:\n> >   - Use symlinks instead of moving both gitk and git-gui into the\n> >     \"subprojects/\" directory.\n> \n> Just being curious (as I cannot offer an alternative if the answer\n> turns out to be \"oops, no\"), but is Windows, which has been symlink\n> challenged for quite some time, happy with this?\n\nI think the answer is \"it depends\". Modern Windows does have native\nsymlink support enabled in case Developer Mode is turned on to the best\nof my knowledge, but not by default. Solutions like Cygwin or MSYS2 know\nto emulate symlink support -- in the case of Cygwin they look and behave\nlike symlinks for most of the part, in MSYS2 they use a deep copy.\n\nSo I expect that it should work in those cases, but I have not tested on\nWindows.\n\nPatrick\n"},{"id":"535216","messageId":"20260205093748.GA2177239@coredump.intra.peff.net","threadId":"63983","inReplyTo":"20260204-b4-pks-meson-tcl-tk-v2-1-5bc3ccf3a8ce@pks.im","subject":"Re: [PATCH v2] meson: wire up gitk and git-gui","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2026-02-05T09:37:48Z","receivedAt":"2026-02-05T09:37:50Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Wed, Feb 04, 2026 at 09:38:11AM +0100, Patrick Steinhardt wrote:\n\n> Wire up both gitk and git-gui in Meson as subprojects. These two\n> programs should be the last missing pieces for feature compatibility\n> with our Makefile for distributors.\n> \n> Note that Meson expects subprojects to live in the \"subprojects/\"\n> directory. Create symlinks to fulfill this requirement.\n\nThe GitHub Actions win+Meson job fails for 'jch' with:\n\n  Project name: gitk\n  Project version: undefined\n  Program sh found: YES (C:\\Program Files\\Git\\bin\\sh.EXE)\n  Program wish found: YES (C:\\Program Files\\Git\\mingw64\\bin\\wish.EXE)\n  Program chmod found: YES (C:\\Program Files\\Git\\usr\\bin\\chmod.EXE)\n  Program mv found: YES (C:\\Program Files\\Git\\usr\\bin\\mv.EXE)\n  Program sed found: YES (C:\\Program Files\\Git\\usr\\bin\\sed.EXE)\n  Program msgfmt found: NO\n\n  subprojects\\gitk\\meson.build:28:3: ERROR: Program 'msgfmt' not found or not executable\n\nI didn't investigate, but presumably it is related to this topic.\n\n-Peff\n"},{"id":"535231","messageId":"aYSFGG7lCg6Sw8vy@pks.im","threadId":"63983","inReplyTo":"20260205093748.GA2177239@coredump.intra.peff.net","subject":"Re: [PATCH v2] meson: wire up gitk and git-gui","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-02-05T11:55:04Z","receivedAt":"2026-02-05T11:55:11Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Thu, Feb 05, 2026 at 04:37:48AM -0500, Jeff King wrote:\n> On Wed, Feb 04, 2026 at 09:38:11AM +0100, Patrick Steinhardt wrote:\n> \n> > Wire up both gitk and git-gui in Meson as subprojects. These two\n> > programs should be the last missing pieces for feature compatibility\n> > with our Makefile for distributors.\n> > \n> > Note that Meson expects subprojects to live in the \"subprojects/\"\n> > directory. Create symlinks to fulfill this requirement.\n> \n> The GitHub Actions win+Meson job fails for 'jch' with:\n> \n>   Project name: gitk\n>   Project version: undefined\n>   Program sh found: YES (C:\\Program Files\\Git\\bin\\sh.EXE)\n>   Program wish found: YES (C:\\Program Files\\Git\\mingw64\\bin\\wish.EXE)\n>   Program chmod found: YES (C:\\Program Files\\Git\\usr\\bin\\chmod.EXE)\n>   Program mv found: YES (C:\\Program Files\\Git\\usr\\bin\\mv.EXE)\n>   Program sed found: YES (C:\\Program Files\\Git\\usr\\bin\\sed.EXE)\n>   Program msgfmt found: NO\n> \n>   subprojects\\gitk\\meson.build:28:3: ERROR: Program 'msgfmt' not found or not executable\n> \n> I didn't investigate, but presumably it is related to this topic.\n\nOh, indeed. It seems like the logic to handle a missing msgfmt\nexecutable already exists, but that I forgot to mark the executable as\noptional itself. So we need the below patch to fix this.\n\nThe nice thing is that this verifies that things actually work with the\nsymlink on Windows :)\n\nI've created https://github.com/j6t/gitk/pull/37 to fix the issue,\nthanks!\n\nPatrick\n\ndiff --git a/gitk-git/meson.build b/gitk-git/meson.build\nindex ca3c0cec58..aecc068d30 100644\n--- a/gitk-git/meson.build\n+++ b/gitk-git/meson.build\n@@ -25,6 +25,6 @@ custom_target(\n   install_dir: get_option('bindir'),\n )\n \n-if find_program('msgfmt').found()\n+if find_program('msgfmt', required: false).found()\n   subdir('po')\n endif\n\n"},{"id":"535350","messageId":"aYYLLI2Gb7YlBtKt@pks.im","threadId":"63983","inReplyTo":"aYSFGG7lCg6Sw8vy@pks.im","subject":"Re: [PATCH v2] meson: wire up gitk and git-gui","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-02-06T15:39:24Z","receivedAt":"2026-02-06T15:39:36Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Thu, Feb 05, 2026 at 12:55:04PM +0100, Patrick Steinhardt wrote:\n> On Thu, Feb 05, 2026 at 04:37:48AM -0500, Jeff King wrote:\n> > On Wed, Feb 04, 2026 at 09:38:11AM +0100, Patrick Steinhardt wrote:\n> > \n> > > Wire up both gitk and git-gui in Meson as subprojects. These two\n> > > programs should be the last missing pieces for feature compatibility\n> > > with our Makefile for distributors.\n> > > \n> > > Note that Meson expects subprojects to live in the \"subprojects/\"\n> > > directory. Create symlinks to fulfill this requirement.\n> > \n> > The GitHub Actions win+Meson job fails for 'jch' with:\n> > \n> >   Project name: gitk\n> >   Project version: undefined\n> >   Program sh found: YES (C:\\Program Files\\Git\\bin\\sh.EXE)\n> >   Program wish found: YES (C:\\Program Files\\Git\\mingw64\\bin\\wish.EXE)\n> >   Program chmod found: YES (C:\\Program Files\\Git\\usr\\bin\\chmod.EXE)\n> >   Program mv found: YES (C:\\Program Files\\Git\\usr\\bin\\mv.EXE)\n> >   Program sed found: YES (C:\\Program Files\\Git\\usr\\bin\\sed.EXE)\n> >   Program msgfmt found: NO\n> > \n> >   subprojects\\gitk\\meson.build:28:3: ERROR: Program 'msgfmt' not found or not executable\n> > \n> > I didn't investigate, but presumably it is related to this topic.\n> \n> Oh, indeed. It seems like the logic to handle a missing msgfmt\n> executable already exists, but that I forgot to mark the executable as\n> optional itself. So we need the below patch to fix this.\n> \n> The nice thing is that this verifies that things actually work with the\n> symlink on Windows :)\n> \n> I've created https://github.com/j6t/gitk/pull/37 to fix the issue,\n> thanks!\n\nThe fix has been merged upstream. I've created [1] to verify that the CI\nnow succeeds.\n\nJunio, I'm not really sure how to proceed here, as I cannot send the\nsubtree merge via mail to the best of my knowledge. Shall I instead send\na new version that just includes the upstream commit, or will you handle\nthe update?\n\nThanks!\n\nPatrick\n\n[1]: https://github.com/git/git/pull/2190\n"},{"id":"535399","messageId":"xmqqms1lcy0i.fsf@gitster.g","threadId":"63983","inReplyTo":"aYYLLI2Gb7YlBtKt@pks.im","subject":"Re: [PATCH v2] meson: wire up gitk and git-gui","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-02-06T22:23:09Z","receivedAt":"2026-02-06T22:23:12Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Patrick Steinhardt <ps@pks.im> writes:\n\n> The fix has been merged upstream. I've created [1] to verify that the CI\n> now succeeds.\n>\n> Junio, I'm not really sure how to proceed here, as I cannot send the\n> subtree merge via mail to the best of my knowledge. Shall I instead send\n> a new version that just includes the upstream commit, or will you handle\n> the update?\n\nWhenever j6t says his tree is ready, I'll pull from him to get the\nupdate.  This \"wire up\" patch does not need any changes, right?  If\nso, things will start working when I pull from j6t.\n\nThanks.\n"},{"id":"535501","messageId":"aYmbuLXiyGthSE0u@pks.im","threadId":"63983","inReplyTo":"xmqqms1lcy0i.fsf@gitster.g","subject":"Re: [PATCH v2] meson: wire up gitk and git-gui","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-02-09T08:32:56Z","receivedAt":"2026-02-09T08:33:03Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Fri, Feb 06, 2026 at 02:23:09PM -0800, Junio C Hamano wrote:\n> Patrick Steinhardt <ps@pks.im> writes:\n> \n> > The fix has been merged upstream. I've created [1] to verify that the CI\n> > now succeeds.\n> >\n> > Junio, I'm not really sure how to proceed here, as I cannot send the\n> > subtree merge via mail to the best of my knowledge. Shall I instead send\n> > a new version that just includes the upstream commit, or will you handle\n> > the update?\n> \n> Whenever j6t says his tree is ready, I'll pull from him to get the\n> update.  This \"wire up\" patch does not need any changes, right?  If\n> so, things will start working when I pull from j6t.\n\nYeah, exactly. Thanks!\n\nPatrick\n"},{"id":"535799","messageId":"xmqqjywjrnx6.fsf@gitster.g","threadId":"63983","inReplyTo":"aYYLLI2Gb7YlBtKt@pks.im","subject":"Re: [PATCH v2] meson: wire up gitk and git-gui","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-02-11T21:05:41Z","receivedAt":"2026-02-11T21:05:44Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Patrick Steinhardt <ps@pks.im> writes:\n\n> On Thu, Feb 05, 2026 at 12:55:04PM +0100, Patrick Steinhardt wrote:\n>\n>> I've created https://github.com/j6t/gitk/pull/37 to fix the issue,\n>> thanks!\n>\n> The fix has been merged upstream. I've created [1] to verify that the CI\n> now succeeds.\n\nHannes, I see that in your tree\n\n  https://github.com/j6t/gitk/commit/ddae547e3775638c238c11f30120f1e7e763fba8 \n\nhas Patrick's fix.  Is it a good time for me to pull from you, or do\nyou want/need to finish any housekeeping tasks like tagging before I\ndo?\n\nThis will hopefully help us unblock one of in-flight topics.\n\nThanks.\n"},{"id":"535810","messageId":"5975950d-873c-4bc9-90b6-e062021ab5de@kdbg.org","threadId":"63983","inReplyTo":"xmqqjywjrnx6.fsf@gitster.g","subject":"Re: [PATCH v2] meson: wire up gitk and git-gui","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2026-02-11T22:41:33Z","receivedAt":"2026-02-11T22:41:43Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 11.02.26 um 22:05 schrieb Junio C Hamano:\n> Patrick Steinhardt <ps@pks.im> writes:\n>> On Thu, Feb 05, 2026 at 12:55:04PM +0100, Patrick Steinhardt wrote:\n>> The fix has been merged upstream. I've created [1] to verify that the CI\n>> now succeeds.\n> \n> Hannes, I see that in your tree\n> \n>   https://github.com/j6t/gitk/commit/ddae547e3775638c238c11f30120f1e7e763fba8 \n> \n> has Patrick's fix.  Is it a good time for me to pull from you, or do\n> you want/need to finish any housekeeping tasks like tagging before I\n> do?\n> \n> This will hopefully help us unblock one of in-flight topics.\nPlease feel free to pull this commit (it's today's master).\n\nI was pondering whether I want to include more topics in the next pull\nrequest, but I didn't find the time to make up my mind. So, let's take\nthe fast route for now.\n\n-- Hannes\n\n"},{"id":"535811","messageId":"xmqqh5rmrirq.fsf@gitster.g","threadId":"63983","inReplyTo":"5975950d-873c-4bc9-90b6-e062021ab5de@kdbg.org","subject":"Re: [PATCH v2] meson: wire up gitk and git-gui","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-02-11T22:56:57Z","receivedAt":"2026-02-11T22:57:00Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Sixt <j6t@kdbg.org> writes:\n\n> Am 11.02.26 um 22:05 schrieb Junio C Hamano:\n>> Patrick Steinhardt <ps@pks.im> writes:\n>>> On Thu, Feb 05, 2026 at 12:55:04PM +0100, Patrick Steinhardt wrote:\n>>> The fix has been merged upstream. I've created [1] to verify that the CI\n>>> now succeeds.\n>> \n>> Hannes, I see that in your tree\n>> \n>>   https://github.com/j6t/gitk/commit/ddae547e3775638c238c11f30120f1e7e763fba8 \n>> \n>> has Patrick's fix.  Is it a good time for me to pull from you, or do\n>> you want/need to finish any housekeeping tasks like tagging before I\n>> do?\n>> \n>> This will hopefully help us unblock one of in-flight topics.\n> Please feel free to pull this commit (it's today's master).\n>\n> I was pondering whether I want to include more topics in the next pull\n> request, but I didn't find the time to make up my mind. So, let's take\n> the fast route for now.\n>\n> -- Hannes\n\nThanks!\n"}]}