PluginConcept » History » Version 9

Version 8 (J. Moringen, 06/27/2011 05:13 AM) → Version 9/10 (J. Moringen, 09/15/2011 05:28 PM)

h1. Plugins

{{>toc}}

h2. Overview

* Plugins are loaded at initialization time
** This means, registration of provided converters and connectors happens during initialization
** This is required in order for RSB to be able inquire about capabilities and configuration of converters and connectors
* Selection and loading of plugins is configured using the [[Configuration|usual mechanism]]
** An implementation-language-specific section configures
*** Means of locating plugins (e.g. searchpath, classpath, PYTHONPATH)
*** Names of the plugins that should be loaded

h2. C++ Plugins

* Are shared objects
* Configuration via options
** @plugins.cpp.path@: Colon separated list of directories in which expanded (e.g. @rsbspread DIRECTORY/librsbspread.so@ on linux) plugin libraries will be searched
** @plugins.cpp.load@: Colon separated list of plugins that should be loaded. (Names do not include prefixes like "lib" of suffixes like ".so" or ".dll")

Configuration Examples:
<pre>
[plugins.cpp]
path = /vol/vampire/lib:/vol/cor/lib
load = rsbspread:rsbvampire # no filetype suffix
</pre>

<pre>
RSB_PLUGINS_CPP_PATH=/vol/cor/lib
</pre>

h2. Java Plugins

* Are Jar files?
* Configuration via options
** @plugins.java.path@
** @plugins.java.load@: Colon separated list of plugins that should be loaded.

h2. Python Plugins

* Are eggs?
* Configuration via options
** @plugins.python.path@: @plugins.lisp.path@: Colon separated list of directories which get added to @sys.path@?
** @plugins.python.load@: @plugins.lisp.load@: Colon separated list of plugins that should be loaded.

h2. Common Lisp Plugins

* Are "ASDF-Systems":http://common-lisp.net/project/asdf/
* Configuration via options
** @plugins.lisp.path@
** @plugins.lisp.load@: Colon separated list of plugins that should be loaded.

h2. Interaction with Introspection of Configuration Options

The following protocol should be sufficient

# Setup fundamental configuration options (debugging, plugin loading, etc.)
# Process configuration sources
# Load requested plugins
#* Plugins register connector implementations, converters, etc.
# Introspect connector implementations to discover additional configuration options
# Update configuration options
# Process configuration sources again