diff options
Diffstat (limited to 'meta/classes/package_tar.bbclass')
-rw-r--r-- | meta/classes/package_tar.bbclass | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/meta/classes/package_tar.bbclass b/meta/classes/package_tar.bbclass new file mode 100644 index 0000000000..359e35f113 --- /dev/null +++ b/meta/classes/package_tar.bbclass | |||
@@ -0,0 +1,99 @@ | |||
1 | inherit package | ||
2 | |||
3 | PACKAGEFUNCS += "do_package_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), "%s-%s-%s.tar.gz" % (bb.data.getVar('PKG', d), bb.data.getVar('PV', d), bb.data.getVar('PR', d))) | ||
9 | fn = bb.data.expand(fn, d) | ||
10 | bb.data.setVar('PKGFN', fn, d) | ||
11 | } | ||
12 | |||
13 | python package_tar_install () { | ||
14 | import os, sys | ||
15 | pkg = bb.data.getVar('PKG', d, 1) | ||
16 | pkgfn = bb.data.getVar('PKGFN', d, 1) | ||
17 | rootfs = bb.data.getVar('IMAGE_ROOTFS', d, 1) | ||
18 | |||
19 | if None in (pkg,pkgfn,rootfs): | ||
20 | bb.error("missing variables (one or more of PKG, PKGFN, IMAGEROOTFS)") | ||
21 | raise bb.build.FuncFailed | ||
22 | try: | ||
23 | bb.mkdirhier(rootfs) | ||
24 | os.chdir(rootfs) | ||
25 | except OSError: | ||
26 | (type, value, traceback) = sys.exc_info() | ||
27 | print value | ||
28 | raise bb.build.FuncFailed | ||
29 | |||
30 | if not os.access(pkgfn, os.R_OK): | ||
31 | bb.debug(1, "%s does not exist, skipping" % pkgfn) | ||
32 | raise bb.build.FuncFailed | ||
33 | |||
34 | ret = os.system('zcat %s | tar -xf -' % pkgfn) | ||
35 | if ret != 0: | ||
36 | raise bb.build.FuncFailed | ||
37 | } | ||
38 | |||
39 | python do_package_tar () { | ||
40 | workdir = bb.data.getVar('WORKDIR', d, 1) | ||
41 | if not workdir: | ||
42 | bb.error("WORKDIR not defined, unable to package") | ||
43 | return | ||
44 | |||
45 | import os # path manipulations | ||
46 | outdir = bb.data.getVar('DEPLOY_DIR_TAR', d, 1) | ||
47 | if not outdir: | ||
48 | bb.error("DEPLOY_DIR_TAR not defined, unable to package") | ||
49 | return | ||
50 | bb.mkdirhier(outdir) | ||
51 | |||
52 | dvar = bb.data.getVar('D', d, 1) | ||
53 | if not dvar: | ||
54 | bb.error("D not defined, unable to package") | ||
55 | return | ||
56 | bb.mkdirhier(dvar) | ||
57 | |||
58 | packages = bb.data.getVar('PACKAGES', d, 1) | ||
59 | if not packages: | ||
60 | bb.debug(1, "PACKAGES not defined, nothing to package") | ||
61 | return | ||
62 | |||
63 | for pkg in packages.split(): | ||
64 | localdata = bb.data.createCopy(d) | ||
65 | root = "%s/install/%s" % (workdir, pkg) | ||
66 | |||
67 | bb.data.setVar('ROOT', '', localdata) | ||
68 | bb.data.setVar('ROOT_%s' % pkg, root, localdata) | ||
69 | bb.data.setVar('PKG', pkg, localdata) | ||
70 | |||
71 | overrides = bb.data.getVar('OVERRIDES', localdata) | ||
72 | if not overrides: | ||
73 | raise bb.build.FuncFailed('OVERRIDES not defined') | ||
74 | overrides = bb.data.expand(overrides, localdata) | ||
75 | bb.data.setVar('OVERRIDES', '%s:%s' % (overrides, pkg), localdata) | ||
76 | |||
77 | bb.data.update_data(localdata) | ||
78 | # stuff | ||
79 | root = bb.data.getVar('ROOT', localdata) | ||
80 | bb.mkdirhier(root) | ||
81 | basedir = os.path.dirname(root) | ||
82 | pkgoutdir = outdir | ||
83 | bb.mkdirhier(pkgoutdir) | ||
84 | bb.build.exec_func('package_tar_fn', localdata) | ||
85 | tarfn = bb.data.getVar('PKGFN', localdata, 1) | ||
86 | # if os.path.exists(tarfn): | ||
87 | # del localdata | ||
88 | # continue | ||
89 | os.chdir(root) | ||
90 | from glob import glob | ||
91 | if not glob('*'): | ||
92 | bb.note("Not creating empty archive for %s-%s-%s" % (pkg, bb.data.getVar('PV', localdata, 1), bb.data.getVar('PR', localdata, 1))) | ||
93 | continue | ||
94 | ret = os.system("tar -czvf %s %s" % (tarfn, '.')) | ||
95 | if ret != 0: | ||
96 | bb.error("Creation of tar %s failed." % tarfn) | ||
97 | # end stuff | ||
98 | del localdata | ||
99 | } | ||