summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build-aux/meson-install-script.sh6
-rwxr-xr-xbuild-aux/script-wrapper.sh.in6
-rw-r--r--meson.build1
-rw-r--r--scripts/meson.build33
4 files changed, 42 insertions, 4 deletions
diff --git a/build-aux/meson-install-script.sh b/build-aux/meson-install-script.sh
new file mode 100644
index 00000000..f5a42fca
--- /dev/null
+++ b/build-aux/meson-install-script.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+built_script=$1
+dest_path=$2
+
+install -Dm755 "$built_script" "$DESTDIR/$dest_path"
diff --git a/build-aux/script-wrapper.sh.in b/build-aux/script-wrapper.sh.in
new file mode 100755
index 00000000..f87ae6f0
--- /dev/null
+++ b/build-aux/script-wrapper.sh.in
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+# This script serves as a trampoline for running scripts which depend on
+# libmakepkg with the libmakepkg within the build tree.
+
+LIBRARY=@BUILDDIR@/libmakepkg exec @BASH@ -$- @REAL_PROGPATH@ "$@"
diff --git a/meson.build b/meson.build
index 95895300..8837816f 100644
--- a/meson.build
+++ b/meson.build
@@ -33,6 +33,7 @@ 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()
diff --git a/scripts/meson.build b/scripts/meson.build
index 1fe3fb78..535eccba 100644
--- a/scripts/meson.build
+++ b/scripts/meson.build
@@ -24,14 +24,39 @@ m4_edit = generator(
capture : true)
foreach script : scripts
- custom_target(
+ 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 : m4_edit.process(script),
command : [ SCRIPT_EDITOR, '@INPUT@', '@OUTPUT@', '0755'],
- output : script.split('.')[0],
+ output : script,
depend_files : library_files,
- install : true,
- install_dir : get_option('bindir'))
+ build_by_default : true)
+
+ # Create a wrapper script that bootstraps the real script within the build
+ # directory.
+ custom_target(
+ 'wrap_@0@'.format(script_shortname),
+ input : join_paths(meson.source_root(), 'build-aux', 'script-wrapper.sh.in'),
+ output : script_shortname,
+ build_by_default : true,
+ command : [
+ SED,
+ '-e', 's,@BASH@,"@0@",'.format(BASH.path()),
+ '-e', 's,@BUILDDIR@,"@0@",'.format(meson.current_build_dir()),
+ '-e', 's,@REAL_PROGPATH@,"@0@",'.format(internal_script.full_path()),
+ '@INPUT@',
+ ],
+ capture : true)
+
+ # Install the real script
+ meson.add_install_script(MESON_INSTALL_SCRIPT,
+ internal_script.full_path(),
+ join_paths(BINDIR, script_shortname))
endforeach
foreach symlink : ['repo-remove', 'repo-elephant']