diff options
author | Khem Raj <raj.khem@gmail.com> | 2013-03-09 22:08:32 -0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-02-02 22:34:32 +0000 |
commit | 8bb0206ed67228c88dd5bc2d8b36ce28f48b78f4 (patch) | |
tree | f1272b722dc4ebb76b8cdb07121b5ae9f69d98cd | |
parent | ae931c2cf9e48e1fb74b4b727dbf668ea880023f (diff) | |
download | openembedded-core-8bb0206ed67228c88dd5bc2d8b36ce28f48b78f4.tar.gz openembedded-core-8bb0206ed67228c88dd5bc2d8b36ce28f48b78f4.tar.bz2 openembedded-core-8bb0206ed67228c88dd5bc2d8b36ce28f48b78f4.zip |
classes: Add distutils for python3
In line with python2 add distutils and setuptools
classes for handing python3
Use python-distribute instead of python-setuptools in setuptools bbclass
Remove --single-version-externally-managed since its setuptools
specific and we dont use it anymore
Do build_ext as separate step during compile
Add DISTUTILS_BUILD_EXT_ARGS for modules to pass flags to build_ext step
in setup.py
Add build_ext as sepate step during compile and add
the cross sysrooted library and headers since we are cross
compiling
Use ${PYTHON_PN} in place of hardcoding python name
Remove the /etc/share if its empty
Since OE-Core times we now have machine specific sysroots
for targets unlike before when we used arch specific sysroots
so reflect that here
Use MACHINE for sysroot when not building for build host
Python's machinery replaces directories in sysroot path to match OE's
staging area sysroots. Earlier we use to have HOST_SYS represent sysroot
always but now we use MACHINE to represent target sysroots but HOST_SYS
to represent host sysroot. This patch caters to that difference
Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r-- | meta/classes/distutils-tools.bbclass | 77 | ||||
-rw-r--r-- | meta/classes/distutils3-base.bbclass | 5 | ||||
-rw-r--r-- | meta/classes/distutils3-native-base.bbclass | 3 | ||||
-rw-r--r-- | meta/classes/distutils3.bbclass | 98 | ||||
-rw-r--r-- | meta/classes/setuptools.bbclass | 3 | ||||
-rw-r--r-- | meta/classes/setuptools3.bbclass | 8 |
6 files changed, 192 insertions, 2 deletions
diff --git a/meta/classes/distutils-tools.bbclass b/meta/classes/distutils-tools.bbclass new file mode 100644 index 0000000000..f43450e56f --- /dev/null +++ b/meta/classes/distutils-tools.bbclass @@ -0,0 +1,77 @@ +DISTUTILS_BUILD_ARGS ?= "" +DISTUTILS_STAGE_HEADERS_ARGS ?= "--install-dir=${STAGING_INCDIR}/${PYTHON_DIR}" +DISTUTILS_STAGE_ALL_ARGS ?= "--prefix=${STAGING_DIR_HOST}${prefix} \ + --install-data=${STAGING_DATADIR}" +DISTUTILS_INSTALL_ARGS ?= "--prefix=${D}/${prefix} \ + --install-data=${D}/${datadir}" + +distutils_do_compile() { + STAGING_INCDIR=${STAGING_INCDIR} \ + STAGING_LIBDIR=${STAGING_LIBDIR} \ + BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ + ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} setup.py build ${DISTUTILS_BUILD_ARGS} || \ + bbfatal "${PYTHON_PN} setup.py build_ext execution failed." +} + +distutils_stage_headers() { + install -d ${STAGING_DIR_HOST}${PYTHON_SITEPACKAGES_DIR} + BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ + ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} setup.py install_headers ${DISTUTILS_STAGE_HEADERS_ARGS} || \ + bbfatal "${PYTHON_PN} setup.py install_headers execution failed." +} + +distutils_stage_all() { + STAGING_INCDIR=${STAGING_INCDIR} \ + STAGING_LIBDIR=${STAGING_LIBDIR} \ + install -d ${STAGING_DIR_HOST}${PYTHON_SITEPACKAGES_DIR} + PYTHONPATH=${STAGING_DIR_HOST}${PYTHON_SITEPACKAGES_DIR} \ + BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ + ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} setup.py install ${DISTUTILS_STAGE_ALL_ARGS} || \ + bbfatal "${PYTHON_PN} setup.py install (stage) execution failed." +} + +distutils_do_install() { + echo "Beginning ${PN} Install ..." + install -d ${D}${PYTHON_SITEPACKAGES_DIR} + echo "Step 2 of ${PN} Install ..." + STAGING_INCDIR=${STAGING_INCDIR} \ + STAGING_LIBDIR=${STAGING_LIBDIR} \ + PYTHONPATH=${D}/${PYTHON_SITEPACKAGES_DIR} \ + BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ + ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} setup.py install --install-lib=${D}/${PYTHON_SITEPACKAGES_DIR} ${DISTUTILS_INSTALL_ARGS} || \ + bbfatal "${PYTHON_PN} setup.py install execution failed." + + echo "Step 3 of ${PN} Install ..." + # support filenames with *spaces* + find ${D} -name "*.py" -print0 | while read -d $'\0' i ; do \ + sed -i -e s:${D}::g $i + done + + echo "Step 4 of ${PN} Install ..." + if test -e ${D}${bindir} ; then + for i in ${D}${bindir}/* ; do \ + sed -i -e s:${STAGING_BINDIR_NATIVE}:${bindir}:g $i + done + fi + + echo "Step 4 of ${PN} Install ..." + if test -e ${D}${sbindir}; then + for i in ${D}${sbindir}/* ; do \ + sed -i -e s:${STAGING_BINDIR_NATIVE}:${bindir}:g $i + done + fi + + echo "Step 5 of ${PN} Install ..." + rm -f ${D}${PYTHON_SITEPACKAGES_DIR}/easy-install.pth + + # + # FIXME: Bandaid against wrong datadir computation + # + if test -e ${D}${datadir}/share; then + mv -f ${D}${datadir}/share/* ${D}${datadir}/ + fi +} + +#EXPORT_FUNCTIONS do_compile do_install + +export LDSHARED="${CCLD} -shared" diff --git a/meta/classes/distutils3-base.bbclass b/meta/classes/distutils3-base.bbclass new file mode 100644 index 0000000000..82ab6a3d1c --- /dev/null +++ b/meta/classes/distutils3-base.bbclass @@ -0,0 +1,5 @@ +DEPENDS += "${@["${PYTHON_PN}-native ${PYTHON_PN}", ""][(d.getVar('PACKAGES', True) == '')]}" +RDEPENDS_${PN} += "${@['', '${PYTHON_PN}-core']['${CLASSOVERRIDE}' == 'class-target']}" + +inherit distutils-common-base python3native + diff --git a/meta/classes/distutils3-native-base.bbclass b/meta/classes/distutils3-native-base.bbclass new file mode 100644 index 0000000000..b4a333f4d4 --- /dev/null +++ b/meta/classes/distutils3-native-base.bbclass @@ -0,0 +1,3 @@ +PYTHON_BASEVERSION = "3.3" + +inherit distutils-native-base diff --git a/meta/classes/distutils3.bbclass b/meta/classes/distutils3.bbclass new file mode 100644 index 0000000000..bbd645cc63 --- /dev/null +++ b/meta/classes/distutils3.bbclass @@ -0,0 +1,98 @@ +inherit distutils3-base + +DISTUTILS_BUILD_ARGS ?= "" +DISTUTILS_BUILD_EXT_ARGS ?= "" +DISTUTILS_STAGE_HEADERS_ARGS ?= "--install-dir=${STAGING_INCDIR}/${PYTHON_DIR}" +DISTUTILS_STAGE_ALL_ARGS ?= "--prefix=${STAGING_DIR_HOST}${prefix} \ + --install-data=${STAGING_DATADIR}" +DISTUTILS_INSTALL_ARGS ?= "--prefix=${D}/${prefix} \ + --install-data=${D}/${datadir}" + +distutils3_do_compile() { + if [ ${BUILD_SYS} != ${HOST_SYS} ]; then + SYS=${MACHINE} + else + SYS=${HOST_SYS} + fi + STAGING_INCDIR=${STAGING_INCDIR} \ + STAGING_LIBDIR=${STAGING_LIBDIR} \ + BUILD_SYS=${BUILD_SYS} HOST_SYS=${SYS} \ + ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} setup.py \ + build ${DISTUTILS_BUILD_ARGS} || \ + bbfatal "${PYTHON_PN} setup.py build_ext execution failed." +} + +distutils3_stage_headers() { + install -d ${STAGING_DIR_HOST}${PYTHON_SITEPACKAGES_DIR} + if [ ${BUILD_SYS} != ${HOST_SYS} ]; then + SYS=${MACHINE} + else + SYS=${HOST_SYS} + fi + BUILD_SYS=${BUILD_SYS} HOST_SYS=${SYS} \ + ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} setup.py install_headers ${DISTUTILS_STAGE_HEADERS_ARGS} || \ + bbfatal "${PYTHON_PN} setup.py install_headers execution failed." +} + +distutils3_stage_all() { + if [ ${BUILD_SYS} != ${HOST_SYS} ]; then + SYS=${MACHINE} + else + SYS=${HOST_SYS} + fi + STAGING_INCDIR=${STAGING_INCDIR} \ + STAGING_LIBDIR=${STAGING_LIBDIR} \ + install -d ${STAGING_DIR_HOST}${PYTHON_SITEPACKAGES_DIR} + PYTHONPATH=${STAGING_DIR_HOST}${PYTHON_SITEPACKAGES_DIR} \ + BUILD_SYS=${BUILD_SYS} HOST_SYS=${SYS} \ + ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} setup.py install ${DISTUTILS_STAGE_ALL_ARGS} || \ + bbfatal "${PYTHON_PN} setup.py install (stage) execution failed." +} + +distutils3_do_install() { + install -d ${D}${PYTHON_SITEPACKAGES_DIR} + if [ ${BUILD_SYS} != ${HOST_SYS} ]; then + SYS=${MACHINE} + else + SYS=${HOST_SYS} + fi + STAGING_INCDIR=${STAGING_INCDIR} \ + STAGING_LIBDIR=${STAGING_LIBDIR} \ + PYTHONPATH=${D}${PYTHON_SITEPACKAGES_DIR} \ + BUILD_SYS=${BUILD_SYS} HOST_SYS=${SYS} \ + ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} setup.py install --install-lib=${D}/${PYTHON_SITEPACKAGES_DIR} ${DISTUTILS_INSTALL_ARGS} || \ + bbfatal "${PYTHON_PN} setup.py install execution failed." + + # support filenames with *spaces* + find ${D} -name "*.py" -print0 | while read -d $'\0' i ; do \ + sed -i -e s:${D}::g "$i" + done + + if test -e ${D}${bindir} ; then + for i in ${D}${bindir}/* ; do \ + sed -i -e s:${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN}:${bindir}/env\ ${PYTHON_PN}:g $i + sed -i -e s:${STAGING_BINDIR_NATIVE}:${bindir}:g $i + done + fi + + if test -e ${D}${sbindir}; then + for i in ${D}${sbindir}/* ; do \ + sed -i -e s:${STAGING_BINDIR_NATIVE}/python-${PYTHON_PN}/${PYTHON_PN}:${bindir}/env\ ${PYTHON_PN}:g $i + sed -i -e s:${STAGING_BINDIR_NATIVE}:${bindir}:g $i + done + fi + + rm -f ${D}${PYTHON_SITEPACKAGES_DIR}/easy-install.pth + + # + # FIXME: Bandaid against wrong datadir computation + # + if test -e ${D}${datadir}/share; then + mv -f ${D}${datadir}/share/* ${D}${datadir}/ + rmdir ${D}${datadir}/share + fi +} + +EXPORT_FUNCTIONS do_compile do_install + +export LDSHARED="${CCLD} -shared" diff --git a/meta/classes/setuptools.bbclass b/meta/classes/setuptools.bbclass index ba9cf13295..56343b1c73 100644 --- a/meta/classes/setuptools.bbclass +++ b/meta/classes/setuptools.bbclass @@ -1,9 +1,8 @@ inherit distutils -DEPENDS += "python-setuptools-native" +DEPENDS += "python-distribute-native" DISTUTILS_INSTALL_ARGS = "--root=${D} \ - --single-version-externally-managed \ --prefix=${prefix} \ --install-lib=${PYTHON_SITEPACKAGES_DIR} \ --install-data=${datadir}" diff --git a/meta/classes/setuptools3.bbclass b/meta/classes/setuptools3.bbclass new file mode 100644 index 0000000000..40c18c8976 --- /dev/null +++ b/meta/classes/setuptools3.bbclass @@ -0,0 +1,8 @@ +inherit distutils3 + +DEPENDS += "python3-distribute-native" + +DISTUTILS_INSTALL_ARGS = "--root=${D} \ + --prefix=${prefix} \ + --install-lib=${PYTHON_SITEPACKAGES_DIR} \ + --install-data=${datadir}" |