From 4547232c71590797af75b59a9890d38b61ff7890 Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Mon, 16 Jun 2025 11:49:57 +0200 Subject: recipetool/devtool: calculate source paths relative to UNPACKDIR Now that recipes default to S in UNPACKDIR, recipetool and devtool should do the same. There was some discussion about changing devtool to simply setting UNPACKDIR via bbappend to a workspace and running unpack task directly; currently it has a bunch of convoluted path calculations, substitutions, moving source trees around and and special casing (devtool-source.bbclass in particular is an unpleasant hack). This should definitely be done; but right now we can simply tweak existing code which at least doesn't make it worse. (From OE-Core rev: c326ca8aeb2bf0f7719e43921d10efd5dedc7b2a) Signed-off-by: Alexander Kanavin Signed-off-by: Mathieu Dubois-Briand Signed-off-by: Richard Purdie --- scripts/lib/devtool/ide_sdk.py | 2 +- scripts/lib/devtool/standard.py | 12 ++++++------ scripts/lib/devtool/upgrade.py | 2 +- scripts/lib/recipetool/append.py | 8 ++++---- scripts/lib/recipetool/create.py | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) (limited to 'scripts/lib') diff --git a/scripts/lib/devtool/ide_sdk.py b/scripts/lib/devtool/ide_sdk.py index f8cf65f4a8..931408fa74 100755 --- a/scripts/lib/devtool/ide_sdk.py +++ b/scripts/lib/devtool/ide_sdk.py @@ -334,7 +334,7 @@ class RecipeModified: self.srctree = workspace[workspacepn]['srctree'] # Need to grab this here in case the source is within a subdirectory self.real_srctree = get_real_srctree( - self.srctree, recipe_d.getVar('S'), recipe_d.getVar('WORKDIR')) + self.srctree, recipe_d.getVar('S'), recipe_d.getVar('UNPACKDIR')) self.bbappend = workspace[workspacepn]['bbappend'] self.ide_sdk_dir = os.path.join( diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py index cdfdba43ee..1fd5947c41 100644 --- a/scripts/lib/devtool/standard.py +++ b/scripts/lib/devtool/standard.py @@ -625,7 +625,7 @@ def _extract_source(srctree, keep_temp, devbranch, sync, config, basepath, works srcsubdir = f.read() except FileNotFoundError as e: raise DevtoolError('Something went wrong with source extraction - the devtool-source class was not active or did not function correctly:\n%s' % str(e)) - srcsubdir_rel = os.path.relpath(srcsubdir, os.path.join(tempdir, 'workdir')) + srcsubdir_rel = os.path.relpath(srcsubdir, os.path.join(tempdir, 'workdir', os.path.relpath(d.getVar('UNPACKDIR'), d.getVar('WORKDIR')))) # Check if work-shared is empty, if yes # find source and copy to work-shared @@ -742,13 +742,13 @@ def get_staging_kbranch(srcdir): staging_kbranch = "".join(branch.split('\n')[0]) return staging_kbranch -def get_real_srctree(srctree, s, workdir): +def get_real_srctree(srctree, s, unpackdir): # Check that recipe isn't using a shared workdir s = os.path.abspath(s) - workdir = os.path.abspath(workdir) - if s.startswith(workdir) and s != workdir and os.path.dirname(s) != workdir: + unpackdir = os.path.abspath(unpackdir) + if s.startswith(unpackdir) and s != unpackdir and os.path.dirname(s) != unpackdir: # Handle if S is set to a subdirectory of the source - srcsubdir = os.path.relpath(s, workdir).split(os.sep, 1)[1] + srcsubdir = os.path.relpath(s, unpackdir).split(os.sep, 1)[1] srctree = os.path.join(srctree, srcsubdir) return srctree @@ -907,7 +907,7 @@ def modify(args, config, basepath, workspace): # Need to grab this here in case the source is within a subdirectory srctreebase = srctree - srctree = get_real_srctree(srctree, rd.getVar('S'), rd.getVar('WORKDIR')) + srctree = get_real_srctree(srctree, rd.getVar('S'), rd.getVar('UNPACKDIR')) bb.utils.mkdirhier(os.path.dirname(appendfile)) with open(appendfile, 'w') as f: diff --git a/scripts/lib/devtool/upgrade.py b/scripts/lib/devtool/upgrade.py index 0dace1fb24..d9aca6e2db 100644 --- a/scripts/lib/devtool/upgrade.py +++ b/scripts/lib/devtool/upgrade.py @@ -571,7 +571,7 @@ def upgrade(args, config, basepath, workspace): else: srctree = standard.get_default_srctree(config, pn) - srctree_s = standard.get_real_srctree(srctree, rd.getVar('S'), rd.getVar('WORKDIR')) + srctree_s = standard.get_real_srctree(srctree, rd.getVar('S'), rd.getVar('UNPACKDIR')) # try to automatically discover latest version and revision if not provided on command line if not args.version and not args.srcrev: diff --git a/scripts/lib/recipetool/append.py b/scripts/lib/recipetool/append.py index c18926e56c..041d79f162 100644 --- a/scripts/lib/recipetool/append.py +++ b/scripts/lib/recipetool/append.py @@ -317,7 +317,7 @@ def appendsrc(args, files, rd, extralines=None): import oe.recipeutils srcdir = rd.getVar('S') - workdir = rd.getVar('WORKDIR') + unpackdir = rd.getVar('UNPACKDIR') import bb.fetch simplified = {} @@ -336,10 +336,10 @@ def appendsrc(args, files, rd, extralines=None): src_destdir = os.path.dirname(srcfile) if not args.use_workdir: if rd.getVar('S') == rd.getVar('STAGING_KERNEL_DIR'): - srcdir = os.path.join(workdir, rd.getVar('BB_GIT_DEFAULT_DESTSUFFIX')) + srcdir = os.path.join(unpackdir, rd.getVar('BB_GIT_DEFAULT_DESTSUFFIX')) if not bb.data.inherits_class('kernel-yocto', rd): - logger.warning('S == STAGING_KERNEL_DIR and non-kernel-yocto, unable to determine path to srcdir, defaulting to ${WORKDIR}/${BB_GIT_DEFAULT_DESTSUFFIX}') - src_destdir = os.path.join(os.path.relpath(srcdir, workdir), src_destdir) + logger.warning('S == STAGING_KERNEL_DIR and non-kernel-yocto, unable to determine path to srcdir, defaulting to ${UNPACKDIR}/${BB_GIT_DEFAULT_DESTSUFFIX}') + src_destdir = os.path.join(os.path.relpath(srcdir, unpackdir), src_destdir) src_destdir = os.path.normpath(src_destdir) if src_destdir and src_destdir != '.': diff --git a/scripts/lib/recipetool/create.py b/scripts/lib/recipetool/create.py index 7080558beb..edb6467103 100644 --- a/scripts/lib/recipetool/create.py +++ b/scripts/lib/recipetool/create.py @@ -735,7 +735,7 @@ def create_recipe(args): if srcsubdir and not args.binary: # (for binary packages we explicitly specify subdir= when fetching to # match the default value of S, so we don't need to set it in that case) - lines_before.append('S = "${WORKDIR}/%s"' % srcsubdir) + lines_before.append('S = "${UNPACKDIR}/%s"' % srcsubdir) lines_before.append('') if pkgarch: @@ -839,7 +839,7 @@ def create_recipe(args): line = line.replace(realpv, '${PV}') if pn: line = line.replace(pn, '${BPN}') - if line == 'S = "${WORKDIR}/${BPN}-${PV}"' or 'tmp-recipetool-' in line: + if line == 'S = "${UNPACKDIR}/${BPN}-${PV}"' or 'tmp-recipetool-' in line: skipblank = True continue elif line.startswith('SRC_URI = '): -- cgit v1.2.3-54-g00ecf