summaryrefslogtreecommitdiff
path: root/tools/run_iwyu.sh.in
blob: 705e09c64b8ea7f172474464a47b791fe42f7ca7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/bin/bash

# run with 'make iwyu | tee iwyu.log'

if test -z "$BUILDDIR" -o -z "$SRCDIR"; then
    echo "SRCDIR and BUILDDIR must be defined. Try running 'make iwyu' instead."
    exit 1
fi

cd "$SRCDIR"

PRIVATE_MAPPING="-Xiwyu --mapping_file=tools/gjs-private-iwyu.imp"
PUBLIC_MAPPING="-Xiwyu --mapping_file=tools/gjs-public-iwyu.imp"

LIBS_INCLUDES=$(pkg-config --cflags \
    "@AX_PACKAGE_REQUIRES@ @AX_PACKAGE_REQUIRES_PRIVATE@")
INCLUDES="-I. -I$BUILDDIR"
DEFINES="-DGJS_COMPILATION -DPKGLIBDIR=\"\" -DINSTTESTDIR=\"\" -DGJS_JS_DIR=\"\""
CPP_ARGS="$LIBS_INCLUDES @SYSPROF_CAPTURE_CFLAGS@ $INCLUDES $DEFINES"

LANG_CXX="--language=c++ -std=c++14"
LANG_C="--language=c"
CXX_STDLIB_INCLUDES=$(clang -Wp,-v $LANG_CXX -fsyntax-only /dev/null 2>&1 | \
    grep '^ ' | sed -e 's/^ /-I/')
C_STDLIB_INCLUDES=$(clang -Wp,-v $LANG_C -fsyntax-only /dev/null 2>&1 | \
    grep '^ ' | sed -e 's/^ /-I/')
CXX_ARGS="$LANG_CXX $CXX_STDLIB_INCLUDES $CPP_ARGS"
C_ARGS="$LANG_C $C_STDLIB_INCLUDES $CPP_ARGS"

for FILE in gi/*.cpp gi/gjs_gi_trace.h gjs/atoms.cpp gjs/byteArray.cpp \
    gjs/coverage.cpp gjs/debugger.cpp gjs/deprecation.cpp gjs/error-types.cpp \
    gjs/engine.cpp gjs/global.cpp gjs/importer.cpp gjs/jsapi-util-args.h \
    gjs/jsapi-util-error.cpp gjs/jsapi-util-root.h gjs/jsapi-util-string.cpp \
    gjs/jsapi-util.cpp gjs/module.cpp gjs/native.cpp gjs/stack.cpp \
    modules/cairo-*.cpp modules/console.cpp modules/system.cpp test/*.cpp \
    util/*.cpp
do
    iwyu $PRIVATE_MAPPING $CXX_ARGS $FILE
done
iwyu $PRIVATE_MAPPING $CXX_ARGS gjs/context.cpp \
    -Xiwyu --check_also=gjs/context-private.h
iwyu $PRIVATE_MAPPING $CXX_ARGS gjs/jsapi-dynamic-class.cpp \
    -Xiwyu --check_also=gjs/jsapi-class.h
iwyu $PRIVATE_MAPPING $CXX_ARGS gjs/mem.cpp \
    -Xiwyu --check_also=gjs/mem-private.h
iwyu $PRIVATE_MAPPING $CXX_ARGS gjs/profiler.cpp \
    -Xiwyu --check_also=gjs/profiler-private.h
iwyu $PRIVATE_MAPPING $CXX_ARGS modules/cairo.cpp \
    -Xiwyu --check_also=modules/cairo-module.h \
    -Xiwyu --check_also=modules/cairo-private.h

for FILE in gjs/console.cpp installed-tests/minijasmine.cpp; do
    iwyu $PUBLIC_MAPPING $CXX_ARGS $FILE
done

for FILE in libgjs-private/*.c; do
    iwyu $PRIVATE_MAPPING $C_ARGS $FILE
done
iwyu $PUBLIC_MAPPING $C_ARGS gjs/macros.h