1
0
Fork 0
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:
Fabrizio Iannetti 2019-04-14 13:51:43 +02:00
parent cbf526193a
commit 2006e6cdf1
3 changed files with 27 additions and 0 deletions

View file

@ -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?
}
} }

View file

@ -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;

View file

@ -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.