#!/bin/bash

#
# .travis-functions.sh:
#   - helper functions to be sourced from .travis.yml
#   - designed to respect travis' environment but testing locally is possible
#

if [ ! -f "configure.ac" ]; then
	echo ".travis-functions.sh must be sourced from source dir" >&2
	return 1 || exit 1
fi

# some config settings
MAKE="make -j4"
DUMP_CONFIG_LOG="short"

# We could test (exotic) out-of-tree build dirs using relative or abs paths.
# After sourcing this script we are living in build dir. Tasks for source dir
# have to use $SOURCE_DIR.
SOURCE_DIR="."
BUILD_DIR="."
CONFIGURE="$SOURCE_DIR/configure"

mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR" || return 1 || exit 1

function configure_travis
{
	"$CONFIGURE" "$@"
	err=$?
	if [ "$DUMP_CONFIG_LOG" = "short" ]; then
		grep -B1 -A10000 "^## Output variables" config.log | grep -v "_FALSE="
	elif [ "$DUMP_CONFIG_LOG" = "full" ]; then
		cat config.log
	fi
	return $err
}

function check_nonroot
{
	configure_travis \
		--disable-use-tty-group \
		--with-python \
		--enable-all-programs \
		--enable-gtk-doc \
		|| return
	$MAKE || return
	$MAKE check || return
	$MAKE install DESTDIR=/tmp/dest || return
}

function check_root
{
	configure_travis \
		--with-python \
		--enable-all-programs \
		|| return
	$MAKE || return
	$MAKE check TS_COMMAND="true" || return
	sudo -E $MAKE check TS_OPTS='--parallel=1' || return
	sudo $MAKE install || return
}

function check_dist
{
	configure_travis \
		|| return
	$MAKE distcheck || return
}

function travis_before_script
{
	pushd "$SOURCE_DIR" || return
	set -o xtrace

	./autogen.sh
	ret=$?

	# workaround for broken pylibmount install relink
	[ $ret -eq 0 ] && \
		sed -i 's/\(link_all_deplibs\)=no/\1=unknown/' ./configure

	set +o xtrace
	popd
	return $ret
}

function travis_script
{
	local ret
	set -o xtrace

	case "$MAKE_CHECK" in
	nonroot)
		check_nonroot
		;;
	root)
		check_root
		;;
	dist)
		check_dist
		;;
	*)
		echo "error, check environment (travis.yml)" >&2
		false
		;;
	esac

	# We exit here with case-switch return value!
	ret=$?
	set +o xtrace
	return $ret
}

function travis_after_script
{
	local diff_dir
	local tmp

	# find diff dir from check as well as from distcheck
	diff_dir=$(find -type d -a -name "diff" | grep "tests/diff" | head -n 1)
	if [ -d "$diff_dir" ]; then
		tmp=$(find "$diff_dir" -type f | sort)
		echo -en "dump test diffs:\n${tmp}\n"
		echo "$tmp" | xargs -r cat
	fi
}
