summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/qdoc/codeparser.cpp8
-rw-r--r--src/qdoc/codeparser.h1
-rw-r--r--src/qdoc/cppcodeparser.cpp5
-rw-r--r--src/qdoc/doc/qdoc-manual-cmdindex.qdoc1
-rw-r--r--src/qdoc/doc/qdoc-manual-contextcmds.qdoc1
-rw-r--r--src/qdoc/doc/qdoc-manual-markupcmds.qdoc29
-rw-r--r--src/qdoc/docbookgenerator.cpp42
-rw-r--r--src/qdoc/docbookgenerator.h1
-rw-r--r--src/qdoc/htmlgenerator.cpp30
-rw-r--r--src/qdoc/htmlgenerator.h2
-rw-r--r--src/qdoc/node.h5
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 &lt;Bar&gt;</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