diff --git a/.gitignore b/.gitignore index e3cca27..a61e072 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,4 @@ doxygen-1.7.1.src.tar.gz /doxygen-1.10.0.src.tar.gz /doxygen-1.11.0.src.tar.gz /doxygen-1.12.0.src.tar.gz +/doxygen-1.13.2.src.tar.gz diff --git a/doxygen-1.12.0-non-reproducible-file-names-in-doxygen-output.patch b/doxygen-1.12.0-non-reproducible-file-names-in-doxygen-output.patch deleted file mode 100644 index 4882e7e..0000000 --- a/doxygen-1.12.0-non-reproducible-file-names-in-doxygen-output.patch +++ /dev/null @@ -1,403 +0,0 @@ -commit 040cdc3acd4d417df447199eefb4af08fbbe6907 -Author: Dimitri van Heesch -Date: Fri Sep 20 21:10:32 2024 +0200 - - issue #11138 Non-reproducible file names in doxygen output - -diff --git a/src/doxygen.cpp b/src/doxygen.cpp -index add2af755..124b5fda4 100644 ---- a/src/doxygen.cpp -+++ b/src/doxygen.cpp -@@ -1547,6 +1547,7 @@ static void processTagLessClasses(const ClassDef *rootCd, - MemberList *ml = cd->getMemberList(MemberListType::PubAttribs()); - if (ml) - { -+ int pos=0; - for (const auto &md : *ml) - { - QCString type = md->typeString(); -@@ -1559,7 +1560,7 @@ static void processTagLessClasses(const ClassDef *rootCd, - if (type.find(icd->name())!=-1) // matching tag less struct/union - { - QCString name = md->name(); -- if (md->isAnonymous()) name = "__unnamed" + name.right(name.length()-1)+"__"; -+ if (md->isAnonymous()) name = "__unnamed" + QCString().setNum(pos++)+"__"; - if (!prefix.isEmpty()) name.prepend(prefix+"."); - //printf(" found %s for class %s\n",qPrint(name),qPrint(cd->name())); - ClassDefMutable *ncd = createTagLessInstance(rootCd,icd,name); -@@ -8837,7 +8838,7 @@ static void generateDocsForClassList(const std::vector &classL - auto ctx = std::make_shared(cd,*g_outputList); - auto processFile = [ctx]() - { -- msg("Generating docs for compound %s...\n",qPrint(ctx->cd->name())); -+ msg("Generating docs for compound %s...\n",qPrint(ctx->cd->displayName())); - - // skip external references, anonymous compounds and - // template instances -@@ -8875,7 +8876,7 @@ static void generateDocsForClassList(const std::vector &classL - if ( !cd->isHidden() && !cd->isEmbeddedInOuterScope() && - cd->isLinkableInProject() && cd->templateMaster()==nullptr) - { -- msg("Generating docs for compound %s...\n",qPrint(cd->name())); -+ msg("Generating docs for compound %s...\n",qPrint(cd->displayName())); - - cd->writeDocumentation(*g_outputList); - cd->writeMemberList(*g_outputList); -@@ -8943,7 +8944,7 @@ static void generateConceptDocs() - ) && !cd->isHidden() && cd->isLinkableInProject() - ) - { -- msg("Generating docs for concept %s...\n",qPrint(cd->name())); -+ msg("Generating docs for concept %s...\n",qPrint(cd->displayName())); - cd->writeDocumentation(*g_outputList); - } - } -@@ -9912,7 +9913,7 @@ static void generateNamespaceClassDocs(const ClassLinkedRefMap &classList) - && !ctx->cdm->isHidden() && !ctx->cdm->isEmbeddedInOuterScope() - ) - { -- msg("Generating docs for compound %s...\n",qPrint(ctx->cdm->name())); -+ msg("Generating docs for compound %s...\n",qPrint(ctx->cdm->displayName())); - ctx->cdm->writeDocumentation(ctx->ol); - ctx->cdm->writeMemberList(ctx->ol); - } -@@ -9943,7 +9944,7 @@ static void generateNamespaceClassDocs(const ClassLinkedRefMap &classList) - && !cd->isHidden() && !cd->isEmbeddedInOuterScope() - ) - { -- msg("Generating docs for compound %s...\n",qPrint(cd->name())); -+ msg("Generating docs for compound %s...\n",qPrint(cd->displayName())); - - cdm->writeDocumentation(*g_outputList); - cdm->writeMemberList(*g_outputList); -@@ -9982,7 +9983,7 @@ static void generateNamespaceDocs() - NamespaceDefMutable *ndm = toNamespaceDefMutable(nd.get()); - if (ndm) - { -- msg("Generating docs for namespace %s\n",qPrint(nd->name())); -+ msg("Generating docs for namespace %s\n",qPrint(nd->displayName())); - ndm->writeDocumentation(*g_outputList); - } - } -diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp -index 0582fc983..dd0fb6839 100644 ---- a/src/namespacedef.cpp -+++ b/src/namespacedef.cpp -@@ -44,6 +44,10 @@ static QCString makeDisplayName(const NamespaceDef *nd,bool includeScope) - { - result = substitute(result,"::",sep); - } -+ if (nd->isAnonymous()) -+ { -+ result = removeAnonymousScopes(result); -+ } - //printf("makeDisplayName() %s->%s lang=%d\n",qPrint(name()),qPrint(result),lang); - return result; - } -diff --git a/src/scanner.l b/src/scanner.l -index 35850404e..2a2c45b3e 100644 ---- a/src/scanner.l -+++ b/src/scanner.l -@@ -33,7 +33,6 @@ typedef yyguts_t *yyscan_t; - #include - #include - #include --#include - #include - #include - #include -@@ -61,9 +60,6 @@ typedef yyguts_t *yyscan_t; - #define YY_NO_INPUT 1 - #define YY_NO_UNISTD_H 1 - --static AtomicInt anonCount; --static AtomicInt anonNSCount; -- - struct scannerYY_state - { - OutlineParserInterface *thisParser; -@@ -213,6 +209,9 @@ struct scannerYY_state - - int fakeNS = 0; //";" { /* typedef of anonymous type */ -- yyextra->current->name.sprintf("@%d",anonCount++); -+ yyextra->current->name = generateAnonymousAnchor(yyextra->fileName,yyextra->anonCount++); - if (yyextra->current->section.isEnum() || yyextra->current->spec.isEnum()) - { - yyextra->current->program << ','; // add field terminator -@@ -4429,7 +4429,7 @@ NONLopt [^\n]* - { - // anonymous compound yyextra->inside -> insert dummy variable name - //printf("Adding anonymous variable for scope %s\n",qPrint(p->name)); -- yyextra->msName.sprintf("@%d",anonCount++); -+ yyextra->msName = generateAnonymousAnchor(yyextra->fileName,yyextra->anonCount++); - break; - } - } -@@ -6339,12 +6339,12 @@ NONLopt [^\n]* - } - else // use invisible name - { -- yyextra->current->name.sprintf("@%d",anonNSCount.load()); -+ yyextra->current->name = generateAnonymousAnchor(yyextra->fileName,yyextra->anonNSCount); - } - } - else - { -- yyextra->current->name.sprintf("@%d",anonCount++); -+ yyextra->current->name = generateAnonymousAnchor(yyextra->fileName,yyextra->anonCount++); - } - } - yyextra->curlyCount=0; -@@ -7846,7 +7846,6 @@ static void addKnRArgInfo(yyscan_t yyscanner,const QCString &type,const QCString - - //----------------------------------------------------------------------------- - -- - void fixArgumentListForJavaScript(ArgumentList &al) - { - for (Argument &a : al) -@@ -7859,6 +7858,7 @@ void fixArgumentListForJavaScript(ArgumentList &al) - } - } - -+//----------------------------------------------------------------------------- - - static void startCommentBlock(yyscan_t yyscanner,bool brief) - { -@@ -8168,6 +8168,8 @@ static void parseMain(yyscan_t yyscanner, - yyextra->yyLineNr = 1 ; - yyextra->yyBegLineNr = 1; - yyextra->yyBegColNr = 0; -+ yyextra->anonCount = 0; -+ yyextra->anonNSCount = 0; - yyextra->fileName = fileName; - yyextra->clangParser = clangParser; - setContext(yyscanner); -@@ -8222,7 +8224,7 @@ static void parseMain(yyscan_t yyscanner, - - parseCompounds(yyscanner,rt); - -- anonNSCount++; -+ yyextra->anonNSCount++; - - // add additional entries that were created during processing - for (auto &[parent,child]: yyextra->outerScopeEntries) -diff --git a/src/sitemap.cpp b/src/sitemap.cpp -index 67e6c3f35..52e324261 100644 ---- a/src/sitemap.cpp -+++ b/src/sitemap.cpp -@@ -86,7 +86,7 @@ class Crawlmap::Private - public: - std::ofstream crawlFile; - TextStream crawl; -- StringSet crawlLinks; -+ StringVector crawlLinks; - }; - - Crawlmap::Crawlmap() : p(std::make_unique()) {} -@@ -117,6 +117,8 @@ void Crawlmap::initialize() - - void Crawlmap::finalize() - { -+ std::sort(p->crawlLinks.begin(),p->crawlLinks.end()); -+ p->crawlLinks.erase(std::unique(p->crawlLinks.begin(),p->crawlLinks.end()),p->crawlLinks.end()); - for (auto &s : p->crawlLinks) - { - p->crawl << "\n"; -@@ -132,7 +134,7 @@ void Crawlmap::addIndexFile(const QCString & fileName) - { - QCString fn = fileName; - addHtmlExtensionIfMissing(fn); -- p->crawl << "\n"; -+ p->crawlLinks.push_back(fn.str()); - } - - void Crawlmap::addContentsItem(bool, const QCString &, const QCString & ref, -@@ -163,7 +163,7 @@ void Crawlmap::addContentsItem(bool, con - link += currAnc.str(); - } - } -- p->crawlLinks.insert(link); -+ p->crawlLinks.push_back(link); - } - } - -@@ -213,12 +213,12 @@ void Crawlmap::addIndexItem(const Defini - QCString ref; - - ref = makeRef(contRef, anchor); -- p->crawlLinks.insert(ref.str()); -+ p->crawlLinks.push_back(ref.str()); - } - else if (context) // container - { - QCString contRef = context->getOutputFileBase(); - QCString ref = makeRef(contRef,sectionAnchor); -- p->crawlLinks.insert(ref.str()); -+ p->crawlLinks.push_back(ref.str()); - } - } -diff --git a/src/util.cpp b/src/util.cpp -index ab30eb461..1aa6916a5 100644 ---- a/src/util.cpp -+++ b/src/util.cpp -@@ -3877,6 +3877,27 @@ QCString convertNameToFile(const QCString &name,bool allowDots,bool allowUndersc - return result; - } - -+QCString generateAnonymousAnchor(const QCString &fileName,int count) -+{ -+ QCString fn = stripFromPath(fileName)+":"+QCString().setNum(count); -+ const int sig_size=16; -+ uint8_t md5_sig[sig_size]; -+ MD5Buffer(fn.data(),static_cast(fn.length()),md5_sig); -+ char result[sig_size*3+2]; -+ char *p = result; -+ *p++='@'; -+ for (int i=0;i>6)&7]; -+ *p++=oct[(byte>>3)&7]; -+ *p++=oct[(byte>>0)&7]; -+ } -+ *p='\0'; -+ return result; -+} -+ - QCString relativePathToRoot(const QCString &name) - { - QCString result; -diff --git a/src/util.h b/src/util.h -index 64ce8e895..31b32aa25 100644 ---- a/src/util.h -+++ b/src/util.h -@@ -253,6 +253,8 @@ QCString replaceAnonymousScopes(const QCString &s,const QCString &replacement=QC - - QCString convertNameToFile(const QCString &name,bool allowDots=FALSE,bool allowUnderscore=FALSE); - -+QCString generateAnonymousAnchor(const QCString &fileName,int count); -+ - void extractNamespaceName(const QCString &scopeName, - QCString &className,QCString &namespaceName, - bool allowEmptyClass=FALSE); -diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp -index 4d4913d20..8e3eebe18 100644 ---- a/src/xmlgen.cpp -+++ b/src/xmlgen.cpp -@@ -2243,12 +2243,12 @@ void generateXML() - } - for (const auto &cd : *Doxygen::conceptLinkedMap) - { -- msg("Generating XML output for concept %s\n",qPrint(cd->name())); -+ msg("Generating XML output for concept %s\n",qPrint(cd->displayName())); - generateXMLForConcept(cd.get(),t); - } - for (const auto &nd : *Doxygen::namespaceLinkedMap) - { -- msg("Generating XML output for namespace %s\n",qPrint(nd->name())); -+ msg("Generating XML output for namespace %s\n",qPrint(nd->displayName())); - generateXMLForNamespace(nd.get(),t); - } - for (const auto &fn : *Doxygen::inputNameLinkedMap) -diff --git a/testing/071/namespace_a_namespace_1_1_0d0.xml b/testing/071/namespace_a_namespace_1_1_0d130315250316227335362355006121037335073327177063.xml -similarity index 62% -rename from testing/071/namespace_a_namespace_1_1_0d0.xml -rename to testing/071/namespace_a_namespace_1_1_0d130315250316227335362355006121037335073327177063.xml -index c08d49e24..4da395e35 100644 ---- a/testing/071/namespace_a_namespace_1_1_0d0.xml -+++ b/testing/071/namespace_a_namespace_1_1_0d130315250316227335362355006121037335073327177063.xml -@@ -1,27 +1,27 @@ - - -- -+ - ANamespace - -- -+ - - Boolean - ANamespace::Boolean -- -+ - False - - - - - -- -+ - True - - - - - -- -+ - FileNotFound - - -diff --git a/testing/071_enum_in_anon_ns.cpp b/testing/071_enum_in_anon_ns.cpp -index 8aab15fc8..98843bff2 100644 ---- a/testing/071_enum_in_anon_ns.cpp -+++ b/testing/071_enum_in_anon_ns.cpp -@@ -1,5 +1,5 @@ - // objective: test that enum values in anonymous namespaces produce no warning --// check: namespace_a_namespace_1_1_0d0.xml -+// check: namespace_a_namespace_1_1_0d130315250316227335362355006121037335073327177063.xml - - namespace ANamespace { namespace { - -diff --git a/testing/073/073__typed__enum_8cpp.xml b/testing/073/073__typed__enum_8cpp.xml -index 2eaeec9c4..cc7696486 100644 ---- a/testing/073/073__typed__enum_8cpp.xml -+++ b/testing/073/073__typed__enum_8cpp.xml -@@ -75,10 +75,10 @@ - - - -- -+ - - -- -+ - Unnamed1 - - -@@ -93,10 +93,10 @@ - - - -- -+ - - -- -+ - Unnamed2 - - diff --git a/doxygen-1.12.0-regression-anchors.patch b/doxygen-1.12.0-regression-anchors.patch deleted file mode 100644 index 272df09..0000000 --- a/doxygen-1.12.0-regression-anchors.patch +++ /dev/null @@ -1,30 +0,0 @@ -commit d408967139935bbaeae8d9eac7f0f34877d53d1c -Author: albert-github -Date: Fri Sep 13 16:02:25 2024 +0200 - - issue #11135 The anchors don't work - - Regression on 300f73d9ecd6b010a160e5f8cef14ecbabab950b: - ``` - commit 300f73d9ecd6b010a160e5f8cef14ecbabab950b - - Date: Thu Jul 4 20:41:56 2024 +0200 - - issue #10970 Improvement of end of paragraph detection - ``` - - attribute name is not `idname` but there are 2 attributes possible `id` and `name` - -diff --git a/src/commentscan.l b/src/commentscan.l -index 8520fcb58..767aa440d 100644 ---- a/src/commentscan.l -+++ b/src/commentscan.l -@@ -591,7 +591,7 @@ DETAILEDHTMLOPTEND {ENDCODE} - SUMMARY ("summary"|"SUMMARY") - REMARKS ("remarks"|"REMARKS") - AHTML [aA]{BN}* --ANCHTML ("idname"|"IDNAME")"="("\""{LABELID}"\""|"'"{LABELID}"'"|{LABELID}) -+ANCHTML ("id"|"name"|"ID"|"NAME")"="("\""{LABELID}"\""|"'"{LABELID}"'"|{LABELID}) - BN [ \t\n\r] - BL [ \t\r]*"\n" - B [ \t] diff --git a/doxygen.spec b/doxygen.spec index 6e5cc59..2553e57 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -1,19 +1,14 @@ Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 -Version: 1.12.0 -Release: 3%{?dist} +Version: 1.13.2 +Release: 1%{?dist} # No version is specified. License: GPL-1.0-or-later Url: https://github.com/doxygen Source0: https://www.doxygen.nl/files/%{name}-%{version}.src.tar.gz # upstream patches -# Markdown links to internal anchors broken -Patch0: doxygen-1.12.0-regression-anchors.patch - -# Non-reproducible file names in doxygen output -Patch1: doxygen-1.12.0-non-reproducible-file-names-in-doxygen-output.patch BuildRequires: %{_bindir}/python3 BuildRequires: perl-interpreter, perl-open @@ -220,6 +215,9 @@ cp doc/doxygen.1 %{buildroot}/%{_mandir}/man1/ %endif %changelog +* Thu Jan 16 2025 Than Ngo - 2:1.13.2-1 +- Resolves: RHEL-73868, update to 1.13.2 + * Fri Nov 29 2024 Than Ngo - 2:1.12.0-3 - Fix Non-reproducible file names in doxygen output - Fix broken markdown links to anchors diff --git a/sources b/sources index df2c443..9803292 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (doxygen-1.12.0.src.tar.gz) = e407e29c5e232e1f8dca291dd2d00b1dd400be709400225339408fad2cd758563b69f290cbd7c0efeb76b1335c4672fb1d6d580b9e6ed570708cf9b7d78951b1 +SHA512 (doxygen-1.13.2.src.tar.gz) = 7b6b3285706e10c0b27230503b83cc669aec83ebc3ef9cc1087d5e36118fd726a5368d567dd553ba01acf4d739cdbb41c5e66af4541fc8e51effbbdaa241c812