sci-libs/gdal: Fix build with poppler-0.75 and poppler-0.76

Needs backports from gdal-2.5.0.

Closes: https://bugs.gentoo.org/681342
Closes: https://bugs.gentoo.org/682690
Package-Manager: Portage-2.3.66, Repoman-2.3.12
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
This commit is contained in:
Andreas Sturmlechner
2019-05-02 00:38:26 +02:00
parent b024c88ce5
commit afc4f6d1c8
3 changed files with 174 additions and 1 deletions

View File

@@ -0,0 +1,148 @@
From 5c12d11614a325317ceaa7c0567070b3e4188275 Mon Sep 17 00:00:00 2001
From: Even Rouault <even.rouault@spatialys.com>
Date: Tue, 26 Mar 2019 12:43:59 +0100
Subject: [PATCH] Add support for Poppler 0.75.0 (fixes #1388)
---
gdal/frmts/pdf/pdfio.h | 5 ---
gdal/frmts/pdf/pdfobject.cpp | 59 ++++++++----------------------------
2 files changed, 12 insertions(+), 52 deletions(-)
diff --git a/frmts/pdf/pdfio.h b/frmts/pdf/pdfio.h
index 7ae15c88aa3..ec13b8fe94c 100644
--- a/frmts/pdf/pdfio.h
+++ b/frmts/pdf/pdfio.h
@@ -93,11 +93,6 @@ class VSIPDFFileStream final: public BaseStream
virtual void close() override;
private:
- /* getChars/hasGetChars added in poppler 0.15.0
- * POPPLER_BASE_STREAM_HAS_TWO_ARGS true from poppler 0.16,
- * This test will be wrong for poppler 0.15 or 0.16,
- * but will still compile correctly.
- */
virtual GBool hasGetChars() override;
virtual int getChars(int nChars, Guchar *buffer) override;
diff --git a/frmts/pdf/pdfobject.cpp b/frmts/pdf/pdfobject.cpp
--- a/frmts/pdf/pdfobject.cpp
+++ b/frmts/pdf/pdfobject.cpp
@@ -1195,7 +1195,7 @@ GDALPDFObject* GDALPDFDictionaryPoppler::Get(const char* pszKey)
return oIter->second;
#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58
- Object o = m_poDict->lookupNF(((char*)pszKey));
+ auto&& o(m_poDict->lookupNF(((char*)pszKey)));
if (!o.isNull())
{
int nRefNum = 0;
@@ -1204,7 +1204,7 @@ GDALPDFObject* GDALPDFDictionaryPoppler::Get(const char* pszKey)
{
nRefNum = o.getRefNum();
nRefGen = o.getRefGen();
- Object o2 = m_poDict->lookup((char*)pszKey);
+ Object o2(m_poDict->lookup((char*)pszKey));
if( !o2.isNull() )
{
GDALPDFObjectPoppler* poObj = new GDALPDFObjectPoppler(new Object(std::move(o2)), TRUE);
@@ -1215,7 +1215,7 @@ GDALPDFObject* GDALPDFDictionaryPoppler::Get(const char* pszKey)
}
else
{
- GDALPDFObjectPoppler* poObj = new GDALPDFObjectPoppler(new Object(std::move(o)), TRUE);
+ GDALPDFObjectPoppler* poObj = new GDALPDFObjectPoppler(new Object(std::move(o.copy())), TRUE);
poObj->SetRefNumAndGen(nRefNum, nRefGen);
m_map[pszKey] = poObj;
return poObj;
@@ -1329,7 +1329,7 @@ GDALPDFObject* GDALPDFArrayPoppler::Get(int nIndex)
return m_v[nIndex];
#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58
- Object o = m_poArray->getNF(nIndex);
+ auto&& o(m_poArray->getNF(nIndex));
if( !o.isNull() )
{
int nRefNum = 0;
@@ -1338,7 +1338,7 @@ GDALPDFObject* GDALPDFArrayPoppler::Get(int nIndex)
{
nRefNum = o.getRefNum();
nRefGen = o.getRefGen();
- Object o2 = m_poArray->get(nIndex);
+ Object o2(m_poArray->get(nIndex));
if( !o2.isNull() )
{
GDALPDFObjectPoppler* poObj = new GDALPDFObjectPoppler(new Object(std::move(o2)), TRUE);
@@ -1349,7 +1349,7 @@ GDALPDFObject* GDALPDFArrayPoppler::Get(int nIndex)
}
else
{
- GDALPDFObjectPoppler* poObj = new GDALPDFObjectPoppler(new Object(std::move(o)), TRUE);
+ GDALPDFObjectPoppler* poObj = new GDALPDFObjectPoppler(new Object(std::move(o.copy())), TRUE);
poObj->SetRefNumAndGen(nRefNum, nRefGen);
m_v[nIndex] = poObj;
return poObj;
@@ -1416,8 +1416,6 @@ int GDALPDFStreamPoppler::GetLength()
char* GDALPDFStreamPoppler::GetBytes()
{
- /* fillGooString() available in poppler >= 0.16.0 */
-#ifdef POPPLER_BASE_STREAM_HAS_TWO_ARGS
GooString* gstr = new GooString();
m_poStream->fillGooString(gstr);
@@ -1427,7 +1425,12 @@ char* GDALPDFStreamPoppler::GetBytes()
char* pszContent = (char*) VSIMalloc(m_nLength + 1);
if (pszContent)
{
- memcpy(pszContent, gstr->getCString(), m_nLength);
+#if (POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 72)
+ const char* srcStr = gstr->c_str();
+#else
+ const char* srcStr = gstr->getCString();
+#endif
+ memcpy(pszContent, srcStr, m_nLength);
pszContent[m_nLength] = '\0';
}
delete gstr;
@@ -1438,41 +1441,6 @@ char* GDALPDFStreamPoppler::GetBytes()
delete gstr;
return nullptr;
}
-#else
- int i;
- int nLengthAlloc = 0;
- char* pszContent = nullptr;
- if( m_nLength >= 0 )
- {
- pszContent = (char*) VSIMalloc(m_nLength + 1);
- if (!pszContent)
- return nullptr;
- nLengthAlloc = m_nLength;
- }
- m_poStream->reset();
- for(i = 0; ; ++i )
- {
- int nVal = m_poStream->getChar();
- if (nVal == EOF)
- break;
- if( i >= nLengthAlloc )
- {
- nLengthAlloc = 32 + nLengthAlloc + nLengthAlloc / 3;
- char* pszContentNew = (char*) VSIRealloc(pszContent, nLengthAlloc + 1);
- if( pszContentNew == nullptr )
- {
- CPLFree(pszContent);
- m_nLength = 0;
- return nullptr;
- }
- pszContent = pszContentNew;
- }
- pszContent[i] = (GByte)nVal;
- }
- m_nLength = i;
- pszContent[i] = '\0';
- return pszContent;
-#endif
}
#endif // HAVE_POPPLER

View File

@@ -0,0 +1,24 @@
From 8958528f9b5737581afa7249b0e16f2ff89d727e Mon Sep 17 00:00:00 2001
From: Even Rouault <even.rouault@spatialys.com>
Date: Sun, 21 Apr 2019 12:19:56 +0200
Subject: [PATCH] PDF: add support for Poppler 0.76.0
---
gdal/frmts/pdf/pdfsdk_headers.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/frmts/pdf/pdfsdk_headers.h b/frmts/pdf/pdfsdk_headers.h
index 41e48ae91d6..1f77429bf9b 100644
--- a/frmts/pdf/pdfsdk_headers.h
+++ b/frmts/pdf/pdfsdk_headers.h
@@ -55,7 +55,10 @@
#else
typedef unsigned char Guchar;
#endif
+
+#if !(POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 76)
#include <goo/GooList.h>
+#endif
/* begin of poppler xpdf includes */
#include <poppler/Object.h>

View File

@@ -82,6 +82,8 @@ PATCHES=(
"${FILESDIR}/${PN}-2.2.3-soname.patch"
"${FILESDIR}/${PN}-2.2.3-bashcomp-path.patch" # bug 641866
"${FILESDIR}/${PN}-2.3.0-curl.patch" # bug 659840
"${FILESDIR}/${P}-poppler-0.75.patch"
"${FILESDIR}/${P}-poppler-0.76.patch"
)
src_prepare() {
@@ -174,7 +176,6 @@ src_configure() {
--without-rasterlite2
--without-pcraster
--without-pdfium
--without-php
--without-podofo
--without-qhull
--without-sde