Skip to content

Commit

Permalink
Add check-includes.sh: Find redundant includes. Check ifndef:s.
Browse files Browse the repository at this point in the history
  • Loading branch information
practicalswift authored and rustyrussell committed Mar 25, 2018
1 parent a4059ef commit e078fce
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 1 deletion.
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,10 @@ check-python:
@# E731 do not assign a lambda expression, use a def
@flake8 --ignore=E501,E731 --exclude=contrib/pylightning/lightning/__init__.py ${PYSRC}

check-source: check-makefile check-source-bolt check-whitespace check-markdown check-spelling check-python
check-includes:
@tools/check-includes.sh

check-source: check-makefile check-source-bolt check-whitespace check-markdown check-spelling check-python check-includes

full-check: check check-source

Expand Down
61 changes: 61 additions & 0 deletions tools/check-includes.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#!/bin/bash

EXIT_CODE=0

# Check include guards

HEADER_ID_PREFIX="LIGHTNING_"
HEADER_ID_SUFFIX="_H"
REGEXP_EXCLUDE_FILES_WITH_PREFIX="ccan/"
for HEADER_FILE in $(git ls-files -- "*.h" | grep -vE "^${REGEXP_EXCLUDE_FILES_WITH_PREFIX}")
do
HEADER_ID_BASE=$(tr / _ <<< "${HEADER_FILE/%.h/}" | tr "[:lower:]" "[:upper:]")
HEADER_ID="${HEADER_ID_PREFIX}${HEADER_ID_BASE}${HEADER_ID_SUFFIX}"
if [[ $(grep -cE "^#((ifndef|define) ${HEADER_ID}|endif /\* ${HEADER_ID} \*/)$" "${HEADER_FILE}") != 3 ]]; then
echo "${HEADER_FILE} seems to be missing the expected include guard:"
echo " #ifndef ${HEADER_ID}"
echo " #define ${HEADER_ID}"
echo " ..."
echo " #endif /* ${HEADER_ID} */"
echo
EXIT_CODE=1
fi
done

# Check redundant includes

filter_suffix() {
git ls-files | grep -v 'ccan/' | grep -E "\.${1}"'$'
}

for HEADER_FILE in $(filter_suffix h); do
DUPLICATE_INCLUDES_IN_HEADER_FILE=$(grep -E "^#include " < "${HEADER_FILE}" | sort | uniq -d)
if [[ ${DUPLICATE_INCLUDES_IN_HEADER_FILE} != "" ]]; then
echo "Duplicate include(s) in ${HEADER_FILE}:"
echo "${DUPLICATE_INCLUDES_IN_HEADER_FILE}"
echo
EXIT_CODE=1
fi
C_FILE=${HEADER_FILE/%\.h/.c}
if [[ ! -e $C_FILE ]]; then
continue
fi
DUPLICATE_INCLUDES_IN_HEADER_AND_C_FILES=$(grep -hE "^#include " <(sort -u < "${HEADER_FILE}") <(sort -u < "${C_FILE}") | grep -E "^#include " | sort | uniq -d)
if [[ ${DUPLICATE_INCLUDES_IN_HEADER_AND_C_FILES} != "" ]]; then
echo "Include(s) from ${HEADER_FILE} duplicated in ${C_FILE}:"
echo "${DUPLICATE_INCLUDES_IN_HEADER_AND_C_FILES}"
echo
EXIT_CODE=1
fi
done
for C_FILE in $(filter_suffix c); do
DUPLICATE_INCLUDES_IN_C_FILE=$(grep -E "^#include " < "${C_FILE}" | sort | uniq -d)
if [[ ${DUPLICATE_INCLUDES_IN_C_FILE} != "" ]]; then
echo "Duplicate include(s) in ${C_FILE}:"
echo "${DUPLICATE_INCLUDES_IN_C_FILE}"
echo
EXIT_CODE=1
fi
done

exit ${EXIT_CODE}

0 comments on commit e078fce

Please sign in to comment.