summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Astals Cid <aacid@kde.org>2017-05-21 18:42:15 +0200
committerAlbert Astals Cid <aacid@kde.org>2017-05-21 18:43:32 +0200
commit65c5a5266462244130f110599ac5d1011a04216e (patch)
treea4335d99d566e7d4c8d73df79fc6f2fa9307acb0
parentea6d3200ae26775dcc26ed80fad18ca51e7f7f07 (diff)
Fail by default if libopenjpeg2/1 is not available
You can "force" to use the unmaintained JPX decoder or none at all
-rw-r--r--CMakeLists.txt30
-rw-r--r--config.h.cmake3
-rw-r--r--configure.ac29
-rw-r--r--poppler/Stream.cc5
4 files changed, 60 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 15e01222..58952e47 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,7 +37,7 @@ option(BUILD_CPP_TESTS "Whether compile the CPP test programs." ON)
option(ENABLE_SPLASH "Build the Splash graphics backend." ON)
option(ENABLE_UTILS "Compile poppler command line utils." ON)
option(ENABLE_CPP "Compile poppler cpp wrapper." ON)
-set(ENABLE_LIBOPENJPEG "auto" CACHE STRING "Use libopenjpeg for JPX streams. Possible values: auto, openjpeg1, openjpeg2. 'auto' prefers openjpeg2 over openjpeg1 if both are available. Unset to not use openjpeg.")
+set(ENABLE_LIBOPENJPEG "auto" CACHE STRING "Use libopenjpeg for JPX streams. Possible values: auto, openjpeg1, openjpeg2, unmaintained, none. 'auto' prefers openjpeg2 over openjpeg1 if both are available. 'unmaintained' gives you the internal unmaintained decoder. Use at your own risk. 'none' compiles no JPX decoder at all. Default: auto")
set(ENABLE_CMS "auto" CACHE STRING "Use color management system. Possible values: auto, lcms1, lcms2. 'auto' prefers lcms2 over lcms1 if both are available. Unset to disable color management system.")
set(ENABLE_DCTDECODER "libjpeg" CACHE STRING "Use libjpeg for DCT streams. Possible values: libjpeg, unmaintained, none. will use libjpeg if available or fail if not. 'unmaintained' gives you the internal unmaintained decoder. Use at your own risk. 'none' compiles no DCT decoder at all. Default: libjpeg")
option(ENABLE_LIBCURL "Build libcurl based HTTP support." OFF)
@@ -191,15 +191,35 @@ if(ENABLE_LIBOPENJPEG STREQUAL "auto")
find_package(LIBOPENJPEG)
set(USE_OPENJPEG1 ${LIBOPENJPEG_FOUND})
set(WITH_OPENJPEG ${LIBOPENJPEG_FOUND})
+ if(NOT LIBOPENJPEG_FOUND)
+ message(FATAL_ERROR "Install libopenjpeg2 or libopenjpeg1 before trying to build poppler. You can also decide to use the internal unmaintained JPX decoder or none at all.")
+ endif()
endif()
+ set(HAVE_JPX_DECODER ON)
elseif(ENABLE_LIBOPENJPEG STREQUAL "openjpeg1")
find_package(LIBOPENJPEG)
set(USE_OPENJPEG1 ${LIBOPENJPEG_FOUND})
set(WITH_OPENJPEG ${LIBOPENJPEG_FOUND})
+ if(NOT LIBOPENJPEG_FOUND)
+ message(FATAL_ERROR "Install libopenjpeg1 before trying to build poppler. You can also decide to use the internal unmaintained JPX decoder or none at all.")
+ endif()
+ set(HAVE_JPX_DECODER ON)
elseif(ENABLE_LIBOPENJPEG STREQUAL "openjpeg2")
find_package(LIBOPENJPEG2)
set(USE_OPENJPEG2 ${LIBOPENJPEG2_FOUND})
set(WITH_OPENJPEG ${LIBOPENJPEG2_FOUND})
+ if(NOT LIBOPENJPEG2_FOUND)
+ message(FATAL_ERROR "Install libopenjpeg2 before trying to build poppler. You can also decide to use the internal unmaintained JPX decoder or none at all.")
+ endif()
+ set(HAVE_JPX_DECODER ON)
+elseif(ENABLE_LIBOPENJPEG STREQUAL "unmaintained")
+ set(WITH_OPENJPEG OFF)
+ set(HAVE_JPX_DECODER ON)
+elseif(ENABLE_LIBOPENJPEG STREQUAL "none")
+ set(WITH_OPENJPEG OFF)
+ set(HAVE_JPX_DECODER OFF)
+else()
+ message(FATAL_ERROR "Invalid ENABLE_LIBOPENJPEG value: ${ENABLE_LIBOPENJPEG}")
endif()
set(ENABLE_LIBOPENJPEG "${WITH_OPENJPEG}")
if(ENABLE_CMS STREQUAL "auto")
@@ -797,6 +817,10 @@ if(ENABLE_ZLIB_UNCOMPRESS)
message("Warning: Using zlib is not totally safe")
endif(ENABLE_ZLIB_UNCOMPRESS)
-if(NOT WITH_OPENJPEG)
+if(NOT WITH_OPENJPEG AND HAVE_JPX_DECODER)
message("Warning: Using libopenjpeg2 is recommended. The internal JPX decoder is unmaintained.")
-endif(NOT WITH_OPENJPEG)
+endif()
+
+if(NOT HAVE_JPX_DECODER)
+ message("Warning: You're not compiling any JPX decoder. Some files will fail to display properly.")
+endif()
diff --git a/config.h.cmake b/config.h.cmake
index db7bfcb3..4a4da624 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -33,6 +33,9 @@
/* Do we have any DCT decoder?. */
#cmakedefine HAVE_DCT_DECODER 1
+/* Do we have any JPX decoder?. */
+#cmakedefine HAVE_JPX_DECODER 1
+
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
*/
#cmakedefine HAVE_DIRENT_H 1
diff --git a/configure.ac b/configure.ac
index 899c45dc..a2cb046d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -201,8 +201,8 @@ dnl ##### Test for libopenjpeg. Versions prior to 1.4 do not provide a pkgconfig
openjpeg1="no"
openjpeg2="no"
AC_ARG_ENABLE(libopenjpeg,
- AC_HELP_STRING([--enable-libopenjpeg=@<:@auto/openjpeg1/openjpeg2/none@:>@],
- [Use openjpeg for JPEG2000 images. 'auto' prefers openjpeg2 over openjpeg1 if both are available [[default=auto]]]),
+ AC_HELP_STRING([--enable-libopenjpeg=@<:@auto/openjpeg1/openjpeg2/unmaintained/none@:>@],
+ [Use openjpeg for JPEG2000 images. 'auto' prefers openjpeg2 over openjpeg1 if both are available. 'unmaintained' gives you the internal unmaintained decoder. Use at your own risk. 'none' compiles no JPX decoder at all. [[default=auto]]]),
[enable_libopenjpeg=$enableval],
[enable_libopenjpeg="auto"])
@@ -258,10 +258,27 @@ if test x$openjpeg1 = xyes || test x$openjpeg2 = xyes; then
[AC_DEFINE(WITH_OPENJPEG_IGNORE_PCLR_CMAP_CDEF_FLAG, 1, [OpenJPEG with the OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG flag.])],
[])
])
+ have_jpx_decoder=yes
+ AC_DEFINE(HAVE_JPX_DECODER)
else
- enable_libopenjpeg=no
+ if test x$enable_libopenjpeg = xunmaintained; then
+ enable_libopenjpeg=no
+ have_jpx_decoder=yes
+ AC_DEFINE(HAVE_JPX_DECODER)
+ elif test x$enable_libopenjpeg = xnone; then
+ enable_libopenjpeg=no
+ have_jpx_decoder=no
+ else
+ if test x$enable_libopenjpeg = xopenjpeg2 || test x$enable_libopenjpeg = xopenjpeg1 || test x$enable_libopenjpeg = xauto; then
+ AC_MSG_ERROR([Install libopenjpeg2 or libopenjpeg1 before trying to build poppler. You can also decide to use the internal unmaintained JPX decoder or none at all. See --help.])
+ else
+ AC_MSG_ERROR([Invalid --enable-libopenjpeg value. See --help.])
+ fi
+ fi
fi
+AH_TEMPLATE([HAVE_JPX_DECODER], [Do we have any JPX decoder?.])
+
dnl Test for NSS
AC_ARG_ENABLE(libnss,
AC_HELP_STRING([--disable-libnss],
@@ -1108,6 +1125,10 @@ if test x$enable_zlib_uncompress != xno; then
echo " Warning: Using zlib for decompression is not totally safe"
fi
-if test x$enable_libopenjpeg != xyes; then
+if test x$enable_libopenjpeg != xyes -a x$have_jpx_decoder = xyes; then
echo " Warning: Using libopenjpeg2 is recommended. The internal JPX decoder is unmaintained."
fi
+
+if test x$have_jpx_decoder = xno; then
+ echo " Warning: You're not compiling any JPX decoder. Some files will fail to display properly."
+fi
diff --git a/poppler/Stream.cc b/poppler/Stream.cc
index d1abf3ff..4ac91078 100644
--- a/poppler/Stream.cc
+++ b/poppler/Stream.cc
@@ -353,7 +353,12 @@ Stream *Stream::makeFilter(char *name, Stream *str, Object *params, int recursio
globals.free();
obj.free();
} else if (!strcmp(name, "JPXDecode")) {
+#ifdef HAVE_JPX_DECODER
str = new JPXStream(str);
+#else
+ error(errSyntaxError, getPos(), "Unknown filter '{0:s}'", name);
+ str = new EOFStream(str);
+#endif
} else if (!strcmp(name, "Crypt")) {
if (str->getKind() == strCrypt) {
str = str->getBaseStream();