Gentoo Archives: gentoo-commits

From: Mike Gilbert <floppym@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: media-gfx/fontforge/files/, media-gfx/fontforge/
Date: Mon, 28 May 2018 18:46:34
Message-Id: 1527533182.1a3bd54dd8283bae00506af7336bd048c1542f82.floppym@gentoo
1 commit: 1a3bd54dd8283bae00506af7336bd048c1542f82
2 Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
3 AuthorDate: Mon May 28 18:45:54 2018 +0000
4 Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
5 CommitDate: Mon May 28 18:46:22 2018 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=1a3bd54d
7
8 media-gfx/fontforge: fix python3.6 compat
9
10 Closes: https://bugs.gentoo.org/646278
11 Package-Manager: Portage-2.3.40_p4, Repoman-2.3.9_p236
12
13 .../fontforge/files/20170731-PyMem_Free.patch | 197 +++++++++++++++++++++
14 media-gfx/fontforge/fontforge-20170731-r4.ebuild | 121 +++++++++++++
15 2 files changed, 318 insertions(+)
16
17 diff --git a/media-gfx/fontforge/files/20170731-PyMem_Free.patch b/media-gfx/fontforge/files/20170731-PyMem_Free.patch
18 new file mode 100644
19 index 00000000000..48301dabb2f
20 --- /dev/null
21 +++ b/media-gfx/fontforge/files/20170731-PyMem_Free.patch
22 @@ -0,0 +1,197 @@
23 +From b6089f11bd7534c9aa38b875ef1e830fc3b898b4 Mon Sep 17 00:00:00 2001
24 +From: Jeremy Tan <jtanx@×××××××.com>
25 +Date: Wed, 13 Sep 2017 17:22:18 +0800
26 +Subject: [PATCH] python: Use PyMem_Free wherever PyArg_ParseTuple+es is used
27 +
28 +https://docs.python.org/2.0/ext/parseTuple.html
29 +
30 +diff --git a/fontforge/python.c b/fontforge/python.c
31 +index 5d6820c40..c6d7aca2b 100644
32 +--- a/fontforge/python.c
33 ++++ b/fontforge/python.c
34 +@@ -607,7 +607,13 @@ return( NULL );
35 + }
36 + }
37 +
38 +- if ( !SetPrefs((char *) prefname,&val,NULL)) {
39 ++ bool succeeded = SetPrefs((char *) prefname,&val,NULL);
40 ++ if (val.type == v_str && val.u.sval) {
41 ++ PyMem_Free(val.u.sval);
42 ++ val.u.sval = NULL;
43 ++ }
44 ++
45 ++ if (!succeeded) {
46 + PyErr_Format(PyExc_NameError, "Unknown preference item in SetPrefs: %s", prefname );
47 + return( NULL );
48 + }
49 +@@ -728,7 +734,7 @@ static PyObject *PyFF_UnicodeFromName(PyObject *UNUSED(self), PyObject *args) {
50 + return( NULL );
51 +
52 + ret = Py_BuildValue("i", UniFromName((char *) name, ui_none,&custom));
53 +- free(name);
54 ++ PyMem_Free(name);
55 + return( ret );
56 + }
57 +
58 +@@ -1361,12 +1367,14 @@ Py_RETURN_NONE; /* Well, that was pointless */
59 + if ( import==Py_None )
60 + import=NULL;
61 + else if ( !PyCallable_Check(import) ) {
62 ++ PyMem_Free(name);
63 + PyErr_Format(PyExc_TypeError, "First argument is not callable" );
64 + return( NULL );
65 + }
66 + if ( export==Py_None )
67 + export=NULL;
68 + else if ( !PyCallable_Check(export) ) {
69 ++ PyMem_Free(name);
70 + PyErr_Format(PyExc_TypeError, "Second argument is not callable" );
71 + return( NULL );
72 + }
73 +@@ -1472,7 +1480,7 @@ static PyObject *PyFF_logError(PyObject *UNUSED(self), PyObject *args) {
74 + if ( !PyArg_ParseTuple(args,"es","UTF-8", &msg) )
75 + return( NULL );
76 + LogError(msg);
77 +- free(msg);
78 ++ PyMem_Free(msg);
79 + Py_RETURN_NONE;
80 + }
81 +
82 +@@ -1486,6 +1494,8 @@ static PyObject *PyFF_postError(PyObject *UNUSED(self), PyObject *args) {
83 + return( NULL );
84 + if( showPythonErrors )
85 + ff_post_error(title,msg); /* Prints to stderr if no ui */
86 ++ PyMem_Free(title);
87 ++ PyMem_Free(msg);
88 + Py_RETURN_NONE;
89 + }
90 +
91 +@@ -1494,6 +1504,8 @@ static PyObject *PyFF_postNotice(PyObject *UNUSED(self), PyObject *args) {
92 + if ( !PyArg_ParseTuple(args,"eses","UTF-8", &title, "UTF-8", &msg) )
93 + return( NULL );
94 + ff_post_notice(title,msg); /* Prints to stderr if no ui */
95 ++ PyMem_Free(title);
96 ++ PyMem_Free(msg);
97 + Py_RETURN_NONE;
98 + }
99 +
100 +@@ -1511,8 +1523,8 @@ return( NULL );
101 + return( NULL );
102 +
103 + ret = ff_open_filename(title,def,filter);
104 +- free(title);
105 +- free(def);
106 ++ PyMem_Free(title);
107 ++ PyMem_Free(def);
108 + if ( ret==NULL )
109 + Py_RETURN_NONE;
110 + reto = DECODE_UTF8(ret,strlen(ret),NULL);
111 +@@ -1534,8 +1546,8 @@ return( NULL );
112 + return( NULL );
113 +
114 + ret = ff_save_filename(title,def,filter);
115 +- free(title);
116 +- free(def);
117 ++ PyMem_Free(title);
118 ++ PyMem_Free(def);
119 + if ( ret==NULL )
120 + Py_RETURN_NONE;
121 + reto = DECODE_UTF8(ret,strlen(ret),NULL);
122 +@@ -1558,8 +1570,8 @@ return( NULL );
123 + return( NULL );
124 + if ( !PySequence_Check(answero) || STRING_CHECK(answero)) {
125 + PyErr_Format(PyExc_TypeError, "Expected a tuple of strings for the third argument");
126 +- free(title);
127 +- free(quest);
128 ++ PyMem_Free(title);
129 ++ PyMem_Free(quest);
130 + return( NULL );
131 + }
132 + cnt = PySequence_Size(answero);
133 +@@ -1568,16 +1580,16 @@ return( NULL );
134 + cancel = cnt-1;
135 + if ( cancel<0 || cancel>=cnt || def<0 || def>=cnt ) {
136 + PyErr_Format(PyExc_ValueError, "Value out of bounds for 4th or 5th argument");
137 +- free(title);
138 +- free(quest);
139 ++ PyMem_Free(title);
140 ++ PyMem_Free(quest);
141 + free(answers);
142 + return( NULL );
143 + }
144 + for ( i=0; i<cnt; ++i ) {
145 + PyObject *utf8_name = PYBYTES_UTF8(PySequence_GetItem(answero,i));
146 + if ( utf8_name==NULL ) {
147 +- free(title);
148 +- free(quest);
149 ++ PyMem_Free(title);
150 ++ PyMem_Free(quest);
151 + FreeStringArray( i, answers );
152 + return( NULL );
153 + }
154 +@@ -1587,8 +1599,8 @@ return( NULL );
155 + answers[cnt] = NULL;
156 +
157 + ret = ff_ask(title,(const char **) answers,def,cancel,quest);
158 +- free(title);
159 +- free(quest);
160 ++ PyMem_Free(title);
161 ++ PyMem_Free(quest);
162 + FreeStringArray( cnt, answers );
163 + return( Py_BuildValue("i",ret));
164 + }
165 +@@ -1608,23 +1620,23 @@ return( NULL );
166 + return( NULL );
167 + if ( !PySequence_Check(answero) || STRING_CHECK(answero)) {
168 + PyErr_Format(PyExc_TypeError, "Expected a tuple of strings for the third argument");
169 +- free(title);
170 +- free(quest);
171 ++ PyMem_Free(title);
172 ++ PyMem_Free(quest);
173 + return( NULL );
174 + }
175 + cnt = PySequence_Size(answero);
176 + answers = calloc(cnt+1, sizeof(char *));
177 + if ( def<0 || def>=cnt ) {
178 + PyErr_Format(PyExc_ValueError, "Value out of bounds for 4th argument");
179 +- free(title);
180 +- free(quest);
181 ++ PyMem_Free(title);
182 ++ PyMem_Free(quest);
183 + return( NULL );
184 + }
185 + for ( i=0; i<cnt; ++i ) {
186 + PyObject *utf8_name = PYBYTES_UTF8(PySequence_GetItem(answero,i));
187 + if ( utf8_name==NULL ) {
188 +- free(title);
189 +- free(quest);
190 ++ PyMem_Free(title);
191 ++ PyMem_Free(quest);
192 + FreeStringArray( i, answers );
193 + return( NULL );
194 + }
195 +@@ -1634,8 +1646,8 @@ return( NULL );
196 + answers[cnt] = NULL;
197 +
198 + ret = ff_choose(title,(const char **) answers,cnt,def,quest);
199 +- free(title);
200 +- free(quest);
201 ++ PyMem_Free(title);
202 ++ PyMem_Free(quest);
203 + FreeStringArray( cnt, answers );
204 + return( Py_BuildValue("i",ret));
205 + }
206 +@@ -1654,8 +1666,8 @@ return( NULL );
207 + return( NULL );
208 +
209 + ret = ff_ask_string(title,def,quest);
210 +- free(title);
211 +- free(quest);
212 ++ PyMem_Free(title);
213 ++ PyMem_Free(quest);
214 + free(def);
215 + if ( ret==NULL )
216 + Py_RETURN_NONE;
217 +--
218 +2.17.0
219 +
220
221 diff --git a/media-gfx/fontforge/fontforge-20170731-r4.ebuild b/media-gfx/fontforge/fontforge-20170731-r4.ebuild
222 new file mode 100644
223 index 00000000000..7316a2594e4
224 --- /dev/null
225 +++ b/media-gfx/fontforge/fontforge-20170731-r4.ebuild
226 @@ -0,0 +1,121 @@
227 +# Copyright 1999-2018 Gentoo Foundation
228 +# Distributed under the terms of the GNU General Public License v2
229 +
230 +EAPI=6
231 +
232 +PYTHON_COMPAT=( python{2_7,3_4,3_5,3_6} )
233 +
234 +inherit gnome2-utils python-single-r1 xdg-utils
235 +
236 +DESCRIPTION="postscript font editor and converter"
237 +HOMEPAGE="http://fontforge.github.io/"
238 +SRC_URI="https://github.com/fontforge/fontforge/releases/download/${PV}/fontforge-dist-${PV}.tar.xz"
239 +
240 +LICENSE="BSD GPL-3+"
241 +SLOT="0"
242 +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"
243 +IUSE="cairo truetype-debugger gif gtk jpeg png +python readline test tiff svg unicode X"
244 +
245 +RESTRICT="!test? ( test )"
246 +
247 +REQUIRED_USE="
248 + cairo? ( png )
249 + python? ( ${PYTHON_REQUIRED_USE} )
250 + test? ( png python )
251 +"
252 +
253 +RDEPEND="
254 + dev-libs/libltdl:0
255 + dev-libs/libxml2:2=
256 + >=media-libs/freetype-2.3.7:2=
257 + cairo? (
258 + >=x11-libs/cairo-1.6:0=
259 + x11-libs/pango:0=
260 + )
261 + gif? ( media-libs/giflib:0= )
262 + jpeg? ( virtual/jpeg:0 )
263 + png? ( media-libs/libpng:0= )
264 + tiff? ( media-libs/tiff:0= )
265 + truetype-debugger? ( >=media-libs/freetype-2.3.8:2[fontforge,-bindist(-)] )
266 + gtk? ( x11-libs/gtk+:2= )
267 + python? ( ${PYTHON_DEPS} )
268 + readline? ( sys-libs/readline:0= )
269 + unicode? ( media-libs/libuninameslist:0= )
270 + X? (
271 + x11-libs/libX11:0=
272 + x11-libs/libXi:0=
273 + >=x11-libs/pango-1.10:0=[X]
274 + )
275 + !media-gfx/pfaedit
276 +"
277 +DEPEND="${RDEPEND}
278 + sys-devel/gettext
279 + virtual/pkgconfig
280 + X? ( x11-base/xorg-proto )
281 +"
282 +
283 +# Needs keywording on many arches.
284 +# zeromq? (
285 +# >=net-libs/czmq-2.2.0:0=
286 +# >=net-libs/zeromq-4.0.4:0=
287 +# )
288 +
289 +S="${WORKDIR}/fontforge-2.0.${PV}"
290 +
291 +PATCHES=(
292 + "${FILESDIR}"/20170731-startnoui-FindOrMakeEncoding.patch
293 + "${FILESDIR}"/20170731-tilepath.patch
294 + "${FILESDIR}"/20170731-gethex-unaligned.patch
295 + "${FILESDIR}"/20170731-PyMem_Free.patch
296 +)
297 +
298 +pkg_setup() {
299 + use python && python-single-r1_pkg_setup
300 +}
301 +
302 +src_configure() {
303 + local myeconfargs=(
304 + --disable-static
305 + $(use_enable truetype-debugger freetype-debugger "${EPREFIX}/usr/include/freetype2/internal4fontforge")
306 + $(use_enable gtk gtk2-use)
307 + $(use_enable python python-extension)
308 + $(use_enable python python-scripting)
309 + --enable-tile-path
310 + --enable-gb12345
311 + $(use_with cairo)
312 + $(use_with gif giflib)
313 + $(use_with jpeg libjpeg)
314 + $(use_with png libpng)
315 + $(use_with readline libreadline)
316 + --without-libspiro
317 + $(use_with tiff libtiff)
318 + $(use_with unicode libuninameslist)
319 + #$(use_with zeromq libzmq)
320 + --without-libzmq
321 + $(use_with X x)
322 + )
323 + econf "${myeconfargs[@]}"
324 +}
325 +
326 +src_compile() {
327 + # Build system deps are broken
328 + emake -C plugins
329 + emake
330 +}
331 +
332 +src_install() {
333 + default
334 + find "${D}" -name '*.la' -delete || die
335 +}
336 +
337 +pkg_postrm() {
338 + gnome2_icon_cache_update
339 + xdg_desktop_database_update
340 + xdg_mimeinfo_database_update
341 +}
342 +
343 +pkg_postinst() {
344 + gnome2_icon_cache_update
345 + xdg_desktop_database_update
346 + xdg_mimeinfo_database_update
347 +}