diff options
Diffstat (limited to 'meta/classes-global/package.bbclass')
-rw-r--r-- | meta/classes-global/package.bbclass | 179 |
1 files changed, 2 insertions, 177 deletions
diff --git a/meta/classes-global/package.bbclass b/meta/classes-global/package.bbclass index 72e39f6914..389c857804 100644 --- a/meta/classes-global/package.bbclass +++ b/meta/classes-global/package.bbclass | |||
@@ -1232,185 +1232,10 @@ PKGDESTWORK = "${WORKDIR}/pkgdata" | |||
1232 | PKGDATA_VARS = "PN PE PV PR PKGE PKGV PKGR LICENSE DESCRIPTION SUMMARY RDEPENDS RPROVIDES RRECOMMENDS RSUGGESTS RREPLACES RCONFLICTS SECTION PKG ALLOW_EMPTY FILES CONFFILES FILES_INFO PACKAGE_ADD_METADATA pkg_postinst pkg_postrm pkg_preinst pkg_prerm" | 1232 | PKGDATA_VARS = "PN PE PV PR PKGE PKGV PKGR LICENSE DESCRIPTION SUMMARY RDEPENDS RPROVIDES RRECOMMENDS RSUGGESTS RREPLACES RCONFLICTS SECTION PKG ALLOW_EMPTY FILES CONFFILES FILES_INFO PACKAGE_ADD_METADATA pkg_postinst pkg_postrm pkg_preinst pkg_prerm" |
1233 | 1233 | ||
1234 | python emit_pkgdata() { | 1234 | python emit_pkgdata() { |
1235 | from glob import glob | 1235 | import oe.packagedata |
1236 | import json | 1236 | oe.packagedata.emit_pkgdata(pkgfiles, d) |
1237 | import bb.compress.zstd | ||
1238 | |||
1239 | def process_postinst_on_target(pkg, mlprefix): | ||
1240 | pkgval = d.getVar('PKG:%s' % pkg) | ||
1241 | if pkgval is None: | ||
1242 | pkgval = pkg | ||
1243 | |||
1244 | defer_fragment = """ | ||
1245 | if [ -n "$D" ]; then | ||
1246 | $INTERCEPT_DIR/postinst_intercept delay_to_first_boot %s mlprefix=%s | ||
1247 | exit 0 | ||
1248 | fi | ||
1249 | """ % (pkgval, mlprefix) | ||
1250 | |||
1251 | postinst = d.getVar('pkg_postinst:%s' % pkg) | ||
1252 | postinst_ontarget = d.getVar('pkg_postinst_ontarget:%s' % pkg) | ||
1253 | |||
1254 | if postinst_ontarget: | ||
1255 | bb.debug(1, 'adding deferred pkg_postinst_ontarget() to pkg_postinst() for %s' % pkg) | ||
1256 | if not postinst: | ||
1257 | postinst = '#!/bin/sh\n' | ||
1258 | postinst += defer_fragment | ||
1259 | postinst += postinst_ontarget | ||
1260 | d.setVar('pkg_postinst:%s' % pkg, postinst) | ||
1261 | |||
1262 | def add_set_e_to_scriptlets(pkg): | ||
1263 | for scriptlet_name in ('pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm'): | ||
1264 | scriptlet = d.getVar('%s:%s' % (scriptlet_name, pkg)) | ||
1265 | if scriptlet: | ||
1266 | scriptlet_split = scriptlet.split('\n') | ||
1267 | if scriptlet_split[0].startswith("#!"): | ||
1268 | scriptlet = scriptlet_split[0] + "\nset -e\n" + "\n".join(scriptlet_split[1:]) | ||
1269 | else: | ||
1270 | scriptlet = "set -e\n" + "\n".join(scriptlet_split[0:]) | ||
1271 | d.setVar('%s:%s' % (scriptlet_name, pkg), scriptlet) | ||
1272 | |||
1273 | def write_if_exists(f, pkg, var): | ||
1274 | def encode(str): | ||
1275 | import codecs | ||
1276 | c = codecs.getencoder("unicode_escape") | ||
1277 | return c(str)[0].decode("latin1") | ||
1278 | |||
1279 | val = d.getVar('%s:%s' % (var, pkg)) | ||
1280 | if val: | ||
1281 | f.write('%s:%s: %s\n' % (var, pkg, encode(val))) | ||
1282 | return val | ||
1283 | val = d.getVar('%s' % (var)) | ||
1284 | if val: | ||
1285 | f.write('%s: %s\n' % (var, encode(val))) | ||
1286 | return val | ||
1287 | |||
1288 | def write_extra_pkgs(variants, pn, packages, pkgdatadir): | ||
1289 | for variant in variants: | ||
1290 | with open("%s/%s-%s" % (pkgdatadir, variant, pn), 'w') as fd: | ||
1291 | fd.write("PACKAGES: %s\n" % ' '.join( | ||
1292 | map(lambda pkg: '%s-%s' % (variant, pkg), packages.split()))) | ||
1293 | |||
1294 | def write_extra_runtime_pkgs(variants, packages, pkgdatadir): | ||
1295 | for variant in variants: | ||
1296 | for pkg in packages.split(): | ||
1297 | ml_pkg = "%s-%s" % (variant, pkg) | ||
1298 | subdata_file = "%s/runtime/%s" % (pkgdatadir, ml_pkg) | ||
1299 | with open(subdata_file, 'w') as fd: | ||
1300 | fd.write("PKG:%s: %s" % (ml_pkg, pkg)) | ||
1301 | |||
1302 | packages = d.getVar('PACKAGES') | ||
1303 | pkgdest = d.getVar('PKGDEST') | ||
1304 | pkgdatadir = d.getVar('PKGDESTWORK') | ||
1305 | |||
1306 | data_file = pkgdatadir + d.expand("/${PN}") | ||
1307 | with open(data_file, 'w') as fd: | ||
1308 | fd.write("PACKAGES: %s\n" % packages) | ||
1309 | |||
1310 | pkgdebugsource = d.getVar("PKGDEBUGSOURCES") or [] | ||
1311 | |||
1312 | pn = d.getVar('PN') | ||
1313 | global_variants = (d.getVar('MULTILIB_GLOBAL_VARIANTS') or "").split() | ||
1314 | variants = (d.getVar('MULTILIB_VARIANTS') or "").split() | ||
1315 | |||
1316 | if bb.data.inherits_class('kernel', d) or bb.data.inherits_class('module-base', d): | ||
1317 | write_extra_pkgs(variants, pn, packages, pkgdatadir) | ||
1318 | |||
1319 | if bb.data.inherits_class('allarch', d) and not variants \ | ||
1320 | and not bb.data.inherits_class('packagegroup', d): | ||
1321 | write_extra_pkgs(global_variants, pn, packages, pkgdatadir) | ||
1322 | |||
1323 | workdir = d.getVar('WORKDIR') | ||
1324 | |||
1325 | for pkg in packages.split(): | ||
1326 | pkgval = d.getVar('PKG:%s' % pkg) | ||
1327 | if pkgval is None: | ||
1328 | pkgval = pkg | ||
1329 | d.setVar('PKG:%s' % pkg, pkg) | ||
1330 | |||
1331 | extended_data = { | ||
1332 | "files_info": {} | ||
1333 | } | ||
1334 | |||
1335 | pkgdestpkg = os.path.join(pkgdest, pkg) | ||
1336 | files = {} | ||
1337 | files_extra = {} | ||
1338 | total_size = 0 | ||
1339 | seen = set() | ||
1340 | for f in pkgfiles[pkg]: | ||
1341 | fpath = os.sep + os.path.relpath(f, pkgdestpkg) | ||
1342 | |||
1343 | fstat = os.lstat(f) | ||
1344 | files[fpath] = fstat.st_size | ||
1345 | |||
1346 | extended_data["files_info"].setdefault(fpath, {}) | ||
1347 | extended_data["files_info"][fpath]['size'] = fstat.st_size | ||
1348 | |||
1349 | if fstat.st_ino not in seen: | ||
1350 | seen.add(fstat.st_ino) | ||
1351 | total_size += fstat.st_size | ||
1352 | |||
1353 | if fpath in pkgdebugsource: | ||
1354 | extended_data["files_info"][fpath]['debugsrc'] = pkgdebugsource[fpath] | ||
1355 | del pkgdebugsource[fpath] | ||
1356 | |||
1357 | d.setVar('FILES_INFO:' + pkg , json.dumps(files, sort_keys=True)) | ||
1358 | |||
1359 | process_postinst_on_target(pkg, d.getVar("MLPREFIX")) | ||
1360 | add_set_e_to_scriptlets(pkg) | ||
1361 | |||
1362 | subdata_file = pkgdatadir + "/runtime/%s" % pkg | ||
1363 | with open(subdata_file, 'w') as sf: | ||
1364 | for var in (d.getVar('PKGDATA_VARS') or "").split(): | ||
1365 | val = write_if_exists(sf, pkg, var) | ||
1366 | |||
1367 | write_if_exists(sf, pkg, 'FILERPROVIDESFLIST') | ||
1368 | for dfile in sorted((d.getVar('FILERPROVIDESFLIST:' + pkg) or "").split()): | ||
1369 | write_if_exists(sf, pkg, 'FILERPROVIDES:' + dfile) | ||
1370 | |||
1371 | write_if_exists(sf, pkg, 'FILERDEPENDSFLIST') | ||
1372 | for dfile in sorted((d.getVar('FILERDEPENDSFLIST:' + pkg) or "").split()): | ||
1373 | write_if_exists(sf, pkg, 'FILERDEPENDS:' + dfile) | ||
1374 | |||
1375 | sf.write('%s:%s: %d\n' % ('PKGSIZE', pkg, total_size)) | ||
1376 | |||
1377 | subdata_extended_file = pkgdatadir + "/extended/%s.json.zstd" % pkg | ||
1378 | num_threads = int(d.getVar("BB_NUMBER_THREADS")) | ||
1379 | with bb.compress.zstd.open(subdata_extended_file, "wt", encoding="utf-8", num_threads=num_threads) as f: | ||
1380 | json.dump(extended_data, f, sort_keys=True, separators=(",", ":")) | ||
1381 | |||
1382 | # Symlinks needed for rprovides lookup | ||
1383 | rprov = d.getVar('RPROVIDES:%s' % pkg) or d.getVar('RPROVIDES') | ||
1384 | if rprov: | ||
1385 | for p in bb.utils.explode_deps(rprov): | ||
1386 | subdata_sym = pkgdatadir + "/runtime-rprovides/%s/%s" % (p, pkg) | ||
1387 | bb.utils.mkdirhier(os.path.dirname(subdata_sym)) | ||
1388 | oe.path.symlink("../../runtime/%s" % pkg, subdata_sym, True) | ||
1389 | |||
1390 | allow_empty = d.getVar('ALLOW_EMPTY:%s' % pkg) | ||
1391 | if not allow_empty: | ||
1392 | allow_empty = d.getVar('ALLOW_EMPTY') | ||
1393 | root = "%s/%s" % (pkgdest, pkg) | ||
1394 | os.chdir(root) | ||
1395 | g = glob('*') | ||
1396 | if g or allow_empty == "1": | ||
1397 | # Symlinks needed for reverse lookups (from the final package name) | ||
1398 | subdata_sym = pkgdatadir + "/runtime-reverse/%s" % pkgval | ||
1399 | oe.path.symlink("../runtime/%s" % pkg, subdata_sym, True) | ||
1400 | |||
1401 | packagedfile = pkgdatadir + '/runtime/%s.packaged' % pkg | ||
1402 | open(packagedfile, 'w').close() | ||
1403 | |||
1404 | if bb.data.inherits_class('kernel', d) or bb.data.inherits_class('module-base', d): | ||
1405 | write_extra_runtime_pkgs(variants, packages, pkgdatadir) | ||
1406 | |||
1407 | if bb.data.inherits_class('allarch', d) and not variants \ | ||
1408 | and not bb.data.inherits_class('packagegroup', d): | ||
1409 | write_extra_runtime_pkgs(global_variants, packages, pkgdatadir) | ||
1410 | |||
1411 | } | 1237 | } |
1412 | emit_pkgdata[dirs] = "${PKGDESTWORK}/runtime ${PKGDESTWORK}/runtime-reverse ${PKGDESTWORK}/runtime-rprovides ${PKGDESTWORK}/extended" | 1238 | emit_pkgdata[dirs] = "${PKGDESTWORK}/runtime ${PKGDESTWORK}/runtime-reverse ${PKGDESTWORK}/runtime-rprovides ${PKGDESTWORK}/extended" |
1413 | emit_pkgdata[vardepsexclude] = "BB_NUMBER_THREADS" | ||
1414 | 1239 | ||
1415 | ldconfig_postinst_fragment() { | 1240 | ldconfig_postinst_fragment() { |
1416 | if [ x"$D" = "x" ]; then | 1241 | if [ x"$D" = "x" ]; then |