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 |
+} |