+my %exempt_header =
+ (
+ # Exempt headers like unlocked-io.h that are `#include'd
+ # but not necessarily used.
+ 'unlocked-io.h' => 1,
+
+ # Give gettext.h a free pass only when included from lib/error.c,
+ # since we've made that exception solely to make the error
+ # module easier to use -- at RMS's request.
+ 'lib/error.c:gettext.h' => 1,
+
+ # The full-read module shares code with the full-write module.
+ 'lib/full-write.c:full-read.h' => 1,
+
+ # The safe-write module shares code with the safe-read module.
+ 'lib/safe-read.c:safe-write.h' => 1,
+
+ # The use of obstack.h in the hash module is conditional, off by default.
+ 'lib/hash.c:obstack.h' => 1,
+
+ # C files in the gc module have conditional includes.
+ 'lib/gc-gnulib.c:des.h' => 1,
+ 'lib/gc-gnulib.c:arcfour.h' => 1,
+ 'lib/gc-gnulib.c:arctwo.h' => 1,
+ 'lib/gc-gnulib.c:md2.h' => 1,
+ 'lib/gc-gnulib.c:md4.h' => 1,
+ 'lib/gc-gnulib.c:md5.h' => 1,
+ 'lib/gc-gnulib.c:rijndael.h' => 1,
+ 'lib/gc-gnulib.c:sha1.h' => 1,
+ 'lib/gc-gnulib.c:rijndael-api-fst.h' => 1,
+ 'lib/gc-gnulib.c:hmac.h' => 1,
+ 'lib/gc-libgcrypt.c:md2.h' => 1,
+ );
+
+sub check_module ($)