/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ****************************************************************************/ #include "cmakerunconfiguration.h" #include "cmakeprojectconstants.h" #include #include #include #include #include #include #include using namespace ProjectExplorer; using namespace Utils; namespace CMakeProjectManager { namespace Internal { CMakeRunConfiguration::CMakeRunConfiguration(Target *target, Core::Id id) : RunConfiguration(target, id) { auto envAspect = addAspect(target); // Workaround for QTCREATORBUG-19354: if (HostOsInfo::isWindowsHost()) { envAspect->addModifier([target](Environment &env) { const Kit *k = target->kit(); if (const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(k)) { const QString installBinPath = qt->qmakeProperty("QT_INSTALL_BINS"); env.prependOrSetPath(installBinPath); } }); } addAspect(); addAspect(); addAspect(envAspect); addAspect(); connect(target->project(), &Project::parsingFinished, this, &CMakeRunConfiguration::updateTargetInformation); if (QtSupport::QtKitAspect::qtVersion(target->kit())) setOutputFormatter(); } void CMakeRunConfiguration::doAdditionalSetup(const RunConfigurationCreationInfo &info) { Q_UNUSED(info); updateTargetInformation(); } bool CMakeRunConfiguration::isBuildTargetValid() const { return Utils::anyOf(target()->applicationTargets(), [this](const BuildTargetInfo &bti) { return bti.buildKey == buildKey(); }); } void CMakeRunConfiguration::updateEnabledState() { if (!isBuildTargetValid()) setEnabled(false); else RunConfiguration::updateEnabledState(); } QString CMakeRunConfiguration::disabledReason() const { if (!isBuildTargetValid()) return tr("The project no longer builds the target associated with this run configuration."); return RunConfiguration::disabledReason(); } void CMakeRunConfiguration::updateTargetInformation() { BuildTargetInfo bti = buildTargetInfo(); aspect()->setExecutable(bti.targetFilePath); aspect()->setDefaultWorkingDirectory(bti.workingDirectory); aspect()->buildEnvironmentHasChanged(); auto terminalAspect = aspect(); terminalAspect->setUseTerminalHint(bti.usesTerminal); } // Factory CMakeRunConfigurationFactory::CMakeRunConfigurationFactory() { registerRunConfiguration("CMakeProjectManager.CMakeRunConfiguration."); addSupportedProjectType(CMakeProjectManager::Constants::CMAKEPROJECT_ID); addSupportedTargetDeviceType(ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE); } } // Internal } // CMakeProjectManager