From 1d28b9bce994d9db5283096f09b029f763775909 Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Sat, 29 Jun 2013 10:58:09 -0400 Subject: [PATCH] Bug 398353: Environment variables not evaluated in CDT GCC Builtin Compiler Settings --- .../tests/GCCBuiltinSpecsDetectorTest.java | 32 +++++++++++++++++++ .../AbstractBuiltinSpecsDetector.java | 9 ++++++ 2 files changed, 41 insertions(+) diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/GCCBuiltinSpecsDetectorTest.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/GCCBuiltinSpecsDetectorTest.java index 6caaee1d3ae..8b2899ce615 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/GCCBuiltinSpecsDetectorTest.java +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/GCCBuiltinSpecsDetectorTest.java @@ -13,6 +13,8 @@ import java.util.ArrayList; import java.util.List; +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager; import org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.settings.model.CIncludePathEntry; @@ -102,6 +104,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase { } } { + // check ${COMMAND} and ${INPUTS} MockGCCBuiltinSpecsDetectorLocal detector = new MockGCCBuiltinSpecsDetectorLocal(); detector.setLanguageScope(new ArrayList() {{add(LANGUAGE_ID_C);}}); detector.setCommand("${COMMAND} -E -P -v -dD ${INPUTS}"); @@ -111,6 +114,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase { assertTrue(resolvedCommand.endsWith("spec.c")); } { + // check ${EXT} MockGCCBuiltinSpecsDetectorLocal detector = new MockGCCBuiltinSpecsDetectorLocal(); detector.setLanguageScope(new ArrayList() {{add(LANGUAGE_ID_C);}}); detector.setCommand("${COMMAND} -E -P -v -dD file.${EXT}"); @@ -119,6 +123,34 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase { assertTrue(resolvedCommand.startsWith("gcc -E -P -v -dD ")); assertTrue(resolvedCommand.endsWith("file.c")); } + { + // check expansion of environment variables + MockGCCBuiltinSpecsDetectorLocal detector = new MockGCCBuiltinSpecsDetectorLocal(); + detector.setLanguageScope(new ArrayList() {{add(LANGUAGE_ID_C);}}); + String command = "cmd --env1=${CWD} --env2=${OS}"; + detector.setCommand(command); + String resolvedCommand = detector.resolveCommand(LANGUAGE_ID_C); + + ICdtVariableManager varManager = CCorePlugin.getDefault().getCdtVariableManager(); + String expected = varManager.resolveValue(command, "", null, null); + // confirm that "expected" expanded + assertFalse(command.equals(expected)); + assertEquals(expected, resolvedCommand); + } + { + // check expansion of eclipse and MBS variables + MockGCCBuiltinSpecsDetectorLocal detector = new MockGCCBuiltinSpecsDetectorLocal(); + detector.setLanguageScope(new ArrayList() {{add(LANGUAGE_ID_C);}}); + String command = "cmd --eclipse-var=${workspace_loc} --mbs-var=${WorkspaceDirPath}"; + detector.setCommand(command); + String resolvedCommand = detector.resolveCommand(LANGUAGE_ID_C); + + ICdtVariableManager varManager = CCorePlugin.getDefault().getCdtVariableManager(); + String expected = varManager.resolveValue(command, "", null, null); + // confirm that "expected" expanded + assertFalse(command.equals(expected)); + assertEquals(expected, resolvedCommand); + } } /** diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java index 1b6377ee9ae..44ea02f5fd5 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java @@ -31,6 +31,7 @@ import org.eclipse.cdt.core.ICommandLauncher; import org.eclipse.cdt.core.IConsoleParser; import org.eclipse.cdt.core.IMarkerGenerator; import org.eclipse.cdt.core.ProblemMarkerInfo; +import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager; import org.eclipse.cdt.core.envvar.EnvironmentVariable; import org.eclipse.cdt.core.envvar.IEnvironmentVariable; import org.eclipse.cdt.core.envvar.IEnvironmentVariableManager; @@ -314,6 +315,14 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti if (specFileExt != null) cmd = cmd.replace(SPEC_EXT_MACRO, specFileExt); } + if (cmd.contains("${")) { //$NON-NLS-1$ + ICdtVariableManager varManager = CCorePlugin.getDefault().getCdtVariableManager(); + try { + cmd = varManager.resolveValue(cmd, "", null, currentCfgDescription); //$NON-NLS-1$ + } catch (Exception e) { + ManagedBuilderCorePlugin.log(e); + } + } } return cmd; }