Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package doxygen for openSUSE:Factory checked in at 2023-09-05 11:54:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/doxygen (Old) and /work/SRC/openSUSE:Factory/.doxygen.new.1766 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "doxygen" Tue Sep 5 11:54:48 2023 rev:95 rq: version:1.9.6 Changes: -------- --- /work/SRC/openSUSE:Factory/doxygen/doxygen.changes 2023-09-04 22:52:18.449063941 +0200 +++ /work/SRC/openSUSE:Factory/.doxygen.new.1766/doxygen.changes 2023-09-05 11:54:49.809324088 +0200 @@ -2,34 +1,0 @@ -Thu Aug 24 10:45:46 UTC 2023 - [email protected] - -- doxygen-test multibuild target to break build cycle with latex -- modified sources - % _multibuild - -------------------------------------------------------------------- -Tue Jul 18 11:09:41 UTC 2023 - [email protected] - -- rebase reproducible.patch to 1.9.7 - -------------------------------------------------------------------- -Mon Jul 17 17:14:00 UTC 2023 - Bernhard Wiedemann <[email protected]> - -- Add reproducible.patch to make doxytags output reproducible (boo#1201579) - -------------------------------------------------------------------- -Fri Jun 23 12:00:15 UTC 2023 - [email protected] - -- version update to 1.9.7 - * https://www.doxygen.nl/manual/changelog.html#log_1_9_7 -- modified patches - % doxygen-no-libclang-cpp.patch (refreshed) - % doxygen-no-lowercase-man-names.patch (refreshed) -- deleted patches - - Fix-boundingbox-parsing_part1.patch (upstreamed) - - Fix-boundingbox-parsing_part2.patch (upstreamed) - - Fix-boundingbox-parsing_part3.patch (upstreamed) - - Fix-boundingbox-parsing_part4.patch (upstreamed) -- convert two specfiles into one -- deleted patches - - doxygen-no-lowercase-man-names.patch (not needed) - -------------------------------------------------------------------- Old: ---- doxygen-1.9.7.src.tar.gz reproducible.patch New: ---- Fix-boundingbox-parsing_part1.patch Fix-boundingbox-parsing_part2.patch Fix-boundingbox-parsing_part3.patch Fix-boundingbox-parsing_part4.patch doxygen-1.9.6.src.tar.gz doxygen-no-lowercase-man-names.patch doxywizard.spec ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ doxygen.spec ++++++ --- /var/tmp/diff_new_pack.aj5ScU/_old 2023-09-05 11:54:51.753393212 +0200 +++ /var/tmp/diff_new_pack.aj5ScU/_new 2023-09-05 11:54:51.757393354 +0200 @@ -1,5 +1,5 @@ # -# spec file +# spec file for package doxygen # # Copyright (c) 2023 SUSE LLC # @@ -21,13 +21,8 @@ %bcond_with libclang %endif -%global flavor @BUILD_FLAVOR@%{nil} -%if "%{flavor}" == "" -%global flavor doxygen -%endif - -Name: %{flavor} -Version: 1.9.7 +Name: doxygen +Version: 1.9.6 Release: 0 Summary: Automated C, C++, and Java Documentation Generator # qtools are used for building and they are GPL-3.0 licensed @@ -35,12 +30,15 @@ Group: Development/Tools/Doc Generators URL: https://www.doxygen.nl/ Source0: https://www.doxygen.nl/files/doxygen-%{version}.src.tar.gz -%if "%{flavor}" == "doxywizard" -Source1: doxywizard.desktop -%endif +# suse specific +Patch1: %{name}-no-lowercase-man-names.patch # The unified libclang-cpp library doesn't exist on older Leap / SLE Patch10: doxygen-no-libclang-cpp.patch -Patch11: reproducible.patch +# Fix PDF boudingbox parsing when dot uses cairo >= 1.17.6 -- https://github.com/doxygen/doxygen/issues/9319 +Patch20: https://github.com/doxygen/doxygen/commit/966d69c603b5.patch#/Fix-boundingbox-parsing_part1.patch +Patch21: https://github.com/doxygen/doxygen/commit/7b2a6027775b.patch#/Fix-boundingbox-parsing_part2.patch +Patch22: https://github.com/doxygen/doxygen/commit/f3514d578633.patch#/Fix-boundingbox-parsing_part3.patch +Patch23: https://github.com/doxygen/doxygen/commit/8129939c312e.patch#/Fix-boundingbox-parsing_part4.patch BuildRequires: bison BuildRequires: cmake >= 2.8.12 BuildRequires: flex @@ -57,25 +55,7 @@ %if %{with libclang} BuildRequires: llvm-clang-devel %endif -%if "%{flavor}" == "doxywizard" -BuildRequires: libjpeg-devel -BuildRequires: pkgconfig -BuildRequires: python3-base -BuildRequires: python3-xml -BuildRequires: update-desktop-files -BuildRequires: pkgconfig(Qt5Core) -BuildRequires: pkgconfig(Qt5Gui) -BuildRequires: pkgconfig(Qt5Widgets) -BuildRequires: pkgconfig(Qt5Xml) -Requires: doxygen = %{version} -%endif -%if "%{flavor}" == "doxygen-test" -BuildRequires: libxml2-tools -BuildRequires: texlive-bibtex -BuildArch: noarch -%endif -%if "%{flavor}" == "doxygen" %description Doxygen is a documentation system for C, C++, Java, and IDL. It can generate an online class browser (in HTML) and an offline reference @@ -83,40 +63,27 @@ documentation is extracted directly from the sources. Doxygen is developed on a Linux platform, but it runs on most other UNIX flavors as well. -%endif - -%if "%{flavor}" == "doxywizard" -%description -Doxywizard is a graphical front-end to read/edit/write doxygen -configuration files. -%endif - -%if "%{flavor}" == "doxygen-test" -%description -Unit tests for doxygen. -%endif %prep -%setup -q -n doxygen-%{version} +%setup -q # Leap 15 and SLE don't accept '%%autopatch -M' +%patch1 -p1 %if %{with libclang} %if 0%{?sle_version} == 150100 || (0%{?sle_version} == 150200 && !0%{?is_opensuse}) %patch10 -p1 %endif %endif -%patch11 -p1 +%patch20 -p1 +%patch21 -p1 +%patch22 -p1 +%patch23 -p1 %build %cmake \ -%if "%{flavor}" == "doxygen" - -Dbuild_wizard=OFF \ -%endif -%if "%{flavor}" == "doxywizard" - -Dbuild_wizard=ON \ -%endif -Dbuild_doc=OFF \ -Dbuild_xmlparser=ON \ -Dbuild_search=OFF \ + -Dbuild_wizard=OFF \ %if %{with libclang} -Duse_libclang=ON \ %endif @@ -132,40 +99,13 @@ %cmake_build %install -%if "%{flavor}" == "doxygen-test" -exit 0 -%endif %cmake_install mkdir -p %{buildroot}%{_mandir}/man1/ -%if "%{flavor}" == "doxygen" install -m 644 doc/doxygen.1 %{buildroot}%{_mandir}/man1/ -%endif -%if "%{flavor}" == "doxywizard" -rm %{buildroot}%{_bindir}/doxygen -install -m 644 doc/doxywizard.1 %{buildroot}%{_mandir}/man1/ -%suse_update_desktop_file -i doxywizard Development Documentation -%endif - -%check -%if "%{flavor}" == "doxygen-test" -# https://github.com/doxygen/doxygen/issues/10053 -rm -r testing/061* -export LANG=C.UTF-8 -# testing doxygen package here to avoid build -# cycle between latex and doxygen -%ctest -%endif %files -%if "%{flavor}" == "doxygen" %license LICENSE %attr(644,root,root) %{_mandir}/man1/doxygen.1%{?ext_man} %attr(755,root,root) %{_bindir}/* -%endif -%if "%{flavor}" == "doxywizard" -%attr(755,root,root) %{_bindir}/doxywizard -%{_datadir}/applications/doxywizard.desktop -%{_mandir}/man1/doxywizard.1%{?ext_man} -%endif %changelog ++++++ doxywizard.spec ++++++ # # spec file for package doxywizard # # Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via https://bugs.opensuse.org/ # Name: doxywizard Version: 1.9.6 Release: 0 Summary: Graphical User Interface for Doxygen # qtools are used for building and they are GPL-3.0 licensed License: GPL-2.0-or-later AND GPL-3.0-only Group: Development/Tools/Doc Generators URL: https://www.doxygen.nl/ Source: https://www.doxygen.nl/files/doxygen-%{version}.src.tar.gz Source1: doxywizard.desktop BuildRequires: bison BuildRequires: cmake >= 2.8.12 BuildRequires: flex %if 0%{?suse_version} <= 1500 BuildRequires: gcc9-c++ %else BuildRequires: gcc-c++ %endif BuildRequires: libjpeg-devel BuildRequires: pkgconfig BuildRequires: python3-base BuildRequires: python3-xml BuildRequires: update-desktop-files BuildRequires: pkgconfig(Qt5Core) BuildRequires: pkgconfig(Qt5Gui) BuildRequires: pkgconfig(Qt5Widgets) BuildRequires: pkgconfig(Qt5Xml) Requires: doxygen = %{version} %if 0%{?suse_version} > 1230 && 0%{?suse_version} != 1315 # for make tests BuildRequires: libxml2-tools BuildRequires: texlive-bibtex %endif %description Doxywizard is a graphical front-end to read/edit/write doxygen configuration files. %prep %autosetup -p1 -n doxygen-%{version} %build %cmake \ -Dbuild_wizard=ON \ %if 0%{?suse_version} <= 1500 -DCMAKE_C_COMPILER=gcc-9 \ -DCMAKE_CXX_COMPILER=g++-9 \ %endif -DCMAKE_EXE_LINKER_FLAGS="-Wl,--as-needed -Wl,-z,relro,-z,now" \ -DCMAKE_MODULE_LINKER_FLAGS="-Wl,--as-needed -Wl,-z,relro,-z,now" \ -DCMAKE_SHARED_LINKER_FLAGS="-Wl,--as-needed -Wl,-z,relro,-z,now" \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_STATIC_LIBS=ON %cmake_build %if 0%{?suse_version} > 1230 && 0%{?suse_version} != 1315 %check export LANG=C.UTF-8 # testing doxygen package here to avoid build # cycle between latex and doxygen %ctest %endif %install %cmake_install rm %{buildroot}%{_bindir}/doxygen mkdir -p %{buildroot}%{_mandir}/man1/ install -m 644 doc/doxywizard.1 %{buildroot}%{_mandir}/man1/ %suse_update_desktop_file -i doxywizard Development Documentation %files %attr(755,root,root) %{_bindir}/doxywizard %{_datadir}/applications/doxywizard.desktop %{_mandir}/man1/doxywizard.1%{?ext_man} %changelog ++++++ Fix-boundingbox-parsing_part1.patch ++++++ ++++ 1815 lines (skipped) ++++++ Fix-boundingbox-parsing_part2.patch ++++++ >From 7b2a6027775b0158304635a98de0f9b5672f163a Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch <[email protected]> Date: Wed, 4 Jan 2023 10:55:36 +0100 Subject: [PATCH] issue #9319: Doc build fails with cairo 1.17.6 --- TinyDeflate/gunzip.hh | 26 ++++++----- src/CMakeLists.txt | 1 + src/dotrunner.cpp | 104 ++++++++++++++++++++++++++++++++++++++++++ src/doxygen.cpp | 2 - 4 files changed, 120 insertions(+), 13 deletions(-) diff --git a/TinyDeflate/gunzip.hh b/TinyDeflate/gunzip.hh index c0039d5f832..c237298fdb0 100644 --- a/TinyDeflate/gunzip.hh +++ b/TinyDeflate/gunzip.hh @@ -944,23 +944,27 @@ namespace gunzip_ns // The following routines are macros rather than e.g. lambda functions, // in order to make them inlined in the function structure, and breakable/resumable. + #define CONCAT(a, b) a##b // Bit-by-bit input routine - #define DummyGetBits(numbits) do { \ - auto p = state.template GetBits<bool(Abortable&Flag_InputAbortable)>(std::forward<InputFunctor>(input), numbits); \ - if((Abortable & Flag_InputAbortable) && !~p) return -2; \ + #define DummyGetBits_(line,numbits) do { \ + auto CONCAT(pd,line) = state.template GetBits<bool(Abortable&Flag_InputAbortable)>(std::forward<InputFunctor>(input), numbits); \ + if((Abortable & Flag_InputAbortable) && !~CONCAT(pd,line)) return -2; \ } while(0) + #define DummyGetBits(numbits) DummyGetBits_(__LINE__, numbits) - #define GetBits(numbits, target) \ - auto p = state.template GetBits<bool(Abortable&Flag_InputAbortable)>(std::forward<InputFunctor>(input), numbits); \ - if((Abortable & Flag_InputAbortable) && !~p) return -2; \ - target = p + #define GetBits_(line,numbits, target) \ + auto CONCAT(pb,line) = state.template GetBits<bool(Abortable&Flag_InputAbortable)>(std::forward<InputFunctor>(input), numbits); \ + if((Abortable & Flag_InputAbortable) && !~CONCAT(pb,line)) return -2; \ + target = CONCAT(pb,line) + #define GetBits(numbits, target) GetBits_(__LINE__, numbits, target) // Huffman tree read routine. - #define HuffRead(tree, target) \ - auto p = state.template HuffRead<bool(Abortable&Flag_InputAbortable)>(std::forward<InputFunctor>(input), tree); \ - if((Abortable & Flag_InputAbortable) && !~p) return -2; \ - target = p + #define HuffRead_(line, tree, target) \ + auto CONCAT(ph,line) = state.template HuffRead<bool(Abortable&Flag_InputAbortable)>(std::forward<InputFunctor>(input), tree); \ + if((Abortable & Flag_InputAbortable) && !~CONCAT(ph,line)) return -2; \ + target = CONCAT(ph,line) + #define HuffRead(tree, target) HuffRead_(__LINE__, tree, target) #define Fail_If(condition) do { \ /*assert(!(condition));*/ \ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e9df895ce3a..0e33638c42d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,7 @@ # vim:ts=4:sw=4:expandtab:autoindent: include_directories( + ${PROJECT_SOURCE_DIR}/TinyDeflate ${PROJECT_SOURCE_DIR}/filesystem ${PROJECT_SOURCE_DIR}/libmd5 ${PROJECT_SOURCE_DIR}/liblodepng diff --git a/src/dotrunner.cpp b/src/dotrunner.cpp index d3b2615f4ed..5be9f20de9c 100644 --- a/src/dotrunner.cpp +++ b/src/dotrunner.cpp @@ -16,6 +16,8 @@ #include <cassert> #include <cmath> +#include <gunzip.hh> + #include "dotrunner.h" #include "util.h" #include "portable.h" @@ -31,6 +33,9 @@ #define MAX_LATEX_GRAPH_INCH 150 #define MAX_LATEX_GRAPH_SIZE (MAX_LATEX_GRAPH_INCH * 72) +//#define DBG(x) printf x +#define DBG(x) do {} while(0) + //----------------------------------------------------------------------------------------- // since dot silently reproduces the input file when it does not @@ -108,6 +113,7 @@ static bool resetPDFSize(const int width,const int height, const QCString &base) bool DotRunner::readBoundingBox(const QCString &fileName,int *width,int *height,bool isEps) { +#if 0 const char *bb = isEps ? "%%PageBoundingBox:" : "/MediaBox ["; size_t bblen = strlen(bb); FILE *f = Portable::fopen(fileName,"rb"); @@ -139,6 +145,104 @@ bool DotRunner::readBoundingBox(const QCString &fileName,int *width,int *height, err("Failed to extract bounding box from generated diagram file %s\n",qPrint(fileName)); fclose(f); return FALSE; +#endif + std::ifstream f = Portable::openInputStream(fileName); + if (!f.is_open()) + { + err("Failed to open file %s for extracting bounding box\n",qPrint(fileName)); + return false; + } + + // read file contents into string 'contents' + std::stringstream buffer; + buffer << f.rdbuf(); + std::string contents = buffer.str(); + + // start of bounding box marker we are looking for + const std::string boundingBox = isEps ? "%%PageBoundingBox:" : "/MediaBox ["; + + // helper routine to extract the bounding boxes width and height + auto extractBoundingBox = [&fileName,&boundingBox,&width,&height](const char *s) -> bool + { + int x,y; + double w,h; + if (sscanf(s+boundingBox.length(),"%d %d %lf %lf",&x,&y,&w,&h)==4) + { + *width = static_cast<int>(std::ceil(w)); + *height = static_cast<int>(std::ceil(h)); + return true; + } + err("Failed to extract bounding box from generated diagram file %s\n",qPrint(fileName)); + return false; + }; + + // compressed segment start and end markers + const std::string streamStart = "stream\n"; + const std::string streamEnd = "\nendstream"; + + const size_t l = contents.length(); + size_t i=0; + while (i<l) + { + if (!isEps && contents[i]=='s' && strncmp(&contents[i],streamStart.c_str(),streamStart.length())==0) + { // compressed stream start + int col=17; + i+=streamStart.length(); + const size_t start=i; + DBG(("---- start stream at offset %08x\n",(int)i)); + while (i<l) + { + if (contents[i]=='\n' && strncmp(&contents[i],streamEnd.c_str(),streamEnd.length())==0) + { // compressed block found in range [start..i] + DBG(("\n---- end stream at offset %08x\n",(int)i)); + // decompress it into decompressBuf + std::vector<char> decompressBuf; + const char *source = &contents[start]; + const size_t sourceLen = i-start; + size_t sourcePos = 0; + decompressBuf.reserve(sourceLen*2); + auto getter = [source,&sourcePos,sourceLen]() -> int { + return sourcePos<sourceLen ? static_cast<unsigned char>(source[sourcePos++]) : EOF; + }; + auto putter = [&decompressBuf](const char c) -> int { + decompressBuf.push_back(c); return c; + }; + Deflate(getter,putter); + // convert decompression buffer to string + std::string s(decompressBuf.begin(), decompressBuf.end()); + DBG(("decompressed_data=[[[\n%s\n]]]\n",s.c_str())); + // search for bounding box marker + const size_t idx = s.find(boundingBox); + if (idx!=std::string::npos) // found bounding box in uncompressed data + { + return extractBoundingBox(s.c_str()+idx); + } + // continue searching after end stream marker + i+=streamEnd.length(); + break; + } + else // compressed stream character + { + if (col>16) { col=0; DBG(("\n%08x: ",static_cast<int>(i))); } + DBG(("%02x ",static_cast<unsigned char>(contents[i]))); + col++; + i++; + } + } + } + else if (((isEps && contents[i]=='%') || (!isEps && contents[i]=='/')) && + strncmp(&contents[i],boundingBox.c_str(),boundingBox.length())==0) + { // uncompressed bounding box + return extractBoundingBox(&contents[i]); + } + else // uncompressed stream character + { + i++; + } + } + err("Failed to find bounding box in generated diagram file %s\n",qPrint(fileName)); + // nothing found + return false; } //--------------------------------------------------------------------------------- diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 78b72ebfecc..55068e74dcb 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -11930,8 +11930,6 @@ void parseInput() { Portable::setenv("DOTFONTPATH",qPrint(curFontPath)); } - // issue 9319 - Portable::setenv("CAIRO_DEBUG_PDF","1"); } ++++++ Fix-boundingbox-parsing_part3.patch ++++++ >From f3514d578633cad3e39d6787f81085e46bafbaf4 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch <[email protected]> Date: Wed, 4 Jan 2023 22:49:00 +0100 Subject: [PATCH] Fix and work around compiler warnings and remove dead code --- TinyDeflate/gunzip.hh | 4 ++-- src/dotrunner.cpp | 42 +++++++++--------------------------------- 2 files changed, 11 insertions(+), 35 deletions(-) diff --git a/TinyDeflate/gunzip.hh b/TinyDeflate/gunzip.hh index c237298fdb0..a631815a255 100644 --- a/TinyDeflate/gunzip.hh +++ b/TinyDeflate/gunzip.hh @@ -430,7 +430,7 @@ namespace gunzip_ns static_assert((T)false, "result_of<CallableType> is invalid; use " "result_of<CallableType(zero or more argument types)> instead."); }; - #if __cplusplus > 202000UL + #if __cplusplus > 201703UL template <typename F, typename... Args> struct result_of<F(Args...)> : std::invoke_result<F, Args...> {}; #else @@ -702,7 +702,7 @@ namespace gunzip_ns // Note: Throws away progress already made traversing the tree return ~std::uint_least32_t(0); // error flag } - cur = (unsigned(cur) << 1) | bool(p); + cur = (unsigned(cur) << 1) | unsigned(bool(p)); #ifdef DEFL_DO_HUFF_STATS if(len > maxlen) { diff --git a/src/dotrunner.cpp b/src/dotrunner.cpp index 5be9f20de9c..9246029cb61 100644 --- a/src/dotrunner.cpp +++ b/src/dotrunner.cpp @@ -16,7 +16,16 @@ #include <cassert> #include <cmath> +#ifdef _MSC_VER +#pragma warning( push ) +#pragma warning( disable : 4242 ) +#pragma warning( disable : 4244 ) +#endif #include <gunzip.hh> +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + #include "dotrunner.h" #include "util.h" @@ -113,39 +122,6 @@ static bool resetPDFSize(const int width,const int height, const QCString &base) bool DotRunner::readBoundingBox(const QCString &fileName,int *width,int *height,bool isEps) { -#if 0 - const char *bb = isEps ? "%%PageBoundingBox:" : "/MediaBox ["; - size_t bblen = strlen(bb); - FILE *f = Portable::fopen(fileName,"rb"); - if (!f) - { - //printf("readBoundingBox: could not open %s\n",fileName); - return FALSE; - } - const int maxLineLen=1024; - char buf[maxLineLen]; - while (fgets(buf,maxLineLen,f)!=NULL) - { - const char *p = strstr(buf,bb); - if (p) // found PageBoundingBox or /MediaBox string - { - int x,y; - double w,h; - fclose(f); - if (sscanf(p+bblen,"%d %d %lf %lf",&x,&y,&w,&h)!=4) - { - //printf("readBoundingBox sscanf fail\n"); - return FALSE; - } - *width = static_cast<int>(std::ceil(w)); - *height = static_cast<int>(std::ceil(h)); - return TRUE; - } - } - err("Failed to extract bounding box from generated diagram file %s\n",qPrint(fileName)); - fclose(f); - return FALSE; -#endif std::ifstream f = Portable::openInputStream(fileName); if (!f.is_open()) { ++++++ Fix-boundingbox-parsing_part4.patch ++++++ >From 8129939c312e4b5060042fdb93bd071b7b133381 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch <[email protected]> Date: Thu, 5 Jan 2023 11:16:24 +0100 Subject: [PATCH] issue #9319: Doc build fails with cairo 1.17.6 - Improve detection of "flate" encoded streams --- TinyDeflate/gunzip.hh | 2 +- src/dotrunner.cpp | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/TinyDeflate/gunzip.hh b/TinyDeflate/gunzip.hh index a631815a255..652058ab823 100644 --- a/TinyDeflate/gunzip.hh +++ b/TinyDeflate/gunzip.hh @@ -430,7 +430,7 @@ namespace gunzip_ns static_assert((T)false, "result_of<CallableType> is invalid; use " "result_of<CallableType(zero or more argument types)> instead."); }; - #if __cplusplus > 201703UL + #if __cplusplus > 202000UL template <typename F, typename... Args> struct result_of<F(Args...)> : std::invoke_result<F, Args...> {}; #else diff --git a/src/dotrunner.cpp b/src/dotrunner.cpp index 9246029cb61..2e87a0d4a37 100644 --- a/src/dotrunner.cpp +++ b/src/dotrunner.cpp @@ -20,6 +20,7 @@ #pragma warning( push ) #pragma warning( disable : 4242 ) #pragma warning( disable : 4244 ) +#pragma warning( disable : 4996 ) #endif #include <gunzip.hh> #ifdef _MSC_VER @@ -156,11 +157,28 @@ bool DotRunner::readBoundingBox(const QCString &fileName,int *width,int *height, const std::string streamStart = "stream\n"; const std::string streamEnd = "\nendstream"; + auto detectDeflateStreamStart = [&streamStart](const char *s) + { + size_t len = streamStart.length(); + bool streamOK = strncmp(s,streamStart.c_str(),len)==0; + if (streamOK) // ASCII marker matches, check stream header bytes as well + { + unsigned short header1 = static_cast<unsigned char>(s[len])<<8; // CMF byte + if (header1) // not end of string + { + unsigned short header = (static_cast<unsigned char>(s[len+1])) | header1; // FLG byte + // check for correct header (see https://www.rfc-editor.org/rfc/rfc1950) + return ((header&0x8F20)==0x0800) && (header%31)==0; + } + } + return false; + }; + const size_t l = contents.length(); size_t i=0; while (i<l) { - if (!isEps && contents[i]=='s' && strncmp(&contents[i],streamStart.c_str(),streamStart.length())==0) + if (!isEps && contents[i]=='s' && detectDeflateStreamStart(&contents[i])) { // compressed stream start int col=17; i+=streamStart.length(); ++++++ _multibuild ++++++ --- /var/tmp/diff_new_pack.aj5ScU/_old 2023-09-05 11:54:51.869397336 +0200 +++ /var/tmp/diff_new_pack.aj5ScU/_new 2023-09-05 11:54:51.873397478 +0200 @@ -1,6 +1,5 @@ <multibuild> <package>doxywizard</package> - <package>doxygen-test</package> </multibuild> ++++++ doxygen-1.9.7.src.tar.gz -> doxygen-1.9.6.src.tar.gz ++++++ ++++ 194112 lines of diff (skipped) ++++++ doxygen-no-libclang-cpp.patch ++++++ --- /var/tmp/diff_new_pack.aj5ScU/_old 2023-09-05 11:54:52.709427205 +0200 +++ /var/tmp/diff_new_pack.aj5ScU/_new 2023-09-05 11:54:52.713427347 +0200 @@ -1,9 +1,7 @@ -Index: doxygen-1.9.7/src/CMakeLists.txt -=================================================================== ---- doxygen-1.9.7.orig/src/CMakeLists.txt -+++ doxygen-1.9.7/src/CMakeLists.txt -@@ -368,7 +368,7 @@ if (use_libclang) - add_definitions(-DCINDEX_NO_EXPORTS) +--- doxygen-1.8.20/src/CMakeLists.txt.orig 2020-10-06 15:56:02.841527965 +0200 ++++ doxygen-1.8.20/src/CMakeLists.txt 2020-10-06 16:07:14.226206979 +0200 +@@ -341,7 +341,7 @@ + set(CLANG_LIBS libclang clangTooling) else() # dynamically linked version of clang llvm_config(doxymain USE_SHARED support) - set(CLANG_LIBS libclang clang-cpp) ++++++ doxygen-no-lowercase-man-names.patch ++++++ Index: doxygen-1.9.2/src/fortranscanner.l =================================================================== --- doxygen-1.9.2.orig/src/fortranscanner.l +++ doxygen-1.9.2/src/fortranscanner.l @@ -2314,7 +2314,6 @@ static void initEntry(yyscan_t yyscanner static void addCurrentEntry(yyscan_t yyscanner,bool case_insens) { struct yyguts_t *yyg = (struct yyguts_t*)yyscanner; - if (case_insens) yyextra->current->name = yyextra->current->name.lower(); //printf("===Adding entry %s to %s\n", qPrint(yyextra->current->name), qPrint(yyextra->current_root->name)); yyextra->last_entry = yyextra->current; yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
