summaryrefslogtreecommitdiff
path: root/tools/ci-build.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/ci-build.sh')
-rwxr-xr-xtools/ci-build.sh164
1 files changed, 164 insertions, 0 deletions
diff --git a/tools/ci-build.sh b/tools/ci-build.sh
new file mode 100755
index 0000000..caafe32
--- /dev/null
+++ b/tools/ci-build.sh
@@ -0,0 +1,164 @@
+#!/bin/bash
+
+# Copyright © 2015-2018 Collabora Ltd.
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the "Software"), to deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+set -euo pipefail
+set -x
+
+NULL=
+
+# ci_buildsys:
+# Build system under test: autotools is the only option right now
+: "${ci_buildsys:=autotools}"
+
+# ci_docker:
+# If non-empty, this is the name of a Docker image. ci-install.sh will
+# fetch it with "docker pull" and use it as a base for a new Docker image
+# named "ci-image" in which we will do our testing.
+#
+# If empty, we test on "bare metal".
+# Typical values: ubuntu:xenial, debian:jessie-slim
+: "${ci_docker:=}"
+
+# ci_host:
+# See ci-install.sh
+: "${ci_host:=native}"
+
+# ci_parallel:
+# A number of parallel jobs, passed to make -j
+: "${ci_parallel:=1}"
+
+# ci_sudo:
+# If yes, assume we can get root using sudo; if no, only use current user
+: "${ci_sudo:=no}"
+
+# ci_test:
+# If yes, run tests; if no, just build
+: "${ci_test:=yes}"
+
+# ci_test_fatal:
+# If yes, test failures break the build; if no, they are reported but ignored
+: "${ci_test_fatal:=yes}"
+
+# ci_variant:
+# One of debug, reduced, legacy, production
+: "${ci_variant:=production}"
+
+if [ -n "$ci_docker" ]; then
+ exec docker run \
+ --env=ci_buildsys="${ci_buildsys}" \
+ --env=ci_docker="" \
+ --env=ci_host="${ci_host}" \
+ --env=ci_parallel="${ci_parallel}" \
+ --env=ci_sudo=yes \
+ --env=ci_test="${ci_test}" \
+ --env=ci_test_fatal="${ci_test_fatal}" \
+ --env=ci_variant="${ci_variant}" \
+ --privileged \
+ ci-image \
+ tools/ci-build.sh
+fi
+
+maybe_fail_tests () {
+ if [ "$ci_test_fatal" = yes ]; then
+ exit 1
+ fi
+}
+
+# We require dbus-run-session, but it isn't in the version of dbus in
+# Ubuntu 14.04. Take the version from dbus-1.10.0 and alter it to be
+# standalone.
+if ! command -v dbus-run-session >/dev/null; then
+ drsdir="$(mktemp -d -t "d-r-s.XXXXXX")"
+ curl -o "$drsdir/dbus-run-session.c" \
+ "https://cgit.freedesktop.org/dbus/dbus/plain/tools/dbus-run-session.c?h=dbus-1.10.0"
+ sed -e 's/^ //' > "$drsdir/config.h" <<EOF
+ #include <stdlib.h>
+
+ #define VERSION "1.10.0~local"
+ #define dbus_setenv my_dbus_setenv
+
+ static inline int
+ my_dbus_setenv (const char *name, const char *value)
+ {
+ if (value)
+ return !setenv (name, value, 1);
+ else
+ return !unsetenv (name);
+ }
+EOF
+ cc -I"${drsdir}" -o"${drsdir}/dbus-run-session" \
+ "${drsdir}/dbus-run-session.c" \
+ $(pkg-config --cflags --libs dbus-1) \
+ ${NULL}
+ export PATH="${drsdir}:$PATH"
+
+ # Force the build to be run even though dbus is less than version 1.8.
+ export DBUS_CFLAGS="$(pkg-config --cflags dbus-1)"
+ export DBUS_LIBS="$(pkg-config --libs dbus-1)"
+fi
+
+NOCONFIGURE=1 ./autogen.sh
+
+srcdir="$(pwd)"
+mkdir ci-build-${ci_variant}-${ci_host}
+cd ci-build-${ci_variant}-${ci_host}
+
+make="make -j${ci_parallel} V=1 VERBOSE=1"
+
+case "$ci_buildsys" in
+ (autotools)
+ case "$ci_variant" in
+ (debug)
+ set _ "$@"
+ set "$@" --enable-tests
+ shift
+ # The test coverage for OOM-safety is too
+ # verbose to be useful on travis-ci.
+ export DBUS_TEST_MALLOC_FAILURES=0
+ ;;
+
+ (*)
+ ;;
+ esac
+
+ ../configure \
+ --enable-installed-tests \
+ --enable-maintainer-mode \
+ "$@"
+
+ ${make}
+ [ "$ci_test" = no ] || ${make} check || maybe_fail_tests
+ cat test/test-suite.log || :
+ [ "$ci_test" = no ] || ${make} distcheck || maybe_fail_tests
+
+ ${make} install DESTDIR=$(pwd)/DESTDIR
+ ( cd DESTDIR && find . )
+
+ if [ "$ci_sudo" = yes ] && [ "$ci_test" = yes ]; then
+ sudo ${make} install
+ fi
+ ;;
+esac
+
+# vim:set sw=4 sts=4 et: