Skip to content

Commit

Permalink
Add a new resolver modifier to be able to escape xml characters
Browse files Browse the repository at this point in the history
Now using this in appropriate places where we write defines to project files.

This way we can put < and > in defines.
For example:
imGuiUserConfig = "IMGUI_USER_CONFIG=<imconfig_projectspecific.h>";
conf.Defines.Add(imGuiUserConfig);
  • Loading branch information
jspelletier committed Nov 3, 2023
1 parent 25dbd5a commit 9dbdf44
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 8 deletions.
Expand Up @@ -79,7 +79,7 @@ public sealed partial class AndroidPlatform
<PrecompiledHeader>[options.UsePrecompiledHeader]</PrecompiledHeader>
<WarningLevel>[options.WarningLevel]</WarningLevel>
<Optimization>[options.Optimization]</Optimization>
<PreprocessorDefinitions>[options.PreprocessorDefinitions];%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>[EscapeXML:options.PreprocessorDefinitions];%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>[options.AdditionalIncludeDirectories];%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat>[options.DebugInformationFormat]</DebugInformationFormat>
<TreatWarningAsError>[options.TreatWarningAsError]</TreatWarningAsError>
Expand Down
Expand Up @@ -79,7 +79,7 @@ public sealed partial class AndroidAgdePlatform
<PrecompiledHeader>[options.UsePrecompiledHeader]</PrecompiledHeader>
<WarningLevel>[options.WarningLevel]</WarningLevel>
<Optimization>[options.Optimization]</Optimization>
<PreprocessorDefinitions>[options.PreprocessorDefinitions];%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>[EscapeXML:options.PreprocessorDefinitions];%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>[options.AdditionalIncludeDirectories];%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<ClangDebugInformationFormat>[options.ClangDebugInformationFormat]</ClangDebugInformationFormat>
<LimitDebugInfo>[options.LimitDebugInfo]</LimitDebugInfo>
Expand Down
Expand Up @@ -7,7 +7,7 @@ public abstract partial class BaseMicrosoftPlatform
{
private const string _projectConfigurationsMasmTemplate =
@" <MASM>
<PreprocessorDefinitions>[options.PreprocessorDefinitions];%(PreprocessorDefinitions);$(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>[EscapeXML:options.PreprocessorDefinitions];%(PreprocessorDefinitions);$(PreprocessorDefinitions)</PreprocessorDefinitions>
<IncludePaths>[options.AdditionalAssemblyIncludeDirectories]</IncludePaths>
</MASM>
";
Expand Down
Expand Up @@ -14,7 +14,7 @@ public abstract partial class BasePlatform
<ExternalWarningLevel>[options.ExternalWarningLevel]</ExternalWarningLevel>
<ExternalTemplatesDiagnostics>[options.ExternalTemplatesDiagnostics]</ExternalTemplatesDiagnostics>
<Optimization>[options.Optimization]</Optimization>
<PreprocessorDefinitions>[options.PreprocessorDefinitions];%(PreprocessorDefinitions);$(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>[EscapeXML:options.PreprocessorDefinitions];%(PreprocessorDefinitions);$(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>[options.AdditionalIncludeDirectories]</AdditionalIncludeDirectories>
<AdditionalUsingDirectories>[options.AdditionalUsingDirectories]</AdditionalUsingDirectories>
<DebugInformationFormat>[options.DebugInformationFormat]</DebugInformationFormat>
Expand Down Expand Up @@ -267,7 +267,7 @@ public abstract partial class BasePlatform
del ""[options.OutputDirectory]\[conf.TargetFileFullName].lib"" &gt;NUL 2&gt;NUL
del ""[options.OutputDirectory]\[conf.TargetFileFullName].pdb"" &gt;NUL 2&gt;NUL</NMakeCleanCommandLine>
<NMakeOutput>[options.OutputFile]</NMakeOutput>
<NMakePreprocessorDefinitions>[options.PreprocessorDefinitions]</NMakePreprocessorDefinitions>
<NMakePreprocessorDefinitions>[EscapeXML:options.PreprocessorDefinitions]</NMakePreprocessorDefinitions>
<NMakeIncludeSearchPath>[options.AdditionalIncludeDirectories]</NMakeIncludeSearchPath>
<NMakeForcedIncludes>[options.ForcedIncludeFiles]</NMakeForcedIncludes>
<AdditionalOptions>[options.AdditionalOptions]</AdditionalOptions>
Expand All @@ -282,7 +282,7 @@ public abstract partial class BasePlatform
<NMakeReBuildCommandLine>[conf.CustomBuildSettings.RebuildCommand]</NMakeReBuildCommandLine>
<NMakeCleanCommandLine>[conf.CustomBuildSettings.CleanCommand]</NMakeCleanCommandLine>
<NMakeOutput>[conf.CustomBuildSettings.OutputFile]</NMakeOutput>
<NMakePreprocessorDefinitions>[options.PreprocessorDefinitions]</NMakePreprocessorDefinitions>
<NMakePreprocessorDefinitions>[EscapeXML:options.PreprocessorDefinitions]</NMakePreprocessorDefinitions>
<NMakeIncludeSearchPath>[options.AdditionalIncludeDirectories]</NMakeIncludeSearchPath>
<NMakeForcedIncludes>[options.ForcedIncludeFiles]</NMakeForcedIncludes>
<AdditionalOptions>[options.AdditionalOptions]</AdditionalOptions>
Expand Down
Expand Up @@ -13,7 +13,7 @@ public sealed partial class LinuxPlatform
private const string _projectConfigurationsCompileTemplate =
@" <ClCompile>
<PrecompiledHeader>[options.UsePrecompiledHeader]</PrecompiledHeader>
<PreprocessorDefinitions>[options.PreprocessorDefinitions];%(PreprocessorDefinitions);</PreprocessorDefinitions>
<PreprocessorDefinitions>[EscapeXML:options.PreprocessorDefinitions];%(PreprocessorDefinitions);</PreprocessorDefinitions>
<ForcedIncludeFiles>[options.ForcedIncludeFiles]</ForcedIncludeFiles>
<DebugInformationFormat>[options.DebugInformationFormat]</DebugInformationFormat>
<Warnings>[options.Warnings]</Warnings>
Expand Down
15 changes: 15 additions & 0 deletions Sharpmake.UnitTests/ResolverTest.cs
Expand Up @@ -286,6 +286,21 @@ public void CanResolveStringsToLower()
Assert.That(obj.Value2, Is.EqualTo("propertyclass"));
Assert.That(obj.Value3, Is.EqualTo("propertyclass"));
}

[Test]
public void CanResolveStringsEscape()
{
var obj = new PropertyClass();
obj.Value1 = "<stuff>";

string someTemplate = @"<Field>[EscapeXML:obj.Value1]</Field>";

var resolver = new Resolver();
resolver.SetParameter("obj", obj);
string result = resolver.Resolve(someTemplate);

Assert.AreEqual("<Field>&lt;stuff&gt;</Field>", result);
}
}
}

5 changes: 4 additions & 1 deletion Sharpmake/Resolver.cs
Expand Up @@ -594,7 +594,8 @@ public NotFoundException(string message, IEnumerable<string> arguments = null)
private enum PropertyModifier
{
None,
Lower
Lower,
EscapeXML
}

private static readonly char[] s_modifierNameSplitter = new[] { ':' };
Expand Down Expand Up @@ -626,6 +627,8 @@ private static string ApplyModifier(PropertyModifier modifier, string input)
return input;
case PropertyModifier.Lower:
return input.ToLowerInvariant();
case PropertyModifier.EscapeXML:
return Util.EscapeXml(input);
default:
throw new NotSupportedException($"Don't know how to apply modifier {modifier} to '{input}'");
}
Expand Down

0 comments on commit 9dbdf44

Please sign in to comment.