Skip to content

Commit 387b398

Browse files
committed
The last definition of CharacterSet must win
1 parent 0e7860c commit 387b398

2 files changed

Lines changed: 11 additions & 3 deletions

File tree

lib/importproject.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -905,14 +905,17 @@ bool ImportProject::importVcxproj(const std::string &filename, const tinyxml2::X
905905
fs.defines += ";__AVX512__";
906906
additionalIncludePaths += ';' + i.additionalIncludePaths;
907907
}
908+
bool useUnicode = false;
908909
for (const ConfigurationPropertyGroup &c : configurationPropertyGroups) {
909910
if (!c.conditionIsTrue(p))
910911
continue;
911-
if (c.useUnicode) {
912-
fs.defines += ";UNICODE=1;_UNICODE=1";
913-
}
912+
// in msbuild the last definition wins
913+
useUnicode = c.useUnicode;
914914
fs.useMfc = c.useOfMfc;
915915
}
916+
if (useUnicode){
917+
fs.defines += ";UNICODE=1;_UNICODE=1";
918+
}
916919
fsSetDefines(fs, fs.defines);
917920
fsSetIncludePaths(fs, Path::getPathFromFilename(filename), toStringList(includePath + ';' + additionalIncludePaths), variables);
918921
for (const auto &path : sharedItemsIncludePaths) {

test/testimportproject.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,10 @@ class TestImportProject : public TestFixture {
474474
<Platform>Win32</Platform>
475475
</ProjectConfiguration>
476476
</ItemGroup>
477+
<PropertyGroup Label="Configuration">
478+
<!-- Only to test that the last configuration entry overwrites this -->
479+
<CharacterSet>Unicode</CharacterSet>
480+
</PropertyGroup>
477481
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
478482
<ConfigurationType>Application</ConfigurationType>
479483
<UseDebugLibraries>true</UseDebugLibraries>
@@ -501,6 +505,7 @@ class TestImportProject : public TestFixture {
501505
ASSERT_EQUALS(project.fileSettings.size(), 2);
502506
ASSERT(project.fileSettings.front().defines.find(";UNICODE=1;") != std::string::npos);
503507
ASSERT(project.fileSettings.front().defines.find(";_UNICODE=1") != std::string::npos);
508+
ASSERT(project.fileSettings.front().defines.find(";_UNICODE=1;") == std::string::npos); // No duplicates
504509
ASSERT_EQUALS(project.fileSettings.front().useMfc, false);
505510
ASSERT(project.fileSettings.back().defines.find(";UNICODE=1;") == std::string::npos);
506511
ASSERT(project.fileSettings.back().defines.find(";_UNICODE=1") == std::string::npos);

0 commit comments

Comments
 (0)