1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Projucer: Attempt to copy module paths from compatible exporter when adding new export target

This commit is contained in:
ed 2021-12-01 15:34:40 +00:00
parent fdcdda3463
commit 1b2aeec65d
2 changed files with 29 additions and 27 deletions

View file

@ -152,6 +152,9 @@ public:
for (Project::ExporterIterator exporter (project); exporter.next();)
paths.addIfNotAlreadyThere (exporter->getPathForModuleString (moduleID).trim());
paths.removeEmptyStrings();
paths.removeDuplicates (true);
pathText = paths.joinIntoString (", ");
}

View file

@ -662,6 +662,11 @@ void ProjectExporter::updateOldModulePaths()
}
}
static bool areSameExporters (const ProjectExporter& p1, const ProjectExporter& p2)
{
return p1.getExporterIdentifier() == p2.getExporterIdentifier();
}
static bool areCompatibleExporters (const ProjectExporter& p1, const ProjectExporter& p2)
{
return (p1.isVisualStudio() && p2.isVisualStudio())
@ -673,39 +678,33 @@ static bool areCompatibleExporters (const ProjectExporter& p1, const ProjectExpo
void ProjectExporter::createDefaultModulePaths()
{
for (Project::ExporterIterator exporter (project); exporter.next();)
auto exporterToCopy = [this]() -> std::unique_ptr<ProjectExporter>
{
if (areCompatibleExporters (*this, *exporter))
{
for (int i = project.getEnabledModules().getNumModules(); --i >= 0;)
{
auto modID = project.getEnabledModules().getModuleID (i);
getPathForModuleValue (modID) = exporter->getPathForModuleValue (modID);
}
return;
}
}
std::vector<std::unique_ptr<ProjectExporter>> exporters;
for (Project::ExporterIterator exporter (project); exporter.next();)
{
if (exporter->canLaunchProject())
{
for (int i = project.getEnabledModules().getNumModules(); --i >= 0;)
{
auto modID = project.getEnabledModules().getModuleID (i);
getPathForModuleValue (modID) = exporter->getPathForModuleValue (modID);
}
exporters.push_back (std::move (exporter.exporter));
return;
}
}
for (int i = project.getEnabledModules().getNumModules(); --i >= 0;)
auto getIf = [&exporters] (auto predicate)
{
auto modID = project.getEnabledModules().getModuleID (i);
getPathForModuleValue (modID) = "../../juce";
}
auto iter = std::find_if (exporters.begin(), exporters.end(), predicate);
return iter != exporters.end() ? std::move (*iter) : nullptr;
};
if (auto exporter = getIf ([this] (auto& x) { return areSameExporters (*this, *x); }))
return exporter;
if (auto exporter = getIf ([this] (auto& x) { return areCompatibleExporters (*this, *x); }))
return exporter;
if (auto exporter = getIf ([] (auto& x) { return x->canLaunchProject(); }))
return exporter;
return {};
}();
for (const auto& modID : project.getEnabledModules().getAllModules())
getPathForModuleValue (modID) = (exporterToCopy != nullptr ? exporterToCopy->getPathForModuleString (modID) : "../../juce");
}
//==============================================================================