CMake: Make sure source/build directories are reachable

Change-Id: Iea4547807b3a59eb9a8cb70d51d9015dbc8013e3
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Marcus Tillmanns
2022-09-14 16:04:30 +02:00
parent a917770053
commit dabd9a175e
2 changed files with 34 additions and 3 deletions

View File

@@ -852,9 +852,31 @@ void CMakeBuildSystem::ensureBuildDirectory(const BuildDirParameters &parameters
{
const FilePath bdir = parameters.buildDirectory;
if (!buildConfiguration()->createBuildDirectory())
handleParsingFailed(
tr("Failed to create build directory \"%1\".").arg(bdir.toUserOutput()));
if (!buildConfiguration()->createBuildDirectory()) {
handleParsingFailed(tr("Failed to create build directory \"%1\".").arg(bdir.toUserOutput()));
return;
}
const CMakeTool *tool = parameters.cmakeTool();
if (!tool) {
handleParsingFailed(tr("No CMake tool set up in kit."));
return;
}
if (tool->cmakeExecutable().needsDevice()) {
if (bdir.needsDevice()) {
if (bdir.scheme() != tool->cmakeExecutable().scheme()
|| bdir.host() != tool->cmakeExecutable().host()) {
handleParsingFailed(
tr("The CMake executable and the build directory are not on the same device."));
return;
}
} else if (!tool->cmakeExecutable().ensureReachable(bdir)) {
// Make sure that the build directory is available on the device.
handleParsingFailed(
tr("The remote CMake executable cannot write to the local build directory."));
}
}
}
void CMakeBuildSystem::stopParsingAndClearState()

View File

@@ -55,6 +55,15 @@ void CMakeProcess::run(const BuildDirParameters &parameters, const QStringList &
const FilePath cmakeExecutable = cmake->cmakeExecutable();
if (!cmakeExecutable.ensureReachable(parameters.sourceDirectory)
|| !cmakeExecutable.ensureReachable(parameters.buildDirectory)) {
QString msg = ::CMakeProjectManager::Internal::CMakeProcess::tr(
"The source or build directory is not reachable by the CMake executable.");
BuildSystem::appendBuildSystemOutput(msg + '\n');
emit finished();
return;
}
const FilePath sourceDirectory = parameters.sourceDirectory.onDevice(cmakeExecutable);
const FilePath buildDirectory = parameters.buildDirectory.onDevice(cmakeExecutable);