summaryrefslogtreecommitdiffstats
path: root/scripts/lib/devtool/__init__.py
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2017-09-06 21:55:01 +1200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-09-18 11:07:29 +0100
commit3fde63363ab90672d6baf204c2b2dca98320fe7d (patch)
tree17bd84f02a82e57ce9068aafc28338bf282de835 /scripts/lib/devtool/__init__.py
parent10af6d86b3effc523cfa0ec49741c5b02ee2cf86 (diff)
downloadpoky-3fde63363ab90672d6baf204c2b2dca98320fe7d.tar.gz
devtool: ensure recipes devtool is working on are unlocked within the eSDK
Alongside reworking the way devtool extracts source, we now need to ensure that within the extensible SDK where task signatures are locked, the signatures of the tasks for the recipes being worked on get unlocked at the right time or otherwise we'll now get taskhash mismatches when running devtool modify on a recipe that was included in the eSDK such as the kernel (due to a separate bug). The existing mechanism for auto-unlocking recipes was a little weak and was happening too late, so I've reimplemented it so that: (a) it gets triggered immediately when the recipe/append is created (b) we avoid writing to the unlocked signatures file unnecessarily (since it's a global configuration file) and (c) within the eSDK configuration we whitelist SIGGEN_UNLOCKED_RECIPES to avoid unnecessary reparses every time we perform one of the devtool operations that does need to change this list. Fixes [YOCTO #11883] (not the underlying cause, but this manifestation of the issue). (From OE-Core rev: 4e9a0be32fc30fb87d65da7cd1a4015c99533aff) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib/devtool/__init__.py')
-rw-r--r--scripts/lib/devtool/__init__.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/scripts/lib/devtool/__init__.py b/scripts/lib/devtool/__init__.py
index 14170cb69e..94e3d7d4b3 100644
--- a/scripts/lib/devtool/__init__.py
+++ b/scripts/lib/devtool/__init__.py
@@ -297,3 +297,43 @@ def replace_from_file(path, old, new):
297 except ValueError: 297 except ValueError:
298 pass 298 pass
299 write_file(path, "\n".join(new_contents)) 299 write_file(path, "\n".join(new_contents))
300
301
302def update_unlockedsigs(basepath, workspace, fixed_setup, extra=None):
303 """ This function will make unlocked-sigs.inc match the recipes in the
304 workspace plus any extras we want unlocked. """
305
306 if not fixed_setup:
307 # Only need to write this out within the eSDK
308 return
309
310 if not extra:
311 extra = []
312
313 confdir = os.path.join(basepath, 'conf')
314 unlockedsigs = os.path.join(confdir, 'unlocked-sigs.inc')
315
316 # Get current unlocked list if any
317 values = {}
318 def get_unlockedsigs_varfunc(varname, origvalue, op, newlines):
319 values[varname] = origvalue
320 return origvalue, None, 0, True
321 if os.path.exists(unlockedsigs):
322 with open(unlockedsigs, 'r') as f:
323 bb.utils.edit_metadata(f, ['SIGGEN_UNLOCKED_RECIPES'], get_unlockedsigs_varfunc)
324 unlocked = sorted(values.get('SIGGEN_UNLOCKED_RECIPES', []))
325
326 # If the new list is different to the current list, write it out
327 newunlocked = sorted(list(workspace.keys()) + extra)
328 if unlocked != newunlocked:
329 bb.utils.mkdirhier(confdir)
330 with open(unlockedsigs, 'w') as f:
331 f.write("# DO NOT MODIFY! YOUR CHANGES WILL BE LOST.\n" +
332 "# This layer was created by the OpenEmbedded devtool" +
333 " utility in order to\n" +
334 "# contain recipes that are unlocked.\n")
335
336 f.write('SIGGEN_UNLOCKED_RECIPES += "\\\n')
337 for pn in newunlocked:
338 f.write(' ' + pn)
339 f.write('"')