Commit f84004baf22e26e835515b79613de45708a73391

Guillem Jover 2015-12-12T14:26:50

test: Add new unit tests for individual headers usage

diff --git a/test/.gitignore b/test/.gitignore
index 278391d..f15b476 100644
--- a/test/.gitignore
+++ b/test/.gitignore
@@ -6,7 +6,7 @@ fgetln
 funopen
 fparseln
 fpurge
-headers
+headers-gen.c
 humanize
 overlay
 proctitle-init
diff --git a/test/Makefile.am b/test/Makefile.am
index 9694338..9b79f06 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,16 +1,35 @@
 ## Process this file with automake to produce Makefile.in
 
-AM_CPPFLAGS = \
+HEADERS_CPPFLAGS = \
 	-I$(top_builddir) \
-	-isystem $(top_srcdir)/include/bsd/ \
 	-include $(top_builddir)/config.h \
-	-DLIBBSD_OVERLAY -DLIBBSD_DISABLE_DEPRECATED \
+	-DLIBBSD_DISABLE_DEPRECATED \
 	-D__REENTRANT
 
+AM_CPPFLAGS = \
+	-isystem $(top_srcdir)/include/bsd/ \
+	$(HEADERS_CPPFLAGS) \
+	-DLIBBSD_OVERLAY
+
+AM_TESTS_ENVIRONMENT = \
+	export CC="$(CC)"; \
+	export CPPFLAGS="$(HEADERS_CPPFLAGS)"; \
+	export top_srcdir="$(top_srcdir)"; \
+	$(nil)
+
 LDADD = $(top_builddir)/src/libbsd.la
 
+EXTRA_DIST = \
+	headers-overlay.sh \
+	headers-system.sh \
+	$(nil)
+
+check_SCRIPTS = \
+	headers-overlay.sh \
+	headers-system.sh \
+	$(nil)
+
 check_PROGRAMS = \
-	headers \
 	overlay \
 	bzero \
 	closefrom \
@@ -47,4 +66,4 @@ fparseln_SOURCES = test-stream.c test-stream.h fparseln.c
 proctitle_init_SOURCES = proctitle.c
 proctitle_init_CPPFLAGS = $(AM_CPPFLAGS) -DTEST_USE_SETPROCTITLE_INIT=1
 
-TESTS = $(check_PROGRAMS)
+TESTS = $(check_SCRIPTS) $(check_PROGRAMS)
diff --git a/test/headers-overlay.sh b/test/headers-overlay.sh
new file mode 100755
index 0000000..56ce90d
--- /dev/null
+++ b/test/headers-overlay.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+set -e
+
+run()
+{
+  echo "$@"
+  "$@"
+}
+
+incdir="${top_srcdir}/include/bsd"
+CPPFLAGS="$CPPFLAGS -DLIBBSD_OVERLAY"
+
+for inc in $(cd $incdir; find -name '*.h' | sort | cut -c3-); do
+  cat >headers-gen.c <<SOURCE
+#include <$inc>
+int main() { return 0; }
+SOURCE
+
+  echo "testing header $inc"
+  run $CC -isystem "$incdir" $CPPFLAGS headers-gen.c -o /dev/null
+  echo
+
+  rm -f headers-gen*
+done
diff --git a/test/headers-system.sh b/test/headers-system.sh
new file mode 100755
index 0000000..173fcc5
--- /dev/null
+++ b/test/headers-system.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+set -e
+
+run()
+{
+  echo "$@"
+  "$@"
+}
+
+incdir="${top_srcdir}/include"
+
+for inc in $(cd $incdir; find -name '*.h' | sort | cut -c3-); do
+  cat >headers-gen.c <<SOURCE
+#include <$inc>
+int main() { return 0; }
+SOURCE
+
+  echo "testing header $inc"
+  run $CC -isystem "$incdir" $CPPFLAGS headers-gen.c -o /dev/null
+  echo
+
+  rm -f headers-gen.*
+done
diff --git a/test/headers.c b/test/headers.c
deleted file mode 100644
index be1cb71..0000000
--- a/test/headers.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright © 2012 Guillem Jover <guillem@hadrons.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
- * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/* Check that all libbsd overlayed headers preprocess. */
-#include <sys/cdefs.h>
-#include <sys/endian.h>
-#include <sys/bitstring.h>
-#include <sys/queue.h>
-#include <sys/tree.h>
-#include <sys/poll.h>
-
-#include <err.h>
-#include <getopt.h>
-#include <libutil.h>
-#include <md5.h>
-#include <nlist.h>
-#include <readpassphrase.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <vis.h>
-
-int
-main()
-{
-	return 0;
-}