#!/bin/bash

# This is a small tool which checks that all headers are sufficiently standalone
# and include anything they need.
# In future we might extend this to find out bogus includes by predefining (-D)
# headerguards they include, effectively disableing this include for a test.

find src -name '*.h' | while read header; do
	echo -e "testing $header"
	awk 'BEGIN {print "#include \""ARGV[1]"\"\nint main(){"}
		 /^(struct|enum|class).*[^;]$/{print "\t" $0 " test_" NR "; (void) test_"NR";" }
		 END {print "\treturn 0;\n}"}' $header >,headertest.c
	gcc -D_GNU_SOURCE -DEBUG_ALPHA -std=gnu99 -Werror -Wall -I src -c ,headertest.c
	echo
done

find src -name '*.hpp' | while read header; do
	echo -e "testing $header"
	awk 'BEGIN {print "#include \""ARGV[1]"\"\nint main(){"}
		 /^(struct|enum|class).*[^;]$/{print "\t" $0 " test_" NR "; (void) test_"NR";" }
		 END {print "\treturn 0;\n}"}' $header >,headertest.cpp
	g++ -D_GNU_SOURCE -DEBUG_ALPHA -Werror -Wall -I src -c ,headertest.cpp
	echo
done

