Commit c521f2d7 authored by Jose Fonseca's avatar Jose Fonseca

scons: Improve Python module dependency discovery.

Several NIR scripts were using `from ... import ...` syntax, which wasn't

Using Python standard libary's modulefinder solves the problem with less
effort and hacks.
Reviewed-by: Brian Paul's avatarBrian Paul <>
parent 172bfdaa
......@@ -30,11 +30,10 @@ Custom builders and methods.
import os
import os.path
import re
import sys
import subprocess
import modulefinder
import SCons.Action
import SCons.Builder
......@@ -93,27 +92,19 @@ def createConvenienceLibBuilder(env):
return convenience_lib
# TODO: handle import statements with multiple modules
# TODO: handle from import statements
import_re = re.compile(r'^\s*import\s+(\S+)\s*$', re.M)
def python_scan(node, env, path):
contents = node.get_contents()
source_dir = node.get_dir()
imports = import_re.findall(contents)
finder = modulefinder.ModuleFinder()
results = []
for imp in imports:
for dir in path:
file = os.path.join(str(dir), imp.replace('.', os.sep) + '.py')
if os.path.exists(file):
file = os.path.join(str(dir), imp.replace('.', os.sep), '')
if os.path.exists(file):
#print node, map(str, results)
for name, mod in finder.modules.iteritems():
if mod.__file__ is None:
assert os.path.exists(mod.__file__)
return results
python_scanner = SCons.Scanner.Scanner(function = python_scan, skeys = ['.py'])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment