On Mon, Feb 1, 2016 at 10:02 AM, Richard Purdie <[email protected]> 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 <[email protected]> >> --- >> 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 >> -- _______________________________________________ Openembedded-core mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-core
