File: hppa_parallel.patch

package info (click to toggle)
patchage 0.4.4-1.2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 792 kB
  • ctags: 576
  • sloc: cpp: 5,084; python: 545; makefile: 22
file content (106 lines) | stat: -rw-r--r-- 2,600 bytes parent folder | download | duplicates (3)
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