* [PATCH 0/3] meson: wire up gitk and git-gui
@ 2025-08-19 8:18 Patrick Steinhardt
2025-08-19 8:18 ` [PATCH 1/3] git-gui: move into "subprojects/" Patrick Steinhardt
` (4 more replies)
0 siblings, 5 replies; 16+ messages in thread
From: Patrick Steinhardt @ 2025-08-19 8:18 UTC (permalink / raw)
To: git; +Cc: Johannes Sixt
Hi,
I have upstreamed support for Meson into both gitk [1] and git-gui [2].
This small patch series wires up support in Git.
To the best of my knowledge this is the last missing piece for feature
compatibility with our Makefile. As such, from my point of view, I think
that we can stop treating the Meson build system as experimental and
instead officially endorse it. Once merged I'll thus send another patch
series that updates our documentation in various different places to
also mention how to build Git with Meson.
Thanks!
Patrick
[1]: https://github.com/j6t/gitk/pull/8
[2]: https://github.com/j6t/git-gui/pull/9
---
Patrick Steinhardt (3):
git-gui: move into "subprojects/"
gitk: move into "subprojects/"
meson: wire up gitk and git-gui
Documentation/SubmittingPatches | 4 ++--
Documentation/gitk.adoc | 2 +-
Makefile | 18 +++++++++---------
meson.build | 14 ++++++++++++++
meson_options.txt | 4 ++++
subprojects/.gitignore | 2 ++
{git-gui => subprojects/git-gui}/.gitattributes | 0
{git-gui => subprojects/git-gui}/.gitignore | 0
.../git-gui}/GIT-GUI-BUILD-OPTIONS.in | 0
{git-gui => subprojects/git-gui}/GIT-VERSION-GEN | 0
{git-gui => subprojects/git-gui}/Makefile | 0
{git-gui => subprojects/git-gui}/README.md | 0
{git-gui => subprojects/git-gui}/generate-git-gui.sh | 0
{git-gui => subprojects/git-gui}/generate-script.sh | 0
{git-gui => subprojects/git-gui}/generate-tclindex.sh | 0
{git-gui => subprojects/git-gui}/git-gui--askpass.sh | 0
{git-gui => subprojects/git-gui}/git-gui.sh | 0
{git-gui => subprojects/git-gui}/lib/about.tcl | 0
{git-gui => subprojects/git-gui}/lib/blame.tcl | 0
{git-gui => subprojects/git-gui}/lib/branch.tcl | 0
.../git-gui}/lib/branch_checkout.tcl | 0
.../git-gui}/lib/branch_create.tcl | 0
.../git-gui}/lib/branch_delete.tcl | 0
.../git-gui}/lib/branch_rename.tcl | 0
{git-gui => subprojects/git-gui}/lib/browser.tcl | 0
{git-gui => subprojects/git-gui}/lib/checkout_op.tcl | 0
{git-gui => subprojects/git-gui}/lib/choose_font.tcl | 0
.../git-gui}/lib/choose_repository.tcl | 0
{git-gui => subprojects/git-gui}/lib/choose_rev.tcl | 0
{git-gui => subprojects/git-gui}/lib/chord.tcl | 0
{git-gui => subprojects/git-gui}/lib/class.tcl | 0
{git-gui => subprojects/git-gui}/lib/commit.tcl | 0
{git-gui => subprojects/git-gui}/lib/console.tcl | 0
{git-gui => subprojects/git-gui}/lib/database.tcl | 0
{git-gui => subprojects/git-gui}/lib/date.tcl | 0
{git-gui => subprojects/git-gui}/lib/diff.tcl | 0
{git-gui => subprojects/git-gui}/lib/encoding.tcl | 0
{git-gui => subprojects/git-gui}/lib/error.tcl | 0
{git-gui => subprojects/git-gui}/lib/git-gui.ico | Bin
{git-gui => subprojects/git-gui}/lib/index.tcl | 0
{git-gui => subprojects/git-gui}/lib/line.tcl | 0
{git-gui => subprojects/git-gui}/lib/logo.tcl | 0
{git-gui => subprojects/git-gui}/lib/merge.tcl | 0
{git-gui => subprojects/git-gui}/lib/mergetool.tcl | 0
{git-gui => subprojects/git-gui}/lib/meson.build | 0
{git-gui => subprojects/git-gui}/lib/option.tcl | 0
{git-gui => subprojects/git-gui}/lib/remote.tcl | 0
{git-gui => subprojects/git-gui}/lib/remote_add.tcl | 0
.../git-gui}/lib/remote_branch_delete.tcl | 0
{git-gui => subprojects/git-gui}/lib/search.tcl | 0
{git-gui => subprojects/git-gui}/lib/shortcut.tcl | 0
{git-gui => subprojects/git-gui}/lib/spellcheck.tcl | 0
{git-gui => subprojects/git-gui}/lib/sshkey.tcl | 0
{git-gui => subprojects/git-gui}/lib/status_bar.tcl | 0
{git-gui => subprojects/git-gui}/lib/themed.tcl | 0
{git-gui => subprojects/git-gui}/lib/tools.tcl | 0
{git-gui => subprojects/git-gui}/lib/tools_dlg.tcl | 0
{git-gui => subprojects/git-gui}/lib/transport.tcl | 0
{git-gui => subprojects/git-gui}/lib/win32.tcl | 0
.../git-gui}/lib/win32_shortcut.js | 0
{git-gui => subprojects/git-gui}/meson.build | 0
{git-gui => subprojects/git-gui}/po/.gitignore | 0
{git-gui => subprojects/git-gui}/po/README | 0
{git-gui => subprojects/git-gui}/po/bg.po | 0
{git-gui => subprojects/git-gui}/po/de.po | 0
{git-gui => subprojects/git-gui}/po/el.po | 0
{git-gui => subprojects/git-gui}/po/fr.po | 0
{git-gui => subprojects/git-gui}/po/glossary/Makefile | 0
{git-gui => subprojects/git-gui}/po/glossary/bg.po | 0
{git-gui => subprojects/git-gui}/po/glossary/de.po | 0
{git-gui => subprojects/git-gui}/po/glossary/el.po | 0
{git-gui => subprojects/git-gui}/po/glossary/fr.po | 0
.../git-gui}/po/glossary/git-gui-glossary.pot | 0
.../git-gui}/po/glossary/git-gui-glossary.txt | 0
{git-gui => subprojects/git-gui}/po/glossary/it.po | 0
{git-gui => subprojects/git-gui}/po/glossary/pt_br.po | 0
{git-gui => subprojects/git-gui}/po/glossary/pt_pt.po | 0
.../git-gui}/po/glossary/txt-to-pot.sh | 0
{git-gui => subprojects/git-gui}/po/glossary/zh_cn.po | 0
{git-gui => subprojects/git-gui}/po/hu.po | 0
{git-gui => subprojects/git-gui}/po/it.po | 0
{git-gui => subprojects/git-gui}/po/ja.po | 0
{git-gui => subprojects/git-gui}/po/meson.build | 0
{git-gui => subprojects/git-gui}/po/nb.po | 0
{git-gui => subprojects/git-gui}/po/po2msg.sh | 0
{git-gui => subprojects/git-gui}/po/pt_br.po | 0
{git-gui => subprojects/git-gui}/po/pt_pt.po | 0
{git-gui => subprojects/git-gui}/po/ru.po | 0
{git-gui => subprojects/git-gui}/po/sv.po | 0
{git-gui => subprojects/git-gui}/po/vi.po | 0
{git-gui => subprojects/git-gui}/po/zh_cn.po | 0
{git-gui => subprojects/git-gui}/windows/git-gui.sh | 0
{gitk-git => subprojects/gitk}/.gitignore | 0
{gitk-git => subprojects/gitk}/Makefile | 0
{gitk-git => subprojects/gitk}/generate-tcl.sh | 0
{gitk-git => subprojects/gitk}/gitk | 0
{gitk-git => subprojects/gitk}/meson.build | 0
{gitk-git => subprojects/gitk}/po/.gitignore | 0
{gitk-git => subprojects/gitk}/po/bg.po | 0
{gitk-git => subprojects/gitk}/po/ca.po | 0
{gitk-git => subprojects/gitk}/po/de.po | 0
{gitk-git => subprojects/gitk}/po/es.po | 0
{gitk-git => subprojects/gitk}/po/fr.po | 0
{gitk-git => subprojects/gitk}/po/hu.po | 0
{gitk-git => subprojects/gitk}/po/it.po | 0
{gitk-git => subprojects/gitk}/po/ja.po | 0
{gitk-git => subprojects/gitk}/po/meson.build | 0
{gitk-git => subprojects/gitk}/po/po2msg.sh | 0
{gitk-git => subprojects/gitk}/po/pt_br.po | 0
{gitk-git => subprojects/gitk}/po/pt_pt.po | 0
{gitk-git => subprojects/gitk}/po/ru.po | 0
{gitk-git => subprojects/gitk}/po/sv.po | 0
{gitk-git => subprojects/gitk}/po/ta.po | 0
{gitk-git => subprojects/gitk}/po/vi.po | 0
{gitk-git => subprojects/gitk}/po/zh_cn.po | 0
115 files changed, 32 insertions(+), 12 deletions(-)
---
base-commit: c44beea485f0f2feaf460e2ac87fdd5608d63cf0
change-id: 20250703-b4-pks-meson-tcl-tk-bb75616c8048
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/3] git-gui: move into "subprojects/"
2025-08-19 8:18 [PATCH 0/3] meson: wire up gitk and git-gui Patrick Steinhardt
@ 2025-08-19 8:18 ` Patrick Steinhardt
2025-08-19 9:36 ` Karthik Nayak
2025-08-19 8:18 ` [PATCH 2/3] gitk: " Patrick Steinhardt
` (3 subsequent siblings)
4 siblings, 1 reply; 16+ messages in thread
From: Patrick Steinhardt @ 2025-08-19 8:18 UTC (permalink / raw)
To: git; +Cc: Johannes Sixt
The "git-gui" project has recently gained support for being built with
Meson, but it is not yet wired up in Git's own Meson build instructions.
"git-gui" itself is wired up as a standalone project, which means that
we can trivially make it available via `subproject("git-gui")`.
So far the theory. In practice thoguh the `subproject()` function comes
with a couple of limitations. Most importantly, all subprojects need to
be contained in the same directory, and that directory cannot be the
top-level directory of the parent project. Right now we use the default
subproject directory ("subprojects/") for a couple of fallbacks in case
some important dependencies couldn't be found.
This means that we cannot just include the "git-gui" directory as a
subproject as it lives in our root directory. There are three options:
- We move "git-gui" into "subprojects/". It requires a bit of churn,
but should otherwise not have any significant downsides.
- We create a symlink pointing from "subprojects/git-gui" to the
top-level directory. This may not work on Windows.
- We can create a "git-gui.wrap" file that knows to pull a specific
commit from upstream and build it. This would mean that Meson and
Makefiles now have different sources of truth for which version of
"git-gui" we build.
The first option feels like the most sensible solution. It creates churn
and requires us to adapt the pull-request workflow a bit. But this
should be a one-time cost.
In theory we could also rename the "subprojects/" directory by passing
the "subproject_dir" argument to our `project()` call. But the name
feels quite fitting for our purpose, as well.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
Documentation/SubmittingPatches | 2 +-
Makefile | 12 ++++++------
subprojects/.gitignore | 1 +
{git-gui => subprojects/git-gui}/.gitattributes | 0
{git-gui => subprojects/git-gui}/.gitignore | 0
{git-gui => subprojects/git-gui}/GIT-GUI-BUILD-OPTIONS.in | 0
{git-gui => subprojects/git-gui}/GIT-VERSION-GEN | 0
{git-gui => subprojects/git-gui}/Makefile | 0
{git-gui => subprojects/git-gui}/README.md | 0
{git-gui => subprojects/git-gui}/generate-git-gui.sh | 0
{git-gui => subprojects/git-gui}/generate-script.sh | 0
{git-gui => subprojects/git-gui}/generate-tclindex.sh | 0
{git-gui => subprojects/git-gui}/git-gui--askpass.sh | 0
{git-gui => subprojects/git-gui}/git-gui.sh | 0
{git-gui => subprojects/git-gui}/lib/about.tcl | 0
{git-gui => subprojects/git-gui}/lib/blame.tcl | 0
{git-gui => subprojects/git-gui}/lib/branch.tcl | 0
{git-gui => subprojects/git-gui}/lib/branch_checkout.tcl | 0
{git-gui => subprojects/git-gui}/lib/branch_create.tcl | 0
{git-gui => subprojects/git-gui}/lib/branch_delete.tcl | 0
{git-gui => subprojects/git-gui}/lib/branch_rename.tcl | 0
{git-gui => subprojects/git-gui}/lib/browser.tcl | 0
{git-gui => subprojects/git-gui}/lib/checkout_op.tcl | 0
{git-gui => subprojects/git-gui}/lib/choose_font.tcl | 0
{git-gui => subprojects/git-gui}/lib/choose_repository.tcl | 0
{git-gui => subprojects/git-gui}/lib/choose_rev.tcl | 0
{git-gui => subprojects/git-gui}/lib/chord.tcl | 0
{git-gui => subprojects/git-gui}/lib/class.tcl | 0
{git-gui => subprojects/git-gui}/lib/commit.tcl | 0
{git-gui => subprojects/git-gui}/lib/console.tcl | 0
{git-gui => subprojects/git-gui}/lib/database.tcl | 0
{git-gui => subprojects/git-gui}/lib/date.tcl | 0
{git-gui => subprojects/git-gui}/lib/diff.tcl | 0
{git-gui => subprojects/git-gui}/lib/encoding.tcl | 0
{git-gui => subprojects/git-gui}/lib/error.tcl | 0
{git-gui => subprojects/git-gui}/lib/git-gui.ico | Bin
{git-gui => subprojects/git-gui}/lib/index.tcl | 0
{git-gui => subprojects/git-gui}/lib/line.tcl | 0
{git-gui => subprojects/git-gui}/lib/logo.tcl | 0
{git-gui => subprojects/git-gui}/lib/merge.tcl | 0
{git-gui => subprojects/git-gui}/lib/mergetool.tcl | 0
{git-gui => subprojects/git-gui}/lib/meson.build | 0
{git-gui => subprojects/git-gui}/lib/option.tcl | 0
{git-gui => subprojects/git-gui}/lib/remote.tcl | 0
{git-gui => subprojects/git-gui}/lib/remote_add.tcl | 0
.../git-gui}/lib/remote_branch_delete.tcl | 0
{git-gui => subprojects/git-gui}/lib/search.tcl | 0
{git-gui => subprojects/git-gui}/lib/shortcut.tcl | 0
{git-gui => subprojects/git-gui}/lib/spellcheck.tcl | 0
{git-gui => subprojects/git-gui}/lib/sshkey.tcl | 0
{git-gui => subprojects/git-gui}/lib/status_bar.tcl | 0
{git-gui => subprojects/git-gui}/lib/themed.tcl | 0
{git-gui => subprojects/git-gui}/lib/tools.tcl | 0
{git-gui => subprojects/git-gui}/lib/tools_dlg.tcl | 0
{git-gui => subprojects/git-gui}/lib/transport.tcl | 0
{git-gui => subprojects/git-gui}/lib/win32.tcl | 0
{git-gui => subprojects/git-gui}/lib/win32_shortcut.js | 0
{git-gui => subprojects/git-gui}/meson.build | 0
{git-gui => subprojects/git-gui}/po/.gitignore | 0
{git-gui => subprojects/git-gui}/po/README | 0
{git-gui => subprojects/git-gui}/po/bg.po | 0
{git-gui => subprojects/git-gui}/po/de.po | 0
{git-gui => subprojects/git-gui}/po/el.po | 0
{git-gui => subprojects/git-gui}/po/fr.po | 0
{git-gui => subprojects/git-gui}/po/glossary/Makefile | 0
{git-gui => subprojects/git-gui}/po/glossary/bg.po | 0
{git-gui => subprojects/git-gui}/po/glossary/de.po | 0
{git-gui => subprojects/git-gui}/po/glossary/el.po | 0
{git-gui => subprojects/git-gui}/po/glossary/fr.po | 0
.../git-gui}/po/glossary/git-gui-glossary.pot | 0
.../git-gui}/po/glossary/git-gui-glossary.txt | 0
{git-gui => subprojects/git-gui}/po/glossary/it.po | 0
{git-gui => subprojects/git-gui}/po/glossary/pt_br.po | 0
{git-gui => subprojects/git-gui}/po/glossary/pt_pt.po | 0
{git-gui => subprojects/git-gui}/po/glossary/txt-to-pot.sh | 0
{git-gui => subprojects/git-gui}/po/glossary/zh_cn.po | 0
{git-gui => subprojects/git-gui}/po/hu.po | 0
{git-gui => subprojects/git-gui}/po/it.po | 0
{git-gui => subprojects/git-gui}/po/ja.po | 0
{git-gui => subprojects/git-gui}/po/meson.build | 0
{git-gui => subprojects/git-gui}/po/nb.po | 0
{git-gui => subprojects/git-gui}/po/po2msg.sh | 0
{git-gui => subprojects/git-gui}/po/pt_br.po | 0
{git-gui => subprojects/git-gui}/po/pt_pt.po | 0
{git-gui => subprojects/git-gui}/po/ru.po | 0
{git-gui => subprojects/git-gui}/po/sv.po | 0
{git-gui => subprojects/git-gui}/po/vi.po | 0
{git-gui => subprojects/git-gui}/po/zh_cn.po | 0
{git-gui => subprojects/git-gui}/windows/git-gui.sh | 0
89 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index 86ca7f6a78a..3aca70728c7 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -699,7 +699,7 @@ rebase when I receive your patches).
Some parts of the system have dedicated maintainers with their own
repositories.
-- `git-gui/` comes from the git-gui project, maintained by Johannes Sixt:
+- `subprojects/git-gui/` comes from the git-gui project, maintained by Johannes Sixt:
https://github.com/j6t/git-gui
diff --git a/Makefile b/Makefile
index e11340c1ae7..834b79ca7ec 100644
--- a/Makefile
+++ b/Makefile
@@ -2457,7 +2457,7 @@ endif
all::
ifndef NO_TCLTK
- $(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
+ $(QUIET_SUBDIR0)subprojects/git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
endif
$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'
@@ -3569,7 +3569,7 @@ ifndef NO_PERL
endif
ifndef NO_TCLTK
$(MAKE) -C gitk-git install
- $(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install
+ $(MAKE) -C subprojects/git-gui gitexecdir='$(gitexec_instdir_SQ)' install
endif
ifneq (,$X)
$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_COMMANDS_TO_INSTALL) $(OTHER_PROGRAMS))), test '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p' -ef '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p$X' || $(RM) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p';)
@@ -3665,8 +3665,8 @@ GIT_ARCHIVE_EXTRA_FILES = \
--prefix=$(GIT_TARNAME)/ \
--add-file=configure \
--add-file=.dist-tmp-dir/version \
- --prefix=$(GIT_TARNAME)/git-gui/ \
- --add-file=.dist-tmp-dir/git-gui/version
+ --prefix=$(GIT_TARNAME)/subprojects/git-gui/ \
+ --add-file=.dist-tmp-dir/subprojects/git-gui/version
ifdef DC_SHA1_SUBMODULE
GIT_ARCHIVE_EXTRA_FILES += \
--prefix=$(GIT_TARNAME)/sha1collisiondetection/ \
@@ -3681,7 +3681,7 @@ dist: git-archive$(X) configure
@$(RM) -r .dist-tmp-dir
@mkdir .dist-tmp-dir
@echo $(GIT_VERSION) > .dist-tmp-dir/version
- @$(MAKE) -C git-gui TARDIR=../.dist-tmp-dir/git-gui dist-version
+ @$(MAKE) -C subprojects/git-gui TARDIR=../.dist-tmp-dir/subprojects/git-gui dist-version
./git-archive --format=tar \
$(GIT_ARCHIVE_EXTRA_FILES) \
--prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar
@@ -3787,7 +3787,7 @@ endif
$(MAKE) -C t/ clean
ifndef NO_TCLTK
$(MAKE) -C gitk-git clean
- $(MAKE) -C git-gui clean
+ $(MAKE) -C subprojects/git-gui clean
endif
$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-BUILD-OPTIONS
$(RM) GIT-USER-AGENT GIT-PREFIX
diff --git a/subprojects/.gitignore b/subprojects/.gitignore
index 63ea916ef5f..96388dbdd22 100644
--- a/subprojects/.gitignore
+++ b/subprojects/.gitignore
@@ -1 +1,2 @@
/*/
+!/git-gui/
diff --git a/git-gui/.gitattributes b/subprojects/git-gui/.gitattributes
similarity index 100%
rename from git-gui/.gitattributes
rename to subprojects/git-gui/.gitattributes
diff --git a/git-gui/.gitignore b/subprojects/git-gui/.gitignore
similarity index 100%
rename from git-gui/.gitignore
rename to subprojects/git-gui/.gitignore
diff --git a/git-gui/GIT-GUI-BUILD-OPTIONS.in b/subprojects/git-gui/GIT-GUI-BUILD-OPTIONS.in
similarity index 100%
rename from git-gui/GIT-GUI-BUILD-OPTIONS.in
rename to subprojects/git-gui/GIT-GUI-BUILD-OPTIONS.in
diff --git a/git-gui/GIT-VERSION-GEN b/subprojects/git-gui/GIT-VERSION-GEN
similarity index 100%
rename from git-gui/GIT-VERSION-GEN
rename to subprojects/git-gui/GIT-VERSION-GEN
diff --git a/git-gui/Makefile b/subprojects/git-gui/Makefile
similarity index 100%
rename from git-gui/Makefile
rename to subprojects/git-gui/Makefile
diff --git a/git-gui/README.md b/subprojects/git-gui/README.md
similarity index 100%
rename from git-gui/README.md
rename to subprojects/git-gui/README.md
diff --git a/git-gui/generate-git-gui.sh b/subprojects/git-gui/generate-git-gui.sh
similarity index 100%
rename from git-gui/generate-git-gui.sh
rename to subprojects/git-gui/generate-git-gui.sh
diff --git a/git-gui/generate-script.sh b/subprojects/git-gui/generate-script.sh
similarity index 100%
rename from git-gui/generate-script.sh
rename to subprojects/git-gui/generate-script.sh
diff --git a/git-gui/generate-tclindex.sh b/subprojects/git-gui/generate-tclindex.sh
similarity index 100%
rename from git-gui/generate-tclindex.sh
rename to subprojects/git-gui/generate-tclindex.sh
diff --git a/git-gui/git-gui--askpass.sh b/subprojects/git-gui/git-gui--askpass.sh
similarity index 100%
rename from git-gui/git-gui--askpass.sh
rename to subprojects/git-gui/git-gui--askpass.sh
diff --git a/git-gui/git-gui.sh b/subprojects/git-gui/git-gui.sh
similarity index 100%
rename from git-gui/git-gui.sh
rename to subprojects/git-gui/git-gui.sh
diff --git a/git-gui/lib/about.tcl b/subprojects/git-gui/lib/about.tcl
similarity index 100%
rename from git-gui/lib/about.tcl
rename to subprojects/git-gui/lib/about.tcl
diff --git a/git-gui/lib/blame.tcl b/subprojects/git-gui/lib/blame.tcl
similarity index 100%
rename from git-gui/lib/blame.tcl
rename to subprojects/git-gui/lib/blame.tcl
diff --git a/git-gui/lib/branch.tcl b/subprojects/git-gui/lib/branch.tcl
similarity index 100%
rename from git-gui/lib/branch.tcl
rename to subprojects/git-gui/lib/branch.tcl
diff --git a/git-gui/lib/branch_checkout.tcl b/subprojects/git-gui/lib/branch_checkout.tcl
similarity index 100%
rename from git-gui/lib/branch_checkout.tcl
rename to subprojects/git-gui/lib/branch_checkout.tcl
diff --git a/git-gui/lib/branch_create.tcl b/subprojects/git-gui/lib/branch_create.tcl
similarity index 100%
rename from git-gui/lib/branch_create.tcl
rename to subprojects/git-gui/lib/branch_create.tcl
diff --git a/git-gui/lib/branch_delete.tcl b/subprojects/git-gui/lib/branch_delete.tcl
similarity index 100%
rename from git-gui/lib/branch_delete.tcl
rename to subprojects/git-gui/lib/branch_delete.tcl
diff --git a/git-gui/lib/branch_rename.tcl b/subprojects/git-gui/lib/branch_rename.tcl
similarity index 100%
rename from git-gui/lib/branch_rename.tcl
rename to subprojects/git-gui/lib/branch_rename.tcl
diff --git a/git-gui/lib/browser.tcl b/subprojects/git-gui/lib/browser.tcl
similarity index 100%
rename from git-gui/lib/browser.tcl
rename to subprojects/git-gui/lib/browser.tcl
diff --git a/git-gui/lib/checkout_op.tcl b/subprojects/git-gui/lib/checkout_op.tcl
similarity index 100%
rename from git-gui/lib/checkout_op.tcl
rename to subprojects/git-gui/lib/checkout_op.tcl
diff --git a/git-gui/lib/choose_font.tcl b/subprojects/git-gui/lib/choose_font.tcl
similarity index 100%
rename from git-gui/lib/choose_font.tcl
rename to subprojects/git-gui/lib/choose_font.tcl
diff --git a/git-gui/lib/choose_repository.tcl b/subprojects/git-gui/lib/choose_repository.tcl
similarity index 100%
rename from git-gui/lib/choose_repository.tcl
rename to subprojects/git-gui/lib/choose_repository.tcl
diff --git a/git-gui/lib/choose_rev.tcl b/subprojects/git-gui/lib/choose_rev.tcl
similarity index 100%
rename from git-gui/lib/choose_rev.tcl
rename to subprojects/git-gui/lib/choose_rev.tcl
diff --git a/git-gui/lib/chord.tcl b/subprojects/git-gui/lib/chord.tcl
similarity index 100%
rename from git-gui/lib/chord.tcl
rename to subprojects/git-gui/lib/chord.tcl
diff --git a/git-gui/lib/class.tcl b/subprojects/git-gui/lib/class.tcl
similarity index 100%
rename from git-gui/lib/class.tcl
rename to subprojects/git-gui/lib/class.tcl
diff --git a/git-gui/lib/commit.tcl b/subprojects/git-gui/lib/commit.tcl
similarity index 100%
rename from git-gui/lib/commit.tcl
rename to subprojects/git-gui/lib/commit.tcl
diff --git a/git-gui/lib/console.tcl b/subprojects/git-gui/lib/console.tcl
similarity index 100%
rename from git-gui/lib/console.tcl
rename to subprojects/git-gui/lib/console.tcl
diff --git a/git-gui/lib/database.tcl b/subprojects/git-gui/lib/database.tcl
similarity index 100%
rename from git-gui/lib/database.tcl
rename to subprojects/git-gui/lib/database.tcl
diff --git a/git-gui/lib/date.tcl b/subprojects/git-gui/lib/date.tcl
similarity index 100%
rename from git-gui/lib/date.tcl
rename to subprojects/git-gui/lib/date.tcl
diff --git a/git-gui/lib/diff.tcl b/subprojects/git-gui/lib/diff.tcl
similarity index 100%
rename from git-gui/lib/diff.tcl
rename to subprojects/git-gui/lib/diff.tcl
diff --git a/git-gui/lib/encoding.tcl b/subprojects/git-gui/lib/encoding.tcl
similarity index 100%
rename from git-gui/lib/encoding.tcl
rename to subprojects/git-gui/lib/encoding.tcl
diff --git a/git-gui/lib/error.tcl b/subprojects/git-gui/lib/error.tcl
similarity index 100%
rename from git-gui/lib/error.tcl
rename to subprojects/git-gui/lib/error.tcl
diff --git a/git-gui/lib/git-gui.ico b/subprojects/git-gui/lib/git-gui.ico
similarity index 100%
rename from git-gui/lib/git-gui.ico
rename to subprojects/git-gui/lib/git-gui.ico
diff --git a/git-gui/lib/index.tcl b/subprojects/git-gui/lib/index.tcl
similarity index 100%
rename from git-gui/lib/index.tcl
rename to subprojects/git-gui/lib/index.tcl
diff --git a/git-gui/lib/line.tcl b/subprojects/git-gui/lib/line.tcl
similarity index 100%
rename from git-gui/lib/line.tcl
rename to subprojects/git-gui/lib/line.tcl
diff --git a/git-gui/lib/logo.tcl b/subprojects/git-gui/lib/logo.tcl
similarity index 100%
rename from git-gui/lib/logo.tcl
rename to subprojects/git-gui/lib/logo.tcl
diff --git a/git-gui/lib/merge.tcl b/subprojects/git-gui/lib/merge.tcl
similarity index 100%
rename from git-gui/lib/merge.tcl
rename to subprojects/git-gui/lib/merge.tcl
diff --git a/git-gui/lib/mergetool.tcl b/subprojects/git-gui/lib/mergetool.tcl
similarity index 100%
rename from git-gui/lib/mergetool.tcl
rename to subprojects/git-gui/lib/mergetool.tcl
diff --git a/git-gui/lib/meson.build b/subprojects/git-gui/lib/meson.build
similarity index 100%
rename from git-gui/lib/meson.build
rename to subprojects/git-gui/lib/meson.build
diff --git a/git-gui/lib/option.tcl b/subprojects/git-gui/lib/option.tcl
similarity index 100%
rename from git-gui/lib/option.tcl
rename to subprojects/git-gui/lib/option.tcl
diff --git a/git-gui/lib/remote.tcl b/subprojects/git-gui/lib/remote.tcl
similarity index 100%
rename from git-gui/lib/remote.tcl
rename to subprojects/git-gui/lib/remote.tcl
diff --git a/git-gui/lib/remote_add.tcl b/subprojects/git-gui/lib/remote_add.tcl
similarity index 100%
rename from git-gui/lib/remote_add.tcl
rename to subprojects/git-gui/lib/remote_add.tcl
diff --git a/git-gui/lib/remote_branch_delete.tcl b/subprojects/git-gui/lib/remote_branch_delete.tcl
similarity index 100%
rename from git-gui/lib/remote_branch_delete.tcl
rename to subprojects/git-gui/lib/remote_branch_delete.tcl
diff --git a/git-gui/lib/search.tcl b/subprojects/git-gui/lib/search.tcl
similarity index 100%
rename from git-gui/lib/search.tcl
rename to subprojects/git-gui/lib/search.tcl
diff --git a/git-gui/lib/shortcut.tcl b/subprojects/git-gui/lib/shortcut.tcl
similarity index 100%
rename from git-gui/lib/shortcut.tcl
rename to subprojects/git-gui/lib/shortcut.tcl
diff --git a/git-gui/lib/spellcheck.tcl b/subprojects/git-gui/lib/spellcheck.tcl
similarity index 100%
rename from git-gui/lib/spellcheck.tcl
rename to subprojects/git-gui/lib/spellcheck.tcl
diff --git a/git-gui/lib/sshkey.tcl b/subprojects/git-gui/lib/sshkey.tcl
similarity index 100%
rename from git-gui/lib/sshkey.tcl
rename to subprojects/git-gui/lib/sshkey.tcl
diff --git a/git-gui/lib/status_bar.tcl b/subprojects/git-gui/lib/status_bar.tcl
similarity index 100%
rename from git-gui/lib/status_bar.tcl
rename to subprojects/git-gui/lib/status_bar.tcl
diff --git a/git-gui/lib/themed.tcl b/subprojects/git-gui/lib/themed.tcl
similarity index 100%
rename from git-gui/lib/themed.tcl
rename to subprojects/git-gui/lib/themed.tcl
diff --git a/git-gui/lib/tools.tcl b/subprojects/git-gui/lib/tools.tcl
similarity index 100%
rename from git-gui/lib/tools.tcl
rename to subprojects/git-gui/lib/tools.tcl
diff --git a/git-gui/lib/tools_dlg.tcl b/subprojects/git-gui/lib/tools_dlg.tcl
similarity index 100%
rename from git-gui/lib/tools_dlg.tcl
rename to subprojects/git-gui/lib/tools_dlg.tcl
diff --git a/git-gui/lib/transport.tcl b/subprojects/git-gui/lib/transport.tcl
similarity index 100%
rename from git-gui/lib/transport.tcl
rename to subprojects/git-gui/lib/transport.tcl
diff --git a/git-gui/lib/win32.tcl b/subprojects/git-gui/lib/win32.tcl
similarity index 100%
rename from git-gui/lib/win32.tcl
rename to subprojects/git-gui/lib/win32.tcl
diff --git a/git-gui/lib/win32_shortcut.js b/subprojects/git-gui/lib/win32_shortcut.js
similarity index 100%
rename from git-gui/lib/win32_shortcut.js
rename to subprojects/git-gui/lib/win32_shortcut.js
diff --git a/git-gui/meson.build b/subprojects/git-gui/meson.build
similarity index 100%
rename from git-gui/meson.build
rename to subprojects/git-gui/meson.build
diff --git a/git-gui/po/.gitignore b/subprojects/git-gui/po/.gitignore
similarity index 100%
rename from git-gui/po/.gitignore
rename to subprojects/git-gui/po/.gitignore
diff --git a/git-gui/po/README b/subprojects/git-gui/po/README
similarity index 100%
rename from git-gui/po/README
rename to subprojects/git-gui/po/README
diff --git a/git-gui/po/bg.po b/subprojects/git-gui/po/bg.po
similarity index 100%
rename from git-gui/po/bg.po
rename to subprojects/git-gui/po/bg.po
diff --git a/git-gui/po/de.po b/subprojects/git-gui/po/de.po
similarity index 100%
rename from git-gui/po/de.po
rename to subprojects/git-gui/po/de.po
diff --git a/git-gui/po/el.po b/subprojects/git-gui/po/el.po
similarity index 100%
rename from git-gui/po/el.po
rename to subprojects/git-gui/po/el.po
diff --git a/git-gui/po/fr.po b/subprojects/git-gui/po/fr.po
similarity index 100%
rename from git-gui/po/fr.po
rename to subprojects/git-gui/po/fr.po
diff --git a/git-gui/po/glossary/Makefile b/subprojects/git-gui/po/glossary/Makefile
similarity index 100%
rename from git-gui/po/glossary/Makefile
rename to subprojects/git-gui/po/glossary/Makefile
diff --git a/git-gui/po/glossary/bg.po b/subprojects/git-gui/po/glossary/bg.po
similarity index 100%
rename from git-gui/po/glossary/bg.po
rename to subprojects/git-gui/po/glossary/bg.po
diff --git a/git-gui/po/glossary/de.po b/subprojects/git-gui/po/glossary/de.po
similarity index 100%
rename from git-gui/po/glossary/de.po
rename to subprojects/git-gui/po/glossary/de.po
diff --git a/git-gui/po/glossary/el.po b/subprojects/git-gui/po/glossary/el.po
similarity index 100%
rename from git-gui/po/glossary/el.po
rename to subprojects/git-gui/po/glossary/el.po
diff --git a/git-gui/po/glossary/fr.po b/subprojects/git-gui/po/glossary/fr.po
similarity index 100%
rename from git-gui/po/glossary/fr.po
rename to subprojects/git-gui/po/glossary/fr.po
diff --git a/git-gui/po/glossary/git-gui-glossary.pot b/subprojects/git-gui/po/glossary/git-gui-glossary.pot
similarity index 100%
rename from git-gui/po/glossary/git-gui-glossary.pot
rename to subprojects/git-gui/po/glossary/git-gui-glossary.pot
diff --git a/git-gui/po/glossary/git-gui-glossary.txt b/subprojects/git-gui/po/glossary/git-gui-glossary.txt
similarity index 100%
rename from git-gui/po/glossary/git-gui-glossary.txt
rename to subprojects/git-gui/po/glossary/git-gui-glossary.txt
diff --git a/git-gui/po/glossary/it.po b/subprojects/git-gui/po/glossary/it.po
similarity index 100%
rename from git-gui/po/glossary/it.po
rename to subprojects/git-gui/po/glossary/it.po
diff --git a/git-gui/po/glossary/pt_br.po b/subprojects/git-gui/po/glossary/pt_br.po
similarity index 100%
rename from git-gui/po/glossary/pt_br.po
rename to subprojects/git-gui/po/glossary/pt_br.po
diff --git a/git-gui/po/glossary/pt_pt.po b/subprojects/git-gui/po/glossary/pt_pt.po
similarity index 100%
rename from git-gui/po/glossary/pt_pt.po
rename to subprojects/git-gui/po/glossary/pt_pt.po
diff --git a/git-gui/po/glossary/txt-to-pot.sh b/subprojects/git-gui/po/glossary/txt-to-pot.sh
similarity index 100%
rename from git-gui/po/glossary/txt-to-pot.sh
rename to subprojects/git-gui/po/glossary/txt-to-pot.sh
diff --git a/git-gui/po/glossary/zh_cn.po b/subprojects/git-gui/po/glossary/zh_cn.po
similarity index 100%
rename from git-gui/po/glossary/zh_cn.po
rename to subprojects/git-gui/po/glossary/zh_cn.po
diff --git a/git-gui/po/hu.po b/subprojects/git-gui/po/hu.po
similarity index 100%
rename from git-gui/po/hu.po
rename to subprojects/git-gui/po/hu.po
diff --git a/git-gui/po/it.po b/subprojects/git-gui/po/it.po
similarity index 100%
rename from git-gui/po/it.po
rename to subprojects/git-gui/po/it.po
diff --git a/git-gui/po/ja.po b/subprojects/git-gui/po/ja.po
similarity index 100%
rename from git-gui/po/ja.po
rename to subprojects/git-gui/po/ja.po
diff --git a/git-gui/po/meson.build b/subprojects/git-gui/po/meson.build
similarity index 100%
rename from git-gui/po/meson.build
rename to subprojects/git-gui/po/meson.build
diff --git a/git-gui/po/nb.po b/subprojects/git-gui/po/nb.po
similarity index 100%
rename from git-gui/po/nb.po
rename to subprojects/git-gui/po/nb.po
diff --git a/git-gui/po/po2msg.sh b/subprojects/git-gui/po/po2msg.sh
similarity index 100%
rename from git-gui/po/po2msg.sh
rename to subprojects/git-gui/po/po2msg.sh
diff --git a/git-gui/po/pt_br.po b/subprojects/git-gui/po/pt_br.po
similarity index 100%
rename from git-gui/po/pt_br.po
rename to subprojects/git-gui/po/pt_br.po
diff --git a/git-gui/po/pt_pt.po b/subprojects/git-gui/po/pt_pt.po
similarity index 100%
rename from git-gui/po/pt_pt.po
rename to subprojects/git-gui/po/pt_pt.po
diff --git a/git-gui/po/ru.po b/subprojects/git-gui/po/ru.po
similarity index 100%
rename from git-gui/po/ru.po
rename to subprojects/git-gui/po/ru.po
diff --git a/git-gui/po/sv.po b/subprojects/git-gui/po/sv.po
similarity index 100%
rename from git-gui/po/sv.po
rename to subprojects/git-gui/po/sv.po
diff --git a/git-gui/po/vi.po b/subprojects/git-gui/po/vi.po
similarity index 100%
rename from git-gui/po/vi.po
rename to subprojects/git-gui/po/vi.po
diff --git a/git-gui/po/zh_cn.po b/subprojects/git-gui/po/zh_cn.po
similarity index 100%
rename from git-gui/po/zh_cn.po
rename to subprojects/git-gui/po/zh_cn.po
diff --git a/git-gui/windows/git-gui.sh b/subprojects/git-gui/windows/git-gui.sh
similarity index 100%
rename from git-gui/windows/git-gui.sh
rename to subprojects/git-gui/windows/git-gui.sh
--
2.51.0.261.g7ce5a0a67e.dirty
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 2/3] gitk: move into "subprojects/"
2025-08-19 8:18 [PATCH 0/3] meson: wire up gitk and git-gui Patrick Steinhardt
2025-08-19 8:18 ` [PATCH 1/3] git-gui: move into "subprojects/" Patrick Steinhardt
@ 2025-08-19 8:18 ` Patrick Steinhardt
2025-08-20 5:49 ` [PATCH] doc/gitk: update reference to the external project Johannes Sixt
2025-08-19 8:18 ` [PATCH 3/3] meson: wire up gitk and git-gui Patrick Steinhardt
` (2 subsequent siblings)
4 siblings, 1 reply; 16+ messages in thread
From: Patrick Steinhardt @ 2025-08-19 8:18 UTC (permalink / raw)
To: git; +Cc: Johannes Sixt
Move the "gitk-git" project into "subprojects/" with the same reasoning
as in the preceding commit.
While at it, lose the "-git" suffix. There isn't any (obvious?) reason
why that suffix exists as the project is called "gitk", not "gitk-git".
Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
Documentation/SubmittingPatches | 2 +-
Documentation/gitk.adoc | 2 +-
Makefile | 6 +++---
subprojects/.gitignore | 1 +
{gitk-git => subprojects/gitk}/.gitignore | 0
{gitk-git => subprojects/gitk}/Makefile | 0
{gitk-git => subprojects/gitk}/generate-tcl.sh | 0
{gitk-git => subprojects/gitk}/gitk | 0
{gitk-git => subprojects/gitk}/meson.build | 0
{gitk-git => subprojects/gitk}/po/.gitignore | 0
{gitk-git => subprojects/gitk}/po/bg.po | 0
{gitk-git => subprojects/gitk}/po/ca.po | 0
{gitk-git => subprojects/gitk}/po/de.po | 0
{gitk-git => subprojects/gitk}/po/es.po | 0
{gitk-git => subprojects/gitk}/po/fr.po | 0
{gitk-git => subprojects/gitk}/po/hu.po | 0
{gitk-git => subprojects/gitk}/po/it.po | 0
{gitk-git => subprojects/gitk}/po/ja.po | 0
{gitk-git => subprojects/gitk}/po/meson.build | 0
{gitk-git => subprojects/gitk}/po/po2msg.sh | 0
{gitk-git => subprojects/gitk}/po/pt_br.po | 0
{gitk-git => subprojects/gitk}/po/pt_pt.po | 0
{gitk-git => subprojects/gitk}/po/ru.po | 0
{gitk-git => subprojects/gitk}/po/sv.po | 0
{gitk-git => subprojects/gitk}/po/ta.po | 0
{gitk-git => subprojects/gitk}/po/vi.po | 0
{gitk-git => subprojects/gitk}/po/zh_cn.po | 0
27 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index 3aca70728c7..7492db36d0a 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -705,7 +705,7 @@ repositories.
Contibutions should go via the git mailing list.
-- `gitk-git/` comes from the gitk project, maintained by Johannes Sixt:
+- `subprojects/gitk/` comes from the gitk project, maintained by Johannes Sixt:
https://github.com/j6t/gitk
diff --git a/Documentation/gitk.adoc b/Documentation/gitk.adoc
index 58ce40ddb11..284266711f1 100644
--- a/Documentation/gitk.adoc
+++ b/Documentation/gitk.adoc
@@ -170,7 +170,7 @@ tcl/tk.
versions are distributed as part of the Git suite for the convenience
of end users.
-gitk-git/ comes from Paul Mackerras's gitk project:
+subprojects/gitk/ comes from Paul Mackerras's gitk project:
git://ozlabs.org/~paulus/gitk
diff --git a/Makefile b/Makefile
index 834b79ca7ec..861b0b98594 100644
--- a/Makefile
+++ b/Makefile
@@ -2458,7 +2458,7 @@ endif
all::
ifndef NO_TCLTK
$(QUIET_SUBDIR0)subprojects/git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
- $(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
+ $(QUIET_SUBDIR0)subprojects/gitk $(QUIET_SUBDIR1) all
endif
$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'
@@ -3568,7 +3568,7 @@ ifndef NO_PERL
(cd '$(DESTDIR_SQ)$(perllibdir_SQ)' && umask 022 && $(TAR) xof -)
endif
ifndef NO_TCLTK
- $(MAKE) -C gitk-git install
+ $(MAKE) -C subprojects/gitk install
$(MAKE) -C subprojects/git-gui gitexecdir='$(gitexec_instdir_SQ)' install
endif
ifneq (,$X)
@@ -3786,7 +3786,7 @@ endif
$(MAKE) -C templates/ clean
$(MAKE) -C t/ clean
ifndef NO_TCLTK
- $(MAKE) -C gitk-git clean
+ $(MAKE) -C subprojects/gitk clean
$(MAKE) -C subprojects/git-gui clean
endif
$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-BUILD-OPTIONS
diff --git a/subprojects/.gitignore b/subprojects/.gitignore
index 96388dbdd22..fd66efe7100 100644
--- a/subprojects/.gitignore
+++ b/subprojects/.gitignore
@@ -1,2 +1,3 @@
/*/
!/git-gui/
+!/gitk/
diff --git a/gitk-git/.gitignore b/subprojects/gitk/.gitignore
similarity index 100%
rename from gitk-git/.gitignore
rename to subprojects/gitk/.gitignore
diff --git a/gitk-git/Makefile b/subprojects/gitk/Makefile
similarity index 100%
rename from gitk-git/Makefile
rename to subprojects/gitk/Makefile
diff --git a/gitk-git/generate-tcl.sh b/subprojects/gitk/generate-tcl.sh
similarity index 100%
rename from gitk-git/generate-tcl.sh
rename to subprojects/gitk/generate-tcl.sh
diff --git a/gitk-git/gitk b/subprojects/gitk/gitk
similarity index 100%
rename from gitk-git/gitk
rename to subprojects/gitk/gitk
diff --git a/gitk-git/meson.build b/subprojects/gitk/meson.build
similarity index 100%
rename from gitk-git/meson.build
rename to subprojects/gitk/meson.build
diff --git a/gitk-git/po/.gitignore b/subprojects/gitk/po/.gitignore
similarity index 100%
rename from gitk-git/po/.gitignore
rename to subprojects/gitk/po/.gitignore
diff --git a/gitk-git/po/bg.po b/subprojects/gitk/po/bg.po
similarity index 100%
rename from gitk-git/po/bg.po
rename to subprojects/gitk/po/bg.po
diff --git a/gitk-git/po/ca.po b/subprojects/gitk/po/ca.po
similarity index 100%
rename from gitk-git/po/ca.po
rename to subprojects/gitk/po/ca.po
diff --git a/gitk-git/po/de.po b/subprojects/gitk/po/de.po
similarity index 100%
rename from gitk-git/po/de.po
rename to subprojects/gitk/po/de.po
diff --git a/gitk-git/po/es.po b/subprojects/gitk/po/es.po
similarity index 100%
rename from gitk-git/po/es.po
rename to subprojects/gitk/po/es.po
diff --git a/gitk-git/po/fr.po b/subprojects/gitk/po/fr.po
similarity index 100%
rename from gitk-git/po/fr.po
rename to subprojects/gitk/po/fr.po
diff --git a/gitk-git/po/hu.po b/subprojects/gitk/po/hu.po
similarity index 100%
rename from gitk-git/po/hu.po
rename to subprojects/gitk/po/hu.po
diff --git a/gitk-git/po/it.po b/subprojects/gitk/po/it.po
similarity index 100%
rename from gitk-git/po/it.po
rename to subprojects/gitk/po/it.po
diff --git a/gitk-git/po/ja.po b/subprojects/gitk/po/ja.po
similarity index 100%
rename from gitk-git/po/ja.po
rename to subprojects/gitk/po/ja.po
diff --git a/gitk-git/po/meson.build b/subprojects/gitk/po/meson.build
similarity index 100%
rename from gitk-git/po/meson.build
rename to subprojects/gitk/po/meson.build
diff --git a/gitk-git/po/po2msg.sh b/subprojects/gitk/po/po2msg.sh
similarity index 100%
rename from gitk-git/po/po2msg.sh
rename to subprojects/gitk/po/po2msg.sh
diff --git a/gitk-git/po/pt_br.po b/subprojects/gitk/po/pt_br.po
similarity index 100%
rename from gitk-git/po/pt_br.po
rename to subprojects/gitk/po/pt_br.po
diff --git a/gitk-git/po/pt_pt.po b/subprojects/gitk/po/pt_pt.po
similarity index 100%
rename from gitk-git/po/pt_pt.po
rename to subprojects/gitk/po/pt_pt.po
diff --git a/gitk-git/po/ru.po b/subprojects/gitk/po/ru.po
similarity index 100%
rename from gitk-git/po/ru.po
rename to subprojects/gitk/po/ru.po
diff --git a/gitk-git/po/sv.po b/subprojects/gitk/po/sv.po
similarity index 100%
rename from gitk-git/po/sv.po
rename to subprojects/gitk/po/sv.po
diff --git a/gitk-git/po/ta.po b/subprojects/gitk/po/ta.po
similarity index 100%
rename from gitk-git/po/ta.po
rename to subprojects/gitk/po/ta.po
diff --git a/gitk-git/po/vi.po b/subprojects/gitk/po/vi.po
similarity index 100%
rename from gitk-git/po/vi.po
rename to subprojects/gitk/po/vi.po
diff --git a/gitk-git/po/zh_cn.po b/subprojects/gitk/po/zh_cn.po
similarity index 100%
rename from gitk-git/po/zh_cn.po
rename to subprojects/gitk/po/zh_cn.po
--
2.51.0.261.g7ce5a0a67e.dirty
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 3/3] meson: wire up gitk and git-gui
2025-08-19 8:18 [PATCH 0/3] meson: wire up gitk and git-gui Patrick Steinhardt
2025-08-19 8:18 ` [PATCH 1/3] git-gui: move into "subprojects/" Patrick Steinhardt
2025-08-19 8:18 ` [PATCH 2/3] gitk: " Patrick Steinhardt
@ 2025-08-19 8:18 ` Patrick Steinhardt
2025-08-19 9:40 ` Karthik Nayak
2025-08-19 15:49 ` [PATCH 0/3] " Junio C Hamano
2025-08-19 22:25 ` Ramsay Jones
4 siblings, 1 reply; 16+ messages in thread
From: Patrick Steinhardt @ 2025-08-19 8:18 UTC (permalink / raw)
To: git; +Cc: Johannes Sixt
Wire up both gitk and git-gui in Meson as subprojects. These two
programs should be the last missing pieces for feature compatibility
with our Makefile.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
meson.build | 14 ++++++++++++++
meson_options.txt | 4 ++++
2 files changed, 18 insertions(+)
diff --git a/meson.build b/meson.build
index 5dd299b496..edf7b69a00 100644
--- a/meson.build
+++ b/meson.build
@@ -239,7 +239,9 @@ git = find_program('git', dirs: program_path, native: true, required: false)
sed = find_program('sed', dirs: program_path, native: true)
shell = find_program('sh', dirs: program_path, native: true)
tar = find_program('tar', dirs: program_path, native: true)
+tclsh = find_program('tclsh', required: get_option('git_gui'), native: false)
time = find_program('time', dirs: program_path, required: get_option('benchmarks'))
+wish = find_program('wish', required: get_option('git_gui').enabled() or get_option('gitk').enabled(), native: false)
# Detect the target shell that is used by Git at runtime. Note that we prefer
# "/bin/sh" over a PATH-based lookup, which provides a working shell on most
@@ -2207,6 +2209,16 @@ configure_file(
configuration: build_options_config,
)
+gitk_option = get_option('gitk').disable_auto_if(not wish.found())
+if gitk_option.allowed()
+ subproject('gitk')
+endif
+
+git_gui_option = get_option('git_gui').disable_auto_if(not tclsh.found() or not wish.found())
+if git_gui_option.allowed()
+ subproject('git-gui')
+endif
+
# Development environments can be used via `meson devenv -C <builddir>`. This
# allows you to execute test scripts directly with the built Git version and
# puts the built version of Git in your PATH.
@@ -2233,6 +2245,8 @@ summary({
'curl': curl,
'expat': expat,
'gettext': intl,
+ 'gitk': gitk_option.allowed(),
+ 'git-gui': git_gui_option.allowed(),
'gitweb': gitweb_option.allowed(),
'iconv': iconv,
'pcre2': pcre2,
diff --git a/meson_options.txt b/meson_options.txt
index 1668f260a1..8fa330771b 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -41,6 +41,10 @@ option('expat', type: 'feature', value: 'enabled',
description: 'Build helpers used to push to remotes with the HTTP transport.')
option('gettext', type: 'feature', value: 'auto',
description: 'Build translation files.')
+option('gitk', type: 'feature', value: 'auto',
+ description: 'Build the Gitk graphical repository browser. Requires Tcl/Tk.')
+option('git_gui', type: 'feature', value: 'auto',
+ description: 'Build the git-gui graphical user interface for Git. Requires Tcl/Tk.')
option('gitweb', type: 'feature', value: 'auto',
description: 'Build Git web interface. Requires Perl.')
option('iconv', type: 'feature', value: 'auto',
--
2.51.0.261.g7ce5a0a67e.dirty
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 1/3] git-gui: move into "subprojects/"
2025-08-19 8:18 ` [PATCH 1/3] git-gui: move into "subprojects/" Patrick Steinhardt
@ 2025-08-19 9:36 ` Karthik Nayak
0 siblings, 0 replies; 16+ messages in thread
From: Karthik Nayak @ 2025-08-19 9:36 UTC (permalink / raw)
To: Patrick Steinhardt, git; +Cc: Johannes Sixt
[-- Attachment #1: Type: text/plain, Size: 1888 bytes --]
Patrick Steinhardt <ps@pks.im> writes:
> The "git-gui" project has recently gained support for being built with
> Meson, but it is not yet wired up in Git's own Meson build instructions.
> "git-gui" itself is wired up as a standalone project, which means that
> we can trivially make it available via `subproject("git-gui")`.
>
> So far the theory. In practice thoguh the `subproject()` function comes
s/thoguh/though
> with a couple of limitations. Most importantly, all subprojects need to
> be contained in the same directory, and that directory cannot be the
> top-level directory of the parent project. Right now we use the default
> subproject directory ("subprojects/") for a couple of fallbacks in case
> some important dependencies couldn't be found.
>
> This means that we cannot just include the "git-gui" directory as a
> subproject as it lives in our root directory. There are three options:
>
> - We move "git-gui" into "subprojects/". It requires a bit of churn,
> but should otherwise not have any significant downsides.
>
> - We create a symlink pointing from "subprojects/git-gui" to the
> top-level directory. This may not work on Windows.
>
> - We can create a "git-gui.wrap" file that knows to pull a specific
> commit from upstream and build it. This would mean that Meson and
> Makefiles now have different sources of truth for which version of
> "git-gui" we build.
>
> The first option feels like the most sensible solution. It creates churn
> and requires us to adapt the pull-request workflow a bit. But this
> should be a one-time cost.
>
> In theory we could also rename the "subprojects/" directory by passing
> the "subproject_dir" argument to our `project()` call. But the name
> feels quite fitting for our purpose, as well.
>
Okay makes sense. The most significant changes are in the top three
files and make sense.
[snip]
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 690 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] meson: wire up gitk and git-gui
2025-08-19 8:18 ` [PATCH 3/3] meson: wire up gitk and git-gui Patrick Steinhardt
@ 2025-08-19 9:40 ` Karthik Nayak
2025-08-24 17:25 ` Patrick Steinhardt
0 siblings, 1 reply; 16+ messages in thread
From: Karthik Nayak @ 2025-08-19 9:40 UTC (permalink / raw)
To: Patrick Steinhardt, git; +Cc: Johannes Sixt
[-- Attachment #1: Type: text/plain, Size: 3114 bytes --]
Patrick Steinhardt <ps@pks.im> writes:
> Wire up both gitk and git-gui in Meson as subprojects. These two
> programs should be the last missing pieces for feature compatibility
> with our Makefile.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
> meson.build | 14 ++++++++++++++
> meson_options.txt | 4 ++++
> 2 files changed, 18 insertions(+)
>
> diff --git a/meson.build b/meson.build
> index 5dd299b496..edf7b69a00 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -239,7 +239,9 @@ git = find_program('git', dirs: program_path, native: true, required: false)
> sed = find_program('sed', dirs: program_path, native: true)
> shell = find_program('sh', dirs: program_path, native: true)
> tar = find_program('tar', dirs: program_path, native: true)
> +tclsh = find_program('tclsh', required: get_option('git_gui'), native: false)
> time = find_program('time', dirs: program_path, required: get_option('benchmarks'))
> +wish = find_program('wish', required: get_option('git_gui').enabled() or get_option('gitk').enabled(), native: false)
>
> # Detect the target shell that is used by Git at runtime. Note that we prefer
> # "/bin/sh" over a PATH-based lookup, which provides a working shell on most
> @@ -2207,6 +2209,16 @@ configure_file(
> configuration: build_options_config,
> )
>
> +gitk_option = get_option('gitk').disable_auto_if(not wish.found())
Since 'wish' is defined as required above when 'gitk' is enabled, would
it even come here if there is no 'wish'?
> +if gitk_option.allowed()
> + subproject('gitk')
> +endif
> +
> +git_gui_option = get_option('git_gui').disable_auto_if(not tclsh.found() or not wish.found())
> +if git_gui_option.allowed()
> + subproject('git-gui')
> +endif
> +
> # Development environments can be used via `meson devenv -C <builddir>`. This
> # allows you to execute test scripts directly with the built Git version and
> # puts the built version of Git in your PATH.
> @@ -2233,6 +2245,8 @@ summary({
> 'curl': curl,
> 'expat': expat,
> 'gettext': intl,
> + 'gitk': gitk_option.allowed(),
> + 'git-gui': git_gui_option.allowed(),
> 'gitweb': gitweb_option.allowed(),
> 'iconv': iconv,
> 'pcre2': pcre2,
> diff --git a/meson_options.txt b/meson_options.txt
> index 1668f260a1..8fa330771b 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -41,6 +41,10 @@ option('expat', type: 'feature', value: 'enabled',
> description: 'Build helpers used to push to remotes with the HTTP transport.')
> option('gettext', type: 'feature', value: 'auto',
> description: 'Build translation files.')
> +option('gitk', type: 'feature', value: 'auto',
> + description: 'Build the Gitk graphical repository browser. Requires Tcl/Tk.')
> +option('git_gui', type: 'feature', value: 'auto',
> + description: 'Build the git-gui graphical user interface for Git. Requires Tcl/Tk.')
> option('gitweb', type: 'feature', value: 'auto',
> description: 'Build Git web interface. Requires Perl.')
> option('iconv', type: 'feature', value: 'auto',
>
> --
> 2.51.0.261.g7ce5a0a67e.dirty
The rest look good.
Thanks,
Karthik
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 690 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 0/3] meson: wire up gitk and git-gui
2025-08-19 8:18 [PATCH 0/3] meson: wire up gitk and git-gui Patrick Steinhardt
` (2 preceding siblings ...)
2025-08-19 8:18 ` [PATCH 3/3] meson: wire up gitk and git-gui Patrick Steinhardt
@ 2025-08-19 15:49 ` Junio C Hamano
2025-08-24 17:25 ` Patrick Steinhardt
2025-08-19 22:25 ` Ramsay Jones
4 siblings, 1 reply; 16+ messages in thread
From: Junio C Hamano @ 2025-08-19 15:49 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: git, Johannes Sixt
Patrick Steinhardt <ps@pks.im> writes:
> Hi,
>
> I have upstreamed support for Meson into both gitk [1] and git-gui [2].
> This small patch series wires up support in Git.
>
> To the best of my knowledge this is the last missing piece for feature
> compatibility with our Makefile. As such, from my point of view, I think
> that we can stop treating the Meson build system as experimental and
> instead officially endorse it. Once merged I'll thus send another patch
> series that updates our documentation in various different places to
> also mention how to build Git with Meson.
Good.
With such a documentation, it would help folks to verify (and make
extra fixup if needed) to see how well feature parity is achieved
and peel that experimental label.
Having said that, I somehow feel that ...
> {git-gui => subprojects/git-gui}/.gitattributes | 0
> ...
> {gitk-git => subprojects/gitk}/.gitignore | 0
... a move like this is bending the source to match the limitation
of the tool, making the people who use (write, read, and build from)
the source to pay for the price, which is backwards. The tool, be
it Meson or Make or CMake, should be serving the project, not the
other way around. In our current build system, we don't have to
have borrowed code (from gitk, git-gui, sha1dc, or xdiff) inside a
specific subdirectory.
But I may change my mind while reading the real patches, not the
diffstat.
Thanks.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 0/3] meson: wire up gitk and git-gui
2025-08-19 8:18 [PATCH 0/3] meson: wire up gitk and git-gui Patrick Steinhardt
` (3 preceding siblings ...)
2025-08-19 15:49 ` [PATCH 0/3] " Junio C Hamano
@ 2025-08-19 22:25 ` Ramsay Jones
2025-08-24 17:25 ` Patrick Steinhardt
4 siblings, 1 reply; 16+ messages in thread
From: Ramsay Jones @ 2025-08-19 22:25 UTC (permalink / raw)
To: Patrick Steinhardt, git; +Cc: Johannes Sixt
On 19/08/2025 09:18, Patrick Steinhardt wrote:
> Hi,
>
> I have upstreamed support for Meson into both gitk [1] and git-gui [2].
> This small patch series wires up support in Git.
Just a quick FYI, but I think git-gui needs some changes equivalent to
commit 586919c3b2 ("meson: fix installation when -Dlibexexdir is set",
2025-07-16).
[I don't understand the difference between subdir() and subproject(), so
I'm not quite sure how to proceed, but I guess git-gui is a separate
project root and 'options' will be passed as-is with a new context?]
gitk doesn't install anything in the libexecdir, so should not need a
similar change.
> To the best of my knowledge this is the last missing piece for feature
> compatibility with our Makefile. As such, from my point of view, I think
> that we can stop treating the Meson build system as experimental and
> instead officially endorse it. Once merged I'll thus send another patch
> series that updates our documentation in various different places to
> also mention how to build Git with Meson.
Hmm, that seems a little soon to me. ;) I still have quite a few 'misc build
updates (part #3)' patches to send to the list (yes, I have been a bit tardy;
sorry about that).
Also, let's not forget the 'quoting nightmare' [0], which has still not been
addressed.
ATB,
Ramsay Jones
[0] https://public-inbox.org/git/a5795bfa-cc02-4c9a-b7d2-4924a94cd0db@ramsayjones.plus.com/
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH] doc/gitk: update reference to the external project
2025-08-19 8:18 ` [PATCH 2/3] gitk: " Patrick Steinhardt
@ 2025-08-20 5:49 ` Johannes Sixt
2025-08-20 6:16 ` [PATCH v2] " Johannes Sixt
0 siblings, 1 reply; 16+ messages in thread
From: Johannes Sixt @ 2025-08-20 5:49 UTC (permalink / raw)
To: git; +Cc: Patrick Steinhardt
Gitk is now maintained by Johannes Sixt and the repository can be
cloned from a new URL. b59358100c20 (Update the official repo of
gitk, 2024-12-24) could have updated this instance in the manual,
too, but the opportunity was missed. Update it now.
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
---
Am 19.08.25 um 10:18 schrieb Patrick Steinhardt:
> +++ b/Documentation/SubmittingPatches
> -- `gitk-git/` comes from the gitk project, maintained by Johannes Sixt:
> +- `subprojects/gitk/` comes from the gitk project, maintained by Johannes Sixt:
>
> https://github.com/j6t/gitk
> +++ b/Documentation/gitk.adoc
> -gitk-git/ comes from Paul Mackerras's gitk project:
> +subprojects/gitk/ comes from Paul Mackerras's gitk project:
>
> git://ozlabs.org/~paulus/gitk
Let's fix this outdated reference!
Documentation/gitk.adoc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Documentation/gitk.adoc b/Documentation/gitk.adoc
index 58ce40ddb1..33a5648ab8 100644
--- a/Documentation/gitk.adoc
+++ b/Documentation/gitk.adoc
@@ -170,9 +170,9 @@ tcl/tk.
versions are distributed as part of the Git suite for the convenience
of end users.
-gitk-git/ comes from Paul Mackerras's gitk project:
+`gitk-git/` comes from Johannes Sixt's gitk project:
- git://ozlabs.org/~paulus/gitk
+ https://github.com/j6t/gitk
SEE ALSO
--------
--
2.51.0.205.g9a02ae2892
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2] doc/gitk: update reference to the external project
2025-08-20 5:49 ` [PATCH] doc/gitk: update reference to the external project Johannes Sixt
@ 2025-08-20 6:16 ` Johannes Sixt
2025-08-20 15:34 ` Junio C Hamano
0 siblings, 1 reply; 16+ messages in thread
From: Johannes Sixt @ 2025-08-20 6:16 UTC (permalink / raw)
To: git; +Cc: Patrick Steinhardt
Gitk is now maintained by Johannes Sixt and the repository can be
cloned from a new URL. b59358100c20 (Update the official repo of
gitk, 2024-12-24) could have updated this instance in the manual,
too, but the opportunity was missed. Update it now. Do give credit
to Paul Mackerras as the inventor of the program.
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
---
I just noticed that I would have removed the last user-visible
mention of Paul. Don't do that.
Documentation/gitk.adoc | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/Documentation/gitk.adoc b/Documentation/gitk.adoc
index 58ce40ddb1..5b34dcd077 100644
--- a/Documentation/gitk.adoc
+++ b/Documentation/gitk.adoc
@@ -163,16 +163,16 @@ used by default. If '$XDG_CONFIG_HOME' is not set it defaults to
History
-------
-Gitk was the first graphical repository browser. It's written in
-tcl/tk.
+Gitk was the first graphical repository browser, written by
+Paul Mackerras in Tcl/Tk.
'gitk' is actually maintained as an independent project, but stable
versions are distributed as part of the Git suite for the convenience
of end users.
-gitk-git/ comes from Paul Mackerras's gitk project:
+`gitk-git/` comes from Johannes Sixt's gitk project:
- git://ozlabs.org/~paulus/gitk
+ https://github.com/j6t/gitk
SEE ALSO
--------
--
2.51.0.205.g9a02ae2892
1: 5a2ed392c1 ! 1: 48668308f7 doc/gitk: update reference to the external project
@@ Commit message
Gitk is now maintained by Johannes Sixt and the repository can be
cloned from a new URL. b59358100c20 (Update the official repo of
gitk, 2024-12-24) could have updated this instance in the manual,
- too, but the opportunity was missed. Update it now.
+ too, but the opportunity was missed. Update it now. Do give credit
+ to Paul Mackerras as the inventor of the program.
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
## Documentation/gitk.adoc ##
-@@ Documentation/gitk.adoc: tcl/tk.
+@@ Documentation/gitk.adoc: used by default. If '$XDG_CONFIG_HOME' is not set it defaults to
+
+ History
+ -------
+-Gitk was the first graphical repository browser. It's written in
+-tcl/tk.
++Gitk was the first graphical repository browser, written by
++Paul Mackerras in Tcl/Tk.
+
+ 'gitk' is actually maintained as an independent project, but stable
versions are distributed as part of the Git suite for the convenience
of end users.
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v2] doc/gitk: update reference to the external project
2025-08-20 6:16 ` [PATCH v2] " Johannes Sixt
@ 2025-08-20 15:34 ` Junio C Hamano
0 siblings, 0 replies; 16+ messages in thread
From: Junio C Hamano @ 2025-08-20 15:34 UTC (permalink / raw)
To: Johannes Sixt; +Cc: git, Patrick Steinhardt
Johannes Sixt <j6t@kdbg.org> writes:
> Gitk is now maintained by Johannes Sixt and the repository can be
> cloned from a new URL. b59358100c20 (Update the official repo of
> gitk, 2024-12-24) could have updated this instance in the manual,
> too, but the opportunity was missed. Update it now. Do give credit
> to Paul Mackerras as the inventor of the program.
>
> Signed-off-by: Johannes Sixt <j6t@kdbg.org>
> ---
Thanks for the update. This is long overdue. I forgot that this
manual page was carried in my tree.
> I just noticed that I would have removed the last user-visible
> mention of Paul. Don't do that.
>
> Documentation/gitk.adoc | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/gitk.adoc b/Documentation/gitk.adoc
> index 58ce40ddb1..5b34dcd077 100644
> --- a/Documentation/gitk.adoc
> +++ b/Documentation/gitk.adoc
> @@ -163,16 +163,16 @@ used by default. If '$XDG_CONFIG_HOME' is not set it defaults to
>
> History
> -------
> -Gitk was the first graphical repository browser. It's written in
> -tcl/tk.
> +Gitk was the first graphical repository browser, written by
> +Paul Mackerras in Tcl/Tk.
>
> 'gitk' is actually maintained as an independent project, but stable
> versions are distributed as part of the Git suite for the convenience
> of end users.
>
> -gitk-git/ comes from Paul Mackerras's gitk project:
> +`gitk-git/` comes from Johannes Sixt's gitk project:
>
> - git://ozlabs.org/~paulus/gitk
> + https://github.com/j6t/gitk
>
> SEE ALSO
> --------
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] meson: wire up gitk and git-gui
2025-08-19 9:40 ` Karthik Nayak
@ 2025-08-24 17:25 ` Patrick Steinhardt
0 siblings, 0 replies; 16+ messages in thread
From: Patrick Steinhardt @ 2025-08-24 17:25 UTC (permalink / raw)
To: Karthik Nayak; +Cc: git, Johannes Sixt
On Tue, Aug 19, 2025 at 02:40:55AM -0700, Karthik Nayak wrote:
> Patrick Steinhardt <ps@pks.im> writes:
> > diff --git a/meson.build b/meson.build
> > index 5dd299b496..edf7b69a00 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -2207,6 +2209,16 @@ configure_file(
> > configuration: build_options_config,
> > )
> >
> > +gitk_option = get_option('gitk').disable_auto_if(not wish.found())
>
> Since 'wish' is defined as required above when 'gitk' is enabled, would
> it even come here if there is no 'wish'?
Yeah, it can happen. We're checking for `enabled()`, not `allowed()`.
This means that we only require "wish" in case the user has explicitly
asked us to enable gitk or git-gui. Otherwise, if the user has "auto"
configured for these we may end up finding one, but not both of these
commands. So we do have to auto-disable the feature in that case.
Patrick
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 0/3] meson: wire up gitk and git-gui
2025-08-19 22:25 ` Ramsay Jones
@ 2025-08-24 17:25 ` Patrick Steinhardt
0 siblings, 0 replies; 16+ messages in thread
From: Patrick Steinhardt @ 2025-08-24 17:25 UTC (permalink / raw)
To: Ramsay Jones; +Cc: git, Johannes Sixt
On Tue, Aug 19, 2025 at 11:25:02PM +0100, Ramsay Jones wrote:
>
>
> On 19/08/2025 09:18, Patrick Steinhardt wrote:
> > Hi,
> >
> > I have upstreamed support for Meson into both gitk [1] and git-gui [2].
> > This small patch series wires up support in Git.
>
> Just a quick FYI, but I think git-gui needs some changes equivalent to
> commit 586919c3b2 ("meson: fix installation when -Dlibexexdir is set",
> 2025-07-16).
Ah, thanks for the hint. Will eventually fix it upstream.
> [I don't understand the difference between subdir() and subproject(), so
> I'm not quite sure how to proceed, but I guess git-gui is a separate
> project root and 'options' will be passed as-is with a new context?]
Yup. This is done so that both gitk and git-gui can also be installed
standalone.
> gitk doesn't install anything in the libexecdir, so should not need a
> similar change.
>
> > To the best of my knowledge this is the last missing piece for feature
> > compatibility with our Makefile. As such, from my point of view, I think
> > that we can stop treating the Meson build system as experimental and
> > instead officially endorse it. Once merged I'll thus send another patch
> > series that updates our documentation in various different places to
> > also mention how to build Git with Meson.
>
> Hmm, that seems a little soon to me. ;) I still have quite a few 'misc build
> updates (part #3)' patches to send to the list (yes, I have been a bit tardy;
> sorry about that).
Looking forward to them :
> Also, let's not forget the 'quoting nightmare' [0], which has still not been
> addressed.
Fair, that one is still outstanding. But I guess with "feature
compatibility" I was rather referring to actually user-facing things
that Meson cannot do yet. I guess overall it will still take a bit of
time for smaller follow-up fixes to land. But in most cases I think that
Meson can be used without issues now.
Patrick
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 0/3] meson: wire up gitk and git-gui
2025-08-19 15:49 ` [PATCH 0/3] " Junio C Hamano
@ 2025-08-24 17:25 ` Patrick Steinhardt
2025-08-26 0:40 ` Junio C Hamano
0 siblings, 1 reply; 16+ messages in thread
From: Patrick Steinhardt @ 2025-08-24 17:25 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, Johannes Sixt
On Tue, Aug 19, 2025 at 08:49:35AM -0700, Junio C Hamano wrote:
> Patrick Steinhardt <ps@pks.im> writes:
> Having said that, I somehow feel that ...
>
> > {git-gui => subprojects/git-gui}/.gitattributes | 0
> > ...
> > {gitk-git => subprojects/gitk}/.gitignore | 0
>
> ... a move like this is bending the source to match the limitation
> of the tool, making the people who use (write, read, and build from)
> the source to pay for the price, which is backwards. The tool, be
> it Meson or Make or CMake, should be serving the project, not the
> other way around. In our current build system, we don't have to
> have borrowed code (from gitk, git-gui, sha1dc, or xdiff) inside a
> specific subdirectory.
>
> But I may change my mind while reading the real patches, not the
> diffstat.
I'm not much of a fan of these changes either, and agree that this is a
limitation of the tool. I think it isn't _too_ bad, but I would've
preferred to not require this step.
If this is proving to be a blocker we can also change upstream to not be
a separate project. That'd have the downside that it cannot be used
standalone, but the upside that we can just put these directories
wherever we want and then include them via `subdir()`.
I think taking the pain once though and renaming is preferred so that
both gitk and git-gui can also be used with Meson standalone.
Patrick
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 0/3] meson: wire up gitk and git-gui
2025-08-24 17:25 ` Patrick Steinhardt
@ 2025-08-26 0:40 ` Junio C Hamano
2025-09-02 13:00 ` Patrick Steinhardt
0 siblings, 1 reply; 16+ messages in thread
From: Junio C Hamano @ 2025-08-26 0:40 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: git, Johannes Sixt
Patrick Steinhardt <ps@pks.im> writes:
> If this is proving to be a blocker we can also change upstream to not be
> a separate project.
What do "upstream" refer to in this sentence? Meson?
If you are talking about "gitk" and/or "git-gui", then such an
alternative version of these patches would not change the picture an
iota, wrt "the limitation of the tool should not force the sources
that might consider using the tool to pay the price---which might be
proving to be a blocker", no?
Not that I am saying it _is_ a blocker. But the above sounds like
making things worse for no gain, so I must be misunderstanding what
you meant X-<.
So, ... confused.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 0/3] meson: wire up gitk and git-gui
2025-08-26 0:40 ` Junio C Hamano
@ 2025-09-02 13:00 ` Patrick Steinhardt
0 siblings, 0 replies; 16+ messages in thread
From: Patrick Steinhardt @ 2025-09-02 13:00 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, Johannes Sixt
On Mon, Aug 25, 2025 at 05:40:17PM -0700, Junio C Hamano wrote:
> Patrick Steinhardt <ps@pks.im> writes:
>
> > If this is proving to be a blocker we can also change upstream to not be
> > a separate project.
>
> What do "upstream" refer to in this sentence? Meson?
>
> If you are talking about "gitk" and/or "git-gui", then such an
> alternative version of these patches would not change the picture an
> iota, wrt "the limitation of the tool should not force the sources
> that might consider using the tool to pay the price---which might be
> proving to be a blocker", no?
gitk/git-gui in this case.
> Not that I am saying it _is_ a blocker. But the above sounds like
> making things worse for no gain, so I must be misunderstanding what
> you meant X-<.
>
> So, ... confused.
So, to hopefully alleviate the confusion, there's two ways to include a
certain directory into Meson:
- `subdir()` includes directories at arbitrary locations. The
directory is treated as part of the project that calls `subdir()`.
This is mostly done to segregate the project into multiple different
components to keep things more maintainable.
- `subproject()` includes directories in a specific location. The
difference is that these are treated as separate projects, so there
is a certain boundary between the top-level project and its
subproject. Things done in the subproject won't taint anything in
the superproject.
Right now I'm using `subproject()`, which has the effect that both gitk
and git-gui can be compiled standalone with Meson, but also as part of
the Git project. It does have the limitation though that the project
must be in a specific directory.
What I was trying to say is that we could convert the build instructions
of gitk and git-gui to not be standalone projects anymore. This would
mean that we can include the subdirectory from any arbitrary location,
but they cannot be built standalone without Git anymore.
Using `subproject()` is a much better fit for our specific use case,
even though we have to move things around. I'm not particularly fond of
this limitation, but I haven't found a better way to achieve this until
now.
So yes, it's a limitation we get from Meson. But it's easy to work
around this limitation by moving the projects into the "subprojects",
which is a one-time cost, only. I've said for a long time anyway that I
think our top-level directory could use some cleanup to make things a
bit more discoverable for new contributors, e.g. by move all the code
files into a "lib/" folder. So that's probably part of why I don't see
this refactoring as a huge downside, even if it is working around a
limitation.
Patrick
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2025-09-02 13:00 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-19 8:18 [PATCH 0/3] meson: wire up gitk and git-gui Patrick Steinhardt
2025-08-19 8:18 ` [PATCH 1/3] git-gui: move into "subprojects/" Patrick Steinhardt
2025-08-19 9:36 ` Karthik Nayak
2025-08-19 8:18 ` [PATCH 2/3] gitk: " Patrick Steinhardt
2025-08-20 5:49 ` [PATCH] doc/gitk: update reference to the external project Johannes Sixt
2025-08-20 6:16 ` [PATCH v2] " Johannes Sixt
2025-08-20 15:34 ` Junio C Hamano
2025-08-19 8:18 ` [PATCH 3/3] meson: wire up gitk and git-gui Patrick Steinhardt
2025-08-19 9:40 ` Karthik Nayak
2025-08-24 17:25 ` Patrick Steinhardt
2025-08-19 15:49 ` [PATCH 0/3] " Junio C Hamano
2025-08-24 17:25 ` Patrick Steinhardt
2025-08-26 0:40 ` Junio C Hamano
2025-09-02 13:00 ` Patrick Steinhardt
2025-08-19 22:25 ` Ramsay Jones
2025-08-24 17:25 ` Patrick Steinhardt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).