summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2001-07-29 12:16:01 (GMT)
committerSteven Knight <knight@baldmt.com>2001-07-29 12:16:01 (GMT)
commitd30b5d7c747a906752e5ab680743dade655e1537 (patch)
treeb79afc687fbe0d8ecd50323484fe7fc50a11a952 /src
parent3e824b614bd10b82a4e7a046d0b51970d4602712 (diff)
downloadSCons-d30b5d7c747a906752e5ab680743dade655e1537.zip
SCons-d30b5d7c747a906752e5ab680743dade655e1537.tar.gz
SCons-d30b5d7c747a906752e5ab680743dade655e1537.tar.bz2
add the -j argument
Diffstat (limited to 'src')
-rw-r--r--src/scons.py81
1 files changed, 76 insertions, 5 deletions
diff --git a/src/scons.py b/src/scons.py
index c700f77..70d336a 100644
--- a/src/scons.py
+++ b/src/scons.py
@@ -5,13 +5,42 @@ import os.path
import string
import sys
-opts, targets = getopt.getopt(sys.argv[1:], 'f:')
+def PrintUsage():
+ print "Usage: scons [OPTION]... TARGET..."
+ print "Build TARGET or multiple TARGET(s)"
+ print " "
+ print ' -f CONSCRIPT execute CONSCRIPT instead of "SConstruct"'
+ print " -j N execute N parallel jobs"
+ print " --help print this message and exit"
+
+try:
+ opts, targets = getopt.getopt(sys.argv[1:], 'f:j:', ['help'])
+except getopt.GetoptError, x:
+ print x
+ PrintUsage()
+ sys.exit()
Scripts = []
+num_jobs = 1
for o, a in opts:
if o == '-f': Scripts.append(a)
+ if o == '-j':
+ try:
+ num_jobs = int(a)
+ except:
+ PrintUsage()
+ sys.exit(1)
+
+ if num_jobs <= 0:
+ PrintUsage()
+ sys.exit(1)
+
+ if o == '--help':
+ PrintUsage()
+ sys.exit(0)
+
if not Scripts:
Scripts.append('SConstruct')
@@ -26,13 +55,16 @@ if not Scripts:
#for dir in sys.path:
# scons = os.path.join(dir, 'scons')
# if os.path.isdir(scons):
-# dirlist = dirlist + [scons]
+# dirlist = dirlist + [scons]
# dirlist = dirlist + [dir]
#
#sys.path = dirlist
+
from scons.Node.FS import init, Dir, File, lookup
from scons.Environment import Environment
+import scons.Job
+from scons.Builder import Builder
init()
@@ -49,6 +81,45 @@ while Scripts:
-for path in targets:
- target = lookup(File, path)
- target.build()
+class Task:
+ "this is here only until the build engine is implemented"
+
+ def __init__(self, target):
+ self.target = target
+
+ def execute(self):
+ self.target.build()
+
+
+
+class Taskmaster:
+ "this is here only until the build engine is implemented"
+
+ def __init__(self, targets):
+ self.targets = targets
+ self.num_iterated = 0
+
+
+ def next_task(self):
+ if self.num_iterated == len(self.targets):
+ return None
+ else:
+ current = self.num_iterated
+ self.num_iterated = self.num_iterated + 1
+ return Task(self.targets[current])
+
+ def is_blocked(self):
+ return 0
+
+ def executed(self, task):
+ pass
+
+
+
+taskmaster = Taskmaster(map(lambda x: lookup(File, x), targets))
+
+jobs = scons.Job.Jobs(num_jobs, taskmaster)
+jobs.start()
+jobs.wait()
+
+