From d230ec6f17a2b64ed61936013234414c74e7c29f Mon Sep 17 00:00:00 2001 From: Dave Reisner Date: Sun, 28 Oct 2018 02:42:53 -0400 Subject: meson: add a wrapper to bootstrap scripts from within build dir This doesn't do quite as good of a job of "hiding away" the real script as we did with autotools, but it satisfies the need for being able to run scripts which depend on libmakepkg with the local copy within the repo. We do, however, improve upon the autotools script by ensuring that the bash path used in configuring pacman is the interpreter used to run the underlying script. --- build-aux/meson-install-script.sh | 6 ++++++ build-aux/script-wrapper.sh.in | 6 ++++++ meson.build | 1 + scripts/meson.build | 33 +++++++++++++++++++++++++++++---- 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 build-aux/meson-install-script.sh create mode 100755 build-aux/script-wrapper.sh.in 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'] -- cgit v1.2.3-24-g4f1b