diff options
author | Patrick Ohly <patrick.ohly@intel.com> | 2017-04-12 17:44:26 +0200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-04-12 23:55:53 +0100 |
commit | 02f5d7836b726e40fef82b50b8145acc839b360b (patch) | |
tree | 5b1f0ba638a332d8dd54b280fbad9247579ba161 /scripts/lib/compatlayer/__init__.py | |
parent | cb0d3de4540e412cfcb7804b4b1689141c80e3a1 (diff) | |
download | openembedded-core-02f5d7836b726e40fef82b50b8145acc839b360b.tar.gz openembedded-core-02f5d7836b726e40fef82b50b8145acc839b360b.tar.bz2 openembedded-core-02f5d7836b726e40fef82b50b8145acc839b360b.zip |
yocto-compat-layer: better handling of per-machine world build breakage
It is fairly common that BSP layers enable recipes when choosing
machines from that layer without checking whether the recipe actually
builds in the current distro. That breaks "bitbake world", retrieving
signatures and thus the test_machine_signatures test.
It's better to let that test continue with the signatures that can be
retrieved and report the broken world build separately. Right now, the
new test_machine_world iterates over all machines. More elegant and
useful in combination with a (currently missing) selection of which
tests to run would be to generate one test instance per machine. But that
is not straightforward and has to wait.
The "-k" argument alone was not enough to proceed despite failures,
because bitbake then still returns a non-zero exit code. The existance
of the output file is taken as sign that the bitbake execution managed
was not fatally broken.
Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib/compatlayer/__init__.py')
-rw-r--r-- | scripts/lib/compatlayer/__init__.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/scripts/lib/compatlayer/__init__.py b/scripts/lib/compatlayer/__init__.py index 0d6f4e9c3b..e35f8c0d32 100644 --- a/scripts/lib/compatlayer/__init__.py +++ b/scripts/lib/compatlayer/__init__.py @@ -233,9 +233,21 @@ def get_signatures(builddir, failsafe=False, machine=None): if failsafe: cmd += '-k ' cmd += '-S none world' - check_command('Generating signatures failed. This might be due to some parse error and/or general layer incompatibilities.', - cmd) sigs_file = os.path.join(builddir, 'locked-sigs.inc') + if os.path.exists(sigs_file): + os.unlink(sigs_file) + try: + check_command('Generating signatures failed. This might be due to some parse error and/or general layer incompatibilities.', + cmd) + except RuntimeError as ex: + if failsafe and os.path.exists(sigs_file): + # Ignore the error here. Most likely some recipes active + # in a world build lack some dependencies. There is a + # separate test_machine_world_build which exposes the + # failure. + pass + else: + raise sig_regex = re.compile("^(?P<task>.*:.*):(?P<hash>.*) .$") tune_regex = re.compile("(^|\s)SIGGEN_LOCKEDSIGS_t-(?P<tune>\S*)\s*=\s*") |