[gjs/iwyu: 33/34] build: Add some smarts to IWYU script
- From: Philip Chimento <pchimento src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs/iwyu: 33/34] build: Add some smarts to IWYU script
- Date: Thu, 21 May 2020 05:45:53 +0000 (UTC)
commit 50a6812079243399b2b3f5936ed0a549a83a75b4
Author: Philip Chimento <philip chimento gmail com>
Date: Sat May 16 11:44:19 2020 -0700
build: Add some smarts to IWYU script
If passing a commit to tools/run_iwyu.sh, check only the files changed
in that commit or later, including uncommitted files. This allows
running IWYU with much less friction and opens the door to running it
automatically in CI.
tools/run_iwyu.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 47 insertions(+), 2 deletions(-)
---
diff --git a/tools/run_iwyu.sh b/tools/run_iwyu.sh
index 5773289f..e67f4818 100755
--- a/tools/run_iwyu.sh
+++ b/tools/run_iwyu.sh
@@ -2,6 +2,35 @@
SRCDIR=$(pwd)
+if [ "$1" == '--help' -o "$1" == '-h' ]; then
+ echo "usage: $0 [ COMMIT ]"
+ echo "Run include-what-you-use on the GJS codebase."
+ echo "If COMMIT is given, analyze only the files changed since that commit,"
+ echo "including uncommitted changes."
+ echo "Otherwise, analyze all files."
+ exit 0
+fi
+
+if [ $# -eq 0 ]; then
+ files=all
+else
+ files="$(git diff-tree --name-only -r $1..) $(git diff-index --name-only HEAD)"
+fi
+
+echo "files: $files"
+
+should_analyze () {
+ file=$(realpath --relative-to=$SRCDIR $1)
+ case "$files" in
+ all) return 0 ;;
+ *$file*) return 0 ;;
+ *${file%.cpp}.h*) return 0 ;;
+ *${file%.cpp}-private.h*) return 0 ;;
+ *${file%.c}.h*) return 0 ;;
+ *) return 1 ;;
+ esac
+}
+
cd ${BUILDDIR:-_build}
if ! ninja; then
echo 'Build failed.'
@@ -23,24 +52,40 @@ for FILE in $SRCDIR/gi/*.cpp $SRCDIR/gjs/atoms.cpp $SRCDIR/gjs/byteArray.cpp \
$SRCDIR/modules/system.cpp $SRCDIR/test/*.cpp $SRCDIR/util/*.cpp \
$SRCDIR/libgjs-private/*.c
do
- $IWYU $FILE -- $PRIVATE_MAPPING | $POSTPROCESS
+ should_analyze $FILE && $IWYU $FILE -- $PRIVATE_MAPPING | $POSTPROCESS
done
+
+should_analyze $SRCDIR/gjs/context.cpp && \
$IWYU $SRCDIR/gjs/context.cpp -- $PRIVATE_MAPPING \
-Xiwyu --check_also=*/gjs/context-private.h | $POSTPROCESS
+
+( should_analyze $SRCDIR/gjs/jsapi-dynamic-class.cpp || \
+ should_analyze $SRCDIR/gjs/jsapi-class.h ) && \
$IWYU $SRCDIR/gjs/jsapi-dynamic-class.cpp -- $PRIVATE_MAPPING \
-Xiwyu --check_also=*/gjs/jsapi-class.h | $POSTPROCESS
+
+( should_analyze $SRCDIR/gjs/jsapi-util.cpp ||
+ should_analyze $SRCDIR/gjs/jsapi-util-args.h || \
+ should_analyze $SRCDIR/gjs/jsapi-util-root.h ) && \
$IWYU $SRCDIR/gjs/jsapi-util.cpp -- $PRIVATE_MAPPING \
-Xiwyu --check_also=*/gjs/jsapi-util-args.h \
-Xiwyu --check_also=*/gjs/jsapi-util-root.h | $POSTPROCESS
+
+should_analyze $SRCDIR/gjs/mem.cpp && \
$IWYU $SRCDIR/gjs/mem.cpp -- $PRIVATE_MAPPING \
-Xiwyu --check_also=*/gjs/mem-private.h | $POSTPROCESS
+
+should_analyze $SRCDIR/gjs/profiler.cpp && \
$IWYU $SRCDIR/gjs/profiler.cpp -- $PRIVATE_MAPPING \
-Xiwyu --check_also=*/gjs/profiler-private.h | $POSTPROCESS
+
+( should_analyze $SRCDIR/modules/cairo.cpp ||
+ should_analyze $SRCDIR/modules/cairo-module.h ) && \
$IWYU $SRCDIR/modules/cairo.cpp -- $PRIVATE_MAPPING \
-Xiwyu --check_also=*/modules/cairo-module.h \
-Xiwyu --check_also=*/modules/cairo-private.h | $POSTPROCESS
for FILE in $SRCDIR/gjs/console.cpp $SRCDIR/installed-tests/minijasmine.cpp
do
- $IWYU $FILE -- $PUBLIC_MAPPING | $POSTPROCESS
+ should_analyze $FILE && $IWYU $FILE -- $PUBLIC_MAPPING | $POSTPROCESS
done
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]