From 1263cfcd673dab49552cde529509179f1129ac46 Mon Sep 17 00:00:00 2001 From: Gordon Hecker Date: Tue, 16 Jun 2009 16:44:50 +0200 Subject: [PATCH] plugin support: move build process description from policy module to e2build, allow plugins to register their own build functions Signed-off-by: Gordon Hecker --- local/e2build.lua | 54 ++++++++++++++++++++++++++++++++++++++++++----- local/policy.lua | 23 -------------------- 2 files changed, 49 insertions(+), 28 deletions(-) diff --git a/local/e2build.lua b/local/e2build.lua index 0707586..1da91f9 100644 --- a/local/e2build.lua +++ b/local/e2build.lua @@ -809,15 +809,14 @@ end function e2build.build_result(info, result, return_flags) e2lib.logf(3, "building result: %s", result) local res = info.results[result] - for _,fname in ipairs(res.build_mode.build_process) do - local f = e2build[fname] - --e2lib.logf(3, "running function: e2build.%s", fname) + for _,f in ipairs(e2build.build_process) do + --e2lib.logf(3, "running function: e2build.%s", f.name) local t1 = os.time() local flags = {} - local rc, re = f(info, result, flags) + local rc, re = f.func(info, result, flags) local t2 = os.time() local deltat = os.difftime(t2, t1) - e2lib.logf(3, "timing: step: %s [%s] %d", fname, result, deltat) + e2lib.logf(3, "timing: step: %s [%s] %d", f.name, result, deltat) if not rc then -- do not insert an error message from this layer. return false, re @@ -1195,3 +1194,48 @@ function e2build.collect_project(info, r, return_flags) return true, nil end +--- register a function to extend the build process +-- @param info +-- @param name string: build function name (used for logging) +-- @param func function: build function +-- @param pos string: build function name. The new function will run before +-- the named function +-- @return bool +-- @return an error object on failure +function e2build.register_build_function(info, name, func, pos) + local e = new_error("register build function") + local ipos = nil + for i=1, #e2build.build_process, 1 do + if e2build.build_process[i].name == pos then + ipos = i + break + end + end + if not ipos then + return false, e:append("Invalid position.") + end + local tab = { + name = name, + func = func, + } + table.insert(e2build.build_process, ipos, tab) + return true, nil +end + +e2build.build_process = { + { prio=0100, name="build_config", func=e2build.build_config }, + { prio=0200, name="result_available", func=e2build.result_available }, + { prio=0300, name="chroot_lock", func=e2build.chroot_lock }, + { prio=0400, name="chroot_cleanup_if_exists", + func=e2build.chroot_cleanup_if_exists }, + { prio=0500, name="setup_chroot", func=e2build.setup_chroot }, + { prio=0600, name="sources", func=e2build.sources }, + { prio=0700, name="collect_project", func=e2build.collect_project }, + { prio=0800, name="fix_permissions", func=e2build.fix_permissions}, + { prio=0900, name="playground", func=e2build.playground }, + { prio=1000, name="runbuild", func=e2build.runbuild }, + { prio=1100, name="store_result", func=e2build.store_result }, + { prio=1200, name="linklast", func=e2build.linklast }, + { prio=1300, name="chroot_cleanup", func=e2build.chroot_cleanup }, + { prio=1400, name="chroot_unlock", func=e2build.chroot_unlock }, +} diff --git a/local/policy.lua b/local/policy.lua index d264b47..0e8a715 100644 --- a/local/policy.lua +++ b/local/policy.lua @@ -229,24 +229,6 @@ function handle_commandline_options(opts, use_default) return mode end -local default_build_process = { - "build_config", - "result_available", - "chroot_lock", - "chroot_cleanup_if_exists", - "setup_chroot", - "sources", - "collect_project", - -- XXX to be done: e2build.playground: stop if playgrund requested - "fix_permissions", - "playground", - "runbuild", - "store_result", - "linklast", - "chroot_cleanup", - "chroot_unlock", -} - policy = {} policy.init = init policy.register_commandline_options = register_commandline_options @@ -272,7 +254,6 @@ policy.default_build_mode["lazytag"] = { dep_set = policy.dep_set_buildid, buildid = policy.buildid_buildid, storage = policy.storage_default, - build_process = default_build_process } policy.default_build_mode["tag"] = { @@ -280,7 +261,6 @@ policy.default_build_mode["tag"] = { dep_set = policy.dep_set_buildid, buildid = policy.buildid_buildid, storage = policy.storage_default, - build_process = default_build_process } policy.default_build_mode["release"] = { @@ -288,7 +268,6 @@ policy.default_build_mode["release"] = { dep_set = policy.dep_set_buildid, buildid = policy.buildid_buildid, storage = policy.storage_release, - build_process = default_build_process } policy.default_build_mode["branch"] = { @@ -296,7 +275,6 @@ policy.default_build_mode["branch"] = { dep_set = policy.dep_set_buildid, buildid = policy.buildid_buildid, storage = policy.storage_default, - build_process = default_build_process } policy.default_build_mode["working-copy"] = { @@ -304,6 +282,5 @@ policy.default_build_mode["working-copy"] = { dep_set = policy.dep_set_last, buildid = policy.buildid_scratch, storage = policy.storage_local, - build_process = default_build_process } -- 2.39.5