forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/master' into 4.11
Change-Id: Ia99614078444b3b7e1e8473b6d2708f21e89e315
This commit is contained in:
@@ -212,7 +212,7 @@ bool AndroidBuildApkStep::init()
|
|||||||
if (!AbstractProcessStep::init())
|
if (!AbstractProcessStep::init())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
QString command = version->qmakeProperty("QT_HOST_BINS");
|
QString command = version->hostBinPath().toString();
|
||||||
if (!command.endsWith('/'))
|
if (!command.endsWith('/'))
|
||||||
command += '/';
|
command += '/';
|
||||||
command += "androiddeployqt";
|
command += "androiddeployqt";
|
||||||
@@ -510,7 +510,6 @@ QString AndroidBuildApkStep::buildTargetSdk() const
|
|||||||
void AndroidBuildApkStep::setBuildTargetSdk(const QString &sdk)
|
void AndroidBuildApkStep::setBuildTargetSdk(const QString &sdk)
|
||||||
{
|
{
|
||||||
m_buildTargetSdk = sdk;
|
m_buildTargetSdk = sdk;
|
||||||
AndroidManager::updateGradleProperties(target());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant AndroidBuildApkStep::data(Core::Id id) const
|
QVariant AndroidBuildApkStep::data(Core::Id id) const
|
||||||
|
@@ -104,6 +104,7 @@ QWidget *AndroidBuildApkWidget::createApplicationGroup()
|
|||||||
connect(targetSDKComboBox, cbActivated, this, [this, targetSDKComboBox](int idx) {
|
connect(targetSDKComboBox, cbActivated, this, [this, targetSDKComboBox](int idx) {
|
||||||
const QString sdk = targetSDKComboBox->itemText(idx);
|
const QString sdk = targetSDKComboBox->itemText(idx);
|
||||||
m_step->setBuildTargetSdk(sdk);
|
m_step->setBuildTargetSdk(sdk);
|
||||||
|
AndroidManager::updateGradleProperties(step()->target(), QString()); // FIXME: Use real key.
|
||||||
});
|
});
|
||||||
|
|
||||||
auto hbox = new QHBoxLayout(group);
|
auto hbox = new QHBoxLayout(group);
|
||||||
|
@@ -240,7 +240,7 @@ bool AndroidDeployQtStep::init()
|
|||||||
emit addOutput(tr("Cannot find the androiddeploy Json file."), OutputFormat::Stderr);
|
emit addOutput(tr("Cannot find the androiddeploy Json file."), OutputFormat::Stderr);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
m_command = FilePath::fromString(version->qmakeProperty("QT_HOST_BINS"));
|
m_command = version->hostBinPath();
|
||||||
if (m_command.isEmpty()) {
|
if (m_command.isEmpty()) {
|
||||||
emit addOutput(tr("Cannot find the androiddeployqt tool."), OutputFormat::Stderr);
|
emit addOutput(tr("Cannot find the androiddeployqt tool."), OutputFormat::Stderr);
|
||||||
return false;
|
return false;
|
||||||
|
@@ -238,9 +238,8 @@ int AndroidManager::minimumSDK(const ProjectExplorer::Kit *kit)
|
|||||||
int minSDKVersion = -1;
|
int minSDKVersion = -1;
|
||||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(kit);
|
QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(kit);
|
||||||
if (version && version->targetDeviceTypes().contains(Constants::ANDROID_DEVICE_TYPE)) {
|
if (version && version->targetDeviceTypes().contains(Constants::ANDROID_DEVICE_TYPE)) {
|
||||||
Utils::FilePath stockManifestFilePath =
|
Utils::FilePath stockManifestFilePath = Utils::FilePath::fromUserInput(
|
||||||
Utils::FilePath::fromUserInput(version->qmakeProperty("QT_INSTALL_PREFIX") +
|
version->prefix().toString() + "/src/android/templates/AndroidManifest.xml");
|
||||||
QLatin1String("/src/android/templates/AndroidManifest.xml"));
|
|
||||||
QDomDocument doc;
|
QDomDocument doc;
|
||||||
if (openXmlFile(doc, stockManifestFilePath)) {
|
if (openXmlFile(doc, stockManifestFilePath)) {
|
||||||
minSDKVersion = parseMinSdk(doc.documentElement());
|
minSDKVersion = parseMinSdk(doc.documentElement());
|
||||||
@@ -276,7 +275,7 @@ QJsonObject AndroidManager::deploymentSettings(const Target *target)
|
|||||||
return {};
|
return {};
|
||||||
QJsonObject settings;
|
QJsonObject settings;
|
||||||
settings["_description"] = "This file is generated by QtCreator to be read by androiddeployqt and should not be modified by hand.";
|
settings["_description"] = "This file is generated by QtCreator to be read by androiddeployqt and should not be modified by hand.";
|
||||||
settings["qt"] = qt->qmakeProperty("QT_INSTALL_PREFIX");
|
settings["qt"] = qt->prefix().toString();
|
||||||
settings["ndk"] = AndroidConfigurations::currentConfig().ndkLocation().toString();
|
settings["ndk"] = AndroidConfigurations::currentConfig().ndkLocation().toString();
|
||||||
settings["sdk"] = AndroidConfigurations::currentConfig().sdkLocation().toString();
|
settings["sdk"] = AndroidConfigurations::currentConfig().sdkLocation().toString();
|
||||||
settings["stdcpp-path"] = AndroidConfigurations::currentConfig().toolchainPath().pathAppended("sysroot/usr/lib/").toString();
|
settings["stdcpp-path"] = AndroidConfigurations::currentConfig().toolchainPath().pathAppended("sysroot/usr/lib/").toString();
|
||||||
@@ -683,13 +682,22 @@ static bool mergeGradleProperties(const QString &path, GradleProperties properti
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool AndroidManager::updateGradleProperties(ProjectExplorer::Target *target)
|
bool AndroidManager::updateGradleProperties(ProjectExplorer::Target *target, const QString &buildKey)
|
||||||
{
|
{
|
||||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit());
|
QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit());
|
||||||
if (!version)
|
if (!version)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const ProjectNode *node = currentProjectNode(target);
|
QString key = buildKey;
|
||||||
|
if (key.isEmpty()) {
|
||||||
|
// FIXME: This case is triggered from AndroidBuildApkWidget::createApplicationGroup
|
||||||
|
// and should be avoided.
|
||||||
|
if (RunConfiguration *rc = target->activeRunConfiguration())
|
||||||
|
key = rc->buildKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
QTC_ASSERT(!key.isEmpty(), return false);
|
||||||
|
const ProjectNode *node = target->project()->findNodeForBuildKey(key);
|
||||||
if (!node)
|
if (!node)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -719,8 +727,8 @@ bool AndroidManager::updateGradleProperties(ProjectExplorer::Target *target)
|
|||||||
|
|
||||||
const QString gradlePropertiesPath = packageSourceDir.pathAppended("gradle.properties").toString();
|
const QString gradlePropertiesPath = packageSourceDir.pathAppended("gradle.properties").toString();
|
||||||
GradleProperties gradleProperties = readGradleProperties(gradlePropertiesPath);
|
GradleProperties gradleProperties = readGradleProperties(gradlePropertiesPath);
|
||||||
gradleProperties["qt5AndroidDir"] = version->qmakeProperty("QT_INSTALL_PREFIX")
|
gradleProperties["qt5AndroidDir"] = (version->prefix().toString() + "/src/android/java")
|
||||||
.append(QLatin1String("/src/android/java")).toLocal8Bit();
|
.toLocal8Bit();
|
||||||
gradleProperties["buildDir"] = ".build";
|
gradleProperties["buildDir"] = ".build";
|
||||||
gradleProperties["androidCompileSdkVersion"] = buildTargetSDK(target).split(QLatin1Char('-')).last().toLocal8Bit();
|
gradleProperties["androidCompileSdkVersion"] = buildTargetSDK(target).split(QLatin1Char('-')).last().toLocal8Bit();
|
||||||
if (gradleProperties["androidBuildToolsVersion"].isEmpty()) {
|
if (gradleProperties["androidBuildToolsVersion"].isEmpty()) {
|
||||||
|
@@ -117,7 +117,7 @@ public:
|
|||||||
static bool checkCertificatePassword(const QString &keystorePath, const QString &keystorePasswd, const QString &alias, const QString &certificatePasswd);
|
static bool checkCertificatePassword(const QString &keystorePath, const QString &keystorePasswd, const QString &alias, const QString &certificatePasswd);
|
||||||
static bool checkCertificateExists(const QString &keystorePath, const QString &keystorePasswd,
|
static bool checkCertificateExists(const QString &keystorePath, const QString &keystorePasswd,
|
||||||
const QString &alias);
|
const QString &alias);
|
||||||
static bool updateGradleProperties(ProjectExplorer::Target *target);
|
static bool updateGradleProperties(ProjectExplorer::Target *target, const QString &buildKey);
|
||||||
static int findApiLevel(const Utils::FilePath &platformPath);
|
static int findApiLevel(const Utils::FilePath &platformPath);
|
||||||
|
|
||||||
static QProcess *runAdbCommandDetached(const QStringList &args, QString *err = nullptr,
|
static QProcess *runAdbCommandDetached(const QStringList &args, QString *err = nullptr,
|
||||||
|
@@ -98,34 +98,6 @@ public:
|
|||||||
class AndroidPluginPrivate : public QObject
|
class AndroidPluginPrivate : public QObject
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AndroidPluginPrivate()
|
|
||||||
{
|
|
||||||
connect(SessionManager::instance(), &SessionManager::projectAdded, this, [=](Project *project) {
|
|
||||||
for (Target *target : project->targets())
|
|
||||||
handleNewTarget(target);
|
|
||||||
connect(project, &Project::addedTarget, this, &AndroidPluginPrivate::handleNewTarget);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void handleNewTarget(Target *target)
|
|
||||||
{
|
|
||||||
if (DeviceTypeKitAspect::deviceTypeId(target->kit()) != Android::Constants::ANDROID_DEVICE_TYPE)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (BuildConfiguration *bc : target->buildConfigurations())
|
|
||||||
handleNewBuildConfiguration(bc);
|
|
||||||
|
|
||||||
connect(target, &Target::addedBuildConfiguration,
|
|
||||||
this, &AndroidPluginPrivate::handleNewBuildConfiguration);
|
|
||||||
}
|
|
||||||
|
|
||||||
void handleNewBuildConfiguration(BuildConfiguration *bc)
|
|
||||||
{
|
|
||||||
connect(bc->target()->project(), &Project::parsingFinished, bc, [bc] {
|
|
||||||
AndroidManager::updateGradleProperties(bc->target());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
AndroidConfigurations androidConfiguration;
|
AndroidConfigurations androidConfiguration;
|
||||||
AndroidSettingsPage settingsPage;
|
AndroidSettingsPage settingsPage;
|
||||||
AndroidDeployQtStepFactory deployQtStepFactory;
|
AndroidDeployQtStepFactory deployQtStepFactory;
|
||||||
|
@@ -134,6 +134,7 @@ AndroidRunConfiguration::AndroidRunConfiguration(Target *target, Core::Id id)
|
|||||||
|
|
||||||
connect(target->project(), &Project::parsingFinished, this, [this] {
|
connect(target->project(), &Project::parsingFinished, this, [this] {
|
||||||
updateTargetInformation();
|
updateTargetInformation();
|
||||||
|
AndroidManager::updateGradleProperties(this->target(), buildKey());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -322,28 +322,26 @@ void CreateAndroidManifestWizard::createAndroidTemplateFiles()
|
|||||||
if (!version)
|
if (!version)
|
||||||
return;
|
return;
|
||||||
if (version->qtVersion() < QtSupport::QtVersionNumber(5, 4, 0)) {
|
if (version->qtVersion() < QtSupport::QtVersionNumber(5, 4, 0)) {
|
||||||
const QString src(version->qmakeProperty("QT_INSTALL_PREFIX")
|
const QString src = version->prefix().toString() + "/src/android/java/AndroidManifest.xml";
|
||||||
.append(QLatin1String("/src/android/java/AndroidManifest.xml")));
|
|
||||||
FileUtils::copyRecursively(FilePath::fromString(src),
|
FileUtils::copyRecursively(FilePath::fromString(src),
|
||||||
FilePath::fromString(m_directory + QLatin1String("/AndroidManifest.xml")),
|
FilePath::fromString(m_directory + QLatin1String("/AndroidManifest.xml")),
|
||||||
nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);});
|
nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);});
|
||||||
} else {
|
} else {
|
||||||
const QString src(version->qmakeProperty("QT_INSTALL_PREFIX")
|
const QString src = version->prefix().toString() + "/src/android/templates";
|
||||||
.append(QLatin1String("/src/android/templates")));
|
|
||||||
|
|
||||||
FileUtils::copyRecursively(FilePath::fromString(src),
|
FileUtils::copyRecursively(FilePath::fromString(src),
|
||||||
FilePath::fromString(m_directory),
|
FilePath::fromString(m_directory),
|
||||||
nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);});
|
nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);});
|
||||||
|
|
||||||
if (m_copyGradle) {
|
if (m_copyGradle) {
|
||||||
FilePath gradlePath = FilePath::fromString(version->qmakeProperty("QT_INSTALL_PREFIX").append(QLatin1String("/src/3rdparty/gradle")));
|
FilePath gradlePath = version->prefix().pathAppended("src/3rdparty/gradle");
|
||||||
if (!gradlePath.exists())
|
if (!gradlePath.exists())
|
||||||
gradlePath = AndroidConfigurations::currentConfig().sdkLocation().pathAppended("/tools/templates/gradle/wrapper");
|
gradlePath = AndroidConfigurations::currentConfig().sdkLocation().pathAppended("/tools/templates/gradle/wrapper");
|
||||||
FileUtils::copyRecursively(gradlePath, FilePath::fromString(m_directory),
|
FileUtils::copyRecursively(gradlePath, FilePath::fromString(m_directory),
|
||||||
nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);});
|
nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);});
|
||||||
}
|
}
|
||||||
|
|
||||||
AndroidManager::updateGradleProperties(m_target);
|
AndroidManager::updateGradleProperties(m_target, m_buildKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -292,10 +292,8 @@ const QList<BuildTargetInfo> CMakeBuildConfiguration::appTargets() const
|
|||||||
bti.runEnvModifier = [this](Environment &env, bool) {
|
bti.runEnvModifier = [this](Environment &env, bool) {
|
||||||
if (HostOsInfo::isWindowsHost()) {
|
if (HostOsInfo::isWindowsHost()) {
|
||||||
const Kit *k = target()->kit();
|
const Kit *k = target()->kit();
|
||||||
if (const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(k)) {
|
if (const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(k))
|
||||||
const QString installBinPath = qt->qmakeProperty("QT_INSTALL_BINS");
|
env.prependOrSetPath(qt->binPath().toString());
|
||||||
env.prependOrSetPath(installBinPath);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1001,7 +1001,7 @@ Tasks CMakeConfigurationKitAspect::validate(const Kit *k) const
|
|||||||
Utils::FilePath(), -1, Core::Id(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM));
|
Utils::FilePath(), -1, Core::Id(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (version && !qtInstallDirs.contains(version->qmakeProperty("QT_INSTALL_PREFIX")) && !isQt4) {
|
if (version && !qtInstallDirs.contains(version->prefix().toString()) && !isQt4) {
|
||||||
if (version->isValid()) {
|
if (version->isValid()) {
|
||||||
result << Task(Task::Warning, tr("CMake configuration has no CMAKE_PREFIX_PATH set "
|
result << Task(Task::Warning, tr("CMake configuration has no CMAKE_PREFIX_PATH set "
|
||||||
"that points to the kit Qt version."),
|
"that points to the kit Qt version."),
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
add_qtc_plugin(CtfVisualizer
|
add_qtc_plugin(CtfVisualizer
|
||||||
DEPENDS Tracing Qt5::QuickWidgets
|
DEPENDS Tracing Qt5::QuickWidgets
|
||||||
INCLUDES ${PROJECT_SOURCE_DIR}/src
|
INCLUDES ${PROJECT_SOURCE_DIR}/src
|
||||||
PLUGIN_DEPENDS Core Debugger ProjectExplorer QtSupport
|
PLUGIN_DEPENDS Core Debugger ProjectExplorer
|
||||||
SOURCES
|
SOURCES
|
||||||
ctfstatisticsmodel.cpp
|
ctfstatisticsmodel.cpp
|
||||||
ctfstatisticsview.cpp
|
ctfstatisticsview.cpp
|
||||||
|
@@ -5,7 +5,6 @@ QtcPlugin {
|
|||||||
|
|
||||||
Depends { name: "Core" }
|
Depends { name: "Core" }
|
||||||
Depends { name: "Debugger" }
|
Depends { name: "Debugger" }
|
||||||
Depends { name: "QtSupport" }
|
|
||||||
Depends { name: "Tracing" }
|
Depends { name: "Tracing" }
|
||||||
Depends { name: "Utils" }
|
Depends { name: "Utils" }
|
||||||
|
|
||||||
|
@@ -5,5 +5,4 @@ QTC_LIB_DEPENDS += \
|
|||||||
tracing
|
tracing
|
||||||
|
|
||||||
QTC_PLUGIN_DEPENDS += \
|
QTC_PLUGIN_DEPENDS += \
|
||||||
debugger \
|
debugger
|
||||||
qtsupport
|
|
||||||
|
@@ -106,7 +106,7 @@ void GenericBuildConfiguration::addToEnvironment(Utils::Environment &env) const
|
|||||||
prependCompilerPathToEnvironment(target()->kit(), env);
|
prependCompilerPathToEnvironment(target()->kit(), env);
|
||||||
const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(target()->kit());
|
const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(target()->kit());
|
||||||
if (qt)
|
if (qt)
|
||||||
env.prependOrSetPath(qt->binPath().toString());
|
env.prependOrSetPath(qt->hostBinPath().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -300,7 +300,7 @@ QStringList PerfDataReader::collectArguments(const QString &executableDirPath,
|
|||||||
arguments << QLatin1String("--extra") << QString::fromLatin1("%1%5%2%5%3%5%4")
|
arguments << QLatin1String("--extra") << QString::fromLatin1("%1%5%2%5%3%5%4")
|
||||||
.arg(QDir::toNativeSeparators(qt->libraryPath().toString()))
|
.arg(QDir::toNativeSeparators(qt->libraryPath().toString()))
|
||||||
.arg(QDir::toNativeSeparators(qt->pluginPath().toString()))
|
.arg(QDir::toNativeSeparators(qt->pluginPath().toString()))
|
||||||
.arg(QDir::toNativeSeparators(qt->binPath().toString()))
|
.arg(QDir::toNativeSeparators(qt->hostBinPath().toString()))
|
||||||
.arg(QDir::toNativeSeparators(qt->qmlPath().toString()))
|
.arg(QDir::toNativeSeparators(qt->qmlPath().toString()))
|
||||||
.arg(QDir::listSeparator());
|
.arg(QDir::listSeparator());
|
||||||
}
|
}
|
||||||
|
@@ -186,7 +186,7 @@ bool QbsProjectImporter::matchKit(void *directoryData, const Kit *k) const
|
|||||||
if (!bgData->qtBinPath.isEmpty()) {
|
if (!bgData->qtBinPath.isEmpty()) {
|
||||||
if (!qtVersion)
|
if (!qtVersion)
|
||||||
return false;
|
return false;
|
||||||
if (bgData->qtBinPath != qtVersion->binPath())
|
if (bgData->qtBinPath != qtVersion->hostBinPath())
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (bgData->sysroot != SysRootKitAspect::sysRoot(k))
|
if (bgData->sysroot != SysRootKitAspect::sysRoot(k))
|
||||||
|
@@ -507,8 +507,8 @@ QString QmakeBuildConfiguration::extractSpecFromArguments(QString *args,
|
|||||||
if (parsedSpec.isEmpty())
|
if (parsedSpec.isEmpty())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
FilePath baseMkspecDir = FilePath::fromUserInput(
|
FilePath baseMkspecDir = FilePath::fromUserInput(version->hostDataPath().toString()
|
||||||
version->qmakeProperty("QT_HOST_DATA") + QLatin1String("/mkspecs"));
|
+ "/mkspecs");
|
||||||
baseMkspecDir = FilePath::fromString(baseMkspecDir.toFileInfo().canonicalFilePath());
|
baseMkspecDir = FilePath::fromString(baseMkspecDir.toFileInfo().canonicalFilePath());
|
||||||
|
|
||||||
// if the path is relative it can be
|
// if the path is relative it can be
|
||||||
@@ -608,7 +608,7 @@ BuildInfo QmakeBuildConfigurationFactory::createBuildInfo(const Kit *k,
|
|||||||
QString projectDirectory = projectPath.toFileInfo().absolutePath();
|
QString projectDirectory = projectPath.toFileInfo().absolutePath();
|
||||||
QDir qtSourceDir = QDir(version->sourcePath().toString());
|
QDir qtSourceDir = QDir(version->sourcePath().toString());
|
||||||
QString relativeProjectPath = qtSourceDir.relativeFilePath(projectDirectory);
|
QString relativeProjectPath = qtSourceDir.relativeFilePath(projectDirectory);
|
||||||
QString qtBuildDir = version->qmakeProperty("QT_INSTALL_PREFIX");
|
QString qtBuildDir = version->prefix().toString();
|
||||||
QString absoluteBuildPath = QDir::cleanPath(qtBuildDir + QLatin1Char('/') + relativeProjectPath);
|
QString absoluteBuildPath = QDir::cleanPath(qtBuildDir + QLatin1Char('/') + relativeProjectPath);
|
||||||
|
|
||||||
info.buildDirectory = FilePath::fromString(absoluteBuildPath);
|
info.buildDirectory = FilePath::fromString(absoluteBuildPath);
|
||||||
@@ -672,8 +672,8 @@ void QmakeBuildConfiguration::setupBuildEnvironment(Kit *k, Environment &env)
|
|||||||
{
|
{
|
||||||
prependCompilerPathToEnvironment(k, env);
|
prependCompilerPathToEnvironment(k, env);
|
||||||
const BaseQtVersion *qt = QtKitAspect::qtVersion(k);
|
const BaseQtVersion *qt = QtKitAspect::qtVersion(k);
|
||||||
if (qt && !qt->binPath().isEmpty())
|
if (qt && !qt->hostBinPath().isEmpty())
|
||||||
env.prependOrSetPath(qt->binPath().toString());
|
env.prependOrSetPath(qt->hostBinPath().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
QmakeBuildConfiguration::LastKitState::LastKitState() = default;
|
QmakeBuildConfiguration::LastKitState::LastKitState() = default;
|
||||||
|
@@ -260,8 +260,9 @@ void QmakeProject::updateCppCodeModel()
|
|||||||
headerPaths += headerPath;
|
headerPaths += headerPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kitInfo.qtVersion && !kitInfo.qtVersion->frameworkInstallPath().isEmpty())
|
if (kitInfo.qtVersion && !kitInfo.qtVersion->frameworkPath().isEmpty())
|
||||||
headerPaths += {kitInfo.qtVersion->frameworkInstallPath(), HeaderPathType::Framework};
|
headerPaths += {kitInfo.qtVersion->frameworkPath().toString(),
|
||||||
|
HeaderPathType::Framework};
|
||||||
rpp.setHeaderPaths(headerPaths);
|
rpp.setHeaderPaths(headerPaths);
|
||||||
|
|
||||||
// Files and generators
|
// Files and generators
|
||||||
|
@@ -92,7 +92,7 @@ QByteArray PuppetCreator::qtHash() const
|
|||||||
{
|
{
|
||||||
QtSupport::BaseQtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(m_kit);
|
QtSupport::BaseQtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(m_kit);
|
||||||
if (currentQtVersion) {
|
if (currentQtVersion) {
|
||||||
return QCryptographicHash::hash(currentQtVersion->qmakeProperty("QT_INSTALL_DATA").toUtf8(),
|
return QCryptographicHash::hash(currentQtVersion->dataPath().toString().toUtf8(),
|
||||||
QCryptographicHash::Sha1)
|
QCryptographicHash::Sha1)
|
||||||
.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals);
|
.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals);
|
||||||
}
|
}
|
||||||
@@ -104,7 +104,7 @@ QDateTime PuppetCreator::qtLastModified() const
|
|||||||
{
|
{
|
||||||
QtSupport::BaseQtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(m_kit);
|
QtSupport::BaseQtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(m_kit);
|
||||||
if (currentQtVersion)
|
if (currentQtVersion)
|
||||||
return QFileInfo(currentQtVersion->qmakeProperty("QT_INSTALL_LIBS")).lastModified();
|
return currentQtVersion->libraryPath().toFileInfo().lastModified();
|
||||||
|
|
||||||
return QDateTime();
|
return QDateTime();
|
||||||
}
|
}
|
||||||
@@ -422,7 +422,7 @@ QProcessEnvironment PuppetCreator::processEnvironment() const
|
|||||||
const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(m_kit);
|
const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(m_kit);
|
||||||
if (QTC_GUARD(qt)) { // Kits without a Qt version should not have a puppet!
|
if (QTC_GUARD(qt)) { // Kits without a Qt version should not have a puppet!
|
||||||
// Update PATH to include QT_HOST_BINS
|
// Update PATH to include QT_HOST_BINS
|
||||||
const Utils::FilePath qtBinPath = qt->binPath();
|
const Utils::FilePath qtBinPath = qt->hostBinPath();
|
||||||
environment.prependOrSetPath(qtBinPath.toString());
|
environment.prependOrSetPath(qtBinPath.toString());
|
||||||
}
|
}
|
||||||
environment.set("QML_BAD_GUI_RENDER_LOOP", "true");
|
environment.set("QML_BAD_GUI_RENDER_LOOP", "true");
|
||||||
|
@@ -98,7 +98,7 @@ void GenerateResource::generateMenuEntry()
|
|||||||
return;
|
return;
|
||||||
temp.close();
|
temp.close();
|
||||||
|
|
||||||
auto rccBinary = QtSupport::QtKitAspect::qtVersion(currentProject->activeTarget()->kit())->binPath();
|
auto rccBinary = QtSupport::QtKitAspect::qtVersion(currentProject->activeTarget()->kit())->hostBinPath();
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
rccBinary = rccBinary.pathAppended("rcc.exe");
|
rccBinary = rccBinary.pathAppended("rcc.exe");
|
||||||
#else
|
#else
|
||||||
|
@@ -76,15 +76,15 @@ static QStringList searchPaths(Kit *kit)
|
|||||||
if (!qtVersion)
|
if (!qtVersion)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
const QDir pluginDir(qtVersion->qmakeProperty("QT_INSTALL_PLUGINS"));
|
const QDir pluginDir(qtVersion->pluginPath().toString());
|
||||||
const QStringList pluginSubDirs = pluginDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
|
const QStringList pluginSubDirs = pluginDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
|
||||||
|
|
||||||
QStringList searchPaths;
|
QStringList searchPaths;
|
||||||
|
|
||||||
for (const QString &dir : pluginSubDirs)
|
for (const QString &dir : pluginSubDirs)
|
||||||
searchPaths << qtVersion->qmakeProperty("QT_INSTALL_PLUGINS") + '/' + dir;
|
searchPaths << qtVersion->pluginPath().toString() + '/' + dir;
|
||||||
|
|
||||||
searchPaths << qtVersion->qmakeProperty("QT_INSTALL_LIBS");
|
searchPaths << qtVersion->libraryPath().toString();
|
||||||
searchPaths << qtVersion->qnxTarget().pathAppended(qtVersion->cpuDir() + "/lib").toString();
|
searchPaths << qtVersion->qnxTarget().pathAppended(qtVersion->cpuDir() + "/lib").toString();
|
||||||
searchPaths << qtVersion->qnxTarget().pathAppended(qtVersion->cpuDir() + "/usr/lib").toString();
|
searchPaths << qtVersion->qnxTarget().pathAppended(qtVersion->cpuDir() + "/usr/lib").toString();
|
||||||
|
|
||||||
|
@@ -234,16 +234,16 @@ QList<DeployableFile> QnxDeployQtLibrariesDialog::gatherFiles()
|
|||||||
QTC_ASSERT(qtVersion, return result);
|
QTC_ASSERT(qtVersion, return result);
|
||||||
|
|
||||||
if (Utils::HostOsInfo::isWindowsHost()) {
|
if (Utils::HostOsInfo::isWindowsHost()) {
|
||||||
result.append(gatherFiles(qtVersion->qmakeProperty("QT_INSTALL_LIBS"),
|
result.append(gatherFiles(qtVersion->libraryPath().toString(),
|
||||||
QString(), QStringList() << QLatin1String("*.so.?")));
|
QString(),
|
||||||
result.append(gatherFiles(qtVersion->qmakeProperty("QT_INSTALL_LIBS")
|
QStringList() << QLatin1String("*.so.?")));
|
||||||
+ QLatin1String("/fonts")));
|
result.append(gatherFiles(qtVersion->libraryPath().toString() + QLatin1String("/fonts")));
|
||||||
} else {
|
} else {
|
||||||
result.append(gatherFiles(qtVersion->qmakeProperty("QT_INSTALL_LIBS")));
|
result.append(gatherFiles(qtVersion->libraryPath().toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
result.append(gatherFiles(qtVersion->qmakeProperty("QT_INSTALL_PLUGINS")));
|
result.append(gatherFiles(qtVersion->pluginPath().toString()));
|
||||||
result.append(gatherFiles(qtVersion->qmakeProperty("QT_INSTALL_IMPORTS")));
|
result.append(gatherFiles(qtVersion->importsPath().toString()));
|
||||||
result.append(gatherFiles(qtVersion->qmlPath().toString()));
|
result.append(gatherFiles(qtVersion->qmlPath().toString()));
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@@ -130,7 +130,7 @@ void QnxQtVersion::addToEnvironment(const ProjectExplorer::Kit *k, Utils::Enviro
|
|||||||
updateEnvironment();
|
updateEnvironment();
|
||||||
env.modify(m_qnxEnv);
|
env.modify(m_qnxEnv);
|
||||||
|
|
||||||
env.prependOrSetLibrarySearchPath(qmakeProperty("QT_INSTALL_LIBS", PropertyVariantDev));
|
env.prependOrSetLibrarySearchPath(libraryPath().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils::Environment QnxQtVersion::qmakeRunEnvironment() const
|
Utils::Environment QnxQtVersion::qmakeRunEnvironment() const
|
||||||
|
@@ -141,9 +141,11 @@ public:
|
|||||||
const Environment &env,
|
const Environment &env,
|
||||||
QHash<ProKey, ProString> *versionInfo,
|
QHash<ProKey, ProString> *versionInfo,
|
||||||
QString *error = nullptr);
|
QString *error = nullptr);
|
||||||
|
enum PropertyVariant { PropertyVariantDev, PropertyVariantGet, PropertyVariantSrc };
|
||||||
|
QString qmakeProperty(const QByteArray &name, PropertyVariant variant = PropertyVariantGet);
|
||||||
static QString qmakeProperty(const QHash<ProKey, ProString> &versionInfo,
|
static QString qmakeProperty(const QHash<ProKey, ProString> &versionInfo,
|
||||||
const QByteArray &name,
|
const QByteArray &name,
|
||||||
BaseQtVersion::PropertyVariant variant = BaseQtVersion::PropertyVariantGet);
|
PropertyVariant variant = PropertyVariantGet);
|
||||||
static FilePath mkspecDirectoryFromVersionInfo(const QHash<ProKey,ProString> &versionInfo);
|
static FilePath mkspecDirectoryFromVersionInfo(const QHash<ProKey,ProString> &versionInfo);
|
||||||
static FilePath mkspecFromVersionInfo(const QHash<ProKey,ProString> &versionInfo);
|
static FilePath mkspecFromVersionInfo(const QHash<ProKey,ProString> &versionInfo);
|
||||||
static FilePath sourcePath(const QHash<ProKey,ProString> &versionInfo);
|
static FilePath sourcePath(const QHash<ProKey,ProString> &versionInfo);
|
||||||
@@ -158,6 +160,7 @@ public:
|
|||||||
bool m_isAutodetected = false;
|
bool m_isAutodetected = false;
|
||||||
QString m_type;
|
QString m_type;
|
||||||
|
|
||||||
|
bool m_isUpdating = false;
|
||||||
bool m_hasQmlDump = false; // controlled by m_versionInfoUpToDate
|
bool m_hasQmlDump = false; // controlled by m_versionInfoUpToDate
|
||||||
bool m_mkspecUpToDate = false;
|
bool m_mkspecUpToDate = false;
|
||||||
bool m_mkspecReadUpToDate = false;
|
bool m_mkspecReadUpToDate = false;
|
||||||
@@ -172,9 +175,6 @@ public:
|
|||||||
bool m_qmakeIsExecutable = true;
|
bool m_qmakeIsExecutable = true;
|
||||||
bool m_hasQtAbis = false;
|
bool m_hasQtAbis = false;
|
||||||
|
|
||||||
QStringList m_configValues;
|
|
||||||
QStringList m_qtConfigValues;
|
|
||||||
|
|
||||||
QString m_unexpandedDisplayName;
|
QString m_unexpandedDisplayName;
|
||||||
QString m_autodetectionSource;
|
QString m_autodetectionSource;
|
||||||
QSet<Core::Id> m_overrideFeatures;
|
QSet<Core::Id> m_overrideFeatures;
|
||||||
@@ -518,41 +518,76 @@ Tasks BaseQtVersion::validateKit(const Kit *k)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
FilePath BaseQtVersion::headerPath() const
|
FilePath BaseQtVersion::prefix() const // QT_INSTALL_PREFIX
|
||||||
{
|
{
|
||||||
return FilePath::fromUserInput(qmakeProperty("QT_INSTALL_HEADERS"));
|
return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_PREFIX"));
|
||||||
}
|
}
|
||||||
|
|
||||||
FilePath BaseQtVersion::docsPath() const
|
FilePath BaseQtVersion::binPath() const // QT_INSTALL_BINS
|
||||||
{
|
{
|
||||||
return FilePath::fromUserInput(qmakeProperty("QT_INSTALL_DOCS"));
|
return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_BINS"));
|
||||||
}
|
}
|
||||||
|
|
||||||
FilePath BaseQtVersion::libraryPath() const
|
FilePath BaseQtVersion::configurationPath() const // QT_INSTALL_CONFIGURATION
|
||||||
{
|
{
|
||||||
return FilePath::fromUserInput(qmakeProperty("QT_INSTALL_LIBS"));
|
return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_CONFIGURATION"));
|
||||||
}
|
}
|
||||||
|
|
||||||
FilePath BaseQtVersion::pluginPath() const
|
FilePath BaseQtVersion::headerPath() const // QT_INSTALL_HEADERS
|
||||||
{
|
{
|
||||||
return FilePath::fromUserInput(qmakeProperty("QT_INSTALL_PLUGINS"));
|
return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_HEADERS"));
|
||||||
}
|
}
|
||||||
|
|
||||||
FilePath BaseQtVersion::qmlPath() const
|
FilePath BaseQtVersion::dataPath() const // QT_INSTALL_DATA
|
||||||
{
|
{
|
||||||
return FilePath::fromUserInput(qmakeProperty("QT_INSTALL_QML"));
|
return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_DATA"));
|
||||||
}
|
}
|
||||||
|
|
||||||
FilePath BaseQtVersion::binPath() const
|
FilePath BaseQtVersion::docsPath() const // QT_INSTALL_DOCS
|
||||||
{
|
{
|
||||||
return FilePath::fromUserInput(qmakeProperty("QT_HOST_BINS"));
|
return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_DOCS"));
|
||||||
|
}
|
||||||
|
|
||||||
|
FilePath BaseQtVersion::importsPath() const // QT_INSTALL_IMPORTS
|
||||||
|
{
|
||||||
|
return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_IMPORTS"));
|
||||||
|
}
|
||||||
|
|
||||||
|
FilePath BaseQtVersion::libraryPath() const // QT_INSTALL_LIBS
|
||||||
|
{
|
||||||
|
return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_LIBS"));
|
||||||
|
}
|
||||||
|
|
||||||
|
FilePath BaseQtVersion::pluginPath() const // QT_INSTALL_PLUGINS
|
||||||
|
{
|
||||||
|
return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_PLUGINS"));
|
||||||
|
}
|
||||||
|
|
||||||
|
FilePath BaseQtVersion::qmlPath() const // QT_INSTALL_QML
|
||||||
|
{
|
||||||
|
return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_QML"));
|
||||||
|
}
|
||||||
|
|
||||||
|
FilePath BaseQtVersion::translationsPath() const // QT_INSTALL_TRANSLATIONS
|
||||||
|
{
|
||||||
|
return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_TRANSLATIONS"));
|
||||||
|
}
|
||||||
|
|
||||||
|
FilePath BaseQtVersion::hostBinPath() const // QT_HOST_BINS
|
||||||
|
{
|
||||||
|
return FilePath::fromUserInput(d->qmakeProperty("QT_HOST_BINS"));
|
||||||
|
}
|
||||||
|
|
||||||
|
FilePath BaseQtVersion::hostDataPath() const // QT_HOST_DATA
|
||||||
|
{
|
||||||
|
return FilePath::fromUserInput(d->qmakeProperty("QT_HOST_DATA"));
|
||||||
}
|
}
|
||||||
|
|
||||||
FilePath BaseQtVersion::mkspecsPath() const
|
FilePath BaseQtVersion::mkspecsPath() const
|
||||||
{
|
{
|
||||||
const FilePath result = FilePath::fromUserInput(qmakeProperty("QT_HOST_DATA"));
|
const FilePath result = hostDataPath();
|
||||||
if (result.isEmpty())
|
if (result.isEmpty())
|
||||||
return FilePath::fromUserInput(qmakeProperty("QMAKE_MKSPECS"));
|
return FilePath::fromUserInput(d->qmakeProperty(d->m_versionInfo, "QMAKE_MKSPECS"));
|
||||||
return result.pathAppended("mkspecs");
|
return result.pathAppended("mkspecs");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -563,8 +598,7 @@ FilePath BaseQtVersion::qmlBinPath() const
|
|||||||
|
|
||||||
FilePath BaseQtVersion::librarySearchPath() const
|
FilePath BaseQtVersion::librarySearchPath() const
|
||||||
{
|
{
|
||||||
return HostOsInfo::isWindowsHost()
|
return HostOsInfo::isWindowsHost() ? binPath() : libraryPath();
|
||||||
? FilePath::fromUserInput(qmakeProperty("QT_INSTALL_BINS")) : libraryPath();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FilePathList BaseQtVersion::directoriesToIgnoreInProjectTree() const
|
FilePathList BaseQtVersion::directoriesToIgnoreInProjectTree() const
|
||||||
@@ -573,7 +607,8 @@ FilePathList BaseQtVersion::directoriesToIgnoreInProjectTree() const
|
|||||||
const FilePath mkspecPathGet = mkspecsPath();
|
const FilePath mkspecPathGet = mkspecsPath();
|
||||||
result.append(mkspecPathGet);
|
result.append(mkspecPathGet);
|
||||||
|
|
||||||
FilePath mkspecPathSrc = FilePath::fromUserInput(qmakeProperty("QT_HOST_DATA", PropertyVariantSrc));
|
FilePath mkspecPathSrc = FilePath::fromUserInput(
|
||||||
|
d->qmakeProperty("QT_HOST_DATA", BaseQtVersionPrivate::PropertyVariantSrc));
|
||||||
if (!mkspecPathSrc.isEmpty()) {
|
if (!mkspecPathSrc.isEmpty()) {
|
||||||
mkspecPathSrc = mkspecPathSrc.pathAppended("mkspecs");
|
mkspecPathSrc = mkspecPathSrc.pathAppended("mkspecs");
|
||||||
if (mkspecPathSrc != mkspecPathGet)
|
if (mkspecPathSrc != mkspecPathGet)
|
||||||
@@ -669,11 +704,8 @@ bool BaseQtVersion::isValid() const
|
|||||||
d->updateVersionInfo();
|
d->updateVersionInfo();
|
||||||
d->updateMkspec();
|
d->updateMkspec();
|
||||||
|
|
||||||
return !qmakeCommand().isEmpty()
|
return !qmakeCommand().isEmpty() && d->m_installed && !binPath().isEmpty()
|
||||||
&& d->m_installed
|
&& !d->m_mkspecFullPath.isEmpty() && d->m_qmakeIsExecutable;
|
||||||
&& !qmakeProperty("QT_HOST_BINS").isNull()
|
|
||||||
&& !d->m_mkspecFullPath.isEmpty()
|
|
||||||
&& d->m_qmakeIsExecutable;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseQtVersion::Predicate BaseQtVersion::isValidPredicate(const BaseQtVersion::Predicate &predicate)
|
BaseQtVersion::Predicate BaseQtVersion::isValidPredicate(const BaseQtVersion::Predicate &predicate)
|
||||||
@@ -693,7 +725,7 @@ QString BaseQtVersion::invalidReason() const
|
|||||||
return QCoreApplication::translate("QtVersion", "qmake does not exist or is not executable");
|
return QCoreApplication::translate("QtVersion", "qmake does not exist or is not executable");
|
||||||
if (!d->m_installed)
|
if (!d->m_installed)
|
||||||
return QCoreApplication::translate("QtVersion", "Qt version is not properly installed, please run make install");
|
return QCoreApplication::translate("QtVersion", "Qt version is not properly installed, please run make install");
|
||||||
if (qmakeProperty("QT_HOST_BINS").isNull())
|
if (binPath().isEmpty())
|
||||||
return QCoreApplication::translate("QtVersion",
|
return QCoreApplication::translate("QtVersion",
|
||||||
"Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?");
|
"Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?");
|
||||||
if (d->m_mkspecUpToDate && d->m_mkspecFullPath.isEmpty())
|
if (d->m_mkspecUpToDate && d->m_mkspecFullPath.isEmpty())
|
||||||
@@ -928,7 +960,7 @@ QString BaseQtVersionPrivate::findHostBinary(HostBinaries binary) const
|
|||||||
{
|
{
|
||||||
QString baseDir;
|
QString baseDir;
|
||||||
if (q->qtVersion() < QtVersionNumber(5, 0, 0)) {
|
if (q->qtVersion() < QtVersionNumber(5, 0, 0)) {
|
||||||
baseDir = q->qmakeProperty("QT_HOST_BINS");
|
baseDir = q->binPath().toString();
|
||||||
} else {
|
} else {
|
||||||
q->ensureMkSpecParsed();
|
q->ensureMkSpecParsed();
|
||||||
switch (binary) {
|
switch (binary) {
|
||||||
@@ -938,7 +970,7 @@ QString BaseQtVersionPrivate::findHostBinary(HostBinaries binary) const
|
|||||||
break;
|
break;
|
||||||
case Uic:
|
case Uic:
|
||||||
case QScxmlc:
|
case QScxmlc:
|
||||||
baseDir = q->qmakeProperty("QT_HOST_BINS");
|
baseDir = q->hostBinPath().toString();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// Can't happen
|
// Can't happen
|
||||||
@@ -1049,11 +1081,10 @@ void BaseQtVersion::ensureMkSpecParsed() const
|
|||||||
|
|
||||||
void BaseQtVersion::parseMkSpec(ProFileEvaluator *evaluator) const
|
void BaseQtVersion::parseMkSpec(ProFileEvaluator *evaluator) const
|
||||||
{
|
{
|
||||||
d->m_configValues = evaluator->values("CONFIG");
|
const QStringList configValues = evaluator->values("CONFIG");
|
||||||
d->m_qtConfigValues = evaluator->values("QT_CONFIG");
|
|
||||||
d->m_defaultConfigIsDebugAndRelease = false;
|
d->m_defaultConfigIsDebugAndRelease = false;
|
||||||
d->m_frameworkBuild = false;
|
d->m_frameworkBuild = false;
|
||||||
for (const QString &value : qAsConst(d->m_configValues)) {
|
for (const QString &value : configValues) {
|
||||||
if (value == "debug")
|
if (value == "debug")
|
||||||
d->m_defaultConfigIsDebug = true;
|
d->m_defaultConfigIsDebug = true;
|
||||||
else if (value == "release")
|
else if (value == "release")
|
||||||
@@ -1115,8 +1146,7 @@ bool BaseQtVersion::hasMkspec(const QString &spec) const
|
|||||||
if (spec.isEmpty())
|
if (spec.isEmpty())
|
||||||
return true; // default spec of a Qt version
|
return true; // default spec of a Qt version
|
||||||
|
|
||||||
QDir mkspecDir = QDir(QDir::fromNativeSeparators(qmakeProperty("QT_HOST_DATA"))
|
QDir mkspecDir = QDir(hostDataPath().toString() + "/mkspecs/");
|
||||||
+ "/mkspecs/");
|
|
||||||
const QString absSpec = mkspecDir.absoluteFilePath(spec);
|
const QString absSpec = mkspecDir.absoluteFilePath(spec);
|
||||||
if (QFileInfo(absSpec).isDir() && QFileInfo(absSpec + "/qmake.conf").isFile())
|
if (QFileInfo(absSpec).isDir() && QFileInfo(absSpec + "/qmake.conf").isFile())
|
||||||
return true;
|
return true;
|
||||||
@@ -1152,11 +1182,11 @@ QtVersionNumber BaseQtVersion::qtVersion() const
|
|||||||
|
|
||||||
void BaseQtVersionPrivate::updateVersionInfo()
|
void BaseQtVersionPrivate::updateVersionInfo()
|
||||||
{
|
{
|
||||||
if (m_versionInfoUpToDate)
|
if (m_versionInfoUpToDate || !m_qmakeIsExecutable || m_isUpdating)
|
||||||
return;
|
|
||||||
if (!m_qmakeIsExecutable)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
m_isUpdating = true;
|
||||||
|
|
||||||
// extract data from qmake executable
|
// extract data from qmake executable
|
||||||
m_versionInfo.clear();
|
m_versionInfo.clear();
|
||||||
m_installed = true;
|
m_installed = true;
|
||||||
@@ -1172,9 +1202,8 @@ void BaseQtVersionPrivate::updateVersionInfo()
|
|||||||
}
|
}
|
||||||
m_qmakeIsExecutable = true;
|
m_qmakeIsExecutable = true;
|
||||||
|
|
||||||
|
const QString qtInstallBins = q->binPath().toString();
|
||||||
const QString qtInstallBins = qmakeProperty(m_versionInfo, "QT_INSTALL_BINS");
|
const QString qtHeaderData = q->headerPath().toString();
|
||||||
const QString qtHeaderData = qmakeProperty(m_versionInfo, "QT_INSTALL_HEADERS");
|
|
||||||
|
|
||||||
if (!qtInstallBins.isNull()) {
|
if (!qtInstallBins.isNull()) {
|
||||||
if (!qtInstallBins.isEmpty()) {
|
if (!qtInstallBins.isEmpty()) {
|
||||||
@@ -1185,7 +1214,7 @@ void BaseQtVersionPrivate::updateVersionInfo()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Now check for a qt that is configured with a prefix but not installed
|
// Now check for a qt that is configured with a prefix but not installed
|
||||||
QString installDir = qmakeProperty(m_versionInfo, "QT_HOST_BINS");
|
QString installDir = q->hostBinPath().toString();
|
||||||
if (!installDir.isNull()) {
|
if (!installDir.isNull()) {
|
||||||
if (!QFileInfo::exists(installDir))
|
if (!QFileInfo::exists(installDir))
|
||||||
m_installed = false;
|
m_installed = false;
|
||||||
@@ -1198,23 +1227,24 @@ void BaseQtVersionPrivate::updateVersionInfo()
|
|||||||
m_installed = false;
|
m_installed = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const QString qtInstallDocs = qmakeProperty(m_versionInfo, "QT_INSTALL_DOCS");
|
const QString qtInstallDocs = q->docsPath().toString();
|
||||||
if (!qtInstallDocs.isNull()) {
|
if (!qtInstallDocs.isNull()) {
|
||||||
if (QFileInfo::exists(qtInstallDocs))
|
if (QFileInfo::exists(qtInstallDocs))
|
||||||
m_hasDocumentation = true;
|
m_hasDocumentation = true;
|
||||||
}
|
}
|
||||||
const QString qtInstallExamples = qmakeProperty(m_versionInfo, "QT_INSTALL_EXAMPLES");
|
const QString qtInstallExamples = q->examplesPath().toString();
|
||||||
if (!qtInstallExamples.isNull()) {
|
if (!qtInstallExamples.isNull()) {
|
||||||
if (QFileInfo::exists(qtInstallExamples))
|
if (QFileInfo::exists(qtInstallExamples))
|
||||||
m_hasExamples = true;
|
m_hasExamples = true;
|
||||||
}
|
}
|
||||||
const QString qtInstallDemos = qmakeProperty(m_versionInfo, "QT_INSTALL_DEMOS");
|
const QString qtInstallDemos = q->demosPath().toString();
|
||||||
if (!qtInstallDemos.isNull()) {
|
if (!qtInstallDemos.isNull()) {
|
||||||
if (QFileInfo::exists(qtInstallDemos))
|
if (QFileInfo::exists(qtInstallDemos))
|
||||||
m_hasDemos = true;
|
m_hasDemos = true;
|
||||||
}
|
}
|
||||||
m_qtVersionString = qmakeProperty(m_versionInfo, "QT_VERSION");
|
m_qtVersionString = qmakeProperty("QT_VERSION");
|
||||||
|
|
||||||
|
m_isUpdating = false;
|
||||||
m_versionInfoUpToDate = true;
|
m_versionInfoUpToDate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1224,55 +1254,49 @@ QHash<ProKey,ProString> BaseQtVersionPrivate::versionInfo()
|
|||||||
return m_versionInfo;
|
return m_versionInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BaseQtVersionPrivate::qmakeProperty(const QHash<ProKey,ProString> &versionInfo, const QByteArray &name,
|
QString BaseQtVersionPrivate::qmakeProperty(const QHash<ProKey, ProString> &versionInfo,
|
||||||
BaseQtVersion::PropertyVariant variant)
|
const QByteArray &name,
|
||||||
|
PropertyVariant variant)
|
||||||
{
|
{
|
||||||
QString val = versionInfo.value(ProKey(QString::fromLatin1(
|
QString val = versionInfo
|
||||||
name + (variant == BaseQtVersion::PropertyVariantDev ? "/dev" :
|
.value(ProKey(QString::fromLatin1(
|
||||||
variant == BaseQtVersion::PropertyVariantGet ? "/get" : "/src")))).toQString();
|
name
|
||||||
|
+ (variant == PropertyVariantDev
|
||||||
|
? "/dev"
|
||||||
|
: variant == PropertyVariantGet ? "/get" : "/src"))))
|
||||||
|
.toQString();
|
||||||
if (!val.isNull())
|
if (!val.isNull())
|
||||||
return val;
|
return val;
|
||||||
return versionInfo.value(ProKey(name)).toQString();
|
return versionInfo.value(ProKey(name)).toQString();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BaseQtVersion::qmakeProperty(const QByteArray &name, PropertyVariant variant) const
|
|
||||||
{
|
|
||||||
d->updateVersionInfo();
|
|
||||||
return d->qmakeProperty(d->m_versionInfo, name, variant);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BaseQtVersion::applyProperties(QMakeGlobals *qmakeGlobals) const
|
void BaseQtVersion::applyProperties(QMakeGlobals *qmakeGlobals) const
|
||||||
{
|
{
|
||||||
qmakeGlobals->setProperties(d->versionInfo());
|
qmakeGlobals->setProperties(d->versionInfo());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BaseQtVersion::hasDocumentation() const
|
bool BaseQtVersion::hasDocs() const
|
||||||
{
|
{
|
||||||
d->updateVersionInfo();
|
d->updateVersionInfo();
|
||||||
return d->m_hasDocumentation;
|
return d->m_hasDocumentation;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BaseQtVersion::documentationPath() const
|
|
||||||
{
|
|
||||||
return qmakeProperty("QT_INSTALL_DOCS");
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BaseQtVersion::hasDemos() const
|
bool BaseQtVersion::hasDemos() const
|
||||||
{
|
{
|
||||||
d->updateVersionInfo();
|
d->updateVersionInfo();
|
||||||
return d->m_hasDemos;
|
return d->m_hasDemos;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BaseQtVersion::demosPath() const
|
FilePath BaseQtVersion::demosPath() const
|
||||||
{
|
{
|
||||||
return QFileInfo(qmakeProperty("QT_INSTALL_DEMOS")).canonicalFilePath();
|
return FilePath::fromString(QFileInfo(d->qmakeProperty("QT_INSTALL_DEMOS")).canonicalFilePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BaseQtVersion::frameworkInstallPath() const
|
FilePath BaseQtVersion::frameworkPath() const
|
||||||
{
|
{
|
||||||
if (HostOsInfo::isMacHost())
|
if (HostOsInfo::isMacHost())
|
||||||
return qmakeProperty("QT_INSTALL_LIBS");
|
return libraryPath();
|
||||||
return QString();
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BaseQtVersion::hasExamples() const
|
bool BaseQtVersion::hasExamples() const
|
||||||
@@ -1281,9 +1305,10 @@ bool BaseQtVersion::hasExamples() const
|
|||||||
return d->m_hasExamples;
|
return d->m_hasExamples;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BaseQtVersion::examplesPath() const
|
FilePath BaseQtVersion::examplesPath() const // QT_INSTALL_EXAMPLES
|
||||||
{
|
{
|
||||||
return QFileInfo(qmakeProperty("QT_INSTALL_EXAMPLES")).canonicalFilePath();
|
return FilePath::fromString(
|
||||||
|
QFileInfo(d->qmakeProperty("QT_INSTALL_EXAMPLES")).canonicalFilePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList BaseQtVersion::qtSoPaths() const
|
QStringList BaseQtVersion::qtSoPaths() const
|
||||||
@@ -1297,7 +1322,7 @@ QStringList BaseQtVersion::qtSoPaths() const
|
|||||||
|
|
||||||
QSet<QString> paths;
|
QSet<QString> paths;
|
||||||
for (uint i = 0; i < sizeof qMakeVariables / sizeof qMakeVariables[0]; ++i) {
|
for (uint i = 0; i < sizeof qMakeVariables / sizeof qMakeVariables[0]; ++i) {
|
||||||
QString path = qmakeProperty(qMakeVariables[i]);
|
QString path = d->qmakeProperty(qMakeVariables[i]);
|
||||||
if (path.isNull())
|
if (path.isNull())
|
||||||
continue;
|
continue;
|
||||||
QDirIterator it(path, QStringList("*.so"), QDir::Files, QDirIterator::Subdirectories);
|
QDirIterator it(path, QStringList("*.so"), QDir::Files, QDirIterator::Subdirectories);
|
||||||
@@ -1309,18 +1334,6 @@ QStringList BaseQtVersion::qtSoPaths() const
|
|||||||
return Utils::toList(paths);
|
return Utils::toList(paths);
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList BaseQtVersion::configValues() const
|
|
||||||
{
|
|
||||||
ensureMkSpecParsed();
|
|
||||||
return d->m_configValues;
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList BaseQtVersion::qtConfigValues() const
|
|
||||||
{
|
|
||||||
ensureMkSpecParsed();
|
|
||||||
return d->m_qtConfigValues;
|
|
||||||
}
|
|
||||||
|
|
||||||
MacroExpander *BaseQtVersion::macroExpander() const
|
MacroExpander *BaseQtVersion::macroExpander() const
|
||||||
{
|
{
|
||||||
return d->m_expander.macroExpander(this);
|
return d->m_expander.macroExpander(this);
|
||||||
@@ -1339,8 +1352,7 @@ BaseQtVersion::createMacroExpander(const std::function<const BaseQtVersion *()>
|
|||||||
std::unique_ptr<MacroExpander> expander(new MacroExpander);
|
std::unique_ptr<MacroExpander> expander(new MacroExpander);
|
||||||
expander->setDisplayName(QtKitAspect::tr("Qt version"));
|
expander->setDisplayName(QtKitAspect::tr("Qt version"));
|
||||||
|
|
||||||
expander->registerVariable(
|
expander->registerVariable("Qt:Version",
|
||||||
"Qt:Version",
|
|
||||||
QtKitAspect::tr("The version string of the current Qt version."),
|
QtKitAspect::tr("The version string of the current Qt version."),
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
versionProperty([](const BaseQtVersion *version) {
|
||||||
return version->qtVersionString();
|
return version->qtVersionString();
|
||||||
@@ -1360,95 +1372,93 @@ BaseQtVersion::createMacroExpander(const std::function<const BaseQtVersion *()>
|
|||||||
return QDir::toNativeSeparators(version->mkspec());
|
return QDir::toNativeSeparators(version->mkspec());
|
||||||
}));
|
}));
|
||||||
|
|
||||||
expander->registerVariable(
|
expander->registerVariable("Qt:QT_INSTALL_PREFIX",
|
||||||
"Qt:QT_INSTALL_PREFIX",
|
QtKitAspect::tr(
|
||||||
QtKitAspect::tr("The installation prefix of the current Qt version."),
|
"The installation prefix of the current Qt version."),
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
versionProperty([](const BaseQtVersion *version) {
|
||||||
return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_PREFIX");
|
return version->prefix().toString();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
expander->registerVariable(
|
expander->registerVariable("Qt:QT_INSTALL_DATA",
|
||||||
"Qt:QT_INSTALL_DATA",
|
QtKitAspect::tr(
|
||||||
QtKitAspect::tr("The installation location of the current Qt version's data."),
|
"The installation location of the current Qt version's data."),
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
versionProperty([](const BaseQtVersion *version) {
|
||||||
return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_DATA");
|
return version->dataPath().toString();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
expander->registerVariable(
|
expander->registerVariable(
|
||||||
"Qt:QT_INSTALL_HEADERS",
|
"Qt:QT_INSTALL_HEADERS",
|
||||||
QtKitAspect::tr("The installation location of the current Qt version's header files."),
|
QtKitAspect::tr("The installation location of the current Qt version's header files."),
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
versionProperty(
|
||||||
return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_HEADERS");
|
[](const BaseQtVersion *version) { return version->headerPath().toString(); }));
|
||||||
}));
|
|
||||||
|
|
||||||
expander->registerVariable(
|
expander->registerVariable(
|
||||||
"Qt:QT_INSTALL_LIBS",
|
"Qt:QT_INSTALL_LIBS",
|
||||||
QtKitAspect::tr("The installation location of the current Qt version's library files."),
|
QtKitAspect::tr("The installation location of the current Qt version's library files."),
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
versionProperty(
|
||||||
return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_LIBS");
|
[](const BaseQtVersion *version) { return version->libraryPath().toString(); }));
|
||||||
}));
|
|
||||||
|
|
||||||
expander->registerVariable(
|
expander->registerVariable(
|
||||||
"Qt:QT_INSTALL_DOCS",
|
"Qt:QT_INSTALL_DOCS",
|
||||||
QtKitAspect::tr("The installation location of the current Qt version's documentation files."),
|
QtKitAspect::tr(
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
"The installation location of the current Qt version's documentation files."),
|
||||||
return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_DOCS");
|
versionProperty(
|
||||||
}));
|
[](const BaseQtVersion *version) { return version->docsPath().toString(); }));
|
||||||
|
|
||||||
expander->registerVariable(
|
expander->registerVariable(
|
||||||
"Qt:QT_INSTALL_BINS",
|
"Qt:QT_INSTALL_BINS",
|
||||||
QtKitAspect::tr("The installation location of the current Qt version's executable files."),
|
QtKitAspect::tr("The installation location of the current Qt version's executable files."),
|
||||||
|
versionProperty([](const BaseQtVersion *version) { return version->binPath().toString(); }));
|
||||||
|
|
||||||
|
expander
|
||||||
|
->registerVariable("Qt:QT_INSTALL_PLUGINS",
|
||||||
|
QtKitAspect::tr(
|
||||||
|
"The installation location of the current Qt version's plugins."),
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
versionProperty([](const BaseQtVersion *version) {
|
||||||
return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_BINS");
|
return version->pluginPath().toString();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
expander->registerVariable(
|
expander
|
||||||
"Qt:QT_INSTALL_PLUGINS",
|
->registerVariable("Qt:QT_INSTALL_QML",
|
||||||
QtKitAspect::tr("The installation location of the current Qt version's plugins."),
|
QtKitAspect::tr(
|
||||||
|
"The installation location of the current Qt version's QML files."),
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
versionProperty([](const BaseQtVersion *version) {
|
||||||
return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_PLUGINS");
|
return version->qmlPath().toString();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
expander->registerVariable(
|
expander
|
||||||
"Qt:QT_INSTALL_QML",
|
->registerVariable("Qt:QT_INSTALL_IMPORTS",
|
||||||
QtKitAspect::tr("The installation location of the current Qt version's QML files."),
|
QtKitAspect::tr(
|
||||||
|
"The installation location of the current Qt version's imports."),
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
versionProperty([](const BaseQtVersion *version) {
|
||||||
return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_QML");
|
return version->importsPath().toString();
|
||||||
}));
|
|
||||||
|
|
||||||
expander->registerVariable(
|
|
||||||
"Qt:QT_INSTALL_IMPORTS",
|
|
||||||
QtKitAspect::tr("The installation location of the current Qt version's imports."),
|
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
|
||||||
return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_IMPORTS");
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
expander->registerVariable(
|
expander->registerVariable(
|
||||||
"Qt:QT_INSTALL_TRANSLATIONS",
|
"Qt:QT_INSTALL_TRANSLATIONS",
|
||||||
QtKitAspect::tr("The installation location of the current Qt version's translation files."),
|
QtKitAspect::tr("The installation location of the current Qt version's translation files."),
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
versionProperty(
|
||||||
return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_TRANSLATIONS");
|
[](const BaseQtVersion *version) { return version->translationsPath().toString(); }));
|
||||||
}));
|
|
||||||
|
|
||||||
expander->registerVariable(
|
expander->registerVariable(
|
||||||
"Qt:QT_INSTALL_CONFIGURATION",
|
"Qt:QT_INSTALL_CONFIGURATION",
|
||||||
QtKitAspect::tr("The installation location of the current Qt version's translation files."),
|
QtKitAspect::tr("The installation location of the current Qt version's translation files."),
|
||||||
|
versionProperty(
|
||||||
|
[](const BaseQtVersion *version) { return version->configurationPath().toString(); }));
|
||||||
|
|
||||||
|
expander
|
||||||
|
->registerVariable("Qt:QT_INSTALL_EXAMPLES",
|
||||||
|
QtKitAspect::tr(
|
||||||
|
"The installation location of the current Qt version's examples."),
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
versionProperty([](const BaseQtVersion *version) {
|
||||||
return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_CONFIGURATION");
|
return version->examplesPath().toString();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
expander->registerVariable(
|
expander->registerVariable("Qt:QT_INSTALL_DEMOS",
|
||||||
"Qt:QT_INSTALL_EXAMPLES",
|
QtKitAspect::tr(
|
||||||
QtKitAspect::tr("The installation location of the current Qt version's examples."),
|
"The installation location of the current Qt version's demos."),
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
versionProperty([](const BaseQtVersion *version) {
|
||||||
return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_EXAMPLES");
|
return version->demosPath().toString();
|
||||||
}));
|
|
||||||
|
|
||||||
expander->registerVariable(
|
|
||||||
"Qt:QT_INSTALL_DEMOS",
|
|
||||||
QtKitAspect::tr("The installation location of the current Qt version's demos."),
|
|
||||||
versionProperty([](const BaseQtVersion *version) {
|
|
||||||
return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_DEMOS");
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
expander->registerVariable(
|
expander->registerVariable(
|
||||||
@@ -1564,7 +1574,7 @@ QSet<Id> BaseQtVersion::features() const
|
|||||||
void BaseQtVersion::addToEnvironment(const Kit *k, Environment &env) const
|
void BaseQtVersion::addToEnvironment(const Kit *k, Environment &env) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(k)
|
Q_UNUSED(k)
|
||||||
env.set("QTDIR", QDir::toNativeSeparators(qmakeProperty("QT_HOST_DATA")));
|
env.set("QTDIR", hostDataPath().toUserOutput());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some Qt versions may require environment settings for qmake to work
|
// Some Qt versions may require environment settings for qmake to work
|
||||||
@@ -1596,7 +1606,7 @@ bool BaseQtVersion::needsQmlDump() const
|
|||||||
|
|
||||||
QString BaseQtVersion::qmlDumpTool(bool debugVersion) const
|
QString BaseQtVersion::qmlDumpTool(bool debugVersion) const
|
||||||
{
|
{
|
||||||
const QString qtInstallBins = qmakeProperty("QT_INSTALL_BINS");
|
const QString qtInstallBins = binPath().toString();
|
||||||
return QmlDumpTool::toolForQtPaths(qtInstallBins, debugVersion);
|
return QmlDumpTool::toolForQtPaths(qtInstallBins, debugVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1712,9 +1722,16 @@ bool BaseQtVersionPrivate::queryQMakeVariables(const FilePath &binary, const Env
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString BaseQtVersionPrivate::qmakeProperty(const QByteArray &name,
|
||||||
|
BaseQtVersionPrivate::PropertyVariant variant)
|
||||||
|
{
|
||||||
|
updateVersionInfo();
|
||||||
|
return qmakeProperty(m_versionInfo, name, variant);
|
||||||
|
}
|
||||||
|
|
||||||
FilePath BaseQtVersionPrivate::mkspecDirectoryFromVersionInfo(const QHash<ProKey, ProString> &versionInfo)
|
FilePath BaseQtVersionPrivate::mkspecDirectoryFromVersionInfo(const QHash<ProKey, ProString> &versionInfo)
|
||||||
{
|
{
|
||||||
QString dataDir = qmakeProperty(versionInfo, "QT_HOST_DATA", BaseQtVersion::PropertyVariantSrc);
|
QString dataDir = qmakeProperty(versionInfo, "QT_HOST_DATA", PropertyVariantSrc);
|
||||||
if (dataDir.isEmpty())
|
if (dataDir.isEmpty())
|
||||||
return FilePath();
|
return FilePath();
|
||||||
return FilePath::fromUserInput(dataDir + "/mkspecs");
|
return FilePath::fromUserInput(dataDir + "/mkspecs");
|
||||||
@@ -1848,11 +1865,11 @@ bool BaseQtVersion::isSubProject(const FilePath &filePath) const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString &examples = examplesPath();
|
const QString examples = examplesPath().toString();
|
||||||
if (!examples.isEmpty() && filePath.isChildOf(QDir(examples)))
|
if (!examples.isEmpty() && filePath.isChildOf(QDir(examples)))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
const QString &demos = demosPath();
|
const QString demos = demosPath().toString();
|
||||||
if (!demos.isEmpty() && filePath.isChildOf(QDir(demos)))
|
if (!demos.isEmpty() && filePath.isChildOf(QDir(demos)))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -1927,10 +1944,10 @@ bool BaseQtVersion::isQtQuickCompilerSupported(QString *reason) const
|
|||||||
FilePathList BaseQtVersionPrivate::qtCorePaths()
|
FilePathList BaseQtVersionPrivate::qtCorePaths()
|
||||||
{
|
{
|
||||||
updateVersionInfo();
|
updateVersionInfo();
|
||||||
const QString &versionString = m_qtVersionString;
|
const QString versionString = m_qtVersionString;
|
||||||
|
|
||||||
const QString &installLibsDir = qmakeProperty(m_versionInfo, "QT_INSTALL_LIBS");
|
const QString installLibsDir = q->libraryPath().toString();
|
||||||
const QString &installBinDir = qmakeProperty(m_versionInfo, "QT_INSTALL_BINS");
|
const QString installBinDir = q->binPath().toString();
|
||||||
|
|
||||||
const QDir::Filters filters = QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot;
|
const QDir::Filters filters = QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot;
|
||||||
|
|
||||||
|
@@ -119,9 +119,6 @@ public:
|
|||||||
ProjectExplorer::Abis qtAbis() const;
|
ProjectExplorer::Abis qtAbis() const;
|
||||||
virtual ProjectExplorer::Abis detectQtAbis() const;
|
virtual ProjectExplorer::Abis detectQtAbis() const;
|
||||||
|
|
||||||
enum PropertyVariant { PropertyVariantDev, PropertyVariantGet, PropertyVariantSrc };
|
|
||||||
QString qmakeProperty(const QByteArray &name,
|
|
||||||
PropertyVariant variant = PropertyVariantGet) const;
|
|
||||||
void applyProperties(QMakeGlobals *qmakeGlobals) const;
|
void applyProperties(QMakeGlobals *qmakeGlobals) const;
|
||||||
virtual void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const;
|
virtual void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const;
|
||||||
virtual Utils::Environment qmakeRunEnvironment() const;
|
virtual Utils::Environment qmakeRunEnvironment() const;
|
||||||
@@ -143,18 +140,11 @@ public:
|
|||||||
QString qtVersionString() const;
|
QString qtVersionString() const;
|
||||||
QtVersionNumber qtVersion() const;
|
QtVersionNumber qtVersion() const;
|
||||||
|
|
||||||
bool hasExamples() const;
|
|
||||||
QString examplesPath() const;
|
|
||||||
|
|
||||||
QStringList qtSoPaths() const;
|
QStringList qtSoPaths() const;
|
||||||
|
|
||||||
bool hasDocumentation() const;
|
bool hasExamples() const;
|
||||||
QString documentationPath() const;
|
bool hasDocs() const;
|
||||||
|
|
||||||
bool hasDemos() const;
|
bool hasDemos() const;
|
||||||
QString demosPath() const;
|
|
||||||
|
|
||||||
QString frameworkInstallPath() const;
|
|
||||||
|
|
||||||
// former local functions
|
// former local functions
|
||||||
Utils::FilePath qmakeCommand() const;
|
Utils::FilePath qmakeCommand() const;
|
||||||
@@ -204,12 +194,25 @@ public:
|
|||||||
|
|
||||||
virtual ProjectExplorer::Tasks validateKit(const ProjectExplorer::Kit *k);
|
virtual ProjectExplorer::Tasks validateKit(const ProjectExplorer::Kit *k);
|
||||||
|
|
||||||
Utils::FilePath headerPath() const;
|
Utils::FilePath prefix() const;
|
||||||
|
|
||||||
|
Utils::FilePath binPath() const;
|
||||||
|
Utils::FilePath configurationPath() const;
|
||||||
|
Utils::FilePath dataPath() const;
|
||||||
|
Utils::FilePath demosPath() const;
|
||||||
Utils::FilePath docsPath() const;
|
Utils::FilePath docsPath() const;
|
||||||
|
Utils::FilePath examplesPath() const;
|
||||||
|
Utils::FilePath frameworkPath() const;
|
||||||
|
Utils::FilePath headerPath() const;
|
||||||
|
Utils::FilePath importsPath() const;
|
||||||
Utils::FilePath libraryPath() const;
|
Utils::FilePath libraryPath() const;
|
||||||
Utils::FilePath pluginPath() const;
|
Utils::FilePath pluginPath() const;
|
||||||
Utils::FilePath qmlPath() const;
|
Utils::FilePath qmlPath() const;
|
||||||
Utils::FilePath binPath() const;
|
Utils::FilePath translationsPath() const;
|
||||||
|
|
||||||
|
Utils::FilePath hostBinPath() const;
|
||||||
|
Utils::FilePath hostDataPath() const;
|
||||||
|
|
||||||
Utils::FilePath mkspecsPath() const;
|
Utils::FilePath mkspecsPath() const;
|
||||||
Utils::FilePath qmlBinPath() const;
|
Utils::FilePath qmlBinPath() const;
|
||||||
Utils::FilePath librarySearchPath() const;
|
Utils::FilePath librarySearchPath() const;
|
||||||
@@ -223,9 +226,6 @@ public:
|
|||||||
bool hasDebugBuild() const;
|
bool hasDebugBuild() const;
|
||||||
bool hasReleaseBuild() const;
|
bool hasReleaseBuild() const;
|
||||||
|
|
||||||
QStringList configValues() const;
|
|
||||||
QStringList qtConfigValues() const;
|
|
||||||
|
|
||||||
Utils::MacroExpander *macroExpander() const; // owned by the Qt version
|
Utils::MacroExpander *macroExpander() const; // owned by the Qt version
|
||||||
static std::unique_ptr<Utils::MacroExpander>
|
static std::unique_ptr<Utils::MacroExpander>
|
||||||
createMacroExpander(const std::function<const BaseQtVersion *()> &qtVersion);
|
createMacroExpander(const std::function<const BaseQtVersion *()> &qtVersion);
|
||||||
@@ -235,7 +235,6 @@ public:
|
|||||||
|
|
||||||
QSet<Core::Id> features() const;
|
QSet<Core::Id> features() const;
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BaseQtVersion();
|
BaseQtVersion();
|
||||||
BaseQtVersion(const BaseQtVersion &other) = delete;
|
BaseQtVersion(const BaseQtVersion &other) = delete;
|
||||||
|
@@ -141,7 +141,7 @@ void ExampleSetModel::recreateModel(const QList<BaseQtVersion *> &qtVersions)
|
|||||||
|
|
||||||
foreach (BaseQtVersion *version, qtVersions) {
|
foreach (BaseQtVersion *version, qtVersions) {
|
||||||
// sanitize away qt versions that have already been added through extra sets
|
// sanitize away qt versions that have already been added through extra sets
|
||||||
if (extraManifestDirs.contains(version->documentationPath())) {
|
if (extraManifestDirs.contains(version->docsPath().toString())) {
|
||||||
if (debugExamples()) {
|
if (debugExamples()) {
|
||||||
qWarning() << "Not showing Qt version because manifest path is already added through InstalledExamples settings:"
|
qWarning() << "Not showing Qt version because manifest path is already added through InstalledExamples settings:"
|
||||||
<< version->displayName();
|
<< version->displayName();
|
||||||
@@ -172,7 +172,7 @@ int ExampleSetModel::indexForQtVersion(BaseQtVersion *qtVersion) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check for extra set
|
// check for extra set
|
||||||
const QString &documentationPath = qtVersion->documentationPath();
|
const QString &documentationPath = qtVersion->docsPath().toString();
|
||||||
for (int i = 0; i < rowCount(); ++i) {
|
for (int i = 0; i < rowCount(); ++i) {
|
||||||
if (getType(i) == ExtraExampleSetType
|
if (getType(i) == ExtraExampleSetType
|
||||||
&& m_extraExampleSets.at(getExtraExampleSetIndex(i)).manifestPath == documentationPath)
|
&& m_extraExampleSets.at(getExtraExampleSetIndex(i)).manifestPath == documentationPath)
|
||||||
@@ -577,9 +577,9 @@ QStringList ExampleSetModel::exampleSources(QString *examplesInstallPath, QStrin
|
|||||||
int qtId = getQtId(m_selectedExampleSetIndex);
|
int qtId = getQtId(m_selectedExampleSetIndex);
|
||||||
foreach (BaseQtVersion *version, QtVersionManager::versions()) {
|
foreach (BaseQtVersion *version, QtVersionManager::versions()) {
|
||||||
if (version->uniqueId() == qtId) {
|
if (version->uniqueId() == qtId) {
|
||||||
manifestScanPath = version->documentationPath();
|
manifestScanPath = version->docsPath().toString();
|
||||||
examplesPath = version->examplesPath();
|
examplesPath = version->examplesPath().toString();
|
||||||
demosPath = version->demosPath();
|
demosPath = version->demosPath().toString();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -58,7 +58,7 @@ static inline QStringList validPrebuiltFilenames(bool debugBuild)
|
|||||||
QString QmlDumpTool::toolForVersion(const BaseQtVersion *version, bool debugDump)
|
QString QmlDumpTool::toolForVersion(const BaseQtVersion *version, bool debugDump)
|
||||||
{
|
{
|
||||||
if (version) {
|
if (version) {
|
||||||
const QString qtInstallBins = version->qmakeProperty("QT_INSTALL_BINS");
|
const QString qtInstallBins = version->binPath().toString();
|
||||||
return toolForQtPaths(qtInstallBins, debugDump);
|
return toolForQtPaths(qtInstallBins, debugDump);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -619,7 +619,7 @@ void QtOptionsPageWidget::editPath()
|
|||||||
tr("Select a qmake Executable"),
|
tr("Select a qmake Executable"),
|
||||||
dir,
|
dir,
|
||||||
BuildableHelperLibrary::filterForQmakeFileDialog(),
|
BuildableHelperLibrary::filterForQmakeFileDialog(),
|
||||||
0,
|
nullptr,
|
||||||
QFileDialog::DontResolveSymlinks));
|
QFileDialog::DontResolveSymlinks));
|
||||||
if (qtVersion.isEmpty())
|
if (qtVersion.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
@@ -104,30 +104,36 @@ bool QtSupportPlugin::initialize(const QStringList &arguments, QString *errorMes
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QString qmakeProperty(const char *propertyName)
|
static BaseQtVersion *qtVersion()
|
||||||
{
|
{
|
||||||
ProjectExplorer::Project *project = ProjectExplorer::ProjectTree::currentProject();
|
ProjectExplorer::Project *project = ProjectExplorer::ProjectTree::currentProject();
|
||||||
if (!project || !project->activeTarget())
|
if (!project || !project->activeTarget())
|
||||||
return QString();
|
return nullptr;
|
||||||
|
|
||||||
const BaseQtVersion *qtVersion = QtKitAspect::qtVersion(project->activeTarget()->kit());
|
return QtKitAspect::qtVersion(project->activeTarget()->kit());
|
||||||
if (!qtVersion)
|
|
||||||
return QString();
|
|
||||||
return qtVersion->qmakeProperty(propertyName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QtSupportPlugin::extensionsInitialized()
|
void QtSupportPlugin::extensionsInitialized()
|
||||||
{
|
{
|
||||||
Utils::MacroExpander *expander = Utils::globalMacroExpander();
|
Utils::MacroExpander *expander = Utils::globalMacroExpander();
|
||||||
|
|
||||||
expander->registerVariable(kHostBins,
|
expander->registerVariable(
|
||||||
|
kHostBins,
|
||||||
tr("Full path to the host bin directory of the current project's Qt version."),
|
tr("Full path to the host bin directory of the current project's Qt version."),
|
||||||
[]() { return qmakeProperty("QT_HOST_BINS"); });
|
[]() {
|
||||||
|
BaseQtVersion *qt = qtVersion();
|
||||||
|
return qt ? qt->hostBinPath().toUserOutput() : QString();
|
||||||
|
});
|
||||||
|
|
||||||
expander->registerVariable(kInstallBins,
|
expander->registerVariable(
|
||||||
|
kInstallBins,
|
||||||
tr("Full path to the target bin directory of the current project's Qt version.<br>"
|
tr("Full path to the target bin directory of the current project's Qt version.<br>"
|
||||||
"You probably want %1 instead.").arg(QString::fromLatin1(kHostBins)),
|
"You probably want %1 instead.")
|
||||||
[]() { return qmakeProperty("QT_INSTALL_BINS"); });
|
.arg(QString::fromLatin1(kInstallBins)),
|
||||||
|
[]() {
|
||||||
|
BaseQtVersion *qt = qtVersion();
|
||||||
|
return qt ? qt->binPath().toUserOutput() : QString();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
@@ -469,8 +469,8 @@ static void updateDocumentation()
|
|||||||
{
|
{
|
||||||
QStringList files;
|
QStringList files;
|
||||||
foreach (BaseQtVersion *v, m_versions) {
|
foreach (BaseQtVersion *v, m_versions) {
|
||||||
const QStringList docPaths = QStringList({v->documentationPath() + QChar('/'),
|
const QStringList docPaths = QStringList(
|
||||||
v->documentationPath() + "/qch/"});
|
{v->docsPath().toString() + QChar('/'), v->docsPath().toString() + "/qch/"});
|
||||||
foreach (const QString &docPath, docPaths) {
|
foreach (const QString &docPath, docPaths) {
|
||||||
const QDir versionHelpDir(docPath);
|
const QDir versionHelpDir(docPath);
|
||||||
foreach (const QString &helpFile,
|
foreach (const QString &helpFile,
|
||||||
|
@@ -127,15 +127,7 @@ EmbeddedLinuxQtVersionFactory::EmbeddedLinuxQtVersionFactory()
|
|||||||
setSupportedType(EMBEDDED_LINUX_QT);
|
setSupportedType(EMBEDDED_LINUX_QT);
|
||||||
setPriority(10);
|
setPriority(10);
|
||||||
|
|
||||||
setRestrictionChecker([](const SetupData &) {
|
setRestrictionChecker([](const SetupData &) { return false; });
|
||||||
const EmbeddedLinuxQtVersion tempVersion;
|
|
||||||
const ProjectExplorer::Abis abis = tempVersion.qtAbis();
|
|
||||||
|
|
||||||
// Note: This fails for e.g. intel/meego cross builds on x86 linux machines.
|
|
||||||
return abis.count() == 1
|
|
||||||
&& abis.at(0).os() == ProjectExplorer::Abi::LinuxOS
|
|
||||||
&& !ProjectExplorer::Abi::hostAbi().isCompatibleWith(abis.at(0));
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
@@ -225,7 +225,7 @@ QString WinRtDeviceFactory::findRunnerFilePath() const
|
|||||||
BaseQtVersion *qt = nullptr;
|
BaseQtVersion *qt = nullptr;
|
||||||
for (BaseQtVersion *v : winrtVersions) {
|
for (BaseQtVersion *v : winrtVersions) {
|
||||||
if (!qt || qt->qtVersion() < v->qtVersion()) {
|
if (!qt || qt->qtVersion() < v->qtVersion()) {
|
||||||
QFileInfo fi(v->binPath().toString() + winRtRunnerExe);
|
QFileInfo fi(v->hostBinPath().toString() + winRtRunnerExe);
|
||||||
if (fi.isFile() && fi.isExecutable()) {
|
if (fi.isFile() && fi.isExecutable()) {
|
||||||
qt = v;
|
qt = v;
|
||||||
filePath = fi.absoluteFilePath();
|
filePath = fi.absoluteFilePath();
|
||||||
|
@@ -91,7 +91,8 @@ bool WinRtPackageDeploymentStep::init()
|
|||||||
if (!qt)
|
if (!qt)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const QString windeployqtPath = FileUtils::resolvePath(qt->binPath().toString(), "windeployqt.exe");
|
const QString windeployqtPath = FileUtils::resolvePath(qt->hostBinPath().toString(),
|
||||||
|
"windeployqt.exe");
|
||||||
|
|
||||||
CommandLine windeployqt{windeployqtPath};
|
CommandLine windeployqt{windeployqtPath};
|
||||||
windeployqt.addArg(QDir::toNativeSeparators(m_targetFilePath));
|
windeployqt.addArg(QDir::toNativeSeparators(m_targetFilePath));
|
||||||
@@ -104,8 +105,8 @@ bool WinRtPackageDeploymentStep::init()
|
|||||||
|
|
||||||
ProcessParameters *params = processParameters();
|
ProcessParameters *params = processParameters();
|
||||||
if (!QFile::exists(windeployqtPath)) {
|
if (!QFile::exists(windeployqtPath)) {
|
||||||
raiseError(tr("Cannot find windeployqt.exe in \"%1\".").arg(
|
raiseError(tr("Cannot find windeployqt.exe in \"%1\".")
|
||||||
QDir::toNativeSeparators(qt->binPath().toString())));
|
.arg(QDir::toNativeSeparators(qt->hostBinPath().toString())));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
params->setCommandLine(windeployqt);
|
params->setCommandLine(windeployqt);
|
||||||
|
@@ -62,10 +62,10 @@ WinRtRunnerHelper::WinRtRunnerHelper(ProjectExplorer::RunWorker *runWorker, QStr
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_runnerFilePath = qt->binPath().toString() + QStringLiteral("/winrtrunner.exe");
|
m_runnerFilePath = qt->hostBinPath().toString() + QStringLiteral("/winrtrunner.exe");
|
||||||
if (!QFile::exists(m_runnerFilePath)) {
|
if (!QFile::exists(m_runnerFilePath)) {
|
||||||
*errorMessage = tr("Cannot find winrtrunner.exe in \"%1\".").arg(
|
*errorMessage = tr("Cannot find winrtrunner.exe in \"%1\".").arg(
|
||||||
QDir::toNativeSeparators(qt->binPath().toString()));
|
QDir::toNativeSeparators(qt->hostBinPath().toString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -84,6 +84,7 @@ Tricky parts:
|
|||||||
* `ProjectExplorer.ToolChain.Custom` for custom toolchain
|
* `ProjectExplorer.ToolChain.Custom` for custom toolchain
|
||||||
* `Qt4ProjectManager.ToolChain.Android` for the Android tool chain
|
* `Qt4ProjectManager.ToolChain.Android` for the Android tool chain
|
||||||
* `Qnx.QccToolChain` for the Qnx QCC tool chain
|
* `Qnx.QccToolChain` for the Qnx QCC tool chain
|
||||||
|
* `WebAssembly.ToolChain.Emscripten` for the Emscripten tool chain
|
||||||
|
|
||||||
Check the classes derived from `ProjectExplorer::ToolChain` for their
|
Check the classes derived from `ProjectExplorer::ToolChain` for their
|
||||||
Ids.
|
Ids.
|
||||||
@@ -141,7 +142,7 @@ Tricky parts:
|
|||||||
|
|
||||||
- `type` must be the string returned by `BaseQtVersion::type()`.
|
- `type` must be the string returned by `BaseQtVersion::type()`.
|
||||||
|
|
||||||
Currently these are (Qt Creator 4.6):
|
Currently these are (Qt Creator 4.11):
|
||||||
* `Qt4ProjectManager.QtVersion.Android` for Android
|
* `Qt4ProjectManager.QtVersion.Android` for Android
|
||||||
* `Qt4ProjectManager.QtVersion.Desktop` for a desktop Qt
|
* `Qt4ProjectManager.QtVersion.Desktop` for a desktop Qt
|
||||||
* `Qt4ProjectManager.QtVersion.Ios` for iOS
|
* `Qt4ProjectManager.QtVersion.Ios` for iOS
|
||||||
@@ -149,6 +150,7 @@ Tricky parts:
|
|||||||
* `RemoteLinux.EmbeddedLinuxQt` for Embedded Linux
|
* `RemoteLinux.EmbeddedLinuxQt` for Embedded Linux
|
||||||
* `WinRt.QtVersion.WindowsRuntime` for Windows RT
|
* `WinRt.QtVersion.WindowsRuntime` for Windows RT
|
||||||
* `WinRt.QtVersion.WindowsPhone` for Windows RT phone
|
* `WinRt.QtVersion.WindowsPhone` for Windows RT phone
|
||||||
|
* `Qt4ProjectManager.QtVersion.WebAssembly` for WebAssembly
|
||||||
|
|
||||||
Add a kit:
|
Add a kit:
|
||||||
==========
|
==========
|
||||||
@@ -171,7 +173,7 @@ Using the newly set up tool chain and Qt version:
|
|||||||
Tricky parts:
|
Tricky parts:
|
||||||
- `devicetype` is the string returned IDevice::type()
|
- `devicetype` is the string returned IDevice::type()
|
||||||
|
|
||||||
Currently these are (Qt Creator 4.6):
|
Currently these are (Qt Creator 4.11):
|
||||||
* `Android.Device.Type` for Android devices
|
* `Android.Device.Type` for Android devices
|
||||||
* `Desktop` for code running on the local desktop
|
* `Desktop` for code running on the local desktop
|
||||||
* `Ios.Device.Type` for an iOS device
|
* `Ios.Device.Type` for an iOS device
|
||||||
@@ -180,6 +182,7 @@ Tricky parts:
|
|||||||
* `WinRt.Device.Local` for Windows RT (local)
|
* `WinRt.Device.Local` for Windows RT (local)
|
||||||
* `WinRt.Device.Emulator` for a Windows RT emulator
|
* `WinRt.Device.Emulator` for a Windows RT emulator
|
||||||
* `WinRt.Device.Phone` for a Windows RT phone
|
* `WinRt.Device.Phone` for a Windows RT phone
|
||||||
|
* `WebAssemblyDeviceType` for a web browser that supports WebAssembly
|
||||||
|
|
||||||
- `debuggerid` is one of the ids used when setting up toolchains with
|
- `debuggerid` is one of the ids used when setting up toolchains with
|
||||||
`sdktool addDebugger`.
|
`sdktool addDebugger`.
|
||||||
|
Reference in New Issue
Block a user