ci: compile-check installed headers
Script copied from ndn-cxx with minor modifications
Change-Id: Ib2e82e97161078d653f965c769de149cc28c60dd
diff --git a/.jenkins.d/40-headers-check.sh b/.jenkins.d/40-headers-check.sh
new file mode 100755
index 0000000..369eba3
--- /dev/null
+++ b/.jenkins.d/40-headers-check.sh
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+
+# It's intentional not to use `set -x`, because this script explicitly prints useful information
+# and should not run in trace mode.
+# It's intentional not to use `set -e`, because this script wants to check all headers
+# (similar to running all test cases), instead of failing at the first error.
+
+PROJ=PSync
+
+if [[ -n $DISABLE_HEADERS_CHECK ]]; then
+ echo 'Skipping headers check.'
+ exit 0
+fi
+
+if has CentOS-8 $NODE_LABELS; then
+ export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
+fi
+
+CXX=${CXX:-g++}
+STD=-std=c++14
+CXXFLAGS="-O2 -Wall -Wno-unneeded-internal-declaration -Wno-unused-const-variable $(pkg-config --cflags libndn-cxx $PROJ)"
+INCLUDEDIR="$(pkg-config --variable=includedir $PROJ)"/$PROJ
+
+echo "Using: $CXX $STD $CXXFLAGS"
+
+NCHECKED=0
+NERRORS=0
+while IFS= read -r -d '' H; do
+ echo "Checking header ${H#${INCLUDEDIR}/}"
+ "$CXX" -xc++ $STD $CXXFLAGS -c -o /dev/null "$H"
+ [[ $? -eq 0 ]] || ((NERRORS++))
+ ((NCHECKED++))
+done < <(find "$INCLUDEDIR" -name '*.hpp' -type f -print0 2>/dev/null)
+
+if [[ $NCHECKED -eq 0 ]]; then
+ echo "No headers found. Is $PROJ installed?"
+ exit 1
+else
+ echo "$NCHECKED headers checked."
+fi
+
+if [[ $NERRORS -gt 0 ]]; then
+ echo "$NERRORS headers could not be compiled."
+ exit 1
+fi