summaryrefslogtreecommitdiffstats
path: root/meta/classes/archiver.bbclass
diff options
context:
space:
mode:
authorPatrick Ohly <patrick.ohly@intel.com>2016-09-26 11:55:15 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-09-28 10:16:03 +0100
commit58866d6e9a8ffea530abde29e1b98db398435b6d (patch)
tree0627a286bc0965339416645525e9be5f728474fe /meta/classes/archiver.bbclass
parente8426a57d733d66dbdd2c9ce01fc02ae98ffce9f (diff)
downloadpoky-58866d6e9a8ffea530abde29e1b98db398435b6d.tar.gz
archiver.bbclass: ignore unpack sub-directories in do_ar_original
Support for absolute paths in the "subdir" parameter was recently added (bitbake rev: c3873346c6fa). The git fetcher has supported absolute paths in "destsuffix" already before. When the path is absolute as in destsuffix=${S}/foobar, the tmpdir used by do_ar_original gets ignored, which breaks: - source code archiving (tmpdir is empty) - compilation due to race conditions (for example, ${S} getting modified by do_ar_original while do_compile runs) To solve this, these parameters get removed from URLs before instantiating the fetcher for them. This is done unconditionally also for relative paths, because these paths are not useful when archiving the original source (upstream source does not have them, they only get used by the recipe during compilation). (From OE-Core rev: c27c464e267db3f4b08cbd966412d19b0e756d28) Signed-off-by: Patrick Ohly <patrick.ohly@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/archiver.bbclass')
-rw-r--r--meta/classes/archiver.bbclass20
1 files changed, 19 insertions, 1 deletions
diff --git a/meta/classes/archiver.bbclass b/meta/classes/archiver.bbclass
index 2f3b278fb3..5f9c91d2f8 100644
--- a/meta/classes/archiver.bbclass
+++ b/meta/classes/archiver.bbclass
@@ -132,7 +132,25 @@ python do_ar_original() {
132 132
133 ar_outdir = d.getVar('ARCHIVER_OUTDIR', True) 133 ar_outdir = d.getVar('ARCHIVER_OUTDIR', True)
134 bb.note('Archiving the original source...') 134 bb.note('Archiving the original source...')
135 fetch = bb.fetch2.Fetch([], d) 135 urls = d.getVar("SRC_URI", True).split()
136 # destsuffix (git fetcher) and subdir (everything else) are allowed to be
137 # absolute paths (for example, destsuffix=${S}/foobar).
138 # That messes with unpacking inside our tmpdir below, because the fetchers
139 # will then unpack in that directory and completely ignore the tmpdir.
140 # That breaks parallel tasks relying on ${S}, like do_compile.
141 #
142 # To solve this, we remove these parameters from all URLs.
143 # We do this even for relative paths because it makes the content of the
144 # archives more useful (no extra paths that are only used during
145 # compilation).
146 for i, url in enumerate(urls):
147 decoded = bb.fetch2.decodeurl(url)
148 for param in ('destsuffix', 'subdir'):
149 if param in decoded[5]:
150 del decoded[5][param]
151 encoded = bb.fetch2.encodeurl(decoded)
152 urls[i] = encoded
153 fetch = bb.fetch2.Fetch(urls, d)
136 for url in fetch.urls: 154 for url in fetch.urls:
137 local = fetch.localpath(url).rstrip("/"); 155 local = fetch.localpath(url).rstrip("/");
138 if os.path.isfile(local): 156 if os.path.isfile(local):