summaryrefslogtreecommitdiff
path: root/scripts/lib/mic
diff options
context:
space:
mode:
authorJoão Henrique Ferreira de Freitas <joaohf@gmail.com>2014-05-14 22:37:28 -0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-05-21 09:08:11 +0100
commitbb6f5d7de1c7ce2680874a74949903db0f5bb91a (patch)
tree0eaf4d709a118af48de775aed2dfa5868fe0013d /scripts/lib/mic
parent1f3e312211f277a1befd707a59a0c0a9bf6cbcbc (diff)
downloadopenembedded-core-bb6f5d7de1c7ce2680874a74949903db0f5bb91a.tar.gz
openembedded-core-bb6f5d7de1c7ce2680874a74949903db0f5bb91a.tar.bz2
openembedded-core-bb6f5d7de1c7ce2680874a74949903db0f5bb91a.zip
wic: add support to look in all layers and get plugins
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 <layer-dir>/scripts/lib/mic/plugins/[type]/. Where 'type' could be 'imager' or 'source'. Signed-off-by: João Henrique Ferreira de Freitas <joaohf@gmail.com> Signed-off-by: Saul Wold <sgw@linux.intel.com>
Diffstat (limited to 'scripts/lib/mic')
-rw-r--r--scripts/lib/mic/plugin.py28
1 files changed, 23 insertions, 5 deletions
diff --git a/scripts/lib/mic/plugin.py b/scripts/lib/mic/plugin.py
index df03c15081..bec33d6164 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)