gnome-shell/tools/toolbox/meson-build.sh
Florian Müllner 886481beb1 tools/toolbox: Install sysext dependencies if necessary
While the toolbox image itself has all necessary dependencies to
build and run the shell, we still need them in the destdir when
building a system extension.

Achieve this by running .gitlab-ci/install-common-dependencies.sh
if it exists, which is the script that is used both for gnome-os
system extensions and mutter's CI image.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3498>
2024-12-05 12:57:30 +00:00

149 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
set -e
DEFAULT_TOOLBOX=gnome-shell-devel
CONFIG_FILE=${XDG_CONFIG_HOME:-$HOME/.config}/gnome-shell-toolbox-tools.conf
usage() {
cat <<-EOF
Usage: $(basename $0) [OPTION…]
Build and install a meson project in a toolbox
Options:
-t, --toolbox=TOOLBOX Use TOOLBOX instead of the default "$DEFAULT_TOOLBOX"
-Dkey=val Option to pass to meson setup
--dist Run meson dist
--reconfigure Reconfigure the project
--wipe Wipe build directory and reconfigure
--sysext Install to separate target suitable for systemd-sysext
-h, --help Display this help
EOF
}
die() {
echo "$@" >&2
exit 1
}
find_toplevel() {
while true; do
grep -qs '\<project\>' meson.build && break
[[ $(pwd) -ef / ]] && die "Error: No meson toplevel found"
cd ..
done
}
setup_command() {
if [[ ${#MESON_OPTIONS[*]} > 0 && -d $BUILD_DIR ]]; then
RECONFIGURE=--reconfigure
fi
echo -n "meson setup --prefix=/usr $RECONFIGURE $WIPE ${MESON_OPTIONS[*]} $BUILD_DIR"
}
compile_command() {
echo -n "meson compile -C $BUILD_DIR"
}
install_command() {
local destdir=${BUILD_SYSEXT:+/var/lib/extensions/$TOOLBOX}
local install_deps=.gitlab-ci/install-common-dependencies.sh
if [[ $BUILD_SYSEXT && -x $install_deps ]]; then
echo -n "$install_deps --destdir $destdir && "
fi
if [[ $destdir || ! $RUN_DIST ]]; then
echo -n "sudo meson install -C $BUILD_DIR ${destdir:+--destdir=$destdir}"
else
echo -n :
fi
}
dist_command() {
if [[ $RUN_DIST ]]; then
echo -n "meson dist -C $BUILD_DIR --include-subprojects"
else
echo -n :
fi
}
# load defaults
. $CONFIG_FILE
TOOLBOX=$DEFAULT_TOOLBOX
TEMP=$(getopt \
--name $(basename $0) \
--options 't:D:h' \
--longoptions 'toolbox:' \
--longoptions 'dist' \
--longoptions 'reconfigure' \
--longoptions 'wipe' \
--longoptions 'sysext' \
--longoptions 'help' \
-- "$@") || die "Run $(basename $0) --help to see available options"
eval set -- "$TEMP"
unset TEMP
MESON_OPTIONS=()
while true; do
case $1 in
-t|--toolbox)
TOOLBOX=$2
shift 2
;;
--dist)
RUN_DIST=1
shift
;;
--reconfigure)
RECONFIGURE=--reconfigure
shift
;;
--wipe)
WIPE=--wipe
shift
;;
--sysext)
BUILD_SYSEXT=1
shift
;;
-D)
MESON_OPTIONS+=(-D$2)
shift 2
;;
-h|--help)
usage
exit 0
;;
--)
shift
break
;;
esac
done
BUILD_DIR=build-$TOOLBOX
find_toplevel
toolbox run --container $TOOLBOX sh -c "
$(setup_command) &&
$(compile_command) &&
$(install_command) &&
$(dist_command)"