From d1c4879feb7fa8944810d997c4752acc40627911 Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Jan 14 2020 10:50:27 +0000 Subject: - update to 1.8.17 - fixes test suite is failing - fixes broken urls in the xml output --- diff --git a/.gitignore b/.gitignore index 0125476..abde3a8 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/doxgen-1.8.17-broken-urls-in-the-xml-output.patch b/doxgen-1.8.17-broken-urls-in-the-xml-output.patch new file mode 100644 index 0000000..6376a8e --- /dev/null +++ b/doxgen-1.8.17-broken-urls-in-the-xml-output.patch @@ -0,0 +1,102 @@ +commit 2f79c6938c6d969f3d4ebc9ed0f2648668434502 +Author: albert-github +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 @@ + + More text. + SVG image with caption: +-A caption ++A caption + + PNG image with caption: +-A caption ++A caption + + SVG image without caption: +- ++ + + PNG image without caption: +- ++ + + Inline SVG image with caption: +-This image is inline MIT license ++This image is inline MIT license + within the text. + Inline PNG image with caption: +-This image is inline MIT license ++This image is inline MIT license + within the text. + Markdown style linked SVG image: +- ++ + Markdown style linked PNG image: +- ++ + HTML style linked SVG image: +- ++ + HTML style linked PNG image: +- ++ + HTML style unlinked SVG image: +- ++ + + HTML style unlinked PNG image: +- ++ + + Some markdown image tests +- ++ + Some normal link + +- ++ + Some normal link + + diff --git a/doxygen-1.8.16-#7248.patch b/doxygen-1.8.16-#7248.patch deleted file mode 100644 index 6a79b65..0000000 --- a/doxygen-1.8.16-#7248.patch +++ /dev/null @@ -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 - } - } - diff --git a/doxygen-1.8.16-covscan.patch b/doxygen-1.8.16-covscan.patch deleted file mode 100644 index 18688ea..0000000 --- a/doxygen-1.8.16-covscan.patch +++ /dev/null @@ -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 &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 &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 &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 &m_modelData; - }; - -@@ -243,14 +243,14 @@ class Wizard : public QSplitter - - private: - const QHash &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 *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 *templateInstances; -+ mutable QDict *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 *variableInstances; -+ mutable QDict *variableInstances = 0; - -- QDict *templBaseClassNames; -+ QDict *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 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 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 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 *classSectionSDict; // not accessible -+ SDict *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 *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 db = -+ static std::shared_ptr db = - clang::tooling::CompilationDatabase::loadFromDirectory(clangCompileDatabase.data(), error); - int clang_option_len = 0; - std::vector 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->"; diff --git a/doxygen-1.8.17-test-suite-is-failing.patch b/doxygen-1.8.17-test-suite-is-failing.patch new file mode 100644 index 0000000..b41002e --- /dev/null +++ b/doxygen-1.8.17-test-suite-is-failing.patch @@ -0,0 +1,78 @@ +commit cd9dee013dc749a10bbe019c350e0e62b6635795 +Author: albert-github +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\S+):\s*(?P.*)$') + +@@ -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) diff --git a/doxygen.spec b/doxygen.spec index 0dcf1aa..799bc7a 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -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 - 1:1.8.17-1 +- resolves #1786799, update to 1.8.17 + * Tue Dec 10 2019 Than Ngo - 1:1.8.16-3 - fixed covscan issues diff --git a/sources b/sources index d350a87..f30c052 100644 --- a/sources +++ b/sources @@ -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