#!/usr/bin/env bash
#
# finddeps - find packages that depend on a given depname
#
# License: Unspecified

. "$(librelib messages)"

usage() {
	print 'Usage: %s DEPNAME' "${0##*/}"
	print '   or: %s {-h|--help}' "${0##*/}"
	print 'Find packages that depend on a given depname.'
	echo
	prose 'Run this script from the top-level directory of your ABS tree.'
	echo
	print "Options:"
	flag \
		"-h, --help" "Show this message"
}

mode=run
if ! args="$(getopt -n "${0##*/}" -o 'h' -l 'help' -- "$@")"; then
	mode=errusage
else
	eval "set -- $args"
	while true; do
		flag=$1
		shift
		case "$flag" in
			-h | --help) mode=usage ;;
			--) break ;;
			*) panic 'unhandled flag: %q' "$flag" ;;
		esac
	done
	if [[ $mode == run && $# -ne 1 ]]; then
		gnuerror 'expected 1 non-flag argument, got %d' "$#"
		mode=errusage
	fi
fi
case "$mode" in
	errusage)
		print "Try '%s --help' for more information." "${0##*/}" >&2
		exit $EXIT_INVALIDARGUMENT
		;;
	usage)
		usage
		exit $EXIT_SUCCESS
		;;
	run) : ;;
	*) panic 'invalid mode: %q' "$mode" ;;
esac

match=$1

find . -type d | while read -r d; do
	if [[ -f "$d/PKGBUILD" ]]; then
		pkgname=() depends=() makedepends=() optdepends=()
		# shellcheck source=PKGBUILD.proto
		. "$d/PKGBUILD"
		for dep in "${depends[@]}"; do
			# lose the version comparator, if any
			depname=${dep%%[<>=]*}
			[[ $depname = "$match" ]] && echo "$d (depends)"
		done
		for dep in "${makedepends[@]}"; do
			# lose the version comparator, if any
			depname=${dep%%[<>=]*}
			[[ $depname = "$match" ]] && echo "$d (makedepends)"
		done
		for dep in "${optdepends[@]/:*}"; do
			# lose the version comaparator, if any
			depname=${dep%%[<>=]*}
			[[ $depname = "$match" ]] && echo "$d (optdepends)"
		done
	fi
done
