summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2005-06-02 21:54:58 (GMT)
committerSteven Knight <knight@baldmt.com>2005-06-02 21:54:58 (GMT)
commit97bdb1f4e23bac6d3b3d02f855c5a25882212afb (patch)
treeaad52cb29da8e5b54f393dcf93c0c2e8b9961fcd
parent08db2bcf45cc262fb87acac1b008e74a86418349 (diff)
downloadSCons-97bdb1f4e23bac6d3b3d02f855c5a25882212afb.zip
SCons-97bdb1f4e23bac6d3b3d02f855c5a25882212afb.tar.gz
SCons-97bdb1f4e23bac6d3b3d02f855c5a25882212afb.tar.bz2
Don't print duplicate stats when --profile is used.
-rw-r--r--src/engine/SCons/Script/Main.py21
-rw-r--r--test/option/profile.py (renamed from test/option--profile.py)41
2 files changed, 39 insertions, 23 deletions
diff --git a/src/engine/SCons/Script/Main.py b/src/engine/SCons/Script/Main.py
index cdf0139..d5be3eb 100644
--- a/src/engine/SCons/Script/Main.py
+++ b/src/engine/SCons/Script/Main.py
@@ -255,7 +255,6 @@ ignore_errors = 0
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()
@@ -676,16 +675,8 @@ class OptParser(OptionParser):
'--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,
@@ -1190,6 +1181,14 @@ def _exec_main():
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)
diff --git a/test/option--profile.py b/test/option/profile.py
index 412b8ce..b6a0027 100644
--- a/test/option--profile.py
+++ b/test/option/profile.py
@@ -33,12 +33,13 @@ import TestSCons
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')
@@ -54,17 +55,17 @@ finally:
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')
@@ -76,9 +77,25 @@ stats.strip_dirs().print_stats()
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()