meson: fix installation when -Dlibexexdir is set

commit 837f637cf5 ("meson.build: correct setting of GIT_EXEC_PATH",
2025-05-19) corrected the GIT_EXEC_PATH build setting, but then forgot
to update the installation path for the library executables. This causes
a regression when attempting to execute commands, after installing to a
non-standard location (reported here[1]):

    $ meson -Dprefix=/tmp/git -Dlibexecdir=libexec-different build
    $ meson install
    $ /tmp/git/bin/git --exec-path
    /tmp/git/libexec-different
    $ /tmp/git/bin/git daemon
    git: 'daemon' is not a git command. See 'git --help'

In order to fix the issue, use the 'git_exec_path' variable (calculated
while processing -Dlibexecdir) as the 'install_dir' field during the
installation of the library executables.

[1]: <66fd343a-1351-4350-83eb-c797e47b7693@gmail.com>

Reported-by: irecca.kun@gmail.com
Signed-off-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ramsay Jones
2025-07-16 00:32:38 +01:00
committed by Junio C Hamano
parent 16bd9f20a4
commit 586919c3b2

View File

@@ -1744,7 +1744,7 @@ git_builtin = executable('git',
sources: builtin_sources + 'git.c', sources: builtin_sources + 'git.c',
dependencies: [libgit_commonmain], dependencies: [libgit_commonmain],
install: true, install: true,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
) )
bin_wrappers += git_builtin bin_wrappers += git_builtin
@@ -1752,35 +1752,35 @@ test_dependencies += executable('git-daemon',
sources: 'daemon.c', sources: 'daemon.c',
dependencies: [libgit_commonmain], dependencies: [libgit_commonmain],
install: true, install: true,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
) )
test_dependencies += executable('git-sh-i18n--envsubst', test_dependencies += executable('git-sh-i18n--envsubst',
sources: 'sh-i18n--envsubst.c', sources: 'sh-i18n--envsubst.c',
dependencies: [libgit_commonmain], dependencies: [libgit_commonmain],
install: true, install: true,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
) )
bin_wrappers += executable('git-shell', bin_wrappers += executable('git-shell',
sources: 'shell.c', sources: 'shell.c',
dependencies: [libgit_commonmain], dependencies: [libgit_commonmain],
install: true, install: true,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
) )
test_dependencies += executable('git-http-backend', test_dependencies += executable('git-http-backend',
sources: 'http-backend.c', sources: 'http-backend.c',
dependencies: [libgit_commonmain], dependencies: [libgit_commonmain],
install: true, install: true,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
) )
bin_wrappers += executable('scalar', bin_wrappers += executable('scalar',
sources: 'scalar.c', sources: 'scalar.c',
dependencies: [libgit_commonmain], dependencies: [libgit_commonmain],
install: true, install: true,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
) )
if curl.found() if curl.found()
@@ -1796,14 +1796,14 @@ if curl.found()
sources: 'remote-curl.c', sources: 'remote-curl.c',
dependencies: [libgit_curl], dependencies: [libgit_curl],
install: true, install: true,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
) )
test_dependencies += executable('git-http-fetch', test_dependencies += executable('git-http-fetch',
sources: 'http-fetch.c', sources: 'http-fetch.c',
dependencies: [libgit_curl], dependencies: [libgit_curl],
install: true, install: true,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
) )
if expat.found() if expat.found()
@@ -1811,7 +1811,7 @@ if curl.found()
sources: 'http-push.c', sources: 'http-push.c',
dependencies: [libgit_curl], dependencies: [libgit_curl],
install: true, install: true,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
) )
endif endif
@@ -1822,7 +1822,7 @@ if curl.found()
) )
install_symlink(alias + executable_suffix, install_symlink(alias + executable_suffix,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
pointing_to: 'git-remote-http', pointing_to: 'git-remote-http',
) )
endforeach endforeach
@@ -1832,7 +1832,7 @@ test_dependencies += executable('git-imap-send',
sources: 'imap-send.c', sources: 'imap-send.c',
dependencies: [ use_curl_for_imap_send ? libgit_curl : libgit_commonmain ], dependencies: [ use_curl_for_imap_send ? libgit_curl : libgit_commonmain ],
install: true, install: true,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
) )
foreach alias : [ 'git-receive-pack', 'git-upload-archive', 'git-upload-pack' ] foreach alias : [ 'git-receive-pack', 'git-upload-archive', 'git-upload-pack' ]
@@ -1842,7 +1842,7 @@ foreach alias : [ 'git-receive-pack', 'git-upload-archive', 'git-upload-pack' ]
) )
install_symlink(alias + executable_suffix, install_symlink(alias + executable_suffix,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
pointing_to: 'git', pointing_to: 'git',
) )
endforeach endforeach
@@ -1856,9 +1856,9 @@ foreach symlink : [
'scalar', 'scalar',
] ]
if meson.version().version_compare('>=1.3.0') if meson.version().version_compare('>=1.3.0')
pointing_to = fs.relative_to(get_option('libexecdir') / 'git-core' / symlink, get_option('bindir')) pointing_to = fs.relative_to(git_exec_path / symlink, get_option('bindir'))
else else
pointing_to = '../libexec/git-core' / symlink pointing_to = '..' / git_exec_path / symlink
endif endif
install_symlink(symlink, install_symlink(symlink,
@@ -1898,7 +1898,7 @@ foreach script : scripts_sh
meson.project_build_root() / 'GIT-BUILD-OPTIONS', meson.project_build_root() / 'GIT-BUILD-OPTIONS',
], ],
install: true, install: true,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
) )
endforeach endforeach
@@ -1931,7 +1931,7 @@ if perl_features_enabled
input: perl_header_template, input: perl_header_template,
output: 'GIT-PERL-HEADER', output: 'GIT-PERL-HEADER',
configuration: { configuration: {
'GITEXECDIR_REL': get_option('libexecdir') / 'git-core', 'GITEXECDIR_REL': git_exec_path,
'PERLLIBDIR_REL': perllibdir, 'PERLLIBDIR_REL': perllibdir,
'LOCALEDIR_REL': get_option('datadir') / 'locale', 'LOCALEDIR_REL': get_option('datadir') / 'locale',
'INSTLIBDIR': perllibdir, 'INSTLIBDIR': perllibdir,
@@ -1955,7 +1955,7 @@ if perl_features_enabled
output: fs.stem(script), output: fs.stem(script),
command: generate_perl_command, command: generate_perl_command,
install: true, install: true,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
depends: [git_version_file], depends: [git_version_file],
) )
test_dependencies += generated_script test_dependencies += generated_script
@@ -1964,9 +1964,9 @@ if perl_features_enabled
bin_wrappers += generated_script bin_wrappers += generated_script
if meson.version().version_compare('>=1.3.0') if meson.version().version_compare('>=1.3.0')
pointing_to = fs.relative_to(get_option('libexecdir') / 'git-core' / fs.stem(script), get_option('bindir')) pointing_to = fs.relative_to(git_exec_path / fs.stem(script), get_option('bindir'))
else else
pointing_to = '../libexec/git-core' / fs.stem(script) pointing_to = '..' / git_exec_path / fs.stem(script)
endif endif
install_symlink(fs.stem(script), install_symlink(fs.stem(script),
@@ -1996,7 +1996,7 @@ if python.found()
'@OUTPUT@', '@OUTPUT@',
], ],
install: true, install: true,
install_dir: get_option('libexecdir') / 'git-core', install_dir: git_exec_path,
) )
test_dependencies += generated_python test_dependencies += generated_python
endforeach endforeach
@@ -2030,7 +2030,7 @@ mergetools = [
] ]
foreach mergetool : mergetools foreach mergetool : mergetools
install_data(mergetool, install_dir: get_option('libexecdir') / 'git-core' / 'mergetools') install_data(mergetool, install_dir: git_exec_path / 'mergetools')
endforeach endforeach
if intl.found() if intl.found()