diff options
author | Mike Gilbert <floppym@gentoo.org> | 2018-05-28 14:45:54 -0400 |
---|---|---|
committer | Mike Gilbert <floppym@gentoo.org> | 2018-05-28 14:46:22 -0400 |
commit | 1a3bd54dd8283bae00506af7336bd048c1542f82 (patch) | |
tree | 6d42b8fb5955d69098d7a168a4ba6c1687ffb18c /media-gfx | |
parent | net-misc/shigofumi: Fix src_prepare call (#656766) (diff) | |
download | gentoo-1a3bd54dd8283bae00506af7336bd048c1542f82.tar.gz gentoo-1a3bd54dd8283bae00506af7336bd048c1542f82.tar.bz2 gentoo-1a3bd54dd8283bae00506af7336bd048c1542f82.zip |
media-gfx/fontforge: fix python3.6 compat
Closes: https://bugs.gentoo.org/646278
Package-Manager: Portage-2.3.40_p4, Repoman-2.3.9_p236
Diffstat (limited to 'media-gfx')
-rw-r--r-- | media-gfx/fontforge/files/20170731-PyMem_Free.patch | 197 | ||||
-rw-r--r-- | media-gfx/fontforge/fontforge-20170731-r4.ebuild | 121 |
2 files changed, 318 insertions, 0 deletions
diff --git a/media-gfx/fontforge/files/20170731-PyMem_Free.patch b/media-gfx/fontforge/files/20170731-PyMem_Free.patch new file mode 100644 index 000000000000..48301dabb2f1 --- /dev/null +++ b/media-gfx/fontforge/files/20170731-PyMem_Free.patch @@ -0,0 +1,197 @@ +From b6089f11bd7534c9aa38b875ef1e830fc3b898b4 Mon Sep 17 00:00:00 2001 +From: Jeremy Tan <jtanx@outlook.com> +Date: Wed, 13 Sep 2017 17:22:18 +0800 +Subject: [PATCH] python: Use PyMem_Free wherever PyArg_ParseTuple+es is used + +https://docs.python.org/2.0/ext/parseTuple.html + +diff --git a/fontforge/python.c b/fontforge/python.c +index 5d6820c40..c6d7aca2b 100644 +--- a/fontforge/python.c ++++ b/fontforge/python.c +@@ -607,7 +607,13 @@ return( NULL ); + } + } + +- if ( !SetPrefs((char *) prefname,&val,NULL)) { ++ bool succeeded = SetPrefs((char *) prefname,&val,NULL); ++ if (val.type == v_str && val.u.sval) { ++ PyMem_Free(val.u.sval); ++ val.u.sval = NULL; ++ } ++ ++ if (!succeeded) { + PyErr_Format(PyExc_NameError, "Unknown preference item in SetPrefs: %s", prefname ); + return( NULL ); + } +@@ -728,7 +734,7 @@ static PyObject *PyFF_UnicodeFromName(PyObject *UNUSED(self), PyObject *args) { + return( NULL ); + + ret = Py_BuildValue("i", UniFromName((char *) name, ui_none,&custom)); +- free(name); ++ PyMem_Free(name); + return( ret ); + } + +@@ -1361,12 +1367,14 @@ Py_RETURN_NONE; /* Well, that was pointless */ + if ( import==Py_None ) + import=NULL; + else if ( !PyCallable_Check(import) ) { ++ PyMem_Free(name); + PyErr_Format(PyExc_TypeError, "First argument is not callable" ); + return( NULL ); + } + if ( export==Py_None ) + export=NULL; + else if ( !PyCallable_Check(export) ) { ++ PyMem_Free(name); + PyErr_Format(PyExc_TypeError, "Second argument is not callable" ); + return( NULL ); + } +@@ -1472,7 +1480,7 @@ static PyObject *PyFF_logError(PyObject *UNUSED(self), PyObject *args) { + if ( !PyArg_ParseTuple(args,"es","UTF-8", &msg) ) + return( NULL ); + LogError(msg); +- free(msg); ++ PyMem_Free(msg); + Py_RETURN_NONE; + } + +@@ -1486,6 +1494,8 @@ static PyObject *PyFF_postError(PyObject *UNUSED(self), PyObject *args) { + return( NULL ); + if( showPythonErrors ) + ff_post_error(title,msg); /* Prints to stderr if no ui */ ++ PyMem_Free(title); ++ PyMem_Free(msg); + Py_RETURN_NONE; + } + +@@ -1494,6 +1504,8 @@ static PyObject *PyFF_postNotice(PyObject *UNUSED(self), PyObject *args) { + if ( !PyArg_ParseTuple(args,"eses","UTF-8", &title, "UTF-8", &msg) ) + return( NULL ); + ff_post_notice(title,msg); /* Prints to stderr if no ui */ ++ PyMem_Free(title); ++ PyMem_Free(msg); + Py_RETURN_NONE; + } + +@@ -1511,8 +1523,8 @@ return( NULL ); + return( NULL ); + + ret = ff_open_filename(title,def,filter); +- free(title); +- free(def); ++ PyMem_Free(title); ++ PyMem_Free(def); + if ( ret==NULL ) + Py_RETURN_NONE; + reto = DECODE_UTF8(ret,strlen(ret),NULL); +@@ -1534,8 +1546,8 @@ return( NULL ); + return( NULL ); + + ret = ff_save_filename(title,def,filter); +- free(title); +- free(def); ++ PyMem_Free(title); ++ PyMem_Free(def); + if ( ret==NULL ) + Py_RETURN_NONE; + reto = DECODE_UTF8(ret,strlen(ret),NULL); +@@ -1558,8 +1570,8 @@ return( NULL ); + return( NULL ); + if ( !PySequence_Check(answero) || STRING_CHECK(answero)) { + PyErr_Format(PyExc_TypeError, "Expected a tuple of strings for the third argument"); +- free(title); +- free(quest); ++ PyMem_Free(title); ++ PyMem_Free(quest); + return( NULL ); + } + cnt = PySequence_Size(answero); +@@ -1568,16 +1580,16 @@ return( NULL ); + cancel = cnt-1; + if ( cancel<0 || cancel>=cnt || def<0 || def>=cnt ) { + PyErr_Format(PyExc_ValueError, "Value out of bounds for 4th or 5th argument"); +- free(title); +- free(quest); ++ PyMem_Free(title); ++ PyMem_Free(quest); + free(answers); + return( NULL ); + } + for ( i=0; i<cnt; ++i ) { + PyObject *utf8_name = PYBYTES_UTF8(PySequence_GetItem(answero,i)); + if ( utf8_name==NULL ) { +- free(title); +- free(quest); ++ PyMem_Free(title); ++ PyMem_Free(quest); + FreeStringArray( i, answers ); + return( NULL ); + } +@@ -1587,8 +1599,8 @@ return( NULL ); + answers[cnt] = NULL; + + ret = ff_ask(title,(const char **) answers,def,cancel,quest); +- free(title); +- free(quest); ++ PyMem_Free(title); ++ PyMem_Free(quest); + FreeStringArray( cnt, answers ); + return( Py_BuildValue("i",ret)); + } +@@ -1608,23 +1620,23 @@ return( NULL ); + return( NULL ); + if ( !PySequence_Check(answero) || STRING_CHECK(answero)) { + PyErr_Format(PyExc_TypeError, "Expected a tuple of strings for the third argument"); +- free(title); +- free(quest); ++ PyMem_Free(title); ++ PyMem_Free(quest); + return( NULL ); + } + cnt = PySequence_Size(answero); + answers = calloc(cnt+1, sizeof(char *)); + if ( def<0 || def>=cnt ) { + PyErr_Format(PyExc_ValueError, "Value out of bounds for 4th argument"); +- free(title); +- free(quest); ++ PyMem_Free(title); ++ PyMem_Free(quest); + return( NULL ); + } + for ( i=0; i<cnt; ++i ) { + PyObject *utf8_name = PYBYTES_UTF8(PySequence_GetItem(answero,i)); + if ( utf8_name==NULL ) { +- free(title); +- free(quest); ++ PyMem_Free(title); ++ PyMem_Free(quest); + FreeStringArray( i, answers ); + return( NULL ); + } +@@ -1634,8 +1646,8 @@ return( NULL ); + answers[cnt] = NULL; + + ret = ff_choose(title,(const char **) answers,cnt,def,quest); +- free(title); +- free(quest); ++ PyMem_Free(title); ++ PyMem_Free(quest); + FreeStringArray( cnt, answers ); + return( Py_BuildValue("i",ret)); + } +@@ -1654,8 +1666,8 @@ return( NULL ); + return( NULL ); + + ret = ff_ask_string(title,def,quest); +- free(title); +- free(quest); ++ PyMem_Free(title); ++ PyMem_Free(quest); + free(def); + if ( ret==NULL ) + Py_RETURN_NONE; +-- +2.17.0 + diff --git a/media-gfx/fontforge/fontforge-20170731-r4.ebuild b/media-gfx/fontforge/fontforge-20170731-r4.ebuild new file mode 100644 index 000000000000..7316a2594e4f --- /dev/null +++ b/media-gfx/fontforge/fontforge-20170731-r4.ebuild @@ -0,0 +1,121 @@ +# Copyright 1999-2018 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +PYTHON_COMPAT=( python{2_7,3_4,3_5,3_6} ) + +inherit gnome2-utils python-single-r1 xdg-utils + +DESCRIPTION="postscript font editor and converter" +HOMEPAGE="http://fontforge.github.io/" +SRC_URI="https://github.com/fontforge/fontforge/releases/download/${PV}/fontforge-dist-${PV}.tar.xz" + +LICENSE="BSD GPL-3+" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x86-macos" +IUSE="cairo truetype-debugger gif gtk jpeg png +python readline test tiff svg unicode X" + +RESTRICT="!test? ( test )" + +REQUIRED_USE=" + cairo? ( png ) + python? ( ${PYTHON_REQUIRED_USE} ) + test? ( png python ) +" + +RDEPEND=" + dev-libs/libltdl:0 + dev-libs/libxml2:2= + >=media-libs/freetype-2.3.7:2= + cairo? ( + >=x11-libs/cairo-1.6:0= + x11-libs/pango:0= + ) + gif? ( media-libs/giflib:0= ) + jpeg? ( virtual/jpeg:0 ) + png? ( media-libs/libpng:0= ) + tiff? ( media-libs/tiff:0= ) + truetype-debugger? ( >=media-libs/freetype-2.3.8:2[fontforge,-bindist(-)] ) + gtk? ( x11-libs/gtk+:2= ) + python? ( ${PYTHON_DEPS} ) + readline? ( sys-libs/readline:0= ) + unicode? ( media-libs/libuninameslist:0= ) + X? ( + x11-libs/libX11:0= + x11-libs/libXi:0= + >=x11-libs/pango-1.10:0=[X] + ) + !media-gfx/pfaedit +" +DEPEND="${RDEPEND} + sys-devel/gettext + virtual/pkgconfig + X? ( x11-base/xorg-proto ) +" + +# Needs keywording on many arches. +# zeromq? ( +# >=net-libs/czmq-2.2.0:0= +# >=net-libs/zeromq-4.0.4:0= +# ) + +S="${WORKDIR}/fontforge-2.0.${PV}" + +PATCHES=( + "${FILESDIR}"/20170731-startnoui-FindOrMakeEncoding.patch + "${FILESDIR}"/20170731-tilepath.patch + "${FILESDIR}"/20170731-gethex-unaligned.patch + "${FILESDIR}"/20170731-PyMem_Free.patch +) + +pkg_setup() { + use python && python-single-r1_pkg_setup +} + +src_configure() { + local myeconfargs=( + --disable-static + $(use_enable truetype-debugger freetype-debugger "${EPREFIX}/usr/include/freetype2/internal4fontforge") + $(use_enable gtk gtk2-use) + $(use_enable python python-extension) + $(use_enable python python-scripting) + --enable-tile-path + --enable-gb12345 + $(use_with cairo) + $(use_with gif giflib) + $(use_with jpeg libjpeg) + $(use_with png libpng) + $(use_with readline libreadline) + --without-libspiro + $(use_with tiff libtiff) + $(use_with unicode libuninameslist) + #$(use_with zeromq libzmq) + --without-libzmq + $(use_with X x) + ) + econf "${myeconfargs[@]}" +} + +src_compile() { + # Build system deps are broken + emake -C plugins + emake +} + +src_install() { + default + find "${D}" -name '*.la' -delete || die +} + +pkg_postrm() { + gnome2_icon_cache_update + xdg_desktop_database_update + xdg_mimeinfo_database_update +} + +pkg_postinst() { + gnome2_icon_cache_update + xdg_desktop_database_update + xdg_mimeinfo_database_update +} |