diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/lib/mic/plugin.py | 28 |
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) |