conf/layer.conf: Update LAYERSERIES_COMPAT to warrior
[meta-ossystems-base.git] / classes / release-bundle.bbclass
1 # -*- python -*-
2 # release-bundle.bbclass
3 #
4 # Copyright (C) 2016 O.S. Systems Software Ltda.  All Rights Reserved
5 #
6 # This class include additional tasks for the recipes, which allow for
7 # the release bundle generation.
8 #
9 # The main objective of this is to allow the mirror tarball generation
10 # and collection for individual recipes.
11 #
12 # Released under the MIT license (see packages/COPYING)
13
14 RELEASE_BUNDLE_TMP_DOWNLOAD_CACHE = "${TMPDIR}/release-bundle/download-cache"
15
16 addtask generate_mirror_tarball before do_collect_recipe_source
17 do_generate_mirror_tarball[doc] = "Generates the mirror tarball for a target"
18 do_generate_mirror_tarball[dirs] = "${DL_DIR}"
19 do_generate_mirror_tarball[vardeps] += "SRCREV"
20 do_generate_mirror_tarball[nostamp] = "1"
21 python do_generate_mirror_tarball() {
22     src_uri = (d.getVar('SRC_URI', True) or '').split()
23     if len(src_uri) == 0:
24         return
25
26     pn = d.getVar('PN', True)
27     bb.debug(1, "Generating mirror tarball for '%s' recipe." % pn)
28
29     # FIXME: The cache needs to be cleaned up or recipes which
30     # references SRCPV fails to identify the changed value.
31     bb.fetch2.urldata_cache = {}
32     d.setVar("BB_GENERATE_MIRROR_TARBALLS", "1")
33
34     try:
35         fetcher = bb.fetch2.Fetch(src_uri, d)
36         fetcher.download()
37     except bb.fetch2.BBFetchException as e:
38         raise bb.build.FuncFailed(e)
39 }
40
41 RELEASE_BUNDLE_LAYERNAME = "${@bb.utils.get_file_layer('${FILE}', d) or 'UNKNOWN'}"
42 RELEASE_BUNDLE_LAYERDIR = "${PLATFORM_LAYERDIR_${RECIPE_LAYERNAME}}"
43
44 addtask collect_recipe_source after do_generate_mirror_tarball
45 do_collect_recipe_source[doc] = "Collect the source code of a target"
46 do_collect_recipe_source[dirs] = "${DL_DIR}"
47 do_collect_recipe_source[cleandirs] = "${RELEASE_BUNDLE_TMP_DOWNLOAD_CACHE}/${PN}/${RELEASE_BUNDLE_LAYERDIR}/downloads"
48 do_collect_recipe_source[file-checksums] = "${@bb.fetch.get_checksum_file_list(d)}"
49 do_collect_recipe_source[file-checksums] += " ${@get_lic_checksum_file_list(d)}"
50 do_collect_recipe_source[vardeps] += "SRCREV"
51 do_collect_recipe_source[nostamp] = "1"
52 python do_collect_recipe_source() {
53     src_uri = (d.getVar('SRC_URI', True) or '').split()
54     if len(src_uri) == 0:
55         return
56
57     pn = d.getVar('PN', True)
58     layerdir = d.getVar('RELEASE_BUNDLE_LAYERDIR', True)
59     bb.debug(1, "Collecting the source code for '%s' recipe in %s" % (pn, layerdir))
60
61     dl_dir = d.getVar('DL_DIR', True)
62     dl_dir_bundle = oe.path.join(d.getVar('RELEASE_BUNDLE_TMP_DOWNLOAD_CACHE', True), pn, layerdir, 'downloads')
63
64     try:
65         fetcher = bb.fetch2.Fetch(src_uri, d)
66         for u in fetcher.ud.values():
67             if u.mirrortarball:
68                 oe.path.symlink(oe.path.join(dl_dir, u.mirrortarball),
69                                 oe.path.join(dl_dir_bundle, u.mirrortarball),
70                                 force=True)
71     except bb.fetch2.BBFetchException as e:
72         raise bb.build.FuncFailed(e)
73 }