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 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 @@ -28,6 +28,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/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 providers; private Map configs = new HashMap<>(); + private Set 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()); - } - } - } - return config; - } - } - - @Override - public IBuildConfiguration getBuildConfiguration(ICBuildConfigurationProvider provider, IProject project, - String configName) throws CoreException { - String name = provider.getId() + '/' + configName; - return project.getBuildConfig(name); - } - - @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 (noConfigs.contains(buildConfig)) { + return null; + } else { + ICBuildConfiguration config = configs.get(buildConfig); if (config != null) { - configs.put(config.getBuildConfiguration(), config); 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; + } + } + + if (provider != null) { + config = provider.getCBuildConfiguration(buildConfig, configName); + if (config != null) { + configs.put(buildConfig, 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/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java index 571a76d10f8..5617c398be1 100644 --- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java @@ -68,19 +68,20 @@ public class QtBuildConfiguration extends CBuildConfiguration implements ICBuild qtInstall = null; } - launchMode = settings.get(LAUNCH_MODE, ""); //$NON-NLS-1$ + launchMode = settings.get(LAUNCH_MODE, null); // $NON-NLS-1$ } QtBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain, IQtInstall qtInstall, - String launchMode) - throws CoreException { + String launchMode) throws CoreException { super(config, name, toolChain); this.qtInstall = qtInstall; this.launchMode = launchMode; Preferences settings = getSettings(); settings.put(QTINSTALL_NAME, qtInstall.getQmakePath().toString()); - settings.put(LAUNCH_MODE, launchMode); + if (launchMode != null) { + settings.put(LAUNCH_MODE, launchMode); + } try { settings.flush(); } catch (BackingStoreException e) { @@ -108,16 +109,18 @@ public class QtBuildConfiguration extends CBuildConfiguration implements ICBuild } @Override - public String getQmakeConfig() { - switch (launchMode) { - case "run": //$NON-NLS-1$ - return "CONFIG+=release"; //$NON-NLS-1$ - case "debug": //$NON-NLS-1$ - return "CONFIG+=debug"; //$NON-NLS-1$ - default: - // TODO probably need an extension point for guidance - return null; + public String[] getQmakeConfig() { + if (launchMode != null) { + switch (launchMode) { + case "run": //$NON-NLS-1$ + return new String[] { "CONFIG+=release" }; //$NON-NLS-1$ + case "debug": //$NON-NLS-1$ + return new String[] { "CONFIG+=debug" }; //$NON-NLS-1$ + default: + return new String[] { "CONFIG+=launch_mode_" + launchMode }; //$NON-NLS-1$ + } } + return new String[] { "CONFIG+=debug_and_release", "CONFIG+=launch_modeall" }; //$NON-NLS-1$ //$NON-NLS-2$ } public Path getProjectFile() { @@ -160,9 +163,11 @@ public class QtBuildConfiguration extends CBuildConfiguration implements ICBuild cmd.add(getQmakeCommand().toString()); cmd.add("-E"); //$NON-NLS-1$ - String config = getQmakeConfig(); + String[] config = getQmakeConfig(); if (config != null) { - cmd.add(config); + for (String str : config) { + cmd.add(str); + } } cmd.add(getProjectFile().toString()); @@ -280,16 +285,17 @@ public class QtBuildConfiguration extends CBuildConfiguration implements ICBuild List command = new ArrayList<>(); command.add(getQmakeCommand().toString()); - String config = getQmakeConfig(); + String[] config = getQmakeConfig(); if (config != null) { - command.add(config); + for (String str : config) { + command.add(str); + } } IFile projectFile = project.getFile(project.getName() + ".pro"); //$NON-NLS-1$ command.add(projectFile.getLocation().toOSString()); - ProcessBuilder processBuilder = new ProcessBuilder(command) - .directory(getBuildDirectory().toFile()); + ProcessBuilder processBuilder = new ProcessBuilder(command).directory(getBuildDirectory().toFile()); setBuildEnvironment(processBuilder.environment()); Process process = processBuilder.start(); @@ -305,7 +311,7 @@ public class QtBuildConfiguration extends CBuildConfiguration implements ICBuild } // run make - ProcessBuilder processBuilder = new ProcessBuilder(makeCommand.toString()).directory(buildDir.toFile()); + ProcessBuilder processBuilder = new ProcessBuilder(makeCommand.toString(), "all").directory(buildDir.toFile()); setBuildEnvironment(processBuilder.environment()); Process process = processBuilder.start(); outStream.write(makeCommand.toString() + '\n'); diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationProvider.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationProvider.java index ae3c784efd2..fea1910643e 100644 --- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationProvider.java +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationProvider.java @@ -16,7 +16,6 @@ import org.eclipse.cdt.core.build.ICBuildConfigurationProvider; import org.eclipse.cdt.core.build.IToolChain; import org.eclipse.cdt.core.build.IToolChainManager; import org.eclipse.cdt.internal.qt.core.Activator; -import org.eclipse.cdt.internal.qt.core.QtNature; import org.eclipse.cdt.qt.core.IQtBuildConfiguration; import org.eclipse.cdt.qt.core.IQtInstall; import org.eclipse.cdt.qt.core.IQtInstallManager; @@ -24,7 +23,6 @@ import org.eclipse.core.resources.IBuildConfiguration; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; public class QtBuildConfigurationProvider implements ICBuildConfigurationProvider { @@ -43,63 +41,48 @@ public class QtBuildConfigurationProvider implements ICBuildConfigurationProvide @Override public ICBuildConfiguration getCBuildConfiguration(IBuildConfiguration config, String name) { try { - // Double check to make sure this config is ours - if (!config.getProject().hasNature(QtNature.ID)) { - return null; - } + if (config.getName().equals(IBuildConfiguration.DEFAULT_CONFIG_NAME)) { + // try the local target as the default + Map properties = new HashMap<>(); + properties.put(IToolChain.ATTR_OS, Platform.getOS()); + properties.put(IToolChain.ATTR_ARCH, Platform.getOSArch()); + for (IToolChain toolChain : toolChainManager.getToolChainsMatching(properties)) { + for (IQtInstall qtInstall : qtInstallManager.getInstalls()) { + if (qtInstallManager.supports(qtInstall, toolChain)) { + return new QtBuildConfiguration(config, name, toolChain, qtInstall, null); + } + } + } - return new QtBuildConfiguration(config, name); + // local didn't work, try and find one that does + for (IToolChain toolChain : toolChainManager.getToolChainsMatching(new HashMap<>())) { + for (IQtInstall qtInstall : qtInstallManager.getInstalls()) { + if (qtInstallManager.supports(qtInstall, toolChain)) { + return new QtBuildConfiguration(config, name, toolChain, qtInstall, null); + } + } + } + + // No valid combinations + return null; + } else { + return new QtBuildConfiguration(config, name); + } } catch (CoreException e) { - // Failed to create the build config. Return null so it gets recreated. + // Failed to create the build config. Return null so it gets + // recreated. Activator.log(e); return null; } } - @Override - public ICBuildConfiguration getDefaultCBuildConfiguration(IProject project) { - try { - if (!project.hasNature(QtNature.ID)) { - return null; - } - - // try the local target as the default - Map properties = new HashMap<>(); - properties.put(IToolChain.ATTR_OS, Platform.getOS()); - properties.put(IToolChain.ATTR_ARCH, Platform.getOSArch()); - for (IToolChain toolChain : toolChainManager.getToolChainsMatching(properties)) { - IQtBuildConfiguration qtConfig = getConfiguration(project, toolChain, "run", new NullProgressMonitor()); //$NON-NLS-1$ - if (qtConfig == null) { - qtConfig = createConfiguration(project, toolChain, "run", new NullProgressMonitor()); //$NON-NLS-1$ - if (qtConfig != null) { - return qtConfig; - } - } - } - - // local didn't work, try and find one that does - for (IToolChain toolChain : toolChainManager.getToolChainsMatching(new HashMap<>())) { - IQtBuildConfiguration qtConfig = getConfiguration(project, toolChain, "run", new NullProgressMonitor()); //$NON-NLS-1$ - if (qtConfig == null) { - qtConfig = createConfiguration(project, toolChain, "run", new NullProgressMonitor()); //$NON-NLS-1$ - if (qtConfig != null) { - return qtConfig; - } - } - } - } catch (CoreException e) { - Activator.log(e); - } - return null; - } - public IQtBuildConfiguration getConfiguration(IProject project, IToolChain toolChain, String launchMode, IProgressMonitor monitor) throws CoreException { for (IBuildConfiguration config : project.getBuildConfigs()) { ICBuildConfiguration cconfig = config.getAdapter(ICBuildConfiguration.class); if (cconfig != null) { IQtBuildConfiguration qtConfig = cconfig.getAdapter(IQtBuildConfiguration.class); - if (qtConfig != null && qtConfig.getLaunchMode().equals(launchMode) + if (qtConfig != null && launchMode.equals(qtConfig.getLaunchMode()) && qtConfig.getToolChain().equals(toolChain)) { return qtConfig; } @@ -114,8 +97,7 @@ public class QtBuildConfigurationProvider implements ICBuildConfigurationProvide if (qtInstallManager.supports(qtInstall, toolChain)) { // TODO what if multiple matches String configName = "qt." + qtInstall.getSpec() + "." + launchMode; //$NON-NLS-1$ //$NON-NLS-2$ - IBuildConfiguration config = configManager.createBuildConfiguration(this, project, configName, - monitor); + IBuildConfiguration config = configManager.createBuildConfiguration(this, project, configName, monitor); QtBuildConfiguration qtConfig = new QtBuildConfiguration(config, configName, toolChain, qtInstall, launchMode); configManager.addBuildConfiguration(config, qtConfig); diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtBuildConfiguration.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtBuildConfiguration.java index 1e8dcf10e73..ee55522304f 100644 --- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtBuildConfiguration.java +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtBuildConfiguration.java @@ -18,7 +18,7 @@ public interface IQtBuildConfiguration extends ICBuildConfiguration { Path getQmakeCommand(); - String getQmakeConfig(); + String[] getQmakeConfig(); Path getProgramPath() throws CoreException; diff --git a/qt/org.eclipse.cdt.qt.core/templates/project2/appProject/main.pro b/qt/org.eclipse.cdt.qt.core/templates/project2/appProject/main.pro index 96847694ccd..f80ccb38ca4 100644 --- a/qt/org.eclipse.cdt.qt.core/templates/project2/appProject/main.pro +++ b/qt/org.eclipse.cdt.qt.core/templates/project2/appProject/main.pro @@ -6,3 +6,11 @@ CONFIG += c++11 RESOURCES += ${projectName}.qrc qml.files = src/${projectName}.qml + +launch_modeall { + CONFIG(debug, debug|release) { + DESTDIR = debug + } else { + DESTDIR = release + } +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfigurationProvider.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfigurationProvider.java index 0dfda4599c2..ac4f954eae2 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfigurationProvider.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfigurationProvider.java @@ -39,49 +39,28 @@ public class ArduinoBuildConfigurationProvider implements ICBuildConfigurationPr @Override public ICBuildConfiguration getCBuildConfiguration(IBuildConfiguration config, String name) throws CoreException { - return new ArduinoBuildConfiguration(config, name); - } - - @Override - public ICBuildConfiguration getDefaultCBuildConfiguration(IProject project) throws CoreException { - ArduinoBoard board = arduinoManager.getBoard("arduino", "avr", "Arduino/Genuino Uno"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - if (board == null) { - Collection boards = arduinoManager.getInstalledBoards(); - if (!boards.isEmpty()) { - board = boards.iterator().next(); - } - } - if (board != null) { - String launchMode = "run"; //$NON-NLS-1$ - for (IBuildConfiguration config : project.getBuildConfigs()) { - ICBuildConfiguration cconfig = config.getAdapter(ICBuildConfiguration.class); - if (cconfig != null) { - ArduinoBuildConfiguration arduinoConfig = cconfig.getAdapter(ArduinoBuildConfiguration.class); - if (arduinoConfig != null && arduinoConfig.getLaunchMode().equals(launchMode) - && arduinoConfig.getBoard().equals(board)) { - return arduinoConfig; - } + if (config.getName().equals(IBuildConfiguration.DEFAULT_CONFIG_NAME)) { + // Use the good ol' Uno as the default + ArduinoBoard board = arduinoManager.getBoard("arduino", "avr", "uno"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + if (board == null) { + Collection boards = arduinoManager.getInstalledBoards(); + if (!boards.isEmpty()) { + board = boards.iterator().next(); } } + if (board != null) { + // Create the toolChain + IToolChainManager toolChainManager = Activator.getService(IToolChainManager.class); + IToolChainProvider provider = toolChainManager.getProvider(ArduinoToolChainProvider.ID); + IToolChain toolChain = new ArduinoToolChain(provider, config); + toolChainManager.addToolChain(toolChain); - // not found, create one - String configName = ArduinoBuildConfiguration.generateName(board, launchMode); - IBuildConfiguration config = configManager.createBuildConfiguration(this, project, configName, - null); - - // Create the toolChain - IToolChainManager toolChainManager = Activator.getService(IToolChainManager.class); - IToolChainProvider provider = toolChainManager.getProvider(ArduinoToolChainProvider.ID); - IToolChain toolChain = new ArduinoToolChain(provider, config); - toolChainManager.addToolChain(toolChain); - - ArduinoBuildConfiguration arduinoConfig = new ArduinoBuildConfiguration(config, configName, board, - launchMode, toolChain); - arduinoConfig.setActive(null); - configManager.addBuildConfiguration(config, arduinoConfig); - return arduinoConfig; + return new ArduinoBuildConfiguration(config, name, board, "run", toolChain); + } + return null; + } else { + return new ArduinoBuildConfiguration(config, name); } - return null; } public ArduinoBuildConfiguration getConfiguration(IProject project, ArduinoRemoteConnection target,