[gnome-continuous-yocto/gnomeostree-3.28-rocko: 3405/8267] devtool: modify: support recipes with only local files as source



commit 6e182aaa760c3be689e694e06d9ed0f4b66b1497
Author: Paul Eggleton <paul eggleton linux intel com>
Date:   Wed Nov 16 09:05:45 2016 +1300

    devtool: modify: support recipes with only local files as source
    
    The hello-mod recipe is unusual in that it has only local files in
    SRC_URI and builds these out of ${WORKDIR}. When you use devtool modify
    on it, devtool puts all of those files in an "oe-local-files"
    subdirectory of the source tree, which is not ${S} (or ${B}) any more
    and thus building the recipe afterwards fails. It's a bit of a hack, but
    symlink the files in oe-local-files into the source tree (and commit the
    symlinks with an ignored commit so that the repo is clean) to work
    around the problem. We only do this at time of extraction, so any files
    added to or removed from oe-local-files after that won't be handled, but
    I think there's a limit to how far we should go to support these kinds
    of recipes - ultimately they are anomalies.
    
    I initially tried a hacky workaround where I set effectively set B =
    "${WORKDIR}" and that allowed it to build, but other things such as the
    LIC_FILES_CHKSUM checks still broke because they expected to find files
    in ${S}. Another hack where I set the sourcetree to point to the
    oe-local-files subdirectory works for hello-mod but not for makedevs
    since whilst that is similar, unlike hello-mod it does in fact have
    files in the source tree (since it has a patch that adds COPYING) and
    thus the same issue occurred.
    
    Also tweak one of the tests that tries devtool modify / update-recipe on
    the makedevs recipe to try building it since that would have caught this
    issue.
    
    Fixes [YOCTO #10616].
    
    (From OE-Core rev: 857c06d6a1d161bf5a01311d07758bd4241929a3)
    
    Signed-off-by: Paul Eggleton <paul eggleton linux intel com>
    Signed-off-by: Ross Burton <ross burton intel com>
    Signed-off-by: Richard Purdie <richard purdie linuxfoundation org>

 meta/lib/oeqa/selftest/devtool.py |    2 ++
 scripts/lib/devtool/standard.py   |   23 +++++++++++++++++++++++
 2 files changed, 25 insertions(+), 0 deletions(-)
---
diff --git a/meta/lib/oeqa/selftest/devtool.py b/meta/lib/oeqa/selftest/devtool.py
index 2a08721..7db286f 100644
--- a/meta/lib/oeqa/selftest/devtool.py
+++ b/meta/lib/oeqa/selftest/devtool.py
@@ -874,6 +874,8 @@ class DevtoolTests(DevtoolBase):
         result = runCmd('devtool modify %s -x %s' % (testrecipe, tempdir))
         # Check git repo
         self._check_src_repo(tempdir)
+        # Try building just to ensure we haven't broken that
+        bitbake("%s" % testrecipe)
         # Edit / commit local source
         runCmd('echo "/* Foobar */" >> oe-local-files/makedevs.c', cwd=tempdir)
         runCmd('echo "Foo" > oe-local-files/new-local', cwd=tempdir)
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py
index 34de7bd..e4d2a57 100644
--- a/scripts/lib/devtool/standard.py
+++ b/scripts/lib/devtool/standard.py
@@ -674,6 +674,29 @@ def _extract_source(srctree, keep_temp, devbranch, sync, d):
 
             shutil.move(srcsubdir, srctree)
 
+            if os.path.abspath(d.getVar('S', True)) == os.path.abspath(d.getVar('WORKDIR', True)):
+                # If recipe extracts to ${WORKDIR}, symlink the files into the srctree
+                # (otherwise the recipe won't build as expected)
+                local_files_dir = os.path.join(srctree, 'oe-local-files')
+                addfiles = []
+                for root, _, files in os.walk(local_files_dir):
+                    relpth = os.path.relpath(root, local_files_dir)
+                    if relpth != '.':
+                        bb.utils.mkdirhier(os.path.join(srctree, relpth))
+                    for fn in files:
+                        if fn == '.gitignore':
+                            continue
+                        destpth = os.path.join(srctree, relpth, fn)
+                        if os.path.exists(destpth):
+                            os.unlink(destpth)
+                        os.symlink('oe-local-files/%s' % fn, destpth)
+                        addfiles.append(os.path.join(relpth, fn))
+                if addfiles:
+                    bb.process.run('git add %s' % ' '.join(addfiles), cwd=srctree)
+                useroptions = []
+                oe.patch.GitApplyTree.gitCommandUserOptions(useroptions, d=d)
+                bb.process.run('git %s commit -a -m "Committing local file symlinks\n\n%s"' % (' 
'.join(useroptions), oe.patch.GitApplyTree.ignore_commit_prefix), cwd=srctree)
+
         if kconfig:
             logger.info('Copying kernel config to srctree')
             shutil.copy2(kconfig, srctree)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]