waf/build_system_kit/extpy/extpy.py

55 lines
1.5 KiB
Python

#! /usr/bin/env python
# encoding: utf-8
import os
from waflib import Errors, Utils
from waflib import Context as mod
class Context(mod.Context):
cmd = 'all'
def recurse(self, dirs, name=None, mandatory=True, once=True):
try:
cache = self.recurse_cache
except:
cache = self.recurse_cache = {}
for d in Utils.to_list(dirs):
if not os.path.isabs(d):
# absolute paths only
d = os.path.join(self.path.abspath(), d)
WSCRIPT = os.path.join(d, 'wscript.py')
WSCRIPT_FUN = 'wscript_' + (name or self.fun) + '.py'
node = self.root.find_node(WSCRIPT_FUN)
if node and (not once or node not in cache):
cache[node] = True
self.pre_recurse(node)
try:
function_code = node.read('r')
exec(compile(function_code, node.abspath(), 'exec'), self.exec_dict)
finally:
self.post_recurse(node)
elif not node:
node = self.root.find_node(WSCRIPT)
if node and (not once or node not in cache):
cache[node] = True
self.pre_recurse(node)
try:
wscript_module = mod.load_module(node.abspath())
user_function = getattr(wscript_module, (name or self.fun), None)
if not user_function:
if not mandatory:
continue
raise Errors.WafError('No function %s defined in %s' % (name or self.fun, node.abspath()))
user_function(self)
finally:
self.post_recurse(node)
elif not node:
if not mandatory:
continue
raise Errors.WafError('No wscript file in directory %s' % d)
mod.Context = Context
mod.WSCRIPT_FILE = 'wscript.py'