You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.5 KiB
Python
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('rU')
|
|
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'
|