mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 08:55:25 +02:00
autotools: Saner handlers.
Old IActions were just wrapped in handlers which created insane amount of interactions. This is one idea better by moving the implementations in the handlers themselves. Change-Id: Ieb7fc465c8a23af09cb6a3d809f157289c65d2ae Signed-off-by: Alexander Kurtakov <akurtako@redhat.com>
This commit is contained in:
parent
e01d886f1e
commit
425a843061
17 changed files with 735 additions and 1000 deletions
|
@ -10,29 +10,66 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import org.eclipse.cdt.autotools.ui.AutotoolsUIPlugin;
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.ConsoleOutputStream;
|
||||
import org.eclipse.cdt.core.ICommandLauncher;
|
||||
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
|
||||
import org.eclipse.cdt.core.model.ICContainer;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.resources.IConsole;
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsNewMakeGenerator;
|
||||
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
|
||||
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
|
||||
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
||||
import org.eclipse.cdt.remote.core.RemoteCommandLauncher;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.core.commands.AbstractHandler;
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.resources.IWorkspace;
|
||||
import org.eclipse.core.resources.IWorkspaceRunnable;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.core.runtime.SubMonitor;
|
||||
import org.eclipse.core.runtime.jobs.ISchedulingRule;
|
||||
import org.eclipse.core.runtime.jobs.Job;
|
||||
import org.eclipse.jface.dialogs.MessageDialog;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.ui.handlers.HandlerUtil;
|
||||
|
||||
public abstract class AbstractAutotoolsHandler extends AbstractHandler {
|
||||
|
||||
protected Object execute(ExecutionEvent event, InvokeAction a) {
|
||||
private IContainer fContainer;
|
||||
|
||||
protected abstract void run(Shell activeShell);
|
||||
|
||||
protected Object execute1(ExecutionEvent event) {
|
||||
ISelection k = HandlerUtil.getCurrentSelection(event);
|
||||
if (!k.isEmpty() && k instanceof IStructuredSelection) {
|
||||
Object obj = ((IStructuredSelection)k).getFirstElement();
|
||||
IContainer container = getContainer(obj);
|
||||
if (container != null) {
|
||||
a.setSelectedContainer(container);
|
||||
a.run(null);
|
||||
setSelectedContainer(container);
|
||||
run(HandlerUtil.getActiveShell(event));
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
@ -68,5 +105,310 @@ public abstract class AbstractAutotoolsHandler extends AbstractHandler {
|
|||
}
|
||||
return fContainer;
|
||||
}
|
||||
|
||||
public final String SHELL_COMMAND = "sh"; //$NON-NLS-1$
|
||||
|
||||
protected void showError(String title, String content) {
|
||||
MessageDialog.openError(new Shell(), title, content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Separate targets to array from a string.
|
||||
*
|
||||
* @param rawArgList
|
||||
* @return targets in string[] array. if targets are not formatted properly,
|
||||
* returns null
|
||||
*/
|
||||
protected List<String> separateTargets(String rawArgList) {
|
||||
|
||||
StringTokenizer st = new StringTokenizer(rawArgList, " "); //$NON-NLS-1$
|
||||
List<String> targetList = new ArrayList<>();
|
||||
|
||||
while (st.hasMoreTokens()) {
|
||||
String currentWord = st.nextToken().trim();
|
||||
|
||||
if (currentWord.startsWith("'")) { //$NON-NLS-1$
|
||||
StringBuffer tmpTarget = new StringBuffer();
|
||||
while (!currentWord.endsWith("'")) { //$NON-NLS-1$
|
||||
tmpTarget.append(currentWord + " "); //$NON-NLS-1$
|
||||
if (!st.hasMoreTokens()) {
|
||||
// quote not closed properly, so return null
|
||||
return null;
|
||||
}
|
||||
currentWord = st.nextToken().trim();
|
||||
}
|
||||
|
||||
tmpTarget.append(currentWord);
|
||||
targetList.add(tmpTarget.toString());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (currentWord.startsWith("\"")) { //$NON-NLS-1$
|
||||
StringBuffer tmpTarget = new StringBuffer();
|
||||
while (!currentWord.endsWith("\"")) { //$NON-NLS-1$
|
||||
tmpTarget.append(currentWord + " "); //$NON-NLS-1$
|
||||
if (!st.hasMoreTokens()) {
|
||||
// double quote not closed properly, so return null
|
||||
return null;
|
||||
}
|
||||
currentWord = st.nextToken().trim();
|
||||
}
|
||||
|
||||
tmpTarget.append(currentWord);
|
||||
targetList.add(tmpTarget.toString());
|
||||
continue;
|
||||
}
|
||||
|
||||
// for targets without quote/double quotes.
|
||||
targetList.add(currentWord);
|
||||
|
||||
}
|
||||
|
||||
return targetList;
|
||||
}
|
||||
|
||||
protected List<String> separateOptions(String rawArgList) {
|
||||
List<String> argList = new ArrayList<>();
|
||||
// May be multiple user-specified options in which case we
|
||||
// need to split them up into individual options
|
||||
rawArgList = rawArgList.trim();
|
||||
boolean finished = false;
|
||||
int lastIndex = rawArgList.indexOf("--"); //$NON-NLS-1$
|
||||
if (lastIndex != -1) {
|
||||
while (!finished) {
|
||||
int index = rawArgList.indexOf("--", lastIndex + 2); //$NON-NLS-1$
|
||||
if (index != -1) {
|
||||
String previous = rawArgList.substring(lastIndex, index).trim();
|
||||
argList.add(previous);
|
||||
rawArgList = rawArgList.substring(index);
|
||||
} else {
|
||||
argList.add(rawArgList);
|
||||
finished = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return argList;
|
||||
|
||||
}
|
||||
|
||||
protected List<String> simpleParseOptions(String rawArgList) {
|
||||
List<String> argList = new ArrayList<>();
|
||||
int lastArgIndex = -1;
|
||||
int i = 0;
|
||||
while (i < rawArgList.length()) {
|
||||
char ch = rawArgList.charAt(i);
|
||||
// Skip white-space
|
||||
while (Character.isWhitespace(ch)) {
|
||||
++i;
|
||||
if (i < rawArgList.length())
|
||||
ch = rawArgList.charAt(i);
|
||||
else // Otherwise we are done
|
||||
return argList;
|
||||
}
|
||||
|
||||
// Simplistic parser. We break up into strings delimited
|
||||
// by blanks. If quotes are used, we ignore blanks within.
|
||||
// If a backslash is used, we ignore the next character and
|
||||
// pass it through.
|
||||
lastArgIndex = i;
|
||||
boolean inString = false;
|
||||
while (i < rawArgList.length()) {
|
||||
ch = rawArgList.charAt(i);
|
||||
if (ch == '\\') // escape character
|
||||
++i; // skip over the next character
|
||||
else if (ch == '\"') { // double quotes
|
||||
inString = !inString;
|
||||
} else if (Character.isWhitespace(ch)) {
|
||||
if (!inString) {
|
||||
argList.add(rawArgList.substring(lastArgIndex, i));
|
||||
break;
|
||||
}
|
||||
}
|
||||
++i;
|
||||
}
|
||||
// Look for the case where we ran out of chars for the last
|
||||
// token.
|
||||
if (i >= rawArgList.length())
|
||||
argList.add(rawArgList.substring(lastArgIndex));
|
||||
++i;
|
||||
}
|
||||
return argList;
|
||||
}
|
||||
|
||||
protected IPath getExecDir(IContainer container) {
|
||||
int type = container.getType();
|
||||
IPath execDir = null;
|
||||
if (type == IResource.FILE) {
|
||||
execDir = container.getLocation().removeLastSegments(1);
|
||||
} else {
|
||||
execDir = container.getLocation();
|
||||
}
|
||||
return execDir;
|
||||
}
|
||||
|
||||
protected IPath getCWD(IContainer container) {
|
||||
int type = container.getType();
|
||||
IPath cwd = null;
|
||||
if (type == IResource.FILE) {
|
||||
cwd = container.getFullPath().removeLastSegments(1);
|
||||
} else {
|
||||
cwd = container.getFullPath();
|
||||
}
|
||||
return cwd;
|
||||
}
|
||||
|
||||
protected void executeConsoleCommand(final String actionName, final String command, final List<String> argumentList,
|
||||
final IPath execDir) {
|
||||
// We need to use a workspace root scheduling rule because adding
|
||||
// MakeTargets
|
||||
// may end up saving the project description which runs under a
|
||||
// workspace root rule.
|
||||
final ISchedulingRule rule = ResourcesPlugin.getWorkspace().getRoot();
|
||||
|
||||
Job backgroundJob = new Job(actionName) {
|
||||
@Override
|
||||
protected IStatus run(IProgressMonitor monitor) {
|
||||
try {
|
||||
ResourcesPlugin.getWorkspace().run((IWorkspaceRunnable) monitor1 -> {
|
||||
try {
|
||||
String errMsg = null;
|
||||
IProject project = getSelectedContainer().getProject();
|
||||
// Get a build console for the project
|
||||
IConsole console = CCorePlugin.getDefault()
|
||||
.getConsole("org.eclipse.cdt.autotools.ui.autotoolsConsole"); //$NON-NLS-1$
|
||||
console.start(project);
|
||||
CUIPlugin.getDefault().startGlobalConsole();
|
||||
ConsoleOutputStream consoleOutStream = console.getOutputStream();
|
||||
// FIXME: we want to remove need for
|
||||
// ManagedBuilderManager, but how do we
|
||||
// get environment variables.
|
||||
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
|
||||
IConfiguration cfg = info.getDefaultConfiguration();
|
||||
|
||||
StringBuffer buf = new StringBuffer();
|
||||
String[] consoleHeader = new String[3];
|
||||
|
||||
consoleHeader[0] = actionName;
|
||||
consoleHeader[1] = cfg.getName();
|
||||
consoleHeader[2] = project.getName();
|
||||
buf.append(System.getProperty("line.separator", "\n")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
String invokeMsg = InvokeMessages.getFormattedString("InvokeAction.console.message", //$NON-NLS-1$
|
||||
new String[] { actionName, execDir.toString() }); // $NON-NLS-1$
|
||||
buf.append(invokeMsg);
|
||||
buf.append(System.getProperty("line.separator", "\n")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
buf.append(System.getProperty("line.separator", "\n")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
consoleOutStream.write(buf.toString().getBytes());
|
||||
consoleOutStream.flush();
|
||||
|
||||
ArrayList<String> additionalEnvs = new ArrayList<>();
|
||||
String strippedCommand = AutotoolsNewMakeGenerator.stripEnvVars(command, additionalEnvs);
|
||||
// Get a launcher for the config command
|
||||
RemoteCommandLauncher launcher = new RemoteCommandLauncher();
|
||||
launcher.setProject(project);
|
||||
// Set the environment
|
||||
IEnvironmentVariable variables[] = ManagedBuildManager.getEnvironmentVariableProvider()
|
||||
.getVariables(cfg, true);
|
||||
String[] env = null;
|
||||
ArrayList<String> envList = new ArrayList<>();
|
||||
if (variables != null) {
|
||||
for (int i = 0; i < variables.length; i++) {
|
||||
envList.add(variables[i].getName() + "=" + variables[i].getValue()); //$NON-NLS-1$
|
||||
}
|
||||
if (additionalEnvs.size() > 0)
|
||||
envList.addAll(additionalEnvs); // add any
|
||||
// additional
|
||||
// environment
|
||||
// variables
|
||||
// specified
|
||||
// ahead of
|
||||
// script
|
||||
env = envList.toArray(new String[envList.size()]);
|
||||
}
|
||||
|
||||
String[] newArgumentList;
|
||||
|
||||
// Fix for bug #343905 and bug #371277
|
||||
// For Windows and Mac, we cannot run a script
|
||||
// directly (in this case,
|
||||
// autotools are scripts). We need to run "sh -c
|
||||
// command args where command
|
||||
// plus args is represented in a single string. The
|
||||
// same applies for
|
||||
// some Linux shells such as dash. Using sh -c will
|
||||
// work on all Linux
|
||||
// POSIX-compliant shells.
|
||||
StringBuffer command1 = new StringBuffer(strippedCommand);
|
||||
for (String arg : argumentList) {
|
||||
command1.append(" " + arg);
|
||||
}
|
||||
newArgumentList = new String[] { "-c", command1.toString() };
|
||||
|
||||
OutputStream stdout = consoleOutStream;
|
||||
OutputStream stderr = consoleOutStream;
|
||||
|
||||
launcher.showCommand(true);
|
||||
// Run the shell script via shell command.
|
||||
Process proc = launcher.execute(new Path(SHELL_COMMAND), newArgumentList, env, execDir,
|
||||
new NullProgressMonitor());
|
||||
if (proc != null) {
|
||||
try {
|
||||
// Close the input of the process since we
|
||||
// will never write to
|
||||
// it
|
||||
proc.getOutputStream().close();
|
||||
} catch (IOException e1) {
|
||||
}
|
||||
|
||||
if (launcher.waitAndRead(stdout, stderr,
|
||||
SubMonitor.convert(monitor1)) != ICommandLauncher.OK) {
|
||||
errMsg = launcher.getErrorMessage();
|
||||
}
|
||||
|
||||
// Force a resync of the projects without
|
||||
// allowing the user to
|
||||
// cancel.
|
||||
// This is probably unkind, but short of this
|
||||
// there is no way to
|
||||
// ensure
|
||||
// the UI is up-to-date with the build results
|
||||
// monitor.subTask(ManagedMakeMessages
|
||||
// .getResourceString(REFRESH));
|
||||
monitor1.subTask(AutotoolsUIPlugin.getResourceString("MakeGenerator.refresh")); //$NON-NLS-1$
|
||||
try {
|
||||
project.refreshLocal(IResource.DEPTH_INFINITE, null);
|
||||
} catch (CoreException e2) {
|
||||
monitor1.subTask(
|
||||
AutotoolsUIPlugin.getResourceString("MakeGenerator.refresh.error")); //$NON-NLS-1$
|
||||
}
|
||||
} else {
|
||||
errMsg = launcher.getErrorMessage();
|
||||
}
|
||||
|
||||
if (errMsg != null)
|
||||
AutotoolsUIPlugin.logErrorMessage(errMsg);
|
||||
|
||||
} catch (IOException e3) {
|
||||
AutotoolsUIPlugin.log(e3);
|
||||
}
|
||||
}, rule, IWorkspace.AVOID_UPDATE, monitor);
|
||||
} catch (CoreException e) {
|
||||
return e.getStatus();
|
||||
}
|
||||
return Status.OK_STATUS;
|
||||
}
|
||||
};
|
||||
|
||||
backgroundJob.setRule(rule);
|
||||
backgroundJob.schedule();
|
||||
}
|
||||
|
||||
protected IContainer getSelectedContainer() {
|
||||
return fContainer;
|
||||
}
|
||||
|
||||
public void setSelectedContainer(IContainer container) {
|
||||
fContainer = container;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,96 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2004 QNX Software Systems 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:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import org.eclipse.cdt.autotools.core.AutotoolsPlugin;
|
||||
import org.eclipse.cdt.autotools.ui.AutotoolsUIPlugin;
|
||||
import org.eclipse.cdt.core.model.ICContainer;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.ui.IObjectActionDelegate;
|
||||
import org.eclipse.ui.IWorkbenchPart;
|
||||
import org.eclipse.ui.IWorkbenchWindow;
|
||||
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
|
||||
import org.eclipse.ui.actions.ActionDelegate;
|
||||
|
||||
|
||||
public abstract class AbstractTargetAction
|
||||
extends ActionDelegate
|
||||
implements IObjectActionDelegate, IWorkbenchWindowActionDelegate {
|
||||
private IWorkbenchPart fPart;
|
||||
private IWorkbenchWindow fWindow;
|
||||
private IContainer fContainer;
|
||||
|
||||
protected Shell getShell() {
|
||||
if (fPart != null) {
|
||||
return fPart.getSite().getShell();
|
||||
} else if (fWindow != null) {
|
||||
return fWindow.getShell();
|
||||
}
|
||||
return AutotoolsUIPlugin.getActiveWorkbenchShell();
|
||||
}
|
||||
|
||||
protected IContainer getSelectedContainer() {
|
||||
return fContainer;
|
||||
}
|
||||
|
||||
public void setSelectedContainer(IContainer container) {
|
||||
fContainer = container;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
|
||||
fPart = targetPart;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(IWorkbenchWindow window) {
|
||||
fWindow = window;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void selectionChanged(IAction action, ISelection selection) {
|
||||
boolean enabled = false;
|
||||
if (selection instanceof IStructuredSelection) {
|
||||
IStructuredSelection sel = (IStructuredSelection) selection;
|
||||
Object obj = sel.getFirstElement();
|
||||
if (obj instanceof ICElement) {
|
||||
if ( obj instanceof ICContainer || obj instanceof ICProject) {
|
||||
fContainer = (IContainer) ((ICElement) obj).getUnderlyingResource();
|
||||
} else {
|
||||
obj = ((ICElement)obj).getResource();
|
||||
if ( obj != null) {
|
||||
fContainer = ((IResource)obj).getParent();
|
||||
}
|
||||
}
|
||||
} else if (obj instanceof IResource) {
|
||||
if (obj instanceof IContainer) {
|
||||
fContainer = (IContainer) obj;
|
||||
} else {
|
||||
fContainer = ((IResource)obj).getParent();
|
||||
}
|
||||
} else {
|
||||
fContainer = null;
|
||||
}
|
||||
if (fContainer != null && AutotoolsPlugin.hasTargetBuilder(fContainer.getProject())) {
|
||||
enabled = true;
|
||||
}
|
||||
}
|
||||
action.setEnabled(enabled);
|
||||
}
|
||||
|
||||
}
|
|
@ -10,7 +10,16 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants;
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
/**
|
||||
* @author Jeff Johnston
|
||||
|
@ -20,7 +29,74 @@ public class AclocalHandler extends AbstractAutotoolsHandler {
|
|||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) {
|
||||
return execute(event, new InvokeAclocalAction());
|
||||
return execute1(event);
|
||||
}
|
||||
|
||||
private static final String DEFAULT_OPTION = ""; //$NON-NLS-1$
|
||||
private static final String DEFAULT_COMMAND = "aclocal"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
protected void run(Shell activeShell) {
|
||||
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
IPath execDir = getExecDir(container);
|
||||
String cwd = InvokeMessages.getString("CWD") + getCWD(container); //$NON-NLS-1$
|
||||
|
||||
TwoInputDialog optionDialog = new TwoInputDialog(activeShell, cwd,
|
||||
InvokeMessages.getString("InvokeAclocalAction.windowTitle.options"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeAclocalAction.message.options.otherOptions"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeAclocalAction.message.options.includeDir"), DEFAULT_OPTION, null); //$NON-NLS-1$
|
||||
|
||||
optionDialog.open();
|
||||
|
||||
// chop args into string array
|
||||
String rawArgList = optionDialog.getValue();
|
||||
|
||||
List<String> optionsList = separateOptions(rawArgList);
|
||||
|
||||
// chop args into string array
|
||||
rawArgList = optionDialog.getSecondValue();
|
||||
|
||||
List<String> targetList = separateTargets(rawArgList);
|
||||
|
||||
if (targetList == null) {
|
||||
|
||||
showError(InvokeMessages.getString("InvokeAction.execute.windowTitle.error"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeAction.windowTitle.quoteError")); //$NON-NLS-1$
|
||||
return;
|
||||
}
|
||||
|
||||
int iOption = 0;
|
||||
if (targetList.size() > 0) {
|
||||
iOption = 1;
|
||||
}
|
||||
|
||||
List<String> argumentList = new ArrayList<>();
|
||||
|
||||
argumentList.addAll(optionsList);
|
||||
|
||||
if (iOption == 1)
|
||||
argumentList.add("-I"); //$NON-NLS-1$
|
||||
|
||||
argumentList.addAll(targetList);
|
||||
String aclocalCommand = null;
|
||||
IProject project = getSelectedContainer().getProject();
|
||||
try {
|
||||
aclocalCommand = project.getPersistentProperty(AutotoolsPropertyConstants.ACLOCAL_TOOL);
|
||||
} catch (CoreException e) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// If unset, use default system path
|
||||
if (aclocalCommand == null) {
|
||||
aclocalCommand = DEFAULT_COMMAND;
|
||||
}
|
||||
|
||||
executeConsoleCommand(DEFAULT_COMMAND, aclocalCommand, argumentList, execDir);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,13 +10,46 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants;
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
public class AutoconfHandler extends AbstractAutotoolsHandler {
|
||||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) {
|
||||
return execute(event, new InvokeAutoconfAction());
|
||||
return execute1(event);
|
||||
}
|
||||
|
||||
private final static String DEFAULT_COMMAND = "autoconf"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public void run(Shell activeShell) {
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null)
|
||||
return;
|
||||
|
||||
IPath execDir = getExecDir(container);
|
||||
|
||||
IProject project = container.getProject();
|
||||
String autoconfCommand = null;
|
||||
try {
|
||||
autoconfCommand = project.getPersistentProperty(AutotoolsPropertyConstants.AUTOCONF_TOOL);
|
||||
} catch (CoreException e) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// If unset for the project, default to system path
|
||||
if (autoconfCommand == null) {
|
||||
autoconfCommand = DEFAULT_COMMAND;
|
||||
}
|
||||
executeConsoleCommand(DEFAULT_COMMAND, autoconfCommand, new ArrayList<>(), execDir);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,7 +10,16 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants;
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.dialogs.InputDialog;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
/**
|
||||
* @author Jeff Johnston
|
||||
|
@ -20,7 +29,48 @@ public class AutoheaderHandler extends AbstractAutotoolsHandler {
|
|||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) {
|
||||
return execute(event, new InvokeAutoheaderAction());
|
||||
return execute1(event);
|
||||
}
|
||||
|
||||
private static final String DEFAULT_OPTION = ""; //$NON-NLS-1$
|
||||
private static final String DEFAULT_COMMAND = "autoheader"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public void run(Shell activeShell) {
|
||||
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null) {
|
||||
return;
|
||||
}
|
||||
IPath execDir = getExecDir(container);
|
||||
String cwd = InvokeMessages.getString("CWD") + getCWD(container); //$NON-NLS-1$
|
||||
|
||||
InputDialog optionDialog = new SingleInputDialog(activeShell, cwd,
|
||||
InvokeMessages.getString("InvokeAutoheaderAction.windowTitle.options"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeAutoheaderAction.message.options.otherOptions"), //$NON-NLS-1$
|
||||
DEFAULT_OPTION, null);
|
||||
optionDialog.open();
|
||||
|
||||
// chop args into string array
|
||||
String rawArgList = optionDialog.getValue();
|
||||
|
||||
List<String> optionsList = simpleParseOptions(rawArgList);
|
||||
|
||||
String autoheaderCommand = null;
|
||||
IProject project = getSelectedContainer().getProject();
|
||||
try {
|
||||
autoheaderCommand = project.getPersistentProperty(AutotoolsPropertyConstants.AUTOHEADER_TOOL);
|
||||
} catch (CoreException e) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// If unset, use default system path
|
||||
if (autoheaderCommand == null) {
|
||||
autoheaderCommand = DEFAULT_COMMAND;
|
||||
}
|
||||
|
||||
executeConsoleCommand(DEFAULT_COMMAND, autoheaderCommand, optionsList, execDir);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,13 +10,81 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants;
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
public class AutomakeHandler extends AbstractAutotoolsHandler {
|
||||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) {
|
||||
return execute(event, new InvokeAutomakeAction());
|
||||
return execute1(event);
|
||||
}
|
||||
|
||||
private static final String DEFAULT_OPTION = ""; //$NON-NLS-1$
|
||||
private static final String DEFAULT_COMMAND = "automake"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public void run(Shell activeShell) {
|
||||
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
IPath execDir = getExecDir(container);
|
||||
String cwd = InvokeMessages.getString("CWD") + getCWD(container); //$NON-NLS-1$
|
||||
TwoInputDialog optionDialog = new TwoInputDialog(activeShell, cwd,
|
||||
InvokeMessages.getString("InvokeAutomakeAction.windowTitle.options"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeAutomakeAction.message.options.otherOptions"), //$NON-NLS-1$
|
||||
InvokeMessages
|
||||
.getString("InvokeAutomakeAction.message.options.makeTargets"), //$NON-NLS-1$
|
||||
DEFAULT_OPTION, null);
|
||||
|
||||
optionDialog.open();
|
||||
|
||||
// chop args into string array
|
||||
String rawArgList = optionDialog.getValue();
|
||||
|
||||
List<String> optionsList = separateOptions(rawArgList);
|
||||
|
||||
// chop args into string array
|
||||
rawArgList = optionDialog.getSecondValue();
|
||||
|
||||
List<String> targetList = separateTargets(rawArgList);
|
||||
|
||||
if (targetList == null) {
|
||||
|
||||
showError(InvokeMessages.getString("InvokeAction.execute.windowTitle.error"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeAction.windowTitle.quoteError")); //$NON-NLS-1$
|
||||
return;
|
||||
}
|
||||
|
||||
List<String> argumentList = new ArrayList<>();
|
||||
argumentList.addAll(optionsList);
|
||||
argumentList.addAll(targetList);
|
||||
|
||||
IProject project = container.getProject();
|
||||
String automakeCommand = null;
|
||||
try {
|
||||
automakeCommand = project.getPersistentProperty(AutotoolsPropertyConstants.AUTOMAKE_TOOL);
|
||||
} catch (CoreException e) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// If automake path not set for the project, default to system path
|
||||
if (automakeCommand == null) {
|
||||
automakeCommand = DEFAULT_COMMAND;
|
||||
}
|
||||
|
||||
executeConsoleCommand(DEFAULT_COMMAND, automakeCommand, argumentList, execDir);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,7 +10,16 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants;
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.dialogs.InputDialog;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
/**
|
||||
* @author Jeff Johnston
|
||||
|
@ -20,7 +29,48 @@ public class AutoreconfHandler extends AbstractAutotoolsHandler {
|
|||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) {
|
||||
return execute(event, new InvokeAutoreconfAction());
|
||||
return execute1(event);
|
||||
}
|
||||
|
||||
private static final String DEFAULT_OPTION = ""; //$NON-NLS-1$
|
||||
private static final String DEFAULT_COMMAND = "autoreconf"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public void run(Shell activeShell) {
|
||||
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
IPath execDir = getExecDir(container);
|
||||
String cwd = InvokeMessages.getString("CWD") + getCWD(container); //$NON-NLS-1$
|
||||
|
||||
InputDialog optionDialog = new SingleInputDialog(activeShell, cwd,
|
||||
InvokeMessages.getString("InvokeAutoreconfAction.windowTitle.options"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeAutoreconfAction.message.options.otherOptions"), //$NON-NLS-1$
|
||||
DEFAULT_OPTION, null);
|
||||
optionDialog.open();
|
||||
|
||||
// chop args into string array
|
||||
String rawArgList = optionDialog.getValue();
|
||||
|
||||
List<String> optionsList = simpleParseOptions(rawArgList);
|
||||
|
||||
String autoreconfCommand = null;
|
||||
IProject project = getSelectedContainer().getProject();
|
||||
try {
|
||||
autoreconfCommand = project.getPersistentProperty(AutotoolsPropertyConstants.AUTORECONF_TOOL);
|
||||
} catch (CoreException e) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// If unset, use default system path
|
||||
if (autoreconfCommand == null) {
|
||||
autoreconfCommand = DEFAULT_COMMAND;
|
||||
}
|
||||
|
||||
executeConsoleCommand(DEFAULT_COMMAND, autoreconfCommand, optionsList, execDir);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,98 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006, 2007 2009 Red Hat Inc..
|
||||
* 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:
|
||||
* Red Hat Incorporated - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
|
||||
|
||||
public class InvokeAclocalAction extends InvokeAction {
|
||||
|
||||
private static final String DEFAULT_OPTION = ""; //$NON-NLS-1$
|
||||
private static final String DEFAULT_COMMAND = "aclocal"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public void run(IAction action) {
|
||||
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
IPath execDir = getExecDir(container);
|
||||
String cwd = InvokeMessages.getString("CWD") + getCWD(container); //$NON-NLS-1$
|
||||
|
||||
TwoInputDialog optionDialog = new TwoInputDialog(getShell(), cwd,
|
||||
InvokeMessages.getString("InvokeAclocalAction.windowTitle.options"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeAclocalAction.message.options.otherOptions"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeAclocalAction.message.options.includeDir"), DEFAULT_OPTION, null); //$NON-NLS-1$
|
||||
|
||||
optionDialog.open();
|
||||
|
||||
// chop args into string array
|
||||
String rawArgList = optionDialog.getValue();
|
||||
|
||||
String[] optionsList = separateOptions(rawArgList);
|
||||
|
||||
// chop args into string array
|
||||
rawArgList = optionDialog.getSecondValue();
|
||||
|
||||
String[] targetList = separateTargets(rawArgList);
|
||||
|
||||
if (targetList == null) {
|
||||
|
||||
showError(InvokeMessages
|
||||
.getString("InvokeAction.execute.windowTitle.error"), //$NON-NLS-1$
|
||||
InvokeMessages
|
||||
.getString("InvokeAction.windowTitle.quoteError")); //$NON-NLS-1$
|
||||
return;
|
||||
}
|
||||
|
||||
int iOption = 0;
|
||||
if (targetList.length > 0) {
|
||||
iOption = 1;
|
||||
}
|
||||
|
||||
String[] argumentList = new String[targetList.length + optionsList.length + iOption];
|
||||
|
||||
System.arraycopy(optionsList, 0, argumentList, 0, optionsList.length);
|
||||
|
||||
if (iOption == 1)
|
||||
argumentList[optionsList.length] = "-I"; //$NON-NLS-1$
|
||||
|
||||
System.arraycopy(targetList, 0, argumentList, optionsList.length + iOption, targetList.length);
|
||||
|
||||
String aclocalCommand = null;
|
||||
IProject project = getSelectedContainer().getProject();
|
||||
try {
|
||||
aclocalCommand = project.getPersistentProperty(AutotoolsPropertyConstants.ACLOCAL_TOOL);
|
||||
} catch (CoreException e) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// If unset, use default system path
|
||||
if (aclocalCommand == null) {
|
||||
aclocalCommand = DEFAULT_COMMAND;
|
||||
}
|
||||
|
||||
executeConsoleCommand(DEFAULT_COMMAND, aclocalCommand, argumentList, execDir);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,348 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006, 2007, 2009 Red Hat Inc..
|
||||
* 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:
|
||||
* Red Hat Incorporated - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import org.eclipse.cdt.autotools.ui.AutotoolsUIPlugin;
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.ConsoleOutputStream;
|
||||
import org.eclipse.cdt.core.ICommandLauncher;
|
||||
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
|
||||
import org.eclipse.cdt.core.resources.IConsole;
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsNewMakeGenerator;
|
||||
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
|
||||
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
|
||||
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
||||
import org.eclipse.cdt.remote.core.RemoteCommandLauncher;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.resources.IWorkspace;
|
||||
import org.eclipse.core.resources.IWorkspaceRunnable;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.core.runtime.SubMonitor;
|
||||
import org.eclipse.core.runtime.jobs.ISchedulingRule;
|
||||
import org.eclipse.core.runtime.jobs.Job;
|
||||
import org.eclipse.jface.dialogs.MessageDialog;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
public abstract class InvokeAction extends AbstractTargetAction {
|
||||
|
||||
public final String SHELL_COMMAND = "sh"; //$NON-NLS-1$
|
||||
|
||||
protected void showError(String title, String content) {
|
||||
MessageDialog.openError(new Shell(), title, content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Separate targets to array from a string.
|
||||
*
|
||||
* @param rawArgList
|
||||
* @return targets in string[] array. if targets are not formatted properly,
|
||||
* returns null
|
||||
*/
|
||||
protected String[] separateTargets(String rawArgList) {
|
||||
|
||||
StringTokenizer st = new StringTokenizer(rawArgList, " "); //$NON-NLS-1$
|
||||
List<String> targetList = new ArrayList<>();
|
||||
|
||||
while (st.hasMoreTokens()) {
|
||||
String currentWord = st.nextToken().trim();
|
||||
|
||||
if (currentWord.startsWith("'")) { //$NON-NLS-1$
|
||||
StringBuffer tmpTarget = new StringBuffer();
|
||||
while (!currentWord.endsWith("'")) { //$NON-NLS-1$
|
||||
tmpTarget.append(currentWord + " "); //$NON-NLS-1$
|
||||
if (!st.hasMoreTokens()) {
|
||||
// quote not closed properly, so return null
|
||||
return null;
|
||||
}
|
||||
currentWord = st.nextToken().trim();
|
||||
}
|
||||
|
||||
tmpTarget.append(currentWord);
|
||||
targetList.add(tmpTarget.toString());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (currentWord.startsWith("\"")) { //$NON-NLS-1$
|
||||
StringBuffer tmpTarget = new StringBuffer();
|
||||
while (!currentWord.endsWith("\"")) { //$NON-NLS-1$
|
||||
tmpTarget.append(currentWord + " "); //$NON-NLS-1$
|
||||
if (!st.hasMoreTokens()) {
|
||||
// double quote not closed properly, so return null
|
||||
return null;
|
||||
}
|
||||
currentWord = st.nextToken().trim();
|
||||
}
|
||||
|
||||
tmpTarget.append(currentWord);
|
||||
targetList.add(tmpTarget.toString());
|
||||
continue;
|
||||
}
|
||||
|
||||
// for targets without quote/double quotes.
|
||||
targetList.add(currentWord);
|
||||
|
||||
}
|
||||
|
||||
return targetList.toArray(new String[targetList.size()]);
|
||||
}
|
||||
|
||||
protected String[] separateOptions(String rawArgList) {
|
||||
List<String> argList = new ArrayList<>();
|
||||
// May be multiple user-specified options in which case we
|
||||
// need to split them up into individual options
|
||||
rawArgList = rawArgList.trim();
|
||||
boolean finished = false;
|
||||
int lastIndex = rawArgList.indexOf("--"); //$NON-NLS-1$
|
||||
if (lastIndex != -1) {
|
||||
while (!finished) {
|
||||
int index = rawArgList.indexOf("--", lastIndex + 2); //$NON-NLS-1$
|
||||
if (index != -1) {
|
||||
String previous = rawArgList.substring(lastIndex, index)
|
||||
.trim();
|
||||
argList.add(previous);
|
||||
rawArgList = rawArgList.substring(index);
|
||||
} else {
|
||||
argList.add(rawArgList);
|
||||
finished = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return argList.toArray(new String[argList.size()]);
|
||||
|
||||
}
|
||||
|
||||
protected String[] simpleParseOptions(String rawArgList) {
|
||||
List<String> argList = new ArrayList<>();
|
||||
int lastArgIndex = -1;
|
||||
int i = 0;
|
||||
while (i < rawArgList.length()) {
|
||||
char ch = rawArgList.charAt(i);
|
||||
// Skip white-space
|
||||
while (Character.isWhitespace(ch)) {
|
||||
++i;
|
||||
if (i < rawArgList.length())
|
||||
ch = rawArgList.charAt(i);
|
||||
else // Otherwise we are done
|
||||
return argList.toArray(new String[argList.size()]);
|
||||
}
|
||||
|
||||
// Simplistic parser. We break up into strings delimited
|
||||
// by blanks. If quotes are used, we ignore blanks within.
|
||||
// If a backslash is used, we ignore the next character and
|
||||
// pass it through.
|
||||
lastArgIndex = i;
|
||||
boolean inString = false;
|
||||
while (i < rawArgList.length()) {
|
||||
ch = rawArgList.charAt(i);
|
||||
if (ch == '\\') // escape character
|
||||
++i; // skip over the next character
|
||||
else if (ch == '\"') { // double quotes
|
||||
inString = !inString;
|
||||
} else if (Character.isWhitespace(ch)) {
|
||||
if (!inString) {
|
||||
argList.add(rawArgList.substring(lastArgIndex, i));
|
||||
break;
|
||||
}
|
||||
}
|
||||
++i;
|
||||
}
|
||||
// Look for the case where we ran out of chars for the last
|
||||
// token.
|
||||
if (i >= rawArgList.length())
|
||||
argList.add(rawArgList.substring(lastArgIndex));
|
||||
++i;
|
||||
}
|
||||
return argList.toArray(new String[argList.size()]);
|
||||
}
|
||||
|
||||
protected IPath getExecDir(IContainer container) {
|
||||
int type = container.getType();
|
||||
IPath execDir = null;
|
||||
if (type == IResource.FILE) {
|
||||
execDir = container.getLocation().removeLastSegments(1);
|
||||
} else {
|
||||
execDir = container.getLocation();
|
||||
}
|
||||
return execDir;
|
||||
}
|
||||
|
||||
protected IPath getCWD(IContainer container) {
|
||||
int type = container.getType();
|
||||
IPath cwd = null;
|
||||
if (type == IResource.FILE) {
|
||||
cwd = container.getFullPath().removeLastSegments(1);
|
||||
} else {
|
||||
cwd = container.getFullPath();
|
||||
}
|
||||
return cwd;
|
||||
}
|
||||
|
||||
protected void executeConsoleCommand(final String actionName, final String command,
|
||||
final String[] argumentList, final IPath execDir) {
|
||||
// We need to use a workspace root scheduling rule because adding MakeTargets
|
||||
// may end up saving the project description which runs under a workspace root rule.
|
||||
final ISchedulingRule rule = ResourcesPlugin.getWorkspace().getRoot();
|
||||
|
||||
Job backgroundJob = new Job(actionName) {
|
||||
@Override
|
||||
protected IStatus run(IProgressMonitor monitor) {
|
||||
try {
|
||||
ResourcesPlugin.getWorkspace().run((IWorkspaceRunnable) monitor1 -> {
|
||||
try {
|
||||
String errMsg = null;
|
||||
IProject project = getSelectedContainer().getProject();
|
||||
// Get a build console for the project
|
||||
IConsole console = CCorePlugin.getDefault()
|
||||
.getConsole("org.eclipse.cdt.autotools.ui.autotoolsConsole"); //$NON-NLS-1$
|
||||
console.start(project);
|
||||
CUIPlugin.getDefault().startGlobalConsole();
|
||||
ConsoleOutputStream consoleOutStream = console.getOutputStream();
|
||||
// FIXME: we want to remove need for
|
||||
// ManagedBuilderManager, but how do we
|
||||
// get environment variables.
|
||||
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
|
||||
IConfiguration cfg = info.getDefaultConfiguration();
|
||||
|
||||
StringBuffer buf = new StringBuffer();
|
||||
String[] consoleHeader = new String[3];
|
||||
|
||||
consoleHeader[0] = actionName;
|
||||
consoleHeader[1] = cfg.getName();
|
||||
consoleHeader[2] = project.getName();
|
||||
buf.append(System.getProperty("line.separator", "\n")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
String invokeMsg = InvokeMessages.getFormattedString("InvokeAction.console.message", //$NON-NLS-1$
|
||||
new String[] { actionName, execDir.toString() }); // $NON-NLS-1$
|
||||
buf.append(invokeMsg);
|
||||
buf.append(System.getProperty("line.separator", "\n")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
buf.append(System.getProperty("line.separator", "\n")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
consoleOutStream.write(buf.toString().getBytes());
|
||||
consoleOutStream.flush();
|
||||
|
||||
ArrayList<String> additionalEnvs = new ArrayList<>();
|
||||
String strippedCommand = AutotoolsNewMakeGenerator.stripEnvVars(command, additionalEnvs);
|
||||
// Get a launcher for the config command
|
||||
RemoteCommandLauncher launcher = new RemoteCommandLauncher();
|
||||
launcher.setProject(project);
|
||||
// Set the environment
|
||||
IEnvironmentVariable variables[] = ManagedBuildManager.getEnvironmentVariableProvider()
|
||||
.getVariables(cfg, true);
|
||||
String[] env = null;
|
||||
ArrayList<String> envList = new ArrayList<>();
|
||||
if (variables != null) {
|
||||
for (int i = 0; i < variables.length; i++) {
|
||||
envList.add(variables[i].getName() + "=" + variables[i].getValue()); //$NON-NLS-1$
|
||||
}
|
||||
if (additionalEnvs.size() > 0)
|
||||
envList.addAll(additionalEnvs); // add any
|
||||
// additional
|
||||
// environment
|
||||
// variables
|
||||
// specified
|
||||
// ahead of
|
||||
// script
|
||||
env = envList.toArray(new String[envList.size()]);
|
||||
}
|
||||
|
||||
String[] newArgumentList;
|
||||
|
||||
// Fix for bug #343905 and bug #371277
|
||||
// For Windows and Mac, we cannot run a script
|
||||
// directly (in this case,
|
||||
// autotools are scripts). We need to run "sh -c
|
||||
// command args where command
|
||||
// plus args is represented in a single string. The
|
||||
// same applies for
|
||||
// some Linux shells such as dash. Using sh -c will
|
||||
// work on all Linux
|
||||
// POSIX-compliant shells.
|
||||
StringBuffer command1 = new StringBuffer(strippedCommand);
|
||||
for (String arg : argumentList) {
|
||||
command1.append(" " + arg);
|
||||
}
|
||||
newArgumentList = new String[] { "-c", command1.toString() };
|
||||
|
||||
OutputStream stdout = consoleOutStream;
|
||||
OutputStream stderr = consoleOutStream;
|
||||
|
||||
launcher.showCommand(true);
|
||||
// Run the shell script via shell command.
|
||||
Process proc = launcher.execute(new Path(SHELL_COMMAND), newArgumentList, env, execDir,
|
||||
new NullProgressMonitor());
|
||||
if (proc != null) {
|
||||
try {
|
||||
// Close the input of the process since we
|
||||
// will never write to
|
||||
// it
|
||||
proc.getOutputStream().close();
|
||||
} catch (IOException e1) {
|
||||
}
|
||||
|
||||
if (launcher.waitAndRead(stdout, stderr,
|
||||
SubMonitor.convert(monitor1)) != ICommandLauncher.OK) {
|
||||
errMsg = launcher.getErrorMessage();
|
||||
}
|
||||
|
||||
// Force a resync of the projects without
|
||||
// allowing the user to
|
||||
// cancel.
|
||||
// This is probably unkind, but short of this
|
||||
// there is no way to
|
||||
// ensure
|
||||
// the UI is up-to-date with the build results
|
||||
// monitor.subTask(ManagedMakeMessages
|
||||
// .getResourceString(REFRESH));
|
||||
monitor1.subTask(AutotoolsUIPlugin.getResourceString("MakeGenerator.refresh")); //$NON-NLS-1$
|
||||
try {
|
||||
project.refreshLocal(IResource.DEPTH_INFINITE, null);
|
||||
} catch (CoreException e2) {
|
||||
monitor1.subTask(
|
||||
AutotoolsUIPlugin.getResourceString("MakeGenerator.refresh.error")); //$NON-NLS-1$
|
||||
}
|
||||
} else {
|
||||
errMsg = launcher.getErrorMessage();
|
||||
}
|
||||
|
||||
if (errMsg != null)
|
||||
AutotoolsUIPlugin.logErrorMessage(errMsg);
|
||||
|
||||
} catch (IOException e3) {
|
||||
AutotoolsUIPlugin.log(e3);
|
||||
}
|
||||
}, rule, IWorkspace.AVOID_UPDATE, monitor);
|
||||
} catch (CoreException e) {
|
||||
return e.getStatus();
|
||||
}
|
||||
return Status.OK_STATUS;
|
||||
}
|
||||
};
|
||||
|
||||
backgroundJob.setRule(rule);
|
||||
backgroundJob.schedule();
|
||||
}
|
||||
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006, 2007 2009 Red Hat Inc..
|
||||
* 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:
|
||||
* Red Hat Incorporated - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
|
||||
|
||||
/**
|
||||
* Class responsible for invoking autoconf.
|
||||
*/
|
||||
public class InvokeAutoconfAction extends InvokeAction {
|
||||
|
||||
private final static String DEFAULT_COMMAND = "autoconf"; //$NON-NLS-1$
|
||||
@Override
|
||||
public void run(IAction action) {
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null)
|
||||
return;
|
||||
|
||||
IPath execDir = getExecDir(container);
|
||||
|
||||
IProject project = container.getProject();
|
||||
String autoconfCommand = null;
|
||||
try {
|
||||
autoconfCommand = project.getPersistentProperty(AutotoolsPropertyConstants.AUTOCONF_TOOL);
|
||||
} catch (CoreException e) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// If unset for the project, default to system path
|
||||
if (autoconfCommand == null) {
|
||||
autoconfCommand = DEFAULT_COMMAND;
|
||||
}
|
||||
executeConsoleCommand(DEFAULT_COMMAND, autoconfCommand, new String[] {}, execDir);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
}
|
||||
}
|
|
@ -1,74 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009 Red Hat Inc..
|
||||
* 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:
|
||||
* Red Hat Incorporated - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
import org.eclipse.jface.dialogs.InputDialog;
|
||||
|
||||
|
||||
public class InvokeAutoheaderAction extends InvokeAction {
|
||||
|
||||
private static final String DEFAULT_OPTION = ""; //$NON-NLS-1$
|
||||
private static final String DEFAULT_COMMAND = "autoheader"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public void run(IAction action) {
|
||||
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null) {
|
||||
return;
|
||||
}
|
||||
IPath execDir = getExecDir(container);
|
||||
String cwd = InvokeMessages.getString("CWD") + getCWD(container); //$NON-NLS-1$
|
||||
|
||||
InputDialog optionDialog = new SingleInputDialog(getShell(), cwd,
|
||||
InvokeMessages.getString("InvokeAutoheaderAction.windowTitle.options"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeAutoheaderAction.message.options.otherOptions"), //$NON-NLS-1$
|
||||
DEFAULT_OPTION, null);
|
||||
optionDialog.open();
|
||||
|
||||
// chop args into string array
|
||||
String rawArgList = optionDialog.getValue();
|
||||
|
||||
String[] optionsList = simpleParseOptions(rawArgList);
|
||||
|
||||
String[] argumentList = new String[optionsList.length];
|
||||
|
||||
System.arraycopy(optionsList, 0, argumentList, 0, optionsList.length);
|
||||
|
||||
String autoheaderCommand = null;
|
||||
IProject project = getSelectedContainer().getProject();
|
||||
try {
|
||||
autoheaderCommand = project.getPersistentProperty(AutotoolsPropertyConstants.AUTOHEADER_TOOL);
|
||||
} catch (CoreException e) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// If unset, use default system path
|
||||
if (autoheaderCommand == null) {
|
||||
autoheaderCommand = DEFAULT_COMMAND;
|
||||
}
|
||||
|
||||
executeConsoleCommand(DEFAULT_COMMAND, autoheaderCommand, argumentList, execDir);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,96 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006, 2007 2009 Red Hat Inc..
|
||||
* 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:
|
||||
* Red Hat Incorporated - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
|
||||
|
||||
/**
|
||||
* Class responsible for invoking automake.
|
||||
*
|
||||
* @author klee
|
||||
*
|
||||
*/
|
||||
public class InvokeAutomakeAction extends InvokeAction {
|
||||
|
||||
private static final String DEFAULT_OPTION = ""; //$NON-NLS-1$
|
||||
private static final String DEFAULT_COMMAND = "automake"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public void run(IAction action) {
|
||||
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
IPath execDir = getExecDir(container);
|
||||
String cwd = InvokeMessages.getString("CWD") + getCWD(container); //$NON-NLS-1$
|
||||
TwoInputDialog optionDialog = new TwoInputDialog(getShell(), cwd,
|
||||
InvokeMessages.getString("InvokeAutomakeAction.windowTitle.options"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeAutomakeAction.message.options.otherOptions"), InvokeMessages //$NON-NLS-1$
|
||||
.getString("InvokeAutomakeAction.message.options.makeTargets"), //$NON-NLS-1$
|
||||
DEFAULT_OPTION, null);
|
||||
|
||||
optionDialog.open();
|
||||
|
||||
// chop args into string array
|
||||
String rawArgList = optionDialog.getValue();
|
||||
|
||||
String[] optionsList = separateOptions(rawArgList);
|
||||
|
||||
|
||||
// chop args into string array
|
||||
rawArgList = optionDialog.getSecondValue();
|
||||
|
||||
String[] targetList = separateTargets(rawArgList);
|
||||
|
||||
if (targetList == null) {
|
||||
|
||||
showError(InvokeMessages.getString("InvokeAction.execute.windowTitle.error"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeAction.windowTitle.quoteError")); //$NON-NLS-1$
|
||||
return;
|
||||
}
|
||||
|
||||
String[] argumentList = new String[targetList.length
|
||||
+ optionsList.length];
|
||||
|
||||
System.arraycopy(optionsList, 0, argumentList, 0, optionsList.length);
|
||||
System.arraycopy(targetList, 0, argumentList, optionsList.length,
|
||||
targetList.length);
|
||||
|
||||
IProject project = container.getProject();
|
||||
String automakeCommand = null;
|
||||
try {
|
||||
automakeCommand = project.getPersistentProperty(AutotoolsPropertyConstants.AUTOMAKE_TOOL);
|
||||
} catch (CoreException e) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// If automake path not set for the project, default to system path
|
||||
if (automakeCommand == null) {
|
||||
automakeCommand = DEFAULT_COMMAND;
|
||||
}
|
||||
|
||||
executeConsoleCommand(DEFAULT_COMMAND, automakeCommand, argumentList, execDir);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,74 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009 Red Hat Inc..
|
||||
* 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:
|
||||
* Red Hat Incorporated - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
import org.eclipse.jface.dialogs.InputDialog;
|
||||
|
||||
|
||||
public class InvokeAutoreconfAction extends InvokeAction {
|
||||
|
||||
private static final String DEFAULT_OPTION = ""; //$NON-NLS-1$
|
||||
private static final String DEFAULT_COMMAND = "autoreconf"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public void run(IAction action) {
|
||||
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
IPath execDir = getExecDir(container);
|
||||
String cwd = InvokeMessages.getString("CWD") + getCWD(container); //$NON-NLS-1$
|
||||
|
||||
InputDialog optionDialog = new SingleInputDialog(getShell(), cwd,
|
||||
InvokeMessages.getString("InvokeAutoreconfAction.windowTitle.options"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeAutoreconfAction.message.options.otherOptions"), //$NON-NLS-1$
|
||||
DEFAULT_OPTION, null);
|
||||
optionDialog.open();
|
||||
|
||||
// chop args into string array
|
||||
String rawArgList = optionDialog.getValue();
|
||||
|
||||
String[] optionsList = simpleParseOptions(rawArgList);
|
||||
|
||||
String[] argumentList = new String[optionsList.length];
|
||||
|
||||
System.arraycopy(optionsList, 0, argumentList, 0, optionsList.length);
|
||||
|
||||
String autoreconfCommand = null;
|
||||
IProject project = getSelectedContainer().getProject();
|
||||
try {
|
||||
autoreconfCommand = project.getPersistentProperty(AutotoolsPropertyConstants.AUTORECONF_TOOL);
|
||||
} catch (CoreException e) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// If unset, use default system path
|
||||
if (autoreconfCommand == null) {
|
||||
autoreconfCommand = DEFAULT_COMMAND;
|
||||
}
|
||||
|
||||
executeConsoleCommand(DEFAULT_COMMAND, autoreconfCommand, argumentList, execDir);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,74 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009 Red Hat Inc..
|
||||
* 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:
|
||||
* Red Hat Incorporated - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
import org.eclipse.jface.dialogs.InputDialog;
|
||||
|
||||
|
||||
public class InvokeLibtoolizeAction extends InvokeAction {
|
||||
|
||||
private static final String DEFAULT_OPTION = ""; //$NON-NLS-1$
|
||||
private static final String DEFAULT_COMMAND = "libtoolize"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public void run(IAction action) {
|
||||
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
IPath execDir = getExecDir(container);
|
||||
String cwd = InvokeMessages.getString("CWD") + getCWD(container); //$NON-NLS-1$
|
||||
|
||||
InputDialog optionDialog = new SingleInputDialog(getShell(), cwd,
|
||||
InvokeMessages.getString("InvokeLibtoolizeAction.windowTitle.options"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeLibtoolizeAction.message.options.otherOptions"), //$NON-NLS-1$
|
||||
DEFAULT_OPTION, null);
|
||||
optionDialog.open();
|
||||
|
||||
// chop args into string array
|
||||
String rawArgList = optionDialog.getValue();
|
||||
|
||||
String[] optionsList = simpleParseOptions(rawArgList);
|
||||
|
||||
String[] argumentList = new String[optionsList.length];
|
||||
|
||||
System.arraycopy(optionsList, 0, argumentList, 0, optionsList.length);
|
||||
|
||||
String libtoolizeCommand = null;
|
||||
IProject project = getSelectedContainer().getProject();
|
||||
try {
|
||||
libtoolizeCommand = project.getPersistentProperty(AutotoolsPropertyConstants.LIBTOOLIZE_TOOL);
|
||||
} catch (CoreException e) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// If unset, use default system path
|
||||
if (libtoolizeCommand == null) {
|
||||
libtoolizeCommand = DEFAULT_COMMAND;
|
||||
}
|
||||
|
||||
executeConsoleCommand(DEFAULT_COMMAND, libtoolizeCommand, argumentList, execDir);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -10,7 +10,16 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants;
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.dialogs.InputDialog;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
/**
|
||||
* @author Jeff Johnston
|
||||
|
@ -20,7 +29,48 @@ public class LibtoolizeHandler extends AbstractAutotoolsHandler {
|
|||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) {
|
||||
return execute(event, new InvokeLibtoolizeAction());
|
||||
return execute1(event);
|
||||
}
|
||||
|
||||
private static final String DEFAULT_OPTION = ""; //$NON-NLS-1$
|
||||
private static final String DEFAULT_COMMAND = "libtoolize"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public void run(Shell activeShell) {
|
||||
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
IPath execDir = getExecDir(container);
|
||||
String cwd = InvokeMessages.getString("CWD") + getCWD(container); //$NON-NLS-1$
|
||||
|
||||
InputDialog optionDialog = new SingleInputDialog(activeShell, cwd,
|
||||
InvokeMessages.getString("InvokeLibtoolizeAction.windowTitle.options"), //$NON-NLS-1$
|
||||
InvokeMessages.getString("InvokeLibtoolizeAction.message.options.otherOptions"), //$NON-NLS-1$
|
||||
DEFAULT_OPTION, null);
|
||||
optionDialog.open();
|
||||
|
||||
// chop args into string array
|
||||
String rawArgList = optionDialog.getValue();
|
||||
|
||||
List<String> optionsList = simpleParseOptions(rawArgList);
|
||||
|
||||
String libtoolizeCommand = null;
|
||||
IProject project = getSelectedContainer().getProject();
|
||||
try {
|
||||
libtoolizeCommand = project.getPersistentProperty(AutotoolsPropertyConstants.LIBTOOLIZE_TOOL);
|
||||
} catch (CoreException e) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// If unset, use default system path
|
||||
if (libtoolizeCommand == null) {
|
||||
libtoolizeCommand = DEFAULT_COMMAND;
|
||||
}
|
||||
|
||||
executeConsoleCommand(DEFAULT_COMMAND, libtoolizeCommand, optionsList, execDir);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,76 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009 Red Hat Inc..
|
||||
* 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:
|
||||
* Red Hat Incorporated - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsNewMakeGenerator;
|
||||
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
|
||||
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IWorkspace;
|
||||
import org.eclipse.core.resources.IWorkspaceRunnable;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.core.runtime.jobs.ISchedulingRule;
|
||||
import org.eclipse.core.runtime.jobs.Job;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
|
||||
|
||||
public class ReconfigureAction extends InvokeAction {
|
||||
|
||||
@Override
|
||||
public void run(IAction action) {
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null)
|
||||
return;
|
||||
|
||||
// We need to use a workspace root scheduling rule because adding MakeTargets
|
||||
// may end up saving the project description which runs under a workspace root rule.
|
||||
final ISchedulingRule rule = ResourcesPlugin.getWorkspace().getRoot();
|
||||
|
||||
Job backgroundJob = new Job("Reconfigure Action"){ //$NON-NLS-1$
|
||||
@Override
|
||||
protected IStatus run(IProgressMonitor monitor) {
|
||||
try {
|
||||
ResourcesPlugin.getWorkspace().run((IWorkspaceRunnable) monitor1 -> {
|
||||
IProject project = getSelectedContainer().getProject();
|
||||
AutotoolsNewMakeGenerator m = new AutotoolsNewMakeGenerator();
|
||||
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
|
||||
CUIPlugin.getDefault().startGlobalConsole();
|
||||
m.initialize(project, info, monitor1);
|
||||
try {
|
||||
m.reconfigure();
|
||||
} catch (CoreException e) {
|
||||
// do nothing for now
|
||||
}
|
||||
}, rule, IWorkspace.AVOID_UPDATE, monitor);
|
||||
} catch (CoreException e) {
|
||||
return e.getStatus();
|
||||
}
|
||||
IStatus returnStatus = Status.OK_STATUS;
|
||||
return returnStatus;
|
||||
}
|
||||
};
|
||||
|
||||
backgroundJob.setRule(rule);
|
||||
backgroundJob.schedule();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -10,7 +10,23 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui.actions;
|
||||
|
||||
import org.eclipse.cdt.internal.autotools.core.AutotoolsNewMakeGenerator;
|
||||
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
|
||||
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IWorkspace;
|
||||
import org.eclipse.core.resources.IWorkspaceRunnable;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.core.runtime.jobs.ISchedulingRule;
|
||||
import org.eclipse.core.runtime.jobs.Job;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
/**
|
||||
* @author Jeff Johnston
|
||||
|
@ -20,7 +36,47 @@ public class ReconfigureHandler extends AbstractAutotoolsHandler {
|
|||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) {
|
||||
return execute(event, new ReconfigureAction());
|
||||
return execute1(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(Shell activeShell) {
|
||||
IContainer container = getSelectedContainer();
|
||||
if (container == null)
|
||||
return;
|
||||
|
||||
// We need to use a workspace root scheduling rule because adding
|
||||
// MakeTargets
|
||||
// may end up saving the project description which runs under a
|
||||
// workspace root rule.
|
||||
final ISchedulingRule rule = ResourcesPlugin.getWorkspace().getRoot();
|
||||
|
||||
Job backgroundJob = new Job("Reconfigure Action") { //$NON-NLS-1$
|
||||
@Override
|
||||
protected IStatus run(IProgressMonitor monitor) {
|
||||
try {
|
||||
ResourcesPlugin.getWorkspace().run((IWorkspaceRunnable) monitor1 -> {
|
||||
IProject project = getSelectedContainer().getProject();
|
||||
AutotoolsNewMakeGenerator m = new AutotoolsNewMakeGenerator();
|
||||
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
|
||||
CUIPlugin.getDefault().startGlobalConsole();
|
||||
m.initialize(project, info, monitor1);
|
||||
try {
|
||||
m.reconfigure();
|
||||
} catch (CoreException e) {
|
||||
// do nothing for now
|
||||
}
|
||||
}, rule, IWorkspace.AVOID_UPDATE, monitor);
|
||||
} catch (CoreException e) {
|
||||
return e.getStatus();
|
||||
}
|
||||
IStatus returnStatus = Status.OK_STATUS;
|
||||
return returnStatus;
|
||||
}
|
||||
};
|
||||
|
||||
backgroundJob.setRule(rule);
|
||||
backgroundJob.schedule();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue