import os
import os.path
import SCons.Node.FS
-from SCons.Util import PathList, scons_str2nodes, scons_subst, scons_subst_list
+from SCons.Util import PathList, scons_str2nodes, scons_subst, scons_subst_list, autogenerate
import string
import types
from UserList import UserList
dict.update(kw)
+ # Autogenerate necessary construction variables.
+ autogenerate(dict)
+
return dict
class CommandAction(ActionBase):
contents = b3.get_contents()
assert contents == "foo\177\036\000\177\037\000d\000\000Sbar", repr(contents)
+ b4 = SCons.Builder.Builder(action = "$_LIBFLAGS $_LIBDIRFLAGS $_INCFLAGS")
+ contents = b4.get_contents(LIBS = ['foo', 'bar'],
+ LIBLINKPREFIX = '-l',
+ LIBLINKSUFFIX = '',
+ LIBPATH = ['lib'],
+ LIBDIRPREFIX = '-L',
+ LIBDIRSUFFIX = '/',
+ CPPPATH = ['c', 'p'],
+ INCPREFIX = '-I',
+ INCSUFFIX = '')
+ assert contents == "-lfoo -lbar -Llib/ -Ic -Ip", contents
+
def test_name(self):
"""Test Builder creation with a specified name
"""
Environment.
"""
- # See the documentation for the __autogenerate() method
- # for an explanation of this variable...
- AUTO_GEN_VARS = ( ( '_LIBFLAGS',
- 'LIBS',
- 'LIBLINKPREFIX',
- 'LIBLINKSUFFIX' ),
- ( '_LIBDIRFLAGS',
- 'LIBPATH',
- 'LIBDIRPREFIX',
- 'LIBDIRSUFFIX' ),
- ( '_INCFLAGS',
- 'CPPPATH',
- 'INCPREFIX',
- 'INCSUFFIX' ) )
-
def __init__(self, **kw):
import SCons.Defaults
self._dict = copy.deepcopy(SCons.Defaults.ConstructionEnvironment)
if kw.has_key('SCANNERS') and type(kw['SCANNERS']) != type([]):
kw['SCANNERS'] = [kw['SCANNERS']]
self._dict.update(copy.deepcopy(kw))
- self.__autogenerate()
class BuilderWrapper:
"""Wrapper class that allows an environment to
for s in self._dict['SCANNERS']:
setattr(self, s.name, s)
- def __autogenerate(self):
- """Autogenerate the "interpolated" environment variables.
- We read a static structure that tells us how. AUTO_GEN_VARS
- is a tuple of tuples. Each inner tuple has four elements,
- each strings referring to an environment variable, and describing
- how to autogenerate a particular variable. The elements are:
-
- 0 - The variable to generate
- 1 - The "source" variable, usually a list
- 2 - The "prefix" variable
- 3 - The "suffix" variable
-
- The autogenerated variable is a list, consisting of every
- element of the source list, or a single element if the source
- is a string, with the prefix and suffix
- concatenated."""
-
- for strVarAuto, strSrc, strPref, strSuff, in self.AUTO_GEN_VARS:
- if self._dict.has_key(strSrc):
- src_var = self._dict[strSrc]
- if type(src_var) is types.ListType or \
- isinstance(src_var, UserList):
- src_var = map(str, src_var)
- else:
- src_var = [ str(src_var), ]
- else:
- src_var = []
-
- try:
- prefix = str(self._dict[strPref])
- except KeyError:
- prefix=''
-
- try:
- suffix = str(self._dict[strSuff])
- except KeyError:
- suffix =''
-
- self._dict[strVarAuto] = map(lambda x, suff=suffix, pref=prefix: \
- pref + os.path.normpath(str(x)) + suff,
- src_var)
-
def __cmp__(self, other):
return cmp(self._dict, other._dict)
construction variables and/or values.
"""
self._dict.update(copy.deepcopy(kw))
- self.__autogenerate()
def Depends(self, target, dependency):
"""Explicity specify that 'target's depend on 'dependency'."""
str = env.subst("$AAA ${AAA}A ${AAA}B $BBB")
assert str == "c c", str
- def test_autogenerate(self):
- """Test autogenerated environment variables."""
- env = Environment(LIBS = [ 'foo', 'bar', 'baz' ],
- LIBLINKPREFIX = 'foo',
- LIBLINKSUFFIX = 'bar')
- assert len(env.Dictionary('_LIBFLAGS')) == 3, env.Dictionary('_LIBFLAGS')
- assert env.Dictionary('_LIBFLAGS')[0] == 'foofoobar', \
- env.Dictionary('_LIBFLAGS')[0]
- assert env.Dictionary('_LIBFLAGS')[1] == 'foobarbar', \
- env.Dictionary('_LIBFLAGS')[1]
- assert env.Dictionary('_LIBFLAGS')[2] == 'foobazbar', \
- env.Dictionary('_LIBFLAGS')[2]
-
- env = Environment(CPPPATH = [ 'foo', 'bar', 'baz' ],
- INCPREFIX = 'foo',
- INCSUFFIX = 'bar')
- assert len(env.Dictionary('_INCFLAGS')) == 3, env.Dictionary('_INCFLAGS')
- assert env.Dictionary('_INCFLAGS')[0] == 'foofoobar', \
- env.Dictionary('_INCFLAGS')[0]
- assert env.Dictionary('_INCFLAGS')[1] == 'foobarbar', \
- env.Dictionary('_INCFLAGS')[1]
- assert env.Dictionary('_INCFLAGS')[2] == 'foobazbar', \
- env.Dictionary('_INCFLAGS')[2]
-
+
if __name__ == "__main__":
suite = unittest.makeSuite(EnvironmentTestCase, 'test_')
pass
return nodes
+
+
+
+# See the documentation for the __autogenerate() method
+# for an explanation of this variable...
+AUTO_GEN_VARS = ( ( '_LIBFLAGS',
+ 'LIBS',
+ 'LIBLINKPREFIX',
+ 'LIBLINKSUFFIX' ),
+ ( '_LIBDIRFLAGS',
+ 'LIBPATH',
+ 'LIBDIRPREFIX',
+ 'LIBDIRSUFFIX' ),
+ ( '_INCFLAGS',
+ 'CPPPATH',
+ 'INCPREFIX',
+ 'INCSUFFIX' ) )
+
+def autogenerate(dict):
+ """Autogenerate the "interpolated" environment variables.
+ We read a static structure that tells us how. AUTO_GEN_VARS
+ is a tuple of tuples. Each inner tuple has four elements,
+ each strings referring to an environment variable, and describing
+ how to autogenerate a particular variable. The elements are:
+
+ 0 - The variable to generate
+ 1 - The "source" variable, usually a list
+ 2 - The "prefix" variable
+ 3 - The "suffix" variable
+
+ The autogenerated variable is a list, consisting of every
+ element of the source list, or a single element if the source
+ is a string, with the prefix and suffix
+ concatenated."""
+
+ for strVarAuto, strSrc, strPref, strSuff, in AUTO_GEN_VARS:
+ if dict.has_key(strSrc):
+ src_var = dict[strSrc]
+ if type(src_var) is types.ListType or \
+ isinstance(src_var, UserList):
+ src_var = map(str, src_var)
+ else:
+ src_var = [ str(src_var), ]
+ else:
+ src_var = []
+
+ try:
+ prefix = str(dict[strPref])
+ except KeyError:
+ prefix=''
+
+ try:
+ suffix = str(dict[strSuff])
+ except KeyError:
+ suffix =''
+
+ dict[strVarAuto] = map(lambda x, suff=suffix, pref=prefix: \
+ pref + os.path.normpath(str(x)) + suff,
+ src_var)
file_names = map(os.path.normpath, file_names)
assert os.path.normpath('./foo') in file_names, file_names
assert os.path.normpath('./bar/baz') in file_names, file_names
+
+ def test_autogenerate(dict):
+ """Test autogenerating variables in a dictionary."""
+ dict = {'LIBS' : [ 'foo', 'bar', 'baz' ],
+ 'LIBLINKPREFIX' : 'foo',
+ 'LIBLINKSUFFIX' : 'bar'}
+ autogenerate(dict)
+ assert len(dict['_LIBFLAGS']) == 3, dict('_LIBFLAGS')
+ assert dict['_LIBFLAGS'][0] == 'foofoobar', \
+ dict['_LIBFLAGS'][0]
+ assert dict['_LIBFLAGS'][1] == 'foobarbar', \
+ dict['_LIBFLAGS'][1]
+ assert dict['_LIBFLAGS'][2] == 'foobazbar', \
+ dict['_LIBFLAGS'][2]
+
+ dict = {'CPPPATH' : [ 'foo', 'bar', 'baz' ],
+ 'INCPREFIX' : 'foo',
+ 'INCSUFFIX' : 'bar'}
+ autogenerate(dict)
+ assert len(dict['_INCFLAGS']) == 3, dict('_INCFLAGS')
+ assert dict['_INCFLAGS'][0] == 'foofoobar', \
+ dict['_INCFLAGS'][0]
+ assert dict['_INCFLAGS'][1] == 'foobarbar', \
+ dict['_INCFLAGS'][1]
+ assert dict['_INCFLAGS'][2] == 'foobazbar', \
+ dict['_INCFLAGS'][2]
if __name__ == "__main__":