From 32981cd32333c49b479047f5696ec000a8918582 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Fri, 2 Feb 2007 02:16:06 +0000 Subject: [PATCH] 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. --- .../IExternalScannerInfoProvider.java | 20 +++++++++++++++++++ .../scannerconfig2/DefaultRunSIProvider.java | 19 +++++++++++------- .../scannerconfig2/DefaultSIFileReader.java | 10 +++++++--- .../ManagedBuildCPathEntryContainer.java | 12 ++++++++++- 4 files changed, 50 insertions(+), 11 deletions(-) diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/IExternalScannerInfoProvider.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/IExternalScannerInfoProvider.java index 5d390c7361d..3569e543558 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/IExternalScannerInfoProvider.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/IExternalScannerInfoProvider.java @@ -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); + } diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java index bd948df532b..5fec278faa1 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java @@ -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 diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultSIFileReader.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultSIFileReader.java index 425726190ec..fe01f05e446 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultSIFileReader.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultSIFileReader.java @@ -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, diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java index 00d1ed78374..8c52bbbfc74 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java @@ -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) {