diff options
| author | Patrick Steinhardt <ps@pks.im> | 2025-04-25 16:11:29 +0200 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2025-04-25 09:54:39 -0700 |
| commit | 4cba20fbdc68f4f968defc796647b103b72c9609 (patch) | |
| tree | 5014c02df3a95cd2a8d8b2ebc68072c304739692 | |
| parent | meson: report detected runtime executable paths (diff) | |
| download | git-4cba20fbdc68f4f968defc796647b103b72c9609.tar.gz git-4cba20fbdc68f4f968defc796647b103b72c9609.zip | |
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 <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
| -rw-r--r-- | meson.build | 6 |
1 files changed, 5 insertions, 1 deletions
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'] |
