Allow Help() to be called multiple times, appending to the text each time. (Chad...
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Mon, 30 Aug 2004 23:57:47 +0000 (23:57 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Mon, 30 Aug 2004 23:57:47 +0000 (23:57 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1049 fdb21ef1-2011-0410-befe-b5e4ea1792b1

doc/man/scons.1
src/CHANGES.txt
src/engine/SCons/Script/SConscript.py
src/engine/SCons/Script/__init__.py
test/Help.py
test/Options.py
test/OptionsTypes.py

index a08b151d597aa87c003a9f00ea6db8c48b450020..6b94453ee9e9cf0930c07cb1167b168ae40dafc8 100644 (file)
@@ -2929,8 +2929,12 @@ This specifies help text to be printed if the
 .B -h 
 argument is given to
 .BR scons .
-.B scons
-will exit after printing out the help text.
+If
+.BR Help
+is called multiple times, the text is appended together in the order
+that
+.BR Help
+is called.
 
 '\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 .TP
index f3b5778f825587f4236f3ee3492deee4f6e1bd9d..47514ea40ea87572f7b4f77e27a8906a84a20051 100644 (file)
 
 RELEASE 0.97 - XXX
 
+  From Chad Austin:
+
+  - Allow Help() to be called multiple times, appending to the help
+    text each call.
+
   From Gary Oberbrunner:
 
   - Add an Environment.Dump() method to print the contents of a
index 3146a9c32eeddb4857be18576f540473d7a599b4..c9a6108e0232186660d3d865a80492a9776f3ba8 100644 (file)
@@ -57,8 +57,14 @@ import UserList
 
 launch_dir = os.path.abspath(os.curdir)
 
-def do_nothing(text): pass
-HelpFunction = do_nothing
+help_text = None
+
+def HelpFunction(text):
+    global help_text
+    if help_text is None:
+        help_text = text
+    else:
+        help_text = help_text + text
 
 Arguments = {}
 ArgList = []
index 51d3e66fa15bcd74bb999f1fe441a029aa8c4b90..2325d35b35b58b04010f4a53bb336107754f23e1 100644 (file)
@@ -260,10 +260,6 @@ profiling = 0
 repositories = []
 num_jobs = 1 # this is modifed by SConscript.SetJobs()
 
-# Exceptions for this module
-class PrintHelp(Exception):
-    pass
-
 # utility functions
 
 def get_all_children(node): return node.all_children(None)
@@ -784,11 +780,6 @@ def _main(args, parser):
     global ssoptions
     ssoptions = SConscriptSettableOptions(options)
 
-    if options.help_msg:
-        def raisePrintHelp(text):
-            raise PrintHelp, text
-        SCons.Script.SConscript.HelpFunction = raisePrintHelp
-
     _set_globals(options)
     SCons.Node.implicit_cache = options.implicit_cache
     SCons.Node.implicit_deps_changed = options.implicit_deps_changed
@@ -896,28 +887,23 @@ def _main(args, parser):
     if not memory_stats is None: memory_stats.append(SCons.Debug.memory())
 
     progress_display("scons: Reading SConscript files ...")
+
+    start_time = time.time()
     try:
-        start_time = time.time()
-        try:
-            for script in scripts:
-                SCons.Script.SConscript._SConscript(fs, script)
-        except SCons.Errors.StopError, e:
-            # We had problems reading an SConscript file, such as it
-            # couldn't be copied in to the BuildDir.  Since we're just
-            # reading SConscript files and haven't started building
-            # things yet, stop regardless of whether they used -i or -k
-            # or anything else, but don't say "Stop." on the message.
-            global exit_status
-            sys.stderr.write("scons: *** %s\n" % e)
-            exit_status = 2
-            sys.exit(exit_status)
-        global sconscript_time
-        sconscript_time = time.time() - start_time
-    except PrintHelp, text:
-        progress_display("scons: done reading SConscript files.")
-        print text
-        print "Use scons -H for help about command-line options."
-        sys.exit(0)
+        for script in scripts:
+            SCons.Script.SConscript._SConscript(fs, script)
+    except SCons.Errors.StopError, e:
+        # We had problems reading an SConscript file, such as it
+        # couldn't be copied in to the BuildDir.  Since we're just
+        # reading SConscript files and haven't started building
+        # things yet, stop regardless of whether they used -i or -k
+        # or anything else, but don't say "Stop." on the message.
+        global exit_status
+        sys.stderr.write("scons: *** %s\n" % e)
+        exit_status = 2
+        sys.exit(exit_status)
+    global sconscript_time
+    sconscript_time = time.time() - start_time
     progress_display("scons: done reading SConscript files.")
 
     # Tell the Node.FS subsystem that we're all done reading the
@@ -931,9 +917,13 @@ def _main(args, parser):
     fs.chdir(fs.Top)
 
     if options.help_msg:
-        # They specified -h, but there was no Help() inside the
-        # SConscript files.  Give them the options usage.
-        parser.print_help(sys.stdout)
+        if SCons.Script.SConscript.help_text is None:
+            # They specified -h, but there was no Help() inside the
+            # SConscript files.  Give them the options usage.
+            parser.print_help(sys.stdout)
+        else:
+            print SCons.Script.SConscript.help_text
+            print "Use scons -H for help about command-line options."
         sys.exit(0)
 
     # Now that we've read the SConscripts we can set the options
index ea356ba9690c73c1010bbc7c2d7801d686082146..d6e71ea3fa910bb73966cc6a446f08c1ae8598d9 100644 (file)
@@ -60,4 +60,26 @@ Use scons -H for help about command-line options.
 
 test.run(arguments = '-h', stdout = expect)
 
+test.write('SConstruct', r"""
+Help('\nMulti')
+Help('line\n')
+Help('''\
+help
+text!
+''')
+""")
+
+expect = """\
+scons: Reading SConscript files ...
+scons: done reading SConscript files.
+
+Multiline
+help
+text!
+
+Use scons -H for help about command-line options.
+"""
+
+test.run(arguments = '-h', stdout = expect)
+
 test.pass_test()
index c98ffc6199d04581465377d6d13b56c7678a5731..d9bfd176256b001c0f67191894f992d7b7f0a693 100644 (file)
@@ -141,7 +141,14 @@ test.run(arguments='"DEBUG_BUILD=1"')
 check(['1', '1', cc, string.strip(ccflags + ' -O -g'), 'v', 'v'])
 
 test.run(arguments='-h',
-         stdout = """scons: Reading SConscript files ...
+         stdout = """\
+scons: Reading SConscript files ...
+1
+0
+%s
+%s
+v
+v
 scons: done reading SConscript files.
 Variables settable in custom.py or on the command line:
 
@@ -166,7 +173,7 @@ UNSPECIFIED: An option with no value
     actual: None
 
 Use scons -H for help about command-line options.
-"""%cc)
+"""%(cc, ccflags and ccflags + ' -O' or '-O', cc))
 
 # Test saving of options and multi loading
 #
@@ -288,7 +295,8 @@ Help('Variables settable in custom.py or on the command line:\\n' + opts.Generat
 """)
 
 test.run(arguments='-h',
-         stdout = """scons: Reading SConscript files ...
+         stdout = """\
+scons: Reading SConscript files ...
 scons: done reading SConscript files.
 Variables settable in custom.py or on the command line:
 
index 55cf03574f070bef5aef9b0aba890ae465e6ec41..5fef2579be79557d9db46d901000376c0aca843c 100644 (file)
@@ -346,7 +346,10 @@ Default(env.Alias('dummy', None))
 
 
 test.run(arguments='-h',
-         stdout = """scons: Reading SConscript files ...
+         stdout = """\
+scons: Reading SConscript files ...
+1
+0
 scons: done reading SConscript files.
 
 warnings: compilation with -Wall and similiar (yes|no)