1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
Description: Disable parallel build on hppa architecture.
Origin: http://code.google.com/p/waf/source/browse/tags/waf-1.5.0/playground/serial.py
--- wafadmin/Runner.py.orig 2009-11-14 22:09:02.000000000 +0000
+++ wafadmin/Runner.py 2010-05-09 16:16:36.000000000 +0000
@@ -151,3 +151,100 @@
self.get_out()
assert(self.count==0 or self.stop)
+class Serial(object):
+
+ def __init__(self, bld, j=1):
+ self.manager = bld.task_manager
+ self.outstanding = []
+
+ # progress bar
+ self.total = self.manager.total()
+ self.processed = 0
+ self.error = 0
+
+ self.switchflag = 1 # postpone
+
+ self.consumers = None
+
+ # warning, this one is recursive ..
+ def get_next(self):
+ if self.outstanding:
+ t = self.outstanding.pop(0)
+ self.processed += 1
+ return t
+
+ # handle case where only one wscript exist
+ # that only install files
+ if not self.manager.groups:
+ return None
+
+ (_, self.outstanding) = self.manager.get_next_set()
+ if not self.outstanding: return None
+
+ return self.get_next()
+
+ def postpone(self, tsk):
+ self.processed -= 1
+ self.switchflag *= -1
+ # this actually shuffle the list
+ if self.switchflag>0: self.outstanding.insert(0, tsk)
+ else: self.outstanding.append(tsk)
+
+ def start(self):
+ debug('runner: Serial start called')
+ while 1:
+ # get next Task
+ tsk = self.get_next()
+ if tsk is None: break
+
+ if Logs.verbose: debug('runner: retrieving %r' % tsk)
+
+ st = tsk.runnable_status()
+ if st == ASK_LATER:
+ debug('runner: postponing %r' % tsk)
+ self.postpone(tsk)
+ continue
+
+ #continue
+ if st == SKIP_ME:
+ tsk.hasrun = SKIPPED
+ self.manager.add_finished(tsk)
+ continue
+
+ tsk.position = (self.processed, self.total)
+
+ # display the command that we are about to run
+ tsk.generator.bld.printout(tsk.display())
+
+ # run the command
+ if tsk.__class__.stat: ret = tsk.__class__.stat(tsk)
+ else: ret = tsk.run()
+ self.manager.add_finished(tsk)
+
+ # non-zero means something went wrong
+ if ret:
+ self.error = 1
+ tsk.hasrun = CRASHED
+ tsk.err_code = ret
+ if Options.options.keep: continue
+ else: return -1
+
+ try:
+ tsk.post_run()
+ except OSError:
+ self.error = 1
+ tsk.hasrun = MISSING
+ if Options.options.keep: continue
+ else: return -1
+ else:
+ tsk.hasrun = SUCCESS
+
+ if self.error:
+ return -1
+
+import subprocess
+p = subprocess.Popen(['dpkg', '--print-architecture'], stdout=subprocess.PIPE)
+arch = p.stdout.read().strip()
+p.wait()
+if arch == 'hppa':
+ Parallel = Serial
|