1*4882a593Smuzhiyuninherit package 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunIMAGE_PKGTYPE ?= "tar" 4*4882a593Smuzhiyun 5*4882a593Smuzhiyunpython do_package_tar () { 6*4882a593Smuzhiyun import subprocess 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun oldcwd = os.getcwd() 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun workdir = d.getVar('WORKDIR') 11*4882a593Smuzhiyun if not workdir: 12*4882a593Smuzhiyun bb.error("WORKDIR not defined, unable to package") 13*4882a593Smuzhiyun return 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun outdir = d.getVar('DEPLOY_DIR_TAR') 16*4882a593Smuzhiyun if not outdir: 17*4882a593Smuzhiyun bb.error("DEPLOY_DIR_TAR not defined, unable to package") 18*4882a593Smuzhiyun return 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun dvar = d.getVar('D') 21*4882a593Smuzhiyun if not dvar: 22*4882a593Smuzhiyun bb.error("D not defined, unable to package") 23*4882a593Smuzhiyun return 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun packages = d.getVar('PACKAGES') 26*4882a593Smuzhiyun if not packages: 27*4882a593Smuzhiyun bb.debug(1, "PACKAGES not defined, nothing to package") 28*4882a593Smuzhiyun return 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun pkgdest = d.getVar('PKGDEST') 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun bb.utils.mkdirhier(outdir) 33*4882a593Smuzhiyun bb.utils.mkdirhier(dvar) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun for pkg in packages.split(): 36*4882a593Smuzhiyun localdata = bb.data.createCopy(d) 37*4882a593Smuzhiyun root = "%s/%s" % (pkgdest, pkg) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun overrides = localdata.getVar('OVERRIDES', False) 40*4882a593Smuzhiyun localdata.setVar('OVERRIDES', '%s:%s' % (overrides, pkg)) 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun bb.utils.mkdirhier(root) 43*4882a593Smuzhiyun basedir = os.path.dirname(root) 44*4882a593Smuzhiyun tarfn = localdata.expand("${DEPLOY_DIR_TAR}/${PKG}-${PKGV}-${PKGR}.tar.gz") 45*4882a593Smuzhiyun os.chdir(root) 46*4882a593Smuzhiyun dlist = os.listdir(root) 47*4882a593Smuzhiyun if not dlist: 48*4882a593Smuzhiyun bb.note("Not creating empty archive for %s-%s-%s" % (pkg, localdata.getVar('PKGV'), localdata.getVar('PKGR'))) 49*4882a593Smuzhiyun continue 50*4882a593Smuzhiyun args = "tar -cz --exclude=CONTROL --exclude=DEBIAN -f".split() 51*4882a593Smuzhiyun ret = subprocess.call(args + [tarfn] + dlist) 52*4882a593Smuzhiyun if ret != 0: 53*4882a593Smuzhiyun bb.error("Creation of tar %s failed." % tarfn) 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun os.chdir(oldcwd) 56*4882a593Smuzhiyun} 57*4882a593Smuzhiyun 58*4882a593Smuzhiyunpython () { 59*4882a593Smuzhiyun if d.getVar('PACKAGES') != '': 60*4882a593Smuzhiyun deps = ' tar-native:do_populate_sysroot virtual/fakeroot-native:do_populate_sysroot' 61*4882a593Smuzhiyun d.appendVarFlag('do_package_write_tar', 'depends', deps) 62*4882a593Smuzhiyun d.setVarFlag('do_package_write_tar', 'fakeroot', "1") 63*4882a593Smuzhiyun} 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun 66*4882a593Smuzhiyunpython do_package_write_tar () { 67*4882a593Smuzhiyun bb.build.exec_func("read_subpackage_metadata", d) 68*4882a593Smuzhiyun bb.build.exec_func("do_package_tar", d) 69*4882a593Smuzhiyun} 70*4882a593Smuzhiyundo_package_write_tar[dirs] = "${D}" 71*4882a593Smuzhiyunaddtask package_write_tar before do_build after do_packagedata do_package 72