#!/usr/bin/env bash log_content() { echo echo "Content of $1:" cat "$1" } error_handler() { ERR_CODE=$? log_content ./config.log log_content ./test-suite.log log_content ./test-suite-memcheck.log echo echo "Error ${ERR_CODE} with command '${BASH_COMMAND}' on line ${BASH_LINENO[0]}. Exiting." echo exit ${ERR_CODE} } trap error_handler ERR num_cores() { # Check for cores, for systems with: # Line 1. Linux w/ coreutils, or... # Line 2. OpenBSD, FreeBSD, NetBSD or macOS, or... # Line 3. Fallback for Linux w/o coreutils (glibc). nproc \ || sysctl -n hw.ncpu \ || getconf _NPROCESSORS_ONLN 2>/dev/null } ./bootstrap.sh tests=() MAKE="make --quiet -j$(num_cores)" CC="gcc" ARCH="$(uname | tr '[:upper:]' '[:lower:]')" case "$ARCH" in linux*) # Reduced set of configurations for faster CI tests=( # 1. Full build (all features enabled) "--enable-notifications --enable-icons-and-clipboard --enable-otr --enable-pgp --enable-omemo --enable-plugins --enable-c-plugins --enable-python-plugins --with-xscreensaver --enable-omemo-qrcode --enable-gdk-pixbuf" # 2. Minimal build (all optional features disabled) "--disable-notifications --disable-icons-and-clipboard --disable-otr --disable-pgp --disable-omemo --disable-plugins --disable-c-plugins --disable-python-plugins --without-xscreensaver --disable-omemo-qrcode --disable-gdk-pixbuf" # 3. No encryption (disable otr, pgp, omemo) "--disable-pgp --disable-otr --disable-omemo --disable-omemo-qrcode" # 4. No plugins "--disable-plugins --disable-c-plugins --disable-python-plugins" # 5. Default configuration "" ) source /etc/profile.d/debuginfod.sh 2>/dev/null || true ;; darwin*) # Reduced set of configurations for faster CI tests=( # 1. Full build (all features enabled) "--enable-notifications --enable-icons-and-clipboard --enable-otr --enable-pgp --enable-omemo --enable-plugins --enable-c-plugins --enable-python-plugins" # 2. Minimal build (all optional features disabled) "--disable-notifications --disable-icons-and-clipboard --disable-otr --disable-pgp --disable-omemo --disable-plugins --disable-c-plugins --disable-python-plugins" # 3. No encryption (disable otr, pgp, omemo) "--disable-pgp --disable-otr --disable-omemo" # 4. No plugins "--disable-plugins --disable-c-plugins --disable-python-plugins" # 5. Default configuration "" ) ;; openbsd*) MAKE="gmake" # TODO(#1231): # `-std=gnu99 -fexec-charset=UTF-8` to silence: # src/event/server_events.c:1453:19: error: universal character names are only valid in C++ and C99 # src/event/server_events.c:1454:19: error: universal character names are only valid in C++ and C99 CC="egcc -std=gnu99 -fexec-charset=UTF-8" # Reduced set of configurations for faster CI tests=( # 1. Full build (all features enabled) "--enable-notifications --enable-icons-and-clipboard --enable-otr --enable-pgp --enable-omemo --enable-plugins --enable-c-plugins --enable-python-plugins" # 2. Minimal build (all optional features disabled) "--disable-notifications --disable-icons-and-clipboard --disable-otr --disable-pgp --disable-omemo --disable-plugins --disable-c-plugins --disable-python-plugins" # 3. No encryption (disable otr, pgp, omemo) "--disable-pgp --disable-otr --disable-omemo" # 4. No plugins "--disable-plugins --disable-c-plugins --disable-python-plugins" # 5. Default configuration "" ) ;; esac case "$ARCH" in linux*) echo echo "--> Building with ./configure ${tests[0]} --enable-valgrind $*" echo # shellcheck disable=SC2086 ./configure ${tests[0]} --enable-valgrind $* $MAKE CC="${CC}" if grep '^ID=' /etc/os-release | grep -q -e debian; then $MAKE check-valgrind else $MAKE check-valgrind || log_content ./test-suite-memcheck.log fi $MAKE distclean ;; esac for features in "${tests[@]}" do echo echo "--> Building with ./configure ${features} $*" echo # shellcheck disable=SC2086 ./configure $features $* $MAKE CC="${CC}" $MAKE check ./profanity -v $MAKE clean done