33#ifdef INCLUDE_API_FROM_MODULE_LOAD
34 #define OPTIONAL(return_type, function_name, ...) \
35 if(!g_module_symbol(module->module, #function_name, (gpointer) & (module->function_name))) \
36 module->function_name = NULL
37 #define REQUIRED(return_type, function_name, ...) \
38 if(!g_module_symbol(module->module, #function_name, (gpointer) & (module->function_name))) \
40 #define DEFAULT(return_type, function_name, ...) \
41 if(!g_module_symbol(module->module, #function_name, (gpointer) & (module->function_name))) \
42 module->function_name = default_ ## function_name
45 module->module = g_module_open(libname, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
46 if(!module->module)
goto api_h_error;
48 if(!g_module_symbol(module->module,
"dt_module_dt_version", (gpointer) & (version)))
goto api_h_error;
53 libname, abs(version()), version() < 0 ?
"debug" :
"opt", abs(
dt_version()),
57 if(!g_module_symbol(module->module,
"dt_module_mod_version", (gpointer) & (module->version)))
goto api_h_error;
62 if(module->module) g_module_close(module->module);
65 #undef INCLUDE_API_FROM_MODULE_LOAD
66#elif defined(INCLUDE_API_FROM_MODULE_H)
67 #define OPTIONAL(return_type, function_name, ...) return_type (*function_name)(__VA_ARGS__)
68 #define REQUIRED(return_type, function_name, ...) return_type (*function_name)(__VA_ARGS__)
69 #define DEFAULT(return_type, function_name, ...) return_type (*function_name)(__VA_ARGS__)
71 #undef INCLUDE_API_FROM_MODULE_H
72#elif defined(INCLUDE_API_FROM_MODULE_LOAD_BY_SO)
73 #define OPTIONAL(return_type, function_name, ...) module->function_name = so->function_name
74 #define REQUIRED(return_type, function_name, ...) module->function_name = so->function_name
75 #define DEFAULT(return_type, function_name, ...) module->function_name = so->function_name
76 #undef INCLUDE_API_FROM_MODULE_LOAD_BY_SO
79 #define OPTIONAL(return_type, function_name, ...) return_type function_name(__VA_ARGS__)
80 #define REQUIRED(return_type, function_name, ...) return_type function_name(__VA_ARGS__)
81 #define DEFAULT(return_type, function_name, ...) return_type function_name(__VA_ARGS__)
86 #pragma GCC visibility push(default)
91 #pragma GCC visibility pop
void dt_print(dt_debug_thread_t thread, const char *msg,...)
Definition darktable.c:1530
@ DT_DEBUG_CONTROL
Definition darktable.h:637
static int dt_version()
Definition darktable.h:153
#define INCLUDE_API_FROM_MODULE_LOAD
int dt_module_dt_version()
int dt_module_mod_version()