2018-12-07 11:49:51 +03:00
#!/bin/bash
# Run this script from the root of the systemd's git repository
# or set REPO_ROOT to a correct path.
#
# Example execution on Fedora:
# dnf install docker
# systemctl start docker
# export CONT_NAME="my-fancy-container"
# travis-ci/managers/debian.sh SETUP RUN CLEANUP
PHASES = ( ${ @ :- SETUP RUN RUN_ASAN CLEANUP } )
DEBIAN_RELEASE = " ${ DEBIAN_RELEASE :- testing } "
CONT_NAME = " ${ CONT_NAME :- debian - $DEBIAN_RELEASE - $RANDOM } "
DOCKER_EXEC = " ${ DOCKER_EXEC :- docker exec -it $CONT_NAME } "
DOCKER_RUN = " ${ DOCKER_RUN :- docker run } "
REPO_ROOT = " ${ REPO_ROOT :- $PWD } "
ADDITIONAL_DEPS = ( python3-libevdev python3-pyparsing clang)
function info( ) {
echo -e " \033[33;1m $1 \033[0m "
}
set -e
source " $( dirname $0 ) /travis_wait.bash "
for phase in " ${ PHASES [@] } " ; do
case $phase in
SETUP)
info "Setup phase"
info " Using Debian $DEBIAN_RELEASE "
2018-12-08 23:49:52 +03:00
printf " FROM debian: $DEBIAN_RELEASE \nRUN bash -c 'apt-get -y update && apt-get install -y systemd'\n " | docker build -t debian-with-systemd/latest -
2018-12-07 11:49:51 +03:00
info " Starting container $CONT_NAME "
$DOCKER_RUN -v $REPO_ROOT :/build:rw \
-w /build --privileged= true --name $CONT_NAME \
2019-03-05 07:44:11 +03:00
-dit --net= host debian-with-systemd/latest /bin/systemd
2018-12-07 11:49:51 +03:00
$DOCKER_EXEC bash -c " echo deb-src http://deb.debian.org/debian $DEBIAN_RELEASE main >>/etc/apt/sources.list "
$DOCKER_EXEC apt-get -y update
$DOCKER_EXEC apt-get -y build-dep systemd
$DOCKER_EXEC apt-get -y install " ${ ADDITIONAL_DEPS [@] } "
; ;
2018-12-24 06:03:40 +03:00
RUN| RUN_CLANG)
if [ [ " $phase " = "RUN_CLANG" ] ] ; then
ENV_VARS = "-e CC=clang -e CXX=clang++"
fi
docker exec $ENV_VARS -it $CONT_NAME meson --werror -Dtests= unsafe -Dslow-tests= true -Dsplit-usr= true build
2018-12-07 11:49:51 +03:00
$DOCKER_EXEC ninja -v -C build
2018-12-24 06:44:47 +03:00
docker exec -e " TRAVIS= $TRAVIS " -it $CONT_NAME ninja -C build test
2018-12-07 11:49:51 +03:00
; ;
RUN_ASAN| RUN_CLANG_ASAN)
if [ [ " $phase " = "RUN_CLANG_ASAN" ] ] ; then
ENV_VARS = "-e CC=clang -e CXX=clang++"
MESON_ARGS = "-Db_lundef=false" # See https://github.com/mesonbuild/meson/issues/764
fi
docker exec $ENV_VARS -it $CONT_NAME meson --werror -Dtests= unsafe -Db_sanitize= address,undefined -Dsplit-usr= true $MESON_ARGS build
$DOCKER_EXEC ninja -v -C build
# Never remove halt_on_error from UBSAN_OPTIONS. See https://github.com/systemd/systemd/commit/2614d83aa06592aedb.
travis_wait docker exec --interactive= false \
-e UBSAN_OPTIONS = print_stacktrace = 1:print_summary= 1:halt_on_error= 1 \
-e ASAN_OPTIONS = strict_string_checks = 1:detect_stack_use_after_return= 1:check_initialization_order= 1:strict_init_order= 1 \
-e " TRAVIS= $TRAVIS " \
-t $CONT_NAME \
meson test --timeout-multiplier= 3 -C ./build/ --print-errorlogs
; ;
CLEANUP)
info "Cleanup phase"
docker stop $CONT_NAME
docker rm -f $CONT_NAME
; ;
*)
echo >& 2 " Unknown phase ' $phase ' "
exit 1
esac
done