[oe] base.bbclass problem? Was: package-stagefile-shell() breaks if DEPLOY_DIR is outside of TMPDIR
Denys Dmytriyenko
denis at denix.org
Fri Sep 26 17:39:01 UTC 2008
Does anybody have any comments? Am I doing something totally wrong? Or is it
too low-level so nobody wants to touch it? Please let me know. Thanks.
On Thu, Sep 25, 2008 at 12:23:21AM -0400, Denys Dmytriyenko wrote:
> Hi,
>
> I just submitted a bug report #4580, but wanted to follow up here as my
> description/fix maybe controversial or at least touches the low-level stuff.
>
> Here is the description from the ticket:
>
> When DEPLOY_DIR is configured to be outside of TMPDIR, building a kernel
> breaks, as "cp" cannot copy a file into itself:
>
> cp: `/OE/deploy/glibc/images/omap3evm/uImage.bin' and `/OE/deploy/glibc/images/omap3evm/uImage.bin' are the same file
>
> What happens is inside the do_deploy() function of the kernel.bbclass it calls
> package-stagefile-shell() with the uImage binary in DEPLOY_DIR as a parameter:
>
> package_stagefile_shell ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin
>
> That function is supposed to save a copy of the file in the staging directory
> (packaged-staging magic):
>
> package_stagefile_shell() {
> if [ "$PSTAGING_ACTIVE" = "1" ]; then
> srcfile=$1
> destfile=`echo $srcfile | sed s#${TMPDIR}#${PSTAGE_TMPDIR_STAGE}#`
> destdir=`dirname $destfile`
> mkdir -p $destdir
> cp -dp $srcfile $destfile
> fi
> }
>
> The problem there is it substitutes (sed) TMPDIR with PSTAGE_TMPDIR_STAGE in
> file's path. It works if DEPLOY_DIR is inside TMPDIR, but the path remains the
> same if otherwise, leading to the mentioned error.
>
> The function above is a shell counterpart of the python package_stagefile(). I
> grepped both of them and it appears the python function is used inside the
> package.bbclass to do some actual staging, while the shell function is only
> used in recipes for kernels and bootloaders (u-boot, x-load) and is always
> called with files in DEPLOY_DIR.
>
> So, changing above sed command to:
>
> sed s#${DEPLOY_DIR}#${PSTAGE_TMPDIR_STAGE}#`
>
> makes it work and doesn't seem to break anything else for me. I think the
> function maybe renamed to package_stagefile_deploy() to reflect its purpose,
> but that would require changes in several recipes.
>
> I'm attaching the actual patch for review. It works for me, but I'm not sure
> how correct it is, so I'm asking here. Thanks.
>
> --
> Denys
> diff --git a/classes/base.bbclass b/classes/base.bbclass
> index 540b891..1172b8f 100644
> --- a/classes/base.bbclass
> +++ b/classes/base.bbclass
> @@ -389,7 +389,7 @@ def package_stagefile(file, d):
> package_stagefile_shell() {
> if [ "$PSTAGING_ACTIVE" = "1" ]; then
> srcfile=$1
> - destfile=`echo $srcfile | sed s#${TMPDIR}#${PSTAGE_TMPDIR_STAGE}#`
> + destfile=`echo $srcfile | sed s#${DEPLOY_DIR}#${PSTAGE_TMPDIR_STAGE}#`
> destdir=`dirname $destfile`
> mkdir -p $destdir
> cp -dp $srcfile $destfile
More information about the Openembedded-devel
mailing list