From da2ab70baca92981904d29a00e5dbf4467fbb31b Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Fri, 12 Aug 2011 20:14:08 -0400 Subject: [PATCH] Account for compiler path --- .../GCCBuildCommandParserTest.java | 18 ++++++++++++++++++ .../AbstractBuildCommandParser.java | 7 ++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCBuildCommandParserTest.java b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCBuildCommandParserTest.java index 648577bcf3e..0804f98b93b 100644 --- a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCBuildCommandParserTest.java +++ b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCBuildCommandParserTest.java @@ -344,6 +344,9 @@ public class GCCBuildCommandParserTest extends TestCase { IFile file3=ResourceHelper.createFile(project, "file3.cpp"); IFile file4=ResourceHelper.createFile(project, "file4.cpp"); IFile file5=ResourceHelper.createFile(project, "file5.cpp"); + IFile file6=ResourceHelper.createFile(project, "file6.cpp"); + IFile file7=ResourceHelper.createFile(project, "file7.cpp"); + IFile file8=ResourceHelper.createFile(project, "file8.cpp"); ICLanguageSetting ls = cfgDescription.getLanguageSettingForFile(file1.getProjectRelativePath(), true); String languageId = ls.getLanguageId(); @@ -357,6 +360,9 @@ public class GCCBuildCommandParserTest extends TestCase { parser.processLine("g++ -I/path0 file3.cpp"); parser.processLine("c++ -I/path0 file4.cpp"); parser.processLine("\"gcc\" -I/path0 file5.cpp"); + parser.processLine("/absolute/path/gcc -I/path0 file6.cpp"); + parser.processLine(" \"/absolute/path/gcc\" -I/path0 file7.cpp"); + parser.processLine("../relative/path/gcc -I/path0 file8.cpp"); parser.shutdown(); // check populated entries @@ -381,6 +387,18 @@ public class GCCBuildCommandParserTest extends TestCase { List entries = parser.getSettingEntries(cfgDescription, file5, languageId); assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); } + { + List entries = parser.getSettingEntries(cfgDescription, file6, languageId); + assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + } + { + List entries = parser.getSettingEntries(cfgDescription, file7, languageId); + assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + } + { + List entries = parser.getSettingEntries(cfgDescription, file8, languageId); + assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + } } /** diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuildCommandParser.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuildCommandParser.java index 508410b6e4c..1f0fb9ad089 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuildCommandParser.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuildCommandParser.java @@ -26,6 +26,7 @@ import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; public abstract class AbstractBuildCommandParser extends AbstractLanguageSettingsOutputScanner implements ILanguageSettingsBuildOutputScanner { + private static final String LEADING_PATH_PATTERN = "\\S+[/\\\\]"; //$NON-NLS-1$ private static final Pattern OPTIONS_PATTERN = Pattern.compile("-[^\\s\"']*(\\s*((\".*?\")|('.*?')|([^-\\s][^\\s]+)))?"); //$NON-NLS-1$ private static final int OPTION_GROUP = 0; @@ -34,8 +35,8 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting */ @SuppressWarnings("nls") private static final String[] PATTERN_TEMPLATES = { - "\\s*\"?${COMPILER_PATTERN}\"?.*\\s" + "()([^'\"\\s]*\\.${EXTENSIONS_PATTERN})(\\s.*)?[\r\n]*", // compiling unquoted file - "\\s*\"?${COMPILER_PATTERN}\"?.*\\s" + "(['\"])(.*\\.${EXTENSIONS_PATTERN})\\${COMPILER_GROUPS+1}(\\s.*)?[\r\n]*" // compiling quoted file + "${COMPILER_PATTERN}.*\\s" + "()([^'\"\\s]*\\.${EXTENSIONS_PATTERN})(\\s.*)?[\r\n]*", // compiling unquoted file + "${COMPILER_PATTERN}.*\\s" + "(['\"])(.*\\.${EXTENSIONS_PATTERN})\\${COMPILER_GROUPS+1}(\\s.*)?[\r\n]*" // compiling quoted file }; private static final int FILE_GROUP = 2; @@ -43,7 +44,7 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting @SuppressWarnings("nls") private String getCompilerCommandPattern() { String parameter = getCustomParameter(); - return "(" + parameter + ")"; + return "\\s*\"?("+LEADING_PATH_PATTERN+")?(" + parameter + ")\"?"; } private int adjustFileGroup() {