mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
changes to address https://bugs.eclipse.org/bugs/show_bug.cgi?id=47241
This commit is contained in:
parent
d05969c443
commit
7750af19fa
3 changed files with 87 additions and 25 deletions
|
@ -10,6 +10,8 @@
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
package org.eclipse.cdt.make.core;
|
package org.eclipse.cdt.make.core;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
|
||||||
|
@ -49,4 +51,7 @@ public interface IMakeBuilderInfo {
|
||||||
|
|
||||||
String[] getErrorParsers();
|
String[] getErrorParsers();
|
||||||
void setErrorParsers(String[] parsers) throws CoreException;
|
void setErrorParsers(String[] parsers) throws CoreException;
|
||||||
|
|
||||||
|
Map getEnvironment();
|
||||||
|
void setEnvironment(Map env) throws CoreException;
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,6 +136,7 @@ public class MakeBuilder extends ACBuilder {
|
||||||
|
|
||||||
// Set the environmennt, some scripts may need the CWD var to be set.
|
// Set the environmennt, some scripts may need the CWD var to be set.
|
||||||
Properties props = launcher.getEnvironment();
|
Properties props = launcher.getEnvironment();
|
||||||
|
props.putAll(info.getEnvironment());
|
||||||
props.put("CWD", workingDirectory.toOSString()); //$NON-NLS-1$
|
props.put("CWD", workingDirectory.toOSString()); //$NON-NLS-1$
|
||||||
props.put("PWD", workingDirectory.toOSString()); //$NON-NLS-1$
|
props.put("PWD", workingDirectory.toOSString()); //$NON-NLS-1$
|
||||||
String[] env = null;
|
String[] env = null;
|
||||||
|
|
|
@ -11,9 +11,12 @@
|
||||||
package org.eclipse.cdt.make.internal.core;
|
package org.eclipse.cdt.make.internal.core;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.ErrorParserManager;
|
import org.eclipse.cdt.core.ErrorParserManager;
|
||||||
import org.eclipse.cdt.make.core.IMakeBuilderInfo;
|
import org.eclipse.cdt.make.core.IMakeBuilderInfo;
|
||||||
|
@ -47,11 +50,12 @@ public class BuildInfoFactory {
|
||||||
static final String BUILD_INCREMENTAL_ENABLED = PREFIX + ".enabledIncrementalBuild"; //$NON-NLS-1$
|
static final String BUILD_INCREMENTAL_ENABLED = PREFIX + ".enabledIncrementalBuild"; //$NON-NLS-1$
|
||||||
static final String BUILD_AUTO_ENABLED = PREFIX + ".enableAutoBuild"; //$NON-NLS-1$
|
static final String BUILD_AUTO_ENABLED = PREFIX + ".enableAutoBuild"; //$NON-NLS-1$
|
||||||
static final String BUILD_ARGUMENTS = PREFIX + ".buildArguments"; //$NON-NLS-1$
|
static final String BUILD_ARGUMENTS = PREFIX + ".buildArguments"; //$NON-NLS-1$
|
||||||
|
static final String ENVIRONMENT = PREFIX + ".environment"; //$NON-NLS-1$
|
||||||
|
|
||||||
private abstract static class Store implements IMakeBuilderInfo {
|
private abstract static class Store implements IMakeBuilderInfo {
|
||||||
|
|
||||||
public void setUseDefaultBuildCmd(boolean on) throws CoreException {
|
public void setUseDefaultBuildCmd(boolean on) throws CoreException {
|
||||||
putValue(USE_DEFAULT_BUILD_CMD, new Boolean(on).toString());
|
putString(USE_DEFAULT_BUILD_CMD, new Boolean(on).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isDefaultBuildCmd() {
|
public boolean isDefaultBuildCmd() {
|
||||||
|
@ -62,7 +66,7 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBuildCommand(IPath location) throws CoreException {
|
public void setBuildCommand(IPath location) throws CoreException {
|
||||||
putValue(BUILD_COMMAND, location.toString());
|
putString(BUILD_COMMAND, location.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public IPath getBuildCommand() {
|
public IPath getBuildCommand() {
|
||||||
|
@ -101,7 +105,7 @@ public class BuildInfoFactory {
|
||||||
protected abstract String getBuilderID();
|
protected abstract String getBuilderID();
|
||||||
|
|
||||||
public void setBuildLocation(IPath location) throws CoreException {
|
public void setBuildLocation(IPath location) throws CoreException {
|
||||||
putValue(BUILD_LOCATION, location.toString());
|
putString(BUILD_LOCATION, location.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public IPath getBuildLocation() {
|
public IPath getBuildLocation() {
|
||||||
|
@ -110,7 +114,7 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStopOnError(boolean enabled) throws CoreException {
|
public void setStopOnError(boolean enabled) throws CoreException {
|
||||||
putValue(STOP_ON_ERROR, new Boolean(enabled).toString());
|
putString(STOP_ON_ERROR, new Boolean(enabled).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isStopOnError() {
|
public boolean isStopOnError() {
|
||||||
|
@ -118,7 +122,7 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAutoBuildTarget(String target) throws CoreException {
|
public void setAutoBuildTarget(String target) throws CoreException {
|
||||||
putValue(BUILD_TARGET_AUTO, target);
|
putString(BUILD_TARGET_AUTO, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getAutoBuildTarget() {
|
public String getAutoBuildTarget() {
|
||||||
|
@ -126,7 +130,7 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setIncrementalBuildTarget(String target) throws CoreException {
|
public void setIncrementalBuildTarget(String target) throws CoreException {
|
||||||
putValue(BUILD_TARGET_INCREMENTAL, target);
|
putString(BUILD_TARGET_INCREMENTAL, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getIncrementalBuildTarget() {
|
public String getIncrementalBuildTarget() {
|
||||||
|
@ -134,7 +138,7 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFullBuildTarget(String target) throws CoreException {
|
public void setFullBuildTarget(String target) throws CoreException {
|
||||||
putValue(BUILD_TARGET_FULL, target);
|
putString(BUILD_TARGET_FULL, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getFullBuildTarget() {
|
public String getFullBuildTarget() {
|
||||||
|
@ -145,11 +149,11 @@ public class BuildInfoFactory {
|
||||||
return Boolean.valueOf(getString(property)).booleanValue();
|
return Boolean.valueOf(getString(property)).booleanValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void putValue(String name, String value) throws CoreException;
|
protected abstract void putString(String name, String value) throws CoreException;
|
||||||
public abstract String getString(String property);
|
protected abstract String getString(String property);
|
||||||
|
|
||||||
public void setAutoBuildEnable(boolean enabled) throws CoreException {
|
public void setAutoBuildEnable(boolean enabled) throws CoreException {
|
||||||
putValue(BUILD_AUTO_ENABLED, new Boolean(enabled).toString());
|
putString(BUILD_AUTO_ENABLED, new Boolean(enabled).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAutoBuildEnable() {
|
public boolean isAutoBuildEnable() {
|
||||||
|
@ -157,7 +161,7 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setIncrementalBuildEnable(boolean enabled) throws CoreException {
|
public void setIncrementalBuildEnable(boolean enabled) throws CoreException {
|
||||||
putValue(BUILD_INCREMENTAL_ENABLED, new Boolean(enabled).toString());
|
putString(BUILD_INCREMENTAL_ENABLED, new Boolean(enabled).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isIncrementalBuildEnabled() {
|
public boolean isIncrementalBuildEnabled() {
|
||||||
|
@ -165,7 +169,7 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFullBuildEnable(boolean enabled) throws CoreException {
|
public void setFullBuildEnable(boolean enabled) throws CoreException {
|
||||||
putValue(BUILD_FULL_ENABLED, new Boolean(enabled).toString());
|
putString(BUILD_FULL_ENABLED, new Boolean(enabled).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isFullBuildEnabled() {
|
public boolean isFullBuildEnabled() {
|
||||||
|
@ -177,7 +181,7 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBuildArguments(String args) throws CoreException {
|
public void setBuildArguments(String args) throws CoreException {
|
||||||
putValue(BUILD_ARGUMENTS, args);
|
putString(BUILD_ARGUMENTS, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] getErrorParsers() {
|
public String[] getErrorParsers() {
|
||||||
|
@ -198,7 +202,59 @@ public class BuildInfoFactory {
|
||||||
for (int i = 0; i < parsers.length; i++) {
|
for (int i = 0; i < parsers.length; i++) {
|
||||||
buf.append(parsers[i]).append(';');
|
buf.append(parsers[i]).append(';');
|
||||||
}
|
}
|
||||||
putValue(ErrorParserManager.PREF_ERROR_PARSER, buf.toString());
|
putString(ErrorParserManager.PREF_ERROR_PARSER, buf.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map getEnvironment() {
|
||||||
|
return decodeMap(getString(ENVIRONMENT));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnvironment(Map env) throws CoreException {
|
||||||
|
putString(ENVIRONMENT, encodeMap(env));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Map decodeMap(String value) {
|
||||||
|
Map map = new HashMap();
|
||||||
|
try {
|
||||||
|
while (value != null && value.length() > 0) {
|
||||||
|
int ndx = 0;
|
||||||
|
while (value.charAt(ndx) != '|' || (ndx != 0 && value.charAt(ndx - 1) == '\\')) {
|
||||||
|
ndx++;
|
||||||
|
}
|
||||||
|
StringBuffer line = new StringBuffer(value.substring(0, ndx));
|
||||||
|
int lndx = 0;
|
||||||
|
while (line.charAt(lndx) != '=' || (lndx != 0 && line.charAt(lndx - 1) == '\\')) {
|
||||||
|
lndx++;
|
||||||
|
}
|
||||||
|
map.put(line.substring(0, lndx), line.substring(lndx + 1));
|
||||||
|
value = value.substring(ndx+1);
|
||||||
|
}
|
||||||
|
} catch (StringIndexOutOfBoundsException e) {
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String encodeMap(Map values) {
|
||||||
|
StringBuffer str = new StringBuffer();
|
||||||
|
Iterator entries = values.entrySet().iterator();
|
||||||
|
while (entries.hasNext()) {
|
||||||
|
Entry entry = (Entry) entries.next();
|
||||||
|
str.append(escapeChars((String) entry.getKey(), "=|"));
|
||||||
|
str.append("=");
|
||||||
|
str.append(escapeChars((String) entry.getValue(), "=|)"));
|
||||||
|
str.append("|");
|
||||||
|
}
|
||||||
|
return str.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String escapeChars(String string, String escapeChars) {
|
||||||
|
StringBuffer str = new StringBuffer(string);
|
||||||
|
for(int i = 0; i < str.length(); i++) {
|
||||||
|
if ( escapeChars.indexOf(str.charAt(i)) != -1) {
|
||||||
|
str.insert(i-1, '\\');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return str.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,13 +263,13 @@ public class BuildInfoFactory {
|
||||||
private String builderID;
|
private String builderID;
|
||||||
private boolean useDefaults;
|
private boolean useDefaults;
|
||||||
|
|
||||||
public Preference(Preferences prefs, String builderID, boolean useDefaults) {
|
Preference(Preferences prefs, String builderID, boolean useDefaults) {
|
||||||
this.prefs = prefs;
|
this.prefs = prefs;
|
||||||
this.builderID = builderID;
|
this.builderID = builderID;
|
||||||
this.useDefaults = useDefaults;
|
this.useDefaults = useDefaults;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void putValue(String name, String value) {
|
protected void putString(String name, String value) {
|
||||||
if (useDefaults) {
|
if (useDefaults) {
|
||||||
prefs.setDefault(name, value);
|
prefs.setDefault(name, value);
|
||||||
} else {
|
} else {
|
||||||
|
@ -221,7 +277,7 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getString(String property) {
|
protected String getString(String property) {
|
||||||
if (useDefaults) {
|
if (useDefaults) {
|
||||||
return prefs.getDefaultString(property);
|
return prefs.getDefaultString(property);
|
||||||
}
|
}
|
||||||
|
@ -238,7 +294,7 @@ public class BuildInfoFactory {
|
||||||
private String builderID;
|
private String builderID;
|
||||||
private Map args;
|
private Map args;
|
||||||
|
|
||||||
public BuildProperty(IProject project, String builderID) throws CoreException {
|
BuildProperty(IProject project, String builderID) throws CoreException {
|
||||||
this.project = project;
|
this.project = project;
|
||||||
this.builderID = builderID;
|
this.builderID = builderID;
|
||||||
ICommand builder;
|
ICommand builder;
|
||||||
|
@ -249,7 +305,7 @@ public class BuildInfoFactory {
|
||||||
args = builder.getArguments();
|
args = builder.getArguments();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void putValue(String name, String value) throws CoreException {
|
protected void putString(String name, String value) throws CoreException {
|
||||||
String curValue = (String) args.get(name);
|
String curValue = (String) args.get(name);
|
||||||
if (curValue != null && curValue.equals(value)) {
|
if (curValue != null && curValue.equals(value)) {
|
||||||
return;
|
return;
|
||||||
|
@ -260,12 +316,12 @@ public class BuildInfoFactory {
|
||||||
project.setDescription(project.getDescription(), null);
|
project.setDescription(project.getDescription(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getString(String name) {
|
protected String getString(String name) {
|
||||||
String value = (String) args.get(name);
|
String value = (String) args.get(name);
|
||||||
return value == null ? "" : value; //$NON-NLS-1$
|
return value == null ? "" : value; //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getBuilderID() {
|
protected String getBuilderID() {
|
||||||
return builderID;
|
return builderID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -274,20 +330,20 @@ public class BuildInfoFactory {
|
||||||
private Map args;
|
private Map args;
|
||||||
private String builderID;
|
private String builderID;
|
||||||
|
|
||||||
public BuildArguments(Map args, String builderID) {
|
BuildArguments(Map args, String builderID) {
|
||||||
this.args = args;
|
this.args = args;
|
||||||
this.builderID = builderID;
|
this.builderID = builderID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void putValue(String name, String value) {
|
protected void putString(String name, String value) {
|
||||||
args.put(name, value);
|
args.put(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getString(String name) {
|
protected String getString(String name) {
|
||||||
return (String) args.get(name);
|
return (String) args.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getBuilderID() {
|
protected String getBuilderID() {
|
||||||
return builderID;
|
return builderID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue