summaryrefslogtreecommitdiffstats
path: root/meta/classes/package_rpm.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/package_rpm.bbclass')
-rw-r--r--meta/classes/package_rpm.bbclass546
1 files changed, 377 insertions, 169 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index 7a1f8e08fd..3334c9ae6a 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -2,178 +2,113 @@ inherit package
2 2
3IMAGE_PKGTYPE ?= "rpm" 3IMAGE_PKGTYPE ?= "rpm"
4 4
5RPMBUILDPATH="${WORKDIR}/rpm" 5RPM="${BUILD_ARCH}-${BUILD_OS}-rpm"
6 6RPMBUILD="${BUILD_ARCH}-${BUILD_OS}-rpmbuild"
7RPMOPTS=""
8RPMBUILDOPTS="--target ${TARGET_SYS} --define '_topdir ${RPMBUILDPATH}' --buildroot ${ROOT}"
9RPM="${BUILD_ARCH}-${BUILD_OS}-rpm ${RPMOPTS}"
10RPMBUILD="${BUILD_ARCH}-${BUILD_OS}-rpmbuild --short-circuit ${RPMBUILDOPTS}"
11
12PKGWRITEDIRRPM = ${WORKDIR}/deploy-rpms"
13
14python write_specfile() {
15 version = bb.data.getVar('PV', d, 1)
16 version = version.replace('-', '+')
17 bb.data.setVar('RPMPV', version, d)
18
19 out_vartranslate = {
20 "PKG": "Name",
21 "RPMPV": "Version",
22 "PR": "Release",
23 "DESCRIPTION": "%description",
24 "LICENSE": "License",
25 "SECTION": "Group",
26 "pkg_postinst": "%post",
27 "pkg_preinst": "%pre",
28 }
29
30 root = bb.data.getVar('ROOT', d)
31
32 # get %files
33 filesvar = bb.data.expand(bb.data.getVar('FILES', d), d) or ""
34 from glob import glob
35 files = filesvar.split()
36 todelete = []
37 for file in files:
38 if file[0] == '.':
39 newfile = file[1:]
40 files[files.index(file)] = newfile
41 file = newfile
42 else:
43 newfile = file
44 realfile = os.path.join(root, './'+file)
45 if not glob(realfile):
46 todelete.append(files[files.index(newfile)])
47 for r in todelete:
48 try:
49 del files[files.index(r)]
50 except ValueError:
51 pass
52
53 if not files and bb.data.getVar('ALLOW_EMPTY', d) != "1":
54 bb.note("Not creating empty archive for %s-%s-%s" % (bb.data.getVar('PKG',d, 1), bb.data.getVar('PV', d, 1), bb.data.getVar('PR', d, 1)))
55 return
56
57 # output .spec using this metadata store
58 try:
59 from __builtin__ import file
60 if not bb.data.getVar('OUTSPECFILE', d):
61 raise OSError('eek!')
62 specfile = file(bb.data.getVar('OUTSPECFILE', d), 'w')
63 except OSError:
64 raise bb.build.FuncFailed("unable to open spec file for writing.")
65
66 fd = specfile
67 for var in out_vartranslate.keys():
68 if out_vartranslate[var][0] == "%":
69 continue
70 val = bb.data.getVar(var, d, 1)
71 if val:
72 fd.write("%s\t: %s\n" % (out_vartranslate[var], val))
73
74 fd.write("AutoReqProv: no\n")
75
76 def fix_dep_versions(varname):
77 depends = bb.utils.explode_dep_versions(bb.data.getVar(varname, d, True) or "")
78 newdeps = []
79 for dep in depends:
80 ver = depends[dep]
81 if dep and ver:
82 if '-' in ver:
83 subd = read_subpkgdata_dict(dep, d)
84 pv = subd['PV']
85 reppv = pv.replace('-', '+')
86 ver = ver.replace(pv, reppv)
87 newdeps.append("%s (%s)" % (dep, ver))
88 elif dep:
89 newdeps.append(dep)
90 bb.data.setVar(varname, " ".join(newdeps), d)
91
92 fix_dep_versions('RDEPENDS')
93
94# Recommends is not supported by rpm at this time
95# fix_dep_versions('RRECOMMENDS')
96
97 bb.build.exec_func("mapping_rename_hook", d)
98
99 def write_dep_field(varname, outstring):
100 depends = bb.utils.explode_dep_versions(bb.data.getVar(varname, d, True) or "")
101 for dep in depends:
102 ver = depends[dep]
103 if dep and ver:
104 fd.write("%s: %s %s\n" % (outstring, dep, ver))
105 elif dep:
106 fd.write("%s: %s\n" % (outstring, dep))
107
108 write_dep_field('RDEPENDS', 'Requires')
109# write_dep_field('RRECOMMENDS', 'Recommends')
110
111 fd.write("Summary\t: .\n")
112
113 for var in out_vartranslate.keys():
114 if out_vartranslate[var][0] != "%":
115 continue
116 val = bb.data.getVar(var, d)
117 if val:
118 fd.write(out_vartranslate[var] + "\n")
119 fd.write(val + "\n\n")
120
121 fd.write("%files\n")
122 for file in files:
123 if file[0] != '/':
124 fd.write('/')
125 fd.write("%s\n" % file)
126
127 fd.close()
128
129 # call out rpm -bb on the .spec, thereby creating an rpm
130 7
131 bb.note(bb.data.expand("${RPMBUILD} -bb ${OUTSPECFILE}", d)) 8PKGWRITEDIRRPM = "${WORKDIR}/deploy-rpms"
132 9
133 bb.data.setVar('BUILDSPEC', "${RPMBUILD} -bb ${OUTSPECFILE}\n", d) 10python package_rpm_fn () {
134 bb.data.setVarFlag('BUILDSPEC', 'func', '1', d) 11 bb.data.setVar('PKGFN', bb.data.getVar('PKG',d), d)
135 bb.build.exec_func('BUILDSPEC', d)
136
137 # move the rpm into the pkgoutdir
138 rpm = bb.data.expand('${RPMBUILDPATH}/RPMS/${TARGET_ARCH}/${PKG}-${RPMPV}-${PR}.${TARGET_ARCH}.rpm', d)
139 outrpm = bb.data.expand('${PKGWRITEDIRRPM}/${PACKAGE_ARCH}/${PKG}-${RPMPV}-${PR}.${TARGET_ARCH}.rpm', d)
140 bb.movefile(rpm, outrpm)
141} 12}
142 13
143rpm_prep() { 14python package_rpm_install () {
144 if [ ! -e ${WORKDIR}/rpmrc ]; then 15 bb.fatal("package_rpm_install not implemented!")
145 mkdir -p ${RPMBUILDPATH}/{SPECS,RPMS,SRPMS,SOURCES,BUILD}
146 fi
147} 16}
148 17
149python do_package_rpm () { 18python write_specfile () {
150 workdir = bb.data.getVar('WORKDIR', d, 1) 19 # We need to change '-' in a version field to '+'
151 if not workdir: 20 # This needs to be done BEFORE the mapping_rename_hook
152 bb.error("WORKDIR not defined, unable to package") 21 def translate_vers(varname, d):
22 depends = bb.data.getVar(varname, d, True)
23 if depends:
24 depends_dict = bb.utils.explode_dep_versions(depends)
25 newdeps_dict = {}
26 for dep in depends_dict:
27 ver = depends_dict[dep]
28 if dep and ver:
29 if '-' in ver:
30 subd = read_subpkgdata_dict(dep, d)
31 pv = subd['PV']
32 reppv = pv.replace('-', '+')
33 ver = ver.replace(pv, reppv)
34 newdeps_dict[dep] = ver
35 depends = bb.utils.join_deps(newdeps_dict)
36 bb.data.setVar(varname, depends.strip(), d)
37
38 # We need to change the style the dependency from BB to RPM
39 # This needs to happen AFTER the mapping_rename_hook
40 def translate_deps(varname, d):
41 depends = bb.data.getVar('RPM' + varname, d, True) or bb.data.getVar(varname, d, True) or ""
42 depends = depends.replace('(', '')
43 depends = depends.replace(')', '')
44 bb.data.setVar('RPM' + varname, depends, d)
45
46 def walk_files(walkpath, target, conffiles):
47 import os
48 for rootpath, dirs, files in os.walk(walkpath):
49 path = rootpath.replace(walkpath, "")
50 #for dir in dirs:
51 # target.append("%dir " + path + "/" + dir)
52 for file in files:
53 if conffiles.count(path + "/" + file):
54 target.append("%config " + path + "/" + file)
55 else:
56 target.append(path + "/" + file)
57
58 packages = bb.data.getVar('PACKAGES', d, True)
59 if not packages or packages == '':
60 bb.debug(1, "No packages; nothing to do")
153 return 61 return
154 62
155 outdir = bb.data.getVar('PKGWRITEDIRRPM', d, 1) 63 pkgdest = bb.data.getVar('PKGDEST', d, True)
156 if not outdir: 64 if not pkgdest:
157 bb.error("PKGWRITEDIRRPM not defined, unable to package") 65 bb.fatal("No PKGDEST")
158 return 66 return
159 bb.mkdirhier(outdir)
160 67
161 packages = bb.data.getVar('PACKAGES', d, 1) 68 outspecfile = bb.data.getVar('OUTSPECFILE', d, True)
162 if not packages: 69 if not outspecfile:
163 bb.debug(1, "PACKAGES not defined, nothing to package") 70 bb.fatal("No OUTSPECFILE")
164 return 71 return
165 72
166 if packages == []: 73 # Construct the SPEC file...
167 bb.debug(1, "No packages; nothing to do") 74 srcname = bb.data.getVar('PN', d, True)
168 return 75 srcsummary = (bb.data.getVar('SUMMARY', d, True) or ".")
169 76 srcversion = bb.data.getVar('PV', d, True).replace('-', '+')
170 # If "rpm" comes into overrides the presence of this function causes problems. 77 srcrelease = bb.data.getVar('PR', d, True)
171 # Since we don't need it, remove it for now - hacky. 78 srcepoch = (bb.data.getVar('PE', d, True) or "")
172 bb.data.delVar("do_package_write_rpm", d) 79 srclicense = bb.data.getVar('LICENSE', d, True)
80 srcsection = bb.data.getVar('SECTION', d, True)
81 srcmaintainer = bb.data.getVar('MAINTAINER', d, True)
82 srchomepage = bb.data.getVar('HOMEPAGE', d, True)
83 srcdescription = bb.data.getVar('DESCRIPTION', d, True)
84
85 translate_deps('DEPENDS', d)
86 srcdepends = bb.data.getVar('RPMDEPENDS', d, True)
87 srcrdepends = []
88 srcrrecommends = []
89 srcrsuggests = []
90 srcrprovides = []
91 srcrreplaces = []
92 srcrconflicts = []
93 srcrobsoletes = []
94
95 srcpreinst = []
96 srcpostinst = []
97 srcprerm = []
98 srcpostrm = []
99
100 spec_preamble_top = []
101 spec_preamble_bottom = []
102
103 spec_scriptlets_top = []
104 spec_scriptlets_bottom = []
105
106 spec_files_top = []
107 spec_files_bottom = []
173 108
174 for pkg in packages.split(): 109 for pkg in packages.split():
175 localdata = bb.data.createCopy(d) 110 localdata = bb.data.createCopy(d)
176 pkgdest = bb.data.getVar('PKGDEST', d, 1) 111
177 root = "%s/%s" % (pkgdest, pkg) 112 root = "%s/%s" % (pkgdest, pkg)
178 113
179 lf = bb.utils.lockfile(root + ".lock") 114 lf = bb.utils.lockfile(root + ".lock")
@@ -188,16 +123,289 @@ python do_package_rpm () {
188 bb.data.setVar('OVERRIDES', pkg, localdata) 123 bb.data.setVar('OVERRIDES', pkg, localdata)
189 124
190 bb.data.update_data(localdata) 125 bb.data.update_data(localdata)
191 basedir = os.path.join(os.path.dirname(root)) 126
192 pkgoutdir = os.path.join(outdir, bb.data.getVar('PACKAGE_ARCH', localdata, 1)) 127 conffiles = (bb.data.getVar('CONFFILES', localdata, True) or "").split()
193 bb.mkdirhier(pkgoutdir) 128
194 bb.data.setVar('OUTSPECFILE', os.path.join(workdir, "%s.spec" % pkg), localdata) 129 splitname = pkgname
195 # Save the value of RPMBUILD expanded into the new dictonary so any 130
196 # changes in the compoents that make up workdir don't break packaging 131 splitsummary = (bb.data.getVar('SUMMARY', d, True) or ".")
197 bb.data.setVar('RPMBUILD', bb.data.getVar("RPMBUILD", d, True), localdata) 132 splitversion = (bb.data.getVar('PV', localdata, True) or "").replace('-', '+')
198 bb.data.setVar('RPMBUILDPATH', bb.data.getVar("RPMBUILDPATH", d, True), localdata) 133 splitrelease = (bb.data.getVar('PR', localdata, True) or "")
199 bb.build.exec_func('write_specfile', localdata) 134 splitepoch = (bb.data.getVar('PE', localdata, True) or "")
135 splitlicense = (bb.data.getVar('LICENSE', localdata, True) or "")
136 splitsection = (bb.data.getVar('SECTION', localdata, True) or "")
137 splitdescription = (bb.data.getVar('DESCRIPTION', localdata, True) or "")
138
139 translate_vers('RDEPENDS', localdata)
140 translate_vers('RRECOMMENDS', localdata)
141 translate_vers('RSUGGESTS', localdata)
142 translate_vers('RPROVIDES', localdata)
143 translate_vers('RREPLACES', localdata)
144 translate_vers('RCONFLICTS', localdata)
145
146 # Map the dependencies into their final form
147 bb.build.exec_func("mapping_rename_hook", localdata)
148
149 translate_deps('RDEPENDS', localdata)
150 translate_deps('RRECOMMENDS', localdata)
151 translate_deps('RSUGGESTS', localdata)
152 translate_deps('RPROVIDES', localdata)
153 translate_deps('RREPLACES', localdata)
154 translate_deps('RCONFLICTS', localdata)
155
156 splitrdepends = bb.data.getVar('RPMRDEPENDS', localdata, True)
157 splitrrecommends = bb.data.getVar('RPMRRECOMMENDS', localdata, True)
158 splitrsuggests = bb.data.getVar('RPMRSUGGESTS', localdata, True)
159 splitrprovides = bb.data.getVar('RPMRPROVIDES', localdata, True)
160 splitrreplaces = bb.data.getVar('RPMRREPLACES', localdata, True)
161 splitrconflicts = bb.data.getVar('RPMRCONFLICTS', localdata, True)
162 splitrobsoletes = []
163
164 # Gather special src/first package data
165 if srcname == splitname:
166 srcrdepends = splitrdepends
167 srcrrecommends = splitrrecommends
168 srcrsuggests = splitrsuggests
169 srcrprovides = splitrprovides
170 srcrreplaces = splitrreplaces
171 srcrconflicts = splitrconflicts
172
173 srcpreinst = bb.data.getVar('pkg_preinst', localdata, True)
174 srcpostinst = bb.data.getVar('pkg_postinst', localdata, True)
175 srcprerm = bb.data.getVar('pkg_prerm', localdata, True)
176 srcpostrm = bb.data.getVar('pkg_postrm', localdata, True)
177
178 file_list = []
179 walk_files(root, file_list, conffiles)
180 if not file_list and bb.data.getVar('ALLOW_EMPTY', localdata) != "1":
181 bb.note("Not creating empty RPM package for %s" % splitname)
182 else:
183 bb.note("Creating RPM package for %s" % splitname)
184 spec_files_top.append('%files')
185 if file_list:
186 spec_files_top.extend(file_list)
187 spec_files_top.append('')
188
189 bb.utils.unlockfile(lf)
190 continue
191
192 # Process subpackage data
193 spec_preamble_bottom.append('%%package -n %s' % splitname)
194 spec_preamble_bottom.append('Summary: %s' % splitsummary)
195 if srcversion != splitversion:
196 spec_preamble_bottom.append('Version: %s' % splitversion)
197 if srcrelease != splitrelease:
198 spec_preamble_bottom.append('Release: %s' % splitrelease)
199 if srcepoch != splitepoch:
200 spec_preamble_bottom.append('Epoch: %s' % splitepoch)
201 if srclicense != splitlicense:
202 spec_preamble_bottom.append('License: %s' % splitlicense)
203 spec_preamble_bottom.append('Group: %s' % splitsection)
204
205 # Replaces == Obsoletes && Provides
206 if splitrreplaces and splitrreplaces.strip() != "":
207 for dep in splitrreplaces.split(','):
208 if splitrprovides:
209 splitrprovides = splitrprovides + ", " + dep
210 else:
211 splitrprovides = dep
212 if splitrobsoletes:
213 splitrobsoletes = splitrobsoletes + ", " + dep
214 else:
215 splitrobsoletes = dep
216
217 if splitrdepends and splitrdepends.strip() != "":
218 spec_preamble_bottom.append('Requires: %s' % splitrdepends)
219 #if splitrrecommends and splitrrecommends.strip() != "":
220 # spec_preamble_bottom.append('#Recommends: %s' % splitrrecommends)
221 #if splitrsuggests and splitrsuggests.strip() != "":
222 # spec_preamble_bottom.append('#Suggests: %s' % splitrsuggests)
223 if splitrprovides and splitrprovides.strip() != "":
224 spec_preamble_bottom.append('Provides: %s' % splitrprovides)
225 if splitrobsoletes and splitrobsoletes.strip() != "":
226 spec_preamble_bottom.append('Obsoletes: %s' % splitrobsoletes)
227 if splitrconflicts and splitrconflicts.strip() != "":
228 for dep in splitrconflicts.split(','):
229 # A conflict can NOT be in the provide or an internal conflict happens!
230 if dep not in splitrprovides:
231 spec_preamble_bottom.append('Conflicts: %s' % dep)
232
233 spec_preamble_bottom.append('')
234
235 spec_preamble_bottom.append('%%description -n %s' % splitname)
236 spec_preamble_bottom.append('%s' % splitdescription)
237
238 spec_preamble_bottom.append('')
239
240 # Now process scriptlets
241 for script in ["preinst", "postinst", "prerm", "postrm"]:
242 scriptvar = bb.data.getVar('pkg_%s' % script, localdata, True)
243 if not scriptvar:
244 continue
245 if script == 'preinst':
246 spec_scriptlets_bottom.append('%%pre -n %s' % splitname)
247 elif script == 'postinst':
248 spec_scriptlets_bottom.append('%%post -n %s' % splitname)
249 elif script == 'prerm':
250 spec_scriptlets_bottom.append('%%preun -n %s' % splitname)
251 elif script == 'postrm':
252 spec_scriptlets_bottom.append('%%postun -n %s' % splitname)
253 spec_scriptlets_bottom.append(scriptvar)
254 spec_scriptlets_bottom.append('')
255
256 # Now process files
257 file_list = []
258 walk_files(root, file_list, conffiles)
259 if not file_list and bb.data.getVar('ALLOW_EMPTY', localdata) != "1":
260 bb.note("Not creating empty RPM package for %s" % splitname)
261 else:
262 bb.note("Creating RPM package for %s" % splitname)
263 spec_files_bottom.append('%%files -n %s' % splitname)
264 if file_list:
265 spec_files_bottom.extend(file_list)
266 spec_files_bottom.append('')
267
268 del localdata
200 bb.utils.unlockfile(lf) 269 bb.utils.unlockfile(lf)
270
271 spec_preamble_top.append('Summary: %s' % srcsummary)
272 spec_preamble_top.append('Name: %s' % srcname)
273 spec_preamble_top.append('Version: %s' % srcversion)
274 spec_preamble_top.append('Release: %s' % srcrelease)
275 if srcepoch and srcepoch.strip() != "":
276 spec_preamble_top.append('Epoch: %s' % srcepoch)
277 spec_preamble_top.append('License: %s' % srclicense)
278 spec_preamble_top.append('Group: %s' % srcsection)
279 spec_preamble_top.append('Packager: %s' % srcmaintainer)
280 spec_preamble_top.append('URL: %s' % srchomepage)
281
282 # Replaces == Obsoletes && Provides
283 if srcrreplaces and srcrreplaces.strip() != "":
284 for dep in srcrreplaces.split(','):
285 if srcrprovides:
286 srcrprovides = srcrprovides + ", " + dep
287 else:
288 srcrprovides = dep
289 if srcrobsoletes:
290 srcrobsoletes = srcrobsoletes + ", " + dep
291 else:
292 srcrobsoletes = dep
293 if srcdepends and srcdepends.strip() != "":
294 spec_preamble_top.append('BuildRequires: %s' % srcdepends)
295 if srcrdepends and srcrdepends.strip() != "":
296 spec_preamble_top.append('Requires: %s' % srcrdepends)
297 #if srcrrecommends and srcrrecommends.strip() != "":
298 # spec_preamble_top.append('#Recommends: %s' % srcrrecommends)
299 #if srcrsuggests and srcrsuggests.strip() != "":
300 # spec_preamble_top.append('#Suggests: %s' % srcrsuggests)
301 if srcrprovides and srcrprovides.strip() != "":
302 spec_preamble_top.append('Provides: %s' % srcrprovides)
303 if srcrobsoletes and srcrobsoletes.strip() != "":
304 spec_preamble_top.append('Obsoletes: %s' % srcrobsoletes)
305 if srcrconflicts and srcrconflicts.strip() != "":
306 for dep in srcrconflicts.split(','):
307 # A conflict can NOT be in the provide or an internal conflict happens!
308 if dep not in srcrprovides:
309 spec_preamble_bottom.append('Conflicts: %s' % dep)
310
311 spec_preamble_top.append('')
312
313 spec_preamble_top.append('%description')
314 spec_preamble_top.append('%s' % srcdescription)
315
316 spec_preamble_top.append('')
317
318 if srcpreinst:
319 spec_scriptlets_top.append('%pre')
320 spec_scriptlets_top.append(srcpreinst)
321 spec_scriptlets_top.append('')
322 if srcpostinst:
323 spec_scriptlets_top.append('%post')
324 spec_scriptlets_top.append(srcpostinst)
325 spec_scriptlets_top.append('')
326 if srcprerm:
327 spec_scriptlets_top.append('%preun')
328 spec_scriptlets_top.append(srcprerm)
329 spec_scriptlets_top.append('')
330 if srcpostrm:
331 spec_scriptlets_top.append('%postun')
332 spec_scriptlets_top.append(srcpostrm)
333 spec_scriptlets_top.append('')
334
335 # Write the SPEC file
336 try:
337 from __builtin__ import file
338 specfile = file(outspecfile, 'w')
339 except OSError:
340 raise bb.build.FuncFailed("unable to open spec file for writing.")
341
342 for line in spec_preamble_top:
343 specfile.write(line + "\n")
344
345 for line in spec_preamble_bottom:
346 specfile.write(line + "\n")
347
348 for line in spec_scriptlets_top:
349 specfile.write(line + "\n")
350
351 for line in spec_scriptlets_bottom:
352 specfile.write(line + "\n")
353
354 for line in spec_files_top:
355 specfile.write(line + "\n")
356
357 for line in spec_files_bottom:
358 specfile.write(line + "\n")
359
360 specfile.close()
361}
362
363python do_package_rpm () {
364 import os
365
366 workdir = bb.data.getVar('WORKDIR', d, True)
367 outdir = bb.data.getVar('DEPLOY_DIR_IPK', d, True)
368 dvar = bb.data.getVar('D', d, True)
369 tmpdir = bb.data.getVar('TMPDIR', d, True)
370 pkgd = bb.data.getVar('PKGD', d, True)
371 pkgdest = bb.data.getVar('PKGDEST', d, True)
372 if not workdir or not outdir or not dvar or not tmpdir:
373 bb.error("Variables incorrectly set, unable to package")
374 return
375
376 if not os.path.exists(dvar):
377 bb.debug(1, "Nothing installed, nothing to do")
378 return
379
380 packages = bb.data.getVar('PACKAGES', d, True)
381 if not packages or packages == '':
382 bb.debug(1, "No packages; nothing to do")
383 return
384
385 # Construct the spec file...
386 srcname = bb.data.getVar('PN', d, True)
387 outspecfile = workdir + "/" + srcname + ".spec"
388 bb.data.setVar('OUTSPECFILE', outspecfile, d)
389 bb.build.exec_func('write_specfile', d)
390
391 # Setup the rpmbuild arguments...
392 rpmbuild = bb.data.getVar('RPMBUILD', d, True)
393 targetsys = bb.data.getVar('TARGET_SYS', d, True)
394 pkgwritedir = bb.data.expand('${PKGWRITEDIRRPM}/${PACKAGE_ARCH}', d)
395 pkgarch = bb.data.expand('${PACKAGE_ARCH}', d)
396 bb.mkdirhier(pkgwritedir)
397 os.chmod(pkgwritedir, 0755)
398
399 cmd = rpmbuild
400 cmd = cmd + " --nodeps --short-circuit --target " + pkgarch + " --buildroot " + pkgd
401 cmd = cmd + " --define '_topdir " + workdir + "' --define '_rpmdir " + pkgwritedir + "'"
402 cmd = cmd + " --define '_build_name_fmt %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm'"
403 cmd = cmd + " -bb " + outspecfile
404
405 # Build the spec file!
406 bb.data.setVar('BUILDSPEC', cmd + "\n", d)
407 bb.data.setVarFlag('BUILDSPEC', 'func', '1', d)
408 bb.build.exec_func('BUILDSPEC', d)
201} 409}
202 410
203python () { 411python () {
@@ -206,7 +414,7 @@ python () {
206 deps.append('rpm-native:do_populate_sysroot') 414 deps.append('rpm-native:do_populate_sysroot')
207 deps.append('virtual/fakeroot-native:do_populate_sysroot') 415 deps.append('virtual/fakeroot-native:do_populate_sysroot')
208 bb.data.setVarFlag('do_package_write_rpm', 'depends', " ".join(deps), d) 416 bb.data.setVarFlag('do_package_write_rpm', 'depends', " ".join(deps), d)
209 bb.data.setVarFlag('do_package_write_ipk', 'fakeroot', "1", d) 417 bb.data.setVarFlag('do_package_write_rpm', 'fakeroot', 1, d)
210} 418}
211 419
212SSTATETASKS += "do_package_write_rpm" 420SSTATETASKS += "do_package_write_rpm"
@@ -215,15 +423,15 @@ do_package_write_rpm[sstate-inputdirs] = "${PKGWRITEDIRRPM}"
215do_package_write_rpm[sstate-outputdirs] = "${DEPLOY_DIR_RPM}" 423do_package_write_rpm[sstate-outputdirs] = "${DEPLOY_DIR_RPM}"
216 424
217python do_package_write_rpm_setscene () { 425python do_package_write_rpm_setscene () {
218 sstate_setscene(d) 426 sstate_setscene(d)
219} 427}
220#addtask do_package_write_rpm_setscene 428#addtask do_package_write_rpm_setscene
221 429
222python do_package_write_rpm () { 430python do_package_write_rpm () {
223 bb.build.exec_func("read_subpackage_metadata", d) 431 bb.build.exec_func("read_subpackage_metadata", d)
224 bb.build.exec_func("rpm_prep", d)
225 bb.build.exec_func("do_package_rpm", d) 432 bb.build.exec_func("do_package_rpm", d)
226} 433}
434
227do_package_write_rpm[dirs] = "${PKGWRITEDIRRPM}" 435do_package_write_rpm[dirs] = "${PKGWRITEDIRRPM}"
228addtask package_write_rpm before do_package_write after do_package 436addtask package_write_rpm before do_package_write after do_package
229 437