diff --git a/pkgs/applications/office/libreoffice/default.nix b/pkgs/applications/office/libreoffice/default.nix index 5ebde5e10de..a67c9c2a70a 100644 --- a/pkgs/applications/office/libreoffice/default.nix +++ b/pkgs/applications/office/libreoffice/default.nix @@ -90,6 +90,9 @@ in (mkDrv rec { url = "https://github.com/archlinux/svntogit-packages/raw/f82958b9538f86e41b51f1ba7134968d2f3788d1/trunk/poppler-22.03.0.patch"; sha256 = "5h4qJmx6Q3Q3dHUlSi8JXBziN2mAswGVWk5aDTLTwls="; }) + + # Fix build with poppler 22.04 + ./poppler-22-04-0.patch ]; ### QT/KDE diff --git a/pkgs/applications/office/libreoffice/poppler-22-04-0.patch b/pkgs/applications/office/libreoffice/poppler-22-04-0.patch new file mode 100644 index 00000000000..c907bf1680b --- /dev/null +++ b/pkgs/applications/office/libreoffice/poppler-22-04-0.patch @@ -0,0 +1,100 @@ +Patch from OpenSUSE +https://build.opensuse.org/package/view_file/LibreOffice:Factory/libreoffice/poppler-22-04-0.patch?expand=1&rev=45e176f964509ebe3560d0dbf1ec8be9 +Index: libreoffice-7.3.3.1/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx +=================================================================== +--- libreoffice-7.3.3.1.orig/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx ++++ libreoffice-7.3.3.1/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx +@@ -474,12 +474,21 @@ int PDFOutDev::parseFont( long long nNew + { + // TODO(P3): Unfortunately, need to read stream twice, since + // we must write byte count to stdout before ++#if POPPLER_CHECK_VERSION(22, 04, 0) // readEmbFontFile signature changed ++ auto pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef()); ++ if ( pBuf ) ++ { ++ aNewFont.isEmbedded = true; ++ nSize = pBuf->size(); ++ } ++#else + char* pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef(), &nSize ); + if( pBuf ) + { + aNewFont.isEmbedded = true; + gfree(pBuf); + } ++#endif + } + + m_aFontMap[ nNewId ] = aNewFont; +@@ -492,21 +501,35 @@ void PDFOutDev::writeFontFile( GfxFont* + return; + + int nSize = 0; ++#if POPPLER_CHECK_VERSION(22, 04, 0) // readEmbFontFile signature changed ++ auto pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef()); ++ if ( !pBuf ) ++ return; ++ nSize = pBuf->size(); ++#else + char* pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef(), &nSize ); + if( !pBuf ) + return; ++#endif + + // ---sync point--- see SYNC STREAMS above + fflush(stdout); + ++#if POPPLER_CHECK_VERSION(22, 04, 0) // readEmbFontFile signature changed ++ if( fwrite(pBuf->data(), sizeof(unsigned char), nSize, g_binary_out) != static_cast(nSize) ) ++ { ++#else + if( fwrite(pBuf, sizeof(char), nSize, g_binary_out) != static_cast(nSize) ) + { + gfree(pBuf); ++#endif + exit(1); // error + } + // ---sync point--- see SYNC STREAMS above + fflush(g_binary_out); ++#if !POPPLER_CHECK_VERSION(22, 04, 0) // readEmbFontFile signature changed + gfree(pBuf); ++#endif + } + + #if POPPLER_CHECK_VERSION(0, 83, 0) +@@ -759,7 +782,11 @@ void PDFOutDev::updateFont(GfxState *sta + { + assert(state); + ++#if POPPLER_CHECK_VERSION(22, 04, 0) ++ std::shared_ptr gfxFont = state->getFont(); ++#else + GfxFont *gfxFont = state->getFont(); ++#endif + if( !gfxFont ) + return; + +@@ -776,7 +803,11 @@ void PDFOutDev::updateFont(GfxState *sta + m_aFontMap.find( fontID ); + if( it == m_aFontMap.end() ) + { ++#if POPPLER_CHECK_VERSION(22, 04, 0) ++ nEmbedSize = parseFont( fontID, gfxFont.get(), state ); ++#else + nEmbedSize = parseFont( fontID, gfxFont, state ); ++#endif + it = m_aFontMap.find( fontID ); + } + +@@ -806,7 +837,11 @@ void PDFOutDev::updateFont(GfxState *sta + + if (nEmbedSize) + { ++#if POPPLER_CHECK_VERSION(22, 04, 0) ++ writeFontFile(gfxFont.get()); ++#else + writeFontFile(gfxFont); ++#endif + } + } +