diff options
author | Doug Schaefer | 2016-05-25 15:21:22 +0000 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org | 2016-06-14 01:23:10 +0000 |
commit | 5d2cbaaa1c59b45ad44e486d2f876dd8100b1045 (patch) | |
tree | fb2d369ac9d24a2e3fe6b04f9dcc1e95add46a71 /core | |
parent | de37ec61db93ec9c55cd3102ef2f2bb8d2f854c9 (diff) | |
download | org.eclipse.cdt-5d2cbaaa1c59b45ad44e486d2f876dd8100b1045.tar.gz org.eclipse.cdt-5d2cbaaa1c59b45ad44e486d2f876dd8100b1045.tar.xz org.eclipse.cdt-5d2cbaaa1c59b45ad44e486d2f876dd8100b1045.zip |
Cherry picking changes from the CDT 9 branch for Qt and Arduino.
Change-Id: I85eca2b8bb0447d4dd703030c41d90c1f9bcdf89
Diffstat (limited to 'core')
9 files changed, 102 insertions, 65 deletions
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java index b9e110c6499..e3c90e9cfa4 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java @@ -611,11 +611,9 @@ public class CModelManager implements IResourceChangeListener, IContentTypeChang // Check for new style build configs first Set<String> parserIds = new HashSet<>(); for (IBuildConfiguration config : project.getBuildConfigs()) { - if (!IBuildConfiguration.DEFAULT_CONFIG_NAME.equals(config.getName())) { - ICBuildConfiguration cconfig = config.getAdapter(ICBuildConfiguration.class); - if (cconfig != null) { - parserIds.add(cconfig.getBinaryParserId()); - } + ICBuildConfiguration cconfig = config.getAdapter(ICBuildConfiguration.class); + if (cconfig != null) { + parserIds.add(cconfig.getBinaryParserId()); } } if (!parserIds.isEmpty()) { diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java index 1078303db97..5bde7057c72 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java @@ -1147,10 +1147,7 @@ public class CCorePlugin extends Plugin { // If we are new style build configurations, get the provider there IBuildConfiguration activeConfig = project.getActiveBuildConfig(); - ICBuildConfiguration cconfig = buildConfigManager.getBuildConfiguration(activeConfig); - if (cconfig == null) { - cconfig = buildConfigManager.getDefaultBuildConfiguration(project); - } + ICBuildConfiguration cconfig = activeConfig.getAdapter(ICBuildConfiguration.class); if (cconfig != null) { return cconfig; } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java index e4b644edd3a..a8b89aa6112 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java @@ -101,8 +101,8 @@ public abstract class CBuildConfiguration extends PlatformObject toolChain = tc; } - - public CBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) { + + protected CBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) { this.config = config; this.name = name; this.toolChain = toolChain; @@ -118,6 +118,10 @@ public abstract class CBuildConfiguration extends PlatformObject } } + protected CBuildConfiguration(IBuildConfiguration config, IToolChain toolChain) { + this(config, DEFAULT_NAME, toolChain); + } + @Override public IBuildConfiguration getBuildConfiguration() { return config; diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfiguration.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfiguration.java index 2b4c46e4097..59b8a8731f0 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfiguration.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfiguration.java @@ -29,6 +29,12 @@ import org.eclipse.core.runtime.IProgressMonitor; public interface ICBuildConfiguration extends IAdaptable, IScannerInfoProvider { /** + * CDT doesn't like that the Platform default config name is an empty string. + * It needs a real name for the name of the build directory, for example. + */ + public static String DEFAULT_NAME = "default"; + + /** * Returns the resources build configuration that this CDT build * configuration is associated with. * diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationManager.java index b2f1cefffba..b0f5d1d5f52 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationManager.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationManager.java @@ -20,6 +20,12 @@ import org.eclipse.core.runtime.IProgressMonitor; */
public interface ICBuildConfigurationManager {
+ /**
+ * Return the build configuration provider with the given id.
+ *
+ * @param id
+ * @return build configuration provider
+ */
ICBuildConfigurationProvider getProvider(String id);
/**
@@ -35,8 +41,6 @@ public interface ICBuildConfigurationManager { IBuildConfiguration createBuildConfiguration(ICBuildConfigurationProvider provider, IProject project,
String configName, IProgressMonitor monitor) throws CoreException;
- IBuildConfiguration getBuildConfiguration(ICBuildConfigurationProvider provider, IProject project, String configName) throws CoreException;
-
/**
* Called by providers to add new build configurations as they are created.
*
@@ -56,6 +60,4 @@ public interface ICBuildConfigurationManager { */
ICBuildConfiguration getBuildConfiguration(IBuildConfiguration buildConfig) throws CoreException;
- ICBuildConfiguration getDefaultBuildConfiguration(IProject project) throws CoreException;
-
}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationProvider.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationProvider.java index 7885bf0a559..40bf781ee0e 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationProvider.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationProvider.java @@ -8,7 +8,6 @@ package org.eclipse.cdt.core.build; import org.eclipse.core.resources.IBuildConfiguration; -import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; /** @@ -33,12 +32,4 @@ public interface ICBuildConfigurationProvider { */ ICBuildConfiguration getCBuildConfiguration(IBuildConfiguration config, String name) throws CoreException; - /** - * Returns a default C build configuration for a given project if any. - * - * @param project - * @return default C build configuration for the project - */ - ICBuildConfiguration getDefaultCBuildConfiguration(IProject project) throws CoreException; - } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/IToolChain.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/IToolChain.java index 2d341e28866..66dee546127 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/IToolChain.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/IToolChain.java @@ -27,11 +27,12 @@ public interface IToolChain extends IAdaptable { // Standard attributes
static final String ATTR_OS = "os"; //$NON-NLS-1$
static final String ATTR_ARCH = "arch"; //$NON-NLS-1$
+ static final String ATTR_PACKAGE = "package"; //$NON-NLS-1$
IToolChainProvider getProvider();
String getId();
-
+
String getVersion();
String getName();
@@ -47,6 +48,8 @@ public interface IToolChain extends IAdaptable { */
String getProperty(String key);
+ void setProperty(String key, String value);
+
IEnvironmentVariable getVariable(String name);
IEnvironmentVariable[] getVariables();
@@ -63,5 +66,5 @@ public interface IToolChain extends IAdaptable { IResource[] getResourcesFromCommand(String[] command, URI buildDirectoryURI);
String getBinaryParserId();
-
+
}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildConfigurationManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildConfigurationManager.java index 065afe9caa1..84991efc3aa 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildConfigurationManager.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildConfigurationManager.java @@ -72,16 +72,19 @@ public class CBuildConfigurationManager implements ICBuildConfigurationManager, public boolean supports(IProject project) {
try {
- return project.hasNature(natureId);
+ if (natureId != null) {
+ return project.hasNature(natureId);
+ }
} catch (CoreException e) {
CCorePlugin.log(e.getStatus());
- return false;
}
+ return false;
}
}
private Map<String, Provider> providers;
private Map<IBuildConfiguration, ICBuildConfiguration> configs = new HashMap<>();
+ private Set<IBuildConfiguration> noConfigs = new HashSet<>();
public CBuildConfigurationManager() {
ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
@@ -105,13 +108,33 @@ public class CBuildConfigurationManager implements ICBuildConfigurationManager, }
private Provider getProviderDelegate(String id) {
- initProviders();
return providers.get(id);
}
@Override
public ICBuildConfigurationProvider getProvider(String id) {
- return getProviderDelegate(id).getProvider();
+ initProviders();
+ Provider provider = providers.get(id);
+ return provider != null ? provider.getProvider() : null;
+ }
+
+ public ICBuildConfigurationProvider getProvider(String id, IProject project) {
+ initProviders();
+ Provider provider = getProviderDelegate(id);
+ if (provider != null && provider.supports(project)) {
+ return provider.getProvider();
+ }
+ return null;
+ }
+
+ public ICBuildConfigurationProvider getProvider(IProject project) throws CoreException {
+ initProviders();
+ for (Provider provider : providers.values()) {
+ if (provider.supports(project)) {
+ return provider.getProvider();
+ }
+ }
+ return null;
}
@Override
@@ -143,47 +166,51 @@ public class CBuildConfigurationManager implements ICBuildConfigurationManager, public ICBuildConfiguration getBuildConfiguration(IBuildConfiguration buildConfig) throws CoreException {
initProviders();
synchronized (configs) {
- ICBuildConfiguration config = configs.get(buildConfig);
- if (config == null) {
- String[] segments = buildConfig.getName().split("/"); //$NON-NLS-1$
- if (segments.length == 2) {
- String providerId = segments[0];
- String configName = segments[1];
-
- Provider provider = getProviderDelegate(providerId);
- if (provider != null && provider.supports(buildConfig.getProject())) {
- config = provider.getProvider().getCBuildConfiguration(buildConfig, configName);
- configs.put(buildConfig, config);
-
- // Also make sure we reset the binary parser cache for the new config
- CModelManager.getDefault().resetBinaryParser(buildConfig.getProject());
+ if (noConfigs.contains(buildConfig)) {
+ return null;
+ } else {
+ ICBuildConfiguration config = configs.get(buildConfig);
+ if (config != null) {
+ return config;
+ } else {
+ String configName;
+ ICBuildConfigurationProvider provider;
+ if (IBuildConfiguration.DEFAULT_CONFIG_NAME.equals(buildConfig.getName())) {
+ configName = ICBuildConfiguration.DEFAULT_NAME;
+ provider = getProvider(buildConfig.getProject());
+ } else {
+ String[] segments = buildConfig.getName().split("/"); //$NON-NLS-1$
+ if (segments.length == 2) {
+ String providerId = segments[0];
+ configName = segments[1];
+ Provider delegate = getProviderDelegate(providerId);
+ if (delegate != null && delegate.supports(buildConfig.getProject())) {
+ provider = delegate.getProvider();
+ } else {
+ return null;
+ }
+ } else {
+ // Not ours
+ return null;
+ }
}
- }
- }
- return config;
- }
- }
- @Override
- public IBuildConfiguration getBuildConfiguration(ICBuildConfigurationProvider provider, IProject project,
- String configName) throws CoreException {
- String name = provider.getId() + '/' + configName;
- return project.getBuildConfig(name);
- }
+ if (provider != null) {
+ config = provider.getCBuildConfiguration(buildConfig, configName);
+ if (config != null) {
+ configs.put(buildConfig, config);
- @Override
- public ICBuildConfiguration getDefaultBuildConfiguration(IProject project) throws CoreException {
- initProviders();
- for (Provider provider : providers.values()) {
- if (provider.supports(project)) {
- ICBuildConfiguration config = provider.getProvider().getDefaultCBuildConfiguration(project);
- if (config != null) {
- configs.put(config.getBuildConfiguration(), config);
- return config;
+ // Also make sure we reset the binary parser cache for the new config
+ CModelManager.getDefault().resetBinaryParser(buildConfig.getProject());
+ return config;
+ }
+ }
+
+ noConfigs.add(buildConfig);
+ return null;
}
}
}
- return null;
}
@Override
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ToolChainManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ToolChainManager.java index ed83798bccf..b6fa1aae781 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ToolChainManager.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ToolChainManager.java @@ -133,6 +133,15 @@ public class ToolChainManager implements IToolChainManager { tcs.add(toolChain); } } + + // Allow 32-bit compilers on 64-bit machines + // TODO is there a cleaner way to do this? + if ("x86_64".equals(properties.get(IToolChain.ATTR_ARCH))) { //$NON-NLS-1$ + Map<String, String> properties32 = new HashMap<>(properties); + properties32.put(IToolChain.ATTR_ARCH, "x86"); //$NON-NLS-1$ + tcs.addAll(getToolChainsMatching(properties32)); + } + return tcs; } |