diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp index bbfbc3fe3a5..998f5ab0e27 100644 --- a/devtools/create_project/create_project.cpp +++ b/devtools/create_project/create_project.cpp @@ -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]); diff --git a/devtools/create_project/create_project.h b/devtools/create_project/create_project.h index 9e2746a3cea..2537475082b 100644 --- a/devtools/create_project/create_project.h +++ b/devtools/create_project/create_project.h @@ -200,6 +200,14 @@ StringList getFeatureDefines(const FeatureList &features); */ StringList getFeatureLibraries(const FeatureList &features); +/** + * Returns a list of all external library files, according to the + * feature passed. + * + * @param features Feature for the build (this may contain features, which are *not* enabled!) + */ +StringList getFeatureLibraries(const Feature& feature); + /** * Sets the state of a given feature. This can be used to * either include or exclude an feature. @@ -326,6 +334,15 @@ int getInstalledMSVC(); */ std::string getCanonicalLibName(std::string lib); +/** + * Removes given feature from setup. + * + * @param setup The setup to be processed. + * @param feature The feature to be removed + * @return A copy of setup less feature. + */ +BuildSetup removeFeatureFromSetup(BuildSetup setup, const std::string &feature); + namespace CreateProjectTool { /**