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

Richard Purdie richard.purdie at linuxfoundation.org
Mon Feb 1 18:02:25 UTC 2016


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?

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