CREATE_PROJECT: Add ability to remove feature from setup

This commit is contained in:
Michał Janiszewski 2020-05-08 13:10:09 -07:00 committed by Eugene Sandulenko
parent 0de86d6fbf
commit a23b1789db
2 changed files with 49 additions and 4 deletions

View file

@ -1168,14 +1168,22 @@ StringList getFeatureDefines(const FeatureList &features) {
return defines;
}
StringList getFeatureLibraries(const Feature &feature) {
StringList libraries;
if (feature.enable && feature.libraries && feature.libraries[0]) {
StringList fLibraries = tokenize(feature.libraries);
libraries.splice(libraries.end(), fLibraries);
}
return libraries;
}
StringList getFeatureLibraries(const FeatureList &features) {
StringList libraries;
for (FeatureList::const_iterator i = features.begin(); i != features.end(); ++i) {
if (i->enable && i->libraries && i->libraries[0]) {
StringList fLibraries = tokenize(i->libraries);
libraries.splice(libraries.end(), fLibraries);
}
libraries.merge(getFeatureLibraries(*i));
}
return libraries;
@ -1200,6 +1208,26 @@ bool getFeatureBuildState(const std::string &name, FeatureList &features) {
}
}
BuildSetup removeFeatureFromSetup(BuildSetup setup, const std::string &feature) {
for (FeatureList::const_iterator i = setup.features.begin(); i != setup.features.end(); ++i) {
if (i->enable && feature == i->name) {
StringList fribidi_libs = getFeatureLibraries(*i);
for (auto& lib : fribidi_libs) {
if (setup.useCanonicalLibNames) {
lib = getCanonicalLibName(lib);
}
setup.libraries.remove(lib);
}
if (i->define && i->define[0]) {
setup.defines.remove(i->define);
}
setup.features.erase(i);
break;
}
}
return setup;
}
ToolList getAllTools() {
const size_t toolCount = sizeof(s_tools) / sizeof(s_tools[0]);