summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2004-11-23 18:03:51 (GMT)
committerSteven Knight <knight@baldmt.com>2004-11-23 18:03:51 (GMT)
commitaecc084531f05e110277d52d560b3e3c17fbf09a (patch)
tree63602bf0f3d05e3db2f3fb295f530302d6463b46 /src
parent9ee53a60a770d6f5a33624405d35ad4063378367 (diff)
downloadSCons-aecc084531f05e110277d52d560b3e3c17fbf09a.zip
SCons-aecc084531f05e110277d52d560b3e3c17fbf09a.tar.gz
SCons-aecc084531f05e110277d52d560b3e3c17fbf09a.tar.bz2
Add the ability to map keywords to ListOption (like we already do with EnumOption).
Diffstat (limited to 'src')
-rw-r--r--src/CHANGES.txt3
-rw-r--r--src/engine/SCons/Options/ListOption.py12
-rw-r--r--src/engine/SCons/Options/ListOptionTests.py10
3 files changed, 17 insertions, 8 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index 62d691a..48483d1 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -139,6 +139,9 @@ RELEASE 0.97 - XXX
$SHF90COMSTR, $SHF95COMSTR, $SHFORTRANCOMSTR, $SHLINKCOMSTR and
$YACCCOMSTR.
+ - Add an optional "map" keyword argument to ListOption() that takes a
+ dictionary to map user-specified values to legal values from the list
+ (like EnumOption() already doee).
From Wayne Lee:
diff --git a/src/engine/SCons/Options/ListOption.py b/src/engine/SCons/Options/ListOption.py
index 903d52b..d14b22a 100644
--- a/src/engine/SCons/Options/ListOption.py
+++ b/src/engine/SCons/Options/ListOption.py
@@ -89,7 +89,7 @@ class _ListOption(UserList.UserList):
def __repr__(self):
return self.__str__()
-def _converter(val, allowedElems):
+def _converter(val, allowedElems, mapdict):
"""
"""
if val == 'none':
@@ -98,10 +98,8 @@ def _converter(val, allowedElems):
val = allowedElems
else:
val = filter(None, string.split(val, ','))
- notAllowed = []
- for v in val:
- if not v in allowedElems:
- notAllowed.append(v)
+ val = map(lambda v, m=mapdict: m.get(v, v), val)
+ notAllowed = filter(lambda v, aE=allowedElems: not v in aE, val)
if notAllowed:
raise ValueError("Invalid value(s) for option: %s" %
string.join(notAllowed, ','))
@@ -115,7 +113,7 @@ def _converter(val, allowedElems):
## return 1
-def ListOption(key, help, default, names):
+def ListOption(key, help, default, names, map={}):
"""
The input parameters describe a 'package list' option, thus they
are returned with the correct converter and validater appended. The
@@ -132,4 +130,4 @@ def ListOption(key, help, default, names):
'\n ')
return (key, help, default,
None, #_validator,
- lambda val, elems=names: _converter(val, elems))
+ lambda val, elems=names, m=map: _converter(val, elems, m))
diff --git a/src/engine/SCons/Options/ListOptionTests.py b/src/engine/SCons/Options/ListOptionTests.py
index ec604f8..a892e18 100644
--- a/src/engine/SCons/Options/ListOptionTests.py
+++ b/src/engine/SCons/Options/ListOptionTests.py
@@ -56,7 +56,8 @@ class ListOptionTestCase(unittest.TestCase):
"""Test the ListOption converter"""
opts = SCons.Options.Options()
opts.Add(SCons.Options.ListOption('test', 'test option help', 'all',
- ['one', 'two', 'three']))
+ ['one', 'two', 'three'],
+ {'ONE':'one', 'TWO':'two'}))
o = opts.options[0]
@@ -68,9 +69,13 @@ class ListOptionTestCase(unittest.TestCase):
x = o.converter('one')
assert str(x) == 'one', x
+ x = o.converter('ONE')
+ assert str(x) == 'one', x
x = o.converter('two')
assert str(x) == 'two', x
+ x = o.converter('TWO')
+ assert str(x) == 'two', x
x = o.converter('three')
assert str(x) == 'three', x
@@ -96,6 +101,9 @@ class ListOptionTestCase(unittest.TestCase):
x = o.converter('three,two,one')
assert str(x) == 'all', x
+ x = o.converter('three,ONE,TWO')
+ assert str(x) == 'all', x
+
caught = None
try:
x = o.converter('no_match')