]> git.pld-linux.org Git - packages/gdal.git/blobdiff - gdal-poppler.patch
adjusted upstream patch to fix build with poppler 0.69.0
[packages/gdal.git] / gdal-poppler.patch
index 58e2522d820340777db7769762444af58234df55..fd912a6358e57d952e86bd51ec3ba30fed5ef781 100644 (file)
---- gdal-1.9.2/frmts/pdf/pdfio.h.orig  2013-09-27 19:25:21.549930220 +0200
-+++ gdal-1.9.2/frmts/pdf/pdfio.h       2013-09-27 19:50:28.013200337 +0200
-@@ -55,10 +55,11 @@
-                          Guint lengthA, Object *dictA);
-         virtual ~VSIPDFFileStream();
+From 2d789902ffb48251ec2ff632320d78ee088c2c5f Mon Sep 17 00:00:00 2001
+From: Even Rouault <even.rouault@spatialys.com>
+Date: Sat, 5 May 2018 22:18:37 +0200
+Subject: [PATCH] Fix build with recent Poppler (0.64) (fix #573)
+
+---
+ gdal/frmts/pdf/pdfobject.cpp | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/gdal/frmts/pdf/pdfobject.cpp b/gdal/frmts/pdf/pdfobject.cpp
+index ae734a74e4c..5eab5dd1546 100644
+--- a/gdal/frmts/pdf/pdfobject.cpp
++++ b/gdal/frmts/pdf/pdfobject.cpp
+@@ -1055,7 +1055,12 @@ const CPLString& GDALPDFObjectPoppler::GetString()
+ {
+     if (GetType() == PDFObjectType_String)
+     {
++#ifdef POPPLER_0_58_OR_LATER
++        // At least available since poppler 0.41
++        const GooString* gooString = m_po->getString();
++#else
+         GooString* gooString = m_po->getString();
++#endif
+         return (osStr = GDALPDFGetUTF8StringFromBytes(reinterpret_cast<const GByte*>(gooString->getCString()),
+                                                       static_cast<int>(gooString->getLength())));
+     }
+From 69e07012533b8393edd8b9ec4da6d239d204858a Mon Sep 17 00:00:00 2001
+From: Even Rouault <even.rouault@spatialys.com>
+Date: Fri, 12 Oct 2018 19:02:40 +0200
+Subject: [PATCH] Add support for Poppler 0.69 (fixes #1004)
+
+---
+ gdal/GDALmake.opt.in          |  1 +
+ gdal/configure                | 61 ++++++++++++++++++++++++++---------
+ gdal/configure.ac             | 56 +++++++++++++++++++++++---------
+ gdal/frmts/pdf/GNUmakefile    |  4 +++
+ gdal/frmts/pdf/makefile.vc    |  6 +++-
+ gdal/frmts/pdf/pdfdataset.cpp | 12 +++++++
+ gdal/nmake.opt                |  2 ++
+ 7 files changed, 111 insertions(+), 31 deletions(-)
+
+diff --git a/gdal/GDALmake.opt.in b/gdal/GDALmake.opt.in
+index c3b5b34f92b..eaf005e5a14 100644
+--- a/gdal/GDALmake.opt.in
++++ b/gdal/GDALmake.opt.in
+@@ -473,6 +473,7 @@ POPPLER_BASE_STREAM_HAS_TWO_ARGS = @POPPLER_BASE_STREAM_HAS_TWO_ARGS@
+ POPPLER_0_20_OR_LATER = @POPPLER_0_20_OR_LATER@
+ POPPLER_0_23_OR_LATER = @POPPLER_0_23_OR_LATER@
+ POPPLER_0_58_OR_LATER = @POPPLER_0_58_OR_LATER@
++POPPLER_0_69_OR_LATER = @POPPLER_0_69_OR_LATER@
+ POPPLER_INC = @POPPLER_INC@
+ POPPLER_PLUGIN_LIB = @POPPLER_PLUGIN_LIB@
  
--        virtual Stream *   makeSubStream(Guint startA, GBool limitedA,
--                                         Guint lengthA, Object *dictA);
--        virtual int        getPos();
--        virtual Guint      getStart();
-+        virtual BaseStream *copy();
-+        virtual Stream *   makeSubStream(Goffset startA, GBool limitedA,
-+                                         Goffset lengthA, Object *dictA);
-+        virtual Goffset    getPos();
-+        virtual Goffset    getStart();
-         virtual StreamKind getKind();
-         virtual GooString *getFileName();
+index 857f7fdb445..b6e59020c5b 100644
+--- a/gdal/configure.ac
++++ b/gdal/configure.ac
+@@ -4446,6 +4446,7 @@ POPPLER_BASE_STREAM_HAS_TWO_ARGS=no
+ POPPLER_0_20_OR_LATER=no
+ POPPLER_0_23_OR_LATER=no
+ POPPLER_0_58_OR_LATER=no
++POPPLER_0_69_OR_LATER=no
  
-@@ -69,8 +70,8 @@
-         virtual void       reset();
-         virtual void       unfilteredReset ();
-         virtual void       close();
--        virtual void       setPos(Guint pos, int dir = 0);
--        virtual void       moveStart(int delta);
-+        virtual void       setPos(Goffset pos, int dir = 0);
-+        virtual void       moveStart(Goffset delta);
+ AC_MSG_CHECKING([for poppler])
  
-     private:
-         VSIPDFFileStream  *poParent;
---- gdal-1.9.2/configure.in.orig       2013-09-27 19:03:37.856651598 +0200
-+++ gdal-1.9.2/configure.in    2013-09-27 19:24:36.179932130 +0200
-@@ -3000,10 +3000,10 @@
-         echo 'public:' >> testpoppler.cpp
-         echo '  TestStream() : BaseStream(0,0) {}' >> testpoppler.cpp
-         echo '  ~TestStream() {}' >> testpoppler.cpp
--        echo '  virtual Stream *makeSubStream(Guint start, GBool limited, Guint length, Object *dict) { return 0; }' >> testpoppler.cpp
--        echo '  virtual void setPos(Guint pos, int dir = 0) { }' >> testpoppler.cpp
--        echo '  virtual Guint getStart() { return 0; }' >> testpoppler.cpp
--        echo '  virtual void moveStart(int delta) { }' >> testpoppler.cpp
-+        echo '  virtual Stream *makeSubStream(Goffset start, GBool limited, Goffset length, Object *dict) { return 0; }' >> testpoppler.cpp
-+        echo '  virtual void setPos(Goffset pos, int dir = 0) { }' >> testpoppler.cpp
-+        echo '  virtual Goffset getStart() { return 0; }' >> testpoppler.cpp
-+        echo '  virtual void moveStart(Goffset delta) { }' >> testpoppler.cpp
-         echo '};' >> testpoppler.cpp
-         echo 'int main(int argc, char** argv) { return 0; }' >> testpoppler.cpp
-         if test -z "`${CXX} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then
---- gdal-1.9.2/frmts/pdf/pdfdataset.cpp.orig   2012-10-09 02:58:26.000000000 +0200
-+++ gdal-1.9.2/frmts/pdf/pdfdataset.cpp        2013-09-27 19:40:31.413225370 +0200
-@@ -522,12 +522,12 @@
+@@ -4486,21 +4487,45 @@ if test "$with_poppler" != "no" -a "$with_poppler" != ""; then
  
- #ifdef USE_POPPLER
- #ifdef POPPLER_0_20_OR_LATER
--static void PDFDatasetErrorFunction(void* userData, ErrorCategory eErrCatagory, int nPos, char *pszMsg)
-+static void PDFDatasetErrorFunction(void* userData, ErrorCategory eErrCatagory, Goffset nPos, char *pszMsg)
- {
-     CPLString osError;
+         CHECK_OTHER_POPPLER_VERSION=yes
  
-     if (nPos >= 0)
--        osError.Printf("Pos = %d, ", nPos);
-+        osError.Printf("Pos = %lld, ", (long long)nPos);
-     osError += pszMsg;
+-        # And now we check if we have Poppler >= 0.58.0
+-        AC_MSG_CHECKING([if Object does have new API (>= 0.58.0)])
+-        rm -f testpoppler.*
+-        echo '#include <poppler/Object.h>' > testpoppler.cpp
+-        echo 'int main(int argc, char** argv) { Object o(objNull); return 0; }' >> testpoppler.cpp
+-        if test -z "`${CXX} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then
+-            POPPLER_0_58_OR_LATER=yes
+-            POPPLER_0_23_OR_LATER=yes
+-            POPPLER_0_20_OR_LATER=yes
+-            POPPLER_BASE_STREAM_HAS_TWO_ARGS=yes
+-            POPPLER_HAS_OPTCONTENT=yes
+-            CHECK_OTHER_POPPLER_VERSION=no
+-            AC_MSG_RESULT([yes])
+-        else
+-            AC_MSG_RESULT([no])
++        if test "$CHECK_OTHER_POPPLER_VERSION" = "yes"; then
++            AC_MSG_CHECKING([if OptionalContent has API >= 0.69.0])
++            rm -f testpoppler.*
++            echo '#include <poppler/OptionalContent.h>' > testpoppler.cpp
++            echo 'int main(int argc, char** argv) {' >> testpoppler.cpp
++            echo 'OCGs ocg(nullptr, nullptr);' >> testpoppler.cpp
++            echo 'ocg.getOCGs().size();' >> testpoppler.cpp
++            echo 'return 0; }' >> testpoppler.cpp
++            if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then
++                POPPLER_0_69_OR_LATER=yes
++                POPPLER_0_58_OR_LATER=yes
++                POPPLER_0_23_OR_LATER=yes
++                POPPLER_0_20_OR_LATER=yes
++                POPPLER_BASE_STREAM_HAS_TWO_ARGS=yes
++                POPPLER_HAS_OPTCONTENT=yes
++                CHECK_OTHER_POPPLER_VERSION=no
++                AC_MSG_RESULT([yes])
++            else
++                AC_MSG_RESULT([no])
++            fi
++        fi
++
++        if test "$CHECK_OTHER_POPPLER_VERSION" = "yes"; then
++            # And now we check if we have Poppler >= 0.58.0
++            AC_MSG_CHECKING([if Object does have new API (>= 0.58.0)])
++            rm -f testpoppler.*
++            echo '#include <poppler/Object.h>' > testpoppler.cpp
++            echo 'int main(int argc, char** argv) { Object o(objNull); return 0; }' >> testpoppler.cpp
++            if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then
++                POPPLER_0_58_OR_LATER=yes
++                POPPLER_0_23_OR_LATER=yes
++                POPPLER_0_20_OR_LATER=yes
++                POPPLER_BASE_STREAM_HAS_TWO_ARGS=yes
++                POPPLER_HAS_OPTCONTENT=yes
++                CHECK_OTHER_POPPLER_VERSION=no
++                AC_MSG_RESULT([yes])
++            else
++                AC_MSG_RESULT([no])
++            fi
+         fi
  
-     if (strcmp(osError.c_str(), "Incorrect password") == 0)
---- gdal-1.9.2/frmts/pdf/pdfio.cpp.orig        2012-10-09 02:58:26.000000000 +0200
-+++ gdal-1.9.2/frmts/pdf/pdfio.cpp     2013-09-27 20:31:25.879764002 +0200
-@@ -102,12 +102,17 @@
-     }
- }
+         if test "$CHECK_OTHER_POPPLER_VERSION" = "yes"; then
+@@ -4585,6 +4610,7 @@ AC_SUBST(POPPLER_BASE_STREAM_HAS_TWO_ARGS, $POPPLER_BASE_STREAM_HAS_TWO_ARGS)
+ AC_SUBST(POPPLER_0_20_OR_LATER, $POPPLER_0_20_OR_LATER)
+ AC_SUBST(POPPLER_0_23_OR_LATER, $POPPLER_0_23_OR_LATER)
+ AC_SUBST(POPPLER_0_58_OR_LATER, $POPPLER_0_58_OR_LATER)
++AC_SUBST(POPPLER_0_69_OR_LATER, $POPPLER_0_69_OR_LATER)
+ AC_SUBST(POPPLER_INC, $POPPLER_INC)
+ AC_SUBST(POPPLER_PLUGIN_LIB, $POPPLER_PLUGIN_LIB)
  
-+BaseStream *VSIPDFFileStream::copy()
-+{
-+    return new VSIPDFFileStream(*this);
-+}
+diff --git a/gdal/frmts/pdf/GNUmakefile b/gdal/frmts/pdf/GNUmakefile
+index 2014070eac7..618072f05d3 100644
+--- a/gdal/frmts/pdf/GNUmakefile
++++ b/gdal/frmts/pdf/GNUmakefile
+@@ -35,6 +35,10 @@ ifeq ($(POPPLER_0_58_OR_LATER),yes)
+ CPPFLAGS +=  -DPOPPLER_0_58_OR_LATER
+ endif
++ifeq ($(POPPLER_0_69_OR_LATER),yes)
++CPPFLAGS +=  -DPOPPLER_0_69_OR_LATER
++endif
 +
- /************************************************************************/
- /*                             makeSubStream()                          */
- /************************************************************************/
+ ifeq ($(HAVE_PODOFO),yes)
+ CPPFLAGS +=  -DHAVE_PODOFO
+ endif
+diff --git a/gdal/frmts/pdf/makefile.vc b/gdal/frmts/pdf/makefile.vc
+index b4fa14d0a18..ad76d3de70c 100644
+--- a/gdal/frmts/pdf/makefile.vc
++++ b/gdal/frmts/pdf/makefile.vc
+@@ -14,7 +14,7 @@ OBJ = $(OBJ) ..\..\ogr\ogrsf_frmts\mem\ogrmemdatasource.obj ..\..\ogr\ogrsf_frmt
+ EXTRAFLAGS =  -I..\vrt -I..\mem -I..\..\ogr\ogrsf_frmts\mem $(POPPLER_EXTRAFLAGS) $(PODOFO_EXTRAFLAGS) $(PDFIUM_EXTRAFLAGS)
  
--Stream *VSIPDFFileStream::makeSubStream(Guint startA, GBool limitedA,
--                                        Guint lengthA, Object *dictA)
-+Stream *VSIPDFFileStream::makeSubStream(Goffset startA, GBool limitedA,
-+                                        Goffset lengthA, Object *dictA)
- {
-     return new VSIPDFFileStream(this,
-                                 startA, limitedA,
-@@ -118,7 +123,7 @@
- /*                                 getPos()                             */
- /************************************************************************/
+ !IFDEF POPPLER_ENABLED
+-POPPLER_EXTRAFLAGS = $(POPPLER_CFLAGS) $(POPPLER_HAS_OPTCONTENT_FLAGS) $(POPPLER_BASE_STREAM_HAS_TWO_ARGS_FLAGS) $(POPPLER_0_20_OR_LATER_FLAGS) $(POPPLER_0_23_OR_LATER_FLAGS) $(POPPLER_0_58_OR_LATER_FLAGS) -DHAVE_POPPLER
++POPPLER_EXTRAFLAGS = $(POPPLER_CFLAGS) $(POPPLER_HAS_OPTCONTENT_FLAGS) $(POPPLER_BASE_STREAM_HAS_TWO_ARGS_FLAGS) $(POPPLER_0_20_OR_LATER_FLAGS) $(POPPLER_0_23_OR_LATER_FLAGS) $(POPPLER_0_58_OR_LATER_FLAGS) $(POPPLER_0_69_OR_LATER_FLAGS) -DHAVE_POPPLER
  
--int VSIPDFFileStream::getPos()
-+Goffset VSIPDFFileStream::getPos()
- {
-     return nCurrentPos;
- }
-@@ -127,7 +132,7 @@
- /*                                getStart()                            */
- /************************************************************************/
+ !IFDEF POPPLER_HAS_OPTCONTENT
+ POPPLER_HAS_OPTCONTENT_FLAGS = -DPOPPLER_HAS_OPTCONTENT
+@@ -36,6 +36,10 @@ POPPLER_0_23_OR_LATER_FLAGS = -DPOPPLER_0_23_OR_LATER
+ POPPLER_0_58_OR_LATER_FLAGS = -DPOPPLER_0_58_OR_LATER
+ !ENDIF
  
--Guint VSIPDFFileStream::getStart()
-+Goffset VSIPDFFileStream::getStart()
- {
-     return nStart;
- }
-@@ -273,7 +278,7 @@
- /*                               setPos()                               */
- /************************************************************************/
++!IFDEF POPPLER_0_69_OR_LATER
++POPPLER_0_69_OR_LATER_FLAGS = -DPOPPLER_0_69_OR_LATER
++!ENDIF
++
+ !ENDIF
  
--void VSIPDFFileStream::setPos(Guint pos, int dir)
-+void VSIPDFFileStream::setPos(Goffset pos, int dir)
- {
-     if (dir >= 0)
+ !IFDEF PODOFO_ENABLED
+diff --git a/gdal/frmts/pdf/pdfdataset.cpp b/gdal/frmts/pdf/pdfdataset.cpp
+index ee89fd07564..1a56f57ee06 100644
+--- a/gdal/frmts/pdf/pdfdataset.cpp
++++ b/gdal/frmts/pdf/pdfdataset.cpp
+@@ -3440,10 +3440,16 @@ void PDFDataset::FindLayersPoppler()
+     }
+     else
+     {
++#ifdef POPPLER_0_69_OR_LATER
++        for( const auto& refOCGPair: optContentConfig->getOCGs() )
++        {
++            auto ocg = refOCGPair.second.get();
++#else
+         GooList* ocgList = optContentConfig->getOCGs();
+         for(int i=0;i<ocgList->getLength();i++)
+         {
+             OptionalContentGroup* ocg = (OptionalContentGroup*) ocgList->get(i);
++#endif
+             if( ocg != NULL && ocg->getName() != NULL )
+             {
+                 const char* pszLayerName = (const char*)ocg->getName()->getCString();
+@@ -3472,10 +3478,16 @@ void PDFDataset::TurnLayersOnOffPoppler()
      {
-@@ -301,7 +306,7 @@
- /*                            moveStart()                               */
- /************************************************************************/
+         int i;
+         int bAll = EQUAL(pszLayers, "ALL");
++#ifdef POPPLER_0_69_OR_LATER
++        for( const auto& refOCGPair: optContentConfig->getOCGs() )
++        {
++            auto ocg = refOCGPair.second.get();
++#else
+         GooList* ocgList = optContentConfig->getOCGs();
+         for(i=0;i<ocgList->getLength();i++)
+         {
+             OptionalContentGroup* ocg = (OptionalContentGroup*) ocgList->get(i);
++#endif
+             ocg->setState( (bAll) ? OptionalContentGroup::On : OptionalContentGroup::Off );
+         }
  
--void VSIPDFFileStream::moveStart(int delta)
-+void VSIPDFFileStream::moveStart(Goffset delta)
- {
-     nStart += delta;
-     VSIFSeekL(f, nCurrentPos = nStart, SEEK_SET);
+diff --git a/gdal/nmake.opt b/gdal/nmake.opt
+index a3b88583425..c9ca28d3cd9 100644
+--- a/gdal/nmake.opt
++++ b/gdal/nmake.opt
+@@ -632,6 +632,7 @@ OCI_INCLUDE =      -I$(ORACLE_HOME)\oci\include
+ # Uncomment POPPLER_0_20_OR_LATER = YES for Poppler >= 0.20.0
+ # Uncomment POPPLER_0_23_OR_LATER = YES for Poppler >= 0.23.0
+ # Uncomment POPPLER_0_58_OR_LATER = YES for Poppler >= 0.58.0
++# Uncomment POPPLER_0_69_OR_LATER = YES for Poppler >= 0.69.0
+ #POPPLER_ENABLED = YES
+ #POPPLER_CFLAGS = -Ie:/kde/include -Ie:/kde/include/poppler
+ #POPPLER_HAS_OPTCONTENT = YES
+@@ -639,6 +640,7 @@ OCI_INCLUDE =      -I$(ORACLE_HOME)\oci\include
+ #POPPLER_0_20_OR_LATER = YES
+ #POPPLER_0_23_OR_LATER = YES
+ #POPPLER_0_58_OR_LATER = YES
++#POPPLER_0_69_OR_LATER = YES
+ #POPPLER_LIBS = e:/kde/lib/poppler.lib e:/kde/lib/freetype.lib e:/kde/lib/liblcms-1.lib advapi32.lib gdi32.lib
+ # Uncomment for PDF support
This page took 0.066017 seconds and 4 git commands to generate.