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
6 Accesses the file and obtains its metadata"""
10 from oe import debug, data, fetch, fatal
11 from oe.parse.ConfHandler import init
13 _srpm_vartranslate = {
20 return fn[-8:] == ".src.rpm"
22 def handle(fn, d = {}, include = 0):
25 if not os.path.isabs(fn):
27 voepath = data.getVar("OEPATH", d)
29 oepath += voepath.split(":")
32 if os.access(os.path.join(p, fn), os.R_OK):
33 f = open(os.path.join(p, fn), 'r')
35 raise IOError("file not found")
39 srpm_vars = os.popen('rpm --querytags').read().split('\n')
41 if v in _srpm_vartranslate:
42 var = _srpm_vartranslate[v]
45 querycmd = 'rpm -qp --qf \'%%{%s}\' %s 2>/dev/null' % (v, fn)
46 value = os.popen(querycmd).read().strip()
50 data.setVar(var, value, d)
52 data.setVar("SRPMFILE", fn, d)
54 inheritclasses = data.getVar("INHERIT", d)
56 i = inheritclasses.split()
60 if not "base_srpm" in i:
61 i[0:0] = ["base_srpm"]
64 oe.parse.handle('classes/%s.oeclass' % c, d)
66 set_automatic_vars(fn, d, include)
67 set_additional_vars(fn, d, include)
71 def set_automatic_vars(file, d, include):
72 """Deduce per-package environment variables"""
74 debug(2, "setting automatic vars")
76 data.setVar('CATEGORY', 'srpm', d)
77 data.setVar('P', '${PN}-${PV}', d)
78 data.setVar('PF', '${P}-${PR}', d)
80 for s in ['${TOPDIR}/${CATEGORY}/${PF}',
81 '${TOPDIR}/${CATEGORY}/${PN}-${PV}',
82 '${TOPDIR}/${CATEGORY}/files',
83 '${TOPDIR}/${CATEGORY}']:
85 if os.access(s, os.R_OK):
86 data.setVar('FILESDIR', s, d)
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)
96 def set_additional_vars(file, d, include):
97 """Deduce rest of variables, e.g. ${A} out of ${SRC_URI}"""
99 debug(2,"set_additional_vars")
101 src_uri = data.getVar('SRC_URI', d)
104 src_uri = data.expand(src_uri, d)
106 a = data.getVar('A', d)
108 a = data.expand(a, d).split()
114 fetch.init(src_uri.split())
115 except fetch.NoMethodError:
118 a += fetch.localpaths(d)
120 data.setVar('A', ''.join(a), d)
123 # Add us to the handlers list
124 from oe.parse import handlers
125 handlers.append({'supports': supports, 'handle': handle, 'init': init})