summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorAlejandro Hernandez <alejandro.hernandez@linux.intel.com>2017-08-04 14:06:14 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-01-20 22:31:56 +0000
commitb6777878ff03c3e956386020a19d11c875c835ae (patch)
tree753d1f85db4fb803204178b121ed544f792edd1b /meta
parent86e002572d53cf2e60196269928a411375d24294 (diff)
downloadpoky-b6777878ff03c3e956386020a19d11c875c835ae.tar.gz
python3: Restructure python3 packaging and replace it with autopackaging
See previous commit (python2 version) for more info, since mostly everything applies here as well. Old manifest file had several issues: - Its unorganized and hard to read and understand it for an average human being. - When a new package needs to be added, the user actually has to modify the script that creates the manifest, then call the script to create a new manifest, and then submit a patch for both the script and the manifest, so its a little convoluted. - Git complains every single time a patch is submitted to the manifest, since it violates some of its guidelines. - It changes or may change with every release of python, its impossible to know if the required files for a certain package have changed (it could have more or less dependencies), the only way of doing so would be to install and test them all one by one on separate individual images, and even then we wouldnt know if they require less dependencies, we would just know if an extra dependency is required since it would complain, lets face it, this isnt feasible. - The same thing happens for new packages, if someone wants to add a new package, its dependencies need to be checked manually one by one. Features/Fixes: - A new manifest format is used (JSON), easy to read and understand. This file is parsed by the python recipe and python packages read from here are passed directly to bitbake during parsing time. - It provides an automatic manifest creation task (explained on previous commit), which automagically checks for every package dependencies and adds them to the new manifest, hence we will have on each package exactly what that package needs to be run, providing finer granularity. - Dependencies are also checked automagically for new packages (explained on previous commit). This patch has the same features as the python2 version but it differs in the following ways: - Python3 handles precompiled bytecode files (*.pyc) differently. for this reason and since we are cross compiling, wildcards couldnt be avoided on python3 (See PEP #3147 [1]). Both the manifest and the manifest creation script handle this differently, the manifest for python3 has an extra field for cached files, which is how it lets the user install the cached files or not via : INCLUDE_PYCS = "1" on their local.conf. - Shared libraries nomenclature also changed on python3, so again, we use wildcards to deal with this issue ( See PEP #3149 [2]): - Fixes python3 manifest, python3-core should be base and everything should depend on it, hence several packages were deleted: python3-enum, re, gdbm, subprocess, signal, readline. - When building python3-native it adds as symlink to it called nativepython3, which is then isued by the create_manifest task. - Fixes [YOCTO #11513] while were at it. References: [1] https://www.python.org/dev/peps/pep-3147/ [2] https://www.python.org/dev/peps/pep-3149/ (From OE-Core rev: 54ac820b8a639950ccb534dcd9d6eaf8b2b736e0) Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/recipes-devtools/python/python-3.5-manifest.inc1129
-rw-r--r--meta/recipes-devtools/python/python-native-3.5-manifest.inc10
-rw-r--r--meta/recipes-devtools/python/python3-native_3.5.3.bb30
-rw-r--r--meta/recipes-devtools/python/python3/create_manifest3.py321
-rw-r--r--meta/recipes-devtools/python/python3/get_module_deps3.py146
-rw-r--r--meta/recipes-devtools/python/python3/python3-manifest.json1096
-rw-r--r--meta/recipes-devtools/python/python3_3.5.3.bb91
7 files changed, 1675 insertions, 1148 deletions
diff --git a/meta/recipes-devtools/python/python-3.5-manifest.inc b/meta/recipes-devtools/python/python-3.5-manifest.inc
deleted file mode 100644
index 1fce070290..0000000000
--- a/meta/recipes-devtools/python/python-3.5-manifest.inc
+++ /dev/null
@@ -1,1129 +0,0 @@
1
2# WARNING: This file is AUTO GENERATED: Manual edits will be lost next time I regenerate the file.
3# Generator: './scripts/contrib/python/generate-manifest-3.5.py' Version 20140131 (C) 2002-2010 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
4
5
6
7PROVIDES+="\
8 ${PN}-2to3 \
9 ${PN}-argparse \
10 ${PN}-asyncio \
11 ${PN}-audio \
12 ${PN}-codecs \
13 ${PN}-compile \
14 ${PN}-compression \
15 ${PN}-core \
16 ${PN}-crypt \
17 ${PN}-ctypes \
18 ${PN}-curses \
19 ${PN}-datetime \
20 ${PN}-db \
21 ${PN}-debugger \
22 ${PN}-dev \
23 ${PN}-difflib \
24 ${PN}-distutils \
25 ${PN}-distutils-staticdev \
26 ${PN}-doctest \
27 ${PN}-email \
28 ${PN}-enum \
29 ${PN}-fcntl \
30 ${PN}-gdbm \
31 ${PN}-html \
32 ${PN}-idle \
33 ${PN}-image \
34 ${PN}-importlib \
35 ${PN}-io \
36 ${PN}-json \
37 ${PN}-lang \
38 ${PN}-logging \
39 ${PN}-mailbox \
40 ${PN}-math \
41 ${PN}-mime \
42 ${PN}-mmap \
43 ${PN}-multiprocessing \
44 ${PN}-netclient \
45 ${PN}-netserver \
46 ${PN}-numbers \
47 ${PN}-pickle \
48 ${PN}-pkgutil \
49 ${PN}-plistlib \
50 ${PN}-pprint \
51 ${PN}-profile \
52 ${PN}-pydoc \
53 ${PN}-re \
54 ${PN}-readline \
55 ${PN}-reprlib \
56 ${PN}-resource \
57 ${PN}-runpy \
58 ${PN}-selectors \
59 ${PN}-shell \
60 ${PN}-signal \
61 ${PN}-smtpd \
62 ${PN}-sqlite3 \
63 ${PN}-sqlite3-tests \
64 ${PN}-stringold \
65 ${PN}-subprocess \
66 ${PN}-syslog \
67 ${PN}-terminal \
68 ${PN}-tests \
69 ${PN}-textutils \
70 ${PN}-threading \
71 ${PN}-tkinter \
72 ${PN}-typing \
73 ${PN}-unittest \
74 ${PN}-unixadmin \
75 ${PN}-xml \
76 ${PN}-xmlrpc \
77"
78
79PACKAGES="\
80 ${PN}-dbg \
81 ${PN}-2to3 \
82 ${PN}-argparse \
83 ${PN}-asyncio \
84 ${PN}-audio \
85 ${PN}-codecs \
86 ${PN}-compile \
87 ${PN}-compression \
88 ${PN}-core \
89 ${PN}-crypt \
90 ${PN}-ctypes \
91 ${PN}-curses \
92 ${PN}-datetime \
93 ${PN}-db \
94 ${PN}-debugger \
95 ${PN}-dev \
96 ${PN}-difflib \
97${PN}-distutils \
98 ${PN}-distutils-staticdev \
99 ${PN}-doctest \
100 ${PN}-email \
101 ${PN}-enum \
102 ${PN}-fcntl \
103 ${PN}-gdbm \
104 ${PN}-html \
105 ${PN}-idle \
106 ${PN}-image \
107 ${PN}-importlib \
108 ${PN}-io \
109 ${PN}-json \
110 ${PN}-lang \
111 ${PN}-logging \
112 ${PN}-mailbox \
113 ${PN}-math \
114 ${PN}-mime \
115 ${PN}-mmap \
116 ${PN}-multiprocessing \
117 ${PN}-netclient \
118 ${PN}-netserver \
119 ${PN}-numbers \
120 ${PN}-pickle \
121 ${PN}-pkgutil \
122 ${PN}-plistlib \
123 ${PN}-pprint \
124 ${PN}-profile \
125 ${PN}-pydoc \
126 ${PN}-re \
127 ${PN}-readline \
128 ${PN}-reprlib \
129 ${PN}-resource \
130 ${PN}-runpy \
131 ${PN}-selectors \
132 ${PN}-shell \
133 ${PN}-signal \
134 ${PN}-smtpd \
135 ${PN}-sqlite3 \
136 ${PN}-sqlite3-tests \
137 ${PN}-stringold \
138 ${PN}-subprocess \
139 ${PN}-syslog \
140 ${PN}-terminal \
141 ${PN}-tests \
142 ${PN}-textutils \
143 ${PN}-threading \
144 ${PN}-tkinter \
145 ${PN}-typing \
146 ${PN}-unittest \
147 ${PN}-unixadmin \
148 ${PN}-xml \
149 ${PN}-xmlrpc \
150 ${PN}-modules \
151"
152
153SUMMARY_${PN}-2to3="Python automated Python 2 to 3 code translator"
154RDEPENDS_${PN}-2to3="${PN}-core"
155FILES_${PN}-2to3="\
156 ${libdir}/python3.5/lib2to3 \
157 ${libdir}/python3.5/lib2to3/__pycache__ \
158"
159
160SUMMARY_${PN}-argparse="Python command line argument parser"
161RDEPENDS_${PN}-argparse="${PN}-core ${PN}-codecs ${PN}-textutils"
162FILES_${PN}-argparse="\
163 ${libdir}/python3.5/argparse.* \
164 ${libdir}/python3.5/__pycache__/argparse.* \
165"
166
167SUMMARY_${PN}-asyncio="Python Asynchronous I/O, event loop, coroutines and tasks"
168RDEPENDS_${PN}-asyncio="${PN}-core"
169FILES_${PN}-asyncio="\
170 ${libdir}/python3.5/asyncio \
171 ${libdir}/python3.5/asyncio/__pycache__ \
172"
173
174SUMMARY_${PN}-audio="Python Audio Handling"
175RDEPENDS_${PN}-audio="${PN}-core"
176FILES_${PN}-audio="\
177 ${libdir}/python3.5/wave.* \
178 ${libdir}/python3.5/__pycache__/wave.* \
179 ${libdir}/python3.5/chunk.* \
180 ${libdir}/python3.5/__pycache__/chunk.* \
181 ${libdir}/python3.5/sndhdr.* \
182 ${libdir}/python3.5/__pycache__/sndhdr.* \
183 ${libdir}/python3.5/lib-dynload/ossaudiodev.*.so \
184 ${libdir}/python3.5/lib-dynload/__pycache__/ossaudiodev.*.so \
185 ${libdir}/python3.5/lib-dynload/audioop.*.so \
186 ${libdir}/python3.5/lib-dynload/__pycache__/audioop.*.so \
187 ${libdir}/python3.5/audiodev.* \
188 ${libdir}/python3.5/__pycache__/audiodev.* \
189 ${libdir}/python3.5/sunaudio.* \
190 ${libdir}/python3.5/__pycache__/sunaudio.* \
191 ${libdir}/python3.5/sunau.* \
192 ${libdir}/python3.5/__pycache__/sunau.* \
193 ${libdir}/python3.5/toaiff.* \
194 ${libdir}/python3.5/__pycache__/toaiff.* \
195"
196
197SUMMARY_${PN}-codecs="Python codecs, encodings & i18n support"
198RDEPENDS_${PN}-codecs="${PN}-core ${PN}-lang"
199FILES_${PN}-codecs="\
200 ${libdir}/python3.5/codecs.* \
201 ${libdir}/python3.5/__pycache__/codecs.* \
202 ${libdir}/python3.5/encodings \
203 ${libdir}/python3.5/encodings/__pycache__ \
204 ${libdir}/python3.5/gettext.* \
205 ${libdir}/python3.5/__pycache__/gettext.* \
206 ${libdir}/python3.5/locale.* \
207 ${libdir}/python3.5/__pycache__/locale.* \
208 ${libdir}/python3.5/lib-dynload/_locale.*.so \
209 ${libdir}/python3.5/lib-dynload/__pycache__/_locale.*.so \
210 ${libdir}/python3.5/lib-dynload/_codecs* \
211 ${libdir}/python3.5/lib-dynload/_codecs*/__pycache__ \
212 ${libdir}/python3.5/lib-dynload/_multibytecodec.*.so \
213 ${libdir}/python3.5/lib-dynload/__pycache__/_multibytecodec.*.so \
214 ${libdir}/python3.5/lib-dynload/unicodedata.*.so \
215 ${libdir}/python3.5/lib-dynload/__pycache__/unicodedata.*.so \
216 ${libdir}/python3.5/stringprep.* \
217 ${libdir}/python3.5/__pycache__/stringprep.* \
218 ${libdir}/python3.5/xdrlib.* \
219 ${libdir}/python3.5/__pycache__/xdrlib.* \
220"
221
222SUMMARY_${PN}-compile="Python bytecode compilation support"
223RDEPENDS_${PN}-compile="${PN}-core"
224FILES_${PN}-compile="\
225 ${libdir}/python3.5/py_compile.* \
226 ${libdir}/python3.5/__pycache__/py_compile.* \
227 ${libdir}/python3.5/compileall.* \
228 ${libdir}/python3.5/__pycache__/compileall.* \
229"
230
231SUMMARY_${PN}-compression="Python high-level compression support"
232RDEPENDS_${PN}-compression="${PN}-core ${PN}-codecs ${PN}-importlib ${PN}-threading ${PN}-shell"
233FILES_${PN}-compression="\
234 ${libdir}/python3.5/gzip.* \
235 ${libdir}/python3.5/__pycache__/gzip.* \
236 ${libdir}/python3.5/zipfile.* \
237 ${libdir}/python3.5/__pycache__/zipfile.* \
238 ${libdir}/python3.5/tarfile.* \
239 ${libdir}/python3.5/__pycache__/tarfile.* \
240 ${libdir}/python3.5/lib-dynload/bz2.*.so \
241 ${libdir}/python3.5/lib-dynload/__pycache__/bz2.*.so \
242 ${libdir}/python3.5/lib-dynload/zlib.*.so \
243 ${libdir}/python3.5/lib-dynload/__pycache__/zlib.*.so \
244 ${libdir}/python3.5/bz2.py \
245 ${libdir}/python3.5/__pycache__/bz2.py \
246 ${libdir}/python3.5/lzma.py \
247 ${libdir}/python3.5/__pycache__/lzma.py \
248 ${libdir}/python3.5/_compression.py \
249 ${libdir}/python3.5/__pycache__/_compression.py \
250"
251
252SUMMARY_${PN}-core="Python interpreter and core modules"
253RDEPENDS_${PN}-core="${PN}-lang ${PN}-re ${PN}-reprlib ${PN}-codecs ${PN}-io ${PN}-math"
254FILES_${PN}-core="\
255 ${libdir}/python3.5/__future__.* \
256 ${libdir}/python3.5/__pycache__/__future__.* \
257 ${libdir}/python3.5/_abcoll.* \
258 ${libdir}/python3.5/__pycache__/_abcoll.* \
259 ${libdir}/python3.5/abc.* \
260 ${libdir}/python3.5/__pycache__/abc.* \
261 ${libdir}/python3.5/ast.* \
262 ${libdir}/python3.5/__pycache__/ast.* \
263 ${libdir}/python3.5/copy.* \
264 ${libdir}/python3.5/__pycache__/copy.* \
265 ${libdir}/python3.5/copyreg.* \
266 ${libdir}/python3.5/__pycache__/copyreg.* \
267 ${libdir}/python3.5/configparser.* \
268 ${libdir}/python3.5/__pycache__/configparser.* \
269 ${libdir}/python3.5/genericpath.* \
270 ${libdir}/python3.5/__pycache__/genericpath.* \
271 ${libdir}/python3.5/getopt.* \
272 ${libdir}/python3.5/__pycache__/getopt.* \
273 ${libdir}/python3.5/linecache.* \
274 ${libdir}/python3.5/__pycache__/linecache.* \
275 ${libdir}/python3.5/new.* \
276 ${libdir}/python3.5/__pycache__/new.* \
277 ${libdir}/python3.5/os.* \
278 ${libdir}/python3.5/__pycache__/os.* \
279 ${libdir}/python3.5/posixpath.* \
280 ${libdir}/python3.5/__pycache__/posixpath.* \
281 ${libdir}/python3.5/struct.* \
282 ${libdir}/python3.5/__pycache__/struct.* \
283 ${libdir}/python3.5/warnings.* \
284 ${libdir}/python3.5/__pycache__/warnings.* \
285 ${libdir}/python3.5/site.* \
286 ${libdir}/python3.5/__pycache__/site.* \
287 ${libdir}/python3.5/stat.* \
288 ${libdir}/python3.5/__pycache__/stat.* \
289 ${libdir}/python3.5/UserDict.* \
290 ${libdir}/python3.5/__pycache__/UserDict.* \
291 ${libdir}/python3.5/UserList.* \
292 ${libdir}/python3.5/__pycache__/UserList.* \
293 ${libdir}/python3.5/UserString.* \
294 ${libdir}/python3.5/__pycache__/UserString.* \
295 ${libdir}/python3.5/lib-dynload/binascii.*.so \
296 ${libdir}/python3.5/lib-dynload/__pycache__/binascii.*.so \
297 ${libdir}/python3.5/lib-dynload/_struct.*.so \
298 ${libdir}/python3.5/lib-dynload/__pycache__/_struct.*.so \
299 ${libdir}/python3.5/lib-dynload/time.*.so \
300 ${libdir}/python3.5/lib-dynload/__pycache__/time.*.so \
301 ${libdir}/python3.5/lib-dynload/xreadlines.*.so \
302 ${libdir}/python3.5/lib-dynload/__pycache__/xreadlines.*.so \
303 ${libdir}/python3.5/types.* \
304 ${libdir}/python3.5/__pycache__/types.* \
305 ${libdir}/python3.5/platform.* \
306 ${libdir}/python3.5/__pycache__/platform.* \
307 ${bindir}/python* \
308 ${libdir}/python3.5/_weakrefset.* \
309 ${libdir}/python3.5/__pycache__/_weakrefset.* \
310 ${libdir}/python3.5/sysconfig.* \
311 ${libdir}/python3.5/__pycache__/sysconfig.* \
312 ${libdir}/python3.5/_sysconfigdata.* \
313 ${libdir}/python3.5/__pycache__/_sysconfigdata.* \
314 ${includedir}/python${PYTHON_BINABI}/pyconfig*.h \
315 ${libdir}/python${PYTHON_MAJMIN}/collections \
316 ${libdir}/python${PYTHON_MAJMIN}/_collections_abc.* \
317 ${libdir}/python${PYTHON_MAJMIN}/_markupbase.* \
318 ${libdir}/python${PYTHON_MAJMIN}/_sitebuiltins.* \
319 ${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py \
320"
321
322SUMMARY_${PN}-crypt="Python basic cryptographic and hashing support"
323RDEPENDS_${PN}-crypt="${PN}-core"
324FILES_${PN}-crypt="\
325 ${libdir}/python3.5/hashlib.* \
326 ${libdir}/python3.5/__pycache__/hashlib.* \
327 ${libdir}/python3.5/md5.* \
328 ${libdir}/python3.5/__pycache__/md5.* \
329 ${libdir}/python3.5/sha.* \
330 ${libdir}/python3.5/__pycache__/sha.* \
331 ${libdir}/python3.5/lib-dynload/crypt.*.so \
332 ${libdir}/python3.5/lib-dynload/__pycache__/crypt.*.so \
333 ${libdir}/python3.5/lib-dynload/_hashlib.*.so \
334 ${libdir}/python3.5/lib-dynload/__pycache__/_hashlib.*.so \
335 ${libdir}/python3.5/lib-dynload/_sha256.*.so \
336 ${libdir}/python3.5/lib-dynload/__pycache__/_sha256.*.so \
337 ${libdir}/python3.5/lib-dynload/_sha512.*.so \
338 ${libdir}/python3.5/lib-dynload/__pycache__/_sha512.*.so \
339"
340
341SUMMARY_${PN}-ctypes="Python C types support"
342RDEPENDS_${PN}-ctypes="${PN}-core ${PN}-subprocess"
343FILES_${PN}-ctypes="\
344 ${libdir}/python3.5/ctypes \
345 ${libdir}/python3.5/ctypes/__pycache__ \
346 ${libdir}/python3.5/lib-dynload/_ctypes.*.so \
347 ${libdir}/python3.5/lib-dynload/__pycache__/_ctypes.*.so \
348 ${libdir}/python3.5/lib-dynload/_ctypes_test.*.so \
349 ${libdir}/python3.5/lib-dynload/__pycache__/_ctypes_test.*.so \
350"
351
352SUMMARY_${PN}-curses="Python curses support"
353RDEPENDS_${PN}-curses="${PN}-core"
354FILES_${PN}-curses="\
355 ${libdir}/python3.5/curses \
356 ${libdir}/python3.5/curses/__pycache__ \
357 ${libdir}/python3.5/lib-dynload/_curses.*.so \
358 ${libdir}/python3.5/lib-dynload/__pycache__/_curses.*.so \
359 ${libdir}/python3.5/lib-dynload/_curses_panel.*.so \
360 ${libdir}/python3.5/lib-dynload/__pycache__/_curses_panel.*.so \
361"
362
363SUMMARY_${PN}-datetime="Python calendar and time support"
364RDEPENDS_${PN}-datetime="${PN}-core ${PN}-codecs"
365FILES_${PN}-datetime="\
366 ${libdir}/python3.5/_strptime.* \
367 ${libdir}/python3.5/__pycache__/_strptime.* \
368 ${libdir}/python3.5/calendar.* \
369 ${libdir}/python3.5/__pycache__/calendar.* \
370 ${libdir}/python3.5/datetime.* \
371 ${libdir}/python3.5/__pycache__/datetime.* \
372 ${libdir}/python3.5/lib-dynload/_datetime.*.so \
373 ${libdir}/python3.5/lib-dynload/__pycache__/_datetime.*.so \
374"
375
376SUMMARY_${PN}-db="Python file-based database support"
377RDEPENDS_${PN}-db="${PN}-core"
378FILES_${PN}-db="\
379 ${libdir}/python3.5/anydbm.* \
380 ${libdir}/python3.5/__pycache__/anydbm.* \
381 ${libdir}/python3.5/dumbdbm.* \
382 ${libdir}/python3.5/__pycache__/dumbdbm.* \
383 ${libdir}/python3.5/whichdb.* \
384 ${libdir}/python3.5/__pycache__/whichdb.* \
385 ${libdir}/python3.5/dbm \
386 ${libdir}/python3.5/dbm/__pycache__ \
387 ${libdir}/python3.5/lib-dynload/_dbm.*.so \
388 ${libdir}/python3.5/lib-dynload/__pycache__/_dbm.*.so \
389"
390
391SUMMARY_${PN}-debugger="Python debugger"
392RDEPENDS_${PN}-debugger="${PN}-core ${PN}-io ${PN}-lang ${PN}-re ${PN}-stringold ${PN}-shell ${PN}-pprint ${PN}-importlib ${PN}-pkgutil"
393FILES_${PN}-debugger="\
394 ${libdir}/python3.5/bdb.* \
395 ${libdir}/python3.5/__pycache__/bdb.* \
396 ${libdir}/python3.5/pdb.* \
397 ${libdir}/python3.5/__pycache__/pdb.* \
398"
399
400SUMMARY_${PN}-dev="Python development package"
401RDEPENDS_${PN}-dev="${PN}-core"
402FILES_${PN}-dev="\
403 ${includedir} \
404 ${libdir}/lib*${SOLIBSDEV} \
405 ${libdir}/*.la \
406 ${libdir}/*.a \
407 ${libdir}/*.o \
408 ${libdir}/pkgconfig \
409 ${base_libdir}/*.a \
410 ${base_libdir}/*.o \
411 ${datadir}/aclocal \
412 ${datadir}/pkgconfig \
413 ${libdir}/python3.5/config*/Makefile \
414 ${libdir}/python3.5/config*/Makefile/__pycache__ \
415"
416
417SUMMARY_${PN}-difflib="Python helpers for computing deltas between objects"
418RDEPENDS_${PN}-difflib="${PN}-lang ${PN}-re"
419FILES_${PN}-difflib="\
420 ${libdir}/python3.5/difflib.* \
421 ${libdir}/python3.5/__pycache__/difflib.* \
422"
423
424SUMMARY_${PN}-distutils="Python Distribution Utilities"
425RDEPENDS_${PN}-distutils="${PN}-core ${PN}-email"
426FILES_${PN}-distutils="\
427 ${libdir}/python3.5/config \
428 ${libdir}/python3.5/config/__pycache__ \
429 ${libdir}/python3.5/distutils \
430 ${libdir}/python3.5/distutils/__pycache__ \
431"
432
433SUMMARY_${PN}-distutils-staticdev="Python distribution utilities (static libraries)"
434RDEPENDS_${PN}-distutils-staticdev="${PN}-distutils"
435FILES_${PN}-distutils-staticdev="\
436 ${libdir}/python3.5/config/lib*.a \
437 ${libdir}/python3.5/config/__pycache__/lib*.a \
438"
439
440SUMMARY_${PN}-doctest="Python framework for running examples in docstrings"
441RDEPENDS_${PN}-doctest="${PN}-core ${PN}-lang ${PN}-io ${PN}-re ${PN}-unittest ${PN}-debugger ${PN}-difflib"
442FILES_${PN}-doctest="\
443 ${libdir}/python3.5/doctest.* \
444 ${libdir}/python3.5/__pycache__/doctest.* \
445"
446
447SUMMARY_${PN}-email="Python email support"
448RDEPENDS_${PN}-email="${PN}-core ${PN}-io ${PN}-re ${PN}-mime ${PN}-audio ${PN}-image ${PN}-netclient"
449FILES_${PN}-email="\
450 ${libdir}/python3.5/imaplib.* \
451 ${libdir}/python3.5/__pycache__/imaplib.* \
452 ${libdir}/python3.5/email \
453 ${libdir}/python3.5/email/__pycache__ \
454"
455
456SUMMARY_${PN}-enum="Python support for enumerations"
457RDEPENDS_${PN}-enum="${PN}-core"
458FILES_${PN}-enum="\
459 ${libdir}/python3.5/enum.* \
460 ${libdir}/python3.5/__pycache__/enum.* \
461"
462
463SUMMARY_${PN}-fcntl="Python's fcntl interface"
464RDEPENDS_${PN}-fcntl="${PN}-core"
465FILES_${PN}-fcntl="\
466 ${libdir}/python3.5/lib-dynload/fcntl.*.so \
467 ${libdir}/python3.5/lib-dynload/__pycache__/fcntl.*.so \
468"
469
470SUMMARY_${PN}-gdbm="Python GNU database support"
471RDEPENDS_${PN}-gdbm="${PN}-core"
472FILES_${PN}-gdbm="\
473 ${libdir}/python3.5/lib-dynload/_gdbm.*.so \
474 ${libdir}/python3.5/lib-dynload/__pycache__/_gdbm.*.so \
475"
476
477SUMMARY_${PN}-html="Python HTML processing support"
478RDEPENDS_${PN}-html="${PN}-core"
479FILES_${PN}-html="\
480 ${libdir}/python3.5/formatter.* \
481 ${libdir}/python3.5/__pycache__/formatter.* \
482 ${libdir}/python3.5/htmlentitydefs.* \
483 ${libdir}/python3.5/__pycache__/htmlentitydefs.* \
484 ${libdir}/python3.5/html \
485 ${libdir}/python3.5/html/__pycache__ \
486 ${libdir}/python3.5/htmllib.* \
487 ${libdir}/python3.5/__pycache__/htmllib.* \
488 ${libdir}/python3.5/markupbase.* \
489 ${libdir}/python3.5/__pycache__/markupbase.* \
490 ${libdir}/python3.5/sgmllib.* \
491 ${libdir}/python3.5/__pycache__/sgmllib.* \
492 ${libdir}/python3.5/HTMLParser.* \
493 ${libdir}/python3.5/__pycache__/HTMLParser.* \
494"
495
496SUMMARY_${PN}-idle="Python Integrated Development Environment"
497RDEPENDS_${PN}-idle="${PN}-core ${PN}-tkinter"
498FILES_${PN}-idle="\
499 ${bindir}/idle \
500 ${libdir}/python3.5/idlelib \
501 ${libdir}/python3.5/idlelib/__pycache__ \
502"
503
504SUMMARY_${PN}-image="Python graphical image handling"
505RDEPENDS_${PN}-image="${PN}-core"
506FILES_${PN}-image="\
507 ${libdir}/python3.5/colorsys.* \
508 ${libdir}/python3.5/__pycache__/colorsys.* \
509 ${libdir}/python3.5/imghdr.* \
510 ${libdir}/python3.5/__pycache__/imghdr.* \
511 ${libdir}/python3.5/lib-dynload/imageop.*.so \
512 ${libdir}/python3.5/lib-dynload/__pycache__/imageop.*.so \
513 ${libdir}/python3.5/lib-dynload/rgbimg.*.so \
514 ${libdir}/python3.5/lib-dynload/__pycache__/rgbimg.*.so \
515"
516
517SUMMARY_${PN}-importlib="Python import implementation library"
518RDEPENDS_${PN}-importlib="${PN}-core ${PN}-lang"
519FILES_${PN}-importlib="\
520 ${libdir}/python3.5/importlib \
521 ${libdir}/python3.5/importlib/__pycache__ \
522 ${libdir}/python3.5/imp.* \
523 ${libdir}/python3.5/__pycache__/imp.* \
524"
525
526SUMMARY_${PN}-io="Python low-level I/O"
527RDEPENDS_${PN}-io="${PN}-core ${PN}-math"
528FILES_${PN}-io="\
529 ${libdir}/python3.5/lib-dynload/_socket.*.so \
530 ${libdir}/python3.5/lib-dynload/__pycache__/_socket.*.so \
531 ${libdir}/python3.5/lib-dynload/_io.*.so \
532 ${libdir}/python3.5/lib-dynload/__pycache__/_io.*.so \
533 ${libdir}/python3.5/lib-dynload/_ssl.*.so \
534 ${libdir}/python3.5/lib-dynload/__pycache__/_ssl.*.so \
535 ${libdir}/python3.5/lib-dynload/select.*.so \
536 ${libdir}/python3.5/lib-dynload/__pycache__/select.*.so \
537 ${libdir}/python3.5/lib-dynload/termios.*.so \
538 ${libdir}/python3.5/lib-dynload/__pycache__/termios.*.so \
539 ${libdir}/python3.5/lib-dynload/cStringIO.*.so \
540 ${libdir}/python3.5/lib-dynload/__pycache__/cStringIO.*.so \
541 ${libdir}/python3.5/ipaddress.* \
542 ${libdir}/python3.5/__pycache__/ipaddress.* \
543 ${libdir}/python3.5/pipes.* \
544 ${libdir}/python3.5/__pycache__/pipes.* \
545 ${libdir}/python3.5/socket.* \
546 ${libdir}/python3.5/__pycache__/socket.* \
547 ${libdir}/python3.5/ssl.* \
548 ${libdir}/python3.5/__pycache__/ssl.* \
549 ${libdir}/python3.5/tempfile.* \
550 ${libdir}/python3.5/__pycache__/tempfile.* \
551 ${libdir}/python3.5/StringIO.* \
552 ${libdir}/python3.5/__pycache__/StringIO.* \
553 ${libdir}/python3.5/io.* \
554 ${libdir}/python3.5/__pycache__/io.* \
555 ${libdir}/python3.5/_pyio.* \
556 ${libdir}/python3.5/__pycache__/_pyio.* \
557"
558
559SUMMARY_${PN}-json="Python JSON support"
560RDEPENDS_${PN}-json="${PN}-core ${PN}-math ${PN}-re"
561FILES_${PN}-json="\
562 ${libdir}/python3.5/json \
563 ${libdir}/python3.5/json/__pycache__ \
564 ${libdir}/python3.5/lib-dynload/_json.*.so \
565 ${libdir}/python3.5/lib-dynload/__pycache__/_json.*.so \
566"
567
568SUMMARY_${PN}-lang="Python low-level language support"
569RDEPENDS_${PN}-lang="${PN}-core ${PN}-importlib"
570FILES_${PN}-lang="\
571 ${libdir}/python3.5/lib-dynload/_bisect.*.so \
572 ${libdir}/python3.5/lib-dynload/__pycache__/_bisect.*.so \
573 ${libdir}/python3.5/lib-dynload/_collections.*.so \
574 ${libdir}/python3.5/lib-dynload/__pycache__/_collections.*.so \
575 ${libdir}/python3.5/lib-dynload/_heapq.*.so \
576 ${libdir}/python3.5/lib-dynload/__pycache__/_heapq.*.so \
577 ${libdir}/python3.5/lib-dynload/_weakref.*.so \
578 ${libdir}/python3.5/lib-dynload/__pycache__/_weakref.*.so \
579 ${libdir}/python3.5/lib-dynload/_functools.*.so \
580 ${libdir}/python3.5/lib-dynload/__pycache__/_functools.*.so \
581 ${libdir}/python3.5/lib-dynload/array.*.so \
582 ${libdir}/python3.5/lib-dynload/__pycache__/array.*.so \
583 ${libdir}/python3.5/lib-dynload/itertools.*.so \
584 ${libdir}/python3.5/lib-dynload/__pycache__/itertools.*.so \
585 ${libdir}/python3.5/lib-dynload/operator.*.so \
586 ${libdir}/python3.5/lib-dynload/__pycache__/operator.*.so \
587 ${libdir}/python3.5/lib-dynload/parser.*.so \
588 ${libdir}/python3.5/lib-dynload/__pycache__/parser.*.so \
589 ${libdir}/python3.5/atexit.* \
590 ${libdir}/python3.5/__pycache__/atexit.* \
591 ${libdir}/python3.5/bisect.* \
592 ${libdir}/python3.5/__pycache__/bisect.* \
593 ${libdir}/python3.5/code.* \
594 ${libdir}/python3.5/__pycache__/code.* \
595 ${libdir}/python3.5/codeop.* \
596 ${libdir}/python3.5/__pycache__/codeop.* \
597 ${libdir}/python3.5/collections.* \
598 ${libdir}/python3.5/__pycache__/collections.* \
599 ${libdir}/python3.5/_collections_abc.* \
600 ${libdir}/python3.5/__pycache__/_collections_abc.* \
601 ${libdir}/python3.5/contextlib.* \
602 ${libdir}/python3.5/__pycache__/contextlib.* \
603 ${libdir}/python3.5/dis.* \
604 ${libdir}/python3.5/__pycache__/dis.* \
605 ${libdir}/python3.5/functools.* \
606 ${libdir}/python3.5/__pycache__/functools.* \
607 ${libdir}/python3.5/heapq.* \
608 ${libdir}/python3.5/__pycache__/heapq.* \
609 ${libdir}/python3.5/inspect.* \
610 ${libdir}/python3.5/__pycache__/inspect.* \
611 ${libdir}/python3.5/keyword.* \
612 ${libdir}/python3.5/__pycache__/keyword.* \
613 ${libdir}/python3.5/opcode.* \
614 ${libdir}/python3.5/__pycache__/opcode.* \
615 ${libdir}/python3.5/operator.* \
616 ${libdir}/python3.5/__pycache__/operator.* \
617 ${libdir}/python3.5/symbol.* \
618 ${libdir}/python3.5/__pycache__/symbol.* \
619 ${libdir}/python3.5/repr.* \
620 ${libdir}/python3.5/__pycache__/repr.* \
621 ${libdir}/python3.5/token.* \
622 ${libdir}/python3.5/__pycache__/token.* \
623 ${libdir}/python3.5/tokenize.* \
624 ${libdir}/python3.5/__pycache__/tokenize.* \
625 ${libdir}/python3.5/traceback.* \
626 ${libdir}/python3.5/__pycache__/traceback.* \
627 ${libdir}/python3.5/weakref.* \
628 ${libdir}/python3.5/__pycache__/weakref.* \
629"
630
631SUMMARY_${PN}-logging="Python logging support"
632RDEPENDS_${PN}-logging="${PN}-core ${PN}-io ${PN}-lang ${PN}-pickle ${PN}-stringold"
633FILES_${PN}-logging="\
634 ${libdir}/python3.5/logging \
635 ${libdir}/python3.5/logging/__pycache__ \
636"
637
638SUMMARY_${PN}-mailbox="Python mailbox format support"
639RDEPENDS_${PN}-mailbox="${PN}-core ${PN}-mime"
640FILES_${PN}-mailbox="\
641 ${libdir}/python3.5/mailbox.* \
642 ${libdir}/python3.5/__pycache__/mailbox.* \
643"
644
645SUMMARY_${PN}-math="Python math support"
646RDEPENDS_${PN}-math="${PN}-core ${PN}-crypt"
647FILES_${PN}-math="\
648 ${libdir}/python3.5/lib-dynload/cmath.*.so \
649 ${libdir}/python3.5/lib-dynload/__pycache__/cmath.*.so \
650 ${libdir}/python3.5/lib-dynload/math.*.so \
651 ${libdir}/python3.5/lib-dynload/__pycache__/math.*.so \
652 ${libdir}/python3.5/lib-dynload/_random.*.so \
653 ${libdir}/python3.5/lib-dynload/__pycache__/_random.*.so \
654 ${libdir}/python3.5/random.* \
655 ${libdir}/python3.5/__pycache__/random.* \
656 ${libdir}/python3.5/sets.* \
657 ${libdir}/python3.5/__pycache__/sets.* \
658"
659
660SUMMARY_${PN}-mime="Python MIME handling APIs"
661RDEPENDS_${PN}-mime="${PN}-core ${PN}-io"
662FILES_${PN}-mime="\
663 ${libdir}/python3.5/mimetools.* \
664 ${libdir}/python3.5/__pycache__/mimetools.* \
665 ${libdir}/python3.5/uu.* \
666 ${libdir}/python3.5/__pycache__/uu.* \
667 ${libdir}/python3.5/quopri.* \
668 ${libdir}/python3.5/__pycache__/quopri.* \
669 ${libdir}/python3.5/rfc822.* \
670 ${libdir}/python3.5/__pycache__/rfc822.* \
671 ${libdir}/python3.5/MimeWriter.* \
672 ${libdir}/python3.5/__pycache__/MimeWriter.* \
673"
674
675SUMMARY_${PN}-mmap="Python memory-mapped file support"
676RDEPENDS_${PN}-mmap="${PN}-core ${PN}-io"
677FILES_${PN}-mmap="\
678 ${libdir}/python3.5/lib-dynload/mmap.*.so \
679 ${libdir}/python3.5/lib-dynload/__pycache__/mmap.*.so \
680"
681
682SUMMARY_${PN}-multiprocessing="Python multiprocessing support"
683RDEPENDS_${PN}-multiprocessing="${PN}-core ${PN}-io ${PN}-lang ${PN}-pickle ${PN}-threading ${PN}-ctypes ${PN}-mmap"
684FILES_${PN}-multiprocessing="\
685 ${libdir}/python3.5/lib-dynload/_multiprocessing.*.so \
686 ${libdir}/python3.5/lib-dynload/__pycache__/_multiprocessing.*.so \
687 ${libdir}/python3.5/multiprocessing \
688 ${libdir}/python3.5/multiprocessing/__pycache__ \
689"
690
691SUMMARY_${PN}-netclient="Python Internet Protocol clients"
692RDEPENDS_${PN}-netclient="${PN}-argparse ${PN}-core ${PN}-crypt ${PN}-datetime ${PN}-io ${PN}-lang ${PN}-logging ${PN}-mime ${PN}-html"
693FILES_${PN}-netclient="\
694 ${libdir}/python3.5/*Cookie*.* \
695 ${libdir}/python3.5/__pycache__/*Cookie*.* \
696 ${libdir}/python3.5/base64.* \
697 ${libdir}/python3.5/__pycache__/base64.* \
698 ${libdir}/python3.5/cookielib.* \
699 ${libdir}/python3.5/__pycache__/cookielib.* \
700 ${libdir}/python3.5/ftplib.* \
701 ${libdir}/python3.5/__pycache__/ftplib.* \
702 ${libdir}/python3.5/gopherlib.* \
703 ${libdir}/python3.5/__pycache__/gopherlib.* \
704 ${libdir}/python3.5/hmac.* \
705 ${libdir}/python3.5/__pycache__/hmac.* \
706 ${libdir}/python3.5/http* \
707 ${libdir}/python3.5/http*/__pycache__ \
708 ${libdir}/python3.5/httplib.* \
709 ${libdir}/python3.5/__pycache__/httplib.* \
710 ${libdir}/python3.5/mimetypes.* \
711 ${libdir}/python3.5/__pycache__/mimetypes.* \
712 ${libdir}/python3.5/nntplib.* \
713 ${libdir}/python3.5/__pycache__/nntplib.* \
714 ${libdir}/python3.5/poplib.* \
715 ${libdir}/python3.5/__pycache__/poplib.* \
716 ${libdir}/python3.5/smtplib.* \
717 ${libdir}/python3.5/__pycache__/smtplib.* \
718 ${libdir}/python3.5/telnetlib.* \
719 ${libdir}/python3.5/__pycache__/telnetlib.* \
720 ${libdir}/python3.5/urllib \
721 ${libdir}/python3.5/urllib/__pycache__ \
722 ${libdir}/python3.5/uuid.* \
723 ${libdir}/python3.5/__pycache__/uuid.* \
724 ${libdir}/python3.5/rfc822.* \
725 ${libdir}/python3.5/__pycache__/rfc822.* \
726 ${libdir}/python3.5/mimetools.* \
727 ${libdir}/python3.5/__pycache__/mimetools.* \
728"
729
730SUMMARY_${PN}-netserver="Python Internet Protocol servers"
731RDEPENDS_${PN}-netserver="${PN}-core ${PN}-netclient ${PN}-shell ${PN}-threading"
732FILES_${PN}-netserver="\
733 ${libdir}/python3.5/cgi.* \
734 ${libdir}/python3.5/__pycache__/cgi.* \
735 ${libdir}/python3.5/socketserver.* \
736 ${libdir}/python3.5/__pycache__/socketserver.* \
737 ${libdir}/python3.5/*HTTPServer.* \
738 ${libdir}/python3.5/__pycache__/*HTTPServer.* \
739 ${libdir}/python3.5/SocketServer.* \
740 ${libdir}/python3.5/__pycache__/SocketServer.* \
741"
742
743SUMMARY_${PN}-numbers="Python number APIs"
744RDEPENDS_${PN}-numbers="${PN}-core ${PN}-lang ${PN}-re"
745FILES_${PN}-numbers="\
746 ${libdir}/python3.5/decimal.* \
747 ${libdir}/python3.5/__pycache__/decimal.* \
748 ${libdir}/python3.5/fractions.* \
749 ${libdir}/python3.5/__pycache__/fractions.* \
750 ${libdir}/python3.5/numbers.* \
751 ${libdir}/python3.5/__pycache__/numbers.* \
752"
753
754SUMMARY_${PN}-pickle="Python serialisation/persistence support"
755RDEPENDS_${PN}-pickle="${PN}-core ${PN}-codecs ${PN}-io ${PN}-re"
756FILES_${PN}-pickle="\
757 ${libdir}/python3.5/_compat_pickle.* \
758 ${libdir}/python3.5/__pycache__/_compat_pickle.* \
759 ${libdir}/python3.5/pickle.* \
760 ${libdir}/python3.5/__pycache__/pickle.* \
761 ${libdir}/python3.5/shelve.* \
762 ${libdir}/python3.5/__pycache__/shelve.* \
763 ${libdir}/python3.5/lib-dynload/cPickle.*.so \
764 ${libdir}/python3.5/lib-dynload/__pycache__/cPickle.*.so \
765 ${libdir}/python3.5/pickletools.* \
766 ${libdir}/python3.5/__pycache__/pickletools.* \
767"
768
769SUMMARY_${PN}-pkgutil="Python package extension utility support"
770RDEPENDS_${PN}-pkgutil="${PN}-core"
771FILES_${PN}-pkgutil="\
772 ${libdir}/python3.5/pkgutil.* \
773 ${libdir}/python3.5/__pycache__/pkgutil.* \
774"
775
776SUMMARY_${PN}-plistlib="Generate and parse Mac OS X .plist files"
777RDEPENDS_${PN}-plistlib="${PN}-core ${PN}-datetime ${PN}-io"
778FILES_${PN}-plistlib="\
779 ${libdir}/python3.5/plistlib.* \
780 ${libdir}/python3.5/__pycache__/plistlib.* \
781"
782
783SUMMARY_${PN}-pprint="Python pretty-print support"
784RDEPENDS_${PN}-pprint="${PN}-core ${PN}-io"
785FILES_${PN}-pprint="\
786 ${libdir}/python3.5/pprint.* \
787 ${libdir}/python3.5/__pycache__/pprint.* \
788"
789
790SUMMARY_${PN}-profile="Python basic performance profiling support"
791RDEPENDS_${PN}-profile="${PN}-core ${PN}-textutils"
792FILES_${PN}-profile="\
793 ${libdir}/python3.5/profile.* \
794 ${libdir}/python3.5/__pycache__/profile.* \
795 ${libdir}/python3.5/pstats.* \
796 ${libdir}/python3.5/__pycache__/pstats.* \
797 ${libdir}/python3.5/cProfile.* \
798 ${libdir}/python3.5/__pycache__/cProfile.* \
799 ${libdir}/python3.5/lib-dynload/_lsprof.*.so \
800 ${libdir}/python3.5/lib-dynload/__pycache__/_lsprof.*.so \
801"
802
803SUMMARY_${PN}-pydoc="Python interactive help support"
804RDEPENDS_${PN}-pydoc="${PN}-core ${PN}-lang ${PN}-stringold ${PN}-re"
805FILES_${PN}-pydoc="\
806 ${bindir}/pydoc \
807 ${libdir}/python3.5/pydoc.* \
808 ${libdir}/python3.5/__pycache__/pydoc.* \
809 ${libdir}/python3.5/pydoc_data \
810 ${libdir}/python3.5/pydoc_data/__pycache__ \
811"
812
813SUMMARY_${PN}-re="Python Regular Expression APIs"
814RDEPENDS_${PN}-re="${PN}-core"
815FILES_${PN}-re="\
816 ${libdir}/python3.5/re.* \
817 ${libdir}/python3.5/__pycache__/re.* \
818 ${libdir}/python3.5/sre.* \
819 ${libdir}/python3.5/__pycache__/sre.* \
820 ${libdir}/python3.5/sre_compile.* \
821 ${libdir}/python3.5/__pycache__/sre_compile.* \
822 ${libdir}/python3.5/sre_constants* \
823 ${libdir}/python3.5/sre_constants*/__pycache__ \
824 ${libdir}/python3.5/sre_parse.* \
825 ${libdir}/python3.5/__pycache__/sre_parse.* \
826"
827
828SUMMARY_${PN}-readline="Python readline support"
829RDEPENDS_${PN}-readline="${PN}-core"
830FILES_${PN}-readline="\
831 ${libdir}/python3.5/lib-dynload/readline.*.so \
832 ${libdir}/python3.5/lib-dynload/__pycache__/readline.*.so \
833 ${libdir}/python3.5/rlcompleter.* \
834 ${libdir}/python3.5/__pycache__/rlcompleter.* \
835"
836
837SUMMARY_${PN}-reprlib="Python alternate repr() implementation"
838RDEPENDS_${PN}-reprlib="${PN}-core"
839FILES_${PN}-reprlib="\
840 ${libdir}/python3.5/reprlib.py \
841 ${libdir}/python3.5/__pycache__/reprlib.py \
842"
843
844SUMMARY_${PN}-resource="Python resource control interface"
845RDEPENDS_${PN}-resource="${PN}-core"
846FILES_${PN}-resource="\
847 ${libdir}/python3.5/lib-dynload/resource.*.so \
848 ${libdir}/python3.5/lib-dynload/__pycache__/resource.*.so \
849"
850
851SUMMARY_${PN}-runpy="Python script for locating/executing scripts in module namespace"
852RDEPENDS_${PN}-runpy="${PN}-core ${PN}-pkgutil"
853FILES_${PN}-runpy="\
854 ${libdir}/python3.5/runpy.* \
855 ${libdir}/python3.5/__pycache__/runpy.* \
856"
857
858SUMMARY_${PN}-selectors="Python High-level I/O multiplexing"
859RDEPENDS_${PN}-selectors="${PN}-core"
860FILES_${PN}-selectors="\
861 ${libdir}/python3.5/selectors.* \
862 ${libdir}/python3.5/__pycache__/selectors.* \
863"
864
865SUMMARY_${PN}-shell="Python shell-like functionality"
866RDEPENDS_${PN}-shell="${PN}-core ${PN}-re ${PN}-compression"
867FILES_${PN}-shell="\
868 ${libdir}/python3.5/cmd.* \
869 ${libdir}/python3.5/__pycache__/cmd.* \
870 ${libdir}/python3.5/commands.* \
871 ${libdir}/python3.5/__pycache__/commands.* \
872 ${libdir}/python3.5/dircache.* \
873 ${libdir}/python3.5/__pycache__/dircache.* \
874 ${libdir}/python3.5/fnmatch.* \
875 ${libdir}/python3.5/__pycache__/fnmatch.* \
876 ${libdir}/python3.5/glob.* \
877 ${libdir}/python3.5/__pycache__/glob.* \
878 ${libdir}/python3.5/popen2.* \
879 ${libdir}/python3.5/__pycache__/popen2.* \
880 ${libdir}/python3.5/shlex.* \
881 ${libdir}/python3.5/__pycache__/shlex.* \
882 ${libdir}/python3.5/shutil.* \
883 ${libdir}/python3.5/__pycache__/shutil.* \
884"
885
886SUMMARY_${PN}-signal="Python set handlers for asynchronous events support"
887RDEPENDS_${PN}-signal="${PN}-core ${PN}-enum"
888FILES_${PN}-signal="\
889 ${libdir}/python3.5/signal.* \
890 ${libdir}/python3.5/__pycache__/signal.* \
891"
892
893SUMMARY_${PN}-smtpd="Python Simple Mail Transport Daemon"
894RDEPENDS_${PN}-smtpd="${PN}-core ${PN}-netserver ${PN}-email ${PN}-mime"
895FILES_${PN}-smtpd="\
896 ${bindir}/smtpd.* \
897 ${libdir}/python3.5/smtpd.* \
898 ${libdir}/python3.5/__pycache__/smtpd.* \
899"
900
901SUMMARY_${PN}-sqlite3="Python Sqlite3 database support"
902RDEPENDS_${PN}-sqlite3="${PN}-core ${PN}-datetime ${PN}-lang ${PN}-crypt ${PN}-io ${PN}-threading"
903FILES_${PN}-sqlite3="\
904 ${libdir}/python3.5/lib-dynload/_sqlite3.*.so \
905 ${libdir}/python3.5/lib-dynload/__pycache__/_sqlite3.*.so \
906 ${libdir}/python3.5/sqlite3/dbapi2.* \
907 ${libdir}/python3.5/sqlite3/__pycache__/dbapi2.* \
908 ${libdir}/python3.5/sqlite3/__init__.* \
909 ${libdir}/python3.5/sqlite3/__pycache__/__init__.* \
910 ${libdir}/python3.5/sqlite3/dump.* \
911 ${libdir}/python3.5/sqlite3/__pycache__/dump.* \
912"
913
914SUMMARY_${PN}-sqlite3-tests="Python Sqlite3 database support tests"
915RDEPENDS_${PN}-sqlite3-tests="${PN}-core ${PN}-sqlite3"
916FILES_${PN}-sqlite3-tests="\
917 ${libdir}/python3.5/sqlite3/test \
918 ${libdir}/python3.5/sqlite3/test/__pycache__ \
919"
920
921SUMMARY_${PN}-stringold="Python string APIs [deprecated]"
922RDEPENDS_${PN}-stringold="${PN}-core ${PN}-re"
923FILES_${PN}-stringold="\
924 ${libdir}/python3.5/lib-dynload/strop.*.so \
925 ${libdir}/python3.5/lib-dynload/__pycache__/strop.*.so \
926 ${libdir}/python3.5/string.* \
927 ${libdir}/python3.5/__pycache__/string.* \
928 ${libdir}/python3.5/stringold.* \
929 ${libdir}/python3.5/__pycache__/stringold.* \
930"
931
932SUMMARY_${PN}-subprocess="Python subprocess support"
933RDEPENDS_${PN}-subprocess="${PN}-core ${PN}-io ${PN}-re ${PN}-fcntl ${PN}-pickle ${PN}-threading ${PN}-signal ${PN}-selectors"
934FILES_${PN}-subprocess="\
935 ${libdir}/python3.5/subprocess.* \
936 ${libdir}/python3.5/__pycache__/subprocess.* \
937 ${libdir}/python3.5/lib-dynload/_posixsubprocess.*.so \
938 ${libdir}/python3.5/lib-dynload/__pycache__/_posixsubprocess.*.so \
939"
940
941SUMMARY_${PN}-syslog="Python syslog interface"
942RDEPENDS_${PN}-syslog="${PN}-core"
943FILES_${PN}-syslog="\
944 ${libdir}/python3.5/lib-dynload/syslog.*.so \
945 ${libdir}/python3.5/lib-dynload/__pycache__/syslog.*.so \
946"
947
948SUMMARY_${PN}-terminal="Python terminal controlling support"
949RDEPENDS_${PN}-terminal="${PN}-core ${PN}-io"
950FILES_${PN}-terminal="\
951 ${libdir}/python3.5/pty.* \
952 ${libdir}/python3.5/__pycache__/pty.* \
953 ${libdir}/python3.5/tty.* \
954 ${libdir}/python3.5/__pycache__/tty.* \
955"
956
957SUMMARY_${PN}-tests="Python tests"
958RDEPENDS_${PN}-tests="${PN}-core ${PN}-compression"
959FILES_${PN}-tests="\
960 ${libdir}/python3.5/test \
961 ${libdir}/python3.5/test/__pycache__ \
962"
963
964SUMMARY_${PN}-textutils="Python option parsing, text wrapping and CSV support"
965RDEPENDS_${PN}-textutils="${PN}-core ${PN}-io ${PN}-re ${PN}-stringold"
966FILES_${PN}-textutils="\
967 ${libdir}/python3.5/lib-dynload/_csv.*.so \
968 ${libdir}/python3.5/lib-dynload/__pycache__/_csv.*.so \
969 ${libdir}/python3.5/csv.* \
970 ${libdir}/python3.5/__pycache__/csv.* \
971 ${libdir}/python3.5/optparse.* \
972 ${libdir}/python3.5/__pycache__/optparse.* \
973 ${libdir}/python3.5/textwrap.* \
974 ${libdir}/python3.5/__pycache__/textwrap.* \
975"
976
977SUMMARY_${PN}-threading="Python threading & synchronization support"
978RDEPENDS_${PN}-threading="${PN}-core ${PN}-lang"
979FILES_${PN}-threading="\
980 ${libdir}/python3.5/_threading_local.* \
981 ${libdir}/python3.5/__pycache__/_threading_local.* \
982 ${libdir}/python3.5/dummy_thread.* \
983 ${libdir}/python3.5/__pycache__/dummy_thread.* \
984 ${libdir}/python3.5/dummy_threading.* \
985 ${libdir}/python3.5/__pycache__/dummy_threading.* \
986 ${libdir}/python3.5/mutex.* \
987 ${libdir}/python3.5/__pycache__/mutex.* \
988 ${libdir}/python3.5/threading.* \
989 ${libdir}/python3.5/__pycache__/threading.* \
990 ${libdir}/python3.5/queue.* \
991 ${libdir}/python3.5/__pycache__/queue.* \
992"
993
994SUMMARY_${PN}-tkinter="Python Tcl/Tk bindings"
995RDEPENDS_${PN}-tkinter="${PN}-core"
996FILES_${PN}-tkinter="\
997 ${libdir}/python3.5/lib-dynload/_tkinter.*.so \
998 ${libdir}/python3.5/lib-dynload/__pycache__/_tkinter.*.so \
999 ${libdir}/python3.5/lib-tk \
1000 ${libdir}/python3.5/lib-tk/__pycache__ \
1001 ${libdir}/python3.5/tkinter \
1002 ${libdir}/python3.5/tkinter/__pycache__ \
1003"
1004
1005SUMMARY_${PN}-typing="Python typing support"
1006RDEPENDS_${PN}-typing="${PN}-core"
1007FILES_${PN}-typing="\
1008 ${libdir}/python3.5/typing.* \
1009 ${libdir}/python3.5/__pycache__/typing.* \
1010"
1011
1012SUMMARY_${PN}-unittest="Python unit testing framework"
1013RDEPENDS_${PN}-unittest="${PN}-core ${PN}-stringold ${PN}-lang ${PN}-io ${PN}-difflib ${PN}-pprint ${PN}-shell"
1014FILES_${PN}-unittest="\
1015 ${libdir}/python3.5/unittest/ \
1016 ${libdir}/python3.5/unittest/__pycache__ \
1017"
1018
1019SUMMARY_${PN}-unixadmin="Python Unix administration support"
1020RDEPENDS_${PN}-unixadmin="${PN}-core"
1021FILES_${PN}-unixadmin="\
1022 ${libdir}/python3.5/lib-dynload/nis.*.so \
1023 ${libdir}/python3.5/lib-dynload/__pycache__/nis.*.so \
1024 ${libdir}/python3.5/lib-dynload/grp.*.so \
1025 ${libdir}/python3.5/lib-dynload/__pycache__/grp.*.so \
1026 ${libdir}/python3.5/lib-dynload/pwd.*.so \
1027 ${libdir}/python3.5/lib-dynload/__pycache__/pwd.*.so \
1028 ${libdir}/python3.5/getpass.* \
1029 ${libdir}/python3.5/__pycache__/getpass.* \
1030"
1031
1032SUMMARY_${PN}-xml="Python basic XML support"
1033RDEPENDS_${PN}-xml="${PN}-core ${PN}-re"
1034FILES_${PN}-xml="\
1035 ${libdir}/python3.5/lib-dynload/_elementtree.*.so \
1036 ${libdir}/python3.5/lib-dynload/__pycache__/_elementtree.*.so \
1037 ${libdir}/python3.5/lib-dynload/pyexpat.*.so \
1038 ${libdir}/python3.5/lib-dynload/__pycache__/pyexpat.*.so \
1039 ${libdir}/python3.5/xml \
1040 ${libdir}/python3.5/xml/__pycache__ \
1041 ${libdir}/python3.5/xmllib.* \
1042 ${libdir}/python3.5/__pycache__/xmllib.* \
1043"
1044
1045SUMMARY_${PN}-xmlrpc="Python XML-RPC support"
1046RDEPENDS_${PN}-xmlrpc="${PN}-core ${PN}-xml ${PN}-netserver ${PN}-lang ${PN}-pydoc"
1047FILES_${PN}-xmlrpc="\
1048 ${libdir}/python3.5/xmlrpclib.* \
1049 ${libdir}/python3.5/__pycache__/xmlrpclib.* \
1050 ${libdir}/python3.5/SimpleXMLRPCServer.* \
1051 ${libdir}/python3.5/__pycache__/SimpleXMLRPCServer.* \
1052 ${libdir}/python3.5/DocXMLRPCServer.* \
1053 ${libdir}/python3.5/__pycache__/DocXMLRPCServer.* \
1054 ${libdir}/python3.5/xmlrpc \
1055 ${libdir}/python3.5/xmlrpc/__pycache__ \
1056"
1057
1058SUMMARY_${PN}-modules="All Python modules"
1059RDEPENDS_${PN}-modules=" \
1060 ${PN}-2to3 \
1061 ${PN}-argparse \
1062 ${PN}-asyncio \
1063 ${PN}-audio \
1064 ${PN}-codecs \
1065 ${PN}-compile \
1066 ${PN}-compression \
1067 ${PN}-core \
1068 ${PN}-crypt \
1069 ${PN}-ctypes \
1070 ${PN}-curses \
1071 ${PN}-datetime \
1072 ${PN}-db \
1073 ${PN}-debugger \
1074 ${PN}-difflib \
1075 ${PN}-distutils \
1076 ${PN}-doctest \
1077 ${PN}-email \
1078 ${PN}-enum \
1079 ${PN}-fcntl \
1080 ${PN}-gdbm \
1081 ${PN}-html \
1082 ${PN}-idle \
1083 ${PN}-image \
1084 ${PN}-importlib \
1085 ${PN}-io \
1086 ${PN}-json \
1087 ${PN}-lang \
1088 ${PN}-logging \
1089 ${PN}-mailbox \
1090 ${PN}-math \
1091 ${PN}-mime \
1092 ${PN}-mmap \
1093 ${PN}-multiprocessing \
1094 ${PN}-netclient \
1095 ${PN}-netserver \
1096 ${PN}-numbers \
1097 ${PN}-pickle \
1098 ${PN}-pkgutil \
1099 ${PN}-plistlib \
1100 ${PN}-pprint \
1101 ${PN}-profile \
1102 ${PN}-pydoc \
1103 ${PN}-re \
1104 ${PN}-readline \
1105 ${PN}-reprlib \
1106 ${PN}-resource \
1107 ${PN}-runpy \
1108 ${PN}-selectors \
1109 ${PN}-shell \
1110 ${PN}-signal \
1111 ${PN}-smtpd \
1112 ${PN}-sqlite3 \
1113 ${PN}-sqlite3-tests \
1114 ${PN}-stringold \
1115 ${PN}-subprocess \
1116 ${PN}-syslog \
1117 ${PN}-terminal \
1118 ${PN}-textutils \
1119 ${PN}-threading \
1120 ${PN}-tkinter \
1121 ${PN}-typing \
1122 ${PN}-unittest \
1123 ${PN}-unixadmin \
1124 ${PN}-xml \
1125 ${PN}-xmlrpc \
1126"
1127ALLOW_EMPTY_${PN}-modules = "1"
1128
1129
diff --git a/meta/recipes-devtools/python/python-native-3.5-manifest.inc b/meta/recipes-devtools/python/python-native-3.5-manifest.inc
deleted file mode 100644
index f1f732eb84..0000000000
--- a/meta/recipes-devtools/python/python-native-3.5-manifest.inc
+++ /dev/null
@@ -1,10 +0,0 @@
1
2# WARNING: This file is AUTO GENERATED: Manual edits will be lost next time I regenerate the file.
3# Generator: '../scripts/contrib/python/generate-manifest-3.5.py --native' Version 20140131 (C) 2002-2010 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
4
5
6
7RPROVIDES += "python3-modules-native python3-2to3-native python3-argparse-native python3-asyncio-native python3-audio-native python3-codecs-native python3-compile-native python3-compression-native python3-core-native python3-crypt-native python3-ctypes-native python3-curses-native python3-datetime-native python3-db-native python3-debugger-native python3-dev-native python3-difflib-native python3-distutils-native python3-distutils-staticdev-native python3-doctest-native python3-email-native python3-enum-native python3-fcntl-native python3-gdbm-native python3-html-native python3-idle-native python3-image-native python3-importlib-native python3-io-native python3-json-native python3-lang-native python3-logging-native python3-mailbox-native python3-math-native python3-mime-native python3-mmap-native python3-multiprocessing-native python3-netclient-native python3-netserver-native python3-numbers-native python3-pickle-native python3-pkgutil-native python3-pprint-native python3-profile-native python3-pydoc-native python3-re-native python3-readline-native python3-reprlib-native python3-resource-native python3-selectors-native python3-shell-native python3-signal-native python3-smtpd-native python3-sqlite3-native python3-sqlite3-tests-native python3-stringold-native python3-subprocess-native python3-syslog-native python3-terminal-native python3-tests-native python3-textutils-native python3-threading-native python3-tkinter-native python3-typing-native python3-unittest-native python3-unixadmin-native python3-xml-native python3-xmlrpc-native"
8
9
10
diff --git a/meta/recipes-devtools/python/python3-native_3.5.3.bb b/meta/recipes-devtools/python/python3-native_3.5.3.bb
index 8cd9c88a82..3053c4bace 100644
--- a/meta/recipes-devtools/python/python3-native_3.5.3.bb
+++ b/meta/recipes-devtools/python/python3-native_3.5.3.bb
@@ -42,8 +42,6 @@ DEPENDS = "openssl-native bzip2-replacement-native zlib-native readline-native s
42 42
43inherit native 43inherit native
44 44
45require python-native-${PYTHON_MAJMIN}-manifest.inc
46
47# uninative may be used on pre glibc 2.25 systems which don't have getentropy 45# uninative may be used on pre glibc 2.25 systems which don't have getentropy
48EXTRA_OECONF_append = " --bindir=${bindir}/${PN} --without-ensurepip ac_cv_func_getentropy=no" 46EXTRA_OECONF_append = " --bindir=${bindir}/${PN} --without-ensurepip ac_cv_func_getentropy=no"
49 47
@@ -77,8 +75,30 @@ do_install() {
77 sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT 75 sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT
78 done 76 done
79 77
80 # Tests are large and we don't need them in the native sysroot 78 # Add a symlink to the native Python so that scripts can just invoke
81 rm ${D}${libdir}/python${PYTHON_MAJMIN}/test -rf 79 # "nativepython" and get the right one without needing absolute paths
80 # (these often end up too long for the #! parser in the kernel as the
81 # buffer is 128 bytes long).
82 ln -s python3-native/python3 ${D}${bindir}/nativepython3
82} 83}
83 84
84RPROVIDES += "python3-misc-native" 85python(){
86
87 # Read JSON manifest
88 import json
89 pythondir = d.getVar('THISDIR',True)
90 with open(pythondir+'/python3/python3-manifest.json') as manifest_file:
91 python_manifest=json.load(manifest_file)
92
93 rprovides = d.getVar('RPROVIDES').split()
94
95 # Hardcoded since it cant be python3-native-foo, should be python3-foo-native
96 pn = 'python3'
97
98 for key in python_manifest:
99 pypackage = pn + '-' + key + '-native'
100 if pypackage not in rprovides:
101 rprovides.append(pypackage)
102
103 d.setVar('RPROVIDES', ' '.join(rprovides))
104}
diff --git a/meta/recipes-devtools/python/python3/create_manifest3.py b/meta/recipes-devtools/python/python3/create_manifest3.py
new file mode 100644
index 0000000000..ead27e9fcc
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/create_manifest3.py
@@ -0,0 +1,321 @@
1# This script is used as a bitbake task to create a new python manifest
2# $ bitbake python -c create_manifest
3#
4# Our goal is to keep python-core as small as posible and add other python
5# packages only when the user needs them, hence why we split upstream python
6# into several packages.
7#
8# In a very simplistic way what this does is:
9# Launch python and see specifically what is required for it to run at a minimum
10#
11# Go through the python-manifest file and launch a separate task for every single
12# one of the files on each package, this task will check what was required for that
13# specific module to run, these modules will be called dependencies.
14# The output of such task will be a list of the modules or dependencies that were
15# found for that file.
16#
17# Such output will be parsed by this script, we will look for each dependency on the
18# manifest and if we find that another package already includes it, then we will add
19# that package as an RDEPENDS to the package we are currently checking; in case we dont
20# find the current dependency on any other package we will add it to the current package
21# as part of FILES.
22#
23#
24# This way we will create a new manifest from the data structure that was built during
25# this process, ont this new manifest each package will contain specifically only
26# what it needs to run.
27#
28# There are some caveats which we try to deal with, such as repeated files on different
29# packages, packages that include folders, wildcards, and special packages.
30# Its also important to note that this method only works for python files, and shared
31# libraries. Static libraries, header files and binaries need to be dealt with manually.
32#
33# This script differs from its python2 version mostly on how shared libraries are handled
34# The manifest file for python3 has an extra field which contains the cached files for
35# each package.
36# Tha method to handle cached files does not work when a module includes a folder which
37# itself contains the pycache folder, gladly this is almost never the case.
38#
39# Author: Alejandro Enedino Hernandez Samaniego "aehs29" <aehs29@gmail.com>
40
41
42import sys
43import subprocess
44import json
45import os
46
47# Hack to get native python search path (for folders), not fond of it but it works for now
48pivot='recipe-sysroot-native'
49for p in sys.path:
50 if pivot in p:
51 nativelibfolder=p[:p.find(pivot)+len(pivot)]
52
53# Empty dict to hold the whole manifest
54new_manifest = {}
55
56# Check for repeated files, folders and wildcards
57allfiles=[]
58repeated=[]
59wildcards=[]
60
61hasfolders=[]
62allfolders=[]
63
64def isFolder(value):
65 if os.path.isdir(value.replace('${libdir}',nativelibfolder+'/usr/lib')) or os.path.isdir(value.replace('${libdir}',nativelibfolder+'/usr/lib64')) or os.path.isdir(value.replace('${libdir}',nativelibfolder+'/usr/lib32')):
66 return True
67 else:
68 return False
69
70def isCached(item):
71 if '__pycache__' in item:
72 return True
73 else:
74 return False
75
76# Read existing JSON manifest
77with open('python3-manifest.json') as manifest:
78 old_manifest=json.load(manifest)
79
80
81# First pass to get core-package functionality, because we base everything on the fact that core is actually working
82# Not exactly the same so it should not be a function
83print ('Getting dependencies for core package:')
84
85# Special call to check for core package
86output = subprocess.check_output([sys.executable, 'get_module_deps3.py', 'python-core-package']).decode('utf8')
87for item in output.split():
88 # We append it so it doesnt hurt what we currently have:
89 if isCached(item):
90 if item not in old_manifest['core']['cached']:
91 # We use the same data structure since its the one which will be used to check
92 # dependencies for other packages
93 old_manifest['core']['cached'].append(item)
94 else:
95 if item not in old_manifest['core']['files']:
96 # We use the same data structure since its the one which will be used to check
97 # dependencies for other packages
98 old_manifest['core']['files'].append(item)
99
100for value in old_manifest['core']['files']:
101 # Ignore folders, since we don't import those, difficult to handle multilib
102 if isFolder(value):
103 # Pass it directly
104 if isCached(value):
105 if value not in old_manifest['core']['cached']:
106 old_manifest['core']['cached'].append(value)
107 else:
108 if value not in old_manifest['core']['files']:
109 old_manifest['core']['files'].append(value)
110 continue
111 # Ignore binaries, since we don't import those, assume it was added correctly (manually)
112 if '${bindir}' in value:
113 # Pass it directly
114 if value not in old_manifest['core']['files']:
115 old_manifest['core']['files'].append(value)
116 continue
117 # Ignore empty values
118 if value == '':
119 continue
120 if '${includedir}' in value:
121 if value not in old_manifest['core']['files']:
122 old_manifest['core']['files'].append(value)
123 continue
124 # Get module name , shouldnt be affected by libdir/bindir
125 value = os.path.splitext(os.path.basename(os.path.normpath(value)))[0]
126
127
128 # Launch separate task for each module for deterministic behavior
129 # Each module will only import what is necessary for it to work in specific
130 print ('Getting dependencies for module: %s' % value)
131 output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % value]).decode('utf8')
132 print (output)
133 for item in output.split():
134 # We append it so it doesnt hurt what we currently have:
135 if isCached(item):
136 if item not in old_manifest['core']['cached']:
137 # We use the same data structure since its the one which will be used to check
138 # dependencies for other packages
139 old_manifest['core']['cached'].append(item)
140 else:
141 if item not in old_manifest['core']['files']:
142 # We use the same data structure since its the one which will be used to check
143 # dependencies for other packages
144 old_manifest['core']['files'].append(item)
145
146
147# We check which packages include folders
148for key in old_manifest:
149 for value in old_manifest[key]['files']:
150 # Ignore folders, since we don't import those, difficult to handle multilib
151 if isFolder(value):
152 print ('%s is a folder' % value)
153 if key not in hasfolders:
154 hasfolders.append(key)
155 if value not in allfolders:
156 allfolders.append(value)
157
158for key in old_manifest:
159 # Use an empty dict as data structure to hold data for each package and fill it up
160 new_manifest[key]={}
161 new_manifest[key]['files']=[]
162
163 new_manifest[key]['rdepends']=[]
164 # All packages should depend on core
165 if key != 'core':
166 new_manifest[key]['rdepends'].append('core')
167 new_manifest[key]['cached']=[]
168 else:
169 new_manifest[key]['cached']=old_manifest[key]['cached']
170 new_manifest[key]['summary']=old_manifest[key]['summary']
171
172 # Handle special cases, we assume that when they were manually added
173 # to the manifest we knew what we were doing.
174 print ('Handling package %s' % key)
175 special_packages=['misc', 'modules', 'dev']
176 if key in special_packages or 'staticdev' in key:
177 print('Passing %s package directly' % key)
178 new_manifest[key]=old_manifest[key]
179 continue
180
181 for value in old_manifest[key]['files']:
182 # We already handled core on the first pass
183 if key == 'core':
184 new_manifest[key]['files'].append(value)
185 continue
186 # Ignore folders, since we don't import those, difficult to handle multilib
187 if isFolder(value):
188 # Pass folders directly
189 new_manifest[key]['files'].append(value)
190 # Ignore binaries, since we don't import those
191 if '${bindir}' in value:
192 # Pass it directly to the new manifest data structure
193 if value not in new_manifest[key]['files']:
194 new_manifest[key]['files'].append(value)
195 continue
196 # Ignore empty values
197 if value == '':
198 continue
199 if '${includedir}' in value:
200 if value not in new_manifest[key]['files']:
201 new_manifest[key]['files'].append(value)
202 continue
203 # Get module name , shouldnt be affected by libdir/bindir
204 value = os.path.splitext(os.path.basename(os.path.normpath(value)))[0]
205
206 # Launch separate task for each module for deterministic behavior
207 # Each module will only import what is necessary for it to work in specific
208 print ('Getting dependencies for module: %s' % value)
209 output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % value]).decode('utf8')
210 # We can print dependencies for debugging purposes
211 print (output)
212 # Output will have all dependencies
213 for item in output.split():
214
215 # Warning: This first part is ugly
216 # One of the dependencies that was found, could be inside of one of the folders included by another package
217 # We need to check if this happens so we can add the package containing the folder as an rdependency
218 # e.g. Folder encodings contained in codecs
219 # This would be solved if no packages included any folders
220
221 # This can be done in two ways:
222 # 1 - We assume that if we take out the filename from the path we would get
223 # the folder string, then we would check if folder string is in the list of folders
224 # This would not work if a package contains a folder which contains another folder
225 # e.g. path/folder1/folder2/filename folder_string= path/folder1/folder2
226 # folder_string would not match any value contained in the list of folders
227 #
228 # 2 - We do it the other way around, checking if the folder is contained in the path
229 # e.g. path/folder1/folder2/filename folder_string= path/folder1/folder2
230 # is folder_string inside path/folder1/folder2/filename?,
231 # Yes, it works, but we waste a couple of milliseconds.
232
233 inFolders=False
234 for folder in allfolders:
235 if folder in item:
236 inFolders = True # Did we find a folder?
237 folderFound = False # Second flag to break inner for
238 # Loop only through packages which contain folders
239 for keyfolder in hasfolders:
240 if (folderFound == False):
241 #print('Checking folder %s on package %s' % (item,keyfolder))
242 for file_folder in old_manifest[keyfolder]['files'] or file_folder in old_manifest[keyfolder]['cached']:
243 if file_folder==folder:
244 print ('%s found in %s' % (folder, keyfolder))
245 folderFound = True
246 if keyfolder not in new_manifest[key]['rdepends'] and keyfolder != key:
247 new_manifest[key]['rdepends'].append(keyfolder)
248
249 else:
250 break
251
252 # A folder was found so we're done with this item, we can go on
253 if inFolders:
254 continue
255
256 # We might already have it on the dictionary since it could depend on a (previously checked) module
257 if item not in new_manifest[key]['files'] and item not in new_manifest[key]['cached']:
258 # Handle core as a special package, we already did it so we pass it to NEW data structure directly
259 if key=='core':
260 print('Adding %s to %s FILES' % (item, key))
261 if item.endswith('*'):
262 wildcards.append(item)
263 if isCached(item):
264 new_manifest[key]['cached'].append(item)
265 else:
266 new_manifest[key]['files'].append(item)
267
268 # Check for repeated files
269 if item not in allfiles:
270 allfiles.append(item)
271 else:
272 repeated.append(item)
273
274 else:
275
276 # Check if this dependency is already contained on another package, so we add it
277 # as an RDEPENDS, or if its not, it means it should be contained on the current
278 # package, so we should add it to FILES
279 for newkey in old_manifest:
280 # Debug
281 #print('Checking %s ' % item + ' in %s' % newkey)
282 if item in old_manifest[newkey]['files'] or item in old_manifest[newkey]['cached']:
283 # Since were nesting, we need to check its not the same key
284 if(newkey!=key):
285 if newkey not in new_manifest[key]['rdepends']:
286 # Add it to the new manifest data struct
287 # Debug
288 print('Adding %s to %s RDEPENDS, because it contains %s' % (newkey, key, item))
289 new_manifest[key]['rdepends'].append(newkey)
290 break
291 else:
292 # Debug
293 print('Adding %s to %s FILES' % (item, key))
294 # Since it wasnt found on another package, its not an RDEP, so add it to FILES for this package
295 if isCached(item):
296 new_manifest[key]['cached'].append(item)
297 else:
298 new_manifest[key]['files'].append(item)
299 if item.endswith('*'):
300 wildcards.append(item)
301 if item not in allfiles:
302 allfiles.append(item)
303 else:
304 repeated.append(item)
305
306print ('The following files are repeated (contained in more than one package), please check which package should get it:')
307print (repeated)
308print('The following files contain wildcards, please check they are necessary')
309print(wildcards)
310print('The following files contain folders, please check they are necessary')
311print(hasfolders)
312
313# Sort it just so it looks nicer
314for key in new_manifest:
315 new_manifest[key]['files'].sort()
316 new_manifest[key]['cached'].sort()
317 new_manifest[key]['rdepends'].sort()
318
319# Create the manifest from the data structure that was built
320with open('python3-manifest.json.new','w') as outfile:
321 json.dump(new_manifest,outfile,sort_keys=True, indent=4)
diff --git a/meta/recipes-devtools/python/python3/get_module_deps3.py b/meta/recipes-devtools/python/python3/get_module_deps3.py
new file mode 100644
index 0000000000..fd12baad84
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/get_module_deps3.py
@@ -0,0 +1,146 @@
1# This script is launched on separate task for each python module
2# It checks for dependencies for that specific module and prints
3# them out, the output of this execution will have all dependencies
4# for a specific module, which will be parsed an dealt on create_manifest.py
5#
6# Author: Alejandro Enedino Hernandez Samaniego "aehs29" <aehs29@gmail.com>
7
8# We can get a log per module, for all the dependencies that were found, but its messy.
9debug=False
10
11import sys
12
13# We can get a list of the modules which are currently required to run python
14# so we run python-core and get its modules, we then import what we need
15# and check what modules are currently running, if we substract them from the
16# modules we had initially, we get the dependencies for the module we imported.
17
18# We use importlib to achieve this, so we also need to know what modules importlib needs
19import importlib
20
21core_deps=set(sys.modules)
22
23def fix_path(dep_path):
24 import os
25 # We DONT want the path on our HOST system
26 pivot='recipe-sysroot-native'
27 dep_path=dep_path[dep_path.find(pivot)+len(pivot):]
28
29 if '/usr/bin' in dep_path:
30 dep_path = dep_path.replace('/usr/bin''${bindir}')
31
32 # Handle multilib, is there a better way?
33 if '/usr/lib32' in dep_path:
34 dep_path = dep_path.replace('/usr/lib32','${libdir}')
35 if '/usr/lib64' in dep_path:
36 dep_path = dep_path.replace('/usr/lib64','${libdir}')
37 if '/usr/lib' in dep_path:
38 dep_path = dep_path.replace('/usr/lib','${libdir}')
39 if '/usr/include' in dep_path:
40 dep_path = dep_path.replace('/usr/include','${includedir}')
41 if '__init__.' in dep_path:
42 dep_path = os.path.split(dep_path)[0]
43 return dep_path
44
45
46# Module to import was passed as an argument
47current_module = str(sys.argv[1]).rstrip()
48if(debug==True):
49 log = open('log_%s' % current_module,'w')
50 log.write('Module %s generated the following dependencies:\n' % current_module)
51try:
52 importlib.import_module('%s' % current_module)
53except ImportError as e:
54 if (debug==True):
55 log.write('Module was not found')
56 pass
57
58
59# Get current module dependencies, dif will contain a list of specific deps for this module
60module_deps=set(sys.modules)
61
62# We handle the core package (1st pass on create_manifest.py) as a special case
63if current_module == 'python-core-package':
64 dif = core_deps
65else:
66 # We know this is not the core package, so there must be a difference.
67 dif = module_deps-core_deps
68
69
70# Check where each dependency came from
71for item in dif:
72 dep_path=''
73 try:
74 if (debug==True):
75 log.write('Calling: sys.modules[' + '%s' % item + '].__file__\n')
76 dep_path = sys.modules['%s' % item].__file__
77 except AttributeError as e:
78 # Deals with thread (builtin module) not having __file__ attribute
79 if debug==True:
80 log.write(item + ' ')
81 log.write(str(e))
82 log.write('\n')
83 pass
84 except NameError as e:
85 # Deals with NameError: name 'dep_path' is not defined
86 # because module is not found (wasn't compiled?), e.g. bddsm
87 if (debug==True):
88 log.write(item+' ')
89 log.write(str(e))
90 pass
91
92 # Site-customize is a special case since we (OpenEmbedded) put it there manually
93 if 'sitecustomize' in dep_path:
94 dep_path = '${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py'
95 # Prints out result, which is what will be used by create_manifest
96 print (dep_path)
97 continue
98
99 dep_path = fix_path(dep_path)
100
101 import sysconfig
102 soabi=sysconfig.get_config_var('SOABI')
103 # Check if its a shared library and deconstruct it
104 if soabi in dep_path:
105 if (debug==True):
106 log.write('Shared library found in %s' % dep_path)
107 dep_path = dep_path.replace(soabi,'*')
108 print (dep_path)
109 continue
110
111 if (debug==True):
112 log.write(dep_path+'\n')
113 # Prints out result, which is what will be used by create_manifest
114 print (dep_path)
115
116
117 import imp
118 cpython_tag = imp.get_tag()
119 cached=''
120 # Theres no naive way to find *.pyc files on python3
121 try:
122 if (debug==True):
123 log.write('Calling: sys.modules[' + '%s' % item + '].__cached__\n')
124 cached = sys.modules['%s' % item].__cached__
125 except AttributeError as e:
126 # Deals with thread (builtin module) not having __cached__ attribute
127 if debug==True:
128 log.write(item + ' ')
129 log.write(str(e))
130 log.write('\n')
131 pass
132 except NameError as e:
133 # Deals with NameError: name 'cached' is not defined
134 if (debug==True):
135 log.write(item+' ')
136 log.write(str(e))
137 pass
138 if cached is not None:
139 if (debug==True):
140 log.write(cached)
141 cached = fix_path(cached)
142 cached = cached.replace(cpython_tag,'*')
143 print (cached)
144
145if debug==True:
146 log.close()
diff --git a/meta/recipes-devtools/python/python3/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json
new file mode 100644
index 0000000000..2d4c2ceb9f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/python3-manifest.json
@@ -0,0 +1,1096 @@
1{
2 "2to3": {
3 "cached": [],
4 "files": [
5 "${bindir}/2to3-*",
6 "${libdir}/python3.5/lib2to3"
7 ],
8 "rdepends": [
9 "core"
10 ],
11 "summary": "Python automated Python 2 to 3 code translator"
12 },
13 "asyncio": {
14 "cached": [],
15 "files": [
16 "${libdir}/python3.5/asyncio",
17 "${libdir}/python3.5/concurrent",
18 "${libdir}/python3.5/concurrent/futures"
19 ],
20 "rdepends": [
21 "compression",
22 "core",
23 "crypt",
24 "io",
25 "logging",
26 "math",
27 "multiprocessing",
28 "netclient",
29 "pickle",
30 "shell",
31 "stringold",
32 "threading",
33 "unixadmin"
34 ],
35 "summary": "Python Asynchronous I/"
36 },
37 "audio": {
38 "cached": [
39 "${libdir}/python3.5/__pycache__/chunk.*.pyc",
40 "${libdir}/python3.5/__pycache__/sndhdr.*.pyc",
41 "${libdir}/python3.5/__pycache__/sunau.*.pyc",
42 "${libdir}/python3.5/__pycache__/wave.*.pyc"
43 ],
44 "files": [
45 "${libdir}/python3.5/chunk.py",
46 "${libdir}/python3.5/lib-dynload/audioop.*.so",
47 "${libdir}/python3.5/lib-dynload/ossaudiodev.*.so",
48 "${libdir}/python3.5/sndhdr.py",
49 "${libdir}/python3.5/sunau.py",
50 "${libdir}/python3.5/wave.py"
51 ],
52 "rdepends": [
53 "core"
54 ],
55 "summary": "Python Audio Handling"
56 },
57 "codecs": {
58 "cached": [
59 "${libdir}/python3.5/__pycache__/stringprep.*.pyc",
60 "${libdir}/python3.5/__pycache__/xdrlib.*.pyc"
61 ],
62 "files": [
63 "${libdir}/python3.5/lib-dynload/_multibytecodec.*.so",
64 "${libdir}/python3.5/lib-dynload/unicodedata.*.so",
65 "${libdir}/python3.5/stringprep.py",
66 "${libdir}/python3.5/xdrlib.py"
67 ],
68 "rdepends": [
69 "core"
70 ],
71 "summary": "Python codec"
72 },
73 "compile": {
74 "cached": [
75 "${libdir}/python3.5/__pycache__/compileall.*.pyc",
76 "${libdir}/python3.5/__pycache__/py_compile.*.pyc"
77 ],
78 "files": [
79 "${libdir}/python3.5/compileall.py",
80 "${libdir}/python3.5/py_compile.py"
81 ],
82 "rdepends": [
83 "asyncio",
84 "compression",
85 "core",
86 "crypt",
87 "io",
88 "logging",
89 "math",
90 "multiprocessing",
91 "pickle",
92 "shell",
93 "stringold",
94 "threading",
95 "unixadmin"
96 ],
97 "summary": "Python bytecode compilation support"
98 },
99 "compression": {
100 "cached": [
101 "${libdir}/python3.5/__pycache__/_compression.*.pyc",
102 "${libdir}/python3.5/__pycache__/bz2.*.pyc",
103 "${libdir}/python3.5/__pycache__/gzip.*.pyc",
104 "${libdir}/python3.5/__pycache__/lzma.*.pyc",
105 "${libdir}/python3.5/__pycache__/tarfile.*.pyc",
106 "${libdir}/python3.5/__pycache__/zipfile.*.pyc"
107 ],
108 "files": [
109 "${libdir}/python3.5/_compression.py",
110 "${libdir}/python3.5/bz2.py",
111 "${libdir}/python3.5/gzip.py",
112 "${libdir}/python3.5/lib-dynload/_bz2.*.so",
113 "${libdir}/python3.5/lib-dynload/_lzma.*.so",
114 "${libdir}/python3.5/lib-dynload/zlib.*.so",
115 "${libdir}/python3.5/lzma.py",
116 "${libdir}/python3.5/tarfile.py",
117 "${libdir}/python3.5/zipfile.py"
118 ],
119 "rdepends": [
120 "core",
121 "shell",
122 "unixadmin"
123 ],
124 "summary": "Python high-level compression support"
125 },
126 "core": {
127 "cached": [
128 "${libdir}/python3.5/__pycache__/__future__.*.pyc",
129 "${libdir}/python3.5/__pycache__/_bootlocale.*.pyc",
130 "${libdir}/python3.5/__pycache__/_collections_abc.*.pyc",
131 "${libdir}/python3.5/__pycache__/_sitebuiltins.*.pyc",
132 "${libdir}/python3.5/__pycache__/_sysconfigdata.*.pyc",
133 "${libdir}/python3.5/__pycache__/_weakrefset.*.pyc",
134 "${libdir}/python3.5/__pycache__/abc.*.pyc",
135 "${libdir}/python3.5/__pycache__/argparse.*.pyc",
136 "${libdir}/python3.5/__pycache__/ast.*.pyc",
137 "${libdir}/python3.5/__pycache__/bisect.*.pyc",
138 "${libdir}/python3.5/__pycache__/code.*.pyc",
139 "${libdir}/python3.5/__pycache__/codecs.*.pyc",
140 "${libdir}/python3.5/__pycache__/codeop.*.pyc",
141 "${libdir}/python3.5/__pycache__/configparser.*.pyc",
142 "${libdir}/python3.5/__pycache__/contextlib.*.pyc",
143 "${libdir}/python3.5/__pycache__/copy.*.pyc",
144 "${libdir}/python3.5/__pycache__/copyreg.*.pyc",
145 "${libdir}/python3.5/__pycache__/csv.*.pyc",
146 "${libdir}/python3.5/__pycache__/dis.*.pyc",
147 "${libdir}/python3.5/__pycache__/enum.*.pyc",
148 "${libdir}/python3.5/__pycache__/functools.*.pyc",
149 "${libdir}/python3.5/__pycache__/genericpath.*.pyc",
150 "${libdir}/python3.5/__pycache__/getopt.*.pyc",
151 "${libdir}/python3.5/__pycache__/gettext.*.pyc",
152 "${libdir}/python3.5/__pycache__/heapq.*.pyc",
153 "${libdir}/python3.5/__pycache__/imp.*.pyc",
154 "${libdir}/python3.5/__pycache__/inspect.*.pyc",
155 "${libdir}/python3.5/__pycache__/io.*.pyc",
156 "${libdir}/python3.5/__pycache__/keyword.*.pyc",
157 "${libdir}/python3.5/__pycache__/linecache.*.pyc",
158 "${libdir}/python3.5/__pycache__/locale.*.pyc",
159 "${libdir}/python3.5/__pycache__/opcode.*.pyc",
160 "${libdir}/python3.5/__pycache__/operator.*.pyc",
161 "${libdir}/python3.5/__pycache__/optparse.*.pyc",
162 "${libdir}/python3.5/__pycache__/os.*.pyc",
163 "${libdir}/python3.5/__pycache__/platform.*.pyc",
164 "${libdir}/python3.5/__pycache__/posixpath.*.pyc",
165 "${libdir}/python3.5/__pycache__/re.*.pyc",
166 "${libdir}/python3.5/__pycache__/reprlib.*.pyc",
167 "${libdir}/python3.5/__pycache__/rlcompleter.*.pyc",
168 "${libdir}/python3.5/__pycache__/selectors.*.pyc",
169 "${libdir}/python3.5/__pycache__/signal.*.pyc",
170 "${libdir}/python3.5/__pycache__/site.*.pyc",
171 "${libdir}/python3.5/__pycache__/sre_compile.*.pyc",
172 "${libdir}/python3.5/__pycache__/sre_constants.*.pyc",
173 "${libdir}/python3.5/__pycache__/sre_parse.*.pyc",
174 "${libdir}/python3.5/__pycache__/stat.*.pyc",
175 "${libdir}/python3.5/__pycache__/struct.*.pyc",
176 "${libdir}/python3.5/__pycache__/subprocess.*.pyc",
177 "${libdir}/python3.5/__pycache__/symbol.*.pyc",
178 "${libdir}/python3.5/__pycache__/sysconfig.*.pyc",
179 "${libdir}/python3.5/__pycache__/textwrap.*.pyc",
180 "${libdir}/python3.5/__pycache__/threading.*.pyc",
181 "${libdir}/python3.5/__pycache__/token.*.pyc",
182 "${libdir}/python3.5/__pycache__/tokenize.*.pyc",
183 "${libdir}/python3.5/__pycache__/traceback.*.pyc",
184 "${libdir}/python3.5/__pycache__/types.*.pyc",
185 "${libdir}/python3.5/__pycache__/warnings.*.pyc",
186 "${libdir}/python3.5/__pycache__/weakref.*.pyc",
187 "${libdir}/python3.5/collections/__pycache__",
188 "${libdir}/python3.5/collections/__pycache__/abc.*.pyc",
189 "${libdir}/python3.5/encodings/__pycache__",
190 "${libdir}/python3.5/encodings/__pycache__/aliases.*.pyc",
191 "${libdir}/python3.5/encodings/__pycache__/latin_1.*.pyc",
192 "${libdir}/python3.5/encodings/__pycache__/utf_8.*.pyc",
193 "${libdir}/python3.5/importlib/__pycache__",
194 "${libdir}/python3.5/importlib/__pycache__/abc.*.pyc",
195 "${libdir}/python3.5/importlib/__pycache__/machinery.*.pyc",
196 "${libdir}/python3.5/importlib/__pycache__/util.*.pyc"
197 ],
198 "files": [
199 "${bindir}/python*[!-config]",
200 "${includedir}/python${PYTHON_BINABI}/pyconfig*.h",
201 "${libdir}/python${PYTHON_MAJMIN}/_collections_abc.py",
202 "${libdir}/python${PYTHON_MAJMIN}/_sitebuiltins.py",
203 "${libdir}/python${PYTHON_MAJMIN}/collections",
204 "${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py",
205 "${libdir}/python3.5/UserDict.py",
206 "${libdir}/python3.5/UserList.py",
207 "${libdir}/python3.5/UserString.py",
208 "${libdir}/python3.5/__future__.py",
209 "${libdir}/python3.5/_abcoll.py",
210 "${libdir}/python3.5/_bootlocale.py",
211 "${libdir}/python3.5/_collections_abc.py",
212 "${libdir}/python3.5/_sitebuiltins.py",
213 "${libdir}/python3.5/_sysconfigdata.py",
214 "${libdir}/python3.5/_weakrefset.py",
215 "${libdir}/python3.5/abc.py",
216 "${libdir}/python3.5/argparse.py",
217 "${libdir}/python3.5/ast.py",
218 "${libdir}/python3.5/bisect.py",
219 "${libdir}/python3.5/code.py",
220 "${libdir}/python3.5/codecs.py",
221 "${libdir}/python3.5/codeop.py",
222 "${libdir}/python3.5/collections",
223 "${libdir}/python3.5/collections/abc.py",
224 "${libdir}/python3.5/configparser.py",
225 "${libdir}/python3.5/contextlib.py",
226 "${libdir}/python3.5/copy.py",
227 "${libdir}/python3.5/copyreg.py",
228 "${libdir}/python3.5/csv.py",
229 "${libdir}/python3.5/dis.py",
230 "${libdir}/python3.5/encodings",
231 "${libdir}/python3.5/encodings/aliases.py",
232 "${libdir}/python3.5/encodings/latin_1.py",
233 "${libdir}/python3.5/encodings/utf_8.py",
234 "${libdir}/python3.5/enum.py",
235 "${libdir}/python3.5/functools.py",
236 "${libdir}/python3.5/genericpath.py",
237 "${libdir}/python3.5/getopt.py",
238 "${libdir}/python3.5/gettext.py",
239 "${libdir}/python3.5/heapq.py",
240 "${libdir}/python3.5/imp.py",
241 "${libdir}/python3.5/importlib",
242 "${libdir}/python3.5/importlib/_bootstrap.py",
243 "${libdir}/python3.5/importlib/_bootstrap_external.py",
244 "${libdir}/python3.5/importlib/abc.py",
245 "${libdir}/python3.5/importlib/machinery.py",
246 "${libdir}/python3.5/importlib/util.py",
247 "${libdir}/python3.5/inspect.py",
248 "${libdir}/python3.5/io.py",
249 "${libdir}/python3.5/keyword.py",
250 "${libdir}/python3.5/lib-dynload/__pycache__/_struct.*.so",
251 "${libdir}/python3.5/lib-dynload/__pycache__/binascii.*.so",
252 "${libdir}/python3.5/lib-dynload/__pycache__/time.*.so",
253 "${libdir}/python3.5/lib-dynload/__pycache__/xreadlines.*.so",
254 "${libdir}/python3.5/lib-dynload/_bisect.*.so",
255 "${libdir}/python3.5/lib-dynload/_csv.*.so",
256 "${libdir}/python3.5/lib-dynload/_heapq.*.so",
257 "${libdir}/python3.5/lib-dynload/_opcode.*.so",
258 "${libdir}/python3.5/lib-dynload/_posixsubprocess.*.so",
259 "${libdir}/python3.5/lib-dynload/_struct.*.so",
260 "${libdir}/python3.5/lib-dynload/array.*.so",
261 "${libdir}/python3.5/lib-dynload/binascii.*.so",
262 "${libdir}/python3.5/lib-dynload/math.*.so",
263 "${libdir}/python3.5/lib-dynload/parser.*.so",
264 "${libdir}/python3.5/lib-dynload/readline.*.so",
265 "${libdir}/python3.5/lib-dynload/select.*.so",
266 "${libdir}/python3.5/lib-dynload/time.*.so",
267 "${libdir}/python3.5/lib-dynload/xreadlines.*.so",
268 "${libdir}/python3.5/linecache.py",
269 "${libdir}/python3.5/locale.py",
270 "${libdir}/python3.5/new.py",
271 "${libdir}/python3.5/opcode.py",
272 "${libdir}/python3.5/operator.py",
273 "${libdir}/python3.5/optparse.py",
274 "${libdir}/python3.5/os.py",
275 "${libdir}/python3.5/platform.py",
276 "${libdir}/python3.5/posixpath.py",
277 "${libdir}/python3.5/re.py",
278 "${libdir}/python3.5/reprlib.py",
279 "${libdir}/python3.5/rlcompleter.py",
280 "${libdir}/python3.5/selectors.py",
281 "${libdir}/python3.5/signal.py",
282 "${libdir}/python3.5/site.py",
283 "${libdir}/python3.5/sre_compile.py",
284 "${libdir}/python3.5/sre_constants.py",
285 "${libdir}/python3.5/sre_parse.py",
286 "${libdir}/python3.5/stat.py",
287 "${libdir}/python3.5/struct.py",
288 "${libdir}/python3.5/subprocess.py",
289 "${libdir}/python3.5/symbol.py",
290 "${libdir}/python3.5/sysconfig.py",
291 "${libdir}/python3.5/textwrap.py",
292 "${libdir}/python3.5/threading.py",
293 "${libdir}/python3.5/token.py",
294 "${libdir}/python3.5/tokenize.py",
295 "${libdir}/python3.5/traceback.py",
296 "${libdir}/python3.5/types.py",
297 "${libdir}/python3.5/warnings.py",
298 "${libdir}/python3.5/weakref.py"
299 ],
300 "rdepends": [],
301 "summary": "Python interpreter and core modules"
302 },
303 "crypt": {
304 "cached": [
305 "${libdir}/python3.5/__pycache__/crypt.*.pyc",
306 "${libdir}/python3.5/__pycache__/hashlib.*.pyc"
307 ],
308 "files": [
309 "${libdir}/python3.5/crypt.py",
310 "${libdir}/python3.5/hashlib.py",
311 "${libdir}/python3.5/lib-dynload/_crypt.*.so",
312 "${libdir}/python3.5/lib-dynload/_hashlib.*.so",
313 "${libdir}/python3.5/lib-dynload/_sha256.*.so",
314 "${libdir}/python3.5/lib-dynload/_sha512.*.so"
315 ],
316 "rdepends": [
317 "core",
318 "math",
319 "stringold"
320 ],
321 "summary": "Python basic cryptographic and hashing support"
322 },
323 "ctypes": {
324 "cached": [],
325 "files": [
326 "${libdir}/python3.5/ctypes",
327 "${libdir}/python3.5/lib-dynload/_ctypes.*.so",
328 "${libdir}/python3.5/lib-dynload/_ctypes_test.*.so"
329 ],
330 "rdepends": [
331 "core"
332 ],
333 "summary": "Python C types support"
334 },
335 "curses": {
336 "cached": [],
337 "files": [
338 "${libdir}/python3.5/curses",
339 "${libdir}/python3.5/lib-dynload/_curses.*.so",
340 "${libdir}/python3.5/lib-dynload/_curses_panel.*.so"
341 ],
342 "rdepends": [
343 "core"
344 ],
345 "summary": "Python curses support"
346 },
347 "datetime": {
348 "cached": [
349 "${libdir}/python3.5/__pycache__/_strptime.*.pyc",
350 "${libdir}/python3.5/__pycache__/calendar.*.pyc",
351 "${libdir}/python3.5/__pycache__/datetime.*.pyc"
352 ],
353 "files": [
354 "${libdir}/python3.5/_strptime.py",
355 "${libdir}/python3.5/calendar.py",
356 "${libdir}/python3.5/datetime.py",
357 "${libdir}/python3.5/lib-dynload/_datetime.*.so"
358 ],
359 "rdepends": [
360 "core"
361 ],
362 "summary": "Python calendar and time support"
363 },
364 "db": {
365 "cached": [],
366 "files": [
367 "${libdir}/python3.5/dbm"
368 ],
369 "rdepends": [
370 "core"
371 ],
372 "summary": "Python file-based database support"
373 },
374 "debugger": {
375 "cached": [
376 "${libdir}/python3.5/__pycache__/bdb.*.pyc",
377 "${libdir}/python3.5/__pycache__/pdb.*.pyc"
378 ],
379 "files": [
380 "${libdir}/python3.5/bdb.py",
381 "${libdir}/python3.5/pdb.py"
382 ],
383 "rdepends": [
384 "core",
385 "pprint",
386 "shell",
387 "stringold"
388 ],
389 "summary": "Python debugger"
390 },
391 "dev": {
392 "cached": [],
393 "files": [
394 "${base_libdir}/*.a",
395 "${base_libdir}/*.o",
396 "${bindir}/python*-config",
397 "${datadir}/aclocal",
398 "${datadir}/pkgconfig",
399 "${includedir}",
400 "${libdir}/*.a",
401 "${libdir}/*.la",
402 "${libdir}/*.o",
403 "${libdir}/lib*${SOLIBSDEV}",
404 "${libdir}/pkgconfig",
405 "${libdir}/python3.5/config*/Makefile",
406 "${libdir}/python3.5/config*/Makefile/__pycache__"
407 ],
408 "rdepends": [
409 "core"
410 ],
411 "summary": "Python development package"
412 },
413 "difflib": {
414 "cached": [
415 "${libdir}/python3.5/__pycache__/difflib.*.pyc"
416 ],
417 "files": [
418 "${libdir}/python3.5/difflib.py"
419 ],
420 "rdepends": [
421 "core"
422 ],
423 "summary": "Python helpers for computing deltas between objects"
424 },
425 "distutils": {
426 "cached": [],
427 "files": [
428 "${libdir}/python3.5/distutils"
429 ],
430 "rdepends": [
431 "core"
432 ],
433 "summary": "Python Distribution Utilities"
434 },
435 "distutils-staticdev": {
436 "cached": [
437 "${libdir}/python3.5/config/__pycache__/lib*.a"
438 ],
439 "files": [
440 "${libdir}/python3.5/config/lib*.a"
441 ],
442 "rdepends": [
443 "distutils"
444 ],
445 "summary": "Python distribution utilities (static libraries)"
446 },
447 "doctest": {
448 "cached": [
449 "${libdir}/python3.5/__pycache__/doctest.*.pyc"
450 ],
451 "files": [
452 "${libdir}/python3.5/doctest.py"
453 ],
454 "rdepends": [
455 "core",
456 "debugger",
457 "difflib",
458 "logging",
459 "pprint",
460 "shell",
461 "stringold",
462 "unittest"
463 ],
464 "summary": "Python framework for running examples in docstrings"
465 },
466 "email": {
467 "cached": [
468 "${libdir}/python3.5/__pycache__/imaplib.*.pyc"
469 ],
470 "files": [
471 "${libdir}/python3.5/email",
472 "${libdir}/python3.5/imaplib.py"
473 ],
474 "rdepends": [
475 "core",
476 "crypt",
477 "datetime",
478 "io",
479 "math",
480 "netclient"
481 ],
482 "summary": "Python email support"
483 },
484 "fcntl": {
485 "cached": [],
486 "files": [
487 "${libdir}/python3.5/lib-dynload/fcntl.*.so"
488 ],
489 "rdepends": [
490 "core"
491 ],
492 "summary": "Python's fcntl interface"
493 },
494 "html": {
495 "cached": [
496 "${libdir}/python3.5/__pycache__/formatter.*.pyc"
497 ],
498 "files": [
499 "${libdir}/python3.5/formatter.py",
500 "${libdir}/python3.5/html"
501 ],
502 "rdepends": [
503 "core"
504 ],
505 "summary": "Python HTML processing support"
506 },
507 "idle": {
508 "cached": [],
509 "files": [
510 "${bindir}/idle*",
511 "${libdir}/python3.5/idlelib"
512 ],
513 "rdepends": [
514 "core"
515 ],
516 "summary": "Python Integrated Development Environment"
517 },
518 "image": {
519 "cached": [
520 "${libdir}/python3.5/__pycache__/colorsys.*.pyc",
521 "${libdir}/python3.5/__pycache__/imghdr.*.pyc"
522 ],
523 "files": [
524 "${libdir}/python3.5/colorsys.py",
525 "${libdir}/python3.5/imghdr.py"
526 ],
527 "rdepends": [
528 "core"
529 ],
530 "summary": "Python graphical image handling"
531 },
532 "io": {
533 "cached": [
534 "${libdir}/python3.5/__pycache__/_pyio.*.pyc",
535 "${libdir}/python3.5/__pycache__/ipaddress.*.pyc",
536 "${libdir}/python3.5/__pycache__/pipes.*.pyc",
537 "${libdir}/python3.5/__pycache__/socket.*.pyc",
538 "${libdir}/python3.5/__pycache__/ssl.*.pyc",
539 "${libdir}/python3.5/__pycache__/tempfile.*.pyc"
540 ],
541 "files": [
542 "${libdir}/python3.5/_pyio.py",
543 "${libdir}/python3.5/ipaddress.py",
544 "${libdir}/python3.5/lib-dynload/_socket.*.so",
545 "${libdir}/python3.5/lib-dynload/_ssl.*.so",
546 "${libdir}/python3.5/lib-dynload/termios.*.so",
547 "${libdir}/python3.5/pipes.py",
548 "${libdir}/python3.5/socket.py",
549 "${libdir}/python3.5/ssl.py",
550 "${libdir}/python3.5/tempfile.py"
551 ],
552 "rdepends": [
553 "compression",
554 "core",
555 "crypt",
556 "math",
557 "netclient",
558 "shell",
559 "unixadmin"
560 ],
561 "summary": "Python low-level I/O"
562 },
563 "json": {
564 "cached": [],
565 "files": [
566 "${libdir}/python3.5/json",
567 "${libdir}/python3.5/lib-dynload/_json.*.so"
568 ],
569 "rdepends": [
570 "core"
571 ],
572 "summary": "Python JSON support"
573 },
574 "logging": {
575 "cached": [],
576 "files": [
577 "${libdir}/python3.5/logging"
578 ],
579 "rdepends": [
580 "core",
581 "stringold"
582 ],
583 "summary": "Python logging support"
584 },
585 "mailbox": {
586 "cached": [
587 "${libdir}/python3.5/__pycache__/mailbox.*.pyc"
588 ],
589 "files": [
590 "${libdir}/python3.5/mailbox.py"
591 ],
592 "rdepends": [
593 "core",
594 "crypt",
595 "datetime",
596 "email",
597 "fcntl",
598 "io",
599 "math",
600 "mime",
601 "netclient",
602 "stringold"
603 ],
604 "summary": "Python mailbox format support"
605 },
606 "math": {
607 "cached": [
608 "${libdir}/python3.5/__pycache__/random.*.pyc"
609 ],
610 "files": [
611 "${libdir}/python3.5/lib-dynload/_random.*.so",
612 "${libdir}/python3.5/lib-dynload/cmath.*.so",
613 "${libdir}/python3.5/random.py"
614 ],
615 "rdepends": [
616 "core",
617 "crypt"
618 ],
619 "summary": "Python math support"
620 },
621 "mime": {
622 "cached": [
623 "${libdir}/python3.5/__pycache__/quopri.*.pyc",
624 "${libdir}/python3.5/__pycache__/uu.*.pyc"
625 ],
626 "files": [
627 "${libdir}/python3.5/quopri.py",
628 "${libdir}/python3.5/uu.py"
629 ],
630 "rdepends": [
631 "core"
632 ],
633 "summary": "Python MIME handling APIs"
634 },
635 "mmap": {
636 "cached": [],
637 "files": [
638 "${libdir}/python3.5/lib-dynload/mmap.*.so"
639 ],
640 "rdepends": [
641 "core"
642 ],
643 "summary": "Python memory-mapped file support"
644 },
645 "modules": {
646 "cached": [],
647 "files": [],
648 "rdepends": [
649 "2to3",
650 "asyncio",
651 "audio",
652 "codecs",
653 "compile",
654 "compression",
655 "core",
656 "crypt",
657 "ctypes",
658 "curses",
659 "datetime",
660 "db",
661 "debugger",
662 "difflib",
663 "distutils",
664 "doctest",
665 "email",
666 "fcntl",
667 "html",
668 "idle",
669 "image",
670 "io",
671 "json",
672 "logging",
673 "mailbox",
674 "math",
675 "mime",
676 "mmap",
677 "multiprocessing",
678 "netclient",
679 "netserver",
680 "numbers",
681 "pickle",
682 "pkgutil",
683 "pprint",
684 "profile",
685 "pydoc",
686 "resource",
687 "shell",
688 "smtpd",
689 "sqlite3",
690 "stringold",
691 "syslog",
692 "terminal",
693 "threading",
694 "tkinter",
695 "typing",
696 "unittest",
697 "unixadmin",
698 "xml",
699 "xmlrpc"
700 ],
701 "summary": "All Python modules"
702 },
703 "multiprocessing": {
704 "cached": [],
705 "files": [
706 "${libdir}/python3.5/lib-dynload/_multiprocessing.*.so",
707 "${libdir}/python3.5/multiprocessing"
708 ],
709 "rdepends": [
710 "core"
711 ],
712 "summary": "Python multiprocessing support"
713 },
714 "netclient": {
715 "cached": [
716 "${libdir}/python3.5/__pycache__/base64.*.pyc",
717 "${libdir}/python3.5/__pycache__/ftplib.*.pyc",
718 "${libdir}/python3.5/__pycache__/hmac.*.pyc",
719 "${libdir}/python3.5/__pycache__/mimetypes.*.pyc",
720 "${libdir}/python3.5/__pycache__/nntplib.*.pyc",
721 "${libdir}/python3.5/__pycache__/poplib.*.pyc",
722 "${libdir}/python3.5/__pycache__/smtplib.*.pyc",
723 "${libdir}/python3.5/__pycache__/telnetlib.*.pyc",
724 "${libdir}/python3.5/__pycache__/uuid.*.pyc"
725 ],
726 "files": [
727 "${libdir}/python3.5/base64.py",
728 "${libdir}/python3.5/ftplib.py",
729 "${libdir}/python3.5/hmac.py",
730 "${libdir}/python3.5/mimetypes.py",
731 "${libdir}/python3.5/nntplib.py",
732 "${libdir}/python3.5/poplib.py",
733 "${libdir}/python3.5/smtplib.py",
734 "${libdir}/python3.5/telnetlib.py",
735 "${libdir}/python3.5/urllib",
736 "${libdir}/python3.5/urllib/__pycache__",
737 "${libdir}/python3.5/uuid.py"
738 ],
739 "rdepends": [
740 "compression",
741 "core",
742 "crypt",
743 "ctypes",
744 "datetime",
745 "email",
746 "io",
747 "math",
748 "mime",
749 "shell",
750 "stringold",
751 "unixadmin"
752 ],
753 "summary": "Python Internet Protocol clients"
754 },
755 "netserver": {
756 "cached": [
757 "${libdir}/python3.5/__pycache__/cgi.*.pyc",
758 "${libdir}/python3.5/__pycache__/socketserver.*.pyc"
759 ],
760 "files": [
761 "${libdir}/python3.5/cgi.py",
762 "${libdir}/python3.5/socketserver.py"
763 ],
764 "rdepends": [
765 "compression",
766 "core",
767 "crypt",
768 "datetime",
769 "email",
770 "html",
771 "io",
772 "math",
773 "mime",
774 "netclient",
775 "shell",
776 "stringold",
777 "unixadmin"
778 ],
779 "summary": "Python Internet Protocol servers"
780 },
781 "numbers": {
782 "cached": [
783 "${libdir}/python3.5/__pycache__/decimal.*.pyc",
784 "${libdir}/python3.5/__pycache__/fractions.*.pyc",
785 "${libdir}/python3.5/__pycache__/numbers.*.pyc"
786 ],
787 "files": [
788 "${libdir}/python3.5/decimal.py",
789 "${libdir}/python3.5/fractions.py",
790 "${libdir}/python3.5/lib-dynload/_decimal.*.so",
791 "${libdir}/python3.5/numbers.py"
792 ],
793 "rdepends": [
794 "core"
795 ],
796 "summary": "Python number APIs"
797 },
798 "pickle": {
799 "cached": [
800 "${libdir}/python3.5/__pycache__/_compat_pickle.*.pyc",
801 "${libdir}/python3.5/__pycache__/pickle.*.pyc",
802 "${libdir}/python3.5/__pycache__/pickletools.*.pyc",
803 "${libdir}/python3.5/__pycache__/shelve.*.pyc"
804 ],
805 "files": [
806 "${libdir}/python3.5/_compat_pickle.py",
807 "${libdir}/python3.5/lib-dynload/_pickle.*.so",
808 "${libdir}/python3.5/pickle.py",
809 "${libdir}/python3.5/pickletools.py",
810 "${libdir}/python3.5/shelve.py"
811 ],
812 "rdepends": [
813 "core"
814 ],
815 "summary": "Python serialisation/persistence support"
816 },
817 "pkgutil": {
818 "cached": [
819 "${libdir}/python3.5/__pycache__/pkgutil.*.pyc"
820 ],
821 "files": [
822 "${libdir}/python3.5/pkgutil.py"
823 ],
824 "rdepends": [
825 "core"
826 ],
827 "summary": "Python package extension utility support"
828 },
829 "pprint": {
830 "cached": [
831 "${libdir}/python3.5/__pycache__/pprint.*.pyc"
832 ],
833 "files": [
834 "${libdir}/python3.5/pprint.py"
835 ],
836 "rdepends": [
837 "core"
838 ],
839 "summary": "Python pretty-print support"
840 },
841 "profile": {
842 "cached": [
843 "${libdir}/python3.5/__pycache__/cProfile.*.pyc",
844 "${libdir}/python3.5/__pycache__/profile.*.pyc",
845 "${libdir}/python3.5/__pycache__/pstats.*.pyc"
846 ],
847 "files": [
848 "${libdir}/python3.5/cProfile.py",
849 "${libdir}/python3.5/lib-dynload/_lsprof.*.so",
850 "${libdir}/python3.5/profile.py",
851 "${libdir}/python3.5/pstats.py"
852 ],
853 "rdepends": [
854 "core"
855 ],
856 "summary": "Python basic performance profiling support"
857 },
858 "pydoc": {
859 "cached": [
860 "${libdir}/python3.5/__pycache__/pydoc.*.pyc"
861 ],
862 "files": [
863 "${bindir}/pydoc*",
864 "${libdir}/python3.5/pydoc.py",
865 "${libdir}/python3.5/pydoc_data"
866 ],
867 "rdepends": [
868 "core",
869 "netclient",
870 "pkgutil"
871 ],
872 "summary": "Python interactive help support"
873 },
874 "resource": {
875 "cached": [],
876 "files": [
877 "${libdir}/python3.5/lib-dynload/resource.*.so"
878 ],
879 "rdepends": [
880 "core"
881 ],
882 "summary": "Python resource control interface"
883 },
884 "shell": {
885 "cached": [
886 "${libdir}/python3.5/__pycache__/cmd.*.pyc",
887 "${libdir}/python3.5/__pycache__/fnmatch.*.pyc",
888 "${libdir}/python3.5/__pycache__/glob.*.pyc",
889 "${libdir}/python3.5/__pycache__/shlex.*.pyc",
890 "${libdir}/python3.5/__pycache__/shutil.*.pyc"
891 ],
892 "files": [
893 "${libdir}/python3.5/cmd.py",
894 "${libdir}/python3.5/fnmatch.py",
895 "${libdir}/python3.5/glob.py",
896 "${libdir}/python3.5/shlex.py",
897 "${libdir}/python3.5/shutil.py"
898 ],
899 "rdepends": [
900 "compression",
901 "core",
902 "stringold",
903 "unixadmin"
904 ],
905 "summary": "Python shell-like functionality"
906 },
907 "smtpd": {
908 "cached": [
909 "${libdir}/python3.5/__pycache__/asynchat.*.pyc",
910 "${libdir}/python3.5/__pycache__/asyncore.*.pyc",
911 "${libdir}/python3.5/__pycache__/smtpd.*.pyc"
912 ],
913 "files": [
914 "${bindir}/smtpd.py",
915 "${libdir}/python3.5/asynchat.py",
916 "${libdir}/python3.5/asyncore.py",
917 "${libdir}/python3.5/smtpd.py"
918 ],
919 "rdepends": [
920 "core",
921 "crypt",
922 "datetime",
923 "email",
924 "io",
925 "math",
926 "mime",
927 "netclient",
928 "stringold"
929 ],
930 "summary": "Python Simple Mail Transport Daemon"
931 },
932 "sqlite3": {
933 "cached": [],
934 "files": [
935 "${libdir}/python3.5/lib-dynload/_sqlite3.*.so"
936 ],
937 "rdepends": [
938 "core"
939 ],
940 "summary": "Python Sqlite3 database support"
941 },
942 "sqlite3-tests": {
943 "cached": [],
944 "files": [
945 "${libdir}/python3.5/sqlite3/test"
946 ],
947 "rdepends": [
948 "core",
949 "tests"
950 ],
951 "summary": "Python Sqlite3 database support tests"
952 },
953 "stringold": {
954 "cached": [
955 "${libdir}/python3.5/__pycache__/string.*.pyc"
956 ],
957 "files": [
958 "${libdir}/python3.5/string.py"
959 ],
960 "rdepends": [
961 "core"
962 ],
963 "summary": "Python string APIs [deprecated]"
964 },
965 "syslog": {
966 "cached": [],
967 "files": [
968 "${libdir}/python3.5/lib-dynload/syslog.*.so"
969 ],
970 "rdepends": [
971 "core"
972 ],
973 "summary": "Python syslog interface"
974 },
975 "terminal": {
976 "cached": [
977 "${libdir}/python3.5/__pycache__/pty.*.pyc",
978 "${libdir}/python3.5/__pycache__/tty.*.pyc"
979 ],
980 "files": [
981 "${libdir}/python3.5/pty.py",
982 "${libdir}/python3.5/tty.py"
983 ],
984 "rdepends": [
985 "core",
986 "io"
987 ],
988 "summary": "Python terminal controlling support"
989 },
990 "tests": {
991 "cached": [],
992 "files": [
993 "${libdir}/python3.5/test"
994 ],
995 "rdepends": [
996 "core"
997 ],
998 "summary": "Python tests"
999 },
1000 "threading": {
1001 "cached": [
1002 "${libdir}/python3.5/__pycache__/_dummy_thread.*.pyc",
1003 "${libdir}/python3.5/__pycache__/_threading_local.*.pyc",
1004 "${libdir}/python3.5/__pycache__/dummy_threading.*.pyc",
1005 "${libdir}/python3.5/__pycache__/queue.*.pyc"
1006 ],
1007 "files": [
1008 "${libdir}/python3.5/_dummy_thread.py",
1009 "${libdir}/python3.5/_threading_local.py",
1010 "${libdir}/python3.5/dummy_threading.py",
1011 "${libdir}/python3.5/queue.py"
1012 ],
1013 "rdepends": [
1014 "core"
1015 ],
1016 "summary": "Python threading & synchronization support"
1017 },
1018 "tkinter": {
1019 "cached": [],
1020 "files": [
1021 "${libdir}/python3.5/tkinter"
1022 ],
1023 "rdepends": [
1024 "core"
1025 ],
1026 "summary": "Python Tcl/Tk bindings"
1027 },
1028 "typing": {
1029 "cached": [
1030 "${libdir}/python3.5/__pycache__/typing.*.pyc"
1031 ],
1032 "files": [
1033 "${libdir}/python3.5/typing.py"
1034 ],
1035 "rdepends": [
1036 "core"
1037 ],
1038 "summary": "Python typing support"
1039 },
1040 "unittest": {
1041 "cached": [],
1042 "files": [
1043 "${libdir}/python3.5/unittest",
1044 "${libdir}/python3.5/unittest/",
1045 "${libdir}/python3.5/unittest/__pycache__"
1046 ],
1047 "rdepends": [
1048 "core",
1049 "difflib",
1050 "logging",
1051 "pprint",
1052 "shell",
1053 "stringold"
1054 ],
1055 "summary": "Python unit testing framework"
1056 },
1057 "unixadmin": {
1058 "cached": [
1059 "${libdir}/python3.5/__pycache__/getpass.*.pyc"
1060 ],
1061 "files": [
1062 "${libdir}/python3.5/getpass.py",
1063 "${libdir}/python3.5/lib-dynload/grp.*.so",
1064 "${libdir}/python3.5/lib-dynload/nis.*.so"
1065 ],
1066 "rdepends": [
1067 "core",
1068 "io"
1069 ],
1070 "summary": "Python Unix administration support"
1071 },
1072 "xml": {
1073 "cached": [],
1074 "files": [
1075 "${libdir}/python3.5/lib-dynload/_elementtree.*.so",
1076 "${libdir}/python3.5/lib-dynload/pyexpat.*.so",
1077 "${libdir}/python3.5/xml"
1078 ],
1079 "rdepends": [
1080 "core"
1081 ],
1082 "summary": "Python basic XML support"
1083 },
1084 "xmlrpc": {
1085 "cached": [],
1086 "files": [
1087 "${libdir}/python3.5/xmlrpc",
1088 "${libdir}/python3.5/xmlrpc/__pycache__"
1089 ],
1090 "rdepends": [
1091 "core",
1092 "xml"
1093 ],
1094 "summary": "Python XML-RPC support"
1095 }
1096}
diff --git a/meta/recipes-devtools/python/python3_3.5.3.bb b/meta/recipes-devtools/python/python3_3.5.3.bb
index 7f54ea4ecd..970ba63445 100644
--- a/meta/recipes-devtools/python/python3_3.5.3.bb
+++ b/meta/recipes-devtools/python/python3_3.5.3.bb
@@ -1,6 +1,7 @@
1require recipes-devtools/python/python.inc 1require recipes-devtools/python/python.inc
2 2
3DEPENDS = "python3-native libffi bzip2 gdbm openssl readline sqlite3 zlib virtual/libintl xz" 3DEPENDS = "python3-native libffi bzip2 gdbm openssl readline sqlite3 zlib virtual/libintl xz"
4
4PR = "${INC_PR}.0" 5PR = "${INC_PR}.0"
5PYTHON_MAJMIN = "3.5" 6PYTHON_MAJMIN = "3.5"
6PYTHON_BINABI= "${PYTHON_MAJMIN}m" 7PYTHON_BINABI= "${PYTHON_MAJMIN}m"
@@ -196,11 +197,8 @@ py_package_preprocess () {
196 ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py 197 ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py
197} 198}
198 199
199require python-${PYTHON_MAJMIN}-manifest.inc
200
201# manual dependency additions 200# manual dependency additions
202RPROVIDES_${PN}-modules = "${PN}" 201RPROVIDES_${PN}-modules = "${PN}"
203RRECOMMENDS_${PN}-core = "${PN}-readline"
204RRECOMMENDS_${PN}-crypt = "openssl" 202RRECOMMENDS_${PN}-crypt = "openssl"
205RRECOMMENDS_${PN}-crypt_class-nativesdk = "nativesdk-openssl" 203RRECOMMENDS_${PN}-crypt_class-nativesdk = "nativesdk-openssl"
206 204
@@ -219,7 +217,7 @@ INSANE_SKIP_${PN}-dev += "dev-elf"
219 217
220# catch all the rest (unsorted) 218# catch all the rest (unsorted)
221PACKAGES += "${PN}-misc" 219PACKAGES += "${PN}-misc"
222RDEPENDS_${PN}-misc += "${PN}-core ${PN}-email ${PN}-codecs ${PN}-textutils ${PN}-argparse" 220RDEPENDS_${PN}-misc += "${PN}-core ${PN}-email ${PN}-codecs"
223RDEPENDS_${PN}-modules += "${PN}-misc" 221RDEPENDS_${PN}-modules += "${PN}-misc"
224FILES_${PN}-misc = "${libdir}/python${PYTHON_MAJMIN}" 222FILES_${PN}-misc = "${libdir}/python${PYTHON_MAJMIN}"
225 223
@@ -228,3 +226,88 @@ PACKAGES += "${PN}-man"
228FILES_${PN}-man = "${datadir}/man" 226FILES_${PN}-man = "${datadir}/man"
229 227
230BBCLASSEXTEND = "nativesdk" 228BBCLASSEXTEND = "nativesdk"
229
230RPROVIDES_${PN} += "${PN}-modules"
231
232# We want bytecode precompiled .py files (.pyc's) by default
233# but the user may set it on their own conf
234
235INCLUDE_PYCS ?= "1"
236
237python(){
238
239 pythondir = d.getVar('THISDIR',True)
240
241 # Read JSON manifest
242 import json
243 with open(pythondir+'/python3/python3-manifest.json') as manifest_file:
244 python_manifest=json.load(manifest_file)
245
246 include_pycs = d.getVar('INCLUDE_PYCS')
247
248 packages = d.getVar('PACKAGES').split()
249 pn = d.getVar('PN')
250
251 newpackages=[]
252 for key in python_manifest:
253 pypackage= pn + '-' + key
254
255 if pypackage not in packages:
256 # We need to prepend, otherwise python-misc gets everything
257 # so we use a new variable
258 newpackages.append(pypackage)
259
260 # "Build" python's manifest FILES, RDEPENDS and SUMMARY
261 d.setVar('FILES_' + pypackage, '')
262 for value in python_manifest[key]['files']:
263 d.appendVar('FILES_' + pypackage, ' ' + value)
264
265 # Add cached files
266 if include_pycs == '1':
267 for value in python_manifest[key]['cached']:
268 d.appendVar('FILES_' + pypackage, ' ' + value)
269
270 d.setVar('RDEPENDS_' + pypackage, '')
271 for value in python_manifest[key]['rdepends']:
272 # Make it work with or without $PN
273 if '${PN}' in value:
274 value=value.split('-')[1]
275 d.appendVar('RDEPENDS_' + pypackage, ' ' + pn + '-' + value)
276 d.setVar('SUMMARY_' + pypackage, python_manifest[key]['summary'])
277
278 # We need to ensure staticdev packages match for files first so we sort in reverse
279 newpackages.sort(reverse=True)
280 # Prepending so to avoid python-misc getting everything
281 packages = newpackages + packages
282 d.setVar('PACKAGES', ' '.join(packages))
283 d.setVar('ALLOW_EMPTY_${PN}-modules', '1')
284}
285do_split_packages[file-checksums] += "${THISDIR}/python/python3-manifest.json:True"
286
287
288
289# Files needed to create a new manifest
290SRC_URI += "file://create_manifest3.py file://get_module_deps3.py file://python3-manifest.json"
291
292do_create_manifest() {
293
294# This task should be run with every new release of Python.
295# We must ensure that PACKAGECONFIG enables everything when creating
296# a new manifest, this is to base our new manifest on a complete
297# native python build, containing all dependencies, otherwise the task
298# wont be able to find the required files.
299# e.g. BerkeleyDB is an optional build dependency so it may or may not
300# be present, we must ensure it is.
301
302cd ${WORKDIR}
303# This needs to be executed by python-native and NOT by HOST's python
304nativepython3 create_manifest3.py
305cp python3-manifest.json.new ${THISDIR}/python3/python3-manifest.json
306}
307
308# bitbake python -c create_manifest
309addtask do_create_manifest
310
311# Make sure we have native python ready when we create a new manifest
312do_create_manifest[depends] += "python3:do_prepare_recipe_sysroot"
313do_create_manifest[depends] += "python3:do_patch"