1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 398353: Environment variables not evaluated in CDT GCC Builtin Compiler Settings

This commit is contained in:
Andrew Gvozdev 2013-06-29 10:58:09 -04:00
parent 310ad6c995
commit 1d28b9bce9
2 changed files with 41 additions and 0 deletions

View file

@ -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<String>() {{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<String>() {{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<String>() {{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<String>() {{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);
}
}
/**

View file

@ -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;
}