[OE-core] [PATCH 3/8] distutils: Consider S != B case

Khem Raj raj.khem at gmail.com
Mon Feb 1 18:23:13 UTC 2016


On Mon, Feb 1, 2016 at 10:02 AM, Richard Purdie
<richard.purdie at linuxfoundation.org> wrote:
> On Mon, 2016-02-01 at 05:08 +0000, Khem Raj wrote:
>> out of tree builds can break the assumption about setup.py being in
>> the
>> current directory, seen especially with devtool when using
>> externalsrc
>> many python modules cant build since it cant find setup.py in devtool
>> workspace
>
> Why do we need to "cd" in all cases, and put full paths to setup.py?
> Shouldn't one or the other suffice? The [dirs] option to the functions
> should alleviate the need to cd in most cases?

I wanted to act safe. Real fix is to use --build-base which makes it
use anything for B
there are some python components especially in rpi layer which use
relative paths
I thought there could be more.

>
> Cheers,
>
> Richard
>
>> Signed-off-by: Khem Raj <raj.khem at gmail.com>
>> ---
>>  meta/classes/distutils.bbclass  | 27 +++++++++++++++++----------
>>  meta/classes/distutils3.bbclass | 26 +++++++++++++++++++-------
>>  2 files changed, 36 insertions(+), 17 deletions(-)
>>
>> diff --git a/meta/classes/distutils.bbclass
>> b/meta/classes/distutils.bbclass
>> index cd06713..d9e0086 100644
>> --- a/meta/classes/distutils.bbclass
>> +++ b/meta/classes/distutils.bbclass
>> @@ -8,44 +8,51 @@ 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 execution failed."
>> +        cwd=$PWD;cd ${S}
>> +        STAGING_INCDIR=${STAGING_INCDIR} \
>> +        STAGING_LIBDIR=${STAGING_LIBDIR} \
>> +        BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
>> +        ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN}
>> ${S}/setup.py build --build-base=${B} ${DISTUTILS_BUILD_ARGS} || \
>> +        bbfatal "${PYTHON_PN} setup.py build execution failed."
>> +        cd $cwd
>>  }
>>
>>  distutils_stage_headers() {
>> +        cwd=$PWD;cd ${S}
>>          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} || \
>> +        ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN}
>> ${S}/setup.py install_headers ${DISTUTILS_STAGE_HEADERS_ARGS} || \
>>          bbfatal "${PYTHON_PN} setup.py install_headers execution
>> failed."
>> +        cd $cwd
>>  }
>>
>>  distutils_stage_all() {
>> +        cwd=$PWD;cd ${S}
>>          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} || \
>> +        ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN}
>> ${S}/setup.py install ${DISTUTILS_STAGE_ALL_ARGS} || \
>>          bbfatal "${PYTHON_PN} setup.py install (stage) execution
>> failed."
>> +        cd $cwd
>>  }
>>
>>  distutils_do_install() {
>> +        cwd=$PWD;cd ${S}
>>          install -d ${D}${PYTHON_SITEPACKAGES_DIR}
>>          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} || \
>> +        ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN}
>> ${S}/setup.py install --install-lib=${D}/${PYTHON_SITEPACKAGES_DIR}
>> ${DISTUTILS_INSTALL_ARGS} || \
>>          bbfatal "${PYTHON_PN} setup.py install execution failed."
>>
>>          # support filenames with *spaces*
>>          # only modify file if it contains path  and recompile it
>>          find ${D} -name "*.py" -exec grep -q ${D} {} \; -exec sed -i
>> -e s:${D}::g {} \; -exec ${STAGING_BINDIR_NATIVE}/python
>> -native/python -mcompileall {} \;
>>
>> -        if test -e ${D}${bindir} ; then
>> +        if test -e ${D}${bindir} ; then
>>              for i in ${D}${bindir}/* ; do \
>>                  if [ ${PN} != "${BPN}-native" ]; then
>>                       sed -i -e s:${STAGING_BINDIR_NATIVE}/python
>> -native/python:${bindir}/env\ python:g $i
>> @@ -65,7 +72,6 @@ distutils_do_install() {
>>
>>          rm -f ${D}${PYTHON_SITEPACKAGES_DIR}/easy-install.pth
>>          rm -f ${D}${PYTHON_SITEPACKAGES_DIR}/site.py*
>> -
>>          #
>>          # FIXME: Bandaid against wrong datadir computation
>>          #
>> @@ -79,6 +85,7 @@ distutils_do_install() {
>>          rm ${D}${PYTHON_SITEPACKAGES_DIR}/backports/__init__.py;
>>          rm ${D}${PYTHON_SITEPACKAGES_DIR}/backports/__init__.pyc;
>>       fi
>> +        cd $cwd
>>  }
>>
>>  EXPORT_FUNCTIONS do_compile do_install
>> diff --git a/meta/classes/distutils3.bbclass
>> b/meta/classes/distutils3.bbclass
>> index 443bf3a..47cbf72 100644
>> --- a/meta/classes/distutils3.bbclass
>> +++ b/meta/classes/distutils3.bbclass
>> @@ -9,6 +9,8 @@ DISTUTILS_INSTALL_ARGS ?= "--prefix=${D}/${prefix} \
>>      --install-data=${D}/${datadir}"
>>
>>  distutils3_do_compile() {
>> +        cwd=$PWD
>> +        cd ${S}
>>          if [ ${BUILD_SYS} != ${HOST_SYS} ]; then
>>                  SYS=${MACHINE}
>>          else
>> @@ -17,13 +19,16 @@ distutils3_do_compile() {
>>          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} || \
>> +        ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN}
>> ${S}/setup.py \
>> +        build -build-base=${B} ${DISTUTILS_BUILD_ARGS} || \
>>          bbfatal "${PYTHON_PN} setup.py build_ext execution failed."
>> +        cd $cwd
>>  }
>>  distutils3_do_compile[vardepsexclude] = "MACHINE"
>>
>>  distutils3_stage_headers() {
>> +        cwd=$PWD
>> +        cd ${S}
>>          install -d ${STAGING_DIR_HOST}${PYTHON_SITEPACKAGES_DIR}
>>          if [ ${BUILD_SYS} != ${HOST_SYS} ]; then
>>                  SYS=${MACHINE}
>> @@ -31,12 +36,15 @@ distutils3_stage_headers() {
>>                  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} || \
>> +        ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN}
>> ${S}/setup.py install_headers ${DISTUTILS_STAGE_HEADERS_ARGS} || \
>>          bbfatal "${PYTHON_PN} setup.py install_headers execution
>> failed."
>> +        cd $cwd
>>  }
>>  distutils3_stage_headers[vardepsexclude] = "MACHINE"
>>
>>  distutils3_stage_all() {
>> +        cwd=$PWD
>> +        cd ${S}
>>          if [ ${BUILD_SYS} != ${HOST_SYS} ]; then
>>                  SYS=${MACHINE}
>>          else
>> @@ -47,12 +55,15 @@ distutils3_stage_all() {
>>          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} || \
>> +        ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN}
>> ${S}/setup.py install ${DISTUTILS_STAGE_ALL_ARGS} || \
>>          bbfatal "${PYTHON_PN} setup.py install (stage) execution
>> failed."
>> +        cd $cwd
>>  }
>>  distutils3_stage_all[vardepsexclude] = "MACHINE"
>>
>>  distutils3_do_install() {
>> +        cwd=$PWD
>> +        cd ${S}
>>          install -d ${D}${PYTHON_SITEPACKAGES_DIR}
>>          if [ ${BUILD_SYS} != ${HOST_SYS} ]; then
>>                  SYS=${MACHINE}
>> @@ -63,13 +74,13 @@ distutils3_do_install() {
>>          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} || \
>> +        ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN}
>> ${S}/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" -exec grep -q ${D} {} \; -exec sed -i
>> -e s:${D}::g {} \;
>>
>> -        if test -e ${D}${bindir} ; then
>> +        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
>> @@ -84,7 +95,7 @@ distutils3_do_install() {
>>          fi
>>
>>          rm -f ${D}${PYTHON_SITEPACKAGES_DIR}/easy-install.pth
>> -
>> +
>>          #
>>          # FIXME: Bandaid against wrong datadir computation
>>          #
>> @@ -92,6 +103,7 @@ distutils3_do_install() {
>>              mv -f ${D}${datadir}/share/* ${D}${datadir}/
>>              rmdir ${D}${datadir}/share
>>          fi
>> +        cd $cwd
>>  }
>>  distutils3_do_install[vardepsexclude] = "MACHINE"
>>
>> --
>> 2.7.0
>>



More information about the Openembedded-core mailing list