1 /* GIO - GLib Input, Output and Streaming Library 2 * 3 * Copyright (C) 2006-2007 Red Hat, Inc. 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General 16 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>. 17 * 18 * Author: Alexander Larsson <alexl@redhat.com> 19 */ 20 21 #ifndef __G_IO_MODULE_H__ 22 #define __G_IO_MODULE_H__ 23 24 #if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) 25 #error "Only <gio/gio.h> can be included directly." 26 #endif 27 28 #include <gio/giotypes.h> 29 #include <gmodule.h> 30 31 G_BEGIN_DECLS 32 33 typedef struct _GIOModuleScope GIOModuleScope; 34 35 GLIB_AVAILABLE_IN_2_30 36 GIOModuleScope * g_io_module_scope_new (GIOModuleScopeFlags flags); 37 GLIB_AVAILABLE_IN_2_30 38 void g_io_module_scope_free (GIOModuleScope *scope); 39 GLIB_AVAILABLE_IN_2_30 40 void g_io_module_scope_block (GIOModuleScope *scope, 41 const gchar *basename); 42 43 #define G_IO_TYPE_MODULE (g_io_module_get_type ()) 44 #define G_IO_MODULE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_IO_TYPE_MODULE, GIOModule)) 45 #define G_IO_MODULE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_IO_TYPE_MODULE, GIOModuleClass)) 46 #define G_IO_IS_MODULE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_IO_TYPE_MODULE)) 47 #define G_IO_IS_MODULE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_IO_TYPE_MODULE)) 48 #define G_IO_MODULE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_IO_TYPE_MODULE, GIOModuleClass)) 49 50 /** 51 * GIOModule: 52 * 53 * Opaque module base class for extending GIO. 54 **/ 55 typedef struct _GIOModuleClass GIOModuleClass; 56 57 GLIB_AVAILABLE_IN_ALL 58 GType g_io_module_get_type (void) G_GNUC_CONST; 59 GLIB_AVAILABLE_IN_ALL 60 GIOModule *g_io_module_new (const gchar *filename); 61 62 GLIB_AVAILABLE_IN_ALL 63 void g_io_modules_scan_all_in_directory (const char *dirname); 64 GLIB_AVAILABLE_IN_ALL 65 GList *g_io_modules_load_all_in_directory (const gchar *dirname); 66 67 GLIB_AVAILABLE_IN_2_30 68 void g_io_modules_scan_all_in_directory_with_scope (const gchar *dirname, 69 GIOModuleScope *scope); 70 GLIB_AVAILABLE_IN_2_30 71 GList *g_io_modules_load_all_in_directory_with_scope (const gchar *dirname, 72 GIOModuleScope *scope); 73 74 GLIB_AVAILABLE_IN_ALL 75 GIOExtensionPoint *g_io_extension_point_register (const char *name); 76 GLIB_AVAILABLE_IN_ALL 77 GIOExtensionPoint *g_io_extension_point_lookup (const char *name); 78 GLIB_AVAILABLE_IN_ALL 79 void g_io_extension_point_set_required_type (GIOExtensionPoint *extension_point, 80 GType type); 81 GLIB_AVAILABLE_IN_ALL 82 GType g_io_extension_point_get_required_type (GIOExtensionPoint *extension_point); 83 GLIB_AVAILABLE_IN_ALL 84 GList *g_io_extension_point_get_extensions (GIOExtensionPoint *extension_point); 85 GLIB_AVAILABLE_IN_ALL 86 GIOExtension * g_io_extension_point_get_extension_by_name (GIOExtensionPoint *extension_point, 87 const char *name); 88 GLIB_AVAILABLE_IN_ALL 89 GIOExtension * g_io_extension_point_implement (const char *extension_point_name, 90 GType type, 91 const char *extension_name, 92 gint priority); 93 94 GLIB_AVAILABLE_IN_ALL 95 GType g_io_extension_get_type (GIOExtension *extension); 96 GLIB_AVAILABLE_IN_ALL 97 const char * g_io_extension_get_name (GIOExtension *extension); 98 GLIB_AVAILABLE_IN_ALL 99 gint g_io_extension_get_priority (GIOExtension *extension); 100 GLIB_AVAILABLE_IN_ALL 101 GTypeClass* g_io_extension_ref_class (GIOExtension *extension); 102 103 104 /* API for the modules to implement */ 105 106 /** 107 * g_io_module_load: 108 * @module: a #GIOModule. 109 * 110 * Required API for GIO modules to implement. 111 * 112 * This function is run after the module has been loaded into GIO, 113 * to initialize the module. Typically, this function will call 114 * g_io_extension_point_implement(). 115 * 116 * Since 2.56, this function should be named `g_io_<modulename>_load`, where 117 * `modulename` is the plugin’s filename with the `lib` or `libgio` prefix and 118 * everything after the first dot removed, and with `-` replaced with `_` 119 * throughout. For example, `libgiognutls-helper.so` becomes `gnutls_helper`. 120 * Using the new symbol names avoids name clashes when building modules 121 * statically. The old symbol names continue to be supported, but cannot be used 122 * for static builds. 123 **/ 124 GLIB_AVAILABLE_IN_ALL 125 void g_io_module_load (GIOModule *module); 126 127 /** 128 * g_io_module_unload: 129 * @module: a #GIOModule. 130 * 131 * Required API for GIO modules to implement. 132 * 133 * This function is run when the module is being unloaded from GIO, 134 * to finalize the module. 135 * 136 * Since 2.56, this function should be named `g_io_<modulename>_unload`, where 137 * `modulename` is the plugin’s filename with the `lib` or `libgio` prefix and 138 * everything after the first dot removed, and with `-` replaced with `_` 139 * throughout. For example, `libgiognutls-helper.so` becomes `gnutls_helper`. 140 * Using the new symbol names avoids name clashes when building modules 141 * statically. The old symbol names continue to be supported, but cannot be used 142 * for static builds. 143 **/ 144 GLIB_AVAILABLE_IN_ALL 145 void g_io_module_unload (GIOModule *module); 146 147 /** 148 * g_io_module_query: 149 * 150 * Optional API for GIO modules to implement. 151 * 152 * Should return a list of all the extension points that may be 153 * implemented in this module. 154 * 155 * This method will not be called in normal use, however it may be 156 * called when probing existing modules and recording which extension 157 * points that this model is used for. This means we won't have to 158 * load and initialize this module unless its needed. 159 * 160 * If this function is not implemented by the module the module will 161 * always be loaded, initialized and then unloaded on application 162 * startup so that it can register its extension points during init. 163 * 164 * Note that a module need not actually implement all the extension 165 * points that g_io_module_query() returns, since the exact list of 166 * extension may depend on runtime issues. However all extension 167 * points actually implemented must be returned by g_io_module_query() 168 * (if defined). 169 * 170 * When installing a module that implements g_io_module_query() you must 171 * run gio-querymodules in order to build the cache files required for 172 * lazy loading. 173 * 174 * Since 2.56, this function should be named `g_io_<modulename>_query`, where 175 * `modulename` is the plugin’s filename with the `lib` or `libgio` prefix and 176 * everything after the first dot removed, and with `-` replaced with `_` 177 * throughout. For example, `libgiognutls-helper.so` becomes `gnutls_helper`. 178 * Using the new symbol names avoids name clashes when building modules 179 * statically. The old symbol names continue to be supported, but cannot be used 180 * for static builds. 181 * 182 * Returns: (transfer full): A %NULL-terminated array of strings, 183 * listing the supported extension points of the module. The array 184 * must be suitable for freeing with g_strfreev(). 185 * 186 * Since: 2.24 187 **/ 188 GLIB_AVAILABLE_IN_ALL 189 char **g_io_module_query (void); 190 191 G_END_DECLS 192 193 #endif /* __G_IO_MODULE_H__ */ 194