#!/bin/bash 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 -h, --help Display this help EOF } die() { echo "$@" >&2 exit 1 } find_toplevel() { while true; do grep -qs '\' meson.build && break [[ $(pwd) -ef / ]] && die "Error: No meson toplevel found" cd .. done } needs_reconfigure() { [[ ${#MESON_OPTIONS[*]} > 0 ]] && [[ -d $BUILD_DIR ]] } # load defaults . $CONFIG_FILE TOOLBOX=$DEFAULT_TOOLBOX TEMP=$(getopt \ --name $(basename $0) \ --options 't:D:h' \ --longoptions 'toolbox:' \ --longoptions 'dist' \ --longoptions 'help' \ -- "$@") eval set -- "$TEMP" unset TEMP MESON_OPTIONS=() while true; do case $1 in -t|--toolbox) TOOLBOX=$2 shift 2 ;; --dist) RUN_DIST=1 shift ;; -D) MESON_OPTIONS+=(-D$2) shift 2 ;; -h|--help) usage exit 0 ;; --) shift break ;; esac done find_toplevel BUILD_DIR=build-$TOOLBOX [[ $RUN_DIST ]] && DIST="meson dist -C $BUILD_DIR" || DIST=: needs_reconfigure && RECONFIGURE=--reconfigure toolbox run --container $TOOLBOX sh -c " meson setup --prefix=/usr $RECONFIGURE ${MESON_OPTIONS[*]} $BUILD_DIR && meson compile -C $BUILD_DIR && sudo meson install -C $BUILD_DIR && $DIST "