Skip to content

Commit d860aa4

Browse files
committed
Tools: use IWYU
1 parent 192c27d commit d860aa4

File tree

8 files changed

+501
-0
lines changed

8 files changed

+501
-0
lines changed

common.pri

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,33 @@ defineReplace(getVersion) {
6060

6161
error(In function getVersion: APP_VERSION not found in $${version_file})
6262
}
63+
64+
65+
#------------------#
66+
# iwyu support #
67+
#------------------#
68+
69+
# https://doc.qt.io/qt-5/qmake-manual.html
70+
# https://wiki-qt-io-staging.herokuapp.com/Undocumented_QMake
71+
72+
defineReplace(iwyu_out) {
73+
return ($${OUT_PWD}/$$basename(1).log)
74+
}
75+
76+
defined(CHECK_IWYU, var) {
77+
linux*:IWYU_FLAGS += -fPIE
78+
79+
IWYU_FLAGS += $(DEFINES) -w $(INCPATH)
80+
81+
for(include, IWYU_INCLUDES) {
82+
IWYU_FLAGS += -I$$include
83+
}
84+
85+
IWYU_EXTRA_FLAGS += -Xiwyu --max_line_length=160 -Xiwyu --mapping_file=$${PROJECT_ROOT_DIR}/tools/iwyu.imp
86+
87+
iwyu.output_function = iwyu_out
88+
iwyu.commands = $${PROJECT_ROOT_DIR}/tools/iwyu_comp.sh $${IWYU_EXTRA_FLAGS} $${IWYU_FLAGS} ${QMAKE_FILE_NAME}
89+
iwyu.input = SOURCES
90+
iwyu.CONFIG += no_link target_predeps
91+
QMAKE_EXTRA_COMPILERS += iwyu
92+
}

lib/libebook/libebook.pro

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ TARGET = ebook
44
CONFIG *= c++11 warn_on staticlib
55
QT += widgets xml
66

7+
include(../../common.pri)
8+
79
HEADERS += \
810
bitfiddle.h \
911
ebook_chm.h \

tools/README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,30 @@ Usage (from source root):
1414
or
1515

1616
astyle --project=tools/astyle.cfg -I -r 'module/*.cpp' 'module/*.h'
17+
18+
19+
Include-What-You-Use
20+
--------------------
21+
22+
https://include-what-you-use.org
23+
24+
To use IWYU, run qmake with the optional USE flag:
25+
26+
qmake -r USE+=check_iwyu path/to/gcodeworkshop_top.pro
27+
28+
The following additional parameters are possible:
29+
30+
* `IWYU_INCLUDES` specifies additional paths to search for header files,
31+
this comes in handy in Debian:
32+
33+
IWYU_INCLUDES=/usr/lib/llvm-13/include/c++/v1
34+
35+
* `IWYU_EXTRA_FLAGS` additional options specifically IWYU:
36+
37+
IWYU_EXTRA_FLAGS='-Xiwyu --update_comments'
38+
39+
40+
Additional links:
41+
42+
* https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUMappings.md
43+
* https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUPragmas.md

tools/iwyu.imp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[
2+
"ref": "iwyu_clang.imp",
3+
"ref": "iwyu_qt.imp",
4+
"ref": "iwyu_qt_web.imp",
5+
6+
7+
{ include: ['<stdlib.h>', 'public', '<cstdlib>', 'public'] },
8+
{ include: ['"stdlib.h"', 'public', '<cstdlib>', 'public'] },
9+
{ include: ['<time.h>', 'public', '<ctime>', 'public'] },
10+
{ include: ['"time.h"', 'public', '<ctime>', 'public'] },
11+
12+
{ symbol: ['getenv', 'private', '<cstdlib>', 'public'] },
13+
{ symbol: ['memcpy', 'private', '<cstring>', 'public'] }
14+
]

tools/iwyu_clang.imp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
[
2+
{ include: ['"__algorithm/copy.h"', 'private', '<algorithm>', 'public']},
3+
{ include: ['"__algorithm/max.h"', 'private', '<algorithm>', 'public']},
4+
{ include: ['"__algorithm/min.h"', 'private', '<algorithm>', 'public']},
5+
{ include: ['"__algorithm/sort.h"', 'private', '<algorithm>', 'public']},
6+
{ include: ['"__functional/function.h"', 'private', '<functional>', 'public']},
7+
{ include: ['"bits/shared_ptr.h"', 'private', '<memory>', 'public']},
8+
{ include: ['<bits/shared_ptr.h>', 'private', '<memory>', 'public']},
9+
{ include: ['"__memory/shared_ptr.h"', 'private', '<memory>', 'public']},
10+
{ include: ['<__memory/shared_ptr.h>', 'private', '<memory>', 'public']},
11+
{ include: ['"new"', 'private', '<new>', 'public']},
12+
{ include: ['"string"', 'private', '<string>', 'public']},
13+
{ include: ['"__utility/move.h"', 'private', '<utility>', 'public']},
14+
15+
{ symbol: ['std::string', 'private', '<string>', 'public'] }
16+
]

tools/iwyu_comp.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/bash
2+
3+
include-what-you-use $* 2>&1 | tee $(basename -- "${!#}").log
4+
exit 0

tools/iwyu_qt.imp

Lines changed: 375 additions & 0 deletions
Large diffs are not rendered by default.

tools/iwyu_qt_web.imp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
[
2+
{ include: ['<qwebframe.h>', 'private', '<QWebFrame>', 'public'] },
3+
{ include: ['"qwebframe.h"', 'private', '<QWebFrame>', 'public'] },
4+
{ include: ['<qwebhistory.h>', 'private', '<QWebHistory>', 'public'] },
5+
{ include: ['"qwebhistory.h"', 'private', '<QWebHistory>', 'public'] },
6+
{ include: ['<qwebpage.h>', 'private', '<QWebPage>', 'public'] },
7+
{ include: ['"qwebpage.h"', 'private', '<QWebPage>', 'public'] },
8+
{ include: ['<qwebsettings.h>', 'private', '<QWebSettings>', 'public'] },
9+
{ include: ['"qwebsettings.h"', 'private', '<QWebSettings>', 'public'] },
10+
{ include: ['<qwebview.h>', 'private', '<QWebView>', 'public'] },
11+
{ include: ['"qwebview.h"', 'private', '<QWebView>', 'public'] },
12+
13+
{ include: ['<qwebenginecontextmenudata.h>', 'private', '<QWebEngineContextMenuData>', 'public'] },
14+
{ include: ['"qwebenginecontextmenudata.h"', 'private', '<QWebEngineContextMenuData>', 'public'] },
15+
{ include: ['<qwebenginehistory.h>', 'private', '<QWebEngineHistory>', 'public'] },
16+
{ include: ['"qwebenginehistory.h"', 'private', '<QWebEngineHistory>', 'public'] },
17+
{ include: ['<qwebenginepage.h>', 'private', '<QWebEnginePage>', 'public'] },
18+
{ include: ['"qwebenginepage.h"', 'private', '<QWebEnginePage>', 'public'] },
19+
{ include: ['<qwebengineprofile.h>', 'private', '<QWebEngineProfile>', 'public'] },
20+
{ include: ['"qwebengineprofile.h"', 'private', '<QWebEngineProfile>', 'public'] },
21+
{ include: ['<qwebenginescript.h>', 'private', '<QWebEngineScript>', 'public'] },
22+
{ include: ['"qwebenginescript.h"', 'private', '<QWebEngineScript>', 'public'] },
23+
{ include: ['<qwebenginesettings.h>', 'private', '<QWebEngineSettings>', 'public'] },
24+
{ include: ['"qwebenginesettings.h"', 'private', '<QWebEngineSettings>', 'public'] },
25+
{ include: ['<qwebengineurlrequestjob.h>', 'private', '<QWebEngineUrlRequestJob>', 'public'] },
26+
{ include: ['"qwebengineurlrequestjob.h"', 'private', '<QWebEngineUrlRequestJob>', 'public'] },
27+
{ include: ['<qwebengineurlscheme.h>', 'private', '<QWebEngineUrlScheme>', 'public'] },
28+
{ include: ['"qwebengineurlscheme.h"', 'private', '<QWebEngineUrlScheme>', 'public'] },
29+
{ include: ['<qwebengineurlschemehandler.h>', 'private', '<QWebEngineUrlSchemeHandler>', 'public'] },
30+
{ include: ['"qwebengineurlschemehandler.h"', 'private', '<QWebEngineUrlSchemeHandler>', 'public'] },
31+
{ include: ['<qwebengineview.h>', 'private', '<QWebEngineView>', 'public'] },
32+
{ include: ['"qwebengineview.h"', 'private', '<QWebEngineView>', 'public'] }
33+
]

0 commit comments

Comments
 (0)