/* ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ JUCE can be redistributed and/or modified under the terms of the GNU General Public License (Version 2), as published by the Free Software Foundation. A copy of the license is included in the JUCE distribution, or can be found online at www.gnu.org/licenses. JUCE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ------------------------------------------------------------------------------ To release a closed-source product which uses JUCE, commercial licenses are available: visit www.rawmaterialsoftware.com/juce for more information. ============================================================================== */ #ifndef __JUCER_MODULE_JUCEHEADER__ #define __JUCER_MODULE_JUCEHEADER__ #include "../jucer_Headers.h" #include "jucer_Project.h" class ProjectExporter; class ProjectSaver; //============================================================================== class LibraryModule { public: LibraryModule (const File& file); LibraryModule (const var& moduleInfo); bool isValid() const; String getID() const { return moduleInfo ["id"].toString(); } String getVersion() const { return moduleInfo ["version"].toString(); } String getName() const { return moduleInfo ["name"].toString(); } String getDescription() const { return moduleInfo ["description"].toString(); } void writeIncludes (ProjectSaver& projectSaver, OutputStream& out); void prepareExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const; void createPropertyEditors (const ProjectExporter& exporter, Array & props) const; void getConfigFlags (Project& project, OwnedArray& flags) const; static String getInfoFileName() { return "juce_module_info"; } var moduleInfo; private: File moduleFile, moduleFolder; mutable Array sourceFiles; File getInclude (const File& folder) const; File getLocalIncludeFolder (ProjectSaver& projectSaver) const; static bool fileTargetMatches (ProjectExporter& exporter, const String& target); struct FileSorter { static int compareElements (const File& f1, const File& f2) { return f1.getFileName().compareIgnoreCase (f2.getFileName()); } }; void findWildcardMatches (const File& localModuleFolder, const String& wildcardPath, Array& result) const; void addFileWithGroups (Project::Item& group, const RelativePath& file, const String& path) const; void findAndAddCompiledCode (ProjectExporter& exporter, ProjectSaver& projectSaver, const File& localModuleFolder, Array& result) const; void addBrowsableCode (ProjectExporter& exporter, const Array& compiled, const File& localModuleFolder) const; void createLocalHeaderWrapper (ProjectSaver& projectSaver, const File& originalHeader, const File& localHeader) const; RelativePath getModuleRelativeToProject (ProjectExporter& exporter) const; bool isPluginClient() const; bool isAUPluginHost (const Project& project) const; bool isVSTPluginHost (const Project& project) const; }; //============================================================================== class ModuleList { public: ModuleList(); //============================================================================== void rescan(); void loadFromWebsite(); LibraryModule* loadModule (const String& uid) const; void getDependencies (const String& moduleID, StringArray& dependencies) const; void createDependencies (const String& moduleID, OwnedArray& modules) const; //============================================================================== struct Module { LibraryModule* create() const; String uid, version, name, description; File file; URL url; }; const Module* findModuleInfo (const String& uid) const; OwnedArray modules; private: File moduleFolder; void sort(); }; #endif // __JUCER_MODULE_JUCEHEADER__