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);

Reply via email to