mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 22:52:11 +02:00
Bug 107952 - Added an environment parameter to the invokeProvider method of the external scanner discovery provider. The Managed Build container now fetches the env from the build settings and passes it down.
This commit is contained in:
parent
c22550e30e
commit
32981cd323
4 changed files with 50 additions and 11 deletions
|
@ -10,6 +10,8 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.make.core.scannerconfig;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
|
||||
|
@ -34,4 +36,22 @@ public interface IExternalScannerInfoProvider {
|
|||
IScannerConfigBuilderInfo2 buildInfo,
|
||||
IScannerInfoCollector collector);
|
||||
|
||||
/**
|
||||
* Alternative interface to pass down the environment.
|
||||
*
|
||||
* @param monitor
|
||||
* @param resource
|
||||
* @param providerId
|
||||
* @param buildInfo
|
||||
* @param collector
|
||||
* @param env
|
||||
* @return
|
||||
*/
|
||||
public boolean invokeProvider(IProgressMonitor monitor,
|
||||
IResource resource,
|
||||
String providerId,
|
||||
IScannerConfigBuilderInfo2 buildInfo,
|
||||
IScannerInfoCollector collector,
|
||||
Properties env);
|
||||
|
||||
}
|
||||
|
|
|
@ -62,14 +62,18 @@ public class DefaultRunSIProvider implements IExternalScannerInfoProvider {
|
|||
|
||||
private SCMarkerGenerator markerGenerator = new SCMarkerGenerator();
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.make.core.scannerconfig.IExternalScannerInfoProvider#invokeProvider(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.resources.IResource, java.lang.String, org.eclipse.cdt.make.core.scannerconfig.IScannerConfigBuilderInfo2, org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector2)
|
||||
*/
|
||||
public boolean invokeProvider(IProgressMonitor monitor, IResource resource,
|
||||
String providerId, IScannerConfigBuilderInfo2 buildInfo,
|
||||
IScannerInfoCollector collector) {
|
||||
return invokeProvider(monitor, resource, providerId, buildInfo, collector, null);
|
||||
}
|
||||
|
||||
public boolean invokeProvider(IProgressMonitor monitor,
|
||||
IResource resource,
|
||||
String providerId,
|
||||
IScannerConfigBuilderInfo2 buildInfo,
|
||||
IScannerInfoCollector collector) {
|
||||
IScannerInfoCollector collector,
|
||||
Properties env) {
|
||||
// initialize fields
|
||||
this.resource = resource;
|
||||
this.providerId = providerId;
|
||||
|
@ -115,7 +119,7 @@ public class DefaultRunSIProvider implements IExternalScannerInfoProvider {
|
|||
OutputStream consoleOut = (sniffer == null ? cos : sniffer.getOutputStream());
|
||||
OutputStream consoleErr = (sniffer == null ? cos : sniffer.getErrorStream());
|
||||
TraceUtil.outputTrace("Default provider is executing command:", fCompileCommand.toString() + ca, ""); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Process p = launcher.execute(fCompileCommand, compileArguments, setEnvironment(launcher), fWorkingDirectory);
|
||||
Process p = launcher.execute(fCompileCommand, compileArguments, setEnvironment(launcher, env), fWorkingDirectory);
|
||||
if (p != null) {
|
||||
try {
|
||||
// Close the input of the Process explicitely.
|
||||
|
@ -153,6 +157,7 @@ public class DefaultRunSIProvider implements IExternalScannerInfoProvider {
|
|||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Initialization of protected fields.
|
||||
* Subclasses are most likely to override default implementation.
|
||||
|
@ -201,9 +206,9 @@ public class DefaultRunSIProvider implements IExternalScannerInfoProvider {
|
|||
* @param launcher
|
||||
* @return
|
||||
*/
|
||||
protected String[] setEnvironment(CommandLauncher launcher) {
|
||||
protected String[] setEnvironment(CommandLauncher launcher, Properties initialEnv) {
|
||||
// Set the environmennt, some scripts may need the CWD var to be set.
|
||||
Properties props = launcher.getEnvironment();
|
||||
Properties props = initialEnv != null ? initialEnv : launcher.getEnvironment();
|
||||
props.put("CWD", fWorkingDirectory.toOSString()); //$NON-NLS-1$
|
||||
props.put("PWD", fWorkingDirectory.toOSString()); //$NON-NLS-1$
|
||||
// On POSIX (Linux, UNIX) systems reset LANG variable to English with UTF-8 encoding
|
||||
|
|
|
@ -18,6 +18,7 @@ import java.io.FileNotFoundException;
|
|||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.resources.IConsole;
|
||||
|
@ -47,9 +48,12 @@ public class DefaultSIFileReader implements IExternalScannerInfoProvider {
|
|||
|
||||
private SCMarkerGenerator markerGenerator = new SCMarkerGenerator();
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.make.core.scannerconfig.IExternalScannerInfoProvider#invokeProvider(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.resources.IResource, java.lang.String, org.eclipse.cdt.make.core.scannerconfig.IScannerConfigBuilderInfo2, org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector2)
|
||||
*/
|
||||
public boolean invokeProvider(IProgressMonitor monitor, IResource resource,
|
||||
String providerId, IScannerConfigBuilderInfo2 buildInfo,
|
||||
IScannerInfoCollector collector, Properties env) {
|
||||
return invokeProvider(monitor, resource, providerId, buildInfo, collector);
|
||||
}
|
||||
|
||||
public boolean invokeProvider(IProgressMonitor monitor,
|
||||
IResource resource,
|
||||
String providerId,
|
||||
|
|
|
@ -14,6 +14,7 @@ package org.eclipse.cdt.managedbuilder.internal.scannerconfig;
|
|||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Vector;
|
||||
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
|
@ -27,9 +28,11 @@ import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector;
|
|||
import org.eclipse.cdt.make.internal.core.scannerconfig2.SCProfileInstance;
|
||||
import org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigProfileManager;
|
||||
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
|
||||
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
|
||||
import org.eclipse.cdt.managedbuilder.core.ITarget;
|
||||
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.internal.core.ManagedBuildInfo;
|
||||
import org.eclipse.cdt.managedbuilder.scannerconfig.IManagedScannerInfoCollector;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
|
@ -144,7 +147,14 @@ public class ManagedBuildCPathEntryContainer implements IPathEntryContainer {
|
|||
ISafeRunnable runnable = new ISafeRunnable() {
|
||||
public void run() {
|
||||
IProgressMonitor monitor = new NullProgressMonitor();
|
||||
esiProvider.invokeProvider(monitor, project, providerId, buildInfo, collector);
|
||||
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
|
||||
IConfiguration config = info.getDefaultConfiguration();
|
||||
IBuildEnvironmentVariable[] vars = ManagedBuildManager.getEnvironmentVariableProvider().getVariables(config, true, true);
|
||||
Properties env = new Properties();
|
||||
if (vars != null)
|
||||
for (int i = 0; i < vars.length; ++i)
|
||||
env.put(vars[i].getName(), vars[i].getValue());
|
||||
esiProvider.invokeProvider(monitor, project, providerId, buildInfo, collector, env);
|
||||
}
|
||||
|
||||
public void handleException(Throwable exception) {
|
||||
|
|
Loading…
Add table
Reference in a new issue