summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Ohly <patrick.ohly@intel.com>2016-09-26 11:55:16 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-09-28 10:16:03 +0100
commitb5a00339d921510fe8cae68ba625ffa1558e2a7c (patch)
treefeb16f32a09813b0a0a8282d340470262eede3e4
parent58866d6e9a8ffea530abde29e1b98db398435b6d (diff)
downloadpoky-b5a00339d921510fe8cae68ba625ffa1558e2a7c.tar.gz
archive.bbclass: fix do_ar_original archiving of multiple source repos
When a recipe uses more than one source which isn't a plain file (for example, multiple git repos), then do_ar_original created the source archives using the same filename and thus only archived one source. The "name" parameter is used as file suffix to create unique names for each source, leading to archives following this pattern: deploy/${TARGET_SYS}/${PF}/${PF}[-<name>].tar.gz. The ${PF} part is a bit redundant, which may or may not be desirable. The patch is more localized this way (no need to modify create_tarball()). For example, meta-oic's iotivity_1.1.1.bb uses: url_iotivity = "git://github.com/iotivity/iotivity.git" branch_iotivity = "1.1-rel" SRC_URI = "${url_iotivity};destsuffix=${S};branch=${branch_iotivity};protocol=http;" url_tinycbor = "git://github.com/01org/tinycbor.git" SRC_URI += "${url_tinycbor};name=tinycbor;destsuffix=${S}/extlibs/tinycbor/tinycbor;protocol=http" url_hippomocks = "git://github.com/dascandy/hippomocks.git" SRC_URI += "${url_hippomocks};name=hippomocks;destsuffix=${S}/extlibs/hippomocks-master;protocol=http" SRC_URI += "file://hippomocks_mips_patch" url_gtest = "http://pkgs.fedoraproject.org/repo/pkgs/gtest/gtest-1.7.0.zip/2d6ec8ccdf5c46b05ba54a9fd1d130d7/gtest-1.7.0.zip" SRC_URI += "${url_gtest};name=gtest;subdir=${BP}/extlibs/gtest" url_sqlite = "http://www.sqlite.org/2015/sqlite-amalgamation-3081101.zip" SRC_URI += "${url_sqlite};name=sqlite3;subdir=${BP}/extlibs/sqlite3;unpack=false" These now get archived in deploy/sources/*/iotivity-1.1.1-r2/ as: gtest-1.7.0.zip iotivity-1.1.1-r2-recipe.tar.gz sqlite-amalgamation-3081101.zip hippomocks_mips_patch iotivity-1.1.1-r2.tar.gz iotivity-1.1.1-r2-hippomocks.tar.gz iotivity-1.1.1-r2-tinycbor.tar.gz (From OE-Core rev: 5c63ffc706c0fff8cfb797a238f4f0e73ee2813d) Signed-off-by: Patrick Ohly <patrick.ohly@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes/archiver.bbclass17
1 files changed, 16 insertions, 1 deletions
diff --git a/meta/classes/archiver.bbclass b/meta/classes/archiver.bbclass
index 5f9c91d2f8..1d8e863bdc 100644
--- a/meta/classes/archiver.bbclass
+++ b/meta/classes/archiver.bbclass
@@ -151,6 +151,7 @@ python do_ar_original() {
151 encoded = bb.fetch2.encodeurl(decoded) 151 encoded = bb.fetch2.encodeurl(decoded)
152 urls[i] = encoded 152 urls[i] = encoded
153 fetch = bb.fetch2.Fetch(urls, d) 153 fetch = bb.fetch2.Fetch(urls, d)
154 tarball_suffix = {}
154 for url in fetch.urls: 155 for url in fetch.urls:
155 local = fetch.localpath(url).rstrip("/"); 156 local = fetch.localpath(url).rstrip("/");
156 if os.path.isfile(local): 157 if os.path.isfile(local):
@@ -158,7 +159,21 @@ python do_ar_original() {
158 elif os.path.isdir(local): 159 elif os.path.isdir(local):
159 tmpdir = tempfile.mkdtemp(dir=d.getVar('ARCHIVER_WORKDIR', True)) 160 tmpdir = tempfile.mkdtemp(dir=d.getVar('ARCHIVER_WORKDIR', True))
160 fetch.unpack(tmpdir, (url,)) 161 fetch.unpack(tmpdir, (url,))
161 create_tarball(d, tmpdir + '/.', '', ar_outdir) 162 # To handle recipes with more than one source, we add the "name"
163 # URL parameter as suffix. We treat it as an error when
164 # there's more than one URL without a name, or a name gets reused.
165 # This is an additional safety net, in practice the name has
166 # to be set when using the git fetcher, otherwise SRCREV cannot
167 # be set separately for each URL.
168 params = bb.fetch2.decodeurl(url)[5]
169 name = params.get('name', '')
170 if name in tarball_suffix:
171 if not name:
172 bb.fatal("Cannot determine archive names for original source because 'name' URL parameter is unset in more than one URL. Add it to at least one of these: %s %s" % (tarball_suffix[name], url))
173 else:
174 bb.fatal("Cannot determine archive names for original source because 'name=' URL parameter '%s' is used twice. Make it unique in: %s %s" % (tarball_suffix[name], url))
175 tarball_suffix[name] = url
176 create_tarball(d, tmpdir + '/.', name, ar_outdir)
162 177
163 # Emit patch series files for 'original' 178 # Emit patch series files for 'original'
164 bb.note('Writing patch series files...') 179 bb.note('Writing patch series files...')