Consider required modules when checking for layout definitions in modules

Fixes: #11156.
This commit is contained in:
Juergen Spitzmueller 2018-05-24 17:38:10 +02:00
parent a3868e40a4
commit 8b4c76fb24

View File

@ -386,13 +386,25 @@ bool checkModule(string const & name, bool command)
add = true; add = true;
} }
if (add) { if (add) {
FileName layout_file = libFileSearch("layouts", module, "module"); vector<string> v;
if (textclass.read(layout_file, TextClass::MODULE)) { LayoutModuleList mods;
used_modules.push_back(module); // addModule is necessary in order to catch required modules
// speed up further searches: // as well (see #11156)
// the module does not need to be checked anymore. if (!addModule(module, baseClass, mods, v))
modules.erase(it); return false;
return true; for (auto const & mod : mods) {
if (!used_modules.moduleCanBeAdded(mod, &baseClass))
return false;
FileName layout_file = libFileSearch("layouts", mod, "module");
if (textclass.read(layout_file, TextClass::MODULE)) {
used_modules.push_back(mod);
// speed up further searches:
// the module does not need to be checked anymore.
ModuleMap::iterator const it = modules.find(mod);
if (it != modules.end())
modules.erase(it);
return true;
}
} }
} }
} }