diff options
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/license.bbclass | 62 |
1 files changed, 51 insertions, 11 deletions
diff --git a/meta/classes/license.bbclass b/meta/classes/license.bbclass index 48d457e824..be1e0e7095 100644 --- a/meta/classes/license.bbclass +++ b/meta/classes/license.bbclass | |||
@@ -25,6 +25,10 @@ python write_package_manifest() { | |||
25 | 'w+').write(image_list_installed_packages(d)) | 25 | 'w+').write(image_list_installed_packages(d)) |
26 | } | 26 | } |
27 | 27 | ||
28 | python write_deploy_manifest() { | ||
29 | license_deployed_manifest(d) | ||
30 | } | ||
31 | |||
28 | python license_create_manifest() { | 32 | python license_create_manifest() { |
29 | import oe.packagedata | 33 | import oe.packagedata |
30 | from oe.rootfs import image_list_installed_packages | 34 | from oe.rootfs import image_list_installed_packages |
@@ -70,16 +74,24 @@ def write_license_files(d, license_manifest, pkg_dic): | |||
70 | pkg_dic[pkg]["LICENSES"] = re.sub(' *', ' ', pkg_dic[pkg]["LICENSES"]) | 74 | pkg_dic[pkg]["LICENSES"] = re.sub(' *', ' ', pkg_dic[pkg]["LICENSES"]) |
71 | pkg_dic[pkg]["LICENSES"] = pkg_dic[pkg]["LICENSES"].split() | 75 | pkg_dic[pkg]["LICENSES"] = pkg_dic[pkg]["LICENSES"].split() |
72 | 76 | ||
73 | license_file.write("PACKAGE NAME: %s\n" % pkg) | 77 | if not "IMAGE_MANIFEST" in pkg_dic[pkg]: |
74 | license_file.write("PACKAGE VERSION: %s\n" % pkg_dic[pkg]["PV"]) | 78 | # Rootfs manifest |
75 | license_file.write("RECIPE NAME: %s\n" % pkg_dic[pkg]["PN"]) | 79 | license_file.write("PACKAGE NAME: %s\n" % pkg) |
76 | license_file.write("LICENSE: %s\n\n" % pkg_dic[pkg]["LICENSE"]) | 80 | license_file.write("PACKAGE VERSION: %s\n" % pkg_dic[pkg]["PV"]) |
77 | 81 | license_file.write("RECIPE NAME: %s\n" % pkg_dic[pkg]["PN"]) | |
78 | # If the package doesn't contain any file, that is, its size is 0, the license | 82 | license_file.write("LICENSE: %s\n\n" % pkg_dic[pkg]["LICENSE"]) |
79 | # isn't relevant as far as the final image is concerned. So doing license check | 83 | |
80 | # doesn't make much sense, skip it. | 84 | # If the package doesn't contain any file, that is, its size is 0, the license |
81 | if pkg_dic[pkg]["PKGSIZE_%s" % pkg] == "0": | 85 | # isn't relevant as far as the final image is concerned. So doing license check |
82 | continue | 86 | # doesn't make much sense, skip it. |
87 | if pkg_dic[pkg]["PKGSIZE_%s" % pkg] == "0": | ||
88 | continue | ||
89 | else: | ||
90 | # Image manifest | ||
91 | license_file.write("RECIPE NAME: %s\n" % pkg_dic[pkg]["PN"]) | ||
92 | license_file.write("VERSION: %s\n" % pkg_dic[pkg]["PV"]) | ||
93 | license_file.write("LICENSE: %s\n" % pkg_dic[pkg]["LICENSE"]) | ||
94 | license_file.write("FILES: %s\n\n" % pkg_dic[pkg]["FILES"]) | ||
83 | 95 | ||
84 | for lic in pkg_dic[pkg]["LICENSES"]: | 96 | for lic in pkg_dic[pkg]["LICENSES"]: |
85 | lic_file = os.path.join(d.getVar('LICENSE_DIRECTORY', True), | 97 | lic_file = os.path.join(d.getVar('LICENSE_DIRECTORY', True), |
@@ -141,6 +153,34 @@ def write_license_files(d, license_manifest, pkg_dic): | |||
141 | os.link(pkg_license, pkg_rootfs_license) | 153 | os.link(pkg_license, pkg_rootfs_license) |
142 | 154 | ||
143 | 155 | ||
156 | def license_deployed_manifest(d): | ||
157 | """ | ||
158 | Write the license manifest for the deployed recipes. | ||
159 | The deployed recipes usually includes the bootloader | ||
160 | and extra files to boot the target. | ||
161 | """ | ||
162 | |||
163 | dep_dic = {} | ||
164 | man_dic = {} | ||
165 | lic_dir = d.getVar("LICENSE_DIRECTORY", True) | ||
166 | |||
167 | dep_dic = get_deployed_dependencies(d) | ||
168 | for dep in dep_dic.keys(): | ||
169 | man_dic[dep] = {} | ||
170 | # It is necessary to mark this will be used for image manifest | ||
171 | man_dic[dep]["IMAGE_MANIFEST"] = True | ||
172 | man_dic[dep]["PN"] = dep | ||
173 | man_dic[dep]["FILES"] = \ | ||
174 | " ".join(get_deployed_files(dep_dic[dep])) | ||
175 | with open(os.path.join(lic_dir, dep, "recipeinfo"), "r") as f: | ||
176 | for line in f.readlines(): | ||
177 | key,val = line.split(": ", 1) | ||
178 | man_dic[dep][key] = val[:-1] | ||
179 | |||
180 | image_license_manifest = os.path.join(d.getVar('LICENSE_DIRECTORY', True), | ||
181 | d.getVar('IMAGE_NAME', True), 'image_license.manifest') | ||
182 | write_license_files(d, image_license_manifest, man_dic) | ||
183 | |||
144 | def get_deployed_dependencies(d): | 184 | def get_deployed_dependencies(d): |
145 | """ | 185 | """ |
146 | Get all the deployed dependencies of an image | 186 | Get all the deployed dependencies of an image |
@@ -591,7 +631,7 @@ SSTATETASKS += "do_populate_lic" | |||
591 | do_populate_lic[sstate-inputdirs] = "${LICSSTATEDIR}" | 631 | do_populate_lic[sstate-inputdirs] = "${LICSSTATEDIR}" |
592 | do_populate_lic[sstate-outputdirs] = "${LICENSE_DIRECTORY}/" | 632 | do_populate_lic[sstate-outputdirs] = "${LICENSE_DIRECTORY}/" |
593 | 633 | ||
594 | ROOTFS_POSTPROCESS_COMMAND_prepend = "write_package_manifest; license_create_manifest; " | 634 | ROOTFS_POSTPROCESS_COMMAND_prepend = "write_package_manifest; write_deploy_manifest; license_create_manifest; " |
595 | do_rootfs[recrdeptask] += "do_populate_lic" | 635 | do_rootfs[recrdeptask] += "do_populate_lic" |
596 | 636 | ||
597 | do_populate_lic_setscene[dirs] = "${LICSSTATEDIR}/${PN}" | 637 | do_populate_lic_setscene[dirs] = "${LICSSTATEDIR}/${PN}" |