From 54fac41f93e062c860a71af56080b005ae694e8787bf98098fb9f9c90dad8436 Mon Sep 17 00:00:00 2001 From: Bruno Friedmann Date: Thu, 31 Jan 2019 10:59:10 +0000 Subject: [PATCH] Accepting request 670314 from home:wolfi323:branches:Application:Geo - Add upstream patches to fix build with the latest poppler in Tumbleweed: * Poppler-revision-version-management.patch * add-support-for-poppler-0.72.0-and-0.73.0.patch OBS-URL: https://build.opensuse.org/request/show/670314 OBS-URL: https://build.opensuse.org/package/show/Application:Geo/gdal?expand=0&rev=82 --- Poppler-revision-version-management.patch | 1144 +++++++++++++++++ ...upport-for-poppler-0.72.0-and-0.73.0.patch | 74 ++ gdal.changes | 8 + gdal.spec | 6 + 4 files changed, 1232 insertions(+) create mode 100644 Poppler-revision-version-management.patch create mode 100644 add-support-for-poppler-0.72.0-and-0.73.0.patch diff --git a/Poppler-revision-version-management.patch b/Poppler-revision-version-management.patch new file mode 100644 index 0000000..14f60d2 --- /dev/null +++ b/Poppler-revision-version-management.patch @@ -0,0 +1,1144 @@ +From d9ff536713c1bcaff00657f5fb9a94f36b92c0d8 Mon Sep 17 00:00:00 2001 +From: Even Rouault +Date: Thu, 17 Jan 2019 22:36:09 +0100 +Subject: [PATCH] Poppler: revision version management. Drop support for + ancient versions older than 0.23.0 (preparation for support of newer version: + refs #1207, #1208) + +--- + appveyor.yml | 6 +- + gdal/GDALmake.opt.in | 10 +- + gdal/configure | 374 ++++++++++++++++++---------------- + gdal/configure.ac | 177 ++-------------- + gdal/frmts/pdf/GNUmakefile | 26 +-- + gdal/frmts/pdf/makefile.vc | 30 +-- + gdal/frmts/pdf/pdfdataset.cpp | 69 +------ + gdal/frmts/pdf/pdfio.cpp | 20 +- + gdal/frmts/pdf/pdfio.h | 22 +- + gdal/frmts/pdf/pdfobject.cpp | 8 +- + gdal/nmake.opt | 15 +- + 11 files changed, 257 insertions(+), 500 deletions(-) + +diff --git a/gdal/GDALmake.opt.in b/gdal/GDALmake.opt.in +index ea54dc2ff3c..770ad859799 100644 +--- a/gdal/GDALmake.opt.in ++++ b/gdal/GDALmake.opt.in +@@ -483,13 +483,9 @@ PDF_PLUGIN = @PDF_PLUGIN@ + # + + HAVE_POPPLER = @HAVE_POPPLER@ +-POPPLER_HAS_OPTCONTENT = @POPPLER_HAS_OPTCONTENT@ +-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_MAJOR_VERSION = @POPPLER_MAJOR_VERSION@ ++POPPLER_MINOR_VERSION = @POPPLER_MINOR_VERSION@ ++POPPLER_INC = @POPPLER_CFLAGS@ + POPPLER_PLUGIN_LIB = @POPPLER_PLUGIN_LIB@ + + # +diff --git a/gdal/configure b/gdal/configure +index 6f7f76b48f2..c0fe46c8f68 100755 +--- a/gdal/configure ++++ b/gdal/configure +@@ -668,14 +668,11 @@ PODOFO_PLUGIN_LIB + 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 +-POPPLER_BASE_STREAM_HAS_TWO_ARGS +-POPPLER_HAS_OPTCONTENT ++POPPLER_MINOR_VERSION ++POPPLER_MAJOR_VERSION + HAVE_POPPLER ++POPPLER_LIBS ++POPPLER_CFLAGS + PDF_PLUGIN + PAM_SETTING + JSON_INCLUDE +@@ -1117,7 +1114,9 @@ HDF5_LIBS + OPENJPEG_CFLAGS + OPENJPEG_LIBS + LIBKML_CFLAGS +-LIBKML_LIBS' ++LIBKML_LIBS ++POPPLER_CFLAGS ++POPPLER_LIBS' + + + # Initialize some variables set by options. +@@ -1927,6 +1926,10 @@ Some influential environment variables: + LIBKML_CFLAGS + C compiler flags for LIBKML, overriding pkg-config + LIBKML_LIBS linker flags for LIBKML, overriding pkg-config ++ POPPLER_CFLAGS ++ C compiler flags for POPPLER, overriding pkg-config ++ POPPLER_LIBS ++ linker flags for POPPLER, overriding pkg-config + + Use these variables to override the choices made by `configure' or to help + it to find libraries and programs with nonstandard names/locations. +@@ -35065,208 +35068,225 @@ fi + + + HAVE_POPPLER=no +-POPPLER_HAS_OPTCONTENT=no +-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 ++POPPLER_MAJOR_VERSION= ++POPPLER_MINOR_VERSION= + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for poppler" >&5 + $as_echo_n "checking for poppler... " >&6; } + + if test "$with_poppler" != "no" -a "$with_poppler" != ""; then + +- if test "$with_poppler" = "yes" ; then +- TEST_POPPLER_INC="-I/usr/include -I/usr/include/poppler" +- TEST_POPPLER_LIB="-lpoppler" +- else +- TEST_POPPLER_INC="-I$with_poppler/include -I$with_poppler/include/poppler" +- TEST_POPPLER_LIB="-L$with_poppler/lib -lpoppler" +- fi + +- # Check that we can accept Page::pageObj private member +- rm -f testpoppler.* +- echo '#define private public' > testpoppler.cpp +- echo '#include ' >> testpoppler.cpp +- echo '#include ' >> testpoppler.cpp +- echo 'int main(int argc, char** argv) { return &(((Page*)0x8000)->pageObj) == 0; } ' >> testpoppler.cpp + +- if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -o testpoppler ${TEST_POPPLER_INC} ${TEST_POPPLER_LIB} 2>&1`" ; then +- HAVE_POPPLER=yes +- else +- # poppler 0.23.0 needs to be linked against pthread +- TEST_POPPLER_LIB="${TEST_POPPLER_LIB} -lpthread" +- if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -o testpoppler ${TEST_POPPLER_INC} ${TEST_POPPLER_LIB} 2>&1`" ; then +- HAVE_POPPLER=yes +- fi +- fi ++if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. ++set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_path_PKG_CONFIG+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ case $PKG_CONFIG in ++ [\\/]* | ?:[\\/]*) ++ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ++ ;; ++ *) ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS + +- if test "$HAVE_POPPLER" = "yes"; then +- if test "$PDF_PLUGIN" = "no"; then +- LIBS="${TEST_POPPLER_LIB} ${LIBS}" +- fi +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +-$as_echo "yes" >&6; } +- POPPLER_INC=$TEST_POPPLER_INC +- POPPLER_PLUGIN_LIB="${TEST_POPPLER_LIB}" +- +- CHECK_OTHER_POPPLER_VERSION=yes +- +- 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 ' > 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 ++ ;; ++esac ++fi ++PKG_CONFIG=$ac_cv_path_PKG_CONFIG ++if test -n "$PKG_CONFIG"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 ++$as_echo "$PKG_CONFIG" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "no" >&6; } +- fi +- 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 ' > 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 ++ ++fi ++if test -z "$ac_cv_path_PKG_CONFIG"; then ++ ac_pt_PKG_CONFIG=$PKG_CONFIG ++ # Extract the first word of "pkg-config", so it can be a program name with args. ++set dummy pkg-config; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ case $ac_pt_PKG_CONFIG in ++ [\\/]* | ?:[\\/]*) ++ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ++ ;; ++ *) ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++ ;; ++esac ++fi ++ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG ++if test -n "$ac_pt_PKG_CONFIG"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 ++$as_echo "$ac_pt_PKG_CONFIG" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "no" >&6; } +- fi +- fi ++fi + +- if test "$CHECK_OTHER_POPPLER_VERSION" = "yes"; then +- +- # And now try another dirty thing, but this one is +- # optional. +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Catalog::optContent exists" >&5 +-$as_echo_n "checking if Catalog::optContent exists... " >&6; } +- rm -f testpoppler.* +- echo '#define private public' > testpoppler.cpp +- echo '#include ' >> testpoppler.cpp +- echo '#include ' >> testpoppler.cpp +- echo 'int main(int argc, char** argv) { return &(((Catalog*)0x8000)->optContent) == 0; }' >> testpoppler.cpp +- if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then +- POPPLER_HAS_OPTCONTENT=yes +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++ if test "x$ac_pt_PKG_CONFIG" = x; then ++ PKG_CONFIG="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ PKG_CONFIG=$ac_pt_PKG_CONFIG ++ fi ++else ++ PKG_CONFIG="$ac_cv_path_PKG_CONFIG" ++fi ++ ++fi ++if test -n "$PKG_CONFIG"; then ++ _pkg_min_version=0.21 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 ++$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } ++ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then ++ { $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 ++ PKG_CONFIG="" ++ fi + +- # And now we check if we have Poppler >= 0.16.0 +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if BaseStream constructor needs 2 arguments" >&5 +-$as_echo_n "checking if BaseStream constructor needs 2 arguments... " >&6; } +- rm -f testpoppler.* +- echo '#include ' > testpoppler.cpp +- echo '#include ' >> testpoppler.cpp +- echo 'class TestStream: public BaseStream {' >> testpoppler.cpp +- echo 'public:' >> testpoppler.cpp +- echo ' TestStream() : BaseStream(0,0) {}' >> testpoppler.cpp +- echo '};' >> testpoppler.cpp +- echo 'int main(int argc, char** argv) { return 0; }' >> testpoppler.cpp +- if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then +- POPPLER_BASE_STREAM_HAS_TWO_ARGS=yes +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +-$as_echo "yes" >&6; } ++fi + +- # And now we check if we have Poppler >= 0.20.0 +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we have Poppler >= 0.20.0" >&5 +-$as_echo_n "checking if we have Poppler >= 0.20.0... " >&6; } +- rm -f testpoppler.* +- echo '#include ' > testpoppler.cpp +- echo 'int main(int argc, char** argv) { setErrorCallback(0,0); return 0; }' >> testpoppler.cpp +- if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then +- POPPLER_0_20_OR_LATER=yes +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +-$as_echo "yes" >&6; } ++pkg_failed=no ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER" >&5 ++$as_echo_n "checking for POPPLER... " >&6; } + +- # And now we check if we have Poppler >= 0.23.0 +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we have Poppler >= 0.23.0" >&5 +-$as_echo_n "checking if we have Poppler >= 0.23.0... " >&6; } +- rm -f testpoppler.* +- echo '#include ' > testpoppler.cpp +- echo '#include ' >> testpoppler.cpp +- echo 'class TestStream: public BaseStream {' >> testpoppler.cpp +- echo 'public:' >> testpoppler.cpp +- echo ' TestStream() : BaseStream(0,0) {}' >> testpoppler.cpp +- echo ' ~TestStream() {}' >> testpoppler.cpp +- echo ' virtual BaseStream *copy() { return BaseStream::copy(); }' >> testpoppler.cpp +- echo '};' >> testpoppler.cpp +- echo 'int main(int argc, char** argv) { return 0; }' >> testpoppler.cpp +- if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then +- POPPLER_0_23_OR_LATER=yes +- { $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 ++if test -n "$PKG_CONFIG"; then ++ if test -n "$POPPLER_CFLAGS"; then ++ pkg_cv_POPPLER_CFLAGS="$POPPLER_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"poppler >= 0.23.0\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "poppler >= 0.23.0") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ pkg_cv_POPPLER_CFLAGS=`$PKG_CONFIG --cflags "poppler >= 0.23.0" 2>/dev/null` ++else ++ pkg_failed=yes ++fi ++ fi ++else ++ pkg_failed=untried ++fi ++if test -n "$PKG_CONFIG"; then ++ if test -n "$POPPLER_LIBS"; then ++ pkg_cv_POPPLER_LIBS="$POPPLER_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"poppler >= 0.23.0\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "poppler >= 0.23.0") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ pkg_cv_POPPLER_LIBS=`$PKG_CONFIG --libs "poppler >= 0.23.0" 2>/dev/null` ++else ++ pkg_failed=yes ++fi ++ fi ++else ++ pkg_failed=untried ++fi + +- else +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +-$as_echo "no" >&6; } +- fi + +- else +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +-$as_echo "no" >&6; } +- fi ++ ++if test $pkg_failed = yes; then ++ ++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then ++ _pkg_short_errors_supported=yes ++else ++ _pkg_short_errors_supported=no ++fi ++ if test $_pkg_short_errors_supported = yes; then ++ POPPLER_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "poppler >= 0.23.0"` ++ else ++ POPPLER_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "poppler >= 0.23.0"` + fi +- else +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++ # Put the nasty error message in config.log where it belongs ++ echo "$POPPLER_PKG_ERRORS" >&5 ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "no" >&6; } ++ POPPLER_VERSION= ++elif test $pkg_failed = untried; then ++ POPPLER_VERSION= ++else ++ POPPLER_CFLAGS=$pkg_cv_POPPLER_CFLAGS ++ POPPLER_LIBS=$pkg_cv_POPPLER_LIBS ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++ POPPLER_VERSION=`$PKG_CONFIG --modversion poppler` ++fi ++ if test "$POPPLER_VERSION" != ""; then ++ HAVE_POPPLER=yes ++ POPPLER_MAJOR_VERSION=`expr $POPPLER_VERSION : '\([0-9]*\)'` ++ POPPLER_MINOR_VERSION=`expr $POPPLER_VERSION : '[0-9]*\.\([0-9]*\)'` ++ POPPLER_CFLAGS=`echo $POPPLER_CFLAGS $POPPLER_CFLAGS | sed "s/include\/poppler/include/"` + fi +- rm -f testpoppler.* +- rm -f testpoppler + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 + $as_echo "disabled" >&6; } + fi + +-HAVE_POPPLER=$HAVE_POPPLER +- +-POPPLER_HAS_OPTCONTENT=$POPPLER_HAS_OPTCONTENT +- +-POPPLER_BASE_STREAM_HAS_TWO_ARGS=$POPPLER_BASE_STREAM_HAS_TWO_ARGS +- +-POPPLER_0_20_OR_LATER=$POPPLER_0_20_OR_LATER ++if test "$HAVE_POPPLER" = "yes" -a "$PDF_PLUGIN" = "no"; then ++ LIBS="${POPPLER_LIBS} ${LIBS}" ++fi + +-POPPLER_0_23_OR_LATER=$POPPLER_0_23_OR_LATER ++HAVE_POPPLER=$HAVE_POPPLER + +-POPPLER_0_58_OR_LATER=$POPPLER_0_58_OR_LATER ++POPPLER_MAJOR_VERSION=$POPPLER_MAJOR_VERSION + +-POPPLER_0_69_OR_LATER=$POPPLER_0_69_OR_LATER ++POPPLER_MINOR_VERSION=$POPPLER_MINOR_VERSION + +-POPPLER_INC=$POPPLER_INC ++POPPLER_CFLAGS=$POPPLER_CFLAGS + +-POPPLER_PLUGIN_LIB=$POPPLER_PLUGIN_LIB ++POPPLER_PLUGIN_LIB=$POPPLER_LIBS + + + +diff --git a/gdal/configure.ac b/gdal/configure.ac +index 56500f9ccfd..7f106be74cb 100644 +--- a/gdal/configure.ac ++++ b/gdal/configure.ac +@@ -4539,178 +4539,35 @@ dnl --------------------------------------------------------------------------- + AC_ARG_WITH(poppler,[ --with-poppler[=ARG] Include poppler(for PDF) support (ARG=no(default), yes or poppler install path)],,) + + HAVE_POPPLER=no +-POPPLER_HAS_OPTCONTENT=no +-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 ++POPPLER_MAJOR_VERSION= ++POPPLER_MINOR_VERSION= + + AC_MSG_CHECKING([for poppler]) + + if test "$with_poppler" != "no" -a "$with_poppler" != ""; then + +- if test "$with_poppler" = "yes" ; then +- TEST_POPPLER_INC="-I/usr/include -I/usr/include/poppler" +- TEST_POPPLER_LIB="-lpoppler" +- else +- TEST_POPPLER_INC="-I$with_poppler/include -I$with_poppler/include/poppler" +- TEST_POPPLER_LIB="-L$with_poppler/lib -lpoppler" +- fi +- +- # Check that we can accept Page::pageObj private member +- rm -f testpoppler.* +- echo '#define private public' > testpoppler.cpp +- echo '#include ' >> testpoppler.cpp +- echo '#include ' >> testpoppler.cpp +- echo 'int main(int argc, char** argv) { return &(((Page*)0x8000)->pageObj) == 0; } ' >> testpoppler.cpp +- +- if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -o testpoppler ${TEST_POPPLER_INC} ${TEST_POPPLER_LIB} 2>&1`" ; then ++ PKG_PROG_PKG_CONFIG([0.21]) ++ PKG_CHECK_MODULES([POPPLER], [poppler >= 0.23.0], ++ [POPPLER_VERSION=`$PKG_CONFIG --modversion poppler`], [POPPLER_VERSION=]) ++ if test "$POPPLER_VERSION" != ""; then + HAVE_POPPLER=yes +- else +- # poppler 0.23.0 needs to be linked against pthread +- TEST_POPPLER_LIB="${TEST_POPPLER_LIB} -lpthread" +- if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -o testpoppler ${TEST_POPPLER_INC} ${TEST_POPPLER_LIB} 2>&1`" ; then +- HAVE_POPPLER=yes +- fi ++ POPPLER_MAJOR_VERSION=`expr $POPPLER_VERSION : '\([[0-9]]*\)'` ++ POPPLER_MINOR_VERSION=`expr $POPPLER_VERSION : '[[0-9]]*\.\([[0-9]]*\)'` ++ POPPLER_CFLAGS=`echo $POPPLER_CFLAGS $POPPLER_CFLAGS | sed "s/include\/poppler/include/"` + fi +- +- if test "$HAVE_POPPLER" = "yes"; then +- if test "$PDF_PLUGIN" = "no"; then +- LIBS="${TEST_POPPLER_LIB} ${LIBS}" +- fi +- AC_MSG_RESULT([yes]) +- POPPLER_INC=$TEST_POPPLER_INC +- POPPLER_PLUGIN_LIB="${TEST_POPPLER_LIB}" +- +- CHECK_OTHER_POPPLER_VERSION=yes +- +- if test "$CHECK_OTHER_POPPLER_VERSION" = "yes"; then +- AC_MSG_CHECKING([if OptionalContent has API >= 0.69.0]) +- rm -f testpoppler.* +- echo '#include ' > 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 ' > 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 +- +- # And now try another dirty thing, but this one is +- # optional. +- AC_MSG_CHECKING([if Catalog::optContent exists]) +- rm -f testpoppler.* +- echo '#define private public' > testpoppler.cpp +- echo '#include ' >> testpoppler.cpp +- echo '#include ' >> testpoppler.cpp +- echo 'int main(int argc, char** argv) { return &(((Catalog*)0x8000)->optContent) == 0; }' >> testpoppler.cpp +- if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then +- POPPLER_HAS_OPTCONTENT=yes +- AC_MSG_RESULT([yes]) +- else +- AC_MSG_RESULT([no]) +- fi +- +- # And now we check if we have Poppler >= 0.16.0 +- AC_MSG_CHECKING([if BaseStream constructor needs 2 arguments]) +- rm -f testpoppler.* +- echo '#include ' > testpoppler.cpp +- echo '#include ' >> testpoppler.cpp +- echo 'class TestStream: public BaseStream {' >> testpoppler.cpp +- echo 'public:' >> testpoppler.cpp +- echo ' TestStream() : BaseStream(0,0) {}' >> testpoppler.cpp +- echo '};' >> testpoppler.cpp +- echo 'int main(int argc, char** argv) { return 0; }' >> testpoppler.cpp +- if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then +- POPPLER_BASE_STREAM_HAS_TWO_ARGS=yes +- AC_MSG_RESULT([yes]) +- +- # And now we check if we have Poppler >= 0.20.0 +- AC_MSG_CHECKING([if we have Poppler >= 0.20.0]) +- rm -f testpoppler.* +- echo '#include ' > testpoppler.cpp +- echo 'int main(int argc, char** argv) { setErrorCallback(0,0); return 0; }' >> testpoppler.cpp +- if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then +- POPPLER_0_20_OR_LATER=yes +- AC_MSG_RESULT([yes]) +- +- # And now we check if we have Poppler >= 0.23.0 +- AC_MSG_CHECKING([if we have Poppler >= 0.23.0]) +- rm -f testpoppler.* +- echo '#include ' > testpoppler.cpp +- echo '#include ' >> testpoppler.cpp +- echo 'class TestStream: public BaseStream {' >> testpoppler.cpp +- echo 'public:' >> testpoppler.cpp +- echo ' TestStream() : BaseStream(0,0) {}' >> testpoppler.cpp +- echo ' ~TestStream() {}' >> testpoppler.cpp +- echo ' virtual BaseStream *copy() { return BaseStream::copy(); }' >> testpoppler.cpp +- echo '};' >> testpoppler.cpp +- echo 'int main(int argc, char** argv) { return 0; }' >> testpoppler.cpp +- if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then +- POPPLER_0_23_OR_LATER=yes +- AC_MSG_RESULT([yes]) +- else +- AC_MSG_RESULT([no]) +- fi +- +- else +- AC_MSG_RESULT([no]) +- fi +- +- else +- AC_MSG_RESULT([no]) +- fi +- fi +- else +- AC_MSG_RESULT([no]) +- fi +- rm -f testpoppler.* +- rm -f testpoppler + else + AC_MSG_RESULT([disabled]) + fi + ++if test "$HAVE_POPPLER" = "yes" -a "$PDF_PLUGIN" = "no"; then ++ LIBS="${POPPLER_LIBS} ${LIBS}" ++fi ++ + AC_SUBST(HAVE_POPPLER, $HAVE_POPPLER) +-AC_SUBST(POPPLER_HAS_OPTCONTENT, $POPPLER_HAS_OPTCONTENT) +-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) ++AC_SUBST(POPPLER_MAJOR_VERSION, $POPPLER_MAJOR_VERSION) ++AC_SUBST(POPPLER_MINOR_VERSION, $POPPLER_MINOR_VERSION) ++AC_SUBST(POPPLER_CFLAGS, $POPPLER_CFLAGS) ++AC_SUBST(POPPLER_PLUGIN_LIB, $POPPLER_LIBS) + + dnl --------------------------------------------------------------------------- + dnl Check if libpodofo is available +diff --git a/gdal/frmts/pdf/GNUmakefile b/gdal/frmts/pdf/GNUmakefile +index 6a267f529b2..1ce563a5144 100644 +--- a/gdal/frmts/pdf/GNUmakefile ++++ b/gdal/frmts/pdf/GNUmakefile +@@ -11,31 +11,7 @@ LD_SHARED = $(LD) -bundle + endif + + ifeq ($(HAVE_POPPLER),yes) +-CPPFLAGS += -DHAVE_POPPLER +-endif +- +-ifeq ($(POPPLER_HAS_OPTCONTENT),yes) +-CPPFLAGS += -DPOPPLER_HAS_OPTCONTENT +-endif +- +-ifeq ($(POPPLER_BASE_STREAM_HAS_TWO_ARGS),yes) +-CPPFLAGS += -DPOPPLER_BASE_STREAM_HAS_TWO_ARGS +-endif +- +-ifeq ($(POPPLER_0_20_OR_LATER),yes) +-CPPFLAGS += -DPOPPLER_0_20_OR_LATER +-endif +- +-ifeq ($(POPPLER_0_23_OR_LATER),yes) +-CPPFLAGS += -DPOPPLER_0_23_OR_LATER +-endif +- +-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 ++CPPFLAGS += -DHAVE_POPPLER -DPOPPLER_MAJOR_VERSION=$(POPPLER_MAJOR_VERSION) -DPOPPLER_MINOR_VERSION=$(POPPLER_MINOR_VERSION) + endif + + ifeq ($(HAVE_PODOFO),yes) +diff --git a/gdal/frmts/pdf/pdfdataset.cpp b/gdal/frmts/pdf/pdfdataset.cpp +index 6e8223e4708..27c9b552431 100644 +--- a/gdal/frmts/pdf/pdfdataset.cpp ++++ b/gdal/frmts/pdf/pdfdataset.cpp +@@ -130,7 +130,7 @@ class ObjectAutoFree : public Object + public: + ObjectAutoFree() {} + ~ObjectAutoFree() { +-#ifndef POPPLER_0_58_OR_LATER ++#if !(POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58) + obj.free(); + #endif + } +@@ -176,17 +176,10 @@ class GDALPDFOutputDev : public SplashOutputDev + void SetEnableText(int bFlag) { bEnableText = bFlag; } + void SetEnableBitmap(int bFlag) { bEnableBitmap = bFlag; } + +- virtual void startPage(int pageNum, GfxState *state +-#ifdef POPPLER_0_23_OR_LATER +- ,XRef* xrefIn +-#endif ++ virtual void startPage(int pageNum, GfxState *state,XRef* xrefIn + ) override + { +- SplashOutputDev::startPage(pageNum, state +-#ifdef POPPLER_0_23_OR_LATER +- ,xrefIn +-#endif +- ); ++ SplashOutputDev::startPage(pageNum, state,xrefIn); + SplashBitmap* poBitmap = getBitmap(); + memset(poBitmap->getDataPtr(), 255, poBitmap->getRowSize() * poBitmap->getHeight()); + } +@@ -226,15 +219,6 @@ class GDALPDFOutputDev : public SplashOutputDev + SplashOutputDev::beginTextObject(state); + } + +-#ifndef POPPLER_0_23_OR_LATER +- virtual GBool deviceHasTextClip(GfxState *state) override +- { +- if (bEnableText) +- return SplashOutputDev::deviceHasTextClip(state); +- return gFalse; +- } +-#endif +- + virtual void endTextObject(GfxState *state) override + { + if (bEnableText) +@@ -260,7 +244,6 @@ class GDALPDFOutputDev : public SplashOutputDev + } + } + +-#ifdef POPPLER_0_20_OR_LATER + virtual void setSoftMaskFromImageMask(GfxState *state, + Object *ref, Stream *str, + int width, int height, GBool invert, +@@ -279,7 +262,6 @@ class GDALPDFOutputDev : public SplashOutputDev + if (bEnableBitmap) + SplashOutputDev::unsetSoftMaskFromImageMask(state, baseMatrix); + } +-#endif + + virtual void drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap *colorMap, +@@ -1758,11 +1740,7 @@ CPLErr PDFDataset::ReadPixels( int nReqXOff, int nReqYOff, + } + + PDFDoc* poDoc = poDocPoppler; +-#ifdef POPPLER_0_20_OR_LATER + poSplashOut->startDoc(poDoc); +-#else +- poSplashOut->startDoc(poDoc->getXRef()); +-#endif + + /* EVIL: we modify a private member... */ + /* poppler (at least 0.12 and 0.14 versions) don't render correctly */ +@@ -1770,12 +1748,10 @@ CPLErr PDFDataset::ReadPixels( int nReqXOff, int nReqYOff, + /* in those cases. This processing of optional content is an addition of */ + /* poppler in comparison to original xpdf, which hasn't the issue. All in */ + /* all, nullifying optContent removes the error message and improves the rendering */ +-#ifdef POPPLER_HAS_OPTCONTENT + Catalog* poCatalog = poDoc->getCatalog(); + OCGs* poOldOCGs = poCatalog->optContent; + if (!bUseOCG) + poCatalog->optContent = nullptr; +-#endif + poDoc->displayPageSlice(poSplashOut, + iPage, + dfDPI, dfDPI, +@@ -1785,9 +1761,7 @@ CPLErr PDFDataset::ReadPixels( int nReqXOff, int nReqYOff, + nReqXSize, nReqYSize); + + /* Restore back */ +-#ifdef POPPLER_HAS_OPTCONTENT + poCatalog->optContent = poOldOCGs; +-#endif + + SplashBitmap* poBitmap = poSplashOut->getBitmap(); + if (poBitmap->getWidth() != nReqXSize || poBitmap->getHeight() != nReqYSize) +@@ -2294,7 +2268,7 @@ GDALPDFObject* PDFDataset::GetCatalog() + if (bUseLib.test(PDFLIB_POPPLER)) + { + poCatalogObjectPoppler = new ObjectAutoFree; +-#ifdef POPPLER_0_58_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58 + *poCatalogObjectPoppler->getObj() = poDocPoppler->getXRef()->getCatalog(); + #else + poDocPoppler->getXRef()->getCatalog(poCatalogObjectPoppler->getObj()); +@@ -2592,16 +2566,10 @@ static void PDFDatasetErrorFunctionCommon(const CPLString& osError) + CPLError(CE_Failure, CPLE_AppDefined, "%s", osError.c_str()); + } + +-#ifdef POPPLER_0_20_OR_LATER +- + static void PDFDatasetErrorFunction(void* /* userData*/, + ErrorCategory /* eErrCategory */, +-#ifdef POPPLER_0_23_OR_LATER + Goffset nPos, +-#else +- int nPos, +-#endif +-#ifdef POPPLER_0_71_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 71 + const char *pszMsg + #else + char *pszMsg +@@ -2615,17 +2583,6 @@ static void PDFDatasetErrorFunction(void* /* userData*/, + osError += pszMsg; + PDFDatasetErrorFunctionCommon(osError); + } +-#else +-static void PDFDatasetErrorFunction(int nPos, char *pszMsg, va_list args) +-{ +- CPLString osError; +- +- if (nPos >= 0) +- osError.Printf("Pos = %d, ", nPos); +- osError += CPLString().vPrintf(pszMsg, args); +- PDFDatasetErrorFunctionCommon(osError); +-} +-#endif + #endif + + /************************************************************************/ +@@ -3447,7 +3404,7 @@ void PDFDataset::FindLayersPoppler() + } + else + { +-#ifdef POPPLER_0_69_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 69 + for( const auto& refOCGPair: optContentConfig->getOCGs() ) + { + auto ocg = refOCGPair.second.get(); +@@ -3485,7 +3442,7 @@ void PDFDataset::TurnLayersOnOffPoppler() + { + int i; + int bAll = EQUAL(pszLayers, "ALL"); +-#ifdef POPPLER_0_69_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 69 + for( const auto& refOCGPair: optContentConfig->getOCGs() ) + { + auto ocg = refOCGPair.second.get(); +@@ -4058,7 +4015,7 @@ GDALDataset *PDFDataset::Open( GDALOpenInfo * poOpenInfo ) + GDALPDFObject* poPageObj = nullptr; + #ifdef HAVE_POPPLER + PDFDoc* poDocPoppler = nullptr; +-#ifdef POPPLER_0_58_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58 + Object oObj; + #else + ObjectAutoFree oObj; +@@ -4082,11 +4039,7 @@ GDALDataset *PDFDataset::Open( GDALOpenInfo * poOpenInfo ) + GooString* poUserPwd = nullptr; + + /* Set custom error handler for poppler errors */ +-#ifdef POPPLER_0_20_OR_LATER + setErrorCallback(PDFDatasetErrorFunction, nullptr); +-#else +- setErrorFunction(PDFDatasetErrorFunction); +-#endif + + { + CPLMutexHolderD(&hGlobalParamsMutex); +@@ -4109,7 +4062,7 @@ GDALDataset *PDFDataset::Open( GDALOpenInfo * poOpenInfo ) + if (pszUserPwd) + poUserPwd = new GooString(pszUserPwd); + +-#ifdef POPPLER_0_58_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58 + poDocPoppler = new PDFDoc(new VSIPDFFileStream(fp, pszFilename, std::move(oObj)), nullptr, poUserPwd); + #else + oObj.getObj()->initNull(); +@@ -4803,14 +4756,14 @@ GDALDataset *PDFDataset::Open( GDALOpenInfo * poOpenInfo ) + if( poDocPoppler->getXRef()->isOk() ) + { + Object oInfo; +-#ifdef POPPLER_0_58_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58 + oInfo = poDocPoppler->getDocInfo(); + #else + poDocPoppler->getDocInfo(&oInfo); + #endif + GDALPDFObjectPoppler oInfoObjPoppler(&oInfo, FALSE); + poDS->ParseInfo(&oInfoObjPoppler); +-#ifndef POPPLER_0_58_OR_LATER ++#if !(POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58) + oInfo.free(); + #endif + } +diff --git a/gdal/frmts/pdf/pdfio.cpp b/gdal/frmts/pdf/pdfio.cpp +index 582d0632b41..7850e0d292a 100644 +--- a/gdal/frmts/pdf/pdfio.cpp ++++ b/gdal/frmts/pdf/pdfio.cpp +@@ -36,7 +36,6 @@ + + CPL_CVSID("$Id: pdfio.cpp 7e07230bbff24eb333608de4dbd460b7312839d0 2017-12-11 19:08:47Z Even Rouault $") + +-#ifdef POPPLER_BASE_STREAM_HAS_TWO_ARGS + /* Poppler 0.31.0 is the first one that needs to know the file size */ + static vsi_l_offset VSIPDFFileStreamGetSize(VSILFILE* f) + { +@@ -45,7 +44,6 @@ static vsi_l_offset VSIPDFFileStreamGetSize(VSILFILE* f) + VSIFSeekL(f, 0, SEEK_SET); + return nSize; + } +-#endif + + /************************************************************************/ + /* VSIPDFFileStream() */ +@@ -55,12 +53,10 @@ VSIPDFFileStream::VSIPDFFileStream( + VSILFILE* fIn, const char* pszFilename, + makeSubStream_object_type dictA + ) : +-#ifdef POPPLER_0_58_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58 + BaseStream(std::move(dictA), (Goffset)VSIPDFFileStreamGetSize(fIn)), +-#elif defined(POPPLER_BASE_STREAM_HAS_TWO_ARGS) +- BaseStream(dictA, (setPos_offset_type)VSIPDFFileStreamGetSize(fIn)), + #else +- BaseStream(dictA), ++ BaseStream(dictA, (setPos_offset_type)VSIPDFFileStreamGetSize(fIn)), + #endif + poParent(nullptr), + poFilename(new GooString(pszFilename)), +@@ -83,12 +79,10 @@ VSIPDFFileStream::VSIPDFFileStream( VSIPDFFileStream* poParentIn, + vsi_l_offset startA, GBool limitedA, + vsi_l_offset lengthA, + makeSubStream_object_type dictA) : +-#ifdef POPPLER_0_58_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58 + BaseStream(std::move(dictA), (Goffset)lengthA), +-#elif defined(POPPLER_BASE_STREAM_HAS_TWO_ARGS) +- BaseStream(dictA, (makeSubStream_offset_type)lengthA), + #else +- BaseStream(dictA), ++ BaseStream(dictA, (makeSubStream_offset_type)lengthA), + #endif + poParent(poParentIn), + poFilename(poParentIn->poFilename), +@@ -122,13 +116,13 @@ VSIPDFFileStream::~VSIPDFFileStream() + /* copy() */ + /************************************************************************/ + +-#ifdef POPPLER_0_58_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58 + BaseStream* VSIPDFFileStream::copy() + { + return new VSIPDFFileStream(poParent, nStart, bLimited, + nLength, dict.copy()); + } +-#elif defined(POPPLER_0_23_OR_LATER) ++#else + BaseStream* VSIPDFFileStream::copy() + { + return new VSIPDFFileStream(poParent, nStart, bLimited, +@@ -142,7 +136,7 @@ BaseStream* VSIPDFFileStream::copy() + Stream *VSIPDFFileStream::makeSubStream(makeSubStream_offset_type startA, GBool limitedA, + makeSubStream_offset_type lengthA, makeSubStream_object_type dictA) + { +-#ifdef POPPLER_0_58_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58 + return new VSIPDFFileStream(this, + startA, limitedA, + lengthA, std::move(dictA)); +diff --git a/gdal/frmts/pdf/pdfio.h b/gdal/frmts/pdf/pdfio.h +index 2d58059e801..7ae15c88aa3 100644 +--- a/gdal/frmts/pdf/pdfio.h ++++ b/gdal/frmts/pdf/pdfio.h +@@ -38,34 +38,27 @@ + + #define BUFFER_SIZE 1024 + +-#ifdef POPPLER_0_23_OR_LATER + #define getPos_ret_type Goffset + #define getStart_ret_type Goffset + #define makeSubStream_offset_type Goffset + #define setPos_offset_type Goffset + #define moveStart_delta_type Goffset +-#else +-#define getPos_ret_type int +-#define getStart_ret_type Guint +-#define makeSubStream_offset_type Guint +-#define setPos_offset_type Guint +-#define moveStart_delta_type int +-#endif + +-#ifdef POPPLER_0_58_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58 + #define makeSubStream_object_type Object&& + #else + #define makeSubStream_object_type Object* + #endif + + // Detect Poppler 0.71 that no longer defines GBool +-#ifdef POPPLER_0_69_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 69 + #ifndef initObj +-#define POPPLER_0_71_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 71 + #define GBool bool + #define gFalse false + #endif + #endif ++#endif + + class VSIPDFFileStream final: public BaseStream + { +@@ -78,9 +71,7 @@ class VSIPDFFileStream final: public BaseStream + makeSubStream_object_type dictA); + virtual ~VSIPDFFileStream(); + +-#ifdef POPPLER_0_23_OR_LATER + virtual BaseStream* copy() override; +-#endif + + virtual Stream * makeSubStream(makeSubStream_offset_type startA, GBool limitedA, + makeSubStream_offset_type lengthA, makeSubStream_object_type dictA) override; +@@ -102,7 +93,6 @@ class VSIPDFFileStream final: public BaseStream + virtual void close() override; + + private: +-#ifdef POPPLER_BASE_STREAM_HAS_TWO_ARGS + /* 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, +@@ -110,10 +100,6 @@ class VSIPDFFileStream final: public BaseStream + */ + virtual GBool hasGetChars() override; + virtual int getChars(int nChars, Guchar *buffer) override; +-#else +- virtual GBool hasGetChars() ; +- virtual int getChars(int nChars, Guchar *buffer) ; +-#endif + + VSIPDFFileStream *poParent; + GooString *poFilename; +diff --git a/gdal/frmts/pdf/pdfobject.cpp b/gdal/frmts/pdf/pdfobject.cpp +index e8929aa1810..cc87a8ec258 100644 +--- a/gdal/frmts/pdf/pdfobject.cpp ++++ b/gdal/frmts/pdf/pdfobject.cpp +@@ -971,7 +971,7 @@ class GDALPDFStreamPoppler : public GDALPDFStream + + GDALPDFObjectPoppler::~GDALPDFObjectPoppler() + { +-#ifndef POPPLER_0_58_OR_LATER ++#if !(POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58) + m_po->free(); + #endif + if (m_bDestroy) +@@ -1055,7 +1055,7 @@ const CPLString& GDALPDFObjectPoppler::GetString() + { + if (GetType() == PDFObjectType_String) + { +-#ifdef POPPLER_0_58_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58 + // At least available since poppler 0.41 + const GooString* gooString = m_po->getString(); + #else +@@ -1189,7 +1189,7 @@ GDALPDFObject* GDALPDFDictionaryPoppler::Get(const char* pszKey) + if (oIter != m_map.end()) + return oIter->second; + +-#ifdef POPPLER_0_58_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58 + Object o = m_poDict->lookupNF(((char*)pszKey)); + if (!o.isNull()) + { +@@ -1323,7 +1323,7 @@ GDALPDFObject* GDALPDFArrayPoppler::Get(int nIndex) + if (m_v[nIndex] != nullptr) + return m_v[nIndex]; + +-#ifdef POPPLER_0_58_OR_LATER ++#if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58 + Object o = m_poArray->getNF(nIndex); + if( !o.isNull() ) + { +diff --git a/gdal/nmake.opt b/gdal/nmake.opt +index 318f9ed784c..96f52297f25 100644 +--- a/gdal/nmake.opt ++++ b/gdal/nmake.opt +@@ -640,20 +640,11 @@ OCI_INCLUDE = -I$(ORACLE_HOME)\oci\include + #ZLIB_INC = -IC:\projects\zlib + #ZLIB_LIB = C:\projects\lib\Release\zlib.lib + +-# Uncomment for PDF support +-# Uncomment POPPLER_BASE_STREAM_HAS_TWO_ARGS = YES for Poppler >= 0.16.0 +-# 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 ++# Uncomment for PDF support, and update version numbers (poppler 0.23 or later required) + #POPPLER_ENABLED = YES + #POPPLER_CFLAGS = -Ie:/kde/include -Ie:/kde/include/poppler +-#POPPLER_HAS_OPTCONTENT = YES +-#POPPLER_BASE_STREAM_HAS_TWO_ARGS = YES +-#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_MAJOR_VERSION = 0 ++#POPPLER_MINOR_VERSION = 69 + #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 diff --git a/add-support-for-poppler-0.72.0-and-0.73.0.patch b/add-support-for-poppler-0.72.0-and-0.73.0.patch new file mode 100644 index 0000000..ab5af7b --- /dev/null +++ b/add-support-for-poppler-0.72.0-and-0.73.0.patch @@ -0,0 +1,74 @@ +From d295d0ebc3b41092ad072790c704c772098da210 Mon Sep 17 00:00:00 2001 +From: Even Rouault +Date: Thu, 17 Jan 2019 22:52:36 +0100 +Subject: [PATCH] PDF: add support for 0.72.0 and 0.73.0 (fixes #1207, fixes + #1208) + +--- + gdal/frmts/pdf/pdfdataset.cpp | 8 ++++++++ + gdal/frmts/pdf/pdfobject.cpp | 5 +++++ + gdal/frmts/pdf/pdfsdk_headers.h | 4 ++++ + 3 files changed, 17 insertions(+) + +diff --git a/gdal/frmts/pdf/pdfdataset.cpp b/gdal/frmts/pdf/pdfdataset.cpp +index 27c9b552431..2eff2189fad 100644 +--- a/gdal/frmts/pdf/pdfdataset.cpp ++++ b/gdal/frmts/pdf/pdfdataset.cpp +@@ -3416,7 +3416,11 @@ void PDFDataset::FindLayersPoppler() + #endif + if( ocg != nullptr && ocg->getName() != nullptr ) + { ++#if (POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 72) ++ const char* pszLayerName = (const char*)ocg->getName()->c_str(); ++#else + const char* pszLayerName = (const char*)ocg->getName()->getCString(); ++#endif + AddLayer(pszLayerName); + oLayerOCGMapPoppler[pszLayerName] = ocg; + } +@@ -4740,7 +4744,11 @@ GDALDataset *PDFDataset::Open( GDALOpenInfo * poOpenInfo ) + GooString* poMetadata = poCatalogPoppler->readMetadata(); + if (poMetadata) + { ++#if (POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 72) ++ const char* pszContent = poMetadata->c_str(); ++#else + const char* pszContent = poMetadata->getCString(); ++#endif + if (pszContent != nullptr && + STARTS_WITH(pszContent, "getString(); + #endif ++#if (POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 72) ++ return (osStr = GDALPDFGetUTF8StringFromBytes(reinterpret_cast(gooString->c_str()), ++ static_cast(gooString->getLength()))); ++#else + return (osStr = GDALPDFGetUTF8StringFromBytes(reinterpret_cast(gooString->getCString()), + static_cast(gooString->getLength()))); ++#endif + } + else + return (osStr = ""); +diff --git a/gdal/frmts/pdf/pdfsdk_headers.h b/gdal/frmts/pdf/pdfsdk_headers.h +index 9150b0f4102..41e48ae91d6 100644 +--- a/gdal/frmts/pdf/pdfsdk_headers.h ++++ b/gdal/frmts/pdf/pdfsdk_headers.h +@@ -50,7 +50,11 @@ + #pragma warning( disable : 4244 ) /* conversion from 'const int' to 'Guchar', possible loss of data */ + #endif + ++#if !(POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 73) + #include ++#else ++typedef unsigned char Guchar; ++#endif + #include + + /* begin of poppler xpdf includes */ diff --git a/gdal.changes b/gdal.changes index 64cd436..44279ea 100644 --- a/gdal.changes +++ b/gdal.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Wed Jan 30 19:51:14 UTC 2019 - Wolfgang Bauer + +- Add upstream patches to fix build with the latest poppler in + Tumbleweed: + * Poppler-revision-version-management.patch + * add-support-for-poppler-0.72.0-and-0.73.0.patch + ------------------------------------------------------------------- Mon Dec 24 09:59:19 UTC 2018 - Guillaume GARDET diff --git a/gdal.spec b/gdal.spec index b8a8af9..9baa16c 100644 --- a/gdal.spec +++ b/gdal.spec @@ -35,6 +35,10 @@ Source1: http://download.osgeo.org/%{name}/%{version}/%{sourcename}-%{ver Patch0: gdal-perl.patch # Fix occasional parallel build failure Patch1: GDALmake.opt.in.patch +# PATCH-FIX-UPSTREAM -- https://github.com/OSGeo/gdal/commit/d9ff536713c1bcaff00657f5fb9a94f36b92c0d8 +Patch2: Poppler-revision-version-management.patch +# PATCH-FIX-UPSTREAM -- https://github.com/OSGeo/gdal/commit/d295d0ebc3b41092ad072790c704c772098da210 +Patch3: add-support-for-poppler-0.72.0-and-0.73.0.patch BuildRequires: KEALib-devel BuildRequires: blas-devel BuildRequires: chrpath @@ -169,6 +173,8 @@ The GDAL python modules provide support to handle multiple GIS file formats. %setup -q -n %{sourcename}-%{version} %patch0 -p1 %patch1 -p1 +%patch2 -p2 +%patch3 -p2 # Set the right (build) libproj.so version PROJSOVER=$(ls -1 %_libdir/libproj.so.?? | awk -F '.' '{print $3}')