in src/oomd/config/ConfigCompiler.cpp [229:280]
std::optional<Engine::DropInUnit> compileDropIn(
const IR::Root& root,
const IR::Root& dropin,
const PluginConstructionContext& context) {
Engine::DropInUnit ret;
for (const auto& dropin_rs : dropin.rulesets) {
bool found_target = false;
for (const auto& rs : root.rulesets) {
if (rs.name == dropin_rs.name) {
found_target = true;
auto target = compileRuleset(rs, false, context);
if (!target) {
return std::nullopt;
}
auto compiled_drop = compileRuleset(dropin_rs, true, context);
if (!compiled_drop) {
return std::nullopt;
}
if (!target->mergeWithDropIn(std::move(compiled_drop))) {
OLOG << "Could not merge drop in ruleset=" << dropin_rs.name;
return std::nullopt;
}
ret.rulesets.emplace_back(std::move(target));
break;
}
}
if (!found_target) {
OLOG << "Could not locate targeted ruleset=" << dropin_rs.name;
return std::nullopt;
}
}
for (const auto& prekill_hook : dropin.prekill_hooks) {
auto compiled_prekill_hook_plugin =
compilePrekillHook(prekill_hook, context);
if (!compiled_prekill_hook_plugin) {
OLOG << "Unknown PrekillHook \"" << prekill_hook.name << "\"";
return std::nullopt;
}
ret.prekill_hooks.emplace_back(std::move(compiled_prekill_hook_plugin));
}
return ret;
}