> -----Original Message-----
> From: openembedded-core@lists.openembedded.org 
> <openembedded-core@lists.openembedded.org> On Behalf Of Richard Purdie
> Sent: den 15 maj 2024 13:56
> To: openembedded-core@lists.openembedded.org
> Subject: [OE-core] [PATCH 05/10] base: Switch UNPACKDIR to a subdir of WORKDIR
> 
> Change do_unpack to unpack files to a subdirectory of WORKDIR instead of 
> WORKDIR
> itself. There are several good reasons for this but it is mainly about being 
> able
> to isolate the output of the unpack task and tell the files apart from other 
> things
> which are created in workdir (logs, sysroots, temp dirs and more).
> 
> This means that when the do_unpack task reruns, we can clean UNPACKDIR and 
> know
> we have a standard point to start builds from.
> 
> It also makes code in tools like devtool and recipetool easier.
> 
> To reduce the impact to users, if a subdirectory under UNPACKDIR matches
> the first subdirectory under WORKDIR of S, that directory is moved into 
> position
> inside WORKDIR. This preserves the behaviour of S = "${WORKDIR}/git",
> S = "${WORKDIR}/${BPN}" and other commonly used source directory setups.
> 
> The directory is moved since sadly many autotools based projects can't cope 
> with
> symlinks in their paths.

Would it be an option to create a symbolic link by default, and instead 
let the autotools bbclass replace it with a moved directory? If it is 
in fact only autotools based projects that have this problem.

> 
> Signed-off-by: Richard Purdie <richard.pur...@linuxfoundation.org>
> ---
>  meta/classes-global/base.bbclass | 21 ++++++++++++++++++---
>  meta/conf/bitbake.conf           |  2 +-
>  2 files changed, 19 insertions(+), 4 deletions(-)
> 
> diff --git a/meta/classes-global/base.bbclass b/meta/classes-
> global/base.bbclass
> index 066f3848f7c..cdce0538273 100644
> --- a/meta/classes-global/base.bbclass
> +++ b/meta/classes-global/base.bbclass
> @@ -153,20 +153,35 @@ python base_do_fetch() {
>  }
> 
>  addtask unpack after do_fetch
> -do_unpack[dirs] = "${UNPACKDIR}"
> -
> -do_unpack[cleandirs] = "${@d.getVar('S') if os.path.normpath(d.getVar('S')) 
> != os.path.normpath(d.getVar('WORKDIR')) else os.path.join('${S}', 
> 'patches')}"
> +do_unpack[cleandirs] = "${UNPACKDIR}"
> 
>  python base_do_unpack() {
> +    import shutil
> +
>      src_uri = (d.getVar('SRC_URI') or "").split()
>      if not src_uri:
>          return
> 
> +    sourcedir = d.getVar('S')
> +    basedir = None
> +    workdir = d.getVar('WORKDIR')
> +    unpackdir = d.getVar('UNPACKDIR')
> +    if sourcedir.startswith(workdir) and not sourcedir.startswith(unpackdir):
> +        basedir = sourcedir.replace(workdir, '').strip("/").split('/')[0]
> +        bb.utils.remove(sourcedir, True)

This remove() seems wrong and should not be needed. There are two 
cases here:

1) either ${S} == ${WORKDIR}, in which case the above will remove 
   ${WORKDIR}, which is sure to lead to problems, or
2) ${S} == ${WORKDIR}/foo[/...], in which case the removal of 
   workdir + '/' + basedir below will also remove ${S} as 
   basedir == "foo".

> +        if basedir:
> +            bb.utils.remove(workdir + '/' + basedir, True)
> +
>      try:
>          fetcher = bb.fetch2.Fetch(src_uri, d)
>          fetcher.unpack(d.getVar('UNPACKDIR'))
>      except bb.fetch2.BBFetchException as e:
>          bb.fatal("Bitbake Fetcher Error: " + repr(e))
> +
> +    if basedir and os.path.exists(unpackdir + '/' + basedir):
> +        # Compatibility magic to ensure ${WORKDIR}/git and ${WORKDIR}/${BP}
> +        # as often used in S work as expected.
> +        shutil.move(unpackdir + '/' + basedir, workdir + '/' + basedir)
>  }
> 
>  SSTATETASKS += "do_deploy_source_date_epoch"
> diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
> index b2c500d8739..75c850760f6 100644
> --- a/meta/conf/bitbake.conf
> +++ b/meta/conf/bitbake.conf
> @@ -405,7 +405,7 @@ STAMP =
> "${STAMPS_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/${PV}"
>  STAMPCLEAN = "${STAMPS_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/*-*"
>  BASE_WORKDIR ?= "${TMPDIR}/work"
>  WORKDIR = "${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${PV}"
> -UNPACKDIR ??= "${WORKDIR}"
> +UNPACKDIR ??= "${WORKDIR}/sources-unpack"

"sources-unpack" does not exactly fall off the tongue.
Would "unpack" or "unpacked" be alternatives?

>  T = "${WORKDIR}/temp"
>  D = "${WORKDIR}/image"
>  S = "${WORKDIR}/${BP}"
> --
> 2.40.1

//Peter

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#199422): 
https://lists.openembedded.org/g/openembedded-core/message/199422
Mute This Topic: https://lists.openembedded.org/mt/106112374/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to