diff options
Diffstat (limited to 'meta')
8 files changed, 1528 insertions, 862 deletions
| diff --git a/meta/recipes-devtools/python/python-2.7-manifest.inc b/meta/recipes-devtools/python/python-2.7-manifest.inc deleted file mode 100644 index 7c3fc1b73a..0000000000 --- a/meta/recipes-devtools/python/python-2.7-manifest.inc +++ /dev/null @@ -1,840 +0,0 @@ - -# WARNING: This file is AUTO GENERATED: Manual edits will be lost next time I regenerate the file. -# Generator: './scripts/contrib/python/generate-manifest-2.7.py' Version 20110222.2 (C) 2002-2010 Michael 'Mickey' Lauer <mlauer@vanille-media.de> - -  - -PROVIDES+=" \ -  ${PN}-2to3 \ -  ${PN}-argparse \ -  ${PN}-audio \ -  ${PN}-bsddb \ -  ${PN}-codecs \ -  ${PN}-compile \ -  ${PN}-compiler \ -  ${PN}-compression \ -  ${PN}-contextlib \ -  ${PN}-core \ -  ${PN}-crypt \ -  ${PN}-ctypes \ -  ${PN}-curses \ -  ${PN}-datetime \ -  ${PN}-db \ -  ${PN}-debugger \ -  ${PN}-dev \ -  ${PN}-difflib \ -  ${PN}-distutils \ -  ${PN}-distutils-staticdev \ -  ${PN}-doctest \ -  ${PN}-email \ -  ${PN}-fcntl \ -  ${PN}-gdbm \ -  ${PN}-hotshot \ -  ${PN}-html \ -  ${PN}-idle \ -  ${PN}-image \ -  ${PN}-importlib \ -  ${PN}-io \ -  ${PN}-json \ -  ${PN}-lang \ -  ${PN}-logging \ -  ${PN}-mailbox \ -  ${PN}-math \ -  ${PN}-mime \ -  ${PN}-mmap \ -  ${PN}-multiprocessing \ -  ${PN}-netclient \ -  ${PN}-netserver \ -  ${PN}-numbers \ -  ${PN}-pickle \ -  ${PN}-pkgutil \ -  ${PN}-plistlib \ -  ${PN}-pprint \ -  ${PN}-profile \ -  ${PN}-pydoc \ -  ${PN}-re \ -  ${PN}-readline \ -  ${PN}-resource \ -  ${PN}-robotparser \ -  ${PN}-runpy \ -  ${PN}-shell \ -  ${PN}-smtpd \ -  ${PN}-sqlite3 \ -  ${PN}-sqlite3-tests \ -  ${PN}-stringold \ -  ${PN}-subprocess \ -  ${PN}-syslog \ -  ${PN}-terminal \ -  ${PN}-tests \ -  ${PN}-textutils \ -  ${PN}-threading \ -  ${PN}-tkinter \ -  ${PN}-unittest \ -  ${PN}-unixadmin \ -  ${PN}-xml \ -  ${PN}-xmlrpc \ -  ${PN}-zlib \ -" - -PACKAGES=" \ -  ${PN}-dbg \ -  ${PN}-2to3 \ -  ${PN}-argparse \ -  ${PN}-audio \ -  ${PN}-bsddb \ -  ${PN}-codecs \ -  ${PN}-compile \ -  ${PN}-compiler \ -  ${PN}-compression \ -  ${PN}-contextlib \ -  ${PN}-core \ -  ${PN}-crypt \ -  ${PN}-ctypes \ -  ${PN}-curses \ -  ${PN}-datetime \ -  ${PN}-db \ -  ${PN}-debugger \ -  ${PN}-dev \ -  ${PN}-difflib \ -  ${PN}-distutils-staticdev ${PN}-distutils \ -  ${PN}-doctest \ -  ${PN}-email \ -  ${PN}-fcntl \ -  ${PN}-gdbm \ -  ${PN}-hotshot \ -  ${PN}-html \ -  ${PN}-idle \ -  ${PN}-image \ -  ${PN}-importlib \ -  ${PN}-io \ -  ${PN}-json \ -  ${PN}-lang \ -  ${PN}-logging \ -  ${PN}-mailbox \ -  ${PN}-math \ -  ${PN}-mime \ -  ${PN}-mmap \ -  ${PN}-multiprocessing \ -  ${PN}-netclient \ -  ${PN}-netserver \ -  ${PN}-numbers \ -  ${PN}-pickle \ -  ${PN}-pkgutil \ -  ${PN}-plistlib \ -  ${PN}-pprint \ -  ${PN}-profile \ -  ${PN}-pydoc \ -  ${PN}-re \ -  ${PN}-readline \ -  ${PN}-resource \ -  ${PN}-robotparser \ -  ${PN}-runpy \ -  ${PN}-shell \ -  ${PN}-smtpd \ -  ${PN}-sqlite3 \ -  ${PN}-sqlite3-tests \ -  ${PN}-stringold \ -  ${PN}-subprocess \ -  ${PN}-syslog \ -  ${PN}-terminal \ -  ${PN}-tests \ -  ${PN}-textutils \ -  ${PN}-threading \ -  ${PN}-tkinter \ -  ${PN}-unittest \ -  ${PN}-unixadmin \ -  ${PN}-xml \ -  ${PN}-xmlrpc \ -  ${PN}-zlib \ -  ${PN}-modules\ -" - -SUMMARY_${PN}-2to3="Python automated Python 2 to 3 code translator" -RDEPENDS_${PN}-2to3="${PN}-core" -FILES_${PN}-2to3=" \ -    ${bindir}/2to3 \ -    ${libdir}/python2.7/lib2to3 \ -" - -SUMMARY_${PN}-argparse="Python command line argument parser" -RDEPENDS_${PN}-argparse="${PN}-core ${PN}-codecs ${PN}-textutils" -FILES_${PN}-argparse=" \ -    ${libdir}/python2.7/argparse.* \ -" - -SUMMARY_${PN}-audio="Python Audio Handling" -RDEPENDS_${PN}-audio="${PN}-core" -FILES_${PN}-audio=" \ -    ${libdir}/python2.7/wave.* \ -    ${libdir}/python2.7/chunk.* \ -    ${libdir}/python2.7/sndhdr.* \ -    ${libdir}/python2.7/lib-dynload/ossaudiodev.so \ -    ${libdir}/python2.7/lib-dynload/audioop.so \ -    ${libdir}/python2.7/audiodev.* \ -    ${libdir}/python2.7/sunaudio.* \ -    ${libdir}/python2.7/sunau.* \ -    ${libdir}/python2.7/toaiff.* \ -" - -SUMMARY_${PN}-bsddb="Python bindings for the Berkeley Database" -RDEPENDS_${PN}-bsddb="${PN}-core" -FILES_${PN}-bsddb=" \ -    ${libdir}/python2.7/bsddb \ -    ${libdir}/python2.7/lib-dynload/_bsddb.so \ -" - -SUMMARY_${PN}-codecs="Python codecs, encodings & i18n support" -RDEPENDS_${PN}-codecs="${PN}-core ${PN}-lang" -FILES_${PN}-codecs=" \ -    ${libdir}/python2.7/codecs.* \ -    ${libdir}/python2.7/encodings \ -    ${libdir}/python2.7/gettext.* \ -    ${libdir}/python2.7/locale.* \ -    ${libdir}/python2.7/lib-dynload/_locale.so \ -    ${libdir}/python2.7/lib-dynload/_codecs* \ -    ${libdir}/python2.7/lib-dynload/_multibytecodec.so \ -    ${libdir}/python2.7/lib-dynload/unicodedata.so \ -    ${libdir}/python2.7/stringprep.* \ -    ${libdir}/python2.7/xdrlib.* \ -" - -SUMMARY_${PN}-compile="Python bytecode compilation support" -RDEPENDS_${PN}-compile="${PN}-core" -FILES_${PN}-compile=" \ -    ${libdir}/python2.7/py_compile.* \ -    ${libdir}/python2.7/compileall.* \ -" - -SUMMARY_${PN}-compiler="Python compiler support" -RDEPENDS_${PN}-compiler="${PN}-core" -FILES_${PN}-compiler=" \ -    ${libdir}/python2.7/compiler \ -" - -SUMMARY_${PN}-compression="Python high-level compression support" -RDEPENDS_${PN}-compression="${PN}-core ${PN}-zlib" -FILES_${PN}-compression=" \ -    ${libdir}/python2.7/gzip.* \ -    ${libdir}/python2.7/zipfile.* \ -    ${libdir}/python2.7/tarfile.* \ -    ${libdir}/python2.7/lib-dynload/bz2.so \ -" - -SUMMARY_${PN}-contextlib="Python utilities for with-statementcontexts." -RDEPENDS_${PN}-contextlib="${PN}-core" -FILES_${PN}-contextlib=" \ -    ${libdir}/python${PYTHON_MAJMIN}/contextlib.* \ -" - -SUMMARY_${PN}-core="Python interpreter and core modules" -RDEPENDS_${PN}-core="${PN}-lang ${PN}-re" -FILES_${PN}-core=" \ -    ${libdir}/python2.7/__future__.* \ -    ${libdir}/python2.7/_abcoll.* \ -    ${libdir}/python2.7/abc.* \ -    ${libdir}/python2.7/ast.* \ -    ${libdir}/python2.7/copy.* \ -    ${libdir}/python2.7/copy_reg.* \ -    ${libdir}/python2.7/ConfigParser.* \ -    ${libdir}/python2.7/genericpath.* \ -    ${libdir}/python2.7/getopt.* \ -    ${libdir}/python2.7/linecache.* \ -    ${libdir}/python2.7/new.* \ -    ${libdir}/python2.7/os.* \ -    ${libdir}/python2.7/posixpath.* \ -    ${libdir}/python2.7/struct.* \ -    ${libdir}/python2.7/warnings.* \ -    ${libdir}/python2.7/site.* \ -    ${libdir}/python2.7/stat.* \ -    ${libdir}/python2.7/UserDict.* \ -    ${libdir}/python2.7/UserList.* \ -    ${libdir}/python2.7/UserString.* \ -    ${libdir}/python2.7/lib-dynload/binascii.so \ -    ${libdir}/python2.7/lib-dynload/_struct.so \ -    ${libdir}/python2.7/lib-dynload/time.so \ -    ${libdir}/python2.7/lib-dynload/xreadlines.so \ -    ${libdir}/python2.7/types.* \ -    ${libdir}/python2.7/platform.* \ -    ${bindir}/python* \ -    ${libdir}/python2.7/_weakrefset.* \ -    ${libdir}/python2.7/sysconfig.* \ -    ${libdir}/python2.7/_sysconfigdata.* \ -    ${includedir}/python${PYTHON_MAJMIN}/pyconfig*.h \ -    ${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py \ -" - -SUMMARY_${PN}-crypt="Python basic cryptographic and hashing support" -RDEPENDS_${PN}-crypt="${PN}-core" -FILES_${PN}-crypt=" \ -    ${libdir}/python2.7/hashlib.* \ -    ${libdir}/python2.7/md5.* \ -    ${libdir}/python2.7/sha.* \ -    ${libdir}/python2.7/lib-dynload/crypt.so \ -    ${libdir}/python2.7/lib-dynload/_hashlib.so \ -    ${libdir}/python2.7/lib-dynload/_sha256.so \ -    ${libdir}/python2.7/lib-dynload/_sha512.so \ -" - -SUMMARY_${PN}-ctypes="Python C types support" -RDEPENDS_${PN}-ctypes="${PN}-core" -FILES_${PN}-ctypes=" \ -    ${libdir}/python2.7/ctypes \ -    ${libdir}/python2.7/lib-dynload/_ctypes.so \ -    ${libdir}/python2.7/lib-dynload/_ctypes_test.so \ -" - -SUMMARY_${PN}-curses="Python curses support" -RDEPENDS_${PN}-curses="${PN}-core" -FILES_${PN}-curses=" \ -    ${libdir}/python2.7/curses \ -    ${libdir}/python2.7/lib-dynload/_curses.so \ -    ${libdir}/python2.7/lib-dynload/_curses_panel.so \ -" - -SUMMARY_${PN}-datetime="Python calendar and time support" -RDEPENDS_${PN}-datetime="${PN}-core ${PN}-codecs" -FILES_${PN}-datetime=" \ -    ${libdir}/python2.7/_strptime.* \ -    ${libdir}/python2.7/calendar.* \ -    ${libdir}/python2.7/lib-dynload/datetime.so \ -" - -SUMMARY_${PN}-db="Python file-based database support" -RDEPENDS_${PN}-db="${PN}-core" -FILES_${PN}-db=" \ -    ${libdir}/python2.7/anydbm.* \ -    ${libdir}/python2.7/dumbdbm.* \ -    ${libdir}/python2.7/whichdb.* \ -" - -SUMMARY_${PN}-debugger="Python debugger" -RDEPENDS_${PN}-debugger="${PN}-core ${PN}-io ${PN}-lang ${PN}-re ${PN}-stringold ${PN}-shell ${PN}-pprint" -FILES_${PN}-debugger=" \ -    ${libdir}/python2.7/bdb.* \ -    ${libdir}/python2.7/pdb.* \ -" - -SUMMARY_${PN}-dev="Python development package" -RDEPENDS_${PN}-dev="${PN}-core" -FILES_${PN}-dev=" \ -    ${includedir} \ -    ${libdir}/lib*${SOLIBSDEV} \ -    ${libdir}/*.la \ -    ${libdir}/*.a \ -    ${libdir}/*.o \ -    ${libdir}/pkgconfig \ -    ${base_libdir}/*.a \ -    ${base_libdir}/*.o \ -    ${datadir}/aclocal \ -    ${datadir}/pkgconfig \ -    ${libdir}/python2.7/config/Makefile \ -" - -SUMMARY_${PN}-difflib="Python helpers for computing deltas between objects" -RDEPENDS_${PN}-difflib="${PN}-lang ${PN}-re" -FILES_${PN}-difflib=" \ -    ${libdir}/python2.7/difflib.* \ -" - -SUMMARY_${PN}-distutils="Python Distribution Utilities" -RDEPENDS_${PN}-distutils="${PN}-core ${PN}-email" -FILES_${PN}-distutils=" \ -    ${libdir}/python2.7/config \ -    ${libdir}/python2.7/distutils \ -" - -SUMMARY_${PN}-distutils-staticdev="Python distribution utilities (static libraries)" -RDEPENDS_${PN}-distutils-staticdev="${PN}-distutils" -FILES_${PN}-distutils-staticdev=" \ -    ${libdir}/python2.7/config/lib*.a \ -" - -SUMMARY_${PN}-doctest="Python framework for running examples in docstrings" -RDEPENDS_${PN}-doctest="${PN}-core ${PN}-lang ${PN}-io ${PN}-re ${PN}-unittest ${PN}-debugger ${PN}-difflib" -FILES_${PN}-doctest=" \ -    ${libdir}/python2.7/doctest.* \ -" - -SUMMARY_${PN}-email="Python email support" -RDEPENDS_${PN}-email="${PN}-core ${PN}-io ${PN}-re ${PN}-mime ${PN}-audio ${PN}-image ${PN}-netclient" -FILES_${PN}-email=" \ -    ${libdir}/python2.7/imaplib.* \ -    ${libdir}/python2.7/email \ -" - -SUMMARY_${PN}-fcntl="Python's fcntl interface" -RDEPENDS_${PN}-fcntl="${PN}-core" -FILES_${PN}-fcntl=" \ -    ${libdir}/python2.7/lib-dynload/fcntl.so \ -" - -SUMMARY_${PN}-gdbm="Python GNU database support" -RDEPENDS_${PN}-gdbm="${PN}-core" -FILES_${PN}-gdbm=" \ -    ${libdir}/python2.7/lib-dynload/gdbm.so \ -" - -SUMMARY_${PN}-hotshot="Python hotshot performance profiler" -RDEPENDS_${PN}-hotshot="${PN}-core" -FILES_${PN}-hotshot=" \ -    ${libdir}/python2.7/hotshot \ -    ${libdir}/python2.7/lib-dynload/_hotshot.so \ -" - -SUMMARY_${PN}-html="Python HTML processing support" -RDEPENDS_${PN}-html="${PN}-core" -FILES_${PN}-html=" \ -    ${libdir}/python2.7/formatter.* \ -    ${libdir}/python2.7/htmlentitydefs.* \ -    ${libdir}/python2.7/htmllib.* \ -    ${libdir}/python2.7/markupbase.* \ -    ${libdir}/python2.7/sgmllib.* \ -    ${libdir}/python2.7/HTMLParser.* \ -" - -SUMMARY_${PN}-idle="Python Integrated Development Environment" -RDEPENDS_${PN}-idle="${PN}-core ${PN}-tkinter" -FILES_${PN}-idle=" \ -    ${bindir}/idle \ -    ${libdir}/python2.7/idlelib \ -" - -SUMMARY_${PN}-image="Python graphical image handling" -RDEPENDS_${PN}-image="${PN}-core" -FILES_${PN}-image=" \ -    ${libdir}/python2.7/colorsys.* \ -    ${libdir}/python2.7/imghdr.* \ -    ${libdir}/python2.7/lib-dynload/imageop.so \ -    ${libdir}/python2.7/lib-dynload/rgbimg.so \ -" - -SUMMARY_${PN}-importlib="Python import implementation library" -RDEPENDS_${PN}-importlib="${PN}-core" -FILES_${PN}-importlib=" \ -    ${libdir}/python2.7/importlib \ -" - -SUMMARY_${PN}-io="Python low-level I/O" -RDEPENDS_${PN}-io="${PN}-core ${PN}-math ${PN}-textutils ${PN}-netclient ${PN}-contextlib" -FILES_${PN}-io=" \ -    ${libdir}/python2.7/lib-dynload/_socket.so \ -    ${libdir}/python2.7/lib-dynload/_io.so \ -    ${libdir}/python2.7/lib-dynload/_ssl.so \ -    ${libdir}/python2.7/lib-dynload/select.so \ -    ${libdir}/python2.7/lib-dynload/termios.so \ -    ${libdir}/python2.7/lib-dynload/cStringIO.so \ -    ${libdir}/python2.7/pipes.* \ -    ${libdir}/python2.7/socket.* \ -    ${libdir}/python2.7/ssl.* \ -    ${libdir}/python2.7/tempfile.* \ -    ${libdir}/python2.7/StringIO.* \ -    ${libdir}/python2.7/io.* \ -    ${libdir}/python2.7/_pyio.* \ -" - -SUMMARY_${PN}-json="Python JSON support" -RDEPENDS_${PN}-json="${PN}-core ${PN}-math ${PN}-re ${PN}-codecs" -FILES_${PN}-json=" \ -    ${libdir}/python2.7/json \ -    ${libdir}/python2.7/lib-dynload/_json.so \ -" - -SUMMARY_${PN}-lang="Python low-level language support" -RDEPENDS_${PN}-lang="${PN}-core" -FILES_${PN}-lang=" \ -    ${libdir}/python2.7/lib-dynload/_bisect.so \ -    ${libdir}/python2.7/lib-dynload/_collections.so \ -    ${libdir}/python2.7/lib-dynload/_heapq.so \ -    ${libdir}/python2.7/lib-dynload/_weakref.so \ -    ${libdir}/python2.7/lib-dynload/_functools.so \ -    ${libdir}/python2.7/lib-dynload/array.so \ -    ${libdir}/python2.7/lib-dynload/itertools.so \ -    ${libdir}/python2.7/lib-dynload/operator.so \ -    ${libdir}/python2.7/lib-dynload/parser.so \ -    ${libdir}/python2.7/atexit.* \ -    ${libdir}/python2.7/bisect.* \ -    ${libdir}/python2.7/code.* \ -    ${libdir}/python2.7/codeop.* \ -    ${libdir}/python2.7/collections.* \ -    ${libdir}/python2.7/dis.* \ -    ${libdir}/python2.7/functools.* \ -    ${libdir}/python2.7/heapq.* \ -    ${libdir}/python2.7/inspect.* \ -    ${libdir}/python2.7/keyword.* \ -    ${libdir}/python2.7/opcode.* \ -    ${libdir}/python2.7/symbol.* \ -    ${libdir}/python2.7/repr.* \ -    ${libdir}/python2.7/token.* \ -    ${libdir}/python2.7/tokenize.* \ -    ${libdir}/python2.7/traceback.* \ -    ${libdir}/python2.7/weakref.* \ -" - -SUMMARY_${PN}-logging="Python logging support" -RDEPENDS_${PN}-logging="${PN}-core ${PN}-io ${PN}-lang ${PN}-pickle ${PN}-stringold" -FILES_${PN}-logging=" \ -    ${libdir}/python2.7/logging \ -" - -SUMMARY_${PN}-mailbox="Python mailbox format support" -RDEPENDS_${PN}-mailbox="${PN}-core ${PN}-mime" -FILES_${PN}-mailbox=" \ -    ${libdir}/python2.7/mailbox.* \ -" - -SUMMARY_${PN}-math="Python math support" -RDEPENDS_${PN}-math="${PN}-core ${PN}-crypt" -FILES_${PN}-math=" \ -    ${libdir}/python2.7/lib-dynload/cmath.so \ -    ${libdir}/python2.7/lib-dynload/math.so \ -    ${libdir}/python2.7/lib-dynload/_random.so \ -    ${libdir}/python2.7/random.* \ -    ${libdir}/python2.7/sets.* \ -" - -SUMMARY_${PN}-mime="Python MIME handling APIs" -RDEPENDS_${PN}-mime="${PN}-core ${PN}-io" -FILES_${PN}-mime=" \ -    ${libdir}/python2.7/mimetools.* \ -    ${libdir}/python2.7/uu.* \ -    ${libdir}/python2.7/quopri.* \ -    ${libdir}/python2.7/rfc822.* \ -    ${libdir}/python2.7/MimeWriter.* \ -" - -SUMMARY_${PN}-mmap="Python memory-mapped file support" -RDEPENDS_${PN}-mmap="${PN}-core ${PN}-io" -FILES_${PN}-mmap=" \ -    ${libdir}/python2.7/lib-dynload/mmap.so \ -" - -SUMMARY_${PN}-multiprocessing="Python multiprocessing support" -RDEPENDS_${PN}-multiprocessing="${PN}-core ${PN}-io ${PN}-lang ${PN}-pickle ${PN}-threading ${PN}-ctypes ${PN}-mmap" -FILES_${PN}-multiprocessing=" \ -    ${libdir}/python2.7/lib-dynload/_multiprocessing.so \ -    ${libdir}/python2.7/multiprocessing \ -" - -SUMMARY_${PN}-netclient="Python Internet Protocol clients" -RDEPENDS_${PN}-netclient="${PN}-core ${PN}-crypt ${PN}-datetime ${PN}-io ${PN}-lang ${PN}-logging ${PN}-mime" -FILES_${PN}-netclient=" \ -    ${libdir}/python2.7/*Cookie*.* \ -    ${libdir}/python2.7/base64.* \ -    ${libdir}/python2.7/cookielib.* \ -    ${libdir}/python2.7/ftplib.* \ -    ${libdir}/python2.7/gopherlib.* \ -    ${libdir}/python2.7/hmac.* \ -    ${libdir}/python2.7/httplib.* \ -    ${libdir}/python2.7/mimetypes.* \ -    ${libdir}/python2.7/nntplib.* \ -    ${libdir}/python2.7/poplib.* \ -    ${libdir}/python2.7/smtplib.* \ -    ${libdir}/python2.7/telnetlib.* \ -    ${libdir}/python2.7/urllib.* \ -    ${libdir}/python2.7/urllib2.* \ -    ${libdir}/python2.7/urlparse.* \ -    ${libdir}/python2.7/uuid.* \ -    ${libdir}/python2.7/rfc822.* \ -    ${libdir}/python2.7/mimetools.* \ -" - -SUMMARY_${PN}-netserver="Python Internet Protocol servers" -RDEPENDS_${PN}-netserver="${PN}-core ${PN}-netclient ${PN}-shell ${PN}-threading" -FILES_${PN}-netserver=" \ -    ${libdir}/python2.7/cgi.* \ -    ${libdir}/python2.7/*HTTPServer.* \ -    ${libdir}/python2.7/SocketServer.* \ -" - -SUMMARY_${PN}-numbers="Python number APIs" -RDEPENDS_${PN}-numbers="${PN}-core ${PN}-lang ${PN}-re" -FILES_${PN}-numbers=" \ -    ${libdir}/python2.7/decimal.* \ -    ${libdir}/python2.7/fractions.* \ -    ${libdir}/python2.7/numbers.* \ -" - -SUMMARY_${PN}-pickle="Python serialisation/persistence support" -RDEPENDS_${PN}-pickle="${PN}-core ${PN}-codecs ${PN}-io ${PN}-re" -FILES_${PN}-pickle=" \ -    ${libdir}/python2.7/pickle.* \ -    ${libdir}/python2.7/shelve.* \ -    ${libdir}/python2.7/lib-dynload/cPickle.so \ -    ${libdir}/python2.7/pickletools.* \ -" - -SUMMARY_${PN}-pkgutil="Python package extension utility support" -RDEPENDS_${PN}-pkgutil="${PN}-core" -FILES_${PN}-pkgutil=" \ -    ${libdir}/python2.7/pkgutil.* \ -" - -SUMMARY_${PN}-plistlib="Generate and parse Mac OS X .plist files" -RDEPENDS_${PN}-plistlib="${PN}-core ${PN}-datetime ${PN}-io" -FILES_${PN}-plistlib=" \ -    ${libdir}/python2.7/plistlib.* \ -" - -SUMMARY_${PN}-pprint="Python pretty-print support" -RDEPENDS_${PN}-pprint="${PN}-core ${PN}-io" -FILES_${PN}-pprint=" \ -    ${libdir}/python2.7/pprint.* \ -" - -SUMMARY_${PN}-profile="Python basic performance profiling support" -RDEPENDS_${PN}-profile="${PN}-core ${PN}-textutils" -FILES_${PN}-profile=" \ -    ${libdir}/python2.7/profile.* \ -    ${libdir}/python2.7/pstats.* \ -    ${libdir}/python2.7/cProfile.* \ -    ${libdir}/python2.7/lib-dynload/_lsprof.so \ -" - -SUMMARY_${PN}-pydoc="Python interactive help support" -RDEPENDS_${PN}-pydoc="${PN}-core ${PN}-lang ${PN}-stringold ${PN}-re" -FILES_${PN}-pydoc=" \ -    ${bindir}/pydoc \ -    ${libdir}/python2.7/pydoc.* \ -    ${libdir}/python2.7/pydoc_data \ -" - -SUMMARY_${PN}-re="Python Regular Expression APIs" -RDEPENDS_${PN}-re="${PN}-core" -FILES_${PN}-re=" \ -    ${libdir}/python2.7/re.* \ -    ${libdir}/python2.7/sre.* \ -    ${libdir}/python2.7/sre_compile.* \ -    ${libdir}/python2.7/sre_constants* \ -    ${libdir}/python2.7/sre_parse.* \ -" - -SUMMARY_${PN}-readline="Python readline support" -RDEPENDS_${PN}-readline="${PN}-core" -FILES_${PN}-readline=" \ -    ${libdir}/python2.7/lib-dynload/readline.so \ -    ${libdir}/python2.7/rlcompleter.* \ -" - -SUMMARY_${PN}-resource="Python resource control interface" -RDEPENDS_${PN}-resource="${PN}-core" -FILES_${PN}-resource=" \ -    ${libdir}/python2.7/lib-dynload/resource.so \ -" - -SUMMARY_${PN}-robotparser="Python robots.txt parser" -RDEPENDS_${PN}-robotparser="${PN}-core ${PN}-netclient" -FILES_${PN}-robotparser=" \ -    ${libdir}/python2.7/robotparser.* \ -" - -SUMMARY_${PN}-runpy="Python script for locating/executing scripts in module namespace" -RDEPENDS_${PN}-runpy="${PN}-core ${PN}-pkgutil" -FILES_${PN}-runpy=" \ -    ${libdir}/python2.7/runpy.* \ -" - -SUMMARY_${PN}-shell="Python shell-like functionality" -RDEPENDS_${PN}-shell="${PN}-core ${PN}-re" -FILES_${PN}-shell=" \ -    ${libdir}/python2.7/cmd.* \ -    ${libdir}/python2.7/commands.* \ -    ${libdir}/python2.7/dircache.* \ -    ${libdir}/python2.7/fnmatch.* \ -    ${libdir}/python2.7/glob.* \ -    ${libdir}/python2.7/popen2.* \ -    ${libdir}/python2.7/shlex.* \ -    ${libdir}/python2.7/shutil.* \ -" - -SUMMARY_${PN}-smtpd="Python Simple Mail Transport Daemon" -RDEPENDS_${PN}-smtpd="${PN}-core ${PN}-netserver ${PN}-email ${PN}-mime" -FILES_${PN}-smtpd=" \ -    ${bindir}/smtpd.* \ -    ${libdir}/python2.7/smtpd.* \ -" - -SUMMARY_${PN}-sqlite3="Python Sqlite3 database support" -RDEPENDS_${PN}-sqlite3="${PN}-core ${PN}-datetime ${PN}-lang ${PN}-crypt ${PN}-io ${PN}-threading ${PN}-zlib" -FILES_${PN}-sqlite3=" \ -    ${libdir}/python2.7/lib-dynload/_sqlite3.so \ -    ${libdir}/python2.7/sqlite3/dbapi2.* \ -    ${libdir}/python2.7/sqlite3/__init__.* \ -    ${libdir}/python2.7/sqlite3/dump.* \ -" - -SUMMARY_${PN}-sqlite3-tests="Python Sqlite3 database support tests" -RDEPENDS_${PN}-sqlite3-tests="${PN}-core ${PN}-sqlite3" -FILES_${PN}-sqlite3-tests=" \ -    ${libdir}/python2.7/sqlite3/test \ -" - -SUMMARY_${PN}-stringold="Python string APIs [deprecated]" -RDEPENDS_${PN}-stringold="${PN}-core ${PN}-re" -FILES_${PN}-stringold=" \ -    ${libdir}/python2.7/lib-dynload/strop.so \ -    ${libdir}/python2.7/string.* \ -    ${libdir}/python2.7/stringold.* \ -" - -SUMMARY_${PN}-subprocess="Python subprocess support" -RDEPENDS_${PN}-subprocess="${PN}-core ${PN}-io ${PN}-re ${PN}-fcntl ${PN}-pickle" -FILES_${PN}-subprocess=" \ -    ${libdir}/python2.7/subprocess.* \ -" - -SUMMARY_${PN}-syslog="Python syslog interface" -RDEPENDS_${PN}-syslog="${PN}-core" -FILES_${PN}-syslog=" \ -    ${libdir}/python2.7/lib-dynload/syslog.so \ -" - -SUMMARY_${PN}-terminal="Python terminal controlling support" -RDEPENDS_${PN}-terminal="${PN}-core ${PN}-io" -FILES_${PN}-terminal=" \ -    ${libdir}/python2.7/pty.* \ -    ${libdir}/python2.7/tty.* \ -" - -SUMMARY_${PN}-tests="Python tests" -RDEPENDS_${PN}-tests="${PN}-core ${PN}-modules" -FILES_${PN}-tests=" \ -    ${libdir}/python2.7/test \ -" - -SUMMARY_${PN}-textutils="Python option parsing, text wrapping and CSV support" -RDEPENDS_${PN}-textutils="${PN}-core ${PN}-io ${PN}-re ${PN}-stringold" -FILES_${PN}-textutils=" \ -    ${libdir}/python2.7/lib-dynload/_csv.so \ -    ${libdir}/python2.7/csv.* \ -    ${libdir}/python2.7/optparse.* \ -    ${libdir}/python2.7/textwrap.* \ -" - -SUMMARY_${PN}-threading="Python threading & synchronization support" -RDEPENDS_${PN}-threading="${PN}-core ${PN}-lang" -FILES_${PN}-threading=" \ -    ${libdir}/python2.7/_threading_local.* \ -    ${libdir}/python2.7/dummy_thread.* \ -    ${libdir}/python2.7/dummy_threading.* \ -    ${libdir}/python2.7/mutex.* \ -    ${libdir}/python2.7/threading.* \ -    ${libdir}/python2.7/Queue.* \ -" - -SUMMARY_${PN}-tkinter="Python Tcl/Tk bindings" -RDEPENDS_${PN}-tkinter="${PN}-core" -FILES_${PN}-tkinter=" \ -    ${libdir}/python2.7/lib-dynload/_tkinter.so \ -    ${libdir}/python2.7/lib-tk \ -" - -SUMMARY_${PN}-unittest="Python unit testing framework" -RDEPENDS_${PN}-unittest="${PN}-core ${PN}-stringold ${PN}-lang ${PN}-io ${PN}-difflib ${PN}-pprint ${PN}-shell" -FILES_${PN}-unittest=" \ -    ${libdir}/python2.7/unittest/ \ -" - -SUMMARY_${PN}-unixadmin="Python Unix administration support" -RDEPENDS_${PN}-unixadmin="${PN}-core" -FILES_${PN}-unixadmin=" \ -    ${libdir}/python2.7/lib-dynload/nis.so \ -    ${libdir}/python2.7/lib-dynload/grp.so \ -    ${libdir}/python2.7/lib-dynload/pwd.so \ -    ${libdir}/python2.7/getpass.* \ -" - -SUMMARY_${PN}-xml="Python basic XML support" -RDEPENDS_${PN}-xml="${PN}-core ${PN}-re" -FILES_${PN}-xml=" \ -    ${libdir}/python2.7/lib-dynload/_elementtree.so \ -    ${libdir}/python2.7/lib-dynload/pyexpat.so \ -    ${libdir}/python2.7/xml \ -    ${libdir}/python2.7/xmllib.* \ -" - -SUMMARY_${PN}-xmlrpc="Python XML-RPC support" -RDEPENDS_${PN}-xmlrpc="${PN}-core ${PN}-xml ${PN}-netserver ${PN}-lang" -FILES_${PN}-xmlrpc=" \ -    ${libdir}/python2.7/xmlrpclib.* \ -    ${libdir}/python2.7/SimpleXMLRPCServer.* \ -    ${libdir}/python2.7/DocXMLRPCServer.* \ -" - -SUMMARY_${PN}-zlib="Python zlib compression support" -RDEPENDS_${PN}-zlib="${PN}-core" -FILES_${PN}-zlib=" \ -    ${libdir}/python2.7/lib-dynload/zlib.so \ -" - -SUMMARY_${PN}-modules="All Python modules" -RDEPENDS_${PN}-modules=" \ -  ${PN}-2to3 \ -  ${PN}-argparse \ -  ${PN}-audio \ -  ${PN}-bsddb \ -  ${PN}-codecs \ -  ${PN}-compile \ -  ${PN}-compiler \ -  ${PN}-compression \ -  ${PN}-contextlib \ -  ${PN}-core \ -  ${PN}-crypt \ -  ${PN}-ctypes \ -  ${PN}-curses \ -  ${PN}-datetime \ -  ${PN}-db \ -  ${PN}-debugger \ -  ${PN}-difflib \ -  ${PN}-distutils \ -  ${PN}-doctest \ -  ${PN}-email \ -  ${PN}-fcntl \ -  ${PN}-gdbm \ -  ${PN}-hotshot \ -  ${PN}-html \ -  ${PN}-idle \ -  ${PN}-image \ -  ${PN}-importlib \ -  ${PN}-io \ -  ${PN}-json \ -  ${PN}-lang \ -  ${PN}-logging \ -  ${PN}-mailbox \ -  ${PN}-math \ -  ${PN}-mime \ -  ${PN}-mmap \ -  ${PN}-multiprocessing \ -  ${PN}-netclient \ -  ${PN}-netserver \ -  ${PN}-numbers \ -  ${PN}-pickle \ -  ${PN}-pkgutil \ -  ${PN}-plistlib \ -  ${PN}-pprint \ -  ${PN}-profile \ -  ${PN}-pydoc \ -  ${PN}-re \ -  ${PN}-readline \ -  ${PN}-resource \ -  ${PN}-robotparser \ -  ${PN}-runpy \ -  ${PN}-shell \ -  ${PN}-smtpd \ -  ${PN}-sqlite3 \ -  ${PN}-sqlite3-tests \ -  ${PN}-stringold \ -  ${PN}-subprocess \ -  ${PN}-syslog \ -  ${PN}-terminal \ -  ${PN}-textutils \ -  ${PN}-threading \ -  ${PN}-tkinter \ -  ${PN}-unittest \ -  ${PN}-unixadmin \ -  ${PN}-xml \ -  ${PN}-xmlrpc \ -  ${PN}-zlib \ -" -ALLOW_EMPTY_${PN}-modules = "1" - - diff --git a/meta/recipes-devtools/python/python-native-2.7-manifest.inc b/meta/recipes-devtools/python/python-native-2.7-manifest.inc deleted file mode 100644 index b05aae0f18..0000000000 --- a/meta/recipes-devtools/python/python-native-2.7-manifest.inc +++ /dev/null @@ -1,9 +0,0 @@ - -# WARNING: This file is AUTO GENERATED: Manual edits will be lost next time I regenerate the file. -# Generator: '../scripts/contrib/python/generate-manifest-2.7.py --native' Version 20110222.2 (C) 2002-2010 Michael 'Mickey' Lauer <mlauer@vanille-media.de> - -  - -RPROVIDES += "python-modules-native python-2to3-native python-argparse-native python-audio-native python-bsddb-native python-codecs-native python-compile-native python-compiler-native python-compression-native python-contextlib-native python-core-native python-crypt-native python-ctypes-native python-curses-native python-datetime-native python-db-native python-debugger-native python-dev-native python-difflib-native python-distutils-native python-distutils-staticdev-native python-doctest-native python-email-native python-fcntl-native python-gdbm-native python-hotshot-native python-html-native python-idle-native python-image-native python-importlib-native python-io-native python-json-native python-lang-native python-logging-native python-mailbox-native python-math-native python-mime-native python-mmap-native python-multiprocessing-native python-netclient-native python-netserver-native python-numbers-native python-pickle-native python-pkgutil-native python-plistlib-native python-pprint-native python-profile-native python-pydoc-native python-re-native python-readline-native python-resource-native python-robotparser-native python-shell-native python-smtpd-native python-sqlite3-native python-sqlite3-tests-native python-stringold-native python-subprocess-native python-syslog-native python-terminal-native python-tests-native python-textutils-native python-threading-native python-tkinter-native python-unittest-native python-unixadmin-native python-xml-native python-xmlrpc-native python-zlib-native" - - diff --git a/meta/recipes-devtools/python/python-native_2.7.13.bb b/meta/recipes-devtools/python/python-native_2.7.13.bb index 7edf153489..2b74003c79 100644 --- a/meta/recipes-devtools/python/python-native_2.7.13.bb +++ b/meta/recipes-devtools/python/python-native_2.7.13.bb @@ -1,5 +1,4 @@  require python.inc -  EXTRANATIVEPATH += "bzip2-native"  DEPENDS = "openssl-native bzip2-replacement-native zlib-native readline-native sqlite3-native expat-native"  PR = "${INC_PR}.1" @@ -25,8 +24,6 @@ FILESEXTRAPATHS =. "${FILE_DIRNAME}/${PN}:"  inherit native -require python-native-${PYTHON_MAJMIN}-manifest.inc -  EXTRA_OECONF_append = " --bindir=${bindir}/${PN} --with-system-expat=${STAGING_DIR_HOST}"  EXTRA_OEMAKE = '\ @@ -59,3 +56,24 @@ do_install() {  	# installed in the native sysroot, so disable user site support.  	sed -i -e 's,^\(ENABLE_USER_SITE = \).*,\1False,' ${D}${libdir}/python${PYTHON_MAJMIN}/site.py  } + +python(){ + +    # Read JSON manifest +    import json +    pythondir = d.getVar('THISDIR',True) +    with open(pythondir+'/python/python2-manifest.json') as manifest_file: +        python_manifest=json.load(manifest_file) + +    rprovides = d.getVar('RPROVIDES').split() + +    # Hardcoded since it cant be python-native-foo, should be python-foo-native +    pn = 'python' + +    for key in python_manifest: +        pypackage = pn + '-' + key + '-native' +        if pypackage not in rprovides: +              rprovides.append(pypackage) + +    d.setVar('RPROVIDES', ' '.join(rprovides)) +} diff --git a/meta/recipes-devtools/python/python/create_manifest2.py b/meta/recipes-devtools/python/python/create_manifest2.py new file mode 100644 index 0000000000..bd64ec3ee7 --- /dev/null +++ b/meta/recipes-devtools/python/python/create_manifest2.py @@ -0,0 +1,277 @@ +# This script is used as a bitbake task to create a new python manifest +# $ bitbake python -c create_manifest +# +# Our goal is to keep python-core as small as posible and add other python +# packages only when the user needs them, hence why we split upstream python +# into several packages. +# +# In a very simplistic way what this does is:  +# Launch python and see specifically what is required for it to run at a minimum +# +# Go through the python-manifest file and launch a separate task for every single +# one of the files on each package, this task will check what was required for that +# specific module to run, these modules will be called dependencies. +# The output of such task will be a list of the modules or dependencies that were +# found for that file. +# +# Such output will be parsed by this script, we will look for each dependency on the +# manifest and if we find that another package already includes it, then we will add +# that package as an RDEPENDS to the package we are currently checking; in case we dont +# find the current dependency on any other package we will add it to the current package +# as part of FILES. +# +# +# This way we will create a new manifest from the data structure that was built during +# this process, ont this new manifest each package will contain specifically only +# what it needs to run. +# +# There are some caveats which we try to deal with, such as repeated files on different +# packages, packages that include folders, wildcards, and special packages. +# Its also important to note that this method only works for python files, and shared +# libraries. Static libraries, header files and binaries need to be dealt with manually. +# +# Author: Alejandro Enedino Hernandez Samaniego "aehs29" <aehs29@gmail.com> + + +import sys +import subprocess +import json +import os + +# Hack to get native python search path (for folders), not fond of it but it works for now +pivot='recipe-sysroot-native' +for p in sys.path: +  if pivot in p: +    nativelibfolder=p[:p.find(pivot)+len(pivot)] + +# Empty dict to hold the whole manifest +new_manifest = {} + +# Check for repeated files, folders and wildcards +allfiles=[] +repeated=[] +wildcards=[] + +hasfolders=[] +allfolders=[] + +def isFolder(value): +  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')): +    return True +  else: +    return False + +# Read existing JSON manifest +with open('python2-manifest.json') as manifest: +  old_manifest=json.load(manifest) + + +# First pass to get core-package functionality, because we base everything on the fact that core is actually working +# Not exactly the same so it should not be a function +print ("Getting dependencies for core package:") + +# Special call to check for core package +output = subprocess.check_output([sys.executable, 'get_module_deps2.py', 'python-core-package']) +for item in output.split(): +    # We append it so it doesnt hurt what we currently have: +    if item not in old_manifest['core']['files']: +        # We use the same data structure since its the one which will be used to check +        # dependencies for other packages +        old_manifest['core']['files'].append(item) + +for value in old_manifest['core']['files']: +  # Ignore folders, since we don't import those, difficult to handle multilib +  if isFolder(value): +    # Pass it directly +    if value not in old_manifest['core']['files']: +      old_manifest['core']['files'].append(value) +  # Ignore binaries, since we don't import those, assume it was added correctly (manually) +  if '${bindir}' in value: +    # Pass it directly +    if value not in old_manifest['core']['files']: +      old_manifest['core']['files'].append(value) +    continue +  # Ignore empty values +  if value == '': +    continue +  if '${includedir}' in value: +    if value not in old_manifest['core']['files']: +      old_manifest['core']['files'].append(value) +    continue +  # Get module name , shouldnt be affected by libdir/bindir +  value = os.path.splitext(os.path.basename(os.path.normpath(value)))[0] + + +  # Launch separate task for each module for deterministic behavior +  # Each module will only import what is necessary for it to work in specific +  print ('Getting dependencies for module: %s' % value) +  output = subprocess.check_output([sys.executable, 'get_module_deps2.py', '%s' % value]) +  for item in output.split(): +    # We append it so it doesnt hurt what we currently have: +    if item not in old_manifest['core']['files']: +      old_manifest['core']['files'].append(item) + +# We check which packages include folders +for key in old_manifest: +    for value in old_manifest[key]['files']: +        # Ignore folders, since we don't import those, difficult to handle multilib +        if isFolder(value): +            print ('%s is a folder' % value) +            if key not in hasfolders: +                hasfolders.append(key) +            if value not in allfolders: +                allfolders.append(value) + +for key in old_manifest: +    # Use an empty dict as data structure to hold data for each package and fill it up +    new_manifest[key]={} +    new_manifest[key]['files']=[] +    new_manifest[key]['rdepends']=[] +    # All packages should depend on core +    if key != 'core': +         new_manifest[key]['rdepends'].append('core') +    new_manifest[key]['summary']=old_manifest[key]['summary'] + +    # Handle special cases, we assume that when they were manually added  +    # to the manifest we knew what we were doing. +    print ('Handling package %s' % key) +    special_packages=['misc', 'modules', 'dev'] +    if key in special_packages or 'staticdev' in key: +        print('Passing %s package directly' % key) +        new_manifest[key]=old_manifest[key] +        continue + +    for value in old_manifest[key]['files']: +        # We already handled core on the first pass +        if key == 'core': +            new_manifest[key]['files'].append(value) +            continue +        # Ignore folders, since we don't import those, difficult to handle multilib +        if isFolder(value): +            # Pass folders directly +            new_manifest[key]['files'].append(value) +        # Ignore binaries, since we don't import those +        if '${bindir}' in value: +            # Pass it directly to the new manifest data structure +            if value not in new_manifest[key]['files']: +                new_manifest[key]['files'].append(value) +            continue +        # Ignore empty values +        if value == '': +            continue +        if '${includedir}' in value: +            if value not in new_manifest[key]['files']: +                new_manifest[key]['files'].append(value) +            continue +        # Get module name , shouldnt be affected by libdir/bindir +        value = os.path.splitext(os.path.basename(os.path.normpath(value)))[0] + +        # Launch separate task for each module for deterministic behavior +        # Each module will only import what is necessary for it to work in specific +        print ('Getting dependencies for module: %s' % value) +        output = subprocess.check_output([sys.executable, 'get_module_deps2.py', '%s' % value]) + +        # We can print dependencies for debugging purposes +        #print (output) +        # Output will have all dependencies +        for item in output.split(): + +            # Warning: This first part is ugly +            # One of the dependencies that was found, could be inside of one of the folders included by another package +            # We need to check if this happens so we can add the package containing the folder as an RDEPENDS +            # e.g. Folder encodings contained in codecs +            # This would be solved if no packages included any folders + +            # This can be done in two ways: +            # 1 - We assume that if we take out the filename from the path we would get +            #   the folder string, then we would check if folder string is in the list of folders +            #   This would not work if a package contains a folder which contains another folder +            #   e.g. path/folder1/folder2/filename  folder_string= path/folder1/folder2 +            #   folder_string would not match any value contained in the list of folders +            # +            # 2 - We do it the other way around, checking if the folder is contained in the path +            #   e.g. path/folder1/folder2/filename  folder_string= path/folder1/folder2 +            #   is folder_string inside path/folder1/folder2/filename?,  +            #   Yes, it works, but we waste a couple of milliseconds. + +            inFolders=False +            for folder in allfolders: +                if folder in item: +                    inFolders = True # Did we find a folder? +                    folderFound = False # Second flag to break inner for +                    # Loop only through packages which contain folders +                    for keyfolder in hasfolders: +                        if (folderFound == False): +                            #print("Checking folder %s on package %s" % (item,keyfolder)) +                            for file_folder in old_manifest[keyfolder]['files']: +                                if file_folder==folder: +                                    print ('%s found in %s' % (folder, keyfolder)) +                                    folderFound = True +                                    if keyfolder not in new_manifest[key]['rdepends'] and keyfolder != key: +                                        new_manifest[key]['rdepends'].append(keyfolder) +                        else: +                            break + +            # A folder was found so we're done with this item, we can go on +            if inFolders: +                continue + +            # We might already have it on the dictionary since it could depend on a (previously checked) module +            if item not in new_manifest[key]['files']: +                # Handle core as a special package, we already did it so we pass it to NEW data structure directly +                if key=='core': +                  print('Adding %s to %s FILES' % (item, key)) +                  if item.endswith('*'): +                      wildcards.append(item) +                  new_manifest[key]['files'].append(item) + +                  # Check for repeated files +                  if item not in allfiles: +                      allfiles.append(item) +                  else: +                      repeated.append(item) + +                else: + +                    # Check if this dependency is already contained on another package, so we add it +                    # as an RDEPENDS, or if its not, it means it should be contained on the current +                    # package, so we should add it to FILES +                    for newkey in old_manifest: +                        # Debug +                        #print("Checking %s " % item + " in %s" % newkey) +                        if item in old_manifest[newkey]['files']:       +                                # Since were nesting, we need to check its not the same key +                                if(newkey!=key): +                                    if newkey not in new_manifest[key]['rdepends']: +                                       # Add it to the new manifest data struct +                                       # Debug +                                       print('Adding %s to %s RDEPENDS, because it contains %s' % (newkey, key, item)) +                                       new_manifest[key]['rdepends'].append(newkey) +                                    break +                    else: +                      # Debug +                      print('Adding %s to %s FILES' % (item, key)) +                      # Since it wasnt found on another package, its not an RDEP, so add it to FILES for this package +                      new_manifest[key]['files'].append(item) +                      if item.endswith('*'): +                          wildcards.append(item) +                      if item not in allfiles: +                          allfiles.append(item) +                      else: +                          repeated.append(item) + +print ('The following files are repeated (contained in more than one package), please check which package should get it:') +print (repeated) +print('The following files contain wildcards, please check they are necessary') +print(wildcards) +print('The following files contain folders, please check they are necessary') +print(hasfolders) + +# Sort it just so it looks nice  +for key in new_manifest: +    new_manifest[key]['files'].sort() +    new_manifest[key]['rdepends'].sort() + +# Create the manifest from the data structure that was built +with open('python2-manifest.json.new','w') as outfile: +    json.dump(new_manifest,outfile,sort_keys=True, indent=4) diff --git a/meta/recipes-devtools/python/python/get_module_deps2.py b/meta/recipes-devtools/python/python/get_module_deps2.py new file mode 100644 index 0000000000..73e7c6f6dc --- /dev/null +++ b/meta/recipes-devtools/python/python/get_module_deps2.py @@ -0,0 +1,112 @@ +# This script is launched on separate task for each python module +# It checks for dependencies for that specific module and prints  +# them out, the output of this execution will have all dependencies +# for a specific module, which will be parsed an dealt on create_manifest.py +# +# Author: Alejandro Enedino Hernandez Samaniego "aehs29" <aehs29@gmail.com> + + +# We can get a log per module, for all the dependencies that were found, but its messy. +debug=False + +import sys + +# We can get a list of the modules which are currently required to run python +# so we run python-core and get its modules, we then import what we need +# and check what modules are currently running, if we substract them from the +# modules we had initially, we get the dependencies for the module we imported. + +# We use importlib to achieve this, so we also need to know what modules importlib needs +import importlib + +core_deps=set(sys.modules) + +def fix_path(dep_path): +    import os +    # We DONT want the path on our HOST system +    pivot='recipe-sysroot-native' +    dep_path=dep_path[dep_path.find(pivot)+len(pivot):] + +    if '/usr/bin' in dep_path: +        dep_path = dep_path.replace('/usr/bin''${bindir}') + +    # Handle multilib, is there a better way? +    if '/usr/lib32' in dep_path: +        dep_path = dep_path.replace('/usr/lib32','${libdir}') +    if '/usr/lib64' in dep_path: +        dep_path = dep_path.replace('/usr/lib64','${libdir}') +    if '/usr/lib' in dep_path: +        dep_path = dep_path.replace('/usr/lib','${libdir}') +    if '/usr/include' in dep_path: +        dep_path = dep_path.replace('/usr/include','${includedir}') +    if '__init__.' in dep_path: +        dep_path =  os.path.split(dep_path)[0] + +    # If a *.pyc file was imported, we replace it with *.py (since we deal with PYCs on create_manifest) +    if '.pyc' in dep_path: +        dep_path = dep_path.replace('.pyc','.py') + +    return dep_path + +# Module to import was passed as an argument +current_module =  str(sys.argv[1]).rstrip() +if(debug==True): +	log = open('log_%s' % current_module,'w') +        log.write('Module %s generated the following dependencies:\n' % current_module) +try: +    importlib.import_module('%s' % current_module) +except ImportError as e: +    if (debug==True): +        log.write('Module was not found') +    pass + + +# Get current module dependencies, dif will contain a list of specific deps for this module +module_deps=set(sys.modules) + +# We handle the core package (1st pass on create_manifest.py) as a special case +if current_module == 'python-core-package': +    dif = core_deps +else: +    dif = module_deps-core_deps + + +# Check where each dependency came from +for item in dif: +    dep_path='' +    try: +        if (debug==True): +            log.write('Calling: sys.modules[' + '%s' % item + '].__file__\n') +        dep_path = sys.modules['%s' % item].__file__ +    except AttributeError as e: +        # Deals with thread (builtin module) not having __file__ attribute +	if debug==True: +            log.write(item + ' ') +            log.write(str(e)) +	    log.write('\n') +            pass +    except NameError as e: +        # Deals with NameError: name 'dep_path' is not defined +        # because module is not found (wasn't compiled?), e.g. bddsm +        if (debug==True): +            log.write(item+' ')  +            log.write(str(e))                                               +        pass + +    # Site-customize is a special case since we (OpenEmbedded) put it there manually +    if 'sitecustomize' in dep_path: +        dep_path = '${libdir}/python2.7/sitecustomize.py' +        # Prints out result, which is what will be used by create_manifest +        print (dep_path) +        continue + +    dep_path = fix_path(dep_path) + +    if (debug==True): +        log.write(dep_path+'\n') + +    # Prints out result, which is what will be used by create_manifest +    print (dep_path) + +if debug==True: +    log.close() diff --git a/meta/recipes-devtools/python/python/python2-manifest.json b/meta/recipes-devtools/python/python/python2-manifest.json new file mode 100644 index 0000000000..8ebc715fc1 --- /dev/null +++ b/meta/recipes-devtools/python/python/python2-manifest.json @@ -0,0 +1,1032 @@ +{ +    "2to3": { +        "files": [ +            "${bindir}/2to3", +            "${libdir}/python2.7/lib2to3" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python automated Python 2 to 3 code translator" +    }, +    "argparse": { +        "files": [ +            "${libdir}/python2.7/argparse.py" +        ], +        "rdepends": [ +            "codecs", +            "core", +            "lang", +            "textutils" +        ], +        "summary": "Python command line argument parser" +    }, +    "audio": { +        "files": [ +            "${libdir}/python2.7/audiodev.py", +            "${libdir}/python2.7/chunk.py", +            "${libdir}/python2.7/lib-dynload/audioop.so", +            "${libdir}/python2.7/lib-dynload/ossaudiodev.so", +            "${libdir}/python2.7/sndhdr.py", +            "${libdir}/python2.7/sunau.py", +            "${libdir}/python2.7/sunaudio.py", +            "${libdir}/python2.7/toaiff.py", +            "${libdir}/python2.7/wave.py" +        ], +        "rdepends": [ +            "core", +            "crypt", +            "fcntl", +            "io", +            "math" +        ], +        "summary": "Python Audio Handling" +    }, +    "bsddb": { +        "files": [ +            "${libdir}/python2.7/bsddb", +            "${libdir}/python2.7/lib-dynload/_bsddb.so" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python bindings for the Berkeley Database" +    }, +    "codecs": { +        "files": [ +            "${libdir}/python2.7/gettext.py", +            "${libdir}/python2.7/lib-dynload/_codecs_cn.so", +            "${libdir}/python2.7/lib-dynload/_codecs_hk.so", +            "${libdir}/python2.7/lib-dynload/_codecs_iso2022.so", +            "${libdir}/python2.7/lib-dynload/_codecs_jp.so", +            "${libdir}/python2.7/lib-dynload/_codecs_kr.so", +            "${libdir}/python2.7/lib-dynload/_codecs_tw.so", +            "${libdir}/python2.7/lib-dynload/_multibytecodec.so", +            "${libdir}/python2.7/lib-dynload/unicodedata.so", +            "${libdir}/python2.7/locale.py", +            "${libdir}/python2.7/stringprep.py", +            "${libdir}/python2.7/xdrlib.py" +        ], +        "rdepends": [ +            "core", +            "io", +            "lang" +        ], +        "summary": "Python codec" +    }, +    "compile": { +        "files": [ +            "${libdir}/python2.7/compileall.py", +            "${libdir}/python2.7/py_compile.py" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python bytecode compilation support" +    }, +    "compiler": { +        "files": [ +            "${libdir}/python2.7/compiler" +        ], +        "rdepends": [ +            "core", +            "io", +            "lang" +        ], +        "summary": "Python compiler support" +    }, +    "compression": { +        "files": [ +            "${libdir}/python2.7/gzip.py", +            "${libdir}/python2.7/lib-dynload/bz2.so", +            "${libdir}/python2.7/tarfile.py", +            "${libdir}/python2.7/zipfile.py" +        ], +        "rdepends": [ +            "core", +            "io", +            "shell", +            "unixadmin", +            "zlib" +        ], +        "summary": "Python high-level compression support" +    }, +    "contextlib": { +        "files": [ +            "${libdir}/python2.7/contextlib.py" +        ], +        "rdepends": [ +            "core", +            "lang" +        ], +        "summary": "Python utilities for with-statementcontexts." +    }, +    "core": { +        "files": [ +            "${bindir}/python*", +            "${includedir}/python2.7/pyconfig*.h", +            "${libdir}/python2.7/ConfigParser.py", +            "${libdir}/python2.7/UserDict.py", +            "${libdir}/python2.7/UserList.py", +            "${libdir}/python2.7/UserString.py", +            "${libdir}/python2.7/__future__.py", +            "${libdir}/python2.7/_abcoll.py", +            "${libdir}/python2.7/_sysconfigdata.py", +            "${libdir}/python2.7/_weakrefset.py", +            "${libdir}/python2.7/abc.py", +            "${libdir}/python2.7/ast.py", +            "${libdir}/python2.7/atexit.py", +            "${libdir}/python2.7/codecs.py", +            "${libdir}/python2.7/collections.py", +            "${libdir}/python2.7/copy.py", +            "${libdir}/python2.7/copy_reg.py", +            "${libdir}/python2.7/encodings", +            "${libdir}/python2.7/encodings/aliases.py", +            "${libdir}/python2.7/encodings/utf_8.py", +            "${libdir}/python2.7/genericpath.py", +            "${libdir}/python2.7/getopt.py", +            "${libdir}/python2.7/heapq.py", +            "${libdir}/python2.7/importlib", +            "${libdir}/python2.7/keyword.py", +            "${libdir}/python2.7/lib-dynload/_collections.so", +            "${libdir}/python2.7/lib-dynload/_heapq.so", +            "${libdir}/python2.7/lib-dynload/_locale.so", +            "${libdir}/python2.7/lib-dynload/_struct.so", +            "${libdir}/python2.7/lib-dynload/binascii.so", +            "${libdir}/python2.7/lib-dynload/itertools.so", +            "${libdir}/python2.7/lib-dynload/operator.so", +            "${libdir}/python2.7/lib-dynload/readline.so", +            "${libdir}/python2.7/lib-dynload/strop.so", +            "${libdir}/python2.7/lib-dynload/time.so", +            "${libdir}/python2.7/lib-dynload/xreadlines.so", +            "${libdir}/python2.7/linecache.py", +            "${libdir}/python2.7/new.py", +            "${libdir}/python2.7/os.py", +            "${libdir}/python2.7/platform.py", +            "${libdir}/python2.7/posixpath.py", +            "${libdir}/python2.7/re.py", +            "${libdir}/python2.7/rlcompleter.py", +            "${libdir}/python2.7/site.py", +            "${libdir}/python2.7/sitecustomize.py", +            "${libdir}/python2.7/sre_compile.py", +            "${libdir}/python2.7/sre_constants.py", +            "${libdir}/python2.7/sre_parse.py", +            "${libdir}/python2.7/stat.py", +            "${libdir}/python2.7/string.py", +            "${libdir}/python2.7/struct.py", +            "${libdir}/python2.7/sysconfig.py", +            "${libdir}/python2.7/traceback.py", +            "${libdir}/python2.7/types.py", +            "${libdir}/python2.7/warnings.py", +            "${libdir}/python2.7/weakref.py" +        ], +        "rdepends": [], +        "summary": "Python interpreter and core modules" +    }, +    "crypt": { +        "files": [ +            "${libdir}/python2.7/hashlib.py", +            "${libdir}/python2.7/lib-dynload/_hashlib.so", +            "${libdir}/python2.7/lib-dynload/crypt.so", +            "${libdir}/python2.7/md5.py", +            "${libdir}/python2.7/sha.py" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python basic cryptographic and hashing support" +    }, +    "ctypes": { +        "files": [ +            "${libdir}/python2.7/ctypes", +            "${libdir}/python2.7/lib-dynload/_ctypes.so", +            "${libdir}/python2.7/lib-dynload/_ctypes_test.so" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python C types support" +    }, +    "curses": { +        "files": [ +            "${libdir}/python2.7/curses", +            "${libdir}/python2.7/lib-dynload/_curses.so", +            "${libdir}/python2.7/lib-dynload/_curses_panel.so" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python curses support" +    }, +    "datetime": { +        "files": [ +            "${libdir}/python2.7/_strptime.py", +            "${libdir}/python2.7/calendar.py", +            "${libdir}/python2.7/lib-dynload/datetime.so" +        ], +        "rdepends": [ +            "codecs", +            "core", +            "lang" +        ], +        "summary": "Python calendar and time support" +    }, +    "db": { +        "files": [ +            "${libdir}/python2.7/anydbm.py", +            "${libdir}/python2.7/dbhash.py", +            "${libdir}/python2.7/dumbdbm.py", +            "${libdir}/python2.7/lib-dynload/dbm.so", +            "${libdir}/python2.7/whichdb.py" +        ], +        "rdepends": [ +            "bsddb", +            "core", +            "gdbm" +        ], +        "summary": "Python file-based database support" +    }, +    "debugger": { +        "files": [ +            "${libdir}/python2.7/bdb.py", +            "${libdir}/python2.7/pdb.py" +        ], +        "rdepends": [ +            "core", +            "io", +            "lang", +            "pprint", +            "shell" +        ], +        "summary": "Python debugger" +    }, +    "dev": { +        "files": [ +            "${base_libdir}/*.a", +            "${base_libdir}/*.o", +            "${datadir}/aclocal", +            "${datadir}/pkgconfig", +            "${includedir}", +            "${libdir}/*.a", +            "${libdir}/*.la", +            "${libdir}/*.o", +            "${libdir}/lib*${SOLIBSDEV}", +            "${libdir}/pkgconfig", +            "${libdir}/python2.7/config/Makefile" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python development package" +    }, +    "difflib": { +        "files": [ +            "${libdir}/python2.7/difflib.py" +        ], +        "rdepends": [ +            "core", +            "lang" +        ], +        "summary": "Python helpers for computing deltas between objects" +    }, +    "distutils": { +        "files": [ +            "${libdir}/python2.7/config", +            "${libdir}/python2.7/distutils" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python Distribution Utilities" +    }, +    "distutils-staticdev": { +        "files": [ +            "${libdir}/python2.7/config/lib*.a" +        ], +        "rdepends": [ +            "distutils" +        ], +        "summary": "Python distribution utilities (static libraries)" +    }, +    "doctest": { +        "files": [ +            "${libdir}/python2.7/doctest.py" +        ], +        "rdepends": [ +            "core", +            "crypt", +            "debugger", +            "difflib", +            "fcntl", +            "io", +            "lang", +            "math", +            "pprint", +            "shell", +            "unittest" +        ], +        "summary": "Python framework for running examples in docstrings" +    }, +    "email": { +        "files": [ +            "${libdir}/python2.7/email", +            "${libdir}/python2.7/imaplib.py" +        ], +        "rdepends": [ +            "contextlib", +            "core", +            "crypt", +            "fcntl", +            "io", +            "lang", +            "math", +            "netclient", +            "pickle", +            "subprocess", +            "textutils" +        ], +        "summary": "Python email support" +    }, +    "fcntl": { +        "files": [ +            "${libdir}/python2.7/lib-dynload/fcntl.so" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python's fcntl interface" +    }, +    "gdbm": { +        "files": [ +            "${libdir}/python2.7/lib-dynload/gdbm.so" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python GNU database support" +    }, +    "hotshot": { +        "files": [ +            "${libdir}/python2.7/hotshot", +            "${libdir}/python2.7/lib-dynload/_hotshot.so" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python hotshot performance profiler" +    }, +    "html": { +        "files": [ +            "${libdir}/python2.7/HTMLParser.py", +            "${libdir}/python2.7/formatter.py", +            "${libdir}/python2.7/htmlentitydefs.py", +            "${libdir}/python2.7/htmllib.py", +            "${libdir}/python2.7/markupbase.py", +            "${libdir}/python2.7/sgmllib.py" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python HTML processing support" +    }, +    "idle": { +        "files": [ +            "${bindir}/idle", +            "${libdir}/python2.7/idlelib" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python Integrated Development Environment" +    }, +    "image": { +        "files": [ +            "${libdir}/python2.7/colorsys.py", +            "${libdir}/python2.7/imghdr.py" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python graphical image handling" +    }, +    "io": { +        "files": [ +            "${libdir}/python2.7/StringIO.py", +            "${libdir}/python2.7/_pyio.py", +            "${libdir}/python2.7/io.py", +            "${libdir}/python2.7/lib-dynload/_io.so", +            "${libdir}/python2.7/lib-dynload/_socket.so", +            "${libdir}/python2.7/lib-dynload/_ssl.so", +            "${libdir}/python2.7/lib-dynload/cStringIO.so", +            "${libdir}/python2.7/lib-dynload/select.so", +            "${libdir}/python2.7/lib-dynload/termios.so", +            "${libdir}/python2.7/pipes.py", +            "${libdir}/python2.7/socket.py", +            "${libdir}/python2.7/ssl.py", +            "${libdir}/python2.7/tempfile.py" +        ], +        "rdepends": [ +            "contextlib", +            "core", +            "crypt", +            "fcntl", +            "lang", +            "math", +            "netclient", +            "textutils" +        ], +        "summary": "Python low-level I/O" +    }, +    "json": { +        "files": [ +            "${libdir}/python2.7/json", +            "${libdir}/python2.7/lib-dynload/_json.so" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python JSON support" +    }, +    "lang": { +        "files": [ +            "${libdir}/python2.7/bisect.py", +            "${libdir}/python2.7/code.py", +            "${libdir}/python2.7/codeop.py", +            "${libdir}/python2.7/dis.py", +            "${libdir}/python2.7/functools.py", +            "${libdir}/python2.7/inspect.py", +            "${libdir}/python2.7/lib-dynload/_bisect.so", +            "${libdir}/python2.7/lib-dynload/_functools.so", +            "${libdir}/python2.7/lib-dynload/array.so", +            "${libdir}/python2.7/lib-dynload/parser.so", +            "${libdir}/python2.7/opcode.py", +            "${libdir}/python2.7/repr.py", +            "${libdir}/python2.7/symbol.py", +            "${libdir}/python2.7/token.py", +            "${libdir}/python2.7/tokenize.py" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python low-level language support" +    }, +    "logging": { +        "files": [ +            "${libdir}/python2.7/logging" +        ], +        "rdepends": [ +            "core", +            "io", +            "threading" +        ], +        "summary": "Python logging support" +    }, +    "mailbox": { +        "files": [ +            "${libdir}/python2.7/mailbox.py" +        ], +        "rdepends": [ +            "codecs", +            "contextlib", +            "core", +            "crypt", +            "datetime", +            "email", +            "fcntl", +            "io", +            "lang", +            "math", +            "mime", +            "netclient", +            "textutils" +        ], +        "summary": "Python mailbox format support" +    }, +    "math": { +        "files": [ +            "${libdir}/python2.7/lib-dynload/_random.so", +            "${libdir}/python2.7/lib-dynload/cmath.so", +            "${libdir}/python2.7/lib-dynload/math.so", +            "${libdir}/python2.7/random.py", +            "${libdir}/python2.7/sets.py" +        ], +        "rdepends": [ +            "core", +            "crypt" +        ], +        "summary": "Python math support" +    }, +    "mime": { +        "files": [ +            "${libdir}/python2.7/MimeWriter.py", +            "${libdir}/python2.7/mimetools.py", +            "${libdir}/python2.7/mimetypes.py", +            "${libdir}/python2.7/quopri.py", +            "${libdir}/python2.7/rfc822.py", +            "${libdir}/python2.7/uu.py" +        ], +        "rdepends": [ +            "contextlib", +            "core", +            "crypt", +            "fcntl", +            "io", +            "lang", +            "math", +            "netclient", +            "textutils" +        ], +        "summary": "Python MIME handling APIs" +    }, +    "mmap": { +        "files": [ +            "${libdir}/python2.7/lib-dynload/mmap.so" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python memory-mapped file support" +    }, +    "modules": { +        "files": [], +        "rdepends": [ +            "2to3", +            "argparse", +            "audio", +            "bsddb", +            "codecs", +            "compile", +            "compiler", +            "compression", +            "contextlib", +            "core", +            "crypt", +            "ctypes", +            "curses", +            "datetime", +            "db", +            "debugger", +            "difflib", +            "distutils", +            "doctest", +            "email", +            "fcntl", +            "gdbm", +            "hotshot", +            "html", +            "idle", +            "image", +            "io", +            "json", +            "lang", +            "logging", +            "mailbox", +            "math", +            "mime", +            "mmap", +            "multiprocessing", +            "netclient", +            "netserver", +            "numbers", +            "pickle", +            "pkgutil", +            "plistlib", +            "pprint", +            "profile", +            "pydoc", +            "re", +            "resource", +            "robotparser", +            "shell", +            "smtpd", +            "sqlite3", +            "sqlite3", +            "stringold", +            "subprocess", +            "syslog", +            "terminal", +            "textutils", +            "threading", +            "tkinter", +            "unittest", +            "unixadmin", +            "xml", +            "xmlrpc", +            "zlib" +        ], +        "summary": "All Python modules" +    }, +    "multiprocessing": { +        "files": [ +            "${libdir}/python2.7/lib-dynload/_multiprocessing.so", +            "${libdir}/python2.7/multiprocessing" +        ], +        "rdepends": [ +            "core", +            "fcntl", +            "io", +            "pickle", +            "subprocess", +            "threading" +        ], +        "summary": "Python multiprocessing support" +    }, +    "netclient": { +        "files": [ +            "${libdir}/python2.7/Cookie.py", +            "${libdir}/python2.7/_LWPCookieJar.py", +            "${libdir}/python2.7/_MozillaCookieJar.py", +            "${libdir}/python2.7/base64.py", +            "${libdir}/python2.7/cookielib.py", +            "${libdir}/python2.7/ftplib.py", +            "${libdir}/python2.7/hmac.py", +            "${libdir}/python2.7/httplib.py", +            "${libdir}/python2.7/nntplib.py", +            "${libdir}/python2.7/poplib.py", +            "${libdir}/python2.7/smtplib.py", +            "${libdir}/python2.7/telnetlib.py", +            "${libdir}/python2.7/urllib.py", +            "${libdir}/python2.7/urllib2.py", +            "${libdir}/python2.7/urlparse.py", +            "${libdir}/python2.7/uuid.py" +        ], +        "rdepends": [ +            "codecs", +            "contextlib", +            "core", +            "crypt", +            "ctypes", +            "datetime", +            "email", +            "fcntl", +            "io", +            "lang", +            "math", +            "mime", +            "pickle", +            "subprocess", +            "textutils", +            "threading" +        ], +        "summary": "Python Internet Protocol clients" +    }, +    "netserver": { +        "files": [ +            "${libdir}/python2.7/BaseHTTPServer.py", +            "${libdir}/python2.7/CGIHTTPServer.py", +            "${libdir}/python2.7/SimpleHTTPServer.py", +            "${libdir}/python2.7/SocketServer.py", +            "${libdir}/python2.7/cgi.py" +        ], +        "rdepends": [ +            "contextlib", +            "core", +            "crypt", +            "fcntl", +            "io", +            "lang", +            "math", +            "mime", +            "netclient", +            "shell", +            "textutils", +            "threading", +            "unixadmin" +        ], +        "summary": "Python Internet Protocol servers" +    }, +    "numbers": { +        "files": [ +            "${libdir}/python2.7/decimal.py", +            "${libdir}/python2.7/fractions.py", +            "${libdir}/python2.7/numbers.py" +        ], +        "rdepends": [ +            "codecs", +            "core", +            "lang", +            "math", +            "threading" +        ], +        "summary": "Python number APIs" +    }, +    "pickle": { +        "files": [ +            "${libdir}/python2.7/lib-dynload/cPickle.so", +            "${libdir}/python2.7/pickle.py", +            "${libdir}/python2.7/pickletools.py", +            "${libdir}/python2.7/shelve.py" +        ], +        "rdepends": [ +            "core", +            "io" +        ], +        "summary": "Python serialisation/persistence support" +    }, +    "pkgutil": { +        "files": [ +            "${libdir}/python2.7/pkgutil.py" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python package extension utility support" +    }, +    "plistlib": { +        "files": [ +            "${libdir}/python2.7/plistlib.py" +        ], +        "rdepends": [ +            "core", +            "datetime", +            "io" +        ], +        "summary": "Generate and parse Mac OS X .plist files" +    }, +    "pprint": { +        "files": [ +            "${libdir}/python2.7/pprint.py" +        ], +        "rdepends": [ +            "core", +            "io" +        ], +        "summary": "Python pretty-print support" +    }, +    "profile": { +        "files": [ +            "${libdir}/python2.7/cProfile.py", +            "${libdir}/python2.7/lib-dynload/_lsprof.so", +            "${libdir}/python2.7/profile.py", +            "${libdir}/python2.7/pstats.py" +        ], +        "rdepends": [ +            "codecs", +            "core", +            "lang", +            "resource", +            "textutils" +        ], +        "summary": "Python basic performance profiling support" +    }, +    "pydoc": { +        "files": [ +            "${bindir}/pydoc", +            "${libdir}/python2.7/pydoc.py", +            "${libdir}/python2.7/pydoc_data" +        ], +        "rdepends": [ +            "codecs", +            "core", +            "lang", +            "pkgutil" +        ], +        "summary": "Python interactive help support" +    }, +    "re": { +        "files": [ +            "${libdir}/python2.7/sre.py" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python Regular Expression APIs" +    }, +    "resource": { +        "files": [ +            "${libdir}/python2.7/lib-dynload/resource.so" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python resource control interface" +    }, +    "robotparser": { +        "files": [ +            "${libdir}/python2.7/robotparser.py" +        ], +        "rdepends": [ +            "contextlib", +            "core", +            "io", +            "lang", +            "netclient", +            "textutils" +        ], +        "summary": "Python robots.txt parser" +    }, +    "shell": { +        "files": [ +            "${libdir}/python2.7/cmd.py", +            "${libdir}/python2.7/commands.py", +            "${libdir}/python2.7/dircache.py", +            "${libdir}/python2.7/fnmatch.py", +            "${libdir}/python2.7/glob.py", +            "${libdir}/python2.7/popen2.py", +            "${libdir}/python2.7/shlex.py", +            "${libdir}/python2.7/shutil.py" +        ], +        "rdepends": [ +            "core", +            "io", +            "unixadmin" +        ], +        "summary": "Python shell-like functionality" +    }, +    "smtpd": { +        "files": [ +            "${bindir}/smtpd.py", +            "${libdir}/python2.7/asynchat.py", +            "${libdir}/python2.7/asyncore.py", +            "${libdir}/python2.7/smtpd.py" +        ], +        "rdepends": [ +            "core", +            "fcntl", +            "io", +            "lang" +        ], +        "summary": "Python Simple Mail Transport Daemon" +    }, +    "sqlite3": { +        "files": [ +            "${libdir}/python2.7/lib-dynload/_sqlite3.so" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python Sqlite3 database support" +    }, +    "sqlite3-tests": { +        "files": [ +            "${libdir}/python2.7/sqlite3/test" +        ], +        "rdepends": [ +            "core", +            "tests" +        ], +        "summary": "Python Sqlite3 database support tests" +    }, +    "stringold": { +        "files": [ +            "${libdir}/python2.7/stringold.py" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python string APIs [deprecated]" +    }, +    "subprocess": { +        "files": [ +            "${libdir}/python2.7/subprocess.py" +        ], +        "rdepends": [ +            "core", +            "fcntl", +            "io", +            "pickle" +        ], +        "summary": "Python subprocess support" +    }, +    "syslog": { +        "files": [ +            "${libdir}/python2.7/lib-dynload/syslog.so" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python syslog interface" +    }, +    "terminal": { +        "files": [ +            "${libdir}/python2.7/pty.py", +            "${libdir}/python2.7/tty.py" +        ], +        "rdepends": [ +            "core", +            "io" +        ], +        "summary": "Python terminal controlling support" +    }, +    "tests": { +        "files": [ +            "${libdir}/python2.7/test" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python tests" +    }, +    "textutils": { +        "files": [ +            "${libdir}/python2.7/csv.py", +            "${libdir}/python2.7/lib-dynload/_csv.so", +            "${libdir}/python2.7/optparse.py", +            "${libdir}/python2.7/textwrap.py" +        ], +        "rdepends": [ +            "codecs", +            "core", +            "io", +            "lang" +        ], +        "summary": "Python option parsin" +    }, +    "threading": { +        "files": [ +            "${libdir}/python2.7/Queue.py", +            "${libdir}/python2.7/_threading_local.py", +            "${libdir}/python2.7/dummy_thread.py", +            "${libdir}/python2.7/dummy_threading.py", +            "${libdir}/python2.7/mutex.py", +            "${libdir}/python2.7/threading.py" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python threading & synchronization support" +    }, +    "tkinter": { +        "files": [ +            "${libdir}/python2.7/lib-tk" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python Tcl/Tk bindings" +    }, +    "unittest": { +        "files": [ +            "${libdir}/python2.7/unittest" +        ], +        "rdepends": [ +            "core", +            "difflib", +            "io", +            "lang", +            "pprint", +            "shell" +        ], +        "summary": "Python unit testing framework" +    }, +    "unixadmin": { +        "files": [ +            "${libdir}/python2.7/getpass.py", +            "${libdir}/python2.7/lib-dynload/grp.so", +            "${libdir}/python2.7/lib-dynload/nis.so" +        ], +        "rdepends": [ +            "core", +            "io" +        ], +        "summary": "Python Unix administration support" +    }, +    "xml": { +        "files": [ +            "${libdir}/python2.7/lib-dynload/_elementtree.so", +            "${libdir}/python2.7/lib-dynload/pyexpat.so", +            "${libdir}/python2.7/xml" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python basic XML support" +    }, +    "xmlrpc": { +        "files": [ +            "${libdir}/python2.7/DocXMLRPCServer.py", +            "${libdir}/python2.7/SimpleXMLRPCServer.py" +        ], +        "rdepends": [ +            "codecs", +            "compression", +            "contextlib", +            "core", +            "crypt", +            "datetime", +            "fcntl", +            "io", +            "lang", +            "math", +            "mime", +            "netclient", +            "netserver", +            "pkgutil", +            "pydoc", +            "textutils", +            "threading", +            "xml", +            "zlib" +        ], +        "summary": "Python XML-RPC support" +    }, +    "zlib": { +        "files": [ +            "${libdir}/python2.7/lib-dynload/zlib.so" +        ], +        "rdepends": [ +            "core" +        ], +        "summary": "Python zlib compression support" +    } +}
\ No newline at end of file diff --git a/meta/recipes-devtools/python/python/sitecustomize.py b/meta/recipes-devtools/python/python/sitecustomize.py index 273901898a..4c8b5e2ba3 100644 --- a/meta/recipes-devtools/python/python/sitecustomize.py +++ b/meta/recipes-devtools/python/python/sitecustomize.py @@ -27,19 +27,11 @@ def __enableReadlineSupport():      except IOError:          pass -def __enableDefaultEncoding(): -    import sys -    try: -        sys.setdefaultencoding( "utf8" ) -    except LookupError: -        pass -  import sys  try:      import rlcompleter, readline  except ImportError:      pass  else: -    __enableDefaultEncoding()      __registerExitHandler()      __enableReadlineSupport() diff --git a/meta/recipes-devtools/python/python_2.7.13.bb b/meta/recipes-devtools/python/python_2.7.13.bb index 754c029097..dbafb955f9 100644 --- a/meta/recipes-devtools/python/python_2.7.13.bb +++ b/meta/recipes-devtools/python/python_2.7.13.bb @@ -1,5 +1,7 @@  require python.inc +  DEPENDS = "python-native libffi bzip2 gdbm openssl readline sqlite3 zlib" +  PR = "${INC_PR}"  DISTRO_SRC_URI ?= "file://sitecustomize.py" @@ -145,11 +147,9 @@ py_package_preprocess () {      python -m py_compile ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py  } -require python-${PYTHON_MAJMIN}-manifest.inc  # manual dependency additions  RPROVIDES_${PN}-core = "${PN}" -RRECOMMENDS_${PN}-core = "${PN}-readline"  RRECOMMENDS_${PN}-core_append_class-nativesdk = " nativesdk-python-modules"  RRECOMMENDS_${PN}-crypt = "openssl" @@ -193,3 +193,87 @@ FILES_${PN}-man = "${datadir}/man"  RDEPENDS_${PN}-modules_remove = "${@bb.utils.contains('PACKAGECONFIG', 'bdb', '', '${PN}-bsddb', d)}"  BBCLASSEXTEND = "nativesdk" + +RPROVIDES_${PN} += "${PN}-modules" + +# We want bytecode precompiled .py files (.pyc's) by default +# but the user may set it on their own conf + +INCLUDE_PYCS ?= "1" + +python(){ + +    pythondir = d.getVar('THISDIR',True) + +    # Read JSON manifest +    import json +    with open(pythondir+'/python/python2-manifest.json') as manifest_file: +        python_manifest=json.load(manifest_file) + +    include_pycs = d.getVar('INCLUDE_PYCS') + +    packages = d.getVar('PACKAGES').split() +    pn = d.getVar('PN') + + +    newpackages=[] + +    for key in python_manifest: +        pypackage= pn + '-' + key + +        if pypackage not in packages: +            # We need to prepend, otherwise python-misc gets everything +            # so we use a new variable +            newpackages.append(pypackage) + +        # "Build" python's manifest FILES, RDEPENDS and SUMMARY +        d.setVar('FILES_' + pypackage, '') +        for value in python_manifest[key]['files']: +            d.appendVar('FILES_' + pypackage, ' ' + value) +            if include_pycs == '1': +                if value.endswith('.py'): +                    d.appendVar('FILES_' + pypackage, ' ' + value + 'c') + +        d.setVar('RDEPENDS_' + pypackage, '') +        for value in python_manifest[key]['rdepends']: +            # Make it work with or without $PN +            if '${PN}' in value: +                value=value.split('-')[1] +            d.appendVar('RDEPENDS_' + pypackage, ' ' + pn + '-' + value) +        d.setVar('SUMMARY_' + pypackage, python_manifest[key]['summary']) + +    # We need to ensure staticdev packages match for files first so we sort in reverse +    newpackages.sort(reverse=True) +    # Prepending so to avoid python-misc getting everything +    packages = newpackages + packages +    d.setVar('PACKAGES', ' '.join(packages)) +    d.setVar('ALLOW_EMPTY_${PN}-modules', '1') +} + +do_split_packages[file-checksums] += "${THISDIR}/python/python2-manifest.json:True" + +# Files needed to create a new manifest +SRC_URI += "file://create_manifest2.py file://get_module_deps2.py file://python2-manifest.json" + +do_create_manifest() { + +# This task should be run with every new release of Python. +# We must ensure that PACKAGECONFIG enables everything when creating  +# a new manifest, this is to base our new manifest on a complete +# native python build, containing all dependencies, otherwise the task +# wont be able to find the required files. +# e.g. BerkeleyDB is an optional build dependency so it may or may not +# be present, we must ensure it is.  + +cd ${WORKDIR} +# This needs to be executed by python-native and NOT by HOST's python +nativepython create_manifest2.py +cp python2-manifest.json.new ${THISDIR}/python/python2-manifest.json +} + +# bitbake python -c create_manifest +addtask do_create_manifest + +# Make sure we have native python ready when we create a new manifest +do_create_manifest[depends] += "python:do_prepare_recipe_sysroot" +do_create_manifest[depends] += "python:do_patch" | 
