Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(588)

Side by Side Diff: third_party/scons/scons-local/SCons/Script/Main.py

Issue 20025: Update SCons to latest checkpoint release, 1.2.0.d20090113.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 """SCons.Script 1 """SCons.Script
2 2
3 This file implements the main() function used by the scons script. 3 This file implements the main() function used by the scons script.
4 4
5 Architecturally, this *is* the scons script, and will likely only be 5 Architecturally, this *is* the scons script, and will likely only be
6 called from the external "scons" wrapper. Consequently, anything here 6 called from the external "scons" wrapper. Consequently, anything here
7 should not be, or be considered, part of the build engine. If it's 7 should not be, or be considered, part of the build engine. If it's
8 something that we expect other software to want to use, it should go in 8 something that we expect other software to want to use, it should go in
9 some other module. If it's specific to the "scons" script invocation, 9 some other module. If it's specific to the "scons" script invocation,
10 it goes here. 10 it goes here.
11 11
12 """ 12 """
13 13
14 # 14 #
15 # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundat ion 15 # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons F oundation
16 # 16 #
17 # Permission is hereby granted, free of charge, to any person obtaining 17 # Permission is hereby granted, free of charge, to any person obtaining
18 # a copy of this software and associated documentation files (the 18 # a copy of this software and associated documentation files (the
19 # "Software"), to deal in the Software without restriction, including 19 # "Software"), to deal in the Software without restriction, including
20 # without limitation the rights to use, copy, modify, merge, publish, 20 # without limitation the rights to use, copy, modify, merge, publish,
21 # distribute, sublicense, and/or sell copies of the Software, and to 21 # distribute, sublicense, and/or sell copies of the Software, and to
22 # permit persons to whom the Software is furnished to do so, subject to 22 # permit persons to whom the Software is furnished to do so, subject to
23 # the following conditions: 23 # the following conditions:
24 # 24 #
25 # The above copyright notice and this permission notice shall be included 25 # The above copyright notice and this permission notice shall be included
26 # in all copies or substantial portions of the Software. 26 # in all copies or substantial portions of the Software.
27 # 27 #
28 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY 28 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
29 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 29 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
30 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 30 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 31 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 32 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 33 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 34 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 # 35 #
36 36
37 __revision__ = "src/engine/SCons/Script/Main.py 3842 2008/12/20 22:59:52 scons" 37 __revision__ = "src/engine/SCons/Script/Main.py 3897 2009/01/13 06:45:54 scons"
38 38
39 import os 39 import os
40 import os.path 40 import os.path
41 import string 41 import string
42 import sys 42 import sys
43 import time 43 import time
44 import traceback 44 import traceback
45 45
46 # Strip the script directory from sys.path() so on case-insensitive 46 # Strip the script directory from sys.path() so on case-insensitive
47 # (Windows) systems Python doesn't think that the "scons" script is the 47 # (Windows) systems Python doesn't think that the "scons" script is the
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 ProgressObject = apply(Progressor, args, kw) 148 ProgressObject = apply(Progressor, args, kw)
149 149
150 # Task control. 150 # Task control.
151 # 151 #
152 152
153 _BuildFailures = [] 153 _BuildFailures = []
154 154
155 def GetBuildFailures(): 155 def GetBuildFailures():
156 return _BuildFailures 156 return _BuildFailures
157 157
158 class BuildTask(SCons.Taskmaster.Task): 158 class BuildTask(SCons.Taskmaster.OutOfDateTask):
159 """An SCons build task.""" 159 """An SCons build task."""
160 progress = ProgressObject 160 progress = ProgressObject
161 161
162 def display(self, message): 162 def display(self, message):
163 display('scons: ' + message) 163 display('scons: ' + message)
164 164
165 def prepare(self): 165 def prepare(self):
166 self.progress(self.targets[0]) 166 self.progress(self.targets[0])
167 return SCons.Taskmaster.Task.prepare(self) 167 return SCons.Taskmaster.OutOfDateTask.prepare(self)
168 168
169 def needs_execute(self): 169 def needs_execute(self):
170 target = self.targets[0] 170 if SCons.Taskmaster.OutOfDateTask.needs_execute(self):
171 if target.get_state() == SCons.Node.executing:
172 return True 171 return True
173 else: 172 if self.top and self.targets[0].has_builder():
174 if self.top and target.has_builder(): 173 display("scons: `%s' is up to date." % str(self.node))
175 display("scons: `%s' is up to date." % str(self.node)) 174 return False
176 return False
177 175
178 def execute(self): 176 def execute(self):
179 if print_time: 177 if print_time:
180 start_time = time.time() 178 start_time = time.time()
181 global first_command_start 179 global first_command_start
182 if first_command_start is None: 180 if first_command_start is None:
183 first_command_start = start_time 181 first_command_start = start_time
184 SCons.Taskmaster.Task.execute(self) 182 SCons.Taskmaster.OutOfDateTask.execute(self)
185 if print_time: 183 if print_time:
186 global cumulative_command_time 184 global cumulative_command_time
187 global last_command_end 185 global last_command_end
188 finish_time = time.time() 186 finish_time = time.time()
189 last_command_end = finish_time 187 last_command_end = finish_time
190 cumulative_command_time = cumulative_command_time+finish_time-start_ time 188 cumulative_command_time = cumulative_command_time+finish_time-start_ time
191 sys.stdout.write("Command execution time: %f seconds\n"%(finish_time -start_time)) 189 sys.stdout.write("Command execution time: %f seconds\n"%(finish_time -start_time))
192 190
193 def do_failed(self, status=2): 191 def do_failed(self, status=2):
194 _BuildFailures.append(self.exception[1]) 192 _BuildFailures.append(self.exception[1])
195 global exit_status 193 global exit_status
196 global this_build_status 194 global this_build_status
197 if self.options.ignore_errors: 195 if self.options.ignore_errors:
198 SCons.Taskmaster.Task.executed(self) 196 SCons.Taskmaster.OutOfDateTask.executed(self)
199 elif self.options.keep_going: 197 elif self.options.keep_going:
200 SCons.Taskmaster.Task.fail_continue(self) 198 SCons.Taskmaster.OutOfDateTask.fail_continue(self)
201 exit_status = status 199 exit_status = status
202 this_build_status = status 200 this_build_status = status
203 else: 201 else:
204 SCons.Taskmaster.Task.fail_stop(self) 202 SCons.Taskmaster.OutOfDateTask.fail_stop(self)
205 exit_status = status 203 exit_status = status
206 this_build_status = status 204 this_build_status = status
207 205
208 def executed(self): 206 def executed(self):
209 t = self.targets[0] 207 t = self.targets[0]
210 if self.top and not t.has_builder() and not t.side_effect: 208 if self.top and not t.has_builder() and not t.side_effect:
211 if not t.exists(): 209 if not t.exists():
212 errstr="Do not know how to make target `%s'." % t 210 errstr="Do not know how to make target `%s'." % t
213 sys.stderr.write("scons: *** " + errstr) 211 sys.stderr.write("scons: *** " + errstr)
214 if not self.options.keep_going: 212 if not self.options.keep_going:
215 sys.stderr.write(" Stop.") 213 sys.stderr.write(" Stop.")
216 sys.stderr.write("\n") 214 sys.stderr.write("\n")
217 try: 215 try:
218 raise SCons.Errors.BuildError(t, errstr) 216 raise SCons.Errors.BuildError(t, errstr)
219 except KeyboardInterrupt: 217 except KeyboardInterrupt:
220 raise 218 raise
221 except: 219 except:
222 self.exception_set() 220 self.exception_set()
223 self.do_failed() 221 self.do_failed()
224 else: 222 else:
225 print "scons: Nothing to be done for `%s'." % t 223 print "scons: Nothing to be done for `%s'." % t
226 SCons.Taskmaster.Task.executed(self) 224 SCons.Taskmaster.OutOfDateTask.executed(self)
227 else: 225 else:
228 SCons.Taskmaster.Task.executed(self) 226 SCons.Taskmaster.OutOfDateTask.executed(self)
229 227
230 def failed(self): 228 def failed(self):
231 # Handle the failure of a build task. The primary purpose here 229 # Handle the failure of a build task. The primary purpose here
232 # is to display the various types of Errors and Exceptions 230 # is to display the various types of Errors and Exceptions
233 # appropriately. 231 # appropriately.
234 exc_info = self.exc_info() 232 exc_info = self.exc_info()
235 try: 233 try:
236 t, e, tb = exc_info 234 t, e, tb = exc_info
237 except ValueError: 235 except ValueError:
238 t, e = exc_info 236 t, e = exc_info
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 def postprocess(self): 284 def postprocess(self):
287 if self.top: 285 if self.top:
288 t = self.targets[0] 286 t = self.targets[0]
289 for tp in self.options.tree_printers: 287 for tp in self.options.tree_printers:
290 tp.display(t) 288 tp.display(t)
291 if self.options.debug_includes: 289 if self.options.debug_includes:
292 tree = t.render_include_tree() 290 tree = t.render_include_tree()
293 if tree: 291 if tree:
294 print 292 print
295 print tree 293 print tree
296 SCons.Taskmaster.Task.postprocess(self) 294 SCons.Taskmaster.OutOfDateTask.postprocess(self)
297 295
298 def make_ready(self): 296 def make_ready(self):
299 """Make a task ready for execution""" 297 """Make a task ready for execution"""
300 SCons.Taskmaster.Task.make_ready(self) 298 SCons.Taskmaster.OutOfDateTask.make_ready(self)
301 if self.out_of_date and self.options.debug_explain: 299 if self.out_of_date and self.options.debug_explain:
302 explanation = self.out_of_date[0].explain() 300 explanation = self.out_of_date[0].explain()
303 if explanation: 301 if explanation:
304 sys.stdout.write("scons: " + explanation) 302 sys.stdout.write("scons: " + explanation)
305 303
306 class CleanTask(SCons.Taskmaster.Task): 304 class CleanTask(SCons.Taskmaster.AlwaysTask):
307 """An SCons clean task.""" 305 """An SCons clean task."""
308 def fs_delete(self, path, pathstr, remove=1): 306 def fs_delete(self, path, pathstr, remove=1):
309 try: 307 try:
310 if os.path.exists(path): 308 if os.path.exists(path):
311 if os.path.isfile(path): 309 if os.path.isfile(path):
312 if remove: os.unlink(path) 310 if remove: os.unlink(path)
313 display("Removed " + pathstr) 311 display("Removed " + pathstr)
314 elif os.path.isdir(path) and not os.path.islink(path): 312 elif os.path.isdir(path) and not os.path.islink(path):
315 # delete everything in the dir 313 # delete everything in the dir
316 entries = os.listdir(path) 314 entries = os.listdir(path)
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 executed = SCons.Taskmaster.Task.executed_without_callbacks 370 executed = SCons.Taskmaster.Task.executed_without_callbacks
373 371
374 # Have the taskmaster arrange to "execute" all of the targets, because 372 # Have the taskmaster arrange to "execute" all of the targets, because
375 # we'll figure out ourselves (in remove() or show() above) whether 373 # we'll figure out ourselves (in remove() or show() above) whether
376 # anything really needs to be done. 374 # anything really needs to be done.
377 make_ready = SCons.Taskmaster.Task.make_ready_all 375 make_ready = SCons.Taskmaster.Task.make_ready_all
378 376
379 def prepare(self): 377 def prepare(self):
380 pass 378 pass
381 379
382 class QuestionTask(SCons.Taskmaster.Task): 380 class QuestionTask(SCons.Taskmaster.AlwaysTask):
383 """An SCons task for the -q (question) option.""" 381 """An SCons task for the -q (question) option."""
384 def prepare(self): 382 def prepare(self):
385 pass 383 pass
386 384
387 def execute(self): 385 def execute(self):
388 if self.targets[0].get_state() != SCons.Node.up_to_date or \ 386 if self.targets[0].get_state() != SCons.Node.up_to_date or \
389 (self.top and not self.targets[0].exists()): 387 (self.top and not self.targets[0].exists()):
390 global exit_status 388 global exit_status
391 global this_build_status 389 global this_build_status
392 exit_status = 1 390 exit_status = 1
393 this_build_status = 1 391 this_build_status = 1
394 self.tm.stop() 392 self.tm.stop()
395 393
396 def executed(self): 394 def executed(self):
(...skipping 762 matching lines...) Expand 10 before | Expand all | Expand 10 after
1159 memory_stats.append('before building targets:') 1157 memory_stats.append('before building targets:')
1160 count_stats.append(('pre-', 'build')) 1158 count_stats.append(('pre-', 'build'))
1161 1159
1162 def jobs_postfunc( 1160 def jobs_postfunc(
1163 jobs=jobs, 1161 jobs=jobs,
1164 options=options, 1162 options=options,
1165 closing_message=closing_message, 1163 closing_message=closing_message,
1166 failure_message=failure_message 1164 failure_message=failure_message
1167 ): 1165 ):
1168 if jobs.were_interrupted(): 1166 if jobs.were_interrupted():
1169 progress_display("scons: Build interrupted.") 1167 if not options.no_progress and not options.silent:
1168 sys.stderr.write("scons: Build interrupted.\n")
1170 global exit_status 1169 global exit_status
1171 global this_build_status 1170 global this_build_status
1172 exit_status = 2 1171 exit_status = 2
1173 this_build_status = 2 1172 this_build_status = 2
1174 1173
1175 if this_build_status: 1174 if this_build_status:
1176 progress_display("scons: " + failure_message) 1175 progress_display("scons: " + failure_message)
1177 else: 1176 else:
1178 progress_display("scons: " + closing_message) 1177 progress_display("scons: " + closing_message)
1179 if not options.no_exec: 1178 if not options.no_exec:
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1244 1243
1245 parts = ["SCons by Steven Knight et al.:\n"] 1244 parts = ["SCons by Steven Knight et al.:\n"]
1246 try: 1245 try:
1247 import __main__ 1246 import __main__
1248 parts.append(version_string("script", __main__)) 1247 parts.append(version_string("script", __main__))
1249 except (ImportError, AttributeError): 1248 except (ImportError, AttributeError):
1250 # On Windows there is no scons.py, so there is no 1249 # On Windows there is no scons.py, so there is no
1251 # __main__.__version__, hence there is no script version. 1250 # __main__.__version__, hence there is no script version.
1252 pass 1251 pass
1253 parts.append(version_string("engine", SCons)) 1252 parts.append(version_string("engine", SCons))
1254 parts.append("Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 T he SCons Foundation") 1253 parts.append("Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation")
1255 version = string.join(parts, '') 1254 version = string.join(parts, '')
1256 1255
1257 import SConsOptions 1256 import SConsOptions
1258 parser = SConsOptions.Parser(version) 1257 parser = SConsOptions.Parser(version)
1259 values = SConsOptions.SConsValues(parser.get_default_values()) 1258 values = SConsOptions.SConsValues(parser.get_default_values())
1260 1259
1261 OptionsParser = parser 1260 OptionsParser = parser
1262 1261
1263 try: 1262 try:
1264 _exec_main(parser, values) 1263 _exec_main(parser, values)
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1312 ct = 0.0 1311 ct = 0.0
1313 else: 1312 else:
1314 ct = last_command_end - first_command_start 1313 ct = last_command_end - first_command_start
1315 scons_time = total_time - sconscript_time - ct 1314 scons_time = total_time - sconscript_time - ct
1316 print "Total build time: %f seconds"%total_time 1315 print "Total build time: %f seconds"%total_time
1317 print "Total SConscript file execution time: %f seconds"%sconscript_time 1316 print "Total SConscript file execution time: %f seconds"%sconscript_time
1318 print "Total SCons execution time: %f seconds"%scons_time 1317 print "Total SCons execution time: %f seconds"%scons_time
1319 print "Total command execution time: %f seconds"%ct 1318 print "Total command execution time: %f seconds"%ct
1320 1319
1321 sys.exit(exit_status) 1320 sys.exit(exit_status)
OLDNEW
« no previous file with comments | « third_party/scons/scons-local/SCons/Script/Interactive.py ('k') | third_party/scons/scons-local/SCons/Script/SConsOptions.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698