146 lines
3.5 KiB
Bash
Executable File
146 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# This script is sourced from here:
|
|
# https://gitlab.freedesktop.org/whot/meson-helper
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
#
|
|
# Usage:
|
|
# meson-build.sh
|
|
# [-C directory] ... change to directory before doing anything
|
|
# [--skip-build] ... skip the compilation
|
|
# [--skip-test|--run-test] ... skip or explicitly run meson test
|
|
# [--skip-dist|--run-dist] ... skip or explicitly run meson dist
|
|
# [--skip-install|--run-install] ... skip or explicitly run meson install
|
|
#
|
|
#
|
|
# Environment variables:
|
|
# If the .meson_environment file exists in $PWD, it is sourced at the start of the script.
|
|
# This file is sourced before the -C directory option takes effect.
|
|
#
|
|
# MESON_BUILDDIR
|
|
# MESON_ARGS, MESON_EXTRA_ARGS:
|
|
# Args passed to meson setup. The MESON_EXTRA_ARGS exist to make it easier for
|
|
# callers to have a default set of arguments and a variable set of arguments.
|
|
# MESON_TEST_ARGS, MESON_DIST_ARGS, MESON_INSTALL_ARGS:
|
|
# Args passed directly to the respective meson command. If these args are set it implies
|
|
# --run-$cmd. Use --skip-$cmd to skip.
|
|
# NINJA_ARGS - args passed to ninja via meson compile
|
|
|
|
set -x
|
|
if [[ -f .meson_environment ]]; then
|
|
. .meson_environment
|
|
fi
|
|
|
|
# If test args are set, we assume we want to run the tests
|
|
MESON_RUN_TEST="$MESON_TEST_ARGS"
|
|
MESON_RUN_INSTALL="$MESON_INSTALL_ARGS"
|
|
MESON_RUN_DIST="$MESON_DIST_ARGS"
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-C)
|
|
directory=$2
|
|
shift 2
|
|
pushd "$directory" || exit 1
|
|
;;
|
|
--skip-setup)
|
|
shift
|
|
MESON_SKIP_SETUP="1"
|
|
;;
|
|
--skip-build)
|
|
shift
|
|
MESON_SKIP_BUILD="1"
|
|
;;
|
|
--skip-test)
|
|
shift
|
|
MESON_RUN_TEST=""
|
|
;;
|
|
--run-test)
|
|
shift
|
|
MESON_RUN_TEST="1"
|
|
;;
|
|
--skip-dist)
|
|
shift
|
|
MESON_RUN_DIST=""
|
|
;;
|
|
--run-dist)
|
|
shift
|
|
MESON_RUN_DIST="1"
|
|
;;
|
|
--skip-install)
|
|
shift
|
|
MESON_RUN_INSTALL=""
|
|
;;
|
|
--run-install)
|
|
shift
|
|
MESON_RUN_INSTALL="1"
|
|
;;
|
|
*)
|
|
echo "Unknow commandline argument $1"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ -z "$MESON_BUILDDIR" ]]; then
|
|
echo "\$MESON_BUILDDIR undefined."
|
|
exit 1
|
|
fi
|
|
|
|
# emulate a few gitlab variables to make it easier to
|
|
# run and debug locally.
|
|
if [[ -z "$CI_JOB_ID" ]] || [[ -z "$CI_JOB_NAME" ]]; then
|
|
echo "Missing \$CI_JOB_ID or \$CI_JOB_NAME".
|
|
CI_PROJECT_NAME=$(basename "$PWD")
|
|
CI_JOB_ID=$(date +%s)
|
|
CI_JOB_NAME="$CI_PROJECT_NAME-job-local"
|
|
echo "Simulating gitlab environment: "
|
|
echo " CI_JOB_ID=$CI_JOB_ID"
|
|
echo " CI_JOB_NAME=$CI_JOB_NAME"
|
|
fi
|
|
|
|
if [[ -n "$FDO_CI_CONCURRENT" ]]; then
|
|
jobcount="-j$FDO_CI_CONCURRENT"
|
|
export MESON_TESTTHREADS="$FDO_CI_CONCURRENT"
|
|
fi
|
|
|
|
if [[ -n "$MESON_EXTRA_ARGS" ]]; then
|
|
MESON_ARGS="$MESON_ARGS $MESON_EXTRA_ARGS"
|
|
fi
|
|
|
|
echo "*************************************************"
|
|
echo "builddir: $MESON_BUILDDIR"
|
|
echo "meson args: $MESON_ARGS"
|
|
echo "ninja args: $NINJA_ARGS"
|
|
echo "meson test args: $MESON_TEST_ARGS"
|
|
echo "job count: ${jobcount-0}"
|
|
echo "*************************************************"
|
|
|
|
set -e
|
|
|
|
if [[ -z "$MESON_SKIP_SETUP" ]]; then
|
|
rm -rf "$MESON_BUILDDIR"
|
|
meson setup "$MESON_BUILDDIR" $MESON_ARGS
|
|
fi
|
|
meson configure "$MESON_BUILDDIR"
|
|
|
|
if [[ -z "$MESON_SKIP_BUILD" ]]; then
|
|
if [[ -n "$NINJA_ARGS" ]]; then
|
|
ninja_args="--ninja-args $NINJA_ARGS"
|
|
fi
|
|
meson compile -v -C "$MESON_BUILDDIR" $jobcount $ninja_args
|
|
fi
|
|
|
|
if [[ -n "$MESON_RUN_TEST" ]]; then
|
|
meson test -C "$MESON_BUILDDIR" --print-errorlogs $MESON_TEST_ARGS
|
|
fi
|
|
|
|
if [[ -n "$MESON_RUN_INSTALL" ]]; then
|
|
meson install --no-rebuild -C "$MESON_BUILDDIR" $MESON_INSTALL_ARGS
|
|
fi
|
|
|
|
if [[ -n "$MESON_RUN_DIST" ]]; then
|
|
meson dist -C "$MESON_BUILDDIR" $MESON_DIST_ARGS
|
|
fi
|