Separated out the include what you use mappings into separate files, more improvements

This commit is contained in:
Thomas Tanner
2015-11-08 09:46:30 +00:00
parent f1aaf92afb
commit d82ca00733
6 changed files with 2690 additions and 335 deletions
+68 -8
View File
@@ -274,13 +274,70 @@ def setup_IWYU(env):
SCons.Defaults.StaticObjectEmitter = static_emitter
def emitter(target, source, env):
env.Depends(target, ('$IWYU_MAPPING_FILE', '$IWYU_MASSAGE'))
env.Depends(target, env['IWYU_MAPPING_FILE'])
env.Depends(target, env['IWYU_MASSAGE'])
return target, source
def _concat_list(prefixes, list, suffixes, env, f=lambda x: x, target=None, source=None):
""" Creates a new list from 'list' by first interpolating each element
in the list using the 'env' dictionary and then calling f on the
list, and concatenate the 'prefix' and 'suffix' LISTS onto each element of the list.
A trailing space on the last element of 'prefix' or leading space on the
first element of 'suffix' will cause them to be put into separate list
elements rather than being concatenated.
"""
if not list:
return list
l = f(SCons.PathList.PathList(list).subst_path(env, target, source))
if l is not None:
list = l
# This bit replaces current concat_ixes
result = []
def process_stringlist(s):
return [ str(env.subst(p, SCons.Subst.SUBST_RAW))
for p in Flatten([s]) if p != '' ]
# ensure that prefix and suffix are strings
prefixes = process_stringlist(prefixes)
prefix = ''
if len(prefixes) != 0:
if prefixes[-1][-1] != ' ':
prefix = prefixes.pop()
suffixes = process_stringlist(suffixes)
suffix = ''
if len(suffixes) != 0:
if suffixes[-1][0] != ' ':
suffix = suffixes.pop(0)
for x in list:
if isinstance(x, SCons.Node.FS.File):
result.append(x)
continue
x = str(x)
if x:
result.append(prefixes)
if prefix:
if x[:len(prefix)] != prefix:
x = prefix + x
result.append(x)
if suffix:
if x[-len(suffix):] != suffix:
result[-1] = result[-1] + suffix
result.append(suffixes)
return result
env['_concat_list'] = _concat_list
# Note to self: command 2>&1 | other command appears to work as I would hope
# except it eats errors
iwyu = SCons.Builder.Builder(
action=[
'-$IWYU $IWYU_FLAGS -Xiwyu --mapping_file=$IWYU_MAPPING_FILE $IWYU_COMCOM $SOURCE 2>&1 | $IWYU_MASSAGE',
'$IWYU_MASSAGE $IWYU $IWYU_FLAGS $IWYU_MAPPINGS $IWYU_COMCOM $SOURCE',
Touch('$TARGET')
],
emitter=emitter,
@@ -305,9 +362,6 @@ def setup_IWYU(env):
'-Wno-inconsistent-missing-override',
'--system-header-prefix=Q',
'--system-header-prefix=boost/',
# Attempt to get QT to recognise clang output. So far it has not worked well.
'-fdiagnostics-format=msvc',
'-fno-show-column',
# clang says it sets this to 1700 but pretty sure vc12 is 1800
#'-fmsc-version=1800', '-D_MSC_VER=1800',
'-fmsc-version=1700',
@@ -330,9 +384,15 @@ def setup_IWYU(env):
env['IWYU_CPPDEFFLAGS'] = '${_defines(IWYU_DEFPREFIX, CPPDEFINES, IWYU_DEFSUFFIX, __env__)}'
env['IWYU_CPPINCFLAGS'] = '$( ${_concat(IWYU_INCPREFIX, CPPPATH, IWYU_INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
env['IWYU_PCHFILES'] = '$( ${_concat(IWYU_INCLUDEPREFIX, PCHSTOP, IWYU_INCLUDESUFFIX, __env__, target=TARGET, source=SOURCE)} $)'
env['IWYU_MAPPING_FILE'] = env.File('#/qtmappings.imp')
env['IWYU_MASSAGE'] = env.File('#/massage_messages.py')
env['IWYU_MAPPING_FILE'] = [
env.File('#/modorganizer/qt5_4.imp'),
env.File('#/modorganizer/win.imp'),
env.File('#/modorganizer/mappings.imp')
]
env['IWYU_MAPPING_PREFIX'] = ['-Xiwyu', '--mapping_file=']
env['IWYU_MAPPING_SUFFIX'] = ''
env['IWYU_MAPPINGS'] = '$( ${_concat_list(IWYU_MAPPING_PREFIX, IWYU_MAPPING_FILE, IWYU_MAPPING_SUFFIX, __env__, f=lambda l: [ str(x) for x in l], target=TARGET, source=SOURCE)} $)'
env['IWYU_MASSAGE'] = env.File('#/modorganizer/massage_messages.py')
# Create base environment
vars = setup_config_variables()
+30
View File
@@ -0,0 +1,30 @@
[
# for boost???
# These are probably correct but might need a revisit as if you look at the boost documentation pages, it
# can give you huge lists of alternate includes...
{ symbol: [ "BOOST_FOREACH", "private", "<boost/foreach.hpp>", "public" ] },
{ include: [ "@\"boost/bind/.*\"", "private", "<boost/bind.hpp>", "public" ] },
{ include: [ "@\"boost/algorithm/string/.*\"", "private", "<boost/algorithm/string.hpp>", "public" ] },
{ include: [ "@\"boost/assign/.*\"", "private", "<boost/assign.hpp>", "public" ] },
{ include: [ "@\"boost/filesystem/.*\"", "private", "<boost/filesystem.hpp>", "public" ] },
{ include: [ "@\"boost/format/.*\"", "private", "<boost/format.hpp>", "public" ] },
{ include: [ "@\"boost/function/.*\"", "private", "<boost/function.hpp>", "public" ] },
{ include: [ "@\"boost/local/.*\"", "private", "<boost/locale.hpp>", "public" ] },
{ include: [ "@\"boost/python/.*\"", "private", "<boost/python.hpp>", "public" ] },
{ include: [ "@\"boost/signals2/.*\"", "private", "<boost/signals2.hpp>", "public" ] },
{ include: [ "\"boost/smart_ptr/scoped_array.hpp\"", "private", "<boost/scoped_array.hpp>", "public" ] },
{ include: [ "\"boost/smart_ptr/shared_ptr.hpp\"", "private", "<boost/shared_ptr.hpp>", "public" ] },
# this appears to be excessive
#{ include: [ "@\"boost/thread/.*\"", "private", "<boost/thread.hpp>", "public" ] },
# And this is specific to us
{ include: [ "\"appconfig.inc\"", "private", "\"appconfig.h\"", "public" ] },
]
# Ones I don't yet know how to deal with
#include "boost/fusion/container/vector/vector10_fwd.hpp" // for fusion
#include "boost/iterator/iterator_facade.hpp" // for operator!=
#include "boost/iterator/iterator_facade.hpp"
+32 -7
View File
@@ -4,6 +4,8 @@
import fileinput
import re
import subprocess
import sys
removing = None
@@ -11,15 +13,18 @@ includes = dict
foundline = 0
for line in fileinput.input():
def process_next_line(line):
# Look for '\) : ([^:])?:'
# Replace with ') : \1 I0000:
global removing
global includes
global foundline
line = line.rstrip()
if removing:
if line == '':
removing = None
print
continue
return
else:
# Really we should stash these so that if we get a 'class xxx' in the
# add lines we can print it here. also we could do the case fixing.
@@ -29,16 +34,22 @@ for line in fileinput.input():
print '%s(%s) : warning I0001: Unnecessary include of %s' % (removing, m.group(2), m.group(1))
foundline = m.group(1)
else:
m = re.match(r'- (.*); +// lines (.*)-', line)
m = re.match(r'- (.*) +// lines (.*)-', line)
if m:
print '%s(%s) : warning I0002: Unnecessary forward ref of %s' % (removing, m.group(2), m.group(1))
foundline = m.group(1)
else:
print '********* I got confused **********'
line = re.sub(r'\)\s*:\s*([^:]*):', r') : \1 I1234:', line)
# Sadly qt doesn't seem to support 'info' in the issues tab.
line = re.sub(r': note I1234:', r': warning I1234:', line)
# Replace clang :line:column: type: with ms (line) : type nnnn:
# filename:line:column type:
# replace with brackets
line = re.sub(r':(\d+):\d+: ([^:]*):', r'(\1) : \2 I1234:', line)
if ': note I1234:' in line:
line = ' ' + line
line = line.replace(': note I1234:', '')
print line
if line.endswith(' should remove these lines:'):
removing = (line.split(' '))[0]
@@ -71,4 +82,18 @@ namespace Ui { class AboutDialog; } // lines 31-31
---
"""
# added lines should come after the first entry with a line number.
# added lines should come after the first entry with a line number.
process = subprocess.Popen(sys.argv[1:],
stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
while True:
output = process.stdout.readline()
if output == '' and process.poll() is not None:
break
if output:
process_next_line(output)
rc = process.poll()
# The return code you get appears to be more to do with the amount of output
# generated than any real error. We should error if any ': error:' lines are
# detected
+2478
View File
File diff suppressed because it is too large Load Diff
-320
View File
@@ -1,320 +0,0 @@
[
# Overrides. Some classes are defined by the spec to reside in their own headers but actually use the same
# header as another class. It might make some sense using this for every class in QT...
{ symbol: [ "QAbstractItemModel", "private", "<QAbstractItemModel>", "public" ] },
{ symbol: [ "QAbstractTableModel", "private", "<QAbstractTableModel>", "public" ] },
{ symbol: [ "QAtomicInt", "private", "<QAtomicInt>", "public"] },
{ symbol: [ "QCloseEvent", "private", "<QCloseEvent>", "public" ] },
{ symbol: [ "QDate", "private", "<QDate>", "public"] },
{ symbol: [ "QDragEnterEvent", "private", "<QDragEnterEvent>", "public" ] },
{ symbol: [ "QDropEvent", "private", "<QDropEvent>", "public" ] },
{ symbol: [ "QIntValidator", "private", "<QIntValidator>", "public" ] },
{ symbol: [ "QKeyEvent", "private", "<QKeyEvent>", "public" ] },
{ symbol: [ "QListWidgetItem", "private", "<QListWidgetItem>", "public" ] },
{ symbol: [ "QModelIndex", "private", "<QModelIndex>", "public" ] },
{ symbol: [ "QModelIndexList", "private", "<QModelIndexList>", "public" ] },
{ symbol: [ "QMouseEvent", "private", "<QMouseEvent>", "public" ] },
{ symbol: [ "@QMutableHashIterator(::.*)?", "private", "<QMutableHashIterator>", "public" ] },
{ symbol: [ "QPersistentModelIndex", "private", "<QPersistentModelIndex>", "public" ] },
{ symbol: [ "QResizeEvent", "private", "<QResizeEvent>", "public" ] },
{ symbol: [ "QScopedArrayPointer", "private", "<QScopedArrayPointer>", "public" ] },
{ symbol: [ "QStyleOptionSlider", "private", "<QStyleOptionSlider>", "public" ] },
{ symbol: [ "QStyleOptionViewItem", "private", "<QStyleOptionViewItem>", "public" ] },
{ symbol: [ "QTableWidgetItem", "private", "<QTableWidgetItem>", "public" ] },
{ symbol: [ "QTime", "private", "<QTime>", "public"] },
{ symbol: [ "QTreeWidgetItem", "private", "<QTreeWidgetItem>", "public" ] },
{ symbol: [ "QVBoxLayout", "private", "<QVBoxLayout>", "public" ] },
{ symbol: [ "QWebHitTestResult", "private", "<QWebHitTestResult>", "public" ] },
{ symbol: [ "qobject_cast", "private", "<QObject>", "public"] },
# these are in QMetaType but the documentation is slightly unclear as to where they are meant to be defined.
{ symbol: [ "QVariantList", "private", "<QVariant>", "public" ] },
{ symbol: [ "QVariantMap", "private", "<QVariant>", "public" ] },
#Normal header overrides
# Possibly we should add in the QtCore/ (see MOC generated files which always do)
{ include: [ "@\"(QtConcurrent/)?qtconcurrentrun\\.h\"", "private", "<QtConcurrentRun>", "public" ] },
{ include: [ "@\"(QtCore/)?qabstractproxymodel\\.h\"", "private", "<QAbstractProxyModel>", "public" ] },
{ include: [ "@\"(QtCore/)?qalgorithms\\.h\"", "private", "<QtAlgorithms>", "public" ] },
{ include: [ "@\"(QtCore/)?qbytearray\\.h\"", "private", "<QByteArray>", "public" ] },
{ include: [ "@\"(QtCore/)?qchar\\.h\"", "private", "<QChar>", "public" ] },
{ include: [ "@\"(QtCore/)?qcoreapplication\\.h\"", "private", "<QCoreApplication>", "public" ] },
{ include: [ "@\"(QtCore/)?qcoreevent\\.h\"", "private", "<QEvent>", "public" ] },
{ include: [ "@\"(QtCore/)?qdatastream\\.h\"", "private", "<QDataStream>", "public" ] },
{ include: [ "@\"(QtCore/)?qdatetime\\.h\"", "private", "<QDateTime>", "public" ] },
{ include: [ "@\"(QtCore/)?qdebug\\.h\"", "private", "<QDebug>", "public" ] },
{ include: [ "@\"(QtCore/)?qdir\\.h\"", "private", "<QDir>", "public" ] },
{ include: [ "@\"(QtCore/)?qdiriterator\\.h\"", "private", "<QDirIterator>", "public" ] },
{ include: [ "@\"(QtCore/)?qfile\\.h\"", "private", "<QFile>", "public" ] },
{ include: [ "@\"(QtCore/)?qfileinfo\\.h\"", "private", "<QFileInfo>", "public" ] },
{ include: [ "@\"(QtCore/)?qflags\\.h\"", "private", "<QFlags>", "public" ] },
{ include: [ "@\"(QtCore/)?qfuture\\.h\"", "private", "<QFuture>", "public" ] },
{ include: [ "@\"(QtCore/)?qglobal\\.h\"", "private", "<QtGlobal>", "public" ] },
{ include: [ "@\"(QtCore/)?qhash\\.h\"", "private", "<QHash>", "public" ] },
{ include: [ "@\"(QtCore/)?qiodevice\\.h\"", "private", "<QIODevice>", "public" ] },
{ include: [ "@\"(QtCore/)?qitemselectionmodel\\.h\"", "private", "<QItemSelectionModel>", "public" ] },
{ include: [ "@\"(QtCore/)?qjsonvalue\\.h\"", "private", "<QJsonValue>", "public" ] },
{ include: [ "@\"(QtCore/)?qlibrary\\.h\"", "private", "<QLibrary>", "public" ] },
{ include: [ "@\"(QtCore/)?qlist\\.h\"", "private", "<QList>", "public" ] },
{ include: [ "@\"(QtCore/)?qlocale\\.h\"", "private", "<QLocale>", "public" ] },
{ include: [ "@\"(QtCore/)?qlogging\\.h\"", "private", "<QtDebug>", "public" ] },
{ include: [ "@\"(QtCore/)?qmap\\.h\"", "private", "<QMap>", "public" ] },
{ include: [ "@\"(QtCore/)?qnamespace\\.h\"", "private", "<Qt>", "public" ] },
{ include: [ "@\"(QtCore/)?qobject\\.h\"", "private", "<QObject>", "public" ] },
{ include: [ "@\"(QtCore/)?qobjectdefs\\.h\"", "private", "<QObject>", "public" ] },
{ include: [ "@\"(QtCore/)?qpoint\\.h\"", "private", "<QPoint>", "public" ] },
{ include: [ "@\"(QtCore/)?qrect\\.h\"", "private", "<QRect>", "public" ] },
{ include: [ "@\"(QtCore/)?qregexp\\.h\"", "private", "<QRegExp>", "public" ] },
{ include: [ "@\"(QtCore/)?qscopedpointer\\.h\"", "private", "<QScopedPointer>", "public" ] },
{ include: [ "@\"(QtCore/)?qset\\.h\"", "private", "<QSet>", "public" ] },
{ include: [ "@\"(QtCore/)?qsharedpointer_impl\\.h\"", "private", "<QSharedPointer>", "public" ] },
{ include: [ "@\"(QtCore/)?qsize\\.h\"", "private", "<QSize>", "public" ] },
{ include: [ "@\"(QtCore/)?qstandardpaths\\.h\"", "private", "<QStandardPaths>", "public" ] },
{ include: [ "@\"(QtCore/)?qstring\\.h\"", "private", "<QString>", "public" ] },
{ include: [ "@\"(QtCore/)?qstringlist\\.h\"", "private", "<QStringList>", "public" ] },
{ include: [ "@\"(QtCore/)?qurl\\.h\"", "private", "<QUrl>", "public" ] },
{ include: [ "@\"(QtCore/)?qvariant\\.h\"", "private", "<QVariant>", "public" ] },
{ include: [ "@\"(QtGui/)?qbrush\\.h\"", "private", "<QBrush>", "public" ] },
{ include: [ "@\"(QtGui/)?qcolor\\.h\"", "private", "<QColor>", "public" ] },
{ include: [ "@\"(QtGui/)?qcursor\\.h\"", "private", "<QCursor>", "public" ] },
{ include: [ "@\"(QtGui/)?qfont\\.h\"", "private", "<QFont>", "public" ] },
{ include: [ "@\"(QtGui/)?qfontmetrics\\.h\"", "private", "<QFontMetrics>", "public" ] },
{ include: [ "@\"(QtGui/)?qicon\\.h\"", "private", "<QIcon>", "public" ] },
{ include: [ "@\"(QtGui/)?qimage\\.h\"", "private", "<QImage>", "public" ] },
{ include: [ "@\"(QtGui/)?qkeysequence\\.h\"", "private", "<QKeySequence>", "public" ] },
{ include: [ "@\"(QtGui/)?qpainter\\.h\"", "private", "<QPainter>", "public" ] },
{ include: [ "@\"(QtGui/)?qpalette\\.h\"", "private", "<QPalette>", "public" ] },
{ include: [ "@\"(QtGui/)?qpen\\.h\"", "private", "<QPen>", "public" ] },
{ include: [ "@\"(QtGui/)?qpixmap\\.h\"", "private", "<QPixmap>", "public" ] },
{ include: [ "@\"(QtNetwork/)?qhostaddress\\.h\"", "private", "<QHostAddress>", "public" ] },
{ include: [ "@\"(QtNetwork/)?qnetworkaccessmanager\\.h\"", "private", "<QNetworkAccessManager>", "public" ] },
{ include: [ "@\"(QtNetwork/)?qnetworkrequest\\.h\"", "private", "<QNetworkRequest>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qabstractbutton\\.h\"", "private", "<QAbstractButton>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qabstractitemview\\.h\"", "private", "<QAbstractItemView>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qaction\\.h\"", "private", "<QAction>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qboxlayout\\.h\"", "private", "<QBoxLayout>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qdialog\\.h\"", "private", "<QDialog>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qframe\\.h\"", "private", "<QFrame>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qlayout\\.h\"", "private", "<QLayout>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qlayoutitem\\.h\"", "private", "<QLayoutItem>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qlineedit\\.h\"", "private", "<QLineEdit>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qsizepolicy\\.h\"", "private", "<QSizePolicy>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qstyle\\.h\"", "private", "<QStyle>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qstyleoption\\.h\"", "private", "<QStyleOption>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qtabbar\\.h\"", "private", "<QTabBar>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qtabwidget\\.h\"", "private", "<QTabWidget>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qtextedit\\.h\"", "private", "<QTextEdit>", "public" ] },
{ include: [ "@\"(QtWidgets/)?qwidget\\.h\"", "private", "<QWidget>", "public" ] },
{ include: [ "@\"(QtWebKit/)?qwebsettings\\.h\"", "private", "<QWebSettings>", "public" ] },
{ include: [ "@\"(QtWebKitWidgets/)?qwebpage\\.h\"", "private", "<QWebPage>", "public" ] },
# I need to find out where these are and group them as above.
{ include: [ "\"qapplication.h\"", "private", "<QApplication>", "public" ] },
{ include: [ "\"qbuffer.h\"", "private", "<QBuffer>", "public" ] },
{ include: [ "\"qcheckbox.h\"", "private", "<QCheckBox>", "public" ] },
{ include: [ "\"qclipboard.h\"", "private", "<QClipboard>", "public" ] },
{ include: [ "\"qcombobox.h\"", "private", "<QComboBox>", "public" ] },
{ include: [ "\"qcommandlinkbutton.h\"", "private", "<QCommandLinkButton>", "public" ] },
{ include: [ "\"qcryptographichash.h\"", "private", "<QCryptographicHash>", "public" ] },
{ include: [ "\"qdesktopwidget.h\"", "private", "<QDesktopWidget>", "public" ] },
{ include: [ "\"qdialogbuttonbox.h\"", "private", "<QDialogButtonBox>", "public" ] },
{ include: [ "\"qfiledialog.h\"", "private", "<QFileDialog>", "public" ] },
{ include: [ "\"qfilesystemmodel.h\"", "private", "<QFileSystemModel>", "public" ] },
{ include: [ "\"qfilesystemwatcher.h\"", "private", "<QFileSystemWatcher>", "public" ] },
{ include: [ "\"qgroupbox.h\"", "private", "<QGroupBox>", "public" ] },
{ include: [ "\"qheaderview.h\"", "private", "<QHeaderView>", "public" ] },
{ include: [ "\"qinputdialog.h\"", "private", "<QInputDialog>", "public" ] },
{ include: [ "\"qitemdelegate.h\"", "private", "<QItemDelegate>", "public" ] },
{ include: [ "\"qjsonarray.h\"", "private", "<QJsonArray>", "public" ] },
{ include: [ "\"qjsondocument.h\"", "private", "<QJsonDocument>", "public" ] },
{ include: [ "\"qjsonobject.h\"", "private", "<QJsonObject>", "public" ] },
{ include: [ "\"qlabel.h\"", "private", "<QLabel>", "public" ] },
{ include: [ "\"qlcdnumber.h\"", "private", "<QLCDNumber>", "public" ] },
{ include: [ "\"qlistwidget.h\"", "private", "<QListWidget>", "public" ] },
{ include: [ "\"qlocalserver.h\"", "private", "<QLocalServer>", "public" ] },
{ include: [ "\"qlocalsocket.h\"", "private", "<QLocalSocket>", "public" ] },
{ include: [ "\"qmainwindow.h\"", "private", "<QMainWindow>", "public" ] },
{ include: [ "\"qmenu.h\"", "private", "<QMenu>", "public" ] },
{ include: [ "\"qmessagebox.h\"", "private", "<QMessageBox>", "public" ] },
{ include: [ "\"qmetatype.h\"", "private", "<QMetaType>", "public" ] },
{ include: [ "\"qmimedata.h\"", "private", "<QMimeData>", "public" ] },
{ include: [ "\"qmutex.h\"", "private", "<QMutex>", "public" ] },
{ include: [ "\"qnetworkcookie.h\"", "private", "<QNetworkCookie>", "public" ] },
{ include: [ "\"qnetworkcookiejar.h\"", "private", "<QNetworkCookieJar>", "public" ] },
{ include: [ "\"qnetworkdiskcache.h\"", "private", "<QNetworkDiskCache>", "public" ] },
{ include: [ "\"qnetworkinterface.h\"", "private", "<QNetworkInterface>", "public" ] },
{ include: [ "\"qnetworkreply.h\"", "private", "<QNetworkReply>", "public" ] },
{ include: [ "\"qpixmapcache.h\"", "private", "<QPixmapCache>", "public" ] },
{ include: [ "\"qprocess.h\"", "private", "<QProcess>", "public" ] },
{ include: [ "\"qprogressbar.h\"", "private", "<QProgressBar>", "public" ] },
{ include: [ "\"qprogressdialog.h\"", "private", "<QProgressDialog>", "public" ] },
{ include: [ "\"qproxystyle.h\"", "private", "<QProxyStyle>", "public" ] },
{ include: [ "\"qpushbutton.h\"", "private", "<QPushButton>", "public" ] },
{ include: [ "\"qqueue.h\"", "private", "<QQueue>", "public" ] },
{ include: [ "\"qradiobutton.h\"", "private", "<QRadioButton>", "public" ] },
{ include: [ "\"qscrollbar.h\"", "private", "<QScrollBar>", "public" ] },
{ include: [ "\"qsettings.h\"", "private", "<QSettings>", "public" ] },
{ include: [ "\"qsharedmemory.h\"", "private", "<QSharedMemory>", "public" ] },
{ include: [ "\"qshortcut.h\"", "private", "<QShortcut>", "public" ] },
{ include: [ "\"qsignalmapper.h\"", "private", "<QSignalMapper>", "public" ] },
{ include: [ "\"qsortfilterproxymodel.h\"", "private", "<QSortFilterProxyModel>", "public" ] },
{ include: [ "\"qsplashscreen.h\"", "private", "<QSplashScreen>", "public" ] },
{ include: [ "\"qsplitter.h\"", "private", "<QSplitter>", "public" ] },
{ include: [ "\"qsslsocket.h\"", "private", "<QSslSocket>", "public" ] },
{ include: [ "\"qstackedwidget.h\"", "private", "<QStackedWidget>", "public" ] },
{ include: [ "\"qstatusbar.h\"", "private", "<QStatusBar>", "public" ] },
{ include: [ "\"qstyleditemdelegate.h\"", "private", "<QStyledItemDelegate>", "public" ] },
{ include: [ "\"qstylefactory.h\"", "private", "<QStyleFactory>", "public" ] },
{ include: [ "\"qsyntaxhighlighter.h\"", "private", "<QSyntaxHighlighter>", "public" ] },
{ include: [ "\"qtablewidget.h\"", "private", "<QTableWidget>", "public" ] },
{ include: [ "\"qtemporaryfile.h\"", "private", "<QTemporaryFile>", "public" ] },
{ include: [ "\"qtextbrowser.h\"", "private", "<QTextBrowser>", "public" ] },
{ include: [ "\"qtextcodec.h\"", "private", "<QTextCodec>", "public" ] },
{ include: [ "\"qtextstream.h\"", "private", "<QTextStream>", "public" ] },
{ include: [ "\"qthread.h\"", "private", "<QThread>", "public" ] },
{ include: [ "\"qtimer.h\"", "private", "<QTimer>", "public" ] },
{ include: [ "\"qtoolbar.h\"", "private", "<QToolBar>", "public" ] },
{ include: [ "\"qtoolbutton.h\"", "private", "<QToolButton>", "public" ] },
{ include: [ "\"qtooltip.h\"", "private", "<QToolTip>", "public" ] },
{ include: [ "\"qtranslator.h\"", "private", "<QTranslator>", "public" ] },
{ include: [ "\"qtreeview.h\"", "private", "<QTreeView>", "public" ] },
{ include: [ "\"qtreewidget.h\"", "private", "<QTreeWidget>", "public" ] },
{ include: [ "\"qurlquery.h\"", "private", "<QUrlQuery>", "public" ] },
{ include: [ "\"qvalidator.h\"", "private", "<QValidator>", "public" ] },
{ include: [ "\"qvector.h\"", "private", "<QVector>", "public" ] },
{ include: [ "\"qwebframe.h\"", "private", "<QWebFrame>", "public" ] },
{ include: [ "\"qwebhistory.h\"", "private", "<QWebHistory>", "public" ] },
{ include: [ "\"qwebview.h\"", "private", "<QWebView>", "public" ] },
{ include: [ "\"qwhatsthis.h\"", "private", "<QWhatsThis>", "public" ] },
{ include: [ "\"qwidgetaction.h\"", "private", "<QWidgetAction>", "public" ] },
{ include: [ "\"qimagereader.h\"", "private", "<QImageReader>", "public" ] },
{ include: [ "\"qdeclarativecontext.h\"", "private", "<QDeclarativeContext>", "public" ] },
{ include: [ "\"qdeclarativeview.h\"", "private", "<QDeclarativeView>", "public" ] },
# looks wrong
# { include: [ "\"qgraphicsitem.h\"", "private", "<QGraphicsObject>", "public" ] },
# Microsft visual C?
{ include: [ "<xios_base>", "private", "<ios_base>", "public" ] },
{ include: [ "<xlocale>", "private", "<locale>", "public" ] },
{ include: [ "<xstring>", "private", "<string>", "public" ] },
{ include: [ "<xutility>", "private", "<utility>", "public" ] },
# Windows
# Looks like the doucmentation says the 1st char is u/c the rest are l/c
# You have to be kidding me. ULONG is defined in winsmcrd.h?
{ symbol: [ "ULONG", "private", "<windef.h>", "private" ] },
{ include: [ "<winnls.h>", "private", "<stringapiset.h>", "private" ] }, # Stringapiset.h
{ include: [ "<stringapiset.h>", "private", "<Windows.h>", "public" ] },
# These are all in windef.h apparently. Which m/s then says 'use Windows.h'
{ include: [ "<basetsd.h>", "private", "<windef.h>", "private" ] }, # or in winnt apparently
{ include: [ "<handleapi.h>", "private", "<windef.h>", "private" ] },
{ include: [ "<libloaderapi.h>", "private", "<windef.h>", "private" ] },
{ include: [ "<minwindef.h>", "private", "<windef.h>", "private" ] },
# Similary, but for winbase.h
{ include: [ "<LMCons.h>", "private", "<winbase.h>", "private" ] },
{ include: [ "<errhandlingapi.h>", "private", "<winbase.h>", "private" ] },
{ include: [ "<excpt.h>", "private", "<winbase.h>", "private" ] },
{ include: [ "<minwinbase.h>", "private", "<winbase.h>", "private" ] },
{ include: [ "<namedpipeapi.h>", "private", "<winbase.h>", "private" ] },
{ include: [ "<securitybaseapi.h>", "private", "<winbase.h>", "private" ] },
# These ones say xxxx.h (include Windows.h) on the ms web site
{ include: [ "<datetimeapi.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<fileapi.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<verrsrc.h>", "private", "<Windows.h>", "public" ] }, # VerRsrc.h
{ include: [ "<winbase.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<windef.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<winerror.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<winnt.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<winuser.h>", "private", "<Windows.h>", "public" ] },
# These ones are in Windows.h but the documentation post windows 8 says they are individual headers,
# which looks like M/S are trying to get their act together. Maybe.
{ include: [ "<processenv.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<processthreadsapi.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<synchapi.h>", "private", "<Windows.h>", "public" ] },
# These ones are *not* defined to be in Windows.h, but it seems to work. These should probably be cleaned up
{ include: [ "<DbgHelp.h>", "private", "<Windows.h>", "public" ] },
# These 3 should go to Shellapi.h
{ include: [ "<ShellAPI.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<Shellapi.h>", "private", "<Windows.h>", "public" ] }, # official name according to website
{ include: [ "<shellapi.h>", "private", "<Windows.h>", "public" ] },
#
{ include: [ "<knownfolders.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<ShlObj.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<objidl.h>", "private", "<Windows.h>", "public" ] },
# Files that are included by other files which seem to then come for free in Windows.h but
# shouldn't. Again, should be cleaned up.
{ include: [ "<basetyps.h>", "private", "<objbase.h>", "private" ] },
{ include: [ "<combaseapi.h>", "private", "<objbase.h>", "private" ] },
{ include: [ "<objbase.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<wtypesbase.h>", "private", "<WTypes.h>", "private" ] },
{ include: [ "<WTypes.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<guiddef.h>", "private", "<Rpc.h>", "private" ] },
{ include: [ "<Rpc.h>", "private", "<Windows.h>", "public" ] },
# Huh? This one is sane?
{ include: [ "<shlguid.h>", "private", "<shobjidl.h>", "public" ] },
# And for boost???
# These are probably correct but might need a revisit as if you look at the boost documentation pages, it
# can give you huge lists of alternate includes...
{ symbol: [ "BOOST_FOREACH", "private", "<boost/foreach.hpp>", "public" ] },
{ include: [ "@\"boost/bind/.*\"", "private", "<boost/bind.hpp>", "public" ] },
{ include: [ "@\"boost/algorithm/string/.*\"", "private", "<boost/algorithm/string.hpp>", "public" ] },
{ include: [ "@\"boost/assign/.*\"", "private", "<boost/assign.hpp>", "public" ] },
{ include: [ "@\"boost/filesystem/.*\"", "private", "<boost/filesystem.hpp>", "public" ] },
{ include: [ "@\"boost/format/.*\"", "private", "<boost/format.hpp>", "public" ] },
{ include: [ "@\"boost/function/.*\"", "private", "<boost/function.hpp>", "public" ] },
{ include: [ "@\"boost/python/.*\"", "private", "<boost/python.hpp>", "public" ] },
{ include: [ "@\"boost/signals2/.*\"", "private", "<boost/signals2.hpp>", "public" ] },
{ include: [ "\"boost/smart_ptr/scoped_array.hpp\"", "private", "<boost/scoped_array.hpp>", "public" ] },
{ include: [ "\"boost/smart_ptr/shared_ptr.hpp\"", "private", "<boost/shared_ptr.hpp>", "public" ] },
# And this is specific to us
{ include: [ "\"appconfig.inc\"", "private", "\"appconfig.h\"", "public" ] },
]
# Warning: QtGroupingProxy is not provided by Qt
#include "qpluginloader.h"
#include "qnetworkproxy.h"
# Ones I don't yet know how to deal with
#include "boost/fusion/container/vector/vector10_fwd.hpp" // for fusion
#include "boost/iterator/iterator_facade.hpp" // for operator!=
#include <crtdbg.h> // for operator delete[], etc
#include "QtCore/qiterator.h"
#include "QtCore/qtypeinfo.h" // for swap
#include "QtCore/qtypetraits.h"
#include "QtCore/qtypetraits.h" // for remove_reference<>::type
#include "QtGui/qwindowdefs_win.h" // for HINSTANCE
#include "QtWidgets/qabstractitemdelegate.h"
#include "boost/iterator/iterator_facade.hpp"
#include <xmemory0> // for _Simple_types<>::value_type
#include <xtree> // for _Tree_const_iterator
# typical error on stdout (?)
#source\hookdll\dllmain.cpp(220) : warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
# error from include-what-you-use (on stderr? at least it's in red)
#source\hookdll\dllmain.cpp(2220) : warning: case value not in enumerated type 'FILE_INFORMATION_CLASS' (aka '_FILE_INFORMATION_CLASS') [-Wswitch]
+82
View File
@@ -0,0 +1,82 @@
[
# Microsft visual C?
{ include: [ "<xiosbase>", "private", "<ios_base>", "public" ] },
{ include: [ "<xlocale>", "private", "<locale>", "public" ] },
{ include: [ "<xstring>", "private", "<string>", "public" ] },
{ include: [ "<xutility>", "private", "<utility>", "public" ] },
{ include: [ "<sys/stat.inl>", "private", "<sys/stat.h>", "public" ] },
# Windows
# Looks like the doucmentation says the 1st char is u/c the rest are l/c
# You have to be kidding me. ULONG is defined in winsmcrd.h?
{ symbol: [ "ULONG", "private", "<windef.h>", "private" ] },
{ include: [ "<winnls.h>", "private", "<stringapiset.h>", "private" ] }, # Stringapiset.h
{ include: [ "<stringapiset.h>", "private", "<Windows.h>", "public" ] },
# These are all in windef.h apparently. Which m/s then says 'use Windows.h'
{ include: [ "<basetsd.h>", "private", "<windef.h>", "private" ] }, # or in winnt apparently
{ include: [ "<handleapi.h>", "private", "<windef.h>", "private" ] },
{ include: [ "<libloaderapi.h>", "private", "<windef.h>", "private" ] },
{ include: [ "<minwindef.h>", "private", "<windef.h>", "private" ] },
# Similary, but for winbase.h
{ include: [ "<LMCons.h>", "private", "<winbase.h>", "private" ] },
{ include: [ "<errhandlingapi.h>", "private", "<winbase.h>", "private" ] },
{ include: [ "<excpt.h>", "private", "<winbase.h>", "private" ] },
{ include: [ "<minwinbase.h>", "private", "<winbase.h>", "private" ] },
{ include: [ "<namedpipeapi.h>", "private", "<winbase.h>", "private" ] },
{ include: [ "<securitybaseapi.h>", "private", "<winbase.h>", "private" ] },
# These ones say xxxx.h (include Windows.h) on the ms web site
{ include: [ "<datetimeapi.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<fileapi.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<verrsrc.h>", "private", "<Windows.h>", "public" ] }, # VerRsrc.h
{ include: [ "<winbase.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<windef.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<winerror.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<winnt.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<winuser.h>", "private", "<Windows.h>", "public" ] },
# These ones are in Windows.h but the documentation post windows 8 says they are individual headers,
# which looks like M/S are trying to get their act together. Maybe.
{ include: [ "<processenv.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<processthreadsapi.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<synchapi.h>", "private", "<Windows.h>", "public" ] },
# These ones are *not* defined to be in Windows.h, but it seems to work. These should probably be cleaned up
{ include: [ "<DbgHelp.h>", "private", "<Windows.h>", "public" ] },
# These 3 should go to Shellapi.h
{ include: [ "<ShellAPI.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<Shellapi.h>", "private", "<Windows.h>", "public" ] }, # official name according to website
{ include: [ "<shellapi.h>", "private", "<Windows.h>", "public" ] },
#
{ include: [ "<knownfolders.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<ShlObj.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<objidl.h>", "private", "<Windows.h>", "public" ] },
# Files that are included by other files which seem to then come for free in Windows.h but
# shouldn't. Again, should be cleaned up.
{ include: [ "<basetyps.h>", "private", "<objbase.h>", "private" ] },
{ include: [ "<combaseapi.h>", "private", "<objbase.h>", "private" ] },
{ include: [ "<objbase.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<wtypesbase.h>", "private", "<WTypes.h>", "private" ] },
{ include: [ "<WTypes.h>", "private", "<Windows.h>", "public" ] },
{ include: [ "<guiddef.h>", "private", "<Rpc.h>", "private" ] },
{ include: [ "<Rpc.h>", "private", "<Windows.h>", "public" ] },
# Huh? This one is sane?
{ include: [ "<shlguid.h>", "private", "<shobjidl.h>", "public" ] },
]
#include <crtdbg.h> // for operator delete[], etc
#include <xmemory0> // for _Simple_types<>::value_type
#include <xtree> // for _Tree_const_iterator