diff options
author | Steven Knight <knight@baldmt.com> | 2002-12-10 18:17:13 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2002-12-10 18:17:13 (GMT) |
commit | eec2b45582390844927b2332ebd7b2dda05045a4 (patch) | |
tree | 2ea1ae0e48c647d330e968aa590d9602082eddd9 /src/engine | |
parent | 0199971b2f990483892023a98e0203de85212105 (diff) | |
download | SCons-eec2b45582390844927b2332ebd7b2dda05045a4.zip SCons-eec2b45582390844927b2332ebd7b2dda05045a4.tar.gz SCons-eec2b45582390844927b2332ebd7b2dda05045a4.tar.bz2 |
Add functions for getting and setting the number of jobs. (Anthony Roach)
Diffstat (limited to 'src/engine')
-rw-r--r-- | src/engine/SCons/Job.py | 2 | ||||
-rw-r--r-- | src/engine/SCons/Script/SConscript.py | 14 | ||||
-rw-r--r-- | src/engine/SCons/Script/__init__.py | 12 |
3 files changed, 24 insertions, 4 deletions
diff --git a/src/engine/SCons/Job.py b/src/engine/SCons/Job.py index c06cf23..aedf768 100644 --- a/src/engine/SCons/Job.py +++ b/src/engine/SCons/Job.py @@ -42,7 +42,7 @@ class Jobs: """ create 'num' jobs using the given taskmaster. - If 'num' is equal to 0, then a serial job will be used, + If 'num' is 1 or less, then a serial job will be used, otherwise 'num' parallel jobs will be used. """ diff --git a/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py index 41368a5..15f116f 100644 --- a/src/engine/SCons/Script/SConscript.py +++ b/src/engine/SCons/Script/SConscript.py @@ -303,6 +303,18 @@ def EnsurePythonVersion(major, minor): print "Python %d.%d or greater required, but you have Python %s" %(major,minor,v) sys.exit(2) +def GetJobs(): + return SCons.Script.get_num_jobs(SCons.Script.options) + +def SetJobs(num): + try: + tmp = int(num) + if tmp < 1: + raise ValueError + SCons.Script.num_jobs = tmp + except ValueError, x: + raise SCons.Errors.UserError, "A positive integer is required: %s"%repr(num) + def BuildDefaultGlobals(): """ Create a dictionary containing all the default globals for @@ -325,6 +337,7 @@ def BuildDefaultGlobals(): globals['FindFile'] = FindFile globals['GetBuildPath'] = GetBuildPath globals['GetCommandHandler'] = SCons.Action.GetCommandHandler + globals['GetJobs'] = GetJobs globals['GetLaunchDir'] = GetLaunchDir globals['Help'] = Help globals['Import'] = Import @@ -344,6 +357,7 @@ def BuildDefaultGlobals(): globals['SetBuildSignatureType'] = SetBuildSignatureType globals['SetCommandHandler'] = SCons.Action.SetCommandHandler globals['SetContentSignatureType'] = SetContentSignatureType + globals['SetJobs'] = SetJobs globals['SharedLibrary'] = SCons.Defaults.SharedLibrary globals['SharedObject'] = SCons.Defaults.SharedObject globals['Split'] = SCons.Util.Split diff --git a/src/engine/SCons/Script/__init__.py b/src/engine/SCons/Script/__init__.py index 338b98f..a0c2f7d 100644 --- a/src/engine/SCons/Script/__init__.py +++ b/src/engine/SCons/Script/__init__.py @@ -178,6 +178,7 @@ exit_status = 0 # exit status, assume success by default profiling = 0 repositories = [] sig_module = None +num_jobs = 1 # this is modifed by SConscript.SetJobs() def print_it(text): print text @@ -190,6 +191,12 @@ class PrintHelp(Exception): # utility functions +def get_num_jobs(options): + if hasattr(options, 'num_jobs'): + return options.num_jobs + else: + return num_jobs + def get_all_children(node): return node.all_children(None) def get_derived_children(node): @@ -604,8 +611,6 @@ class OptParser(OptionParser): opt, arglist = OptionParser.parse_args(self, args, values) if opt.implicit_deps_changed or opt.implicit_deps_unchanged: opt.implicit_cache = 1 - if not hasattr(opt, "num_jobs"): - setattr(opt, "num_jobs", 1) return opt, arglist @@ -626,6 +631,7 @@ def _main(): # it's OK if there's no SCONSFLAGS pass parser = OptParser() + global options options, args = parser.parse_args(all_args) if options.help_msg: @@ -835,7 +841,7 @@ def _main(): display("scons: Building targets ...") taskmaster = SCons.Taskmaster.Taskmaster(nodes, task_class, calc) - jobs = SCons.Job.Jobs(options.num_jobs, taskmaster) + jobs = SCons.Job.Jobs(get_num_jobs(options), taskmaster) try: jobs.run() |