summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2018-03-15 10:51:45 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2018-03-15 12:03:53 +0000
commit5f00c4762b0aaa15c700b896398e3f94a85769b1 (patch)
treeac8cd492c713929c23a738e409aed8c65b8886c5
parent71da16ff2397f29cfaa8c0a395b278d48515552d (diff)
downloadqttools-5f00c4762b0aaa15c700b896398e3f94a85769b1.tar.gz
qdoc: Fix Pyside2 documentation builds for shadow builds
Match interesting headers by file names in case mismatches occur between installed headers and headers in the source tree. Task-number: PYSIDE-620 Change-Id: Ie36fbd46fda38c86d88a00a992cac2fb58dd76bc Reviewed-by: Martin Smith <martin.smith@qt.io>
-rw-r--r--src/qdoc/clangcodeparser.cpp30
-rw-r--r--src/qdoc/clangcodeparser.h2
2 files changed, 22 insertions, 10 deletions
diff --git a/src/qdoc/clangcodeparser.cpp b/src/qdoc/clangcodeparser.cpp
index 70d73a18e..77055ca9f 100644
--- a/src/qdoc/clangcodeparser.cpp
+++ b/src/qdoc/clangcodeparser.cpp
@@ -373,7 +373,7 @@ static Node *findFunctionNodeForCursor(QDocDatabase* qdb, CXCursor cur) {
class ClangVisitor {
public:
- ClangVisitor(QDocDatabase *qdb, const QSet<QString> &allHeaders)
+ ClangVisitor(QDocDatabase *qdb, const QHash<QString, QString> &allHeaders)
: qdb_(qdb), parent_(qdb->primaryTreeRoot()), allHeaders_(allHeaders) { }
QDocDatabase* qdocDB() { return qdb_; }
@@ -392,7 +392,8 @@ public:
isInteresting = *it;
} else {
QFileInfo fi(fromCXString(clang_getFileName(file)));
- isInteresting = allHeaders_.contains(fi.canonicalFilePath());
+ // Match by file name in case of PCH/installed headers
+ isInteresting = allHeaders_.contains(fi.fileName());
isInterestingCache_[file] = isInteresting;
}
if (isInteresting) {
@@ -441,7 +442,7 @@ private:
QDocDatabase* qdb_;
Aggregate *parent_;
- QSet<QString> allHeaders_;
+ const QHash<QString, QString> allHeaders_;
QHash<CXFile, bool> isInterestingCache_; // doing a canonicalFilePath is slow, so keep a cache.
/*!
@@ -1074,7 +1075,7 @@ QStringList ClangCodeParser::sourceFileNameFilter()
void ClangCodeParser::parseHeaderFile(const Location & /*location*/, const QString &filePath)
{
QFileInfo fi(filePath);
- allHeaders_.insert(fi.canonicalFilePath());
+ allHeaders_.insert(fi.fileName(), fi.canonicalPath());
}
static const char *defaultArgs_[] = {
@@ -1109,6 +1110,21 @@ void ClangCodeParser::getDefaultArgs()
args_.push_back(p.constData());
}
+static QVector<QByteArray> includePathsFromHeaders(const QHash<QString, QString> &allHeaders)
+{
+ QVector<QByteArray> result;
+ for (auto it = allHeaders.cbegin(), end = allHeaders.cend(); it != end; ++it) {
+ const QByteArray path = "-I" + it.value().toLatin1();
+ const QByteArray parent = "-I"
+ + QDir::cleanPath(it.value() + QLatin1String("/../")).toLatin1();
+ if (!result.contains(path))
+ result.append(path);
+ if (!result.contains(parent))
+ result.append(parent);
+ }
+ return result;
+}
+
/*!
Load the include paths into \a moreArgs.
*/
@@ -1120,16 +1136,12 @@ void ClangCodeParser::getMoreArgs()
of reasonable places to look for include files and use
that list instead.
*/
- QList<QString> headers = allHeaders_.values();
auto forest = qdb_->searchOrder();
QByteArray version = qdb_->version().toUtf8();
QString basicIncludeDir = QDir::cleanPath(QString(Config::installDir + "/../include"));
moreArgs_ += "-I" + basicIncludeDir.toLatin1();
- if (!headers.isEmpty()) {
- moreArgs_ += "-I" + QDir::cleanPath(QString(headers.at(0) + "/../")).toLatin1();
- moreArgs_ += "-I" + QDir::cleanPath(QString(headers.at(0) + "/../../")).toLatin1();
- }
+ moreArgs_ += includePathsFromHeaders(allHeaders_);
for (const auto &s : forest) {
QString module = basicIncludeDir +"/" + s->camelCaseModuleName();
moreArgs_ += QString("-I" + module).toLatin1();
diff --git a/src/qdoc/clangcodeparser.h b/src/qdoc/clangcodeparser.h
index 9b1446fda..b70fcc0e8 100644
--- a/src/qdoc/clangcodeparser.h
+++ b/src/qdoc/clangcodeparser.h
@@ -69,7 +69,7 @@ public:
void buildPCH();
private:
- QSet<QString> allHeaders_;
+ QHash<QString, QString> allHeaders_; // file name->path
QVector<QByteArray> includePaths_;
QScopedPointer<QTemporaryDir> pchFileDir_;
QByteArray pchName_;