Adapting plugins to the installer
In order to work with the installer plugins needs to be modified. The changes includes some general updates & cleanup:
-
Updating to the latest plugin API v 1.16 (as of 5.0.0).
-
Using the new function GetPluginDataDir instead of previous GetpSharedDataLocation(). This is so that the plugin can find it’s own data directory even if relocated to a new location.
-
Ensure that LD_LIBRARY_PATH is not overwritten by plugin if it’s already set (for plugins which uses it, most don’t)
-
Use the new find_in_path() function to locate binary helpers as a fallback if hardcoded paths does not work (for plugins which uses helpers, most don’t).
-
Ensure that plugin does not link to libraries outside the git tree, in particular the msvc opencpn.lib import library.
-
Ensure that plugin is installed in sane paths, in particular on Mac.
And some new code:
-
Build a .tar.gz bundle together with the tradtional installer.
-
Add support for building a plugin metadata XML file.
-
Give the package a more unique name. This is a requirement from deployment sites like bintray where all plugins share a common namespace.
-
Add continous integration support (if not already in place).
-
Add support for building a flatpak plugin.
This list is supposed to be exhaustive — many plugins are simple enough.
There are two examples on the this process
-
[oesenc_pi](https://github.com/bdbcat/oesenc_pi/). This is as complicated as it gets with binary helpers, extra libs and data.
-
[ShipDriver_pi](https://github.com/Rasbats/shipdriver_pi/) is simpler example, but still complex enough to cover most plugin cases.
Testing a new or modified plugin
The item to test is a tarball. The easiest way to test it is to use the new "Import plugin" function which allows using a plugin directly without downloading it from an url.
More complete testing requires the plugin to be available in a catalog. See the plugins project at https://github.com/opencpn/plugins
Source code formatting
The preferred style for cmake files is the modern one with lower_case commands, two spaces indentation and plain endif (), something like
if (MSVC) set(_msvc_flag "some value") endif ()
This is supported by the cmake-format utility, https://github.com/cheshirekow/cmake_format. A .cmake-format options file to use is part of the [ShipDriver_pi](https://github.com/Rasbats/shipdriver_pi/) plugin. cmake-format has also been used with the same settings in the main opencpn project where it has been used to format several thousand of lines with good results.