diff options
-rw-r--r-- | build-aux/meson-install-script.sh | 6 | ||||
-rwxr-xr-x | build-aux/script-wrapper.sh.in | 6 | ||||
-rw-r--r-- | meson.build | 1 | ||||
-rw-r--r-- | scripts/meson.build | 33 |
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'] |