diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/lib/devtool/standard.py | 50 |
1 files changed, 30 insertions, 20 deletions
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py index 1e99413365..aed76ea621 100644 --- a/scripts/lib/devtool/standard.py +++ b/scripts/lib/devtool/standard.py | |||
@@ -213,6 +213,32 @@ def extract(args, config, basepath, workspace): | |||
213 | else: | 213 | else: |
214 | return -1 | 214 | return -1 |
215 | 215 | ||
216 | class BbTaskExecutor(object): | ||
217 | """Class for executing bitbake tasks for a recipe | ||
218 | |||
219 | FIXME: This is very awkward. Unfortunately it's not currently easy to | ||
220 | properly execute tasks outside of bitbake itself, until then this has to | ||
221 | suffice if we are to handle e.g. linux-yocto's extra tasks | ||
222 | """ | ||
223 | |||
224 | def __init__(self, rdata): | ||
225 | self.rdata = rdata | ||
226 | self.executed = [] | ||
227 | |||
228 | def exec_func(self, func, report): | ||
229 | """Run bitbake task function""" | ||
230 | if not func in self.executed: | ||
231 | deps = self.rdata.getVarFlag(func, 'deps') | ||
232 | if deps: | ||
233 | for taskdepfunc in deps: | ||
234 | self.exec_func(taskdepfunc, True) | ||
235 | if report: | ||
236 | logger.info('Executing %s...' % func) | ||
237 | fn = self.rdata.getVar('FILE', True) | ||
238 | localdata = bb.build._task_data(fn, func, self.rdata) | ||
239 | bb.build.exec_func(func, localdata) | ||
240 | self.executed.append(func) | ||
241 | |||
216 | 242 | ||
217 | def _extract_source(srctree, keep_temp, devbranch, d): | 243 | def _extract_source(srctree, keep_temp, devbranch, d): |
218 | """Extract sources of a recipe""" | 244 | """Extract sources of a recipe""" |
@@ -270,28 +296,12 @@ def _extract_source(srctree, keep_temp, devbranch, d): | |||
270 | # We don't want to move the source to STAGING_KERNEL_DIR here | 296 | # We don't want to move the source to STAGING_KERNEL_DIR here |
271 | crd.setVar('STAGING_KERNEL_DIR', '${S}') | 297 | crd.setVar('STAGING_KERNEL_DIR', '${S}') |
272 | 298 | ||
273 | # FIXME: This is very awkward. Unfortunately it's not currently easy to properly | 299 | task_executor = BbTaskExecutor(crd) |
274 | # execute tasks outside of bitbake itself, until then this has to suffice if we | ||
275 | # are to handle e.g. linux-yocto's extra tasks | ||
276 | executed = [] | ||
277 | def exec_task_func(func, report): | ||
278 | """Run specific bitbake task for a recipe""" | ||
279 | if not func in executed: | ||
280 | deps = crd.getVarFlag(func, 'deps') | ||
281 | if deps: | ||
282 | for taskdepfunc in deps: | ||
283 | exec_task_func(taskdepfunc, True) | ||
284 | if report: | ||
285 | logger.info('Executing %s...' % func) | ||
286 | fn = d.getVar('FILE', True) | ||
287 | localdata = bb.build._task_data(fn, func, crd) | ||
288 | bb.build.exec_func(func, localdata) | ||
289 | executed.append(func) | ||
290 | 300 | ||
291 | logger.info('Fetching %s...' % pn) | 301 | logger.info('Fetching %s...' % pn) |
292 | exec_task_func('do_fetch', False) | 302 | task_executor.exec_func('do_fetch', False) |
293 | logger.info('Unpacking...') | 303 | logger.info('Unpacking...') |
294 | exec_task_func('do_unpack', False) | 304 | task_executor.exec_func('do_unpack', False) |
295 | srcsubdir = crd.getVar('S', True) | 305 | srcsubdir = crd.getVar('S', True) |
296 | if srcsubdir == workdir: | 306 | if srcsubdir == workdir: |
297 | # Find non-patch sources that were "unpacked" to srctree directory | 307 | # Find non-patch sources that were "unpacked" to srctree directory |
@@ -343,7 +353,7 @@ def _extract_source(srctree, keep_temp, devbranch, d): | |||
343 | crd.setVar('PATCHTOOL', 'git') | 353 | crd.setVar('PATCHTOOL', 'git') |
344 | 354 | ||
345 | logger.info('Patching...') | 355 | logger.info('Patching...') |
346 | exec_task_func('do_patch', False) | 356 | task_executor.exec_func('do_patch', False) |
347 | 357 | ||
348 | bb.process.run('git tag -f devtool-patched', cwd=srcsubdir) | 358 | bb.process.run('git tag -f devtool-patched', cwd=srcsubdir) |
349 | 359 | ||