mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 22:52:11 +02:00
added environment and variable support to standard make builder
bug #47241 & bug #48009
This commit is contained in:
parent
db68d20348
commit
ddbea8806c
20 changed files with 1909 additions and 279 deletions
|
@ -14,9 +14,9 @@
|
||||||
</runtime>
|
</runtime>
|
||||||
<requires>
|
<requires>
|
||||||
<import plugin="org.eclipse.core.resources"/>
|
<import plugin="org.eclipse.core.resources"/>
|
||||||
<import plugin="org.eclipse.cdt.core"/>
|
|
||||||
<import plugin="org.eclipse.core.runtime"/>
|
|
||||||
<import plugin="org.eclipse.core.variables"/>
|
<import plugin="org.eclipse.core.variables"/>
|
||||||
|
<import plugin="org.eclipse.core.runtime"/>
|
||||||
|
<import plugin="org.eclipse.cdt.core"/>
|
||||||
</requires>
|
</requires>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,57 +10,53 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
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;
|
|
||||||
|
|
||||||
public interface IMakeBuilderInfo {
|
public interface IMakeBuilderInfo extends IMakeCommonBuildInfo {
|
||||||
IPath getBuildLocation();
|
|
||||||
void setBuildLocation(IPath location) throws CoreException;
|
|
||||||
|
|
||||||
boolean isStopOnError();
|
public final static String BUILD_TARGET_FULL = ARGS_PREFIX + ".build.target.full"; //$NON-NLS-1$
|
||||||
void setStopOnError(boolean on) throws CoreException;
|
public final static String BUILD_TARGET_INCREAMENTAL = ARGS_PREFIX + ".build.target.inc"; //$NON-NLS-1$
|
||||||
|
public final static String BUILD_TARGET_AUTO = ARGS_PREFIX + ".build.target.auto"; //$NON-NLS-1$
|
||||||
boolean isDefaultBuildCmd();
|
public final static String BUILD_TARGET_CLEAN = ARGS_PREFIX + ".build.target.clean"; //$NON-NLS-1$
|
||||||
void setUseDefaultBuildCmd(boolean on) throws CoreException;
|
|
||||||
|
|
||||||
IPath getBuildCommand();
|
|
||||||
void setBuildCommand(IPath command) throws CoreException;
|
|
||||||
|
|
||||||
String getBuildArguments();
|
|
||||||
void setBuildArguments(String args) throws CoreException;
|
|
||||||
|
|
||||||
boolean isAutoBuildEnable();
|
boolean isAutoBuildEnable();
|
||||||
void setAutoBuildEnable(boolean enabled) throws CoreException;
|
void setAutoBuildEnable(boolean enabled) throws CoreException;
|
||||||
|
|
||||||
String getAutoBuildTarget();
|
String getAutoBuildTarget();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
void setAutoBuildTarget(String target) throws CoreException;
|
void setAutoBuildTarget(String target) throws CoreException;
|
||||||
|
|
||||||
boolean isIncrementalBuildEnabled();
|
boolean isIncrementalBuildEnabled();
|
||||||
void setIncrementalBuildEnable(boolean enabled) throws CoreException;
|
void setIncrementalBuildEnable(boolean enabled) throws CoreException;
|
||||||
|
|
||||||
String getIncrementalBuildTarget();
|
String getIncrementalBuildTarget();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
void setIncrementalBuildTarget(String target) throws CoreException;
|
void setIncrementalBuildTarget(String target) throws CoreException;
|
||||||
|
|
||||||
boolean isFullBuildEnabled();
|
boolean isFullBuildEnabled();
|
||||||
void setFullBuildEnable(boolean enabled) throws CoreException;
|
void setFullBuildEnable(boolean enabled) throws CoreException;
|
||||||
|
|
||||||
String getFullBuildTarget();
|
String getFullBuildTarget();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
void setFullBuildTarget(String target) throws CoreException;
|
void setFullBuildTarget(String target) throws CoreException;
|
||||||
|
|
||||||
String getCleanBuildTarget();
|
String getCleanBuildTarget();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
void setCleanBuildTarget(String target) throws CoreException;
|
void setCleanBuildTarget(String target) throws CoreException;
|
||||||
|
|
||||||
boolean isCleanBuildEnabled();
|
boolean isCleanBuildEnabled();
|
||||||
void setCleanBuildEnable(boolean enabled) throws CoreException;
|
void setCleanBuildEnable(boolean enabled) throws CoreException;
|
||||||
|
|
||||||
String[] getErrorParsers();
|
|
||||||
void setErrorParsers(String[] parsers) throws CoreException;
|
|
||||||
|
|
||||||
Map getEnvironment();
|
|
||||||
void setEnvironment(Map env) throws CoreException;
|
|
||||||
|
|
||||||
boolean appendEnvironment();
|
|
||||||
void setAppendEnvironment(boolean append) throws CoreException;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2004 QNX Software Systems and others. All rights reserved. This
|
||||||
|
* program and the accompanying materials are made available under the terms of
|
||||||
|
* the Common Public License v1.0 which accompanies this distribution, and is
|
||||||
|
* available at http://www.eclipse.org/legal/cpl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors: QNX Software Systems - initial API and implementation
|
||||||
|
******************************************************************************/
|
||||||
|
package org.eclipse.cdt.make.core;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
|
||||||
|
|
||||||
|
public interface IMakeCommonBuildInfo {
|
||||||
|
public final static String ARGS_PREFIX = MakeCorePlugin.getUniqueIdentifier();
|
||||||
|
|
||||||
|
public final static String BUILD_LOCATION = ARGS_PREFIX + ".build.location"; //$NON-NLS-1$
|
||||||
|
public final static String BUILD_COMMAND = ARGS_PREFIX + ".build.command"; //$NON-NLS-1$
|
||||||
|
public final static String BUILD_ARGUMENTS = ARGS_PREFIX + ".build.arguments"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
void setBuildAttribute(String name, String value) throws CoreException;
|
||||||
|
String getBuildAttribute(String name, String defaultValue);
|
||||||
|
|
||||||
|
IPath getBuildLocation();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated - use setBuildString(BUILD_LOCATION...)
|
||||||
|
*/
|
||||||
|
void setBuildLocation(IPath location) throws CoreException;
|
||||||
|
|
||||||
|
boolean isStopOnError();
|
||||||
|
void setStopOnError(boolean on) throws CoreException;
|
||||||
|
|
||||||
|
boolean isDefaultBuildCmd();
|
||||||
|
void setUseDefaultBuildCmd(boolean on) throws CoreException;
|
||||||
|
|
||||||
|
IPath getBuildCommand();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated - use setBuildString(BUILD_COMMAND...)
|
||||||
|
*/
|
||||||
|
void setBuildCommand(IPath command) throws CoreException;
|
||||||
|
|
||||||
|
String getBuildArguments();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated - use setBuildString(BUILD_ARGUMENTS...)
|
||||||
|
*/
|
||||||
|
void setBuildArguments(String args) throws CoreException;
|
||||||
|
|
||||||
|
String[] getErrorParsers();
|
||||||
|
void setErrorParsers(String[] parsers) throws CoreException;
|
||||||
|
|
||||||
|
Map getExpandedEnvironment();
|
||||||
|
|
||||||
|
Map getEnvironment();
|
||||||
|
void setEnvironment(Map env) throws CoreException;
|
||||||
|
|
||||||
|
boolean appendEnvironment();
|
||||||
|
void setAppendEnvironment(boolean append) throws CoreException;
|
||||||
|
}
|
|
@ -10,42 +10,32 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.make.core;
|
package org.eclipse.cdt.make.core;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.eclipse.core.resources.IContainer;
|
import org.eclipse.core.resources.IContainer;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
import org.eclipse.core.runtime.IPath;
|
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
|
||||||
public interface IMakeTarget extends IAdaptable {
|
public interface IMakeTarget extends IAdaptable, IMakeCommonBuildInfo {
|
||||||
|
|
||||||
|
public final static String BUILD_TARGET = ARGS_PREFIX + ".build.target"; //$NON-NLS-1$
|
||||||
|
|
||||||
String getName();
|
String getName();
|
||||||
String getTargetBuilderID();
|
String getTargetBuilderID();
|
||||||
|
|
||||||
boolean isStopOnError();
|
/**
|
||||||
void setStopOnError(boolean stopOnError) throws CoreException;
|
* @deprecated
|
||||||
|
*/
|
||||||
boolean isDefaultBuildCmd();
|
|
||||||
void setUseDefaultBuildCmd(boolean useDefault) throws CoreException;
|
|
||||||
|
|
||||||
void setBuildTarget(String target) throws CoreException;
|
void setBuildTarget(String target) throws CoreException;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
String getBuildTarget() ;
|
String getBuildTarget() ;
|
||||||
|
|
||||||
IPath getBuildCommand();
|
void setRunAllBuilders(boolean runAllBuilders) throws CoreException;
|
||||||
void setBuildCommand(IPath command) throws CoreException;
|
|
||||||
|
|
||||||
String getBuildArguments();
|
|
||||||
void setBuildArguments(String arguments) throws CoreException;
|
|
||||||
|
|
||||||
void setRunAllBuilders(boolean runAllBuilders);
|
|
||||||
boolean runAllBuilders();
|
boolean runAllBuilders();
|
||||||
|
|
||||||
void setBuildEnvironment(Map env) throws CoreException;
|
|
||||||
Map getBuildEnvironment();
|
|
||||||
|
|
||||||
void setAppendEnvironment(boolean append) throws CoreException;
|
|
||||||
boolean isAppendEnvironment();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the target build container.
|
* Get the target build container.
|
||||||
*
|
*
|
||||||
|
|
|
@ -33,21 +33,22 @@ import org.eclipse.core.resources.IMarker;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.IResourceDelta;
|
import org.eclipse.core.resources.IResourceDelta;
|
||||||
|
import org.eclipse.core.resources.IResourceRuleFactory;
|
||||||
import org.eclipse.core.resources.IWorkspace;
|
import org.eclipse.core.resources.IWorkspace;
|
||||||
|
import org.eclipse.core.resources.IWorkspaceRunnable;
|
||||||
import org.eclipse.core.resources.IncrementalProjectBuilder;
|
import org.eclipse.core.resources.IncrementalProjectBuilder;
|
||||||
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
import org.eclipse.core.runtime.OperationCanceledException;
|
import org.eclipse.core.runtime.OperationCanceledException;
|
||||||
import org.eclipse.core.runtime.Platform;
|
|
||||||
import org.eclipse.core.runtime.QualifiedName;
|
import org.eclipse.core.runtime.QualifiedName;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.core.runtime.SubProgressMonitor;
|
import org.eclipse.core.runtime.SubProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.jobs.ISchedulingRule;
|
||||||
import org.eclipse.core.runtime.jobs.Job;
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
import org.eclipse.core.variables.VariablesPlugin;
|
|
||||||
import org.eclipse.osgi.service.environment.Constants;
|
|
||||||
|
|
||||||
public class MakeBuilder extends ACBuilder {
|
public class MakeBuilder extends ACBuilder {
|
||||||
|
|
||||||
|
@ -90,12 +91,23 @@ public class MakeBuilder extends ACBuilder {
|
||||||
protected void clean(IProgressMonitor monitor) throws CoreException {
|
protected void clean(IProgressMonitor monitor) throws CoreException {
|
||||||
final IMakeBuilderInfo info = MakeCorePlugin.createBuildInfo(getProject(), BUILDER_ID);
|
final IMakeBuilderInfo info = MakeCorePlugin.createBuildInfo(getProject(), BUILDER_ID);
|
||||||
if (shouldBuild(CLEAN_BUILD, info)) {
|
if (shouldBuild(CLEAN_BUILD, info)) {
|
||||||
|
IResourceRuleFactory ruleFactory= ResourcesPlugin.getWorkspace().getRuleFactory();
|
||||||
|
final ISchedulingRule rule = ruleFactory.modifyRule(getProject());
|
||||||
Job backgroundJob = new Job("Standard Make Builder"){ //$NON-NLS-1$
|
Job backgroundJob = new Job("Standard Make Builder"){ //$NON-NLS-1$
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
|
* @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
|
||||||
*/
|
*/
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
invokeMake(CLEAN_BUILD, info, monitor);
|
try {
|
||||||
|
ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() {
|
||||||
|
|
||||||
|
public void run(IProgressMonitor monitor) {
|
||||||
|
invokeMake(CLEAN_BUILD, info, monitor);
|
||||||
|
}
|
||||||
|
}, rule, IWorkspace.AVOID_UPDATE, monitor);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
return e.getStatus();
|
||||||
|
}
|
||||||
IStatus returnStatus = Status.OK_STATUS;
|
IStatus returnStatus = Status.OK_STATUS;
|
||||||
return returnStatus;
|
return returnStatus;
|
||||||
}
|
}
|
||||||
|
@ -103,7 +115,7 @@ public class MakeBuilder extends ACBuilder {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
backgroundJob.setRule(getProject());
|
backgroundJob.setRule(rule);
|
||||||
backgroundJob.schedule();
|
backgroundJob.schedule();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -138,6 +150,7 @@ public class MakeBuilder extends ACBuilder {
|
||||||
if (workingDirectory == null) {
|
if (workingDirectory == null) {
|
||||||
workingDirectory = currProject.getLocation();
|
workingDirectory = currProject.getLocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] targets = getTargets(kind, info);
|
String[] targets = getTargets(kind, info);
|
||||||
if (targets.length != 0 && targets[targets.length - 1].equals(info.getCleanBuildTarget())) //$NON-NLS-1$
|
if (targets.length != 0 && targets[targets.length - 1].equals(info.getCleanBuildTarget())) //$NON-NLS-1$
|
||||||
isClean = true;
|
isClean = true;
|
||||||
|
@ -155,24 +168,8 @@ public class MakeBuilder extends ACBuilder {
|
||||||
envMap.put("CWD", workingDirectory.toOSString()); //$NON-NLS-1$
|
envMap.put("CWD", workingDirectory.toOSString()); //$NON-NLS-1$
|
||||||
envMap.put("PWD", workingDirectory.toOSString()); //$NON-NLS-1$
|
envMap.put("PWD", workingDirectory.toOSString()); //$NON-NLS-1$
|
||||||
// Add variables from build info
|
// Add variables from build info
|
||||||
Map userEnv = info.getEnvironment();
|
envMap.putAll(info.getExpandedEnvironment());
|
||||||
Iterator iter= userEnv.entrySet().iterator();
|
Iterator iter = envMap.entrySet().iterator();
|
||||||
boolean win32= Platform.getOS().equals(Constants.OS_WIN32);
|
|
||||||
while (iter.hasNext()) {
|
|
||||||
Map.Entry entry= (Map.Entry) iter.next();
|
|
||||||
String key= (String) entry.getKey();
|
|
||||||
if (win32) {
|
|
||||||
// Win32 vars are case insensitive. Uppercase everything so
|
|
||||||
// that (for example) "pAtH" will correctly replace "PATH"
|
|
||||||
key= key.toUpperCase();
|
|
||||||
}
|
|
||||||
String value = (String) entry.getValue();
|
|
||||||
// translate any string substitution variables
|
|
||||||
String translated = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(value);
|
|
||||||
envMap.put(key, translated);
|
|
||||||
}
|
|
||||||
|
|
||||||
iter= envMap.entrySet().iterator();
|
|
||||||
List strings= new ArrayList(envMap.size());
|
List strings= new ArrayList(envMap.size());
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
Map.Entry entry = (Map.Entry) iter.next();
|
Map.Entry entry = (Map.Entry) iter.next();
|
||||||
|
@ -191,8 +188,7 @@ public class MakeBuilder extends ACBuilder {
|
||||||
} else {
|
} else {
|
||||||
String args = info.getBuildArguments();
|
String args = info.getBuildArguments();
|
||||||
if (args != null && !args.equals("")) { //$NON-NLS-1$
|
if (args != null && !args.equals("")) { //$NON-NLS-1$
|
||||||
String translated = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(args);
|
String[] newArgs = makeArray(args);
|
||||||
String[] newArgs = makeArray(translated);
|
|
||||||
buildArguments = new String[targets.length + newArgs.length];
|
buildArguments = new String[targets.length + newArgs.length];
|
||||||
System.arraycopy(newArgs, 0, buildArguments, 0, newArgs.length);
|
System.arraycopy(newArgs, 0, buildArguments, 0, newArgs.length);
|
||||||
System.arraycopy(targets, 0, buildArguments, newArgs.length, targets.length);
|
System.arraycopy(targets, 0, buildArguments, newArgs.length, targets.length);
|
||||||
|
@ -297,7 +293,7 @@ public class MakeBuilder extends ACBuilder {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String[] getTargets(int kind, IMakeBuilderInfo info) throws CoreException {
|
protected String[] getTargets(int kind, IMakeBuilderInfo info) {
|
||||||
String targets = ""; //$NON-NLS-1$
|
String targets = ""; //$NON-NLS-1$
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
case IncrementalProjectBuilder.AUTO_BUILD :
|
case IncrementalProjectBuilder.AUTO_BUILD :
|
||||||
|
@ -313,8 +309,7 @@ public class MakeBuilder extends ACBuilder {
|
||||||
targets = info.getCleanBuildTarget();
|
targets = info.getCleanBuildTarget();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
String translated = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(targets);
|
return makeArray(targets);
|
||||||
return makeArray(translated);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turn the string into an array.
|
// Turn the string into an array.
|
||||||
|
|
|
@ -130,23 +130,24 @@ public class MakeProjectNature implements IProjectNature {
|
||||||
addBuildSpec();
|
addBuildSpec();
|
||||||
IMakeBuilderInfo info = MakeCorePlugin.createBuildInfo(MakeCorePlugin.getDefault().getPluginPreferences(), MakeBuilder.BUILDER_ID, false);
|
IMakeBuilderInfo info = MakeCorePlugin.createBuildInfo(MakeCorePlugin.getDefault().getPluginPreferences(), MakeBuilder.BUILDER_ID, false);
|
||||||
IMakeBuilderInfo projectInfo = MakeCorePlugin.createBuildInfo(getProject(), MakeBuilder.BUILDER_ID);
|
IMakeBuilderInfo projectInfo = MakeCorePlugin.createBuildInfo(getProject(), MakeBuilder.BUILDER_ID);
|
||||||
projectInfo.setBuildLocation(info.getBuildLocation());
|
projectInfo.setBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, info.getBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, "")); //$NON-NLS-1$
|
||||||
|
projectInfo.setBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, info.getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, "make")); //$NON-NLS-1$
|
||||||
|
|
||||||
projectInfo.setUseDefaultBuildCmd(info.isDefaultBuildCmd());
|
projectInfo.setUseDefaultBuildCmd(info.isDefaultBuildCmd());
|
||||||
projectInfo.setStopOnError(info.isStopOnError());
|
projectInfo.setStopOnError(info.isStopOnError());
|
||||||
projectInfo.setBuildCommand(info.getBuildCommand());
|
|
||||||
|
|
||||||
projectInfo.setAutoBuildEnable(info.isAutoBuildEnable());
|
projectInfo.setAutoBuildEnable(info.isAutoBuildEnable());
|
||||||
projectInfo.setAutoBuildTarget(info.getAutoBuildTarget());
|
projectInfo.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_AUTO, info.getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_AUTO, "")); //$NON-NLS-1$
|
||||||
|
|
||||||
projectInfo.setIncrementalBuildEnable(info.isIncrementalBuildEnabled());
|
projectInfo.setIncrementalBuildEnable(info.isIncrementalBuildEnabled());
|
||||||
projectInfo.setIncrementalBuildTarget(info.getIncrementalBuildTarget());
|
projectInfo.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_INCREAMENTAL, info.getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_INCREAMENTAL, "")); //$NON-NLS-1$
|
||||||
|
|
||||||
projectInfo.setFullBuildEnable(info.isFullBuildEnabled());
|
projectInfo.setFullBuildEnable(info.isFullBuildEnabled());
|
||||||
projectInfo.setFullBuildTarget(info.getFullBuildTarget());
|
projectInfo.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_FULL, info.getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_FULL, "")); //$NON-NLS-1$
|
||||||
|
|
||||||
projectInfo.setCleanBuildEnable(info.isCleanBuildEnabled());
|
projectInfo.setCleanBuildEnable(info.isCleanBuildEnabled());
|
||||||
projectInfo.setCleanBuildTarget(info.getCleanBuildTarget());
|
projectInfo.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_CLEAN, info.getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_CLEAN, "")); //$NON-NLS-1$
|
||||||
|
|
||||||
projectInfo.setErrorParsers(info.getErrorParsers());
|
projectInfo.setErrorParsers(info.getErrorParsers());
|
||||||
projectInfo.setAppendEnvironment(info.appendEnvironment());
|
projectInfo.setAppendEnvironment(info.appendEnvironment());
|
||||||
projectInfo.setEnvironment(info.getEnvironment());
|
projectInfo.setEnvironment(info.getEnvironment());
|
||||||
|
|
|
@ -19,6 +19,7 @@ import java.util.StringTokenizer;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.ErrorParserManager;
|
import org.eclipse.cdt.core.ErrorParserManager;
|
||||||
|
import org.eclipse.cdt.make.core.IMakeCommonBuildInfo;
|
||||||
import org.eclipse.cdt.make.core.IMakeBuilderInfo;
|
import org.eclipse.cdt.make.core.IMakeBuilderInfo;
|
||||||
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
||||||
import org.eclipse.cdt.make.core.MakeProjectNature;
|
import org.eclipse.cdt.make.core.MakeProjectNature;
|
||||||
|
@ -36,6 +37,8 @@ import org.eclipse.core.runtime.Path;
|
||||||
import org.eclipse.core.runtime.Platform;
|
import org.eclipse.core.runtime.Platform;
|
||||||
import org.eclipse.core.runtime.Preferences;
|
import org.eclipse.core.runtime.Preferences;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.core.variables.VariablesPlugin;
|
||||||
|
import org.eclipse.osgi.service.environment.*;
|
||||||
|
|
||||||
public class BuildInfoFactory {
|
public class BuildInfoFactory {
|
||||||
|
|
||||||
|
@ -55,24 +58,77 @@ public class BuildInfoFactory {
|
||||||
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$
|
static final String ENVIRONMENT = PREFIX + ".environment"; //$NON-NLS-1$
|
||||||
static final String BUILD_APPEND_ENVIRONMENT = ".append_environment"; //$NON-NLS-1$
|
static final String BUILD_APPEND_ENVIRONMENT = PREFIX + ".append_environment"; //$NON-NLS-1$
|
||||||
|
|
||||||
private abstract static class AbstractBuildInfo implements IMakeBuilderInfo {
|
private abstract static class AbstractBuildInfo implements IMakeBuilderInfo {
|
||||||
|
|
||||||
|
|
||||||
public void setUseDefaultBuildCmd(boolean on) throws CoreException {
|
public void setUseDefaultBuildCmd(boolean on) throws CoreException {
|
||||||
putString(USE_DEFAULT_BUILD_CMD, new Boolean(on).toString());
|
putString(USE_DEFAULT_BUILD_CMD, new Boolean(on).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isDefaultBuildCmd() {
|
public boolean isDefaultBuildCmd() {
|
||||||
if (getString(USE_DEFAULT_BUILD_CMD) == null) { // if no property then default to true
|
if (getString(USE_DEFAULT_BUILD_CMD) == null) { // if no property
|
||||||
|
// then default to
|
||||||
|
// true
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return getBoolean(USE_DEFAULT_BUILD_CMD);
|
return getBoolean(USE_DEFAULT_BUILD_CMD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getBuildAttribute(String name, String defaultValue) {
|
||||||
|
String value = getString(name);
|
||||||
|
if (value == null ) {
|
||||||
|
if (IMakeCommonBuildInfo.BUILD_COMMAND.equals(name)) {
|
||||||
|
value = getString(BuildInfoFactory.BUILD_COMMAND);
|
||||||
|
} else if (IMakeCommonBuildInfo.BUILD_ARGUMENTS.equals(name)) {
|
||||||
|
value = getString(BuildInfoFactory.BUILD_ARGUMENTS);
|
||||||
|
} else if (IMakeCommonBuildInfo.BUILD_LOCATION.equals(name)) {
|
||||||
|
value = getString(BuildInfoFactory.BUILD_LOCATION);
|
||||||
|
} else if (IMakeBuilderInfo.BUILD_TARGET_AUTO.equals(name)) {
|
||||||
|
value = getString(BuildInfoFactory.BUILD_TARGET_AUTO);
|
||||||
|
} else if (IMakeBuilderInfo.BUILD_TARGET_CLEAN.equals(name)) {
|
||||||
|
value = getString(BuildInfoFactory.BUILD_TARGET_CLEAN);
|
||||||
|
} else if (IMakeBuilderInfo.BUILD_TARGET_FULL.equals(name)) {
|
||||||
|
value = getString(BuildInfoFactory.BUILD_TARGET_FULL);
|
||||||
|
} else if (IMakeBuilderInfo.BUILD_TARGET_INCREAMENTAL.equals(name)) {
|
||||||
|
value = getString(BuildInfoFactory.BUILD_TARGET_INCREMENTAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return value != null ? value : defaultValue != null ? defaultValue : ""; //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBuildAttribute(String name, String value) throws CoreException {
|
||||||
|
putString(name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map getExpandedEnvironment() {
|
||||||
|
Map env = getEnvironment();
|
||||||
|
HashMap envMap = new HashMap(env.entrySet().size());
|
||||||
|
Iterator iter = env.entrySet().iterator();
|
||||||
|
boolean win32 = Platform.getOS().equals(Constants.OS_WIN32);
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
Map.Entry entry = (Map.Entry)iter.next();
|
||||||
|
String key = (String)entry.getKey();
|
||||||
|
if (win32) {
|
||||||
|
// Win32 vars are case insensitive. Uppercase everything so
|
||||||
|
// that (for example) "pAtH" will correctly replace "PATH"
|
||||||
|
key = key.toUpperCase();
|
||||||
|
}
|
||||||
|
String value = (String)entry.getValue();
|
||||||
|
// translate any string substitution variables
|
||||||
|
String translated = value;
|
||||||
|
try {
|
||||||
|
translated = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(value, false);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
envMap.put(key, translated);
|
||||||
|
}
|
||||||
|
return envMap;
|
||||||
|
}
|
||||||
|
|
||||||
public void setBuildCommand(IPath location) throws CoreException {
|
public void setBuildCommand(IPath location) throws CoreException {
|
||||||
putString(BUILD_COMMAND, location.toString());
|
putString(IMakeCommonBuildInfo.BUILD_COMMAND, null);
|
||||||
|
putString(BuildInfoFactory.BUILD_COMMAND, location.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public IPath getBuildCommand() {
|
public IPath getBuildCommand() {
|
||||||
|
@ -83,21 +139,23 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
return new Path(command);
|
return new Path(command);
|
||||||
}
|
}
|
||||||
return new Path(getString(BUILD_COMMAND));
|
String result = getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, getString(BuildInfoFactory.BUILD_COMMAND));
|
||||||
|
try {
|
||||||
|
result = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(result, false);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
return new Path(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getBuildParameter(String name) {
|
protected String getBuildParameter(String name) {
|
||||||
IExtension extension =
|
IExtension extension = Platform.getExtensionRegistry().getExtension(ResourcesPlugin.PI_RESOURCES,
|
||||||
Platform.getExtensionRegistry().getExtension(
|
ResourcesPlugin.PT_BUILDERS, getBuilderID());
|
||||||
ResourcesPlugin.PI_RESOURCES,
|
|
||||||
ResourcesPlugin.PT_BUILDERS,
|
|
||||||
getBuilderID());
|
|
||||||
if (extension == null)
|
if (extension == null)
|
||||||
return null;
|
return null;
|
||||||
IConfigurationElement[] configs = extension.getConfigurationElements();
|
IConfigurationElement[] configs = extension.getConfigurationElements();
|
||||||
if (configs.length == 0)
|
if (configs.length == 0)
|
||||||
return null;
|
return null;
|
||||||
//The nature exists, or this builder doesn't specify a nature
|
// The nature exists, or this builder doesn't specify a nature
|
||||||
IConfigurationElement[] runElement = configs[0].getChildren("run"); //$NON-NLS-1$
|
IConfigurationElement[] runElement = configs[0].getChildren("run"); //$NON-NLS-1$
|
||||||
IConfigurationElement[] paramElement = runElement[0].getChildren("parameter"); //$NON-NLS-1$
|
IConfigurationElement[] paramElement = runElement[0].getChildren("parameter"); //$NON-NLS-1$
|
||||||
for (int i = 0; i < paramElement.length; i++) {
|
for (int i = 0; i < paramElement.length; i++) {
|
||||||
|
@ -111,14 +169,36 @@ 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 {
|
||||||
putString(BUILD_LOCATION, location.toString());
|
putString(IMakeCommonBuildInfo.BUILD_LOCATION, null);
|
||||||
|
putString(BuildInfoFactory.BUILD_LOCATION, location.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public IPath getBuildLocation() {
|
public IPath getBuildLocation() {
|
||||||
String location = getString(BUILD_LOCATION);
|
String result = getBuildAttribute(IMakeCommonBuildInfo.BUILD_LOCATION, getString(BuildInfoFactory.BUILD_LOCATION));
|
||||||
return new Path(location == null ? "" : location); //$NON-NLS-1$
|
try {
|
||||||
|
result = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(result, false);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
return new Path(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getBuildArguments() {
|
||||||
|
String result = getBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, getString(BuildInfoFactory.BUILD_ARGUMENTS));
|
||||||
|
if (result == null) {
|
||||||
|
return ""; //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
result = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(result, false);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBuildArguments(String args) throws CoreException {
|
||||||
|
putString(IMakeCommonBuildInfo.BUILD_ARGUMENTS, null);
|
||||||
|
putString(BuildInfoFactory.BUILD_ARGUMENTS, args);
|
||||||
|
}
|
||||||
|
|
||||||
public void setStopOnError(boolean enabled) throws CoreException {
|
public void setStopOnError(boolean enabled) throws CoreException {
|
||||||
putString(STOP_ON_ERROR, new Boolean(enabled).toString());
|
putString(STOP_ON_ERROR, new Boolean(enabled).toString());
|
||||||
}
|
}
|
||||||
|
@ -128,44 +208,62 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAutoBuildTarget(String target) throws CoreException {
|
public void setAutoBuildTarget(String target) throws CoreException {
|
||||||
putString(BUILD_TARGET_AUTO, target);
|
putString(IMakeBuilderInfo.BUILD_TARGET_AUTO, null);
|
||||||
|
putString(BuildInfoFactory.BUILD_TARGET_AUTO, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getAutoBuildTarget() {
|
public String getAutoBuildTarget() {
|
||||||
return getString(BUILD_TARGET_AUTO);
|
String result = getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_AUTO, getString(BuildInfoFactory.BUILD_TARGET_AUTO));
|
||||||
|
try {
|
||||||
|
result = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(result, false);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setIncrementalBuildTarget(String target) throws CoreException {
|
public void setIncrementalBuildTarget(String target) throws CoreException {
|
||||||
putString(BUILD_TARGET_INCREMENTAL, target);
|
putString(IMakeBuilderInfo.BUILD_TARGET_INCREAMENTAL, null);
|
||||||
|
putString(BuildInfoFactory.BUILD_TARGET_INCREMENTAL, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getIncrementalBuildTarget() {
|
public String getIncrementalBuildTarget() {
|
||||||
return getString(BUILD_TARGET_INCREMENTAL);
|
String result = getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_INCREAMENTAL,
|
||||||
|
getString(BuildInfoFactory.BUILD_TARGET_INCREMENTAL));
|
||||||
|
try {
|
||||||
|
result = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(result, false);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFullBuildTarget(String target) throws CoreException {
|
public void setFullBuildTarget(String target) throws CoreException {
|
||||||
putString(BUILD_TARGET_FULL, target);
|
putString(IMakeBuilderInfo.BUILD_TARGET_FULL, null);
|
||||||
|
putString(BuildInfoFactory.BUILD_TARGET_FULL, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getFullBuildTarget() {
|
public String getFullBuildTarget() {
|
||||||
return getString(BUILD_TARGET_FULL);
|
String result = getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_FULL, getString(BuildInfoFactory.BUILD_TARGET_FULL));
|
||||||
|
try {
|
||||||
|
result = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(result, false);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCleanBuildTarget(String target) throws CoreException {
|
public void setCleanBuildTarget(String target) throws CoreException {
|
||||||
putString(BUILD_TARGET_CLEAN, target);
|
putString(IMakeBuilderInfo.BUILD_TARGET_CLEAN, null);
|
||||||
|
putString(BuildInfoFactory.BUILD_TARGET_CLEAN, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCleanBuildTarget() {
|
public String getCleanBuildTarget() {
|
||||||
return getString(BUILD_TARGET_CLEAN);
|
String result = getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_CLEAN, getString(BuildInfoFactory.BUILD_TARGET_CLEAN));
|
||||||
|
try {
|
||||||
|
result = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(result, false);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getBoolean(String property) {
|
|
||||||
return Boolean.valueOf(getString(property)).booleanValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract void putString(String name, String value) throws CoreException;
|
|
||||||
protected abstract String getString(String property);
|
|
||||||
|
|
||||||
public void setAutoBuildEnable(boolean enabled) throws CoreException {
|
public void setAutoBuildEnable(boolean enabled) throws CoreException {
|
||||||
putString(BUILD_AUTO_ENABLED, new Boolean(enabled).toString());
|
putString(BUILD_AUTO_ENABLED, new Boolean(enabled).toString());
|
||||||
}
|
}
|
||||||
|
@ -198,14 +296,6 @@ public class BuildInfoFactory {
|
||||||
return getBoolean(BUILD_CLEAN_ENABLED);
|
return getBoolean(BUILD_CLEAN_ENABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getBuildArguments() {
|
|
||||||
return getString(BUILD_ARGUMENTS);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBuildArguments(String args) throws CoreException {
|
|
||||||
putString(BUILD_ARGUMENTS, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String[] getErrorParsers() {
|
public String[] getErrorParsers() {
|
||||||
String parsers = getString(ErrorParserManager.PREF_ERROR_PARSER);
|
String parsers = getString(ErrorParserManager.PREF_ERROR_PARSER);
|
||||||
if (parsers != null && parsers.length() > 0) {
|
if (parsers != null && parsers.length() > 0) {
|
||||||
|
@ -214,7 +304,7 @@ public class BuildInfoFactory {
|
||||||
while (tok.hasMoreElements()) {
|
while (tok.hasMoreElements()) {
|
||||||
list.add(tok.nextToken());
|
list.add(tok.nextToken());
|
||||||
}
|
}
|
||||||
return (String[]) list.toArray(new String[list.size()]);
|
return (String[])list.toArray(new String[list.size()]);
|
||||||
}
|
}
|
||||||
return new String[0];
|
return new String[0];
|
||||||
}
|
}
|
||||||
|
@ -236,53 +326,61 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean appendEnvironment() {
|
public boolean appendEnvironment() {
|
||||||
if (getString(BUILD_APPEND_ENVIRONMENT).length() > 0) {
|
if (getString(BUILD_APPEND_ENVIRONMENT) != null) {
|
||||||
return getBoolean(BUILD_APPEND_ENVIRONMENT);
|
return getBoolean(BUILD_APPEND_ENVIRONMENT);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAppendEnvironment(boolean append) throws CoreException {
|
public void setAppendEnvironment(boolean append) throws CoreException {
|
||||||
putString(BUILD_APPEND_ENVIRONMENT, new Boolean(append).toString());
|
putString(BUILD_APPEND_ENVIRONMENT, new Boolean(append).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean getBoolean(String property) {
|
||||||
|
return Boolean.valueOf(getString(property)).booleanValue();
|
||||||
|
}
|
||||||
|
|
||||||
protected Map decodeMap(String value) {
|
protected Map decodeMap(String value) {
|
||||||
Map map = new HashMap();
|
Map map = new HashMap();
|
||||||
StringBuffer envStr = new StringBuffer(value);
|
if (value != null) {
|
||||||
String escapeChars = "|\\"; //$NON-NLS-1$
|
StringBuffer envStr = new StringBuffer(value);
|
||||||
char escapeChar = '\\';
|
String escapeChars = "|\\"; //$NON-NLS-1$
|
||||||
try {
|
char escapeChar = '\\';
|
||||||
while (envStr.length() > 0) {
|
try {
|
||||||
int ndx = 0;
|
while (envStr.length() > 0) {
|
||||||
while (ndx < envStr.length() ) {
|
int ndx = 0;
|
||||||
if (escapeChars.indexOf(envStr.charAt(ndx)) != -1) {
|
while (ndx < envStr.length()) {
|
||||||
if (envStr.charAt(ndx - 1) == escapeChar) { // escaped '|' - remove '\' and continue on.
|
if (escapeChars.indexOf(envStr.charAt(ndx)) != -1) {
|
||||||
envStr.deleteCharAt(ndx - 1);
|
if (envStr.charAt(ndx - 1) == escapeChar) {
|
||||||
if (ndx == envStr.length()) {
|
// escaped '|' - remove '\' and continue on.
|
||||||
|
envStr.deleteCharAt(ndx - 1);
|
||||||
|
if (ndx == envStr.length()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (envStr.charAt(ndx) == '|')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ndx++;
|
||||||
|
}
|
||||||
|
StringBuffer line = new StringBuffer(envStr.substring(0, ndx));
|
||||||
|
int lndx = 0;
|
||||||
|
while (lndx < line.length()) {
|
||||||
|
if (line.charAt(lndx) == '=') {
|
||||||
|
if (line.charAt(lndx - 1) == escapeChar) {
|
||||||
|
// escaped '=' - remove '\' and continue on.
|
||||||
|
line.deleteCharAt(lndx - 1);
|
||||||
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (envStr.charAt(ndx) == '|')
|
lndx++;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
ndx++;
|
map.put(line.substring(0, lndx), line.substring(lndx + 1));
|
||||||
|
envStr.delete(0, ndx + 1);
|
||||||
}
|
}
|
||||||
StringBuffer line = new StringBuffer(envStr.substring(0, ndx));
|
} catch (StringIndexOutOfBoundsException e) {
|
||||||
int lndx = 0;
|
|
||||||
while (lndx < line.length() ) {
|
|
||||||
if (line.charAt(lndx) == '=') {
|
|
||||||
if (line.charAt(lndx - 1) == escapeChar) { // escaped '=' - remove '\' and continue on.
|
|
||||||
line.deleteCharAt(lndx - 1);
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lndx++;
|
|
||||||
}
|
|
||||||
map.put(line.substring(0, lndx), line.substring(lndx + 1));
|
|
||||||
envStr.delete(0, ndx+1);
|
|
||||||
}
|
}
|
||||||
} catch (StringIndexOutOfBoundsException e) {
|
|
||||||
}
|
}
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
@ -291,10 +389,10 @@ public class BuildInfoFactory {
|
||||||
StringBuffer str = new StringBuffer();
|
StringBuffer str = new StringBuffer();
|
||||||
Iterator entries = values.entrySet().iterator();
|
Iterator entries = values.entrySet().iterator();
|
||||||
while (entries.hasNext()) {
|
while (entries.hasNext()) {
|
||||||
Entry entry = (Entry) entries.next();
|
Entry entry = (Entry)entries.next();
|
||||||
str.append(escapeChars((String) entry.getKey(), "=|\\", '\\')); //$NON-NLS-1$
|
str.append(escapeChars((String)entry.getKey(), "=|\\", '\\')); //$NON-NLS-1$
|
||||||
str.append("="); //$NON-NLS-1$
|
str.append("="); //$NON-NLS-1$
|
||||||
str.append(escapeChars((String) entry.getValue(), "|\\", '\\')); //$NON-NLS-1$
|
str.append(escapeChars((String)entry.getValue(), "|\\", '\\')); //$NON-NLS-1$
|
||||||
str.append("|"); //$NON-NLS-1$
|
str.append("|"); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
return str.toString();
|
return str.toString();
|
||||||
|
@ -302,17 +400,21 @@ public class BuildInfoFactory {
|
||||||
|
|
||||||
protected String escapeChars(String string, String escapeChars, char escapeChar) {
|
protected String escapeChars(String string, String escapeChars, char escapeChar) {
|
||||||
StringBuffer str = new StringBuffer(string);
|
StringBuffer str = new StringBuffer(string);
|
||||||
for(int i = 0; i < str.length(); i++) {
|
for (int i = 0; i < str.length(); i++) {
|
||||||
if ( escapeChars.indexOf(str.charAt(i)) != -1) {
|
if (escapeChars.indexOf(str.charAt(i)) != -1) {
|
||||||
str.insert(i, escapeChar);
|
str.insert(i, escapeChar);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return str.toString();
|
return str.toString();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
protected abstract void putString(String name, String value) throws CoreException;
|
||||||
|
protected abstract String getString(String property);
|
||||||
|
}
|
||||||
|
|
||||||
private static class BuildInfoPreference extends AbstractBuildInfo {
|
private static class BuildInfoPreference extends AbstractBuildInfo {
|
||||||
|
|
||||||
private Preferences prefs;
|
private Preferences prefs;
|
||||||
private String builderID;
|
private String builderID;
|
||||||
private boolean useDefaults;
|
private boolean useDefaults;
|
||||||
|
@ -325,13 +427,22 @@ public class BuildInfoFactory {
|
||||||
|
|
||||||
protected void putString(String name, String value) {
|
protected void putString(String name, String value) {
|
||||||
if (useDefaults) {
|
if (useDefaults) {
|
||||||
prefs.setDefault(name, value);
|
if (value != null) {
|
||||||
|
prefs.setDefault(name, value);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (value == null) {
|
||||||
|
prefs.setValue(name, prefs.getDefaultString(name));
|
||||||
|
return;
|
||||||
|
}
|
||||||
prefs.setValue(name, value);
|
prefs.setValue(name, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getString(String property) {
|
protected String getString(String property) {
|
||||||
|
if (!prefs.contains(property)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
if (useDefaults) {
|
if (useDefaults) {
|
||||||
return prefs.getDefaultString(property);
|
return prefs.getDefaultString(property);
|
||||||
}
|
}
|
||||||
|
@ -344,6 +455,7 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class BuildInfoProject extends AbstractBuildInfo {
|
private static class BuildInfoProject extends AbstractBuildInfo {
|
||||||
|
|
||||||
private IProject project;
|
private IProject project;
|
||||||
private String builderID;
|
private String builderID;
|
||||||
private Map args;
|
private Map args;
|
||||||
|
@ -354,19 +466,24 @@ public class BuildInfoFactory {
|
||||||
ICommand builder;
|
ICommand builder;
|
||||||
builder = MakeProjectNature.getBuildSpec(project.getDescription(), builderID);
|
builder = MakeProjectNature.getBuildSpec(project.getDescription(), builderID);
|
||||||
if (builder == null) {
|
if (builder == null) {
|
||||||
throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeMessages.getString("BuildInfoFactory.Missing_Builder") + builderID, null)); //$NON-NLS-1$
|
throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1,
|
||||||
|
MakeMessages.getString("BuildInfoFactory.Missing_Builder") + builderID, null)); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
args = builder.getArguments();
|
args = builder.getArguments();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void putString(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;
|
||||||
}
|
}
|
||||||
|
if (value == null) {
|
||||||
|
args.remove(name);
|
||||||
|
} else {
|
||||||
|
args.put(name, value);
|
||||||
|
}
|
||||||
IProjectDescription description = project.getDescription();
|
IProjectDescription description = project.getDescription();
|
||||||
ICommand builder = MakeProjectNature.getBuildSpec(description, builderID);
|
ICommand builder = MakeProjectNature.getBuildSpec(description, builderID);
|
||||||
args.put(name, value);
|
|
||||||
builder.setArguments(args);
|
builder.setArguments(args);
|
||||||
builder.setBuilding(IncrementalProjectBuilder.AUTO_BUILD, isAutoBuildEnable());
|
builder.setBuilding(IncrementalProjectBuilder.AUTO_BUILD, isAutoBuildEnable());
|
||||||
builder.setBuilding(IncrementalProjectBuilder.FULL_BUILD, isFullBuildEnabled());
|
builder.setBuilding(IncrementalProjectBuilder.FULL_BUILD, isFullBuildEnabled());
|
||||||
|
@ -377,8 +494,7 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getString(String name) {
|
protected String getString(String name) {
|
||||||
String value = (String) args.get(name);
|
return (String)args.get(name);
|
||||||
return value == null ? "" : value; //$NON-NLS-1$
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getBuilderID() {
|
protected String getBuilderID() {
|
||||||
|
@ -387,6 +503,7 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class BuildInfoMap extends AbstractBuildInfo {
|
private static class BuildInfoMap extends AbstractBuildInfo {
|
||||||
|
|
||||||
private Map args;
|
private Map args;
|
||||||
private String builderID;
|
private String builderID;
|
||||||
|
|
||||||
|
@ -396,11 +513,15 @@ public class BuildInfoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void putString(String name, String value) {
|
protected void putString(String name, String value) {
|
||||||
args.put(name, value);
|
if (value == null) {
|
||||||
|
args.remove(name);
|
||||||
|
} else {
|
||||||
|
args.put(name, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getString(String name) {
|
protected String getString(String name) {
|
||||||
return args.get(name) != null ? (String)args.get(name) : ""; //$NON-NLS-1$
|
return (String)args.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getBuilderID() {
|
protected String getBuilderID() {
|
||||||
|
|
|
@ -11,9 +11,11 @@
|
||||||
package org.eclipse.cdt.make.internal.core;
|
package org.eclipse.cdt.make.internal.core;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.eclipse.cdt.make.core.IMakeBuilderInfo;
|
import org.eclipse.cdt.make.core.IMakeBuilderInfo;
|
||||||
|
import org.eclipse.cdt.make.core.IMakeCommonBuildInfo;
|
||||||
import org.eclipse.cdt.make.core.IMakeTarget;
|
import org.eclipse.cdt.make.core.IMakeTarget;
|
||||||
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
||||||
import org.eclipse.core.resources.ICommand;
|
import org.eclipse.core.resources.ICommand;
|
||||||
|
@ -27,16 +29,16 @@ import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.Path;
|
import org.eclipse.core.runtime.Path;
|
||||||
|
import org.eclipse.core.runtime.Platform;
|
||||||
import org.eclipse.core.runtime.PlatformObject;
|
import org.eclipse.core.runtime.PlatformObject;
|
||||||
import org.eclipse.core.runtime.SubProgressMonitor;
|
import org.eclipse.core.runtime.SubProgressMonitor;
|
||||||
|
import org.eclipse.core.variables.VariablesPlugin;
|
||||||
|
import org.eclipse.osgi.service.environment.Constants;
|
||||||
|
|
||||||
public class MakeTarget extends PlatformObject implements IMakeTarget {
|
public class MakeTarget extends PlatformObject implements IMakeTarget {
|
||||||
|
|
||||||
private final MakeTargetManager manager;
|
private final MakeTargetManager manager;
|
||||||
private String name;
|
private String name;
|
||||||
private String target;
|
|
||||||
private String buildArguments;
|
|
||||||
private IPath buildCommand;
|
|
||||||
private boolean isDefaultBuildCmd;
|
private boolean isDefaultBuildCmd;
|
||||||
private boolean isStopOnError;
|
private boolean isStopOnError;
|
||||||
boolean runAllBuidlers = true;
|
boolean runAllBuidlers = true;
|
||||||
|
@ -44,14 +46,15 @@ public class MakeTarget extends PlatformObject implements IMakeTarget {
|
||||||
private IContainer container;
|
private IContainer container;
|
||||||
private boolean appendEnvironment;
|
private boolean appendEnvironment;
|
||||||
private Map buildEnvironment;
|
private Map buildEnvironment;
|
||||||
|
private Map targetAttributes = new HashMap();
|
||||||
|
|
||||||
MakeTarget(MakeTargetManager manager, IProject project, String targetBuilderID, String name) throws CoreException {
|
MakeTarget(MakeTargetManager manager, IProject project, String targetBuilderID, String name) throws CoreException {
|
||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
this.targetBuilderID = targetBuilderID;
|
this.targetBuilderID = targetBuilderID;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
IMakeBuilderInfo info = MakeCorePlugin.createBuildInfo(project, manager.getBuilderID(targetBuilderID));
|
IMakeBuilderInfo info = MakeCorePlugin.createBuildInfo(project, manager.getBuilderID(targetBuilderID));
|
||||||
buildCommand = info.getBuildCommand();
|
setBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, info.getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, "make")); //$NON-NLS-1$
|
||||||
buildArguments = info.getBuildArguments();
|
setBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, info.getBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, "")); //$NON-NLS-1$
|
||||||
isDefaultBuildCmd = info.isDefaultBuildCmd();
|
isDefaultBuildCmd = info.isDefaultBuildCmd();
|
||||||
isStopOnError = info.isStopOnError();
|
isStopOnError = info.isStopOnError();
|
||||||
appendEnvironment = info.appendEnvironment();
|
appendEnvironment = info.appendEnvironment();
|
||||||
|
@ -65,6 +68,10 @@ public class MakeTarget extends PlatformObject implements IMakeTarget {
|
||||||
void setName(String name) {
|
void setName(String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map getAttributeMap() {
|
||||||
|
return targetAttributes;
|
||||||
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
|
@ -93,40 +100,135 @@ public class MakeTarget extends PlatformObject implements IMakeTarget {
|
||||||
}
|
}
|
||||||
|
|
||||||
public IPath getBuildCommand() {
|
public IPath getBuildCommand() {
|
||||||
return buildCommand != null ? buildCommand : new Path(""); //$NON-NLS-1$
|
if (isDefaultBuildCmd()) {
|
||||||
|
IMakeBuilderInfo info;
|
||||||
|
try {
|
||||||
|
info = MakeCorePlugin.createBuildInfo(container.getProject(), manager.getBuilderID(targetBuilderID));
|
||||||
|
return info.getBuildCommand();
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String result = getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, "make"); //$NON-NLS-1$
|
||||||
|
try {
|
||||||
|
result = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(result, false);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
return new Path(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBuildCommand(IPath command) throws CoreException {
|
public void setBuildCommand(IPath command) throws CoreException {
|
||||||
buildCommand = command;
|
setBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, command.toString());
|
||||||
manager.updateTarget(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getBuildArguments() {
|
public String getBuildArguments() {
|
||||||
return buildArguments != null ? buildArguments : ""; //$NON-NLS-1$
|
String result = getBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, ""); //$NON-NLS-1$
|
||||||
|
try {
|
||||||
|
result = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(result, false);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBuildArguments(String arguments) throws CoreException {
|
public void setBuildArguments(String arguments) throws CoreException {
|
||||||
buildArguments = arguments;
|
setBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBuildTarget(String target) throws CoreException {
|
||||||
|
setBuildAttribute(IMakeTarget.BUILD_TARGET, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBuildTarget() {
|
||||||
|
String result = getBuildAttribute(IMakeTarget.BUILD_TARGET, ""); //$NON-NLS-1$
|
||||||
|
try {
|
||||||
|
result = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(result, false);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRunAllBuilders(boolean runAllBuilders) throws CoreException {
|
||||||
|
this.runAllBuidlers = runAllBuilders;
|
||||||
manager.updateTarget(this);
|
manager.updateTarget(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map getBuildEnvironment() {
|
public boolean runAllBuilders() {
|
||||||
|
return runAllBuidlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBuildAttribute(String name, String value) throws CoreException {
|
||||||
|
targetAttributes.put(name, value);
|
||||||
|
manager.updateTarget(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBuildAttribute(String name, String defaultValue) {
|
||||||
|
String value = (String)targetAttributes.get(name);
|
||||||
|
return value != null ? value : defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IPath getBuildLocation() {
|
||||||
|
return container.getLocation();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBuildLocation(IPath location) throws CoreException {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getErrorParsers() {
|
||||||
|
IMakeBuilderInfo projectInfo;
|
||||||
|
try {
|
||||||
|
projectInfo = MakeCorePlugin.createBuildInfo(container.getProject(), manager.getBuilderID(targetBuilderID));
|
||||||
|
return projectInfo.getErrorParsers();
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
return new String[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setErrorParsers(String[] parsers) throws CoreException {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map getExpandedEnvironment() {
|
||||||
|
Map env = getEnvironment();
|
||||||
|
HashMap envMap = new HashMap(env.entrySet().size());
|
||||||
|
Iterator iter = env.entrySet().iterator();
|
||||||
|
boolean win32 = Platform.getOS().equals(Constants.OS_WIN32);
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
Map.Entry entry = (Map.Entry)iter.next();
|
||||||
|
String key = (String)entry.getKey();
|
||||||
|
if (win32) {
|
||||||
|
// Win32 vars are case insensitive. Uppercase everything so
|
||||||
|
// that (for example) "pAtH" will correctly replace "PATH"
|
||||||
|
key = key.toUpperCase();
|
||||||
|
}
|
||||||
|
String value = (String)entry.getValue();
|
||||||
|
// translate any string substitution variables
|
||||||
|
String translated = value;
|
||||||
|
try {
|
||||||
|
translated = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(value, false);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
envMap.put(key, translated);
|
||||||
|
}
|
||||||
|
return envMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map getEnvironment() {
|
||||||
return buildEnvironment;
|
return buildEnvironment;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBuildEnvironment(Map env) throws CoreException {
|
public void setEnvironment(Map env) throws CoreException {
|
||||||
buildEnvironment = new HashMap(env);
|
buildEnvironment = new HashMap(env);
|
||||||
manager.updateTarget(this);
|
manager.updateTarget(this);
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isAppendEnvironment() {
|
|
||||||
return appendEnvironment;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAppendEnvironment(boolean append) throws CoreException {
|
public void setAppendEnvironment(boolean append) throws CoreException {
|
||||||
appendEnvironment = append;
|
appendEnvironment = append;
|
||||||
manager.updateTarget(this);
|
manager.updateTarget(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean appendEnvironment() {
|
||||||
|
return appendEnvironment;
|
||||||
|
}
|
||||||
|
|
||||||
public IContainer getContainer() {
|
public IContainer getContainer() {
|
||||||
return container;
|
return container;
|
||||||
|
@ -152,20 +254,16 @@ public class MakeTarget extends PlatformObject implements IMakeTarget {
|
||||||
final HashMap infoMap = new HashMap();
|
final HashMap infoMap = new HashMap();
|
||||||
|
|
||||||
IMakeBuilderInfo info = MakeCorePlugin.createBuildInfo(infoMap, builderID);
|
IMakeBuilderInfo info = MakeCorePlugin.createBuildInfo(infoMap, builderID);
|
||||||
if (buildArguments != null) {
|
info.setBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, "make")); //$NON-NLS-1$
|
||||||
info.setBuildArguments(buildArguments);
|
info.setBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, getBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, "")); //$NON-NLS-1$
|
||||||
}
|
|
||||||
if (buildCommand != null) {
|
|
||||||
info.setBuildCommand(buildCommand);
|
|
||||||
}
|
|
||||||
info.setUseDefaultBuildCmd(isDefaultBuildCmd);
|
info.setUseDefaultBuildCmd(isDefaultBuildCmd);
|
||||||
info.setStopOnError(isStopOnError);
|
info.setStopOnError(isStopOnError);
|
||||||
info.setFullBuildEnable(true);
|
info.setFullBuildEnable(true);
|
||||||
info.setFullBuildTarget(target);
|
info.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_FULL, getBuildAttribute(IMakeTarget.BUILD_TARGET, "")); //$NON-NLS-1$
|
||||||
info.setEnvironment(buildEnvironment);
|
info.setEnvironment(buildEnvironment);
|
||||||
info.setAppendEnvironment(appendEnvironment);
|
info.setAppendEnvironment(appendEnvironment);
|
||||||
if (container != null) {
|
if (container != null) {
|
||||||
info.setBuildLocation(container.getFullPath());
|
info.setBuildAttribute(IMakeCommonBuildInfo.BUILD_LOCATION, container.getFullPath().toString());
|
||||||
}
|
}
|
||||||
IMakeBuilderInfo projectInfo = MakeCorePlugin.createBuildInfo(project, builderID);
|
IMakeBuilderInfo projectInfo = MakeCorePlugin.createBuildInfo(project, builderID);
|
||||||
info.setErrorParsers(projectInfo.getErrorParsers());
|
info.setErrorParsers(projectInfo.getErrorParsers());
|
||||||
|
@ -201,38 +299,6 @@ public class MakeTarget extends PlatformObject implements IMakeTarget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBuildTarget(String target) throws CoreException {
|
|
||||||
this.target = target;
|
|
||||||
manager.updateTarget(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getBuildTarget() {
|
|
||||||
return target != null ? target : ""; //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see org.eclipse.cdt.make.core.IMakeTarget#setRunAllBuilders(boolean)
|
|
||||||
*/
|
|
||||||
public void setRunAllBuilders(boolean runAllBuilders) {
|
|
||||||
this.runAllBuidlers = runAllBuilders;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see org.eclipse.cdt.make.core.IMakeTarget#runAllBuilders()
|
|
||||||
*/
|
|
||||||
public boolean runAllBuilders() {
|
|
||||||
return runAllBuidlers;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
|
|
||||||
*/
|
|
||||||
public Object getAdapter(Class adapter) {
|
public Object getAdapter(Class adapter) {
|
||||||
if (adapter.equals(IProject.class)) {
|
if (adapter.equals(IProject.class)) {
|
||||||
return container.getProject();
|
return container.getProject();
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
package org.eclipse.cdt.make.internal.core;
|
package org.eclipse.cdt.make.internal.core;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.make.core.IMakeCommonBuildInfo;
|
||||||
import org.eclipse.cdt.make.core.IMakeBuilderInfo;
|
import org.eclipse.cdt.make.core.IMakeBuilderInfo;
|
||||||
import org.eclipse.cdt.make.core.MakeBuilder;
|
import org.eclipse.cdt.make.core.MakeBuilder;
|
||||||
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
||||||
|
@ -29,18 +30,18 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer {
|
||||||
public void initializeDefaultPreferences() {
|
public void initializeDefaultPreferences() {
|
||||||
IMakeBuilderInfo info = MakeCorePlugin.createBuildInfo(MakeCorePlugin.getDefault().getPluginPreferences(), MakeBuilder.BUILDER_ID, true);
|
IMakeBuilderInfo info = MakeCorePlugin.createBuildInfo(MakeCorePlugin.getDefault().getPluginPreferences(), MakeBuilder.BUILDER_ID, true);
|
||||||
try {
|
try {
|
||||||
info.setBuildCommand(new Path("make")); //$NON-NLS-1$
|
info.setBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, "make"); //$NON-NLS-1$
|
||||||
info.setBuildLocation(new Path("")); //$NON-NLS-1$
|
info.setBuildAttribute(IMakeCommonBuildInfo.BUILD_LOCATION, ""); //$NON-NLS-1$
|
||||||
info.setStopOnError(false);
|
info.setStopOnError(false);
|
||||||
info.setUseDefaultBuildCmd(true);
|
info.setUseDefaultBuildCmd(true);
|
||||||
info.setAutoBuildEnable(false);
|
info.setAutoBuildEnable(false);
|
||||||
info.setAutoBuildTarget("all"); //$NON-NLS-1$
|
info.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_AUTO, "all"); //$NON-NLS-1$
|
||||||
info.setIncrementalBuildEnable(true);
|
info.setIncrementalBuildEnable(true);
|
||||||
info.setIncrementalBuildTarget("all"); //$NON-NLS-1$
|
info.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_INCREAMENTAL, "all"); //$NON-NLS-1$
|
||||||
info.setFullBuildEnable(true);
|
info.setFullBuildEnable(true);
|
||||||
info.setFullBuildTarget("clean all"); //$NON-NLS-1$
|
info.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_FULL, "clean all"); //$NON-NLS-1$
|
||||||
info.setCleanBuildEnable(true);
|
info.setCleanBuildEnable(true);
|
||||||
info.setCleanBuildTarget("clean"); //$NON-NLS-1$
|
info.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_CLEAN, "clean"); //$NON-NLS-1$
|
||||||
info.setAppendEnvironment(true);
|
info.setAppendEnvironment(true);
|
||||||
info.setErrorParsers(CCorePlugin.getDefault().getAllErrorParsersIDs());
|
info.setErrorParsers(CCorePlugin.getDefault().getAllErrorParsersIDs());
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
|
|
|
@ -32,6 +32,7 @@ import javax.xml.transform.stream.StreamResult;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.ICDescriptor;
|
import org.eclipse.cdt.core.ICDescriptor;
|
||||||
|
import org.eclipse.cdt.make.core.IMakeCommonBuildInfo;
|
||||||
import org.eclipse.cdt.make.core.IMakeTarget;
|
import org.eclipse.cdt.make.core.IMakeTarget;
|
||||||
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
||||||
import org.eclipse.core.resources.IContainer;
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
@ -39,7 +40,6 @@ import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Path;
|
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
@ -209,17 +209,19 @@ public class ProjectTargets {
|
||||||
targetElem.setAttribute(TARGET_ATTR_PATH, target.getContainer().getProjectRelativePath().toString());
|
targetElem.setAttribute(TARGET_ATTR_PATH, target.getContainer().getProjectRelativePath().toString());
|
||||||
Element elem = doc.createElement(TARGET_COMMAND);
|
Element elem = doc.createElement(TARGET_COMMAND);
|
||||||
targetElem.appendChild(elem);
|
targetElem.appendChild(elem);
|
||||||
elem.appendChild(doc.createTextNode(target.getBuildCommand().toString()));
|
elem.appendChild(doc.createTextNode(target.getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, "make"))); //$NON-NLS-1$
|
||||||
|
|
||||||
if (target.getBuildArguments().length() > 0) {
|
String targetAttr = target.getBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, null);
|
||||||
|
if ( targetAttr != null) {
|
||||||
elem = doc.createElement(TARGET_ARGUMENTS);
|
elem = doc.createElement(TARGET_ARGUMENTS);
|
||||||
elem.appendChild(doc.createTextNode(target.getBuildArguments()));
|
elem.appendChild(doc.createTextNode(targetAttr));
|
||||||
targetElem.appendChild(elem);
|
targetElem.appendChild(elem);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target.getBuildTarget().length() > 0) {
|
targetAttr = target.getBuildAttribute(IMakeTarget.BUILD_TARGET, null);
|
||||||
|
if (targetAttr != null) {
|
||||||
elem = doc.createElement(TARGET);
|
elem = doc.createElement(TARGET);
|
||||||
elem.appendChild(doc.createTextNode(target.getBuildTarget()));
|
elem.appendChild(doc.createTextNode(targetAttr));
|
||||||
targetElem.appendChild(elem);
|
targetElem.appendChild(elem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,19 +365,19 @@ public class ProjectTargets {
|
||||||
}
|
}
|
||||||
option = getString(node, TARGET_COMMAND);
|
option = getString(node, TARGET_COMMAND);
|
||||||
if (option != null) {
|
if (option != null) {
|
||||||
target.setBuildCommand(new Path(option));
|
target.setBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, option);
|
||||||
}
|
}
|
||||||
option = getString(node, TARGET_ARGUMENTS);
|
option = getString(node, TARGET_ARGUMENTS);
|
||||||
if (option != null) {
|
if (option != null) {
|
||||||
target.setBuildArguments(option);
|
target.setBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, option);
|
||||||
}
|
}
|
||||||
option = getString(node, BAD_TARGET);
|
option = getString(node, BAD_TARGET);
|
||||||
if (option != null) {
|
if (option != null) {
|
||||||
target.setBuildTarget(option);
|
target.setBuildAttribute(IMakeTarget.BUILD_TARGET, option);
|
||||||
}
|
}
|
||||||
option = getString(node, TARGET);
|
option = getString(node, TARGET);
|
||||||
if (option != null) {
|
if (option != null) {
|
||||||
target.setBuildTarget(option);
|
target.setBuildAttribute(IMakeTarget.BUILD_TARGET, option);
|
||||||
}
|
}
|
||||||
add(target);
|
add(target);
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
|
|
BIN
build/org.eclipse.cdt.make.ui/icons/obj16/environment_obj.gif
Normal file
BIN
build/org.eclipse.cdt.make.ui/icons/obj16/environment_obj.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 615 B |
BIN
build/org.eclipse.cdt.make.ui/icons/obj16/envvar_obj.gif
Normal file
BIN
build/org.eclipse.cdt.make.ui/icons/obj16/envvar_obj.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 207 B |
|
@ -0,0 +1,88 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2005 IBM Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui;
|
||||||
|
|
||||||
|
import org.eclipse.jface.dialogs.IDialogSettings;
|
||||||
|
import org.eclipse.swt.graphics.Point;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper class for dealing with setting and restoring dialog settings.
|
||||||
|
*/
|
||||||
|
public class DialogSettingsHelper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Persists the location and dimensions of the shell in the
|
||||||
|
* Debug UI Plugin dialog settings under the provided dialog settings section name
|
||||||
|
*
|
||||||
|
* @param shell The shell whose geometry is to be stored
|
||||||
|
* @param dialogSettingsSectionName The name of the dialog settings section
|
||||||
|
*/
|
||||||
|
public static void persistShellGeometry(Shell shell, String dialogSettingsSectionName) {
|
||||||
|
Point shellLocation = shell.getLocation();
|
||||||
|
Point shellSize = shell.getSize();
|
||||||
|
IDialogSettings settings = getDialogSettings(dialogSettingsSectionName);
|
||||||
|
settings.put(IMakeUIPreferenceConstants.DIALOG_ORIGIN_X, shellLocation.x);
|
||||||
|
settings.put(IMakeUIPreferenceConstants.DIALOG_ORIGIN_Y, shellLocation.y);
|
||||||
|
settings.put(IMakeUIPreferenceConstants.DIALOG_WIDTH, shellSize.x);
|
||||||
|
settings.put(IMakeUIPreferenceConstants.DIALOG_HEIGHT, shellSize.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IDialogSettings getDialogSettings(String dialogSettingsSectionName) {
|
||||||
|
IDialogSettings settings = MakeUIPlugin.getDefault().getDialogSettings();
|
||||||
|
IDialogSettings section = settings.getSection(dialogSettingsSectionName);
|
||||||
|
if (section == null) {
|
||||||
|
section = settings.addNewSection(dialogSettingsSectionName);
|
||||||
|
}
|
||||||
|
return section;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the initial size which is the larger of the <code>initialSize</code> or
|
||||||
|
* the size persisted in the Debug UI Plugin dialog settings under the provided dialog setttings section name.
|
||||||
|
* If no size is persisted in the settings, the <code>initialSize</code> is returned.
|
||||||
|
*
|
||||||
|
* @param initialSize The initialSize to compare against
|
||||||
|
* @param dialogSettingsSectionName The name of the dialog settings section
|
||||||
|
* @return the initial size
|
||||||
|
*/
|
||||||
|
public static Point getInitialSize(String dialogSettingsSectionName, Point initialSize) {
|
||||||
|
IDialogSettings settings = getDialogSettings(dialogSettingsSectionName);
|
||||||
|
try {
|
||||||
|
int x, y;
|
||||||
|
x = settings.getInt(IMakeUIPreferenceConstants.DIALOG_WIDTH);
|
||||||
|
y = settings.getInt(IMakeUIPreferenceConstants.DIALOG_HEIGHT);
|
||||||
|
return new Point(Math.max(x, initialSize.x), Math.max(y, initialSize.y));
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
}
|
||||||
|
return initialSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the initial location which is persisted in the Debug UI Plugin dialog settings
|
||||||
|
* under the provided dialog setttings section name.
|
||||||
|
* If location is not persisted in the settings, the <code>null</code> is returned.
|
||||||
|
*
|
||||||
|
* @param dialogSettingsSectionName The name of the dialog settings section
|
||||||
|
* @return The initial location or <code>null</code>
|
||||||
|
*/
|
||||||
|
public static Point getInitialLocation(String dialogSettingsSectionName) {
|
||||||
|
IDialogSettings settings = getDialogSettings(dialogSettingsSectionName);
|
||||||
|
try {
|
||||||
|
int x= settings.getInt(IMakeUIPreferenceConstants.DIALOG_ORIGIN_X);
|
||||||
|
int y= settings.getInt(IMakeUIPreferenceConstants.DIALOG_ORIGIN_Y);
|
||||||
|
return new Point(x,y);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2004 QNX Software Systems and others. All rights reserved. This
|
||||||
|
* program and the accompanying materials are made available under the terms of
|
||||||
|
* the Common Public License v1.0 which accompanies this distribution, and is
|
||||||
|
* available at http://www.eclipse.org/legal/cpl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors: QNX Software Systems - initial API and implementation
|
||||||
|
******************************************************************************/
|
||||||
|
package org.eclipse.cdt.make.internal.ui;
|
||||||
|
|
||||||
|
public interface IMakeUIPreferenceConstants {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Common dialog settings
|
||||||
|
*/
|
||||||
|
public static final String DIALOG_ORIGIN_X = MakeUIPlugin.getPluginId() + ".DIALOG_ORIGIN_X"; //$NON-NLS-1$
|
||||||
|
public static final String DIALOG_ORIGIN_Y = MakeUIPlugin.getPluginId() + ".DIALOG_ORIGIN_Y"; //$NON-NLS-1$
|
||||||
|
public static final String DIALOG_WIDTH = MakeUIPlugin.getPluginId() + ".DIALOG_WIDTH"; //$NON-NLS-1$
|
||||||
|
public static final String DIALOG_HEIGHT = MakeUIPlugin.getPluginId() + ".DIALOG_HEIGHT"; //$NON-NLS-1$
|
||||||
|
public static final String DIALOG_SASH_WEIGHTS_1 = MakeUIPlugin.getPluginId() + ".DIALOG_SASH_WEIGHTS_1"; //$NON-NLS-1$
|
||||||
|
public static final String DIALOG_SASH_WEIGHTS_2 = MakeUIPlugin.getPluginId() + ".DIALOG_SASH_WEIGHTS_2"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,808 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2004 QNX Software Systems and others. All rights reserved. This
|
||||||
|
* program and the accompanying materials are made available under the terms of
|
||||||
|
* the Common Public License v1.0 which accompanies this distribution, and is
|
||||||
|
* available at http://www.eclipse.org/legal/cpl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors: QNX Software Systems - initial API and implementation
|
||||||
|
******************************************************************************/
|
||||||
|
package org.eclipse.cdt.make.internal.ui;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.IMakeBuilderInfo;
|
||||||
|
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
||||||
|
import org.eclipse.cdt.make.ui.IMakeHelpContextIds;
|
||||||
|
import org.eclipse.cdt.ui.dialogs.AbstractCOptionPage;
|
||||||
|
import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
|
||||||
|
import org.eclipse.cdt.utils.spawner.EnvironmentReader;
|
||||||
|
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
|
||||||
|
import org.eclipse.core.resources.IWorkspace;
|
||||||
|
import org.eclipse.core.resources.IWorkspaceRunnable;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.Preferences;
|
||||||
|
import org.eclipse.jface.dialogs.IDialogSettings;
|
||||||
|
import org.eclipse.jface.dialogs.MessageDialog;
|
||||||
|
import org.eclipse.jface.viewers.ColumnLayoutData;
|
||||||
|
import org.eclipse.jface.viewers.ColumnWeightData;
|
||||||
|
import org.eclipse.jface.viewers.DoubleClickEvent;
|
||||||
|
import org.eclipse.jface.viewers.IDoubleClickListener;
|
||||||
|
import org.eclipse.jface.viewers.ILabelProvider;
|
||||||
|
import org.eclipse.jface.viewers.ILabelProviderListener;
|
||||||
|
import org.eclipse.jface.viewers.ISelectionChangedListener;
|
||||||
|
import org.eclipse.jface.viewers.IStructuredContentProvider;
|
||||||
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
|
import org.eclipse.jface.viewers.ITableLabelProvider;
|
||||||
|
import org.eclipse.jface.viewers.LabelProvider;
|
||||||
|
import org.eclipse.jface.viewers.SelectionChangedEvent;
|
||||||
|
import org.eclipse.jface.viewers.TableLayout;
|
||||||
|
import org.eclipse.jface.viewers.TableViewer;
|
||||||
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
|
import org.eclipse.jface.viewers.ViewerSorter;
|
||||||
|
import org.eclipse.jface.window.Window;
|
||||||
|
import org.eclipse.swt.SWT;
|
||||||
|
import org.eclipse.swt.events.SelectionAdapter;
|
||||||
|
import org.eclipse.swt.events.SelectionEvent;
|
||||||
|
import org.eclipse.swt.graphics.Font;
|
||||||
|
import org.eclipse.swt.graphics.Image;
|
||||||
|
import org.eclipse.swt.graphics.Point;
|
||||||
|
import org.eclipse.swt.layout.GridData;
|
||||||
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
|
import org.eclipse.swt.widgets.Button;
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.swt.widgets.Label;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
import org.eclipse.swt.widgets.Table;
|
||||||
|
import org.eclipse.swt.widgets.TableColumn;
|
||||||
|
import org.eclipse.swt.widgets.TableItem;
|
||||||
|
import org.eclipse.ui.dialogs.ListSelectionDialog;
|
||||||
|
|
||||||
|
public class MakeEnvironmentBlock extends AbstractCOptionPage {
|
||||||
|
|
||||||
|
Preferences fPrefs;
|
||||||
|
String fBuilderID;
|
||||||
|
IMakeBuilderInfo fBuildInfo;
|
||||||
|
protected TableViewer environmentTable;
|
||||||
|
protected String[] envTableColumnHeaders = {MakeUIPlugin.getResourceString("MakeEnvironmentBlock.0"), MakeUIPlugin.getResourceString("MakeEnvironmentBlock.1")}; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
protected ColumnLayoutData[] envTableColumnLayouts = {new ColumnWeightData(50), new ColumnWeightData(50)};
|
||||||
|
|
||||||
|
private static final String NAME_LABEL = MakeUIPlugin.getResourceString("MakeEnvironmentBlock.2"); //$NON-NLS-1$
|
||||||
|
private static final String VALUE_LABEL = MakeUIPlugin.getResourceString("MakeEnvironmentBlock.3"); //$NON-NLS-1$
|
||||||
|
|
||||||
|
protected static final String P_VARIABLE = "variable"; //$NON-NLS-1$
|
||||||
|
protected static final String P_VALUE = "value"; //$NON-NLS-1$
|
||||||
|
protected static String[] envTableColumnProperties = {P_VARIABLE, P_VALUE};
|
||||||
|
protected Button envAddButton;
|
||||||
|
protected Button envEditButton;
|
||||||
|
protected Button envRemoveButton;
|
||||||
|
protected Button appendEnvironment;
|
||||||
|
protected Button replaceEnvironment;
|
||||||
|
protected Button envSelectButton;
|
||||||
|
|
||||||
|
class EnvironmentVariable {
|
||||||
|
|
||||||
|
// The name of the environment variable
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
// The value of the environment variable
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
EnvironmentVariable(String name, String value) {
|
||||||
|
this.name = name;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns this variable's name, which serves as the key in the
|
||||||
|
* key/value pair this variable represents
|
||||||
|
*
|
||||||
|
* @return this variable's name
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns this variables value.
|
||||||
|
*
|
||||||
|
* @return this variable's value
|
||||||
|
*/
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets this variable's value
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#toString()
|
||||||
|
*/
|
||||||
|
public String toString() {
|
||||||
|
return getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#equals(java.lang.Object)
|
||||||
|
*/
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
boolean equal = false;
|
||||||
|
if (obj instanceof EnvironmentVariable) {
|
||||||
|
EnvironmentVariable var = (EnvironmentVariable)obj;
|
||||||
|
equal = var.getName().equals(name);
|
||||||
|
}
|
||||||
|
return equal;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#hashCode()
|
||||||
|
*/
|
||||||
|
public int hashCode() {
|
||||||
|
return name.hashCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Content provider for the environment table
|
||||||
|
*/
|
||||||
|
protected class EnvironmentVariableContentProvider implements IStructuredContentProvider {
|
||||||
|
|
||||||
|
public Object[] getElements(Object inputElement) {
|
||||||
|
EnvironmentVariable[] elements = new EnvironmentVariable[0];
|
||||||
|
IMakeBuilderInfo info = (IMakeBuilderInfo)inputElement;
|
||||||
|
Map m = info.getEnvironment();
|
||||||
|
if (m != null && !m.isEmpty()) {
|
||||||
|
elements = new EnvironmentVariable[m.size()];
|
||||||
|
String[] varNames = new String[m.size()];
|
||||||
|
m.keySet().toArray(varNames);
|
||||||
|
for (int i = 0; i < m.size(); i++) {
|
||||||
|
elements[i] = new EnvironmentVariable(varNames[i], (String)m.get(varNames[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return elements;
|
||||||
|
}
|
||||||
|
public void dispose() {
|
||||||
|
}
|
||||||
|
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
||||||
|
if (newInput == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (viewer instanceof TableViewer) {
|
||||||
|
TableViewer tableViewer = (TableViewer)viewer;
|
||||||
|
if (tableViewer.getTable().isDisposed()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tableViewer.setSorter(new ViewerSorter() {
|
||||||
|
|
||||||
|
public int compare(Viewer iviewer, Object e1, Object e2) {
|
||||||
|
if (e1 == null) {
|
||||||
|
return -1;
|
||||||
|
} else if (e2 == null) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return ((EnvironmentVariable)e1).getName().compareToIgnoreCase( ((EnvironmentVariable)e2).getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Label provider for the environment table
|
||||||
|
*/
|
||||||
|
public class EnvironmentVariableLabelProvider extends LabelProvider implements ITableLabelProvider {
|
||||||
|
|
||||||
|
public String getColumnText(Object element, int columnIndex) {
|
||||||
|
String result = null;
|
||||||
|
if (element != null) {
|
||||||
|
EnvironmentVariable var = (EnvironmentVariable)element;
|
||||||
|
switch (columnIndex) {
|
||||||
|
case 0 : // variable
|
||||||
|
result = var.getName();
|
||||||
|
break;
|
||||||
|
case 1 : // value
|
||||||
|
result = var.getValue();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
public Image getColumnImage(Object element, int columnIndex) {
|
||||||
|
if (columnIndex == 0) {
|
||||||
|
return MakeUIImages.getImage(MakeUIImages.IMG_OBJS_ENV_VAR);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public MakeEnvironmentBlock(Preferences prefs, String builderID) {
|
||||||
|
super(MakeUIPlugin.getResourceString("MakeEnvironmentBlock.4")); //$NON-NLS-1$
|
||||||
|
setDescription(MakeUIPlugin.getResourceString("MakeEnvironmentBlock.5")); //$NON-NLS-1$
|
||||||
|
fPrefs = prefs;
|
||||||
|
fBuilderID = builderID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContainer(ICOptionContainer container) {
|
||||||
|
super.setContainer(container);
|
||||||
|
if (getContainer().getProject() != null) {
|
||||||
|
try {
|
||||||
|
fBuildInfo = MakeCorePlugin.createBuildInfo(getContainer().getProject(), fBuilderID);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fBuildInfo = MakeCorePlugin.createBuildInfo(fPrefs, fBuilderID, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void performApply(IProgressMonitor monitor) throws CoreException {
|
||||||
|
// Missing builder info
|
||||||
|
if (fBuildInfo == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (monitor == null) {
|
||||||
|
monitor = new NullProgressMonitor();
|
||||||
|
}
|
||||||
|
IWorkspace workspace = MakeUIPlugin.getWorkspace();
|
||||||
|
// To avoid multi-build
|
||||||
|
IWorkspaceRunnable operation = new IWorkspaceRunnable() {
|
||||||
|
|
||||||
|
public void run(IProgressMonitor monitor) throws CoreException {
|
||||||
|
monitor.beginTask(MakeUIPlugin.getResourceString("SettingsBlock.monitor.applyingSettings"), 1); //$NON-NLS-1$
|
||||||
|
IMakeBuilderInfo info = null;
|
||||||
|
if (getContainer().getProject() != null) {
|
||||||
|
try {
|
||||||
|
info = MakeCorePlugin.createBuildInfo(getContainer().getProject(), fBuilderID);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
// disabled builder... just log it
|
||||||
|
MakeCorePlugin.log(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
info = MakeCorePlugin.createBuildInfo(fPrefs, fBuilderID, false);
|
||||||
|
}
|
||||||
|
// Convert the table's items into a Map so that this can be saved in the
|
||||||
|
// configuration's attributes.
|
||||||
|
TableItem[] items = environmentTable.getTable().getItems();
|
||||||
|
Map map = new HashMap(items.length);
|
||||||
|
for (int i = 0; i < items.length; i++)
|
||||||
|
{
|
||||||
|
EnvironmentVariable var = (EnvironmentVariable) items[i].getData();
|
||||||
|
map.put(var.getName(), var.getValue());
|
||||||
|
}
|
||||||
|
info.setEnvironment(map);
|
||||||
|
info.setAppendEnvironment(appendEnvironment.getSelection());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (getContainer().getProject() != null) {
|
||||||
|
workspace.run(operation, monitor);
|
||||||
|
} else {
|
||||||
|
operation.run(monitor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the environment table for the given launch configuration
|
||||||
|
*
|
||||||
|
* @param configuration
|
||||||
|
*/
|
||||||
|
protected void updateEnvironment(IMakeBuilderInfo info) {
|
||||||
|
environmentTable.setInput(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void performDefaults() {
|
||||||
|
// Missing builder info
|
||||||
|
if (fBuildInfo == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IMakeBuilderInfo info;
|
||||||
|
if (getContainer().getProject() != null) {
|
||||||
|
info = MakeCorePlugin.createBuildInfo(fPrefs, fBuilderID, false);
|
||||||
|
} else {
|
||||||
|
info = MakeCorePlugin.createBuildInfo(fPrefs, fBuilderID, true);
|
||||||
|
}
|
||||||
|
boolean append = info.appendEnvironment();
|
||||||
|
if (append) {
|
||||||
|
appendEnvironment.setSelection(true);
|
||||||
|
replaceEnvironment.setSelection(false);
|
||||||
|
} else {
|
||||||
|
replaceEnvironment.setSelection(true);
|
||||||
|
appendEnvironment.setSelection(false);
|
||||||
|
}
|
||||||
|
updateEnvironment(info);
|
||||||
|
updateAppendReplace();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createControl(Composite parent) {
|
||||||
|
Composite composite = ControlFactory.createComposite(parent, 1);
|
||||||
|
setControl(composite);
|
||||||
|
|
||||||
|
MakeUIPlugin.getDefault().getWorkbench().getHelpSystem().setHelp(getControl(), IMakeHelpContextIds.MAKE_BUILDER_SETTINGS);
|
||||||
|
|
||||||
|
if (fBuildInfo == null) {
|
||||||
|
ControlFactory.createEmptySpace(composite);
|
||||||
|
ControlFactory.createLabel(composite, MakeUIPlugin.getResourceString("SettingsBlock.label.missingBuilderInformation")); //$NON-NLS-1$
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GridLayout layout = new GridLayout();
|
||||||
|
layout.numColumns = 2;
|
||||||
|
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
|
||||||
|
composite.setLayout(layout);
|
||||||
|
composite.setLayoutData(gridData);
|
||||||
|
composite.setFont(parent.getFont());
|
||||||
|
|
||||||
|
createBuildEnvironmentControls(composite);
|
||||||
|
createTableButtons(composite);
|
||||||
|
createAppendReplace(composite);
|
||||||
|
|
||||||
|
boolean append = fBuildInfo.appendEnvironment();
|
||||||
|
if (append) {
|
||||||
|
appendEnvironment.setSelection(true);
|
||||||
|
replaceEnvironment.setSelection(false);
|
||||||
|
} else {
|
||||||
|
replaceEnvironment.setSelection(true);
|
||||||
|
appendEnvironment.setSelection(false);
|
||||||
|
}
|
||||||
|
updateEnvironment(fBuildInfo);
|
||||||
|
updateAppendReplace();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createBuildEnvironmentControls(Composite parent) {
|
||||||
|
Font font = parent.getFont();
|
||||||
|
// Create table composite
|
||||||
|
Composite tableComposite = new Composite(parent, SWT.NONE);
|
||||||
|
GridLayout layout = new GridLayout();
|
||||||
|
layout.marginHeight = 0;
|
||||||
|
layout.marginWidth = 0;
|
||||||
|
layout.numColumns = 1;
|
||||||
|
GridData gridData = new GridData(GridData.FILL_BOTH);
|
||||||
|
gridData.heightHint = 150;
|
||||||
|
tableComposite.setLayout(layout);
|
||||||
|
tableComposite.setLayoutData(gridData);
|
||||||
|
tableComposite.setFont(font);
|
||||||
|
// Create label
|
||||||
|
Label label = new Label(tableComposite, SWT.NONE);
|
||||||
|
label.setFont(font);
|
||||||
|
label.setText(MakeUIPlugin.getResourceString("MakeEnvironmentBlock.6")); //$NON-NLS-1$
|
||||||
|
// Create table
|
||||||
|
environmentTable = new TableViewer(tableComposite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI
|
||||||
|
| SWT.FULL_SELECTION);
|
||||||
|
Table table = environmentTable.getTable();
|
||||||
|
TableLayout tableLayout = new TableLayout();
|
||||||
|
table.setLayout(tableLayout);
|
||||||
|
table.setHeaderVisible(true);
|
||||||
|
table.setFont(font);
|
||||||
|
gridData = new GridData(GridData.FILL_BOTH);
|
||||||
|
environmentTable.getControl().setLayoutData(gridData);
|
||||||
|
environmentTable.setContentProvider(new EnvironmentVariableContentProvider());
|
||||||
|
environmentTable.setLabelProvider(new EnvironmentVariableLabelProvider());
|
||||||
|
environmentTable.setColumnProperties(envTableColumnProperties);
|
||||||
|
environmentTable.addSelectionChangedListener(new ISelectionChangedListener() {
|
||||||
|
|
||||||
|
public void selectionChanged(SelectionChangedEvent event) {
|
||||||
|
handleTableSelectionChanged(event);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
environmentTable.addDoubleClickListener(new IDoubleClickListener() {
|
||||||
|
|
||||||
|
public void doubleClick(DoubleClickEvent event) {
|
||||||
|
if (!environmentTable.getSelection().isEmpty()) {
|
||||||
|
handleEnvEditButtonSelected();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// Create columns
|
||||||
|
for (int i = 0; i < envTableColumnHeaders.length; i++) {
|
||||||
|
tableLayout.addColumnData(envTableColumnLayouts[i]);
|
||||||
|
TableColumn tc = new TableColumn(table, SWT.NONE, i);
|
||||||
|
tc.setResizable(envTableColumnLayouts[i].resizable);
|
||||||
|
tc.setText(envTableColumnHeaders[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Responds to a selection changed event in the environment table
|
||||||
|
*
|
||||||
|
* @param event
|
||||||
|
* the selection change event
|
||||||
|
*/
|
||||||
|
protected void handleTableSelectionChanged(SelectionChangedEvent event) {
|
||||||
|
int size = ((IStructuredSelection)event.getSelection()).size();
|
||||||
|
envEditButton.setEnabled(size == 1);
|
||||||
|
envRemoveButton.setEnabled(size > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create some empty space.
|
||||||
|
*/
|
||||||
|
protected void createVerticalSpacer(Composite comp, int colSpan) {
|
||||||
|
Label label = new Label(comp, SWT.NONE);
|
||||||
|
GridData gd = new GridData();
|
||||||
|
gd.horizontalSpan = colSpan;
|
||||||
|
label.setLayoutData(gd);
|
||||||
|
label.setFont(comp.getFont());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the add/edit/remove buttons for the environment table
|
||||||
|
*
|
||||||
|
* @param parent
|
||||||
|
* the composite in which the buttons should be created
|
||||||
|
*/
|
||||||
|
protected void createTableButtons(Composite parent) {
|
||||||
|
// Create button composite
|
||||||
|
Composite buttonComposite = new Composite(parent, SWT.NONE);
|
||||||
|
GridLayout glayout = new GridLayout();
|
||||||
|
glayout.marginHeight = 0;
|
||||||
|
glayout.marginWidth = 0;
|
||||||
|
glayout.numColumns = 1;
|
||||||
|
GridData gdata = new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_END);
|
||||||
|
buttonComposite.setLayout(glayout);
|
||||||
|
buttonComposite.setLayoutData(gdata);
|
||||||
|
buttonComposite.setFont(parent.getFont());
|
||||||
|
|
||||||
|
createVerticalSpacer(buttonComposite, 1);
|
||||||
|
// Create buttons
|
||||||
|
envAddButton = createPushButton(buttonComposite, MakeUIPlugin.getResourceString("MakeEnvironmentBlock.7"), null); //$NON-NLS-1$
|
||||||
|
envAddButton.addSelectionListener(new SelectionAdapter() {
|
||||||
|
|
||||||
|
public void widgetSelected(SelectionEvent event) {
|
||||||
|
handleEnvAddButtonSelected();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
envSelectButton = createPushButton(buttonComposite, MakeUIPlugin.getResourceString("MakeEnvironmentBlock.8"), null); //$NON-NLS-1$
|
||||||
|
envSelectButton.addSelectionListener(new SelectionAdapter() {
|
||||||
|
|
||||||
|
public void widgetSelected(SelectionEvent event) {
|
||||||
|
handleEnvSelectButtonSelected();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
envEditButton = createPushButton(buttonComposite, MakeUIPlugin.getResourceString("MakeEnvironmentBlock.9"), null); //$NON-NLS-1$
|
||||||
|
envEditButton.addSelectionListener(new SelectionAdapter() {
|
||||||
|
|
||||||
|
public void widgetSelected(SelectionEvent event) {
|
||||||
|
handleEnvEditButtonSelected();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
envEditButton.setEnabled(false);
|
||||||
|
envRemoveButton = createPushButton(buttonComposite, MakeUIPlugin.getResourceString("MakeEnvironmentBlock.10"), null); //$NON-NLS-1$
|
||||||
|
envRemoveButton.addSelectionListener(new SelectionAdapter() {
|
||||||
|
|
||||||
|
public void widgetSelected(SelectionEvent event) {
|
||||||
|
handleEnvRemoveButtonSelected();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
envRemoveButton.setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a new environment variable to the table.
|
||||||
|
*/
|
||||||
|
protected void handleEnvAddButtonSelected() {
|
||||||
|
MultipleInputDialog dialog = new MultipleInputDialog(getShell(), MakeUIPlugin.getResourceString("MakeEnvironmentBlock.11")); //$NON-NLS-1$
|
||||||
|
dialog.addTextField(NAME_LABEL, null, false);
|
||||||
|
dialog.addVariablesField(VALUE_LABEL, null, true);
|
||||||
|
|
||||||
|
if (dialog.open() != Window.OK) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String name = dialog.getStringValue(NAME_LABEL);
|
||||||
|
String value = dialog.getStringValue(VALUE_LABEL);
|
||||||
|
|
||||||
|
if (name != null && value != null && name.length() > 0 && value.length() > 0) {
|
||||||
|
addVariable(new EnvironmentVariable(name.trim(), value.trim()));
|
||||||
|
updateAppendReplace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the enablement of the append/replace widgets. The widgets should
|
||||||
|
* disable when there are no environment variables specified.
|
||||||
|
*/
|
||||||
|
protected void updateAppendReplace() {
|
||||||
|
boolean enable = environmentTable.getTable().getItemCount() > 0;
|
||||||
|
appendEnvironment.setEnabled(enable);
|
||||||
|
replaceEnvironment.setEnabled(enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to add the given variable. Returns whether the variable was
|
||||||
|
* added or not (as when the user answers not to overwrite an existing
|
||||||
|
* variable).
|
||||||
|
*
|
||||||
|
* @param variable
|
||||||
|
* the variable to add
|
||||||
|
* @return whether the variable was added
|
||||||
|
*/
|
||||||
|
protected boolean addVariable(EnvironmentVariable variable) {
|
||||||
|
String name = variable.getName();
|
||||||
|
TableItem[] items = environmentTable.getTable().getItems();
|
||||||
|
for (int i = 0; i < items.length; i++) {
|
||||||
|
EnvironmentVariable existingVariable = (EnvironmentVariable)items[i].getData();
|
||||||
|
if (existingVariable.getName().equals(name)) {
|
||||||
|
boolean overWrite = MessageDialog.openQuestion(getShell(), MakeUIPlugin.getResourceString("MakeEnvironmentBlock.12"), MessageFormat.format( //$NON-NLS-1$
|
||||||
|
MakeUIPlugin.getResourceString("MakeEnvironmentBlock.13"), new String[]{name})); //$NON-NLS-1$
|
||||||
|
if (!overWrite) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
environmentTable.remove(existingVariable);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
environmentTable.add(variable);
|
||||||
|
getContainer().updateContainer();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets native environment variable. Creates EnvironmentVariable objects.
|
||||||
|
*
|
||||||
|
* @return Map of name - EnvironmentVariable pairs based on native
|
||||||
|
* environment.
|
||||||
|
*/
|
||||||
|
private Map getNativeEnvironment() {
|
||||||
|
Map stringVars = EnvironmentReader.getEnvVars();
|
||||||
|
HashMap vars = new HashMap();
|
||||||
|
for (Iterator i = stringVars.keySet().iterator(); i.hasNext();) {
|
||||||
|
String key = (String)i.next();
|
||||||
|
String value = (String)stringVars.get(key);
|
||||||
|
vars.put(key, new EnvironmentVariable(key, value));
|
||||||
|
}
|
||||||
|
return vars;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays a dialog that allows user to select native environment variables
|
||||||
|
* to add to the table.
|
||||||
|
*/
|
||||||
|
protected void handleEnvSelectButtonSelected() {
|
||||||
|
// get Environment Variables from the OS
|
||||||
|
Map envVariables = getNativeEnvironment();
|
||||||
|
|
||||||
|
// get Environment Variables from the table
|
||||||
|
TableItem[] items = environmentTable.getTable().getItems();
|
||||||
|
for (int i = 0; i < items.length; i++) {
|
||||||
|
EnvironmentVariable var = (EnvironmentVariable)items[i].getData();
|
||||||
|
envVariables.remove(var.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
ListSelectionDialog dialog = new NativeEnvironmentDialog(getShell(), envVariables, createSelectionDialogContentProvider(),
|
||||||
|
createSelectionDialogLabelProvider(), MakeUIPlugin.getResourceString("MakeEnvironmentBlock.14")); //$NON-NLS-1$
|
||||||
|
dialog.setTitle(MakeUIPlugin.getResourceString("MakeEnvironmentBlock.15")); //$NON-NLS-1$
|
||||||
|
|
||||||
|
int button = dialog.open();
|
||||||
|
if (button == Window.OK) {
|
||||||
|
Object[] selected = dialog.getResult();
|
||||||
|
for (int i = 0; i < selected.length; i++) {
|
||||||
|
environmentTable.add(selected[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateAppendReplace();
|
||||||
|
getContainer().updateContainer();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a label provider for the native native environment variable
|
||||||
|
* selection dialog.
|
||||||
|
*
|
||||||
|
* @return A label provider for the native native environment variable
|
||||||
|
* selection dialog.
|
||||||
|
*/
|
||||||
|
private ILabelProvider createSelectionDialogLabelProvider() {
|
||||||
|
return new ILabelProvider() {
|
||||||
|
|
||||||
|
public Image getImage(Object element) {
|
||||||
|
return MakeUIImages.getImage(MakeUIImages.IMG_OBJS_ENVIRONMNET);
|
||||||
|
}
|
||||||
|
public String getText(Object element) {
|
||||||
|
EnvironmentVariable var = (EnvironmentVariable)element;
|
||||||
|
return var.getName() + " [" + var.getValue() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
}
|
||||||
|
public void addListener(ILabelProviderListener listener) {
|
||||||
|
}
|
||||||
|
public void dispose() {
|
||||||
|
}
|
||||||
|
public boolean isLabelProperty(Object element, String property) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public void removeListener(ILabelProviderListener listener) {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a content provider for the native native environment variable
|
||||||
|
* selection dialog.
|
||||||
|
*
|
||||||
|
* @return A content provider for the native native environment variable
|
||||||
|
* selection dialog.
|
||||||
|
*/
|
||||||
|
private IStructuredContentProvider createSelectionDialogContentProvider() {
|
||||||
|
return new IStructuredContentProvider() {
|
||||||
|
|
||||||
|
public Object[] getElements(Object inputElement) {
|
||||||
|
EnvironmentVariable[] elements = null;
|
||||||
|
if (inputElement instanceof Map) {
|
||||||
|
Comparator comparator = new Comparator() {
|
||||||
|
|
||||||
|
public int compare(Object o1, Object o2) {
|
||||||
|
String s1 = (String)o1;
|
||||||
|
String s2 = (String)o2;
|
||||||
|
return s1.compareTo(s2);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
TreeMap envVars = new TreeMap(comparator);
|
||||||
|
envVars.putAll((Map)inputElement);
|
||||||
|
elements = new EnvironmentVariable[envVars.size()];
|
||||||
|
int index = 0;
|
||||||
|
for (Iterator iterator = envVars.keySet().iterator(); iterator.hasNext(); index++) {
|
||||||
|
Object key = iterator.next();
|
||||||
|
elements[index] = (EnvironmentVariable)envVars.get(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return elements;
|
||||||
|
}
|
||||||
|
public void dispose() {
|
||||||
|
}
|
||||||
|
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Creates an editor for the value of the selected environment variable.
|
||||||
|
*/
|
||||||
|
protected void handleEnvEditButtonSelected() {
|
||||||
|
IStructuredSelection sel = (IStructuredSelection)environmentTable.getSelection();
|
||||||
|
EnvironmentVariable var = (EnvironmentVariable)sel.getFirstElement();
|
||||||
|
if (var == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String originalName = var.getName();
|
||||||
|
String value = var.getValue();
|
||||||
|
MultipleInputDialog dialog = new MultipleInputDialog(getShell(), MakeUIPlugin.getResourceString("MakeEnvironmentBlock.16")); //$NON-NLS-1$
|
||||||
|
dialog.addTextField(NAME_LABEL, originalName, false);
|
||||||
|
dialog.addVariablesField(VALUE_LABEL, value, true);
|
||||||
|
|
||||||
|
if (dialog.open() != Window.OK) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String name = dialog.getStringValue(NAME_LABEL);
|
||||||
|
value = dialog.getStringValue(VALUE_LABEL);
|
||||||
|
if (!originalName.equals(name)) {
|
||||||
|
if (addVariable(new EnvironmentVariable(name, value))) {
|
||||||
|
environmentTable.remove(var);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var.setValue(value);
|
||||||
|
environmentTable.update(var, null);
|
||||||
|
getContainer().updateContainer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the selected environment variable from the table.
|
||||||
|
*/
|
||||||
|
protected void handleEnvRemoveButtonSelected() {
|
||||||
|
IStructuredSelection sel = (IStructuredSelection)environmentTable.getSelection();
|
||||||
|
environmentTable.getControl().setRedraw(false);
|
||||||
|
for (Iterator i = sel.iterator(); i.hasNext();) {
|
||||||
|
EnvironmentVariable var = (EnvironmentVariable)i.next();
|
||||||
|
environmentTable.remove(var);
|
||||||
|
}
|
||||||
|
environmentTable.getControl().setRedraw(true);
|
||||||
|
updateAppendReplace();
|
||||||
|
getContainer().updateContainer();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class NativeEnvironmentDialog extends ListSelectionDialog {
|
||||||
|
|
||||||
|
public NativeEnvironmentDialog(Shell parentShell, Object input, IStructuredContentProvider contentProvider,
|
||||||
|
ILabelProvider labelProvider, String message) {
|
||||||
|
super(parentShell, input, contentProvider, labelProvider, message);
|
||||||
|
setShellStyle(getShellStyle() | SWT.RESIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IDialogSettings getDialogSettings() {
|
||||||
|
IDialogSettings settings = MakeUIPlugin.getDefault().getDialogSettings();
|
||||||
|
IDialogSettings section = settings.getSection(getDialogSettingsSectionName());
|
||||||
|
if (section == null) {
|
||||||
|
section = settings.addNewSection(getDialogSettingsSectionName());
|
||||||
|
}
|
||||||
|
return section;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the name of the section that this dialog stores its settings
|
||||||
|
* in
|
||||||
|
*
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
protected String getDialogSettingsSectionName() {
|
||||||
|
return MakeUIPlugin.getPluginId() + ".ENVIRONMENT_TAB.NATIVE_ENVIROMENT_DIALOG"; //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.jface.window.Window#getInitialLocation(org.eclipse.swt.graphics.Point)
|
||||||
|
*/
|
||||||
|
protected Point getInitialLocation(Point initialSize) {
|
||||||
|
Point initialLocation = DialogSettingsHelper.getInitialLocation(getDialogSettingsSectionName());
|
||||||
|
if (initialLocation != null) {
|
||||||
|
return initialLocation;
|
||||||
|
}
|
||||||
|
return super.getInitialLocation(initialSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.jface.window.Window#getInitialSize()
|
||||||
|
*/
|
||||||
|
protected Point getInitialSize() {
|
||||||
|
Point size = super.getInitialSize();
|
||||||
|
return DialogSettingsHelper.getInitialSize(getDialogSettingsSectionName(), size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.jface.window.Window#close()
|
||||||
|
*/
|
||||||
|
public boolean close() {
|
||||||
|
DialogSettingsHelper.persistShellGeometry(getShell(), getDialogSettingsSectionName());
|
||||||
|
return super.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and configures the widgets which allow the user to choose whether
|
||||||
|
* the specified environment should be appended to the native environment or
|
||||||
|
* if it should completely replace it.
|
||||||
|
*
|
||||||
|
* @param parent
|
||||||
|
* the composite in which the widgets should be created
|
||||||
|
*/
|
||||||
|
protected void createAppendReplace(Composite parent) {
|
||||||
|
Composite appendReplaceComposite = new Composite(parent, SWT.NONE);
|
||||||
|
GridData gridData = new GridData();
|
||||||
|
gridData.horizontalSpan = 2;
|
||||||
|
GridLayout layout = new GridLayout();
|
||||||
|
appendReplaceComposite.setLayoutData(gridData);
|
||||||
|
appendReplaceComposite.setLayout(layout);
|
||||||
|
appendReplaceComposite.setFont(parent.getFont());
|
||||||
|
|
||||||
|
appendEnvironment = createRadioButton(appendReplaceComposite, MakeUIPlugin.getResourceString("MakeEnvironmentBlock.17")); //$NON-NLS-1$
|
||||||
|
appendEnvironment.addSelectionListener(new SelectionAdapter() {
|
||||||
|
|
||||||
|
public void widgetSelected(SelectionEvent e) {
|
||||||
|
getContainer().updateContainer();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
replaceEnvironment = createRadioButton(appendReplaceComposite, MakeUIPlugin.getResourceString("MakeEnvironmentBlock.18")); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -40,6 +40,7 @@ public class MakeProjectOptionBlock extends TabFolderOptionBlock {
|
||||||
|
|
||||||
protected void addTabs() {
|
protected void addTabs() {
|
||||||
addTab(new SettingsBlock(MakeCorePlugin.getDefault().getPluginPreferences(), MakeBuilder.BUILDER_ID));
|
addTab(new SettingsBlock(MakeCorePlugin.getDefault().getPluginPreferences(), MakeBuilder.BUILDER_ID));
|
||||||
|
addTab(new MakeEnvironmentBlock(MakeCorePlugin.getDefault().getPluginPreferences(), MakeBuilder.BUILDER_ID));
|
||||||
addTab(new ErrorParserBlock(MakeCorePlugin.getDefault().getPluginPreferences()));
|
addTab(new ErrorParserBlock(MakeCorePlugin.getDefault().getPluginPreferences()));
|
||||||
addTab(new BinaryParserBlock());
|
addTab(new BinaryParserBlock());
|
||||||
addTab(new DiscoveryOptionsBlock());
|
addTab(new DiscoveryOptionsBlock());
|
||||||
|
|
|
@ -11,11 +11,49 @@
|
||||||
|
|
||||||
MakeCWizard.title=C/Make Project
|
MakeCWizard.title=C/Make Project
|
||||||
MakeCWizard.description=Create a New C Project using 'make' to build it
|
MakeCWizard.description=Create a New C Project using 'make' to build it
|
||||||
|
MakeEnvironmentBlock.10=&Remove
|
||||||
|
MakeEnvironmentBlock.10=&Remove
|
||||||
|
MakeEnvironmentBlock.11=New Environment Variable
|
||||||
|
MakeEnvironmentBlock.11=New Environment Variable
|
||||||
|
MakeEnvironmentBlock.12=Overwrite variable?
|
||||||
|
MakeEnvironmentBlock.12=Overwrite variable?
|
||||||
|
MakeEnvironmentBlock.13=A variable named {0} already exists. Overwrite?
|
||||||
|
MakeEnvironmentBlock.13=A variable named {0} already exists. Overwrite?
|
||||||
|
MakeEnvironmentBlock.14=Select &environment variables to add:
|
||||||
|
MakeEnvironmentBlock.14=Select &environment variables to add:
|
||||||
|
MakeEnvironmentBlock.15=Select Environment Variables
|
||||||
|
MakeEnvironmentBlock.15=Select Environment Variables
|
||||||
|
MakeEnvironmentBlock.16=Edit Environment Variable
|
||||||
|
MakeEnvironmentBlock.16=Edit Environment Variable
|
||||||
|
MakeEnvironmentBlock.17=&Append environment to native environment
|
||||||
|
MakeEnvironmentBlock.17=&Append environment to native environment
|
||||||
|
MakeEnvironmentBlock.18=Re&place native environment with specified environment
|
||||||
|
MakeEnvironmentBlock.18=Re&place native environment with specified environment
|
||||||
MakeCWizard.task_name=Creating C project with Make builder...
|
MakeCWizard.task_name=Creating C project with Make builder...
|
||||||
|
|
||||||
MakeCCWizard.title=C++/Make Project
|
MakeCCWizard.title=C++/Make Project
|
||||||
MakeCCWizard.description=Create a New C++ Project using 'make' to build it
|
MakeCCWizard.description=Create a New C++ Project using 'make' to build it
|
||||||
MakeCCWizard.task_name=Creating C++ project with Make builder...
|
MakeCCWizard.task_name=Creating C++ project with Make builder...
|
||||||
|
MakeEnvironmentBlock.0=Variable
|
||||||
|
MakeEnvironmentBlock.0=Variable
|
||||||
|
MakeEnvironmentBlock.1=Value
|
||||||
|
MakeEnvironmentBlock.1=Value
|
||||||
|
MakeEnvironmentBlock.2=&Name:
|
||||||
|
MakeEnvironmentBlock.2=&Name:
|
||||||
|
MakeEnvironmentBlock.3=&Value:
|
||||||
|
MakeEnvironmentBlock.3=&Value:
|
||||||
|
MakeEnvironmentBlock.4=Environment
|
||||||
|
MakeEnvironmentBlock.4=Environment
|
||||||
|
MakeEnvironmentBlock.5=Environment used for make builder
|
||||||
|
MakeEnvironmentBlock.5=Environment used for make builder
|
||||||
|
MakeEnvironmentBlock.6=Environment variables to set
|
||||||
|
MakeEnvironmentBlock.6=Environment variables to set
|
||||||
|
MakeEnvironmentBlock.7=N&ew...
|
||||||
|
MakeEnvironmentBlock.7=N&ew...
|
||||||
|
MakeEnvironmentBlock.8=Se&lect...
|
||||||
|
MakeEnvironmentBlock.8=Se&lect...
|
||||||
|
MakeEnvironmentBlock.9=E&dit...
|
||||||
|
MakeEnvironmentBlock.9=E&dit...
|
||||||
|
|
||||||
MakeCWizardSettings.title=C/Make Project Settings
|
MakeCWizardSettings.title=C/Make Project Settings
|
||||||
MakeCWizardSettings.description=Define the project and 'make' builder settings
|
MakeCWizardSettings.description=Define the project and 'make' builder settings
|
||||||
|
@ -250,3 +288,6 @@ DiscoveredScannerConfigurationContainerPage.list.title=Discovered include paths
|
||||||
CopyDiscoveredPathAction.title=Copy
|
CopyDiscoveredPathAction.title=Copy
|
||||||
CopyDiscoveredPathAction.description=Copy as text
|
CopyDiscoveredPathAction.description=Copy as text
|
||||||
CopyDiscoveredPathAction.tooltip=Copy as text
|
CopyDiscoveredPathAction.tooltip=Copy as text
|
||||||
|
MultipleInputDialog.0=&Browse...
|
||||||
|
MultipleInputDialog.1=Select a file:
|
||||||
|
MultipleInputDialog.2=Varia&bles...
|
||||||
|
|
|
@ -73,13 +73,15 @@ public class MakeUIImages {
|
||||||
public static final String IMG_OBJS_MAKEFILE_INCLUDE = NAME_PREFIX + "include_obj.gif"; //$NON-NLS-1$
|
public static final String IMG_OBJS_MAKEFILE_INCLUDE = NAME_PREFIX + "include_obj.gif"; //$NON-NLS-1$
|
||||||
public static final ImageDescriptor DESC_MAKEFILE_INCLUDE = createManaged(OBJ, IMG_OBJS_MAKEFILE_INCLUDE);
|
public static final ImageDescriptor DESC_MAKEFILE_INCLUDE = createManaged(OBJ, IMG_OBJS_MAKEFILE_INCLUDE);
|
||||||
|
|
||||||
public static final String IMG_TOOLS_ALPHA_SORTING= NAME_PREFIX + "alphab_sort_co.gif"; //$NON-NLS-1$
|
public static final String IMG_OBJS_ENVIRONMNET = NAME_PREFIX + "environment_obj.gif"; //$NON-NLS-1$
|
||||||
|
public static final ImageDescriptor DESC_ENVIRONMENT = createManaged(OBJ, IMG_OBJS_ENVIRONMNET);
|
||||||
|
|
||||||
public static final String IMG_TOOLS_MAKEFILE_SEGMENT_EDIT= NAME_PREFIX + "segment_edit.gif"; //$NON-NLS-1$
|
public static final String IMG_OBJS_ENV_VAR = NAME_PREFIX + "envvar_obj.gif"; //$NON-NLS-1$
|
||||||
|
|
||||||
public static final String IMG_OBJS_ENV_VAR = NAME_PREFIX + "environment_obj.gif"; //$NON-NLS-1$
|
|
||||||
public static final ImageDescriptor DESC_ENV_VAR = createManaged(OBJ, IMG_OBJS_ENV_VAR);
|
public static final ImageDescriptor DESC_ENV_VAR = createManaged(OBJ, IMG_OBJS_ENV_VAR);
|
||||||
|
|
||||||
|
public static final String IMG_TOOLS_ALPHA_SORTING= NAME_PREFIX + "alphab_sort_co.gif"; //$NON-NLS-1$
|
||||||
|
public static final String IMG_TOOLS_MAKEFILE_SEGMENT_EDIT= NAME_PREFIX + "segment_edit.gif"; //$NON-NLS-1$
|
||||||
|
|
||||||
private static ImageDescriptor createManaged(String prefix, String name) {
|
private static ImageDescriptor createManaged(String prefix, String name) {
|
||||||
return createManaged(imageRegistry, prefix, name);
|
return createManaged(imageRegistry, prefix, name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,372 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2003, 2005 IBM Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.make.internal.ui;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.debug.ui.StringVariableSelectionDialog;
|
||||||
|
import org.eclipse.jface.dialogs.Dialog;
|
||||||
|
import org.eclipse.jface.dialogs.IDialogConstants;
|
||||||
|
import org.eclipse.swt.SWT;
|
||||||
|
import org.eclipse.swt.events.ModifyEvent;
|
||||||
|
import org.eclipse.swt.events.ModifyListener;
|
||||||
|
import org.eclipse.swt.events.SelectionAdapter;
|
||||||
|
import org.eclipse.swt.events.SelectionEvent;
|
||||||
|
import org.eclipse.swt.graphics.Point;
|
||||||
|
import org.eclipse.swt.layout.GridData;
|
||||||
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
|
import org.eclipse.swt.widgets.Button;
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.swt.widgets.Control;
|
||||||
|
import org.eclipse.swt.widgets.DirectoryDialog;
|
||||||
|
import org.eclipse.swt.widgets.Label;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
import org.eclipse.swt.widgets.Text;
|
||||||
|
|
||||||
|
public class MultipleInputDialog extends Dialog {
|
||||||
|
protected static final String FIELD_NAME = "FIELD_NAME"; //$NON-NLS-1$
|
||||||
|
protected static final int TEXT = 100;
|
||||||
|
protected static final int BROWSE = 101;
|
||||||
|
protected static final int VARIABLE = 102;
|
||||||
|
|
||||||
|
protected Composite panel;
|
||||||
|
|
||||||
|
protected List fieldList = new ArrayList();
|
||||||
|
protected List controlList = new ArrayList();
|
||||||
|
protected List validators = new ArrayList();
|
||||||
|
protected Map valueMap = new HashMap();
|
||||||
|
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public MultipleInputDialog(Shell shell, String title) {
|
||||||
|
super(shell);
|
||||||
|
this.title = title;
|
||||||
|
setShellStyle(getShellStyle() | SWT.RESIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
|
||||||
|
*/
|
||||||
|
protected void configureShell(Shell shell) {
|
||||||
|
super.configureShell(shell);
|
||||||
|
if (title != null) {
|
||||||
|
shell.setText(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.dialogs.Dialog#createButtonBar(org.eclipse.swt.widgets.Composite)
|
||||||
|
*/
|
||||||
|
protected Control createButtonBar(Composite parent) {
|
||||||
|
Control bar = super.createButtonBar(parent);
|
||||||
|
validateFields();
|
||||||
|
return bar;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
|
||||||
|
*/
|
||||||
|
protected Control createDialogArea(Composite parent) {
|
||||||
|
Composite container = (Composite)super.createDialogArea(parent);
|
||||||
|
container.setLayout(new GridLayout(2, false));
|
||||||
|
container.setLayoutData(new GridData(GridData.FILL_BOTH));
|
||||||
|
|
||||||
|
panel = new Composite(container, SWT.NONE);
|
||||||
|
GridLayout layout = new GridLayout(2, false);
|
||||||
|
panel.setLayout(layout);
|
||||||
|
panel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||||
|
|
||||||
|
for (Iterator i = fieldList.iterator(); i.hasNext();) {
|
||||||
|
FieldSummary field = (FieldSummary)i.next();
|
||||||
|
switch(field.type) {
|
||||||
|
case TEXT:
|
||||||
|
createTextField(field.name, field.initialValue, field.allowsEmpty);
|
||||||
|
break;
|
||||||
|
case BROWSE:
|
||||||
|
createBrowseField(field.name, field.initialValue, field.allowsEmpty);
|
||||||
|
break;
|
||||||
|
case VARIABLE:
|
||||||
|
createVariablesField(field.name, field.initialValue, field.allowsEmpty);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldList = null; // allow it to be gc'd
|
||||||
|
Dialog.applyDialogFont(container);
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addBrowseField(String labelText, String initialValue, boolean allowsEmpty) {
|
||||||
|
fieldList.add(new FieldSummary(BROWSE, labelText, initialValue, allowsEmpty));
|
||||||
|
}
|
||||||
|
public void addTextField(String labelText, String initialValue, boolean allowsEmpty) {
|
||||||
|
fieldList.add(new FieldSummary(TEXT, labelText, initialValue, allowsEmpty));
|
||||||
|
}
|
||||||
|
public void addVariablesField(String labelText, String initialValue, boolean allowsEmpty) {
|
||||||
|
fieldList.add(new FieldSummary(VARIABLE, labelText, initialValue, allowsEmpty));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void createTextField(String labelText, String initialValue, boolean allowEmpty) {
|
||||||
|
Label label = new Label(panel, SWT.NONE);
|
||||||
|
label.setText(labelText);
|
||||||
|
label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
|
||||||
|
|
||||||
|
final Text text = new Text(panel, SWT.SINGLE | SWT.BORDER);
|
||||||
|
text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||||
|
text.setData(FIELD_NAME, labelText);
|
||||||
|
|
||||||
|
// make sure rows are the same height on both panels.
|
||||||
|
label.setSize(label.getSize().x, text.getSize().y);
|
||||||
|
|
||||||
|
if (initialValue != null) {
|
||||||
|
text.setText(initialValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!allowEmpty) {
|
||||||
|
validators.add(new Validator() {
|
||||||
|
public boolean validate() {
|
||||||
|
return !text.getText().equals(""); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
});
|
||||||
|
text.addModifyListener(new ModifyListener() {
|
||||||
|
public void modifyText(ModifyEvent e) {
|
||||||
|
validateFields();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
controlList.add(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void createBrowseField(String labelText, String initialValue, boolean allowEmpty) {
|
||||||
|
Label label = new Label(panel, SWT.NONE);
|
||||||
|
label.setText(labelText);
|
||||||
|
label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
|
||||||
|
|
||||||
|
Composite comp = new Composite(panel, SWT.NONE);
|
||||||
|
GridLayout layout = new GridLayout();
|
||||||
|
layout.marginHeight=0;
|
||||||
|
layout.marginWidth=0;
|
||||||
|
comp.setLayout(layout);
|
||||||
|
comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||||
|
|
||||||
|
final Text text = new Text(comp, SWT.SINGLE | SWT.BORDER);
|
||||||
|
GridData data = new GridData(GridData.FILL_HORIZONTAL);
|
||||||
|
data.widthHint = 200;
|
||||||
|
text.setLayoutData(data);
|
||||||
|
text.setData(FIELD_NAME, labelText);
|
||||||
|
|
||||||
|
// make sure rows are the same height on both panels.
|
||||||
|
label.setSize(label.getSize().x, text.getSize().y);
|
||||||
|
|
||||||
|
if (initialValue != null) {
|
||||||
|
text.setText(initialValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!allowEmpty) {
|
||||||
|
validators.add(new Validator() {
|
||||||
|
public boolean validate() {
|
||||||
|
return !text.getText().equals(""); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
text.addModifyListener(new ModifyListener() {
|
||||||
|
public void modifyText(ModifyEvent e) {
|
||||||
|
validateFields();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Button button = createButton(comp, IDialogConstants.IGNORE_ID, MakeUIPlugin.getResourceString("MultipleInputDialog.0"), false); //$NON-NLS-1$
|
||||||
|
button.addSelectionListener(new SelectionAdapter() {
|
||||||
|
public void widgetSelected(SelectionEvent e) {
|
||||||
|
DirectoryDialog dialog = new DirectoryDialog(getShell());
|
||||||
|
dialog.setMessage(MakeUIPlugin.getResourceString("MultipleInputDialog.1")); //$NON-NLS-1$
|
||||||
|
String currentWorkingDir = text.getText();
|
||||||
|
if (!currentWorkingDir.trim().equals("")) { //$NON-NLS-1$
|
||||||
|
File path = new File(currentWorkingDir);
|
||||||
|
if (path.exists()) {
|
||||||
|
dialog.setFilterPath(currentWorkingDir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String selectedDirectory = dialog.open();
|
||||||
|
if (selectedDirectory != null) {
|
||||||
|
text.setText(selectedDirectory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
controlList.add(text);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void createVariablesField(String labelText, String initialValue, boolean allowEmpty) {
|
||||||
|
Label label = new Label(panel, SWT.NONE);
|
||||||
|
label.setText(labelText);
|
||||||
|
label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
|
||||||
|
|
||||||
|
Composite comp = new Composite(panel, SWT.NONE);
|
||||||
|
GridLayout layout = new GridLayout();
|
||||||
|
layout.marginHeight=0;
|
||||||
|
layout.marginWidth=0;
|
||||||
|
comp.setLayout(layout);
|
||||||
|
comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||||
|
|
||||||
|
final Text text = new Text(comp, SWT.SINGLE | SWT.BORDER);
|
||||||
|
GridData data = new GridData(GridData.FILL_HORIZONTAL);
|
||||||
|
data.widthHint = 200;
|
||||||
|
text.setLayoutData(data);
|
||||||
|
text.setData(FIELD_NAME, labelText);
|
||||||
|
|
||||||
|
// make sure rows are the same height on both panels.
|
||||||
|
label.setSize(label.getSize().x, text.getSize().y);
|
||||||
|
|
||||||
|
if (initialValue != null) {
|
||||||
|
text.setText(initialValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!allowEmpty) {
|
||||||
|
validators.add(new Validator() {
|
||||||
|
public boolean validate() {
|
||||||
|
return !text.getText().equals(""); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
text.addModifyListener(new ModifyListener() {
|
||||||
|
public void modifyText(ModifyEvent e) {
|
||||||
|
validateFields();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Button button = createButton(comp, IDialogConstants.IGNORE_ID, MakeUIPlugin.getResourceString("MultipleInputDialog.2"), false); //$NON-NLS-1$
|
||||||
|
button.addSelectionListener(new SelectionAdapter() {
|
||||||
|
public void widgetSelected(SelectionEvent e) {
|
||||||
|
StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getShell());
|
||||||
|
int code = dialog.open();
|
||||||
|
if (code == IDialogConstants.OK_ID) {
|
||||||
|
String variable = dialog.getVariableExpression();
|
||||||
|
if (variable != null) {
|
||||||
|
text.insert(variable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
controlList.add(text);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
|
||||||
|
*/
|
||||||
|
protected void okPressed() {
|
||||||
|
for (Iterator i = controlList.iterator(); i.hasNext(); ) {
|
||||||
|
Control control = (Control)i.next();
|
||||||
|
if (control instanceof Text) {
|
||||||
|
valueMap.put(control.getData(FIELD_NAME), ((Text)control).getText());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
controlList = null;
|
||||||
|
super.okPressed();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.window.Window#open()
|
||||||
|
*/
|
||||||
|
public int open() {
|
||||||
|
applyDialogFont(panel);
|
||||||
|
return super.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue(String key) {
|
||||||
|
return valueMap.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStringValue(String key) {
|
||||||
|
return (String) getValue(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void validateFields() {
|
||||||
|
for(Iterator i = validators.iterator(); i.hasNext(); ) {
|
||||||
|
Validator validator = (Validator) i.next();
|
||||||
|
if (!validator.validate()) {
|
||||||
|
getButton(IDialogConstants.OK_ID).setEnabled(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getButton(IDialogConstants.OK_ID).setEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.window.Window#getInitialLocation(org.eclipse.swt.graphics.Point)
|
||||||
|
*/
|
||||||
|
protected Point getInitialLocation(Point initialSize) {
|
||||||
|
Point initialLocation= DialogSettingsHelper.getInitialLocation(getDialogSettingsSectionName());
|
||||||
|
if (initialLocation != null) {
|
||||||
|
return initialLocation;
|
||||||
|
}
|
||||||
|
return super.getInitialLocation(initialSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected String getDialogSettingsSectionName() {
|
||||||
|
return MakeUIPlugin.getPluginId() + ".MULTIPLE_INPUT_DIALOG_2"; //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.window.Window#getInitialSize()
|
||||||
|
*/
|
||||||
|
protected Point getInitialSize() {
|
||||||
|
Point size = super.getInitialSize();
|
||||||
|
return DialogSettingsHelper.getInitialSize(getDialogSettingsSectionName(), size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.window.Window#close()
|
||||||
|
*/
|
||||||
|
public boolean close() {
|
||||||
|
DialogSettingsHelper.persistShellGeometry(getShell(), getDialogSettingsSectionName());
|
||||||
|
return super.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected class FieldSummary {
|
||||||
|
int type;
|
||||||
|
String name;
|
||||||
|
String initialValue;
|
||||||
|
boolean allowsEmpty;
|
||||||
|
|
||||||
|
public FieldSummary(int type, String name, String initialValue, boolean allowsEmpty) {
|
||||||
|
this.type = type;
|
||||||
|
this.name = name;
|
||||||
|
this.initialValue = initialValue;
|
||||||
|
this.allowsEmpty = allowsEmpty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected class Validator {
|
||||||
|
boolean validate() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -9,6 +9,7 @@
|
||||||
package org.eclipse.cdt.make.ui.dialogs;
|
package org.eclipse.cdt.make.ui.dialogs;
|
||||||
|
|
||||||
import org.eclipse.cdt.make.core.IMakeBuilderInfo;
|
import org.eclipse.cdt.make.core.IMakeBuilderInfo;
|
||||||
|
import org.eclipse.cdt.make.core.IMakeCommonBuildInfo;
|
||||||
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
||||||
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
||||||
import org.eclipse.cdt.make.ui.IMakeHelpContextIds;
|
import org.eclipse.cdt.make.ui.IMakeHelpContextIds;
|
||||||
|
@ -21,8 +22,8 @@ import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
import org.eclipse.core.runtime.Path;
|
|
||||||
import org.eclipse.core.runtime.Preferences;
|
import org.eclipse.core.runtime.Preferences;
|
||||||
|
import org.eclipse.debug.ui.StringVariableSelectionDialog;
|
||||||
import org.eclipse.jface.resource.JFaceResources;
|
import org.eclipse.jface.resource.JFaceResources;
|
||||||
import org.eclipse.jface.util.IPropertyChangeListener;
|
import org.eclipse.jface.util.IPropertyChangeListener;
|
||||||
import org.eclipse.jface.util.PropertyChangeEvent;
|
import org.eclipse.jface.util.PropertyChangeEvent;
|
||||||
|
@ -78,21 +79,28 @@ public class SettingsBlock extends AbstractCOptionPage {
|
||||||
private static final String MAKE_BUILD_CLEAN_TARGET = PREFIX + ".makeWorkbench.cleanTarget"; //$NON-NLS-1$
|
private static final String MAKE_BUILD_CLEAN_TARGET = PREFIX + ".makeWorkbench.cleanTarget"; //$NON-NLS-1$
|
||||||
|
|
||||||
Button stopOnErrorButton;
|
Button stopOnErrorButton;
|
||||||
|
|
||||||
Button defButton;
|
Button defButton;
|
||||||
Text buildCommand;
|
Text buildCommand;
|
||||||
|
Button argumentVariablesButton;
|
||||||
|
|
||||||
Text buildLocation;
|
Text buildLocation;
|
||||||
|
Button locationVariablesButton;
|
||||||
|
|
||||||
Text targetFull;
|
Text targetFull;
|
||||||
Text targetIncr;
|
Text targetIncr;
|
||||||
Text targetAuto;
|
Text targetAuto;
|
||||||
Text targetClean;
|
Text targetClean;
|
||||||
|
|
||||||
Button fullButton;
|
Button fullButton;
|
||||||
Button incrButton;
|
Button incrButton;
|
||||||
Button autoButton;
|
Button autoButton;
|
||||||
Button cleanButton;
|
Button cleanButton;
|
||||||
|
|
||||||
|
Button fullVariableButton;
|
||||||
|
Button incrVariableButton;
|
||||||
|
Button autoVariableButton;
|
||||||
|
Button cleanVariableButton;
|
||||||
|
|
||||||
IMakeBuilderInfo fBuildInfo;
|
IMakeBuilderInfo fBuildInfo;
|
||||||
Preferences fPrefs;
|
Preferences fPrefs;
|
||||||
String fBuilderID;
|
String fBuilderID;
|
||||||
|
@ -117,9 +125,8 @@ public class SettingsBlock extends AbstractCOptionPage {
|
||||||
protected void createBuildCmdControls(Composite parent) {
|
protected void createBuildCmdControls(Composite parent) {
|
||||||
Group group = ControlFactory.createGroup(parent, MakeUIPlugin.getResourceString(MAKE_CMD_GROUP), 1);
|
Group group = ControlFactory.createGroup(parent, MakeUIPlugin.getResourceString(MAKE_CMD_GROUP), 1);
|
||||||
GridLayout layout = new GridLayout();
|
GridLayout layout = new GridLayout();
|
||||||
layout.numColumns = 2;
|
layout.numColumns = 3;
|
||||||
layout.makeColumnsEqualWidth = false;
|
layout.makeColumnsEqualWidth = false;
|
||||||
layout.horizontalSpacing = 0;
|
|
||||||
group.setLayout(layout);
|
group.setLayout(layout);
|
||||||
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||||
defButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_CMD_USE_DEFAULT));
|
defButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_CMD_USE_DEFAULT));
|
||||||
|
@ -128,17 +135,19 @@ public class SettingsBlock extends AbstractCOptionPage {
|
||||||
public void widgetSelected(SelectionEvent e) {
|
public void widgetSelected(SelectionEvent e) {
|
||||||
if (defButton.getSelection() == true) {
|
if (defButton.getSelection() == true) {
|
||||||
buildCommand.setEnabled(false);
|
buildCommand.setEnabled(false);
|
||||||
|
argumentVariablesButton.setEnabled(false);
|
||||||
stopOnErrorButton.setEnabled(true);
|
stopOnErrorButton.setEnabled(true);
|
||||||
getContainer().updateContainer();
|
getContainer().updateContainer();
|
||||||
} else {
|
} else {
|
||||||
buildCommand.setEnabled(true);
|
buildCommand.setEnabled(true);
|
||||||
|
argumentVariablesButton.setEnabled(true);
|
||||||
stopOnErrorButton.setEnabled(false);
|
stopOnErrorButton.setEnabled(false);
|
||||||
getContainer().updateContainer();
|
getContainer().updateContainer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
|
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
|
||||||
gd.horizontalSpan = 2;
|
gd.horizontalSpan = 3;
|
||||||
defButton.setLayoutData(gd);
|
defButton.setLayoutData(gd);
|
||||||
Label label = ControlFactory.createLabel(group, MakeUIPlugin.getResourceString(MAKE_CMD_LABEL));
|
Label label = ControlFactory.createLabel(group, MakeUIPlugin.getResourceString(MAKE_CMD_LABEL));
|
||||||
((GridData) (label.getLayoutData())).horizontalAlignment = GridData.BEGINNING;
|
((GridData) (label.getLayoutData())).horizontalAlignment = GridData.BEGINNING;
|
||||||
|
@ -153,10 +162,10 @@ public class SettingsBlock extends AbstractCOptionPage {
|
||||||
getContainer().updateContainer();
|
getContainer().updateContainer();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (fBuildInfo.getBuildCommand() != null) {
|
if (fBuildInfo.getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, null) != null) {
|
||||||
StringBuffer cmd = new StringBuffer(fBuildInfo.getBuildCommand().toOSString());
|
StringBuffer cmd = new StringBuffer(fBuildInfo.getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, "")); //$NON-NLS-1$
|
||||||
if (!fBuildInfo.isDefaultBuildCmd()) {
|
if (!fBuildInfo.isDefaultBuildCmd()) {
|
||||||
String args = fBuildInfo.getBuildArguments();
|
String args = fBuildInfo.getBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, "");
|
||||||
if (args != null && !args.equals("")) { //$NON-NLS-1$
|
if (args != null && !args.equals("")) { //$NON-NLS-1$
|
||||||
cmd.append(" "); //$NON-NLS-1$
|
cmd.append(" "); //$NON-NLS-1$
|
||||||
cmd.append(args);
|
cmd.append(args);
|
||||||
|
@ -164,8 +173,10 @@ public class SettingsBlock extends AbstractCOptionPage {
|
||||||
}
|
}
|
||||||
buildCommand.setText(cmd.toString());
|
buildCommand.setText(cmd.toString());
|
||||||
}
|
}
|
||||||
|
argumentVariablesButton = addVariablesButton(group, buildCommand);
|
||||||
if (fBuildInfo.isDefaultBuildCmd()) {
|
if (fBuildInfo.isDefaultBuildCmd()) {
|
||||||
buildCommand.setEnabled(false);
|
buildCommand.setEnabled(false);
|
||||||
|
argumentVariablesButton.setEnabled(false);
|
||||||
}
|
}
|
||||||
defButton.setSelection(fBuildInfo.isDefaultBuildCmd());
|
defButton.setSelection(fBuildInfo.isDefaultBuildCmd());
|
||||||
}
|
}
|
||||||
|
@ -175,16 +186,20 @@ public class SettingsBlock extends AbstractCOptionPage {
|
||||||
|
|
||||||
public void widgetSelected(SelectionEvent e) {
|
public void widgetSelected(SelectionEvent e) {
|
||||||
targetAuto.setEnabled(autoButton.getSelection());
|
targetAuto.setEnabled(autoButton.getSelection());
|
||||||
|
autoVariableButton.setEnabled(autoButton.getSelection());
|
||||||
targetFull.setEnabled(fullButton.getSelection());
|
targetFull.setEnabled(fullButton.getSelection());
|
||||||
|
fullVariableButton.setEnabled(fullButton.getSelection());
|
||||||
targetIncr.setEnabled(incrButton.getSelection());
|
targetIncr.setEnabled(incrButton.getSelection());
|
||||||
|
incrVariableButton.setEnabled(incrButton.getSelection());
|
||||||
targetClean.setEnabled(cleanButton.getSelection());
|
targetClean.setEnabled(cleanButton.getSelection());
|
||||||
|
cleanVariableButton.setEnabled(cleanButton.getSelection());
|
||||||
getContainer().updateContainer();
|
getContainer().updateContainer();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
Group group = ControlFactory.createGroup(parent, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_GROUP), 1);
|
Group group = ControlFactory.createGroup(parent, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_GROUP), 1);
|
||||||
GridLayout layout = new GridLayout();
|
GridLayout layout = new GridLayout();
|
||||||
layout.numColumns = 2;
|
layout.numColumns = 3;
|
||||||
layout.makeColumnsEqualWidth = false;
|
layout.makeColumnsEqualWidth = false;
|
||||||
group.setLayout(layout);
|
group.setLayout(layout);
|
||||||
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||||
|
@ -192,49 +207,70 @@ public class SettingsBlock extends AbstractCOptionPage {
|
||||||
label.setText(MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_TYPE));
|
label.setText(MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_TYPE));
|
||||||
label = new Label(group, SWT.NONE);
|
label = new Label(group, SWT.NONE);
|
||||||
label.setText(MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_TARGET));
|
label.setText(MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_TARGET));
|
||||||
|
GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
|
||||||
|
gd.horizontalSpan = 2;
|
||||||
|
label.setLayoutData(gd);
|
||||||
autoButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_AUTO));
|
autoButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_AUTO));
|
||||||
autoButton.addSelectionListener(selectionAdapter);
|
autoButton.addSelectionListener(selectionAdapter);
|
||||||
autoButton.setSelection(fBuildInfo.isAutoBuildEnable());
|
autoButton.setSelection(fBuildInfo.isAutoBuildEnable());
|
||||||
// if (!MakeUIPlugin.getWorkspace().isAutoBuilding()) {
|
|
||||||
// autoButton.setEnabled(false);
|
|
||||||
// }
|
|
||||||
targetAuto = ControlFactory.createTextField(group, SWT.SINGLE | SWT.BORDER);
|
targetAuto = ControlFactory.createTextField(group, SWT.SINGLE | SWT.BORDER);
|
||||||
targetAuto.setText(fBuildInfo.getAutoBuildTarget());
|
targetAuto.setText(fBuildInfo.getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_AUTO, "")); //$NON-NLS-1$
|
||||||
((GridData) (targetAuto.getLayoutData())).horizontalAlignment = GridData.FILL;
|
((GridData) (targetAuto.getLayoutData())).horizontalAlignment = GridData.FILL;
|
||||||
((GridData) (targetAuto.getLayoutData())).grabExcessHorizontalSpace = true;
|
((GridData) (targetAuto.getLayoutData())).grabExcessHorizontalSpace = true;
|
||||||
addControlAccessibleListener(targetAuto, MakeUIPlugin.getResourceString(MAKE_BUILD_AUTO_TARGET));
|
addControlAccessibleListener(targetAuto, MakeUIPlugin.getResourceString(MAKE_BUILD_AUTO_TARGET));
|
||||||
|
autoVariableButton = addVariablesButton(group, targetAuto);
|
||||||
String noteTitle = MakeUIPlugin.getResourceString("SettingsBlock.makeWorkbench.note"); //$NON-NLS-1$
|
String noteTitle = MakeUIPlugin.getResourceString("SettingsBlock.makeWorkbench.note"); //$NON-NLS-1$
|
||||||
String noteMessage = MakeUIPlugin.getResourceString("SettingsBlock.makeWorkbench.autobuildMessage"); //$NON-NLS-1$
|
String noteMessage = MakeUIPlugin.getResourceString("SettingsBlock.makeWorkbench.autobuildMessage"); //$NON-NLS-1$
|
||||||
Composite noteControl = createNoteComposite(JFaceResources.getDialogFont(), group, noteTitle, noteMessage);
|
Composite noteControl = createNoteComposite(JFaceResources.getDialogFont(), group, noteTitle, noteMessage);
|
||||||
GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
|
gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
|
||||||
gd.horizontalSpan = 2;
|
gd.horizontalSpan = 3;
|
||||||
noteControl.setLayoutData(gd);
|
noteControl.setLayoutData(gd);
|
||||||
incrButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_INCR));
|
incrButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_INCR));
|
||||||
incrButton.addSelectionListener(selectionAdapter);
|
incrButton.addSelectionListener(selectionAdapter);
|
||||||
incrButton.setSelection(fBuildInfo.isIncrementalBuildEnabled());
|
incrButton.setSelection(fBuildInfo.isIncrementalBuildEnabled());
|
||||||
targetIncr = ControlFactory.createTextField(group, SWT.SINGLE | SWT.BORDER);
|
targetIncr = ControlFactory.createTextField(group, SWT.SINGLE | SWT.BORDER);
|
||||||
targetIncr.setText(fBuildInfo.getIncrementalBuildTarget());
|
targetIncr.setText(fBuildInfo.getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_INCREAMENTAL, "")); //$NON-NLS-1$
|
||||||
((GridData) (targetIncr.getLayoutData())).horizontalAlignment = GridData.FILL;
|
((GridData) (targetIncr.getLayoutData())).horizontalAlignment = GridData.FILL;
|
||||||
((GridData) (targetIncr.getLayoutData())).grabExcessHorizontalSpace = true;
|
((GridData) (targetIncr.getLayoutData())).grabExcessHorizontalSpace = true;
|
||||||
addControlAccessibleListener(targetIncr, MakeUIPlugin.getResourceString(MAKE_BUILD_INCREMENTAL_TARGET));
|
addControlAccessibleListener(targetIncr, MakeUIPlugin.getResourceString(MAKE_BUILD_INCREMENTAL_TARGET));
|
||||||
|
incrVariableButton = addVariablesButton(group, targetIncr);
|
||||||
fullButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_FULL));
|
fullButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_FULL));
|
||||||
fullButton.addSelectionListener(selectionAdapter);
|
fullButton.addSelectionListener(selectionAdapter);
|
||||||
fullButton.setSelection(fBuildInfo.isFullBuildEnabled());
|
fullButton.setSelection(fBuildInfo.isFullBuildEnabled());
|
||||||
targetFull = ControlFactory.createTextField(group, SWT.SINGLE | SWT.BORDER);
|
targetFull = ControlFactory.createTextField(group, SWT.SINGLE | SWT.BORDER);
|
||||||
targetFull.setText(fBuildInfo.getFullBuildTarget());
|
targetFull.setText(fBuildInfo.getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_FULL, "")); //$NON-NLS-1$
|
||||||
((GridData) (targetFull.getLayoutData())).horizontalAlignment = GridData.FILL;
|
((GridData) (targetFull.getLayoutData())).horizontalAlignment = GridData.FILL;
|
||||||
((GridData) (targetFull.getLayoutData())).grabExcessHorizontalSpace = true;
|
((GridData) (targetFull.getLayoutData())).grabExcessHorizontalSpace = true;
|
||||||
addControlAccessibleListener(targetFull, MakeUIPlugin.getResourceString(MAKE_BUILD_FULL_TARGET));
|
addControlAccessibleListener(targetFull, MakeUIPlugin.getResourceString(MAKE_BUILD_FULL_TARGET));
|
||||||
|
fullVariableButton = addVariablesButton(group, targetFull);
|
||||||
cleanButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_CLEAN));
|
cleanButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_CLEAN));
|
||||||
cleanButton.addSelectionListener(selectionAdapter);
|
cleanButton.addSelectionListener(selectionAdapter);
|
||||||
cleanButton.setSelection(fBuildInfo.isCleanBuildEnabled());
|
cleanButton.setSelection(fBuildInfo.isCleanBuildEnabled());
|
||||||
targetClean = ControlFactory.createTextField(group, SWT.SINGLE | SWT.BORDER);
|
targetClean = ControlFactory.createTextField(group, SWT.SINGLE | SWT.BORDER);
|
||||||
targetClean.setText(fBuildInfo.getCleanBuildTarget());
|
targetClean.setText(fBuildInfo.getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_CLEAN, ""));
|
||||||
((GridData) (targetClean.getLayoutData())).horizontalAlignment = GridData.FILL;
|
((GridData) (targetClean.getLayoutData())).horizontalAlignment = GridData.FILL;
|
||||||
((GridData) (targetClean.getLayoutData())).grabExcessHorizontalSpace = true;
|
((GridData) (targetClean.getLayoutData())).grabExcessHorizontalSpace = true;
|
||||||
addControlAccessibleListener(targetClean, MakeUIPlugin.getResourceString(MAKE_BUILD_CLEAN_TARGET));
|
addControlAccessibleListener(targetClean, MakeUIPlugin.getResourceString(MAKE_BUILD_CLEAN_TARGET));
|
||||||
|
cleanVariableButton = addVariablesButton(group, targetClean);
|
||||||
selectionAdapter.widgetSelected(null);
|
selectionAdapter.widgetSelected(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Button addVariablesButton(Composite parent, final Text control) {
|
||||||
|
Button variablesButton = createPushButton(parent, "Variables...", null);
|
||||||
|
GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_END);
|
||||||
|
variablesButton.setLayoutData(gd);
|
||||||
|
variablesButton.addSelectionListener(new SelectionAdapter() {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
|
||||||
|
*/
|
||||||
|
public void widgetSelected(SelectionEvent arg0) {
|
||||||
|
handleVariablesButtonSelected(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return variablesButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Composite createNoteComposite(Font font, Composite composite, String title, String message) {
|
protected Composite createNoteComposite(Font font, Composite composite, String title, String message) {
|
||||||
|
@ -289,7 +325,7 @@ public class SettingsBlock extends AbstractCOptionPage {
|
||||||
protected void createBuilderWorkingDirControls(Composite parent) {
|
protected void createBuilderWorkingDirControls(Composite parent) {
|
||||||
Group group = ControlFactory.createGroup(parent, MakeUIPlugin.getResourceString(MAKE_BUILD_DIR_GROUP), 1);
|
Group group = ControlFactory.createGroup(parent, MakeUIPlugin.getResourceString(MAKE_BUILD_DIR_GROUP), 1);
|
||||||
GridLayout layout = new GridLayout();
|
GridLayout layout = new GridLayout();
|
||||||
layout.numColumns = 3;
|
layout.numColumns = 4;
|
||||||
layout.makeColumnsEqualWidth = false;
|
layout.makeColumnsEqualWidth = false;
|
||||||
group.setLayout(layout);
|
group.setLayout(layout);
|
||||||
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||||
|
@ -320,9 +356,30 @@ public class SettingsBlock extends AbstractCOptionPage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
buildLocation.setText(fBuildInfo.getBuildLocation().toOSString());
|
buildLocation.setText(fBuildInfo.getBuildAttribute(IMakeCommonBuildInfo.BUILD_LOCATION, ""));
|
||||||
|
locationVariablesButton = addVariablesButton(group, buildLocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A variable entry button has been pressed for the given text field. Prompt
|
||||||
|
* the user for a variable and enter the result in the given field.
|
||||||
|
*/
|
||||||
|
private void handleVariablesButtonSelected(Text textField) {
|
||||||
|
String variable = getVariable();
|
||||||
|
if (variable != null) {
|
||||||
|
textField.append(variable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prompts the user to choose and configure a variable and returns the
|
||||||
|
* resulting string, suitable to be used as an attribute.
|
||||||
|
*/
|
||||||
|
private String getVariable() {
|
||||||
|
StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getShell());
|
||||||
|
dialog.open();
|
||||||
|
return dialog.getVariableExpression();
|
||||||
|
}
|
||||||
public void createControl(Composite parent) {
|
public void createControl(Composite parent) {
|
||||||
Composite composite = ControlFactory.createComposite(parent, 1);
|
Composite composite = ControlFactory.createComposite(parent, 1);
|
||||||
setControl(composite);
|
setControl(composite);
|
||||||
|
@ -373,7 +430,7 @@ public class SettingsBlock extends AbstractCOptionPage {
|
||||||
try {
|
try {
|
||||||
info = MakeCorePlugin.createBuildInfo(getContainer().getProject(), fBuilderID);
|
info = MakeCorePlugin.createBuildInfo(getContainer().getProject(), fBuilderID);
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
// disabled builder... just log it
|
// disabled builder... just log it
|
||||||
MakeCorePlugin.log(e);
|
MakeCorePlugin.log(e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -392,29 +449,29 @@ public class SettingsBlock extends AbstractCOptionPage {
|
||||||
start = 1;
|
start = 1;
|
||||||
end = bldLine.indexOf('"', 1);
|
end = bldLine.indexOf('"', 1);
|
||||||
}
|
}
|
||||||
IPath path;
|
String path;
|
||||||
if (end == -1) {
|
if (end == -1) {
|
||||||
path = new Path(bldLine);
|
path = bldLine;
|
||||||
} else {
|
} else {
|
||||||
path = new Path(bldLine.substring(start, end));
|
path = bldLine.substring(start, end);
|
||||||
}
|
}
|
||||||
info.setBuildCommand(path);
|
info.setBuildAttribute(IMakeBuilderInfo.BUILD_COMMAND, path);
|
||||||
String args = ""; //$NON-NLS-1$
|
String args = ""; //$NON-NLS-1$
|
||||||
if (end != -1) {
|
if (end != -1) {
|
||||||
args = bldLine.substring(end + 1);
|
args = bldLine.substring(end + 1);
|
||||||
}
|
}
|
||||||
info.setBuildArguments(args);
|
info.setBuildAttribute(IMakeBuilderInfo.BUILD_ARGUMENTS, args);
|
||||||
}
|
}
|
||||||
info.setAutoBuildEnable(autoButton.getSelection());
|
info.setAutoBuildEnable(autoButton.getSelection());
|
||||||
info.setAutoBuildTarget(targetAuto.getText().trim());
|
info.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_AUTO, targetAuto.getText().trim());
|
||||||
info.setIncrementalBuildEnable(incrButton.getSelection());
|
info.setIncrementalBuildEnable(incrButton.getSelection());
|
||||||
info.setIncrementalBuildTarget(targetIncr.getText().trim());
|
info.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_INCREAMENTAL, targetIncr.getText().trim());
|
||||||
info.setFullBuildEnable(fullButton.getSelection());
|
info.setFullBuildEnable(fullButton.getSelection());
|
||||||
info.setFullBuildTarget(targetFull.getText().trim());
|
info.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_FULL, targetFull.getText().trim());
|
||||||
info.setCleanBuildEnable(cleanButton.getSelection());
|
info.setCleanBuildEnable(cleanButton.getSelection());
|
||||||
info.setCleanBuildTarget(targetClean.getText().trim());
|
info.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_CLEAN, targetClean.getText().trim());
|
||||||
if (buildLocation != null) {
|
if (buildLocation != null) {
|
||||||
info.setBuildLocation(new Path(buildLocation.getText().trim()));
|
info.setBuildAttribute(IMakeBuilderInfo.BUILD_LOCATION, buildLocation.getText().trim());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -453,9 +510,11 @@ public class SettingsBlock extends AbstractCOptionPage {
|
||||||
}
|
}
|
||||||
if (info.isDefaultBuildCmd()) {
|
if (info.isDefaultBuildCmd()) {
|
||||||
buildCommand.setEnabled(false);
|
buildCommand.setEnabled(false);
|
||||||
|
argumentVariablesButton.setEnabled(false);
|
||||||
stopOnErrorButton.setEnabled(true);
|
stopOnErrorButton.setEnabled(true);
|
||||||
} else {
|
} else {
|
||||||
buildCommand.setEnabled(true);
|
buildCommand.setEnabled(true);
|
||||||
|
argumentVariablesButton.setEnabled(true);
|
||||||
stopOnErrorButton.setEnabled(false);
|
stopOnErrorButton.setEnabled(false);
|
||||||
}
|
}
|
||||||
defButton.setSelection(info.isDefaultBuildCmd());
|
defButton.setSelection(info.isDefaultBuildCmd());
|
||||||
|
|
Loading…
Add table
Reference in a new issue