mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Projucer: Create unique dependency nodes for each plug-in target
This commit is contained in:
parent
00d8910cc5
commit
38c784221e
1 changed files with 34 additions and 43 deletions
|
|
@ -1007,9 +1007,9 @@ public:
|
|||
StringArray xcodeFrameworks, xcodeLibs;
|
||||
Array<XmlElement> xcodeExtraPListEntries;
|
||||
|
||||
StringArray frameworkIDs, buildPhaseIDs, configIDs, sourceIDs, rezFileIDs;
|
||||
StringArray frameworkIDs, buildPhaseIDs, configIDs, sourceIDs, rezFileIDs, dependencyIDs;
|
||||
StringArray frameworkNames;
|
||||
String dependencyID, mainBuildProductID;
|
||||
String mainBuildProductID;
|
||||
File infoPlistFile;
|
||||
|
||||
struct SourceFileInfo
|
||||
|
|
@ -1055,7 +1055,7 @@ public:
|
|||
jassert (xcodeFileType.isNotEmpty());
|
||||
jassert (xcodeBundleExtension.isEmpty() || xcodeBundleExtension.startsWithChar ('.'));
|
||||
|
||||
if (ProjectExporter::BuildConfiguration::Ptr config = owner.getConfiguration(0))
|
||||
if (ProjectExporter::BuildConfiguration::Ptr config = owner.getConfiguration (0))
|
||||
{
|
||||
auto productName = owner.replacePreprocessorTokens (*config, config->getTargetBinaryNameString (type == UnityPlugIn));
|
||||
|
||||
|
|
@ -1081,24 +1081,42 @@ public:
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
void addDependency()
|
||||
String addDependencyFor (const XcodeTarget& dependentTarget)
|
||||
{
|
||||
jassert (dependencyID.isEmpty());
|
||||
|
||||
dependencyID = owner.createID (String ("__dependency") + getName());
|
||||
auto dependencyID = owner.createID (String ("__dependency") + getName() + dependentTarget.getName());
|
||||
auto* v = new ValueTree (dependencyID);
|
||||
|
||||
v->setProperty ("isa", "PBXTargetDependency", nullptr);
|
||||
v->setProperty ("target", getID(), nullptr);
|
||||
|
||||
owner.misc.add (v);
|
||||
owner.pbxTargetDependencies.add (v);
|
||||
return dependencyID;
|
||||
}
|
||||
|
||||
String getDependencyID() const
|
||||
void addDependencies()
|
||||
{
|
||||
jassert (dependencyID.isNotEmpty());
|
||||
if (! owner.project.isAudioPluginProject())
|
||||
return;
|
||||
|
||||
return dependencyID;
|
||||
if (type == XcodeTarget::StandalonePlugIn) // depends on AUv3 and shared code
|
||||
{
|
||||
if (auto* auv3Target = owner.getTargetOfType (XcodeTarget::AudioUnitv3PlugIn))
|
||||
dependencyIDs.add (auv3Target->addDependencyFor (*this));
|
||||
|
||||
if (auto* sharedCodeTarget = owner.getTargetOfType (XcodeTarget::SharedCodeTarget))
|
||||
dependencyIDs.add (sharedCodeTarget->addDependencyFor (*this));
|
||||
}
|
||||
else if (type == XcodeTarget::AggregateTarget) // depends on all other targets
|
||||
{
|
||||
for (auto* target : owner.targets)
|
||||
if (target->type != XcodeTarget::AggregateTarget)
|
||||
dependencyIDs.add (target->addDependencyFor (*this));
|
||||
}
|
||||
else if (type != XcodeTarget::SharedCodeTarget) // shared code doesn't depend on anything; all other targets depend only on the shared code
|
||||
{
|
||||
if (auto* sharedCodeTarget = owner.getTargetOfType (XcodeTarget::SharedCodeTarget))
|
||||
dependencyIDs.add (sharedCodeTarget->addDependencyFor (*this));
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -1802,7 +1820,7 @@ private:
|
|||
bool xcodeCanUseDwarf;
|
||||
OwnedArray<XcodeTarget> targets;
|
||||
|
||||
mutable OwnedArray<ValueTree> pbxBuildFiles, pbxFileReferences, pbxGroups, misc, projectConfigs, targetConfigs;
|
||||
mutable OwnedArray<ValueTree> pbxBuildFiles, pbxFileReferences, pbxGroups, pbxTargetDependencies, misc, projectConfigs, targetConfigs;
|
||||
mutable StringArray resourceIDs, sourceIDs, targetIDs;
|
||||
mutable StringArray frameworkFileIDs, embeddedFrameworkIDs, rezFileIDs, resourceFileRefs, subprojectFileIDs;
|
||||
mutable Array<std::pair<String, String>> subprojectReferences;
|
||||
|
|
@ -1903,6 +1921,8 @@ private:
|
|||
{
|
||||
for (auto* target : targets)
|
||||
{
|
||||
target->addDependencies();
|
||||
|
||||
if (target->type == XcodeTarget::AggregateTarget)
|
||||
continue;
|
||||
|
||||
|
|
@ -1919,7 +1939,6 @@ private:
|
|||
target->mainBuildProductID = fileID;
|
||||
|
||||
pbxBuildFiles.add (v);
|
||||
target->addDependency();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2142,7 +2161,7 @@ private:
|
|||
v->setProperty ("buildPhases", indentParenthesisedList (target.buildPhaseIDs), nullptr);
|
||||
v->setProperty ("buildRules", "( )", nullptr);
|
||||
|
||||
v->setProperty ("dependencies", indentParenthesisedList (getTargetDependencies (target)), nullptr);
|
||||
v->setProperty ("dependencies", indentParenthesisedList (target.dependencyIDs), nullptr);
|
||||
v->setProperty (Ids::name, target.getXcodeSchemeName(), nullptr);
|
||||
|
||||
v->setProperty ("productName", projectName, nullptr);
|
||||
|
|
@ -2159,35 +2178,6 @@ private:
|
|||
misc.add (v);
|
||||
}
|
||||
|
||||
StringArray getTargetDependencies (const XcodeTarget& target) const
|
||||
{
|
||||
StringArray dependencies;
|
||||
|
||||
if (project.isAudioPluginProject())
|
||||
{
|
||||
if (target.type == XcodeTarget::StandalonePlugIn) // depends on AUv3 and shared code
|
||||
{
|
||||
if (auto* auv3Target = getTargetOfType (XcodeTarget::AudioUnitv3PlugIn))
|
||||
dependencies.add (auv3Target->getDependencyID());
|
||||
|
||||
if (auto* sharedCodeTarget = getTargetOfType (XcodeTarget::SharedCodeTarget))
|
||||
dependencies.add (sharedCodeTarget->getDependencyID());
|
||||
}
|
||||
else if (target.type == XcodeTarget::AggregateTarget) // depends on all other targets
|
||||
{
|
||||
for (int i = 1; i < targets.size(); ++i)
|
||||
dependencies.add (targets[i]->getDependencyID());
|
||||
}
|
||||
else if (target.type != XcodeTarget::SharedCodeTarget) // shared code doesn't depend on anything; all other targets depend only on the shared code
|
||||
{
|
||||
if (auto* sharedCodeTarget = getTargetOfType (XcodeTarget::SharedCodeTarget))
|
||||
dependencies.add (sharedCodeTarget->getDependencyID());
|
||||
}
|
||||
}
|
||||
|
||||
return dependencies;
|
||||
}
|
||||
|
||||
void createIconFile() const
|
||||
{
|
||||
const auto icons = getIcons();
|
||||
|
|
@ -2588,6 +2578,7 @@ private:
|
|||
objects.addArray (pbxBuildFiles);
|
||||
objects.addArray (pbxFileReferences);
|
||||
objects.addArray (pbxGroups);
|
||||
objects.addArray (pbxTargetDependencies);
|
||||
objects.addArray (targetConfigs);
|
||||
objects.addArray (projectConfigs);
|
||||
objects.addArray (misc);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue