summaryrefslogtreecommitdiffstats
path: root/src/tools/qdoc/qdoctagfiles.cpp
diff options
context:
space:
mode:
authorTopi Reinio <topi.reinio@digia.com>2015-02-09 14:01:14 +0100
committerTopi Reiniƶ <topi.reinio@digia.com>2015-02-25 11:02:04 +0000
commit5113fdeb7d50979c6acbe2c9c5b26ad134614873 (patch)
treef6fe1c87429c9d5296b05cefadf558ff2f102b85 /src/tools/qdoc/qdoctagfiles.cpp
parent62cd369594dc39e06e8c7ec2c761cfedf5d9c9ba (diff)
qdoc: Fix generation of Doxygen tag files
This change addresses two issues that affect generating .tags files in QDoc: - Paths written to the .tags file are now always relative to output subdirectory, i.e. the same folder where the file is created in. - Opening the file for writing no longer fails silently. If the 'tagfile' configuration variable specifies no path, or the path does not exist, the file is written to the output directory by default. Change-Id: I23ac529dbfa67575ae96da1c3123ea487cd664f5 Task-number: QTBUG-44366 Reviewed-by: Venugopal Shivashankar <venugopal.shivashankar@digia.com>
Diffstat (limited to 'src/tools/qdoc/qdoctagfiles.cpp')
-rw-r--r--src/tools/qdoc/qdoctagfiles.cpp27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/tools/qdoc/qdoctagfiles.cpp b/src/tools/qdoc/qdoctagfiles.cpp
index 199c83174e..778df33048 100644
--- a/src/tools/qdoc/qdoctagfiles.cpp
+++ b/src/tools/qdoc/qdoctagfiles.cpp
@@ -149,7 +149,7 @@ void QDocTagFiles::generateTagFileCompounds(QXmlStreamWriter& writer, const Inne
if (node->type() == Node::Class) {
writer.writeTextElement("name", node->fullDocumentName());
- writer.writeTextElement("filename", gen_->fullDocumentLocation(node,Generator::useOutputSubdirs()));
+ writer.writeTextElement("filename", gen_->fullDocumentLocation(node, false));
// Classes contain information about their base classes.
const ClassNode* classNode = static_cast<const ClassNode*>(node);
@@ -169,7 +169,7 @@ void QDocTagFiles::generateTagFileCompounds(QXmlStreamWriter& writer, const Inne
}
else {
writer.writeTextElement("name", node->fullDocumentName());
- writer.writeTextElement("filename", gen_->fullDocumentLocation(node,Generator::useOutputSubdirs()));
+ writer.writeTextElement("filename", gen_->fullDocumentLocation(node, false));
// Recurse to write all members.
generateTagFileMembers(writer, static_cast<const InnerNode*>(node));
@@ -285,7 +285,7 @@ void QDocTagFiles::generateTagFileMembers(QXmlStreamWriter& writer, const InnerN
writer.writeTextElement("type", "virtual " + functionNode->returnType());
writer.writeTextElement("name", objName);
- QStringList pieces = gen_->fullDocumentLocation(node,Generator::useOutputSubdirs()).split(QLatin1Char('#'));
+ QStringList pieces = gen_->fullDocumentLocation(node, false).split(QLatin1Char('#'));
writer.writeTextElement("anchorfile", pieces[0]);
writer.writeTextElement("anchor", pieces[1]);
QString signature = functionNode->signature();
@@ -303,7 +303,7 @@ void QDocTagFiles::generateTagFileMembers(QXmlStreamWriter& writer, const InnerN
const PropertyNode* propertyNode = static_cast<const PropertyNode*>(node);
writer.writeAttribute("type", propertyNode->dataType());
writer.writeTextElement("name", objName);
- QStringList pieces = gen_->fullDocumentLocation(node,Generator::useOutputSubdirs()).split(QLatin1Char('#'));
+ QStringList pieces = gen_->fullDocumentLocation(node, false).split(QLatin1Char('#'));
writer.writeTextElement("anchorfile", pieces[0]);
writer.writeTextElement("anchor", pieces[1]);
writer.writeTextElement("arglist", QString());
@@ -314,7 +314,7 @@ void QDocTagFiles::generateTagFileMembers(QXmlStreamWriter& writer, const InnerN
{
const EnumNode* enumNode = static_cast<const EnumNode*>(node);
writer.writeTextElement("name", objName);
- QStringList pieces = gen_->fullDocumentLocation(node).split(QLatin1Char('#'));
+ QStringList pieces = gen_->fullDocumentLocation(node, false).split(QLatin1Char('#'));
writer.writeTextElement("anchor", pieces[1]);
writer.writeTextElement("arglist", QString());
writer.writeEndElement(); // member
@@ -337,7 +337,7 @@ void QDocTagFiles::generateTagFileMembers(QXmlStreamWriter& writer, const InnerN
else
writer.writeAttribute("type", QString());
writer.writeTextElement("name", objName);
- QStringList pieces = gen_->fullDocumentLocation(node,Generator::useOutputSubdirs()).split(QLatin1Char('#'));
+ QStringList pieces = gen_->fullDocumentLocation(node, false).split(QLatin1Char('#'));
writer.writeTextElement("anchorfile", pieces[0]);
writer.writeTextElement("anchor", pieces[1]);
writer.writeTextElement("arglist", QString());
@@ -358,8 +358,19 @@ void QDocTagFiles::generateTagFileMembers(QXmlStreamWriter& writer, const InnerN
void QDocTagFiles::generateTagFile(const QString& fileName, Generator* g)
{
QFile file(fileName);
- if (!file.open(QFile::WriteOnly | QFile::Text))
- return ;
+ QFileInfo fileInfo(fileName);
+
+ // If no path was specified or it doesn't exist,
+ // default to the output directory
+ if (fileInfo.fileName() == fileName || !fileInfo.dir().exists())
+ file.setFileName(gen_->outputDir() + QLatin1Char('/') +
+ fileInfo.fileName());
+
+ if (!file.open(QFile::WriteOnly | QFile::Text)) {
+ Location::null.warning(
+ QString("Failed to open %1 for writing.").arg(file.fileName()));
+ return;
+ }
gen_ = g;
QXmlStreamWriter writer(&file);