diff options
author | Paul Wicking <paul.wicking@qt.io> | 2020-03-04 13:56:04 +0100 |
---|---|---|
committer | Paul Wicking <paul.wicking@qt.io> | 2020-03-04 13:56:04 +0100 |
commit | f428d4be3eb00e281ed18c87e7c7f61d40ed69f9 (patch) | |
tree | d204abd674c3efbbeb318b523103bfb4a068444b | |
parent | 28811dad02f18a3dc0eeae9d91cd4819780626ee (diff) | |
parent | 94ee5927f5551d32876f5854c8b0f630b68b4659 (diff) |
Merge remote-tracking branch 'origin/5.15' into dev
Change-Id: I211a32a441c5b465321770fc3d14b91eea33fb67
-rw-r--r-- | src/assistant/help/qfilternamedialog_p.h | 11 | ||||
-rw-r--r-- | src/assistant/help/qhelpfiltersettings_p.h | 11 | ||||
-rw-r--r-- | src/assistant/help/qoptionswidget_p.h | 11 | ||||
-rw-r--r-- | src/linguist/linguist/mainwindow.cpp | 5 | ||||
-rw-r--r-- | src/qdoc/clangcodeparser.cpp | 18 | ||||
-rw-r--r-- | src/qdoc/config.cpp | 28 | ||||
-rw-r--r-- | src/qdoc/config.h | 21 | ||||
-rw-r--r-- | src/qdoc/docbookgenerator.cpp | 2 | ||||
-rw-r--r-- | src/qdoc/generator.cpp | 8 | ||||
-rw-r--r-- | src/qdoc/generator.h | 17 | ||||
-rw-r--r-- | src/qdoc/htmlgenerator.cpp | 15 | ||||
-rw-r--r-- | src/qdoc/location.cpp | 35 | ||||
-rw-r--r-- | src/qdoc/location.h | 5 | ||||
-rw-r--r-- | src/qdoc/main.cpp | 33 | ||||
-rw-r--r-- | src/qdoc/qdocdatabase.cpp | 9 | ||||
-rw-r--r-- | src/qdoc/qdocindexfiles.cpp | 7 | ||||
-rw-r--r-- | src/qdoc/tree.cpp | 7 | ||||
-rw-r--r-- | tests/auto/qdoc/generatedoutput/testdata/configs/testcpp_singleexec.qdocconf | 6 | ||||
-rw-r--r-- | tests/auto/qdoc/generatedoutput/testdata/crossmodule/crossmodule_singleexec.qdocconf | 4 | ||||
-rw-r--r-- | tests/auto/qdoc/generatedoutput/testdata/singleexec/singleexec.qdocconf | 2 | ||||
-rw-r--r-- | tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp | 15 |
21 files changed, 147 insertions, 123 deletions
diff --git a/src/assistant/help/qfilternamedialog_p.h b/src/assistant/help/qfilternamedialog_p.h index f805e9308..76a495d78 100644 --- a/src/assistant/help/qfilternamedialog_p.h +++ b/src/assistant/help/qfilternamedialog_p.h @@ -29,6 +29,17 @@ #ifndef QFILTERNAMEDIALOG_H #define QFILTERNAMEDIALOG_H +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the help generator tools. This header file may change from version +// to version without notice, or even be removed. +// +// We mean it. +// + #include <QtWidgets/QDialog> #include "ui_qfilternamedialog.h" diff --git a/src/assistant/help/qhelpfiltersettings_p.h b/src/assistant/help/qhelpfiltersettings_p.h index da25d300e..cf5622b6d 100644 --- a/src/assistant/help/qhelpfiltersettings_p.h +++ b/src/assistant/help/qhelpfiltersettings_p.h @@ -40,6 +40,17 @@ #ifndef QHELPFILTERSETTINGS_H #define QHELPFILTERSETTINGS_H +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the help generator tools. This header file may change from version +// to version without notice, or even be removed. +// +// We mean it. +// + #include <QtCore/QSharedDataPointer> QT_BEGIN_NAMESPACE diff --git a/src/assistant/help/qoptionswidget_p.h b/src/assistant/help/qoptionswidget_p.h index ff075e464..a6700c1d7 100644 --- a/src/assistant/help/qoptionswidget_p.h +++ b/src/assistant/help/qoptionswidget_p.h @@ -29,6 +29,17 @@ #ifndef QOPTIONSWIDGET_H #define QOPTIONSWIDGET_H +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the help generator tools. This header file may change from version +// to version without notice, or even be removed. +// +// We mean it. +// + #include <QtWidgets/QWidget> #include <QtCore/QMap> diff --git a/src/linguist/linguist/mainwindow.cpp b/src/linguist/linguist/mainwindow.cpp index 7cc9fc740..26a3d03f2 100644 --- a/src/linguist/linguist/mainwindow.cpp +++ b/src/linguist/linguist/mainwindow.cpp @@ -299,7 +299,6 @@ MainWindow::MainWindow() m_contextDock = new QDockWidget(this); m_contextDock->setObjectName(QLatin1String("ContextDockWidget")); m_contextDock->setAllowedAreas(Qt::AllDockWidgetAreas); - m_contextDock->setFeatures(QDockWidget::AllDockWidgetFeatures); m_contextDock->setWindowTitle(tr("Context")); m_contextDock->setAcceptDrops(true); m_contextDock->installEventFilter(this); @@ -329,7 +328,6 @@ MainWindow::MainWindow() m_messagesDock = new QDockWidget(this); m_messagesDock->setObjectName(QLatin1String("StringsDockWidget")); m_messagesDock->setAllowedAreas(Qt::AllDockWidgetAreas); - m_messagesDock->setFeatures(QDockWidget::AllDockWidgetFeatures); m_messagesDock->setWindowTitle(tr("Strings")); m_messagesDock->setAcceptDrops(true); m_messagesDock->installEventFilter(this); @@ -366,7 +364,6 @@ MainWindow::MainWindow() m_phrasesDock = new QDockWidget(this); m_phrasesDock->setObjectName(QLatin1String("PhrasesDockwidget")); m_phrasesDock->setAllowedAreas(Qt::AllDockWidgetAreas); - m_phrasesDock->setFeatures(QDockWidget::AllDockWidgetFeatures); m_phrasesDock->setWindowTitle(tr("Phrases and guesses")); m_phraseView = new PhraseView(m_dataModel, &m_phraseDict, this); @@ -376,7 +373,6 @@ MainWindow::MainWindow() m_sourceAndFormDock = new QDockWidget(this); m_sourceAndFormDock->setObjectName(QLatin1String("SourceAndFormDock")); m_sourceAndFormDock->setAllowedAreas(Qt::AllDockWidgetAreas); - m_sourceAndFormDock->setFeatures(QDockWidget::AllDockWidgetFeatures); m_sourceAndFormDock->setWindowTitle(tr("Sources and Forms")); m_sourceAndFormView = new QStackedWidget(this); m_sourceAndFormDock->setWidget(m_sourceAndFormView); @@ -391,7 +387,6 @@ MainWindow::MainWindow() m_errorsDock = new QDockWidget(this); m_errorsDock->setObjectName(QLatin1String("ErrorsDockWidget")); m_errorsDock->setAllowedAreas(Qt::AllDockWidgetAreas); - m_errorsDock->setFeatures(QDockWidget::AllDockWidgetFeatures); m_errorsDock->setWindowTitle(tr("Warnings")); m_errorsView = new ErrorsView(m_dataModel, this); m_errorsDock->setWidget(m_errorsView); diff --git a/src/qdoc/clangcodeparser.cpp b/src/qdoc/clangcodeparser.cpp index 3c8fe78d1..fe2a0bca0 100644 --- a/src/qdoc/clangcodeparser.cpp +++ b/src/qdoc/clangcodeparser.cpp @@ -45,7 +45,6 @@ #include "codechunk.h" #include "config.h" -#include "generator.h" #include "loggingcategory.h" #include "qdocdatabase.h" #include "utilities.h" @@ -1281,8 +1280,7 @@ bool ClangCodeParser::getMoreArgs() of reasonable places to look for include files and use that list instead. */ - Location::logToStdErrAlways( - "No include paths passed to qdoc; guessing reasonable include paths"); + qCWarning(lcQdoc) << "No include paths passed to qdoc; guessing reasonable include paths"; guessedIncludePaths = true; auto forest = qdb_->searchOrder(); @@ -1312,7 +1310,7 @@ void ClangCodeParser::buildPCH() const QByteArray module = moduleHeader().toUtf8(); QByteArray header; QByteArray privateHeaderDir; - Location::logToStdErrAlways("Build & visit PCH for " + moduleHeader()); + qCInfo(lcQdoc) << "Build & visit PCH for " << moduleHeader(); // A predicate for std::find_if() to locate a path to the module's header // (e.g. QtGui/QtGui) to be used as pre-compiled header struct FindPredicate @@ -1403,8 +1401,7 @@ void ClangCodeParser::buildPCH() tmpHeaderFile.close(); } if (printParsingErrors_ == 0) - Location::logToStdErrAlways( - "clang not printing errors; include paths were guessed"); + qCWarning(lcQdoc) << "clang not printing errors; include paths were guessed"; CXErrorCode err = clang_parseTranslationUnit2(index_, tmpHeader.toLatin1().data(), args_.data(), static_cast<int>(args_.size()), nullptr, 0, @@ -1416,7 +1413,7 @@ void ClangCodeParser::buildPCH() auto error = clang_saveTranslationUnit(tu, pchName_.constData(), clang_defaultSaveOptions(tu)); if (error) { - Location::logToStdErrAlways("Could not save PCH file for " + moduleHeader()); + qCCritical(lcQdoc) << "Could not save PCH file for " << moduleHeader(); pchName_.clear(); } else { // Visit the header now, as token from pre-compiled header won't be visited @@ -1424,12 +1421,12 @@ void ClangCodeParser::buildPCH() CXCursor cur = clang_getTranslationUnitCursor(tu); ClangVisitor visitor(qdb_, allHeaders_); visitor.visitChildren(cur); - Location::logToStdErrAlways("PCH built & visited for " + moduleHeader()); + qCInfo(lcQdoc) << "PCH built & visited for " << moduleHeader(); } clang_disposeTranslationUnit(tu); } else { pchFileDir_->remove(); - Location::logToStdErrAlways("Could not create PCH file for " + moduleHeader()); + qCCritical(lcQdoc) << "Could not create PCH file for " << moduleHeader(); } args_.pop_back(); // remove the "-xc++"; } @@ -1705,7 +1702,8 @@ Node *ClangCodeParser::parseFnArg(const Location &location, const QString &fnArg */ if (fnNode == nullptr) { unsigned diagnosticCount = clang_getNumDiagnostics(tu); - if (diagnosticCount > 0 && (!Generator::preparing() || Generator::singleExec())) { + const auto &config = Config::instance(); + if (diagnosticCount > 0 && (!config.preparing() || config.singleExec())) { bool report = true; QStringList signature = fnArg.split(QChar('(')); if (signature.size() > 1) { diff --git a/src/qdoc/config.cpp b/src/qdoc/config.cpp index f6df0823b..dee983004 100644 --- a/src/qdoc/config.cpp +++ b/src/qdoc/config.cpp @@ -31,7 +31,7 @@ */ #include "config.h" -#include "generator.h" +#include "loggingcategory.h" #include <QtCore/qdebug.h> #include <QtCore/qdir.h> @@ -56,6 +56,7 @@ QString ConfigStrings::CPPCLASSESTITLE = QStringLiteral("cppclassestitle"); QString ConfigStrings::DEFINES = QStringLiteral("defines"); QString ConfigStrings::DEPENDS = QStringLiteral("depends"); QString ConfigStrings::DESCRIPTION = QStringLiteral("description"); +QString ConfigStrings::DOCBOOKEXTENSIONS = QStringLiteral("usedocbookextensions"); QString ConfigStrings::EDITION = QStringLiteral("edition"); QString ConfigStrings::ENDHEADER = QStringLiteral("endheader"); QString ConfigStrings::EXAMPLEDIRS = QStringLiteral("exampledirs"); @@ -84,6 +85,7 @@ QString ConfigStrings::LANDINGPAGE = QStringLiteral("landingpage"); QString ConfigStrings::LANDINGTITLE = QStringLiteral("landingtitle"); QString ConfigStrings::LANGUAGE = QStringLiteral("language"); QString ConfigStrings::LOCATIONINFO = QStringLiteral("locationinfo"); +QString ConfigStrings::LOGPROGRESS = QStringLiteral("logprogress"); QString ConfigStrings::MACRO = QStringLiteral("macro"); QString ConfigStrings::MANIFESTMETA = QStringLiteral("manifestmeta"); QString ConfigStrings::MODULEHEADER = QStringLiteral("moduleheader"); @@ -116,6 +118,7 @@ QString ConfigStrings::STYLESHEETS = QStringLiteral("stylesheets"); QString ConfigStrings::SYNTAXHIGHLIGHTING = QStringLiteral("syntaxhighlighting"); QString ConfigStrings::TABSIZE = QStringLiteral("tabsize"); QString ConfigStrings::TAGFILE = QStringLiteral("tagfile"); +QString ConfigStrings::TIMESTAMPS = QStringLiteral("timestamps"); QString ConfigStrings::TRANSLATORS = QStringLiteral("translators"); QString ConfigStrings::URL = QStringLiteral("url"); QString ConfigStrings::VERSION = QStringLiteral("version"); @@ -384,21 +387,20 @@ void Config::processCommandLineOptions(const QStringList &args) debug_ = m_parser.isSet(m_parser.debugOption); - // TODO: Make Generator use Config instead of storing these separately if (m_parser.isSet(m_parser.prepareOption)) - Generator::setQDocPass(Generator::Prepare); + m_qdocPass = Prepare; if (m_parser.isSet(m_parser.generateOption)) - Generator::setQDocPass(Generator::Generate); - if (m_parser.isSet(m_parser.singleExecOption)) - Generator::setSingleExec(); - if (m_parser.isSet(m_parser.writeQaPagesOption)) - Generator::setWriteQaPages(); + m_qdocPass = Generate; + if (m_parser.isSet(m_parser.writeQaPagesOption)) { + qCWarning(lcQdoc, + "The QA pages option for QDoc is deprecated and will be removed in Qt 6."); + } if (m_parser.isSet(m_parser.logProgressOption)) - Location::startLoggingProgress(); + setStringList(CONFIG_LOGPROGRESS, QStringList("true")); if (m_parser.isSet(m_parser.timestampsOption)) - Generator::setUseTimestamps(); + setStringList(CONFIG_TIMESTAMPS, QStringList("true")); if (m_parser.isSet(m_parser.useDocBookExtensions)) - Generator::setUseDocBookExtensions(); + setStringList(CONFIG_DOCBOOKEXTENSIONS, QStringList("true")); } void Config::setIncludePaths() @@ -426,7 +428,7 @@ void Config::setIndexDirs() [](const QString &s) { return !QFile::exists(s); }); std::for_each(it, m_indexDirs.end(), [](const QString &s) { - Location::logToStdErrAlways(tr("Cannot find index directory: %1").arg(s)); + qCWarning(lcQdoc) << "Cannot find index directory: " << s; }); m_indexDirs.erase(it, m_indexDirs.end()); } @@ -471,7 +473,7 @@ QString Config::getOutputDir(const QString &format) const t = getString(CONFIG_OUTPUTDIR); else t = overrideOutputDir; - if (Generator::singleExec()) { + if (getBool(CONFIG_SINGLEEXEC)) { QString project = getString(CONFIG_PROJECT); t += QLatin1Char('/') + project.toLower(); } diff --git a/src/qdoc/config.h b/src/qdoc/config.h index 151a8caee..30b2637f6 100644 --- a/src/qdoc/config.h +++ b/src/qdoc/config.h @@ -98,6 +98,8 @@ class Config : public Singleton<Config> public: ~Config(); + enum QDocPass { Neither, Prepare, Generate }; + void init(const QString &programName, const QStringList &args); bool getDebug() const { return debug_; } @@ -163,6 +165,7 @@ public: static QSet<QString> overrideOutputFormats; inline bool singleExec() const; + inline bool dualExec() const; QStringList &defines() { return m_defines; } QStringList &dependModules() { return m_dependModules; } QStringList &includePaths() { return m_includePaths; } @@ -172,6 +175,11 @@ public: QString previousCurrentDir() const { return m_previousCurrentDir; } void setPreviousCurrentDir(const QString &path) { m_previousCurrentDir = path; } + QDocPass qdocPass() const { return m_qdocPass; } + void setQDocPass(const QDocPass &pass) { m_qdocPass = pass; }; + bool preparing() const { return (m_qdocPass == Prepare); } + bool generating() const { return (m_qdocPass == Generate); } + private: void processCommandLineOptions(const QStringList &args); void setIncludePaths(); @@ -198,6 +206,8 @@ private: static QStack<QString> workingDirs_; static QMap<QString, QStringList> includeFilesMap_; QDocCommandLineParser m_parser; + + QDocPass m_qdocPass = Neither; }; struct ConfigStrings @@ -214,6 +224,7 @@ struct ConfigStrings static QString DEFINES; static QString DEPENDS; static QString DESCRIPTION; + static QString DOCBOOKEXTENSIONS; static QString EDITION; static QString ENDHEADER; static QString EXAMPLEDIRS; @@ -242,6 +253,7 @@ struct ConfigStrings static QString LANDINGTITLE; static QString LANGUAGE; static QString LOCATIONINFO; + static QString LOGPROGRESS; static QString MACRO; static QString MANIFESTMETA; static QString MODULEHEADER; @@ -273,6 +285,7 @@ struct ConfigStrings static QString SYNTAXHIGHLIGHTING; static QString TABSIZE; static QString TAGFILE; + static QString TIMESTAMPS; static QString TRANSLATORS; static QString URL; static QString VERSION; @@ -298,6 +311,7 @@ struct ConfigStrings #define CONFIG_DEFINES ConfigStrings::DEFINES #define CONFIG_DEPENDS ConfigStrings::DEPENDS #define CONFIG_DESCRIPTION ConfigStrings::DESCRIPTION +#define CONFIG_DOCBOOKEXTENSIONS ConfigStrings::DOCBOOKEXTENSIONS #define CONFIG_EDITION ConfigStrings::EDITION #define CONFIG_ENDHEADER ConfigStrings::ENDHEADER #define CONFIG_EXAMPLEDIRS ConfigStrings::EXAMPLEDIRS @@ -326,6 +340,7 @@ struct ConfigStrings #define CONFIG_LANDINGTITLE ConfigStrings::LANDINGTITLE #define CONFIG_LANGUAGE ConfigStrings::LANGUAGE #define CONFIG_LOCATIONINFO ConfigStrings::LOCATIONINFO +#define CONFIG_LOGPROGRESS ConfigStrings::LOGPROGRESS #define CONFIG_MACRO ConfigStrings::MACRO #define CONFIG_MANIFESTMETA ConfigStrings::MANIFESTMETA #define CONFIG_MODULEHEADER ConfigStrings::MODULEHEADER @@ -357,6 +372,7 @@ struct ConfigStrings #define CONFIG_SYNTAXHIGHLIGHTING ConfigStrings::SYNTAXHIGHLIGHTING #define CONFIG_TABSIZE ConfigStrings::TABSIZE #define CONFIG_TAGFILE ConfigStrings::TAGFILE +#define CONFIG_TIMESTAMPS ConfigStrings::TIMESTAMPS #define CONFIG_TRANSLATORS ConfigStrings::TRANSLATORS #define CONFIG_URL ConfigStrings::URL #define CONFIG_VERSION ConfigStrings::VERSION @@ -374,6 +390,11 @@ inline bool Config::singleExec() const return getBool(CONFIG_SINGLEEXEC); } +inline bool Config::dualExec() const +{ + return !getBool(CONFIG_SINGLEEXEC); +} + QT_END_NAMESPACE #endif diff --git a/src/qdoc/docbookgenerator.cpp b/src/qdoc/docbookgenerator.cpp index 8e2292211..5f8d961f8 100644 --- a/src/qdoc/docbookgenerator.cpp +++ b/src/qdoc/docbookgenerator.cpp @@ -2537,7 +2537,7 @@ void DocBookGenerator::generateDocBookSynopsis(const Node *node) // Generator::generateThreadSafeness, QDocIndexFiles::generateIndexSection. // This function is the only place where DocBook extensions are used. - if (useDocBookExtensions()) + if (config->getBool(CONFIG_DOCBOOKEXTENSIONS)) return; // Nothing to export in some cases. diff --git a/src/qdoc/generator.cpp b/src/qdoc/generator.cpp index f886ef56c..7bb32f471 100644 --- a/src/qdoc/generator.cpp +++ b/src/qdoc/generator.cpp @@ -75,12 +75,8 @@ QStringList Generator::styleFiles; bool Generator::noLinkErrors_ = false; bool Generator::autolinkErrors_ = false; bool Generator::redirectDocumentationToDevNull_ = false; -Generator::QDocPass Generator::qdocPass_ = Generator::Neither; bool Generator::qdocSingleExec_ = false; -bool Generator::qdocWriteQaPages_ = false; bool Generator::useOutputSubdirs_ = true; -bool Generator::useTimestamps_ = false; -bool Generator::useDocBookExtensions_ = false; QmlTypeNode *Generator::qmlTypeContext_ = nullptr; static QRegExp tag("</?@[^>]*>"); @@ -1814,7 +1810,7 @@ void Generator::initializeFormat() QDir dirInfo; if (dirInfo.exists(outDir_)) { - if (!generating() && Generator::useOutputSubdirs()) { + if (!config.generating() && Generator::useOutputSubdirs()) { if (!Config::removeDirContents(outDir_)) config.lastLocation().error(tr("Cannot empty output directory '%1'").arg(outDir_)); } @@ -1823,7 +1819,7 @@ void Generator::initializeFormat() } // Output directory exists, which is enough for prepare phase. - if (preparing()) + if (config.preparing()) return; if (!dirInfo.exists(outDir_ + "/images") && !dirInfo.mkdir(outDir_ + "/images")) diff --git a/src/qdoc/generator.h b/src/qdoc/generator.h index 05a215c46..fd5fbbcef 100644 --- a/src/qdoc/generator.h +++ b/src/qdoc/generator.h @@ -52,7 +52,6 @@ class Generator Q_DECLARE_TR_FUNCTIONS(QDoc::Generator) public: - enum QDocPass { Neither, Prepare, Generate }; enum ListType { Generic, Obsolete }; Generator(); @@ -80,16 +79,6 @@ public: static void augmentImageDirs(QSet<QString> &moreImageDirs); static bool noLinkErrors() { return noLinkErrors_; } static bool autolinkErrors() { return autolinkErrors_; } - static void setQDocPass(QDocPass t) { qdocPass_ = t; } - static void setUseTimestamps() { useTimestamps_ = true; } - static void setUseDocBookExtensions() { useDocBookExtensions_ = true; } - static bool preparing() { return (qdocPass_ == Prepare); } - static bool generating() { return (qdocPass_ == Generate); } - static bool singleExec() { return qdocSingleExec_; } - static bool dualExec() { return !qdocSingleExec_; } - static bool writeQaPages() { return qdocWriteQaPages_; } - static void setSingleExec() { qdocSingleExec_ = true; } - static void setWriteQaPages() { qdocWriteQaPages_ = true; } static QString defaultModuleName() { return project_; } static void resetUseOutputSubdirs() { useOutputSubdirs_ = false; } static bool useOutputSubdirs() { return useOutputSubdirs_; } @@ -97,8 +86,6 @@ public: static QmlTypeNode *qmlTypeContext() { return qmlTypeContext_; } static QString cleanRef(const QString &ref); static QString plainCode(const QString &markedCode); - static bool useTimestamps() { return useTimestamps_; } - static bool useDocBookExtensions() { return useDocBookExtensions_; } protected: static QFile *openSubPageFile(const Node *node, const QString &fileName); @@ -220,12 +207,8 @@ private: static bool noLinkErrors_; static bool autolinkErrors_; static bool redirectDocumentationToDevNull_; - static QDocPass qdocPass_; static bool qdocSingleExec_; - static bool qdocWriteQaPages_; static bool useOutputSubdirs_; - static bool useTimestamps_; - static bool useDocBookExtensions_; static QmlTypeNode *qmlTypeContext_; void generateReimplementsClause(const FunctionNode *fn, CodeMarker *marker); diff --git a/src/qdoc/htmlgenerator.cpp b/src/qdoc/htmlgenerator.cpp index 8bd009f5f..e7f4dc1cb 100644 --- a/src/qdoc/htmlgenerator.cpp +++ b/src/qdoc/htmlgenerator.cpp @@ -285,19 +285,19 @@ void HtmlGenerator::generateDocs() Node *qflags = qdb_->findClassNode(QStringList("QFlags")); if (qflags) qflagsHref_ = linkForNode(qflags, nullptr); - if (!preparing()) + if (!config->preparing()) Generator::generateDocs(); - if (Generator::generating() && Generator::writeQaPages()) + if (config->generating() && config->getBool(CONFIG_WRITEQAPAGES)) generateQAPage(); - if (!generating()) { + if (!config->generating()) { QString fileBase = project.toLower().simplified().replace(QLatin1Char(' '), QLatin1Char('-')); qdb_->generateIndex(outputDir() + QLatin1Char('/') + fileBase + ".index", projectUrl, projectDescription, this); } - if (!preparing()) { + if (!config->preparing()) { helpProjectWriter->generate(); generateManifestFiles(); /* @@ -502,7 +502,8 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark if (link.isEmpty()) { out() << protectEnc(atom->string()); } else { - if (Generator::writeQaPages() && node && (atom->type() != Atom::NavAutoLink)) { + if (config->getBool(CONFIG_WRITEQAPAGES) + && node && (atom->type() != Atom::NavAutoLink)) { QString text = atom->string(); QString target = qdb_->getNewLinkTarget(relative, node, outFileName(), text); out() << "<a id=\"" << Doc::canonicalTitle(target) @@ -846,13 +847,13 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark QString link = getLink(atom, relative, &node); if (link.isEmpty() && (node != relative) && !noLinkErrors()) { relative->doc().location().warning(tr("Can't link to '%1'").arg(atom->string())); - if (Generator::writeQaPages() && (atom->type() != Atom::NavAutoLink)) { + if (config->getBool(CONFIG_WRITEQAPAGES) && (atom->type() != Atom::NavAutoLink)) { QString text = atom->next()->next()->string(); QString target = qdb_->getNewLinkTarget(relative, node, outFileName(), text, true); out() << "<a id=\"" << Doc::canonicalTitle(target) << "\" class=\"qa-mark\"></a>"; } } else { - if (Generator::writeQaPages() && node && (atom->type() != Atom::NavLink)) { + if (config->getBool(CONFIG_WRITEQAPAGES) && node && (atom->type() != Atom::NavLink)) { QString text = atom->next()->next()->string(); QString target = qdb_->getNewLinkTarget(relative, node, outFileName(), text); out() << "<a id=\"" << Doc::canonicalTitle(target) << "\" class=\"qa-mark\"></a>"; diff --git a/src/qdoc/location.cpp b/src/qdoc/location.cpp index a77537f56..a63b1780e 100644 --- a/src/qdoc/location.cpp +++ b/src/qdoc/location.cpp @@ -48,7 +48,6 @@ int Location::warningLimit = -1; QString Location::programName; QString Location::project; QRegExp *Location::spuriousRegExp = nullptr; -bool Location::logProgress_ = false; /*! \class Location @@ -256,7 +255,8 @@ QString Location::canonicalRelativePath(const QString &path) */ void Location::warning(const QString &message, const QString &details) const { - if (!Generator::preparing() || Generator::singleExec()) + const auto &config = Config::instance(); + if (!config.preparing() || config.singleExec()) emitMessage(Warning, message, details); } @@ -267,7 +267,8 @@ void Location::warning(const QString &message, const QString &details) const */ void Location::error(const QString &message, const QString &details) const { - if (!Generator::preparing() || Generator::singleExec()) + const auto &config = Config::instance(); + if (!config.preparing() || config.singleExec()) emitMessage(Error, message, details); } @@ -358,34 +359,6 @@ void Location::information(const QString &message) } /*! - Prints \a message to \c stderr followed by a \c{'\n'}, - but only if the -log-progress option is set. - */ -void Location::logToStdErr(const QString &message) -{ - if (logProgress_) { - fprintf(stderr, "LOG: %s\n", message.toLatin1().data()); - fflush(stderr); - } -} - -/*! - Always prints the current time and \a message to \c stderr - followed by a \c{'\n'}. - */ -void Location::logToStdErrAlways(const QString &message) -{ - if (Generator::useTimestamps()) { - QTime t = QTime::currentTime(); - fprintf(stderr, "%s LOG: %s\n", t.toString().toLatin1().constData(), - message.toLatin1().data()); - } else { - fprintf(stderr, "LOG: %s\n", message.toLatin1().constData()); - } - fflush(stderr); -} - -/*! Report a program bug, including the \a hint. */ void Location::internalError(const QString &hint) diff --git a/src/qdoc/location.h b/src/qdoc/location.h index f6704ca87..68ab28845 100644 --- a/src/qdoc/location.h +++ b/src/qdoc/location.h @@ -84,10 +84,6 @@ public: static void terminate(); static void information(const QString &message); static void internalError(const QString &hint); - static void logToStdErr(const QString &message); - static void logToStdErrAlways(const QString &message); - static void startLoggingProgress() { logProgress_ = true; } - static void stopLoggingProgress() { logProgress_ = false; } static QString canonicalRelativePath(const QString &path); static int exitCode(); @@ -119,7 +115,6 @@ private: static QString programName; static QString project; static QRegExp *spuriousRegExp; - static bool logProgress_; }; Q_DECLARE_TYPEINFO(Location::StackEntry, Q_MOVABLE_TYPE); Q_DECLARE_TYPEINFO(Location, Q_COMPLEX_TYPE); // stkTop = &stkBottom diff --git a/src/qdoc/main.cpp b/src/qdoc/main.cpp index 87a1b4b2d..96e93c015 100644 --- a/src/qdoc/main.cpp +++ b/src/qdoc/main.cpp @@ -160,9 +160,9 @@ static void loadIndexFiles(const QSet<QString> &formats) // Remove self-dependencies and possible duplicates config.dependModules().removeAll(config.getString(CONFIG_PROJECT).toLower()); config.dependModules().removeDuplicates(); - Location::logToStdErrAlways(QString("qdocconf file has depends = *;" - " loading all %1 index files found") - .arg(config.dependModules().count())); + qCCritical(lcQdoc) << "qdocconf file has depends = *; loading all " + << config.dependModules().count() + << " index files found"; } for (const auto &module : config.dependModules()) { QVector<QFileInfo> foundIndices; @@ -237,13 +237,13 @@ void logStartEndMessage(const QLatin1String &startStop, const Config &config) const QString runName = " qdoc for " + config.getString(CONFIG_PROJECT) + QLatin1String(" in ") - + QLatin1String(Generator::singleExec() ? "single" : "dual") + + QLatin1String(config.singleExec() ? "single" : "dual") + QLatin1String(" process mode, (") - + QLatin1String(Generator::preparing() ? "prepare" : "generate") + + QLatin1String(config.preparing() ? "prepare" : "generate") + QLatin1String(" phase)"); const QString msg = startStop + runName; - Location::logToStdErrAlways(msg); + qCInfo(lcQdoc) << msg.data(); } /*! @@ -269,8 +269,7 @@ static void processQdocconfFile(const QString &fileName) config.load(fileName); QString project = config.getString(CONFIG_PROJECT); if (project.isEmpty()) { - Location::logToStdErrAlways( - QLatin1String("qdoc can't run; no project set in qdocconf file")); + qCCritical(lcQdoc) << QLatin1String("qdoc can't run; no project set in qdocconf file"); exit(1); } Location::terminate(); @@ -359,14 +358,14 @@ static void processQdocconfFile(const QString &fileName) Location outputFormatsLocation = config.lastLocation(); qdb->clearSearchOrder(); - if (!Generator::singleExec()) { - if (!Generator::preparing()) { + if (!config.singleExec()) { + if (!config.preparing()) { qCDebug(lcQdoc, " loading index files"); loadIndexFiles(outputFormats); qCDebug(lcQdoc, " done loading index files"); } qdb->newPrimaryTree(project); - } else if (Generator::preparing()) + } else if (config.preparing()) qdb->newPrimaryTree(project); else qdb->setPrimaryTree(project); @@ -410,7 +409,7 @@ static void processQdocconfFile(const QString &fileName) } Generator::augmentImageDirs(exampleImageDirs); - if (Generator::dualExec() || Generator::preparing()) { + if (config.dualExec() || config.preparing()) { QStringList headerList; QStringList sourceList; @@ -479,7 +478,7 @@ static void processQdocconfFile(const QString &fileName) add it to the big tree. */ parsed = 0; - Location::logToStdErrAlways("Parse source files for " + project); + qCInfo(lcQdoc) << "Parse source files for " << project; for (const auto &key : sources.keys()) { auto *codeParser = CodeParser::parserForSourceFile(key); if (codeParser) { @@ -488,7 +487,7 @@ static void processQdocconfFile(const QString &fileName) codeParser->parseSourceFile(config.location(), key); } } - Location::logToStdErrAlways("Source files parsed for " + project); + qCInfo(lcQdoc) << "Source files parsed for " << project; } /* Now the primary tree has been built from all the header and @@ -586,14 +585,14 @@ int main(int argc, char **argv) if (config.singleExec()) qdocFiles = Config::loadMaster(qdocFiles.at(0)); - if (Generator::singleExec()) { + if (config.singleExec()) { // single qdoc process for prepare and generate phases - Generator::setQDocPass(Generator::Prepare); + config.setQDocPass(Config::Prepare); for (const auto &file : qAsConst(qdocFiles)) { config.dependModules().clear(); processQdocconfFile(file); } - Generator::setQDocPass(Generator::Generate); + config.setQDocPass(Config::Generate); QDocDatabase::qdocDB()->processForest(); for (const auto &file : qAsConst(qdocFiles)) { config.dependModules().clear(); diff --git a/src/qdoc/qdocdatabase.cpp b/src/qdoc/qdocdatabase.cpp index 2297c237d..966fb8aaa 100644 --- a/src/qdoc/qdocdatabase.cpp +++ b/src/qdoc/qdocdatabase.cpp @@ -1102,7 +1102,8 @@ const NodeMap &QDocDatabase::getSinceMap(const QString &key) */ void QDocDatabase::resolveStuff() { - if (Generator::dualExec() || Generator::preparing()) { + const auto &config = Config::instance(); + if (config.dualExec() || config.preparing()) { // order matters primaryTree()->resolveBaseClasses(primaryTreeRoot()); primaryTree()->resolvePropertyOverriddenFromPtrs(primaryTreeRoot()); @@ -1116,19 +1117,19 @@ void QDocDatabase::resolveStuff() primaryTree()->resolveCppToQmlLinks(); primaryTree()->resolveUsingClauses(); } - if (Generator::singleExec() && Generator::generating()) { + if (config.singleExec() && config.generating()) { primaryTree()->resolveBaseClasses(primaryTreeRoot()); primaryTree()->resolvePropertyOverriddenFromPtrs(primaryTreeRoot()); primaryTreeRoot()->resolveQmlInheritance(); primaryTree()->resolveCppToQmlLinks(); primaryTree()->resolveUsingClauses(); } - if (Generator::generating()) { + if (config.generating()) { resolveNamespaces(); resolveProxies(); resolveBaseClasses(); } - if (Generator::dualExec()) + if (config.dualExec()) QDocIndexFiles::destroyQDocIndexFiles(); } diff --git a/src/qdoc/qdocindexfiles.cpp b/src/qdoc/qdocindexfiles.cpp index 6a09571dd..f51526ab1 100644 --- a/src/qdoc/qdocindexfiles.cpp +++ b/src/qdoc/qdocindexfiles.cpp @@ -32,6 +32,7 @@ #include "config.h" #include "generator.h" #include "location.h" +#include "loggingcategory.h" #include "qdocdatabase.h" #include "qdoctagfiles.h" @@ -109,8 +110,7 @@ void QDocIndexFiles::destroyQDocIndexFiles() void QDocIndexFiles::readIndexes(const QStringList &indexFiles) { for (const QString &file : indexFiles) { - QString msg = "Loading index file: " + file; - Location::logToStdErr(msg); + qCInfo(lcQdoc) << "Loading index file: " << file; readIndexFile(file); } } @@ -1522,8 +1522,7 @@ void QDocIndexFiles::generateIndex(const QString &fileName, const QString &url, if (!file.open(QFile::WriteOnly | QFile::Text)) return; - QString msg = "Writing index file: " + fileName; - Location::logToStdErr(msg); + qCInfo(lcQdoc) << "Writing index file: " << fileName; gen_ = g; QXmlStreamWriter writer(&file); diff --git a/src/qdoc/tree.cpp b/src/qdoc/tree.cpp index 2cc36736f..f6477b6b1 100644 --- a/src/qdoc/tree.cpp +++ b/src/qdoc/tree.cpp @@ -78,9 +78,9 @@ Tree::Tree(const QString &camelCaseModuleName, QDocDatabase *qdb) { root_.setPhysicalModuleName(physicalModuleName_); root_.setTree(this); - if (Generator::writeQaPages()) { + const auto &config = Config::instance(); + if (config.getBool(CONFIG_WRITEQAPAGES)) targetListMap_ = new TargetListMap; - } } /*! @@ -104,7 +104,8 @@ Tree::~Tree() } nodesByTargetRef_.clear(); nodesByTargetTitle_.clear(); - if (Generator::writeQaPages() && targetListMap_) { + const auto &config = Config::instance(); + if (config.getBool(CONFIG_WRITEQAPAGES) && targetListMap_) { for (auto target = targetListMap_->begin(); target != targetListMap_->end(); ++target) { TargetList *tlist = target.value(); if (tlist) { diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/testcpp_singleexec.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/testcpp_singleexec.qdocconf new file mode 100644 index 000000000..2ca75ea0a --- /dev/null +++ b/tests/auto/qdoc/generatedoutput/testdata/configs/testcpp_singleexec.qdocconf @@ -0,0 +1,6 @@ +include(testcpp.qdocconf) + +# Config::getOutputDir() forces a subdir in single-exec mode (why?), +# disable it here explicitly +HTML.nosubdirs = true +HTML.outputsubdir = . diff --git a/tests/auto/qdoc/generatedoutput/testdata/crossmodule/crossmodule_singleexec.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/crossmodule/crossmodule_singleexec.qdocconf new file mode 100644 index 000000000..d49498ec0 --- /dev/null +++ b/tests/auto/qdoc/generatedoutput/testdata/crossmodule/crossmodule_singleexec.qdocconf @@ -0,0 +1,4 @@ +include(crossmodule.qdocconf) + +HTML.nosubdirs = true +HTML.outputsubdir = crossmodule diff --git a/tests/auto/qdoc/generatedoutput/testdata/singleexec/singleexec.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/singleexec/singleexec.qdocconf new file mode 100644 index 000000000..eee0253d0 --- /dev/null +++ b/tests/auto/qdoc/generatedoutput/testdata/singleexec/singleexec.qdocconf @@ -0,0 +1,2 @@ +./testdata/configs/testcpp_singleexec.qdocconf +./testdata/crossmodule/crossmodule_singleexec.qdocconf diff --git a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp index 3c47627b3..b3509dfff 100644 --- a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp +++ b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp @@ -64,6 +64,7 @@ private slots: void inheritedQmlPropertyGroups(); void crossModuleLinking(); void includeFromExampleDirs(); + void singleExec(); private: QScopedPointer<QTemporaryDir> m_outputDir; @@ -343,6 +344,20 @@ void tst_generatedOutput::includeFromExampleDirs() "includefromexampledirs/qml-qdoc-test-abstractparent-members.html"); } +void tst_generatedOutput::singleExec() +{ + // Build both testcpp and crossmodule projects in single-exec mode + testAndCompare("testdata/singleexec/singleexec.qdocconf", + "testcpp-module.html " + "testqdoc-test.html " + "testqdoc-test-members.html " + "testqdoc.html " + "crossmodule/testtype.html " + "crossmodule/testtype-members.html", + "-single-exec"); +} + + QTEST_APPLESS_MAIN(tst_generatedOutput) #include "tst_generatedoutput.moc" |