#!/usr/bin/env atf-sh

. $(atf_get_srcdir)/test_env.sh
init_tests \
	funcs_check_CBUILD \
	funcs_check_missing_gcc \
	funcs_check_missing_apk \
	funcs_check_missing_git \
	funcs_check_env_set_but_empty \
	funcs_check_defconfig

FUNCS=$(atf_get_srcdir)/../functions.sh

funcs_check_CBUILD_body() {
	atf_check -s exit:0 \
		-o not-empty \
		-e empty \
		sh -e -c " . $FUNCS; echo \"\$CBUILD\""
}

funcs_check_missing_gcc_body() {
	atf_check -s exit:0 \
		sh -e -c "CC=false; . $FUNCS && test -z \"$CBUILD\""
}

funcs_check_missing_apk_body() {
	atf_check -s exit:1 \
		-e match:"Unable to deduce build architecture" \
		sh -e -c "APK=false; . $FUNCS && test -z \"$CBUILD\""
}

funcs_check_missing_git_body() {
	atf_check -s exit:0 \
		-o empty \
		-e empty \
		sh -e -c "GIT=false . $FUNCS"
}

funcs_check_env_set_but_empty_body() {
	for arch in aarch64 armv7 armhf ppc64le s390x x86 x86_64; do
		for var in CC CXX HOSTCC HOSTCXX HOSTLD BUILDCC BUILDCXX BUILDLD; do
			cat >script<<-EOF
				unset $var
				CHOST=$arch
				. $FUNCS
				if [ -n "\${$var+set}" ] && [ -z "\$$var" ]; then
					echo '$var set but empty ($arch)'
				fi
			EOF
			atf_check -s exit:0 \
				-o empty \
				-e empty \
				sh script
		done
	done
}

funcs_check_defconfig_body() {
	echo "CFLAGS=defcflags" > def.conf
	echo "CFLAGS=syscflags" > etc.conf
	echo "CFLAGS=usercflags" > user.conf

	unset CFLAGS

	# test /usr/share/abuild/default.conf
	ABUILD_DEFCONF="$PWD"/def.conf ABUILD_CONF=/dev/null ABUILD_USERCONF=/dev/null \
		atf_check -o match:"defcflags" \
		sh -e -c " . $FUNCS; echo \"\$CFLAGS\""

	# test /etc/abuild.conf
	ABUILD_DEFCONF=/dev/null ABUILD_CONF="$PWD"/etc.conf ABUILD_USERCONF=/dev/null \
		atf_check \
		-o match:"syscflags" \
		sh -e -c " . $FUNCS; echo \"\$CFLAGS\""

	# user config ($HOME/.abuild/abuild.conf) wins over /etc/abuild.conf
	ABUILD_DEFCONF="$PWD"/def.conf ABUILD_CONF="$PWD/etc.conf" ABUILD_USERCONF="$PWD/user.conf" \
	atf_check \
		-o match:"usercflags" \
		sh -e -c " . $FUNCS; echo \"\$CFLAGS\""

	# environment wins
	ABUILD_DEFCONF="$PWD"/def.conf ABUILD_CONF="$PWD/etc.conf" ABUILD_USERCONF="$PWD/user.conf" \
		CFLAGS="envcflags" atf_check \
		-o match:"envcflags" \
		sh -e -c " . $FUNCS; echo \"\$CFLAGS\""
}
