sconscript_time = 0
command_time = 0
exit_status = 0 # exit status, assume success by default
-profiling = 0
repositories = []
num_jobs = 1 # this is modifed by SConscript.SetJobs()
'--recon', action="store_true", dest='noexec',
default=0, help="Don't build; just print commands.")
- def opt_profile(option, opt, value, parser):
- global profiling
- if not profiling:
- profiling = 1
- import profile
- profile.run('SCons.Script.Main.main()', value)
- sys.exit(exit_status)
- self.add_option('--profile', nargs=1, action="callback",
- callback=opt_profile, type="string", dest="profile",
- metavar="FILE",
+ self.add_option('--profile', action="store",
+ dest="profile_file", metavar="FILE",
help="Profile SCons and put results in FILE.")
self.add_option('-q', '--question', action="store_true", default=0,
if type(options.debug) == type([]) and "pdb" in options.debug:
import pdb
pdb.Pdb().runcall(_main, args, parser)
+ elif options.profile_file:
+ import profile
+ prof = profile.Profile()
+ try:
+ prof.runcall(_main, args, parser)
+ except SystemExit:
+ pass
+ prof.dump_stats(options.profile_file)
else:
_main(args, parser)
test = TestSCons.TestSCons()
+test.write('SConstruct', "\n")
+
scons_prof = test.workpath('scons.prof')
-test.run(arguments = "--profile=%s -v " % scons_prof)
-test.fail_test(string.find(test.stdout(), 'SCons by ') == -1)
-test.fail_test(string.find(test.stdout(), 'Copyright') == -1 and
- string.find(test.stdout(), '__COPYRIGHT__') == -1)
+test.run(arguments = "--profile=%s -h" % scons_prof)
+test.fail_test(string.find(test.stdout(), 'usage: scons [OPTION]') == -1)
+test.fail_test(string.find(test.stdout(), 'usage: scons [OPTION]') == -1)
stats = pstats.Stats(scons_prof)
stats.sort_stats('time')
sys.stdout = save_stdout
test.fail_test(string.find(s, 'Main.py') == -1)
-test.fail_test(string.find(s, 'print_version') == -1)
-test.fail_test(string.find(s, 'SCons.Script.Main.main()') == -1)
+test.fail_test(string.find(s, 'print_help') == -1)
+test.fail_test(string.find(s, '_main') == -1)
test.fail_test(string.find(s, 'option_parser.py') == -1)
+
scons_prof = test.workpath('scons2.prof')
-test.run(arguments = "--profile %s -v " % scons_prof)
-test.fail_test(string.find(test.stdout(), 'SCons by ') == -1)
-test.fail_test(string.find(test.stdout(), 'Copyright') == -1 and
- string.find(test.stdout(), '__COPYRIGHT__') == -1)
+test.run(arguments = "--profile %s -h" % scons_prof)
+test.fail_test(string.find(test.stdout(), 'usage: scons [OPTION]') == -1)
+test.fail_test(string.find(test.stdout(), 'Options:') == -1)
stats = pstats.Stats(scons_prof)
stats.sort_stats('time')
s = sys.stdout.getvalue()
test.fail_test(string.find(s, 'Main.py') == -1)
-test.fail_test(string.find(s, 'print_version') == -1)
-test.fail_test(string.find(s, 'SCons.Script.Main.main()') == -1)
+test.fail_test(string.find(s, 'print_help') == -1)
+test.fail_test(string.find(s, '_main') == -1)
test.fail_test(string.find(s, 'option_parser.py') == -1)
+
+
+
+scons_prof = test.workpath('scons3.prof')
+
+test.run(arguments = "--profile %s --debug=memory -h" % scons_prof)
+print test.stdout()
+test.fail_test(string.find(test.stdout(), 'usage: scons [OPTION]') == -1)
+test.fail_test(string.find(test.stdout(), 'Options:') == -1)
+
+expect = 'Memory before reading SConscript files'
+lines = string.split(test.stdout(), '\n')
+memory_lines = filter(lambda l, e=expect: string.find(l, e) != -1, lines)
+
+test.fail_test(len(memory_lines) != 1)
+
test.pass_test()