diff --git a/backport-Incorrect-label-in-map-of-dot-files-in-xhtml.patch b/backport-Incorrect-label-in-map-of-dot-files-in-xhtml.patch new file mode 100644 index 0000000000000000000000000000000000000000..6c1d07603d9fa65fc93a4bf0a71cf17fee184c48 --- /dev/null +++ b/backport-Incorrect-label-in-map-of-dot-files-in-xhtml.patch @@ -0,0 +1,82 @@ +From 320878afdf87d87745d9e36731ae70b8bc23063d Mon Sep 17 00:00:00 2001 +From: albert-github +Date: Wed, 10 Jun 2020 12:32:24 +0200 +Subject: [PATCH] Incorrect label in map of dot files in xhtml + +https://github.com/doxygen/doxygen/pull/7840/commits/320878afdf87d87745d9e36731ae70b8bc23063d + +When a filename of a file starts with a digit the mapping of the resulting dot files results in message like: +``` +Syntax of value for attribute id of map is not valid +``` +an id cannot start with a digit, so an "a" is placed in front of it (unconditionally to overcome problems with a double label id i.e filename 087.cpp and a087.cpp). + +--- + src/dotfilepatcher.cpp | 2 +- + src/dotgraph.cpp | 2 +- + src/util.cpp | 10 ++++++++++ + src/util.h | 1 + + 4 files changed, 13 insertions(+), 2 deletions(-) + +diff --git a/src/dotfilepatcher.cpp b/src/dotfilepatcher.cpp +index e386af9..338be69 100644 +--- a/src/dotfilepatcher.cpp ++++ b/src/dotfilepatcher.cpp +@@ -459,7 +459,7 @@ bool DotFilePatcher::run() const + convertMapFile(tt,map->mapFile,map->relPath,map->urlOnly,map->context); + if (!result.isEmpty()) + { +- t << "label << "\" id=\"" << map->label << "\">" << endl; ++ t << "label << "\" id=\"" << correctId(map->label) << "\">" << endl; + t << result; + t << "" << endl; + } +diff --git a/src/dotgraph.cpp b/src/dotgraph.cpp +index e622dd4..55ea5ab 100644 +--- a/src/dotgraph.cpp ++++ b/src/dotgraph.cpp +@@ -246,7 +246,7 @@ void DotGraph::generateCode(FTextStream &t) + else // add link to bitmap file with image map + { + if (!m_noDivTag) t << "
"; +- t << "\"""; ++ t << "\"""; + if (!m_noDivTag) t << "
"; + t << endl; + if (m_regenerate || !insertMapFile(t, absMapName(), m_relPath, getMapLabel())) +diff --git a/src/util.cpp b/src/util.cpp +index 6d6112e..e8cf778 100644 +--- a/src/util.cpp ++++ b/src/util.cpp +@@ -5382,6 +5382,16 @@ QCString convertToId(const char *s) + return growBuf.get(); + } + ++/*! Some strings have been corrected but the requirement regarding the fact ++ * that an id cannot have a digit at the first position. To overcome problems ++ * with double labels we always place an "a" in front ++ */ ++QCString correctId(QCString s) ++{ ++ if (s.isEmpty()) return s; ++ return "a" + s; ++} ++ + /*! Converts a string to an XML-encoded string */ + QCString convertToXML(const char *s, bool keepEntities) + { +diff --git a/src/util.h b/src/util.h +index 98223b1..54421b2 100644 +--- a/src/util.h ++++ b/src/util.h +@@ -278,6 +278,7 @@ QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &te + QCString stripScope(const char *name); + + QCString convertToId(const char *s); ++QCString correctId(QCString s); + + QCString convertToHtml(const char *s,bool keepEntities=TRUE); + +-- +2.23.0 + diff --git a/backport-Incorrect-label-name-in-case-regeneration-of-HTML-without_regeneration_of_dot_files.patch b/backport-Incorrect-label-name-in-case-regeneration-of-HTML-without_regeneration_of_dot_files.patch new file mode 100644 index 0000000000000000000000000000000000000000..1af5748e427f6a75e6b99476f2378b4dffe9036d --- /dev/null +++ b/backport-Incorrect-label-name-in-case-regeneration-of-HTML-without_regeneration_of_dot_files.patch @@ -0,0 +1,30 @@ +From 939eca311ced62d9cb41d8e3c1acc207c99e09ed Mon Sep 17 00:00:00 2001 +From: albert-github +Date: Thu, 15 Oct 2020 13:06:23 +0200 +Subject: [PATCH] Incorrect label / name in case regeneration of HTML without + regeneration of dot files + +https://github.com/doxygen/doxygen/commit/de56d1864473485861bac89436337e8114fb2f6b + +This is a further regression on #7840. +In case we regenerate the HTML files but not the image files based on dot we get incorrect labels for the id / name in the HTML output. +--- + src/dotgraph.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/dotgraph.cpp b/src/dotgraph.cpp +index 55ea5ab..e1844b5 100644 +--- a/src/dotgraph.cpp ++++ b/src/dotgraph.cpp +@@ -249,7 +249,7 @@ void DotGraph::generateCode(FTextStream &t) + t << "\"""; + if (!m_noDivTag) t << ""; + t << endl; +- if (m_regenerate || !insertMapFile(t, absMapName(), m_relPath, getMapLabel())) ++ if (m_regenerate || !insertMapFile(t, absMapName(), m_relPath, correctId(getMapLabel()))) + { + int mapId = DotManager::instance()-> + createFilePatcher(m_fileName)-> +-- +2.23.0 + diff --git a/backport-issue-7474-1.8.16-regression-HTML-output-varies-from-ASLR.patch b/backport-issue-7474-1.8.16-regression-HTML-output-varies-from-ASLR.patch new file mode 100644 index 0000000000000000000000000000000000000000..b9a9a1b745c663582ceb4acd0667eeb90b6f8d03 --- /dev/null +++ b/backport-issue-7474-1.8.16-regression-HTML-output-varies-from-ASLR.patch @@ -0,0 +1,34 @@ +From dc67dbe5bd5a48756c591ad02b9f68fbd2a57687 Mon Sep 17 00:00:00 2001 +From: Dimitri van Heesch +Date: Sun, 19 Jan 2020 20:31:52 +0100 +Subject: [PATCH] issue #7474: [1.8.16 regression] HTML output varies from ASLR + +--- + src/memberlist.cpp | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/src/memberlist.cpp b/src/memberlist.cpp +index 278023b..edd164b 100644 +--- a/src/memberlist.cpp ++++ b/src/memberlist.cpp +@@ -75,8 +75,15 @@ int MemberList::compareValues(const MemberDef *c1, const MemberDef *c2) const + return 1; + } + int cmp = qstricmp(c1->name(),c2->name()); +- if (cmp==0) cmp = qstricmp(c1->argsString(),c2->argsString()); +- return cmp!=0 ? cmp : c1->getDefLine()-c2->getDefLine(); ++ if (cmp==0 && c1->argsString() && c2->argsString()) ++ { ++ cmp = qstricmp(c1->argsString(),c2->argsString()); ++ } ++ if (cmp==0) ++ { ++ cmp = c1->getDefLine()-c2->getDefLine(); ++ } ++ return cmp; + } + + int MemberList::countInheritableMembers(const ClassDef *inheritedFrom) const +-- +1.8.3.1 + diff --git a/backport-issue-7583-External-Links-in-Inheritance-Diagrams-open-in-the-Image-Frame.patch b/backport-issue-7583-External-Links-in-Inheritance-Diagrams-open-in-the-Image-Frame.patch new file mode 100644 index 0000000000000000000000000000000000000000..67dcf7fcb8ef489f70792872ef270f605bc96253 --- /dev/null +++ b/backport-issue-7583-External-Links-in-Inheritance-Diagrams-open-in-the-Image-Frame.patch @@ -0,0 +1,78 @@ +From 8a7647bd12f383730c886b34c431ae976ec5ff83 Mon Sep 17 00:00:00 2001 +From: albert-github +Date: Mon, 24 Feb 2020 14:46:26 +0100 +Subject: [PATCH] issue #7583 External Links in Inheritance Diagrams open in + the Image Frame. + +When having a function it opens in the current frame and uses the complete frame. Images (e.g. inherited diagrams) are displayed in a small "sub frame" and when displaying the link here it is not readable and furthermore the user doesn't know anything about the "sub frame". In case of an image the link should be displayed in the parent frame of the image. +--- + src/diagram.cpp | 2 +- + src/dotfilepatcher.cpp | 2 +- + src/util.cpp | 9 +++++++-- + src/util.h | 2 +- + 4 files changed, 10 insertions(+), 5 deletions(-) + +diff --git a/src/diagram.cpp b/src/diagram.cpp +index 18817e9..25b2c06 100644 +--- a/src/diagram.cpp ++++ b/src/diagram.cpp +@@ -261,7 +261,7 @@ static void writeMapArea(FTextStream &t,const ClassDef *cd,QCString relPath, + t << " +Date: Sun, 19 Apr 2020 14:21:18 +0200 +Subject: [PATCH] issue #7706: Md5 hash does not match for two different runs + (part 2) + +--- + src/dotfilepatcher.cpp | 41 +++++++++++++++++++++-------------------- + src/dotgraph.cpp | 12 +----------- + 2 files changed, 22 insertions(+), 31 deletions(-) + +diff --git a/src/dotfilepatcher.cpp b/src/dotfilepatcher.cpp +index e386af9..20ce4c1 100644 +--- a/src/dotfilepatcher.cpp ++++ b/src/dotfilepatcher.cpp +@@ -132,7 +132,7 @@ static QCString replaceRef(const QCString &buf,const QCString relPath, + //bool isXLink=FALSE; + int len = 6; + int indexS = buf.find("href=\""), indexE; +- bool setTarget = FALSE; ++ bool targetAlreadySet = buf.find("target=")!=-1; + if (indexS>5 && buf.find("xlink:href=\"")!=-1) // XLink href (for SVG) + { + indexS-=6; +@@ -152,9 +152,9 @@ static QCString replaceRef(const QCString &buf,const QCString relPath, + // fake ref node to resolve the url + DocRef *df = new DocRef( (DocNode*) 0, link.mid(5), context ); + result+=externalRef(relPath,df->ref(),TRUE); +- if (!df->file().isEmpty()) ++ if (!df->file().isEmpty()) + result += df->file().data() + Doxygen::htmlFileExtension; +- if (!df->anchor().isEmpty()) ++ if (!df->anchor().isEmpty()) + result += "#" + df->anchor(); + delete df; + result += "\""; +@@ -174,7 +174,6 @@ static QCString replaceRef(const QCString &buf,const QCString relPath, + if (!ref.isEmpty()) + { + result = externalLinkTarget(true); +- if (result != "") setTarget = TRUE; + } + result+= href+"=\""; + result+=externalRef(relPath,ref,TRUE); +@@ -185,12 +184,14 @@ static QCString replaceRef(const QCString &buf,const QCString relPath, + result = href+"=\"" + link + "\""; + } + } +- if (!target.isEmpty() && !setTarget) ++ if (!target.isEmpty() && !targetAlreadySet) + { + result+=" target=\""+target+"\""; + } + QCString leftPart = buf.left(indexS); + QCString rightPart = buf.mid(indexE+1); ++ //printf("replaceRef(\n'%s'\n)->\n'%s+%s+%s'\n", ++ // buf.data(),leftPart.data(),result.data(),rightPart.data()); + return leftPart + result + rightPart; + } + else +@@ -215,7 +216,7 @@ bool DotFilePatcher::convertMapFile(FTextStream &t,const char *mapName, + const QCString &context) + { + QFile f(mapName); +- if (!f.open(IO_ReadOnly)) ++ if (!f.open(IO_ReadOnly)) + { + err("problems opening map file %s for inclusion in the docs!\n" + "If you installed Graphviz/dot after a previous failing run, \n" +@@ -250,7 +251,7 @@ bool DotFilePatcher::convertMapFile(FTextStream &t,const char *mapName, + return TRUE; + } + +-DotFilePatcher::DotFilePatcher(const char *patchFile) ++DotFilePatcher::DotFilePatcher(const char *patchFile) + : m_patchFile(patchFile) + { + m_maps.setAutoDelete(TRUE); +@@ -346,7 +347,7 @@ bool DotFilePatcher::run() const + } + QFile fi(tmpName); + QFile fo(patchFile); +- if (!fi.open(IO_ReadOnly)) ++ if (!fi.open(IO_ReadOnly)) + { + err("problem opening file %s for patching!\n",tmpName.data()); + QDir::current().rename(tmpName,patchFile); +@@ -380,7 +381,7 @@ bool DotFilePatcher::run() const + ASSERT(numBytes600) height=600; // clip to maximum height of 600 pixels + out << "
"; +- //out << ""; + } + else + { +- //out << ""; + } + writeSVGNotSupported(out); +@@ -650,7 +651,7 @@ bool DotFilePatcher::writeVecGfxFigure(FTextStream &out,const QCString &baseName + } + //printf("Got PDF/EPS size %d,%d\n",width,height); + int maxWidth = 350; /* approx. page width in points, excl. margins */ +- int maxHeight = 550; /* approx. page height in points, excl. margins */ ++ int maxHeight = 550; /* approx. page height in points, excl. margins */ + out << "\\nopagebreak\n" + "\\begin{figure}[H]\n" + "\\begin{center}\n" +diff --git a/src/dotgraph.cpp b/src/dotgraph.cpp +index e622dd4..c0cc4fd 100644 +--- a/src/dotgraph.cpp ++++ b/src/dotgraph.cpp +@@ -74,15 +74,6 @@ static bool checkDeliverables(const QCString &file1, + return file1Ok && file2Ok; + } + +-static void removeDotGraph(const QCString &dotName) +-{ +- if (Config_getBool(DOT_CLEANUP)) +- { +- QDir d; +- d.remove(dotName); +- } +-} +- + static bool insertMapFile(FTextStream &out,const QCString &mapFile, + const QCString &relPath,const QCString &mapLabel) + { +@@ -108,7 +99,7 @@ static bool insertMapFile(FTextStream &out,const QCString &mapFile, + QCString DotGraph::imgName() const + { + return m_baseName + ((m_graphFormat == GOF_BITMAP) ? +- ("." + getDotImageExtension()) : (Config_getBool(USE_PDFLATEX) ? ".pdf" : ".eps")); ++ ("." + getDotImageExtension()) : (Config_getBool(USE_PDFLATEX) ? ".pdf" : ".eps")); + } + + QCString DotGraph::writeGraph( +@@ -166,7 +157,6 @@ bool DotGraph::prepareDotFile() + ) + { + // all needed files are there +- removeDotGraph(absDotName()); + return FALSE; + } + +-- +1.8.3.1 + diff --git a/backport-issue-7706-Md5-hash-does-not-match-for-two-different-runs.patch b/backport-issue-7706-Md5-hash-does-not-match-for-two-different-runs.patch new file mode 100644 index 0000000000000000000000000000000000000000..6ebed59e1b6a1be916dfabd675b25077f9bcfafa --- /dev/null +++ b/backport-issue-7706-Md5-hash-does-not-match-for-two-different-runs.patch @@ -0,0 +1,265 @@ +From f3ebc866c88b31ab393637e30189d41ddb7f84f0 Mon Sep 17 00:00:00 2001 +From: Dimitri van Heesch +Date: Fri, 17 Apr 2020 21:39:13 +0200 +Subject: [PATCH] issue #7706: Md5 hash does not match for two different runs + +--- + src/memberlist.cpp | 79 +++++++++++++++++++++++++++++------------------------- + 1 file changed, 42 insertions(+), 37 deletions(-) + +diff --git a/src/memberlist.cpp b/src/memberlist.cpp +index 8a76a1d..b5377a4 100644 +--- a/src/memberlist.cpp ++++ b/src/memberlist.cpp +@@ -1,12 +1,12 @@ + /****************************************************************************** + * +- * ++ * + * + * Copyright (C) 1997-2015 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its +- * documentation under the terms of the GNU General Public License is hereby +- * granted. No representations are made about the suitability of this software ++ * documentation under the terms of the GNU General Public License is hereby ++ * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * +@@ -63,10 +63,11 @@ MemberList::~MemberList() + delete memberGroupList; + } + +-int MemberList::compareValues(const MemberDef *c1, const MemberDef *c2) const ++static int genericCompareMembers(const MemberDef *c1,const MemberDef *c2) + { +- static bool sortConstructorsFirst = Config_getBool(SORT_MEMBERS_CTORS_1ST); +- if (sortConstructorsFirst) { ++ bool sortConstructorsFirst = Config_getBool(SORT_MEMBERS_CTORS_1ST); ++ if (sortConstructorsFirst) ++ { + int ord1 = c1->isConstructor() ? 2 : (c1->isDestructor() ? 1 : 0); + int ord2 = c2->isConstructor() ? 2 : (c2->isDestructor() ? 1 : 0); + if (ord1 > ord2) +@@ -74,11 +75,19 @@ int MemberList::compareValues(const MemberDef *c1, const MemberDef *c2) const + else if (ord2 > ord1) + return 1; + } ++ // sort on name + int cmp = qstricmp(c1->name(),c2->name()); ++ // then on argument list + if (cmp==0 && c1->argsString() && c2->argsString()) + { + cmp = qstricmp(c1->argsString(),c2->argsString()); + } ++ // then on file in which the item is defined ++ if (cmp==0) ++ { ++ cmp = qstricmp(c1->getDefFileName(),c2->getDefFileName()); ++ } ++ // then on line number at which the member is defined + if (cmp==0) + { + cmp = c1->getDefLine()-c2->getDefLine(); +@@ -86,6 +95,11 @@ int MemberList::compareValues(const MemberDef *c1, const MemberDef *c2) const + return cmp; + } + ++int MemberList::compareValues(const MemberDef *c1, const MemberDef *c2) const ++{ ++ return genericCompareMembers(c1,c2); ++} ++ + int MemberList::countInheritableMembers(const ClassDef *inheritedFrom) const + { + int count=0; +@@ -295,7 +309,7 @@ MemberDef *MemberList::take(uint index) + } + + MemberListIterator::MemberListIterator(const MemberList &l) : +- QListIterator(l) ++ QListIterator(l) + { + } + +@@ -385,9 +399,9 @@ bool MemberList::declVisible() const + case MemberType_Service: // fall through + case MemberType_Sequence: // fall through + case MemberType_Dictionary: // fall through +- case MemberType_Event: ++ case MemberType_Event: + return TRUE; +- case MemberType_Enumeration: ++ case MemberType_Enumeration: + { + // if this is an anonymous enum and there are variables of this + // enum type (i.e. enumVars>0), then we do not show the enum here. +@@ -399,7 +413,7 @@ bool MemberList::declVisible() const + break; + case MemberType_Friend: + return TRUE; +- case MemberType_EnumValue: ++ case MemberType_EnumValue: + { + if (m_inGroup) + { +@@ -431,7 +445,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, + } + //printf(" --> writePlainDeclaration() numDecMembers()=%d\n", + // numDecMembers()); +- ++ + ol.pushGeneratorState(); + + bool first=TRUE; +@@ -460,13 +474,13 @@ void MemberList::writePlainDeclarations(OutputList &ol, + case MemberType_Service: // fall through + case MemberType_Sequence: // fall through + case MemberType_Dictionary: // fall through +- case MemberType_Event: ++ case MemberType_Event: + { + if (first) ol.startMemberList(),first=FALSE; + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId); + break; + } +- case MemberType_Enumeration: ++ case MemberType_Enumeration: + { + // if this is an anonymous enum and there are variables of this + // enum type (i.e. enumVars>0), then we do not show the enum here. +@@ -531,7 +545,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, + case MemberType_Friend: + if (inheritedFrom==0) + { +- if (first) ++ if (first) + { + ol.startMemberList(); + first=FALSE; +@@ -539,7 +553,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId); + break; + } +- case MemberType_EnumValue: ++ case MemberType_EnumValue: + { + if (m_inGroup) + { +@@ -565,7 +579,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, + //printf("anonymous compound members\n"); + if (md->isBriefSectionVisible()) + { +- if (first) ++ if (first) + { + ol.startMemberList(); + first=FALSE; +@@ -576,10 +590,10 @@ void MemberList::writePlainDeclarations(OutputList &ol, + } + } + } +- +- if (!first) ++ ++ if (!first) + { +- ol.endMemberList(); ++ ol.endMemberList(); + } + + ol.popGeneratorState(); +@@ -635,7 +649,7 @@ void MemberList::writeDeclarations(OutputList &ol, + if (title) + { + ol.writeInheritedSectionTitle(inheritId,cd->getReference(), +- cd->getOutputFileBase(), ++ cd->getOutputFileBase(), + cd->anchor(),title,cd->displayName()); + } + ol.popGeneratorState(); +@@ -643,7 +657,7 @@ void MemberList::writeDeclarations(OutputList &ol, + } + else if (num>numEnumValues) + { +- if (title) ++ if (title) + { + if (showInline) + { +@@ -663,7 +677,7 @@ void MemberList::writeDeclarations(OutputList &ol, + ol.endMemberHeader(); + } + } +- if (subtitle) ++ if (subtitle) + { + QCString st=subtitle; + st = st.stripWhiteSpace(); +@@ -728,7 +742,7 @@ void MemberList::writeDeclarations(OutputList &ol, + } + } + } +- if (inheritedFrom && cd) ++ if (inheritedFrom && cd) + { + // also add members that of this list type, that are grouped together + // in a separate list in class 'inheritedFrom' +@@ -772,7 +786,7 @@ void MemberList::writeDocumentation(OutputList &ol, + overloadCountDict.setAutoDelete(TRUE); + for (mli.toFirst() ; (md=mli.current()) ; ++mli) + { +- if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) && ++ if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) && + !(md->isEnumValue() && !showInline)) + { + uint *pCount = overloadTotalDict.find(md->name()); +@@ -790,7 +804,7 @@ void MemberList::writeDocumentation(OutputList &ol, + + for (mli.toFirst() ; (md=mli.current()) ; ++mli) + { +- if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) && ++ if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) && + !(md->isEnumValue() && !showInline)) + { + uint overloadCount = *overloadTotalDict.find(md->name()); +@@ -949,7 +963,7 @@ void MemberList::addListReferences(Definition *def) + MemberDef *vmd; + for ( ; (vmd=vmli.current()) ; ++vmli) + { +- //printf(" adding %s\n",vmd->name().data()); ++ //printf(" adding %s\n",vmd->name().data()); + vmd->addListReference(def); + } + } +@@ -990,7 +1004,7 @@ void MemberList::setNeedsSorting(bool b) + m_needsSorting = b; + } + +-QCString MemberList::listTypeAsString(MemberListType type) ++QCString MemberList::listTypeAsString(MemberListType type) + { + switch(type) + { +@@ -1087,16 +1101,7 @@ void MemberList::writeTagFile(FTextStream &tagFile) + + int MemberSDict::compareValues(const MemberDef *c1, const MemberDef *c2) const + { +- //printf("MemberSDict::compareValues(%s,%s)\n",c1->name().data(),c2->name().data()); +- int cmp = qstricmp(c1->name(),c2->name()); +- if (cmp) +- { +- return cmp; +- } +- else +- { +- return c1->getDefLine()-c2->getDefLine(); +- } ++ return genericCompareMembers(c1,c2); + } + + +-- +1.8.3.1 + diff --git a/doxygen.spec b/doxygen.spec index d011298009eb49507bfdca23baa9f14e7e686b92..8ae20c9d2b70cb05abe828fbaf327cf84744d361 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -3,7 +3,7 @@ Name: doxygen Epoch: 1 Version: 1.8.17 -Release: 6 +Release: 7 Summary: A documentation system for C/C++ License: GPL+ Url: http://www.doxygen.nl @@ -12,6 +12,12 @@ Source1: doxywizard.desktop Patch1: test_suite_is_failing.patch Patch2: RTFGenerator-should-exit-with-0-when-gengrate-file-s.patch +Patch3: backport-issue-7474-1.8.16-regression-HTML-output-varies-from-ASLR.patch +Patch4: backport-issue-7706-Md5-hash-does-not-match-for-two-different-runs.patch +Patch5: backport-issue-7583-External-Links-in-Inheritance-Diagrams-open-in-the-Image-Frame.patch +Patch6: backport-issue-7706-Md5-hash-does-not-match-for-two-different-runs-part2.patch +Patch7: backport-Incorrect-label-in-map-of-dot-files-in-xhtml.patch +Patch8: backport-Incorrect-label-name-in-case-regeneration-of-HTML-without_regeneration_of_dot_files.patch BuildRequires: python3 ImageMagick gcc-c++ gcc perl-interpreter BuildRequires: tex(dvips) tex(latex) tex(multirow.sty) tex(sectsty.sty) tex(tocloft.sty) @@ -98,6 +104,10 @@ make tests -C %{BuildDir} %{_datadir}/icons/hicolor/*/apps/doxywizard.png %changelog +* Fri Jun 4 2021 wangchen - 1.8.17-7 +- Fix Md5 hash does not match for two different runs. + Fix Incorrect label name in case regeneration of HTML without regeneration of dot files. + * Sat May 22 2021 zoulin - 1.8.17-6 - Modify version number