1
0
mirror of https://git.yoctoproject.org/poky synced 2026-06-10 16:10:04 +00:00

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 <alex@linutronix.de>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Alexander Kanavin
2025-06-16 11:49:57 +02:00
committed by Richard Purdie
parent efb0410d38
commit 4547232c71
8 changed files with 31 additions and 31 deletions
+1 -1
View File
@@ -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(
+6 -6
View File
@@ -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:
+1 -1
View File
@@ -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:
+4 -4
View File
@@ -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 != '.':
+2 -2
View File
@@ -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 = '):