summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2017-08-31 11:54:08 +1200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-08-31 23:30:02 +0100
commit69d50eb9ec2e8dc696aac13d0ffbf890fd4ce0e6 (patch)
tree199711a420cc2eae829a87f039056b01a35f8cdd
parent34580ac2872da6ae70d5269eb107d31cd5239ad7 (diff)
downloadpoky-69d50eb9ec2e8dc696aac13d0ffbf890fd4ce0e6.tar.gz
devtool: upgrade: workaround for recipes which apply patches conditional upon class
If we're upgrading a recipe that appends additional patches for, say, class-native, and we're just upgrading the target variant, then when we copied the recipe into the workspace we skipped copying the additional patches for the native variant. This caused warnings because the workspace recipe is preferred. Look at SRC_URI for all variants when copying files to work around this. More work is needed to make it easier to work with recipes that use BBCLASSEXTEND where you need to build more than one variant at once, but this at least fixes the immediate ugliness. (From OE-Core rev: 56bf5e93358187e31160d7893f57906bb3dc7ad7) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/lib/oe/recipeutils.py35
-rw-r--r--scripts/lib/devtool/upgrade.py2
2 files changed, 29 insertions, 8 deletions
diff --git a/meta/lib/oe/recipeutils.py b/meta/lib/oe/recipeutils.py
index b946128d78..c8570acf9e 100644
--- a/meta/lib/oe/recipeutils.py
+++ b/meta/lib/oe/recipeutils.py
@@ -2,7 +2,7 @@
2# 2#
3# Some code borrowed from the OE layer index 3# Some code borrowed from the OE layer index
4# 4#
5# Copyright (C) 2013-2016 Intel Corporation 5# Copyright (C) 2013-2017 Intel Corporation
6# 6#
7 7
8import sys 8import sys
@@ -320,7 +320,7 @@ def patch_recipe(d, fn, varvalues, patch=False, relpath=''):
320 320
321 321
322 322
323def copy_recipe_files(d, tgt_dir, whole_dir=False, download=True): 323def copy_recipe_files(d, tgt_dir, whole_dir=False, download=True, all_variants=False):
324 """Copy (local) recipe files, including both files included via include/require, 324 """Copy (local) recipe files, including both files included via include/require,
325 and files referred to in the SRC_URI variable.""" 325 and files referred to in the SRC_URI variable."""
326 import bb.fetch2 326 import bb.fetch2
@@ -328,10 +328,31 @@ def copy_recipe_files(d, tgt_dir, whole_dir=False, download=True):
328 328
329 # FIXME need a warning if the unexpanded SRC_URI value contains variable references 329 # FIXME need a warning if the unexpanded SRC_URI value contains variable references
330 330
331 uris = (d.getVar('SRC_URI') or "").split() 331 uri_values = []
332 fetch = bb.fetch2.Fetch(uris, d) 332 localpaths = []
333 if download: 333 def fetch_urls(rdata):
334 fetch.download() 334 # Collect the local paths from SRC_URI
335 srcuri = rdata.getVar('SRC_URI') or ""
336 if srcuri not in uri_values:
337 fetch = bb.fetch2.Fetch(srcuri.split(), rdata)
338 if download:
339 fetch.download()
340 for pth in fetch.localpaths():
341 if pth not in localpaths:
342 localpaths.append(pth)
343 uri_values.append(srcuri)
344
345 fetch_urls(d)
346 if all_variants:
347 # Get files for other variants e.g. in the case of a SRC_URI_append
348 localdata = bb.data.createCopy(d)
349 variants = (localdata.getVar('BBCLASSEXTEND') or '').split()
350 if variants:
351 # Ensure we handle class-target if we're dealing with one of the variants
352 variants.append('target')
353 for variant in variants:
354 localdata.setVar('CLASSOVERRIDE', 'class-%s' % variant)
355 fetch_urls(localdata)
335 356
336 # Copy local files to target directory and gather any remote files 357 # Copy local files to target directory and gather any remote files
337 bb_dir = os.path.abspath(os.path.dirname(d.getVar('FILE'))) + os.sep 358 bb_dir = os.path.abspath(os.path.dirname(d.getVar('FILE'))) + os.sep
@@ -341,7 +362,7 @@ def copy_recipe_files(d, tgt_dir, whole_dir=False, download=True):
341 includes = [os.path.abspath(path) for path in d.getVar('BBINCLUDED').split() if os.path.exists(path)] 362 includes = [os.path.abspath(path) for path in d.getVar('BBINCLUDED').split() if os.path.exists(path)]
342 # We also check this below, but we don't want any items in this list being considered remotes 363 # We also check this below, but we don't want any items in this list being considered remotes
343 includes = [path for path in includes if path.startswith(bb_dir)] 364 includes = [path for path in includes if path.startswith(bb_dir)]
344 for path in fetch.localpaths() + includes: 365 for path in localpaths + includes:
345 # Only import files that are under the meta directory 366 # Only import files that are under the meta directory
346 if path.startswith(bb_dir): 367 if path.startswith(bb_dir):
347 if not whole_dir: 368 if not whole_dir:
diff --git a/scripts/lib/devtool/upgrade.py b/scripts/lib/devtool/upgrade.py
index 24937dcd20..297d646f55 100644
--- a/scripts/lib/devtool/upgrade.py
+++ b/scripts/lib/devtool/upgrade.py
@@ -300,7 +300,7 @@ def _create_new_recipe(newpv, md5, sha256, srcrev, srcbranch, workspace, tinfoil
300 bpn = rd.getVar('BPN') 300 bpn = rd.getVar('BPN')
301 path = os.path.join(workspace, 'recipes', bpn) 301 path = os.path.join(workspace, 'recipes', bpn)
302 bb.utils.mkdirhier(path) 302 bb.utils.mkdirhier(path)
303 copied, _ = oe.recipeutils.copy_recipe_files(rd, path) 303 copied, _ = oe.recipeutils.copy_recipe_files(rd, path, all_variants=True)
304 if not copied: 304 if not copied:
305 raise DevtoolError('Internal error - no files were copied for recipe %s' % bpn) 305 raise DevtoolError('Internal error - no files were copied for recipe %s' % bpn)
306 logger.debug('Copied %s to %s' % (copied, path)) 306 logger.debug('Copied %s to %s' % (copied, path))