nv30: Silence pipe_cap warnings
[mesa.git] / scons / custom.py
index df7ac93bb006492e401f8e66332b4a7b462e31c3..cc953bd999a0167aa728436f0b4d4b71670f8e34 100644 (file)
@@ -42,6 +42,7 @@ import SCons.Scanner
 
 import fixes
 
+import source_list
 
 def quietCommandLines(env):
     # Quiet command lines
@@ -173,6 +174,9 @@ def _pkg_check_modules(env, name, modules):
     if subprocess.call(["pkg-config", "--exists", ' '.join(modules)]) != 0:
         return
 
+    # Strip version expressions from modules
+    modules = [module.split(' ', 1)[0] for module in modules]
+
     # Other flags may affect the compilation of unrelated targets, so store
     # them with a prefix, (e.g., XXX_CFLAGS, XXX_LIBS, etc)
     try:
@@ -188,7 +192,7 @@ def _pkg_check_modules(env, name, modules):
 
 def pkg_check_modules(env, name, modules):
 
-    sys.stdout.write('Checking for %s...' % name)
+    sys.stdout.write('Checking for %s (%s)...' % (name, ' '.join(modules)))
     _pkg_check_modules(env, name, modules)
     result = env['HAVE_' + name]
     sys.stdout.write(' %s\n' % ['no', 'yes'][int(bool(result))])
@@ -207,12 +211,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 +231,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 +276,7 @@ def generate(env):
     createConvenienceLibBuilder(env)
     createCodeGenerateMethod(env)
     createPkgConfigMethods(env)
+    createParseSourceListMethod(env)
 
     # for debugging
     #print env.Dump()