# small script for the maintainer to scan all build logs

nl='
'
test $# -ge 1 || set -- /var/cache/pbuilder/result-*/mksh_*.build
for fn in "$@"; do
	test -s "$fn" || continue
	echo "[1;34;40m= ${fn}[0m"
	llc=$(sed --posix -n \
	    -e '/^D:loglibc:start(\([^)]*\)) \(.*\) initialising$/s//vs=v\1 \2/p' \
	    -e '/^D:loglibc:final(\([^)]*\)) \(.*\) finishing$/s//vt=v\1 \2/p' \
	    "$fn" | sed --posix 's/ \([a-z][a-z0-9_]*=\)/\nvv\1/g' | sed --posix \
	    -e 's!_(\([0-9]*\)_unexpected)f!f/\1u!' \
	    -e 's/RTCHK/rtchk/g' -e 's/MTEST/mtest/g' \
	    -e 's/testsuite-failed/ts-fail/g' \
	    -e 's/passed-but-notty/no-ctty/g' \
	    -e 's/succeeded-tested/success/g' \
	    -e 's/_([^) ]*)//' \
	    -e "s/'/'\\\\''/g" -e 's/=\(.*\)$/='\''\1'\''/')
	case $nl$llc in (*"${nl}vs="*"${nl}vs="*)
		echo >&2 "W: multiple loglibc:start lines; log is fishy: $fn" ;;
	esac
	case $nl$llc in (*"${nl}vt="*"${nl}vt="*)
		echo >&2 "W: multiple loglibc:final lines; log is fishy: $fn" ;;
	esac
	vs= vt= vvarch= vvbred= vvsystem=
	vvmksh_klibc= vvmksh_musl= vvmksh_dietlibc= vvmksh_glibc=
	vvlksh_klibc= vvlksh_musl= vvlksh_dietlibc= vvlksh_glibc=
	eval "$llc"
	if test -z "$vs"; then
		vs=$vt vvarch= vvbred=
	fi
	if test -z "$vt"; then
		vt=$vs vvsystem=
		vvmksh_klibc= vvmksh_musl= vvmksh_dietlibc= vvmksh_glibc=
		vvlksh_klibc= vvlksh_musl= vvlksh_dietlibc= vvlksh_glibc=
	fi
	case x$vvbred in
	x|x0)
		bred=
		;;
	x1)
		bred=';31'
		;;
	*)
		echo >&2 "W: invalid bred ($vvbred); log is fishy: $fn"
		bred=';5'
		;;
	esac
	test x"$vs" = x"$vt" || echo >&2 "W: version difference" \
	    "($vs) vs. ($vt); log is fishy: $fn"
	vsn=${vs#v}
	(column -ts')' | sed --posix \
	    -e 's/✓[^ ]*/[1;30;40m&/g' \
	    -e 's/？[^ ]*/[33;40m&/g' \
	    -e 's/⁇[^ ]*/[35,40m&/g' \
	    -e 's/✘[^ ]*/[1;31;40m&/g' \
	    -e 's/✗[^ ]*/[31;40m&/g' \
	    -e 's/☒[^ ]*/[1;35;40m&/g' \
	    -e 's/✔[^ ]*/[1;32;40m&/g' \
	    -e 's/\( ↑[^(]*\)(\([^ ]*\) /[1;30;40m\1 [0'$bred';1m\2 /' \
	    -e '1s/^/[0;4m/' -e '1s/  */&| /g' -e '1s/$/   /' \
	    -e '2,$s/  */[0m&| /g' -e 's/$/[0m/') <<EOF
sh\libc)system${vvarch:+/$vvarch})klibc)musl)dietlibc)glibc
mksh)$vvsystem)$vvmksh_klibc)$vvmksh_musl)$vvmksh_dietlibc)$vvmksh_glibc
lksh) ↑ version($vsn)$vvlksh_klibc)$vvlksh_musl)$vvlksh_dietlibc)$vvlksh_glibc
EOF
done
