[Mesa-dev] [PATCH] scons: Improve Python module dependency discovery.
Brian Paul
brianp at vmware.com
Fri May 6 16:18:57 UTC 2016
On 05/06/2016 10:04 AM, Jose Fonseca wrote:
> Several NIR scripts were using `from ... import ...` syntax, which wasn't
> supported.
>
> Using Python standard libary's modulefinder solves the problem with less
> effort and hacks.
> ---
> scons/custom.py | 27 +++++++++------------------
> 1 file changed, 9 insertions(+), 18 deletions(-)
>
> diff --git a/scons/custom.py b/scons/custom.py
> index 043793b..ff7a7a9 100644
> --- a/scons/custom.py
> +++ b/scons/custom.py
> @@ -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):
> # 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()
> - imports = import_re.findall(contents)
> + finder = modulefinder.ModuleFinder()
> + finder.run_script(node.abspath)
> 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):
> - results.append(env.File(file))
> - break
> - file = os.path.join(str(dir), imp.replace('.', os.sep), '__init__.py')
> - if os.path.exists(file):
> - results.append(env.File(file))
> - break
> - #print node, map(str, results)
> + for name, mod in finder.modules.iteritems():
> + if mod.__file__ is None:
> + continue
> + assert os.path.exists(mod.__file__)
> + results.append(env.File(mod.__file__))
> return results
>
> python_scanner = SCons.Scanner.Scanner(function = python_scan, skeys = ['.py'])
>
Looks OK to me.
Reviewed-by: Brian Paul <brianp at vmware.com>
More information about the mesa-dev
mailing list