From 77b95624ad84eb96f201fbbba2e6affdeaf5af07 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jo=C3=A3o=20Henrique=20Ferreira=20de=20Freitas?= Date: Wed, 14 May 2014 22:37:28 -0300 Subject: [PATCH] wic: add support to look in all layers and get plugins MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Plugins are looked in 'scripts/lib/mic/plugins/[type]/' directory on all BBLAYERS variable returned by bitbake environment. If found, it will be load at runtime. The user could create your own plugin and keep it inside its layers. For now the path must be /scripts/lib/mic/plugins/[type]/. Where 'type' could be 'imager' or 'source'. (From OE-Core rev: bb6f5d7de1c7ce2680874a74949903db0f5bb91a) Signed-off-by: João Henrique Ferreira de Freitas Signed-off-by: Saul Wold Signed-off-by: Richard Purdie --- scripts/lib/mic/plugin.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/scripts/lib/mic/plugin.py b/scripts/lib/mic/plugin.py index df03c15..bec33d6 100644 --- a/scripts/lib/mic/plugin.py +++ b/scripts/lib/mic/plugin.py @@ -20,12 +20,14 @@ import os, sys from mic import msger from mic import pluginbase from mic.utils import errors - +from mic.utils.oe.misc import * __ALL__ = ['PluginMgr', 'pluginmgr'] PLUGIN_TYPES = ["imager", "source"] # TODO "hook" +PLUGIN_DIR = "/lib/mic/plugins" # relative to scripts +SCRIPTS_PLUGIN_DIR = "scripts" + PLUGIN_DIR class PluginMgr(object): plugin_dirs = {} @@ -42,8 +44,23 @@ class PluginMgr(object): mic_path = os.path.dirname(__file__) eos = mic_path.find('scripts') + len('scripts') scripts_path = mic_path[:eos] + self.scripts_path = scripts_path + self.plugin_dir = scripts_path + PLUGIN_DIR + self.layers_path = None + + def _build_plugin_dir_list(self, dl, ptype): + if self.layers_path is None: + self.layers_path = get_bitbake_var("BBLAYERS") + layer_dirs = [] + + for layer_path in self.layers_path.split(): + path = os.path.join(layer_path, SCRIPTS_PLUGIN_DIR, ptype) + layer_dirs.append(path) - self.plugin_dir = scripts_path + "/lib/mic/plugins" + path = os.path.join(dl, ptype) + layer_dirs.append(path) + + return layer_dirs def append_dirs(self, dirs): for path in dirs: @@ -56,7 +73,7 @@ class PluginMgr(object): path = os.path.abspath(os.path.expanduser(path)) if not os.path.isdir(path): - msger.warning("Plugin dir is not a directory or does not exist: %s"\ + msger.debug("Plugin dir is not a directory or does not exist: %s"\ % path) return @@ -93,8 +110,9 @@ class PluginMgr(object): if ptype not in PLUGIN_TYPES: raise errors.CreatorError('%s is not valid plugin type' % ptype) - self._add_plugindir(os.path.join(self.plugin_dir, ptype)) - self._load_all() + plugins_dir = self._build_plugin_dir_list(self.plugin_dir, ptype) + + self.append_dirs(plugins_dir) return pluginbase.get_plugins(ptype) -- 2.7.4