#! /usr/bin/env sh
# This script is part of the eix project and distributed under the
# terms of the GNU General Public License v2.
#
# Author and Copyright (c):
#   Martin V\"ath <vaeth@mathematik.uni-wuerzburg.de>
#
# This script gives a structured output of eix -tTc (eix 0.13.3).

DETAILS=false
Eix () {
	if [ -z "`eix '-*Tc' | head -n1`" ]; then
		[ -z "${1}" ] || echo "${1} (or test switched off)."
		return
	fi
	if [ ${#} -le 2 ] || ! ${DETAILS}; then
		echo "
${2}:
"
		eix -Tc
		echo
		return
	fi
	echo "
${2}..."
	shift 2
	local I
	for I; do
		(
			for J; do
				[ "${I}" = "${J}" ] && continue
				eval "export ${J}=false"
			done
			Eix '' "... considered as ${I}"
		)
	done
}

NoKeywords () {
	export \
	REDUNDANT_IF_DOUBLE=false \
	REDUNDANT_IF_MIXED=false \
	REDUNDANT_IF_WEAKER=false \
	REDUNDANT_IF_STRANGE=false \
	REDUNDANT_IF_NO_CHANGE=false \
	REDUNDANT_IF_DOUBLE_LINE=false \
	REDUNDANT_IF_MINUSASTERISK=false
}

NoMask () {
	export \
	REDUNDANT_IF_MASK_NO_CHANGE=false \
	REDUNDANT_IF_DOUBLE_MASKED=false
}

NoUnmask () {
	export \
	REDUNDANT_IF_UNMASK_NO_CHANGE=false \
	REDUNDANT_IF_DOUBLE_UNMASKED=false
}

NoUse () {
	export \
	REDUNDANT_IF_DOUBLE_USE=false
}

NoCflags () {
	export \
	REDUNDANT_IF_DOUBLE_CFLAGS=false
}

NoUninstalled () { export \
	REDUNDANT_IF_IN_KEYWORDS=false \
	REDUNDANT_IF_IN_MASK=false \
	REDUNDANT_IF_IN_UNMASK=false \
	REDUNDANT_IF_IN_USE=false \
	REDUNDANT_IF_IN_CFLAGS=false
}

Repository () {
	local I J C A
	if ${1}; then
		I='with'
	else
		I='without'
	fi
	echo "The following package versions are installed ${I} repository information:"
	if ! cd -- "`eix --print EPREFIX_INSTALLED`"/var/db/pkg >/dev/null 2>&1
	then
		echo "${0##*/}: cannot locate your database of installed packages" >&2
		exit 1
	fi
	echo
	C=0
	( eval '[ "$(( ${C} + 1 ))" = 1 ]' ) >/dev/null 2>&1 \
		&& A='$(( ${C} + 1 ))' || A='`expr "${C}" + 1`'
	for I in *; do
		for J in "${I}"/*; do
			if test -e "${J}/repository"; then
				${1} || continue
			else
				${1} && continue
			fi
			echo "${J}"
			eval "C=${A}"
		done
	done
	if test ${C} -eq 0; then
		echo "none"
	elif test ${C} -ne 1; then
		echo "
(total number of versions listed above: ${C})"
	fi
	exit 0
}

COMMON="`eix --print PORTAGE_CONFIGROOT`"
COMMON="${COMMON}/etc/portage/package."

if [ ${#} -gt 0 ]; then
	case "${1}" in
		detail*|Detail*|DETAIL*) DETAILS=true;;
		no*repo*|No*repo*|No*Repo*|NO*REPO*) Repository false;;
		repo*|Repo*|REPO*) Repository true;;
		*) export CHECK_INSTALLED_OVERLAYS=true;;
	esac
fi
eix '-t*!'

(
	export TEST_FOR_NONEXISTENT=false
	(
		NoMask; NoUnmask; NoUse; NoCflags; NoUninstalled
		Eix "No redundant entries in ${COMMON}keywords" \
			"Redundant in ${COMMON}keywords" \
			REDUNDANT_IF_DOUBLE \
			REDUNDANT_IF_MIXED \
			REDUNDANT_IF_WEAKER \
			REDUNDANT_IF_STRANGE \
			REDUNDANT_IF_NO_CHANGE \
			REDUNDANT_IF_DOUBLE_LINE \
			REDUNDANT_IF_MINUSASTERISK
	)
	NoKeywords
	(
		NoUnmask; NoUse; NoCflags; NoUninstalled
		Eix "No redundant entries in ${COMMON}mask" \
			"Redundant in ${COMMON}mask" \
			REDUNDANT_IF_MASK_NO_CHANGE \
			REDUNDANT_IF_DOUBLE_MASKED
	)
	NoMask
	(
		NoUse; NoCflags; NoUninstalled
		Eix "No redundant entries in ${COMMON}unmask" \
			"Redundant in ${COMMON}unmask" \
			REDUNDANT_IF_UNMASK_NO_CHANGE \
			REDUNDANT_IF_DOUBLE_UNMASKED
	)
	NoUnmask
	(
		NoCflags; NoUninstalled
		Eix "No redundant entries in ${COMMON}use" \
			"Redundant in ${COMMON}use"
	)
	NoUse
	(
		NoUninstalled
		Eix "No redundant entries in ${COMMON}cflags" \
			"Redundant in ${COMMON}cflags"
	)
	NoCflags
	(
		export \
		REDUNDANT_IF_IN_MASK=false \
		REDUNDANT_IF_IN_UNMASK=false \
		REDUNDANT_IF_IN_USE=false \
		REDUNDANT_IF_IN_CFLAGS=false
		Eix "No uninstalled entries in ${COMMON}keywords" \
			"Not installed but in ${COMMON}keywords"
	)
	export REDUNDANT_IF_IN_KEYWORDS=false
	(
		export \
		REDUNDANT_IF_IN_UNMASK=false \
		REDUNDANT_IF_IN_USE=false \
		REDUNDANT_IF_IN_CFLAGS=false
		Eix "No uninstalled entries in ${COMMON}mask" \
			"Not installed but in ${COMMON}mask"
	)
	export REDUNDANT_IF_IN_MASK=false
	(
		export \
		REDUNDANT_IF_IN_USE=false \
		REDUNDANT_IF_IN_CFLAGS=false
		Eix "No uninstalled entries in ${COMMON}unmask" \
			"Not installed but in ${COMMON}unmask"
	)
	export REDUNDANT_IF_IN_UNMASK=false
	(
		export \
		REDUNDANT_IF_IN_CFLAGS=false
		Eix "No uninstalled entries in ${COMMON}use" \
			"Not installed but in ${COMMON}use"
	)
	export \
	REDUNDANT_IF_IN_USE=false
	Eix "No uninstalled entries in ${COMMON}cflags" \
		"Not installed but in ${COMMON}cflags"
)
export \
TEST_FOR_REDUNDANCY=false
Eix "All installed versions of packages are in the database" \
	"Installed packages with a version not in the database (or masked)"
