diff options
Diffstat (limited to 'meta')
-rw-r--r-- | meta/recipes-devtools/python/python-2.7-manifest.inc | 287 | ||||
-rw-r--r-- | meta/recipes-devtools/python/python-native_2.7.13.bb | 24 | ||||
-rw-r--r-- | meta/recipes-devtools/python/python/create_manifest2.py | 277 | ||||
-rw-r--r-- | meta/recipes-devtools/python/python/get_module_deps2.py | 112 | ||||
-rw-r--r-- | meta/recipes-devtools/python/python/python2-manifest.json | 1033 | ||||
-rw-r--r-- | meta/recipes-devtools/python/python/sitecustomize.py | 8 | ||||
-rw-r--r-- | meta/recipes-devtools/python/python_2.7.13.bb | 80 |
7 files changed, 1520 insertions, 301 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 57d4834b3a..0000000000 --- a/meta/recipes-devtools/python/python-2.7-manifest.inc +++ /dev/null @@ -1,287 +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}-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}-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}-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}-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.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..4c55bd7d7a --- /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" <alejandro.hernandez@intel.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..4719d81e82 --- /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" <alejandro.hernandez@intel.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..2e32597155 --- /dev/null +++ b/meta/recipes-devtools/python/python/python2-manifest.json @@ -0,0 +1,1033 @@ +{ + "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", + "tests", + "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 4d73cd25c8..fbeaea5333 100644 --- a/meta/recipes-devtools/python/python_2.7.13.bb +++ b/meta/recipes-devtools/python/python_2.7.13.bb @@ -1,4 +1,5 @@ require python.inc + DEPENDS = "python-native libffi bzip2 db gdbm openssl readline sqlite3 zlib" PR = "${INC_PR}" @@ -138,11 +139,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" @@ -169,5 +168,80 @@ do_install_ptest() { # catch manpage PACKAGES += "${PN}-man" FILES_${PN}-man = "${datadir}/man" - 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() { + +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" |