diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/plugin.xml b/build/org.eclipse.cdt.managedbuilder.core.tests/plugin.xml index 367cbc258d3..f7a4af5e633 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/plugin.xml +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/plugin.xml @@ -1213,7 +1213,7 @@ + + + + + + + - + - Specifies a class that implements the <code>IManagedScannerInfoCollector</code> for gathering the built-in compiler settings for a toolchain. + Specifies an id of scanner configuration discovery profile for gathering the built-in compiler settings for a toolchain. - - - diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolChain.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolChain.java index 20887343228..a27424ea3a5 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolChain.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolChain.java @@ -10,7 +10,6 @@ **********************************************************************/ package org.eclipse.cdt.managedbuilder.core; -import org.eclipse.core.runtime.IConfigurationElement; /** * This class represents a tool-integrator-defined, ordered set of tools @@ -34,7 +33,7 @@ public interface IToolChain extends IBuildObject { public static final String ARCH_LIST = "archList"; //$NON-NLS-1$ public static final String ERROR_PARSERS = "errorParsers"; //$NON-NLS-1$ // The attribute name for the scanner info collector - public static final String SCANNER_INFO_ID = "scannerInfoCollector"; //$NON-NLS-1$ + public static final String SCANNER_CONFIG_PROFILE_ID = "scannerConfigDiscoveryProfileId"; //$NON-NLS-1$ /** * Returns the configuration that is the parent of this tool-chain. @@ -212,18 +211,18 @@ public interface IToolChain extends IBuildObject { public void setErrorParserIds(String ids); /** - * Returns the plugin.xml element of the scannerInfoCollector extension or null if none. + * Returns the scanner config discovery profile id or null if none. * - * @return IConfigurationElement + * @return String */ - public IConfigurationElement getScannerInfoCollectorElement(); + public String getScannerConfigDiscoveryProfileId(); /** - * Sets the ScannerInfoCollector plugin.xml element + * Sets the scanner config discovery profile id. * - * @param element + * @param profileId */ - public void setScannerInfoCollectorElement(IConfigurationElement element); + public void setScannerConfigDiscoveryProfileId(String profileId); /** * Returns true if this tool-chain has changes that need to diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java index 524cdac680b..ce98f480fb9 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java @@ -60,7 +60,6 @@ import org.eclipse.cdt.managedbuilder.internal.core.ToolChain; import org.eclipse.cdt.managedbuilder.makegen.IManagedBuilderMakefileGenerator; import org.eclipse.cdt.managedbuilder.makegen.gnu.GnuMakefileGenerator; import org.eclipse.cdt.managedbuilder.projectconverter.UpdateManagedProjectManager; -import org.eclipse.cdt.managedbuilder.scannerconfig.IManagedScannerInfoCollector; import org.eclipse.core.internal.resources.ResourceException; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; @@ -560,30 +559,19 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI return ManagedCommandLineGenerator.getCommandLineGenerator(); } - /** - * Targets may have a scanner collector defined that knows how to discover - * built-in compiler defines and includes search paths. Find the scanner - * collector implementation for the target specified. - * - * @param string the unique id of the target to search for - * @return an implementation of IManagedScannerInfoCollector - */ - public static IManagedScannerInfoCollector getScannerInfoCollector(IConfiguration config) { - try { - IToolChain toolChain = config.getToolChain(); - IConfigurationElement element = toolChain.getScannerInfoCollectorElement(); - if (element != null) { - if (element.getAttribute(IToolChain.SCANNER_INFO_ID) != null) { - return (IManagedScannerInfoCollector) element.createExecutableExtension(IToolChain.SCANNER_INFO_ID); - } - } - } - catch (CoreException e) { - // Probably not defined - } - return null; - } - + /** + * Targets may have a scanner config discovery profile defined that knows + * how to discover built-in compiler defines and includes search paths. + * Find the profile for the target specified. + * + * @param string the unique id of the target to search for + * @return scanner configuration discovery profile id + */ + public static String getScannerInfoProfileId(IConfiguration config) { + IToolChain toolChain = config.getToolChain(); + return toolChain.getScannerConfigDiscoveryProfileId(); + } + /** * Gets the currently selected target. This is used while the project * property pages are displayed diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java index d4411683f7c..60ab3ef96c4 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java @@ -19,18 +19,19 @@ import java.util.StringTokenizer; import java.util.Vector; import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.managedbuilder.core.IConfigurationV2; +import org.eclipse.cdt.managedbuilder.core.IBuilder; import org.eclipse.cdt.managedbuilder.core.IConfiguration; +import org.eclipse.cdt.managedbuilder.core.IConfigurationV2; import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo; import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement; -import org.eclipse.cdt.managedbuilder.core.ITarget; -import org.eclipse.cdt.managedbuilder.core.ITool; -import org.eclipse.cdt.managedbuilder.core.IToolReference; -import org.eclipse.cdt.managedbuilder.core.IToolChain; -import org.eclipse.cdt.managedbuilder.core.ITargetPlatform; -import org.eclipse.cdt.managedbuilder.core.IBuilder; import org.eclipse.cdt.managedbuilder.core.IOption; +import org.eclipse.cdt.managedbuilder.core.ITarget; +import org.eclipse.cdt.managedbuilder.core.ITargetPlatform; +import org.eclipse.cdt.managedbuilder.core.ITool; +import org.eclipse.cdt.managedbuilder.core.IToolChain; +import org.eclipse.cdt.managedbuilder.core.IToolReference; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; +import org.eclipse.cdt.managedbuilder.internal.scannerconfig.ManagedBuildCPathEntryContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.Platform; import org.w3c.dom.Document; @@ -1009,10 +1010,10 @@ public class Target extends BuildObject implements ITarget { toolChain.setIsAbstract(isAbstract); toolChain.setOSList(getTargetOSList()); toolChain.setArchList(getTargetArchList()); - IManagedConfigElement element = ManagedBuildManager.getConfigElement(this); - if (element instanceof DefaultManagedConfigElement) { - toolChain.setScannerInfoCollectorElement(((DefaultManagedConfigElement)element).getConfigurationElement()); - } + // In target element had a scannerInfoCollector element here which + // is now replaced with scanner config discovery profile id. + // Using the default per project profile for managed make + toolChain.setScannerConfigDiscoveryProfileId(ManagedBuildCPathEntryContainer.MM_PP_DISCOVERY_PROFILE_ID); // Create the Builder subId = id + ".builder"; //$NON-NLS-1$ subName = name + ".builder"; //$NON-NLS-1$ @@ -1021,6 +1022,7 @@ public class Target extends BuildObject implements ITarget { builder.setIsAbstract(isAbstract); builder.setCommand(getMakeCommand()); builder.setArguments(getMakeArguments()); + IManagedConfigElement element = ManagedBuildManager.getConfigElement(this); if (element instanceof DefaultManagedConfigElement) { builder.setBuildFileGeneratorElement(((DefaultManagedConfigElement)element).getConfigurationElement()); } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java index e689e3a9293..bbc41391070 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java @@ -18,15 +18,14 @@ import java.util.Map; import java.util.StringTokenizer; import org.eclipse.cdt.managedbuilder.core.IBuildObject; -import org.eclipse.cdt.managedbuilder.core.IProjectType; -import org.eclipse.cdt.managedbuilder.core.IConfiguration; -import org.eclipse.cdt.managedbuilder.core.IToolChain; -import org.eclipse.cdt.managedbuilder.core.ITool; -import org.eclipse.cdt.managedbuilder.core.ITargetPlatform; import org.eclipse.cdt.managedbuilder.core.IBuilder; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement; +import org.eclipse.cdt.managedbuilder.core.IProjectType; +import org.eclipse.cdt.managedbuilder.core.ITargetPlatform; +import org.eclipse.cdt.managedbuilder.core.ITool; +import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; -import org.eclipse.core.runtime.IConfigurationElement; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -51,7 +50,7 @@ public class ToolChain extends BuildObject implements IToolChain { private List osList; private List archList; private Boolean isAbstract; - private IConfigurationElement scannerInfoCollectorElement; + private String scannerConfigDiscoveryProfileId; // Miscellaneous private boolean isExtensionToolChain = false; private boolean isDirty = false; @@ -206,7 +205,9 @@ public class ToolChain extends BuildObject implements IToolChain { if (toolChain.isAbstract != null) { isAbstract = new Boolean(toolChain.isAbstract.booleanValue()); } - scannerInfoCollectorElement = toolChain.scannerInfoCollectorElement; + if (toolChain.scannerConfigDiscoveryProfileId != null) { + scannerConfigDiscoveryProfileId = new String(toolChain.scannerConfigDiscoveryProfileId); + } // Clone the children if (toolChain.builder != null) { @@ -291,12 +292,9 @@ public class ToolChain extends BuildObject implements IToolChain { // Get the semicolon separated list of IDs of the error parsers errorParserIds = element.getAttribute(ERROR_PARSERS); - // Store the configuration element IFF there is a scanner info collector defined - String scannerInfoCollector = element.getAttribute(SCANNER_INFO_ID); - if (scannerInfoCollector != null && element instanceof DefaultManagedConfigElement) { - scannerInfoCollectorElement = ((DefaultManagedConfigElement)element).getConfigurationElement(); - } - + // Get the scanner config discovery profile id + scannerConfigDiscoveryProfileId = element.getAttribute(SCANNER_CONFIG_PROFILE_ID); + // Get the comma-separated list of valid OS String os = element.getAttribute(OS_LIST); if (os != null) { @@ -361,6 +359,11 @@ public class ToolChain extends BuildObject implements IToolChain { errorParserIds = element.getAttribute(ERROR_PARSERS); } + // Get the scanner config discovery profile id + if (element.hasAttribute(SCANNER_CONFIG_PROFILE_ID)) { + scannerConfigDiscoveryProfileId = element.getAttribute(SCANNER_CONFIG_PROFILE_ID); + } + // Get the comma-separated list of valid OS if (element.hasAttribute(OS_LIST)) { String os = element.getAttribute(OS_LIST); @@ -413,6 +416,10 @@ public class ToolChain extends BuildObject implements IToolChain { if (errorParserIds != null) { element.setAttribute(ERROR_PARSERS, errorParserIds); } + + if (scannerConfigDiscoveryProfileId != null) { + element.setAttribute(SCANNER_CONFIG_PROFILE_ID, scannerConfigDiscoveryProfileId); + } if (osList != null) { Iterator osIter = osList.listIterator(); @@ -840,25 +847,29 @@ public class ToolChain extends BuildObject implements IToolChain { setDirty(true); } - /* (non-Javadoc) - * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getScannerInfoCollectorElement() - */ - public IConfigurationElement getScannerInfoCollectorElement() { - if (scannerInfoCollectorElement == null) { - if (superClass != null) { - return superClass.getScannerInfoCollectorElement(); - } - } - return scannerInfoCollectorElement; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setScannerInfoCollectorElement(IConfigurationElement) - */ - public void setScannerInfoCollectorElement(IConfigurationElement element) { - scannerInfoCollectorElement = element; - setDirty(true); - } + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getScannerConfigDiscoveryProfileId() + */ + public String getScannerConfigDiscoveryProfileId() { + if (scannerConfigDiscoveryProfileId == null) { + if (superClass != null) { + return superClass.getScannerConfigDiscoveryProfileId(); + } + } + return scannerConfigDiscoveryProfileId; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setScannerConfigDiscoveryProfileId(java.lang.String) + */ + public void setScannerConfigDiscoveryProfileId(String profileId) { + if (scannerConfigDiscoveryProfileId == null && profileId == null) return; + if (scannerConfigDiscoveryProfileId == null || + !scannerConfigDiscoveryProfileId.equals(profileId)) { + scannerConfigDiscoveryProfileId = profileId; + setDirty(true); + } + } /* * O B J E C T S T A T E M A I N T E N A N C E @@ -962,4 +973,5 @@ public class ToolChain extends BuildObject implements IToolChain { } } } + } 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 a3abd1c5210..d6ba34150e3 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 @@ -56,7 +56,7 @@ import org.eclipse.core.runtime.Platform; */ public class ManagedBuildCPathEntryContainer implements IPathEntryContainer { // Managed make per project scanner configuration discovery profile - private static final String MM_PP_DISCOVERY_PROFILE_ID = ManagedBuilderCorePlugin.getUniqueIdentifier() + ".GCCManagedMakePerProjectProfile"; //$NON-NLS-1$ + public static final String MM_PP_DISCOVERY_PROFILE_ID = ManagedBuilderCorePlugin.getUniqueIdentifier() + ".GCCManagedMakePerProjectProfile"; //$NON-NLS-1$ private static final String SPECS_FILE_PROVIDER = "specsFile"; //$NON-NLS-1$ private static final String BUILDER_ID = MakeCorePlugin.getUniqueIdentifier() + ".ScannerConfigBuilder"; //$NON-NLS-1$ @@ -175,7 +175,7 @@ public class ManagedBuildCPathEntryContainer implements IPathEntryContainer { final IScannerConfigBuilderInfo2 buildInfo = ScannerConfigProfileManager. createScannerConfigBuildInfo2(MakeCorePlugin.getDefault().getPluginPreferences(), - MM_PP_DISCOVERY_PROFILE_ID, false); + profileInstance.getProfile().getId(), false); final IExternalScannerInfoProvider esiProvider = profileInstance.createExternalScannerInfoProvider(SPECS_FILE_PROVIDER); // Set the arguments for the provider @@ -210,10 +210,17 @@ public class ManagedBuildCPathEntryContainer implements IPathEntryContainer { ManagedBuildCPathEntryContainer.outputError(project.getName(), "Build information has not been loaded yet"); //$NON-NLS-1$ return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]); } - + // get the associated scanner config discovery profile id + String scdProfileId = ManagedBuildManager.getScannerInfoProfileId(defaultConfig); + if (scdProfileId == null) { + // scanner config profile not defined + ManagedBuildCPathEntryContainer.outputError(project.getName(), "Scanner config discovery profile not specified for the configuration"); //$NON-NLS-1$ + return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]); + } + // See if we can load a dynamic resolver SCProfileInstance profileInstance = ScannerConfigProfileManager.getInstance(). - getSCProfileInstance(project, MM_PP_DISCOVERY_PROFILE_ID); + getSCProfileInstance(project, scdProfileId); IScannerInfoCollector collector = profileInstance.createScannerInfoCollector(); synchronized(this) { diff --git a/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml b/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml index 76226e95e5c..85e82d214f0 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml +++ b/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml @@ -1210,11 +1210,11 @@ cleanCommand="rm -rf" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser"> + archList="all" + osList="solaris,linux,hpux,aix,qnx" + name="%ToolChainName.Dbg" + scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile" + id="cdt.managedbuild.toolchain.gnu.exe.debug"> + archList="all" + osList="solaris,linux,hpux,aix,qnx" + name="%ToolChainName.Rel" + scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile" + id="cdt.managedbuild.toolchain.gnu.exe.release"> + archList="all" + osList="solaris,linux,hpux,aix,qnx" + name="%ToolChainName.Dbg" + scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile" + id="cdt.managedbuild.toolchain.gnu.so.debug"> + archList="all" + osList="solaris,linux,hpux,aix,qnx" + name="%ToolChainName.Rel" + scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile" + id="cdt.managedbuild.toolchain.gnu.so.release"> + archList="all" + osList="solaris,linux,hpux,aix,qnx" + name="%ToolChainName.Dbg" + scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile" + id="cdt.managedbuild.toolchain.gnu.lib.debug"> + archList="all" + osList="solaris,linux,hpux,aix,qnx" + name="%ToolChainName.Rel" + scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile" + id="cdt.managedbuild.toolchain.gnu.lib.release"> - + - + + archList="all" + osList="win32" + name="%ToolChainName.Dbg" + scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile" + id="cdt.managedbuild.toolchain.gnu.cygwin.so.debug"> + archList="all" + osList="win32" + name="%ToolChainName.Rel" + scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile" + id="cdt.managedbuild.toolchain.gnu.cygwin.so.release"> - + + archList="all" + osList="win32" + name="%ToolChainName.Rel" + scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile" + id="cdt.managedbuild.toolchain.gnu.cygwin.lib.release"> - + - + - + - + - + - +