From 5a2830648c6484a30b76fb1104eb61bf056e0cfa Mon Sep 17 00:00:00 2001 From: Marc-Andre Laperle Date: Sun, 25 Oct 2020 22:34:10 -0400 Subject: [PATCH] Bug 568224 - Support output parsing for /clang:-isystem when substituting cl for clang-cl Add /clang:-isystem. It's handled similarly to /imsvc but interestingly it doesn't support having spaces between the option name and it's value. Change-Id: Ic5d61df1c7adebbf707d93a60858e942354c9ed9 Signed-off-by: Marc-Andre Laperle --- .../tests/MSVCBuildCommandParserTests.java | 7 +++-- .../build/core/MSVCBuildCommandParser.java | 27 +++++++++---------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/windows/org.eclipse.cdt.msw.build.tests/src/org/eclipse/cdt/internal/msw/build/tests/MSVCBuildCommandParserTests.java b/windows/org.eclipse.cdt.msw.build.tests/src/org/eclipse/cdt/internal/msw/build/tests/MSVCBuildCommandParserTests.java index b0fd474150b..87e86fed4b1 100644 --- a/windows/org.eclipse.cdt.msw.build.tests/src/org/eclipse/cdt/internal/msw/build/tests/MSVCBuildCommandParserTests.java +++ b/windows/org.eclipse.cdt.msw.build.tests/src/org/eclipse/cdt/internal/msw/build/tests/MSVCBuildCommandParserTests.java @@ -231,7 +231,7 @@ public class MSVCBuildCommandParserTests { } /** - * Parse /imsvc (clang-cl) + * Parse /imsvc, /clang:isystem (clang-cl) */ @Test public void testCIncludePathEntry_ClangCLSystemIncludePaths() throws Exception { @@ -252,7 +252,8 @@ public class MSVCBuildCommandParserTests { parser.startup(cfgDescription, null); parser.processLine("cl" + " /imsvcC:\\path0 " + " /imsvc C:\\path1 " + " /imsvc\"C:\\path with spaces\"" + " /imsvc\"C:\\backslash at end\\\\\"" + " /imsvc\"..\\..\\relative\"" - + " /imsvc\"..\\..\\relative with spaces\"" + " file.cpp"); + + " /imsvc\"..\\..\\relative with spaces\"" + " /clang:-isystemC:\\path2 " + + " /clang:-isystem\"C:\\path with spaces2\"" + " file.cpp"); parser.shutdown(); // check populated entries @@ -273,6 +274,8 @@ public class MSVCBuildCommandParserTests { assertEquals( new CIncludePathEntry(project.getLocation().removeLastSegments(2).append("relative with spaces"), 0), entries.get(5)); + assertEquals(new CIncludePathEntry("C:/path2", 0), entries.get(6)); + assertEquals(new CIncludePathEntry("C:/path with spaces2", 0), entries.get(7)); } /** diff --git a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/core/MSVCBuildCommandParser.java b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/core/MSVCBuildCommandParser.java index d45314ee0e6..6b63ed8b70e 100644 --- a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/core/MSVCBuildCommandParser.java +++ b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/core/MSVCBuildCommandParser.java @@ -81,19 +81,6 @@ public class MSVCBuildCommandParser extends AbstractBuildCommandParser implement } } - // TODO: Should these be considered "built-in" entries (ICSettingEntry.BUILTIN)? - private static class ClangCLMSVCSystemPathOptionParser extends IncludePathOptionParser { - - public ClangCLMSVCSystemPathOptionParser(String pattern, String nameExpression) { - super(pattern, nameExpression); - } - - @Override - public ICLanguageSettingEntry createEntry(String name, String value, int flag) { - return super.createEntry(name, unescapeString(value), flag); - } - } - @SuppressWarnings("nls") static final AbstractOptionParser[] includeOptionParsers = { new MSVCIncludePathOptionParser("(-|/)I\\s*\"(.*)\"", "$2"), @@ -106,8 +93,13 @@ public class MSVCBuildCommandParser extends AbstractBuildCommandParser implement @SuppressWarnings("nls") static final AbstractOptionParser[] msvcIncludeOptionParsers = { - new ClangCLMSVCSystemPathOptionParser("(-|/)imsvc\\s*\"(.*)\"", "$2"), - new ClangCLMSVCSystemPathOptionParser("(-|/)imsvc\\s*([^\\s\"]*)", "$2"), }; + new MSVCIncludePathOptionParser("(-|/)imsvc\\s*\"(.*)\"", "$2"), + new MSVCIncludePathOptionParser("(-|/)imsvc\\s*([^\\s\"]*)", "$2"), }; + + @SuppressWarnings("nls") + static final AbstractOptionParser[] clangISystemIncludeOptionParsers = { + new MSVCIncludePathOptionParser("(-|/)clang:-isystem\"(.*)\"", "$2"), + new MSVCIncludePathOptionParser("(-|/)clang:-isystem([^\\s\"]*)", "$2"), }; @SuppressWarnings("nls") static final AbstractOptionParser[] defineOptionParsers = { @@ -136,6 +128,7 @@ public class MSVCBuildCommandParser extends AbstractBuildCommandParser implement List parsers = new ArrayList<>(Arrays.asList(includeOptionParsers)); Collections.addAll(parsers, defineOptionParsers); Collections.addAll(parsers, msvcIncludeOptionParsers); + Collections.addAll(parsers, clangISystemIncludeOptionParsers); Collections.addAll(parsers, forceIncludeOptionParsers); Collections.addAll(parsers, undefineOptionParsers); @@ -197,6 +190,10 @@ public class MSVCBuildCommandParser extends AbstractBuildCommandParser implement return msvcIncludeOptionParsers; } + if (optionName.startsWith("clang")) { + return clangISystemIncludeOptionParsers; + } + if (optionName.startsWith("FI")) { return forceIncludeOptionParsers; }