Skip to content

Commit 825b2ec

Browse files
authored
MSBuild .LOG support of Visual Studio 2022: Platform toolset v143 (#2523)
close #2491
1 parent 1345a4d commit 825b2ec

File tree

4 files changed

+137
-3
lines changed

4 files changed

+137
-3
lines changed

cxx-squid/src/main/java/org/sonar/cxx/config/MsBuild.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public class MsBuild {
6767
private static final Pattern PATH_TO_VCXPROJ = Pattern.compile(
6868
"^\\S+\\s\\\"ClCompile\\\".+\\\"((?>[^\\\\]{1,260}\\\\)*[^\\\\]{1,260}\\.vcxproj)\\\".*$");
6969

70-
private String platformToolset = "V142";
70+
private String platformToolset = "V143";
7171
private String platform = "Win32";
7272

7373
private final CxxSquidConfiguration squidConfig;
@@ -123,8 +123,8 @@ public void parse(File buildLog, String baseDir, String encodingName) {
123123
LOG.info("Processing MsBuild log '{}', Encoding= '{}'", buildLog.getName(), encodingName);
124124

125125
var detectedPlatform = false;
126-
try (var br = new BufferedReader(new InputStreamReader(java.nio.file.Files.newInputStream(buildLog.toPath()),
127-
encodingName))) {
126+
try ( var br = new BufferedReader(new InputStreamReader(java.nio.file.Files.newInputStream(buildLog.toPath()),
127+
encodingName))) {
128128
String line;
129129
LOG.debug("build log parser baseDir='{}'", baseDir);
130130
var currentProjectPath = Path.of(baseDir);
@@ -278,6 +278,9 @@ private void parseVCppCompilerCLLine(String line, String projectPath, String fil
278278
case "V142":
279279
parseV142CompilerOptions(line, fileElement);
280280
break;
281+
case "V143":
282+
parseV143CompilerOptions(line, fileElement);
283+
break;
281284
default:
282285
// do nothing
283286
}
@@ -619,4 +622,17 @@ private void parseV142CompilerOptions(String line, String fileElement) {
619622
addMacro("_ATL_VER=0x0E00", fileElement);
620623
}
621624

625+
void parseV143CompilerOptions(String line, String fileElement) {
626+
// Visual Studio 2022 RTW (17.5)
627+
addMacro("__cplusplus=201402L", fileElement); // C++14
628+
// __cplusplus_winrt Defined when you use the /ZW option to compile. The value of __cplusplus_winrt is 201009.
629+
if (line.contains("/ZW ")) {
630+
addMacro("__cplusplus_winrt=201009", fileElement);
631+
}
632+
addMacro("_MSC_VER=1935", fileElement);
633+
addMacro("_MSC_FULL_VER=193532215", fileElement);
634+
addMacro("_MFC_VER=0x0E00", fileElement);
635+
addMacro("_ATL_VER=0x0E00", fileElement);
636+
}
637+
622638
}

cxx-squid/src/test/java/org/sonar/cxx/config/CxxSquidConfigurationTest.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -663,6 +663,48 @@ void shouldHandleSpecificV141x64OptionsCorrectly() {
663663
softly.assertAll();
664664
}
665665

666+
@Test
667+
void shouldHandleSpecificV143x86OptionsCorrectly() {
668+
var squidConfig = new CxxSquidConfiguration(".");
669+
var files = new ArrayList<File>();
670+
files.add(new File("src/test/resources/msbuild/platformToolsetv143x86.txt"));
671+
squidConfig.readMsBuildFiles(files, VC_CHARSET);
672+
673+
var softly = new SoftAssertions();
674+
softly.assertThat(getIncludeDirectories(squidConfig)).isEmpty();
675+
List<String> defines = getDefines(squidConfig);
676+
assertThat(defines).hasSize(15 + 12);
677+
ValidateDefaultAsserts(softly, defines);
678+
softly.assertThat(defines).contains("_M_IX86 600");
679+
softly.assertThat(defines).contains("__cplusplus 201402L");
680+
softly.assertThat(defines).contains("_MSC_VER 1935");
681+
softly.assertThat(defines).contains("_MSC_FULL_VER 193532215");
682+
// check atldef.h for _ATL_VER
683+
softly.assertThat(defines).contains("_ATL_VER 0x0E00");
684+
softly.assertAll();
685+
}
686+
687+
@Test
688+
void shouldHandleSpecificV143x64OptionsCorrectly() {
689+
var squidConfig = new CxxSquidConfiguration(".");
690+
var files = new ArrayList<File>();
691+
files.add(new File("src/test/resources/msbuild/platformToolsetv143x64.txt"));
692+
squidConfig.readMsBuildFiles(files, VC_CHARSET);
693+
694+
var softly = new SoftAssertions();
695+
softly.assertThat(getIncludeDirectories(squidConfig)).isEmpty();
696+
List<String> defines = getDefines(squidConfig);
697+
assertThat(defines).hasSize(15 + 14);
698+
ValidateDefaultAsserts(softly, defines);
699+
softly.assertThat(defines.contains("_M_IX86 600")).isFalse();
700+
softly.assertThat(defines).contains("__cplusplus 201402L");
701+
softly.assertThat(defines).contains("_MSC_VER 1935");
702+
softly.assertThat(defines).contains("_MSC_FULL_VER 193532215");
703+
// check atldef.h for _ATL_VER
704+
softly.assertThat(defines).contains("_ATL_VER 0x0E00");
705+
softly.assertAll();
706+
}
707+
666708
@Test
667709
void shouldHandleBuildLog() {
668710
var squidConfig = new CxxSquidConfiguration(".");
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
Build started 11/20/2016 10:00:15 AM.
2+
Project "C:\visual studio 2022\Projects\test_VS2022\test_VS2022.sln" on node 1 (rebuild target(s)).
3+
ValidateSolutionConfiguration:
4+
Building solution configuration "Release|x64".
5+
Project "C:\visual studio 2022\Projects\test_VS2022\test_VS2022.sln" (1) is building "C:\visual studio 2022\Projects\test_VS2022\test_VS2022\test_VS2022.vcxproj" (2) on node 1 (Rebuild target(s)).
6+
_PrepareForClean:
7+
Deleting file "x64\Release\test_VS2022.tlog\test_VS2022.lastbuildstate".
8+
InitializeBuildStatus:
9+
Touching "x64\Release\test_VS2022.tlog\unsuccessfulbuild".
10+
ClCompile:
11+
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\bin\Hostx64\x64\CL.exe /c /Zi /nologo /W3 /WX- /diagnostics:classic /O2 /Oi /GL /D NDEBUG /D _CONSOLE /D _UNICODE /D UNICODE /D _AFXDLL /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Yc"stdafx.h" /Fp"x64\Release\test_VS2022.pch" /Fo"x64\Release\\" /Fd"x64\Release\vc141.pdb" /Gd /TP /errorReport:queue stdafx.cpp
12+
stdafx.cpp
13+
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\bin\Hostx64\x64\CL.exe /c /Zi /nologo /W3 /WX- /diagnostics:classic /O2 /Oi /GL /D NDEBUG /D _CONSOLE /D _UNICODE /D UNICODE /D _AFXDLL /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Yu"stdafx.h" /Fp"x64\Release\test_VS2022.pch" /Fo"x64\Release\\" /Fd"x64\Release\vc141.pdb" /Gd /TP /errorReport:queue test_VS2022.cpp
14+
test_VS2022.cpp
15+
ResourceCompile:
16+
C:\Program Files (x86)\Windows Kits\10\bin\x86\rc.exe /D _UNICODE /D UNICODE /D _AFXDLL /l"0x0409" /nologo /fo"x64\Release\test_VS2022.res" test_VS2022.rc
17+
Link:
18+
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\bin\Hostx64\x64\link.exe /ERRORREPORT:QUEUE /OUT:"C:\visual studio 2022\Projects\test_VS2022\x64\Release\test_VS2022.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /manifestinput:"C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\\Common7\IDE\VC\VCTargets\..\..\..\..\VC\Tools\MSVC\14.10.24629\Include\Manifest\dpiaware.manifest" /DEBUG /PDB:"C:\visual studio 2022\Projects\test_VS2022\x64\Release\test_VS2022.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG:incremental /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\visual studio 2022\Projects\test_VS2022\x64\Release\test_VS2022.lib" /MACHINE:X64 x64\Release\test_VS2022.res
19+
x64\Release\stdafx.obj
20+
x64\Release\test_VS2022.obj
21+
Generating code
22+
All 118 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
23+
Finished generating code
24+
test_VS2022.vcxproj -> C:\visual studio 2022\Projects\test_VS2022\x64\Release\test_VS2022.exe
25+
test_VS2022.vcxproj -> C:\visual studio 2022\Projects\test_VS2022\x64\Release\test_VS2022.pdb (Full PDB)
26+
FinalizeBuildStatus:
27+
Deleting file "x64\Release\test_VS2022.tlog\unsuccessfulbuild".
28+
Touching "x64\Release\test_VS2022.tlog\test_VS2022.lastbuildstate".
29+
Done Building Project "C:\visual studio 2022\Projects\test_VS2022\test_VS2022\test_VS2022.vcxproj" (Rebuild target(s)).
30+
31+
Done Building Project "C:\visual studio 2022\Projects\test_VS2022\test_VS2022.sln" (rebuild target(s)).
32+
33+
34+
Build succeeded.
35+
0 Warning(s)
36+
0 Error(s)
37+
38+
Time Elapsed 00:00:11.23
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
Build started 11/20/2016 10:18:33 AM.
2+
Project "C:\visual studio 2022\Projects\test_VS2022\test_VS2022.sln" on node 1 (rebuild target(s)).
3+
ValidateSolutionConfiguration:
4+
Building solution configuration "Release|Win32".
5+
Project "C:\visual studio 2022\Projects\test_VS2022\test_VS2022.sln" (1) is building "C:\visual studio 2022\Projects\test_VS2022\test_VS2022\test_VS2022.vcxproj" (2) on node 1 (Rebuild target(s)).
6+
_PrepareForClean:
7+
Deleting file "Release\test_VS2022.tlog\test_VS2022.lastbuildstate".
8+
InitializeBuildStatus:
9+
Creating "Release\test_VS2022.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
10+
ClCompile:
11+
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\bin\Hostx86\x86\CL.exe /c /Zi /nologo /W4 /WX- /diagnostics:classic /O2 /Oi /Oy- /GL /D WIN32 /D NDEBUG /D _CONSOLE /D _UNICODE /D UNICODE /D _AFXDLL /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Yc"stdafx.h" /Fp"Release\test_VS2022.pch" /Fo"Release\\" /Fd"Release\vc141.pdb" /Gd /TP /analyze- /errorReport:queue stdafx.cpp
12+
stdafx.cpp
13+
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\bin\Hostx86\x86\CL.exe /c /Zi /nologo /W4 /WX- /diagnostics:classic /O2 /Oi /Oy- /GL /D WIN32 /D NDEBUG /D _CONSOLE /D _UNICODE /D UNICODE /D _AFXDLL /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Yu"stdafx.h" /Fp"Release\test_VS2022.pch" /Fo"Release\\" /Fd"Release\vc141.pdb" /Gd /TP /analyze- /errorReport:queue test_VS2022.cpp
14+
test_VS2022.cpp
15+
ResourceCompile:
16+
C:\Program Files (x86)\Windows Kits\10\bin\x86\rc.exe /D _UNICODE /D UNICODE /D _AFXDLL /l"0x0409" /nologo /fo"Release\test_VS2022.res" test_VS2022.rc
17+
Link:
18+
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\bin\Hostx86\x86\link.exe /ERRORREPORT:QUEUE /OUT:"C:\visual studio 2022\Projects\test_VS2022\Release\test_VS2022.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /manifestinput:"C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\\Common7\IDE\VC\VCTargets\..\..\..\..\VC\Tools\MSVC\14.10.24629\Include\Manifest\dpiaware.manifest" /DEBUG /PDB:"C:\visual studio 2022\Projects\test_VS2022\Release\test_VS2022.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG:incremental /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\visual studio 2022\Projects\test_VS2022\Release\test_VS2022.lib" /MACHINE:X86 /SAFESEH Release\test_VS2022.res
19+
Release\stdafx.obj
20+
Release\test_VS2022.obj
21+
Generating code
22+
All 118 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
23+
Finished generating code
24+
test_VS2022.vcxproj -> C:\visual studio 2022\Projects\test_VS2022\Release\test_VS2022.exe
25+
test_VS2022.vcxproj -> C:\visual studio 2022\Projects\test_VS2022\Release\test_VS2022.pdb (Full PDB)
26+
FinalizeBuildStatus:
27+
Deleting file "Release\test_VS2022.tlog\unsuccessfulbuild".
28+
Touching "Release\test_VS2022.tlog\test_VS2022.lastbuildstate".
29+
Done Building Project "C:\visual studio 2022\Projects\test_VS2022\test_VS2022\test_VS2022.vcxproj" (Rebuild target(s)).
30+
31+
Done Building Project "C:\visual studio 2022\Projects\test_VS2022\test_VS2022.sln" (rebuild target(s)).
32+
33+
34+
Build succeeded.
35+
0 Warning(s)
36+
0 Error(s)
37+
38+
Time Elapsed 00:00:06.30

0 commit comments

Comments
 (0)