summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/package.bbclass40
-rw-r--r--meta/lib/oe/packagedata.py12
2 files changed, 49 insertions, 3 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 702427fecc..84fdafa8fe 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -1140,6 +1140,14 @@ python split_and_strip_files () {
1140 # Modified the file so clear the cache 1140 # Modified the file so clear the cache
1141 cpath.updatecache(file) 1141 cpath.updatecache(file)
1142 1142
1143 def strip_pkgd_prefix(f):
1144 nonlocal dvar
1145
1146 if f.startswith(dvar):
1147 return f[len(dvar):]
1148
1149 return f
1150
1143 # 1151 #
1144 # First lets process debug splitting 1152 # First lets process debug splitting
1145 # 1153 #
@@ -1153,6 +1161,8 @@ python split_and_strip_files () {
1153 for file in staticlibs: 1161 for file in staticlibs:
1154 results.append( (file,source_info(file, d)) ) 1162 results.append( (file,source_info(file, d)) )
1155 1163
1164 d.setVar("PKGDEBUGSOURCES", {strip_pkgd_prefix(f): sorted(s) for f, s in results})
1165
1156 sources = set() 1166 sources = set()
1157 for r in results: 1167 for r in results:
1158 sources.update(r[1]) 1168 sources.update(r[1])
@@ -1460,6 +1470,7 @@ PKGDATA_VARS = "PN PE PV PR PKGE PKGV PKGR LICENSE DESCRIPTION SUMMARY RDEPENDS
1460python emit_pkgdata() { 1470python emit_pkgdata() {
1461 from glob import glob 1471 from glob import glob
1462 import json 1472 import json
1473 import bb.compress.zstd
1463 1474
1464 def process_postinst_on_target(pkg, mlprefix): 1475 def process_postinst_on_target(pkg, mlprefix):
1465 pkgval = d.getVar('PKG_%s' % pkg) 1476 pkgval = d.getVar('PKG_%s' % pkg)
@@ -1532,6 +1543,8 @@ fi
1532 with open(data_file, 'w') as fd: 1543 with open(data_file, 'w') as fd:
1533 fd.write("PACKAGES: %s\n" % packages) 1544 fd.write("PACKAGES: %s\n" % packages)
1534 1545
1546 pkgdebugsource = d.getVar("PKGDEBUGSOURCES") or []
1547
1535 pn = d.getVar('PN') 1548 pn = d.getVar('PN')
1536 global_variants = (d.getVar('MULTILIB_GLOBAL_VARIANTS') or "").split() 1549 global_variants = (d.getVar('MULTILIB_GLOBAL_VARIANTS') or "").split()
1537 variants = (d.getVar('MULTILIB_VARIANTS') or "").split() 1550 variants = (d.getVar('MULTILIB_VARIANTS') or "").split()
@@ -1551,17 +1564,32 @@ fi
1551 pkgval = pkg 1564 pkgval = pkg
1552 d.setVar('PKG_%s' % pkg, pkg) 1565 d.setVar('PKG_%s' % pkg, pkg)
1553 1566
1567 extended_data = {
1568 "files_info": {}
1569 }
1570
1554 pkgdestpkg = os.path.join(pkgdest, pkg) 1571 pkgdestpkg = os.path.join(pkgdest, pkg)
1555 files = {} 1572 files = {}
1573 files_extra = {}
1556 total_size = 0 1574 total_size = 0
1557 seen = set() 1575 seen = set()
1558 for f in pkgfiles[pkg]: 1576 for f in pkgfiles[pkg]:
1559 relpth = os.path.relpath(f, pkgdestpkg) 1577 fpath = os.sep + os.path.relpath(f, pkgdestpkg)
1578
1560 fstat = os.lstat(f) 1579 fstat = os.lstat(f)
1561 files[os.sep + relpth] = fstat.st_size 1580 files[fpath] = fstat.st_size
1581
1582 extended_data["files_info"].setdefault(fpath, {})
1583 extended_data["files_info"][fpath]['size'] = fstat.st_size
1584
1562 if fstat.st_ino not in seen: 1585 if fstat.st_ino not in seen:
1563 seen.add(fstat.st_ino) 1586 seen.add(fstat.st_ino)
1564 total_size += fstat.st_size 1587 total_size += fstat.st_size
1588
1589 if fpath in pkgdebugsource:
1590 extended_data["files_info"][fpath]['debugsrc'] = pkgdebugsource[fpath]
1591 del pkgdebugsource[fpath]
1592
1565 d.setVar('FILES_INFO', json.dumps(files, sort_keys=True)) 1593 d.setVar('FILES_INFO', json.dumps(files, sort_keys=True))
1566 1594
1567 process_postinst_on_target(pkg, d.getVar("MLPREFIX")) 1595 process_postinst_on_target(pkg, d.getVar("MLPREFIX"))
@@ -1582,6 +1610,11 @@ fi
1582 1610
1583 sf.write('%s_%s: %d\n' % ('PKGSIZE', pkg, total_size)) 1611 sf.write('%s_%s: %d\n' % ('PKGSIZE', pkg, total_size))
1584 1612
1613 subdata_extended_file = pkgdatadir + "/extended/%s.json.zstd" % pkg
1614 num_threads = int(d.getVar("BB_NUMBER_THREADS"))
1615 with bb.compress.zstd.open(subdata_extended_file, "wt", encoding="utf-8", num_threads=num_threads) as f:
1616 json.dump(extended_data, f, sort_keys=True, separators=(",", ":"))
1617
1585 # Symlinks needed for rprovides lookup 1618 # Symlinks needed for rprovides lookup
1586 rprov = d.getVar('RPROVIDES_%s' % pkg) or d.getVar('RPROVIDES') 1619 rprov = d.getVar('RPROVIDES_%s' % pkg) or d.getVar('RPROVIDES')
1587 if rprov: 1620 if rprov:
@@ -1612,7 +1645,8 @@ fi
1612 write_extra_runtime_pkgs(global_variants, packages, pkgdatadir) 1645 write_extra_runtime_pkgs(global_variants, packages, pkgdatadir)
1613 1646
1614} 1647}
1615emit_pkgdata[dirs] = "${PKGDESTWORK}/runtime ${PKGDESTWORK}/runtime-reverse ${PKGDESTWORK}/runtime-rprovides" 1648emit_pkgdata[dirs] = "${PKGDESTWORK}/runtime ${PKGDESTWORK}/runtime-reverse ${PKGDESTWORK}/runtime-rprovides ${PKGDESTWORK}/extended"
1649emit_pkgdata[vardepsexclude] = "BB_NUMBER_THREADS"
1616 1650
1617ldconfig_postinst_fragment() { 1651ldconfig_postinst_fragment() {
1618if [ x"$D" = "x" ]; then 1652if [ x"$D" = "x" ]; then
diff --git a/meta/lib/oe/packagedata.py b/meta/lib/oe/packagedata.py
index a82085a792..00f7dc1f3d 100644
--- a/meta/lib/oe/packagedata.py
+++ b/meta/lib/oe/packagedata.py
@@ -57,6 +57,18 @@ def read_subpkgdata_dict(pkg, d):
57 ret[newvar] = subd[var] 57 ret[newvar] = subd[var]
58 return ret 58 return ret
59 59
60def read_subpkgdata_extended(pkg, d):
61 import json
62 import bb.compress.zstd
63
64 fn = d.expand("${PKGDATA_DIR}/extended/%s.json.zstd" % pkg)
65 try:
66 num_threads = int(d.getVar("BB_NUMBER_THREADS"))
67 with bb.compress.zstd.open(fn, "rt", encoding="utf-8", num_threads=num_threads) as f:
68 return json.load(f)
69 except FileNotFoundError:
70 return None
71
60def _pkgmap(d): 72def _pkgmap(d):
61 """Return a dictionary mapping package to recipe name.""" 73 """Return a dictionary mapping package to recipe name."""
62 74