meson: improve PATH handling

When locating programs required for the build we give some special
treatment to Windows systems so that we know to also look up tools
provided by a Git for Windows installation. This ensures that the build
doesn't have any prerequisites other than Microsoft Visual Studio, Meson
and Git for Windows.

Consequently, some of the programs returned by `find_program()` may not
be found via PATH, but via these extra directories. But while Meson can
use these tools directly without any special treatment, any scripts that
we execute may not be able to find those programs. To help them we thus
prepend the directories of a subset of the found programs to PATH.

This doesn't make much sense though: we don't need to prepend PATH for
any program that was found via PATH, but we really only need to do so
for programs located via the extraneous Windows-specific paths. So
instead of prepending all programs paths, we really only need to prepend
the Windows-specific paths.

Adapt the code accordingly by only prepeding Windows-specific paths to
PATH, which both simplifies the code and clarifies intent.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt
2025-02-26 09:22:18 +01:00
committed by Junio C Hamano
parent eee25bbd84
commit 454d79b61b

View File

@@ -198,19 +198,19 @@ endif
cygpath = find_program('cygpath', dirs: program_path, required: false)
diff = find_program('diff', dirs: program_path)
git = find_program('git', dirs: program_path, required: false)
shell = find_program('sh', dirs: program_path)
tar = find_program('tar', dirs: program_path)
script_environment = environment()
# Sanity-check that programs required for the build exist.
foreach tool : ['cat', 'cut', 'grep', 'sed', 'sort', 'tr', 'uname']
program = find_program(tool, dirs: program_path)
script_environment.prepend('PATH', fs.parent(program.full_path()))
find_program(tool, dirs: program_path)
endforeach
git = find_program('git', dirs: program_path, required: false)
if git.found()
script_environment.prepend('PATH', fs.parent(git.full_path()))
endif
script_environment = environment()
foreach path : program_path
script_environment.prepend('PATH', path)
endforeach
if get_option('sane_tool_path') != ''
script_environment.prepend('PATH', get_option('sane_tool_path'))