mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-17 00:44:19 +00:00
Introjucer: optimised some unnecessary project copying.
This commit is contained in:
parent
dac898c601
commit
e875ddc3a1
9 changed files with 82 additions and 38 deletions
|
|
@ -405,8 +405,8 @@ private:
|
|||
{
|
||||
Array<RelativePath> files;
|
||||
|
||||
for (int i = 0; i < groups.size(); ++i)
|
||||
findAllFilesToCompile (groups.getReference(i), files);
|
||||
for (int i = 0; i < getAllGroups().size(); ++i)
|
||||
findAllFilesToCompile (getAllGroups().getReference(i), files);
|
||||
|
||||
MemoryOutputStream mo;
|
||||
writeAndroidMk (mo, files);
|
||||
|
|
|
|||
|
|
@ -555,9 +555,9 @@ public:
|
|||
|
||||
if (hasResourceFile())
|
||||
{
|
||||
for (int i = 0; i < groups.size(); ++i)
|
||||
for (int i = 0; i < getAllGroups().size(); ++i)
|
||||
{
|
||||
Project::Item& group = groups.getReference(i);
|
||||
Project::Item& group = getAllGroups().getReference(i);
|
||||
|
||||
if (group.getID() == ProjectSaver::getGeneratedGroupID())
|
||||
{
|
||||
|
|
@ -672,9 +672,13 @@ protected:
|
|||
|
||||
void createFiles (XmlElement& files) const
|
||||
{
|
||||
for (int i = 0; i < groups.size(); ++i)
|
||||
if (groups.getReference(i).getNumChildren() > 0)
|
||||
addFiles (groups.getReference(i), files);
|
||||
for (int i = 0; i < getAllGroups().size(); ++i)
|
||||
{
|
||||
const Project::Item& group = getAllGroups().getReference(i);
|
||||
|
||||
if (group.getNumChildren() > 0)
|
||||
addFiles (group, files);
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -1242,9 +1246,13 @@ protected:
|
|||
XmlElement* cppFiles = projectXml.createNewChildElement ("ItemGroup");
|
||||
XmlElement* headerFiles = projectXml.createNewChildElement ("ItemGroup");
|
||||
|
||||
for (int i = 0; i < groups.size(); ++i)
|
||||
if (groups.getReference(i).getNumChildren() > 0)
|
||||
addFilesToCompile (groups.getReference(i), *cppFiles, *headerFiles, *otherFilesGroup);
|
||||
for (int i = 0; i < getAllGroups().size(); ++i)
|
||||
{
|
||||
const Project::Item& group = getAllGroups().getReference(i);
|
||||
|
||||
if (group.getNumChildren() > 0)
|
||||
addFilesToCompile (group, *cppFiles, *headerFiles, *otherFilesGroup);
|
||||
}
|
||||
}
|
||||
|
||||
if (iconFile != File::nonexistent)
|
||||
|
|
@ -1386,10 +1394,13 @@ protected:
|
|||
XmlElement* headers = filterXml.createNewChildElement ("ItemGroup");
|
||||
ScopedPointer<XmlElement> otherFilesGroup (new XmlElement ("ItemGroup"));
|
||||
|
||||
for (int i = 0; i < groups.size(); ++i)
|
||||
if (groups.getReference(i).getNumChildren() > 0)
|
||||
addFilesToFilter (groups.getReference(i), groups.getReference(i).getName(),
|
||||
*cpps, *headers, *otherFilesGroup, *groupsXml);
|
||||
for (int i = 0; i < getAllGroups().size(); ++i)
|
||||
{
|
||||
const Project::Item& group = getAllGroups().getReference(i);
|
||||
|
||||
if (group.getNumChildren() > 0)
|
||||
addFilesToFilter (group, group.getName(), *cpps, *headers, *otherFilesGroup, *groupsXml);
|
||||
}
|
||||
|
||||
if (iconFile.exists())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -85,8 +85,8 @@ public:
|
|||
void create (const OwnedArray<LibraryModule>&) const
|
||||
{
|
||||
Array<RelativePath> files;
|
||||
for (int i = 0; i < groups.size(); ++i)
|
||||
findAllFilesToCompile (groups.getReference(i), files);
|
||||
for (int i = 0; i < getAllGroups().size(); ++i)
|
||||
findAllFilesToCompile (getAllGroups().getReference(i), files);
|
||||
|
||||
MemoryOutputStream mo;
|
||||
writeMakefile (mo, files);
|
||||
|
|
|
|||
|
|
@ -311,9 +311,13 @@ private:
|
|||
{
|
||||
StringArray topLevelGroupIDs;
|
||||
|
||||
for (int i = 0; i < groups.size(); ++i)
|
||||
if (groups.getReference(i).getNumChildren() > 0)
|
||||
topLevelGroupIDs.add (addProjectItem (groups.getReference(i)));
|
||||
for (int i = 0; i < getAllGroups().size(); ++i)
|
||||
{
|
||||
const Project::Item& group = getAllGroups().getReference(i);
|
||||
|
||||
if (group.getNumChildren() > 0)
|
||||
topLevelGroupIDs.add (addProjectItem (group));
|
||||
}
|
||||
|
||||
{ // Add 'resources' group
|
||||
String resourcesGroupID (createID ("__resources"));
|
||||
|
|
|
|||
|
|
@ -123,6 +123,34 @@ ProjectExporter* ProjectExporter::createPlatformDefaultExporter (Project& projec
|
|||
return best.release();
|
||||
}
|
||||
|
||||
bool ProjectExporter::canProjectBeLaunched (Project* project)
|
||||
{
|
||||
if (project != nullptr)
|
||||
{
|
||||
const char* types[] =
|
||||
{
|
||||
#if JUCE_MAC
|
||||
XCodeProjectExporter::getValueTreeTypeName (false),
|
||||
XCodeProjectExporter::getValueTreeTypeName (true),
|
||||
#elif JUCE_WINDOWS
|
||||
MSVCProjectExporterVC2005::getValueTreeTypeName(),
|
||||
MSVCProjectExporterVC2008::getValueTreeTypeName(),
|
||||
MSVCProjectExporterVC2010::getValueTreeTypeName(),
|
||||
#elif JUCE_LINUX
|
||||
MakefileProjectExporter::getValueTreeTypeName(),
|
||||
#endif
|
||||
|
||||
nullptr
|
||||
};
|
||||
|
||||
for (const char** type = types; *type != nullptr; ++type)
|
||||
if (project->getExporters().getChildWithName (*type).isValid())
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
ProjectExporter::ProjectExporter (Project& project_, const ValueTree& settings_)
|
||||
: xcodeIsBundle (false),
|
||||
|
|
@ -139,7 +167,6 @@ ProjectExporter::ProjectExporter (Project& project_, const ValueTree& settings_)
|
|||
projectFolder (project_.getFile().getParentDirectory()),
|
||||
modulesGroup (nullptr)
|
||||
{
|
||||
groups.add (project.getMainGroup().createCopy());
|
||||
}
|
||||
|
||||
ProjectExporter::~ProjectExporter()
|
||||
|
|
@ -264,12 +291,19 @@ String ProjectExporter::replacePreprocessorTokens (const ProjectExporter::BuildC
|
|||
return replacePreprocessorDefs (getAllPreprocessorDefs (config), sourceString);
|
||||
}
|
||||
|
||||
void ProjectExporter::copyMainGroupFromProject()
|
||||
{
|
||||
jassert (itemGroups.size() == 0);
|
||||
itemGroups.add (project.getMainGroup().createCopy());
|
||||
}
|
||||
|
||||
Project::Item& ProjectExporter::getModulesGroup()
|
||||
{
|
||||
if (modulesGroup == nullptr)
|
||||
{
|
||||
groups.add (Project::Item::createGroup (project, "Juce Modules", "__modulesgroup__"));
|
||||
modulesGroup = &(groups.getReference (groups.size() - 1));
|
||||
jassert (itemGroups.size() > 0); // must call copyMainGroupFromProject before this.
|
||||
itemGroups.add (Project::Item::createGroup (project, "Juce Modules", "__modulesgroup__"));
|
||||
modulesGroup = &(itemGroups.getReference (itemGroups.size() - 1));
|
||||
}
|
||||
|
||||
return *modulesGroup;
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ public:
|
|||
static ProjectExporter* createNewExporter (Project&, const String& name);
|
||||
static ProjectExporter* createExporter (Project&, const ValueTree& settings);
|
||||
static ProjectExporter* createPlatformDefaultExporter (Project&);
|
||||
static bool canProjectBeLaunched (Project*);
|
||||
|
||||
static String getCurrentPlatformExporterName();
|
||||
|
||||
|
|
@ -123,7 +124,9 @@ public:
|
|||
RelativePath getJucePathFromProjectFolder() const;
|
||||
|
||||
//==============================================================================
|
||||
Array<Project::Item> groups;
|
||||
void copyMainGroupFromProject();
|
||||
Array<Project::Item>& getAllGroups() noexcept { jassert (itemGroups.size() > 0); return itemGroups; }
|
||||
const Array<Project::Item>& getAllGroups() const noexcept { jassert (itemGroups.size() > 0); return itemGroups; }
|
||||
Project::Item& getModulesGroup();
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -275,6 +278,9 @@ protected:
|
|||
const ProjectType& projectType;
|
||||
const String projectName;
|
||||
const File projectFolder;
|
||||
|
||||
mutable Array<Project::Item> itemGroups;
|
||||
void initItemGroups() const;
|
||||
Project::Item* modulesGroup;
|
||||
|
||||
virtual BuildConfiguration::Ptr createBuildConfig (const ValueTree&) const = 0;
|
||||
|
|
|
|||
|
|
@ -502,6 +502,7 @@ private:
|
|||
{
|
||||
if (exporter->getTargetFolder().createDirectory())
|
||||
{
|
||||
exporter->copyMainGroupFromProject();
|
||||
exporter->settings = exporter->settings.createCopy();
|
||||
|
||||
exporter->addToExtraSearchPaths (RelativePath ("JuceLibraryCode", RelativePath::projectFolder));
|
||||
|
|
@ -513,7 +514,7 @@ private:
|
|||
modules.getUnchecked(j)->prepareExporter (*exporter, *this);
|
||||
|
||||
sortGroupRecursively (generatedFilesGroup);
|
||||
exporter->groups.add (generatedFilesGroup);
|
||||
exporter->getAllGroups().add (generatedFilesGroup);
|
||||
|
||||
threadPool.addJob (new ExporterJob (*this, exporter.exporter.release(), modules), true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -402,17 +402,6 @@ void ProjectContentComponent::updateMainWindowTitle()
|
|||
mw->updateTitle (currentDocument != nullptr ? currentDocument->getName() : String::empty);
|
||||
}
|
||||
|
||||
bool ProjectContentComponent::canProjectBeLaunched() const
|
||||
{
|
||||
if (project != nullptr)
|
||||
{
|
||||
ScopedPointer <ProjectExporter> launcher (ProjectExporter::createPlatformDefaultExporter (*project));
|
||||
return launcher != nullptr;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
ApplicationCommandTarget* ProjectContentComponent::getNextCommandTarget()
|
||||
{
|
||||
return findFirstTargetParentComponent();
|
||||
|
|
@ -507,7 +496,7 @@ void ProjectContentComponent::getCommandInfo (const CommandID commandID, Applica
|
|||
#endif
|
||||
"Launches the project in an external IDE",
|
||||
CommandCategories::general, 0);
|
||||
result.setActive (canProjectBeLaunched());
|
||||
result.setActive (ProjectExporter::canProjectBeLaunched (project));
|
||||
break;
|
||||
|
||||
case CommandIDs::saveAndOpenInIDE:
|
||||
|
|
@ -520,7 +509,7 @@ void ProjectContentComponent::getCommandInfo (const CommandID commandID, Applica
|
|||
#endif
|
||||
"Saves the project and launches it in an external IDE",
|
||||
CommandCategories::general, 0);
|
||||
result.setActive (canProjectBeLaunched());
|
||||
result.setActive (ProjectExporter::canProjectBeLaunched (project));
|
||||
result.defaultKeypresses.add (KeyPress ('l', ModifierKeys::commandModifier, 0));
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -98,7 +98,6 @@ protected:
|
|||
void changeListenerCallback (ChangeBroadcaster*);
|
||||
void updateMainWindowTitle();
|
||||
bool reinvokeCommandAfterClosingPropertyEditors (const InvocationInfo&);
|
||||
bool canProjectBeLaunched() const;
|
||||
TreeView* getFilesTreeView() const;
|
||||
ProjectTreeViewBase* getFilesTreeRoot() const;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue