diff --git a/src/plugins/projectexplorer/userfileaccessor.cpp b/src/plugins/projectexplorer/userfileaccessor.cpp index 005d3fee21b..84080445c49 100644 --- a/src/plugins/projectexplorer/userfileaccessor.cpp +++ b/src/plugins/projectexplorer/userfileaccessor.cpp @@ -52,159 +52,6 @@ const char OBSOLETE_VERSION_KEY[] = "ProjectExplorer.Project.Updater.FileVersion const char SHARED_SETTINGS[] = "SharedSettings"; const char USER_STICKY_KEYS_KEY[] = "UserStickyKeys"; -// Version 1 is used in master post Qt Creator 1.3.x. -// It was never used in any official release but is required for the -// transition to later versions (which introduce support for targets). -class UserFileVersion1Upgrader : public VersionUpgrader -{ -public: - UserFileVersion1Upgrader(UserFileAccessor *a) : VersionUpgrader(1, "1.3+git"), m_accessor(a) { } - QVariantMap upgrade(const QVariantMap &map) override; - -private: - struct TargetDescription - { - TargetDescription(const QString &tid, const QString &dn) : - id(tid), - displayName(dn) - { } - - QString id; - QString displayName; - }; - - UserFileAccessor *m_accessor; -}; - -// Version 2 is used in master post Qt Creator 2.0 alpha. -class UserFileVersion2Upgrader : public VersionUpgrader -{ -public: - UserFileVersion2Upgrader() : VersionUpgrader(2, "2.0-alpha+git") { } - QVariantMap upgrade(const QVariantMap &map) final; -}; - -// Version 3 reflect the move of symbian signing from run to build step. -class UserFileVersion3Upgrader : public VersionUpgrader -{ -public: - UserFileVersion3Upgrader() : VersionUpgrader(3, "2.0-alpha2+git") { } - QVariantMap upgrade(const QVariantMap &map) final; -}; - -// Version 4 reflects the introduction of deploy steps -class UserFileVersion4Upgrader : public VersionUpgrader -{ -public: - UserFileVersion4Upgrader() : VersionUpgrader(4, "2.1pre1") { } - QVariantMap upgrade(const QVariantMap &map) final; -}; - -// Version 5 reflects the introduction of new deploy steps for Symbian/Maemo -class UserFileVersion5Upgrader : public VersionUpgrader -{ -public: - UserFileVersion5Upgrader() : VersionUpgrader(5, "2.1pre2") { } - QVariantMap upgrade(const QVariantMap &map) final; -}; - -// Version 6 reflects the introduction of new deploy steps for Symbian/Maemo -class UserFileVersion6Upgrader : public VersionUpgrader -{ -public: - UserFileVersion6Upgrader() : VersionUpgrader(6, "2.1pre3") { } - QVariantMap upgrade(const QVariantMap &map) final; -}; - -// Version 7 reflects the introduction of new deploy configuration for Symbian -class UserFileVersion7Upgrader : public VersionUpgrader -{ -public: - UserFileVersion7Upgrader() : VersionUpgrader(7, "2.1pre4") { } - QVariantMap upgrade(const QVariantMap &map) final; -}; - -// Version 8 reflects the change of environment variable expansion rules, -// turning some env variables into expandos, the change of argument quoting rules, -// and the change of VariableManager's expansion syntax. -class UserFileVersion8Upgrader : public VersionUpgrader -{ -public: - // pre5 because we renamed 2.2 to 2.1 later, so people already have 2.2pre4 files - UserFileVersion8Upgrader() : VersionUpgrader(8, "2.2pre5") { } - QVariantMap upgrade(const QVariantMap &map) final; -}; - -// Version 9 reflects the refactoring of the Maemo deploy step. -class UserFileVersion9Upgrader : public VersionUpgrader -{ -public: - UserFileVersion9Upgrader() : VersionUpgrader(9, "2.3pre1") { } - QVariantMap upgrade(const QVariantMap &map) final; -}; - -// Version 10 introduces disabling buildsteps, and handles upgrading custom process steps -class UserFileVersion10Upgrader : public VersionUpgrader -{ -public: - UserFileVersion10Upgrader() : VersionUpgrader(10, "2.5pre1") { } - QVariantMap upgrade(const QVariantMap &map) final; -}; - -// Version 11 introduces kits -class UserFileVersion11Upgrader : public VersionUpgrader -{ -public: - UserFileVersion11Upgrader(UserFileAccessor *a) : VersionUpgrader(11, "2.6pre1"), m_accessor(a) { } - ~UserFileVersion11Upgrader() final; - - QVariantMap upgrade(const QVariantMap &map) final; - -private: - Kit *uniqueKit(Kit *k); - void addBuildConfiguration(Kit *k, const QVariantMap &bc, int bcPos, int bcCount); - void addDeployConfiguration(Kit *k, const QVariantMap &dc, int dcPos, int dcActive); - void addRunConfigurations(Kit *k, - const QMap &rcs, int activeRc, const QString &projectDir); - - void parseQtversionFile(); - void parseToolChainFile(); - - class ToolChainExtraData { - public: - explicit ToolChainExtraData(const QString &mks = QString(), const QString &d = QString()) : - m_mkspec(mks), m_debugger(d) - { } - - QString m_mkspec; - QString m_debugger; - }; - - QHash m_toolChainExtras; - QHash m_qtVersionExtras; - - QHash m_targets; - UserFileAccessor *m_accessor; -}; - -// Version 12 reflects the move of environment settings from CMake/Qt4/Custom into -// LocalApplicationRunConfiguration -class UserFileVersion12Upgrader : public VersionUpgrader -{ -public: - UserFileVersion12Upgrader() : VersionUpgrader(12, "2.7pre1") { } - QVariantMap upgrade(const QVariantMap &map) final; -}; - -// Version 13 reflects the move of environment settings from LocalApplicationRunConfiguration -// into the EnvironmentAspect -class UserFileVersion13Upgrader : public VersionUpgrader -{ -public: - UserFileVersion13Upgrader() : VersionUpgrader(13, "2.8") { } - QVariantMap upgrade(const QVariantMap &map) final; -}; - // Version 14 Move builddir into BuildConfiguration class UserFileVersion14Upgrader : public VersionUpgrader { @@ -470,19 +317,6 @@ UserFileAccessor::UserFileAccessor(Project *project) : setSettingsId(ProjectExplorerPlugin::projectExplorerSettings().environmentId.toByteArray()); // Register Upgraders: - addVersionUpgrader(std::make_unique(this)); - addVersionUpgrader(std::make_unique()); - addVersionUpgrader(std::make_unique()); - addVersionUpgrader(std::make_unique()); - addVersionUpgrader(std::make_unique()); - addVersionUpgrader(std::make_unique()); - addVersionUpgrader(std::make_unique()); - addVersionUpgrader(std::make_unique()); - addVersionUpgrader(std::make_unique()); - addVersionUpgrader(std::make_unique()); - addVersionUpgrader(std::make_unique(this)); - addVersionUpgrader(std::make_unique()); - addVersionUpgrader(std::make_unique()); addVersionUpgrader(std::make_unique()); addVersionUpgrader(std::make_unique()); addVersionUpgrader(std::make_unique()); @@ -624,1291 +458,6 @@ QVariantMap UserFileAccessor::prepareToWriteSettings(const QVariantMap &data) co return result; } -// ------------------------------------------------------------------------- -// UserFileVersion1Upgrader: -// ------------------------------------------------------------------------- - -QVariantMap UserFileVersion1Upgrader::upgrade(const QVariantMap &map) -{ - QVariantMap result; - - // The only difference between version 1 and 2 of the user file is that - // we need to add targets. - - // Generate a list of all possible targets for the project: - Project *project = m_accessor->project(); - QList targets; - if (project->id() == "GenericProjectManager.GenericProject") - targets << TargetDescription(QString::fromLatin1("GenericProjectManager.GenericTarget"), - QCoreApplication::translate("GenericProjectManager::GenericTarget", - "Desktop", - "Generic desktop target display name")); - else if (project->id() == "CMakeProjectManager.CMakeProject") - targets << TargetDescription(QString::fromLatin1("CMakeProjectManager.DefaultCMakeTarget"), - QCoreApplication::translate("CMakeProjectManager::Internal::CMakeTarget", - "Desktop", - "CMake Default target display name")); - else if (project->id() == "Qt4ProjectManager.Qt4Project") - targets << TargetDescription(QString::fromLatin1("Qt4ProjectManager.Target.DesktopTarget"), - QCoreApplication::translate("QmakeProjectManager::Internal::Qt4Target", - "Desktop", - "Qt4 Desktop target display name")) - << TargetDescription(QString::fromLatin1("Qt4ProjectManager.Target.MaemoEmulatorTarget"), - QCoreApplication::translate("QmakeProjectManager::Internal::Qt4Target", - "Maemo Emulator", - "Qt4 Maemo Emulator target display name")) - << TargetDescription(QString::fromLatin1("Qt4ProjectManager.Target.MaemoDeviceTarget"), - QCoreApplication::translate("QmakeProjectManager::Internal::Qt4Target", - "Maemo Device", - "Qt4 Maemo Device target display name")); - else if (project->id() == "QmlProjectManager.QmlProject") - targets << TargetDescription(QString::fromLatin1("QmlProjectManager.QmlTarget"), - QCoreApplication::translate("QmlProjectManager::QmlTarget", - "QML Viewer", - "QML Viewer target display name")); - else - return QVariantMap(); // We do not know how to handle this. - - result.insert("ProjectExplorer.Project.ActiveTarget", 0); - result.insert("ProjectExplorer.Project.TargetCount", targets.count()); - int pos(0); - foreach (const TargetDescription &td, targets) { - QVariantMap targetMap; - // Do not set displayName or icon! - targetMap.insert("ProjectExplorer.ProjectConfiguration.Id", td.id); - - int count = map.value("ProjectExplorer.Project.BuildConfigurationCount").toInt(); - targetMap.insert("ProjectExplorer.Target.BuildConfigurationCount", count); - for (int i = 0; i < count; ++i) { - QString key(QString::fromLatin1("ProjectExplorer.Project.BuildConfiguration.") + QString::number(i)); - if (map.contains(key)) { - QVariantMap bcMap = map.value(key).toMap(); - if (!bcMap.contains("Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild")) - bcMap.insert("Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild", false); - targetMap.insert(QString::fromLatin1("ProjectExplorer.Target.BuildConfiguration.") + QString::number(i), - bcMap); - } - } - - count = map.value("ProjectExplorer.Project.RunConfigurationCount").toInt(); - for (int i = 0; i < count; ++i) { - QString key(QString::fromLatin1("ProjectExplorer.Project.RunConfiguration.") + QString::number(i)); - if (map.contains(key)) - targetMap.insert(QString::fromLatin1("ProjectExplorer.Target.RunConfiguration.") + QString::number(i), - map.value(key)); - } - - if (map.contains("ProjectExplorer.Project.ActiveBuildConfiguration")) - targetMap.insert("ProjectExplorer.Target.ActiveBuildConfiguration", - map.value("ProjectExplorer.Project.ActiveBuildConfiguration")); - if (map.contains("ProjectExplorer.Project.ActiveRunConfiguration")) - targetMap.insert("ProjectExplorer.Target.ActiveRunConfiguration", - map.value("ProjectExplorer.Project.ActiveRunConfiguration")); - if (map.contains("ProjectExplorer.Project.RunConfigurationCount")) - targetMap.insert("ProjectExplorer.Target.RunConfigurationCount", - map.value("ProjectExplorer.Project.RunConfigurationCount")); - - result.insert(QString::fromLatin1("ProjectExplorer.Project.Target.") + QString::number(pos), targetMap); - ++pos; - } - - // copy everything else: - for (QVariantMap::const_iterator i = map.constBegin(); i != map.constEnd(); ++i) { - if (i.key() == "ProjectExplorer.Project.ActiveBuildConfiguration" || - i.key() == "ProjectExplorer.Project.BuildConfigurationCount" || - i.key() == "ProjectExplorer.Project.ActiveRunConfiguration" || - i.key() == "ProjectExplorer.Project.RunConfigurationCount" || - i.key().startsWith("ProjectExplorer.Project.BuildConfiguration.") || - i.key().startsWith("ProjectExplorer.Project.RunConfiguration.")) - continue; - result.insert(i.key(), i.value()); - } - - return result; -} - -// ------------------------------------------------------------------------- -// UserFileVersion2Upgrader: -// ------------------------------------------------------------------------- - -QVariantMap UserFileVersion2Upgrader::upgrade(const QVariantMap &map) -{ - QList changes; - changes.append(qMakePair(QLatin1String("CMakeProjectManager.CMakeBuildConfiguration.UserEnvironmentChanges"), - QLatin1String("ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"))); - changes.append(qMakePair(QLatin1String("CMakeProjectManager.CMakeBuildConfiguration.ClearSystemEnvironment"), - QLatin1String("ProjectExplorer.BuildConfiguration.ClearSystemEnvironment"))); - changes.append(qMakePair(QLatin1String("Qt4ProjectManager.Qt4BuildConfiguration.UserEnvironmentChanges"), - QLatin1String("ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"))); - changes.append(qMakePair(QLatin1String("Qt4ProjectManager.Qt4BuildConfiguration.ClearSystemEnvironment"), - QLatin1String("ProjectExplorer.BuildConfiguration.ClearSystemEnvironment"))); - - return renameKeys(changes, QVariantMap(map)); -} - -// ------------------------------------------------------------------------- -// UserFileVersion3Upgrader: -// ------------------------------------------------------------------------- - -// insert the additional build step: -// -// Create sis Package -// Qt4ProjectManager.S60SignBuildStep -// false -// -// -// -// -// 0 -// - -// remove the deprecated sign run settings from -// -// untitled1 on Symbian Device -// Qt4ProjectManager.S60DeviceRunConfiguration -// -// -// -// untitled1.pro -// COM3 -// 0 -// - -QVariantMap UserFileVersion3Upgrader::upgrade(const QVariantMap &map) -{ - QVariantMap result; - QMapIterator it(map); - while (it.hasNext()) { - it.next(); - const QString &targetKey = it.key(); - // check for target info - if (!targetKey.startsWith("ProjectExplorer.Project.Target.")) { - result.insert(targetKey, it.value()); - continue; - } - const QVariantMap &originalTarget = it.value().toMap(); - result.insert(targetKey, originalTarget); - } - return result; -} - -// ------------------------------------------------------------------------- -// UserFileVersion4Upgrader: -// ------------------------------------------------------------------------- - -// Move packaging steps from build steps into deploy steps -QVariantMap UserFileVersion4Upgrader::upgrade(const QVariantMap &map) -{ - QVariantMap result; - QMapIterator it(map); - while (it.hasNext()) { - it.next(); - const QString &globalKey = it.key(); - // check for target info - if (!globalKey.startsWith("ProjectExplorer.Project.Target.")) { - result.insert(globalKey, it.value()); - continue; - } - const QVariantMap &originalTarget = it.value().toMap(); - // check for maemo device target - if (originalTarget.value("ProjectExplorer.ProjectConfiguration.Id") - != "Qt4ProjectManager.Target.MaemoDeviceTarget") - { - result.insert(globalKey, originalTarget); - continue; - } - - QVariantMap newTarget; - QMapIterator targetIt(originalTarget); - while (targetIt.hasNext()) { - targetIt.next(); - const QString &targetKey = targetIt.key(); - - if (targetKey.startsWith("ProjectExplorer.Target.RunConfiguration.")) { - const QVariantMap &runConfigMap = targetIt.value().toMap(); - const QLatin1String maemoRcId("Qt4ProjectManager.MaemoRunConfiguration"); - if (runConfigMap.value("ProjectExplorer.ProjectConfiguration.Id").toString() - == maemoRcId) { - QVariantMap newRunConfigMap; - for (QVariantMap::ConstIterator rcMapIt = runConfigMap.constBegin(); - rcMapIt != runConfigMap.constEnd(); ++rcMapIt) { - const QLatin1String oldProFileKey(".ProFile"); - if (rcMapIt.key() == oldProFileKey) { - newRunConfigMap.insert(maemoRcId + oldProFileKey, - rcMapIt.value()); - } else { - newRunConfigMap.insert(rcMapIt.key(), - rcMapIt.value()); - } - } - newTarget.insert(targetKey, newRunConfigMap); - continue; - } - } - - if (!targetKey.startsWith("ProjectExplorer.Target.BuildConfiguration.")) { - newTarget.insert(targetKey, targetIt.value()); - continue; - } - - bool movedBs = false; - const QVariantMap &originalBc = targetIt.value().toMap(); - QVariantMap newBc; - QMapIterator bcIt(originalBc); - while (bcIt.hasNext()) { - bcIt.next(); - const QString &bcKey = bcIt.key(); - if (!bcKey.startsWith("ProjectExplorer.BuildConfiguration.BuildStep.")) { - newBc.insert(bcKey, bcIt.value()); - continue; - } - - const QVariantMap &buildStep = bcIt.value().toMap(); - if ((buildStep.value("ProjectExplorer.ProjectConfiguration.Id").toString() == - "Qt4ProjectManager.S60SignBuildStep") - || (buildStep.value("ProjectExplorer.ProjectConfiguration.Id").toString() == - "Qt4ProjectManager.MaemoPackageCreationStep")) { - movedBs = true; - newBc.insert("ProjectExplorer.BuildConfiguration.DeployStep.0", buildStep); - } else { - newBc.insert(bcKey, buildStep); - } - } - if (movedBs) { - // adjust counts: - newBc.insert("ProjectExplorer.BuildConfiguration.DeployStepsCount", 1); - newBc.insert("ProjectExplorer.BuildConfiguration.BuildStepsCount", - newBc.value("ProjectExplorer.BuildConfiguration.BuildStepsCount").toInt() - 1); - } - newTarget.insert(targetKey, newBc); - } - result.insert(globalKey, newTarget); - } - return result; -} - -// ------------------------------------------------------------------------- -// UserFileVersion5Upgrader: -// ------------------------------------------------------------------------- - -// Move packaging steps from build steps into deploy steps -QVariantMap UserFileVersion5Upgrader::upgrade(const QVariantMap &map) -{ - QVariantMap result; - QMapIterator it(map); - while (it.hasNext()) { - it.next(); - const QString &globalKey = it.key(); - // check for target info - if (!globalKey.startsWith("ProjectExplorer.Project.Target.")) { - result.insert(globalKey, it.value()); - continue; - } - const QVariantMap &originalTarget = it.value().toMap(); - // check for maemo device target - if (originalTarget.value("ProjectExplorer.ProjectConfiguration.Id") - != "Qt4ProjectManager.Target.MaemoDeviceTarget") { - result.insert(globalKey, originalTarget); - continue; - } - - QVariantMap newTarget; - QMapIterator targetIt(originalTarget); - while (targetIt.hasNext()) { - targetIt.next(); - const QString &targetKey = targetIt.key(); - if (!targetKey.startsWith("ProjectExplorer.Target.BuildConfiguration.")) { - newTarget.insert(targetKey, targetIt.value()); - continue; - } - - const QVariantMap &originalBc = targetIt.value().toMap(); - QVariantMap newBc = originalBc; - QVariantMap newDeployStep; - - if (originalTarget.value("ProjectExplorer.ProjectConfiguration.Id") - == "Qt4ProjectManager.Target.S60DeviceTarget") { - newDeployStep.insert("ProjectExplorer.ProjectConfiguration.Id", - "Qt4ProjectManager.S60DeployStep"); - } else { - newDeployStep.insert("ProjectExplorer.ProjectConfiguration.Id", - "Qt4ProjectManager.MaemoDeployStep"); - } - - int deployCount = newBc.value("ProjectExplorer.BuildConfiguration.DeployStepsCount", 0).toInt(); - newBc.insert(QString::fromLatin1("ProjectExplorer.BuildConfiguration.DeployStep.") + QString::number(deployCount), - newDeployStep); - newBc.insert("ProjectExplorer.BuildConfiguration.DeployStepsCount", deployCount + 1); - - newTarget.insert(targetKey, newBc); - } - result.insert(globalKey, newTarget); - } - return result; -} - -// ------------------------------------------------------------------------- -// UserFileVersion6Upgrader: -// ------------------------------------------------------------------------- - -// Introduce DeployConfiguration and BuildStepLists -QVariantMap UserFileVersion6Upgrader::upgrade(const QVariantMap &map) -{ - QVariantMap result; - QMapIterator it(map); - while (it.hasNext()) { - it.next(); - const QString &globalKey = it.key(); - // check for target info - if (!globalKey.startsWith("ProjectExplorer.Project.Target.")) { - result.insert(globalKey, it.value()); - continue; - } - - QVariantMap newDc; - const QVariantMap &originalTarget = it.value().toMap(); - QVariantMap newTarget; - QVariantMap deploySteps; - QString deploymentName = QCoreApplication::translate("ProjectExplorer::UserFileHandler", "No deployment"); - - QMapIterator targetIt(originalTarget); - while (targetIt.hasNext()) { - targetIt.next(); - const QString &targetKey = targetIt.key(); - - if (targetKey == "ProjectExplorer.ProjectConfiguration.Id") { - if (targetIt.value().toString() == "Qt4ProjectManager.Target.MaemoDeviceTarget") - deploymentName = QCoreApplication::translate("ProjectExplorer::UserFileHandler", "Deploy to Maemo device"); - } - - if (!targetKey.startsWith("ProjectExplorer.Target.BuildConfiguration.")) { - newTarget.insert(targetKey, targetIt.value()); - continue; - } - - QVariantMap buildSteps; - QVariantMap cleanSteps; - const QVariantMap &originalBc = targetIt.value().toMap(); - QVariantMap newBc; - - QMapIterator bcIt(originalBc); - while (bcIt.hasNext()) - { - bcIt.next(); - const QString &bcKey = bcIt.key(); - if (bcKey.startsWith("ProjectExplorer.BuildConfiguration.BuildStep.")) { - QString position = bcKey.mid(45); - buildSteps.insert(QString::fromLatin1("ProjectExplorer.BuildStepList.Step.") + position, bcIt.value()); - continue; - } - if (bcKey.startsWith("ProjectExplorer.BuildConfiguration.BuildStepsCount")) { - buildSteps.insert("ProjectExplorer.BuildStepList.StepsCount", bcIt.value()); - continue; - } - if (bcKey.startsWith("ProjectExplorer.BuildConfiguration.CleanStep.")) { - QString position = bcKey.mid(45); - cleanSteps.insert(QString::fromLatin1("ProjectExplorer.BuildStepList.Step.") + position, bcIt.value()); - continue; - } - if (bcKey.startsWith("ProjectExplorer.BuildConfiguration.CleanStepsCount")) { - cleanSteps.insert("ProjectExplorer.BuildStepList.StepsCount", bcIt.value()); - continue; - } - if (bcKey.startsWith("ProjectExplorer.BuildConfiguration.DeployStep.")) { - QString position = bcKey.mid(46); - deploySteps.insert(QString::fromLatin1("ProjectExplorer.BuildStepList.Step.") + position, bcIt.value()); - continue; - } - if (bcKey.startsWith("ProjectExplorer.BuildConfiguration.DeployStepsCount")) { - deploySteps.insert("ProjectExplorer.BuildStepList.StepsCount", bcIt.value()); - continue; - } - newBc.insert(bcKey, bcIt.value()); - } - buildSteps.insert("ProjectExplorer.ProjectConfiguration.DisplayName", "Build"); - buildSteps.insert("ProjectExplorer.ProjectConfiguration.Id", "ProjectExplorer.BuildSteps.Build"); - cleanSteps.insert("ProjectExplorer.ProjectConfiguration.DisplayName", "Clean"); - cleanSteps.insert("ProjectExplorer.ProjectConfiguration.Id", "ProjectExplorer.BuildSteps.Clean"); - newBc.insert("ProjectExplorer.BuildConfiguration.BuildStepList.0", buildSteps); - newBc.insert("ProjectExplorer.BuildConfiguration.BuildStepList.1", cleanSteps); - newBc.insert("ProjectExplorer.BuildConfiguration.BuildStepListCount", 2); - newTarget.insert(targetKey, newBc); - } - - // Only insert one deploy configuration: - deploySteps.insert("ProjectExplorer.ProjectConfiguration.DisplayName", "Deploy"); - deploySteps.insert("ProjectExplorer.ProjectConfiguration.Id", "ProjectExplorer.BuildSteps.Deploy"); - newDc.insert("ProjectExplorer.BuildConfiguration.BuildStepList.0", deploySteps); - newDc.insert("ProjectExplorer.BuildConfiguration.BuildStepListCount", 1); - newDc.insert("ProjectExplorer.ProjectConfiguration.DisplayName", deploymentName); - newDc.insert("ProjectExplorer.ProjectConfiguration.Id", "ProjectExplorer.DefaultDeployConfiguration"); - - newTarget.insert("ProjectExplorer.Target.DeployConfigurationCount", 1); - newTarget.insert("ProjectExplorer.Target.ActiveDeployConfiguration", 0); - newTarget.insert("ProjectExplorer.Target.DeployConfiguration.0", newDc); - result.insert(globalKey, newTarget); - } - return result; -} - -// ------------------------------------------------------------------------- -// UserFileVersion7Upgrader: -// ------------------------------------------------------------------------- - -// new implementation of DeployConfiguration -QVariantMap UserFileVersion7Upgrader::upgrade(const QVariantMap &map) -{ - QVariantMap result; - QMapIterator it(map); - while (it.hasNext()) { - it.next(); - const QString &globalKey = it.key(); - // check for target info - if (!globalKey.startsWith("ProjectExplorer.Project.Target.")) { - result.insert(globalKey, it.value()); - continue; - } - const QVariantMap &originalTarget = it.value().toMap(); - result.insert(globalKey, originalTarget); - } - return result; -} - -// ------------------------------------------------------------------------- -// UserFileVersion8Upgrader: -// ------------------------------------------------------------------------- - -// Argument list reinterpretation - -static const char * const argListKeys[] = { - "ProjectExplorer.Project.Target.", - "ProjectExplorer.Target.BuildConfiguration.|ProjectExplorer.Target.DeployConfiguration.", - "ProjectExplorer.BuildConfiguration.BuildStepList.", - "ProjectExplorer.BuildStepList.Step.", - "GenericProjectManager.GenericMakeStep.MakeArguments", - "QtProjectManager.QMakeBuildStep.QMakeArguments", - "Qt4ProjectManager.MakeStep.MakeArguments", - "CMakeProjectManager.MakeStep.AdditionalArguments", - nullptr, - nullptr, - nullptr, - "ProjectExplorer.Target.RunConfiguration.", - "ProjectExplorer.CustomExecutableRunConfiguration.Arguments", - "Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments", - "CMakeProjectManager.CMakeRunConfiguration.Arguments", - nullptr, - nullptr, - nullptr -}; - -static const char * const lameArgListKeys[] = { - "ProjectExplorer.Project.Target.", - "ProjectExplorer.Target.BuildConfiguration.|ProjectExplorer.Target.DeployConfiguration.", - "ProjectExplorer.BuildConfiguration.BuildStepList.", - "ProjectExplorer.BuildStepList.Step.", - "ProjectExplorer.ProcessStep.Arguments", - nullptr, - nullptr, - nullptr, - "ProjectExplorer.Target.RunConfiguration.", - "Qt4ProjectManager.MaemoRunConfiguration.Arguments", - "Qt4ProjectManager.S60DeviceRunConfiguration.CommandLineArguments", - "QmlProjectManager.QmlRunConfiguration.QDeclarativeViewerArguments", - nullptr, - nullptr, - nullptr -}; - -inline static bool isSpecialChar(ushort c) -{ - // Chars that should be quoted (TM). This includes: - static const uchar iqm[] = { - 0xff, 0xff, 0xff, 0xff, 0xdf, 0x07, 0x00, 0xd8, - 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x78 - }; // 0-32 \'"$`<>|;&(){}*?#!~[] - - return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7))); -} - -inline static bool hasSpecialChars(const QString &arg) -{ - for (int x = arg.length() - 1; x >= 0; --x) - if (isSpecialChar(arg.unicode()[x].unicode())) - return true; - return false; -} - -// These were split according to sane (even if a bit arcane) rules -static QVariant version8ArgNodeHandler(const QVariant &var) -{ - QString ret; - foreach (const QVariant &svar, var.toList()) { - if (HostOsInfo::isAnyUnixHost()) { - // We don't just addArg, so we don't disarm existing env expansions. - // This is a bit fuzzy logic ... - QString s = svar.toString(); - s.replace('\\', "\\\\"); - s.replace('"', "\\\""); - s.replace('`', "\\`"); - if (s != svar.toString() || hasSpecialChars(s)) - s.prepend('"').append('"'); - QtcProcess::addArgs(&ret, s); - } else { - // Under windows, env expansions cannot be quoted anyway. - QtcProcess::addArg(&ret, svar.toString()); - } - } - return QVariant(ret); -} - -// These were just split on whitespace -static QVariant version8LameArgNodeHandler(const QVariant &var) -{ - QString ret; - foreach (const QVariant &svar, var.toList()) - QtcProcess::addArgs(&ret, svar.toString()); - return QVariant(ret); -} - -// Environment variable reinterpretation - -static const char * const envExpandedKeys[] = { - "ProjectExplorer.Project.Target.", - "ProjectExplorer.Target.BuildConfiguration." - "|ProjectExplorer.Target.DeployConfiguration.", - "ProjectExplorer.BuildConfiguration.BuildStepList.", - "ProjectExplorer.BuildStepList.Step.", - "ProjectExplorer.ProcessStep.WorkingDirectory", - "ProjectExplorer.ProcessStep.Command", - "ProjectExplorer.ProcessStep.Arguments", - "GenericProjectManager.GenericMakeStep.MakeCommand", - "GenericProjectManager.GenericMakeStep.MakeArguments", - "GenericProjectManager.GenericMakeStep.BuildTargets", - "QtProjectManager.QMakeBuildStep.QMakeArguments", - "Qt4ProjectManager.MakeStep.MakeCommand", - "Qt4ProjectManager.MakeStep.MakeArguments", - "CMakeProjectManager.MakeStep.AdditionalArguments", - "CMakeProjectManager.MakeStep.BuildTargets", - nullptr, - nullptr, - "Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory", - nullptr, - "ProjectExplorer.Target.RunConfiguration.", - "ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory", - "ProjectExplorer.CustomExecutableRunConfiguration.Executable", - "ProjectExplorer.CustomExecutableRunConfiguration.Arguments", - "Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory", - "Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments", - "Qt4ProjectManager.MaemoRunConfiguration.Arguments", - "Qt4ProjectManager.S60DeviceRunConfiguration.CommandLineArguments", - "CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory", - "CMakeProjectManager.CMakeRunConfiguration.Arguments", - nullptr, - nullptr, - nullptr -}; - -static QString version8NewVar(const QString &old) -{ - QString ret = old; - if (HostOsInfo::isAnyUnixHost()) { - ret.prepend("${"); - ret.append('}'); - } else { - ret.prepend('%'); - ret.append('%'); - } - return ret; -} - -// Translate DOS-like env var expansions into Unix-like ones and vice versa. -// On the way, change {SOURCE,BUILD}DIR env expansions to %{}-expandos -static QVariant version8EnvNodeTransform(const QVariant &var) -{ - QString result = var.toString(); - - result.replace(QRegExp("%SOURCEDIR%|\\$(SOURCEDIR\\b|\\{SOURCEDIR\\})"), "%{sourceDir}"); - result.replace(QRegExp("%BUILDDIR%|\\$(BUILDDIR\\b|\\{BUILDDIR\\})"), "%{buildDir}"); - if (HostOsInfo::isAnyUnixHost()) { - for (int vStart = -1, i = 0; i < result.length(); ) { - QChar c = result.at(i++); - if (c == '%') { - if (vStart > 0 && vStart < i - 1) { - QString nv = version8NewVar(result.mid(vStart, i - 1 - vStart)); - result.replace(vStart - 1, i - vStart + 1, nv); - i = vStart - 1 + nv.length(); - vStart = -1; - } else { - vStart = i; - } - } else if (vStart > 0) { - // Sanity check so we don't catch too much garbage - if (!c.isLetterOrNumber() && c != '_') - vStart = -1; - } - } - } else { - enum { BASE, OPTIONALVARIABLEBRACE, VARIABLE, BRACEDVARIABLE } state = BASE; - int vStart = -1; - - for (int i = 0; i < result.length();) { - QChar c = result.at(i++); - if (state == BASE) { - if (c == '$') - state = OPTIONALVARIABLEBRACE; - } else if (state == OPTIONALVARIABLEBRACE) { - if (c == '{') { - state = BRACEDVARIABLE; - vStart = i; - } else if (c.isLetterOrNumber() || c == '_') { - state = VARIABLE; - vStart = i - 1; - } else { - state = BASE; - } - } else if (state == BRACEDVARIABLE) { - if (c == '}') { - QString nv = version8NewVar(result.mid(vStart, i - 1 - vStart)); - result.replace(vStart - 2, i - vStart + 2, nv); - i = vStart + nv.length(); - state = BASE; - } - } else if (state == VARIABLE) { - if (!c.isLetterOrNumber() && c != '_') { - QString nv = version8NewVar(result.mid(vStart, i - 1 - vStart)); - result.replace(vStart - 1, i - vStart, nv); - i = vStart - 1 + nv.length(); // On the same char - could be next expansion. - state = BASE; - } - } - } - if (state == VARIABLE) { - QString nv = version8NewVar(result.mid(vStart)); - result.truncate(vStart - 1); - result += nv; - } - } - - return QVariant(result); -} - -static QVariant version8EnvNodeHandler(const QVariant &var) -{ - if (var.type() != QVariant::List) - return version8EnvNodeTransform(var); - - QVariantList vl; - foreach (const QVariant &svar, var.toList()) - vl << version8EnvNodeTransform(svar); - return vl; -} - -// VariableManager expando reinterpretation - -static const char * const varExpandedKeys[] = { - "ProjectExplorer.Project.Target.", - "ProjectExplorer.Target.BuildConfiguration." - "|ProjectExplorer.Target.DeployConfiguration.", - "ProjectExplorer.BuildConfiguration.BuildStepList.", - "ProjectExplorer.BuildStepList.Step.", - "GenericProjectManager.GenericMakeStep.MakeCommand", - "GenericProjectManager.GenericMakeStep.MakeArguments", - "GenericProjectManager.GenericMakeStep.BuildTargets", - nullptr, - nullptr, - nullptr, - nullptr, - nullptr -}; - -// Translate old-style ${} var expansions into new-style %{} ones -static QVariant version8VarNodeTransform(const QVariant &var) -{ - static const QSet map({ - "CURRENT_DOCUMENT:absoluteFilePath", - "CURRENT_DOCUMENT:absolutePath", - "CURRENT_DOCUMENT:baseName", - "CURRENT_DOCUMENT:canonicalPath", - "CURRENT_DOCUMENT:canonicalFilePath", - "CURRENT_DOCUMENT:completeBaseName", - "CURRENT_DOCUMENT:completeSuffix", - "CURRENT_DOCUMENT:fileName", - "CURRENT_DOCUMENT:filePath", - "CURRENT_DOCUMENT:path", - "CURRENT_DOCUMENT:suffix" - }); - - QString str = var.toString(); - int pos = 0; - forever { - int openPos = str.indexOf("${", pos); - if (openPos < 0) - break; - int varPos = openPos + 2; - int closePos = str.indexOf('}', varPos); - if (closePos < 0) - break; - if (map.contains(str.mid(varPos, closePos - varPos))) - str[openPos] = '%'; - pos = closePos + 1; - } - return QVariant(str); -} - -static QVariant version8VarNodeHandler(const QVariant &var) -{ - if (var.type() != QVariant::List) - return version8VarNodeTransform(var); - - QVariantList vl; - foreach (const QVariant &svar, var.toList()) - vl << version8VarNodeTransform(svar); - return vl; -} - -QVariantMap UserFileVersion8Upgrader::upgrade(const QVariantMap &map) -{ - const char * const *p1 = argListKeys; - QVariantMap rmap1 = processHandlerNodes(buildHandlerNodes(&p1), map, version8ArgNodeHandler); - const char * const *p2 = lameArgListKeys; - QVariantMap rmap2 = processHandlerNodes(buildHandlerNodes(&p2), rmap1, version8LameArgNodeHandler); - const char * const *p3 = envExpandedKeys; - QVariantMap rmap3 = processHandlerNodes(buildHandlerNodes(&p3), rmap2, version8EnvNodeHandler); - const char * const *p4 = varExpandedKeys; - return processHandlerNodes(buildHandlerNodes(&p4), rmap3, version8VarNodeHandler); -} - -// -------------------------------------------------------------------- -// UserFileVersion9Upgrader: -// -------------------------------------------------------------------- - -QVariantMap UserFileVersion9Upgrader::upgrade(const QVariantMap &map) -{ - QVariantMap result; - QMapIterator globalIt(map); - while (globalIt.hasNext()) { - globalIt.next(); - const QString &globalKey = globalIt.key(); - // check for target info - if (!globalKey.startsWith("ProjectExplorer.Project.Target.")) { - result.insert(globalKey, globalIt.value()); - continue; - } - - const QVariantMap &origTargetMap = globalIt.value().toMap(); - const QString targetIdKey = "ProjectExplorer.ProjectConfiguration.Id"; - // check for maemo device target - if (origTargetMap.value(targetIdKey) != "Qt4ProjectManager.Target.MaemoDeviceTarget" - && origTargetMap.value(targetIdKey) != "Qt4ProjectManager.Target.HarmattanDeviceTarget" - && origTargetMap.value(targetIdKey) != "Qt4ProjectManager.Target.MeegoDeviceTarget") - { - result.insert(globalKey, origTargetMap); - continue; - } - - QVariantMap newTargetMap; - QMapIterator targetIt(origTargetMap); - while (targetIt.hasNext()) { - targetIt.next(); - if (!targetIt.key().startsWith("ProjectExplorer.Target.DeployConfiguration.")) { - newTargetMap.insert(targetIt.key(), targetIt.value()); - continue; - } - - QVariantMap deployConfMap = targetIt.value().toMap(); - deployConfMap.insert("ProjectExplorer.ProjectConfiguration.Id", "2.2MaemoDeployConfig"); - newTargetMap.insert(targetIt.key(), deployConfMap); - } - result.insert(globalKey, newTargetMap); - } - return result; -} - -// -------------------------------------------------------------------- -// UserFileVersion10Upgrader: -// -------------------------------------------------------------------- - -QVariantMap UserFileVersion10Upgrader::upgrade(const QVariantMap &map) -{ - QList changes; - changes.append(qMakePair(QLatin1String("ProjectExplorer.ProcessStep.Enabled"), - QLatin1String("ProjectExplorer.BuildStep.Enabled"))); - return renameKeys(changes, QVariantMap(map)); -} - -// -------------------------------------------------------------------- -// UserFileVersion11Upgrader: -// -------------------------------------------------------------------- - -UserFileVersion11Upgrader::~UserFileVersion11Upgrader() -{ - QList knownKits = KitManager::kits(); - foreach (Kit *k, m_targets.keys()) { - if (!knownKits.contains(k)) - KitManager::deleteKit(k); - } - m_targets.clear(); -} - -static inline int targetId(const QString &targetKey) -{ - return targetKey.midRef(targetKey.lastIndexOf('.') + 1).toInt(); -} - -QVariantMap UserFileVersion11Upgrader::upgrade(const QVariantMap &map) -{ - // Read in old data to help with the transition: - parseQtversionFile(); - parseToolChainFile(); - - QVariantMap result; - foreach (Kit *k, KitManager::kits()) - m_targets.insert(k, QVariantMap()); - - QMapIterator globalIt(map); - int activeTarget = map.value("ProjectExplorer.Project.ActiveTarget", 0).toInt(); - - while (globalIt.hasNext()) { - globalIt.next(); - const QString &globalKey = globalIt.key(); - // Keep everything but targets: - if (globalKey == "ProjectExplorer.Project.ActiveTarget") - continue; - if (!globalKey.startsWith("ProjectExplorer.Project.Target.")) { - result.insert(globalKey, globalIt.value()); - continue; - } - - // Update Targets: - const QVariantMap &target = globalIt.value().toMap(); - int targetPos = targetId(globalKey); - - QVariantMap extraTargetData; - QMap bcs; - int activeBc = -1; - QMap dcs; - int activeDc = -1; - QMap rcs; - int activeRc = -1; - - // Read old target: - QMapIterator targetIt(target); - while (targetIt.hasNext()) { - targetIt.next(); - const QString &targetKey = targetIt.key(); - - // BuildConfigurations: - if (targetKey == "ProjectExplorer.Target.ActiveBuildConfiguration") - activeBc = targetIt.value().toInt(); - else if (targetKey == "ProjectExplorer.Target.BuildConfigurationCount") - continue; - else if (targetKey.startsWith("ProjectExplorer.Target.BuildConfiguration.")) - bcs.insert(targetId(targetKey), targetIt.value().toMap()); - else - - // DeployConfigurations: - if (targetKey == "ProjectExplorer.Target.ActiveDeployConfiguration") - activeDc = targetIt.value().toInt(); - else if (targetKey == "ProjectExplorer.Target.DeployConfigurationCount") - continue; - else if (targetKey.startsWith("ProjectExplorer.Target.DeployConfiguration.")) - dcs.insert(targetId(targetKey), targetIt.value().toMap()); - else - - // RunConfigurations: - if (targetKey == "ProjectExplorer.Target.ActiveRunConfiguration") - activeRc = targetIt.value().toInt(); - else if (targetKey == "ProjectExplorer.Target.RunConfigurationCount") - continue; - else if (targetKey.startsWith("ProjectExplorer.Target.RunConfiguration.")) - rcs.insert(targetId(targetKey), targetIt.value().toMap()); - - // Rest (the target's ProjectConfiguration settings only as there is nothing else): - else - extraTargetData.insert(targetKey, targetIt.value()); - } - const QString oldTargetId = extraTargetData.value("ProjectExplorer.ProjectConfiguration.Id").toString(); - - // Check each BCs/DCs and create profiles as needed - auto rawKit = new Kit; // Do not needlessly use Core::Ids - QMapIterator buildIt(bcs); - while (buildIt.hasNext()) { - buildIt.next(); - int bcPos = buildIt.key(); - const QVariantMap &bc = buildIt.value(); - Kit *tmpKit = rawKit; - - const auto desktopDeviceIcon = FileName::fromLatin1(":///DESKTOP///"); - - if (oldTargetId == "Qt4ProjectManager.Target.AndroidDeviceTarget") { - tmpKit->setIconPath(FileName::fromLatin1(":/android/images/QtAndroid.png")); - tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("Desktop")); - tmpKit->setValue("PE.Profile.Device", QString()); - } else if (oldTargetId == "RemoteLinux.EmbeddedLinuxTarget") { - tmpKit->setIconPath(desktopDeviceIcon); - tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("GenericLinuxOsType")); - tmpKit->setValue("PE.Profile.Device", QString()); - } else if (oldTargetId == "Qt4ProjectManager.Target.HarmattanDeviceTarget") { - tmpKit->setIconPath(FileName::fromLatin1(":/projectexplorer/images/MaemoDevice.png")); - tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("HarmattanOsType")); - tmpKit->setValue("PE.Profile.Device", QString()); - } else if (oldTargetId == "Qt4ProjectManager.Target.MaemoDeviceTarget") { - tmpKit->setIconPath(FileName::fromLatin1(":/projectexplorer/images/MaemoDevice.png")); - tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("Maemo5OsType")); - tmpKit->setValue("PE.Profile.Device", QString()); - } else if (oldTargetId == "Qt4ProjectManager.Target.MeegoDeviceTarget") { - tmpKit->setIconPath(FileName::fromLatin1(":/projectexplorer/images/MaemoDevice.png")); - tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("MeegoOsType")); - tmpKit->setValue("PE.Profile.Device", QString()); - } else if (oldTargetId == "Qt4ProjectManager.Target.S60DeviceTarget") { - tmpKit->setIconPath(FileName::fromLatin1(":/projectexplorer/images/SymbianDevice.png")); - tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("Qt4ProjectManager.SymbianDevice")); - tmpKit->setValue("PE.Profile.Device", QString::fromLatin1("Symbian Device")); - } else if (oldTargetId == "Qt4ProjectManager.Target.QtSimulatorTarget") { - tmpKit->setIconPath(FileName::fromLatin1(":/projectexplorer/images/Simulator.png")); - tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("Desktop")); - tmpKit->setValue("PE.Profile.Device", QString::fromLatin1("Desktop Device")); - } else { - tmpKit->setIconPath(desktopDeviceIcon); - tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("Desktop")); - tmpKit->setValue("PE.Profile.Device", QString::fromLatin1("Desktop Device")); - } - - // Tool chain - QString tcId = bc.value("CMakeProjectManager.CMakeBuildConfiguration.ToolChain").toString(); - if (tcId.isEmpty()) - tcId = bc.value("ProjectExplorer.BuildCOnfiguration.ToolChain").toString(); - const QString origTcId = tcId; - tcId.replace("Qt4ProjectManager.ToolChain.Maemo:", "ProjectExplorer.ToolChain.Gcc:"); // convert Maemo to GCC - QString data = tcId.mid(tcId.indexOf(':') + 1); - QStringList split = data.split('.', QString::KeepEmptyParts); - QString compilerPath; - QString debuggerPath; - Abi compilerAbi; - int debuggerEngine = 1; // GDB - for (int i = 1; i < split.count() - 1; ++i) { - compilerAbi = Abi::fromString(split.at(i)); - if (!compilerAbi.isValid()) - continue; - if (compilerAbi.os() == Abi::WindowsOS - && compilerAbi.osFlavor() != Abi::WindowsMSysFlavor) - debuggerEngine = 4; // CDB - compilerPath = split.at(0); - for (int j = 1; j < i; ++j) - compilerPath = compilerPath + '.' + split.at(j); - debuggerPath = split.at(i + 1); - for (int j = i + 2; j < split.count(); ++j) - debuggerPath = debuggerPath + '.' + split.at(j); - - ToolChain *tc = ToolChainManager::toolChain([cp = FileName::fromString(compilerPath), - compilerAbi](const ToolChain *t) { - return t->compilerCommand() == cp && t->targetAbi() == compilerAbi; - }); - if (tc) - tcId = QString::fromUtf8(tc->id()); - } - tmpKit->setValue("PE.Profile.ToolChain", tcId); - - // QtVersion - int qtVersionId = bc.value("Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId", -1).toInt(); - tmpKit->setValue("QtSupport.QtInformation", qtVersionId); - - // Debugger + mkspec - QVariantMap debugger; - QString mkspec; - if (m_toolChainExtras.contains(origTcId)) { - debuggerPath = m_toolChainExtras.value(origTcId).m_debugger; - if (!debuggerPath.isEmpty() && !QFileInfo(debuggerPath).isAbsolute()) - debuggerPath = Environment::systemEnvironment().searchInPath(debuggerPath).toString(); - if (debuggerPath.contains("cdb")) - debuggerEngine = 4; // CDB - mkspec = m_toolChainExtras.value(origTcId).m_mkspec; - } - debugger.insert("EngineType", debuggerEngine); - debugger.insert("Binary", debuggerPath); - tmpKit->setValue("Debugger.Information", debugger); - tmpKit->setValue("QtPM4.mkSpecInformation", mkspec); - - // SysRoot - tmpKit->setValue("PE.Profile.SysRoot", m_qtVersionExtras.value(qtVersionId)); - - QMapIterator deployIt(dcs); - while (deployIt.hasNext()) { - deployIt.next(); - int dcPos = deployIt.key(); - const QVariantMap &dc = deployIt.value(); - // Device - QByteArray devId = dc.value("Qt4ProjectManager.MaemoRunConfiguration.DeviceId").toByteArray(); - if (devId.isEmpty()) - devId = QByteArray("Desktop Device"); - if (!devId.isEmpty() && !DeviceManager::instance()->find(Core::Id::fromName(devId))) // We do not know that device - devId.clear(); - tmpKit->setValue("PE.Profile.Device", devId); - - // Set display name last: - tmpKit->setUnexpandedDisplayName(extraTargetData.value("ProjectExplorer.ProjectConfiguration.DisplayName").toString()); - - Kit *k = uniqueKit(tmpKit); - - addBuildConfiguration(k, bc, bcPos, activeBc); - addDeployConfiguration(k, dc, dcPos, activeDc); - addRunConfigurations(k, rcs, activeRc, m_accessor->project()->projectDirectory().toString()); - if (targetPos == activeTarget && bcPos == activeBc && dcPos == activeDc) - m_targets[k].insert("Update.IsActive", true); - } // dcs - } // bcs - KitManager::deleteKit(rawKit); - } // read in map data - - int newPos = 0; - // Generate new target data: - foreach (Kit *k, m_targets.keys()) { - QVariantMap data = m_targets.value(k); - if (data.isEmpty()) - continue; - - KitManager::registerKit(k); - - data.insert("ProjectExplorer.ProjectConfiguration.Id", k->id().name()); - data.insert("ProjectExplorer.Target.Profile", k->id().name()); - data.insert("ProjectExplorer.ProjectConfiguration.DisplayName", k->displayName()); - data.insert("ProjectExplorer.ProjectConfiguration.DefaultDisplayName", k->displayName()); - - result.insert(QString::fromLatin1("ProjectExplorer.Project.Target.") + QString::number(newPos), data); - if (data.value("Update.IsActive", false).toBool()) - result.insert("ProjectExplorer.Project.ActiveTarget", newPos); - ++newPos; - } - result.insert("ProjectExplorer.Project.TargetCount", newPos); - - return result; -} - -Kit *UserFileVersion11Upgrader::uniqueKit(Kit *k) -{ - const QString tc = k->value("PE.Profile.ToolChain").toString(); - const int qt = k->value("QtSupport.QtInformation").toInt(); - const QString debugger = k->value("Debugger.Information").toString(); - const QString mkspec = k->value("QtPM4.mkSpecInformation").toString(); - const QString deviceType = k->value("PE.Profile.DeviceType").toString(); - const QString device = k->value("PE.Profile.Device").toString(); - const QString sysroot = k->value("PE.Profile.SysRoot").toString(); - - foreach (Kit *i, m_targets.keys()) { - const QString currentTc = i->value("PE.Profile.ToolChain").toString(); - const int currentQt = i->value("QtSupport.QtInformation").toInt(); - const QString currentDebugger = i->value("Debugger.Information").toString(); - const QString currentMkspec = i->value("QtPM4.mkSpecInformation").toString(); - const QString currentDeviceType = i->value("PE.Profile.DeviceType").toString(); - const QString currentDevice = i->value("PE.Profile.Device").toString(); - const QString currentSysroot = i->value("PE.Profile.SysRoot").toString(); - - bool deviceTypeOk = deviceType == currentDeviceType; - bool deviceOk = device.isEmpty() || currentDevice == device; - bool tcOk = tc.isEmpty() || currentTc.isEmpty() || currentTc == tc; - bool qtOk = qt == -1 || currentQt == qt; - bool debuggerOk = debugger.isEmpty() || currentDebugger.isEmpty() || currentDebugger == debugger; - bool mkspecOk = mkspec.isEmpty() || currentMkspec.isEmpty() || currentMkspec == mkspec; - bool sysrootOk = sysroot.isEmpty() || currentSysroot == sysroot; - - if (deviceTypeOk && deviceOk && tcOk && qtOk && debuggerOk && mkspecOk && sysrootOk) - return i; - } - return k->clone(true); -} - -void UserFileVersion11Upgrader::addBuildConfiguration(Kit *k, const QVariantMap &bc, int bcPos, int bcActive) -{ - QVariantMap merged = m_targets.value(k); - int internalCount = merged.value("ProjectExplorer.Target.BuildConfigurationCount", 0).toInt(); - - for (int i = 0; i < internalCount; ++i) { - QVariantMap bcData = merged.value(QString::fromLatin1("ProjectExplorer.Target.BuildConfiguration.") + QString::number(i)).toMap(); - if (bcData.value("Update.BCPos", -1).toInt() == bcPos) - return; - } - QVariantMap data = bc; - data.insert("Update.BCPos", bcPos); - - merged.insert(QString::fromLatin1("ProjectExplorer.Target.BuildConfiguration.") + QString::number(internalCount), data); - if (bcPos == bcActive) - merged.insert("ProjectExplorer.Target.ActiveBuildConfiguration", internalCount); - merged.insert("ProjectExplorer.Target.BuildConfigurationCount", internalCount + 1); - - m_targets.insert(k, merged); -} - -void UserFileVersion11Upgrader::addDeployConfiguration(Kit *k, const QVariantMap &dc, int dcPos, int dcActive) -{ - QVariantMap merged = m_targets.value(k); - int internalCount = merged.value("ProjectExplorer.Target.DeployConfigurationCount", 0).toInt(); - - for (int i = 0; i < internalCount; ++i) { - QVariantMap dcData = merged.value(QString::fromLatin1("ProjectExplorer.Target.DeployConfiguration.") + QString::number(i)).toMap(); - if (dcData.value("Update.DCPos", -1).toInt() == dcPos) - return; - } - QVariantMap data = dc; - data.insert("Update.DCPos", dcPos); - - merged.insert(QString::fromLatin1("ProjectExplorer.Target.DeployConfiguration.") + QString::number(internalCount), data); - if (dcPos == dcActive) - merged.insert("ProjectExplorer.Target.ActiveDeployConfiguration", internalCount); - merged.insert("ProjectExplorer.Target.DeployConfigurationCount", internalCount + 1); - - m_targets.insert(k, merged); -} - -void UserFileVersion11Upgrader::addRunConfigurations(Kit *k, - const QMap &rcs, int activeRc, - const QString &projectDir) -{ - QVariantMap data = m_targets.value(k); - data.insert("ProjectExplorer.Target.RunConfigurationCount", rcs.count()); - QMapIterator runIt(rcs); - while (runIt.hasNext()) { - runIt.next(); - QVariantMap rcData = runIt.value(); - QString proFile = rcData.value("Qt4ProjectManager.MaemoRunConfiguration.ProFile").toString(); - if (proFile.isEmpty()) - proFile = rcData.value("Qt4ProjectManager.Qt4RunConfiguration.ProFile").toString(); - if (!proFile.isEmpty()) { - QString newId = rcData.value("ProjectExplorer.ProjectConfiguration.Id").toString(); - newId.append(':'); - FileName fn = FileName::fromString(projectDir); - fn.appendPath(proFile); - newId.append(fn.toString()); - rcData.insert("ProjectExplorer.ProjectConfiguration.Id", newId); - } - data.insert(QString::fromLatin1("ProjectExplorer.Target.RunConfiguration.") + QString::number(runIt.key()), rcData); - } - data.insert("ProjectExplorer.Target.ActiveRunConfiguration", activeRc); - - m_targets.insert(k, data); -} - -static QString targetRoot(const QString &qmakePath) -{ - return QDir::cleanPath(qmakePath).remove("/bin/qmake" QTC_HOST_EXE_SUFFIX, - HostOsInfo::fileNameCaseSensitivity()); -} - -static QString maddeRoot(const QString &qmakePath) -{ - QDir dir(targetRoot(qmakePath)); - dir.cdUp(); dir.cdUp(); - return dir.absolutePath(); -} - -void UserFileVersion11Upgrader::parseQtversionFile() -{ - PersistentSettingsReader reader; - reader.load(FileName::fromString(Core::ICore::userResourcePath() + "/../qtversion.xml")); - QVariantMap data = reader.restoreValues(); - - int count = data.value("QtVersion.Count", 0).toInt(); - for (int i = 0; i < count; ++i) { - const QString key = QString::fromLatin1("QtVersion.") + QString::number(i); - if (!data.contains(key)) - continue; - const QVariantMap qtversionMap = data.value(key).toMap(); - - QString sysRoot = qtversionMap.value("SystemRoot").toString(); - const QString type = qtversionMap.value("QtVersion.Type").toString(); - const QString qmake = qtversionMap.value("QMakePath").toString(); - - if (type == "Qt4ProjectManager.QtVersion.Maemo") { - QFile file(QDir::cleanPath(targetRoot(qmake)) + "/information"); - if (file.exists() && file.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextStream stream(&file); - while (!stream.atEnd()) { - const QString &line = stream.readLine().trimmed(); - const QStringList &list = line.split(' '); - if (list.count() <= 1) - continue; - if (list.at(0) == "sysroot") - sysRoot = maddeRoot(qmake) + "/sysroots/" + list.at(1); - } - } - } - - int id = qtversionMap.value("Id").toInt(); - if (id > -1 && !sysRoot.isEmpty()) - m_qtVersionExtras.insert(id, sysRoot); - } -} - -void UserFileVersion11Upgrader::parseToolChainFile() -{ - PersistentSettingsReader reader; - reader.load(FileName::fromString(Core::ICore::userResourcePath() + "/../toolChains.xml")); - QVariantMap data = reader.restoreValues(); - int count = data.value("ToolChain.Count", 0).toInt(); - for (int i = 0; i < count; ++i) { - const QString key = QString::fromLatin1("ToolChain.") + QString::number(i); - if (!data.contains(key)) - continue; - - const QVariantMap tcMap = data.value(key).toMap(); - QString id = tcMap.value("ProjectExplorer.ToolChain.Id").toString(); - if (id.isEmpty()) - continue; - QString mkspec = tcMap.value("ProjectExplorer.ToolChain.MkSpecOverride").toString(); - QString debugger = tcMap.value("ProjectExplorer.GccToolChain.Debugger").toString(); - - m_toolChainExtras.insert(id, ToolChainExtraData(mkspec, debugger)); - } -} - -// -------------------------------------------------------------------- -// UserFileVersion12Upgrader: -// -------------------------------------------------------------------- - -QVariantMap UserFileVersion12Upgrader::upgrade(const QVariantMap &map) -{ - QVariantMap result; - QMapIterator it(map); - while (it.hasNext()) { - it.next(); - if (it.value().type() == QVariant::Map) - result.insert(it.key(), upgrade(it.value().toMap())); - else if (it.key() == "CMakeProjectManager.CMakeRunConfiguration.UserEnvironmentChanges" - || it.key() == "ProjectExplorer.CustomExecutableRunConfiguration.UserEnvironmentChanges" - || it.key() == "Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges" - || it.key() == "Qt4ProjectManager.MaemoRunConfiguration.UserEnvironmentChanges") - result.insert("PE.UserEnvironmentChanges", it.value()); - else if (it.key() == "CMakeProjectManager.BaseEnvironmentBase" - || it.key() == "ProjectExplorer.CustomExecutableRunConfiguration.BaseEnvironmentBase" - || it.key() == "Qt4ProjectManager.MaemoRunConfiguration.BaseEnvironmentBase") - result.insert("PE.BaseEnvironmentBase", it.value()); - else - result.insert(it.key(), it.value()); - } - return result; -} - -// -------------------------------------------------------------------- -// UserFileVersion13Upgrader: -// -------------------------------------------------------------------- - -QVariantMap UserFileVersion13Upgrader::upgrade(const QVariantMap &map) -{ - QVariantMap result; - QMapIterator it(map); - while (it.hasNext()) { - it.next(); - if (it.value().type() == QVariant::Map) - result.insert(it.key(), upgrade(it.value().toMap())); - else if (it.key() == "PE.UserEnvironmentChanges") - result.insert("PE.EnvironmentAspect.Changes", it.value()); - else if (it.key() == "PE.BaseEnvironmentBase") - result.insert("PE.EnvironmentAspect.Base", it.value()); - else - result.insert(it.key(), it.value()); - } - return result; -} - // -------------------------------------------------------------------- // UserFileVersion14Upgrader: // --------------------------------------------------------------------