1c342db35SBrad Bishop# 292b42cb3SPatrick Williams# Copyright OpenEmbedded Contributors 392b42cb3SPatrick Williams# 4c342db35SBrad Bishop# SPDX-License-Identifier: GPL-2.0-only 5c342db35SBrad Bishop# 6c342db35SBrad Bishop 7eb8dc403SDave Cobbleyimport codecs 8eb8dc403SDave Cobbleyimport os 9517393d9SAndrew Geisslerimport json 10517393d9SAndrew Geisslerimport bb.compress.zstd 11517393d9SAndrew Geisslerimport oe.path 12517393d9SAndrew Geissler 13517393d9SAndrew Geisslerfrom glob import glob 14eb8dc403SDave Cobbley 15eb8dc403SDave Cobbleydef packaged(pkg, d): 16eb8dc403SDave Cobbley return os.access(get_subpkgedata_fn(pkg, d) + '.packaged', os.R_OK) 17eb8dc403SDave Cobbley 18eb8dc403SDave Cobbleydef read_pkgdatafile(fn): 19eb8dc403SDave Cobbley pkgdata = {} 20eb8dc403SDave Cobbley 21eb8dc403SDave Cobbley def decode(str): 22eb8dc403SDave Cobbley c = codecs.getdecoder("unicode_escape") 23eb8dc403SDave Cobbley return c(str)[0] 24eb8dc403SDave Cobbley 25eb8dc403SDave Cobbley if os.access(fn, os.R_OK): 26eb8dc403SDave Cobbley import re 2764c979e8SBrad Bishop with open(fn, 'r') as f: 28eb8dc403SDave Cobbley lines = f.readlines() 29eff27476SAndrew Geissler r = re.compile(r"(^.+?):\s+(.*)") 30eb8dc403SDave Cobbley for l in lines: 31eb8dc403SDave Cobbley m = r.match(l) 32eb8dc403SDave Cobbley if m: 33eb8dc403SDave Cobbley pkgdata[m.group(1)] = decode(m.group(2)) 34eb8dc403SDave Cobbley 35eb8dc403SDave Cobbley return pkgdata 36eb8dc403SDave Cobbley 37eb8dc403SDave Cobbleydef get_subpkgedata_fn(pkg, d): 38eb8dc403SDave Cobbley return d.expand('${PKGDATA_DIR}/runtime/%s' % pkg) 39eb8dc403SDave Cobbley 40eb8dc403SDave Cobbleydef has_subpkgdata(pkg, d): 41eb8dc403SDave Cobbley return os.access(get_subpkgedata_fn(pkg, d), os.R_OK) 42eb8dc403SDave Cobbley 43eb8dc403SDave Cobbleydef read_subpkgdata(pkg, d): 44eb8dc403SDave Cobbley return read_pkgdatafile(get_subpkgedata_fn(pkg, d)) 45eb8dc403SDave Cobbley 46eb8dc403SDave Cobbleydef has_pkgdata(pn, d): 47eb8dc403SDave Cobbley fn = d.expand('${PKGDATA_DIR}/%s' % pn) 48eb8dc403SDave Cobbley return os.access(fn, os.R_OK) 49eb8dc403SDave Cobbley 50eb8dc403SDave Cobbleydef read_pkgdata(pn, d): 51eb8dc403SDave Cobbley fn = d.expand('${PKGDATA_DIR}/%s' % pn) 52eb8dc403SDave Cobbley return read_pkgdatafile(fn) 53eb8dc403SDave Cobbley 54eb8dc403SDave Cobbley# 550ca19ccfSPatrick Williams# Collapse FOO:pkg variables into FOO 56eb8dc403SDave Cobbley# 57eb8dc403SDave Cobbleydef read_subpkgdata_dict(pkg, d): 58eb8dc403SDave Cobbley ret = {} 59eb8dc403SDave Cobbley subd = read_pkgdatafile(get_subpkgedata_fn(pkg, d)) 60eb8dc403SDave Cobbley for var in subd: 610ca19ccfSPatrick Williams newvar = var.replace(":" + pkg, "") 620ca19ccfSPatrick Williams if newvar == var and var + ":" + pkg in subd: 63eb8dc403SDave Cobbley continue 64eb8dc403SDave Cobbley ret[newvar] = subd[var] 65eb8dc403SDave Cobbley return ret 66eb8dc403SDave Cobbley 675199d831SAndrew Geisslerdef read_subpkgdata_extended(pkg, d): 685199d831SAndrew Geissler import json 695199d831SAndrew Geissler import bb.compress.zstd 705199d831SAndrew Geissler 715199d831SAndrew Geissler fn = d.expand("${PKGDATA_DIR}/extended/%s.json.zstd" % pkg) 725199d831SAndrew Geissler try: 735199d831SAndrew Geissler num_threads = int(d.getVar("BB_NUMBER_THREADS")) 745199d831SAndrew Geissler with bb.compress.zstd.open(fn, "rt", encoding="utf-8", num_threads=num_threads) as f: 755199d831SAndrew Geissler return json.load(f) 765199d831SAndrew Geissler except FileNotFoundError: 775199d831SAndrew Geissler return None 785199d831SAndrew Geissler 79eb8dc403SDave Cobbleydef _pkgmap(d): 80eb8dc403SDave Cobbley """Return a dictionary mapping package to recipe name.""" 81eb8dc403SDave Cobbley 82eb8dc403SDave Cobbley pkgdatadir = d.getVar("PKGDATA_DIR") 83eb8dc403SDave Cobbley 84eb8dc403SDave Cobbley pkgmap = {} 85eb8dc403SDave Cobbley try: 86eb8dc403SDave Cobbley files = os.listdir(pkgdatadir) 87eb8dc403SDave Cobbley except OSError: 88eb8dc403SDave Cobbley bb.warn("No files in %s?" % pkgdatadir) 89eb8dc403SDave Cobbley files = [] 90eb8dc403SDave Cobbley 91eb8dc403SDave Cobbley for pn in [f for f in files if not os.path.isdir(os.path.join(pkgdatadir, f))]: 92eb8dc403SDave Cobbley try: 93eb8dc403SDave Cobbley pkgdata = read_pkgdatafile(os.path.join(pkgdatadir, pn)) 94eb8dc403SDave Cobbley except OSError: 95eb8dc403SDave Cobbley continue 96eb8dc403SDave Cobbley 97eb8dc403SDave Cobbley packages = pkgdata.get("PACKAGES") or "" 98eb8dc403SDave Cobbley for pkg in packages.split(): 99eb8dc403SDave Cobbley pkgmap[pkg] = pn 100eb8dc403SDave Cobbley 101eb8dc403SDave Cobbley return pkgmap 102eb8dc403SDave Cobbley 103eb8dc403SDave Cobbleydef pkgmap(d): 104eb8dc403SDave Cobbley """Return a dictionary mapping package to recipe name. 105eb8dc403SDave Cobbley Cache the mapping in the metadata""" 106eb8dc403SDave Cobbley 107eb8dc403SDave Cobbley pkgmap_data = d.getVar("__pkgmap_data", False) 108eb8dc403SDave Cobbley if pkgmap_data is None: 109eb8dc403SDave Cobbley pkgmap_data = _pkgmap(d) 110eb8dc403SDave Cobbley d.setVar("__pkgmap_data", pkgmap_data) 111eb8dc403SDave Cobbley 112eb8dc403SDave Cobbley return pkgmap_data 113eb8dc403SDave Cobbley 114eb8dc403SDave Cobbleydef recipename(pkg, d): 115eb8dc403SDave Cobbley """Return the recipe name for the given binary package name.""" 116eb8dc403SDave Cobbley 117eb8dc403SDave Cobbley return pkgmap(d).get(pkg) 118517393d9SAndrew Geissler 119*169d7bccSPatrick Williamsdef foreach_runtime_provider_pkgdata(d, rdep, include_rdep=False): 120*169d7bccSPatrick Williams pkgdata_dir = d.getVar("PKGDATA_DIR") 121*169d7bccSPatrick Williams possibles = set() 122*169d7bccSPatrick Williams try: 123*169d7bccSPatrick Williams possibles |= set(os.listdir("%s/runtime-rprovides/%s/" % (pkgdata_dir, rdep))) 124*169d7bccSPatrick Williams except OSError: 125*169d7bccSPatrick Williams pass 126*169d7bccSPatrick Williams 127*169d7bccSPatrick Williams if include_rdep: 128*169d7bccSPatrick Williams possibles.add(rdep) 129*169d7bccSPatrick Williams 130*169d7bccSPatrick Williams for p in sorted(list(possibles)): 131*169d7bccSPatrick Williams rdep_data = read_subpkgdata(p, d) 132*169d7bccSPatrick Williams yield p, rdep_data 133*169d7bccSPatrick Williams 134517393d9SAndrew Geisslerdef get_package_mapping(pkg, basepkg, d, depversions=None): 135517393d9SAndrew Geissler import oe.packagedata 136517393d9SAndrew Geissler 137517393d9SAndrew Geissler data = oe.packagedata.read_subpkgdata(pkg, d) 138517393d9SAndrew Geissler key = "PKG:%s" % pkg 139517393d9SAndrew Geissler 140517393d9SAndrew Geissler if key in data: 141517393d9SAndrew Geissler if bb.data.inherits_class('allarch', d) and bb.data.inherits_class('packagegroup', d) and pkg != data[key]: 142517393d9SAndrew Geissler bb.error("An allarch packagegroup shouldn't depend on packages which are dynamically renamed (%s to %s)" % (pkg, data[key])) 143517393d9SAndrew Geissler # Have to avoid undoing the write_extra_pkgs(global_variants...) 144517393d9SAndrew Geissler if bb.data.inherits_class('allarch', d) and not d.getVar('MULTILIB_VARIANTS') \ 145517393d9SAndrew Geissler and data[key] == basepkg: 146517393d9SAndrew Geissler return pkg 147517393d9SAndrew Geissler if depversions == []: 148517393d9SAndrew Geissler # Avoid returning a mapping if the renamed package rprovides its original name 149517393d9SAndrew Geissler rprovkey = "RPROVIDES:%s" % pkg 150517393d9SAndrew Geissler if rprovkey in data: 151517393d9SAndrew Geissler if pkg in bb.utils.explode_dep_versions2(data[rprovkey]): 152517393d9SAndrew Geissler bb.note("%s rprovides %s, not replacing the latter" % (data[key], pkg)) 153517393d9SAndrew Geissler return pkg 154517393d9SAndrew Geissler # Do map to rewritten package name 155517393d9SAndrew Geissler return data[key] 156517393d9SAndrew Geissler 157517393d9SAndrew Geissler return pkg 158517393d9SAndrew Geissler 159517393d9SAndrew Geisslerdef get_package_additional_metadata(pkg_type, d): 160517393d9SAndrew Geissler base_key = "PACKAGE_ADD_METADATA" 161517393d9SAndrew Geissler for key in ("%s_%s" % (base_key, pkg_type.upper()), base_key): 162517393d9SAndrew Geissler if d.getVar(key, False) is None: 163517393d9SAndrew Geissler continue 164517393d9SAndrew Geissler d.setVarFlag(key, "type", "list") 165517393d9SAndrew Geissler if d.getVarFlag(key, "separator") is None: 166517393d9SAndrew Geissler d.setVarFlag(key, "separator", "\\n") 167517393d9SAndrew Geissler metadata_fields = [field.strip() for field in oe.data.typed_value(key, d)] 168517393d9SAndrew Geissler return "\n".join(metadata_fields).strip() 169517393d9SAndrew Geissler 170517393d9SAndrew Geisslerdef runtime_mapping_rename(varname, pkg, d): 171517393d9SAndrew Geissler #bb.note("%s before: %s" % (varname, d.getVar(varname))) 172517393d9SAndrew Geissler 173517393d9SAndrew Geissler new_depends = {} 174517393d9SAndrew Geissler deps = bb.utils.explode_dep_versions2(d.getVar(varname) or "") 175517393d9SAndrew Geissler for depend, depversions in deps.items(): 176517393d9SAndrew Geissler new_depend = get_package_mapping(depend, pkg, d, depversions) 177517393d9SAndrew Geissler if depend != new_depend: 178517393d9SAndrew Geissler bb.note("package name mapping done: %s -> %s" % (depend, new_depend)) 179517393d9SAndrew Geissler new_depends[new_depend] = deps[depend] 180517393d9SAndrew Geissler 181517393d9SAndrew Geissler d.setVar(varname, bb.utils.join_deps(new_depends, commasep=False)) 182517393d9SAndrew Geissler 183517393d9SAndrew Geissler #bb.note("%s after: %s" % (varname, d.getVar(varname))) 184517393d9SAndrew Geissler 185517393d9SAndrew Geisslerdef emit_pkgdata(pkgfiles, d): 186517393d9SAndrew Geissler def process_postinst_on_target(pkg, mlprefix): 187517393d9SAndrew Geissler pkgval = d.getVar('PKG:%s' % pkg) 188517393d9SAndrew Geissler if pkgval is None: 189517393d9SAndrew Geissler pkgval = pkg 190517393d9SAndrew Geissler 191517393d9SAndrew Geissler defer_fragment = """ 192517393d9SAndrew Geisslerif [ -n "$D" ]; then 193517393d9SAndrew Geissler $INTERCEPT_DIR/postinst_intercept delay_to_first_boot %s mlprefix=%s 194517393d9SAndrew Geissler exit 0 195517393d9SAndrew Geisslerfi 196517393d9SAndrew Geissler""" % (pkgval, mlprefix) 197517393d9SAndrew Geissler 198517393d9SAndrew Geissler postinst = d.getVar('pkg_postinst:%s' % pkg) 199517393d9SAndrew Geissler postinst_ontarget = d.getVar('pkg_postinst_ontarget:%s' % pkg) 200517393d9SAndrew Geissler 201517393d9SAndrew Geissler if postinst_ontarget: 202517393d9SAndrew Geissler bb.debug(1, 'adding deferred pkg_postinst_ontarget() to pkg_postinst() for %s' % pkg) 203517393d9SAndrew Geissler if not postinst: 204517393d9SAndrew Geissler postinst = '#!/bin/sh\n' 205517393d9SAndrew Geissler postinst += defer_fragment 206517393d9SAndrew Geissler postinst += postinst_ontarget 207517393d9SAndrew Geissler d.setVar('pkg_postinst:%s' % pkg, postinst) 208517393d9SAndrew Geissler 209517393d9SAndrew Geissler def add_set_e_to_scriptlets(pkg): 210517393d9SAndrew Geissler for scriptlet_name in ('pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm'): 211517393d9SAndrew Geissler scriptlet = d.getVar('%s:%s' % (scriptlet_name, pkg)) 212517393d9SAndrew Geissler if scriptlet: 213517393d9SAndrew Geissler scriptlet_split = scriptlet.split('\n') 214517393d9SAndrew Geissler if scriptlet_split[0].startswith("#!"): 215517393d9SAndrew Geissler scriptlet = scriptlet_split[0] + "\nset -e\n" + "\n".join(scriptlet_split[1:]) 216517393d9SAndrew Geissler else: 217517393d9SAndrew Geissler scriptlet = "set -e\n" + "\n".join(scriptlet_split[0:]) 218517393d9SAndrew Geissler d.setVar('%s:%s' % (scriptlet_name, pkg), scriptlet) 219517393d9SAndrew Geissler 220517393d9SAndrew Geissler def write_if_exists(f, pkg, var): 221517393d9SAndrew Geissler def encode(str): 222517393d9SAndrew Geissler import codecs 223517393d9SAndrew Geissler c = codecs.getencoder("unicode_escape") 224517393d9SAndrew Geissler return c(str)[0].decode("latin1") 225517393d9SAndrew Geissler 226517393d9SAndrew Geissler val = d.getVar('%s:%s' % (var, pkg)) 227517393d9SAndrew Geissler if val: 228517393d9SAndrew Geissler f.write('%s:%s: %s\n' % (var, pkg, encode(val))) 229517393d9SAndrew Geissler return val 230517393d9SAndrew Geissler val = d.getVar('%s' % (var)) 231517393d9SAndrew Geissler if val: 232517393d9SAndrew Geissler f.write('%s: %s\n' % (var, encode(val))) 233517393d9SAndrew Geissler return val 234517393d9SAndrew Geissler 235517393d9SAndrew Geissler def write_extra_pkgs(variants, pn, packages, pkgdatadir): 236517393d9SAndrew Geissler for variant in variants: 237517393d9SAndrew Geissler with open("%s/%s-%s" % (pkgdatadir, variant, pn), 'w') as fd: 238517393d9SAndrew Geissler fd.write("PACKAGES: %s\n" % ' '.join( 239517393d9SAndrew Geissler map(lambda pkg: '%s-%s' % (variant, pkg), packages.split()))) 240517393d9SAndrew Geissler 241517393d9SAndrew Geissler def write_extra_runtime_pkgs(variants, packages, pkgdatadir): 242517393d9SAndrew Geissler for variant in variants: 243517393d9SAndrew Geissler for pkg in packages.split(): 244517393d9SAndrew Geissler ml_pkg = "%s-%s" % (variant, pkg) 245517393d9SAndrew Geissler subdata_file = "%s/runtime/%s" % (pkgdatadir, ml_pkg) 246517393d9SAndrew Geissler with open(subdata_file, 'w') as fd: 247517393d9SAndrew Geissler fd.write("PKG:%s: %s" % (ml_pkg, pkg)) 248517393d9SAndrew Geissler 249517393d9SAndrew Geissler packages = d.getVar('PACKAGES') 250517393d9SAndrew Geissler pkgdest = d.getVar('PKGDEST') 251517393d9SAndrew Geissler pkgdatadir = d.getVar('PKGDESTWORK') 252517393d9SAndrew Geissler 253517393d9SAndrew Geissler data_file = pkgdatadir + d.expand("/${PN}") 254517393d9SAndrew Geissler with open(data_file, 'w') as fd: 255517393d9SAndrew Geissler fd.write("PACKAGES: %s\n" % packages) 256517393d9SAndrew Geissler 257517393d9SAndrew Geissler pkgdebugsource = d.getVar("PKGDEBUGSOURCES") or [] 258517393d9SAndrew Geissler 259517393d9SAndrew Geissler pn = d.getVar('PN') 260517393d9SAndrew Geissler global_variants = (d.getVar('MULTILIB_GLOBAL_VARIANTS') or "").split() 261517393d9SAndrew Geissler variants = (d.getVar('MULTILIB_VARIANTS') or "").split() 262517393d9SAndrew Geissler 263517393d9SAndrew Geissler if bb.data.inherits_class('kernel', d) or bb.data.inherits_class('module-base', d): 264517393d9SAndrew Geissler write_extra_pkgs(variants, pn, packages, pkgdatadir) 265517393d9SAndrew Geissler 266517393d9SAndrew Geissler if bb.data.inherits_class('allarch', d) and not variants \ 267517393d9SAndrew Geissler and not bb.data.inherits_class('packagegroup', d): 268517393d9SAndrew Geissler write_extra_pkgs(global_variants, pn, packages, pkgdatadir) 269517393d9SAndrew Geissler 270517393d9SAndrew Geissler workdir = d.getVar('WORKDIR') 271517393d9SAndrew Geissler 272517393d9SAndrew Geissler for pkg in packages.split(): 273517393d9SAndrew Geissler pkgval = d.getVar('PKG:%s' % pkg) 274517393d9SAndrew Geissler if pkgval is None: 275517393d9SAndrew Geissler pkgval = pkg 276517393d9SAndrew Geissler d.setVar('PKG:%s' % pkg, pkg) 277517393d9SAndrew Geissler 278517393d9SAndrew Geissler extended_data = { 279517393d9SAndrew Geissler "files_info": {} 280517393d9SAndrew Geissler } 281517393d9SAndrew Geissler 282517393d9SAndrew Geissler pkgdestpkg = os.path.join(pkgdest, pkg) 283517393d9SAndrew Geissler files = {} 284517393d9SAndrew Geissler files_extra = {} 285517393d9SAndrew Geissler total_size = 0 286517393d9SAndrew Geissler seen = set() 287517393d9SAndrew Geissler for f in pkgfiles[pkg]: 288517393d9SAndrew Geissler fpath = os.sep + os.path.relpath(f, pkgdestpkg) 289517393d9SAndrew Geissler 290517393d9SAndrew Geissler fstat = os.lstat(f) 291517393d9SAndrew Geissler files[fpath] = fstat.st_size 292517393d9SAndrew Geissler 293517393d9SAndrew Geissler extended_data["files_info"].setdefault(fpath, {}) 294517393d9SAndrew Geissler extended_data["files_info"][fpath]['size'] = fstat.st_size 295517393d9SAndrew Geissler 296517393d9SAndrew Geissler if fstat.st_ino not in seen: 297517393d9SAndrew Geissler seen.add(fstat.st_ino) 298517393d9SAndrew Geissler total_size += fstat.st_size 299517393d9SAndrew Geissler 300517393d9SAndrew Geissler if fpath in pkgdebugsource: 301517393d9SAndrew Geissler extended_data["files_info"][fpath]['debugsrc'] = pkgdebugsource[fpath] 302517393d9SAndrew Geissler del pkgdebugsource[fpath] 303517393d9SAndrew Geissler 304517393d9SAndrew Geissler d.setVar('FILES_INFO:' + pkg , json.dumps(files, sort_keys=True)) 305517393d9SAndrew Geissler 306517393d9SAndrew Geissler process_postinst_on_target(pkg, d.getVar("MLPREFIX")) 307517393d9SAndrew Geissler add_set_e_to_scriptlets(pkg) 308517393d9SAndrew Geissler 309517393d9SAndrew Geissler subdata_file = pkgdatadir + "/runtime/%s" % pkg 310517393d9SAndrew Geissler with open(subdata_file, 'w') as sf: 311517393d9SAndrew Geissler for var in (d.getVar('PKGDATA_VARS') or "").split(): 312517393d9SAndrew Geissler val = write_if_exists(sf, pkg, var) 313517393d9SAndrew Geissler 314517393d9SAndrew Geissler write_if_exists(sf, pkg, 'FILERPROVIDESFLIST') 315517393d9SAndrew Geissler for dfile in sorted((d.getVar('FILERPROVIDESFLIST:' + pkg) or "").split()): 316517393d9SAndrew Geissler write_if_exists(sf, pkg, 'FILERPROVIDES:' + dfile) 317517393d9SAndrew Geissler 318517393d9SAndrew Geissler write_if_exists(sf, pkg, 'FILERDEPENDSFLIST') 319517393d9SAndrew Geissler for dfile in sorted((d.getVar('FILERDEPENDSFLIST:' + pkg) or "").split()): 320517393d9SAndrew Geissler write_if_exists(sf, pkg, 'FILERDEPENDS:' + dfile) 321517393d9SAndrew Geissler 322517393d9SAndrew Geissler sf.write('%s:%s: %d\n' % ('PKGSIZE', pkg, total_size)) 323517393d9SAndrew Geissler 324517393d9SAndrew Geissler subdata_extended_file = pkgdatadir + "/extended/%s.json.zstd" % pkg 325517393d9SAndrew Geissler num_threads = int(d.getVar("BB_NUMBER_THREADS")) 326517393d9SAndrew Geissler with bb.compress.zstd.open(subdata_extended_file, "wt", encoding="utf-8", num_threads=num_threads) as f: 327517393d9SAndrew Geissler json.dump(extended_data, f, sort_keys=True, separators=(",", ":")) 328517393d9SAndrew Geissler 329517393d9SAndrew Geissler # Symlinks needed for rprovides lookup 330517393d9SAndrew Geissler rprov = d.getVar('RPROVIDES:%s' % pkg) or d.getVar('RPROVIDES') 331517393d9SAndrew Geissler if rprov: 332517393d9SAndrew Geissler for p in bb.utils.explode_deps(rprov): 333517393d9SAndrew Geissler subdata_sym = pkgdatadir + "/runtime-rprovides/%s/%s" % (p, pkg) 334517393d9SAndrew Geissler bb.utils.mkdirhier(os.path.dirname(subdata_sym)) 335*169d7bccSPatrick Williams oe.path.relsymlink(subdata_file, subdata_sym, True) 336517393d9SAndrew Geissler 337517393d9SAndrew Geissler allow_empty = d.getVar('ALLOW_EMPTY:%s' % pkg) 338517393d9SAndrew Geissler if not allow_empty: 339517393d9SAndrew Geissler allow_empty = d.getVar('ALLOW_EMPTY') 340517393d9SAndrew Geissler root = "%s/%s" % (pkgdest, pkg) 341517393d9SAndrew Geissler os.chdir(root) 342517393d9SAndrew Geissler g = glob('*') 343517393d9SAndrew Geissler if g or allow_empty == "1": 344517393d9SAndrew Geissler # Symlinks needed for reverse lookups (from the final package name) 345517393d9SAndrew Geissler subdata_sym = pkgdatadir + "/runtime-reverse/%s" % pkgval 346*169d7bccSPatrick Williams oe.path.relsymlink(subdata_file, subdata_sym, True) 347517393d9SAndrew Geissler 348517393d9SAndrew Geissler packagedfile = pkgdatadir + '/runtime/%s.packaged' % pkg 349517393d9SAndrew Geissler open(packagedfile, 'w').close() 350517393d9SAndrew Geissler 351517393d9SAndrew Geissler if bb.data.inherits_class('kernel', d) or bb.data.inherits_class('module-base', d): 352517393d9SAndrew Geissler write_extra_runtime_pkgs(variants, packages, pkgdatadir) 353517393d9SAndrew Geissler 354517393d9SAndrew Geissler if bb.data.inherits_class('allarch', d) and not variants \ 355517393d9SAndrew Geissler and not bb.data.inherits_class('packagegroup', d): 356517393d9SAndrew Geissler write_extra_runtime_pkgs(global_variants, packages, pkgdatadir) 357517393d9SAndrew Geissler 358517393d9SAndrew Geisslerdef mapping_rename_hook(d): 359517393d9SAndrew Geissler """ 360517393d9SAndrew Geissler Rewrite variables to account for package renaming in things 361517393d9SAndrew Geissler like debian.bbclass or manual PKG variable name changes 362517393d9SAndrew Geissler """ 363517393d9SAndrew Geissler pkg = d.getVar("PKG") 364517393d9SAndrew Geissler oe.packagedata.runtime_mapping_rename("RDEPENDS", pkg, d) 365517393d9SAndrew Geissler oe.packagedata.runtime_mapping_rename("RRECOMMENDS", pkg, d) 366517393d9SAndrew Geissler oe.packagedata.runtime_mapping_rename("RSUGGESTS", pkg, d) 367