def try_task_maker(conf, task_maker, name, body, headers, env=None): if headers: head = "\n".join(["#include <%s>" % h for h in headers]) else: head = "" code = "\n".join([c for c in [head, body]]) sources = [create_file(conf, code, name, ".c")] task_gen = CompiledTaskGen("conf", conf, sources, name) task_gen.env.update(copy.deepcopy(conf.env)) task_gen.env = _merge_env(task_gen.env, env) task_gen.env.prepend("LIBDIR", conf.path.declare(".").abspath()) tasks = task_maker(task_gen, name) conf.last_task = tasks[-1] for t in tasks: t.disable_output = True t.log = conf.log succeed = False explanation = None try: try: run_tasks(conf, tasks) succeed = True except TaskRunFailure: e = get_exception() explanation = str(e) #raise finally: write_log(conf, conf.log, tasks, code, succeed, explanation) return succeed
def _try_task_maker(self, task_maker, name, body): conf = self.ctx code = body sources = [create_file(conf, code, name, ".f")] task_gen = CompiledTaskGen("conf", conf, sources, name) task_gen.env.update(copy.deepcopy(conf.env)) tasks = task_maker(task_gen, name) self.ctx.last_task = tasks[-1] for t in tasks: t.disable_output = True t.log = conf.log succeed = False explanation = None try: run_tasks(conf, tasks) succeed = True except TaskRunFailure: e = get_exception() explanation = str(e) write_log(conf, conf.log, tasks, code, succeed, explanation) return succeed
def try_task_maker(conf, task_maker, name, body, headers, env=None): if headers: head = "\n".join(["#include <%s>" % h for h in headers]) else: head = "" code = "\n".join([c for c in [head, body]]) sources = [create_file(conf, code, name, ".c")] task_gen = CompiledTaskGen("conf", conf, sources, name) task_gen.env.update(copy.deepcopy(conf.env)) task_gen.env = _merge_env(task_gen.env, env) task_gen.env.prepend("LIBDIR", os.curdir) tasks = task_maker(task_gen, name) conf.last_task = tasks[-1] for t in tasks: t.disable_output = True t.log = conf.log succeed = False explanation = None try: run_tasks(conf, tasks) succeed = True except TaskRunFailure, e: explanation = str(e)
def _create_compile_conf_taskgen(conf, name, body, headers, extension=".c"): if headers: head = "\n".join(["#include <%s>" % h for h in headers]) else: head = "" code = "\n".join([c for c in [head, body]]) sources = [create_file(conf, code, name, extension)] task_gen = CompiledTaskGen("conf", conf, sources, name) task_gen.env.update(copy.deepcopy(conf.env)) apply_cpppath(task_gen) tasks = task_gen.process() conf.last_task = tasks[-1] for t in tasks: t.disable_output = True t.log = conf.log succeed = False explanation = None try: run_tasks(conf, tasks) succeed = True except TaskRunFailure, e: explanation = unicode(e).encode("utf-8")
def _create_binary_conf_taskgen(conf, name, body, builder, headers=None, extension=".c"): if headers is not None: head = "\n".join(["#include <%s>" % h for h in headers]) else: head = "" code = "\n".join([c for c in [head, body]]) sources = [create_file(conf, code, name, extension)] task_gen = CompiledTaskGen("conf", conf, sources, name) task_gen.env.update(copy.deepcopy(conf.env)) task_gen.env["INCPATH"] = "" apply_libs(task_gen) apply_libdir(task_gen) tasks = task_gen.process() tasks.extend(builder(task_gen, name)) for t in tasks: t.disable_output = True t.log = conf.log succeed = False explanation = None try: run_tasks(conf, tasks) succeed = True except TaskRunFailure, e: msg = str(e) explanation = unicode(msg).encode("utf-8")
def create_compile_conf_taskgen(conf, name, body, headers, msg, extension=".c"): if headers: head = "\n".join(["#include <%s>" % h for h in headers]) else: head = "" code = "\n".join([c for c in [head, body]]) sources = [create_file(conf, code, name, extension)] task_gen = CompiledTaskGen("conf", sources, name) task_gen.env.update(copy.deepcopy(conf.env)) task_gen.env["INCPATH"] = "" tasks = create_tasks(task_gen, sources) for t in tasks: t.disable_output = True sys.stderr.write(msg + "... ") succeed = False explanation = None try: run_tasks(conf, tasks) succeed = True sys.stderr.write("yes\n") except TaskRunFailure, e: sys.stderr.write("no\n") explanation = str(e)
def _create_fbinary_conf_taskgen(conf, name, body, builder): # FIXME: refactor commonalities between configuration taskgens code = body sources = [create_file(conf, code, name, ".f")] task_gen = CompiledTaskGen("conf", conf, sources, name) task_gen.env.update(copy.deepcopy(conf.env)) tasks = task_gen.process() link_task = builder(task_gen, name) t = link_task[0] exec_command = t.exec_command if sys.version_info >= (3,): t.exec_command = types.MethodType(logged_exec, t) else: t.exec_command = types.MethodType(logged_exec, t, t.__class__) tasks.extend(link_task) conf.last_task = tasks[-1] for t in tasks: t.disable_output = True t.log = conf.log succeed = False explanation = None try: run_tasks(conf, tasks) succeed = True except TaskRunFailure, e: explanation = str(e)
def ccompile(conf, sources): conf.tasks = [] # XXX: hack builder = conf.builders["ctasks"] builder.ccompile("yomama", sources, conf.env) # XXX: accessing tasks like this is ugly - the whole logging thing # needs more thinking for t in builder.ctx.tasks: t.disable_output = True t.log = conf.log succeed = False explanation = None try: run_tasks(conf, builder.ctx.tasks) succeed = True except TaskRunFailure, e: msg = str(e) explanation = unicode(msg).encode("utf-8")
import yaku.task_manager from yaku.task_manager import get_extension_hook, set_file_hook from yaku.context import get_cfg, get_bld from yaku.scheduler import run_tasks def file_hook(self, node): print("Yo mama", node.name) return get_extension_hook(".c")(self, node) def configure(ctx): ctx.use_tools(["ctasks"]) set_file_hook(ctx, "src/fubar.c", file_hook) def build(ctx): builder = ctx.builders["ctasks"].program builder("src/main", sources=["src/main.c", "src/fubar.c"]) if __name__ == "__main__": cfg = get_cfg() configure(cfg) cfg.store() bld = get_bld() build(bld) run_tasks(bld) bld.store()
import \ get_bld, get_cfg from yaku.conftests.fconftests \ import \ check_fcompiler, check_fortran_verbose_flag, \ check_fortran_runtime_flags, check_fortran_dummy_main, \ check_fortran_mangling def configure(ctx): ctx.use_tools(["fortran", "ctasks"]) check_fcompiler(ctx) check_fortran_verbose_flag(ctx) check_fortran_runtime_flags(ctx) check_fortran_dummy_main(ctx) check_fortran_mangling(ctx) def build(ctx): builder = ctx.builders["fortran"] #builder.program("fbar", ["src/bar.f"]) if __name__ == "__main__": ctx = get_cfg() configure(ctx) ctx.store() ctx = get_bld() build(ctx) run_tasks(ctx) ctx.store()
import \ run_tasks def configure(ctx): # The tool ctask works as follows: # - When a tool is *loaded* (load_tool), get its configure function (dummy # is setup if no configure is found) # - When a tool is *used* (use_tool), run its configure function # - given a list of candidates, run the detect function for every candidate # until detect returns True # - if one candidate found, record its name and run its setup function # - if none found, fails tools = ctx.use_tools(["ctasks"]) def build(ctx): builder = ctx.builders["ctasks"] builder.program("main", [os.path.join("src", "main.c")]) if __name__ == "__main__": ctx = get_cfg() configure(ctx) ctx.store() ctx = get_bld() build(ctx) run_tasks(ctx) ctx.store()
def create_sources(ctx, name, sources): tasks = create_tasks(ctx, sources) run_tasks(ctx, tasks)