#!/bin/sh -efu

bad_deps='/etc/init\.d\(.*\)
/etc/rc\.d/init\.d\((daemon|killproc|pidof)\)
/lib64/udev
/lib64/udev/rules\.d
/sbin/post_ldconfig
/sbin/postun_ldconfig
/usr/sbin/install_info
/usr/sbin/uninstall_info
XFree86-.*
fileutils
initscripts
libmesa-devel
pam_stack\.so
sh-utils
textutils
xorg-devel
xorg-x11-devel
.*\(GLIBC_PRIVATE\).*'

bad_prereqs='/sbin/install-info
/sbin/ldconfig'

# check for unacceptable dependencies
check_deps()
{
	local f="$1" && shift || return 1
	local rc=0
	local bad

	local rpm_deps
	rpm_deps=$(printf '%s\n%s\n%s\n%s\n' "$rpm_requires" "$rpm_provides" "$rpm_obsoletes" "$rpm_conflicts")

	if bad=$(printf %s "$rpm_deps" |grep '[$%]'); then
		FileError "invalid dependencies: $(oneliner "$bad")" "$f"
		rc=1
	fi

	if bad=$(printf %s "$rpm_requires" |cut -d' ' -f1 |egrep -x "$bad_deps"); then
		FileError "forbidden requires: $(oneliner "$bad")" "$f"
		rc=1
	fi

	# 2^6: RPMSENSE_PREREQ
	# 2^8: RPMSENSE_INTERP
	# 2^9: RPMSENSE_SCRIPT_PRE
	# 2^10: RPMSENSE_SCRIPT_POST
	# 2^11: RPMSENSE_SCRIPT_PREUN
	# 2^12: RPMSENSE_SCRIPT_POSTUN
	# 2^13: RPMSENSE_SCRIPT_VERIFY
	# 2^16: RPMSENSE_TRIGGERIN
	# 2^17: RPMSENSE_TRIGGERUN
	# 2^18: RPMSENSE_TRIGGERPOSTUN
	# 2^6+2^8+2^9+2^10+2^11+2^12+2^13+2^16+2^17+2^18 = 474944
	bad=$(printf %s "$rpm_requires" |
		awk 'and($2,474944)>0 {print $1}' |
		egrep -x "$bad_prereqs" |
		sort -u)
	if [ -n "$bad" ]; then
		FileError "forbidden prerequires: $(oneliner "$bad")" "$f"
		rc=1
	fi

	[ -n "${rpm_name##kernel-*}" ] ||
		return $rc

	if bad=$(printf %s "$rpm_deps" |cut -d' ' -f1 |egrep '^kernel-(image|modules)'); then
		FileError "forbidden dependencies: $(oneliner "$bad")" "$f"
		rc=1
	fi

	return $rc
}

run_check() {
	if ! check_deps "$1"; then
		CheckError 'package dependencies violation'
		return 1
	fi
}
