Make launchMode a core thing and add Debug for CMake configs.
Change-Id: Ie431824dddda07cd6985e5b644970eb525280577
diff --git a/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java b/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java
index c7ea5cd..1b7fec9 100644
--- a/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java
+++ b/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java
@@ -60,12 +60,12 @@
}
public CMakeBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) {
- this(config, name, toolChain, null);
+ this(config, name, toolChain, null, "run"); //$NON-NLS-1$
}
public CMakeBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain,
- ICMakeToolChainFile toolChainFile) {
- super(config, name, toolChain);
+ ICMakeToolChainFile toolChainFile, String launchMode) {
+ super(config, name, toolChain, launchMode);
this.toolChainFile = toolChainFile;
if (toolChainFile != null) {
@@ -120,6 +120,13 @@
command.add("-DCMAKE_TOOLCHAIN_FILE=" + toolChainFile.getPath().toString()); //$NON-NLS-1$
}
+ switch (getLaunchMode()) {
+ // TODO what to do with other modes
+ case "debug": //$NON-NLS-1$
+ command.add("-DCMAKE_BUILD_TYPE=Debug"); //$NON-NLS-1$
+ break;
+ }
+
command.add("-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"); //$NON-NLS-1$
command.add(new File(project.getLocationURI()).getAbsolutePath());
diff --git a/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfigurationProvider.java b/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfigurationProvider.java
index 6478a62..4fe7a6d 100644
--- a/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfigurationProvider.java
+++ b/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfigurationProvider.java
@@ -29,7 +29,6 @@
public static final String ID = "org.eclipse.cdt.cmake.core.provider"; //$NON-NLS-1$
private ICMakeToolChainManager manager = Activator.getService(ICMakeToolChainManager.class);
- private IToolChainManager tcManager = Activator.getService(IToolChainManager.class);
private ICBuildConfigurationManager configManager = Activator.getService(ICBuildConfigurationManager.class);
@Override
@@ -79,7 +78,8 @@
ICBuildConfiguration cconfig = config.getAdapter(ICBuildConfiguration.class);
if (cconfig != null) {
CMakeBuildConfiguration cmakeConfig = cconfig.getAdapter(CMakeBuildConfiguration.class);
- if (cmakeConfig != null && cmakeConfig.getToolChain().equals(toolChain)) {
+ if (cmakeConfig != null && cmakeConfig.getToolChain().equals(toolChain)
+ && launchMode.equals(cmakeConfig.getLaunchMode())) {
return cconfig;
}
}
@@ -104,7 +104,8 @@
// create config
String configName = "cmake." + launchMode + '.' + toolChain.getId(); //$NON-NLS-1$
IBuildConfiguration config = configManager.createBuildConfiguration(this, project, configName, monitor);
- CMakeBuildConfiguration cmakeConfig = new CMakeBuildConfiguration(config, configName, toolChain, file);
+ CMakeBuildConfiguration cmakeConfig = new CMakeBuildConfiguration(config, configName, toolChain, file,
+ launchMode);
configManager.addBuildConfiguration(config, cmakeConfig);
return cmakeConfig;
}
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 53adab3..ff4d69a 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
@@ -92,12 +92,14 @@
private static final String TOOLCHAIN_TYPE = "cdt.toolChain.type"; //$NON-NLS-1$
private static final String TOOLCHAIN_ID = "cdt.toolChain.id"; //$NON-NLS-1$
private static final String TOOLCHAIN_VERSION = "cdt.toolChain.version"; //$NON-NLS-1$
+ private static final String LAUNCH_MODE = "cdt.launchMode"; //$NON-NLS-1$
private static final List<String> DEFAULT_COMMAND = new ArrayList<>(0);
private final String name;
private final IBuildConfiguration config;
private final IToolChain toolChain;
+ private String launchMode;
private final Map<IResource, List<IScannerInfoChangeListener>> scannerInfoListeners = new HashMap<>();
private ScannerInfoCache scannerInfoCache;
@@ -127,12 +129,23 @@
}
}
toolChain = tc;
+
+ launchMode = settings.get(LAUNCH_MODE, null); // $NON-NLS-1$
}
protected CBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) {
+ this(config, name, toolChain, "run"); //$NON-NLS-1$
+ }
+
+ /**
+ * @since 6.2
+ */
+ protected CBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain,
+ String launchMode) {
this.config = config;
this.name = name;
this.toolChain = toolChain;
+ this.launchMode = launchMode;
Preferences settings = getSettings();
settings.put(TOOLCHAIN_TYPE, toolChain.getProvider().getId());
@@ -158,6 +171,27 @@
return name;
}
+ /**
+ * @since 6.2
+ */
+ public String getLaunchMode() {
+ return launchMode;
+ }
+
+ /**
+ * @since 6.2
+ */
+ protected void setLaunchMode(String launchMode) {
+ this.launchMode = launchMode;
+ Preferences settings = getSettings();
+ settings.put(LAUNCH_MODE, launchMode);
+ try {
+ settings.flush();
+ } catch (BackingStoreException e) {
+ CCorePlugin.log(e);
+ }
+ }
+
public IProject getProject() {
return config.getProject();
}
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 d2bd857..3236ea2 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
@@ -57,7 +57,6 @@
private static final String QTINSTALL_SPEC = "cdt.qt.install.spec"; //$NON-NLS-1$
private static final String LAUNCH_MODE = "cdt.qt.launchMode"; //$NON-NLS-1$
- private final String launchMode;
private final String qtInstallSpec;
private IQtInstall qtInstall;
private Map<String, String> properties;
@@ -89,15 +88,23 @@
Activator.error(String.format("Qt Install for build configuration %s not found.", name)));
}
- launchMode = settings.get(LAUNCH_MODE, null); // $NON-NLS-1$
+ String oldLaunchMode = settings.get(LAUNCH_MODE, null);
+ if (oldLaunchMode != null) {
+ setLaunchMode(oldLaunchMode);
+ settings.remove(LAUNCH_MODE);
+ try {
+ settings.flush();
+ } catch (BackingStoreException e) {
+ Activator.log(e);
+ }
+ }
}
QtBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain, IQtInstall qtInstall,
String launchMode) throws CoreException {
- super(config, name, toolChain);
+ super(config, name, toolChain, launchMode);
this.qtInstall = qtInstall;
this.qtInstallSpec = qtInstall.getSpec();
- this.launchMode = launchMode;
IQtInstallManager manager = Activator.getService(IQtInstallManager.class);
manager.addListener(this);
@@ -136,17 +143,13 @@
}
@Override
- public String getLaunchMode() {
- return launchMode;
- }
-
- @Override
public Path getQmakeCommand() {
return getQtInstall().getQmakePath();
}
@Override
public String[] getQmakeConfig() {
+ String launchMode = getLaunchMode();
if (launchMode != null) {
switch (launchMode) {
case "run": //$NON-NLS-1$
@@ -185,7 +188,7 @@
case Platform.OS_WIN32:
return getBuildDirectory().resolve(projectName + ".exe"); //$NON-NLS-1$
case Platform.OS_LINUX:
- return getBuildDirectory().resolve(projectName); //$NON-NLS-1$
+ return getBuildDirectory().resolve(projectName);
default:
Path releaseFolder = getBuildDirectory().resolve("release"); //$NON-NLS-1$
return releaseFolder.resolve(projectName);
@@ -344,7 +347,8 @@
try (ErrorParserManager epm = new ErrorParserManager(project, getBuildDirectoryURI(), this,
getToolChain().getErrorParserIds())) {
// run make
- ProcessBuilder processBuilder = new ProcessBuilder(makeCommand.toString(), "all").directory(buildDir.toFile());
+ ProcessBuilder processBuilder = new ProcessBuilder(makeCommand.toString(), "all") //$NON-NLS-1$
+ .directory(buildDir.toFile());
setBuildEnvironment(processBuilder.environment());
Process process = processBuilder.start();
outStream.write(makeCommand.toString() + '\n');