mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Make CMake support more resilient.
Add c++ to GCCToolChain since that's what CMake uses by default for MinGW. Synchronize the scannerInfoCache loading. Double check for toolchain files at load time for configs that don't have any. Change-Id: I8071e285ce5deb1448cabd45f394c62fe6a7f2f4
This commit is contained in:
parent
736d7b5955
commit
416fed4d94
4 changed files with 23 additions and 10 deletions
|
@ -474,7 +474,8 @@ public class GCCToolChain extends PlatformObject implements IToolChain {
|
|||
cppCommand = null;
|
||||
if (cCommand.contains("gcc")) { //$NON-NLS-1$
|
||||
cppCommand = cCommand.replace("gcc", "g++"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
commands = new String[] { cCommand, cppCommand };
|
||||
// Also recognize c++ as an alias for g++
|
||||
commands = new String[] { cCommand, cppCommand, cCommand.replace("gcc", "c++") }; //$NON-NLS-1$ //$NON-NLS-2$
|
||||
} else if (cCommand.contains("clang")) { //$NON-NLS-1$
|
||||
cppCommand = cCommand.replace("clang", "clang++"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
commands = new String[] { cCommand, cppCommand };
|
||||
|
|
|
@ -58,6 +58,16 @@ public class CMakeBuildConfiguration extends CBuildConfiguration {
|
|||
if (!pathStr.isEmpty()) {
|
||||
Path path = Paths.get(pathStr);
|
||||
toolChainFile = manager.getToolChainFile(path);
|
||||
} else {
|
||||
toolChainFile = manager.getToolChainFileFor(getToolChain());
|
||||
if (toolChainFile != null) {
|
||||
settings.put(TOOLCHAIN_FILE, toolChainFile.getPath().toString());
|
||||
try {
|
||||
settings.flush();
|
||||
} catch (BackingStoreException e) {
|
||||
Activator.log(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -70,6 +80,10 @@ public class CMakeBuildConfiguration extends CBuildConfiguration {
|
|||
super(config, name, toolChain, launchMode);
|
||||
this.toolChainFile = toolChainFile;
|
||||
|
||||
saveToolChainFile();
|
||||
}
|
||||
|
||||
private void saveToolChainFile() {
|
||||
if (toolChainFile != null) {
|
||||
Preferences settings = getSettings();
|
||||
settings.put(TOOLCHAIN_FILE, toolChainFile.getPath().toString());
|
||||
|
@ -81,10 +95,6 @@ public class CMakeBuildConfiguration extends CBuildConfiguration {
|
|||
}
|
||||
}
|
||||
|
||||
public ICMakeToolChainFile getToolChainFile() {
|
||||
return toolChainFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IProject[] build(int kind, Map<String, String> args, IConsole console, IProgressMonitor monitor)
|
||||
throws CoreException {
|
||||
|
|
|
@ -83,10 +83,12 @@ public class CMakeBuildConfigurationProvider implements ICBuildConfigurationProv
|
|||
if (arch != null && !arch.isEmpty()) {
|
||||
properties.put(IToolChain.ATTR_ARCH, arch);
|
||||
}
|
||||
ICMakeToolChainFile file = null;
|
||||
Collection<ICMakeToolChainFile> files = manager.getToolChainFilesMatching(properties);
|
||||
if (!files.isEmpty()) {
|
||||
file = files.iterator().next();
|
||||
ICMakeToolChainFile file = manager.getToolChainFileFor(toolChain);
|
||||
if (file == null) {
|
||||
Collection<ICMakeToolChainFile> files = manager.getToolChainFilesMatching(properties);
|
||||
if (!files.isEmpty()) {
|
||||
file = files.iterator().next();
|
||||
}
|
||||
}
|
||||
|
||||
// create config
|
||||
|
|
|
@ -554,7 +554,7 @@ public abstract class CBuildConfiguration extends PlatformObject
|
|||
/**
|
||||
* @since 6.1
|
||||
*/
|
||||
protected void loadScannerInfoCache() {
|
||||
protected synchronized void loadScannerInfoCache() {
|
||||
if (scannerInfoCache == null) {
|
||||
File cacheFile = getScannerInfoCacheFile();
|
||||
if (cacheFile.exists()) {
|
||||
|
|
Loading…
Add table
Reference in a new issue