#!/bin/bash
#
# Copyright 2004-2024 Free Software Foundation, Inc.
# Contributed by Ben Elliston <bje@gnu.org>.
#
# This test reads 5-tuples from config-guess.data: the components of
# the simulated uname(1) output and the expected GNU system triplet.

set -eu
verbose=false
PATH=$(pwd):$PATH

run_config_guess()
{
	local -i rc=0
	while IFS='|' read -r machine release system version processor triplet ; do
		sed \
			-e "s,@MACHINE@,$machine," \
			-e "s,@RELEASE@,$release," \
			-e "s,@SYSTEM@,$system," \
			-e "s,@VERSION@,$version," \
			-e "s,@PROCESSOR@,$processor," > ./uname << EOF
#!/bin/sh
test \$# -ne 1 && exec sh \$0 -s
test \$1 = -m && echo "@MACHINE@" && exit 0
test \$1 = -r && echo "@RELEASE@" && exit 0
test \$1 = -s && echo "@SYSTEM@" && exit 0
test \$1 = -v && echo "@VERSION@" && exit 0
test \$1 = -p && echo "@PROCESSOR@" && exit 0
EOF
		chmod +x uname
		output=$(CC_FOR_BUILD=no_compiler_found sh -eu ../config.guess 2>/dev/null)
		if test $? != 0 ; then
			echo "FAIL: unable to guess $machine:$release:$system:$version"
			rc=1
			continue
		fi
		if test "$output" != "$triplet" ; then
			echo "FAIL: $output (expected $triplet)"
			rc=1
			continue
		fi
		$verbose && echo "PASS: $triplet"
	done
	return $rc
}

if sed 's, | ,|,g' < config-guess.data | run_config_guess ; then
	numtests=$(wc -l config-guess.data | cut -d' ' -f1)
	$verbose || echo "PASS: config.guess checks ($numtests tests)"
else
	echo "Unexpected failures."
	exit 1
fi

exit 0
