support "oemake --world" as a (preferred) alternative for "oemake world".
[vuplus_bitbake] / bin / oe / parse / SRPMHandler.py
1 #!/usr/bin/env python
2 # ex:ts=4:sw=4:sts=4:et
3 # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
4 """class for handling .src.rpm files
5
6    Accesses the file and obtains its metadata"""
7
8 import re, oe, os, sys
9 import oe.fetch
10 from oe import debug, data, fetch, fatal
11 from oe.parse.ConfHandler import init
12
13 _srpm_vartranslate = {
14 "NAME": "PN",
15 "VERSION": "PV",
16 "RELEASE": "PR",
17 }
18
19 def supports(fn, d):
20     return fn[-8:] == ".src.rpm"
21
22 def handle(fn, d = {}, include = 0):
23     init(d)
24     oepath = ['.']
25     if not os.path.isabs(fn):
26         f = None
27         voepath = data.getVar("OEPATH", d)
28         if voepath:
29             oepath += voepath.split(":")
30         for p in oepath:
31             p = data.expand(p, d)
32             if os.access(os.path.join(p, fn), os.R_OK):
33                 f = open(os.path.join(p, fn), 'r')
34         if f is None:
35             raise IOError("file not found")
36     else:
37         f = open(fn,'r')
38
39     srpm_vars = os.popen('rpm --querytags').read().split('\n')
40     for v in srpm_vars:
41         if v in _srpm_vartranslate:
42             var = _srpm_vartranslate[v]
43         else:
44             var = v
45         querycmd = 'rpm -qp --qf \'%%{%s}\' %s 2>/dev/null' % (v, fn)
46         value = os.popen(querycmd).read().strip()
47         if value == "(none)":
48             value = None
49         if value:
50             data.setVar(var, value, d)
51
52     data.setVar("SRPMFILE", fn, d)
53
54     inheritclasses = data.getVar("INHERIT", d)
55     if inheritclasses:
56         i = inheritclasses.split()
57     else:
58         i = []
59
60     if not "base_srpm" in i:
61         i[0:0] = ["base_srpm"]
62
63     for c in i:
64         oe.parse.handle('classes/%s.oeclass' % c, d)
65
66     set_automatic_vars(fn, d, include)
67     set_additional_vars(fn, d, include)
68     data.update_data(d)
69     return d
70
71 def set_automatic_vars(file, d, include):
72     """Deduce per-package environment variables"""
73
74     debug(2, "setting automatic vars")
75
76     data.setVar('CATEGORY', 'srpm', d)
77     data.setVar('P', '${PN}-${PV}', d)
78     data.setVar('PF', '${P}-${PR}', d)
79
80     for s in ['${TOPDIR}/${CATEGORY}/${PF}',
81           '${TOPDIR}/${CATEGORY}/${PN}-${PV}',
82           '${TOPDIR}/${CATEGORY}/files',
83           '${TOPDIR}/${CATEGORY}']:
84         s = data.expand(s, d)
85         if os.access(s, os.R_OK):
86             data.setVar('FILESDIR', s, d)
87             break
88
89     data.setVar('WORKDIR', '${TMPDIR}/${CATEGORY}/${PF}', d)
90     data.setVar('T', '${WORKDIR}/temp', d)
91     data.setVar('D', '${WORKDIR}/image', d)
92     if not data.getVar('S', d):
93         data.setVar('S', '${WORKDIR}/${P}', d)
94     data.setVar('SLOT', '0', d)
95
96 def set_additional_vars(file, d, include):
97     """Deduce rest of variables, e.g. ${A} out of ${SRC_URI}"""
98
99     debug(2,"set_additional_vars")
100
101     src_uri = data.getVar('SRC_URI', d)
102     if not src_uri:
103         return
104     src_uri = data.expand(src_uri, d)
105
106     a = data.getVar('A', d)
107     if a:
108         a = data.expand(a, d).split()
109     else:
110         a = []
111
112     from oe import fetch
113     try:
114         fetch.init(src_uri.split())
115     except fetch.NoMethodError:
116         pass
117
118     a += fetch.localpaths(d)
119     del fetch
120     data.setVar('A', ''.join(a), d)
121
122
123 # Add us to the handlers list
124 from oe.parse import handlers
125 handlers.append({'supports': supports, 'handle': handle, 'init': init})
126 del handlers