#!/bin/sh
set -e
set -x

#check for and install missing dependencies
./contrib/ci/fwupd_setup_helpers.py install-dependencies --yes -o ubuntu

#check we have pip
./contrib/ci/fwupd_setup_helpers.py install-pip --yes -o ubuntu

#check meson is new enough
./contrib/ci/fwupd_setup_helpers.py test-meson

#check markdown is new enough
./contrib/ci/fwupd_setup_helpers.py test-markdown

#check jinja2 is installed
./contrib/ci/fwupd_setup_helpers.py test-jinja2

#clone test firmware if necessary
. ./contrib/ci/get_test_firmware.sh

#evaluate using Ubuntu's buildflags
#evaluate using Debian/Ubuntu's buildflags
#disable link time optimization, Ubuntu currently only sets it for GCC
export DEB_BUILD_MAINT_OPTIONS="optimize=-lto"
eval "$(dpkg-buildflags --export=sh)"
#filter out -Bsymbolic-functions
LDFLAGS=$(dpkg-buildflags --get LDFLAGS | sed "s/-Wl,-Bsymbolic-functions\s//")
export LDFLAGS

root=$(pwd)
export BUILD=${root}/build
rm -rf ${BUILD}
chown -R nobody ${root}
sudo -u nobody meson ${BUILD} \
    -Db_coverage=true \
    -Dman=false \
    -Ddocs=enabled \
    -Dlibxmlb:gtkdoc=false \
    --prefix=${root}/target
#build with clang
sudo -u nobody ninja -C ${BUILD} -v
sudo -u nobody meson test -C ${BUILD} --print-errorlogs --verbose

# check meson install tags look fine
./contrib/ci/check-meson-install-tags.py -C "$BUILD" check

# check we've not become a CPU or memory hog
ninja -C ${BUILD} install -v
./contrib/ci/check-rss.py --limit 3072 ${BUILD}/src/fwupdtool get-devices
./contrib/ci/check-cpu.py --limit 350 ${BUILD}/src/fwupdtool get-devices

# check for unused symbols
./contrib/ci/check-unused.py

# check the daemon aborts
set +e
FWUPD_SYSCALL_FILTER=systemd ${BUILD}/src/fwupd --immediate-exit
if [ $? -ne 1 ]; then
    echo "failed to detect missing syscall filtering"
    exit 1
fi

#make docs available outside of docker
mkdir -p ${root}/dist/share
mv ${root}/target/share/doc ${root}/dist/share

# generate coverage report
ninja -C ${BUILD} coverage-xml
cp ${BUILD}/meson-logs/coverage.xml .
