#!/bin/bash

# Find out which packages are depended upon by the .h files of the
# given package.

PACKAGE="$1"
HEADERS="`dpkg -L "$PACKAGE" | grep '/include/.*\.h$'`"

if [ -z "$HEADERS" ] ; then
	echo "Package $PACKAGE contains no header files."
	exit 0
fi

DEPENDED_HEADERS="`grep '#[ ]*include' $HEADERS | tr ':' ' ' | \
	awk '{print $3}' | tr -d '<>"' | \
	sed 's,FT_FREETYPE_H,freetype/freetype.h,g' | sort | uniq`"
DEPENDED_PKGS=""
NONEXISTENT=""

echo "Searching for all headers referenced from files in package $PACKAGE:"
echo

for header in $DEPENDED_HEADERS ; do
	results="`dpkg -S $header 2> /dev/null`"
	[ -z "$results" ] && NONEXISTENT="`echo "$NONEXISTENT" ; echo $header`"
	results="`echo "$results" | egrep '/include(/.*/|/)'$header'$' | \
		awk '{print "     => " $1 " " $2}'`"
	echo $header
	echo "$results"
	#dpkg -S "$header" 2> /dev/null | egrep '/include(/.*/|/)'$header'$'
	DEPENDED_PKGS="`echo "$DEPENDED_PKGS" ; \
		dpkg -S $header 2> /dev/null | \
		egrep '/include(/.*/|/)'$header'$' | \
		awk '{print $1}' | tr -d ':'`"
done

# exclude gcc-* g++-* fixincludes and linux-kernel-headers packages from output
DEPENDED_PKGS="`echo "$DEPENDED_PKGS" | sort | uniq | \
	egrep -v '^(g[c+][c+]-[0-9.]*|linux-kernel-headers|fixincludes)$' | \
	grep -v '^'"$PACKAGE"'$'`"

echo
echo "Header dependencies of $PACKAGE:"
echo "$DEPENDED_PKGS"

if [ -n "$NONEXISTENT" ] ; then
	echo
	echo "*** Could not find the following headers in any package:"
	echo "$NONEXISTENT"
fi
