diff options
author | Steven Knight <knight@baldmt.com> | 2004-09-01 00:03:16 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2004-09-01 00:03:16 (GMT) |
commit | a2ba55e47988f6d7e602f558e08feef219be934e (patch) | |
tree | c1504d1d0c2dfd118c24c1920e28a037c932ed02 /src/engine/SCons | |
parent | e966ff8d4b3581dc6194adfb70718445a0bbb41b (diff) | |
download | SCons-a2ba55e47988f6d7e602f558e08feef219be934e.zip SCons-a2ba55e47988f6d7e602f558e08feef219be934e.tar.gz SCons-a2ba55e47988f6d7e602f558e08feef219be934e.tar.bz2 |
Allow to contain File Nodes. Have ParseConfig add libraries to . Add support for -framework. (Gary Oberbrunner)
Diffstat (limited to 'src/engine/SCons')
-rw-r--r-- | src/engine/SCons/Defaults.py | 24 | ||||
-rw-r--r-- | src/engine/SCons/Environment.py | 15 | ||||
-rw-r--r-- | src/engine/SCons/EnvironmentTests.py | 9 |
3 files changed, 29 insertions, 19 deletions
diff --git a/src/engine/SCons/Defaults.py b/src/engine/SCons/Defaults.py index c75ac25..a99850b 100644 --- a/src/engine/SCons/Defaults.py +++ b/src/engine/SCons/Defaults.py @@ -234,31 +234,34 @@ def _concat(prefix, list, suffix, env, f=lambda x: x): list = f(env.subst_path(list)) - ret = [] + result = [] # ensure that prefix and suffix are strings prefix = str(env.subst(prefix, SCons.Util.SUBST_RAW)) suffix = str(env.subst(suffix, SCons.Util.SUBST_RAW)) for x in list: + if isinstance(x, SCons.Node.FS.File): + result.append(x) + continue x = str(x) if x: if prefix: if prefix[-1] == ' ': - ret.append(prefix[:-1]) + result.append(prefix[:-1]) elif x[:len(prefix)] != prefix: x = prefix + x - ret.append(x) + result.append(x) if suffix: if suffix[0] == ' ': - ret.append(suffix[1:]) + result.append(suffix[1:]) elif x[-len(suffix):] != suffix: - ret[-1] = ret[-1]+suffix + result[-1] = result[-1]+suffix - return ret + return result def _stripixes(prefix, list, suffix, stripprefix, stripsuffix, env, c=None): """This is a wrapper around _concat() that checks for the existence @@ -272,16 +275,19 @@ def _stripixes(prefix, list, suffix, stripprefix, stripsuffix, env, c=None): else: c = _concat def f(list, sp=stripprefix, ss=stripsuffix): - ret = [] + result = [] for l in list: + if isinstance(l, SCons.Node.FS.File): + result.append(l) + continue if not SCons.Util.is_String(l): l = str(l) if l[:len(sp)] == sp: l = l[len(sp):] if l[-len(ss):] == ss: l = l[:-len(ss)] - ret.append(l) - return ret + result.append(l) + return result return c(prefix, list, suffix, env, f) def _defines(prefix, defs, suffix, env, c=_concat): diff --git a/src/engine/SCons/Environment.py b/src/engine/SCons/Environment.py index aeae272..9e58ff6 100644 --- a/src/engine/SCons/Environment.py +++ b/src/engine/SCons/Environment.py @@ -739,7 +739,7 @@ class Base: """ # the default parse function - def parse_conf(env, output): + def parse_conf(env, output, fs=self.fs): dict = { 'ASFLAGS' : [], 'CCFLAGS' : [], @@ -749,12 +749,15 @@ class Base: 'LIBS' : [], 'LINKFLAGS' : [], } - static_libs = [] params = string.split(output) + append_next_arg_to='' # for multi-word args for arg in params: - if arg[0] != '-': - static_libs.append(arg) + if append_next_arg_to: + dict[append_next_arg_to].append(arg) + append_next_arg_to = '' + elif arg[0] != '-': + dict['LIBS'].append(fs.File(arg)) elif arg[:2] == '-L': dict['LIBPATH'].append(arg[2:]) elif arg[:2] == '-l': @@ -767,13 +770,15 @@ class Base: dict['LINKFLAGS'].append(arg) elif arg[:4] == '-Wp,': dict['CPPFLAGS'].append(arg) + elif arg == '-framework': + dict['LINKFLAGS'].append(arg) + append_next_arg_to='LINKFLAGS' elif arg == '-pthread': dict['CCFLAGS'].append(arg) dict['LINKFLAGS'].append(arg) else: dict['CCFLAGS'].append(arg) apply(env.Append, (), dict) - return static_libs if function is None: function = parse_conf diff --git a/src/engine/SCons/EnvironmentTests.py b/src/engine/SCons/EnvironmentTests.py index de09fd7..4839e2a 100644 --- a/src/engine/SCons/EnvironmentTests.py +++ b/src/engine/SCons/EnvironmentTests.py @@ -1335,19 +1335,18 @@ class EnvironmentTestCase(unittest.TestCase): def read(self): return "-I/usr/include/fum -Ibar -X\n" + \ "-L/usr/fax -Lfoo -lxxx " + \ - "-Wa,-as -Wl,-link -Wp,-cpp abc -pthread" + "-Wa,-as -Wl,-link -Wp,-cpp abc -pthread -framework Carbon" return fake_file() try: os.popen = my_popen - libs = env.ParseConfig("fake $COMMAND") + env.ParseConfig("fake $COMMAND") assert save_command == ['fake command'], save_command - assert libs == ['abc'], libs assert env['ASFLAGS'] == ['assembler', '-Wa,-as'], env['ASFLAGS'] assert env['CPPPATH'] == ['string', '/usr/include/fum', 'bar'], env['CPPPATH'] assert env['CPPFLAGS'] == ['', '-Wp,-cpp'], env['CPPFLAGS'] assert env['LIBPATH'] == ['list', '/usr/fax', 'foo'], env['LIBPATH'] - assert env['LIBS'] == ['xxx'], env['LIBS'] - assert env['LINKFLAGS'] == ['', '-Wl,-link', '-pthread'], env['LINKFLAGS'] + assert env['LIBS'] == ['xxx', env.File('abc')], env['LIBS'] + assert env['LINKFLAGS'] == ['', '-Wl,-link', '-pthread', '-framework', 'Carbon'], env['LINKFLAGS'] assert env['CCFLAGS'] == ['', '-X', '-pthread'], env['CCFLAGS'] finally: os.popen = orig_popen |