From afa1d0d0e355cf4bbe246d86b612a2bc56c7385d Mon Sep 17 00:00:00 2001 From: Craig Scott Date: Sat, 1 Jun 2024 17:34:27 +1000 Subject: [PATCH] CMakeGUI: Sanitize source and build dirs the same as command line This makes a difference when projects compare things like CMAKE_SOURCE_DIR with CMAKE_CURRENT_SOURCE_DIR and the source directory has a trailing slash in the GUI. The command line cmake invocation cleans the paths at the beginning, so such comparisons return true. But the GUI currently passes the paths unmodified, so such comparisons return false. Change the logic to sanitize the paths used through the GUI in the same way that the command line invocation does. Fixes: #21421 --- Source/QtDialog/QCMake.cxx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Source/QtDialog/QCMake.cxx b/Source/QtDialog/QCMake.cxx index 8d63f6d4b6..9a874166ec 100644 --- a/Source/QtDialog/QCMake.cxx +++ b/Source/QtDialog/QCMake.cxx @@ -238,10 +238,16 @@ void QCMake::configure() #ifdef Q_OS_WIN UINT lastErrorMode = SetErrorMode(0); #endif + // Apply the same transformations that the command-line invocation does + auto sanitizePath = [](QString const& value) -> std::string { + std::string path = cmSystemTools::CollapseFullPath(value.toStdString()); + cmSystemTools::ConvertToUnixSlashes(path); + return path; + }; - this->CMakeInstance->SetHomeDirectory(this->SourceDirectory.toStdString()); + this->CMakeInstance->SetHomeDirectory(sanitizePath(this->SourceDirectory)); this->CMakeInstance->SetHomeOutputDirectory( - this->BinaryDirectory.toStdString()); + sanitizePath(this->BinaryDirectory)); this->CMakeInstance->SetGlobalGenerator( this->CMakeInstance->CreateGlobalGenerator( this->Generator.toStdString()));