On Mon, Jul 27, 2026 at 2:34 AM Benjamin Robin <[email protected]>
wrote:

> The behavior remains unchanged:
> - Instead of saving and restoring the values of various variables, use a
>   copy of the data store via `d.createCopy()`. This prevents side effects
>   for other tasks.
> - This allows removing the `try ... finally` block.
> - The function `is_work_shared_spdx()` no longer needs to be called twice.
> - In the work-shared case, there is no need to modify `WORKDIR` since no
>   task is executed from that branch.
>
> Signed-off-by: Benjamin Robin <[email protected]>
>

LGTM Thanks.

Reviewed-by: Joshua Watt <[email protected]>


> ---
>  meta/lib/oe/spdx_common.py | 81
> ++++++++++++++++++++++------------------------
>  1 file changed, 39 insertions(+), 42 deletions(-)
>
> diff --git a/meta/lib/oe/spdx_common.py b/meta/lib/oe/spdx_common.py
> index 6b1a409c40c2..9d1e22629b21 100644
> --- a/meta/lib/oe/spdx_common.py
> +++ b/meta/lib/oe/spdx_common.py
> @@ -172,50 +172,47 @@ def get_patched_src(d):
>      Save patched source of the recipe in SPDX_WORKDIR.
>      """
>      spdx_workdir = d.getVar("SPDXWORK")
> -    spdx_sysroot_native = d.getVar("STAGING_DIR_NATIVE")
>
> -    workdir = d.getVar("WORKDIR")
> +    # The kernel class functions require it to be on work-shared, so we
> don't change WORKDIR
> +    if not is_work_shared_spdx(d):
> +        spdx_sysroot_native = d.getVar("STAGING_DIR_NATIVE")
> +        localdata = d.createCopy()
>
> -    try:
> -        # The kernel class functions require it to be on work-shared, so
> we dont change WORKDIR
> -        if not is_work_shared_spdx(d):
> -            # Change the WORKDIR to make do_unpack do_patch run in
> another dir.
> -            d.setVar("WORKDIR", spdx_workdir)
> -            # Restore the original path to recipe's native sysroot (it's
> relative to WORKDIR).
> -            d.setVar("STAGING_DIR_NATIVE", spdx_sysroot_native)
> -
> -            # The changed 'WORKDIR' also caused 'B' changed, create dir
> 'B' for the
> -            # possibly requiring of the following tasks (such as some
> recipes's
> -            # do_patch required 'B' existed).
> -            bb.utils.mkdirhier(d.getVar("B"))
> -
> -            bb.build.exec_func("do_unpack", d)
> -
> -            if d.getVar("SRC_URI") != "":
> -                if bb.data.inherits_class("dos2unix", d):
> -                    bb.build.exec_func("do_convert_crlf_to_lf", d)
> -                bb.build.exec_func("do_patch", d)
> -
> -        # Copy source from work-share to spdx_workdir
> -        if is_work_shared_spdx(d):
> -            share_src = d.getVar("S")
> -            d.setVar("WORKDIR", spdx_workdir)
> -            d.setVar("STAGING_DIR_NATIVE", spdx_sysroot_native)
> -            # Copy source to ${SPDXWORK}, same basename dir of ${S};
> -            src_dir = spdx_workdir + "/" + os.path.basename(share_src)
> -            # For kernel souce, rename suffix dir 'kernel-source'
> -            # to ${BP} (${BPN}-${PV})
> -            if bb.data.inherits_class("kernel", d):
> -                src_dir = spdx_workdir + "/" + d.getVar("BP")
> -
> -            bb.note(f"copyhardlinktree {share_src} to {src_dir}")
> -            oe.path.copyhardlinktree(share_src, src_dir)
> -
> -        # Some userland has no source.
> -        if not os.path.exists(spdx_workdir):
> -            bb.utils.mkdirhier(spdx_workdir)
> -    finally:
> -        d.setVar("WORKDIR", workdir)
> +        # Change the WORKDIR to make do_unpack do_patch run in another
> dir.
> +        localdata.setVar("WORKDIR", spdx_workdir)
> +        # Restore the original path to recipe's native sysroot (it's
> relative to WORKDIR).
> +        localdata.setVar("STAGING_DIR_NATIVE", spdx_sysroot_native)
> +
> +        # The changed 'WORKDIR' also caused 'B' changed, create dir 'B'
> for the
> +        # possibly requiring of the following tasks (such as some recipe's
> +        # do_patch required 'B' existed).
> +        bb.utils.mkdirhier(localdata.getVar("B"))
> +
> +        bb.build.exec_func("do_unpack", localdata)
> +
> +        if localdata.getVar("SRC_URI") != "":
> +            if bb.data.inherits_class("dos2unix", localdata):
> +                bb.build.exec_func("do_convert_crlf_to_lf", localdata)
> +            bb.build.exec_func("do_patch", localdata)
> +
> +    # Copy source from work-shared to spdx_workdir
> +    else:
> +        share_src = d.getVar("S")
> +
> +        if bb.data.inherits_class("kernel", d):
> +            # For kernel source, rename suffix dir 'kernel-source' to
> ${BP} (${BPN}-${PV})
> +            dir_name = d.getVar("BP")
> +        else:
> +            # Copy source to ${SPDXWORK}, same basename dir of ${S}
> +            dir_name = os.path.basename(share_src)
> +
> +        src_dir = f"{spdx_workdir}/{dir_name}"
> +        bb.note(f"copyhardlinktree {share_src} to {src_dir}")
> +        oe.path.copyhardlinktree(share_src, src_dir)
> +
> +    # Some userland has no source.
> +    if not os.path.exists(spdx_workdir):
> +        bb.utils.mkdirhier(spdx_workdir)
>
>
>  def has_task(d, task):
>
> --
> 2.55.0
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#242948): 
https://lists.openembedded.org/g/openembedded-core/message/242948
Mute This Topic: https://lists.openembedded.org/mt/120463985/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to