Top | ![]() |
![]() |
![]() |
![]() |
#define | GWY_MODULE_QUERY() |
#define | GWY_MODULE_QUERY2() |
gboolean | (*GwyModuleRegisterFunc) () |
GwyModuleInfo * | (*GwyModuleQueryFunc) () |
const GwyModuleRecord * | (*GwyModuleBundleRegisterFunc) () |
GQuark | gwy_module_error_quark () |
void | gwy_module_register_modules () |
const GwyModuleInfo * | gwy_module_lookup () |
const gchar * | gwy_module_get_filename () |
GSList * | gwy_module_get_functions () |
void | gwy_module_foreach () |
void | gwy_module_failure_foreach () |
const GwyModuleInfo * | gwy_module_register_module () |
void | gwy_module_disable_registration () |
void | gwy_module_enable_registration () |
gboolean | gwy_module_is_enabled () |
#define | GWY_MODULE_ABI_VERSION |
#define | GWY_MODULE_BUNDLE_FLAG |
#define | GWY_MODULE_ERROR |
enum | GwyModuleError |
struct | GwyModuleRecord |
struct | GwyModuleInfo |
GwyModuleFailureInfo |
#define GWY_MODULE_QUERY(mod_info)
The module query must be the ONLY exported symbol from a module.
This macro does The Right Thing necessary to export module info in a way
Gwyddion understands it. Put GWY_MODULE_QUERY
with the module info
(GwyModuleInfo) of your module as its argument on a line (with NO
semicolon after).
If you write a module in C++ note the module query must have C linkage.
This is achieved by marking it extern "C"
:
1 2 3 |
extern "C" { GWY_MODULE_QUERY(module_info) } |
This has to be done manually in versions up to 2.24; since version 2.25
GWY_MODULE_QUERY()
includes extern "C"
automatically if
it is compiled using a C++ compiler.
#define GWY_MODULE_QUERY2(mod_info,mod_name)
The module query must be the ONLY exported symbol from a module.
See GWY_MODULE_QUERY
for discussion.
This macro is intended for modules that can be bundled together to one big shared library for time and space optimization. This mostly makes sense only for modules included in Gwyddion itself as it contains hundreds of modules.
However, it safe to use in third party modules because if modules
are not bundled the macro behaves exactly as GWY_MODULE_QUERY
and the
mod_name
argument is just ignored. The macro expansion differs only when
GWY_MODULE_BUNDLING
is defined when including the "gwymoduleloader.h"
header.
The module name mod_name
is given as a C identifier, not a string. It
must be identical to the file name of the module if it
was installed standalone, with extension removed and with non-identifier
characters converted to underscores. For instance module implemented in
"nt-mdt.c" and installed as "nt-mdt.so" or "nt-mdt.dll" (or with other
extensions, depending on the operating system) must pass
nt_mdt
. If it does not match the file name, linking will
fail with a confusing message when bundling is enabled.
mod_info |
The GwyModuleInfo structure to return as module info. |
|
mod_name |
Module name, given as C identifier corresponding to file name withough extension. |
Since: 2.49
gboolean
(*GwyModuleRegisterFunc) (void
);
Module registration function type.
It actually runs particular featrue registration functions, like
gwy_file_func_register()
and gwy_process_func_register()
.
If the module has a complex initialisation it may be safer to simply not
register any function but return TRUE
even if it fails to set up itself
correctly. The module feature unregistration is somewhat crude and,
generally, unregisteration may lead to disaster when shared library
unloading has unexpected side effects.
Whether the registration succeeded. When it returns FALSE
, the
module and its features are unregistered.
GwyModuleInfo *
(*GwyModuleQueryFunc) (void
);
Module query function type.
The module query function should be simply declared as GWY_MODULE_QUERY(mod_info), where mod_info is module info struct for the module.
const GwyModuleRecord *
(*GwyModuleBundleRegisterFunc) (void
);
Module bundle query function type.
It returns an array of module records for all modules in the bundle,
terminated by {NULL
, NULL
}.
Since: 2.49
GQuark
gwy_module_error_quark (void
);
Returns error domain for module loading.
See and use GWY_MODULE_ERROR
.
void
gwy_module_register_modules (const gchar **paths
);
Registers all modules in given directories.
It can be called several times (on different directories). No errors are
reported, register modules individually with gwy_module_register_module()
to get registration errors.
If you need to prevent specific modules from loading use
gwy_module_disable_registration()
beforehand.
const GwyModuleInfo *
gwy_module_lookup (const gchar *name
);
Returns information about one module.
The module info, of NULL
if not found. It must be considered
constant and never modified or freed.
const gchar *
gwy_module_get_filename (const gchar *name
);
Returns full file name of a module.
GSList *
gwy_module_get_functions (const gchar *name
);
Returns list of names of functions a module implements.
List of module function names, as a GSList that is owned by module loader and must not be modified or freed.
void gwy_module_foreach (GHFunc function
,gpointer data
);
Runs function
on each registered module.
It passes module name as the key and pointer to module info (GwyModuleInfo) as the value. Neither should be modified.
void gwy_module_failure_foreach (GFunc function
,gpointer data
);
Runs function
for each module that failed to register.
It passes the failure info (GwyModuleFailureInfo) as the data argument. It should be modified.
Since: 2.49
const GwyModuleInfo * gwy_module_register_module (const gchar *name
,GError **error
);
Loads a single module.
This function also works with bundles. The returned module info is for the bundle and thus not of much use.
name |
Module file name to load, including full path and extension. |
|
error |
Location to store error, or |
void
gwy_module_disable_registration (const gchar *name
);
Prevents the registration of a module of given name.
This function blocks future module registration using
gwy_module_register_modules()
. Already loaded modules are unaffected.
The low-level module loading function gwy_module_register_module()
always
attempts to load the module, even if blocked.
Since: 2.48
void
gwy_module_enable_registration (const gchar *name
);
Unblocks the registration of a module of given name.
This function influences future module registration. Already loaded modules are unaffected.
Since: 2.48
gboolean
gwy_module_is_enabled (const gchar *name
);
Reports whether the registration of a module is enabled.
If the registration of module name
was prevented using
gwy_module_disable_registration()
and not subsequently re-enabled
using gwy_module_enabled_registration()
this function returns FALSE
.
The reported values only represents the current state of blocking. A module
name
could have been loaded when it was not blocked.
Since: 2.48
#define GWY_MODULE_ABI_VERSION 2
Gwyddion module ABI version.
To be filled as abi_version
in GwyModuleInfo.
#define GWY_MODULE_BUNDLE_FLAG 256u
Value to bitwise combine with GWY_MODULE_ABI_VERSION
to indicate a bundle.
Since: 2.49
Type of module loading and registration error.
Module has an invalid name. It is recommended that module names are valid C identifiers, possibly with dashes instead of underscores, but only really broken names are rejected. |
||
A module of the same name has already been registered. |
||
Calling |
||
Module does not contain any query function. |
||
Module has different ABI version than expected/supported; or required info field are missing. |
||
Module query function provided |
||
The registration function returned |
||
Nested module bundle found. (Since 2.49) |
struct GwyModuleRecord { GwyModuleQueryFunc query; const gchar *name; };
Module record returned by bundle query function.
GwyModuleQueryFunc |
Module query function. |
|
const gchar * |
Module name (base file name without extensions). |
Since: 2.49
struct GwyModuleInfo { guint32 abi_version; GwyModuleRegisterFunc register_func; const gchar *blurb; const gchar *author; const gchar *version; const gchar *copyright; const gchar *date; };
Module information returned by GWY_MODULE_QUERY()
.
guint32 |
Gwyddion module ABI version, should be always GWY_MODULE_ABI_VERSION. |
|
GwyModuleRegisterFunc |
Module registration function (the function run by Gwyddion module system, actually registering particular module features). |
|
const gchar * |
Some module description. |
|
const gchar * |
Module author(s). |
|
const gchar * |
Module version. |
|
const gchar * |
Who has copyright on this module. |
|
const gchar * |
Date (year). |
typedef struct { const gchar *filename; const gchar *modname; const gchar *err_message; gint err_domain; gint err_code; } GwyModuleFailureInfo;
Information about a failed module registration.
const gchar * |
Name of the file the module was loaded from. |
|
const gchar * |
Module name (can be |
|
const gchar * |
Error message from the failed module registration. |
|
gint |
GError domain from the failed module registration. |
|
gint |
GError code from the failed module registration. |
Since: 2.49