memset(&mod_set, 0, sizeof(mod_set));
mod_set.version = master_service_get_version_string(ctx->service);
mod_set.binary_name = master_service_get_name(ctx->service);
+ mod_set.setting_name = "mail_plugins";
mod_set.require_init_funcs = TRUE;
mod_set.debug = mail_user_set_get_mail_debug(user_info, user_set);
#include "lib.h"
#include "array.h"
+#include "str.h"
#include "module-dir.h"
#ifdef HAVE_MODULES
}
static bool
-module_check_missing_plugin_dependencies(struct module *module,
+module_check_missing_plugin_dependencies(const struct module_dir_load_settings *set,
+ struct module *module,
struct module *all_modules)
{
const char **deps;
struct module *m;
+ string_t *errmsg;
unsigned int len;
deps = dlsym(module->handle,
break;
}
if (m == NULL) {
- i_error("Can't load plugin %s: "
- "Plugin %s must be loaded also",
- module->name, *deps);
+ errmsg = t_str_new(128);
+ str_printfa(errmsg, "Can't load plugin %s: "
+ "Plugin %s must be loaded also",
+ module->name, *deps);
+ if (set->setting_name != NULL) {
+ str_printfa(errmsg,
+ " (you must set: %s=$%s %s)",
+ set->setting_name,
+ set->setting_name, *deps);
+ }
+ i_error("%s", str_c(errmsg));
return FALSE;
}
}
module->init == NULL ? "init" : "deinit", path);
failed = TRUE;
} else if (!module_check_wrong_binary_dependency(set, module) ||
- !module_check_missing_plugin_dependencies(module, all_modules))
+ !module_check_missing_plugin_dependencies(set, module,
+ all_modules))
failed = TRUE;
if (failed) {
/* Binary name used for checking if plugin is tried to be loaded for
wrong binary. */
const char *binary_name;
+ /* Setting name used in plugin dependency error message */
+ const char *setting_name;
/* Require all plugins to have <plugin_name>_init() function */
unsigned int require_init_funcs:1;