- #!/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
|