diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/qdoc/codeparser.cpp | 8 | ||||
-rw-r--r-- | src/qdoc/codeparser.h | 1 | ||||
-rw-r--r-- | src/qdoc/cppcodeparser.cpp | 5 | ||||
-rw-r--r-- | src/qdoc/doc/qdoc-manual-cmdindex.qdoc | 1 | ||||
-rw-r--r-- | src/qdoc/doc/qdoc-manual-contextcmds.qdoc | 1 | ||||
-rw-r--r-- | src/qdoc/doc/qdoc-manual-markupcmds.qdoc | 29 | ||||
-rw-r--r-- | src/qdoc/docbookgenerator.cpp | 42 | ||||
-rw-r--r-- | src/qdoc/docbookgenerator.h | 1 | ||||
-rw-r--r-- | src/qdoc/htmlgenerator.cpp | 30 | ||||
-rw-r--r-- | src/qdoc/htmlgenerator.h | 2 | ||||
-rw-r--r-- | src/qdoc/node.h | 5 |
11 files changed, 115 insertions, 10 deletions
diff --git a/src/qdoc/codeparser.cpp b/src/qdoc/codeparser.cpp index b7f5ddba0..9bf518847 100644 --- a/src/qdoc/codeparser.cpp +++ b/src/qdoc/codeparser.cpp @@ -160,10 +160,10 @@ const QSet<QString> &CodeParser::commonMetaCommands() << COMMAND_INQMLMODULE << COMMAND_INTERNAL << COMMAND_MAINCLASS << COMMAND_NOAUTOLIST << COMMAND_NONREENTRANT << COMMAND_OBSOLETE << COMMAND_PRELIMINARY << COMMAND_QMLABSTRACT << COMMAND_QMLDEFAULT - << COMMAND_QMLINHERITS << COMMAND_QMLREADONLY << COMMAND_QTVARIABLE - << COMMAND_REENTRANT << COMMAND_SINCE << COMMAND_STARTPAGE - << COMMAND_SUBTITLE << COMMAND_THREADSAFE << COMMAND_TITLE - << COMMAND_WRAPPER; + << COMMAND_QMLINHERITS << COMMAND_QMLREADONLY << COMMAND_QTCMAKEPACKAGE + << COMMAND_QTVARIABLE << COMMAND_REENTRANT << COMMAND_SINCE + << COMMAND_STARTPAGE << COMMAND_SUBTITLE << COMMAND_THREADSAFE + << COMMAND_TITLE << COMMAND_WRAPPER; } return commonMetaCommands_; } diff --git a/src/qdoc/codeparser.h b/src/qdoc/codeparser.h index 163a2c226..2c690de9d 100644 --- a/src/qdoc/codeparser.h +++ b/src/qdoc/codeparser.h @@ -158,6 +158,7 @@ private: #define COMMAND_QMLREADONLY Doc::alias(QLatin1String("readonly")) #define COMMAND_QMLSIGNAL Doc::alias(QLatin1String("qmlsignal")) #define COMMAND_QMLTYPE Doc::alias(QLatin1String("qmltype")) +#define COMMAND_QTCMAKEPACKAGE Doc::alias(QLatin1String("qtcmakepackage")) #define COMMAND_QTVARIABLE Doc::alias(QLatin1String("qtvariable")) #define COMMAND_REENTRANT Doc::alias(QLatin1String("reentrant")) #define COMMAND_REIMP Doc::alias(QLatin1String("reimp")) diff --git a/src/qdoc/cppcodeparser.cpp b/src/qdoc/cppcodeparser.cpp index 2cb6a7820..8b21d56ed 100644 --- a/src/qdoc/cppcodeparser.cpp +++ b/src/qdoc/cppcodeparser.cpp @@ -628,6 +628,11 @@ void CppCodeParser::processMetaCommand(const Doc &doc, const QString &command, doc.location().warning( tr("Command '\\%1' is only meaningful in '\\module' and '\\qmlmodule'.") .arg(COMMAND_QTVARIABLE)); + } else if (command == COMMAND_QTCMAKEPACKAGE) { + node->setQtCMakeComponent(arg); + if (!node->isModule()) + doc.location().warning(tr("Command '\\%1' is only meaningful in '\\module'.") + .arg(COMMAND_QTCMAKEPACKAGE)); } else if (command == COMMAND_NOAUTOLIST) { node->setNoAutoList(true); } diff --git a/src/qdoc/doc/qdoc-manual-cmdindex.qdoc b/src/qdoc/doc/qdoc-manual-cmdindex.qdoc index 77a3266fb..48bb8a5e5 100644 --- a/src/qdoc/doc/qdoc-manual-cmdindex.qdoc +++ b/src/qdoc/doc/qdoc-manual-cmdindex.qdoc @@ -113,6 +113,7 @@ \li \l {qmlproperty-command} {\\qmlproperty} \li \l {qmlsignal-command} {\\qmlsignal} \li \l {qmlmodule-command} {\\qmlmodule} + \li \l {qtcmakepackage-command} {\\qtcmakepackage} \li \l {quotation-command} {\\quotation} \li \l {quotefile-command} {\\quotefile} \li \l {quotefromfile-command} {\\quotefromfile} diff --git a/src/qdoc/doc/qdoc-manual-contextcmds.qdoc b/src/qdoc/doc/qdoc-manual-contextcmds.qdoc index 3d69e76a6..a049c2583 100644 --- a/src/qdoc/doc/qdoc-manual-contextcmds.qdoc +++ b/src/qdoc/doc/qdoc-manual-contextcmds.qdoc @@ -57,6 +57,7 @@ \li \l {preliminary-command}{\\preliminary}, \li \l {previouspage-command}{\\previouspage}, \li \l {qmlabstract-command} {\\qmlabstract} + \li \l {qtcmakepackage-command} {\\qtcmakepackage} \li \l {reentrant-command}{\\reentrant}, \li \l {reimp-command}{\\reimp}, \li \l {relates-command}{\\relates}, diff --git a/src/qdoc/doc/qdoc-manual-markupcmds.qdoc b/src/qdoc/doc/qdoc-manual-markupcmds.qdoc index 901d908a7..3e69338d0 100644 --- a/src/qdoc/doc/qdoc-manual-markupcmds.qdoc +++ b/src/qdoc/doc/qdoc-manual-markupcmds.qdoc @@ -3317,6 +3317,35 @@ \e{\\class} or \e{\\qmltype} comment. + \target qtcmakepackage-command + \section1 \\qtcmakepackage + + Use the \\qtcmakepackage command to add CMake package information to classes + and namespaces. This information will then appear in a table at the top of + the class or namespace documentation page. For example: + + \code + / *! + \namespace Foo + \inheaderfile Bar + \qtcmakepackage Baz + \brief A namespace. + + [...] + * / + \endcode + + QDoc will output this as + + \raw HTML + <h1 class="title">Foo Namespace</h1> + <p>A namespace. <a href="#details">More...</a></p> + <div class="table"><table class="alignedsummary"> + <tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include <Bar></span> + </td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT Baz)</td></tr> + \endraw + + \target generatelist-command \section1 \\generatelist diff --git a/src/qdoc/docbookgenerator.cpp b/src/qdoc/docbookgenerator.cpp index 8dc30df29..f3cdb042f 100644 --- a/src/qdoc/docbookgenerator.cpp +++ b/src/qdoc/docbookgenerator.cpp @@ -1691,6 +1691,22 @@ void DocBookGenerator::generateRequisite(const QString &description, const QStri generateEndRequisite(); } +/*! + * \internal + * Generates the CMake (\a description) requisites + */ +void DocBookGenerator::generateCMakeRequisite(const QStringList &values) +{ + const QString description("CMake"); + generateStartRequisite(description); + writer->writeCharacters(values.first()); + writer->writeEndElement(); // para + newLine(); + writer->writeStartElement(dbNamespace, "para"); + writer->writeCharacters(values.last()); + generateEndRequisite(); +} + void DocBookGenerator::generateSortedNames(const ClassNode *cn, const QVector<RelatedClass> &rc) { // From Generator::appendSortedNames. @@ -1756,13 +1772,21 @@ void DocBookGenerator::generateRequisites(const Aggregate *aggregate) generateRequisite("Since", formatSince(aggregate)); if (aggregate->isClassNode() || aggregate->isNamespace()) { - // QT variable. + // CMake and QT variable. if (!aggregate->physicalModuleName().isEmpty()) { const CollectionNode *cn = qdb_->getCollectionNode(aggregate->physicalModuleName(), Node::Module); - if (cn && !cn->qtVariable().isEmpty()) { - generateRequisite("qmake", "QT += " + cn->qtVariable()); + if (cn && !cn->qtCMakeComponent().isEmpty()) { + auto qtMajorVersion = QString::number(QT_VERSION_MAJOR); + const QString findpackageText = "find_package(Qt" + qtMajorVersion + " COMPONENT " + + cn->qtCMakeComponent() + ")"; + const QString targetLinkLibrariesText = + "target_link_libraries(mytarget PUBLIC Qt::" + cn->qtCMakeComponent() + ")"; + const QStringList cmakeInfo { findpackageText, targetLinkLibrariesText }; + generateCMakeRequisite(cmakeInfo); } + if (cn && !cn->qtVariable().isEmpty()) + generateRequisite("qmake", "QT += " + cn->qtVariable()); } } @@ -2787,10 +2811,20 @@ void DocBookGenerator::generateDocBookSynopsis(const Node *node) generateSynopsisInfo("since", formatSince(aggregate)); if (aggregate->nodeType() == Node::Class || aggregate->nodeType() == Node::Namespace) { - // QT variable. + // CMake and QT variable. if (!aggregate->physicalModuleName().isEmpty()) { const CollectionNode *cn = qdb_->getCollectionNode(aggregate->physicalModuleName(), Node::Module); + if (cn && !cn->qtCMakeComponent().isEmpty()) { + const auto qtMajorVersion = QString::number(QT_VERSION_MAJOR); + const QString findpackageText = "find_package(Qt" + qtMajorVersion + + " COMPONENT " + cn->qtCMakeComponent() + ")"; + const QString targetLinkLibrariesText = + "target_link_libraries(mytarget PUBLIC Qt::" + cn->qtCMakeComponent() + + ")"; + generateSynopsisInfo("cmake-find-package", findpackageText); + generateSynopsisInfo("cmake-target-link-libraries", targetLinkLibrariesText); + } if (cn && !cn->qtVariable().isEmpty()) generateSynopsisInfo("qmake", "QT += " + cn->qtVariable()); } diff --git a/src/qdoc/docbookgenerator.h b/src/qdoc/docbookgenerator.h index 7400a98de..f319f932c 100644 --- a/src/qdoc/docbookgenerator.h +++ b/src/qdoc/docbookgenerator.h @@ -154,6 +154,7 @@ private: void generateStartRequisite(const QString &description); void generateEndRequisite(); void generateRequisite(const QString &description, const QString &value); + void generateCMakeRequisite(const QStringList &values); void generateSynopsisInfo(const QString &key, const QString &value); void generateModifier(const QString &value); diff --git a/src/qdoc/htmlgenerator.cpp b/src/qdoc/htmlgenerator.cpp index 62d5dad3e..bcaa94e37 100644 --- a/src/qdoc/htmlgenerator.cpp +++ b/src/qdoc/htmlgenerator.cpp @@ -1844,15 +1844,17 @@ void HtmlGenerator::generateRequisites(Aggregate *aggregate, CodeMarker *marker) const QString inheritsText = "Inherits"; const QString instantiatedByText = "Instantiated By"; const QString qtVariableText = "qmake"; + const QString cmakeText = "CMake"; // The order of the requisites matter - const QStringList requisiteorder { headerText, qtVariableText, sinceText, - instantiatedByText, inheritsText, inheritedBytext }; + const QStringList requisiteorder { headerText, cmakeText, qtVariableText, sinceText, + instantiatedByText, inheritsText, inheritedBytext }; addIncludeFilesToMap(aggregate, marker, requisites, &text, headerText); addSinceToMap(aggregate, requisites, &text, sinceText); if (aggregate->isClassNode() || aggregate->isNamespace()) { + addCMakeInfoToMap(aggregate, requisites, &text, cmakeText); addQtVariableToMap(aggregate, requisites, &text, qtVariableText); } @@ -1965,6 +1967,30 @@ void HtmlGenerator::addInstantiatedByToMap(QMap<QString, Text> &requisites, Text /*! * \internal + * Adds the CMake package and link library information to the map. + */ +void HtmlGenerator::addCMakeInfoToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, + Text *text, const QString &CMakeInfo) const +{ + if (!aggregate->physicalModuleName().isEmpty() && text != nullptr) { + const CollectionNode *cn = + qdb_->getCollectionNode(aggregate->physicalModuleName(), Node::Module); + if (cn && !cn->qtCMakeComponent().isEmpty()) { + text->clear(); + const auto qtMajorVersion = QString::number(QT_VERSION_MAJOR); + const QString findPackageText = "find_package(Qt" + qtMajorVersion + " COMPONENT " + + cn->qtCMakeComponent() + ")"; + const QString targetLinkLibrariesText = + "target_link_libraries(mytarget PUBLIC Qt::" + cn->qtCMakeComponent() + ")"; + const Atom lineBreak = Atom(Atom::RawString, " <br/>\n"); + *text << findPackageText << lineBreak << targetLinkLibrariesText; + requisites.insert(CMakeInfo, *text); + } + } +} + +/*! + * \internal * Adds the Qt variable (from the \\qtvariable command) to the map. */ void HtmlGenerator::addQtVariableToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, diff --git a/src/qdoc/htmlgenerator.h b/src/qdoc/htmlgenerator.h index addac44a1..80c43b022 100644 --- a/src/qdoc/htmlgenerator.h +++ b/src/qdoc/htmlgenerator.h @@ -150,6 +150,8 @@ private: const QString &headerText); void addSinceToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text *text, const QString &sinceText) const; + void addCMakeInfoToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text *text, + const QString &CMakeInfo) const; void addQtVariableToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text *text, const QString &qtVariableText) const; void addInstantiatedByToMap(QMap<QString, Text> &requisites, Text *text, diff --git a/src/qdoc/node.h b/src/qdoc/node.h index b7293f408..387284384 100644 --- a/src/qdoc/node.h +++ b/src/qdoc/node.h @@ -298,6 +298,8 @@ public: virtual void setObsoleteLink(const QString &) {} virtual void setQtVariable(const QString &) {} virtual QString qtVariable() const { return QString(); } + virtual void setQtCMakeComponent(const QString &) {} + virtual QString qtCMakeComponent() const { return QString(); } virtual bool hasTag(const QString &) const { return false; } const QMap<LinkType, QPair<QString, QString>> &links() const { return linkMap_; } @@ -1261,6 +1263,8 @@ public: bool isCollectionNode() const override { return true; } QString qtVariable() const override { return qtVariable_; } void setQtVariable(const QString &v) override { qtVariable_ = v; } + QString qtCMakeComponent() const override { return qtCMakeComponent_; } + void setQtCMakeComponent(const QString &target) override { qtCMakeComponent_ = target; } void addMember(Node *node) override; bool hasMembers() const override; bool hasNamespaces() const override; @@ -1295,6 +1299,7 @@ private: QString logicalModuleVersionMajor_; QString logicalModuleVersionMinor_; QString qtVariable_; + QString qtCMakeComponent_; }; QT_END_NAMESPACE |