#!/bin/bash -xe
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License version 2 as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along
|
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
#
|
|
# AUTHORS
|
|
# Maciek Borzecki <maciek.borzecki (at] gmail.com>
|
|
|
|
# Travis build script. The script reexecs itself inside the container (setting
|
|
# IN_CONTAINER=1). The proceeds to install build dependencies and runs through
|
|
# the whole build process. Source tree is bind-mounted at /mnt and the container
|
|
# has its workdir set to /mnt
|
|
#
|
|
# NOTE: it is assumed that the script is run while at the top of source tree
|
|
# (i.e. $PWD is your checked out tree, this crucial for properly mounting the
|
|
# source code into the container).
|
|
|
|
deps_fedora() {
|
|
dnf install --best -y --refresh \
|
|
meson \
|
|
pkgconfig \
|
|
gcc \
|
|
vala \
|
|
gobject-introspection-devel \
|
|
json-glib-devel \
|
|
libgee-devel \
|
|
gnutls-devel \
|
|
libnotify-devel \
|
|
at-spi2-core-devel \
|
|
gtk3-devel \
|
|
glib-networking \
|
|
tree \
|
|
uncrustify \
|
|
diffutils
|
|
}
|
|
|
|
deps_opensuse() {
|
|
zypper install -y \
|
|
make \
|
|
meson \
|
|
pkgconfig \
|
|
gcc \
|
|
vala \
|
|
gobject-introspection-devel \
|
|
json-glib-devel \
|
|
libgee-devel \
|
|
gnutls-devel \
|
|
libnotify-devel \
|
|
at-spi2-core-devel \
|
|
gtk3-devel \
|
|
glib-networking \
|
|
tree \
|
|
uncrustify
|
|
}
|
|
|
|
deps_archlinux() {
|
|
pacman -Syu --noconfirm \
|
|
base-devel \
|
|
meson \
|
|
pkg-config \
|
|
gcc \
|
|
vala \
|
|
glib2 \
|
|
gobject-introspection \
|
|
json-glib \
|
|
libgee \
|
|
libnotify \
|
|
at-spi2-core \
|
|
gtk3 \
|
|
gnutls \
|
|
glib-networking \
|
|
tree \
|
|
uncrustify
|
|
}
|
|
|
|
deps_ubuntu() {
|
|
apt-get update && \
|
|
apt-get install -y \
|
|
meson \
|
|
pkg-config \
|
|
valac \
|
|
libgirepository1.0-dev \
|
|
libjson-glib-dev \
|
|
libgee-0.8-dev \
|
|
libgnutls28-dev \
|
|
libnotify-dev \
|
|
libgtk-3-dev \
|
|
glib-networking \
|
|
tree \
|
|
uncrustify
|
|
}
|
|
|
|
install_deps() {
|
|
case "$1" in
|
|
fedora)
|
|
deps_fedora
|
|
;;
|
|
opensuse)
|
|
deps_opensuse
|
|
;;
|
|
archlinux)
|
|
deps_archlinux
|
|
;;
|
|
ubuntu-bionic)
|
|
deps_ubuntu
|
|
;;
|
|
*)
|
|
echo "unsupported distro $1"
|
|
exit 1
|
|
esac
|
|
}
|
|
|
|
build() {
|
|
set -ex
|
|
./extra/fmt check || {
|
|
echo "WARNING: code formatting check failed"
|
|
[ -z "${SUPPRESS_FMT}" ] && false
|
|
}
|
|
|
|
mkdir -p build && \
|
|
cd build && \
|
|
meson .. && \
|
|
ninja && \
|
|
ninja test \
|
|
|| false
|
|
|
|
DESTDIR=$PWD/install-dir ninja install
|
|
(cd install-dir; LC_ALL=C tree -pan . > ../current-tree)
|
|
diff -up ../extra/install-tree current-tree
|
|
}
|
|
|
|
build_in_container() {
|
|
install_deps "$1"
|
|
|
|
# distro specific quirks
|
|
case "$1" in
|
|
ubuntu-*|opensuse|fedora)
|
|
echo "$1 is using an outdated version of uncrustify, suppress formatting errors"
|
|
export SUPPRESS_FMT=1
|
|
;;
|
|
esac
|
|
|
|
build
|
|
}
|
|
|
|
spin_container() {
|
|
case "$1" in
|
|
fedora)
|
|
DOCKER_IMG=fedora
|
|
;;
|
|
archlinux)
|
|
DOCKER_IMG=archlinux
|
|
;;
|
|
opensuse)
|
|
DOCKER_IMG=opensuse/tumbleweed
|
|
;;
|
|
ubuntu-bionic)
|
|
DOCKER_IMG=ubuntu:bionic
|
|
;;
|
|
*)
|
|
echo "unsupported distro $1"
|
|
exit 1
|
|
esac
|
|
|
|
engine="docker"
|
|
if ! command -v "$engine" 2>/dev/null ; then
|
|
engine="podman"
|
|
fi
|
|
# run a container, mount sources at /mnt, st
|
|
"$engine" run --rm \
|
|
-v "$PWD":/mnt \
|
|
-w /mnt \
|
|
-e IN_CONTAINER=1 \
|
|
"$DOCKER_IMG" \
|
|
/mnt/extra/travis-build "$@"
|
|
}
|
|
|
|
if [ -z "$NO_BUILD" ]; then
|
|
if [ "$IN_CONTAINER" = "1" ]; then
|
|
build_in_container "$@"
|
|
else
|
|
spin_container "$@"
|
|
fi
|
|
fi
|