bitbake.conf: use rootfs/${PN} for IMAGE_ROOTFS
[vuplus_openembedded] / classes / package_tar.bbclass
1 inherit package
2
3 IMAGE_PKGTYPE ?= "tar"
4
5 python package_tar_fn () {
6         import os
7         from bb import data
8         fn = os.path.join(bb.data.getVar('DEPLOY_DIR_TAR', d, True), bb.data.expand('${PKG}-${PV}-${PR}${DISTRO_PR}.tar.gz', d, True))
9         bb.data.setVar('PKGFN', fn, d)
10 }
11
12 python package_tar_install () {
13         import os, sys
14         pkg = bb.data.getVar('PKG', d, 1)
15         pkgfn = bb.data.getVar('PKGFN', d, 1)
16         rootfs = bb.data.getVar('IMAGE_ROOTFS', d, 1)
17
18         if None in (pkg,pkgfn,rootfs):
19                 bb.error("missing variables (one or more of PKG, PKGFN, IMAGEROOTFS)")
20                 raise bb.build.FuncFailed
21         try:
22                 bb.mkdirhier(rootfs)
23                 os.chdir(rootfs)
24         except OSError:
25                 (type, value, traceback) = sys.exc_info()
26                 print value
27                 raise bb.build.FuncFailed
28
29         if not os.access(pkgfn, os.R_OK):
30                 bb.debug(1, "%s does not exist, skipping" % pkgfn)
31                 raise bb.build.FuncFailed
32
33         ret = os.system('zcat %s | tar -xf -' % pkgfn)
34         if ret != 0:
35                 raise bb.build.FuncFailed
36 }
37
38 python do_package_tar () {
39         workdir = bb.data.getVar('WORKDIR', d, 1)
40         if not workdir:
41                 bb.error("WORKDIR not defined, unable to package")
42                 return
43
44         import os # path manipulations
45         outdir = bb.data.getVar('DEPLOY_DIR_TAR', d, 1)
46         if not outdir:
47                 bb.error("DEPLOY_DIR_TAR not defined, unable to package")
48                 return
49         bb.mkdirhier(outdir)
50
51         dvar = bb.data.getVar('D', d, 1)
52         if not dvar:
53                 bb.error("D not defined, unable to package")
54                 return
55         bb.mkdirhier(dvar)
56
57         packages = bb.data.getVar('PACKAGES', d, 1)
58         if not packages:
59                 bb.debug(1, "PACKAGES not defined, nothing to package")
60                 return
61
62         for pkg in packages.split():
63                 localdata = bb.data.createCopy(d)
64                 root = "%s/install/%s" % (workdir, pkg)
65
66                 bb.data.setVar('ROOT', '', localdata)
67                 bb.data.setVar('ROOT_%s' % pkg, root, localdata)
68                 bb.data.setVar('PKG', pkg, localdata)
69
70                 overrides = bb.data.getVar('OVERRIDES', localdata)
71                 if not overrides:
72                         raise bb.build.FuncFailed('OVERRIDES not defined')
73                 overrides = bb.data.expand(overrides, localdata)
74                 bb.data.setVar('OVERRIDES', '%s:%s' % (overrides, pkg), localdata)
75
76                 bb.data.update_data(localdata)
77
78                 root = bb.data.getVar('ROOT', localdata)
79                 bb.mkdirhier(root)
80                 basedir = os.path.dirname(root)
81                 pkgoutdir = outdir
82                 bb.mkdirhier(pkgoutdir)
83                 bb.build.exec_func('package_tar_fn', localdata)
84                 tarfn = bb.data.getVar('PKGFN', localdata, 1)
85                 os.chdir(root)
86                 from glob import glob
87                 if not glob('*'):
88                         bb.note("Not creating empty archive for %s-%s" % (pkg, bb.data.expand('${PV}-${PR}${DISTRO_PR}', d, True)))
89                         continue
90                 ret = os.system("tar -czf %s %s" % (tarfn, '.'))
91                 if ret != 0:
92                         bb.error("Creation of tar %s failed." % tarfn)
93 }
94
95 python () {
96     import bb
97     if bb.data.getVar('PACKAGES', d, True) != '':
98         deps = (bb.data.getVarFlag('do_package_write_tar', 'depends', d) or "").split()
99         deps.append('tar-native:do_populate_staging')
100         deps.append('fakeroot-native:do_populate_staging')
101         bb.data.setVarFlag('do_package_write_tar', 'depends', " ".join(deps), d)
102 }
103
104
105 python do_package_write_tar () {
106         bb.build.exec_func("read_subpackage_metadata", d)
107         bb.build.exec_func("do_package_tar", d)
108 }
109 do_package_write_tar[dirs] = "${D}"
110 addtask package_write_tar before do_build after do_package