From bcdab9d9c0a2d42dd39bcdb52a72e62007b6d96a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 4 Oct 2024 18:19:58 +0200 Subject: [PATCH] ci: Make --destdir option in install-meson-project cumulative When building a system extension for GNOME OS, any extra dependencies are needed both in the container (for building) and the extension's destdir (for running). Because of that, the --destdir flag that was added in commit 8aeb6dc86 does not only install to the specified directory as expected, but also runs a second install step without destdir (i.e. to the system). However that behavior is not a good fit when we extend our existing toolbox tooling to build system extensions for Fedora instead of GNOME OS. To account for that, make the --destdir option cumulative and install the project to all provided destdirs (or / if omitted). This gives us the flexibility to install to the system, a different destdir, or both: ``` $ ./install-meson-project.sh # install to system $ ./install-meson-project.sh --destdir /new/dest # install to destdir $ ./install-meson-project.sh --destdir /new/dest --destdir / # both ``` Part-of: --- .../install-gnomeos-sysext-dependencies.sh | 2 +- .gitlab-ci/install-meson-project.sh | 22 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.gitlab-ci/install-gnomeos-sysext-dependencies.sh b/.gitlab-ci/install-gnomeos-sysext-dependencies.sh index c3b537838..731614086 100755 --- a/.gitlab-ci/install-gnomeos-sysext-dependencies.sh +++ b/.gitlab-ci/install-gnomeos-sysext-dependencies.sh @@ -11,6 +11,6 @@ DESTDIR="$(realpath $1)" LIBDIR="lib/$(gcc -print-multiarch)" # Install common dependencies -./$SCRIPTS_DIR/install-common-dependencies.sh --libdir=$LIBDIR --destdir=$DESTDIR +./$SCRIPTS_DIR/install-common-dependencies.sh --libdir=$LIBDIR --destdir=$DESTDIR --destdir=/ # Install below missing dependencies that are exclusive to GNOME OS diff --git a/.gitlab-ci/install-meson-project.sh b/.gitlab-ci/install-meson-project.sh index bcc67cf9e..8afd4079e 100755 --- a/.gitlab-ci/install-meson-project.sh +++ b/.gitlab-ci/install-meson-project.sh @@ -13,7 +13,8 @@ usage() { --subdir=DIR Build subdirectory instead of whole project --prepare=SCRIPT Script to run before build --libdir=DIR Setup the project with a different libdir - --destdir=DIR Install the project to an additional destdir + --destdir=DIR Install the project to DIR, can be used + several times to install to multiple destdirs -h, --help Display this help @@ -36,7 +37,7 @@ unset TEMP MESON_OPTIONS=() SUBDIR=. PREPARE=: -DESTDIR="" +DESTDIRS=() while true; do case "$1" in @@ -61,7 +62,7 @@ while true; do ;; --destdir) - DESTDIR=$2 + DESTDIRS+=( $2 ) shift 2 ;; @@ -85,6 +86,8 @@ fi REPO_URL="$1" COMMIT="$2" +[[ ${#DESTDIRS[@]} == 0 ]] && DESTDIRS+=( / ) + CHECKOUT_DIR=$(mktemp --directory) trap "rm -rf $CHECKOUT_DIR" EXIT @@ -94,10 +97,11 @@ pushd "$CHECKOUT_DIR/$SUBDIR" sh -c "$PREPARE" meson setup --prefix=/usr _build "${MESON_OPTIONS[@]}" -# Install it to an additional directory e.g., system extension directory -if [ -n "${DESTDIR}" ]; then - sudo meson install -C _build --destdir=$DESTDIR -fi - -sudo meson install -C _build +# Install it to all specified dest dirs +for destdir in "${DESTDIRS[@]}"; do + # don't use --destdir when installing to root, + # so post-install hooks are run + [[ $destdir == / ]] && destdir= + sudo meson install -C _build ${destdir:+--destdir=$destdir} +done popd