]> git.e2factory.org Git - e2factory.git/commitdiff
e2build: add methods to add build steps
authorTobias Ulmer <tu@emlix.com>
Thu, 22 Sep 2016 13:55:48 +0000 (15:55 +0200)
committerTobias Ulmer <tu@emlix.com>
Wed, 16 Nov 2016 14:41:18 +0000 (15:41 +0100)
Signed-off-by: Tobias Ulmer <tu@emlix.com>
local/e2build.lua

index 4eca5b33bc5b5460aaa6cbc2ef71f8934bd295ac..db5547d3a1df80eb3c8b0135a69955a8f403f152 100644 (file)
@@ -49,33 +49,32 @@ local tools = require("tools")
 e2build.build_process_class = class("build_process_class")
 
 function e2build.build_process_class:initialize()
-    self._modes = {
-        build = {
-            { name="result_available", func=self._result_available },
-            { name="chroot_lock", func=self._chroot_lock },
-            { name="chroot_cleanup_if_exists", func=self._chroot_cleanup_if_exists },
-            { name="setup_chroot", func=self._setup_chroot },
-            { name="install_directory_structure", func=self._install_directory_structure },
-            { name="install_build_script", func=self._install_build_script },
-            { name="install_env", func=self._install_env },
-            { name="install_init_files", func=self._install_init_files },
-            { name="install_build_driver", func=self._install_build_driver },
-            { name="install_build_time_dependencies", func=self._install_build_time_dependencies },
-            { name="install_sources", func=self._install_sources },
-            { name="fix_permissions", func=self._fix_permissions},
-            { name="build_playground", func=self._build_playground },
-            { name="runbuild", func=self._runbuild },
-            { name="store_result", func=self._store_result },
-            { name="linklast", func=self._linklast },
-            { name="chroot_cleanup", func=self._chroot_cleanup },
-            { name="chroot_unlock", func=self._chroot_unlock },
-        },
-
-        playground = {
-            { name="chroot_exists", func=self._chroot_exists },
-            { name="enter_playground", func=self._enter_playground },
-        }
-    }
+    self._modes = {}
+
+    self:add_step("build", "result_available", self._result_available)
+    self:add_step("build", "chroot_lock", self._chroot_lock)
+    self:add_step("build", "chroot_cleanup_if_exists",
+        self._chroot_cleanup_if_exists)
+    self:add_step("build", "setup_chroot", self._setup_chroot)
+    self:add_step("build", "install_directory_structure",
+        self._install_directory_structure)
+    self:add_step("build", "install_build_script", self._install_build_script)
+    self:add_step("build", "install_env", self._install_env)
+    self:add_step("build", "install_init_files", self._install_init_files)
+    self:add_step("build", "install_build_driver", self._install_build_driver)
+    self:add_step("build", "install_build_time_dependencies",
+        self._install_build_time_dependencies)
+    self:add_step("build", "install_sources", self._install_sources)
+    self:add_step("build", "fix_permissions", self._fix_permissions)
+    self:add_step("build", "build_playground", self._build_playground)
+    self:add_step("build", "runbuild", self._runbuild)
+    self:add_step("build", "store_result", self._store_result)
+    self:add_step("build", "linklast", self._linklast)
+    self:add_step("build", "chroot_cleanup", self._chroot_cleanup)
+    self:add_step("build", "chroot_unlock", self._chroot_unlock)
+
+    self:add_step("playground", "chroot_exists", self._chroot_exists)
+    self:add_step("playground", "enter_playground", self._enter_playground)
 end
 
 function e2build.build_process_class:build(res)
@@ -114,6 +113,80 @@ function e2build.build_process_class:build(res)
     return true
 end
 
+--- Add a build step
+-- @param mode Build mode
+-- @param name Name of build step
+-- @param func Method of build_process_class implementing the build step.
+function e2build.build_process_class:add_step(mode, name, func)
+    assertIsStringN(mode)
+    assertIsStringN(name)
+    assertIsFunction(func)
+
+    self._modes = self._modes or {}
+    self._modes[mode] = self._modes[mode] or {}
+    table.insert(self._modes[mode], { name = name, func = func })
+end
+
+--- Add build step before specified.
+-- @param mode Build mode
+-- @param before Add build step before this one
+-- @param name Name of build step
+-- @param func Method of build_process_class implementing the build step.
+function e2build.build_process_class:add_step_before(mode, before, name, func)
+    assertIsStringN(mode)
+    assertIsStringN(before)
+    assertIsStringN(name)
+    assertIsFunction(func)
+    assertIsTable(self._modes)
+    assertIsTable(self._modes[mode])
+
+    local pos = false
+
+    for i = 1, #self._modes[mode] do
+        local step = self._modes[mode][i]
+        if step.name == before then
+            pos = i
+            break
+        end
+    end
+
+    if not pos then
+        error(err.new("add_step_before: no step called %s in mode %s", after, mode))
+    end
+
+    table.insert(self._modes[mode], pos, { name = name, func = func })
+end
+
+--- Add build step after specified.
+-- @param mode Build mode
+-- @param before Add build step after this one
+-- @param name Name of build step
+-- @param func Method of build_process_class implementing the build step.
+function e2build.build_process_class:add_step_after(mode, after, name, func)
+    assertIsStringN(mode)
+    assertIsStringN(after)
+    assertIsStringN(name)
+    assertIsFunction(func)
+    assertIsTable(self._modes)
+    assertIsTable(self._modes[mode])
+
+    local pos = false
+
+    for i = 1, #self._modes[mode] do
+        local step = self._modes[mode][i]
+        if step.name == after then
+            pos = i
+            break
+        end
+    end
+
+    if not pos then
+        error(err.new("add_step_after: no step called %s in mode %s", after, mode))
+    end
+
+    table.insert(self._modes[mode], pos + 1, { name = name, func = func })
+end
+
 function e2build.build_process_class:_next_step(mode)
     assertIsStringN(mode)
     assertIsTable(self._modes[mode])