forked from pool/doxygen
Accepting request 1105846 from devel:tools
- doxygen-test multibuild target to break build cycle with latex - modified sources % _multibuild - rebase reproducible.patch to 1.9.7 - Add reproducible.patch to make doxytags output reproducible (boo#1201579) - 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) OBS-URL: https://build.opensuse.org/request/show/1105846 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/doxygen?expand=0&rev=94
This commit is contained in:
commit
2a2eb93ff0
File diff suppressed because it is too large
Load Diff
@ -1,216 +0,0 @@
|
|||||||
From 7b2a6027775b0158304635a98de0f9b5672f163a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dimitri van Heesch <doxygen@gmail.com>
|
|
||||||
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");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,93 +0,0 @@
|
|||||||
From f3514d578633cad3e39d6787f81085e46bafbaf4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dimitri van Heesch <doxygen@gmail.com>
|
|
||||||
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())
|
|
||||||
{
|
|
@ -1,66 +0,0 @@
|
|||||||
From 8129939c312e4b5060042fdb93bd071b7b133381 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dimitri van Heesch <doxygen@gmail.com>
|
|
||||||
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();
|
|
@ -1,4 +1,5 @@
|
|||||||
<multibuild>
|
<multibuild>
|
||||||
<package>doxywizard</package>
|
<package>doxywizard</package>
|
||||||
|
<package>doxygen-test</package>
|
||||||
</multibuild>
|
</multibuild>
|
||||||
|
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:297f8ba484265ed3ebd3ff3fe7734eb349a77e4f95c8be52ed9977f51dea49df
|
|
||||||
size 5293513
|
|
3
doxygen-1.9.7.src.tar.gz
Normal file
3
doxygen-1.9.7.src.tar.gz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:87007641c38e2c392c8596f36711eb97633b984c8430f389e7bcf6323a098d94
|
||||||
|
size 5736446
|
@ -1,7 +1,9 @@
|
|||||||
--- doxygen-1.8.20/src/CMakeLists.txt.orig 2020-10-06 15:56:02.841527965 +0200
|
Index: doxygen-1.9.7/src/CMakeLists.txt
|
||||||
+++ doxygen-1.8.20/src/CMakeLists.txt 2020-10-06 16:07:14.226206979 +0200
|
===================================================================
|
||||||
@@ -341,7 +341,7 @@
|
--- doxygen-1.9.7.orig/src/CMakeLists.txt
|
||||||
set(CLANG_LIBS libclang clangTooling)
|
+++ doxygen-1.9.7/src/CMakeLists.txt
|
||||||
|
@@ -368,7 +368,7 @@ if (use_libclang)
|
||||||
|
add_definitions(-DCINDEX_NO_EXPORTS)
|
||||||
else() # dynamically linked version of clang
|
else() # dynamically linked version of clang
|
||||||
llvm_config(doxymain USE_SHARED support)
|
llvm_config(doxymain USE_SHARED support)
|
||||||
- set(CLANG_LIBS libclang clang-cpp)
|
- set(CLANG_LIBS libclang clang-cpp)
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
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);
|
|
@ -1,3 +1,37 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Aug 24 10:45:46 UTC 2023 - pgajdos@suse.com
|
||||||
|
|
||||||
|
- doxygen-test multibuild target to break build cycle with latex
|
||||||
|
- modified sources
|
||||||
|
% _multibuild
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jul 18 11:09:41 UTC 2023 - pgajdos@suse.com
|
||||||
|
|
||||||
|
- rebase reproducible.patch to 1.9.7
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jul 17 17:14:00 UTC 2023 - Bernhard Wiedemann <bwiedemann@suse.com>
|
||||||
|
|
||||||
|
- Add reproducible.patch to make doxytags output reproducible (boo#1201579)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Jun 23 12:00:15 UTC 2023 - pgajdos@suse.com
|
||||||
|
|
||||||
|
- 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)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Apr 24 12:16:18 UTC 2023 - Dominique Leuenberger <dimstar@opensuse.org>
|
Mon Apr 24 12:16:18 UTC 2023 - Dominique Leuenberger <dimstar@opensuse.org>
|
||||||
|
|
||||||
|
94
doxygen.spec
94
doxygen.spec
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# spec file for package doxygen
|
# spec file
|
||||||
#
|
#
|
||||||
# Copyright (c) 2023 SUSE LLC
|
# Copyright (c) 2023 SUSE LLC
|
||||||
#
|
#
|
||||||
@ -21,8 +21,13 @@
|
|||||||
%bcond_with libclang
|
%bcond_with libclang
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
Name: doxygen
|
%global flavor @BUILD_FLAVOR@%{nil}
|
||||||
Version: 1.9.6
|
%if "%{flavor}" == ""
|
||||||
|
%global flavor doxygen
|
||||||
|
%endif
|
||||||
|
|
||||||
|
Name: %{flavor}
|
||||||
|
Version: 1.9.7
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Automated C, C++, and Java Documentation Generator
|
Summary: Automated C, C++, and Java Documentation Generator
|
||||||
# qtools are used for building and they are GPL-3.0 licensed
|
# qtools are used for building and they are GPL-3.0 licensed
|
||||||
@ -30,15 +35,12 @@ License: GPL-2.0-or-later AND GPL-3.0-only
|
|||||||
Group: Development/Tools/Doc Generators
|
Group: Development/Tools/Doc Generators
|
||||||
URL: https://www.doxygen.nl/
|
URL: https://www.doxygen.nl/
|
||||||
Source0: https://www.doxygen.nl/files/doxygen-%{version}.src.tar.gz
|
Source0: https://www.doxygen.nl/files/doxygen-%{version}.src.tar.gz
|
||||||
# suse specific
|
%if "%{flavor}" == "doxywizard"
|
||||||
Patch1: %{name}-no-lowercase-man-names.patch
|
Source1: doxywizard.desktop
|
||||||
|
%endif
|
||||||
# The unified libclang-cpp library doesn't exist on older Leap / SLE
|
# The unified libclang-cpp library doesn't exist on older Leap / SLE
|
||||||
Patch10: doxygen-no-libclang-cpp.patch
|
Patch10: doxygen-no-libclang-cpp.patch
|
||||||
# Fix PDF boudingbox parsing when dot uses cairo >= 1.17.6 -- https://github.com/doxygen/doxygen/issues/9319
|
Patch11: reproducible.patch
|
||||||
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: bison
|
||||||
BuildRequires: cmake >= 2.8.12
|
BuildRequires: cmake >= 2.8.12
|
||||||
BuildRequires: flex
|
BuildRequires: flex
|
||||||
@ -55,7 +57,25 @@ Obsoletes: doxygen-doc
|
|||||||
%if %{with libclang}
|
%if %{with libclang}
|
||||||
BuildRequires: llvm-clang-devel
|
BuildRequires: llvm-clang-devel
|
||||||
%endif
|
%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
|
%description
|
||||||
Doxygen is a documentation system for C, C++, Java, and IDL. It can
|
Doxygen is a documentation system for C, C++, Java, and IDL. It can
|
||||||
generate an online class browser (in HTML) and an offline reference
|
generate an online class browser (in HTML) and an offline reference
|
||||||
@ -63,27 +83,40 @@ manual (in LaTeX) from a set of documented source files. The
|
|||||||
documentation is extracted directly from the sources. Doxygen is
|
documentation is extracted directly from the sources. Doxygen is
|
||||||
developed on a Linux platform, but it runs on most other UNIX flavors
|
developed on a Linux platform, but it runs on most other UNIX flavors
|
||||||
as well.
|
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
|
%prep
|
||||||
%setup -q
|
%setup -q -n doxygen-%{version}
|
||||||
# Leap 15 and SLE don't accept '%%autopatch -M'
|
# Leap 15 and SLE don't accept '%%autopatch -M'
|
||||||
%patch1 -p1
|
|
||||||
%if %{with libclang}
|
%if %{with libclang}
|
||||||
%if 0%{?sle_version} == 150100 || (0%{?sle_version} == 150200 && !0%{?is_opensuse})
|
%if 0%{?sle_version} == 150100 || (0%{?sle_version} == 150200 && !0%{?is_opensuse})
|
||||||
%patch10 -p1
|
%patch10 -p1
|
||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
%patch20 -p1
|
%patch11 -p1
|
||||||
%patch21 -p1
|
|
||||||
%patch22 -p1
|
|
||||||
%patch23 -p1
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%cmake \
|
%cmake \
|
||||||
|
%if "%{flavor}" == "doxygen"
|
||||||
|
-Dbuild_wizard=OFF \
|
||||||
|
%endif
|
||||||
|
%if "%{flavor}" == "doxywizard"
|
||||||
|
-Dbuild_wizard=ON \
|
||||||
|
%endif
|
||||||
-Dbuild_doc=OFF \
|
-Dbuild_doc=OFF \
|
||||||
-Dbuild_xmlparser=ON \
|
-Dbuild_xmlparser=ON \
|
||||||
-Dbuild_search=OFF \
|
-Dbuild_search=OFF \
|
||||||
-Dbuild_wizard=OFF \
|
|
||||||
%if %{with libclang}
|
%if %{with libclang}
|
||||||
-Duse_libclang=ON \
|
-Duse_libclang=ON \
|
||||||
%endif
|
%endif
|
||||||
@ -99,13 +132,40 @@ as well.
|
|||||||
%cmake_build
|
%cmake_build
|
||||||
|
|
||||||
%install
|
%install
|
||||||
|
%if "%{flavor}" == "doxygen-test"
|
||||||
|
exit 0
|
||||||
|
%endif
|
||||||
%cmake_install
|
%cmake_install
|
||||||
mkdir -p %{buildroot}%{_mandir}/man1/
|
mkdir -p %{buildroot}%{_mandir}/man1/
|
||||||
|
%if "%{flavor}" == "doxygen"
|
||||||
install -m 644 doc/doxygen.1 %{buildroot}%{_mandir}/man1/
|
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
|
%files
|
||||||
|
%if "%{flavor}" == "doxygen"
|
||||||
%license LICENSE
|
%license LICENSE
|
||||||
%attr(644,root,root) %{_mandir}/man1/doxygen.1%{?ext_man}
|
%attr(644,root,root) %{_mandir}/man1/doxygen.1%{?ext_man}
|
||||||
%attr(755,root,root) %{_bindir}/*
|
%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
|
%changelog
|
||||||
|
@ -1,94 +0,0 @@
|
|||||||
#
|
|
||||||
# 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
|
|
75
reproducible.patch
Normal file
75
reproducible.patch
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
Index: doxygen-1.9.7/deps/filesystem/filesystem.hpp
|
||||||
|
===================================================================
|
||||||
|
--- doxygen-1.9.7.orig/deps/filesystem/filesystem.hpp
|
||||||
|
+++ doxygen-1.9.7/deps/filesystem/filesystem.hpp
|
||||||
|
@@ -5700,12 +5700,13 @@ public:
|
||||||
|
impl(const path& path, directory_options options)
|
||||||
|
: _base(path)
|
||||||
|
, _options(options)
|
||||||
|
- , _dir(nullptr)
|
||||||
|
+ , _namelist(nullptr)
|
||||||
|
+ , _namelisti(-1)
|
||||||
|
, _entry(nullptr)
|
||||||
|
{
|
||||||
|
if (!path.empty()) {
|
||||||
|
- do { _dir = ::opendir(path.native().c_str()); } while(errno == EINTR);
|
||||||
|
- if (!_dir) {
|
||||||
|
+ _namelisti = _namelistn = ::scandir(path.native().c_str(), &_namelist, NULL, alphasort);
|
||||||
|
+ if (_namelistn == -1) {
|
||||||
|
auto error = errno;
|
||||||
|
_base = filesystem::path();
|
||||||
|
if ((error != EACCES && error != EPERM) || (options & directory_options::skip_permission_denied) == directory_options::none) {
|
||||||
|
@@ -5720,19 +5721,23 @@ public:
|
||||||
|
impl(const impl& other) = delete;
|
||||||
|
~impl()
|
||||||
|
{
|
||||||
|
- if (_dir) {
|
||||||
|
- ::closedir(_dir);
|
||||||
|
+ if (_namelist) {
|
||||||
|
+ for (int i=_namelistn-1; i>=0; i--) {
|
||||||
|
+ free(_namelist[i]);
|
||||||
|
+ }
|
||||||
|
+ free(_namelist);
|
||||||
|
+ _namelist = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void increment(std::error_code& ec)
|
||||||
|
{
|
||||||
|
- if (_dir) {
|
||||||
|
+ if (_namelist) {
|
||||||
|
bool skip;
|
||||||
|
do {
|
||||||
|
skip = false;
|
||||||
|
errno = 0;
|
||||||
|
- do { _entry = ::readdir(_dir); } while(errno == EINTR);
|
||||||
|
- if (_entry) {
|
||||||
|
+ if (_namelisti > 0 ) {
|
||||||
|
+ _entry = _namelist[--_namelisti];
|
||||||
|
_dir_entry._path = _base;
|
||||||
|
_dir_entry._path.append_name(_entry->d_name);
|
||||||
|
copyToDirEntry();
|
||||||
|
@@ -5742,8 +5747,11 @@ public:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
- ::closedir(_dir);
|
||||||
|
- _dir = nullptr;
|
||||||
|
+ for (int i=_namelistn-1; i>=0; i--) {
|
||||||
|
+ free(_namelist[i]);
|
||||||
|
+ }
|
||||||
|
+ free(_namelist);
|
||||||
|
+ _namelist = nullptr;
|
||||||
|
_dir_entry._path.clear();
|
||||||
|
if (errno && errno != EINTR) {
|
||||||
|
ec = detail::make_system_error();
|
||||||
|
@@ -5772,7 +5780,9 @@ public:
|
||||||
|
}
|
||||||
|
path _base;
|
||||||
|
directory_options _options;
|
||||||
|
- DIR* _dir;
|
||||||
|
+ int _namelisti;
|
||||||
|
+ int _namelistn;
|
||||||
|
+ struct dirent **_namelist;
|
||||||
|
struct ::dirent* _entry;
|
||||||
|
directory_entry _dir_entry;
|
||||||
|
std::error_code _ec;
|
Loading…
Reference in New Issue
Block a user