#!/bin/sh

REPOSITORY=/home/juerg/Projects/paldo
OUTPUT=/home/juerg/paldo-headers
SANDBOX=/tmp/paldo-headers
BLACKLIST="linux-2.6 klibc linux-glibc-headers linux-libc-headers"

if [ -e "$SANDBOX" ]
then
	echo "Error: $SANDBOX already exists." >&2
	exit 1
fi

if [ -e "$OUTPUT" ]
then
	echo "Error: $OUTPUT already exists." >&2
	exit 1
fi

mkdir -p $OUTPUT

for package in $(upkg-repo $REPOSITORY | grep sources.*tar.bz2)
do
	echo "Processing $package..." >&2
	
	packagedir=$(basename $(dirname $package))
	
	for blackpackage in $BLACKLIST
	do
		[ "$packagedir" = "$blackpackage" ] && continue 2
	done
	
	mkdir -p $SANDBOX
	cd $SANDBOX
	
	tar -xf $package
	find . -name "*.c" -or -name "*.cc" -or -name "*.cxx" -or -name ".cpp" -or -name ".h" -or -name "*.hxx" -or -name "*.hpp" | xargs grep -h "#[[:space:]]*include[[:space:]]*<\(linux\|asm\).*h>" | sed -e 's/^.*#[[:space:]]*include[[:space:]]*<\(\(linux\|asm\).*h\)>.*$/\1/' | sort -u > /tmp/headers
	
	if [ -n "$(head /tmp/headers)" ]
	then
		mkdir -p $OUTPUT/$packagedir
		mv /tmp/headers $OUTPUT/$packagedir/$(basename $package)
	fi

	rm -f /tmp/headers
	
	rm -rf $SANDBOX
done

cd $OUTPUT

mkdir -p .reports

sort -u */* > .reports/headers-list

for package in *
do
	sort -u $package/* | sed -e "s/\$/\t$package/"
done | sort > .reports/headers-xref
