summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2005-03-06 00:45:02 (GMT)
committerSteven Knight <knight@baldmt.com>2005-03-06 00:45:02 (GMT)
commitfe741836cacf824a8e81253c9058970ccff56400 (patch)
tree25e8b37a7f64518d57111a052d7e017a56ebfdc7 /src
parentb27862261a726fd88e87206cc7f00ce6a1e720ce (diff)
downloadSCons-fe741836cacf824a8e81253c9058970ccff56400.zip
SCons-fe741836cacf824a8e81253c9058970ccff56400.tar.gz
SCons-fe741836cacf824a8e81253c9058970ccff56400.tar.bz2
Make the GenerateHelpText format easily configurable.
Diffstat (limited to 'src')
-rw-r--r--src/CHANGES.txt3
-rw-r--r--src/engine/SCons/Options/OptionsTests.py51
-rw-r--r--src/engine/SCons/Options/__init__.py19
3 files changed, 67 insertions, 6 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index 2fa54ab..0535e10 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -225,6 +225,9 @@ RELEASE 0.97 - XXX
- Enhanced the SCons setup.py script to install man pages on
UNIX/Linux systems.
+ - Add support for an Options.FormatOptionHelpText() method that can
+ be overridden to customize the format of Options help text.
+
From Wayne Lee:
- Avoid "maximum recursion limit" errors when removing $(-$) pairs
diff --git a/src/engine/SCons/Options/OptionsTests.py b/src/engine/SCons/Options/OptionsTests.py
index b99aa98..96f2e2b 100644
--- a/src/engine/SCons/Options/OptionsTests.py
+++ b/src/engine/SCons/Options/OptionsTests.py
@@ -375,6 +375,7 @@ class OptionsTestCase(unittest.TestCase):
'THIS_SHOULD_WORK' : 'baz' })
def test_GenerateHelpText(self):
+ """Test generating the default format help text"""
opts = SCons.Options.Options()
opts.Add('ANSWER',
@@ -430,6 +431,56 @@ B: b - alpha test
"""
text = opts.GenerateHelpText(env, sort=cmp)
assert text == expectAlpha, text
+
+ def test_FormatOptionHelpText(self):
+ """Test generating custom format help text"""
+ opts = SCons.Options.Options()
+
+ def my_format(env, opt, help, default, actual):
+ return '%s %s %s %s\n' % (opt, default, actual, help)
+
+ opts.FormatOptionHelpText = my_format
+
+ opts.Add('ANSWER',
+ 'THE answer to THE question',
+ "42",
+ check,
+ lambda x: int(x) + 12)
+
+ opts.Add('B',
+ 'b - alpha test',
+ "42",
+ check,
+ lambda x: int(x) + 12)
+
+ opts.Add('A',
+ 'a - alpha test',
+ "42",
+ check,
+ lambda x: int(x) + 12)
+
+ env = Environment()
+ opts.Update(env, {})
+
+ expect = """\
+ANSWER 42 54 THE answer to THE question
+B 42 54 b - alpha test
+A 42 54 a - alpha test
+"""
+
+ text = opts.GenerateHelpText(env)
+ assert text == expect, text
+
+ expectAlpha = """\
+A 42 54 a - alpha test
+ANSWER 42 54 THE answer to THE question
+B 42 54 b - alpha test
+"""
+ text = opts.GenerateHelpText(env, sort=cmp)
+ assert text == expectAlpha, text
+
+
+
if __name__ == "__main__":
suite = unittest.makeSuite(OptionsTestCase, 'test_')
diff --git a/src/engine/SCons/Options/__init__.py b/src/engine/SCons/Options/__init__.py
index fdaee92..f5f1b8d 100644
--- a/src/engine/SCons/Options/__init__.py
+++ b/src/engine/SCons/Options/__init__.py
@@ -30,6 +30,7 @@ customizable variables to an SCons build.
__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
import os.path
+import string
import SCons.Errors
import SCons.Util
@@ -223,11 +224,17 @@ class Options:
else:
options = self.options
- for option in options:
- help_text = help_text + '\n%s: %s\n default: %s\n'%(option.key, option.help, option.default)
- if env.has_key(option.key):
- help_text = help_text + ' actual: %s\n'%env.subst('${%s}'%option.key)
+ def format(opt, self=self, env=env):
+ if env.has_key(opt.key):
+ actual = env.subst('${%s}' % opt.key)
else:
- help_text = help_text + ' actual: None\n'
+ actual = None
+ return self.FormatOptionHelpText(env, opt.key, opt.help, opt.default, actual)
+ lines = filter(None, map(format, options))
- return help_text
+ return string.join(lines, '')
+
+ format = '\n%s: %s\n default: %s\n actual: %s\n'
+
+ def FormatOptionHelpText(self, env, key, help, default, actual):
+ return self.format % (key, help, default, actual)