summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas K. Hüttel <dilfridge@gentoo.org>2018-09-15 23:46:01 +0200
committerAndreas K. Hüttel <dilfridge@gentoo.org>2018-09-15 23:46:30 +0200
commit2e0a12d57f1c5d198ab89b3a7b9b0a1c1e8a784c (patch)
tree2d5c8f4518742cad7118b0e8791de47a0fee7366 /media-gfx
parentnet-libs/libssh: Drop 0.8.1 (diff)
downloadgentoo-2e0a12d57f1c5d198ab89b3a7b9b0a1c1e8a784c.tar.gz
gentoo-2e0a12d57f1c5d198ab89b3a7b9b0a1c1e8a784c.tar.bz2
gentoo-2e0a12d57f1c5d198ab89b3a7b9b0a1c1e8a784c.zip
media-gfx/inkscape: Fix ugly bug with PDF import and Type3 fonts
All Type 3 text got swallowed due to a faulty poppler-0.64 compatibility patch. Works better with new commit from upstream. Package-Manager: Portage-2.3.49, Repoman-2.3.10
Diffstat (limited to 'media-gfx')
-rw-r--r--media-gfx/inkscape/files/inkscape-0.92.3-poppler-0.64-2.patch160
-rw-r--r--media-gfx/inkscape/inkscape-0.92.3-r1.ebuild180
2 files changed, 340 insertions, 0 deletions
diff --git a/media-gfx/inkscape/files/inkscape-0.92.3-poppler-0.64-2.patch b/media-gfx/inkscape/files/inkscape-0.92.3-poppler-0.64-2.patch
new file mode 100644
index 000000000000..4608bc79ecde
--- /dev/null
+++ b/media-gfx/inkscape/files/inkscape-0.92.3-poppler-0.64-2.patch
@@ -0,0 +1,160 @@
+From 66d05776ea2d403f2f48437f70d096a09724dfec Mon Sep 17 00:00:00 2001
+From: Eduard Braun <eduard.braun2@gmx.de>
+Date: Wed, 5 Sep 2018 00:31:06 +0200
+Subject: [PATCH] Modified fix for compatibility with poppler 0.64
+
+This is slightly uglier than f0697de012598ea84edafea9a326e5e101eccd2a
+but avoids duplicating strings (which is unnecessary and leaked memory).
+
+It's also closer to what upstream intended with the changes in 0.64.
+
+(cherry picked from commit 722e121361d0f784083d10e897155b7d4e44e515)
+---
+ .../internal/pdfinput/pdf-parser.cpp | 19 ++++++++++++++++---
+ src/extension/internal/pdfinput/pdf-parser.h | 6 ++++++
+ .../internal/pdfinput/svg-builder.cpp | 6 +++---
+ src/extension/internal/pdfinput/svg-builder.h | 4 ++--
+ 4 files changed, 27 insertions(+), 8 deletions(-)
+
+diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
+index a3aa3213a1..ea9f902e09 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.cpp
++++ b/src/extension/internal/pdfinput/pdf-parser.cpp
+@@ -36,6 +36,7 @@ extern "C" {
+ #include "pdf-parser.h"
+ #include "util/units.h"
+
++#include "glib/poppler-features.h"
+ #include "goo/gmem.h"
+ #include "goo/GooString.h"
+ #include "GlobalParams.h"
+@@ -2581,7 +2582,11 @@ void PdfParser::opShowSpaceText(Object args[], int /*numArgs*/)
+ }
+ }
+
++#if POPPLER_CHECK_VERSION(0,64,0)
+ void PdfParser::doShowText(const GooString *s) {
++#else
++void PdfParser::doShowText(GooString *s) {
++#endif
+ GfxFont *font;
+ int wMode;
+ double riseX, riseY;
+@@ -2594,7 +2599,11 @@ void PdfParser::doShowText(const GooString *s) {
+ Object charProc;
+ Dict *resDict;
+ Parser *oldParser;
++#if POPPLER_CHECK_VERSION(0,64,0)
++ const char *p;
++#else
+ char *p;
++#endif
+ int len, n, uLen;
+
+ font = state->getFont();
+@@ -2630,7 +2639,7 @@ void PdfParser::doShowText(const GooString *s) {
+ double lineX = state->getLineX();
+ double lineY = state->getLineY();
+ oldParser = parser;
+- p = g_strdup(s->getCString());
++ p = s->getCString();
+ len = s->getLength();
+ while (len > 0) {
+ n = font->getNextChar(p, len, &code,
+@@ -2685,7 +2694,7 @@ void PdfParser::doShowText(const GooString *s) {
+
+ } else {
+ state->textTransformDelta(0, state->getRise(), &riseX, &riseY);
+- p = g_strdup(s->getCString());
++ p = s->getCString();
+ len = s->getLength();
+ while (len > 0) {
+ n = font->getNextChar(p, len, &code,
+@@ -2731,7 +2740,11 @@ void PdfParser::opXObject(Object args[], int /*numArgs*/)
+ {
+ Object obj1, obj2, obj3, refObj;
+
+- char *name = g_strdup(args[0].getName());
++#if POPPLER_CHECK_VERSION(0,64,0)
++ const char *name = args[0].getName();
++#else
++ char *name = args[0].getName();
++#endif
+ #if defined(POPPLER_NEW_OBJECT_API)
+ if ((obj1 = res->lookupXObject(name)).isNull()) {
+ #else
+diff --git a/src/extension/internal/pdfinput/pdf-parser.h b/src/extension/internal/pdfinput/pdf-parser.h
+index f985b15cad..ed28274f42 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.h
++++ b/src/extension/internal/pdfinput/pdf-parser.h
+@@ -25,6 +25,7 @@ namespace Inkscape {
+ // TODO clean up and remove using:
+ using Inkscape::Extension::Internal::SvgBuilder;
+
++#include "glib/poppler-features.h"
+ #include "goo/gtypes.h"
+ #include "Object.h"
+
+@@ -287,7 +288,12 @@ private:
+ void opMoveShowText(Object args[], int numArgs);
+ void opMoveSetShowText(Object args[], int numArgs);
+ void opShowSpaceText(Object args[], int numArgs);
++#if POPPLER_CHECK_VERSION(0,64,0)
+ void doShowText(const GooString *s);
++#else
++ void doShowText(GooString *s);
++#endif
++
+
+ // XObject operators
+ void opXObject(Object args[], int numArgs);
+diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp
+index 617861928d..767c8af4d4 100644
+--- a/src/extension/internal/pdfinput/svg-builder.cpp
++++ b/src/extension/internal/pdfinput/svg-builder.cpp
+@@ -1020,9 +1020,9 @@ void SvgBuilder::updateFont(GfxState *state) {
+ GfxFont *font = state->getFont();
+ // Store original name
+ if (font->getName()) {
+- _font_specification = g_strdup(font->getName()->getCString());
++ _font_specification = font->getName()->getCString();
+ } else {
+- _font_specification = (char*) "Arial";
++ _font_specification = "Arial";
+ }
+
+ // Prune the font name to get the correct font family name
+@@ -1030,7 +1030,7 @@ void SvgBuilder::updateFont(GfxState *state) {
+ char *font_family = NULL;
+ char *font_style = NULL;
+ char *font_style_lowercase = NULL;
+- char *plus_sign = strstr(_font_specification, "+");
++ const char *plus_sign = strstr(_font_specification, "+");
+ if (plus_sign) {
+ font_family = g_strdup(plus_sign + 1);
+ _font_specification = plus_sign + 1;
+diff --git a/src/extension/internal/pdfinput/svg-builder.h b/src/extension/internal/pdfinput/svg-builder.h
+index ed2a4d48e0..55daacee74 100644
+--- a/src/extension/internal/pdfinput/svg-builder.h
++++ b/src/extension/internal/pdfinput/svg-builder.h
+@@ -80,7 +80,7 @@ struct SvgGlyph {
+ bool style_changed; // Set to true if style has to be reset
+ SPCSSAttr *style;
+ int render_mode; // Text render mode
+- char *font_specification; // Pointer to current font specification
++ const char *font_specification; // Pointer to current font specification
+ };
+
+ /**
+@@ -202,7 +202,7 @@ private:
+
+ SPCSSAttr *_font_style; // Current font style
+ GfxFont *_current_font;
+- char *_font_specification;
++ const char *_font_specification;
+ double _font_scaling;
+ bool _need_font_update;
+ Geom::Affine _text_matrix;
+--
+2.19.0
+
diff --git a/media-gfx/inkscape/inkscape-0.92.3-r1.ebuild b/media-gfx/inkscape/inkscape-0.92.3-r1.ebuild
new file mode 100644
index 000000000000..36a68a10d4e9
--- /dev/null
+++ b/media-gfx/inkscape/inkscape-0.92.3-r1.ebuild
@@ -0,0 +1,180 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+PYTHON_COMPAT=( python2_7 )
+PYTHON_REQ_USE="xml"
+
+inherit autotools flag-o-matic gnome2-utils xdg toolchain-funcs python-single-r1
+
+MY_P="${P/_/}"
+
+DESCRIPTION="A SVG based generic vector-drawing program"
+HOMEPAGE="https://inkscape.org/"
+SRC_URI="https://inkscape.global.ssl.fastly.net/media/resources/file/${P}.tar.bz2"
+
+LICENSE="GPL-2 LGPL-2.1"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~hppa ~ppc ~ppc64 ~x86"
+IUSE="cdr dia dbus exif gnome imagemagick openmp postscript inkjar jpeg latex"
+IUSE+=" lcms nls spell static-libs visio wpg"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+COMMON_DEPEND="
+ ${PYTHON_DEPS}
+ >=app-text/poppler-0.26.0:=[cairo]
+ >=dev-cpp/glibmm-2.48
+ >=dev-cpp/gtkmm-2.18.0:2.4
+ >=dev-cpp/cairomm-1.9.8
+ >=dev-libs/boehm-gc-7.1:=
+ >=dev-libs/glib-2.28
+ >=dev-libs/libsigc++-2.0.12
+ >=dev-libs/libxml2-2.6.20
+ >=dev-libs/libxslt-1.0.15
+ dev-libs/popt
+ dev-python/lxml[${PYTHON_USEDEP}]
+ media-gfx/potrace
+ media-gfx/scour[${PYTHON_USEDEP}]
+ media-libs/fontconfig
+ media-libs/freetype:2
+ media-libs/libpng:0
+ sci-libs/gsl:=
+ x11-libs/libX11
+ >=x11-libs/gtk+-2.10.7:2
+ >=x11-libs/pango-1.24
+ cdr? (
+ media-libs/libcdr
+ app-text/libwpg:0.3
+ dev-libs/librevenge
+ )
+ dbus? ( dev-libs/dbus-glib )
+ exif? ( media-libs/libexif )
+ gnome? ( >=gnome-base/gnome-vfs-2.0 )
+ imagemagick? ( media-gfx/imagemagick:=[cxx] )
+ jpeg? ( virtual/jpeg:0 )
+ lcms? ( media-libs/lcms:2 )
+ spell? (
+ app-text/aspell
+ app-text/gtkspell:2
+ )
+ visio? (
+ media-libs/libvisio
+ app-text/libwpg:0.3
+ dev-libs/librevenge
+ )
+ wpg? (
+ app-text/libwpg:0.3
+ dev-libs/librevenge
+ )
+"
+
+# These only use executables provided by these packages
+# See share/extensions for more details. inkscape can tell you to
+# install these so we could of course just not depend on those and rely
+# on that.
+RDEPEND="${COMMON_DEPEND}
+ dev-python/numpy[${PYTHON_USEDEP}]
+ media-gfx/uniconvertor
+ dia? ( app-office/dia )
+ latex? (
+ media-gfx/pstoedit[plotutils]
+ app-text/dvipsk
+ app-text/texlive-core
+ )
+ postscript? ( app-text/ghostscript-gpl )
+"
+
+DEPEND="${COMMON_DEPEND}
+ >=dev-libs/boost-1.36
+ >=dev-util/intltool-0.40
+ >=sys-devel/gettext-0.17
+ virtual/pkgconfig
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.92.1-automagic.patch"
+ "${FILESDIR}/${PN}-0.91_pre3-cppflags.patch"
+ "${FILESDIR}/${PN}-0.92.1-desktop.patch"
+ "${FILESDIR}/${PN}-0.91_pre3-exif.patch"
+ "${FILESDIR}/${PN}-0.91_pre3-sk-man.patch"
+ "${FILESDIR}/${PN}-0.48.4-epython.patch"
+ "${FILESDIR}/${PN}-0.92.3-freetype_pkgconfig.patch"
+ "${FILESDIR}/${PN}-0.92.3-poppler-0.64.patch"
+ "${FILESDIR}/${PN}-0.92.3-poppler-0.65.patch"
+ "${FILESDIR}/${PN}-0.92.3-poppler-0.64-2.patch"
+)
+
+S="${WORKDIR}/${MY_P}"
+
+RESTRICT="test"
+
+pkg_pretend() {
+ if use openmp; then
+ tc-has-openmp || die "Please switch to an openmp compatible compiler"
+ fi
+}
+
+src_prepare() {
+ default
+
+ sed -i "s#@EPYTHON@#${EPYTHON}#" \
+ src/extension/implementation/script.cpp || die
+
+ eautoreconf
+
+ # bug 421111
+ python_fix_shebang share/extensions
+}
+
+src_configure() {
+ # aliasing unsafe wrt #310393
+ append-flags -fno-strict-aliasing
+
+ local myeconfargs=(
+ $(use_enable static-libs static)
+ $(use_enable nls)
+ $(use_enable openmp)
+ $(use_enable exif)
+ $(use_enable jpeg)
+ $(use_enable lcms)
+ --enable-poppler-cairo
+ $(use_enable wpg)
+ $(use_enable visio)
+ $(use_enable cdr)
+ $(use_enable dbus dbusapi)
+ $(use_enable imagemagick magick)
+ $(use_with gnome gnome-vfs)
+ $(use_with inkjar)
+ $(use_with spell gtkspell)
+ $(use_with spell aspell)
+ )
+ econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+ emake AR="$(tc-getAR)"
+}
+
+src_install() {
+ default
+
+ find "${ED}" -name "*.la" -delete || die
+ python_optimize "${ED%/}"/usr/share/${PN}/extensions
+}
+
+pkg_preinst() {
+ gnome2_icon_savelist
+}
+
+pkg_postinst() {
+ gnome2_icon_cache_update
+ xdg_mimeinfo_database_update
+ xdg_desktop_database_update
+}
+
+pkg_postrm() {
+ gnome2_icon_cache_update
+ xdg_mimeinfo_database_update
+ xdg_desktop_database_update
+}