From c247f1e2e614691ada9511e49d938551ba6cf543 Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Mon, 28 Oct 2024 20:03:30 +0100 Subject: [PATCH 01/14] Fix rhbz#2295788, Non-reproducible file names in doxygen output --- ...ducible-file-names-in-doxygen-output.patch | 403 ++++++++++++++++++ doxygen.spec | 7 +- 2 files changed, 409 insertions(+), 1 deletion(-) create mode 100644 doxygen-1.12.0-non-reproducible-file-names-in-doxygen-output.patch 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 new file mode 100644 index 0000000..4882e7e --- /dev/null +++ b/doxygen-1.12.0-non-reproducible-file-names-in-doxygen-output.patch @@ -0,0 +1,403 @@ +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.spec b/doxygen.spec index 5e41254..b2e90dd 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -12,7 +12,7 @@ Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 Version: 1.12.0 -Release: 2%{?dist} +Release: 3%{?dist} # No version is specified. License: GPL-2.0-or-later Url: https://github.com/doxygen @@ -24,6 +24,8 @@ Source2: doxywizard-icons.tar.xz # upstream fixes # 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 @@ -298,6 +300,9 @@ rm -rf %{buildroot}/%{_docdir}/packages %endif %changelog +* Mon Oct 28 2024 Than Ngo - 2:1.12.0-3 +- Fix rhbz#2295788, Non-reproducible file names in doxygen output + * Mon Oct 28 2024 Than Ngo - 2:1.12.0-2 - Fix rhbz#x2322116, broken markdown links to anchors From d393de7f5c20e0385a885bcea03a00930db031b8 Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Thu, 2 Jan 2025 13:57:09 +0100 Subject: [PATCH 02/14] Fix rhbz#2334703, Update to 1.13.0 --- .gitignore | 1 + ...ducible-file-names-in-doxygen-output.patch | 403 ------------------ doxygen-1.12.0-regression-anchors.patch | 30 -- doxygen.spec | 12 +- sources | 2 +- 5 files changed, 7 insertions(+), 441 deletions(-) delete mode 100644 doxygen-1.12.0-non-reproducible-file-names-in-doxygen-output.patch delete mode 100644 doxygen-1.12.0-regression-anchors.patch diff --git a/.gitignore b/.gitignore index e3cca27..1fd9ae1 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.0.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 b2e90dd..43383c0 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -11,8 +11,8 @@ Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 -Version: 1.12.0 -Release: 3%{?dist} +Version: 1.13.0 +Release: 1%{?dist} # No version is specified. License: GPL-2.0-or-later Url: https://github.com/doxygen @@ -22,11 +22,6 @@ Source1: doxywizard.desktop # these icons are part of doxygen and converted from doxywizard.ico Source2: doxywizard-icons.tar.xz # upstream fixes -# 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 BuildRequires: texlive-bibtex @@ -300,6 +295,9 @@ rm -rf %{buildroot}/%{_docdir}/packages %endif %changelog +* Thu Jan 02 2025 Than Ngo - 2:1.13.0-1 +- Fix rhbz#2334703, Update to 1.13.0 + * Mon Oct 28 2024 Than Ngo - 2:1.12.0-3 - Fix rhbz#2295788, Non-reproducible file names in doxygen output diff --git a/sources b/sources index b656c32..6e2290d 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ SHA512 (doxywizard-icons.tar.xz) = 865a86d7535e64ad92e36ba1f901d51cd6b603e762e5c68761a45bc1f965a36e6a6c8d29468ecb2ec799f0add2347537723832aff6660c76af453f80a0a370ad -SHA512 (doxygen-1.12.0.src.tar.gz) = e407e29c5e232e1f8dca291dd2d00b1dd400be709400225339408fad2cd758563b69f290cbd7c0efeb76b1335c4672fb1d6d580b9e6ed570708cf9b7d78951b1 +SHA512 (doxygen-1.13.0.src.tar.gz) = f6cae74bd8df9c6c2ba3fa21fc33926e6d5eba65101776f84c1fa056d9231d69e232a30d7702b53a284543fc4765edadb10f4d4b4a46314fa08580963d9226fb From b91cd71427e0bc12d158462621076eea7ab9ca74 Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Fri, 3 Jan 2025 14:59:24 +0100 Subject: [PATCH 03/14] Fix rhbz#2335266, Update to 1.13.1 --- .gitignore | 1 + doxygen.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 1fd9ae1..f3fef9c 100644 --- a/.gitignore +++ b/.gitignore @@ -65,3 +65,4 @@ doxygen-1.7.1.src.tar.gz /doxygen-1.11.0.src.tar.gz /doxygen-1.12.0.src.tar.gz /doxygen-1.13.0.src.tar.gz +/doxygen-1.13.1.src.tar.gz diff --git a/doxygen.spec b/doxygen.spec index 43383c0..c53393e 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -11,7 +11,7 @@ Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 -Version: 1.13.0 +Version: 1.13.1 Release: 1%{?dist} # No version is specified. License: GPL-2.0-or-later @@ -295,6 +295,9 @@ rm -rf %{buildroot}/%{_docdir}/packages %endif %changelog +* Fri Jan 03 2025 Than Ngo - 2:1.13.1-1 +- Fix rhbz#2335266, Update to 1.13.1 + * Thu Jan 02 2025 Than Ngo - 2:1.13.0-1 - Fix rhbz#2334703, Update to 1.13.0 diff --git a/sources b/sources index 6e2290d..7ef92b6 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ SHA512 (doxywizard-icons.tar.xz) = 865a86d7535e64ad92e36ba1f901d51cd6b603e762e5c68761a45bc1f965a36e6a6c8d29468ecb2ec799f0add2347537723832aff6660c76af453f80a0a370ad -SHA512 (doxygen-1.13.0.src.tar.gz) = f6cae74bd8df9c6c2ba3fa21fc33926e6d5eba65101776f84c1fa056d9231d69e232a30d7702b53a284543fc4765edadb10f4d4b4a46314fa08580963d9226fb +SHA512 (doxygen-1.13.1.src.tar.gz) = 67b5d080d5f63bec4c6c2cb32ea5b9548d87dca8fb3b5ffdba3387ad092358be2d4d66e9d85da2864167f26882142149f845d32a6a9c44266967ccff9502ba3a From 612ed5a652e98973fe409dd18a32188b246fe68c Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Mon, 13 Jan 2025 09:24:54 +0100 Subject: [PATCH 04/14] - Fix rhbz#2336720, Update to 1.13.2 - Fix rhbz#2336536, FTBFS in ignition-transport --- .gitignore | 1 + doxygen.spec | 6 +++++- sources | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f3fef9c..e12cfb1 100644 --- a/.gitignore +++ b/.gitignore @@ -66,3 +66,4 @@ doxygen-1.7.1.src.tar.gz /doxygen-1.12.0.src.tar.gz /doxygen-1.13.0.src.tar.gz /doxygen-1.13.1.src.tar.gz +/doxygen-1.13.2.src.tar.gz diff --git a/doxygen.spec b/doxygen.spec index c53393e..ed423ad 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -11,7 +11,7 @@ Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 -Version: 1.13.1 +Version: 1.13.2 Release: 1%{?dist} # No version is specified. License: GPL-2.0-or-later @@ -295,6 +295,10 @@ rm -rf %{buildroot}/%{_docdir}/packages %endif %changelog +* Mon Jan 13 2025 Than Ngo - 2:1.13.2-1 +- Fix rhbz#2336720, Update to 1.13.2 +- Fix rhbz#2336536, FTBFS in ignition-transport + * Fri Jan 03 2025 Than Ngo - 2:1.13.1-1 - Fix rhbz#2335266, Update to 1.13.1 diff --git a/sources b/sources index 7ef92b6..495571b 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ SHA512 (doxywizard-icons.tar.xz) = 865a86d7535e64ad92e36ba1f901d51cd6b603e762e5c68761a45bc1f965a36e6a6c8d29468ecb2ec799f0add2347537723832aff6660c76af453f80a0a370ad -SHA512 (doxygen-1.13.1.src.tar.gz) = 67b5d080d5f63bec4c6c2cb32ea5b9548d87dca8fb3b5ffdba3387ad092358be2d4d66e9d85da2864167f26882142149f845d32a6a9c44266967ccff9502ba3a +SHA512 (doxygen-1.13.2.src.tar.gz) = 7b6b3285706e10c0b27230503b83cc669aec83ebc3ef9cc1087d5e36118fd726a5368d567dd553ba01acf4d739cdbb41c5e66af4541fc8e51effbbdaa241c812 From b6484646a63a504d77ae257fecb2914ec879e5ce Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 16 Jan 2025 16:10:58 +0000 Subject: [PATCH 05/14] Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild --- doxygen.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doxygen.spec b/doxygen.spec index ed423ad..c603e67 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -12,7 +12,7 @@ Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 Version: 1.13.2 -Release: 1%{?dist} +Release: 2%{?dist} # No version is specified. License: GPL-2.0-or-later Url: https://github.com/doxygen @@ -295,6 +295,9 @@ rm -rf %{buildroot}/%{_docdir}/packages %endif %changelog +* Thu Jan 16 2025 Fedora Release Engineering - 2:1.13.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + * Mon Jan 13 2025 Than Ngo - 2:1.13.2-1 - Fix rhbz#2336720, Update to 1.13.2 - Fix rhbz#2336536, FTBFS in ignition-transport From 2b7dbf5b1c4d2e35cc8ad103eca5c9a10546e5a0 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Thu, 6 Feb 2025 17:57:26 +0100 Subject: [PATCH 06/14] Introduce js-doxygen subpackage, unbundling Javascript during RPM builds --- README.rpm-packaging | 36 +++++++++++++++++++++++ doxygen-unbundler | 69 ++++++++++++++++++++++++++++++++++++++++++++ doxygen.spec | 37 ++++++++++++++++++++++-- 3 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 README.rpm-packaging create mode 100644 doxygen-unbundler diff --git a/README.rpm-packaging b/README.rpm-packaging new file mode 100644 index 0000000..9f09233 --- /dev/null +++ b/README.rpm-packaging @@ -0,0 +1,36 @@ +# Javascript asset handling for RPM packaging + +RPM packages should unbundle Javascript assets during the RPM build +process. Currently, this process is not fully automated. + +If Doxygen HTML documentation is installed, add + + %{?doxygen_js_requires} + +to the subpackage that contains the HTML documentation. + +If HTML documentation is installed during the %install phase, invoke + + %{doxygen_unbundle_buildroot} + +towards the end of the %install section. It will process Javascript +files under %{_docdir} (/usr/share/doc). If another directory needs +to be processed, use an explicit directory argument: + + %{doxygen_unbundle_buildroot /usr/share/example/doc} + +The path is relative to %{buildroot} or $RPM_BUILD_ROOT. + +If HTML documentation is not installed, but propagated into package +using %doc directives, it is necessary to invoke + + %{doxygen_unbundle} + +after running Doxygen (typically from the %build section). This +unbundles assets found under the current directory. A specific +directory can be processed by passing it as an argument: + + %{doxygen_unbundle example/doc} + +In this case, the path argument is relative to the current directory, +not the buildroot. diff --git a/doxygen-unbundler b/doxygen-unbundler new file mode 100644 index 0000000..aaf8bed --- /dev/null +++ b/doxygen-unbundler @@ -0,0 +1,69 @@ +#!/usr/bin/bash -e +# Replace Doxygen-generated Javascript files with symblic links. + +set -o pipefail + +jsdir="$1" +buildroot="$2" +subdir="$3" + +if test -z "$jsdir" ; then + echo "error: Javascript directory argument required" 1>&2 + exit 1 +fi + +js_files="$(echo "$jsdir"/doxygen/*.js)" + +if test -z "$buildroot" ; then + # Only absolute links are possible because the final installation + # destination is unknown. + if test -z "$subdir"; then + subdir="." + fi + find "$subdir" -type f -name '*.js' \ + | while read js_file; do + for js_file_ref in $js_files; do + if cmp -s "$js_file_ref" "$js_file"; then + ln -sf "$js_file_ref" "$js_file" + break + fi + done + done +else + # Create relative links. + cd "$buildroot" + abs_buildroot="$(readlink -f .)" + cd "./$subdir" + + # Compute the number of ../ needed to reach the root directory. + prefix="" + while true; do + p="$(readlink -f "${prefix:-.}")" + if test "$p" = "$abs_buildroot"; then + break + elif test "$p" = "/"; then + echo "error: Could not find buildroot directory" 1>&2 + exit 1 + elif test -z "$prefix"; then + prefix=".." + else + prefix="../$prefix" + fi + done + + # Create relative links. + find . -type f -name '*.js' -printf "%d %p\n" \ + | while read depth js_file; do + for js_file_ref in $js_files; do + if cmp -s "$js_file_ref" "$js_file"; then + target_prefix="$prefix" + i=1 + while test "$i" -lt "$depth"; do + target_prefix="../$target_prefix" + i=$(($i + 1)) + done + ln -sf "$target_prefix$js_file_ref" "$js_file" + fi + done + done +fi diff --git a/doxygen.spec b/doxygen.spec index c603e67..035e3d4 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -12,7 +12,7 @@ Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 Version: 1.13.2 -Release: 2%{?dist} +Release: 3%{?dist} # No version is specified. License: GPL-2.0-or-later Url: https://github.com/doxygen @@ -21,10 +21,15 @@ Source0: https://www.doxygen.nl/files/%{name}-%{version}.src.tar.gz Source1: doxywizard.desktop # these icons are part of doxygen and converted from doxywizard.ico Source2: doxywizard-icons.tar.xz +Source3: README.rpm-packaging +Source4: doxygen-unbundler # upstream fixes BuildRequires: %{_bindir}/python3 BuildRequires: perl-interpreter, perl-open BuildRequires: texlive-bibtex +BuildRequires: web-assets-devel +# Building an RPM package typically needs unbundling of Javascript assets. +Requires: (js-doxygen if redhat-rpm-config) %if ! 0%{?_module_build} BuildRequires: tex(dvips) @@ -114,6 +119,13 @@ documentation is extracted directly from the sources. Doxygen can also be configured to extract the code structure from undocumented source files. +%package -n js-doxygen +Summary: Javascript files used by Doxygen +Requires: web-assets-filesystem +BuildArch: noarch +%description -n js-doxygen +Javascript files for use by locally installed Doxygen documentation. + %if "x%{build_wizard}" == "xON" %package doxywizard Summary: A GUI for creating and editing configuration files @@ -209,6 +221,8 @@ iconv --from=ISO-8859-1 --to=UTF-8 LANGUAGE.HOWTO > LANGUAGE.HOWTO.new touch -r LANGUAGE.HOWTO LANGUAGE.HOWTO.new mv LANGUAGE.HOWTO.new LANGUAGE.HOWTO +cp %{SOURCE3} . + %build %if "x%{build_wizard}" == "xON" %cmake \ @@ -263,11 +277,23 @@ rm -f %{buildroot}/%{_mandir}/man1/doxyindexer.1* %{buildroot}/%{_mandir}/man1/d # remove duplicate rm -rf %{buildroot}/%{_docdir}/packages +# Install the asset files. +install -m644 -D --target-directory=%{buildroot}%{_jsdir}/doxygen \ + templates/html/*.js +# Generate the macros file. Expand version/release/%%_jsdir. +mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d +cat > %{buildroot}%{_rpmconfigdir}/macros.d/macros.doxygen <<'EOF' +%%doxygen_js_requires() Requires: js-doxygen >= %{version}-%{release} +%%doxygen_unbundle_buildroot() %%{_rpmconfigdir}/redhat/doxygen-unbundler "%{_jsdir}" "%%{buildroot}" %%[ %%# == 0 ? "%%{_docdir}" : "%%1"] +%%doxygen_unbundle() %{_rpmconfigdir}/redhat/doxygen-unbundler "%{_jsdir}" "" %%* +EOF +# Install the unbundler script. +install -m755 -D --target-directory=%{buildroot}%{_rpmconfigdir}/redhat %{SOURCE4} %check %ctest %files -%doc LANGUAGE.HOWTO README.md +%doc LANGUAGE.HOWTO README.md README.rpm-packaging %license LICENSE %if ! 0%{?_module_build} %if "x%{?xapian_core_support}" == "xON" @@ -281,6 +307,8 @@ rm -rf %{buildroot}/%{_docdir}/packages %{_mandir}/man1/doxyindexer.1* %{_mandir}/man1/doxysearch.1* %endif +%{_rpmconfigdir}/macros.d/macros.doxygen +%{_rpmconfigdir}/redhat/doxygen-unbundler %if "x%{build_wizard}" == "xON" %files doxywizard %{_bindir}/doxywizard @@ -288,6 +316,8 @@ rm -rf %{buildroot}/%{_docdir}/packages %{_datadir}/applications/doxywizard.desktop %{_datadir}/icons/hicolor/*/apps/doxywizard.png %endif +%files -n js-doxygen +%{_jsdir}/doxygen/* %if ! 0%{?_module_build} %files latex @@ -295,6 +325,9 @@ rm -rf %{buildroot}/%{_docdir}/packages %endif %changelog +* Thu Feb 6 2025 Florian Weimer - 2:1.13.2-3 +- Introduce js-doxygen subpackage and unbundle Javascript during RPM builds + * Thu Jan 16 2025 Fedora Release Engineering - 2:1.13.2-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild From 5693173212c57840980d1a71445af6df6d7adbaf Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Mon, 10 Feb 2025 09:41:48 +0100 Subject: [PATCH 07/14] - built with system sqlite3 and spdlog --- doxygen.spec | 54 +++++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/doxygen.spec b/doxygen.spec index 035e3d4..0aee136 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -7,12 +7,15 @@ %global clang_support OFF %global build_wizard OFF %endif +%global build_search %{xapian_core_support} +%global system_spdlog ON +%global system_sqlite3 ON Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 Version: 1.13.2 -Release: 3%{?dist} +Release: 4%{?dist} # No version is specified. License: GPL-2.0-or-later Url: https://github.com/doxygen @@ -23,7 +26,9 @@ Source1: doxywizard.desktop Source2: doxywizard-icons.tar.xz Source3: README.rpm-packaging Source4: doxygen-unbundler + # upstream fixes + BuildRequires: %{_bindir}/python3 BuildRequires: perl-interpreter, perl-open BuildRequires: texlive-bibtex @@ -109,6 +114,12 @@ BuildRequires: clang-devel %else BuildRequires: gcc-c++ gcc %endif +%if "%{system_spdlog}" == "ON" +BuildRequires: spdlog-devel +%endif +%if "%{system_sqlite3}" == "ON" +BuildRequires: sqlite-devel +%endif Requires: perl-interpreter Requires: graphviz @@ -224,29 +235,18 @@ mv LANGUAGE.HOWTO.new LANGUAGE.HOWTO cp %{SOURCE3} . %build -%if "x%{build_wizard}" == "xON" %cmake \ - -DPYTHON_EXECUTABLE=%{_bindir}/python3 \ - -Duse_libclang=%{clang_support} \ - -Dbuild_doc=OFF \ - -Dbuild_wizard=ON \ - -Dbuild_xmlparser=ON \ - -Dbuild_search=%{xapian_core_support} \ - -DMAN_INSTALL_DIR=%{_mandir}/man1 \ - -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \ - -DBUILD_SHARED_LIBS=OFF \ -%else -%cmake \ - -DPYTHON_EXECUTABLE=%{_bindir}/python3 \ - -Duse_libclang=%{clang_support} \ - -Dbuild_doc=OFF \ - -Dbuild_wizard=OFF \ - -Dbuild_xmlparser=ON \ - -Dbuild_search=OFF \ - -DMAN_INSTALL_DIR=%{_mandir}/man1 \ - -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \ - -DBUILD_SHARED_LIBS=OFF \ -%endif + -Dbuild_wizard=%{build_wizard} \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \ + -Dbuild_search=%{build_search} \ + -Duse_libclang=%{clang_support} \ + -DMAN_INSTALL_DIR=%{_mandir}/man1 \ + -Dbuild_doc=OFF \ + -DPYTHON_EXECUTABLE=%{_bindir}/python3 \ + -Dbuild_xmlparser=ON \ + -Duse_sys_sqlite3=%{system_sqlite3} \ + -Duse_sys_spdlog=%{system_spdlog} %cmake_build %{?_smp_mflags} @@ -289,6 +289,7 @@ cat > %{buildroot}%{_rpmconfigdir}/macros.d/macros.doxygen <<'EOF' EOF # Install the unbundler script. install -m755 -D --target-directory=%{buildroot}%{_rpmconfigdir}/redhat %{SOURCE4} + %check %ctest @@ -316,6 +317,7 @@ install -m755 -D --target-directory=%{buildroot}%{_rpmconfigdir}/redhat %{SOURCE %{_datadir}/applications/doxywizard.desktop %{_datadir}/icons/hicolor/*/apps/doxywizard.png %endif + %files -n js-doxygen %{_jsdir}/doxygen/* @@ -325,8 +327,12 @@ install -m755 -D --target-directory=%{buildroot}%{_rpmconfigdir}/redhat %{SOURCE %endif %changelog -* Thu Feb 6 2025 Florian Weimer - 2:1.13.2-3 +* Mon Feb 10 2025 Than Ngo - 2:1.13.2-4 +- built with system sqlite3 and spdlog + +* Sat Feb 08 2025 Than Ngo - 2:1.13.2-3 - Introduce js-doxygen subpackage and unbundle Javascript during RPM builds +- Use system spdlog and sqlite3 * Thu Jan 16 2025 Fedora Release Engineering - 2:1.13.2-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild From 44c8077568ff507ad48212f09e39c1fd7249ccc1 Mon Sep 17 00:00:00 2001 From: Yaakov Selkowitz Date: Tue, 11 Feb 2025 12:06:48 -0500 Subject: [PATCH 08/14] Use bundled spdlog on RHEL A standalone spdlog is not included in RHEL. --- doxygen.spec | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/doxygen.spec b/doxygen.spec index 0aee136..240e21f 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -2,20 +2,21 @@ %global xapian_core_support ON %global clang_support OFF %global build_wizard ON +%global system_spdlog ON %else %global xapian_core_support OFF %global clang_support OFF %global build_wizard OFF +%global system_spdlog OFF %endif %global build_search %{xapian_core_support} -%global system_spdlog ON %global system_sqlite3 ON Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 Version: 1.13.2 -Release: 4%{?dist} +Release: 5%{?dist} # No version is specified. License: GPL-2.0-or-later Url: https://github.com/doxygen @@ -116,9 +117,15 @@ BuildRequires: gcc-c++ gcc %endif %if "%{system_spdlog}" == "ON" BuildRequires: spdlog-devel +%else +# SPDLOG_VER* defined in deps/spdlog/include/spdlog/version.h +Provides: bundled(spdlog) = 1.14.1 %endif %if "%{system_sqlite3}" == "ON" BuildRequires: sqlite-devel +%else +# SQLITE_VERSION defined in deps/sqlite3/sqlite3.h +Provides: bundled(sqlite) = 3.42.0 %endif Requires: perl-interpreter Requires: graphviz @@ -327,6 +334,9 @@ install -m755 -D --target-directory=%{buildroot}%{_rpmconfigdir}/redhat %{SOURCE %endif %changelog +* Tue Feb 11 2025 Yaakov Selkowitz - 2:1.13.2-5 +- Use bundled spdlog on RHEL + * Mon Feb 10 2025 Than Ngo - 2:1.13.2-4 - built with system sqlite3 and spdlog From 0663928765804719b718e667c41e7cecd6eef75c Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Sun, 25 May 2025 13:12:16 +0200 Subject: [PATCH 09/14] - Fix rhbz#2368381, update to 1.14.0 - Enable clang support and system fmt --- .gitignore | 1 + doxygen.spec | 23 +++++++++++++++++------ sources | 2 +- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index e12cfb1..dda132d 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,4 @@ doxygen-1.7.1.src.tar.gz /doxygen-1.13.0.src.tar.gz /doxygen-1.13.1.src.tar.gz /doxygen-1.13.2.src.tar.gz +/doxygen-1.14.0.src.tar.gz diff --git a/doxygen.spec b/doxygen.spec index 240e21f..b7ac5c2 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -1,22 +1,22 @@ %if 0%{?fedora} %global xapian_core_support ON -%global clang_support OFF +%global clang_support ON %global build_wizard ON -%global system_spdlog ON %else %global xapian_core_support OFF %global clang_support OFF %global build_wizard OFF -%global system_spdlog OFF %endif %global build_search %{xapian_core_support} %global system_sqlite3 ON +%global system_spdlog ON +%global system_fmt ON Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 -Version: 1.13.2 -Release: 5%{?dist} +Version: 1.14.0 +Release: 1%{?dist} # No version is specified. License: GPL-2.0-or-later Url: https://github.com/doxygen @@ -127,6 +127,13 @@ BuildRequires: sqlite-devel # SQLITE_VERSION defined in deps/sqlite3/sqlite3.h Provides: bundled(sqlite) = 3.42.0 %endif +%if "%{system_fmt}" == "ON" +BuildRequires: fmt-devel +%else +# deps/fmt/README.md +Provides: bundled(fmt) = 10.2.1 +%endif + Requires: perl-interpreter Requires: graphviz @@ -253,7 +260,8 @@ cp %{SOURCE3} . -DPYTHON_EXECUTABLE=%{_bindir}/python3 \ -Dbuild_xmlparser=ON \ -Duse_sys_sqlite3=%{system_sqlite3} \ - -Duse_sys_spdlog=%{system_spdlog} + -Duse_sys_spdlog=%{system_spdlog} \ + -Duse_sys_fmt=%{system_fmt} %cmake_build %{?_smp_mflags} @@ -334,6 +342,9 @@ install -m755 -D --target-directory=%{buildroot}%{_rpmconfigdir}/redhat %{SOURCE %endif %changelog +* Sun May 25 2025 Than Ngo - 2:1.14.0-1 +- Fix rhbz#2368381, update to 1.14.0 + * Tue Feb 11 2025 Yaakov Selkowitz - 2:1.13.2-5 - Use bundled spdlog on RHEL diff --git a/sources b/sources index 495571b..2757144 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ SHA512 (doxywizard-icons.tar.xz) = 865a86d7535e64ad92e36ba1f901d51cd6b603e762e5c68761a45bc1f965a36e6a6c8d29468ecb2ec799f0add2347537723832aff6660c76af453f80a0a370ad -SHA512 (doxygen-1.13.2.src.tar.gz) = 7b6b3285706e10c0b27230503b83cc669aec83ebc3ef9cc1087d5e36118fd726a5368d567dd553ba01acf4d739cdbb41c5e66af4541fc8e51effbbdaa241c812 +SHA512 (doxygen-1.14.0.src.tar.gz) = b042f7f731cd17bea55f7393dd90433f49fa296a61054950c2e1457ff1d57e218706cbc4f5248f42c2242bf1acccd91e88cf545ca394a31a4d2d8b7f5954baa9 From c02d84c3348be641827a9d7b13290df4c1077b8f Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Sun, 25 May 2025 14:06:04 +0200 Subject: [PATCH 10/14] Enable clang support for el --- doxygen.spec | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doxygen.spec b/doxygen.spec index b7ac5c2..4457c84 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -1,13 +1,12 @@ %if 0%{?fedora} %global xapian_core_support ON -%global clang_support ON %global build_wizard ON %else %global xapian_core_support OFF -%global clang_support OFF %global build_wizard OFF %endif %global build_search %{xapian_core_support} +%global clang_support ON %global system_sqlite3 ON %global system_spdlog ON %global system_fmt ON From fea4e22773ca09b611afd587ccc678ae6450522d Mon Sep 17 00:00:00 2001 From: Yaakov Selkowitz Date: Wed, 28 May 2025 13:28:39 -0400 Subject: [PATCH 11/14] Use bundled spdlog on RHEL, redux The bundled spdlog is not compatible with the latest system version of fmt, so they need to be either both bundled or both system. --- doxygen.spec | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/doxygen.spec b/doxygen.spec index 4457c84..a59612c 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -1,21 +1,23 @@ %if 0%{?fedora} %global xapian_core_support ON %global build_wizard ON +%global system_spdlog ON +%global system_fmt ON %else %global xapian_core_support OFF %global build_wizard OFF +%global system_spdlog OFF +%global system_fmt OFF %endif %global build_search %{xapian_core_support} %global clang_support ON %global system_sqlite3 ON -%global system_spdlog ON -%global system_fmt ON Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 Version: 1.14.0 -Release: 1%{?dist} +Release: 2%{?dist} # No version is specified. License: GPL-2.0-or-later Url: https://github.com/doxygen @@ -341,6 +343,9 @@ install -m755 -D --target-directory=%{buildroot}%{_rpmconfigdir}/redhat %{SOURCE %endif %changelog +* Wed May 28 2025 Yaakov Selkowitz - 2:1.14.0-2 +- Use bundled spdlog on RHEL, redux + * Sun May 25 2025 Than Ngo - 2:1.14.0-1 - Fix rhbz#2368381, update to 1.14.0 From 9e9db0b11b42be0ba1d90075138751a44ed10b71 Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Wed, 25 Jun 2025 10:14:00 +0200 Subject: [PATCH 12/14] Upstream fix for input buffer overflow --- doxygen-input-buffer-overflow.patch | 88 +++++++++++++++++++++++++++++ doxygen.spec | 7 ++- 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 doxygen-input-buffer-overflow.patch diff --git a/doxygen-input-buffer-overflow.patch b/doxygen-input-buffer-overflow.patch new file mode 100644 index 0000000..207f71c --- /dev/null +++ b/doxygen-input-buffer-overflow.patch @@ -0,0 +1,88 @@ +commit f519f8f92d3925f2b58a93e555da3720c09af56c +Author: albert-github +Date: Sun Jun 22 12:35:03 2025 +0200 + + Input buffer overflow + + When having a, very, long string as an argument in e.g. PHP or C++ we get am error like: + ``` + input buffer overflow, can't enlarge buffer because scanner uses REJECT + ``` + which can be overcome by enlarging the lex buffers (CMake option `enlarge_lex_buffers`) but is also possible to limit the search pattern from a `+` pattern to a number of elements `{1,n}` pattern. + + For PHP the string argument should, analogous to C++ not be a copy rule but a skip rule (`scanner.l`) + +diff --git a/src/code.l b/src/code.l +index a2020eb14..4fb0c0fd5 100644 +--- a/src/code.l ++++ b/src/code.l +@@ -1279,10 +1279,10 @@ ENDQopt ("const"|"volatile"|"sealed"|"override")({BN}+("const"|"volatile"|"seale + yyextra->inForEachExpression = FALSE; + BEGIN( SkipStringS ); + } +-[^\"\\\r\n]* { ++[^\"\\\r\n]{1,100} { + yyextra->code->codify(yytext); + } +-[^\'\\\r\n]* { ++[^\'\\\r\n]{1,100} { + yyextra->code->codify(yytext); + } + {CPPC}|{CCS} { +diff --git a/src/pre.l b/src/pre.l +index dc155aa6f..9edf21727 100644 +--- a/src/pre.l ++++ b/src/pre.l +@@ -607,10 +607,10 @@ WSopt [ \t\r]* + outputChar(yyscanner,*yytext); + BEGIN( CopyStringFtn ); + } +-[^\"\\\r\n]+ { ++[^\"\\\r\n]{1,1000} { + outputArray(yyscanner,yytext,yyleng); + } +-[^\"\r\n]+ { ++[^\"\r\n]{1,1000} { + outputArray(yyscanner,yytext,yyleng); + } + \"\" { +@@ -623,7 +623,7 @@ WSopt [ \t\r]* + outputChar(yyscanner,*yytext); + BEGIN( CopyLine ); + } +-[^\"\\\r\n]+ { ++[^\"\\\r\n]{1,1000} { + outputArray(yyscanner,yytext,yyleng); + } + \\. { +@@ -633,7 +633,7 @@ WSopt [ \t\r]* + outputChar(yyscanner,*yytext); + BEGIN( CopyLine ); + } +-[^\'\\\r\n]+ { ++[^\'\\\r\n]{1,1000} { + outputArray(yyscanner,yytext,yyleng); + } + \\. { +@@ -652,7 +652,7 @@ WSopt [ \t\r]* + BEGIN( CopyLine ); + } + } +-[^)]+ { ++[^)]{1,1000} { + outputArray(yyscanner,yytext,yyleng); + } + . { +diff --git a/src/scanner.l b/src/scanner.l +index a6a70d25c..3c8b887d4 100644 +--- a/src/scanner.l ++++ b/src/scanner.l +@@ -5141,7 +5141,7 @@ NONLopt [^\n]* + if (yyextra->insidePHP) + { + yyextra->lastCopyArgStringContext=YY_START; +- BEGIN(CopyArgPHPString); ++ BEGIN(SkipPHPString); + } + } + "<="|">="|"<=>" { diff --git a/doxygen.spec b/doxygen.spec index a59612c..84f9e47 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -17,7 +17,7 @@ Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 Version: 1.14.0 -Release: 2%{?dist} +Release: 3%{?dist} # No version is specified. License: GPL-2.0-or-later Url: https://github.com/doxygen @@ -30,6 +30,8 @@ Source3: README.rpm-packaging Source4: doxygen-unbundler # upstream fixes +# fix input buffer overflow +Patch1: doxygen-input-buffer-overflow.patch BuildRequires: %{_bindir}/python3 BuildRequires: perl-interpreter, perl-open @@ -343,6 +345,9 @@ install -m755 -D --target-directory=%{buildroot}%{_rpmconfigdir}/redhat %{SOURCE %endif %changelog +* Wed Jun 25 2025 Than Ngo - 2:1.14.0-3 +- Upstream fix for input buffer overflow + * Wed May 28 2025 Yaakov Selkowitz - 2:1.14.0-2 - Use bundled spdlog on RHEL, redux From baabc477de04534240fd50eb20a6261458432d7f Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 23 Jul 2025 19:29:57 +0000 Subject: [PATCH 13/14] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild --- doxygen.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doxygen.spec b/doxygen.spec index 84f9e47..dc59bc0 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -17,7 +17,7 @@ Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 Version: 1.14.0 -Release: 3%{?dist} +Release: 4%{?dist} # No version is specified. License: GPL-2.0-or-later Url: https://github.com/doxygen @@ -345,6 +345,9 @@ install -m755 -D --target-directory=%{buildroot}%{_rpmconfigdir}/redhat %{SOURCE %endif %changelog +* Wed Jul 23 2025 Fedora Release Engineering - 2:1.14.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + * Wed Jun 25 2025 Than Ngo - 2:1.14.0-3 - Upstream fix for input buffer overflow From 3a587564e6443d0825b28124de291e4c196a35ce Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Thu, 13 Nov 2025 17:10:42 +0100 Subject: [PATCH 14/14] Update to 1.15.0 --- .gitignore | 1 + doxygen-input-buffer-overflow.patch | 88 ----------------------------- doxygen.spec | 24 ++++---- sources | 2 +- 4 files changed, 13 insertions(+), 102 deletions(-) delete mode 100644 doxygen-input-buffer-overflow.patch diff --git a/.gitignore b/.gitignore index dda132d..a007b45 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,4 @@ doxygen-1.7.1.src.tar.gz /doxygen-1.13.1.src.tar.gz /doxygen-1.13.2.src.tar.gz /doxygen-1.14.0.src.tar.gz +/doxygen-1.15.0.src.tar.gz diff --git a/doxygen-input-buffer-overflow.patch b/doxygen-input-buffer-overflow.patch deleted file mode 100644 index 207f71c..0000000 --- a/doxygen-input-buffer-overflow.patch +++ /dev/null @@ -1,88 +0,0 @@ -commit f519f8f92d3925f2b58a93e555da3720c09af56c -Author: albert-github -Date: Sun Jun 22 12:35:03 2025 +0200 - - Input buffer overflow - - When having a, very, long string as an argument in e.g. PHP or C++ we get am error like: - ``` - input buffer overflow, can't enlarge buffer because scanner uses REJECT - ``` - which can be overcome by enlarging the lex buffers (CMake option `enlarge_lex_buffers`) but is also possible to limit the search pattern from a `+` pattern to a number of elements `{1,n}` pattern. - - For PHP the string argument should, analogous to C++ not be a copy rule but a skip rule (`scanner.l`) - -diff --git a/src/code.l b/src/code.l -index a2020eb14..4fb0c0fd5 100644 ---- a/src/code.l -+++ b/src/code.l -@@ -1279,10 +1279,10 @@ ENDQopt ("const"|"volatile"|"sealed"|"override")({BN}+("const"|"volatile"|"seale - yyextra->inForEachExpression = FALSE; - BEGIN( SkipStringS ); - } --[^\"\\\r\n]* { -+[^\"\\\r\n]{1,100} { - yyextra->code->codify(yytext); - } --[^\'\\\r\n]* { -+[^\'\\\r\n]{1,100} { - yyextra->code->codify(yytext); - } - {CPPC}|{CCS} { -diff --git a/src/pre.l b/src/pre.l -index dc155aa6f..9edf21727 100644 ---- a/src/pre.l -+++ b/src/pre.l -@@ -607,10 +607,10 @@ WSopt [ \t\r]* - outputChar(yyscanner,*yytext); - BEGIN( CopyStringFtn ); - } --[^\"\\\r\n]+ { -+[^\"\\\r\n]{1,1000} { - outputArray(yyscanner,yytext,yyleng); - } --[^\"\r\n]+ { -+[^\"\r\n]{1,1000} { - outputArray(yyscanner,yytext,yyleng); - } - \"\" { -@@ -623,7 +623,7 @@ WSopt [ \t\r]* - outputChar(yyscanner,*yytext); - BEGIN( CopyLine ); - } --[^\"\\\r\n]+ { -+[^\"\\\r\n]{1,1000} { - outputArray(yyscanner,yytext,yyleng); - } - \\. { -@@ -633,7 +633,7 @@ WSopt [ \t\r]* - outputChar(yyscanner,*yytext); - BEGIN( CopyLine ); - } --[^\'\\\r\n]+ { -+[^\'\\\r\n]{1,1000} { - outputArray(yyscanner,yytext,yyleng); - } - \\. { -@@ -652,7 +652,7 @@ WSopt [ \t\r]* - BEGIN( CopyLine ); - } - } --[^)]+ { -+[^)]{1,1000} { - outputArray(yyscanner,yytext,yyleng); - } - . { -diff --git a/src/scanner.l b/src/scanner.l -index a6a70d25c..3c8b887d4 100644 ---- a/src/scanner.l -+++ b/src/scanner.l -@@ -5141,7 +5141,7 @@ NONLopt [^\n]* - if (yyextra->insidePHP) - { - yyextra->lastCopyArgStringContext=YY_START; -- BEGIN(CopyArgPHPString); -+ BEGIN(SkipPHPString); - } - } - "<="|">="|"<=>" { diff --git a/doxygen.spec b/doxygen.spec index dc59bc0..7818615 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -16,8 +16,8 @@ Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 -Version: 1.14.0 -Release: 4%{?dist} +Version: 1.15.0 +Release: 1%{?dist} # No version is specified. License: GPL-2.0-or-later Url: https://github.com/doxygen @@ -30,8 +30,6 @@ Source3: README.rpm-packaging Source4: doxygen-unbundler # upstream fixes -# fix input buffer overflow -Patch1: doxygen-input-buffer-overflow.patch BuildRequires: %{_bindir}/python3 BuildRequires: perl-interpreter, perl-open @@ -158,7 +156,8 @@ Javascript files for use by locally installed Doxygen documentation. %package doxywizard Summary: A GUI for creating and editing configuration files Requires: %{name} = %{epoch}:%{version}-%{release} -BuildRequires: qt5-qtbase-devel +BuildRequires: qt6-qtbase-devel +BuildRequires: qt6-qtsvg-devel %description doxywizard Doxywizard is a GUI for creating and editing configuration files that @@ -244,11 +243,6 @@ Requires: texlive-epstopdf %prep %autosetup -p1 -a2 -# convert into utf-8 -iconv --from=ISO-8859-1 --to=UTF-8 LANGUAGE.HOWTO > LANGUAGE.HOWTO.new -touch -r LANGUAGE.HOWTO LANGUAGE.HOWTO.new -mv LANGUAGE.HOWTO.new LANGUAGE.HOWTO - cp %{SOURCE3} . %build @@ -296,8 +290,8 @@ rm -f %{buildroot}/%{_mandir}/man1/doxyindexer.1* %{buildroot}/%{_mandir}/man1/d rm -rf %{buildroot}/%{_docdir}/packages # Install the asset files. -install -m644 -D --target-directory=%{buildroot}%{_jsdir}/doxygen \ - templates/html/*.js +install -m644 -D --target-directory=%{buildroot}%{_jsdir}/doxygen templates/html/*.js + # Generate the macros file. Expand version/release/%%_jsdir. mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d cat > %{buildroot}%{_rpmconfigdir}/macros.d/macros.doxygen <<'EOF' @@ -305,7 +299,8 @@ cat > %{buildroot}%{_rpmconfigdir}/macros.d/macros.doxygen <<'EOF' %%doxygen_unbundle_buildroot() %%{_rpmconfigdir}/redhat/doxygen-unbundler "%{_jsdir}" "%%{buildroot}" %%[ %%# == 0 ? "%%{_docdir}" : "%%1"] %%doxygen_unbundle() %{_rpmconfigdir}/redhat/doxygen-unbundler "%{_jsdir}" "" %%* EOF -# Install the unbundler script. + + # Install the unbundler script. install -m755 -D --target-directory=%{buildroot}%{_rpmconfigdir}/redhat %{SOURCE4} %check @@ -345,6 +340,9 @@ install -m755 -D --target-directory=%{buildroot}%{_rpmconfigdir}/redhat %{SOURCE %endif %changelog +* Thu Nov 13 2025 Than Ngo - 2:1.15.0-1 +- Update to 1.15.0 + * Wed Jul 23 2025 Fedora Release Engineering - 2:1.14.0-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild diff --git a/sources b/sources index 2757144..7883325 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ SHA512 (doxywizard-icons.tar.xz) = 865a86d7535e64ad92e36ba1f901d51cd6b603e762e5c68761a45bc1f965a36e6a6c8d29468ecb2ec799f0add2347537723832aff6660c76af453f80a0a370ad -SHA512 (doxygen-1.14.0.src.tar.gz) = b042f7f731cd17bea55f7393dd90433f49fa296a61054950c2e1457ff1d57e218706cbc4f5248f42c2242bf1acccd91e88cf545ca394a31a4d2d8b7f5954baa9 +SHA512 (doxygen-1.15.0.src.tar.gz) = e53cc8da6cf1fe3ca3b3637647ed6afa28365351eac81d010f6691d939df5e449b3d898a6f695dd850d12659dfd7018fc864071b30fbca5dd196dc094ec4371e