Files
qt-creator/src/plugins/qnx/qnxqtversion.cpp

205 lines
5.5 KiB
C++
Raw Normal View History

/****************************************************************************
**
** Copyright (C) 2016 BlackBerry Limited. All rights reserved.
** Contact: KDAB (info@kdab.com)
**
** 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 "qnxqtversion.h"
#include "qnxbaseqtconfigwidget.h"
#include "qnxconstants.h"
#include "qnxutils.h"
#include <coreplugin/featureprovider.h>
#include <proparser/profileevaluator.h>
#include <qtsupport/qtsupportconstants.h>
#include <utils/environment.h>
#include <utils/hostosinfo.h>
#include <QDir>
using namespace ProjectExplorer;
namespace Qnx {
namespace Internal {
static char SDP_PATH_KEY[] = "SDKPath";
QnxQtVersion::QnxQtVersion() = default;
QString QnxQtVersion::description() const
{
//: Qt Version is meant for QNX
return QCoreApplication::translate("Qnx::Internal::QnxQtVersion", "QNX %1")
.arg(QnxUtils::cpuDirShortDescription(cpuDir()));
}
QSet<Core::Id> QnxQtVersion::availableFeatures() const
{
QSet<Core::Id> features = QtSupport::BaseQtVersion::availableFeatures();
features.insert(Constants::QNX_QNX_FEATURE);
features.remove(QtSupport::Constants::FEATURE_QT_CONSOLE);
features.remove(QtSupport::Constants::FEATURE_QT_WEBKIT);
return features;
}
QSet<Core::Id> QnxQtVersion::targetDeviceTypes() const
{
return {Constants::QNX_QNX_OS_TYPE};
}
QString QnxQtVersion::qnxHost() const
{
if (!m_environmentUpToDate)
updateEnvironment();
foreach (const Utils::EnvironmentItem &item, m_qnxEnv) {
if (item.name == QLatin1String(Constants::QNX_HOST_KEY))
return item.value;
}
return QString();
}
Utils::FilePath QnxQtVersion::qnxTarget() const
{
if (!m_environmentUpToDate)
updateEnvironment();
foreach (const Utils::EnvironmentItem &item, m_qnxEnv) {
if (item.name == QLatin1String(Constants::QNX_TARGET_KEY))
return Utils::FilePath::fromUserInput(item.value);
}
return Utils::FilePath();
}
QString QnxQtVersion::cpuDir() const
{
ensureMkSpecParsed();
return m_cpuDir;
}
void QnxQtVersion::parseMkSpec(ProFileEvaluator *evaluator) const
{
m_cpuDir = evaluator->value(QLatin1String("QNX_CPUDIR"));
BaseQtVersion::parseMkSpec(evaluator);
}
QVariantMap QnxQtVersion::toMap() const
{
QVariantMap result = BaseQtVersion::toMap();
result.insert(QLatin1String(SDP_PATH_KEY), sdpPath());
return result;
}
void QnxQtVersion::fromMap(const QVariantMap &map)
{
BaseQtVersion::fromMap(map);
setSdpPath(QDir::fromNativeSeparators(map.value(QLatin1String(SDP_PATH_KEY)).toString()));
}
ProjectExplorer::Abis QnxQtVersion::detectQtAbis() const
{
ensureMkSpecParsed();
return QnxUtils::convertAbis(BaseQtVersion::detectQtAbis());
}
void QnxQtVersion::addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const
{
QtSupport::BaseQtVersion::addToEnvironment(k, env);
updateEnvironment();
env.modify(m_qnxEnv);
env.prependOrSetLibrarySearchPath(libraryPath().toString());
}
Utils::Environment QnxQtVersion::qmakeRunEnvironment() const
{
if (!sdpPath().isEmpty())
updateEnvironment();
Utils::Environment env = Utils::Environment::systemEnvironment();
env.modify(m_qnxEnv);
return env;
}
QtSupport::QtConfigWidget *QnxQtVersion::createConfigurationWidget() const
{
return new QnxBaseQtConfigWidget(const_cast<QnxQtVersion *>(this));
}
bool QnxQtVersion::isValid() const
{
return QtSupport::BaseQtVersion::isValid() && !sdpPath().isEmpty();
}
QString QnxQtVersion::invalidReason() const
{
if (sdpPath().isEmpty())
return QCoreApplication::translate("Qnx::Internal::QnxQtVersion",
"No SDP path was set up.");
return QtSupport::BaseQtVersion::invalidReason();
}
QString QnxQtVersion::sdpPath() const
{
return m_sdpPath;
}
void QnxQtVersion::setSdpPath(const QString &sdpPath)
{
if (m_sdpPath == sdpPath)
return;
m_sdpPath = sdpPath;
m_environmentUpToDate = false;
}
void QnxQtVersion::updateEnvironment() const
{
if (!m_environmentUpToDate) {
m_qnxEnv = environment();
m_environmentUpToDate = true;
}
}
Utils::EnvironmentItems QnxQtVersion::environment() const
{
return QnxUtils::qnxEnvironment(sdpPath());
}
// Factory
QnxQtVersionFactory::QnxQtVersionFactory()
{
setQtVersionCreator([] { return new QnxQtVersion; });
setSupportedType(Constants::QNX_QNX_QT);
setPriority(50);
setRestrictionChecker([](const SetupData &setup) { return setup.isQnx; });
}
} // namespace Internal
} // namespace Qnx