1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Projucer: Fix an issue with per-file compiler flags not being respected

This commit is contained in:
hogliux 2022-10-26 09:56:45 +02:00
parent f2de0f12b0
commit b0bd31b3c2
8 changed files with 36 additions and 12 deletions

View file

@ -1723,7 +1723,8 @@ Value Project::Item::getShouldSkipPCHValue() { return state.getPr
bool Project::Item::shouldSkipPCH() const { return isModuleCode() || state [Ids::skipPCH]; }
Value Project::Item::getCompilerFlagSchemeValue() { return state.getPropertyAsValue (Ids::compilerFlagScheme, getUndoManager()); }
String Project::Item::getCompilerFlagSchemeString() const { return state [Ids::compilerFlagScheme]; }
String Project::Item::getCompilerFlagSchemeString() const { return state[Ids::compilerFlagScheme]; }
void Project::Item::setCompilerFlagScheme (const String& scheme)
{

View file

@ -1402,7 +1402,7 @@ private:
}
else
{
auto extraFlags = compilerFlagSchemesMap[projectItem.getCompilerFlagSchemeString()].get().toString();
auto extraFlags = getCompilerFlagsForProjectItem (projectItem);
if (extraFlags.isNotEmpty())
extraCompilerFlags.add ({ file, extraFlags });

View file

@ -761,7 +761,7 @@ private:
if (projectItem.shouldBeCompiled())
{
auto extraCompilerFlags = compilerFlagSchemesMap[projectItem.getCompilerFlagSchemeString()].get().toString();
auto extraCompilerFlags = getCompilerFlagsForProjectItem (projectItem);
if (extraCompilerFlags.isNotEmpty())
{

View file

@ -912,7 +912,7 @@ public:
if (projectItem.shouldBeCompiled())
{
auto extraCompilerFlags = owner.compilerFlagSchemesMap[projectItem.getCompilerFlagSchemeString()].get().toString();
auto extraCompilerFlags = getOwner().getCompilerFlagsForProjectItem (projectItem);
if (shouldAddBigobjFlag (path))
{

View file

@ -933,7 +933,7 @@ private:
if (shouldFileBeCompiledByDefault (f))
{
auto scheme = projectItem.getCompilerFlagSchemeString();
auto flags = compilerFlagSchemesMap[scheme].get().toString();
auto flags = getCompilerFlagsForProjectItem (projectItem);
if (scheme.isNotEmpty() && flags.isNotEmpty())
results.emplace_back (f, scheme);

View file

@ -3213,7 +3213,7 @@ private:
xcodeTarget = getTargetOfType (project.getTargetTypeFromFilePath (projectItem.getFile(), false));
return addFile (FileOptions().withRelativePath (path)
.withCompilerFlags (compilerFlagSchemesMap[projectItem.getCompilerFlagSchemeString()].get())
.withCompilerFlags (getCompilerFlagsForProjectItem (projectItem))
.withCompilationEnabled (projectItem.shouldBeCompiled())
.withAddToBinaryResourcesEnabled (projectItem.shouldBeAddedToBinaryResources())
.withAddToXcodeResourcesEnabled (projectItem.shouldBeAddedToXcodeResources())

View file

@ -507,6 +507,14 @@ String ProjectExporter::replacePreprocessorTokens (const ProjectExporter::BuildC
sourceString);
}
String ProjectExporter::getCompilerFlagsForProjectItem (const Project::Item& projectItem) const
{
if (auto buildConfigurationForFile = getBuildConfigurationWithName (projectItem.getCompilerFlagSchemeString()))
return buildConfigurationForFile->getAllCompilerFlagsString();
return {};
}
void ProjectExporter::copyMainGroupFromProject()
{
jassert (itemGroups.size() == 0);
@ -761,14 +769,26 @@ ProjectExporter::BuildConfiguration::Ptr ProjectExporter::getConfiguration (int
return createBuildConfig (getConfigurations().getChild (index));
}
bool ProjectExporter::hasConfigurationNamed (const String& nameToFind) const
std::optional<ValueTree> ProjectExporter::getConfigurationWithName (const String& nameToFind) const
{
auto configs = getConfigurations();
for (int i = configs.getNumChildren(); --i >= 0;)
if (configs.getChild(i) [Ids::name].toString() == nameToFind)
return true;
{
auto config = configs.getChild (i);
return false;
if (config[Ids::name].toString() == nameToFind)
return config;
}
return {};
}
ProjectExporter::BuildConfiguration::Ptr ProjectExporter::getBuildConfigurationWithName (const String& nameToFind) const
{
if (auto config = getConfigurationWithName (nameToFind))
return createBuildConfig (*config);
return nullptr;
}
String ProjectExporter::getUniqueConfigName (String nm) const
@ -780,7 +800,7 @@ String ProjectExporter::getUniqueConfigName (String nm) const
nameRoot = nameRoot.trim();
int suffix = 2;
while (hasConfigurationNamed (name))
while (getConfigurationWithName (name).has_value())
nm = nameRoot + " " + String (suffix++);
return nm;

View file

@ -319,7 +319,6 @@ public:
void addNewConfigurationFromExisting (const BuildConfiguration& configToCopy);
void addNewConfiguration (bool isDebugConfig);
bool hasConfigurationNamed (const String& name) const;
String getUniqueConfigName (String name) const;
String getExternalLibraryFlags (const BuildConfiguration& config) const;
@ -361,6 +360,8 @@ public:
int getNumConfigurations() const;
BuildConfiguration::Ptr getConfiguration (int index) const;
std::optional<ValueTree> getConfigurationWithName (const String& nameToFind) const;
BuildConfiguration::Ptr getBuildConfigurationWithName (const String& nameToFind) const;
ValueTree getConfigurations() const;
virtual void createDefaultConfigs();
@ -401,6 +402,8 @@ public:
return false;
}
String getCompilerFlagsForProjectItem (const Project::Item& projectItem) const;
protected:
//==============================================================================
String name;