summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2004-09-01 00:03:16 (GMT)
committerSteven Knight <knight@baldmt.com>2004-09-01 00:03:16 (GMT)
commita2ba55e47988f6d7e602f558e08feef219be934e (patch)
treec1504d1d0c2dfd118c24c1920e28a037c932ed02 /src/engine/SCons
parente966ff8d4b3581dc6194adfb70718445a0bbb41b (diff)
downloadSCons-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.py24
-rw-r--r--src/engine/SCons/Environment.py15
-rw-r--r--src/engine/SCons/EnvironmentTests.py9
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