diff options
author | Vasily Melenchuk <vasily.melenchuk@cib.de> | 2022-09-19 09:31:04 +0200 |
---|---|---|
committer | Thorsten Behrens <thorsten.behrens@allotropia.de> | 2022-09-19 16:09:12 +0200 |
commit | 9457530f9638d61ca8974bc337892ee094cc2277 (patch) | |
tree | 93a2336c5330b1edd3a97fa6e9fd0525299f6cc3 | |
parent | c4936191992c061f602c57e225998a241ffa9834 (diff) |
Fix poppler 22.09.0 for winodwscib-6.1-37
VS2015 misses a few c++11 features, patch them out.
Change-Id: Iba1faaefb03275e944bf577ec3abe1b4275f9869
-rw-r--r-- | external/poppler/StaticLibrary_poppler.mk | 5 | ||||
-rw-r--r-- | external/poppler/UnpackedTarball_poppler.mk | 6 | ||||
-rw-r--r-- | external/poppler/poppler-vs2015-buildfix.patch.1 | 1707 | ||||
-rw-r--r-- | sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx | 4 | ||||
-rw-r--r-- | sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx | 8 |
5 files changed, 1723 insertions, 7 deletions
diff --git a/external/poppler/StaticLibrary_poppler.mk b/external/poppler/StaticLibrary_poppler.mk index 7eb541650373..cc43e873c4f2 100644 --- a/external/poppler/StaticLibrary_poppler.mk +++ b/external/poppler/StaticLibrary_poppler.mk @@ -11,7 +11,10 @@ $(eval $(call gb_StaticLibrary_StaticLibrary,poppler)) $(eval $(call gb_StaticLibrary_use_unpacked,poppler,poppler)) -$(eval $(call gb_StaticLibrary_use_external,poppler,libjpeg)) +$(eval $(call gb_StaticLibrary_use_externals,poppler,\ + libjpeg \ + boost_headers \ +)) $(eval $(call gb_StaticLibrary_set_warnings_not_errors,poppler)) diff --git a/external/poppler/UnpackedTarball_poppler.mk b/external/poppler/UnpackedTarball_poppler.mk index c08daa992060..ca7989c5ecaa 100644 --- a/external/poppler/UnpackedTarball_poppler.mk +++ b/external/poppler/UnpackedTarball_poppler.mk @@ -20,6 +20,12 @@ $(eval $(call gb_UnpackedTarball_add_patches,poppler,\ external/poppler/gcc7-EntityInfo.patch.1 \ )) +ifeq ($(OS),WNT) +$(eval $(call gb_UnpackedTarball_add_patches,poppler,\ + external/poppler/poppler-vs2015-buildfix.patch.1 \ +)) +endif + # std::make_unique is only available in C++14 # use "env -i" to avoid Cygwin "environment is too large for exec" # Mac OS X sed says "sed: RE error: illegal byte sequence"; Apple clang should diff --git a/external/poppler/poppler-vs2015-buildfix.patch.1 b/external/poppler/poppler-vs2015-buildfix.patch.1 new file mode 100644 index 000000000000..573eae32f7b1 --- /dev/null +++ b/external/poppler/poppler-vs2015-buildfix.patch.1 @@ -0,0 +1,1707 @@ +Remove a few c++11-isms to fix build on VS201 + +diff -ur workdir/UnpackedTrball/poppler/glib/poppler-document.cc poppler/glib/poppler-document.cc +--- poppler/glib/poppler-document.cc 2022-09-16 21:58:38.029530600 +0300 ++++ poppler/glib/poppler-document.cc 2022-09-16 16:27:33.387683800 +0300 +@@ -159,7 +159,7 @@ + return document; + } + +-static std::optional<GooString> poppler_password_to_latin1(const gchar *password) ++static boost::optional<GooString> poppler_password_to_latin1(const gchar *password) + { + gchar *password_latin; + +@@ -168,7 +168,7 @@ + } + + password_latin = g_convert(password, -1, "ISO-8859-1", "UTF-8", nullptr, nullptr, nullptr); +- std::optional<GooString> password_g = GooString(password_latin); ++ boost::optional<GooString> password_g = GooString(password_latin); + g_free(password_latin); + + return password_g; +@@ -198,7 +198,7 @@ + return nullptr; + } + +- const std::optional<GooString> password_g = poppler_password_to_latin1(password); ++ const boost::optional<GooString> password_g = poppler_password_to_latin1(password); + + #ifdef G_OS_WIN32 + wchar_t *filenameW; +@@ -262,7 +262,7 @@ + // create stream + str = new MemStream(data, 0, length, Object(objNull)); + +- const std::optional<GooString> password_g = poppler_password_to_latin1(password); ++ const boost::optional<GooString> password_g = poppler_password_to_latin1(password); + newDoc = new PDFDoc(str, password_g, password_g); + if (!newDoc->isOk() && newDoc->getErrorCode() == errEncrypted && password) { + /* Try again with original password (which comes from GTK in UTF8) Issue #824 */ +@@ -327,7 +327,7 @@ + // create stream + str = new BytesStream(bytes, Object(objNull)); + +- const std::optional<GooString> password_g = poppler_password_to_latin1(password); ++ const boost::optional<GooString> password_g = poppler_password_to_latin1(password); + newDoc = new PDFDoc(str, password_g, password_g); + if (!newDoc->isOk() && newDoc->getErrorCode() == errEncrypted && password) { + /* Try again with original password (which comes from GTK in UTF8) Issue #824 */ +@@ -391,7 +391,7 @@ + str = new CachedFileStream(cachedFile, 0, false, cachedFile->getLength(), Object(objNull)); + } + +- const std::optional<GooString> password_g = poppler_password_to_latin1(password); ++ const boost::optional<GooString> password_g = poppler_password_to_latin1(password); + newDoc = new PDFDoc(str, password_g, password_g); + if (!newDoc->isOk() && newDoc->getErrorCode() == errEncrypted && password) { + /* Try again with original password (which comes from GTK in UTF8) Issue #824 */ +@@ -515,7 +515,7 @@ + stream = new OwningFileStream(GooFile::open(fd), Object(objNull)); + } + +- const std::optional<GooString> password_g = poppler_password_to_latin1(password); ++ const boost::optional<GooString> password_g = poppler_password_to_latin1(password); + newDoc = new PDFDoc(stream, password_g, password_g); + if (!newDoc->isOk() && newDoc->getErrorCode() == errEncrypted && password) { + /* Try again with original password (which comes from GTK in UTF8) Issue #824 */ +@@ -2839,7 +2839,7 @@ + + info = iter->items[iter->index]; + +- const std::optional<std::string> &name = info->getName(); ++ const boost::optional<std::string> &name = info->getName(); + if (name) { + return name->c_str(); + } else { +@@ -2893,7 +2893,7 @@ + + info = iter->items[iter->index]; + +- const std::optional<std::string> &name = info->getSubstituteName(); ++ const boost::optional<std::string> &name = info->getSubstituteName(); + if (name) { + return name->c_str(); + } else { +@@ -2916,7 +2916,7 @@ + + info = iter->items[iter->index]; + +- const std::optional<std::string> &file = info->getFile(); ++ const boost::optional<std::string> &file = info->getFile(); + if (file) { + return file->c_str(); + } else { +diff -ur poppler/goo/GooString.h poppler/goo/GooString.h +--- poppler/goo/GooString.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/goo/GooString.h 2022-09-16 16:27:39.202358800 +0300 +@@ -246,8 +246,8 @@ + // Return true if string ends with suffix + POPPLER_PRIVATE_EXPORT bool endsWith(const char *suffix) const; + +- static bool startsWith(std::string_view str, std::string_view prefix) { return str.size() >= prefix.size() && 0 == str.compare(0, prefix.size(), prefix); } +- static bool endsWith(std::string_view str, std::string_view suffix) { return str.size() >= suffix.size() && 0 == str.compare(str.size() - suffix.size(), suffix.size(), suffix); } ++ static bool startsWith(const std::string &str, const std::string &prefix) { return str.size() >= prefix.size() && 0 == str.compare(0, prefix.size(), prefix); } ++ static bool endsWith(const std::string &str, const std::string &suffix) { return str.size() >= suffix.size() && 0 == str.compare(str.size() - suffix.size(), suffix.size(), suffix); } + + bool hasUnicodeMarker() const { return hasUnicodeMarker(*this); } + static bool hasUnicodeMarker(const std::string &s) { return s.size() >= 2 && s[0] == '\xfe' && s[1] == '\xff'; } +diff -ur poppler/poppler/Annot.cc poppler/poppler/Annot.cc +--- poppler/poppler/Annot.cc 2022-09-16 21:58:39.610103800 +0300 ++++ poppler/poppler/Annot.cc 2022-09-16 16:32:09.879243000 +0300 +@@ -1258,7 +1258,7 @@ + // Annot + //------------------------------------------------------------------------ + +-#define annotLocker() const std::scoped_lock locker(mutex) ++#define annotLocker() std::unique_lock<std::recursive_mutex> locker(mutex) + + Annot::Annot(PDFDoc *docA, PDFRectangle *rectA) + { +@@ -3020,7 +3020,7 @@ + public: + HorizontalTextLayouter() = default; + +- HorizontalTextLayouter(const GooString *text, const Form *form, const GfxFont *font, std::optional<double> availableWidth, const bool noReencode) ++ HorizontalTextLayouter(const GooString *text, const Form *form, const GfxFont *font, boost::optional<double> availableWidth, const bool noReencode) + { + int i = 0; + double blockWidth; +diff -ur poppler/poppler/Array.cc poppler/poppler/Array.cc +--- poppler/poppler/Array.cc 2022-09-16 21:58:39.678843800 +0300 ++++ poppler/poppler/Array.cc 2022-09-16 16:32:14.266553700 +0300 +@@ -36,7 +36,7 @@ + // Array + //------------------------------------------------------------------------ + +-#define arrayLocker() const std::scoped_lock locker(mutex) ++#define arrayLocker() std::unique_lock<std::recursive_mutex> locker(mutex) + + Array::Array(XRef *xrefA) + { +diff -ur poppler/poppler/CairoFontEngine.cc poppler/poppler/CairoFontEngine.cc +--- poppler/poppler/CairoFontEngine.cc 2022-09-16 21:58:39.910021100 +0300 ++++ poppler/poppler/CairoFontEngine.cc 2022-09-16 16:32:26.488191000 +0300 +@@ -163,7 +163,7 @@ + CairoFreeTypeFont::~CairoFreeTypeFont() { } + + // Create a cairo_font_face_t for the given font filename OR font data. +-static std::optional<FreeTypeFontFace> createFreeTypeFontFace(FT_Library lib, const std::string &filename, std::vector<unsigned char> &&font_data) ++static boost::optional<FreeTypeFontFace> createFreeTypeFontFace(FT_Library lib, const std::string &filename, std::vector<unsigned char> &&font_data) + { + FreeTypeFontResource *resource = new FreeTypeFontResource; + FreeTypeFontFace font_face; +@@ -196,7 +196,7 @@ + + // Create a cairo_font_face_t for the given font filename OR font data. First checks if external font + // is in the cache. +-std::optional<FreeTypeFontFace> CairoFreeTypeFont::getFreeTypeFontFace(CairoFontEngine *fontEngine, FT_Library lib, const std::string &filename, std::vector<unsigned char> &&font_data) ++boost::optional<FreeTypeFontFace> CairoFreeTypeFont::getFreeTypeFontFace(CairoFontEngine *fontEngine, FT_Library lib, const std::string &filename, std::vector<unsigned char> &&font_data) + { + if (font_data.empty()) { + return fontEngine->getExternalFontFace(lib, filename); +@@ -210,11 +210,11 @@ + std::string fileName; + std::vector<unsigned char> font_data; + int i, n; +- std::optional<GfxFontLoc> fontLoc; ++ boost::optional<GfxFontLoc> fontLoc; + char **enc; + const char *name; + FoFiType1C *ff1c; +- std::optional<FreeTypeFontFace> font_face; ++ boost::optional<FreeTypeFontFace> font_face; + std::vector<int> codeToGID; + bool substitute = false; + +@@ -604,7 +604,7 @@ + + std::shared_ptr<CairoFont> CairoFontEngine::getFont(const std::shared_ptr<GfxFont> &gfxFont, PDFDoc *doc, bool printing, XRef *xref) + { +- std::scoped_lock lock(mutex); ++ std::unique_lock<std::recursive_mutex> locker(mutex); + Ref ref = *gfxFont->getID(); + std::shared_ptr<CairoFont> font; + +@@ -638,9 +638,9 @@ + return font; + } + +-std::optional<FreeTypeFontFace> CairoFontEngine::getExternalFontFace(FT_Library ftlib, const std::string &filename) ++boost::optional<FreeTypeFontFace> CairoFontEngine::getExternalFontFace(FT_Library ftlib, const std::string &filename) + { +- std::scoped_lock lock(fontFileCacheMutex); ++ std::unique_lock<std::recursive_mutex> locker(mutex); + + auto it = fontFileCache.find(filename); + if (it != fontFileCache.end()) { +@@ -649,7 +649,7 @@ + return font; + } + +- std::optional<FreeTypeFontFace> font_face = createFreeTypeFontFace(ftlib, filename, {}); ++ boost::optional<FreeTypeFontFace> font_face = createFreeTypeFontFace(ftlib, filename, {}); + if (font_face) { + cairo_font_face_reference(font_face->cairo_font_face); + fontFileCache[filename] = *font_face; +diff -ur poppler/poppler/CairoFontEngine.h poppler/poppler/CairoFontEngine.h +--- poppler/poppler/CairoFontEngine.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/CairoFontEngine.h 2022-09-16 16:27:41.762004500 +0300 +@@ -86,7 +86,7 @@ + private: + CairoFreeTypeFont(Ref ref, cairo_font_face_t *cairo_font_face, std::vector<int> &&codeToGID, bool substitute); + +- static std::optional<FreeTypeFontFace> getFreeTypeFontFace(CairoFontEngine *fontEngine, FT_Library lib, const std::string &filename, std::vector<unsigned char> &&data); ++ static boost::optional<FreeTypeFontFace> getFreeTypeFontFace(CairoFontEngine *fontEngine, FT_Library lib, const std::string &filename, std::vector<unsigned char> &&data); + }; + + //------------------------------------------------------------------------ +@@ -120,7 +120,7 @@ + + std::shared_ptr<CairoFont> getFont(const std::shared_ptr<GfxFont> &gfxFont, PDFDoc *doc, bool printing, XRef *xref); + +- static std::optional<FreeTypeFontFace> getExternalFontFace(FT_Library ftlib, const std::string &filename); ++ static boost::optional<FreeTypeFontFace> getExternalFontFace(FT_Library ftlib, const std::string &filename); + + private: + FT_Library lib; +diff -ur poppler/poppler/CairoOutputDev.h poppler/poppler/CairoOutputDev.h +--- poppler/poppler/CairoOutputDev.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/CairoOutputDev.h 2022-09-16 16:27:41.877862600 +0300 +@@ -300,7 +300,7 @@ + bool setMimeDataForCCITTParams(Stream *str, cairo_surface_t *image, int height); + #endif + +- std::optional<GfxRGB> fill_color, stroke_color; ++ boost::optional<GfxRGB> fill_color, stroke_color; + cairo_pattern_t *fill_pattern, *stroke_pattern; + double fill_opacity; + double stroke_opacity; +diff -ur poppler/poppler/Catalog.cc poppler/poppler/Catalog.cc +--- poppler/poppler/Catalog.cc 2022-09-16 21:58:40.110102500 +0300 ++++ poppler/poppler/Catalog.cc 2022-09-16 16:32:32.360067100 +0300 +@@ -71,7 +71,7 @@ + // Catalog + //------------------------------------------------------------------------ + +-#define catalogLocker() const std::scoped_lock locker(mutex) ++#define catalogLocker() std::unique_lock<std::recursive_mutex> locker(mutex) + + Catalog::Catalog(PDFDoc *docA) + { +diff -ur poppler/poppler/Catalog.h poppler/poppler/Catalog.h +--- poppler/poppler/Catalog.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/Catalog.h 2022-09-16 16:29:19.213406500 +0300 +@@ -47,7 +47,7 @@ + #include "Link.h" + + #include <memory> +-#include <optional> ++#include <boost/optional.hpp> + #include <vector> + + class PDFDoc; +@@ -133,7 +133,7 @@ + Ref *getPageRef(int i); + + // Return base URI, or NULL if none. +- const std::optional<std::string> &getBaseURI() const { return baseURI; } ++ const boost::optional<std::string> &getBaseURI() const { return baseURI; } + + // Return the contents of the metadata stream, or NULL if there is + // no metadata. +@@ -289,7 +289,7 @@ + NameTree *destNameTree; // named destination name-tree + NameTree *embeddedFileNameTree; // embedded file name-tree + NameTree *jsNameTree; // Java Script name-tree +- std::optional<std::string> baseURI; // base URI for URI-type links ++ boost::optional<std::string> baseURI; // base URI for URI-type links + Object metadata; // metadata stream + StructTreeRoot *structTreeRoot; // structure tree root + unsigned int markInfo; // Flags from MarkInfo dictionary +diff -ur poppler/poppler/CharCodeToUnicode.cc poppler/poppler/CharCodeToUnicode.cc +--- poppler/poppler/CharCodeToUnicode.cc 2022-09-16 21:58:40.210089400 +0300 ++++ poppler/poppler/CharCodeToUnicode.cc 2022-09-16 16:27:42.231876900 +0300 +@@ -263,7 +263,7 @@ + { + CharCodeToUnicode *ctu; + +- ctu = new CharCodeToUnicode(std::optional<std::string>()); ++ ctu = new CharCodeToUnicode(boost::optional<std::string>()); + const char *p = buf->c_str(); + if (!ctu->parseCMap1(&getCharFromString, &p, nBits)) { + delete ctu; +@@ -277,7 +277,7 @@ + CharCodeToUnicode *ctu; + FILE *f; + +- ctu = new CharCodeToUnicode(std::optional<std::string>()); ++ ctu = new CharCodeToUnicode(boost::optional<std::string>()); + if ((f = globalParams->findToUnicodeFile(fileName))) { + if (!ctu->parseCMap1(&getCharFromFile, f, nBits)) { + delete ctu; +@@ -567,7 +567,7 @@ + isIdentity = false; + } + +-CharCodeToUnicode::CharCodeToUnicode(const std::optional<std::string> &tagA) : tag(tagA) ++CharCodeToUnicode::CharCodeToUnicode(const boost::optional<std::string> &tagA) : tag(tagA) + { + CharCode i; + +@@ -582,7 +582,7 @@ + isIdentity = false; + } + +-CharCodeToUnicode::CharCodeToUnicode(const std::optional<std::string> &tagA, Unicode *mapA, CharCode mapLenA, bool copyMap, CharCodeToUnicodeString *sMapA, int sMapLenA, int sMapSizeA) : tag(tagA) ++CharCodeToUnicode::CharCodeToUnicode(const boost::optional<std::string> &tagA, Unicode *mapA, CharCode mapLenA, bool copyMap, CharCodeToUnicodeString *sMapA, int sMapLenA, int sMapSizeA) : tag(tagA) + { + mapLen = mapLenA; + if (copyMap) { +diff -ur poppler/poppler/CharCodeToUnicode.h poppler/poppler/CharCodeToUnicode.h +--- poppler/poppler/CharCodeToUnicode.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/CharCodeToUnicode.h 2022-09-16 16:29:25.010173300 +0300 +@@ -32,7 +32,7 @@ + #define CHARCODETOUNICODE_H + + #include <atomic> +-#include <optional> ++#include <boost/optional.hpp> + + #include "poppler-config.h" + #include "CharTypes.h" +@@ -104,10 +104,10 @@ + void addMapping(CharCode code, char *uStr, int n, int offset); + void addMappingInt(CharCode code, Unicode u); + CharCodeToUnicode(); +- explicit CharCodeToUnicode(const std::optional<std::string> &tagA); +- CharCodeToUnicode(const std::optional<std::string> &tagA, Unicode *mapA, CharCode mapLenA, bool copyMap, CharCodeToUnicodeString *sMapA, int sMapLenA, int sMapSizeA); ++ explicit CharCodeToUnicode(const boost::optional<std::string> &tagA); ++ CharCodeToUnicode(const boost::optional<std::string> &tagA, Unicode *mapA, CharCode mapLenA, bool copyMap, CharCodeToUnicodeString *sMapA, int sMapLenA, int sMapSizeA); + +- const std::optional<std::string> tag; ++ const boost::optional<std::string> tag; + Unicode *map; + CharCode mapLen; + CharCodeToUnicodeString *sMap; +diff -ur poppler/poppler/CurlPDFDocBuilder.cc poppler/poppler/CurlPDFDocBuilder.cc +--- poppler/poppler/CurlPDFDocBuilder.cc 2022-09-16 21:58:40.396392700 +0300 ++++ poppler/poppler/CurlPDFDocBuilder.cc 2022-09-16 16:27:43.096494100 +0300 +@@ -22,7 +22,7 @@ + // CurlPDFDocBuilder + //------------------------------------------------------------------------ + +-std::unique_ptr<PDFDoc> CurlPDFDocBuilder::buildPDFDoc(const GooString &uri, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword, void *guiDataA) ++std::unique_ptr<PDFDoc> CurlPDFDocBuilder::buildPDFDoc(const GooString &uri, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword, void *guiDataA) + { + CachedFile *cachedFile = new CachedFile(new CurlCachedFileLoader(uri.toStr())); + +diff -ur poppler/poppler/CurlPDFDocBuilder.h poppler/poppler/CurlPDFDocBuilder.h +--- poppler/poppler/CurlPDFDocBuilder.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/CurlPDFDocBuilder.h 2022-09-16 16:27:43.181172700 +0300 +@@ -25,7 +25,7 @@ + { + + public: +- std::unique_ptr<PDFDoc> buildPDFDoc(const GooString &uri, const std::optional<GooString> &ownerPassword = {}, const std::optional<GooString> &userPassword = {}, void *guiDataA = nullptr) override; ++ std::unique_ptr<PDFDoc> buildPDFDoc(const GooString &uri, const boost::optional<GooString> &ownerPassword = {}, const boost::optional<GooString> &userPassword = {}, void *guiDataA = nullptr) override; + bool supports(const GooString &uri) override; + }; + +diff -ur poppler/poppler/Dict.cc poppler/poppler/Dict.cc +--- poppler/poppler/Dict.cc 2022-09-16 21:58:40.594972000 +0300 ++++ poppler/poppler/Dict.cc 2022-09-16 16:32:36.347348700 +0300 +@@ -40,7 +40,7 @@ + // Dict + //------------------------------------------------------------------------ + +-#define dictLocker() const std::scoped_lock locker(mutex) ++#define dictLocker() std::unique_lock<std::recursive_mutex> locker(mutex) + + constexpr int SORT_LENGTH_LOWER_LIMIT = 32; + +diff -ur poppler/poppler/FDPDFDocBuilder.cc poppler/poppler/FDPDFDocBuilder.cc +--- poppler/poppler/FDPDFDocBuilder.cc 2022-09-16 21:58:40.665573300 +0300 ++++ poppler/poppler/FDPDFDocBuilder.cc 2022-09-16 16:27:43.914144400 +0300 +@@ -34,7 +34,7 @@ + return fd; + } + +-std::unique_ptr<PDFDoc> FileDescriptorPDFDocBuilder::buildPDFDoc(const GooString &uri, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword, void *guiDataA) ++std::unique_ptr<PDFDoc> FileDescriptorPDFDocBuilder::buildPDFDoc(const GooString &uri, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword, void *guiDataA) + { + const auto fd = parseFdFromUri(uri); + if (fd == -1) { +diff -ur poppler/poppler/FDPDFDocBuilder.h poppler/poppler/FDPDFDocBuilder.h +--- poppler/poppler/FDPDFDocBuilder.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/FDPDFDocBuilder.h 2022-09-16 16:27:43.951956600 +0300 +@@ -26,7 +26,7 @@ + { + + public: +- std::unique_ptr<PDFDoc> buildPDFDoc(const GooString &uri, const std::optional<GooString> &ownerPassword = {}, const std::optional<GooString> &userPassword = {}, void *guiDataA = nullptr) override; ++ std::unique_ptr<PDFDoc> buildPDFDoc(const GooString &uri, const boost::optional<GooString> &ownerPassword = {}, const boost::optional<GooString> &userPassword = {}, void *guiDataA = nullptr) override; + bool supports(const GooString &uri) override; + + private: +diff -ur poppler/poppler/FontInfo.cc poppler/poppler/FontInfo.cc +--- poppler/poppler/FontInfo.cc 2022-09-16 21:58:40.995479200 +0300 ++++ poppler/poppler/FontInfo.cc 2022-09-16 16:27:44.484360100 +0300 +@@ -165,7 +165,7 @@ + fontRef = *font->getID(); + + // font name +- const std::optional<std::string> &origName = font->getName(); ++ const boost::optional<std::string> &origName = font->getName(); + if (origName) { + name = *font->getName(); + } +diff -ur poppler/poppler/FontInfo.h poppler/poppler/FontInfo.h +--- poppler/poppler/FontInfo.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/FontInfo.h 2022-09-16 16:29:28.697082100 +0300 +@@ -30,7 +30,7 @@ + #include "Object.h" + #include "poppler_private_export.h" + +-#include <optional> ++#include <boost/optional.hpp> + #include <string> + #include <unordered_set> + +@@ -63,9 +63,9 @@ + + FontInfo &operator=(const FontInfo &) = delete; + +- const std::optional<std::string> &getName() const { return name; }; +- const std::optional<std::string> &getSubstituteName() const { return substituteName; }; +- const std::optional<std::string> &getFile() const { return file; }; ++ const boost::optional<std::string> &getName() const { return name; }; ++ const boost::optional<std::string> &getSubstituteName() const { return substituteName; }; ++ const boost::optional<std::string> &getFile() const { return file; }; + const std::string &getEncoding() const { return encoding; }; + Type getType() const { return type; }; + bool getEmbedded() const { return emb; }; +@@ -75,9 +75,9 @@ + Ref getEmbRef() const { return embRef; }; + + private: +- std::optional<std::string> name; +- std::optional<std::string> substituteName; +- std::optional<std::string> file; ++ boost::optional<std::string> name; ++ boost::optional<std::string> substituteName; ++ boost::optional<std::string> file; + std::string encoding; + Type type; + bool emb; +diff -ur poppler/poppler/Form.cc poppler/poppler/Form.cc +--- poppler/poppler/Form.cc 2022-09-16 21:58:41.064544700 +0300 ++++ poppler/poppler/Form.cc 2022-09-16 16:27:44.615842800 +0300 +@@ -601,8 +601,8 @@ + } + #endif + +-bool FormWidgetSignature::signDocument(const char *saveFilename, const char *certNickname, const char *digestName, const char *password, const GooString *reason, const GooString *location, const std::optional<GooString> &ownerPassword, +- const std::optional<GooString> &userPassword) ++bool FormWidgetSignature::signDocument(const char *saveFilename, const char *certNickname, const char *digestName, const char *password, const GooString *reason, const GooString *location, const boost::optional<GooString> &ownerPassword, ++ const boost::optional<GooString> &userPassword) + { + #ifdef ENABLE_NSS3 + if (!certNickname) { +@@ -689,7 +689,7 @@ + } + + bool FormWidgetSignature::signDocumentWithAppearance(const char *saveFilename, const char *certNickname, const char *digestName, const char *password, const GooString *reason, const GooString *location, +- const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword, const GooString &signatureText, const GooString &signatureTextLeft, double fontSize, ++ const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword, const GooString &signatureText, const GooString &signatureTextLeft, double fontSize, + double leftFontSize, std::unique_ptr<AnnotColor> &&fontColor, double borderWidth, std::unique_ptr<AnnotColor> &&borderColor, std::unique_ptr<AnnotColor> &&backgroundColor) + { + // Set the appearance +@@ -742,7 +742,7 @@ + } + + // Get start and end file position of objNum in the PDF named filename. +-bool FormWidgetSignature::getObjectStartEnd(const GooString &filename, int objNum, Goffset *objStart, Goffset *objEnd, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword) ++bool FormWidgetSignature::getObjectStartEnd(const GooString &filename, int objNum, Goffset *objStart, Goffset *objEnd, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword) + { + PDFDoc newDoc(std::unique_ptr<GooString>(filename.copy()), ownerPassword, userPassword); + if (!newDoc.isOk()) { +@@ -905,7 +905,7 @@ + return static_cast<FormFieldSignature *>(field)->getSignedRangeBounds(); + } + +-std::optional<GooString> FormWidgetSignature::getCheckedSignature(Goffset *checkedFileSize) ++boost::optional<GooString> FormWidgetSignature::getCheckedSignature(Goffset *checkedFileSize) + { + return static_cast<FormFieldSignature *>(field)->getCheckedSignature(checkedFileSize); + } +@@ -2426,7 +2426,7 @@ + return range_vec; + } + +-std::optional<GooString> FormFieldSignature::getCheckedSignature(Goffset *checkedFileSize) ++boost::optional<GooString> FormFieldSignature::getCheckedSignature(Goffset *checkedFileSize) + { + Goffset start = 0; + Goffset end = 0; +diff -ur poppler/poppler/Form.h poppler/poppler/Form.h +--- poppler/poppler/Form.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/Form.h 2022-09-16 16:29:32.981221400 +0300 +@@ -40,7 +40,7 @@ + + #include <ctime> + +-#include <optional> ++#include <boost/optional.hpp> + #include <set> + #include <vector> + +@@ -307,24 +307,24 @@ + // field "ByteRange" in the dictionary "V". + // Arguments reason and location are UTF-16 big endian strings with BOM. An empty string and nullptr are acceptable too. + // Returns success. +- bool signDocument(const char *filename, const char *certNickname, const char *digestName, const char *password, const GooString *reason = nullptr, const GooString *location = nullptr, const std::optional<GooString> &ownerPassword = {}, +- const std::optional<GooString> &userPassword = {}); ++ bool signDocument(const char *filename, const char *certNickname, const char *digestName, const char *password, const GooString *reason = nullptr, const GooString *location = nullptr, const boost::optional<GooString> &ownerPassword = {}, ++ const boost::optional<GooString> &userPassword = {}); + + // Same as above but adds text, font color, etc. + bool signDocumentWithAppearance(const char *filename, const char *certNickname, const char *digestName, const char *password, const GooString *reason = nullptr, const GooString *location = nullptr, +- const std::optional<GooString> &ownerPassword = {}, const std::optional<GooString> &userPassword = {}, const GooString &signatureText = {}, const GooString &signatureTextLeft = {}, double fontSize = {}, ++ const boost::optional<GooString> &ownerPassword = {}, const boost::optional<GooString> &userPassword = {}, const GooString &signatureText = {}, const GooString &signatureTextLeft = {}, double fontSize = {}, + double leftFontSize = {}, std::unique_ptr<AnnotColor> &&fontColor = {}, double borderWidth = {}, std::unique_ptr<AnnotColor> &&borderColor = {}, std::unique_ptr<AnnotColor> &&backgroundColor = {}); + + // checks the length encoding of the signature and returns the hex encoded signature + // if the check passed (and the checked file size as output parameter in checkedFileSize) + // otherwise a nullptr is returned +- std::optional<GooString> getCheckedSignature(Goffset *checkedFileSize); ++ boost::optional<GooString> getCheckedSignature(Goffset *checkedFileSize); + + const GooString *getSignature() const; + + private: + bool createSignature(Object &vObj, Ref vRef, const GooString &name, const GooString *signature, const GooString *reason = nullptr, const GooString *location = nullptr); +- bool getObjectStartEnd(const GooString &filename, int objNum, Goffset *objStart, Goffset *objEnd, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword); ++ bool getObjectStartEnd(const GooString &filename, int objNum, Goffset *objStart, Goffset *objEnd, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword); + bool updateOffsets(FILE *f, Goffset objStart, Goffset objEnd, Goffset *sigStart, Goffset *sigEnd, Goffset *fileSize); + + bool updateSignature(FILE *f, Goffset sigStart, Goffset sigEnd, const GooString *signature); +@@ -611,7 +611,7 @@ + // checks the length encoding of the signature and returns the hex encoded signature + // if the check passed (and the checked file size as output parameter in checkedFileSize) + // otherwise a nullptr is returned +- std::optional<GooString> getCheckedSignature(Goffset *checkedFileSize); ++ boost::optional<GooString> getCheckedSignature(Goffset *checkedFileSize); + + ~FormFieldSignature() override; + Object *getByteRange() { return &byte_range; } +diff -ur poppler/poppler/GfxFont.cc poppler/poppler/GfxFont.cc +--- poppler/poppler/GfxFont.cc 2022-09-16 21:58:41.211684900 +0300 ++++ poppler/poppler/GfxFont.cc 2022-09-16 16:27:45.016943600 +0300 +@@ -199,7 +199,7 @@ + + std::unique_ptr<GfxFont> GfxFont::makeFont(XRef *xref, const char *tagA, Ref idA, Dict *fontDict) + { +- std::optional<std::string> name; ++ boost::optional<std::string> name; + Ref embFontIDA; + GfxFontType typeA; + +@@ -223,7 +223,7 @@ + return std::unique_ptr<GfxFont>(font); + } + +-GfxFont::GfxFont(const char *tagA, Ref idA, std::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA) : tag(tagA), id(idA), name(std::move(nameA)), type(typeA) ++GfxFont::GfxFont(const char *tagA, Ref idA, boost::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA) : tag(tagA), id(idA), name(std::move(nameA)), type(typeA) + { + ok = false; + embFontID = embFontIDA; +@@ -608,7 +608,7 @@ + return ctu; + } + +-std::optional<GfxFontLoc> GfxFont::locateFont(XRef *xref, PSOutputDev *ps) ++boost::optional<GfxFontLoc> GfxFont::locateFont(XRef *xref, PSOutputDev *ps) + { + SysFontType sysFontType; + GooString *path, *base14Name; +@@ -616,7 +616,7 @@ + bool embed; + + if (type == fontType3) { +- return std::nullopt; ++ return boost::none; + } + + //----- embedded font +@@ -682,7 +682,7 @@ + + //----- external font file (fontFile, fontDir) + if (name && (path = globalParams->findFontFile(*name))) { +- if (std::optional<GfxFontLoc> fontLoc = getExternalFont(path, isCIDFont())) { ++ if (boost::optional<GfxFontLoc> fontLoc = getExternalFont(path, isCIDFont())) { + return fontLoc; + } + } +@@ -691,7 +691,7 @@ + if (!ps && !isCIDFont() && ((Gfx8BitFont *)this)->base14) { + base14Name = new GooString(((Gfx8BitFont *)this)->base14->base14Name); + if ((path = globalParams->findBase14FontFile(base14Name, this))) { +- if (std::optional<GfxFontLoc> fontLoc = getExternalFont(path, false)) { ++ if (boost::optional<GfxFontLoc> fontLoc = getExternalFont(path, false)) { + delete base14Name; + return fontLoc; + } +@@ -753,7 +753,7 @@ + } else { + path = globalParams->findFontFile(substName); + if (path) { +- if (std::optional<GfxFontLoc> fontLoc = getExternalFont(path, false)) { ++ if (boost::optional<GfxFontLoc> fontLoc = getExternalFont(path, false)) { + error(errSyntaxWarning, -1, "Substituting font '{0:s}' for '{1:s}'", base14SubstFonts[substIdx], name ? name->c_str() : ""); + name = base14SubstFonts[substIdx]; + fontLoc->substIdx = substIdx; +@@ -763,14 +763,14 @@ + } + + // failed to find a substitute font +- return std::nullopt; ++ return boost::none; + } + + // failed to find a substitute font +- return std::nullopt; ++ return boost::none; + } + +-std::optional<GfxFontLoc> GfxFont::getExternalFont(GooString *path, bool cid) ++boost::optional<GfxFontLoc> GfxFont::getExternalFont(GooString *path, bool cid) + { + FoFiIdentifierType fft; + GfxFontType fontType; +@@ -805,7 +805,7 @@ + } + if (fontType == fontUnknownType || (cid ? (fontType < fontCIDType0) : (fontType >= fontCIDType0))) { + delete path; +- return std::nullopt; ++ return boost::none; + } + GfxFontLoc fontLoc; + fontLoc.locType = gfxFontLocExternal; +@@ -814,7 +814,7 @@ + return std::move(fontLoc); // std::move only required to please g++-7 + } + +-std::optional<std::vector<unsigned char>> GfxFont::readEmbFontFile(XRef *xref) ++boost::optional<std::vector<unsigned char>> GfxFont::readEmbFontFile(XRef *xref) + { + Stream *str; + +@@ -942,7 +942,7 @@ + return numeric; + } + +-Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, std::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict) : GfxFont(tagA, idA, std::move(nameA), typeA, embFontIDA) ++Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, boost::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict) : GfxFont(tagA, idA, std::move(nameA), typeA, embFontIDA) + { + const BuiltinFont *builtinFont; + const char **baseEnc; +@@ -1117,7 +1117,7 @@ + ffT1 = nullptr; + ffT1C = nullptr; + if (type == fontType1 && embFontID != Ref::INVALID()) { +- const std::optional<std::vector<unsigned char>> buf = readEmbFontFile(xref); ++ const boost::optional<std::vector<unsigned char>> buf = readEmbFontFile(xref); + if (buf) { + if ((ffT1 = FoFiType1::make(buf->data(), buf->size()))) { + if (ffT1->getName()) { +@@ -1133,7 +1133,7 @@ + } + } + } else if (type == fontType1C && embFontID != Ref::INVALID()) { +- const std::optional<std::vector<unsigned char>> buf = readEmbFontFile(xref); ++ const boost::optional<std::vector<unsigned char>> buf = readEmbFontFile(xref); + if (buf) { + if ((ffT1C = FoFiType1C::make(buf->data(), buf->size()))) { + if (ffT1C->getName()) { +@@ -1707,7 +1707,7 @@ + bool operator()(const GfxFontCIDWidthExcepV &w1, const GfxFontCIDWidthExcepV &w2) { return w1.first < w2.first; } + }; + +-GfxCIDFont::GfxCIDFont(XRef *xref, const char *tagA, Ref idA, std::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict) : GfxFont(tagA, idA, std::move(nameA), typeA, embFontIDA) ++GfxCIDFont::GfxCIDFont(XRef *xref, const char *tagA, Ref idA, boost::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict) : GfxFont(tagA, idA, std::move(nameA), typeA, embFontIDA) + { + Dict *desFontDict; + Object desFontDictObj; +diff -ur poppler/poppler/GfxFont.h poppler/poppler/GfxFont.h +--- poppler/poppler/GfxFont.h 2022-09-16 21:58:36.928310000 +0300 ++++ poppler/poppler/GfxFont.h 2022-09-16 16:29:36.703166800 +0300 +@@ -35,7 +35,7 @@ + #define GFXFONT_H + + #include <memory> +-#include <optional> ++#include <boost/optional.hpp> + + #include "goo/GooString.h" + #include "Object.h" +@@ -216,7 +216,7 @@ + + // Get the original font name (ignornig any munging that might have + // been done to map to a canonical Base-14 font name). +- const std::optional<std::string> &getName() const { return name; } ++ const boost::optional<std::string> &getName() const { return name; } + + bool isSubset() const; + +@@ -275,11 +275,11 @@ + virtual int getWMode() const { return 0; } + + // Locate the font file for this font. If <ps> is not null, includes PS +- // printer-resident fonts. Returns std::optional without a value on failure. +- std::optional<GfxFontLoc> locateFont(XRef *xref, PSOutputDev *ps); ++ // printer-resident fonts. Returns boost::optional without a value on failure. ++ boost::optional<GfxFontLoc> locateFont(XRef *xref, PSOutputDev *ps); + + // Read an external or embedded font file into a buffer. +- std::optional<std::vector<unsigned char>> readEmbFontFile(XRef *xref); ++ boost::optional<std::vector<unsigned char>> readEmbFontFile(XRef *xref); + + // Get the next char from a string <s> of <len> bytes, returning the + // char <code>, its Unicode mapping <u>, its displacement vector +@@ -301,16 +301,16 @@ + static const char *getAlternateName(const char *name); + + protected: +- GfxFont(const char *tagA, Ref idA, std::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA); ++ GfxFont(const char *tagA, Ref idA, boost::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA); + + static GfxFontType getFontType(XRef *xref, Dict *fontDict, Ref *embID); + void readFontDescriptor(XRef *xref, Dict *fontDict); + CharCodeToUnicode *readToUnicodeCMap(Dict *fontDict, int nBits, CharCodeToUnicode *ctu); +- static std::optional<GfxFontLoc> getExternalFont(GooString *path, bool cid); ++ static boost::optional<GfxFontLoc> getExternalFont(GooString *path, bool cid); + + const std::string tag; // PDF font tag + const Ref id; // reference (used as unique ID) +- std::optional<std::string> name; // font name ++ boost::optional<std::string> name; // font name + GooString *family; // font family + Stretch stretch; // font stretch + Weight weight; // font weight +@@ -335,7 +335,7 @@ + class POPPLER_PRIVATE_EXPORT Gfx8BitFont : public GfxFont + { + public: +- Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, std::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict); ++ Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, boost::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict); + + int getNextChar(const char *s, int len, CharCode *code, Unicode const **u, int *uLen, double *dx, double *dy, double *ox, double *oy) const override; + +@@ -395,7 +395,7 @@ + class POPPLER_PRIVATE_EXPORT GfxCIDFont : public GfxFont + { + public: +- GfxCIDFont(XRef *xref, const char *tagA, Ref idA, std::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict); ++ GfxCIDFont(XRef *xref, const char *tagA, Ref idA, boost::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict); + + bool isCIDFont() const override { return true; } + +diff -ur poppler/poppler/GlobalParams.cc poppler/poppler/GlobalParams.cc +--- poppler/poppler/GlobalParams.cc 2022-09-16 21:58:41.327712200 +0300 ++++ poppler/poppler/GlobalParams.cc 2022-09-16 16:36:52.853893500 +0300 +@@ -395,9 +395,9 @@ + return fi; + } + +-#define globalParamsLocker() const std::scoped_lock locker(mutex) +-#define unicodeMapCacheLocker() const std::scoped_lock locker(unicodeMapCacheMutex) +-#define cMapCacheLocker() const std::scoped_lock locker(cMapCacheMutex) ++#define globalParamsLocker() std::unique_lock<std::recursive_mutex> locker(mutex) ++#define unicodeMapCacheLocker() std::unique_lock<std::recursive_mutex> locker(unicodeMapCacheMutex) ++#define cMapCacheLocker() std::unique_lock<std::recursive_mutex> locker(cMapCacheMutex) + + //------------------------------------------------------------------------ + // parsing +@@ -953,7 +953,7 @@ + const SysFontInfo *fi = nullptr; + FcPattern *p = nullptr; + GooString *path = nullptr; +- const std::optional<std::string> &fontName = font->getName(); ++ const boost::optional<std::string> &fontName = font->getName(); + GooString substituteName; + if (!fontName) { + return nullptr; +@@ -1267,7 +1267,7 @@ + const SysFontInfo *fi; + GooString *path; + +- const std::optional<std::string> &fontName = font->getName(); ++ const boost::optional<std::string> &fontName = font->getName(); + if (!fontName) + return nullptr; + +@@ -1406,7 +1406,7 @@ + + GlobalParamsIniter::GlobalParamsIniter(ErrorCallback errorCallback) + { +- const std::scoped_lock lock { mutex }; ++ std::lock_guard<std::mutex> lock { mutex }; + + if (count == 0) { + globalParams = std::make_unique<GlobalParams>(!customDataDir.empty() ? customDataDir.c_str() : nullptr); +@@ -1419,7 +1419,7 @@ + + GlobalParamsIniter::~GlobalParamsIniter() + { +- const std::scoped_lock lock { mutex }; ++ std::lock_guard<std::mutex> lock { mutex }; + + --count; + +@@ -1430,7 +1430,7 @@ + + bool GlobalParamsIniter::setCustomDataDir(const std::string &dir) + { +- const std::scoped_lock lock { mutex }; ++ std::lock_guard<std::mutex> lock { mutex }; + + if (count == 0) { + customDataDir = dir; +diff -ur poppler/poppler/GlobalParamsWin.cc poppler/poppler/GlobalParamsWin.cc +--- poppler/poppler/GlobalParamsWin.cc 2022-09-16 21:58:41.381093500 +0300 ++++ poppler/poppler/GlobalParamsWin.cc 2022-09-16 16:33:34.090528600 +0300 +@@ -467,10 +467,10 @@ + { + const SysFontInfo *fi; + GooString *path = nullptr; +- const std::optional<std::string> &fontName = font->getName(); ++ const boost::optional<std::string> &fontName = font->getName(); + if (!fontName) + return nullptr; +- const std::scoped_lock locker(mutex); ++ std::unique_lock<std::recursive_mutex> locker(mutex); + setupBaseFonts(POPPLER_FONTSDIR); + + // TODO: base14Name should be changed? +@@ -505,7 +505,7 @@ + + FamilyStyleFontSearchResult GlobalParams::findSystemFontFileForFamilyAndStyle(const std::string &fontFamily, const std::string &fontStyle) + { +- const std::scoped_lock locker(mutex); ++ std::unique_lock<std::recursive_mutex> locker(mutex); + setupBaseFonts(POPPLER_FONTSDIR); + + const std::string familyAndStyle = fontFamily + " " + fontStyle; +@@ -520,7 +520,7 @@ + + UCharFontSearchResult GlobalParams::findSystemFontFileForUChar(Unicode uChar, const GfxFont &fontToEmulate) + { +- const std::scoped_lock locker(mutex); ++ std::unique_lock<std::recursive_mutex> locker(mutex); + setupBaseFonts(POPPLER_FONTSDIR); + + const std::vector<SysFontInfo *> &fonts = sysFonts->getFonts(); +diff -ur poppler/poppler/Link.cc poppler/poppler/Link.cc +--- poppler/poppler/Link.cc 2022-09-16 21:58:41.835750600 +0300 ++++ poppler/poppler/Link.cc 2022-09-16 16:27:46.843405900 +0300 +@@ -63,13 +63,13 @@ + return action; + } + +-std::unique_ptr<LinkAction> LinkAction::parseAction(const Object *obj, const std::optional<std::string> &baseURI) ++std::unique_ptr<LinkAction> LinkAction::parseAction(const Object *obj, const boost::optional<std::string> &baseURI) + { + std::set<int> seenNextActions; + return parseAction(obj, baseURI, &seenNextActions); + } + +-std::unique_ptr<LinkAction> LinkAction::parseAction(const Object *obj, const std::optional<std::string> &baseURI, std::set<int> *seenNextActions) ++std::unique_ptr<LinkAction> LinkAction::parseAction(const Object *obj, const boost::optional<std::string> &baseURI, std::set<int> *seenNextActions) + { + + if (!obj->isDict()) { +@@ -513,7 +513,7 @@ + // LinkURI + //------------------------------------------------------------------------ + +-LinkURI::LinkURI(const Object *uriObj, const std::optional<std::string> &baseURI) ++LinkURI::LinkURI(const Object *uriObj, const boost::optional<std::string> &baseURI) + { + hasURIFlag = false; + if (uriObj->isString()) { +diff -ur poppler/poppler/Link.h poppler/poppler/Link.h +--- poppler/poppler/Link.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/Link.h 2022-09-16 16:28:57.630770800 +0300 +@@ -35,7 +35,7 @@ + #include "Object.h" + #include "poppler_private_export.h" + #include <memory> +-#include <optional> ++#include <boost/optional.hpp> + #include <set> + + class GooString; +@@ -87,13 +87,13 @@ + static std::unique_ptr<LinkAction> parseDest(const Object *obj); + + // Parse an action dictionary. +- static std::unique_ptr<LinkAction> parseAction(const Object *obj, const std::optional<std::string> &baseURI = {}); ++ static std::unique_ptr<LinkAction> parseAction(const Object *obj, const boost::optional<std::string> &baseURI = {}); + + // A List of the next actions to execute in order. + const std::vector<std::unique_ptr<LinkAction>> &nextActions() const; + + private: +- static std::unique_ptr<LinkAction> parseAction(const Object *obj, const std::optional<std::string> &baseURI, std::set<int> *seenNextActions); ++ static std::unique_ptr<LinkAction> parseAction(const Object *obj, const boost::optional<std::string> &baseURI, std::set<int> *seenNextActions); + + std::vector<std::unique_ptr<LinkAction>> nextActionList; + }; +@@ -243,7 +243,7 @@ + { + public: + // Build a LinkURI given the URI (string) and base URI. +- LinkURI(const Object *uriObj, const std::optional<std::string> &baseURI); ++ LinkURI(const Object *uriObj, const boost::optional<std::string> &baseURI); + + ~LinkURI() override; + +diff -ur poppler/poppler/LocalPDFDocBuilder.cc poppler/poppler/LocalPDFDocBuilder.cc +--- poppler/poppler/LocalPDFDocBuilder.cc 2022-09-16 21:58:41.867032500 +0300 ++++ poppler/poppler/LocalPDFDocBuilder.cc 2022-09-16 16:27:46.990572300 +0300 +@@ -18,7 +18,7 @@ + // LocalPDFDocBuilder + //------------------------------------------------------------------------ + +-std::unique_ptr<PDFDoc> LocalPDFDocBuilder::buildPDFDoc(const GooString &uri, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword, void *guiDataA) ++std::unique_ptr<PDFDoc> LocalPDFDocBuilder::buildPDFDoc(const GooString &uri, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword, void *guiDataA) + { + if (uri.cmpN("file://", 7) == 0) { + std::unique_ptr<GooString> fileName(uri.copy()); +diff -ur poppler/poppler/LocalPDFDocBuilder.h poppler/poppler/LocalPDFDocBuilder.h +--- poppler/poppler/LocalPDFDocBuilder.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/LocalPDFDocBuilder.h 2022-09-16 16:27:47.037437500 +0300 +@@ -25,7 +25,7 @@ + { + + public: +- std::unique_ptr<PDFDoc> buildPDFDoc(const GooString &uri, const std::optional<GooString> &ownerPassword = {}, const std::optional<GooString> &userPassword = {}, void *guiDataA = nullptr) override; ++ std::unique_ptr<PDFDoc> buildPDFDoc(const GooString &uri, const boost::optional<GooString> &ownerPassword = {}, const boost::optional<GooString> &userPassword = {}, void *guiDataA = nullptr) override; + bool supports(const GooString &uri) override; + }; + +diff -ur poppler/poppler/Page.cc poppler/poppler/Page.cc +--- poppler/poppler/Page.cc 2022-09-16 21:58:42.283721100 +0300 ++++ poppler/poppler/Page.cc 2022-09-16 16:33:42.958478900 +0300 +@@ -249,7 +249,7 @@ + // Page + //------------------------------------------------------------------------ + +-#define pageLocker() const std::scoped_lock locker(mutex) ++#define pageLocker() std::unique_lock<std::recursive_mutex> locker(mutex) + + Page::Page(PDFDoc *docA, int numA, Object &&pageDict, Ref pageRefA, PageAttrs *attrsA, Form *form) + { +diff -ur poppler/poppler/PDFDoc.cc poppler/poppler/PDFDoc.cc +--- poppler/poppler/PDFDoc.cc 2022-09-16 21:58:42.483511900 +0300 ++++ poppler/poppler/PDFDoc.cc 2022-09-16 16:33:47.447609100 +0300 +@@ -121,11 +121,11 @@ + // PDFDoc + //------------------------------------------------------------------------ + +-#define pdfdocLocker() const std::scoped_lock locker(mutex) ++#define pdfdocLocker() std::unique_lock<std::recursive_mutex> locker(mutex) + + PDFDoc::PDFDoc() { } + +-PDFDoc::PDFDoc(std::unique_ptr<GooString> &&fileNameA, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword, void *guiDataA, const std::function<void()> &xrefReconstructedCallback) ++PDFDoc::PDFDoc(std::unique_ptr<GooString> &&fileNameA, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword, void *guiDataA, const std::function<void()> &xrefReconstructedCallback) + : fileName(std::move(fileNameA)), guiData(guiDataA) + { + #ifdef _WIN32 +@@ -160,7 +160,7 @@ + } + + #ifdef _WIN32 +-PDFDoc::PDFDoc(wchar_t *fileNameA, int fileNameLen, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword, void *guiDataA, const std::function<void()> &xrefReconstructedCallback) : guiData(guiDataA) ++PDFDoc::PDFDoc(wchar_t *fileNameA, int fileNameLen, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword, void *guiDataA, const std::function<void()> &xrefReconstructedCallback) : guiData(guiDataA) + { + OSVERSIONINFO version; + +@@ -196,7 +196,7 @@ + } + #endif + +-PDFDoc::PDFDoc(BaseStream *strA, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword, void *guiDataA, const std::function<void()> &xrefReconstructedCallback) : guiData(guiDataA) ++PDFDoc::PDFDoc(BaseStream *strA, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword, void *guiDataA, const std::function<void()> &xrefReconstructedCallback) : guiData(guiDataA) + { + if (strA->getFileName()) { + fileName.reset(strA->getFileName()->copy()); +@@ -213,7 +213,7 @@ + ok = setup(ownerPassword, userPassword, xrefReconstructedCallback); + } + +-bool PDFDoc::setup(const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword, const std::function<void()> &xrefReconstructedCallback) ++bool PDFDoc::setup(const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword, const std::function<void()> &xrefReconstructedCallback) + { + pdfdocLocker(); + +@@ -389,7 +389,7 @@ + // We don't do the version check. Don't add it back in. + } + +-bool PDFDoc::checkEncryption(const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword) ++bool PDFDoc::checkEncryption(const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword) + { + bool encrypted; + bool ret; +@@ -2154,7 +2154,7 @@ + + bool PDFDoc::sign(const char *saveFilename, const char *certNickname, const char *password, GooString *partialFieldName, int page, const PDFRectangle &rect, const GooString &signatureText, const GooString &signatureTextLeft, + double fontSize, double leftFontSize, std::unique_ptr<AnnotColor> &&fontColor, double borderWidth, std::unique_ptr<AnnotColor> &&borderColor, std::unique_ptr<AnnotColor> &&backgroundColor, const GooString *reason, +- const GooString *location, const std::string &imagePath, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword) ++ const GooString *location, const std::string &imagePath, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword) + { + ::Page *destPage = getPage(page); + if (destPage == nullptr) { +diff -ur poppler/poppler/PDFDoc.h poppler/poppler/PDFDoc.h +--- poppler/poppler/PDFDoc.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/PDFDoc.h 2022-09-16 16:27:48.425364000 +0300 +@@ -130,14 +130,14 @@ + class POPPLER_PRIVATE_EXPORT PDFDoc + { + public: +- explicit PDFDoc(std::unique_ptr<GooString> &&fileNameA, const std::optional<GooString> &ownerPassword = {}, const std::optional<GooString> &userPassword = {}, void *guiDataA = nullptr, ++ explicit PDFDoc(std::unique_ptr<GooString> &&fileNameA, const boost::optional<GooString> &ownerPassword = {}, const boost::optional<GooString> &userPassword = {}, void *guiDataA = nullptr, + const std::function<void()> &xrefReconstructedCallback = {}); + + #ifdef _WIN32 +- PDFDoc(wchar_t *fileNameA, int fileNameLen, const std::optional<GooString> &ownerPassword = {}, const std::optional<GooString> &userPassword = {}, void *guiDataA = nullptr, const std::function<void()> &xrefReconstructedCallback = {}); ++ PDFDoc(wchar_t *fileNameA, int fileNameLen, const boost::optional<GooString> &ownerPassword = {}, const boost::optional<GooString> &userPassword = {}, void *guiDataA = nullptr, const std::function<void()> &xrefReconstructedCallback = {}); + #endif + +- explicit PDFDoc(BaseStream *strA, const std::optional<GooString> &ownerPassword = {}, const std::optional<GooString> &userPassword = {}, void *guiDataA = nullptr, const std::function<void()> &xrefReconstructedCallback = {}); ++ explicit PDFDoc(BaseStream *strA, const boost::optional<GooString> &ownerPassword = {}, const boost::optional<GooString> &userPassword = {}, void *guiDataA = nullptr, const std::function<void()> &xrefReconstructedCallback = {}); + ~PDFDoc(); + + PDFDoc(const PDFDoc &) = delete; +@@ -493,7 +493,7 @@ + // sign() takes ownership of partialFieldName. + bool sign(const char *saveFilename, const char *certNickname, const char *password, GooString *partialFieldName, int page, const PDFRectangle &rect, const GooString &signatureText, const GooString &signatureTextLeft, double fontSize, + double leftFontSize, std::unique_ptr<AnnotColor> &&fontColor, double borderWidth, std::unique_ptr<AnnotColor> &&borderColor, std::unique_ptr<AnnotColor> &&backgroundColor, const GooString *reason = nullptr, +- const GooString *location = nullptr, const std::string &imagePath = "", const std::optional<GooString> &ownerPassword = {}, const std::optional<GooString> &userPassword = {}); ++ const GooString *location = nullptr, const std::string &imagePath = "", const boost::optional<GooString> &ownerPassword = {}, const boost::optional<GooString> &userPassword = {}); + + private: + // insert referenced objects in XRef +@@ -526,10 +526,10 @@ + Hints *getHints(); + + PDFDoc(); +- bool setup(const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword, const std::function<void()> &xrefReconstructedCallback); ++ bool setup(const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword, const std::function<void()> &xrefReconstructedCallback); + bool checkFooter(); + void checkHeader(); +- bool checkEncryption(const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword); ++ bool checkEncryption(const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword); + void extractPDFSubtype(); + + // Get the offset of the start xref table. +diff -ur poppler/poppler/PDFDocBuilder.h poppler/poppler/PDFDocBuilder.h +--- poppler/poppler/PDFDocBuilder.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/PDFDocBuilder.h 2022-09-16 16:27:48.525644000 +0300 +@@ -38,7 +38,7 @@ + // Builds a new PDFDoc. Returns a PDFDoc. You should check this PDFDoc + // with PDFDoc::isOk() for failures. + // The caller is responsible for deleting ownerPassword, userPassWord and guiData. +- virtual std::unique_ptr<PDFDoc> buildPDFDoc(const GooString &uri, const std::optional<GooString> &ownerPassword = {}, const std::optional<GooString> &userPassword = {}, void *guiDataA = nullptr) = 0; ++ virtual std::unique_ptr<PDFDoc> buildPDFDoc(const GooString &uri, const boost::optional<GooString> &ownerPassword = {}, const boost::optional<GooString> &userPassword = {}, void *guiDataA = nullptr) = 0; + + // Returns true if the builder supports building a PDFDoc from the URI. + virtual bool supports(const GooString &uri) = 0; +diff -ur poppler/poppler/PDFDocFactory.cc poppler/poppler/PDFDocFactory.cc +--- poppler/poppler/PDFDocFactory.cc 2022-09-16 21:58:42.630812800 +0300 ++++ poppler/poppler/PDFDocFactory.cc 2022-09-16 16:27:48.663754200 +0300 +@@ -54,7 +54,7 @@ + } + } + +-std::unique_ptr<PDFDoc> PDFDocFactory::createPDFDoc(const GooString &uri, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword, void *guiDataA) ++std::unique_ptr<PDFDoc> PDFDocFactory::createPDFDoc(const GooString &uri, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword, void *guiDataA) + { + for (int i = builders->size() - 1; i >= 0; i--) { + PDFDocBuilder *builder = (*builders)[i]; +diff -ur poppler/poppler/PDFDocFactory.h poppler/poppler/PDFDocFactory.h +--- poppler/poppler/PDFDocFactory.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/PDFDocFactory.h 2022-09-16 16:27:48.748339700 +0300 +@@ -46,7 +46,7 @@ + // Create a PDFDoc. Returns a PDFDoc. You should check this PDFDoc + // with PDFDoc::isOk() for failures. + // The caller is responsible for deleting ownerPassword, userPassWord and guiData. +- std::unique_ptr<PDFDoc> createPDFDoc(const GooString &uri, const std::optional<GooString> &ownerPassword = {}, const std::optional<GooString> &userPassword = {}, void *guiDataA = nullptr); ++ std::unique_ptr<PDFDoc> createPDFDoc(const GooString &uri, const boost::optional<GooString> &ownerPassword = {}, const boost::optional<GooString> &userPassword = {}, void *guiDataA = nullptr); + + // Extend supported URIs with the ones from the PDFDocBuilder. + void registerPDFDocBuilder(PDFDocBuilder *pdfDocBuilder); +diff -ur poppler/poppler/PSOutputDev.cc poppler/poppler/PSOutputDev.cc +--- poppler/poppler/PSOutputDev.cc 2022-09-16 21:58:42.831194900 +0300 ++++ poppler/poppler/PSOutputDev.cc 2022-09-16 16:27:49.196271400 +0300 +@@ -1979,7 +1979,7 @@ + psName = GooString::format("T3_{0:d}_{1:d}", font->getID()->num, font->getID()->gen).release(); + setupType3Font(font, psName, parentResDict); + } else { +- std::optional<GfxFontLoc> fontLoc = font->locateFont(xref, this); ++ boost::optional<GfxFontLoc> fontLoc = font->locateFont(xref, this); + if (fontLoc) { + switch (fontLoc->locType) { + case gfxFontLocEmbedded: +@@ -2395,7 +2395,7 @@ + embFontList->append("\n"); + + // convert it to a Type 1 font +- const std::optional<std::vector<unsigned char>> fontBuf = font->readEmbFontFile(xref); ++ const boost::optional<std::vector<unsigned char>> fontBuf = font->readEmbFontFile(xref); + if (fontBuf) { + if ((ffT1C = FoFiType1C::make(fontBuf->data(), fontBuf->size()))) { + ffT1C->convertToType1(psName->c_str(), nullptr, true, outputFunc, outputStream); +@@ -2434,7 +2434,7 @@ + embFontList->append("\n"); + + // convert it to a Type 1 font +- const std::optional<std::vector<unsigned char>> fontBuf = font->readEmbFontFile(xref); ++ const boost::optional<std::vector<unsigned char>> fontBuf = font->readEmbFontFile(xref); + if (fontBuf) { + if (std::unique_ptr<FoFiTrueType> ffTT = FoFiTrueType::make(fontBuf->data(), fontBuf->size())) { + if (ffTT->isOpenTypeCFF()) { +@@ -2458,7 +2458,7 @@ + embFontList->append("\n"); + + // convert it to a Type 42 font +- const std::optional<std::vector<unsigned char>> fontBuf = font->readEmbFontFile(xref); ++ const boost::optional<std::vector<unsigned char>> fontBuf = font->readEmbFontFile(xref); + if (fontBuf) { + if (std::unique_ptr<FoFiTrueType> ffTT = FoFiTrueType::make(fontBuf->data(), fontBuf->size())) { + codeToGID = ((Gfx8BitFont *)font)->getCodeToGIDMap(ffTT.get()); +@@ -2595,7 +2595,7 @@ + embFontList->append("\n"); + + // convert it to a Type 0 font +- const std::optional<std::vector<unsigned char>> fontBuf = font->readEmbFontFile(xref); ++ const boost::optional<std::vector<unsigned char>> fontBuf = font->readEmbFontFile(xref); + if (fontBuf) { + if ((ffT1C = FoFiType1C::make(fontBuf->data(), fontBuf->size()))) { + if (level >= psLevel3) { +@@ -2622,7 +2622,7 @@ + embFontList->append("\n"); + + // convert it to a Type 0 font +- const std::optional<std::vector<unsigned char>> fontBuf = font->readEmbFontFile(xref); ++ const boost::optional<std::vector<unsigned char>> fontBuf = font->readEmbFontFile(xref); + if (fontBuf) { + if (std::unique_ptr<FoFiTrueType> ffTT = FoFiTrueType::make(fontBuf->data(), fontBuf->size())) { + if (level >= psLevel3) { +@@ -2668,7 +2668,7 @@ + embFontList->append("\n"); + + // convert it to a Type 0 font +- const std::optional<std::vector<unsigned char>> fontBuf = font->readEmbFontFile(xref); ++ const boost::optional<std::vector<unsigned char>> fontBuf = font->readEmbFontFile(xref); + if (fontBuf) { + if (std::unique_ptr<FoFiTrueType> ffTT = FoFiTrueType::make(fontBuf->data(), fontBuf->size())) { + if (ffTT->isOpenTypeCFF()) { +diff -ur poppler/poppler/SecurityHandler.cc poppler/poppler/SecurityHandler.cc +--- poppler/poppler/SecurityHandler.cc 2022-09-16 21:58:43.016329200 +0300 ++++ poppler/poppler/SecurityHandler.cc 2022-09-16 16:27:49.497002700 +0300 +@@ -62,7 +62,7 @@ + + SecurityHandler::~SecurityHandler() { } + +-bool SecurityHandler::checkEncryption(const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword) ++bool SecurityHandler::checkEncryption(const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword) + { + void *authData; + +@@ -290,7 +290,7 @@ + return encVersion == -1 && encRevision == -1; + } + +-void *StandardSecurityHandler::makeAuthData(const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword) ++void *StandardSecurityHandler::makeAuthData(const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword) + { + return new StandardAuthData(ownerPassword ? ownerPassword->copy() : nullptr, userPassword ? userPassword->copy() : nullptr); + } +diff -ur poppler/poppler/SecurityHandler.h poppler/poppler/SecurityHandler.h +--- poppler/poppler/SecurityHandler.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/poppler/SecurityHandler.h 2022-09-16 16:29:39.504613800 +0300 +@@ -27,7 +27,7 @@ + + #include "Object.h" + +-#include <optional> ++#include <boost/optional.hpp> + + class GooString; + class PDFDoc; +@@ -59,12 +59,12 @@ + // document can be opened (if it's unencrypted, or if a correct + // password is obtained); false otherwise (encrypted and no correct + // password). +- bool checkEncryption(const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword); ++ bool checkEncryption(const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword); + + // Create authorization data for the specified owner and user + // passwords. If the security handler doesn't support "batch" mode, + // this function should return NULL. +- virtual void *makeAuthData(const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword) = 0; ++ virtual void *makeAuthData(const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword) = 0; + + // Free the authorization data returned by makeAuthData or + // getAuthData. +@@ -101,7 +101,7 @@ + ~StandardSecurityHandler() override; + + bool isUnencrypted() const override; +- void *makeAuthData(const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword) override; ++ void *makeAuthData(const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword) override; + void freeAuthData(void *authData) override; + bool authorize(void *authData) override; + int getPermissionFlags() const override { return permFlags; } +diff -ur poppler/poppler/SignatureHandler.cc poppler/poppler/SignatureHandler.cc +--- poppler/poppler/SignatureHandler.cc 2022-09-16 21:58:43.053838500 +0300 ++++ poppler/poppler/SignatureHandler.cc 2022-09-16 16:29:42.905567600 +0300 +@@ -26,7 +26,7 @@ + #include "goo/gdir.h" + #include "goo/gmem.h" + +-#include <optional> ++#include <boost/optional.hpp> + + #include <Error.h> + +@@ -703,7 +703,7 @@ + } + } + +-static std::optional<std::string> getDefaultFirefoxCertDB() ++static boost::optional<std::string> getDefaultFirefoxCertDB() + { + #ifdef _WIN32 + const char *env = getenv("APPDATA"); +@@ -756,7 +756,7 @@ + initSuccess = (NSS_Init(nssDir.c_str()) == SECSuccess); + sNssDir = nssDir.toStr(); + } else { +- const std::optional<std::string> certDBPath = getDefaultFirefoxCertDB(); ++ const boost::optional<std::string> certDBPath = getDefaultFirefoxCertDB(); + if (!certDBPath) { + initSuccess = (NSS_Init("sql:/etc/pki/nssdb") == SECSuccess); + sNssDir = "sql:/etc/pki/nssdb"; +diff -ur poppler/poppler/SplashOutputDev.cc poppler/poppler/SplashOutputDev.cc +--- poppler/poppler/SplashOutputDev.cc 2022-09-16 21:58:43.216349700 +0300 ++++ poppler/poppler/SplashOutputDev.cc 2022-09-16 16:27:50.045157400 +0300 +@@ -1880,7 +1880,7 @@ + + } else { + +- std::optional<GfxFontLoc> fontLoc = gfxFont->locateFont((xref) ? xref : doc->getXRef(), nullptr); ++ boost::optional<GfxFontLoc> fontLoc = gfxFont->locateFont((xref) ? xref : doc->getXRef(), nullptr); + if (!fontLoc) { + error(errSyntaxError, -1, "Couldn't find a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)"); + goto err2; +@@ -1888,7 +1888,7 @@ + + // embedded font + std::string fileName; +- std::optional<std::vector<unsigned char>> tmpBuf; ++ boost::optional<std::vector<unsigned char>> tmpBuf; + + if (fontLoc->locType == gfxFontLocEmbedded) { + // if there is an embedded font, read it to memory +diff -ur poppler/poppler/XRef.cc poppler/poppler/XRef.cc +--- poppler/poppler/XRef.cc 2022-09-16 21:58:43.739914900 +0300 ++++ poppler/poppler/XRef.cc 2022-09-16 16:33:54.004790900 +0300 +@@ -234,7 +234,7 @@ + // XRef + //------------------------------------------------------------------------ + +-#define xrefLocker() const std::scoped_lock locker(mutex) ++#define xrefLocker() std::unique_lock<std::recursive_mutex> locker(mutex) + + XRef::XRef() : objStrs { 5 } + { +diff -ur poppler/qt5/src/poppler-annotation.cc poppler/qt5/src/poppler-annotation.cc +--- poppler/qt5/src/poppler-annotation.cc 2022-09-16 21:58:43.802403600 +0300 ++++ poppler/qt5/src/poppler-annotation.cc 2022-09-16 16:27:54.525570000 +0300 +@@ -916,7 +916,7 @@ + // data fields + TextAnnotation::TextType textType; + QString textIcon; +- std::optional<QFont> textFont; ++ boost::optional<QFont> textFont; + QColor textColor = Qt::black; + int inplaceAlign; // 0:left, 1:center, 2:right + QVector<QPointF> inplaceCallout; +diff -ur poppler/qt5/src/poppler-form.cc poppler/qt5/src/poppler-form.cc +--- poppler/qt5/src/poppler-form.cc 2022-09-16 21:58:44.156316400 +0300 ++++ poppler/qt5/src/poppler-form.cc 2022-09-16 16:27:54.957870900 +0300 +@@ -1074,7 +1074,7 @@ + priv->range_bounds.append(bound); + } + } +- const std::optional<GooString> checkedSignature = fws->getCheckedSignature(&priv->docLength); ++ const boost::optional<GooString> checkedSignature = fws->getCheckedSignature(&priv->docLength); + if (priv->range_bounds.size() == 4 && checkedSignature) { + priv->signature = QByteArray::fromHex(checkedSignature->c_str()); + } +@@ -1090,7 +1090,7 @@ + } + + Goffset file_size = 0; +- const std::optional<GooString> sig = fws->getCheckedSignature(&file_size); ++ const boost::optional<GooString> sig = fws->getCheckedSignature(&file_size); + if (sig) { + // the above unsigned_signature_field check + // should already catch this, but double check +@@ -1098,8 +1098,8 @@ + } + const auto reason = std::unique_ptr<GooString>(data.reason().isEmpty() ? nullptr : QStringToUnicodeGooString(data.reason())); + const auto location = std::unique_ptr<GooString>(data.location().isEmpty() ? nullptr : QStringToUnicodeGooString(data.location())); +- const auto ownerPwd = std::optional<GooString>(data.documentOwnerPassword().constData()); +- const auto userPwd = std::optional<GooString>(data.documentUserPassword().constData()); ++ const auto ownerPwd = boost::optional<GooString>(data.documentOwnerPassword().constData()); ++ const auto userPwd = boost::optional<GooString>(data.documentUserPassword().constData()); + const auto gSignatureText = std::unique_ptr<GooString>(QStringToUnicodeGooString(data.signatureText())); + const auto gSignatureLeftText = std::unique_ptr<GooString>(QStringToUnicodeGooString(data.signatureLeftText())); + +diff -ur poppler/qt5/src/poppler-pdf-converter.cc poppler/qt5/src/poppler-pdf-converter.cc +--- poppler/qt5/src/poppler-pdf-converter.cc 2022-09-16 21:58:44.688637900 +0300 ++++ poppler/qt5/src/poppler-pdf-converter.cc 2022-09-16 16:27:55.929224400 +0300 +@@ -138,8 +138,8 @@ + std::unique_ptr<GooString> gSignatureLeftText = std::unique_ptr<GooString>(QStringToUnicodeGooString(data.signatureLeftText())); + const auto reason = std::unique_ptr<GooString>(data.reason().isEmpty() ? nullptr : QStringToUnicodeGooString(data.reason())); + const auto location = std::unique_ptr<GooString>(data.location().isEmpty() ? nullptr : QStringToUnicodeGooString(data.location())); +- const auto ownerPwd = std::optional<GooString>(data.documentOwnerPassword().constData()); +- const auto userPwd = std::optional<GooString>(data.documentUserPassword().constData()); ++ const auto ownerPwd = boost::optional<GooString>(data.documentOwnerPassword().constData()); ++ const auto userPwd = boost::optional<GooString>(data.documentUserPassword().constData()); + return doc->sign(d->outputFileName.toUtf8().constData(), data.certNickname().toUtf8().constData(), data.password().toUtf8().constData(), QStringToGooString(data.fieldPartialName()), data.page() + 1, + boundaryToPdfRectangle(destPage, data.boundingRectangle(), Annotation::FixedRotation), *gSignatureText, *gSignatureLeftText, data.fontSize(), data.leftFontSize(), convertQColor(data.fontColor()), data.borderWidth(), + convertQColor(data.borderColor()), convertQColor(data.backgroundColor()), reason.get(), location.get(), data.imagePath().toStdString(), ownerPwd, userPwd); +diff -ur poppler/qt5/src/poppler-private.h poppler/qt5/src/poppler-private.h +--- poppler/qt5/src/poppler-private.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/qt5/src/poppler-private.h 2022-09-16 16:27:56.082938600 +0300 +@@ -104,7 +104,7 @@ + class DocumentData : private GlobalParamsIniter + { + public: +- DocumentData(const QString &filePath, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword) : GlobalParamsIniter(qt5ErrorFunction) ++ DocumentData(const QString &filePath, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword) : GlobalParamsIniter(qt5ErrorFunction) + { + init(); + m_device = nullptr; +@@ -117,7 +117,7 @@ + #endif + } + +- DocumentData(QIODevice *device, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword) : GlobalParamsIniter(qt5ErrorFunction) ++ DocumentData(QIODevice *device, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword) : GlobalParamsIniter(qt5ErrorFunction) + { + m_device = device; + QIODeviceInStream *str = new QIODeviceInStream(device, 0, false, device->size(), Object(objNull)); +@@ -125,7 +125,7 @@ + doc = new PDFDoc(str, ownerPassword, userPassword, nullptr, std::bind(&DocumentData::noitfyXRefReconstructed, this)); + } + +- DocumentData(const QByteArray &data, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword) : GlobalParamsIniter(qt5ErrorFunction) ++ DocumentData(const QByteArray &data, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword) : GlobalParamsIniter(qt5ErrorFunction) + { + m_device = nullptr; + fileContents = data; +diff -ur poppler/qt5/src/QPainterOutputDev.cc poppler/qt5/src/QPainterOutputDev.cc +--- poppler/qt5/src/QPainterOutputDev.cc 2022-09-16 21:58:45.036351300 +0300 ++++ poppler/qt5/src/QPainterOutputDev.cc 2022-09-16 16:27:56.631141300 +0300 +@@ -456,13 +456,13 @@ + // New font: load it into the cache + float fontSize = state->getFontSize(); + +- std::optional<GfxFontLoc> fontLoc = gfxFont->locateFont(xref, nullptr); ++ boost::optional<GfxFontLoc> fontLoc = gfxFont->locateFont(xref, nullptr); + + if (fontLoc) { + // load the font from respective location + switch (fontLoc->locType) { + case gfxFontLocEmbedded: { // if there is an embedded font, read it to memory +- const std::optional<std::vector<unsigned char>> fontData = gfxFont->readEmbFontFile(xref); ++ const boost::optional<std::vector<unsigned char>> fontData = gfxFont->readEmbFontFile(xref); + + // fontData gets copied in the QByteArray constructor + m_rawFont = new QRawFont(QByteArray(fontData ? (const char *)fontData->data() : nullptr, fontData ? fontData->size() : 0), fontSize, m_hintingPreference); +@@ -519,9 +519,9 @@ + + } else { + +- std::optional<std::vector<unsigned char>> fontBuffer; ++ boost::optional<std::vector<unsigned char>> fontBuffer; + +- std::optional<GfxFontLoc> fontLoc = gfxFont->locateFont(xref, nullptr); ++ boost::optional<GfxFontLoc> fontLoc = gfxFont->locateFont(xref, nullptr); + if (!fontLoc) { + error(errSyntaxError, -1, "Couldn't find a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)"); + return; +diff -ur poppler/qt6/src/poppler-annotation.cc poppler/qt6/src/poppler-annotation.cc +--- poppler/qt6/src/poppler-annotation.cc 2022-09-16 21:58:45.421753700 +0300 ++++ poppler/qt6/src/poppler-annotation.cc 2022-09-16 16:28:00.741508000 +0300 +@@ -836,7 +836,7 @@ + // data fields + TextAnnotation::TextType textType; + QString textIcon; +- std::optional<QFont> textFont; ++ boost::optional<QFont> textFont; + QColor textColor = Qt::black; + TextAnnotation::InplaceAlignPosition inplaceAlign; + QVector<QPointF> inplaceCallout; +diff -ur poppler/qt6/src/poppler-form.cc poppler/qt6/src/poppler-form.cc +--- poppler/qt6/src/poppler-form.cc 2022-09-16 21:58:45.690879600 +0300 ++++ poppler/qt6/src/poppler-form.cc 2022-09-16 16:28:01.195951400 +0300 +@@ -1074,7 +1074,7 @@ + priv->range_bounds.append(bound); + } + } +- const std::optional<GooString> checkedSignature = fws->getCheckedSignature(&priv->docLength); ++ const boost::optional<GooString> checkedSignature = fws->getCheckedSignature(&priv->docLength); + if (priv->range_bounds.size() == 4 && checkedSignature) { + priv->signature = QByteArray::fromHex(checkedSignature->c_str()); + } +@@ -1090,7 +1090,7 @@ + } + + Goffset file_size = 0; +- const std::optional<GooString> sig = fws->getCheckedSignature(&file_size); ++ const boost::optional<GooString> sig = fws->getCheckedSignature(&file_size); + if (sig) { + // the above unsigned_signature_field check + // should already catch this, but double check +@@ -1098,8 +1098,8 @@ + } + const auto reason = std::unique_ptr<GooString>(data.reason().isEmpty() ? nullptr : QStringToUnicodeGooString(data.reason())); + const auto location = std::unique_ptr<GooString>(data.location().isEmpty() ? nullptr : QStringToUnicodeGooString(data.location())); +- const auto ownerPwd = std::optional<GooString>(data.documentOwnerPassword().constData()); +- const auto userPwd = std::optional<GooString>(data.documentUserPassword().constData()); ++ const auto ownerPwd = boost::optional<GooString>(data.documentOwnerPassword().constData()); ++ const auto userPwd = boost::optional<GooString>(data.documentUserPassword().constData()); + const auto gSignatureText = std::unique_ptr<GooString>(QStringToUnicodeGooString(data.signatureText())); + const auto gSignatureLeftText = std::unique_ptr<GooString>(QStringToUnicodeGooString(data.signatureLeftText())); + +diff -ur poppler/qt6/src/poppler-pdf-converter.cc poppler/qt6/src/poppler-pdf-converter.cc +--- poppler/qt6/src/poppler-pdf-converter.cc 2022-09-16 21:58:46.138849200 +0300 ++++ poppler/qt6/src/poppler-pdf-converter.cc 2022-09-16 16:28:02.298624000 +0300 +@@ -138,8 +138,8 @@ + std::unique_ptr<GooString> gSignatureLeftText = std::unique_ptr<GooString>(QStringToUnicodeGooString(data.signatureLeftText())); + const auto reason = std::unique_ptr<GooString>(data.reason().isEmpty() ? nullptr : QStringToUnicodeGooString(data.reason())); + const auto location = std::unique_ptr<GooString>(data.location().isEmpty() ? nullptr : QStringToUnicodeGooString(data.location())); +- const auto ownerPwd = std::optional<GooString>(data.documentOwnerPassword().constData()); +- const auto userPwd = std::optional<GooString>(data.documentUserPassword().constData()); ++ const auto ownerPwd = boost::optional<GooString>(data.documentOwnerPassword().constData()); ++ const auto userPwd = boost::optional<GooString>(data.documentUserPassword().constData()); + return doc->sign(d->outputFileName.toUtf8().constData(), data.certNickname().toUtf8().constData(), data.password().toUtf8().constData(), QStringToGooString(data.fieldPartialName()), data.page() + 1, + boundaryToPdfRectangle(destPage, data.boundingRectangle(), Annotation::FixedRotation), *gSignatureText, *gSignatureLeftText, data.fontSize(), data.leftFontSize(), convertQColor(data.fontColor()), data.borderWidth(), + convertQColor(data.borderColor()), convertQColor(data.backgroundColor()), reason.get(), location.get(), data.imagePath().toStdString(), ownerPwd, userPwd); +diff -ur poppler/qt6/src/poppler-private.h poppler/qt6/src/poppler-private.h +--- poppler/qt6/src/poppler-private.h 2022-09-01 01:30:57.000000000 +0300 ++++ poppler/qt6/src/poppler-private.h 2022-09-16 16:28:02.430145200 +0300 +@@ -103,7 +103,7 @@ + class DocumentData : private GlobalParamsIniter + { + public: +- DocumentData(const QString &filePath, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword) : GlobalParamsIniter(qt6ErrorFunction) ++ DocumentData(const QString &filePath, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword) : GlobalParamsIniter(qt6ErrorFunction) + { + init(); + m_device = nullptr; +@@ -116,7 +116,7 @@ + #endif + } + +- DocumentData(QIODevice *device, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword) : GlobalParamsIniter(qt6ErrorFunction) ++ DocumentData(QIODevice *device, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword) : GlobalParamsIniter(qt6ErrorFunction) + { + m_device = device; + QIODeviceInStream *str = new QIODeviceInStream(device, 0, false, device->size(), Object(objNull)); +@@ -124,7 +124,7 @@ + doc = new PDFDoc(str, ownerPassword, userPassword, nullptr, std::bind(&DocumentData::noitfyXRefReconstructed, this)); + } + +- DocumentData(const QByteArray &data, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword) : GlobalParamsIniter(qt6ErrorFunction) ++ DocumentData(const QByteArray &data, const boost::optional<GooString> &ownerPassword, const boost::optional<GooString> &userPassword) : GlobalParamsIniter(qt6ErrorFunction) + { + m_device = nullptr; + fileContents = data; +diff -ur poppler/qt6/src/QPainterOutputDev.cc poppler/qt6/src/QPainterOutputDev.cc +--- poppler/qt6/src/QPainterOutputDev.cc 2022-09-16 21:58:46.508788000 +0300 ++++ poppler/qt6/src/QPainterOutputDev.cc 2022-09-16 16:28:03.084267900 +0300 +@@ -456,13 +456,13 @@ + // New font: load it into the cache + float fontSize = state->getFontSize(); + +- std::optional<GfxFontLoc> fontLoc = gfxFont->locateFont(xref, nullptr); ++ boost::optional<GfxFontLoc> fontLoc = gfxFont->locateFont(xref, nullptr); + + if (fontLoc) { + // load the font from respective location + switch (fontLoc->locType) { + case gfxFontLocEmbedded: { // if there is an embedded font, read it to memory +- const std::optional<std::vector<unsigned char>> fontData = gfxFont->readEmbFontFile(xref); ++ const boost::optional<std::vector<unsigned char>> fontData = gfxFont->readEmbFontFile(xref); + + // fontData gets copied in the QByteArray constructor + m_rawFont = new QRawFont(QByteArray(fontData ? (const char *)fontData->data() : nullptr, fontData ? fontData->size() : 0), fontSize, m_hintingPreference); +@@ -519,9 +519,9 @@ + + } else { + +- std::optional<std::vector<unsigned char>> fontBuffer; ++ boost::optional<std::vector<unsigned char>> fontBuffer; + +- std::optional<GfxFontLoc> fontLoc = gfxFont->locateFont(xref, nullptr); ++ boost::optional<GfxFontLoc> fontLoc = gfxFont->locateFont(xref, nullptr); + if (!fontLoc) { + error(errSyntaxError, -1, "Couldn't find a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)"); + return; +diff -ur poppler/test/cairo-thread-test.cc poppler/test/cairo-thread-test.cc +--- poppler/test/cairo-thread-test.cc 2022-09-16 21:58:47.521142700 +0300 ++++ poppler/test/cairo-thread-test.cc 2022-09-16 16:34:02.295177800 +0300 +@@ -95,7 +95,7 @@ + + void pushJob(std::unique_ptr<Job> &job) + { +- std::scoped_lock lock { mutex }; ++ std::unique_lock<std::recursive_mutex> locker(mutex); + queue.push_back(std::move(job)); + condition.notify_one(); + } +diff -ur poppler/test/pdf-fullrewrite.cc poppler/test/pdf-fullrewrite.cc +--- poppler/test/pdf-fullrewrite.cc 2022-09-16 21:58:47.948504400 +0300 ++++ poppler/test/pdf-fullrewrite.cc 2022-09-16 16:28:07.674133900 +0300 +@@ -39,8 +39,8 @@ + { + PDFDoc *doc = nullptr; + PDFDoc *docOut = nullptr; +- std::optional<GooString> ownerPW; +- std::optional<GooString> userPW; ++ boost::optional<GooString> ownerPW; ++ boost::optional<GooString> userPW; + int res = 0; + + // parse args +diff -ur poppler/utils/HtmlFonts.cc poppler/utils/HtmlFonts.cc +--- poppler/utils/HtmlFonts.cc 2022-09-16 21:58:48.311749200 +0300 ++++ poppler/utils/HtmlFonts.cc 2022-09-16 16:28:08.144188300 +0300 +@@ -142,7 +142,7 @@ + italic = true; + } + +- if (const std::optional<std::string> &fontname = font.getName()) { ++ if (const boost::optional<std::string> &fontname = font.getName()) { + FontName = new GooString(*fontname); + + GooString fontnameLower(*fontname); +diff -ur poppler/utils/pdfdetach.cc poppler/utils/pdfdetach.cc +--- poppler/utils/pdfdetach.cc 2022-09-16 21:58:48.765935200 +0300 ++++ poppler/utils/pdfdetach.cc 2022-09-16 16:28:09.200135500 +0300 +@@ -75,7 +75,7 @@ + std::unique_ptr<PDFDoc> doc; + GooString *fileName; + const UnicodeMap *uMap; +- std::optional<GooString> ownerPW, userPW; ++ boost::optional<GooString> ownerPW, userPW; + char uBuf[8]; + char path[1024]; + char *p; +diff -ur poppler/utils/pdffonts.cc poppler/utils/pdffonts.cc +--- poppler/utils/pdffonts.cc 2022-09-16 21:58:48.866190300 +0300 ++++ poppler/utils/pdffonts.cc 2022-09-16 16:28:09.316058100 +0300 +@@ -68,7 +68,7 @@ + + int main(int argc, char *argv[]) + { +- std::optional<GooString> ownerPW, userPW; ++ boost::optional<GooString> ownerPW, userPW; + bool ok; + + Win32Console win32Console(&argc, &argv); +diff -ur poppler/utils/pdfimages.cc poppler/utils/pdfimages.cc +--- poppler/utils/pdfimages.cc 2022-09-16 21:58:48.966442700 +0300 ++++ poppler/utils/pdfimages.cc 2022-09-16 16:28:09.416306000 +0300 +@@ -98,7 +98,7 @@ + { + GooString *fileName; + char *imgRoot = nullptr; +- std::optional<GooString> ownerPW, userPW; ++ boost::optional<GooString> ownerPW, userPW; + ImageOutputDev *imgOut; + bool ok; + +diff -ur poppler/utils/pdfinfo.cc poppler/utils/pdfinfo.cc +--- poppler/utils/pdfinfo.cc 2022-09-16 21:58:49.113549500 +0300 ++++ poppler/utils/pdfinfo.cc 2022-09-16 16:28:09.494410900 +0300 +@@ -920,7 +920,7 @@ + { + std::unique_ptr<PDFDoc> doc; + GooString *fileName; +- std::optional<GooString> ownerPW, userPW; ++ boost::optional<GooString> ownerPW, userPW; + const UnicodeMap *uMap; + FILE *f; + bool ok; +diff -ur poppler/utils/pdfsig.cc poppler/utils/pdfsig.cc +--- poppler/utils/pdfsig.cc 2022-09-16 21:58:49.314079800 +0300 ++++ poppler/utils/pdfsig.cc 2022-09-16 16:28:09.701475800 +0300 +@@ -289,7 +289,7 @@ + + std::unique_ptr<GooString> fileName = std::make_unique<GooString>(argv[1]); + +- std::optional<GooString> ownerPW, userPW; ++ boost::optional<GooString> ownerPW, userPW; + if (ownerPassword[0] != '\001') { + ownerPW = GooString(ownerPassword); + } +@@ -425,7 +425,7 @@ + + FormFieldSignature *ffs = signatures.at(signatureNumber - 1); + Goffset file_size = 0; +- const std::optional<GooString> sig = ffs->getCheckedSignature(&file_size); ++ const boost::optional<GooString> sig = ffs->getCheckedSignature(&file_size); + if (sig) { + printf("Signature number %d is already signed\n", signatureNumber); + return 2; +@@ -530,7 +530,7 @@ + if (ranges.size() == 4) { + printf(" - Signed Ranges: [%lld - %lld], [%lld - %lld]\n", ranges[0], ranges[1], ranges[2], ranges[3]); + Goffset checked_file_size; +- const std::optional<GooString> signature = signatures.at(i)->getCheckedSignature(&checked_file_size); ++ const boost::optional<GooString> signature = signatures.at(i)->getCheckedSignature(&checked_file_size); + if (signature && checked_file_size == ranges[3]) { + printf(" - Total document signed\n"); + } else { +diff -ur poppler/utils/pdftocairo.cc poppler/utils/pdftocairo.cc +--- poppler/utils/pdftocairo.cc 2022-09-16 21:58:49.483371200 +0300 ++++ poppler/utils/pdftocairo.cc 2022-09-16 16:28:09.948904300 +0300 +@@ -900,7 +900,7 @@ + GooString *outputName = nullptr; + GooString *outputFileName = nullptr; + GooString *imageFileName = nullptr; +- std::optional<GooString> ownerPW, userPW; ++ boost::optional<GooString> ownerPW, userPW; + CairoOutputDev *cairoOut; + int pg, pg_num_len; + double pg_w, pg_h, tmp, output_w, output_h; +diff -ur poppler/utils/pdftohtml.cc poppler/utils/pdftohtml.cc +--- poppler/utils/pdftohtml.cc 2022-09-16 21:58:49.599244600 +0300 ++++ poppler/utils/pdftohtml.cc 2022-09-16 16:28:10.080425900 +0300 +@@ -165,7 +165,7 @@ + SplashOutputDev *splashOut = nullptr; + bool doOutline; + bool ok; +- std::optional<GooString> ownerPW, userPW; ++ boost::optional<GooString> ownerPW, userPW; + Object info; + int exit_status = EXIT_FAILURE; + +diff -ur poppler/utils/pdftoppm.cc poppler/utils/pdftoppm.cc +--- poppler/utils/pdftoppm.cc 2022-09-16 21:58:49.683883000 +0300 ++++ poppler/utils/pdftoppm.cc 2022-09-16 16:28:10.198840800 +0300 +@@ -401,7 +401,7 @@ + GooString *fileName = nullptr; + char *ppmRoot = nullptr; + char *ppmFile; +- std::optional<GooString> ownerPW, userPW; ++ boost::optional<GooString> ownerPW, userPW; + SplashColor paperColor; + #ifndef UTILS_USE_PTHREADS + SplashOutputDev *splashOut; +diff -ur poppler/utils/pdftops.cc poppler/utils/pdftops.cc +--- poppler/utils/pdftops.cc 2022-09-16 21:58:49.752940500 +0300 ++++ poppler/utils/pdftops.cc 2022-09-16 16:28:10.318740600 +0300 +@@ -197,7 +197,7 @@ + GooString *psFileName; + PSLevel level; + PSOutMode mode; +- std::optional<GooString> ownerPW, userPW; ++ boost::optional<GooString> ownerPW, userPW; + PSOutputDev *psOut; + bool ok; + int exitCode; +diff -ur poppler/utils/pdftotext.cc poppler/utils/pdftotext.cc +--- poppler/utils/pdftotext.cc 2022-09-16 21:58:49.831085500 +0300 ++++ poppler/utils/pdftotext.cc 2022-09-16 16:28:10.465845300 +0300 +@@ -167,7 +167,7 @@ + std::unique_ptr<PDFDoc> doc; + GooString *fileName; + GooString *textFileName; +- std::optional<GooString> ownerPW, userPW; ++ boost::optional<GooString> ownerPW, userPW; + TextOutputDev *textOut; + FILE *f; + const UnicodeMap *uMap; diff --git a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx index a763ea7e54d1..446f507daa80 100644 --- a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx +++ b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx @@ -462,7 +462,7 @@ int PDFOutDev::parseFont( long long nNewId, GfxFont* gfxFont, GfxState* state ) // TODO(P3): Unfortunately, need to read stream twice, since // we must write byte count to stdout before #if POPPLER_CHECK_VERSION(22, 6, 0) - std::optional<std::vector<unsigned char>> pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef() ); + boost::optional<std::vector<unsigned char>> pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef() ); if ( pBuf ) { aNewFont.isEmbedded = true; @@ -489,7 +489,7 @@ void PDFOutDev::writeFontFile( GfxFont* gfxFont ) const int nSize = 0; #if POPPLER_CHECK_VERSION(22, 6, 0) - std::optional<std::vector<unsigned char>> pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef() ); + boost::optional<std::vector<unsigned char>> pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef() ); if ( pBuf ) nSize = pBuf->size(); if ( nSize == 0 ) diff --git a/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx b/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx index fd7ba9c332ea..7952adbcf206 100644 --- a/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx +++ b/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx @@ -121,12 +121,12 @@ int main(int argc, char **argv) #if POPPLER_CHECK_VERSION(22, 6, 0) PDFDoc aDoc( std::make_unique<GooString>(pFileName), - std::optional<GooString>(pOwnerPasswordStr), - std::optional<GooString>(pUserPasswordStr) ); + boost::optional<GooString>(pOwnerPasswordStr), + boost::optional<GooString>(pUserPasswordStr) ); PDFDoc aErrDoc( std::make_unique<GooString>(pErrFileName), - std::optional<GooString>(pOwnerPasswordStr), - std::optional<GooString>(pUserPasswordStr) ); + boost::optional<GooString>(pOwnerPasswordStr), + boost::optional<GooString>(pUserPasswordStr) ); #else PDFDoc aDoc( pFileName, pOwnerPasswordStr, |