scons: MacOSX build fixes.
[mesa.git] / scons / custom.py
index df7ac93bb006492e401f8e66332b4a7b462e31c3..08073162e74147b3383636a7fb39ebb605872e89 100644 (file)
@@ -42,6 +42,7 @@ import SCons.Scanner
 
 import fixes
 
+import source_list
 
 def quietCommandLines(env):
     # Quiet command lines
@@ -207,12 +208,10 @@ def pkg_use_modules(env, names):
         prefix = name + '_'
 
         if not 'HAVE_' + name in env:
-            print 'Attempt to use unknown module %s' % name
-            env.Exit(1)
+            raise Exception('Attempt to use unknown module %s' % name)
 
         if not env['HAVE_' + name]:
-            print 'Attempt to use unavailable module %s' % name
-            env.Exit(1)
+            raise Exception('Attempt to use unavailable module %s' % name)
 
         flags = {}
         for flag_name, flag_value in env.Dictionary().iteritems():
@@ -229,6 +228,40 @@ def createPkgConfigMethods(env):
     env.AddMethod(pkg_use_modules, 'PkgUseModules')
 
 
+def parse_source_list(env, filename, names=None):
+    # parse the source list file
+    parser = source_list.SourceListParser()
+    src = env.File(filename).srcnode()
+    sym_table = parser.parse(src.abspath)
+
+    if names:
+        if isinstance(names, basestring):
+            names = [names]
+
+        symbols = names
+    else:
+        symbols = sym_table.keys()
+
+    # convert the symbol table to source lists
+    src_lists = {}
+    for sym in symbols:
+        val = sym_table[sym]
+        src_lists[sym] = [f for f in val.split(' ') if f]
+
+    # if names are given, concatenate the lists
+    if names:
+        srcs = []
+        for name in names:
+            srcs.extend(src_lists[name])
+
+        return srcs
+    else:
+        return src_lists
+
+def createParseSourceListMethod(env):
+    env.AddMethod(parse_source_list, 'ParseSourceList')
+
+
 def generate(env):
     """Common environment generation code"""
 
@@ -240,6 +273,7 @@ def generate(env):
     createConvenienceLibBuilder(env)
     createCodeGenerateMethod(env)
     createPkgConfigMethods(env)
+    createParseSourceListMethod(env)
 
     # for debugging
     #print env.Dump()