From f97d9e51c083814a8b6d5e9574daafabb2890f81 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 14 Jun 2023 15:59:25 +0200 Subject: [PATCH] CMake: Use QtC temporary dir for staging directory for local builds For builds on the local host, use the Qt Creator temporary directory as the default "staging" directory. This is a "nicer" directory on Windows and is also cleared automatically (at Qt Creator shutdown), which is not true for "/tmp". Amends 4753b658bb79a07dd19df27e2b6ddbcf80502bb2 Change-Id: Ia6dc0d76fb2d97eb7ec931981df057ec83553e69 Reviewed-by: Cristian Adam --- src/plugins/cmakeprojectmanager/cmakebuildstep.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp index 783468422dd..d8c51fcbd3d 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp @@ -159,7 +159,7 @@ Qt::ItemFlags CMakeTargetItem::flags(int) const // CMakeBuildStep -static QString initialStagingDir() +static QString initialStagingDir(Kit *kit) { // Avoid actual file accesses. auto rg = QRandomGenerator::global(); @@ -167,6 +167,9 @@ static QString initialStagingDir() char buf[sizeof(rand)]; memcpy(&buf, &rand, sizeof(rand)); const QByteArray ba = QByteArray(buf, sizeof(buf)).toHex(); + IDeviceConstPtr buildDevice = BuildDeviceKitAspect::device(kit); + if (buildDevice && buildDevice->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) + return TemporaryDirectory::masterDirectoryPath() + "/staging-" + ba; return QString::fromUtf8("/tmp/Qt-Creator-staging-" + ba); } @@ -200,7 +203,7 @@ CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl, Id id) : m_stagingDir = addAspect(); m_stagingDir->setSettingsKey(STAGING_DIR_KEY); m_stagingDir->setLabelText(Tr::tr("Staging directory:")); - m_stagingDir->setDefaultValue(initialStagingDir()); + m_stagingDir->setDefaultValue(initialStagingDir(kit())); Kit *kit = buildConfiguration()->kit(); if (CMakeBuildConfiguration::isIos(kit)) {