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

The active Launch Target is now saved in the ICBuildConfiguration #1076

Merged
merged 2 commits into from
Feb 12, 2025
Merged
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
151 changes: 150 additions & 1 deletion NewAndNoteworthy/CHANGELOG-API.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,156 @@ Below is the detailed descriptions of API changes and mitigation efforts API con

## API Changes in CDT 12.0.

### org.eclipse.cdt.cmake.core.properties refactored
### CDT's Core Build System refactored and improved

Many API changes were made in org.eclipse.cdt.core.build and its surrounding areas, such as CMake and Meson.
See [CDT Issue#1000](https://github.com/eclipse-cdt/cdt/issues/1000) for background information and motivation for this change.
The rest of this section attempts to capture the individual changes made to methods.

#### org.eclipse.cdt.core.build.ICBuildConfigurationProvider

Renamed method createBuildConfiguration to createCBuildConfiguration, which reflects it purpose of creating a new Core Build configuration. Also added the ILaunchTarget parameter.

Added method:
* createCBuildConfiguration(IProject, IToolChain, String, ILaunchTarget, IProgressMonitor)

Removed method:
* createBuildConfiguration(IProject, IToolChain, String, IProgressMonitor)

Added method allowing extenders to customize the Core Build output directory name.
* getCBuildConfigName(IProject, String, IToolChain, String, ILaunchTarget)

#### org.eclipse.cdt.core.build.CBuildConfiguration

Removed method:

* org.eclipse.cdt.core.build.CBuildConfiguration.setLaunchMode(String)

#### Simplified constructors in org.eclipse.cdt.core.build.CBuildConfiguration

The following constructors have been removed from CBuildConfiguration:

* org.eclipse.cdt.core.build.CBuildConfiguration.CBuildConfiguration(IBuildConfiguration, String, IToolChain)
* org.eclipse.cdt.core.build.CBuildConfiguration.CBuildConfiguration(IBuildConfiguration, String, IToolChain, String)
* org.eclipse.cdt.core.build.CBuildConfiguration.CBuildConfiguration(IBuildConfiguration, IToolChain)

Removing them simplified the API as these constructors were unneeded.

Instead use:

* org.eclipse.cdt.core.build.CBuildConfiguration.CBuildConfiguration(IBuildConfiguration, String)
* org.eclipse.cdt.core.build.CBuildConfiguration.CBuildConfiguration(IBuildConfiguration, String, IToolChain, String, ILaunchTarget)

The documentation on these constructors has been improved.

#### Simplified constructors in org.eclipse.cdt.cmake.core.CMakeBuildConfiguration

The following constructors have been removed from CMakeBuildConfiguration:

* org.eclipse.cdt.cmake.core.CMakeBuildConfiguration.CMakeBuildConfiguration(IBuildConfiguration, String, IToolChain)
* org.eclipse.cdt.cmake.core.CMakeBuildConfiguration.CMakeBuildConfiguration(IBuildConfiguration, String, IToolChain, ICMakeToolChainFile, String)

Instead use:

* org.eclipse.cdt.cmake.core.CMakeBuildConfiguration.CMakeBuildConfiguration(IBuildConfiguration, String, IToolChain, ICMakeToolChainFile, String, ILaunchTarget)

#### Simplified constructors in org.eclipse.cdt.core.autotools.core.AutotoolsBuildConfiguration

The following constructors have been removed from AutotoolsBuildConfiguration:
* org.eclipse.cdt.core.autotools.core.AutotoolsBuildConfiguration.AutotoolsBuildConfiguration(IBuildConfiguration, String, IToolChain, String)
* org.eclipse.cdt.core.autotools.core.AutotoolsBuildConfiguration.AutotoolsBuildConfiguration(IBuildConfiguration, String, IToolChain)

Instead use:

* org.eclipse.cdt.core.autotools.core.AutotoolsBuildConfiguration.AutotoolsBuildConfiguration(IBuildConfiguration, String, IToolChain, String, ILaunchTarget)

#### Simplified constructors in org.eclipse.cdt.core.build.StandardBuildConfiguration

The following constructors have been removed from StandardBuildConfiguration:

* org.eclipse.cdt.core.build.StandardBuildConfiguration.StandardBuildConfiguration(IBuildConfiguration, String, IToolChain, String)

Instead use:

* org.eclipse.cdt.core.build.StandardBuildConfiguration.StandardBuildConfiguration(IBuildConfiguration, String, IToolChain, String, ILaunchTarget)

#### Simplified constructors in org.eclipse.cdt.internal.meson.core.MesonBuildConfiguration

The following constructors have been removed from MesonBuildConfiguration:

* org.eclipse.cdt.internal.meson.core.MesonBuildConfiguration.MesonBuildConfiguration(IBuildConfiguration, String, IToolChain)

* org.eclipse.cdt.internal.meson.core.MesonBuildConfiguration.MesonBuildConfiguration(IBuildConfiguration, String, IToolChain, IMesonToolChainFile, String)

Instead use:

* org.eclipse.cdt.internal.meson.core.MesonBuildConfiguration.MesonBuildConfiguration(IBuildConfiguration, String, IToolChain, String, ILaunchTarget)

* org.eclipse.cdt.internal.meson.core.MesonBuildConfiguration.MesonBuildConfiguration(IBuildConfiguration, String, IToolChain, IMesonToolChainFile, String, ILaunchTarget)

#### org.eclipse.cdt.core.build.ICBuildConfiguration

Added method:

* org.eclipse.cdt.core.build.ICBuildConfiguration.getLaunchTarget()

#### org.eclipse.cdt.core.build.ICBuildConfigurationManager

The documentation has been improved.

Added method:

* org.eclipse.cdt.core.build.ICBuildConfigurationManager.getBuildConfiguration(IProject, IToolChain, String, ILaunchTarget, IProgressMonitor)

Removed method:

* org.eclipse.cdt.core.build.ICBuildConfigurationManager.getBuildConfiguration(IProject, IToolChain, String, IProgressMonitor)

* org.eclipse.cdt.core.build.ICBuildConfigurationManager.getBuildConfiguration(IProject, Map<String, String>, String, IProgressMonitor)

#### org.eclipse.cdt.debug.core.launch.CoreBuildLaunchConfigDelegate

Removed deprecated method:

* org.eclipse.cdt.debug.core.launch.CoreBuildLaunchConfigDelegate.getBuildConfiguration(IProject, String, ILaunchTarget, IProgressMonitor)

#### org.eclipse.launchbar.core.target.ILaunchTarget

Removed deprecated method:

* org.eclipse.launchbar.core.target.ILaunchTarget.getName()

#### org.eclipse.launchbar.core.target.ILaunchTargetManager

Added method:

* org.eclipse.launchbar.core.target.ILaunchTargetManager.getLocalLaunchTarget()

Added field:

* org.eclipse.launchbar.core.target.ILaunchTargetManager.localLaunchTargetId

#### org.eclipse.launchbar.core.target.LaunchTargetUtils

Added methods that can be used to check/fix the Launch Target name:

* org.eclipse.launchbar.core.target.LaunchTargetUtils.isInvalidName(String)
* org.eclipse.launchbar.core.target.LaunchTargetUtils.sanitizeName(String)

#### org.eclipse.cdt.debug.core
- Version bumped to 9.0.0
- Removed method (already deprecated):
- org.eclipse.cdt.debug.core.launch.CoreBuildLaunchConfigDelegate.getBuildConfiguration(IProject, String, ILaunchTarget, IProgressMonitor)

#### org.eclipse.launchbar.core.target
- Added method:
- org.eclipse.launchbar.core.target.ILaunchTargetManager.getLocalLaunchTarget()
- Added field:
- org.eclipse.launchbar.core.target.ILaunchTargetManager.localLaunchTargetId
- Added class:
- org.eclipse.launchbar.core.target.LaunchTargetUtils

#### org.eclipse.cdt.cmake.core.properties refactored

A significant simplification to the CMake build properties was completed, this included removing some API that was not used.
The following classes have been removed or modified in API breaking ways:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ Require-Bundle: org.eclipse.core.runtime,
org.eclipse.tools.templates.core;bundle-version="2.0.0",
org.eclipse.tools.templates.freemarker;bundle-version="2.0.0",
org.eclipse.cdt.core;bundle-version="6.3.1",
org.eclipse.core.resources;bundle-version="3.12.0"
org.eclipse.core.resources;bundle-version="3.12.0",
org.eclipse.launchbar.core;bundle-version="[3.0.0,4.0.0)"
Bundle-RequiredExecutionEnvironment: JavaSE-17
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %providerName
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.launchbar.core.target.ILaunchTarget;

public class AutotoolsBuildConfiguration extends CBuildConfiguration {

Expand All @@ -46,13 +47,9 @@ public AutotoolsBuildConfiguration(IBuildConfiguration config, String name) thro
super(config, name);
}

public AutotoolsBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) {
super(config, name, toolChain, "run"); // TODO: why "run" //$NON-NLS-1$
}

public AutotoolsBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain,
String launchMode) {
super(config, name, toolChain, launchMode);
public AutotoolsBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain, String launchMode,
ILaunchTarget launchTarget) throws CoreException {
super(config, name, toolChain, launchMode, launchTarget);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import java.util.Map;

import org.eclipse.cdt.core.autotools.core.internal.Activator;
import org.eclipse.cdt.core.build.CBuildConfigUtils;
import org.eclipse.cdt.core.build.ICBuildConfiguration;
import org.eclipse.cdt.core.build.ICBuildConfigurationManager;
import org.eclipse.cdt.core.build.ICBuildConfigurationProvider;
Expand All @@ -28,12 +29,14 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.core.target.ILaunchTargetManager;

public class AutotoolsBuildConfigurationProvider implements ICBuildConfigurationProvider {

public static final String ID = Activator.PLUGIN_ID + ".provider"; //$NON-NLS-1$

private ICBuildConfigurationManager configManager = Activator.getService(ICBuildConfigurationManager.class);
private final ILaunchTargetManager launchTargetManager = Activator.getService(ILaunchTargetManager.class);

@Override
public String getId() {
Expand Down Expand Up @@ -64,7 +67,8 @@ public ICBuildConfiguration getCBuildConfiguration(IBuildConfiguration config, S
}

if (toolChain != null) {
return new AutotoolsBuildConfiguration(config, name, toolChain);
return new AutotoolsBuildConfiguration(config, name, toolChain, "run", //$NON-NLS-1$
launchTargetManager.getLocalLaunchTarget());
}
// No valid combinations
return null;
Expand All @@ -79,53 +83,23 @@ public ICBuildConfiguration getCBuildConfiguration(IBuildConfiguration config, S
}

@Override
public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChain toolChain, String launchMode,
IProgressMonitor monitor) throws CoreException {
// get matching toolchain file if any
Map<String, String> properties = new HashMap<>();
String os = toolChain.getProperty(IToolChain.ATTR_OS);
if (os != null && !os.isEmpty()) {
properties.put(IToolChain.ATTR_OS, os);
}
String arch = toolChain.getProperty(IToolChain.ATTR_ARCH);
if (arch != null && !arch.isEmpty()) {
properties.put(IToolChain.ATTR_ARCH, arch);
}
public ICBuildConfiguration createCBuildConfiguration(IProject project, IToolChain toolChain, String launchMode,
ILaunchTarget launchTarget, IProgressMonitor monitor) throws CoreException {
// Compute name to use for ICBuildConfiguration
String cBuildConfigName = getCBuildConfigName(project, "autotools", toolChain, launchMode, launchTarget); //$NON-NLS-1$

// create config
StringBuilder configName = new StringBuilder("autotools."); //$NON-NLS-1$
configName.append(launchMode);
if ("linux-container".equals(os)) { //$NON-NLS-1$
String osConfigName = toolChain.getProperty("linux-container-id"); //$NON-NLS-1$
osConfigName = osConfigName.replaceAll("/", "_"); //$NON-NLS-1$ //$NON-NLS-2$
configName.append('.');
configName.append(osConfigName);
} else {
if (os != null) {
configName.append('.');
configName.append(os);
}
if (arch != null && !arch.isEmpty()) {
configName.append('.');
configName.append(arch);
}
}
String name = configName.toString();
IBuildConfiguration config = null;
// reuse any IBuildConfiguration with the same name for the project
// so adding the CBuildConfiguration will override the old one stored
// by the CBuildConfigurationManager
if (configManager.hasConfiguration(this, project, name)) {
config = project.getBuildConfig(this.getId() + '/' + name);
}
if (config == null) {
config = configManager.createBuildConfiguration(this, project, name, monitor);
}
// Create Platform Build configuration
ICBuildConfigurationManager cBuildConfigManager = Activator.getService(ICBuildConfigurationManager.class);
IBuildConfiguration buildConfig = CBuildConfigUtils.createBuildConfiguration(this, project, cBuildConfigName,
cBuildConfigManager, monitor);

AutotoolsBuildConfiguration autotoolsConfig = new AutotoolsBuildConfiguration(config, name, toolChain,
launchMode);
configManager.addBuildConfiguration(config, autotoolsConfig);
return autotoolsConfig;
// Create Core Build configuration
ICBuildConfiguration cBuildConfig = new AutotoolsBuildConfiguration(buildConfig, cBuildConfigName, toolChain,
launchMode, launchTarget);

// Add the Platform Build/Core Build configuration combination
cBuildConfigManager.addBuildConfiguration(buildConfig, cBuildConfig);
return cBuildConfig;
}

}
5 changes: 3 additions & 2 deletions build/org.eclipse.cdt.make.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.make.core; singleton:=true
Bundle-Version: 7.6.600.qualifier
Bundle-Version: 8.0.0.qualifier
Bundle-Activator: org.eclipse.cdt.make.core.MakeCorePlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Expand All @@ -26,7 +26,8 @@ Require-Bundle: org.eclipse.cdt.core;bundle-version="[9.0.0,10.0.0)",
org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
org.eclipse.core.filesystem;bundle-version="1.2.0",
org.eclipse.tools.templates.core;bundle-version="2.0.0",
org.eclipse.tools.templates.freemarker;bundle-version="2.0.0"
org.eclipse.tools.templates.freemarker;bundle-version="2.0.0",
org.eclipse.launchbar.core;bundle-version="[3.0.0,4.0.0)"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-17
Automatic-Module-Name: org.eclipse.cdt.make.core
Loading
Loading