Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add API to set CMake generator default (eg Ninja) #1046

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmake/org.eclipse.cdt.cmake.core/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.cmake.core;singleton:=true
Bundle-Version: 1.6.0.qualifier
Bundle-Version: 2.0.0.qualifier
Bundle-Activator: org.eclipse.cdt.cmake.core.internal.Activator
Bundle-Vendor: %providerName
Require-Bundle: org.eclipse.core.runtime,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.eclipse.cdt.cmake.core.internal.CommandDescriptorBuilder.CommandDescriptor;
import org.eclipse.cdt.cmake.core.internal.IOsOverridesSelector;
import org.eclipse.cdt.cmake.core.properties.CMakeGenerator;
import org.eclipse.cdt.cmake.core.properties.CMakePropertiesFactory;
import org.eclipse.cdt.cmake.core.properties.ICMakeProperties;
import org.eclipse.cdt.cmake.core.properties.ICMakePropertiesController;
import org.eclipse.cdt.cmake.core.properties.IOsOverrides;
Expand Down Expand Up @@ -72,10 +73,11 @@
import org.osgi.service.prefs.Preferences;

/**
* @since 1.6
* @since 2.0
*/
public class CMakeBuildConfiguration extends CBuildConfiguration {
public class CMakeBuildConfiguration extends CBuildConfiguration implements ICMakeBuildConfiguration {

private static final String CMAKE_PROPERTIES_INITIALSED = "cmake.properties.initialised"; //$NON-NLS-1$
public static final String CMAKE_USE_UI_OVERRIDES = "cmake.use.ui.overrides"; //$NON-NLS-1$
public static final boolean CMAKE_USE_UI_OVERRIDES_DEFAULT = false;
public static final String CMAKE_GENERATOR = "cmake.generator"; //$NON-NLS-1$
Expand All @@ -91,6 +93,8 @@ public class CMakeBuildConfiguration extends CBuildConfiguration {
// lazily instantiated..
private ICMakePropertiesController pc;

ICMakeProperties defaultProperties;

private Map<IResource, IScannerInfo> infoPerResource;
/**
* whether one of the CMakeLists.txt files in the project has been modified and saved by the
Expand All @@ -112,6 +116,7 @@ public CMakeBuildConfiguration(IBuildConfiguration config, String name) throws C

ICMakeToolChainManager manager = Activator.getService(ICMakeToolChainManager.class);
toolChainFile = manager.getToolChainFileFor(getToolChain());
setDefaultCMakeProperties();
}

public CMakeBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) {
Expand All @@ -122,6 +127,30 @@ public CMakeBuildConfiguration(IBuildConfiguration config, String name, IToolCha
ICMakeToolChainFile toolChainFile, String launchMode) {
super(config, name, toolChain, launchMode);
this.toolChainFile = toolChainFile;
// // moule
setDefaultCMakeProperties();
}

private void setDefaultCMakeProperties() {
// Only set defaults on initial construction
if (getProperty(CMAKE_PROPERTIES_INITIALSED) == null) {
ICMakeProperties properties = CMakePropertiesFactory.getProperties();
IOsOverrides windowsOverrides = properties.getWindowsOverrides();
windowsOverrides.setDefaultGenerator(CMakeGenerator.UnixMakefiles);

IOsOverrides linuxOverrides = properties.getLinuxOverrides();
linuxOverrides.setDefaultGenerator(CMakeGenerator.UnixMakefiles);
// reset(true) causes the CMake generator to be reset to it's default value.
properties.reset(true);
setDefaultCMakeProperties(properties);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't ok - you shouldn't have non-final methods called by constructor.

Can you change this around so that the interface has getDefaultCMakeProperties that extenders can override if they don't like the built-in defaults?

Here is a diff showing what I mean, but it isn't tested, so may require fixing up

expand for patch contents
diff --git a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/CMakeBuildConfiguration.java b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/CMakeBuildConfiguration.java
index fe7f365c83d..a0eeee42967 100644
--- a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/CMakeBuildConfiguration.java
+++ b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/CMakeBuildConfiguration.java
@@ -77,7 +77,6 @@ import org.osgi.service.prefs.Preferences;
  */
 public class CMakeBuildConfiguration extends CBuildConfiguration implements ICMakeBuildConfiguration {
 
-	private static final String CMAKE_PROPERTIES_INITIALSED = "cmake.properties.initialised"; //$NON-NLS-1$
 	public static final String CMAKE_USE_UI_OVERRIDES = "cmake.use.ui.overrides"; //$NON-NLS-1$
 	public static final boolean CMAKE_USE_UI_OVERRIDES_DEFAULT = false;
 	public static final String CMAKE_GENERATOR = "cmake.generator"; //$NON-NLS-1$
@@ -93,8 +92,6 @@ public class CMakeBuildConfiguration extends CBuildConfiguration implements ICMa
 	// lazily instantiated..
 	private ICMakePropertiesController pc;
 
-	ICMakeProperties defaultProperties;
-
 	private Map<IResource, IScannerInfo> infoPerResource;
 	/**
 	 * whether one of the CMakeLists.txt files in the project has been modified and saved by the
@@ -116,7 +113,6 @@ public class CMakeBuildConfiguration extends CBuildConfiguration implements ICMa
 
 		ICMakeToolChainManager manager = Activator.getService(ICMakeToolChainManager.class);
 		toolChainFile = manager.getToolChainFileFor(getToolChain());
-		setDefaultCMakeProperties();
 	}
 
 	public CMakeBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) {
@@ -127,30 +123,21 @@ public class CMakeBuildConfiguration extends CBuildConfiguration implements ICMa
 			ICMakeToolChainFile toolChainFile, String launchMode) {
 		super(config, name, toolChain, launchMode);
 		this.toolChainFile = toolChainFile;
-		//		// moule
-		setDefaultCMakeProperties();
-	}
-
-	private void setDefaultCMakeProperties() {
-		// Only set defaults on initial construction
-		if (getProperty(CMAKE_PROPERTIES_INITIALSED) == null) {
-			ICMakeProperties properties = CMakePropertiesFactory.getProperties();
-			IOsOverrides windowsOverrides = properties.getWindowsOverrides();
-			windowsOverrides.setDefaultGenerator(CMakeGenerator.UnixMakefiles);
-
-			IOsOverrides linuxOverrides = properties.getLinuxOverrides();
-			linuxOverrides.setDefaultGenerator(CMakeGenerator.UnixMakefiles);
-			// reset(true) causes the CMake generator to be reset to it's default value.
-			properties.reset(true);
-			setDefaultCMakeProperties(properties);
-		}
 	}
 
 	@Override
-	public void setDefaultCMakeProperties(ICMakeProperties defaultProperties) {
-		this.defaultProperties = defaultProperties;
-		setProperty(CMAKE_GENERATOR, getOsOverrides(defaultProperties).getGenerator().getCMakeName());
-		setProperty(CMAKE_PROPERTIES_INITIALSED, Boolean.TRUE.toString());
+	public ICMakeProperties getDefaultCMakeProperties() {
+		ICMakeProperties properties = CMakePropertiesFactory.createProperties();
+		IOsOverrides windowsOverrides = properties.getWindowsOverrides();
+		windowsOverrides.setDefaultGenerator(CMakeGenerator.UnixMakefiles);
+
+		IOsOverrides linuxOverrides = properties.getLinuxOverrides();
+		linuxOverrides.setDefaultGenerator(CMakeGenerator.UnixMakefiles);
+		// reset(true) causes the CMake generator to be reset to it's default value.
+		properties.reset(true);
+
+		setProperty(CMAKE_GENERATOR, getOsOverrides(properties).getGenerator().getCMakeName());
+		return properties;
 	}
 
 	/**
@@ -192,7 +179,7 @@ public class CMakeBuildConfiguration extends CBuildConfiguration implements ICMa
 			}
 
 			//			ICMakeProperties cmakeProperties = getPropertiesController().load();
-			ICMakeProperties cmakeProperties = getPropertiesController().load(defaultProperties);
+			ICMakeProperties cmakeProperties = getPropertiesController().load(getDefaultCMakeProperties());
 			runCMake |= !Files.exists(buildDir.resolve("CMakeCache.txt")); //$NON-NLS-1$
 
 			// Causes CMAKE_BUILD_TYPE to be set according to the launch mode
@@ -334,7 +321,7 @@ public class CMakeBuildConfiguration extends CBuildConfiguration implements ICMa
 			project.deleteMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_INFINITE);
 
 			//			ICMakeProperties cmakeProperties = getPropertiesController().load();
-			ICMakeProperties cmakeProperties = getPropertiesController().load(defaultProperties);
+			ICMakeProperties cmakeProperties = getPropertiesController().load(getDefaultCMakeProperties());
 			CommandDescriptorBuilder cmdBuilder = new CommandDescriptorBuilder(cmakeProperties,
 					new SimpleOsOverridesSelector());
 			CommandDescriptor command = cmdBuilder.makeCMakeBuildCommandline(getCleanCommand());
@@ -436,7 +423,7 @@ public class CMakeBuildConfiguration extends CBuildConfiguration implements ICMa
 	@SuppressWarnings("unchecked")
 	public <T> T getAdapter(Class<T> adapter) {
 		if (ICMakePropertiesController.class.equals(adapter)) {
-			//			return (T) pc;
+			//						return (T) pc;
 			return (T) getPropertiesController();
 		}
 		return super.getAdapter(adapter);
diff --git a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/ICMakeBuildConfiguration.java b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/ICMakeBuildConfiguration.java
index 5769704217e..913d3e369bc 100644
--- a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/ICMakeBuildConfiguration.java
+++ b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/ICMakeBuildConfiguration.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2015, 2025 QNX Software Systems and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
 package org.eclipse.cdt.cmake.core;
 
 import org.eclipse.cdt.cmake.core.properties.ICMakeProperties;
@@ -14,5 +24,5 @@ public interface ICMakeBuildConfiguration {
 	 * {@link CMakeBuildConfiguration#CMAKE_GENERATOR}. The CMake generator property can then be accessed using
 	 * the {@link ICBuildConfiguration#getProperty(String)}.
 	 */
-	void setDefaultCMakeProperties(ICMakeProperties defaultProperties);
+	ICMakeProperties getDefaultCMakeProperties();
 }
diff --git a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/properties/CMakePropertiesFactory.java b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/properties/CMakePropertiesFactory.java
index 5d679ded86f..8c5c5302ceb 100644
--- a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/properties/CMakePropertiesFactory.java
+++ b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/properties/CMakePropertiesFactory.java
@@ -1,9 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2015, 2025 QNX Software Systems and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
 package org.eclipse.cdt.cmake.core.properties;
 
 import org.eclipse.cdt.cmake.core.internal.properties.CMakePropertiesBean;
 
+/**
+ * @since 2.0
+ */
 public class CMakePropertiesFactory {
-	public static ICMakeProperties getProperties() {
+	public static ICMakeProperties createProperties() {
 		return new CMakePropertiesBean();
 	}
 }

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addendum,

extenders can do something like this:

	@Override
	public ICMakeProperties getDefaultCMakeProperties() {
		// get the built-in CDT defaults
		ICMakeProperties properties = super.getDefaultCMakeProperties();
		
		// provide my customizations (I don't know what Renesas/extenders may actually want to do here)
		properties.setWarnUnitialized(true);

		return properties;
	}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And finally - maybe ;) - I think calling:

		setProperty(CMAKE_GENERATOR, getOsOverrides(properties).getGenerator().getCMakeName());

from within this method is incorrect as that method has side effects by changing project preferences too. It may be best to call setProperty on the return value of getDefaultCMakeProperties:

	private ICMakeProperties getDefaultPropertiesInternal() {
		ICMakeProperties properties = getDefaultCMakeProperties();
		setProperty(CMAKE_GENERATOR, getOsOverrides(properties).getGenerator().getCMakeName());
		return properties;
	}

and then in build/clean:

			ICMakeProperties cmakeProperties = getPropertiesController().load(getDefaultPropertiesInternal());

}
}

@Override
public void setDefaultCMakeProperties(ICMakeProperties defaultProperties) {
this.defaultProperties = defaultProperties;
setProperty(CMAKE_GENERATOR, getOsOverrides(defaultProperties).getGenerator().getCMakeName());
setProperty(CMAKE_PROPERTIES_INITIALSED, Boolean.TRUE.toString());
}

/**
Expand Down Expand Up @@ -162,7 +191,8 @@ public IProject[] build(int kind, Map<String, String> args, IConsole console, IP
runCMake = true;
}

ICMakeProperties cmakeProperties = getPropertiesController().load();
// ICMakeProperties cmakeProperties = getPropertiesController().load();
ICMakeProperties cmakeProperties = getPropertiesController().load(defaultProperties);
runCMake |= !Files.exists(buildDir.resolve("CMakeCache.txt")); //$NON-NLS-1$

// Causes CMAKE_BUILD_TYPE to be set according to the launch mode
Expand Down Expand Up @@ -303,7 +333,8 @@ public void clean(IConsole console, IProgressMonitor monitor) throws CoreExcepti

project.deleteMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_INFINITE);

ICMakeProperties cmakeProperties = getPropertiesController().load();
// ICMakeProperties cmakeProperties = getPropertiesController().load();
ICMakeProperties cmakeProperties = getPropertiesController().load(defaultProperties);
CommandDescriptorBuilder cmdBuilder = new CommandDescriptorBuilder(cmakeProperties,
new SimpleOsOverridesSelector());
CommandDescriptor command = cmdBuilder.makeCMakeBuildCommandline(getCleanCommand());
Expand Down Expand Up @@ -405,7 +436,8 @@ private ICMakePropertiesController getPropertiesController() {
@SuppressWarnings("unchecked")
public <T> T getAdapter(Class<T> adapter) {
if (ICMakePropertiesController.class.equals(adapter)) {
return (T) pc;
// return (T) pc;
return (T) getPropertiesController();
}
return super.getAdapter(adapter);
}
Expand Down Expand Up @@ -582,6 +614,15 @@ public void shutdown() {
}
} // CMakeIndexerInfoConsumer

private IOsOverrides getOsOverrides(ICMakeProperties cmakeProperties) {
if (Platform.OS_WIN32.equals(Platform.getOS())) {
return cmakeProperties.getWindowsOverrides();

} else {
return cmakeProperties.getLinuxOverrides();
}
}

/**
* Supports OS overrides and also User Interface (UI) overrides, provided in the CMakeBuildTab. The UI
* overrides are stored in the intermediary CBuildConfiguration Preferences (CBuildConfiguration.getSettings())
Expand All @@ -591,17 +632,9 @@ private class SimpleOsOverridesSelector implements IOsOverridesSelector {

@Override
public IOsOverrides getOsOverrides(ICMakeProperties cmakeProperties) {
IOsOverrides overrides;
// get overrides. Simplistic approach ATM, probably a strategy might fit better.
// see comment in CMakeIndexerInfoConsumer#getFileForCMakePath()
final String os = Platform.getOS();
if (Platform.OS_WIN32.equals(os)) {
overrides = cmakeProperties.getWindowsOverrides();
} else {
// fall back to linux, if OS is unknown
overrides = cmakeProperties.getLinuxOverrides();
}
return getUiOrOsOverrides(overrides);
return getUiOrOsOverrides(getOsOverrides(cmakeProperties));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately this change gave me a stack overflow. I created a new CMake project and hit build (in the launch bar) and I got:

!ENTRY org.eclipse.core.jobs 4 2 2025-01-19 10:41:21.640
!MESSAGE An internal error occurred during: "Building Active Configuration".
!STACK 0
java.lang.StackOverflowError
	at org.eclipse.cdt.cmake.core.CMakeBuildConfiguration$SimpleOsOverridesSelector.getOsOverrides(CMakeBuildConfiguration.java:637)
	at org.eclipse.cdt.cmake.core.CMakeBuildConfiguration$SimpleOsOverridesSelector.getOsOverrides(CMakeBuildConfiguration.java:637)
	at org.eclipse.cdt.cmake.core.CMakeBuildConfiguration$SimpleOsOverridesSelector.getOsOverrides(CMakeBuildConfiguration.java:637)
-- repeating --

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Apologies, that was some clumsy refactoring last thing on a Friday when I needed to finish work.

}

private IOsOverrides getUiOrOsOverrides(IOsOverrides osOverrides) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.eclipse.cdt.cmake.core;

import org.eclipse.cdt.cmake.core.properties.ICMakeProperties;
import org.eclipse.cdt.core.build.ICBuildConfiguration;

/**
* @since 2.0
*/
public interface ICMakeBuildConfiguration {
/**
* Provides a CBuildConfiguration with a set of default CMake properties. The ICMakeProperties can then, for
* example, provide a default value for the CMake generator.
* The CMake generator can then be set using {@link ICBuildConfiguration#setProperty(String, String)}, using
* {@link CMakeBuildConfiguration#CMAKE_GENERATOR}. The CMake generator property can then be accessed using
* the {@link ICBuildConfiguration#getProperty(String)}.
*/
void setDefaultCMakeProperties(ICMakeProperties defaultProperties);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* @noextend This class is not intended to be subclassed by clients.
* @noinstantiate This class is not intended to be instantiated by clients.
* @noreference This class is not intended to be referenced by clients.
* @since 1.6
* @since 2.0
*/
public class Messages extends NLS {
private static final String BUNDLE_NAME = "org.eclipse.cdt.cmake.core.messages"; //$NON-NLS-1$
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,32 @@ public ICMakeProperties load() throws IOException {
return props;
}

@Override
public ICMakeProperties load(ICMakeProperties defaults) throws IOException {
ICMakeProperties props = null;
if (Files.exists(storageFile)) {
try (InputStream is = Files.newInputStream(storageFile)) {
var classLoader = this.getClass().getClassLoader();

var loaderoptions = new LoaderOptions();
TagInspector taginspector = tag -> tag.getClassName().equals(CMakePropertiesBean.class.getName());
loaderoptions.setTagInspector(taginspector);

var clConstructor = new CustomClassLoaderConstructor(classLoader, loaderoptions);

props = new Yaml(clConstructor).loadAs(is, CMakePropertiesBean.class);
// props is null here if if no document was available in the file
}
}
if (props == null) {
// nothing was persisted, return default properties
props = defaults;
}

setupModifyDetection(props);
return props;
}

@Override
public void save(ICMakeProperties properties) throws IOException {
// detect whether changes force us to delete file CMakeCache.txt to avoid complaints by cmake
Expand Down Expand Up @@ -158,4 +184,5 @@ private boolean hasExtraArgumentChanged(List<String> expected, List<String> actu
}
return false;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import java.util.List;

import org.eclipse.cdt.cmake.core.properties.ICMakeProperties;
import org.eclipse.cdt.cmake.core.properties.LinuxOverrides;
import org.eclipse.cdt.cmake.core.properties.WindowsOverrides;

/**
* Holds project Properties for cmake. Follows the Java-Beans pattern to make (de-)serialization easier.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,28 @@
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/

package org.eclipse.cdt.cmake.core.internal.properties;
package org.eclipse.cdt.cmake.core.properties;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import org.eclipse.cdt.cmake.core.CMakeBuildConfiguration;
import org.eclipse.cdt.cmake.core.properties.CMakeGenerator;
import org.eclipse.cdt.cmake.core.properties.IOsOverrides;

/**
* Preferences that override/augment the generic properties when running under a
* specific OS.
*
* @author Martin Weber
* @since 2.0
*/
public abstract class AbstractOsOverrides implements IOsOverrides {

private String command;
private boolean useDefaultCommand;
private CMakeGenerator generator;
private List<String> extraArguments = new ArrayList<>(0);
private CMakeGenerator defaultGenerator = CMakeGenerator.Ninja;

/**
* Creates a new object, initialized with all default values.
Expand All @@ -45,7 +45,7 @@ public AbstractOsOverrides() {
public void reset() {
setCommand(CMakeBuildConfiguration.BUILD_COMMAND_DEFAULT);
useDefaultCommand = true;
setGenerator(CMakeGenerator.UnixMakefiles);
setGenerator(defaultGenerator);
extraArguments.clear();
}

Expand Down Expand Up @@ -89,4 +89,8 @@ public void setExtraArguments(List<String> extraArguments) {
this.extraArguments = extraArguments;
}

}
@Override
public void setDefaultGenerator(CMakeGenerator defaultGenerator) {
this.defaultGenerator = defaultGenerator;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.eclipse.cdt.cmake.core.properties;

import org.eclipse.cdt.cmake.core.internal.properties.CMakePropertiesBean;

public class CMakePropertiesFactory {
public static ICMakeProperties getProperties() {
return new CMakePropertiesBean();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,17 @@ public interface ICMakePropertiesController {
*
* @throws IOException if the persistence store exists but could not be read
*/
@Deprecated
ICMakeProperties load() throws IOException;

/** Creates a new {@code ICMakeProperties} object, initialized from the persistence store.
* If the persistence store does not exist, an object initialized to the default values is returned.
*
* @throws IOException if the persistence store exists but could not be read
* @since 2.0
*/
ICMakeProperties load(ICMakeProperties defaults) throws IOException;

/** Saves the specified {@code ICMakeProperties} object to the persistence store.
*
* @throws IOException if the persistence store could not be written to
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,11 @@ public interface IOsOverrides {
* Sets the list of extra arguments to pass on the cmake command-line.
*/
void setExtraArguments(List<String> extraArguments);

/**
* Sets a value that is used when a {@link ICMakeProperties#reset(true)} call is performed, setting the value
* of the CMake generator (see {@link #getGenerator()}) to it's default value.
* @since 2.0
*/
void setDefaultGenerator(CMakeGenerator defaultGenerator);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,18 @@
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/

package org.eclipse.cdt.cmake.core.internal.properties;
package org.eclipse.cdt.cmake.core.properties;

/**
* Preferences that override/augment the generic properties when running under
* Linux.
*
* @author Martin Weber
* @since 2.0
*/
public class LinuxOverrides extends AbstractOsOverrides {

/**
* Creates a new object, initialized with all default values.
*/
public LinuxOverrides() {
super();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,18 @@
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/

package org.eclipse.cdt.cmake.core.internal.properties;

import org.eclipse.cdt.cmake.core.properties.CMakeGenerator;
package org.eclipse.cdt.cmake.core.properties;

/**
* Preferences that override/augment the generic properties when running under
* Windows.
*
* @author Martin Weber
* @since 2.0
*/
public class WindowsOverrides extends AbstractOsOverrides {

/** Overridden to set a sensible generator. */
@Override
public void reset() {
super.reset();
setGenerator(CMakeGenerator.MinGWMakefiles);
public WindowsOverrides() {
super();
}
}
Loading