Browse Source

Projucer: Create unique dependency nodes for each plug-in target

tags/2021-05-28
ed 5 years ago
parent
commit
38c784221e
1 changed files with 34 additions and 43 deletions
  1. +34
    -43
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h

+ 34
- 43
extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h View File

@@ -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…
Cancel
Save