diff options
Diffstat (limited to 'tools/ci-build.sh')
-rwxr-xr-x | tools/ci-build.sh | 164 |
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: |