Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorDoug Schaefer2016-05-25 15:21:22 +0000
committerGerrit Code Review @ Eclipse.org2016-06-14 01:23:10 +0000
commit5d2cbaaa1c59b45ad44e486d2f876dd8100b1045 (patch)
treefb2d369ac9d24a2e3fe6b04f9dcc1e95add46a71 /core
parentde37ec61db93ec9c55cd3102ef2f2bb8d2f854c9 (diff)
downloadorg.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.
Diffstat (limited to 'core')
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java8
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java5
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java8
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfiguration.java6
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationManager.java10
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationProvider.java9
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/IToolChain.java7
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildConfigurationManager.java105
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ToolChainManager.java9
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;
}

Back to the top