meson: make non-symlink scripts install for real, and use a better wrapper
We now generate the scripts using their real name, install them using meson's builtin facility instead of an install_script, and generate the wrapper scripts in the root of the build directory, instead of a subdirectory. This gets us closer to resolving FS#64394. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
349c22d043
commit
49a8e90bc7
@ -18,7 +18,6 @@ EXTRA_DIST = \
|
||||
HACKING test/tap.sh \
|
||||
meson.build meson_options.txt \
|
||||
build-aux/edit-script.sh.in \
|
||||
build-aux/meson-install-script.sh \
|
||||
build-aux/meson-make-symlink.sh \
|
||||
build-aux/script-wrapper.sh.in
|
||||
|
||||
|
@ -1,6 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
built_script=$1
|
||||
dest_path=$2
|
||||
|
||||
install -Dm755 "$built_script" "$DESTDIR/$dest_path"
|
16
meson.build
16
meson.build
@ -32,7 +32,6 @@ SED = find_program('sed')
|
||||
DU = find_program('du')
|
||||
LDCONFIG = get_option('ldconfig')
|
||||
MESON_MAKE_SYMLINK = join_paths(meson.source_root(), 'build-aux/meson-make-symlink.sh')
|
||||
MESON_INSTALL_SCRIPT = join_paths(meson.source_root(), 'build-aux/meson-install-script.sh')
|
||||
|
||||
BASH = find_program('bash4', 'bash')
|
||||
if BASH.found()
|
||||
@ -366,6 +365,21 @@ executable(
|
||||
install : true,
|
||||
)
|
||||
|
||||
foreach wrapper : script_wrappers
|
||||
cdata = configuration_data()
|
||||
cdata.set_quoted('BASH', BASH.path())
|
||||
cdata.set_quoted('BUILDDIR', wrapper[2])
|
||||
cdata.set_quoted('REAL_PROGPATH', wrapper[1].full_path())
|
||||
|
||||
# Create a wrapper script that bootstraps the real script within the build
|
||||
# directory. Use configure_file instead of a custom_target to ensure that
|
||||
# permissions on the input script wrapper are preserved.
|
||||
configure_file(
|
||||
input : join_paths(meson.source_root(), 'build-aux', 'script-wrapper.sh.in'),
|
||||
output : wrapper[0],
|
||||
configuration : cdata)
|
||||
endforeach
|
||||
|
||||
configure_file(
|
||||
input : 'etc/makepkg.conf.in',
|
||||
output : 'makepkg.conf',
|
||||
|
@ -26,42 +26,38 @@ foreach script : scripts
|
||||
install_dir : get_option('bindir'))
|
||||
endforeach
|
||||
|
||||
script_wrappers = []
|
||||
foreach script : wrapped_scripts
|
||||
script_shortname = script.split('.')[0]
|
||||
|
||||
# Build the script, but don't install it. We want to keep it as a "private"
|
||||
# artifact that we reference from a wrapper script in order to bootstrap it
|
||||
# the build directory.
|
||||
internal_script = custom_target(
|
||||
script,
|
||||
input : script,
|
||||
command : [ SCRIPT_EDITOR, '@INPUT@', '@OUTPUT@', '0755'],
|
||||
output : script,
|
||||
build_by_default : true)
|
||||
|
||||
cdata = configuration_data()
|
||||
cdata.set_quoted('BASH', BASH.path())
|
||||
cdata.set_quoted('BUILDDIR', meson.current_build_dir())
|
||||
cdata.set_quoted('REAL_PROGPATH', internal_script.full_path())
|
||||
|
||||
# Create a wrapper script that bootstraps the real script within the build
|
||||
# directory. Use configure_file instead of a custom_target to ensure that
|
||||
# permissions on the input script wrapper are preserved.
|
||||
configure_file(
|
||||
input : join_paths(meson.source_root(), 'build-aux', 'script-wrapper.sh.in'),
|
||||
output : script_shortname,
|
||||
configuration : cdata)
|
||||
install : true,
|
||||
install_dir : BINDIR)
|
||||
|
||||
# Install the real script
|
||||
meson.add_install_script(MESON_INSTALL_SCRIPT,
|
||||
internal_script.full_path(),
|
||||
join_paths(BINDIR, script_shortname))
|
||||
script_wrappers += [[ script_shortname, internal_script, meson.current_build_dir() ]]
|
||||
|
||||
if script_shortname == 'repo-add'
|
||||
repo_add = internal_script
|
||||
endif
|
||||
endforeach
|
||||
|
||||
foreach symlink : ['repo-remove', 'repo-elephant']
|
||||
meson.add_install_script(MESON_MAKE_SYMLINK,
|
||||
'repo-add',
|
||||
join_paths(BINDIR, symlink))
|
||||
|
||||
internal_script = custom_target(
|
||||
symlink,
|
||||
build_by_default : true,
|
||||
command : ['ln', '-sf', 'repo-add', '@OUTPUT@'],
|
||||
depends : repo_add,
|
||||
output : symlink)
|
||||
|
||||
script_wrappers += [[ symlink, internal_script, meson.current_build_dir() ]]
|
||||
endforeach
|
||||
|
||||
subdir('libmakepkg')
|
||||
|
Loading…
Reference in New Issue
Block a user