mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-22 14:12:10 +02:00
Bug 546409 - CMake configure failing in corner cases
- With Makefiles generator run configure step if no Makefile exists - Clean build dir before running the configure step Change-Id: I3514835920a452e724e04b19f64d4a74fc4f3c2c Signed-off-by: Fabrizio Iannetti <fabrizio.iannetti@gmail.com>
This commit is contained in:
parent
cbf526193a
commit
2006e6cdf1
3 changed files with 27 additions and 0 deletions
|
@ -145,12 +145,20 @@ public class CMakeBuildConfiguration extends CBuildConfiguration {
|
||||||
case "Ninja": //$NON-NLS-1$
|
case "Ninja": //$NON-NLS-1$
|
||||||
runCMake = !Files.exists(buildDir.resolve("build.ninja")); //$NON-NLS-1$
|
runCMake = !Files.exists(buildDir.resolve("build.ninja")); //$NON-NLS-1$
|
||||||
break;
|
break;
|
||||||
|
case "Unix Makefiles": //$NON-NLS-1$
|
||||||
|
runCMake = !Files.exists(buildDir.resolve("Makefile")); //$NON-NLS-1$
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
runCMake = !Files.exists(buildDir.resolve("CMakeFiles")); //$NON-NLS-1$
|
runCMake = !Files.exists(buildDir.resolve("CMakeFiles")); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
if (runCMake) { // $NON-NLS-1$
|
if (runCMake) { // $NON-NLS-1$
|
||||||
|
|
||||||
|
console.getOutputStream().write(String.format(Messages.CMakeBuildConfiguration_Configuring, buildDir));
|
||||||
|
// clean output to make sure there is no content
|
||||||
|
// incompatible with current settings (cmake config would fail)
|
||||||
|
cleanBuildDirectory(buildDir);
|
||||||
|
|
||||||
List<String> command = new ArrayList<>();
|
List<String> command = new ArrayList<>();
|
||||||
|
|
||||||
command.add("cmake"); //$NON-NLS-1$
|
command.add("cmake"); //$NON-NLS-1$
|
||||||
|
@ -339,4 +347,21 @@ public class CMakeBuildConfiguration extends CBuildConfiguration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void cleanDirectory(Path dir) throws IOException {
|
||||||
|
Path[] files = Files.list(dir).toArray(Path[]::new);
|
||||||
|
for (Path file : files) {
|
||||||
|
if (Files.isDirectory(file))
|
||||||
|
cleanDirectory(file);
|
||||||
|
else
|
||||||
|
Files.delete(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cleanBuildDirectory(Path buildDir) throws IOException {
|
||||||
|
if (!Files.exists(buildDir))
|
||||||
|
return;
|
||||||
|
if (Files.isDirectory(buildDir))
|
||||||
|
cleanDirectory(buildDir);
|
||||||
|
// TODO: not a directory should we do something?
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ public class Messages extends NLS {
|
||||||
public static String CMakeBuildConfiguration_BuildingComplete;
|
public static String CMakeBuildConfiguration_BuildingComplete;
|
||||||
public static String CMakeBuildConfiguration_BuildComplete;
|
public static String CMakeBuildConfiguration_BuildComplete;
|
||||||
public static String CMakeBuildConfiguration_Cleaning;
|
public static String CMakeBuildConfiguration_Cleaning;
|
||||||
|
public static String CMakeBuildConfiguration_Configuring;
|
||||||
public static String CMakeBuildConfiguration_NotFound;
|
public static String CMakeBuildConfiguration_NotFound;
|
||||||
public static String CMakeBuildConfiguration_NoToolchainFile;
|
public static String CMakeBuildConfiguration_NoToolchainFile;
|
||||||
public static String CMakeBuildConfiguration_ProcCompCmds;
|
public static String CMakeBuildConfiguration_ProcCompCmds;
|
||||||
|
|
|
@ -12,6 +12,7 @@ CMakeBuildConfiguration_Building=Building %s
|
||||||
CMakeBuildConfiguration_BuildingIn=Building in: %s\n
|
CMakeBuildConfiguration_BuildingIn=Building in: %s\n
|
||||||
CMakeBuildConfiguration_BuildingComplete=Build complete (%d errors, %d warnings): %s\n
|
CMakeBuildConfiguration_BuildingComplete=Build complete (%d errors, %d warnings): %s\n
|
||||||
CMakeBuildConfiguration_BuildComplete=Build complete\n
|
CMakeBuildConfiguration_BuildComplete=Build complete\n
|
||||||
|
CMakeBuildConfiguration_Configuring=Configuring in: %s\n
|
||||||
CMakeBuildConfiguration_Cleaning=Cleaning %s
|
CMakeBuildConfiguration_Cleaning=Cleaning %s
|
||||||
CMakeBuildConfiguration_NotFound=CMakeFiles not found. Assuming clean.
|
CMakeBuildConfiguration_NotFound=CMakeFiles not found. Assuming clean.
|
||||||
CMakeBuildConfiguration_NoToolchainFile=No CMake toolchain file found for this target.
|
CMakeBuildConfiguration_NoToolchainFile=No CMake toolchain file found for this target.
|
||||||
|
|
Loading…
Add table
Reference in a new issue