mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-15 21:15:23 +02:00
Bug 328250 - CommonBuilder should use EFSExtensionManager to determine build working directory
This commit is contained in:
parent
5c4d39a370
commit
a2ee72d9c5
7 changed files with 67 additions and 7 deletions
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
||||||
Bundle-ManifestVersion: 2
|
Bundle-ManifestVersion: 2
|
||||||
Bundle-Name: %pluginName
|
Bundle-Name: %pluginName
|
||||||
Bundle-SymbolicName: org.eclipse.cdt.make.core; singleton:=true
|
Bundle-SymbolicName: org.eclipse.cdt.make.core; singleton:=true
|
||||||
Bundle-Version: 7.0.0.qualifier
|
Bundle-Version: 7.1.0.qualifier
|
||||||
Bundle-Activator: org.eclipse.cdt.make.core.MakeCorePlugin
|
Bundle-Activator: org.eclipse.cdt.make.core.MakeCorePlugin
|
||||||
Bundle-Vendor: %providerName
|
Bundle-Vendor: %providerName
|
||||||
Bundle-Localization: plugin
|
Bundle-Localization: plugin
|
||||||
|
|
|
@ -36,6 +36,7 @@ import org.eclipse.cdt.make.internal.core.MakeMessages;
|
||||||
import org.eclipse.cdt.make.internal.core.StreamMonitor;
|
import org.eclipse.cdt.make.internal.core.StreamMonitor;
|
||||||
import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerInfoConsoleParserFactory;
|
import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerInfoConsoleParserFactory;
|
||||||
import org.eclipse.cdt.utils.CommandLineUtil;
|
import org.eclipse.cdt.utils.CommandLineUtil;
|
||||||
|
import org.eclipse.cdt.utils.EFSExtensionManager;
|
||||||
import org.eclipse.core.resources.IMarker;
|
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;
|
||||||
|
@ -51,6 +52,7 @@ 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.Path;
|
||||||
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;
|
||||||
|
@ -162,8 +164,13 @@ public class MakeBuilder extends ACBuilder {
|
||||||
// remove all markers for this project
|
// remove all markers for this project
|
||||||
removeAllMarkers(currProject);
|
removeAllMarkers(currProject);
|
||||||
|
|
||||||
IPath workingDirectory = MakeBuilderUtil.getBuildDirectory(currProject, info);
|
|
||||||
URI workingDirectoryURI = MakeBuilderUtil.getBuildDirectoryURI(currProject, info);
|
URI workingDirectoryURI = MakeBuilderUtil.getBuildDirectoryURI(currProject, info);
|
||||||
|
final String pathFromURI = EFSExtensionManager.getDefault().getPathFromURI(workingDirectoryURI);
|
||||||
|
if(pathFromURI == null) {
|
||||||
|
throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, MakeMessages.getString("MakeBuilder.ErrorWorkingDirectory"), null)); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
IPath workingDirectory = new Path(pathFromURI);
|
||||||
|
|
||||||
String[] targets = getTargets(kind, info);
|
String[] targets = getTargets(kind, info);
|
||||||
if (targets.length != 0 && targets[targets.length - 1].equals(info.getCleanBuildTarget()))
|
if (targets.length != 0 && targets[targets.length - 1].equals(info.getCleanBuildTarget()))
|
||||||
|
|
|
@ -67,4 +67,29 @@ public class MakeBuilderUtil {
|
||||||
}
|
}
|
||||||
return project.getLocationURI();
|
return project.getLocationURI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param builderID
|
||||||
|
* @return URI of the build directory, or the Project's URI if one couldn't be found
|
||||||
|
* @since 7.1
|
||||||
|
*/
|
||||||
|
public static URI getBuildDirectoryURI(IProject project, String builderID) {
|
||||||
|
IMakeBuilderInfo info;
|
||||||
|
try {
|
||||||
|
info = MakeCorePlugin.createBuildInfo(project, builderID);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
return project.getLocationURI();
|
||||||
|
}
|
||||||
|
|
||||||
|
IPath buildDirectory = info.getBuildLocation();
|
||||||
|
if (!buildDirectory.isEmpty()) {
|
||||||
|
IResource res = project.getParent().findMember(buildDirectory);
|
||||||
|
if (res instanceof IContainer && res.exists()) {
|
||||||
|
return res.getLocationURI();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return project.getLocationURI();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ MakeBuilder.Invoking_Make_Builder=Invoking Make Builder...
|
||||||
MakeBuilder.Invoking_Command=Invoking Command:
|
MakeBuilder.Invoking_Command=Invoking Command:
|
||||||
MakeBuilder.Updating_project=Updating project...
|
MakeBuilder.Updating_project=Updating project...
|
||||||
MakeBuilder.Creating_Markers=Generating markers...
|
MakeBuilder.Creating_Markers=Generating markers...
|
||||||
|
MakeBuilder.ErrorWorkingDirectory=Error determining working directory.
|
||||||
|
|
||||||
BuildInfoFactory.Missing_Builder=Missing Builder:
|
BuildInfoFactory.Missing_Builder=Missing Builder:
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ package org.eclipse.cdt.make.internal.core.scannerconfig2;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
import java.net.URI;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
@ -35,6 +36,7 @@ import org.eclipse.cdt.make.internal.core.StreamMonitor;
|
||||||
import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerConfigUtil;
|
import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerConfigUtil;
|
||||||
import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerInfoConsoleParserFactory;
|
import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerInfoConsoleParserFactory;
|
||||||
import org.eclipse.cdt.make.internal.core.scannerconfig.util.TraceUtil;
|
import org.eclipse.cdt.make.internal.core.scannerconfig.util.TraceUtil;
|
||||||
|
import org.eclipse.cdt.utils.EFSExtensionManager;
|
||||||
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.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
@ -175,7 +177,17 @@ public class DefaultRunSIProvider implements IExternalScannerInfoProvider {
|
||||||
|
|
||||||
IProject currProject = resource.getProject();
|
IProject currProject = resource.getProject();
|
||||||
//fWorkingDirectory = resource.getProject().getLocation();
|
//fWorkingDirectory = resource.getProject().getLocation();
|
||||||
fWorkingDirectory = MakeBuilderUtil.getBuildDirectory(currProject, MakeBuilder.BUILDER_ID);
|
URI workingDirURI = MakeBuilderUtil.getBuildDirectoryURI(currProject, MakeBuilder.BUILDER_ID);
|
||||||
|
String pathString = EFSExtensionManager.getDefault().getPathFromURI(workingDirURI);
|
||||||
|
if(pathString != null) {
|
||||||
|
fWorkingDirectory = new Path(pathString);
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
// blow up
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
|
||||||
fCompileCommand = new Path(buildInfo.getProviderRunCommand(providerId));
|
fCompileCommand = new Path(buildInfo.getProviderRunCommand(providerId));
|
||||||
fCompileArguments = ScannerConfigUtil.tokenizeStringWithQuotes(buildInfo.getProviderRunArguments(providerId), "\"");//$NON-NLS-1$
|
fCompileArguments = ScannerConfigUtil.tokenizeStringWithQuotes(buildInfo.getProviderRunArguments(providerId), "\"");//$NON-NLS-1$
|
||||||
return (fCompileCommand != null);
|
return (fCompileCommand != null);
|
||||||
|
|
|
@ -44,6 +44,7 @@ import org.eclipse.cdt.managedbuilder.macros.BuildMacroException;
|
||||||
import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider;
|
import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider;
|
||||||
import org.eclipse.cdt.newmake.internal.core.StreamMonitor;
|
import org.eclipse.cdt.newmake.internal.core.StreamMonitor;
|
||||||
import org.eclipse.cdt.utils.CommandLineUtil;
|
import org.eclipse.cdt.utils.CommandLineUtil;
|
||||||
|
import org.eclipse.cdt.utils.EFSExtensionManager;
|
||||||
import org.eclipse.cdt.utils.PathUtil;
|
import org.eclipse.cdt.utils.PathUtil;
|
||||||
import org.eclipse.core.resources.IMarker;
|
import org.eclipse.core.resources.IMarker;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
@ -55,6 +56,7 @@ 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.Path;
|
||||||
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;
|
||||||
|
@ -128,8 +130,13 @@ public class ExternalBuildRunner implements IBuildRunner {
|
||||||
if (markers != null)
|
if (markers != null)
|
||||||
workspace.deleteMarkers(markers);
|
workspace.deleteMarkers(markers);
|
||||||
|
|
||||||
IPath workingDirectory = ManagedBuildManager.getBuildLocation(configuration, builder);
|
|
||||||
URI workingDirectoryURI = ManagedBuildManager.getBuildLocationURI(configuration, builder);
|
URI workingDirectoryURI = ManagedBuildManager.getBuildLocationURI(configuration, builder);
|
||||||
|
final String pathFromURI = EFSExtensionManager.getDefault().getPathFromURI(workingDirectoryURI);
|
||||||
|
if(pathFromURI == null) {
|
||||||
|
throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, ManagedMakeMessages.getString("ManagedMakeBuilder.message.error"), null)); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
IPath workingDirectory = new Path(pathFromURI);
|
||||||
|
|
||||||
String[] targets = getTargets(kind, builder);
|
String[] targets = getTargets(kind, builder);
|
||||||
if (targets.length != 0 && targets[targets.length - 1].equals(builder.getCleanBuildTarget()))
|
if (targets.length != 0 && targets[targets.length - 1].equals(builder.getCleanBuildTarget()))
|
||||||
|
|
|
@ -39,6 +39,7 @@ import org.eclipse.cdt.managedbuilder.core.IBuilder;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
|
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
|
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
|
||||||
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
|
||||||
import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;
|
import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;
|
||||||
import org.eclipse.cdt.managedbuilder.internal.buildmodel.DescriptionBuilder;
|
import org.eclipse.cdt.managedbuilder.internal.buildmodel.DescriptionBuilder;
|
||||||
import org.eclipse.cdt.managedbuilder.internal.buildmodel.IBuildModelBuilder;
|
import org.eclipse.cdt.managedbuilder.internal.buildmodel.IBuildModelBuilder;
|
||||||
|
@ -47,6 +48,7 @@ import org.eclipse.cdt.managedbuilder.internal.buildmodel.StepBuilder;
|
||||||
import org.eclipse.cdt.managedbuilder.macros.BuildMacroException;
|
import org.eclipse.cdt.managedbuilder.macros.BuildMacroException;
|
||||||
import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider;
|
import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider;
|
||||||
import org.eclipse.cdt.managedbuilder.makegen.IManagedBuilderMakefileGenerator;
|
import org.eclipse.cdt.managedbuilder.makegen.IManagedBuilderMakefileGenerator;
|
||||||
|
import org.eclipse.cdt.utils.EFSExtensionManager;
|
||||||
import org.eclipse.core.resources.IContainer;
|
import org.eclipse.core.resources.IContainer;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IMarker;
|
import org.eclipse.core.resources.IMarker;
|
||||||
|
@ -65,6 +67,7 @@ import org.eclipse.core.runtime.MultiStatus;
|
||||||
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.Path;
|
import org.eclipse.core.runtime.Path;
|
||||||
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.core.runtime.SubProgressMonitor;
|
import org.eclipse.core.runtime.SubProgressMonitor;
|
||||||
import org.eclipse.core.runtime.URIUtil;
|
import org.eclipse.core.runtime.URIUtil;
|
||||||
|
|
||||||
|
@ -868,8 +871,13 @@ public class GeneratedMakefileBuilder extends ACBuilder {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Figure out the working directory for the build and make sure there is a makefile there
|
// Figure out the working directory for the build and make sure there is a makefile there
|
||||||
IPath workingDirectory = getWorkingDirectory().append(buildDir);
|
final URI workingDirectoryURI = getProject().getFolder(buildDir).getLocationURI();
|
||||||
final URI workingDirectoryURI = URIUtil.append(getProject().getLocationURI(), buildDir.toOSString());
|
final String pathFromURI = EFSExtensionManager.getDefault().getPathFromURI(workingDirectoryURI);
|
||||||
|
if(pathFromURI == null) {
|
||||||
|
throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.PLUGIN_ID, ManagedMakeMessages.getString("ManagedMakeBuilder.message.error"), null)); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
IPath workingDirectory = new Path(pathFromURI);
|
||||||
|
|
||||||
IWorkspace workspace = currentProject.getWorkspace();
|
IWorkspace workspace = currentProject.getWorkspace();
|
||||||
if (workspace == null) {
|
if (workspace == null) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue