scons: Fix the Python dependency scanner.
authorJose Fonseca <jfonseca@vmware.com>
Fri, 14 Oct 2016 15:51:56 +0000 (16:51 +0100)
committerJose Fonseca <jfonseca@vmware.com>
Fri, 14 Oct 2016 15:52:13 +0000 (16:52 +0100)
modulefinder wasn't searching for dependencies in the script dir.

It's not capable of detecting the sys.path manipulations scripts do
internally neither.

This change fixes the first issue, and hacks around the second.

Honestly, I've come to the conclusion that automatic Python dependency it will always be
too brittle.   I think we should start manually typing the dependencies
like we do in automake.  At very least it will enable any person to
eyeball and spot/fix missing dependencies, without dig into SCons internals.

scons/custom.py

index e66f49696239d357d095b2cfc78c2481b8c3c3e8..bdb4039b8afbf0a2cea1a856c4977082394862d0 100644 (file)
@@ -103,8 +103,14 @@ def python_scan(node, env, path):
     # http://www.scons.org/doc/0.98.5/HTML/scons-user/c2781.html#AEN2789
     # https://docs.python.org/2/library/modulefinder.html
     contents = node.get_contents()
-    source_dir = node.get_dir()
-    finder = modulefinder.ModuleFinder()
+
+    # Tell ModuleFinder to search dependencies in the script dir, and the glapi
+    # dirs
+    source_dir = node.get_dir().abspath
+    GLAPI = env.Dir('#src/mapi/glapi/gen').abspath
+    path = [source_dir, GLAPI] + sys.path
+
+    finder = modulefinder.ModuleFinder(path=path)
     finder.run_script(node.abspath)
     results = []
     for name, mod in finder.modules.iteritems():