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