From 2cfe0541e711be39a47d093cba608c0700d027ec Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Fri, 25 Apr 2025 16:11:28 +0200 Subject: [PATCH 1/2] meson: report detected runtime executable paths Git needs to know about a couple of executable paths to pick at runtime. This includes the system shell, but may also optionally include the Perl and Python interpreters. Meson detects the location of these paths automatically via `find_program()`, which does a lookup via the `PATH` environment variable. As such, it may not be immediately obvious to the developer which paths have been autodetected. Improve this by exposing runtime executable paths at setup time. Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- meson.build | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/meson.build b/meson.build index c47cb79af0..a180c66ee6 100644 --- a/meson.build +++ b/meson.build @@ -2080,3 +2080,9 @@ summary({ 'sha256': sha256_backend, 'zlib': zlib_backend, }, section: 'Backends') + +summary({ + 'perl': target_perl, + 'python': target_python, + 'shell': target_shell, +}, section: 'Runtime executable paths') From 4cba20fbdc68f4f968defc796647b103b72c9609 Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Fri, 25 Apr 2025 16:11:29 +0200 Subject: [PATCH 2/2] meson: prefer shell at "/bin/sh" Meson detects the path of the target shell via `find_program("sh")`, which essentially does a lookup via `PATH`. This may easily lead to a subtly-broken Git distribution when the build host has its shell in a location that the target host doesn't know about. Fix the issue by appending "/bin" to the custom program path, which causes us to prefer "/bin/sh" over a `PATH`-based lookup. While "/bin/sh" isn't standardized, this path tends to work alright on Linux and BSD distributions. Furthermore, "/bin/sh" is also the path we pick in our Makefile by default, which further demonstrates that this shell fulfills our needs. Note that we intentionally append, not prepend, to the custom program path. This is because the program path can be configured by the user via the `-Dsane_tool_path=` build option, which should take precedence over any defaults we pick for the user. Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- meson.build | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/meson.build b/meson.build index a180c66ee6..6a90310a2c 100644 --- a/meson.build +++ b/meson.build @@ -236,7 +236,11 @@ 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) -target_shell = find_program('sh', dirs: program_path, 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 +# supported systems. This path is also the default shell path used by our +# Makefile. This lookup can be overridden via `program_path`. +target_shell = find_program('sh', dirs: program_path + [ '/bin' ], native: false) # Sanity-check that programs required for the build exist. foreach tool : ['cat', 'cut', 'grep', 'sort', 'tr', 'uname']