- update to 1.8.17

- fixes test suite is failing
- fixes broken urls in the xml output
This commit is contained in:
Than Ngo 2020-01-14 11:50:27 +01:00
parent 7d44dfcd92
commit d1c4879feb
7 changed files with 209 additions and 778 deletions

1
.gitignore vendored
View File

@ -49,3 +49,4 @@ doxygen-1.7.1.src.tar.gz
/doxygen-1.8.14.src.tar.gz
/doxygen-1.8.15.src.tar.gz
/doxygen-1.8.16.src.tar.gz
/doxygen-1.8.17.src.tar.gz

View File

@ -0,0 +1,102 @@
commit 2f79c6938c6d969f3d4ebc9ed0f2648668434502
Author: albert-github <albert.tests@gmail.com>
Date: Sat Jan 4 13:24:16 2020 +0100
issue #7477 Broken urls in the xml output
Made code analogous to HTML code.
Also the doxygen internal tests suffered from this problem.
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index 409c2fe6..1e6becbe 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -824,18 +824,22 @@ void XmlDocVisitor::visitPre(DocImage *img)
{
if (m_hide) return;
- QCString baseName=img->name();
- int i;
- if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
+ QCString url = img->url();
+ QCString baseName;
+ if (url.isEmpty())
{
- baseName=baseName.right(baseName.length()-i-1);
+ baseName = img->relPath()+img->name();
+ }
+ else
+ {
+ baseName = correctURL(url,img->relPath());
}
visitPreStart(m_t, "image", FALSE, this, img->children(), baseName, TRUE, img->type(), img->width(), img->height(), img ->isInlineImage());
// copy the image to the output dir
FileDef *fd;
bool ambig;
- if ((fd=findFileDef(Doxygen::imageNameDict,img->name(),ambig)))
+ if (url.isEmpty() && (fd=findFileDef(Doxygen::imageNameDict,img->name(),ambig)))
{
QFile inImage(fd->absFilePath());
QFile outImage(Config_getString(XML_OUTPUT)+"/"+baseName.data());
diff --git a/testing/031/indexpage.xml b/testing/031/indexpage.xml
index 2d74510a..eaf374b6 100644
--- a/testing/031/indexpage.xml
+++ b/testing/031/indexpage.xml
@@ -11,42 +11,42 @@
<image type="docbook" name="sample.png"/>
More text.</para>
<para>SVG image with caption:<linebreak/>
-<image type="html" name="license-MIT-brightgreen.svg">A caption</image>
+<image type="html" name="http://img.shields.io/badge/license-MIT-brightgreen.svg">A caption</image>
</para>
<para>PNG image with caption:<linebreak/>
-<image type="html" name="license-MIT-brightgreen.png">A caption</image>
+<image type="html" name="http://img.shields.io/badge/license-MIT-brightgreen.png">A caption</image>
</para>
<para>SVG image without caption:<linebreak/>
-<image type="html" name="license-MIT-brightgreen.svg"/>
+<image type="html" name="http://img.shields.io/badge/license-MIT-brightgreen.svg"/>
</para>
<para>PNG image without caption:<linebreak/>
-<image type="html" name="license-MIT-brightgreen.png"/>
+<image type="html" name="http://img.shields.io/badge/license-MIT-brightgreen.png"/>
</para>
<para>Inline SVG image with caption:<linebreak/>
-This image is inline <image type="html" name="license-MIT-brightgreen.svg" inline="yes">MIT license</image>
+This image is inline <image type="html" name="http://img.shields.io/badge/license-MIT-brightgreen.svg" inline="yes">MIT license</image>
within the text.</para>
<para>Inline PNG image with caption:<linebreak/>
-This image is inline <image type="html" name="license-MIT-brightgreen.png" inline="yes">MIT license</image>
+This image is inline <image type="html" name="http://img.shields.io/badge/license-MIT-brightgreen.png" inline="yes">MIT license</image>
within the text.</para>
<para>Markdown style linked SVG image:<linebreak/>
-<ulink url="http://opensource.org/licenses/MIT"><image type="html" name="license-MIT-brightgreen.svg" inline="yes"/></ulink></para>
+<ulink url="http://opensource.org/licenses/MIT"><image type="html" name="http://img.shields.io/badge/license-MIT-brightgreen.svg" inline="yes"/></ulink></para>
<para>Markdown style linked PNG image:<linebreak/>
-<ulink url="http://opensource.org/licenses/MIT"><image type="html" name="license-MIT-brightgreen.png" inline="yes"/></ulink></para>
+<ulink url="http://opensource.org/licenses/MIT"><image type="html" name="http://img.shields.io/badge/license-MIT-brightgreen.png" inline="yes"/></ulink></para>
<para>HTML style linked SVG image:<linebreak/>
-<ulink url="http://opensource.org/licenses/MIT"><image type="html" name="license-MIT-brightgreen.svg" inline="yes"/></ulink></para>
+<ulink url="http://opensource.org/licenses/MIT"><image type="html" name="http://img.shields.io/badge/license-MIT-brightgreen.svg" inline="yes"/></ulink></para>
<para>HTML style linked PNG image:<linebreak/>
-<ulink url="http://opensource.org/licenses/MIT"><image type="html" name="license-MIT-brightgreen.png" inline="yes"/></ulink></para>
+<ulink url="http://opensource.org/licenses/MIT"><image type="html" name="http://img.shields.io/badge/license-MIT-brightgreen.png" inline="yes"/></ulink></para>
<para>HTML style unlinked SVG image:<linebreak/>
-<image type="html" name="license-MIT-brightgreen.svg" inline="yes"/>
+<image type="html" name="http://img.shields.io/badge/license-MIT-brightgreen.svg" inline="yes"/>
</para>
<para>HTML style unlinked PNG image:<linebreak/>
-<image type="html" name="license-MIT-brightgreen.png" inline="yes"/>
+<image type="html" name="http://img.shields.io/badge/license-MIT-brightgreen.png" inline="yes"/>
</para>
<para>Some markdown image tests<linebreak/>
-<image type="html" name="docs-Doxygen-blue.svg?foo&amp;bar" inline="yes"/>
+<image type="html" name="https://img.shields.io/badge/docs-Doxygen-blue.svg?foo&amp;bar" inline="yes"/>
<ulink url="http://www.doxygen.nl?foo&amp;bar">Some normal link</ulink></para>
<para>
- <image type="html" name="docs-Doxygen-blue.svg?foo&amp;bar" inline="yes"/>
+ <image type="html" name="https://img.shields.io/badge/docs-Doxygen-blue.svg?foo&amp;bar" inline="yes"/>
<ulink url="http://www.doxygen.nl?foo&amp;bar">Some normal link</ulink>
</para>
</detaileddescription>

View File

@ -1,36 +0,0 @@
diff -up doxygen-1.8.16/src/tagreader.cpp.me doxygen-1.8.16/src/tagreader.cpp
--- doxygen-1.8.16/src/tagreader.cpp.me 2019-09-16 20:47:16.428896400 +0200
+++ doxygen-1.8.16/src/tagreader.cpp 2019-09-16 20:48:53.426648016 +0200
@@ -494,6 +494,23 @@ class TagFileParser : public QXmlDefault
void endDocAnchor()
{
+ // Check whether or not the tag is automatically generate, in that case ignore the tag.
+ switch(m_state)
+ {
+ case InClass:
+ case InFile:
+ case InNamespace:
+ case InGroup:
+ case InPage:
+ case InMember:
+ case InPackage:
+ case InDir:
+ if (QString(m_curString).startsWith("autotoc_md")) return;
+ break;
+ default:
+ warn("Unexpected tag 'docanchor' found");
+ return;
+ }
switch(m_state)
{
case InClass: m_curClass->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break;
@@ -504,7 +521,7 @@ class TagFileParser : public QXmlDefault
case InMember: m_curMember->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break;
case InPackage: m_curPackage->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break;
case InDir: m_curDir->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break;
- default: warn("Unexpected tag 'docanchor' found"); break;
+ default: warn("Unexpected tag 'docanchor' found"); break; // Not really necessary anymore
}
}

View File

@ -1,724 +0,0 @@
diff -up doxygen-1.8.16/addon/doxywizard/wizard.h.orig doxygen-1.8.16/addon/doxywizard/wizard.h
--- doxygen-1.8.16/addon/doxywizard/wizard.h.orig 2017-10-31 20:36:00.000000000 +0100
+++ doxygen-1.8.16/addon/doxywizard/wizard.h 2019-12-10 11:45:32.750260467 +0100
@@ -52,11 +52,11 @@ class TuneColorDialog : public QDialog
void updateImage(int hue,int sat,int val);
private:
- QImage *m_image;
- QLabel *m_imageLab;
- int m_hue;
- int m_sat;
- int m_gam;
+ QImage *m_image = 0;
+ QLabel *m_imageLab = 0;
+ int m_hue = 0;
+ int m_sat = 0;
+ int m_gam = 0;
};
class ColorPicker : public QWidget
@@ -91,11 +91,11 @@ private:
void setSat(int v);
void setGam(int v);
- QPixmap *m_pix;
- Mode m_mode;
- int m_gam;
- int m_hue;
- int m_sat;
+ QPixmap *m_pix = 0;
+ Mode m_mode = Hue;
+ int m_gam = 0;
+ int m_hue = 0;
+ int m_sat = 0;
};
@@ -120,16 +120,16 @@ class Step1 : public QWidget
void setRecursiveScan(int);
private:
- QLineEdit *m_projName;
- QLineEdit *m_projBrief;
- QLineEdit *m_projNumber;
- QLineEdit *m_sourceDir;
- QLineEdit *m_destDir;
- QLabel *m_projIconLab;
- QCheckBox *m_recursive;
- QPushButton *m_srcSelectDir;
- QPushButton *m_dstSelectDir;
- Wizard *m_wizard;
+ QLineEdit *m_projName = 0;
+ QLineEdit *m_projBrief = 0;
+ QLineEdit *m_projNumber = 0;
+ QLineEdit *m_sourceDir = 0;
+ QLineEdit *m_destDir = 0;
+ QLabel *m_projIconLab = 0;
+ QCheckBox *m_recursive = 0;
+ QPushButton *m_srcSelectDir = 0;
+ QPushButton *m_dstSelectDir = 0;
+ Wizard *m_wizard = 0;
const QHash<QString,Input *> &m_modelData;
};
@@ -146,12 +146,12 @@ class Step2 : public QWidget
void changeCrossRefState(int choice);
private:
- QGroupBox *m_extractMode;
- QGroupBox *m_optimizeLang;
- QButtonGroup *m_extractModeGroup;
- QButtonGroup *m_optimizeLangGroup;
- QCheckBox *m_crossRef;
- Wizard *m_wizard;
+ QGroupBox *m_extractMode = 0;
+ QGroupBox *m_optimizeLang = 0;
+ QButtonGroup *m_extractModeGroup = 0;
+ QButtonGroup *m_optimizeLangGroup = 0;
+ QCheckBox *m_crossRef = 0;
+ Wizard *m_wizard = 0;
const QHash<QString,Input *> &m_modelData;
};
@@ -175,18 +175,18 @@ class Step3 : public QWidget
void tuneColorDialog();
private:
- QGroupBox *m_texOptions;
- QButtonGroup *m_texOptionsGroup;
- QGroupBox *m_htmlOptions;
- QButtonGroup *m_htmlOptionsGroup;
- QCheckBox *m_htmlEnabled;
- QCheckBox *m_latexEnabled;
- QCheckBox *m_manEnabled;
- QCheckBox *m_rtfEnabled;
- QCheckBox *m_xmlEnabled;
- QCheckBox *m_searchEnabled;
- QPushButton *m_tuneColor;
- Wizard *m_wizard;
+ QGroupBox *m_texOptions = 0;
+ QButtonGroup *m_texOptionsGroup = 0;
+ QGroupBox *m_htmlOptions = 0;
+ QButtonGroup *m_htmlOptionsGroup = 0;
+ QCheckBox *m_htmlEnabled = 0;
+ QCheckBox *m_latexEnabled = 0;
+ QCheckBox *m_manEnabled = 0;
+ QCheckBox *m_rtfEnabled = 0;
+ QCheckBox *m_xmlEnabled = 0;
+ QCheckBox *m_searchEnabled = 0;
+ QPushButton *m_tuneColor = 0;
+ Wizard *m_wizard = 0;
const QHash<QString,Input *> &m_modelData;
};
@@ -209,17 +209,17 @@ class Step4 : public QWidget
void setCallerGraphEnabled(int state);
private:
- QGroupBox *m_diagramMode;
- QButtonGroup *m_diagramModeGroup;
- QGroupBox *m_dotGroup;
- QCheckBox *m_dotClass;
- QCheckBox *m_dotCollaboration;
- QCheckBox *m_dotInclude;
- QCheckBox *m_dotIncludedBy;
- QCheckBox *m_dotInheritance;
- QCheckBox *m_dotCall;
- QCheckBox *m_dotCaller;
- Wizard *m_wizard;
+ QGroupBox *m_diagramMode = 0;
+ QButtonGroup *m_diagramModeGroup = 0;
+ QGroupBox *m_dotGroup = 0;
+ QCheckBox *m_dotClass = 0;
+ QCheckBox *m_dotCollaboration = 0;
+ QCheckBox *m_dotInclude = 0;
+ QCheckBox *m_dotIncludedBy = 0;
+ QCheckBox *m_dotInheritance = 0;
+ QCheckBox *m_dotCall = 0;
+ QCheckBox *m_dotCaller = 0;
+ Wizard *m_wizard = 0;
const QHash<QString,Input *> &m_modelData;
};
@@ -243,14 +243,14 @@ class Wizard : public QSplitter
private:
const QHash<QString,Input *> &m_modelData;
- QTreeWidget *m_treeWidget;
- QStackedWidget *m_topicStack;
- Step1 *m_step1;
- Step2 *m_step2;
- Step3 *m_step3;
- Step4 *m_step4;
- QPushButton *m_next;
- QPushButton *m_prev;
+ QTreeWidget *m_treeWidget = 0;
+ QStackedWidget *m_topicStack = 0;
+ Step1 *m_step1 = 0;
+ Step2 *m_step2 = 0;
+ Step3 *m_step3 = 0;
+ Step4 *m_step4 = 0;
+ QPushButton *m_next = 0;
+ QPushButton *m_prev = 0;
};
#endif
diff -up doxygen-1.8.16/src/classdef.cpp.orig doxygen-1.8.16/src/classdef.cpp
--- doxygen-1.8.16/src/classdef.cpp.orig 2019-08-04 19:04:55.000000000 +0200
+++ doxygen-1.8.16/src/classdef.cpp 2019-12-10 11:52:17.184826531 +0100
@@ -265,7 +265,7 @@ class ClassDefImpl : public DefinitionIm
// PIMPL idiom
class IMPL;
- IMPL *m_impl;
+ IMPL *m_impl = 0;
};
ClassDef *createClassDef(
@@ -525,7 +525,7 @@ class ClassDefAliasImpl : public Definit
QPtrDict<void> *visitedClasses=0) const {}
private:
- mutable bool m_visited;
+ mutable bool m_visited = false;
};
@@ -563,27 +563,27 @@ class ClassDefImpl::IMPL
/*! Include information about the header file should be included
* in the documentation. 0 by default, set by setIncludeFile().
*/
- IncludeInfo *incInfo;
+ IncludeInfo *incInfo = 0;
/*! List of base class (or super-classes) from which this class derives
* directly.
*/
- BaseClassList *inherits;
+ BaseClassList *inherits = 0;
/*! List of sub-classes that directly derive from this class
*/
- BaseClassList *inheritedBy;
+ BaseClassList *inheritedBy = 0;
/*! Namespace this class is part of
* (this is the inner most namespace in case of nested namespaces)
*/
- NamespaceDef *nspace;
+ NamespaceDef *nspace = 0;
/*! File this class is defined in */
- FileDef *fileDef;
+ FileDef *fileDef = 0;
/*! List of all members (including inherited members) */
- MemberNameInfoSDict *allMemberNameInfoSDict;
+ MemberNameInfoSDict *allMemberNameInfoSDict = 0;
/*! Template arguments of this class */
ArgumentList *tempArgs;
@@ -595,7 +595,7 @@ class ClassDefImpl::IMPL
FileList files;
/*! Examples that use this class */
- ExampleSDict *exampleSDict;
+ ExampleSDict *exampleSDict = 0;
/*! Holds the kind of "class" this is. */
ClassDef::CompoundType compType;
@@ -609,30 +609,30 @@ class ClassDefImpl::IMPL
/*! The inner classes contained in this class. Will be 0 if there are
* no inner classes.
*/
- ClassSDict *innerClasses;
+ ClassSDict *innerClasses = 0;
/* classes for the collaboration diagram */
- UsesClassDict *usesImplClassDict;
- UsesClassDict *usedByImplClassDict;
- UsesClassDict *usesIntfClassDict;
+ UsesClassDict *usesImplClassDict = 0;
+ UsesClassDict *usedByImplClassDict = 0;
+ UsesClassDict *usesIntfClassDict = 0;
- ConstraintClassDict *constraintClassDict;
+ ConstraintClassDict *constraintClassDict = 0;
/*! Template instances that exists of this class, the key in the
* dictionary is the template argument list.
*/
- mutable QDict<ClassDef> *templateInstances;
+ mutable QDict<ClassDef> *templateInstances = 0;
/*! Template instances that exists of this class, as defined by variables.
* We do NOT want to document these individually. The key in the
* dictionary is the template argument list.
*/
- mutable QDict<ClassDef> *variableInstances;
+ mutable QDict<ClassDef> *variableInstances = 0;
- QDict<int> *templBaseClassNames;
+ QDict<int> *templBaseClassNames = 0;
/*! The class this class is an instance of. */
- const ClassDef *templateMaster;
+ const ClassDef *templateMaster = 0;
/*! local class name which could be a typedef'ed alias name. */
QCString className;
@@ -640,56 +640,56 @@ class ClassDefImpl::IMPL
/*! If this class is a Objective-C category, then this points to the
* class which is extended.
*/
- ClassDef *categoryOf;
+ ClassDef *categoryOf = 0;
QList<MemberList> memberLists;
/* user defined member groups */
- MemberGroupSDict *memberGroupSDict;
+ MemberGroupSDict *memberGroupSDict = 0;
/*! Is this an abstract class? */
- bool isAbstract;
+ bool isAbstract = false;
/*! Is the class part of an unnamed namespace? */
- bool isStatic;
+ bool isStatic = false;
/*! TRUE if classes members are merged with those of the base classes. */
- bool membersMerged;
+ bool membersMerged = false;
/*! TRUE if the class is defined in a source file rather than a header file. */
- bool isLocal;
+ bool isLocal = false;
- bool isTemplArg;
+ bool isTemplArg = false;
/*! Does this class group its user-grouped members
* as a sub-section of the normal (public/protected/..)
* groups?
*/
- bool subGrouping;
+ bool subGrouping = false;
/** Reason of existence is a "use" relation */
- bool usedOnly;
+ bool usedOnly = false;
/** List of titles to use for the summary */
SDict<QCString> vhdlSummaryTitles;
/** Is this a simple (non-nested) C structure? */
- bool isSimple;
+ bool isSimple = false;
/** Does this class overloaded the -> operator? */
- MemberDef *arrowOperator;
+ MemberDef *arrowOperator = 0;
- ClassList *taggedInnerClasses;
- ClassDef *tagLessRef;
+ ClassList *taggedInnerClasses = 0;
+ ClassDef *tagLessRef = 0;
/** Does this class represent a Java style enum? */
- bool isJavaEnum;
+ bool isJavaEnum = false;
- bool isGeneric;
+ bool isGeneric = false;
- bool isAnonymous;
+ bool isAnonymous = false;
- uint64 spec;
+ uint64 spec = 0;
QCString metaData;
};
diff -up doxygen-1.8.16/src/docgroup.h.orig doxygen-1.8.16/src/docgroup.h
--- doxygen-1.8.16/src/docgroup.h.orig 2019-08-02 18:43:41.000000000 +0200
+++ doxygen-1.8.16/src/docgroup.h 2019-12-10 11:45:32.752260485 +0100
@@ -42,9 +42,9 @@ class DocGroup
private:
int findExistingGroup(int &groupId,const MemberGroupInfo *info);
- int m_openCount;
+ int m_openCount = 0;
QCString m_memberGroupHeader;
- int m_memberGroupId;
+ int m_memberGroupId = 0;
QCString m_memberGroupRelates;
QCString m_memberGroupDocs;
QStack<Grouping> m_autoGroupStack;
diff -up doxygen-1.8.16/src/doctokenizer.h.orig doxygen-1.8.16/src/doctokenizer.h
--- doxygen-1.8.16/src/doctokenizer.h.orig 2019-06-10 10:17:24.000000000 +0200
+++ doxygen-1.8.16/src/doctokenizer.h 2019-12-10 11:45:32.752260485 +0100
@@ -81,8 +81,8 @@ struct TokenInfo
// comment blocks
// list token info
- bool isEnumList;
- int indent;
+ bool isEnumList = false;
+ int indent = 0;
// sections
QCString sectionId;
@@ -95,22 +95,22 @@ struct TokenInfo
QCString verb;
// xrefitem
- int id;
+ int id = -1;
// html tag
HtmlAttribList attribs;
- bool endTag;
- bool emptyTag;
+ bool endTag = false;
+ bool emptyTag = false;
// whitespace
QCString chars;
// url
- bool isEMailAddr;
+ bool isEMailAddr = false;
// param attributes
enum ParamDir { In=1, Out=2, InOut=3, Unspecified=0 };
- ParamDir paramDir;
+ ParamDir paramDir = Unspecified;
};
// globals
diff -up doxygen-1.8.16/src/dotgraph.h.orig doxygen-1.8.16/src/dotgraph.h
--- doxygen-1.8.16/src/dotgraph.h.orig 2019-06-13 21:36:00.000000000 +0200
+++ doxygen-1.8.16/src/dotgraph.h 2019-12-10 11:45:32.752260485 +0100
@@ -83,22 +83,22 @@ class DotGraph
QCString relImgName() const { return m_relPath + imgName(); }
// the following variables are used while writing the graph to a .dot file
- GraphOutputFormat m_graphFormat;
- EmbeddedOutputFormat m_textFormat;
+ GraphOutputFormat m_graphFormat = GOF_BITMAP;
+ EmbeddedOutputFormat m_textFormat = EOF_Html;
QDir m_dir;
QCString m_fileName;
QCString m_relPath;
- bool m_generateImageMap;
- int m_graphId;
+ bool m_generateImageMap = false;
+ int m_graphId = 0;
QCString m_absPath;
QCString m_baseName;
QGString m_theGraph;
- bool m_regenerate;
- bool m_doNotAddImageToIndex;
- bool m_noDivTag;
- bool m_zoomable;
- bool m_urlOnly;
+ bool m_regenerate = false;
+ bool m_doNotAddImageToIndex = false;
+ bool m_noDivTag = false;
+ bool m_zoomable = true;
+ bool m_urlOnly = false;
private:
DotGraph(const DotGraph &);
diff -up doxygen-1.8.16/src/memberdef.cpp.orig doxygen-1.8.16/src/memberdef.cpp
--- doxygen-1.8.16/src/memberdef.cpp.orig 2019-08-06 20:32:27.000000000 +0200
+++ doxygen-1.8.16/src/memberdef.cpp 2019-12-10 11:45:32.753260493 +0100
@@ -1299,32 +1299,32 @@ class MemberDefImpl::IMPL
const ArgumentList *al,const char *meta
);
- ClassDef *classDef; // member of or related to
- FileDef *fileDef; // member of file definition
- NamespaceDef *nspace; // the namespace this member is in.
-
- MemberDef *enumScope; // the enclosing scope, if this is an enum field
- bool livesInsideEnum;
- const MemberDef *annEnumType; // the anonymous enum that is the type of this member
- MemberList *enumFields; // enumeration fields
-
- MemberDef *redefines; // the members that this member redefines
- MemberList *redefinedBy; // the list of members that redefine this one
-
- MemberDef *memDef; // member definition for this declaration
- MemberDef *memDec; // member declaration for this definition
- ClassDef *relatedAlso; // points to class marked by relatedAlso
+ ClassDef *classDef = 0; // member of or related to
+ FileDef *fileDef = 0; // member of file definition
+ NamespaceDef *nspace = 0; // the namespace this member is in.
+
+ MemberDef *enumScope = 0; // the enclosing scope, if this is an enum field
+ bool livesInsideEnum = false;
+ const MemberDef *annEnumType = 0; // the anonymous enum that is the type of this member
+ MemberList *enumFields = 0; // enumeration fields
+
+ MemberDef *redefines = 0; // the members that this member redefines
+ MemberList *redefinedBy = 0; // the list of members that redefine this one
+
+ MemberDef *memDef = 0; // member definition for this declaration
+ MemberDef *memDec = 0; // member declaration for this definition
+ ClassDef *relatedAlso = 0; // points to class marked by relatedAlso
- ExampleSDict *exampleSDict; // a dictionary of all examples for quick access
+ ExampleSDict *exampleSDict = 0; // a dictionary of all examples for quick access
QCString type; // return actual type
QCString accessorType; // return type that tell how to get to this member
- ClassDef *accessorClass; // class that this member accesses (for anonymous types)
+ ClassDef *accessorClass = 0; // class that this member accesses (for anonymous types)
QCString args; // function arguments/variable array specifiers
QCString def; // member definition in code (fully qualified name)
QCString anc; // HTML anchor name
- Specifier virt; // normal/virtual/pure virtual
- Protection prot; // protection type [Public/Protected/Private]
+ Specifier virt = Normal; // normal/virtual/pure virtual
+ Protection prot = Public; // protection type [Public/Protected/Private]
QCString decl; // member declaration in class
QCString bitfields; // struct member bitfields
@@ -1334,13 +1334,13 @@ class MemberDefImpl::IMPL
QCString initializer; // initializer
QCString extraTypeChars; // extra type info found after the argument list
QCString enumBaseType; // base type of the enum (C++11)
- int initLines; // number of lines in the initializer
+ int initLines = 0; // number of lines in the initializer
- uint64 memSpec; // The specifiers present for this member
- MemberType mtype; // returns the kind of member
- int maxInitLines; // when the initializer will be displayed
- int userInitLines; // result of explicit \hideinitializer or \showinitializer
- MemberDef *annMemb;
+ uint64 memSpec = 0; // The specifiers present for this member
+ MemberType mtype = MemberType_Define; // returns the kind of member
+ int maxInitLines = 0; // when the initializer will be displayed
+ int userInitLines = 0; // result of explicit \hideinitializer or \showinitializer
+ MemberDef *annMemb = 0;
ArgumentList *defArgList; // argument list of this member definition
ArgumentList *declArgList; // argument list of this member declaration
@@ -1357,19 +1357,19 @@ class MemberDefImpl::IMPL
// as its type then this is computed by
// getClassDefOfAnonymousType() and
// cached here.
- SDict<MemberList> *classSectionSDict; // not accessible
+ SDict<MemberList> *classSectionSDict = 0; // not accessible
- const MemberDef *groupAlias; // Member containing the definition
- int grpId; // group id
- MemberGroup *memberGroup; // group's member definition
- GroupDef *group; // group in which this member is in
+ const MemberDef *groupAlias = 0; // Member containing the definition
+ int grpId = 0; // group id
+ MemberGroup *memberGroup = 0; // group's member definition
+ GroupDef *group = 0; // group in which this member is in
Grouping::GroupPri_t grouppri; // priority of this definition
QCString groupFileName; // file where this grouping was defined
- int groupStartLine; // line " " " " "
- MemberDef *groupMember;
+ int groupStartLine = 0; // line " " " " "
+ MemberDef *groupMember = 0;
- bool isTypedefValCached;
- const ClassDef *cachedTypedefValue;
+ bool isTypedefValCached = false;
+ const ClassDef *cachedTypedefValue = 0;
QCString cachedTypedefTemplSpec;
QCString cachedResolvedType;
@@ -1379,41 +1379,41 @@ class MemberDefImpl::IMPL
//QCString inbodyDocs;
// documentation inheritance
- MemberDef *docProvider;
+ MemberDef *docProvider = 0;
// to store the output file base from tag files
QCString explicitOutputFileBase;
// objective-c
- bool implOnly; // function found in implementation but not
- // in the interface
- mutable bool hasDocumentedParams;
- mutable bool hasDocumentedReturnType;
- bool isDMember;
- Relationship related; // relationship of this to the class
- bool stat; // is it a static function?
- bool proto; // is it a prototype;
- bool docEnumValues; // is an enum with documented enum values.
-
- mutable bool annScope; // member is part of an anonymous scope
- mutable bool annUsed; // ugly: needs to be mutable to allow setAnonymousUsed to act as a
- // const member.
- bool hasCallGraph;
- bool hasCallerGraph;
- bool hasReferencedByRelation;
- bool hasReferencesRelation;
- bool explExt; // member was explicitly declared external
- bool tspec; // member is a template specialization
- bool groupHasDocs; // true if the entry that caused the grouping was documented
- bool docsForDefinition; // TRUE => documentation block is put before
- // definition.
- // FALSE => block is put before declaration.
- ClassDef *category;
- MemberDef *categoryRelation;
+ bool implOnly = false; // function found in implementation but not
+ // in the interface
+ mutable bool hasDocumentedParams = false;
+ mutable bool hasDocumentedReturnType = false;
+ bool isDMember = false;
+ Relationship related = Member; // relationship of this to the class
+ bool stat = false; // is it a static function?
+ bool proto = false; // is it a prototype?
+ bool docEnumValues = false; // is an enum with documented enum values.
+
+ mutable bool annScope = false; // member is part of an anonymous scope
+ mutable bool annUsed = false; // ugly: needs to be mutable to allow setAnonymousUsed to act as a
+ // const member.
+ bool hasCallGraph = false;
+ bool hasCallerGraph = false;
+ bool hasReferencedByRelation = false;
+ bool hasReferencesRelation = false;
+ bool explExt = false; // member was explicitly declared external
+ bool tspec = false; // member is a template specialization
+ bool groupHasDocs = false; // true if the entry that caused the grouping was documented
+ bool docsForDefinition = false; // TRUE => documentation block is put before
+ // definition.
+ // FALSE => block is put before declaration.
+ ClassDef *category = 0;
+ MemberDef *categoryRelation = 0;
QCString declFileName;
- int declLine;
- int declColumn;
- int numberOfFlowKW;
+ int declLine = 0;
+ int declColumn = 0;
+ int numberOfFlowKW = 0;
};
MemberDefImpl::IMPL::IMPL() :
diff -up doxygen-1.8.16/src/membergroup.h.orig doxygen-1.8.16/src/membergroup.h
--- doxygen-1.8.16/src/membergroup.h.orig 2019-12-10 11:45:32.754260502 +0100
+++ doxygen-1.8.16/src/membergroup.h 2019-12-10 11:54:06.767797449 +0100
@@ -101,18 +101,18 @@ class MemberGroup
int docLine() const { return m_docLine; }
private:
- MemberList *memberList; // list of all members in the group
- MemberList *inDeclSection;
- int grpId;
+ MemberList *memberList = 0; // list of all members in the group
+ MemberList *inDeclSection = 0;
+ int grpId = 0;
QCString grpHeader;
QCString fileName; // base name of the generated file
QCString doc;
- bool inSameSection;
- int m_numDecMembers;
- int m_numDocMembers;
- const Definition *m_parent;
+ bool inSameSection = false;
+ int m_numDecMembers = 0;
+ int m_numDocMembers = 0;
+ const Definition *m_parent = 0;
QCString m_docFile;
- int m_docLine;
+ int m_docLine = 0;
QList<ListItemInfo> *m_xrefListItems;
};
diff -up doxygen-1.8.16/src/scanner.l.orig doxygen-1.8.16/src/scanner.l
--- doxygen-1.8.16/src/scanner.l.orig 2019-12-10 11:45:32.756260520 +0100
+++ doxygen-1.8.16/src/scanner.l 2019-12-10 11:54:52.099199108 +0100
@@ -191,7 +191,7 @@ static QCString g_delimiter;
static int g_column;
static int g_fencedSize=0;
-static bool g_nestedComment=0;
+static bool g_nestedComment=false;
//-----------------------------------------------------------------------------
diff -up doxygen-1.8.16/src/tclscanner.l.orig doxygen-1.8.16/src/tclscanner.l
--- doxygen-1.8.16/src/tclscanner.l.orig 2019-08-04 19:05:12.000000000 +0200
+++ doxygen-1.8.16/src/tclscanner.l 2019-12-10 11:45:32.757260529 +0100
@@ -1492,7 +1492,7 @@ tcl_inf("-> %s\n",(const char *)tcl.stri
{
tcl_inf("-> %s\n",(const char *)tcl.string_comment);
int myPos=0;
- bool myNew=0;
+ bool myNew=false;
int myLine=tcl.line_comment;
BufStr myI(1024);
BufStr myO(1024);
diff -up doxygen-1.8.16/src/vhdldocgen.h.orig doxygen-1.8.16/src/vhdldocgen.h
--- doxygen-1.8.16/src/vhdldocgen.h.orig 2019-06-10 10:17:24.000000000 +0200
+++ doxygen-1.8.16/src/vhdldocgen.h 2019-12-10 11:45:32.757260529 +0100
@@ -310,11 +310,11 @@ class FlowChart
~FlowChart();
private:
- int id;
- int stamp;
- int type;
+ int id = 0;
+ int stamp = 0;
+ int type = 0;
- int line;
+ int line = 0;
QCString label;
QCString text;
diff -up doxygen-1.8.16/src/vhdljjparser.h.orig doxygen-1.8.16/src/vhdljjparser.h
--- doxygen-1.8.16/src/vhdljjparser.h.orig 2019-06-10 10:17:24.000000000 +0200
+++ doxygen-1.8.16/src/vhdljjparser.h 2019-12-10 11:45:32.758260538 +0100
@@ -87,9 +87,9 @@ struct VhdlConfNode
QCString arch;
QCString binding;
QCString compSpec;
- int level;
- bool isLeaf;
- bool isInlineConf;
+ int level = 0;
+ bool isLeaf = false;
+ bool isInlineConf = false;
};
diff -up doxygen-1.8.16/src/clangparser.cpp.me doxygen-1.8.16/src/clangparser.cpp
--- doxygen-1.8.16/src/clangparser.cpp.me 2019-12-10 12:08:46.334638776 +0100
+++ doxygen-1.8.16/src/clangparser.cpp 2019-12-10 12:08:59.291755101 +0100
@@ -174,7 +174,7 @@ void ClangParser::start(const char *file
std::string error;
// load a clang compilation database (https://clang.llvm.org/docs/JSONCompilationDatabase.html)
// this only needs to be loaded once, and could be refactored to a higher level function
- static std::unique_ptr<clang::tooling::CompilationDatabase> db =
+ static std::shared_ptr<clang::tooling::CompilationDatabase> db =
clang::tooling::CompilationDatabase::loadFromDirectory(clangCompileDatabase.data(), error);
int clang_option_len = 0;
std::vector<clang::tooling::CompileCommand> command;
diff -up doxygen-1.8.16/src/doxygen.cpp.me doxygen-1.8.16/src/doxygen.cpp
--- doxygen-1.8.16/src/doxygen.cpp.me 2019-12-10 12:05:44.254007471 +0100
+++ doxygen-1.8.16/src/doxygen.cpp 2019-12-10 12:07:24.286903381 +0100
@@ -520,7 +520,7 @@ static void addSTLClasses(Entry *root)
addSTLMember(classEntry,info->templType2,info->templName2);
}
if (fullName=="std::auto_ptr" || fullName=="std::smart_ptr" || fullName=="std::shared_ptr" ||
- fullName=="std::unique_ptr" || fullName=="std::weak_ptr")
+ fullName=="std::shared_ptr" || fullName=="std::weak_ptr")
{
Entry *memEntry = new Entry;
memEntry->name = "operator->";

View File

@ -0,0 +1,78 @@
commit cd9dee013dc749a10bbe019c350e0e62b6635795
Author: albert-github <albert.tests@gmail.com>
Date: Wed Jan 1 17:51:53 2020 +0100
issue #7464 1.8.17: test suite is failing
On Windows the syntax with the command and arguments in one string worked but on *nix (and Cygwin) it didn't.
- changed calls to Popen to split command (see also: https://docs.python.org/3/library/subprocess.html).
- explicitly specify files to check for xhtml
- changed call to xmllint for xhtml and docbook (due to stdout overflow in some cases, we are not really interested in the, formatted, output of xmllint).
- in the update part a `read` was left, should have been removed.
diff --git a/testing/runtests.py b/testing/runtests.py
index a4118b86..10fe5021 100755
--- a/testing/runtests.py
+++ b/testing/runtests.py
@@ -3,6 +3,7 @@
from __future__ import print_function
import argparse, glob, itertools, re, shutil, os, sys
import subprocess
+import shlex
config_reg = re.compile('.*\/\/\s*(?P<name>\S+):\s*(?P<value>.*)$')
@@ -28,10 +29,10 @@ def xpopen(cmd, cmd1="",encoding='utf-8-sig', getStderr=False):
return os.popen(cmd).read() # Python 2 without encoding
else:
if (getStderr):
- proc = subprocess.run(cmd1,encoding=encoding,capture_output=True) # Python 3 with encoding
- return proc.stderr
+ proc = subprocess.Popen(shlex.split(cmd1),stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding=encoding) # Python 3 with encoding
+ return proc.stderr.read()
else:
- proc = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding=encoding) # Python 3 with encoding
+ proc = subprocess.Popen(shlex.split(cmd),stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding=encoding) # Python 3 with encoding
return proc.stdout.read()
class Tester:
@@ -137,7 +138,7 @@ class Tester:
print('GENERATE_DOCBOOK=NO', file=f)
if (self.args.xhtml):
print('GENERATE_HTML=YES', file=f)
- # HTML_OUTPUT can also be set locally
+ # HTML_OUTPUT can also have been set locally
print('HTML_OUTPUT=%s/html' % self.test_out, file=f)
print('HTML_FILE_EXTENSION=.xhtml', file=f)
if (self.args.pdf):
@@ -184,7 +185,7 @@ class Tester:
print('Non-existing file %s after \'check:\' statement' % check_file)
return
# convert output to canonical form
- data = xpopen('%s --format --noblanks --nowarning %s' % (self.args.xmllint,check_file)).read()
+ data = xpopen('%s --format --noblanks --nowarning %s' % (self.args.xmllint,check_file))
if data:
# strip version
data = re.sub(r'xsd" version="[0-9.-]+"','xsd" version=""',data).rstrip('\n')
@@ -326,7 +327,7 @@ class Tester:
tests.append(glob.glob('%s/*.xml' % (docbook_output)))
tests.append(glob.glob('%s/*/*/*.xml' % (docbook_output)))
tests = ' '.join(list(itertools.chain.from_iterable(tests))).replace(self.args.outputdir +'/','').replace('\\','/')
- exe_string = '%s --nonet --postvalid %s' % (self.args.xmllint,tests)
+ exe_string = '%s --noout --nonet --postvalid %s' % (self.args.xmllint,tests)
exe_string1 = exe_string
exe_string += ' %s' % (redirx)
exe_string += ' %s more "%s/temp"' % (separ,docbook_output)
@@ -346,7 +347,11 @@ class Tester:
redirx=' 2> %s/temp >nul:'%html_output
else:
redirx='2>%s/temp >/dev/null'%html_output
- exe_string = '%s --path dtd --nonet --postvalid %s/*xhtml' % (self.args.xmllint,html_output)
+ check_file = []
+ check_file.append(glob.glob('%s/*.xhtml' % (html_output)))
+ check_file.append(glob.glob('%s/*/*/*.xhtml' % (html_output)))
+ check_file = ' '.join(list(itertools.chain.from_iterable(check_file))).replace(self.args.outputdir +'/','').replace('\\','/')
+ exe_string = '%s --noout --path dtd --nonet --postvalid %s' % (self.args.xmllint,check_file)
exe_string1 = exe_string
exe_string += ' %s' % (redirx)
exe_string += ' %s more "%s/temp"' % (separ,html_output)

View File

@ -3,27 +3,27 @@
%else
%global xapian_core_support OFF
%endif
%global BuildDir Out
Summary: A documentation system for C/C++
Name: doxygen
Epoch: 1
Version: 1.8.16
Release: 3%{?dist}
Version: 1.8.17
Release: 1%{?dist}
# No version is specified.
License: GPL+
Url: http://www.doxygen.nl
Source0: http://doxygen.nl/files/%{name}-%{version}.src.tar.gz
# this icon is part of kdesdk
Source1: doxywizard.png
Source2: doxywizard.desktop
Source1: doxywizard.desktop
# upstream patches
Patch0: doxygen-1.8.16-#7248.patch
Patch1: doxygen-1.8.16-covscan.patch
Patch0: doxgen-1.8.17-broken-urls-in-the-xml-output.patch
Patch1: doxygen-1.8.17-test-suite-is-failing.patch
BuildRequires: %{_bindir}/python3
BuildRequires: ImageMagick
BuildRequires: gcc-c++ gcc
BuildRequires: perl-interpreter
%if ! 0%{?_module_build}
@ -105,9 +105,8 @@ mv LANGUAGE.HOWTO.new LANGUAGE.HOWTO
%build
mkdir -p %{_target_platform}
pushd %{_target_platform}
mkdir -p %{BuildDir}
pushd %{BuildDir}
%if ! 0%{?_module_build}
%cmake \
-DPYTHON_EXECUTABLE=%{_bindir}/python3 \
@ -133,12 +132,21 @@ pushd %{_target_platform}
%endif
popd
make %{?_smp_mflags} -C %{_target_platform}
make %{?_smp_mflags} -C %{BuildDir}
%install
make install DESTDIR=%{buildroot} -C %{_target_platform}
make install DESTDIR=%{buildroot} -C %{BuildDir}
install -m644 -p -D %{SOURCE1} %{buildroot}%{_datadir}/pixmaps/doxywizard.png
# convert icons
convert addon/doxywizard/doxywizard.ico doxywizard.png
# install icons
icondir=%{buildroot}%{_datadir}/icons/hicolor
mkdir -m755 -p $icondir/{16x16,32x32,48x48,128x128}/apps
install -m644 -p -D doxywizard-6.png $icondir/16x16/apps/doxywizard.png
install -m644 -p -D doxywizard-5.png $icondir/32x32/apps/doxywizard.png
install -m644 -p -D doxywizard-4.png $icondir/48x48/apps/doxywizard.png
install -m644 -p -D doxywizard-3.png $icondir/128x128/apps/doxywizard.png
# install man pages
mkdir -p %{buildroot}/%{_mandir}/man1
@ -155,11 +163,11 @@ rm -f %{buildroot}/%{_mandir}/man1/doxyindexer.1* %{buildroot}/%{_mandir}/man1/d
rm -rf %{buildroot}/%{_docdir}/packages
%if ! 0%{?_module_build}
desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{SOURCE2}
desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{SOURCE1}
%endif
%check
make tests -C %{_target_platform}
make tests -C %{BuildDir}
%files
%doc LANGUAGE.HOWTO README.md
@ -182,7 +190,7 @@ make tests -C %{_target_platform}
%{_mandir}/man1/doxywizard*
%{_datadir}/applications/doxywizard.desktop
%endif
%{_datadir}/pixmaps/doxywizard.png
%{_datadir}/icons/hicolor/*/apps/doxywizard.png
%if ! 0%{?_module_build}
%files latex
@ -190,6 +198,9 @@ make tests -C %{_target_platform}
%endif
%changelog
* Tue Jan 14 2020 Than Ngo <than@redhat.com> - 1:1.8.17-1
- resolves #1786799, update to 1.8.17
* Tue Dec 10 2019 Than Ngo <than@redhat.com> - 1:1.8.16-3
- fixed covscan issues

View File

@ -1,2 +1 @@
SHA512 (doxywizard.png) = 42a7e5903bf27463d3b072cf043aef071b519b53054bbe647c522d5e499e02f554867ab5e9971b06493769cc17b9d1588462aeade284de1f9d579cf9f99e8851
SHA512 (doxygen-1.8.16.src.tar.gz) = 46a0189aa82d5a687bdd99a904f0c061fccca407d15867d14c8c4d13e8b21a8989e7ccd6af30840803b589ed20dd86084a4db880fba0d3bfa1fdcdd8d23e12de
SHA512 (doxygen-1.8.17.src.tar.gz) = 98869f60eb1eeb48a7d75993de7e19151665797441364532f86382dc19a9db6b71049cf697592cb321391991120868f4e25b4c3e80f2a0f2b3c70b71d90be7b6