import source_list
+# the get_implicit_deps() method changed between 2.4 and 2.5: now it expects
+# a callable that takes a scanner as argument and returns a path, rather than
+# a path directly. We want to support both, so we need to detect the SCons version,
+# for which no API is provided by SCons 8-P
+
+# Scons version string has consistently been in this format:
+# MajorVersion.MinorVersion.Patch[.alpha/beta.yyyymmdd]
+# so this formula should cover all versions regardless of type
+# stable, alpha or beta.
+# For simplicity alpha and beta flags are removed.
+scons_version = tuple(map(int, SCons.__version__.split('.')[:3]))
+
def quietCommandLines(env):
# Quiet command lines
# See also http://www.scons.org/wiki/HidingCommandLinesInOutput
# 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():
+ for name, mod in finder.modules.items():
if mod.__file__ is None:
continue
assert os.path.exists(mod.__file__)
# Explicitly mark that the generated code depends on the generator,
# and on implicitly imported python modules
- path = (script_src.get_dir(),)
+ path = (script_src.get_dir(),) if scons_version < (2, 5, 0) else lambda x: script_src
deps = [script_src]
deps += script_src.get_implicit_deps(env, python_scanner, path)
env.Depends(code, deps)
except OSError:
return
prefix = name + '_'
- for flag_name, flag_value in flags.iteritems():
+ for flag_name, flag_value in flags.items():
assert '_' not in flag_name
env[prefix + flag_name] = flag_value
raise Exception('Attempt to use unavailable module %s' % name)
flags = {}
- for flag_name, flag_value in env.Dictionary().iteritems():
+ for flag_name, flag_value in env.Dictionary().items():
if flag_name.startswith(prefix):
flag_name = flag_name[len(prefix):]
if '_' not in flag_name:
sym_table = parser.parse(src.abspath)
if names:
- if isinstance(names, basestring):
- names = [names]
+ if sys.version_info[0] >= 3:
+ if isinstance(names, str):
+ names = [names]
+ else:
+ if isinstance(names, basestring):
+ names = [names]
symbols = names
else:
- symbols = sym_table.keys()
+ symbols = list(sym_table.keys())
# convert the symbol table to source lists
src_lists = {}
# cause duplicate actions.
f = f[len(cur_srcdir + '/'):]
# do not include any headers
- if f.endswith('.h'):
+ if f.endswith(tuple(['.h','.hpp','.inl'])):
continue
srcs.append(f)