diff --git a/extras/Projucer/Source/Project/jucer_Module.cpp b/extras/Projucer/Source/Project/jucer_Module.cpp index cc1ee9eb17..bc351c0c4f 100644 --- a/extras/Projucer/Source/Project/jucer_Module.cpp +++ b/extras/Projucer/Source/Project/jucer_Module.cpp @@ -201,6 +201,48 @@ Result ModuleList::addAllModulesInSubfoldersRecursively (const File& path, int d return Result::ok(); } +static File getModuleFolderFromPathIfItExists (const String& path, const String& moduleID, const Project& project) +{ + if (path.isNotEmpty()) + { + auto moduleFolder = project.resolveFilename (path); + + if (moduleFolder.exists()) + { + if (ModuleDescription (moduleFolder).getID() == moduleID) + return moduleFolder; + + auto f = moduleFolder.getChildFile (moduleID); + + if (ModuleDescription (f).getID() == moduleID) + return f; + } + } + + return {}; +} + +static File getPathToSpecifiedModule (Project& project, StringRef moduleID) +{ + auto& modules = project.getModules(); + + if (! modules.shouldUseGlobalPath (moduleID)) + { + for (Project::ExporterIterator exporter (project); exporter.next();) + { + if (! exporter->mayCompileOnCurrentOS()) + continue; + + auto path = getModuleFolderFromPathIfItExists (exporter->getPathForModuleString (moduleID), moduleID, project); + + if (path != File()) + return path; + } + } + + return {}; +} + static Array getAllPossibleModulePathsFromExporters (Project& project) { StringArray paths; @@ -661,27 +703,6 @@ Value EnabledModuleList::shouldShowAllModuleFilesInProject (const String& module .getPropertyAsValue (Ids::showAllCode, getUndoManager()); } -File EnabledModuleList::getModuleFolderFromPathIfItExists (const String& path, const String& moduleID, const Project& project) -{ - if (path.isNotEmpty()) - { - auto moduleFolder = project.resolveFilename (path); - - if (moduleFolder.exists()) - { - if (ModuleDescription (moduleFolder).getID() == moduleID) - return moduleFolder; - - auto f = moduleFolder.getChildFile (moduleID); - - if (ModuleDescription (f).getID() == moduleID) - return f; - } - } - - return {}; -} - File EnabledModuleList::findUserModuleFolder (const String& possiblePaths, const String& moduleID) { auto paths = StringArray::fromTokens (possiblePaths, ";", {}); @@ -710,6 +731,13 @@ File EnabledModuleList::getModuleFolder (const String& moduleID) return findUserModuleFolder (getAppSettings().getStoredPath (Ids::defaultUserModulePath).toString(), moduleID); } + { + auto path = getPathToSpecifiedModule (project, moduleID); + + if (path != File()) + return path; + } + auto paths = getAllPossibleModulePathsFromExporters (project); for (auto p : paths) { diff --git a/extras/Projucer/Source/Project/jucer_Module.h b/extras/Projucer/Source/Project/jucer_Module.h index 42566ced76..afbd2a89c9 100644 --- a/extras/Projucer/Source/Project/jucer_Module.h +++ b/extras/Projucer/Source/Project/jucer_Module.h @@ -182,7 +182,6 @@ public: private: UndoManager* getUndoManager() const { return project.getUndoManagerFor (state); } - static File getModuleFolderFromPathIfItExists (const String& path, const String& moduleID, const Project&); File findUserModuleFolder (const String& possiblePaths, const String& moduleID); JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EnabledModuleList)