diff --git a/tests/post/wscript b/tests/post/wscript new file mode 100644 index 00000000..2978a24e --- /dev/null +++ b/tests/post/wscript @@ -0,0 +1,66 @@ +#! /usr/bin/env python +# encoding: utf-8 +# Thomas Nagy, 2017 (ita) + +top = '.' +out = 'build' + +import inspect +from waflib import Utils, Logs, TaskGen + +@TaskGen.taskgen_method +def log(self): + fname = inspect.stack()[1][3] + try: + self.called.append(fname) + except AttributeError: + self.called = [fname] + +@TaskGen.taskgen_method +def check(self): + self.post() + result = ''.join(self.called) + if result == self.expected: + color = 'GREEN' + else: + color = 'RED' + result = 'got %r but expected %r' % (result, self.expected) + self.bld.failure = 1 + Logs.pprint(color, result) + +@TaskGen.feature('test1') +@TaskGen.after('d') +def a(self): + self.log() +@TaskGen.feature('test1') +@TaskGen.after('c') +def b(self): + self.log() +@TaskGen.feature('test1') +def c(self): + self.log() +@TaskGen.feature('test1') +def d(self): + self.log() +@TaskGen.feature('test1') +@TaskGen.after('f') +def e(self): + self.log() +@TaskGen.feature('test1') +def f(self): + self.log() + + +def configure(conf): + pass + +def build(bld): + + bld.failure = 0 + def stop_status(bld): + if bld.failure: + bld.fatal('One or several test failed, check the outputs above') + bld.add_post_fun(stop_status) + + bld(features='test1', expected='cbdafe').check() + diff --git a/waflib/TaskGen.py b/waflib/TaskGen.py index bbbe3e0a..b6074eb9 100644 --- a/waflib/TaskGen.py +++ b/waflib/TaskGen.py @@ -190,7 +190,7 @@ class task_gen(object): else: tmp.append(a) - tmp.sort() + tmp.sort(reverse=True) # topological sort out = [] @@ -210,13 +210,13 @@ class task_gen(object): break else: tmp.append(x) + tmp.sort(reverse=True) if prec: buf = ['Cycle detected in the method execution:'] for k, v in prec.items(): buf.append('- %s after %s' % (k, [x for x in v if x in prec])) raise Errors.WafError('\n'.join(buf)) - out.reverse() self.meths = out # then we run the methods in order @@ -430,7 +430,7 @@ def before_method(*k): def deco(func): setattr(task_gen, func.__name__, func) for fun_name in k: - task_gen.prec[fun_name].add(func.__name__) + task_gen.prec[func.__name__].add(fun_name) return func return deco before = before_method @@ -457,7 +457,7 @@ def after_method(*k): def deco(func): setattr(task_gen, func.__name__, func) for fun_name in k: - task_gen.prec[func.__name__].add(fun_name) + task_gen.prec[fun_name].add(func.__name__) return func return deco after = after_method