#!/bin/sh

uname=`which uname`
uname_fake="$uname-fake"
uname_fake_relative="uname-fake"
uname_real="$uname-real"
do_makedir="0"
if [ -L "$uname" ]; then
	if realpath "$uname" | grep -q coreutils; then
		uname_fake="/usr/lib/uname_fake/wrapper"
		uname_fake_relative="../lib/uname_fake/wrapper"
		uname_real="/usr/lib/uname_fake/uname"
		do_makedir="1"
	else
		exit 0
	fi
fi

kvers="$1"
if [ "$kvers" = "" ]; then
	echo "$0: missing parameter: (faked) kernel version. Aborting"
	exit 1
fi
if [ ! -d "/lib/modules/$kvers" ]; then
	echo "$0: Kernel version $kvers is not installed. Aborting"
	exit 2
fi
if [ "$uname" = "" ]; then
	echo "$0: missing uname binary: Fix manually. Aborting"
	exit 3
fi
if [ -x "$uname_real" ]; then
	echo "$0: uname already moved to $uname_real. Fix manually. Aborting"
	exit 3
fi

set -e

if [ "$do_makedir" = '1' ]; then
	mkdir -p `dirname "$uname_fake"`
fi
cat <<EOF >"$uname_fake"
#!/bin/sh
UNAME_REAL="$uname_real"
RELEASE_WANTED="$kvers"
release=\`\$UNAME_REAL -r\`
output=\`\$UNAME_REAL "\$@"\`
rc=\$?
echo "\$output" | sed -e "s/\$release/\$RELEASE_WANTED/"
exit \$rc
EOF
chmod +x "$uname_fake"
mv "$uname" "$uname_real"
if [ "$do_makedir" = '1' ]; then
	rm "$uname_real"
	ln -s ln -s ../cargo/bin/coreutils/uname "$uname_real"
fi
ln -s "$uname_fake_relative" "$uname"
