You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/sci-libs/gdal/files/gdal-2.3.1-poppler-0.69.0.p...

302 lines
12 KiB

From 0c0b9ea5a5d6bbef938de8a77c5b00cb228b902d 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)
---
GDALmake.opt.in | 1 +
configure | 61 ++++++++++++++++++++++++++---------
configure.ac | 56 +++++++++++++++++++++++---------
frmts/pdf/GNUmakefile | 4 +++
frmts/pdf/makefile.vc | 6 +++-
frmts/pdf/pdfdataset.cpp | 12 +++++++
nmake.opt | 2 ++
7 files changed, 111 insertions(+), 31 deletions(-)
diff --git a/GDALmake.opt.in b/GDALmake.opt.in
index 30749ae982a..f9ab41fd124 100644
--- a/GDALmake.opt.in
+++ b/GDALmake.opt.in
@@ -481,6 +481,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@
diff --git a/configure b/configure
index 050bc79ac97..a8472ba8c2d 100755
--- a/configure
+++ b/configure
@@ -669,6 +669,7 @@ PODOFO_INC
HAVE_PODOFO
POPPLER_PLUGIN_LIB
POPPLER_INC
+POPPLER_0_69_OR_LATER
POPPLER_0_58_OR_LATER
POPPLER_0_23_OR_LATER
POPPLER_0_20_OR_LATER
@@ -34798,6 +34799,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
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for poppler" >&5
$as_echo_n "checking for poppler... " >&6; }
@@ -34840,24 +34842,51 @@ $as_echo "yes" >&6; }
CHECK_OTHER_POPPLER_VERSION=yes
- # And now we check if we have Poppler >= 0.58.0
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Object does have new API (>= 0.58.0)" >&5
+ if test "$CHECK_OTHER_POPPLER_VERSION" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if OptionalContent has API >= 0.69.0" >&5
+$as_echo_n "checking if OptionalContent has API >= 0.69.0... " >&6; }
+ 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
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ fi
+
+ if test "$CHECK_OTHER_POPPLER_VERSION" = "yes"; then
+ # And now we check if we have Poppler >= 0.58.0
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Object does have new API (>= 0.58.0)" >&5
$as_echo_n "checking if Object does have new API (>= 0.58.0)... " >&6; }
- 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
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ 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
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
+ fi
fi
if test "$CHECK_OTHER_POPPLER_VERSION" = "yes"; then
@@ -34962,6 +34991,8 @@ 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
diff --git a/configure.ac b/configure.ac
index 4b8ab911cec..0c588e04f03 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4496,6 +4496,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
AC_MSG_CHECKING([for poppler])
@@ -4536,21 +4537,45 @@ if test "$with_poppler" != "no" -a "$with_poppler" != ""; then
CHECK_OTHER_POPPLER_VERSION=yes
- # 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])
+ 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 test "$CHECK_OTHER_POPPLER_VERSION" = "yes"; then
@@ -4635,6 +4660,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)
diff --git a/frmts/pdf/GNUmakefile b/frmts/pdf/GNUmakefile
index 2c332d2798f..6a267f529b2 100644
--- a/frmts/pdf/GNUmakefile
+++ b/frmts/pdf/GNUmakefile
@@ -34,6 +34,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
+
ifeq ($(HAVE_PODOFO),yes)
CPPFLAGS += -DHAVE_PODOFO
endif
diff --git a/frmts/pdf/makefile.vc b/frmts/pdf/makefile.vc
index b4fa14d0a18..ad76d3de70c 100644
--- a/frmts/pdf/makefile.vc
+++ b/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)
!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
!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
+!IFDEF POPPLER_0_69_OR_LATER
+POPPLER_0_69_OR_LATER_FLAGS = -DPOPPLER_0_69_OR_LATER
+!ENDIF
+
!ENDIF
!IFDEF PODOFO_ENABLED
diff --git a/frmts/pdf/pdfdataset.cpp b/frmts/pdf/pdfdataset.cpp
index ee89fd07564..1a56f57ee06 100644
--- a/frmts/pdf/pdfdataset.cpp
+++ b/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 != nullptr && ocg->getName() != nullptr )
{
const char* pszLayerName = (const char*)ocg->getName()->getCString();
@@ -3472,10 +3478,16 @@ void PDFDataset::TurnLayersOnOffPoppler()
{
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 );
}
diff --git a/nmake.opt b/nmake.opt
index 682d766d93e..1eb049038c8 100644
--- a/nmake.opt
+++ b/nmake.opt
@@ -639,6 +639,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
@@ -646,6 +647,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