diff options
author | Robert Yang <liezhi.yang@windriver.com> | 2013-09-02 09:47:21 -0400 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-09-09 16:28:46 +0100 |
commit | 87771db34c660c82333bb47a17b31f18bbffe776 (patch) | |
tree | 7c86afc8b10b3d6f3414e005ba051db61e3b2a84 /bitbake | |
parent | 0583714a57d7b36ca210eab59e9a8143fbfc2b49 (diff) | |
download | poky-87771db34c660c82333bb47a17b31f18bbffe776.tar.gz |
bitbake: runqueue.py: check whether multiple versions of the same PN are due to be built
There would be an race issue if we:
$ bitbake make-3.81 make-3.82
This because they are being built at the same time which would cause
unexpected problems, for example:
[snip]
ERROR: Package already staged (/path/to/tmp/sstate-control/manifest-qemux86-make.populate-sysroot)?!
ERROR: Function failed: sstate_task_postfunc
[snip]
Or there would be python's strack trace such as:
[snip]
*** 0004: mfile = open(manifest)
0005: entries = mfile.readlines()
0006: mfile.close()
0007:
0008: for entry in entries:
Exception: IOError: [Errno 2] No such file or directory: xxx
[snip]
[YOCTO #5094]
We can quit earlier to avoid this kind of issue when two versions of the same PN
are going to be built since this isn't supported.
(Bitbake rev: ab377c00c33a2d296bfda1b0b6c2a62b29d1004f)
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 79e612e032..a868332509 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -696,6 +696,14 @@ class RunQueueData: | |||
696 | prov_list[prov].append(fn) | 696 | prov_list[prov].append(fn) |
697 | for prov in prov_list: | 697 | for prov in prov_list: |
698 | if len(prov_list[prov]) > 1 and prov not in self.multi_provider_whitelist: | 698 | if len(prov_list[prov]) > 1 and prov not in self.multi_provider_whitelist: |
699 | seen_pn = [] | ||
700 | # If two versions of the same PN are being built its fatal, we don't support it. | ||
701 | for fn in prov_list[prov]: | ||
702 | pn = self.dataCache.pkg_fn[fn] | ||
703 | if pn not in seen_pn: | ||
704 | seen_pn.append(pn) | ||
705 | else: | ||
706 | bb.fatal("Multiple versions of %s are due to be built (%s). Only one version of a given PN should be built in any given build. You likely need to set PREFERRED_VERSION_%s to select the correct version or don't depend on multiple versions." % (pn, " ".join(prov_list[prov]), pn)) | ||
699 | msg = "Multiple .bb files are due to be built which each provide %s (%s)." % (prov, " ".join(prov_list[prov])) | 707 | msg = "Multiple .bb files are due to be built which each provide %s (%s)." % (prov, " ".join(prov_list[prov])) |
700 | if self.warn_multi_bb: | 708 | if self.warn_multi_bb: |
701 | logger.warn(msg) | 709 | logger.warn(msg) |
@@ -703,7 +711,6 @@ class RunQueueData: | |||
703 | msg += "\n This usually means one provides something the other doesn't and should." | 711 | msg += "\n This usually means one provides something the other doesn't and should." |
704 | logger.error(msg) | 712 | logger.error(msg) |
705 | 713 | ||
706 | |||
707 | # Create a whitelist usable by the stamp checks | 714 | # Create a whitelist usable by the stamp checks |
708 | stampfnwhitelist = [] | 715 | stampfnwhitelist = [] |
709 | for entry in self.stampwhitelist.split(): | 716 | for entry in self.stampwhitelist.split(): |