{"thread":{"id":"63879","subject":"[PATCH 0/5] git-gui: workaround deprecation of Tcl/TK 8.5 in macOS","startedAt":"2025-07-30T16:43:59Z","lastAt":"2025-07-31T17:47:46Z","messageCount":25,"participants":["Carlo Marcelo Arenas Belón","Johannes Sixt","Junio C Hamano","Carlo Arenas","Mark Levedahl","Patrick Steinhardt"],"isPatch":true,"patchVersion":1,"patchTotal":5},"messages":[{"id":"523014","messageId":"20250730164052.15371-1-carenas@gmail.com","threadId":"63879","inReplyTo":null,"subject":"[PATCH 0/5] git-gui: workaround deprecation of Tcl/TK 8.5 in macOS","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2025-07-30T16:40:47Z","receivedAt":"2025-07-30T16:43:59Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"This series, add improvements to allow running `git-gui` in macOS, which is\nstuck in an ancient version of Tcl/TK that is no longer supported by git.\n\nPatches 1 and 2 are minor fixes that could also apply to maint, but the main\nchange is in Patch 3, which removes the long obsoleted \"Git Gui\" app that was\ntied to the system provided Tcl/TK framework and that has been broken for a\nwhile.\n\nPatches 4 and 5 are needed to avoid the system framework and facilitate using\na third party provided package of Tcl/TK 8.6 instead, but the last patch also\nprotects against a conflict with the Xcode provided git that for some reason\nincludes a copy pf `git-gui--askpass` even if `git-gui` is missing.\n\nCarlo Marcelo Arenas Belón (5):\n  git-gui: remove uname_O in Makefile\n  git-gui: fix dependency of GITGUI_MAIN on generator\n  git-gui: retire Git Gui.app\n  git-gui: honor TCLTK_PATH in git-gui--askpass\n  git-gui: ensure own version of git-gui--askpass is used\n\n .gitignore                              |   2 +-\n GIT-GUI-BUILD-OPTIONS.in                |   1 -\n Makefile                                |  63 +++----------------\n generate-git-gui.sh                     |   1 +\n generate-macos-app.sh                   |  30 ---------\n generate-macos-wrapper.sh               |  35 -----------\n generate-script.sh                      |  22 +++++++\n git-gui--askpass => git-gui--askpass.sh |   0\n git-gui.sh                              |  10 ++-\n lib/about.tcl                           |   4 +-\n macosx/AppMain.tcl                      |  29 ---------\n macosx/Info.plist                       |  30 ---------\n macosx/git-gui.icns                     | Bin 28866 -> 0 bytes\n meson.build                             |  79 +++++-------------------\n 14 files changed, 56 insertions(+), 250 deletions(-)\n delete mode 100755 generate-macos-app.sh\n delete mode 100755 generate-macos-wrapper.sh\n create mode 100755 generate-script.sh\n rename git-gui--askpass => git-gui--askpass.sh (100%)\n delete mode 100644 macosx/AppMain.tcl\n delete mode 100644 macosx/Info.plist\n delete mode 100644 macosx/git-gui.icns\n\nSigned-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n-- \n2.50.1.475.g795bb014d8\n\n"},{"id":"523015","messageId":"20250730164052.15371-2-carenas@gmail.com","threadId":"63879","inReplyTo":"20250730164052.15371-1-carenas@gmail.com","subject":"[PATCH 1/5] git-gui: remove uname_O in Makefile","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2025-07-30T16:40:48Z","receivedAt":"2025-07-30T16:44:00Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"Last used in ae49066 (git gui Makefile - remove Cygwin modifications,\n2023-06-26), and unused since.\n\nSigned-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n---\n Makefile | 1 -\n 1 file changed, 1 deletion(-)\n\ndiff --git a/Makefile b/Makefile\nindex 315888f..a87dc06 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -11,7 +11,6 @@ GIT-VERSION-FILE: FORCE\n \t@$(SHELL_PATH) ./GIT-VERSION-GEN . $@\n \n uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')\n-uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')\n uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not')\n \n SCRIPT_SH = git-gui.sh\n-- \n2.50.1.475.g795bb014d8\n\n"},{"id":"523016","messageId":"20250730164052.15371-3-carenas@gmail.com","threadId":"63879","inReplyTo":"20250730164052.15371-1-carenas@gmail.com","subject":"[PATCH 2/5] git-gui: fix dependency of GITGUI_MAIN on generator","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2025-07-30T16:40:49Z","receivedAt":"2025-07-30T16:44:01Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"Since 854e883 (git-gui: extract script to generate \"git-gui\",\n2025-03-11), the logic to generate the main script was pulled\nout of the Makefile, but adding the resulting generator as a\ndependency was missed.\n\nIf the logic changes, the main script should be regenerated, so\nadd it as a dependency.\n\nSigned-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n---\n Makefile | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/Makefile b/Makefile\nindex a87dc06..179857d 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -168,7 +168,7 @@ git-gui: windows/git-gui.sh\n \tcp $< $@\n endif\n \n-$(GITGUI_MAIN): git-gui.sh GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS\n+$(GITGUI_MAIN): git-gui.sh GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS generate-git-gui.sh\n \t$(QUIET_GEN)$(SHELL_PATH) generate-git-gui.sh \"$<\" \"$@\" ./GIT-GUI-BUILD-OPTIONS ./GIT-VERSION-FILE\n \n XGETTEXT   ?= xgettext\n-- \n2.50.1.475.g795bb014d8\n\n"},{"id":"523017","messageId":"20250730164052.15371-4-carenas@gmail.com","threadId":"63879","inReplyTo":"20250730164052.15371-1-carenas@gmail.com","subject":"[PATCH 3/5] git-gui: retire Git Gui.app","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2025-07-30T16:40:50Z","receivedAt":"2025-07-30T16:44:03Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"In a recent commit, the minimum version of Tcl/Tk was raised to\n8.6, but the \"app\" relies on the system provided Framework that\nis based on 8.5.\n\nRemove it, and let git-gui use a third party version of Wish if\navailable.\n\nSigned-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n---\n .gitignore                |   1 -\n GIT-GUI-BUILD-OPTIONS.in  |   1 -\n Makefile                  |  51 ----------------------------------\n generate-macos-app.sh     |  30 --------------------\n generate-macos-wrapper.sh |  35 -----------------------\n macosx/AppMain.tcl        |  29 -------------------\n macosx/Info.plist         |  30 --------------------\n macosx/git-gui.icns       | Bin 28866 -> 0 bytes\n meson.build               |  57 --------------------------------------\n 9 files changed, 234 deletions(-)\n delete mode 100755 generate-macos-app.sh\n delete mode 100755 generate-macos-wrapper.sh\n delete mode 100644 macosx/AppMain.tcl\n delete mode 100644 macosx/Info.plist\n delete mode 100644 macosx/git-gui.icns\n\ndiff --git a/.gitignore b/.gitignore\nindex ff6e0be..ba845f3 100644\n--- a/.gitignore\n+++ b/.gitignore\n@@ -1,6 +1,5 @@\n .DS_Store\n config.mak\n-Git Gui.app*\n git-gui.tcl\n GIT-GUI-BUILD-OPTIONS\n GIT-VERSION-FILE\ndiff --git a/GIT-GUI-BUILD-OPTIONS.in b/GIT-GUI-BUILD-OPTIONS.in\nindex 5fd885c..3c112af 100644\n--- a/GIT-GUI-BUILD-OPTIONS.in\n+++ b/GIT-GUI-BUILD-OPTIONS.in\n@@ -4,4 +4,3 @@ GITGUI_RELATIVE=@GITGUI_RELATIVE@\n SHELL_PATH=@SHELL_PATH@\n TCLTK_PATH=@TCLTK_PATH@\n TCL_PATH=@TCL_PATH@\n-TKEXECUTABLE=@TKEXECUTABLE@\ndiff --git a/Makefile b/Makefile\nindex 179857d..2ac5f44 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -52,8 +52,6 @@ INSTALL_R0 = $(INSTALL) -m 644 # space is required here\n INSTALL_R1 =\n INSTALL_X0 = $(INSTALL) -m 755 # space is required here\n INSTALL_X1 =\n-INSTALL_A0 = find # space is required here\n-INSTALL_A1 = | cpio -pud\n INSTALL_L0 = rm -f # space is required here\n INSTALL_L1 = && ln # space is required here\n INSTALL_L2 =\n@@ -78,8 +76,6 @@ ifndef V\n \tINSTALL_R1 = && echo '   ' INSTALL 644 `basename $$src` && $(INSTALL) -m 644 $$src\n \tINSTALL_X0 = src=\n \tINSTALL_X1 = && echo '   ' INSTALL 755 `basename $$src` && $(INSTALL) -m 755 $$src\n-\tINSTALL_A0 = src=\n-\tINSTALL_A1 = && echo '   ' INSTALL '   ' `basename \"$$src\"` && find \"$$src\" | cpio -pud\n \n \tINSTALL_L0 = dst=\n \tINSTALL_L1 = && src=\n@@ -100,18 +96,6 @@ else\n \tTCL_PATH ?= $(dir $(TCLTK_PATH))$(notdir $(subst wish,tclsh,$(TCLTK_PATH)))\n endif\n \n-ifeq ($(uname_S),Darwin)\n-\tTKFRAMEWORK = /Library/Frameworks/Tk.framework/Resources/Wish.app\n-        ifeq ($(shell echo \"$(uname_R)\" | awk -F. '{if ($$1 >= 9) print \"y\"}')_$(shell test -d $(TKFRAMEWORK) || echo n),y_n)\n-\t\tTKFRAMEWORK = /System/Library/Frameworks/Tk.framework/Resources/Wish.app\n-                ifeq ($(shell test -d $(TKFRAMEWORK) || echo n),n)\n-\t\t\tTKFRAMEWORK = /System/Library/Frameworks/Tk.framework/Resources/Wish\\ Shell.app\n-                endif\n-        endif\n-\tTKEXECUTABLE = $(TKFRAMEWORK)/Contents/MacOS/$(shell basename \"$(TKFRAMEWORK)\" .app)\n-\tTKEXECUTABLE_SQ = $(subst ','\\'',$(TKEXECUTABLE))\n-endif\n-\n ifeq ($(findstring $(firstword -$(MAKEFLAGS)),s),s)\n QUIET_GEN =\n endif\n@@ -129,16 +113,10 @@ libdir_SQ  = $(subst ','\\'',$(gg_libdir))\n exedir     = $(dir $(gitexecdir))share/git-gui/lib\n \n GITGUI_RELATIVE :=\n-GITGUI_MACOSXAPP :=\n \n ifeq ($(exedir),$(gg_libdir))\n \tGITGUI_RELATIVE := 1\n endif\n-ifeq ($(uname_S),Darwin)\n-        ifeq ($(shell test -d $(TKFRAMEWORK) && echo y),y)\n-\t\tGITGUI_MACOSXAPP := YesPlease\n-        endif\n-endif\n ifneq (,$(findstring MINGW,$(uname_S)))\n ifeq ($(shell expr \"$(uname_R)\" : '1\\.'),2)\n \tNO_MSGFMT=1\n@@ -147,20 +125,6 @@ endif\n \tGITGUI_RELATIVE := 1\n endif\n \n-ifdef GITGUI_MACOSXAPP\n-GITGUI_MAIN := git-gui.tcl\n-\n-git-gui: generate-macos-wrapper.sh GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS\n-\t$(QUIET_GEN)$(SHELL_PATH) generate-macos-wrapper.sh \"$@\" ./GIT-GUI-BUILD-OPTIONS ./GIT-VERSION-FILE\n-\n-Git\\ Gui.app: GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS \\\n-\t\tmacosx/Info.plist \\\n-\t\tmacosx/git-gui.icns \\\n-\t\tmacosx/AppMain.tcl \\\n-\t\t$(TKEXECUTABLE)\n-\t$(QUIET_GEN)$(SHELL_PATH) generate-macos-app.sh . \"$@\" ./GIT-GUI-BUILD-OPTIONS ./GIT-VERSION-FILE\n-endif\n-\n ifdef GITGUI_WINDOWS_WRAPPER\n GITGUI_MAIN := git-gui.tcl\n \n@@ -205,14 +169,10 @@ GIT-GUI-BUILD-OPTIONS: FORCE\n \t\t-e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \\\n \t\t-e 's|@TCLTK_PATH@|$(TCLTK_PATH_SQ)|' \\\n \t\t-e 's|@TCL_PATH@|$(TCL_PATH_SQ)|' \\\n-\t\t-e 's|@TKEXECUTABLE@|$(TKEXECUTABLE_SQ)|' \\\n \t\t$@.in >$@+\n \t@if grep -q '^[A-Z][A-Z_]*=@.*@$$' $@+; then echo \"Unsubstituted build options in $@\" >&2 && exit 1; fi\n \t@if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi\n \n-ifdef GITGUI_MACOSXAPP\n-all:: git-gui Git\\ Gui.app\n-endif\n ifdef GITGUI_WINDOWS_WRAPPER\n all:: git-gui\n endif\n@@ -228,10 +188,6 @@ ifdef GITGUI_WINDOWS_WRAPPER\n endif\n \t$(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(libdir_SQ)' $(INSTALL_D1)\n \t$(QUIET)$(INSTALL_R0)lib/tclIndex $(INSTALL_R1) '$(DESTDIR_SQ)$(libdir_SQ)'\n-ifdef GITGUI_MACOSXAPP\n-\t$(QUIET)$(INSTALL_A0)'Git Gui.app' $(INSTALL_A1) '$(DESTDIR_SQ)$(libdir_SQ)'\n-\t$(QUIET)$(INSTALL_X0)git-gui.tcl $(INSTALL_X1) '$(DESTDIR_SQ)$(libdir_SQ)'\n-endif\n \t$(QUIET)$(foreach p,$(ALL_LIBFILES) $(NONTCL_LIBFILES), $(INSTALL_R0)$p $(INSTALL_R1) '$(DESTDIR_SQ)$(libdir_SQ)' &&) true\n \t$(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(msgsdir_SQ)' $(INSTALL_D1)\n \t$(QUIET)$(foreach p,$(ALL_MSGFILES), $(INSTALL_R0)$p $(INSTALL_R1) '$(DESTDIR_SQ)$(msgsdir_SQ)' &&) true\n@@ -246,10 +202,6 @@ ifdef GITGUI_WINDOWS_WRAPPER\n endif\n \t$(QUIET)$(CLEAN_DST) '$(DESTDIR_SQ)$(libdir_SQ)'\n \t$(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)'/tclIndex $(REMOVE_F1)\n-ifdef GITGUI_MACOSXAPP\n-\t$(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)/Git Gui.app' $(REMOVE_F1)\n-\t$(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)'/git-gui.tcl $(REMOVE_F1)\n-endif\n \t$(QUIET)$(foreach p,$(ALL_LIBFILES) $(NONTCL_LIBFILES), $(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)'/$(notdir $p) $(REMOVE_F1) &&) true\n \t$(QUIET)$(CLEAN_DST) '$(DESTDIR_SQ)$(msgsdir_SQ)'\n \t$(QUIET)$(foreach p,$(ALL_MSGFILES), $(REMOVE_F0)'$(DESTDIR_SQ)$(msgsdir_SQ)'/$(notdir $p) $(REMOVE_F1) &&) true\n@@ -265,9 +217,6 @@ dist-version: GIT-VERSION-FILE\n clean::\n \t$(RM_RF) $(GITGUI_MAIN) lib/tclIndex po/*.msg $(PO_TEMPLATE)\n \t$(RM_RF) GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS\n-ifdef GITGUI_MACOSXAPP\n-\t$(RM_RF) 'Git Gui.app'* git-gui\n-endif\n ifdef GITGUI_WINDOWS_WRAPPER\n \t$(RM_RF) git-gui\n endif\ndiff --git a/generate-macos-app.sh b/generate-macos-app.sh\ndeleted file mode 100755\nindex 71b9fa6..0000000\n--- a/generate-macos-app.sh\n+++ /dev/null\n@@ -1,30 +0,0 @@\n-#!/bin/sh\n-\n-set -e\n-\n-SOURCE_DIR=\"$1\"\n-OUTPUT=\"$2\"\n-BUILD_OPTIONS=\"$3\"\n-VERSION_FILE=\"$4\"\n-\n-. \"$BUILD_OPTIONS\"\n-. \"$VERSION_FILE\"\n-\n-rm -rf \"$OUTPUT\" \"$OUTPUT+\"\n-\n-mkdir -p \"$OUTPUT+/Contents/MacOS\"\n-mkdir -p \"$OUTPUT+/Contents/Resources/Scripts\"\n-\n-cp \"$TKEXECUTABLE\" \"$OUTPUT+/Contents/MacOS\"\n-cp \"$SOURCE_DIR/macosx/git-gui.icns\" \"$OUTPUT+/Contents/Resources\"\n-sed \\\n-\t-e \"s/@@GITGUI_VERSION@@/$GITGUI_VERSION/g\" \\\n-\t-e \"s/@@GITGUI_TKEXECUTABLE@@/$(basename \"$TKEXECUTABLE\")/g\" \\\n-\t\"$SOURCE_DIR/macosx/Info.plist\" \\\n-\t>\"$OUTPUT+/Contents/Info.plist\"\n-sed \\\n-\t-e \"s|@@gitexecdir@@|$GITGUI_GITEXECDIR|\" \\\n-\t-e \"s|@@GITGUI_LIBDIR@@|$GITGUI_LIBDIR|\" \\\n-\t\"$SOURCE_DIR/macosx/AppMain.tcl\" \\\n-\t>\"$OUTPUT+/Contents/Resources/Scripts/AppMain.tcl\"\n-mv \"$OUTPUT+\" \"$OUTPUT\"\ndiff --git a/generate-macos-wrapper.sh b/generate-macos-wrapper.sh\ndeleted file mode 100755\nindex 0304937..0000000\n--- a/generate-macos-wrapper.sh\n+++ /dev/null\n@@ -1,35 +0,0 @@\n-#!/bin/sh\n-\n-set -e\n-\n-if test \"$#\" -ne 3\n-then\n-\techo >&2 \"usage: $0 <OUTPUT> <BUILD_OPTIONS> <VERSION_FILE>\"\n-\texit 1\n-fi\n-\n-OUTPUT=\"$1\"\n-BUILD_OPTIONS=\"$2\"\n-VERSION_FILE=\"$3\"\n-\n-. \"$BUILD_OPTIONS\"\n-\n-rm -f \"$OUTPUT\" \"$OUTPUT+\"\n-\n-(\n-\techo \"#!$SHELL_PATH\"\n-\tcat \"$BUILD_OPTIONS\" \"$VERSION_FILE\"\n-\tcat <<-'EOF'\n-\tif test \"z$*\" = zversion ||\n-\t   test \"z$*\" = z--version\n-\tthen\n-\t\techo \"git-gui version $GITGUI_VERSION\"\n-\telse\n-\t\tlibdir=\"${GIT_GUI_LIB_DIR:-$GITGUI_LIBDIR}\"\n-\t\texec \"$libdir/Git Gui.app/Contents/MacOS/$(basename \"$TKEXECUTABLE\")\" \"$0\" \"$@\"\n-\tfi\n-\tEOF\n-) >\"$OUTPUT+\"\n-\n-chmod +x \"$OUTPUT+\"\n-mv \"$OUTPUT+\" \"$OUTPUT\"\ndiff --git a/macosx/AppMain.tcl b/macosx/AppMain.tcl\ndeleted file mode 100644\nindex b6c6dc3..0000000\n--- a/macosx/AppMain.tcl\n+++ /dev/null\n@@ -1,29 +0,0 @@\n-set gitexecdir {@@gitexecdir@@}\n-if { [info exists ::env(GIT_GUI_LIB_DIR) ] } {\n-\tset gitguilib $::env(GIT_GUI_LIB_DIR)\n-} else {\n-\tset gitguilib {@@GITGUI_LIBDIR@@}\n-}\n-\n-set env(PATH) \"$gitexecdir:$env(PATH)\"\n-\n-if {[string first -psn [lindex $argv 0]] == 0} {\n-\tlset argv 0 [file join $gitexecdir git-gui]\n-}\n-\n-if {[file tail [lindex $argv 0]] eq {gitk}} {\n-\tset argv0 [lindex $argv 0]\n-\tset AppMain_source $argv0\n-} else {\n-\tset argv0 [file join $gitexecdir [file tail [lindex $argv 0]]]\n-\tset AppMain_source [file join $gitguilib git-gui.tcl]\n-\tif {[info exists env(PWD)]} {\n-\t\tcd $env(PWD)\n-\t} elseif {[pwd] eq {/}} {\n-\t\tcd $env(HOME)\n-\t}\n-}\n-\n-unset gitexecdir gitguilib\n-set argv [lrange $argv 1 end]\n-source $AppMain_source\ndiff --git a/macosx/Info.plist b/macosx/Info.plist\ndeleted file mode 100644\nindex 1ade121..0000000\n--- a/macosx/Info.plist\n+++ /dev/null\n@@ -1,30 +0,0 @@\n-<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n-<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n-<plist version=\"1.0\">\n-<dict>\n-\t<key>CFBundleDevelopmentRegion</key>\n-\t<string>English</string>\n-\t<key>CFBundleExecutable</key>\n-\t<string>@@GITGUI_TKEXECUTABLE@@</string>\n-\t<key>CFBundleGetInfoString</key>\n-\t<string>Git Gui @@GITGUI_VERSION@@ © 2006-2007 Shawn Pearce, et. al.</string>\n-\t<key>CFBundleIconFile</key>\n-\t<string>git-gui.icns</string>\n-\t<key>CFBundleIdentifier</key>\n-\t<string>cz.or.repo.git-gui</string>\n-\t<key>CFBundleInfoDictionaryVersion</key>\n-\t<string>6.0</string>\n-\t<key>CFBundleName</key>\n-\t<string>Git Gui</string>\n-\t<key>CFBundlePackageType</key>\n-\t<string>APPL</string>\n-\t<key>CFBundleShortVersionString</key>\n-\t<string>@@GITGUI_VERSION@@</string>\n-\t<key>CFBundleSignature</key>\n-\t<string>GITg</string>\n-\t<key>CFBundleVersion</key>\n-\t<string>@@GITGUI_VERSION@@</string>\n-\t<key>NSHighResolutionCapable</key>\n-\t<true/>\n-</dict>\n-</plist>\ndiff --git a/macosx/git-gui.icns b/macosx/git-gui.icns\ndeleted file mode 100644\nindex 77d88a77a7669667335cf6fd5767c8b40f3ce6e7..0000000000000000000000000000000000000000\nGIT binary patch\nliteral 0\nHcmV?d00001\n\nliteral 28866\n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\n\ndiff --git a/meson.build b/meson.build\nindex cdae85e..1cedc82 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -19,17 +19,6 @@ build_options_config.set_quoted('GITGUI_LIBDIR', get_option('prefix') / get_opti\n build_options_config.set_quoted('SHELL_PATH', fs.as_posix(shell.full_path()))\n build_options_config.set_quoted('TCLTK_PATH', fs.as_posix(wish.full_path()))\n build_options_config.set_quoted('TCL_PATH', fs.as_posix(tclsh.full_path()))\n-if target_machine.system() == 'darwin'\n-  tkexecutables = [\n-    '/Library/Frameworks/Tk.framework/Resources/Wish.app/Contents/MacOS/Wish',\n-    '/System/Library/Frameworks/Tk.framework/Resources/Wish.app/Contents/MacOS/Wish',\n-    '/System/Library/Frameworks/Tk.framework/Resources/Wish Shell.app/Contents/MacOS/Wish Shell',\n-  ]\n-  tkexecutable = find_program(tkexecutables)\n-  build_options_config.set_quoted('TKEXECUTABLE', tkexecutable.full_path())\n-else\n-  build_options_config.set('TKEXECUTABLE', '')\n-endif\n \n build_options = configure_file(\n   input: 'GIT-GUI-BUILD-OPTIONS.in',\n@@ -70,52 +59,6 @@ if target_machine.system() == 'windows'\n     install: true,\n     install_dir: get_option('libexecdir') / 'git-core',\n   )\n-elif target_machine.system() == 'darwin'\n-  gitgui_main = 'git-gui.tcl'\n-  gitgui_main_install_dir = get_option('datadir') / 'git-gui/lib'\n-\n-  custom_target(\n-    output: 'git-gui',\n-    command: [\n-      shell,\n-      meson.current_source_dir() / 'generate-macos-wrapper.sh',\n-      '@OUTPUT@',\n-      meson.current_build_dir() / 'GIT-GUI-BUILD-OPTIONS',\n-      meson.current_build_dir() / 'GIT-VERSION-FILE',\n-    ],\n-    depends: [\n-      version_file,\n-    ],\n-    depend_files: [\n-      build_options,\n-    ],\n-    install: true,\n-    install_dir: get_option('libexecdir') / 'git-core',\n-  )\n-\n-  custom_target(\n-    output: 'Git Gui.app',\n-    command: [\n-      shell,\n-      meson.current_source_dir() / 'generate-macos-app.sh',\n-      meson.current_source_dir(),\n-      meson.current_build_dir() / 'Git Gui.app',\n-      meson.current_build_dir() / 'GIT-GUI-BUILD-OPTIONS',\n-      meson.current_build_dir() / 'GIT-VERSION-FILE',\n-    ],\n-    depends: [\n-      version_file,\n-    ],\n-    depend_files: [\n-      build_options,\n-      'macosx/AppMain.tcl',\n-      'macosx/Info.plist',\n-      'macosx/git-gui.icns',\n-    ],\n-    build_by_default: true,\n-    install: true,\n-    install_dir: get_option('datadir') / 'git-gui/lib',\n-  )\n endif\n \n custom_target(\n-- \n2.50.1.475.g795bb014d8\n\n"},{"id":"523018","messageId":"20250730164052.15371-5-carenas@gmail.com","threadId":"63879","inReplyTo":"20250730164052.15371-1-carenas@gmail.com","subject":"[PATCH 4/5] git-gui: honor TCLTK_PATH in git-gui--askpass","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2025-07-30T16:40:51Z","receivedAt":"2025-07-30T16:44:04Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"Since its introduction in 8c76212 (git-gui: Add a simple implementation\nof SSH_ASKPASS., 2008-10-15), git-gui--askpass has been calling whatever\nwish interpreter is in the path, unlike git-gui.\n\nCorrect that by turning it into a script that would be processed at build\ntime.\n\nSigned-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n---\n .gitignore                              |  1 +\n Makefile                                |  9 ++++++---\n generate-script.sh                      | 22 ++++++++++++++++++++++\n git-gui--askpass => git-gui--askpass.sh |  0\n meson.build                             | 22 ++++++++++++++--------\n 5 files changed, 43 insertions(+), 11 deletions(-)\n create mode 100755 generate-script.sh\n rename git-gui--askpass => git-gui--askpass.sh (100%)\n\ndiff --git a/.gitignore b/.gitignore\nindex ba845f3..5130b4f 100644\n--- a/.gitignore\n+++ b/.gitignore\n@@ -4,4 +4,5 @@ git-gui.tcl\n GIT-GUI-BUILD-OPTIONS\n GIT-VERSION-FILE\n git-gui\n+git-gui--askpass\n lib/tclIndex\ndiff --git a/Makefile b/Makefile\nindex 2ac5f44..b2d7ffb 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -173,10 +173,13 @@ GIT-GUI-BUILD-OPTIONS: FORCE\n \t@if grep -q '^[A-Z][A-Z_]*=@.*@$$' $@+; then echo \"Unsubstituted build options in $@\" >&2 && exit 1; fi\n \t@if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi\n \n+git-gui--askpass: git-gui--askpass.sh GIT-GUI-BUILD-OPTIONS generate-script.sh\n+\t$(QUIET_GEN)$(SHELL_PATH) generate-script.sh $@ $< GIT-GUI-BUILD-OPTIONS\n+\n ifdef GITGUI_WINDOWS_WRAPPER\n-all:: git-gui\n+all:: git-gui git-gui--askpass\n endif\n-all:: $(GITGUI_MAIN) lib/tclIndex $(ALL_MSGFILES)\n+all:: $(GITGUI_MAIN) git-gui--askpass lib/tclIndex $(ALL_MSGFILES)\n \n install: all\n \t$(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL_D1)\n@@ -215,7 +218,7 @@ dist-version: GIT-VERSION-FILE\n \t@sed 's|^GITGUI_VERSION=||' <GIT-VERSION-FILE  >$(TARDIR)/version\n \n clean::\n-\t$(RM_RF) $(GITGUI_MAIN) lib/tclIndex po/*.msg $(PO_TEMPLATE)\n+\t$(RM_RF) $(GITGUI_MAIN) git-gui--askpass lib/tclIndex po/*.msg $(PO_TEMPLATE)\n \t$(RM_RF) GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS\n ifdef GITGUI_WINDOWS_WRAPPER\n \t$(RM_RF) git-gui\ndiff --git a/generate-script.sh b/generate-script.sh\nnew file mode 100755\nindex 0000000..0dd2da9\n--- /dev/null\n+++ b/generate-script.sh\n@@ -0,0 +1,22 @@\n+#!/bin/sh\n+\n+set -e\n+\n+if test $# -ne 3\n+then\n+\techo >&2 \"USAGE: $0 <OUTPUT> <INPUT> <GIT-GUI-BUILD-OPTIONS>\"\n+\texit 1\n+fi\n+\n+OUTPUT=\"$1\"\n+INPUT=\"$2\"\n+BUILD_OPTIONS=\"$3\"\n+\n+. \"$BUILD_OPTIONS\"\n+\n+sed \\\n+\t-e \"1s|#!.*/sh|#!$SHELL_PATH|\" \\\n+\t-e \"1,3s|^exec wish|exec '$TCLTK_PATH'|\" \\\n+\t\"$INPUT\" >\"$OUTPUT\"\n+\n+chmod a+x \"$OUTPUT\"\ndiff --git a/git-gui--askpass b/git-gui--askpass.sh\nsimilarity index 100%\nrename from git-gui--askpass\nrename to git-gui--askpass.sh\ndiff --git a/meson.build b/meson.build\nindex 1cedc82..320ba09 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -38,14 +38,6 @@ version_file = custom_target(\n   build_always_stale: true,\n )\n \n-configure_file(\n-  input: 'git-gui--askpass',\n-  output: 'git-gui--askpass',\n-  copy: true,\n-  install: true,\n-  install_dir: get_option('libexecdir') / 'git-core',\n-)\n-\n gitgui_main = 'git-gui'\n gitgui_main_install_dir = get_option('libexecdir') / 'git-core'\n \n@@ -61,6 +53,20 @@ if target_machine.system() == 'windows'\n   )\n endif\n \n+custom_target(\n+  output: 'git-gui--askpass',\n+  input: 'git-gui--askpass.sh',\n+  command: [\n+    shell,\n+    meson.current_source_dir() / 'generate-script.sh',\n+    '@OUTPUT@',\n+    '@INPUT@',\n+    meson.current_build_dir() / 'GIT-GUI-BUILD-OPTIONS',\n+  ],\n+  install: true,\n+  install_dir: get_option('libexecdir') / 'git-core',\n+)\n+\n custom_target(\n   input: 'git-gui.sh',\n   output: gitgui_main,\n-- \n2.50.1.475.g795bb014d8\n\n"},{"id":"523019","messageId":"20250730164052.15371-6-carenas@gmail.com","threadId":"63879","inReplyTo":"20250730164052.15371-1-carenas@gmail.com","subject":"[PATCH 5/5] git-gui: ensure own version of git-gui--askpass is used","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2025-07-30T16:40:52Z","receivedAt":"2025-07-30T16:44:05Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"Propagate the `git --exec-path` that is defined at build time\nand use it when defining which askpass helper to use by default.\n\nThis is specially useful in macOS where a broken version of that\nhelper is provided by the system git.\n\nSigned-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n---\n generate-git-gui.sh |  1 +\n git-gui.sh          | 10 +++++++++-\n lib/about.tcl       |  4 ++--\n 3 files changed, 12 insertions(+), 3 deletions(-)\n\ndiff --git a/generate-git-gui.sh b/generate-git-gui.sh\nindex 39dfafd..f804686 100755\n--- a/generate-git-gui.sh\n+++ b/generate-git-gui.sh\n@@ -22,6 +22,7 @@ sed \\\n \t-e \"s|@@SHELL_PATH@@|$SHELL_PATH|\" \\\n \t-e \"1,30s|^ exec wish | exec '$TCLTK_PATH' |\" \\\n \t-e \"s|@@GITGUI_VERSION@@|$GITGUI_VERSION|g\" \\\n+\t-e \"s|@@GITGUI_GITEXECDIR@@|$GITGUI_GITEXECDIR|\" \\\n \t-e \"s|@@GITGUI_RELATIVE@@|$GITGUI_RELATIVE|\" \\\n \t-e \"${GITGUI_RELATIVE}s|@@GITGUI_LIBDIR@@|$GITGUI_LIBDIR|\" \\\n \t\"$INPUT\" >\"$OUTPUT\"+\ndiff --git a/git-gui.sh b/git-gui.sh\nindex 8bb121d..9e6c152 100755\n--- a/git-gui.sh\n+++ b/git-gui.sh\n@@ -364,6 +364,7 @@ set _isbare {}\n set _githtmldir {}\n set _reponame {}\n set _shellpath {@@SHELL_PATH@@}\n+set _gitexecdir {@@GITGUI_GITEXECDIR@@}\n \n set _trace [lsearch -exact $argv --trace]\n if {$_trace >= 0} {\n@@ -387,6 +388,13 @@ if {[string match @@* $_shellpath]} {\n \t}\n }\n \n+if {[string match @@* $_gitexecdir]} {\n+\tif {[catch {set _gitexecdir [exec git --exec-path]} err]} {\n+\t\terror \"Git not installed?\\n\\n$err\"\n+\t}\n+\tset _gitexecdir [file normalize $_gitexecdir]\n+}\n+\n if {[is_Windows]} {\n \tset _shellpath [safe_exec [list cygpath -m $_shellpath]]\n }\n@@ -1114,7 +1122,7 @@ citool {\n \n # Suggest our implementation of askpass, if none is set\n if {![info exists env(SSH_ASKPASS)]} {\n-\tset env(SSH_ASKPASS) [file join [git --exec-path] git-gui--askpass]\n+\tset env(SSH_ASKPASS) [file join $_gitexecdir git-gui--askpass]\n }\n \n ######################################################################\ndiff --git a/lib/about.tcl b/lib/about.tcl\nindex 122ebfb..d68e23b 100644\n--- a/lib/about.tcl\n+++ b/lib/about.tcl\n@@ -2,7 +2,7 @@\n # Copyright (C) 2006, 2007 Shawn Pearce\n \n proc do_about {} {\n-\tglobal appvers copyright oguilib\n+\tglobal appvers copyright oguilib _gitexecdir\n \tglobal tcl_patchLevel tk_patchLevel\n \tglobal ui_comm_spell\n \n@@ -44,7 +44,7 @@ proc do_about {} {\n \n \tset d {}\n \tappend d \"git wrapper: $::_git\\n\"\n-\tappend d \"git exec dir: [git --exec-path]\\n\"\n+\tappend d \"git exec dir: $_gitexecdir\\n\"\n \tappend d \"git-gui lib: $oguilib\"\n \n \tpaddedlabel $w.vers -text $v\n-- \n2.50.1.475.g795bb014d8\n\n"},{"id":"523027","messageId":"cb63b63b-4a74-4649-bebb-002d1e6e66f7@kdbg.org","threadId":"63879","inReplyTo":"20250730164052.15371-5-carenas@gmail.com","subject":"Re: [PATCH 4/5] git-gui: honor TCLTK_PATH in git-gui--askpass","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2025-07-30T19:02:50Z","receivedAt":"2025-07-30T19:03:09Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 30.07.25 um 18:40 schrieb Carlo Marcelo Arenas Belón:\n> Since its introduction in 8c76212 (git-gui: Add a simple implementation\n> of SSH_ASKPASS., 2008-10-15), git-gui--askpass has been calling whatever\n> wish interpreter is in the path, unlike git-gui.\n> \n> Correct that by turning it into a script that would be processed at build\n> time.\n> \n> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n> ---\n>  .gitignore                              |  1 +\n>  Makefile                                |  9 ++++++---\n>  generate-script.sh                      | 22 ++++++++++++++++++++++\n>  git-gui--askpass => git-gui--askpass.sh |  0\n>  meson.build                             | 22 ++++++++++++++--------\n>  5 files changed, 43 insertions(+), 11 deletions(-)\n>  create mode 100755 generate-script.sh\n>  rename git-gui--askpass => git-gui--askpass.sh (100%)\n> \n> diff --git a/.gitignore b/.gitignore\n> index ba845f3..5130b4f 100644\n> --- a/.gitignore\n> +++ b/.gitignore\n> @@ -4,4 +4,5 @@ git-gui.tcl\n>  GIT-GUI-BUILD-OPTIONS\n>  GIT-VERSION-FILE\n>  git-gui\n> +git-gui--askpass\n>  lib/tclIndex\n> diff --git a/Makefile b/Makefile\n> index 2ac5f44..b2d7ffb 100644\n> --- a/Makefile\n> +++ b/Makefile\n> @@ -173,10 +173,13 @@ GIT-GUI-BUILD-OPTIONS: FORCE\n>  \t@if grep -q '^[A-Z][A-Z_]*=@.*@$$' $@+; then echo \"Unsubstituted build options in $@\" >&2 && exit 1; fi\n>  \t@if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi\n>  \n> +git-gui--askpass: git-gui--askpass.sh GIT-GUI-BUILD-OPTIONS generate-script.sh\n> +\t$(QUIET_GEN)$(SHELL_PATH) generate-script.sh $@ $< GIT-GUI-BUILD-OPTIONS\n> +\n>  ifdef GITGUI_WINDOWS_WRAPPER\n> -all:: git-gui\n> +all:: git-gui git-gui--askpass\n>  endif\n> -all:: $(GITGUI_MAIN) lib/tclIndex $(ALL_MSGFILES)\n> +all:: $(GITGUI_MAIN) git-gui--askpass lib/tclIndex $(ALL_MSGFILES)\n\nI'm not a Makefile expert concerning double-colon targets. Therefore, I\nwonder why do we need git-gui--ask-pass twice on Windows.\n\n>  \n>  install: all\n>  \t$(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL_D1)\n> @@ -215,7 +218,7 @@ dist-version: GIT-VERSION-FILE\n>  \t@sed 's|^GITGUI_VERSION=||' <GIT-VERSION-FILE  >$(TARDIR)/version\n>  \n>  clean::\n> -\t$(RM_RF) $(GITGUI_MAIN) lib/tclIndex po/*.msg $(PO_TEMPLATE)\n> +\t$(RM_RF) $(GITGUI_MAIN) git-gui--askpass lib/tclIndex po/*.msg $(PO_TEMPLATE)\n>  \t$(RM_RF) GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS\n>  ifdef GITGUI_WINDOWS_WRAPPER\n>  \t$(RM_RF) git-gui\n\nSome dependency must be missing here, since my build fails with\n\ngit-gui@cb/no-tcl86-on-macos:1015> make\nGITGUI_VERSION=0.21.0.221.g8045a\n    GEN git-gui\n    GEN git-gui--askpass\ngenerate-script.sh: line 15: .: GIT-GUI-BUILD-OPTIONS: file not found\nmake: *** [Makefile:177: git-gui--askpass] Error 1\n\n> diff --git a/generate-script.sh b/generate-script.sh\n> new file mode 100755\n> index 0000000..0dd2da9\n> --- /dev/null\n> +++ b/generate-script.sh\n> @@ -0,0 +1,22 @@\n> +#!/bin/sh\n> +\n> +set -e\n> +\n> +if test $# -ne 3\n> +then\n> +\techo >&2 \"USAGE: $0 <OUTPUT> <INPUT> <GIT-GUI-BUILD-OPTIONS>\"\n> +\texit 1\n> +fi\n> +\n> +OUTPUT=\"$1\"\n> +INPUT=\"$2\"\n> +BUILD_OPTIONS=\"$3\"\n> +\n> +. \"$BUILD_OPTIONS\"\n> +\n> +sed \\\n> +\t-e \"1s|#!.*/sh|#!$SHELL_PATH|\" \\\n> +\t-e \"1,3s|^exec wish|exec '$TCLTK_PATH'|\" \\\n> +\t\"$INPUT\" >\"$OUTPUT\"\n> +\n> +chmod a+x \"$OUTPUT\"\n> diff --git a/git-gui--askpass b/git-gui--askpass.sh\n> similarity index 100%\n> rename from git-gui--askpass\n> rename to git-gui--askpass.sh\n> diff --git a/meson.build b/meson.build\n> index 1cedc82..320ba09 100644\n> --- a/meson.build\n> +++ b/meson.build\n> @@ -38,14 +38,6 @@ version_file = custom_target(\n>    build_always_stale: true,\n>  )\n>  \n> -configure_file(\n> -  input: 'git-gui--askpass',\n> -  output: 'git-gui--askpass',\n> -  copy: true,\n> -  install: true,\n> -  install_dir: get_option('libexecdir') / 'git-core',\n> -)\n> -\n>  gitgui_main = 'git-gui'\n>  gitgui_main_install_dir = get_option('libexecdir') / 'git-core'\n>  \n> @@ -61,6 +53,20 @@ if target_machine.system() == 'windows'\n>    )\n>  endif\n>  \n> +custom_target(\n> +  output: 'git-gui--askpass',\n> +  input: 'git-gui--askpass.sh',\n> +  command: [\n> +    shell,\n> +    meson.current_source_dir() / 'generate-script.sh',\n> +    '@OUTPUT@',\n> +    '@INPUT@',\n> +    meson.current_build_dir() / 'GIT-GUI-BUILD-OPTIONS',\n> +  ],\n> +  install: true,\n> +  install_dir: get_option('libexecdir') / 'git-core',\n> +)\n> +\n>  custom_target(\n>    input: 'git-gui.sh',\n>    output: gitgui_main,\n\nI can't comment on the meson part at all.\n\n-- Hannes\n\n"},{"id":"523028","messageId":"ce964e5a-fe30-42da-bf8d-969893e3907f@kdbg.org","threadId":"63879","inReplyTo":"20250730164052.15371-6-carenas@gmail.com","subject":"Re: [PATCH 5/5] git-gui: ensure own version of git-gui--askpass is used","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2025-07-30T19:04:26Z","receivedAt":"2025-07-30T19:04:37Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 30.07.25 um 18:40 schrieb Carlo Marcelo Arenas Belón:\n> Propagate the `git --exec-path` that is defined at build time\n> and use it when defining which askpass helper to use by default.\n> \n> This is specially useful in macOS where a broken version of that\n> helper is provided by the system git.\n> \n> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n> ---\n\nThis patch breaks Git GUI on builds with RUNTIME_PREFIX, I think,\nbecause it hard-codes the path to some exec-path that might not exist\nduring runtime.\n\n>  generate-git-gui.sh |  1 +\n>  git-gui.sh          | 10 +++++++++-\n>  lib/about.tcl       |  4 ++--\n>  3 files changed, 12 insertions(+), 3 deletions(-)\n> \n> diff --git a/generate-git-gui.sh b/generate-git-gui.sh\n> index 39dfafd..f804686 100755\n> --- a/generate-git-gui.sh\n> +++ b/generate-git-gui.sh\n> @@ -22,6 +22,7 @@ sed \\\n>  \t-e \"s|@@SHELL_PATH@@|$SHELL_PATH|\" \\\n>  \t-e \"1,30s|^ exec wish | exec '$TCLTK_PATH' |\" \\\n>  \t-e \"s|@@GITGUI_VERSION@@|$GITGUI_VERSION|g\" \\\n> +\t-e \"s|@@GITGUI_GITEXECDIR@@|$GITGUI_GITEXECDIR|\" \\\n>  \t-e \"s|@@GITGUI_RELATIVE@@|$GITGUI_RELATIVE|\" \\\n>  \t-e \"${GITGUI_RELATIVE}s|@@GITGUI_LIBDIR@@|$GITGUI_LIBDIR|\" \\\n>  \t\"$INPUT\" >\"$OUTPUT\"+\n> diff --git a/git-gui.sh b/git-gui.sh\n> index 8bb121d..9e6c152 100755\n> --- a/git-gui.sh\n> +++ b/git-gui.sh\n> @@ -364,6 +364,7 @@ set _isbare {}\n>  set _githtmldir {}\n>  set _reponame {}\n>  set _shellpath {@@SHELL_PATH@@}\n> +set _gitexecdir {@@GITGUI_GITEXECDIR@@}\n>  \n>  set _trace [lsearch -exact $argv --trace]\n>  if {$_trace >= 0} {\n> @@ -387,6 +388,13 @@ if {[string match @@* $_shellpath]} {\n>  \t}\n>  }\n>  \n> +if {[string match @@* $_gitexecdir]} {\n> +\tif {[catch {set _gitexecdir [exec git --exec-path]} err]} {\n\nWe can't use [git --exec-path] here, because proc git is not defined,\nyet. Good.\n\n> +\t\terror \"Git not installed?\\n\\n$err\"\n\nWe barely use 'error'. This is for developers, I would think, so it may\nbe ok-ish. An alternative would be 'puts stderr ...' that we use elsewhere.\n\nWe must exit here, but 'error' doesn't do it for us. Insert 'exit 1'.\n\n> +\t}\n> +\tset _gitexecdir [file normalize $_gitexecdir]\n> +}\n> +\n>  if {[is_Windows]} {\n>  \tset _shellpath [safe_exec [list cygpath -m $_shellpath]]\n>  }\n> @@ -1114,7 +1122,7 @@ citool {\n>  \n>  # Suggest our implementation of askpass, if none is set\n>  if {![info exists env(SSH_ASKPASS)]} {\n> -\tset env(SSH_ASKPASS) [file join [git --exec-path] git-gui--askpass]\n> +\tset env(SSH_ASKPASS) [file join $_gitexecdir git-gui--askpass]\n>  }\n>  \n>  ######################################################################\n> diff --git a/lib/about.tcl b/lib/about.tcl\n> index 122ebfb..d68e23b 100644\n> --- a/lib/about.tcl\n> +++ b/lib/about.tcl\n> @@ -2,7 +2,7 @@\n>  # Copyright (C) 2006, 2007 Shawn Pearce\n>  \n>  proc do_about {} {\n> -\tglobal appvers copyright oguilib\n> +\tglobal appvers copyright oguilib _gitexecdir\n>  \tglobal tcl_patchLevel tk_patchLevel\n>  \tglobal ui_comm_spell\n>  \n> @@ -44,7 +44,7 @@ proc do_about {} {\n>  \n>  \tset d {}\n>  \tappend d \"git wrapper: $::_git\\n\"\n> -\tappend d \"git exec dir: [git --exec-path]\\n\"\n> +\tappend d \"git exec dir: $_gitexecdir\\n\"\n\nNice touch to change this case as well!\n\n>  \tappend d \"git-gui lib: $oguilib\"\n>  \n>  \tpaddedlabel $w.vers -text $v\n\n-- Hannes\n\n"},{"id":"523029","messageId":"74891c16-8850-4148-ba15-d5b3e5571bcb@kdbg.org","threadId":"63879","inReplyTo":"20250730164052.15371-1-carenas@gmail.com","subject":"Re: [PATCH 0/5] git-gui: workaround deprecation of Tcl/TK 8.5 in macOS","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2025-07-30T19:09:14Z","receivedAt":"2025-07-30T19:09:23Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 30.07.25 um 18:40 schrieb Carlo Marcelo Arenas Belón:\n> This series, add improvements to allow running `git-gui` in macOS, which is\n> stuck in an ancient version of Tcl/TK that is no longer supported by git.\n> \n> Patches 1 and 2 are minor fixes that could also apply to maint, but the main\n> change is in Patch 3, which removes the long obsoleted \"Git Gui\" app that was\n> tied to the system provided Tcl/TK framework and that has been broken for a\n> while.\n\nThis sounds like the lifted requirement of Tcl 8.6 isn't the cause why\nthis part is broken. But the commit message of patch 3 says it is. Which\none is it?\n\n> \n> Patches 4 and 5 are needed to avoid the system framework and facilitate using\n> a third party provided package of Tcl/TK 8.6 instead, but the last patch also\n> protects against a conflict with the Xcode provided git that for some reason\n> includes a copy pf `git-gui--askpass` even if `git-gui` is missing.\n\nPatch 5, I fear, needs a different approach as it breaks RUNTIME_PREFIX\nbuilds. I say that after having looked at the patch; I haven't test it.\n\nAny help would be appreciated on the Meson parts and whether the updated\ngit-gui--askpass build still works. I don't use either of them.\n\n> \n> Carlo Marcelo Arenas Belón (5):\n>   git-gui: remove uname_O in Makefile\n>   git-gui: fix dependency of GITGUI_MAIN on generator\n>   git-gui: retire Git Gui.app\n>   git-gui: honor TCLTK_PATH in git-gui--askpass\n>   git-gui: ensure own version of git-gui--askpass is used\n> \n>  .gitignore                              |   2 +-\n>  GIT-GUI-BUILD-OPTIONS.in                |   1 -\n>  Makefile                                |  63 +++----------------\n>  generate-git-gui.sh                     |   1 +\n>  generate-macos-app.sh                   |  30 ---------\n>  generate-macos-wrapper.sh               |  35 -----------\n>  generate-script.sh                      |  22 +++++++\n>  git-gui--askpass => git-gui--askpass.sh |   0\n>  git-gui.sh                              |  10 ++-\n>  lib/about.tcl                           |   4 +-\n>  macosx/AppMain.tcl                      |  29 ---------\n>  macosx/Info.plist                       |  30 ---------\n>  macosx/git-gui.icns                     | Bin 28866 -> 0 bytes\n>  meson.build                             |  79 +++++-------------------\n>  14 files changed, 56 insertions(+), 250 deletions(-)\n>  delete mode 100755 generate-macos-app.sh\n>  delete mode 100755 generate-macos-wrapper.sh\n>  create mode 100755 generate-script.sh\n>  rename git-gui--askpass => git-gui--askpass.sh (100%)\n>  delete mode 100644 macosx/AppMain.tcl\n>  delete mode 100644 macosx/Info.plist\n>  delete mode 100644 macosx/git-gui.icns\n> \n> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n\n-- Hannes\n\n"},{"id":"523030","messageId":"xmqqv7n9l9zg.fsf@gitster.g","threadId":"63879","inReplyTo":"20250730164052.15371-1-carenas@gmail.com","subject":"Re: [PATCH 0/5] git-gui: workaround deprecation of Tcl/TK 8.5 in macOS","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-07-30T20:06:11Z","receivedAt":"2025-07-30T20:06:15Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Carlo Marcelo Arenas Belón <carenas@gmail.com> writes:\n\n> This series, add improvements to allow running `git-gui` in macOS, which is\n> stuck in an ancient version of Tcl/TK that is no longer supported by git.\n\nA naïve question.\n\nJust like Git is a third-party software from macOS's point of view,\nwouldn't Tcl/Tk be equally a third-party software, or is it more\ningrained to the base operation system offering for some reason?\n\nThe reason why I ask this question is because I do not see how it\nwould make it a lot more hassle having to upgrade the version of\ntcl/tk on their macOS machine than having to upgrade the Git to the\nversion that ships with this change, from an end-user's point of\nview.\n\n"},{"id":"523031","messageId":"xmqqtt2tl9yw.fsf@gitster.g","threadId":"63879","inReplyTo":"20250730164052.15371-1-carenas@gmail.com","subject":"Re: [PATCH 0/5] git-gui: workaround deprecation of Tcl/TK 8.5 in macOS","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-07-30T20:06:31Z","receivedAt":"2025-07-30T20:06:34Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Carlo Marcelo Arenas Belón <carenas@gmail.com> writes:\n\n> This series, add improvements to allow running `git-gui` in macOS, which is\n> stuck in an ancient version of Tcl/TK that is no longer supported by git.\n\nA naïve question.\n\nJust like Git is a third-party software from macOS's point of view,\nwouldn't Tcl/Tk be equally a third-party software, or is it more\ningrained to the base operation system offering for some reason?\n\nThe reason why I ask this question is because I do not see how it\nwould make it a lot more hassle having to upgrade the version of\ntcl/tk on their macOS machine than having to upgrade the Git to the\nversion that ships with this change, from an end-user's point of\nview.\n\n"},{"id":"523032","messageId":"xmqqpldhl9xt.fsf@gitster.g","threadId":"63879","inReplyTo":"20250730164052.15371-2-carenas@gmail.com","subject":"Re: [PATCH 1/5] git-gui: remove uname_O in Makefile","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-07-30T20:07:10Z","receivedAt":"2025-07-30T20:07:13Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Carlo Marcelo Arenas Belón <carenas@gmail.com> writes:\n\n> Last used in ae49066 (git gui Makefile - remove Cygwin modifications,\n> 2023-06-26), and unused since.\n>\n> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n> ---\n>  Makefile | 1 -\n>  1 file changed, 1 deletion(-)\n\nAn obvious improvement ;-).\n\n> diff --git a/Makefile b/Makefile\n> index 315888f..a87dc06 100644\n> --- a/Makefile\n> +++ b/Makefile\n> @@ -11,7 +11,6 @@ GIT-VERSION-FILE: FORCE\n>  \t@$(SHELL_PATH) ./GIT-VERSION-GEN . $@\n>  \n>  uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')\n> -uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')\n>  uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not')\n>  \n>  SCRIPT_SH = git-gui.sh\n"},{"id":"523033","messageId":"CAPUEspiP+Xoz_W-X4QrStAFS1BqSF4pws7d6dxaf6m0OeLtM_w@mail.gmail.com","threadId":"63879","inReplyTo":"xmqqtt2tl9yw.fsf@gitster.g","subject":"Re: [PATCH 0/5] git-gui: workaround deprecation of Tcl/TK 8.5 in macOS","fromName":"Carlo Arenas","fromEmail":"carenas@gmail.com","sentAt":"2025-07-30T20:51:49Z","receivedAt":"2025-07-30T20:52:02Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"On Wed, Jul 30, 2025 at 1:06 PM Junio C Hamano <gitster@pobox.com> wrote:\n>\n> Carlo Marcelo Arenas Belón <carenas@gmail.com> writes:\n>\n> > This series adds improvements to allow running `git-gui` in macOS, which is\n> > stuck in an ancient version of Tcl/TK that is no longer supported by git.\n>\n> A naïve question.\n>\n> Just like Git is a third-party software from macOS's point of view,\n> wouldn't Tcl/Tk be equally a third-party software, or is it more\n> ingrained to the base operation system offering for some reason?\n\nIt is more ingrained as Tcl/Tk comes with the OS as a Framework,\nalthough one that hasn't had updates for half a decade, and that\nprints a message saying it is deprecated and might be gone in a\nfuture release for several releases, when it works.\n\ngit comes as part of the \"Development tools\" (both the command line\nthat is independent of Xcode and as part of Xcode) and therefore must\nbe installed independently.\n\n> The reason why I ask this question is because I do not see how it\n> would make it a lot more hassle having to upgrade the version of\n> tcl/tk on their macOS machine than having to upgrade the Git to the\n> version that ships with this change, from an end-user's point of\n> view.\n\nNot sure I understand the question, but \"upgrading\" is not the problem.\n\nUsers can (and had been doing for a while) install a newer version for both\nbut the Makefile that comes with git-gui tries to find the system provided\nTcl/Tk and use that, which IMHO makes little sense once the git-gui codebase\nis no longer compatible with the version provided by that Framework.\n\nCarlo\n"},{"id":"523036","messageId":"cf81b5f5-06a5-404c-9edd-e94b902aa455@gmail.com","threadId":"63879","inReplyTo":"ce964e5a-fe30-42da-bf8d-969893e3907f@kdbg.org","subject":"Re: [PATCH 5/5] git-gui: ensure own version of git-gui--askpass is used","fromName":"Mark Levedahl","fromEmail":"mlevedahl@gmail.com","sentAt":"2025-07-30T21:19:20Z","receivedAt":"2025-07-30T21:19:22Z","isPatch":true,"sender":{"key":"mdl123@verizon.net","avatar":"https://avatars.githubusercontent.com/u/5302462?v=4"},"body":"\n\nOn 7/30/25 3:04 PM, Johannes Sixt wrote:\n> Am 30.07.25 um 18:40 schrieb Carlo Marcelo Arenas Belón:\n>> Propagate the `git --exec-path` that is defined at build time\n>> and use it when defining which askpass helper to use by default.\n>>\n>> This is specially useful in macOS where a broken version of that\n>> helper is provided by the system git.\n>>\n>> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n>> ---\n>\n\nThe expectation is that git-gui--askpass is colocated with git-gui, and not with git. This\ndirectory is found at runtime as\n\n   [file dirname [file normalize $::argv0]]]\n\nIt seems to me we could just put this into git-gui.sh instead of [git --exec-path], and\nthe patch is much simpler.\n\nMark\n"},{"id":"523042","messageId":"CAPUEspgpF5=w-=w1zofkO1P3+HYdvRUxZfpnM2pcJGYOOoEmdg@mail.gmail.com","threadId":"63879","inReplyTo":"74891c16-8850-4148-ba15-d5b3e5571bcb@kdbg.org","subject":"Re: [PATCH 0/5] git-gui: workaround deprecation of Tcl/TK 8.5 in macOS","fromName":"Carlo Arenas","fromEmail":"carenas@gmail.com","sentAt":"2025-07-30T23:54:12Z","receivedAt":"2025-07-30T23:54:25Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"On Wed, Jul 30, 2025 at 12:09 PM Johannes Sixt <j6t@kdbg.org> wrote:\n>\n> Am 30.07.25 um 18:40 schrieb Carlo Marcelo Arenas Belón:\n> >\n> > Patches 1 and 2 are minor fixes that could also apply to maint, but the main\n> > change is in Patch 3, which removes the long obsoleted \"Git Gui\" app that was\n> > tied to the system provided Tcl/TK framework and that has been broken for a\n> > while.\n>\n> This sounds like the lifted requirement of Tcl 8.6 isn't the cause why\n> this part is broken. But the commit message of patch 3 says it is. Which\n> one is it?\n\nIt has been broken multiple times.  Since macOS 11 (released in 2020) using the\nsystem provided Framework had caused problems, some were worked around by\nuse_ttk=0, but it was more reliable to use a third party Tcl/Tk.\n\nFor example, Homebrew tricks the Makefile to fail to detect the system\nTcl/Tk and\nto use their own version of that dependency.\n\nSomething in the recent meson related changes broke the generator for the App\nand it wouldn't even start, I didn't propose a fix, since that is\nlikely also affecting\nmaint and nobody complained, which is why I was proposing to remove the App\ninstead.\n\nThe last changes that remove use_ttk and force a version that is no\nlonger provided\nby the hard coded dependency of the App are just the last nail on its coffin.\n\n> > Patches 4 and 5 are needed to avoid the system framework and facilitate using\n> > a third party provided package of Tcl/TK 8.6 instead, but the last patch also\n> > protects against a conflict with the Xcode provided git that for some reason\n> > includes a copy of `git-gui--askpass` even if `git-gui` is missing.\n>\n> Patch 5, I fear, needs a different approach as it breaks RUNTIME_PREFIX\n> builds. I say that after having looked at the patch; I haven't test it.\n\nI tried not to break RUNTIME_PREFIX by only using the build provided execpath\nto locate the askpass helper, but the suggestion by Mark seems like a\nbetter approach.\n\n> Any help would be appreciated on the Meson parts\n\nThe Meson build works when tested outside the git repository, but since the main\nmeson.build doesn't yet use that to build/install git-gui there is no\nway to do a full\ntest.\n\nEitherway, it can't make things worse.\n\n> and whether the updated\n> git-gui--askpass build still works. I don't use either of them.\n\nto trigger the helper you might need OpenSSH >= 8.4 and having the following\nvariable in the environment before calling git-gui:\n\n  SSH_ASKPASS_REQUIRE=force\n\nnote that G4W provides its own native `SSH_ASKPASS=git-askpass.exe`so that\nmust be unset first.\n\nCarlo\n"},{"id":"523043","messageId":"xmqqseidted6.fsf@gitster.g","threadId":"63879","inReplyTo":"CAPUEspiP+Xoz_W-X4QrStAFS1BqSF4pws7d6dxaf6m0OeLtM_w@mail.gmail.com","subject":"Re: [PATCH 0/5] git-gui: workaround deprecation of Tcl/TK 8.5 in macOS","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-07-31T00:04:21Z","receivedAt":"2025-07-31T00:04:24Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Carlo Arenas <carenas@gmail.com> writes:\n\n> Not sure I understand the question, but \"upgrading\" is not the problem.\n\nWhat I read from your description tells us that \"upgrading\" Tcl/Tk\nbeyond the version that is given as part of \"Framework\" *is* a huge\nproblem for end-users.  That was exactly what I was trying to find\nout.\n\nThanks.\n"},{"id":"523075","messageId":"20250731080628.27917-1-carenas@gmail.com","threadId":"63879","inReplyTo":"20250730164052.15371-1-carenas@gmail.com","subject":"[PATCH v2 0/5] git-gui: workaround deprecation of Tcl/Tk 8.5 in macOS","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2025-07-31T08:06:23Z","receivedAt":"2025-07-31T08:07:47Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"This series, adds improvements to allow running `git-gui` in macOS, which is\nstuck in an ancient version of Tcl/Tk that is no longer supported by git.\n\nPatches 1 and 2 are minor fixes that could also apply to maint, but the main\nchange is in Patch 3, which removes the long obsoleted \"Git Gui\" app that was\ntied to the system provided Tcl/Tk framework and that has been broken for a\nwhile.\n\nPatches 4 and 5 are needed to avoid the system framework and facilitate using\na third party provided package of Tcl/Tk 8.6 instead, but the last patch also\nprotects against a conflict with the Xcode provided git that for some reason\nincludes a copy of `git-gui--askpass`, even if `git-gui` is missing.\n\nCarlo Marcelo Arenas Belón (5):\n  git-gui: remove uname_O in Makefile\n  git-gui: fix dependency of GITGUI_MAIN on generator\n  git-gui: retire Git Gui.app\n  git-gui: honor TCLTK_PATH in git-gui--askpass\n  git-gui: ensure own version of git-gui--askpass is used\n\n .gitignore                              |   2 +-\n GIT-GUI-BUILD-OPTIONS.in                |   1 -\n Makefile                                |  61 ++----------------\n generate-macos-app.sh                   |  30 ---------\n generate-macos-wrapper.sh               |  35 -----------\n generate-script.sh                      |  22 +++++++\n git-gui--askpass => git-gui--askpass.sh |   0\n git-gui.sh                              |   4 +-\n macosx/AppMain.tcl                      |  29 ---------\n macosx/Info.plist                       |  30 ---------\n macosx/git-gui.icns                     | Bin 28866 -> 0 bytes\n meson.build                             |  79 +++++-------------------\n 12 files changed, 46 insertions(+), 247 deletions(-)\n delete mode 100755 generate-macos-app.sh\n delete mode 100755 generate-macos-wrapper.sh\n create mode 100755 generate-script.sh\n rename git-gui--askpass => git-gui--askpass.sh (100%)\n delete mode 100644 macosx/AppMain.tcl\n delete mode 100644 macosx/Info.plist\n delete mode 100644 macosx/git-gui.icns\n\nChanges since v1:\n* no more silly Makefile issues\n* a simpler implementation of patch 5\n\nRange-diff against v1:\n1:  423b945 = 1:  423b945 git-gui: remove uname_O in Makefile\n2:  e7183ab = 2:  e7183ab git-gui: fix dependency of GITGUI_MAIN on generator\n3:  1054496 = 3:  1054496 git-gui: retire Git Gui.app\n4:  7fdd8b5 ! 4:  5d908e3 git-gui: honor TCLTK_PATH in git-gui--askpass\n    @@ Makefile: GIT-GUI-BUILD-OPTIONS: FORCE\n      \t@if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi\n      \n     +git-gui--askpass: git-gui--askpass.sh GIT-GUI-BUILD-OPTIONS generate-script.sh\n    -+\t$(QUIET_GEN)$(SHELL_PATH) generate-script.sh $@ $< GIT-GUI-BUILD-OPTIONS\n    ++\t$(QUIET_GEN)$(SHELL_PATH) generate-script.sh $@ $< ./GIT-GUI-BUILD-OPTIONS\n     +\n      ifdef GITGUI_WINDOWS_WRAPPER\n    --all:: git-gui\n    -+all:: git-gui git-gui--askpass\n    + all:: git-gui\n      endif\n     -all:: $(GITGUI_MAIN) lib/tclIndex $(ALL_MSGFILES)\n     +all:: $(GITGUI_MAIN) git-gui--askpass lib/tclIndex $(ALL_MSGFILES)\n5:  1eae516 ! 5:  c5ffefc git-gui: ensure own version of git-gui--askpass is used\n    @@ Metadata\n      ## Commit message ##\n         git-gui: ensure own version of git-gui--askpass is used\n     \n    -    Propagate the `git --exec-path` that is defined at build time\n    -    and use it when defining which askpass helper to use by default.\n    +    When finding a location for the askpass helper, git will be asked\n    +    for its exec path, but if that git is not the same that called\n    +    git-gui then we might mistakenly point to its helper instead.\n    +\n    +    Assume that git-gui and the helper are colocated to derive its\n    +    path instead.\n     \n         This is specially useful in macOS where a broken version of that\n         helper is provided by the system git.\n     \n    +    Suggested-by: Mark Levedahl <mlevedahl@gmail.com>\n         Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n     \n    - ## generate-git-gui.sh ##\n    -@@ generate-git-gui.sh: sed \\\n    - \t-e \"s|@@SHELL_PATH@@|$SHELL_PATH|\" \\\n    - \t-e \"1,30s|^ exec wish | exec '$TCLTK_PATH' |\" \\\n    - \t-e \"s|@@GITGUI_VERSION@@|$GITGUI_VERSION|g\" \\\n    -+\t-e \"s|@@GITGUI_GITEXECDIR@@|$GITGUI_GITEXECDIR|\" \\\n    - \t-e \"s|@@GITGUI_RELATIVE@@|$GITGUI_RELATIVE|\" \\\n    - \t-e \"${GITGUI_RELATIVE}s|@@GITGUI_LIBDIR@@|$GITGUI_LIBDIR|\" \\\n    - \t\"$INPUT\" >\"$OUTPUT\"+\n    -\n      ## git-gui.sh ##\n    -@@ git-gui.sh: set _isbare {}\n    - set _githtmldir {}\n    - set _reponame {}\n    - set _shellpath {@@SHELL_PATH@@}\n    -+set _gitexecdir {@@GITGUI_GITEXECDIR@@}\n    - \n    - set _trace [lsearch -exact $argv --trace]\n    - if {$_trace >= 0} {\n    -@@ git-gui.sh: if {[string match @@* $_shellpath]} {\n    - \t}\n    - }\n    - \n    -+if {[string match @@* $_gitexecdir]} {\n    -+\tif {[catch {set _gitexecdir [exec git --exec-path]} err]} {\n    -+\t\terror \"Git not installed?\\n\\n$err\"\n    -+\t}\n    -+\tset _gitexecdir [file normalize $_gitexecdir]\n    -+}\n    -+\n    - if {[is_Windows]} {\n    - \tset _shellpath [safe_exec [list cygpath -m $_shellpath]]\n    - }\n     @@ git-gui.sh: citool {\n      \n      # Suggest our implementation of askpass, if none is set\n      if {![info exists env(SSH_ASKPASS)]} {\n     -\tset env(SSH_ASKPASS) [file join [git --exec-path] git-gui--askpass]\n    -+\tset env(SSH_ASKPASS) [file join $_gitexecdir git-gui--askpass]\n    ++\tset env(SSH_ASKPASS) \\\n    ++\t\t[file join [file dirname [file normalize $::argv0]] \\\n    ++\t\t\tgit-gui--askpass]\n      }\n      \n      ######################################################################\n    -\n    - ## lib/about.tcl ##\n    -@@\n    - # Copyright (C) 2006, 2007 Shawn Pearce\n    - \n    - proc do_about {} {\n    --\tglobal appvers copyright oguilib\n    -+\tglobal appvers copyright oguilib _gitexecdir\n    - \tglobal tcl_patchLevel tk_patchLevel\n    - \tglobal ui_comm_spell\n    - \n    -@@ lib/about.tcl: proc do_about {} {\n    - \n    - \tset d {}\n    - \tappend d \"git wrapper: $::_git\\n\"\n    --\tappend d \"git exec dir: [git --exec-path]\\n\"\n    -+\tappend d \"git exec dir: $_gitexecdir\\n\"\n    - \tappend d \"git-gui lib: $oguilib\"\n    - \n    - \tpaddedlabel $w.vers -text $v\n\nSigned-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n-- \n2.50.1.475.ge15fa7359c\n\n"},{"id":"523076","messageId":"20250731080628.27917-2-carenas@gmail.com","threadId":"63879","inReplyTo":"20250731080628.27917-1-carenas@gmail.com","subject":"[PATCH v2 1/5] git-gui: remove uname_O in Makefile","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2025-07-31T08:06:24Z","receivedAt":"2025-07-31T08:07:48Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"Last used in ae49066 (git gui Makefile - remove Cygwin modifications,\n2023-06-26), and unused since.\n\nSigned-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n---\n Makefile | 1 -\n 1 file changed, 1 deletion(-)\n\ndiff --git a/Makefile b/Makefile\nindex 315888f..a87dc06 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -11,7 +11,6 @@ GIT-VERSION-FILE: FORCE\n \t@$(SHELL_PATH) ./GIT-VERSION-GEN . $@\n \n uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')\n-uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')\n uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not')\n \n SCRIPT_SH = git-gui.sh\n-- \n2.50.1.475.ge15fa7359c\n\n"},{"id":"523077","messageId":"20250731080628.27917-3-carenas@gmail.com","threadId":"63879","inReplyTo":"20250731080628.27917-1-carenas@gmail.com","subject":"[PATCH v2 2/5] git-gui: fix dependency of GITGUI_MAIN on generator","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2025-07-31T08:06:25Z","receivedAt":"2025-07-31T08:07:50Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"Since 854e883 (git-gui: extract script to generate \"git-gui\",\n2025-03-11), the logic to generate the main script was pulled\nout of the Makefile, but adding the resulting generator as a\ndependency was missed.\n\nIf the logic changes, the main script should be regenerated, so\nadd it as a dependency.\n\nSigned-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n---\n Makefile | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/Makefile b/Makefile\nindex a87dc06..179857d 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -168,7 +168,7 @@ git-gui: windows/git-gui.sh\n \tcp $< $@\n endif\n \n-$(GITGUI_MAIN): git-gui.sh GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS\n+$(GITGUI_MAIN): git-gui.sh GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS generate-git-gui.sh\n \t$(QUIET_GEN)$(SHELL_PATH) generate-git-gui.sh \"$<\" \"$@\" ./GIT-GUI-BUILD-OPTIONS ./GIT-VERSION-FILE\n \n XGETTEXT   ?= xgettext\n-- \n2.50.1.475.ge15fa7359c\n\n"},{"id":"523078","messageId":"20250731080628.27917-4-carenas@gmail.com","threadId":"63879","inReplyTo":"20250731080628.27917-1-carenas@gmail.com","subject":"[PATCH v2 3/5] git-gui: retire Git Gui.app","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2025-07-31T08:06:26Z","receivedAt":"2025-07-31T08:07:51Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"In a recent commit, the minimum version of Tcl/Tk was raised to\n8.6, but the \"app\" relies on the system provided Framework that\nis based on 8.5.\n\nRemove it, and let git-gui use a third party version of Wish if\navailable.\n\nSigned-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n---\n .gitignore                |   1 -\n GIT-GUI-BUILD-OPTIONS.in  |   1 -\n Makefile                  |  51 ----------------------------------\n generate-macos-app.sh     |  30 --------------------\n generate-macos-wrapper.sh |  35 -----------------------\n macosx/AppMain.tcl        |  29 -------------------\n macosx/Info.plist         |  30 --------------------\n macosx/git-gui.icns       | Bin 28866 -> 0 bytes\n meson.build               |  57 --------------------------------------\n 9 files changed, 234 deletions(-)\n delete mode 100755 generate-macos-app.sh\n delete mode 100755 generate-macos-wrapper.sh\n delete mode 100644 macosx/AppMain.tcl\n delete mode 100644 macosx/Info.plist\n delete mode 100644 macosx/git-gui.icns\n\ndiff --git a/.gitignore b/.gitignore\nindex ff6e0be..ba845f3 100644\n--- a/.gitignore\n+++ b/.gitignore\n@@ -1,6 +1,5 @@\n .DS_Store\n config.mak\n-Git Gui.app*\n git-gui.tcl\n GIT-GUI-BUILD-OPTIONS\n GIT-VERSION-FILE\ndiff --git a/GIT-GUI-BUILD-OPTIONS.in b/GIT-GUI-BUILD-OPTIONS.in\nindex 5fd885c..3c112af 100644\n--- a/GIT-GUI-BUILD-OPTIONS.in\n+++ b/GIT-GUI-BUILD-OPTIONS.in\n@@ -4,4 +4,3 @@ GITGUI_RELATIVE=@GITGUI_RELATIVE@\n SHELL_PATH=@SHELL_PATH@\n TCLTK_PATH=@TCLTK_PATH@\n TCL_PATH=@TCL_PATH@\n-TKEXECUTABLE=@TKEXECUTABLE@\ndiff --git a/Makefile b/Makefile\nindex 179857d..2ac5f44 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -52,8 +52,6 @@ INSTALL_R0 = $(INSTALL) -m 644 # space is required here\n INSTALL_R1 =\n INSTALL_X0 = $(INSTALL) -m 755 # space is required here\n INSTALL_X1 =\n-INSTALL_A0 = find # space is required here\n-INSTALL_A1 = | cpio -pud\n INSTALL_L0 = rm -f # space is required here\n INSTALL_L1 = && ln # space is required here\n INSTALL_L2 =\n@@ -78,8 +76,6 @@ ifndef V\n \tINSTALL_R1 = && echo '   ' INSTALL 644 `basename $$src` && $(INSTALL) -m 644 $$src\n \tINSTALL_X0 = src=\n \tINSTALL_X1 = && echo '   ' INSTALL 755 `basename $$src` && $(INSTALL) -m 755 $$src\n-\tINSTALL_A0 = src=\n-\tINSTALL_A1 = && echo '   ' INSTALL '   ' `basename \"$$src\"` && find \"$$src\" | cpio -pud\n \n \tINSTALL_L0 = dst=\n \tINSTALL_L1 = && src=\n@@ -100,18 +96,6 @@ else\n \tTCL_PATH ?= $(dir $(TCLTK_PATH))$(notdir $(subst wish,tclsh,$(TCLTK_PATH)))\n endif\n \n-ifeq ($(uname_S),Darwin)\n-\tTKFRAMEWORK = /Library/Frameworks/Tk.framework/Resources/Wish.app\n-        ifeq ($(shell echo \"$(uname_R)\" | awk -F. '{if ($$1 >= 9) print \"y\"}')_$(shell test -d $(TKFRAMEWORK) || echo n),y_n)\n-\t\tTKFRAMEWORK = /System/Library/Frameworks/Tk.framework/Resources/Wish.app\n-                ifeq ($(shell test -d $(TKFRAMEWORK) || echo n),n)\n-\t\t\tTKFRAMEWORK = /System/Library/Frameworks/Tk.framework/Resources/Wish\\ Shell.app\n-                endif\n-        endif\n-\tTKEXECUTABLE = $(TKFRAMEWORK)/Contents/MacOS/$(shell basename \"$(TKFRAMEWORK)\" .app)\n-\tTKEXECUTABLE_SQ = $(subst ','\\'',$(TKEXECUTABLE))\n-endif\n-\n ifeq ($(findstring $(firstword -$(MAKEFLAGS)),s),s)\n QUIET_GEN =\n endif\n@@ -129,16 +113,10 @@ libdir_SQ  = $(subst ','\\'',$(gg_libdir))\n exedir     = $(dir $(gitexecdir))share/git-gui/lib\n \n GITGUI_RELATIVE :=\n-GITGUI_MACOSXAPP :=\n \n ifeq ($(exedir),$(gg_libdir))\n \tGITGUI_RELATIVE := 1\n endif\n-ifeq ($(uname_S),Darwin)\n-        ifeq ($(shell test -d $(TKFRAMEWORK) && echo y),y)\n-\t\tGITGUI_MACOSXAPP := YesPlease\n-        endif\n-endif\n ifneq (,$(findstring MINGW,$(uname_S)))\n ifeq ($(shell expr \"$(uname_R)\" : '1\\.'),2)\n \tNO_MSGFMT=1\n@@ -147,20 +125,6 @@ endif\n \tGITGUI_RELATIVE := 1\n endif\n \n-ifdef GITGUI_MACOSXAPP\n-GITGUI_MAIN := git-gui.tcl\n-\n-git-gui: generate-macos-wrapper.sh GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS\n-\t$(QUIET_GEN)$(SHELL_PATH) generate-macos-wrapper.sh \"$@\" ./GIT-GUI-BUILD-OPTIONS ./GIT-VERSION-FILE\n-\n-Git\\ Gui.app: GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS \\\n-\t\tmacosx/Info.plist \\\n-\t\tmacosx/git-gui.icns \\\n-\t\tmacosx/AppMain.tcl \\\n-\t\t$(TKEXECUTABLE)\n-\t$(QUIET_GEN)$(SHELL_PATH) generate-macos-app.sh . \"$@\" ./GIT-GUI-BUILD-OPTIONS ./GIT-VERSION-FILE\n-endif\n-\n ifdef GITGUI_WINDOWS_WRAPPER\n GITGUI_MAIN := git-gui.tcl\n \n@@ -205,14 +169,10 @@ GIT-GUI-BUILD-OPTIONS: FORCE\n \t\t-e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \\\n \t\t-e 's|@TCLTK_PATH@|$(TCLTK_PATH_SQ)|' \\\n \t\t-e 's|@TCL_PATH@|$(TCL_PATH_SQ)|' \\\n-\t\t-e 's|@TKEXECUTABLE@|$(TKEXECUTABLE_SQ)|' \\\n \t\t$@.in >$@+\n \t@if grep -q '^[A-Z][A-Z_]*=@.*@$$' $@+; then echo \"Unsubstituted build options in $@\" >&2 && exit 1; fi\n \t@if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi\n \n-ifdef GITGUI_MACOSXAPP\n-all:: git-gui Git\\ Gui.app\n-endif\n ifdef GITGUI_WINDOWS_WRAPPER\n all:: git-gui\n endif\n@@ -228,10 +188,6 @@ ifdef GITGUI_WINDOWS_WRAPPER\n endif\n \t$(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(libdir_SQ)' $(INSTALL_D1)\n \t$(QUIET)$(INSTALL_R0)lib/tclIndex $(INSTALL_R1) '$(DESTDIR_SQ)$(libdir_SQ)'\n-ifdef GITGUI_MACOSXAPP\n-\t$(QUIET)$(INSTALL_A0)'Git Gui.app' $(INSTALL_A1) '$(DESTDIR_SQ)$(libdir_SQ)'\n-\t$(QUIET)$(INSTALL_X0)git-gui.tcl $(INSTALL_X1) '$(DESTDIR_SQ)$(libdir_SQ)'\n-endif\n \t$(QUIET)$(foreach p,$(ALL_LIBFILES) $(NONTCL_LIBFILES), $(INSTALL_R0)$p $(INSTALL_R1) '$(DESTDIR_SQ)$(libdir_SQ)' &&) true\n \t$(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(msgsdir_SQ)' $(INSTALL_D1)\n \t$(QUIET)$(foreach p,$(ALL_MSGFILES), $(INSTALL_R0)$p $(INSTALL_R1) '$(DESTDIR_SQ)$(msgsdir_SQ)' &&) true\n@@ -246,10 +202,6 @@ ifdef GITGUI_WINDOWS_WRAPPER\n endif\n \t$(QUIET)$(CLEAN_DST) '$(DESTDIR_SQ)$(libdir_SQ)'\n \t$(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)'/tclIndex $(REMOVE_F1)\n-ifdef GITGUI_MACOSXAPP\n-\t$(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)/Git Gui.app' $(REMOVE_F1)\n-\t$(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)'/git-gui.tcl $(REMOVE_F1)\n-endif\n \t$(QUIET)$(foreach p,$(ALL_LIBFILES) $(NONTCL_LIBFILES), $(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)'/$(notdir $p) $(REMOVE_F1) &&) true\n \t$(QUIET)$(CLEAN_DST) '$(DESTDIR_SQ)$(msgsdir_SQ)'\n \t$(QUIET)$(foreach p,$(ALL_MSGFILES), $(REMOVE_F0)'$(DESTDIR_SQ)$(msgsdir_SQ)'/$(notdir $p) $(REMOVE_F1) &&) true\n@@ -265,9 +217,6 @@ dist-version: GIT-VERSION-FILE\n clean::\n \t$(RM_RF) $(GITGUI_MAIN) lib/tclIndex po/*.msg $(PO_TEMPLATE)\n \t$(RM_RF) GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS\n-ifdef GITGUI_MACOSXAPP\n-\t$(RM_RF) 'Git Gui.app'* git-gui\n-endif\n ifdef GITGUI_WINDOWS_WRAPPER\n \t$(RM_RF) git-gui\n endif\ndiff --git a/generate-macos-app.sh b/generate-macos-app.sh\ndeleted file mode 100755\nindex 71b9fa6..0000000\n--- a/generate-macos-app.sh\n+++ /dev/null\n@@ -1,30 +0,0 @@\n-#!/bin/sh\n-\n-set -e\n-\n-SOURCE_DIR=\"$1\"\n-OUTPUT=\"$2\"\n-BUILD_OPTIONS=\"$3\"\n-VERSION_FILE=\"$4\"\n-\n-. \"$BUILD_OPTIONS\"\n-. \"$VERSION_FILE\"\n-\n-rm -rf \"$OUTPUT\" \"$OUTPUT+\"\n-\n-mkdir -p \"$OUTPUT+/Contents/MacOS\"\n-mkdir -p \"$OUTPUT+/Contents/Resources/Scripts\"\n-\n-cp \"$TKEXECUTABLE\" \"$OUTPUT+/Contents/MacOS\"\n-cp \"$SOURCE_DIR/macosx/git-gui.icns\" \"$OUTPUT+/Contents/Resources\"\n-sed \\\n-\t-e \"s/@@GITGUI_VERSION@@/$GITGUI_VERSION/g\" \\\n-\t-e \"s/@@GITGUI_TKEXECUTABLE@@/$(basename \"$TKEXECUTABLE\")/g\" \\\n-\t\"$SOURCE_DIR/macosx/Info.plist\" \\\n-\t>\"$OUTPUT+/Contents/Info.plist\"\n-sed \\\n-\t-e \"s|@@gitexecdir@@|$GITGUI_GITEXECDIR|\" \\\n-\t-e \"s|@@GITGUI_LIBDIR@@|$GITGUI_LIBDIR|\" \\\n-\t\"$SOURCE_DIR/macosx/AppMain.tcl\" \\\n-\t>\"$OUTPUT+/Contents/Resources/Scripts/AppMain.tcl\"\n-mv \"$OUTPUT+\" \"$OUTPUT\"\ndiff --git a/generate-macos-wrapper.sh b/generate-macos-wrapper.sh\ndeleted file mode 100755\nindex 0304937..0000000\n--- a/generate-macos-wrapper.sh\n+++ /dev/null\n@@ -1,35 +0,0 @@\n-#!/bin/sh\n-\n-set -e\n-\n-if test \"$#\" -ne 3\n-then\n-\techo >&2 \"usage: $0 <OUTPUT> <BUILD_OPTIONS> <VERSION_FILE>\"\n-\texit 1\n-fi\n-\n-OUTPUT=\"$1\"\n-BUILD_OPTIONS=\"$2\"\n-VERSION_FILE=\"$3\"\n-\n-. \"$BUILD_OPTIONS\"\n-\n-rm -f \"$OUTPUT\" \"$OUTPUT+\"\n-\n-(\n-\techo \"#!$SHELL_PATH\"\n-\tcat \"$BUILD_OPTIONS\" \"$VERSION_FILE\"\n-\tcat <<-'EOF'\n-\tif test \"z$*\" = zversion ||\n-\t   test \"z$*\" = z--version\n-\tthen\n-\t\techo \"git-gui version $GITGUI_VERSION\"\n-\telse\n-\t\tlibdir=\"${GIT_GUI_LIB_DIR:-$GITGUI_LIBDIR}\"\n-\t\texec \"$libdir/Git Gui.app/Contents/MacOS/$(basename \"$TKEXECUTABLE\")\" \"$0\" \"$@\"\n-\tfi\n-\tEOF\n-) >\"$OUTPUT+\"\n-\n-chmod +x \"$OUTPUT+\"\n-mv \"$OUTPUT+\" \"$OUTPUT\"\ndiff --git a/macosx/AppMain.tcl b/macosx/AppMain.tcl\ndeleted file mode 100644\nindex b6c6dc3..0000000\n--- a/macosx/AppMain.tcl\n+++ /dev/null\n@@ -1,29 +0,0 @@\n-set gitexecdir {@@gitexecdir@@}\n-if { [info exists ::env(GIT_GUI_LIB_DIR) ] } {\n-\tset gitguilib $::env(GIT_GUI_LIB_DIR)\n-} else {\n-\tset gitguilib {@@GITGUI_LIBDIR@@}\n-}\n-\n-set env(PATH) \"$gitexecdir:$env(PATH)\"\n-\n-if {[string first -psn [lindex $argv 0]] == 0} {\n-\tlset argv 0 [file join $gitexecdir git-gui]\n-}\n-\n-if {[file tail [lindex $argv 0]] eq {gitk}} {\n-\tset argv0 [lindex $argv 0]\n-\tset AppMain_source $argv0\n-} else {\n-\tset argv0 [file join $gitexecdir [file tail [lindex $argv 0]]]\n-\tset AppMain_source [file join $gitguilib git-gui.tcl]\n-\tif {[info exists env(PWD)]} {\n-\t\tcd $env(PWD)\n-\t} elseif {[pwd] eq {/}} {\n-\t\tcd $env(HOME)\n-\t}\n-}\n-\n-unset gitexecdir gitguilib\n-set argv [lrange $argv 1 end]\n-source $AppMain_source\ndiff --git a/macosx/Info.plist b/macosx/Info.plist\ndeleted file mode 100644\nindex 1ade121..0000000\n--- a/macosx/Info.plist\n+++ /dev/null\n@@ -1,30 +0,0 @@\n-<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n-<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n-<plist version=\"1.0\">\n-<dict>\n-\t<key>CFBundleDevelopmentRegion</key>\n-\t<string>English</string>\n-\t<key>CFBundleExecutable</key>\n-\t<string>@@GITGUI_TKEXECUTABLE@@</string>\n-\t<key>CFBundleGetInfoString</key>\n-\t<string>Git Gui @@GITGUI_VERSION@@ © 2006-2007 Shawn Pearce, et. al.</string>\n-\t<key>CFBundleIconFile</key>\n-\t<string>git-gui.icns</string>\n-\t<key>CFBundleIdentifier</key>\n-\t<string>cz.or.repo.git-gui</string>\n-\t<key>CFBundleInfoDictionaryVersion</key>\n-\t<string>6.0</string>\n-\t<key>CFBundleName</key>\n-\t<string>Git Gui</string>\n-\t<key>CFBundlePackageType</key>\n-\t<string>APPL</string>\n-\t<key>CFBundleShortVersionString</key>\n-\t<string>@@GITGUI_VERSION@@</string>\n-\t<key>CFBundleSignature</key>\n-\t<string>GITg</string>\n-\t<key>CFBundleVersion</key>\n-\t<string>@@GITGUI_VERSION@@</string>\n-\t<key>NSHighResolutionCapable</key>\n-\t<true/>\n-</dict>\n-</plist>\ndiff --git a/macosx/git-gui.icns b/macosx/git-gui.icns\ndeleted file mode 100644\nindex 77d88a77a7669667335cf6fd5767c8b40f3ce6e7..0000000000000000000000000000000000000000\nGIT binary patch\nliteral 0\nHcmV?d00001\n\nliteral 28866\n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\n\ndiff --git a/meson.build b/meson.build\nindex cdae85e..1cedc82 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -19,17 +19,6 @@ build_options_config.set_quoted('GITGUI_LIBDIR', get_option('prefix') / get_opti\n build_options_config.set_quoted('SHELL_PATH', fs.as_posix(shell.full_path()))\n build_options_config.set_quoted('TCLTK_PATH', fs.as_posix(wish.full_path()))\n build_options_config.set_quoted('TCL_PATH', fs.as_posix(tclsh.full_path()))\n-if target_machine.system() == 'darwin'\n-  tkexecutables = [\n-    '/Library/Frameworks/Tk.framework/Resources/Wish.app/Contents/MacOS/Wish',\n-    '/System/Library/Frameworks/Tk.framework/Resources/Wish.app/Contents/MacOS/Wish',\n-    '/System/Library/Frameworks/Tk.framework/Resources/Wish Shell.app/Contents/MacOS/Wish Shell',\n-  ]\n-  tkexecutable = find_program(tkexecutables)\n-  build_options_config.set_quoted('TKEXECUTABLE', tkexecutable.full_path())\n-else\n-  build_options_config.set('TKEXECUTABLE', '')\n-endif\n \n build_options = configure_file(\n   input: 'GIT-GUI-BUILD-OPTIONS.in',\n@@ -70,52 +59,6 @@ if target_machine.system() == 'windows'\n     install: true,\n     install_dir: get_option('libexecdir') / 'git-core',\n   )\n-elif target_machine.system() == 'darwin'\n-  gitgui_main = 'git-gui.tcl'\n-  gitgui_main_install_dir = get_option('datadir') / 'git-gui/lib'\n-\n-  custom_target(\n-    output: 'git-gui',\n-    command: [\n-      shell,\n-      meson.current_source_dir() / 'generate-macos-wrapper.sh',\n-      '@OUTPUT@',\n-      meson.current_build_dir() / 'GIT-GUI-BUILD-OPTIONS',\n-      meson.current_build_dir() / 'GIT-VERSION-FILE',\n-    ],\n-    depends: [\n-      version_file,\n-    ],\n-    depend_files: [\n-      build_options,\n-    ],\n-    install: true,\n-    install_dir: get_option('libexecdir') / 'git-core',\n-  )\n-\n-  custom_target(\n-    output: 'Git Gui.app',\n-    command: [\n-      shell,\n-      meson.current_source_dir() / 'generate-macos-app.sh',\n-      meson.current_source_dir(),\n-      meson.current_build_dir() / 'Git Gui.app',\n-      meson.current_build_dir() / 'GIT-GUI-BUILD-OPTIONS',\n-      meson.current_build_dir() / 'GIT-VERSION-FILE',\n-    ],\n-    depends: [\n-      version_file,\n-    ],\n-    depend_files: [\n-      build_options,\n-      'macosx/AppMain.tcl',\n-      'macosx/Info.plist',\n-      'macosx/git-gui.icns',\n-    ],\n-    build_by_default: true,\n-    install: true,\n-    install_dir: get_option('datadir') / 'git-gui/lib',\n-  )\n endif\n \n custom_target(\n-- \n2.50.1.475.ge15fa7359c\n\n"},{"id":"523079","messageId":"20250731080628.27917-5-carenas@gmail.com","threadId":"63879","inReplyTo":"20250731080628.27917-1-carenas@gmail.com","subject":"[PATCH v2 4/5] git-gui: honor TCLTK_PATH in git-gui--askpass","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2025-07-31T08:06:27Z","receivedAt":"2025-07-31T08:07:53Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"Since its introduction in 8c76212 (git-gui: Add a simple implementation\nof SSH_ASKPASS., 2008-10-15), git-gui--askpass has been calling whatever\nwish interpreter is in the path, unlike git-gui.\n\nCorrect that by turning it into a script that would be processed at build\ntime.\n\nSigned-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n---\n .gitignore                              |  1 +\n Makefile                                |  7 +++++--\n generate-script.sh                      | 22 ++++++++++++++++++++++\n git-gui--askpass => git-gui--askpass.sh |  0\n meson.build                             | 22 ++++++++++++++--------\n 5 files changed, 42 insertions(+), 10 deletions(-)\n create mode 100755 generate-script.sh\n rename git-gui--askpass => git-gui--askpass.sh (100%)\n\ndiff --git a/.gitignore b/.gitignore\nindex ba845f3..5130b4f 100644\n--- a/.gitignore\n+++ b/.gitignore\n@@ -4,4 +4,5 @@ git-gui.tcl\n GIT-GUI-BUILD-OPTIONS\n GIT-VERSION-FILE\n git-gui\n+git-gui--askpass\n lib/tclIndex\ndiff --git a/Makefile b/Makefile\nindex 2ac5f44..2cd160b 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -173,10 +173,13 @@ GIT-GUI-BUILD-OPTIONS: FORCE\n \t@if grep -q '^[A-Z][A-Z_]*=@.*@$$' $@+; then echo \"Unsubstituted build options in $@\" >&2 && exit 1; fi\n \t@if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi\n \n+git-gui--askpass: git-gui--askpass.sh GIT-GUI-BUILD-OPTIONS generate-script.sh\n+\t$(QUIET_GEN)$(SHELL_PATH) generate-script.sh $@ $< ./GIT-GUI-BUILD-OPTIONS\n+\n ifdef GITGUI_WINDOWS_WRAPPER\n all:: git-gui\n endif\n-all:: $(GITGUI_MAIN) lib/tclIndex $(ALL_MSGFILES)\n+all:: $(GITGUI_MAIN) git-gui--askpass lib/tclIndex $(ALL_MSGFILES)\n \n install: all\n \t$(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL_D1)\n@@ -215,7 +218,7 @@ dist-version: GIT-VERSION-FILE\n \t@sed 's|^GITGUI_VERSION=||' <GIT-VERSION-FILE  >$(TARDIR)/version\n \n clean::\n-\t$(RM_RF) $(GITGUI_MAIN) lib/tclIndex po/*.msg $(PO_TEMPLATE)\n+\t$(RM_RF) $(GITGUI_MAIN) git-gui--askpass lib/tclIndex po/*.msg $(PO_TEMPLATE)\n \t$(RM_RF) GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS\n ifdef GITGUI_WINDOWS_WRAPPER\n \t$(RM_RF) git-gui\ndiff --git a/generate-script.sh b/generate-script.sh\nnew file mode 100755\nindex 0000000..0dd2da9\n--- /dev/null\n+++ b/generate-script.sh\n@@ -0,0 +1,22 @@\n+#!/bin/sh\n+\n+set -e\n+\n+if test $# -ne 3\n+then\n+\techo >&2 \"USAGE: $0 <OUTPUT> <INPUT> <GIT-GUI-BUILD-OPTIONS>\"\n+\texit 1\n+fi\n+\n+OUTPUT=\"$1\"\n+INPUT=\"$2\"\n+BUILD_OPTIONS=\"$3\"\n+\n+. \"$BUILD_OPTIONS\"\n+\n+sed \\\n+\t-e \"1s|#!.*/sh|#!$SHELL_PATH|\" \\\n+\t-e \"1,3s|^exec wish|exec '$TCLTK_PATH'|\" \\\n+\t\"$INPUT\" >\"$OUTPUT\"\n+\n+chmod a+x \"$OUTPUT\"\ndiff --git a/git-gui--askpass b/git-gui--askpass.sh\nsimilarity index 100%\nrename from git-gui--askpass\nrename to git-gui--askpass.sh\ndiff --git a/meson.build b/meson.build\nindex 1cedc82..320ba09 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -38,14 +38,6 @@ version_file = custom_target(\n   build_always_stale: true,\n )\n \n-configure_file(\n-  input: 'git-gui--askpass',\n-  output: 'git-gui--askpass',\n-  copy: true,\n-  install: true,\n-  install_dir: get_option('libexecdir') / 'git-core',\n-)\n-\n gitgui_main = 'git-gui'\n gitgui_main_install_dir = get_option('libexecdir') / 'git-core'\n \n@@ -61,6 +53,20 @@ if target_machine.system() == 'windows'\n   )\n endif\n \n+custom_target(\n+  output: 'git-gui--askpass',\n+  input: 'git-gui--askpass.sh',\n+  command: [\n+    shell,\n+    meson.current_source_dir() / 'generate-script.sh',\n+    '@OUTPUT@',\n+    '@INPUT@',\n+    meson.current_build_dir() / 'GIT-GUI-BUILD-OPTIONS',\n+  ],\n+  install: true,\n+  install_dir: get_option('libexecdir') / 'git-core',\n+)\n+\n custom_target(\n   input: 'git-gui.sh',\n   output: gitgui_main,\n-- \n2.50.1.475.ge15fa7359c\n\n"},{"id":"523080","messageId":"20250731080628.27917-6-carenas@gmail.com","threadId":"63879","inReplyTo":"20250731080628.27917-1-carenas@gmail.com","subject":"[PATCH v2 5/5] git-gui: ensure own version of git-gui--askpass is used","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2025-07-31T08:06:28Z","receivedAt":"2025-07-31T08:07:54Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"When finding a location for the askpass helper, git will be asked\nfor its exec path, but if that git is not the same that called\ngit-gui then we might mistakenly point to its helper instead.\n\nAssume that git-gui and the helper are colocated to derive its\npath instead.\n\nThis is specially useful in macOS where a broken version of that\nhelper is provided by the system git.\n\nSuggested-by: Mark Levedahl <mlevedahl@gmail.com>\nSigned-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n---\n git-gui.sh | 4 +++-\n 1 file changed, 3 insertions(+), 1 deletion(-)\n\ndiff --git a/git-gui.sh b/git-gui.sh\nindex 8bb121d..78324db 100755\n--- a/git-gui.sh\n+++ b/git-gui.sh\n@@ -1114,7 +1114,9 @@ citool {\n \n # Suggest our implementation of askpass, if none is set\n if {![info exists env(SSH_ASKPASS)]} {\n-\tset env(SSH_ASKPASS) [file join [git --exec-path] git-gui--askpass]\n+\tset env(SSH_ASKPASS) \\\n+\t\t[file join [file dirname [file normalize $::argv0]] \\\n+\t\t\tgit-gui--askpass]\n }\n \n ######################################################################\n-- \n2.50.1.475.ge15fa7359c\n\n"},{"id":"523091","messageId":"aItIkhAPMuq6tlNS@pks.im","threadId":"63879","inReplyTo":"cb63b63b-4a74-4649-bebb-002d1e6e66f7@kdbg.org","subject":"Re: [PATCH 4/5] git-gui: honor TCLTK_PATH in git-gui--askpass","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-07-31T10:42:26Z","receivedAt":"2025-07-31T10:42:33Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Wed, Jul 30, 2025 at 09:02:50PM +0200, Johannes Sixt wrote:\n> Am 30.07.25 um 18:40 schrieb Carlo Marcelo Arenas Belón:\n> > diff --git a/meson.build b/meson.build\n> > index 1cedc82..320ba09 100644\n> > --- a/meson.build\n> > +++ b/meson.build\n> > @@ -38,14 +38,6 @@ version_file = custom_target(\n> >    build_always_stale: true,\n> >  )\n> >  \n> > -configure_file(\n> > -  input: 'git-gui--askpass',\n> > -  output: 'git-gui--askpass',\n> > -  copy: true,\n> > -  install: true,\n> > -  install_dir: get_option('libexecdir') / 'git-core',\n> > -)\n> > -\n> >  gitgui_main = 'git-gui'\n> >  gitgui_main_install_dir = get_option('libexecdir') / 'git-core'\n> >  \n> > @@ -61,6 +53,20 @@ if target_machine.system() == 'windows'\n> >    )\n> >  endif\n> >  \n> > +custom_target(\n> > +  output: 'git-gui--askpass',\n> > +  input: 'git-gui--askpass.sh',\n> > +  command: [\n> > +    shell,\n> > +    meson.current_source_dir() / 'generate-script.sh',\n> > +    '@OUTPUT@',\n> > +    '@INPUT@',\n> > +    meson.current_build_dir() / 'GIT-GUI-BUILD-OPTIONS',\n> > +  ],\n> > +  install: true,\n> > +  install_dir: get_option('libexecdir') / 'git-core',\n> > +)\n> > +\n> >  custom_target(\n> >    input: 'git-gui.sh',\n> >    output: gitgui_main,\n> \n> I can't comment on the meson part at all.\n\nThe Meson part looks reasonable to me.\n\nPatrick\n"},{"id":"523092","messageId":"aItJetAs7kieT2vC@pks.im","threadId":"63879","inReplyTo":"CAPUEspgpF5=w-=w1zofkO1P3+HYdvRUxZfpnM2pcJGYOOoEmdg@mail.gmail.com","subject":"Re: [PATCH 0/5] git-gui: workaround deprecation of Tcl/TK 8.5 in macOS","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-07-31T10:46:18Z","receivedAt":"2025-07-31T10:46:24Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Wed, Jul 30, 2025 at 04:54:12PM -0700, Carlo Arenas wrote:\n> On Wed, Jul 30, 2025 at 12:09 PM Johannes Sixt <j6t@kdbg.org> wrote:\n> > Any help would be appreciated on the Meson parts\n> \n> The Meson build works when tested outside the git repository, but since the main\n> meson.build doesn't yet use that to build/install git-gui there is no\n> way to do a full\n> test.\n> \n> Eitherway, it can't make things worse.\n\nThe Meson part looks reasonable to me.\n\nIn any case yes, I haven't yet wired up gitk/git-gui in Git itself. It\nis trivial to do in theory, and I've already got the patch series\nsitting locally for quite a while. But there's one catch: we'll have to\nadd those as subprojects, and Meson looks for subprojects in the\n\"subprojects/\" directory. Which means that we'd have to move around both\ngitk and git-gui directories to be located in \"subprojects/\". We can\npick the name of that directory, but it must not be the top-level\ndirectory of the project.\n\nI shied away from sending such a patch series for now because I wasn't\nquite sure how it'll be received. I don't think it's too bad, but it\ncertainly is a bit akward.\n\nPatrick\n"},{"id":"523112","messageId":"c5f382d0-7a65-410a-bfee-ea3829a01087@kdbg.org","threadId":"63879","inReplyTo":"20250731080628.27917-6-carenas@gmail.com","subject":"Re: [PATCH v2 5/5] git-gui: ensure own version of git-gui--askpass is used","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2025-07-31T17:47:43Z","receivedAt":"2025-07-31T17:47:46Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 31.07.25 um 10:06 schrieb Carlo Marcelo Arenas Belón:\n> When finding a location for the askpass helper, git will be asked\n> for its exec path, but if that git is not the same that called\n> git-gui then we might mistakenly point to its helper instead.\n> \n> Assume that git-gui and the helper are colocated to derive its\n> path instead.\n> \n> This is specially useful in macOS where a broken version of that\n> helper is provided by the system git.\n> \n> Suggested-by: Mark Levedahl <mlevedahl@gmail.com>\n> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n> ---\n>  git-gui.sh | 4 +++-\n>  1 file changed, 3 insertions(+), 1 deletion(-)\n> \n> diff --git a/git-gui.sh b/git-gui.sh\n> index 8bb121d..78324db 100755\n> --- a/git-gui.sh\n> +++ b/git-gui.sh\n> @@ -1114,7 +1114,9 @@ citool {\n>  \n>  # Suggest our implementation of askpass, if none is set\n>  if {![info exists env(SSH_ASKPASS)]} {\n> -\tset env(SSH_ASKPASS) [file join [git --exec-path] git-gui--askpass]\n> +\tset env(SSH_ASKPASS) \\\n> +\t\t[file join [file dirname [file normalize $::argv0]] \\\n> +\t\t\tgit-gui--askpass]\n>  }\n>  \n>  ######################################################################\n\nFYI, in my integration branch, this area looks like so without this change:\n\n# Suggest our implementation of askpass, if none is set\nif {![info exists env(SSH_ASKPASS)]} {\n\tset env(SSH_ASKPASS) [file join [git --exec-path] git-gui--askpass]\n}\nif {![info exists env(GIT_ASKPASS)]} {\n\tset env(GIT_ASKPASS) [file join [git --exec-path] git-gui--askpass]\n}\nif {![info exists env(GIT_ASK_YESNO)]} {\n\tset env(GIT_ASK_YESNO) [file join [git --exec-path] git-gui--askyesno]\n}\n\nTo help these other cases, I'll squash the following into this\ncommit:\n\ndiff --git a/git-gui.sh b/git-gui.sh\nindex 78324db2b587..f28a23f844cf 100755\n--- a/git-gui.sh\n+++ b/git-gui.sh\n@@ -1113,11 +1113,11 @@ citool {\n ## execution environment\n \n # Suggest our implementation of askpass, if none is set\n+set argv0dir [file dirname [file normalize $::argv0]]\n if {![info exists env(SSH_ASKPASS)]} {\n-\tset env(SSH_ASKPASS) \\\n-\t\t[file join [file dirname [file normalize $::argv0]] \\\n-\t\t\tgit-gui--askpass]\n+\tset env(SSH_ASKPASS) [file join $argv0dir git-gui--askpass]\n }\n+unset argv0dir\n \n ######################################################################\n ##\n\n\n"}]}