summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/registerqtoperation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/installer/registerqtoperation.cpp')
-rw-r--r--src/libs/installer/registerqtoperation.cpp224
1 files changed, 224 insertions, 0 deletions
diff --git a/src/libs/installer/registerqtoperation.cpp b/src/libs/installer/registerqtoperation.cpp
new file mode 100644
index 000000000..4f721ca4c
--- /dev/null
+++ b/src/libs/installer/registerqtoperation.cpp
@@ -0,0 +1,224 @@
+/**************************************************************************
+**
+** This file is part of Installer Framework
+**
+** Copyright (c) 2011-2012 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#include "registerqtoperation.h"
+
+#include "component.h"
+#include "packagemanagercore.h"
+#include "qtcreator_constants.h"
+#include "qtcreatorpersistentsettings.h"
+#include "registertoolchainoperation.h"
+#include "registerqtv2operation.h"
+
+#include <QtCore/QDir>
+#include <QtCore/QFileInfo>
+#include <QtCore/QSettings>
+#include <QtCore/QString>
+
+using namespace QInstaller;
+
+
+RegisterQtInCreatorOperation::RegisterQtInCreatorOperation()
+{
+ setName(QLatin1String("RegisterQtInCreator"));
+}
+
+void RegisterQtInCreatorOperation::backup()
+{
+}
+
+bool RegisterQtInCreatorOperation::performOperation()
+{
+ const QStringList args = arguments();
+
+ if (args.count() < 3) {
+ setError(InvalidArguments);
+ setErrorString(tr("Invalid arguments in %0: %1 arguments given, minimum 3 expected.").arg(name())
+ .arg(args.count()));
+ return false;
+ }
+
+ const QString &rootInstallPath = args.value(0); //for example "C:\\Nokia_SDK\\"
+ const QString &versionName = args.value(1);
+ const QString &path = args.value(2);
+ QString mingwPath = args.value(3);
+ QString s60SdkPath = args.value(4);
+ QString gccePath = args.value(5);
+ QString carbidePath = args.value(6);
+ QString msvcPath = args.value(7);
+ QString sbsPath = args.value(8);
+
+//this is for creator 2.2
+ PackageManagerCore *const core = qVariantValue<PackageManagerCore *>(value(QLatin1String("installer")));
+ if (!core) {
+ setError(UserDefinedError);
+ setErrorString(tr("Needed installer object in \"%1\" operation is empty.").arg(name()));
+ return false;
+ }
+ QString toolChainsXmlFilePath = rootInstallPath + QLatin1String(ToolChainSettingsSuffixPath);
+ bool isCreator22 = false;
+ //in case of the fake installer this component doesn't exist
+ Component *creatorComponent =
+ core->componentByName(QLatin1String("com.nokia.ndk.tools.qtcreator.application"));
+ if (creatorComponent) {
+ const QString creatorVersion = creatorComponent->value(scInstalledVersion);
+ isCreator22 = PackageManagerCore::versionMatches(creatorVersion, QLatin1String("2.2"));
+ }
+
+ if (QFileInfo(toolChainsXmlFilePath).exists() || isCreator22) {
+ QtCreatorPersistentSettings creatorToolChainSettings;
+
+ if (!creatorToolChainSettings.init(toolChainsXmlFilePath)) {
+ setError(UserDefinedError);
+ setErrorString(tr("Can't read from tool chains xml file(%1) correctly.")
+ .arg(toolChainsXmlFilePath));
+ return false;
+ }
+ if (!mingwPath.isEmpty()) {
+ RegisterToolChainOperation operation;
+ operation.setValue(QLatin1String("installer"), QVariant::fromValue(core));
+ operation.setArguments(QStringList()
+ << QLatin1String("GccToolChain")
+ << QLatin1String("ProjectExplorer.ToolChain.Mingw")
+ << QLatin1String("Mingw as a GCC for Windows targets")
+ << QLatin1String("x86-windows-msys-pe-32bit")
+ << mingwPath + QLatin1String("\\bin\\g++.exe")
+ << creatorToolChainSettings.abiToDebuggerHash().value(QLatin1String
+ ("x86-windows-msys-pe-32bit"))
+ );
+ if (!operation.performOperation()) {
+ setError(operation.error());
+ setErrorString(operation.errorString());
+ return false;
+ }
+ }
+ if (!gccePath.isEmpty()) {
+ RegisterToolChainOperation operation;
+ operation.setValue(QLatin1String("installer"), QVariant::fromValue(core));
+ operation.setArguments(QStringList()
+ << QLatin1String("GccToolChain")
+ << QLatin1String("Qt4ProjectManager.ToolChain.GCCE")
+ << QLatin1String("GCCE 4 for Symbian targets")
+ << QLatin1String("arm-symbian-device-elf-32bit")
+ << gccePath + QLatin1String("\\bin\\arm-none-symbianelf-g++.exe")
+ << creatorToolChainSettings.abiToDebuggerHash().value(QLatin1String(
+ "arm-symbian-device-elf-32bit"))
+ );
+ if (!operation.performOperation()) {
+ setError(operation.error());
+ setErrorString(operation.errorString());
+ return false;
+ }
+ }
+ RegisterQtInCreatorV2Operation registerQtInCreatorV2Operation;
+ registerQtInCreatorV2Operation.setValue(QLatin1String("installer"), QVariant::fromValue(core));
+ registerQtInCreatorV2Operation.setArguments(QStringList() << versionName << path << s60SdkPath
+ << sbsPath);
+ if (!registerQtInCreatorV2Operation.performOperation()) {
+ setError(registerQtInCreatorV2Operation.error());
+ setErrorString(registerQtInCreatorV2Operation.errorString());
+ return false;
+ }
+ return true;
+ }
+//END - this is for creator 2.2
+
+ QSettings settings(rootInstallPath + QLatin1String(QtCreatorSettingsSuffixPath), QSettings::IniFormat);
+ const QStringList oldNewQtVersions = settings.value(QLatin1String("NewQtVersions")).toString()
+ .split(QLatin1String(";"));
+
+ QString newVersions;
+ //remove not existing Qt versions
+ if (!oldNewQtVersions.isEmpty()) {
+ foreach (const QString &qtVersion, oldNewQtVersions) {
+ QStringList splitedQtConfiguration = qtVersion.split(QLatin1String("="));
+ if (splitedQtConfiguration.count() > 1
+ && splitedQtConfiguration.at(1).contains(QLatin1String("qmake"), Qt::CaseInsensitive)) {
+ QString qmakePath = splitedQtConfiguration.at(1);
+ if (QFile::exists(qmakePath))
+ newVersions.append(qtVersion + QLatin1String(";"));
+ }
+ }
+ }
+#if defined (Q_OS_WIN )
+ QString addedVersion = versionName + QLatin1Char('=') + QDir(path)
+ .absoluteFilePath(QLatin1String("bin/qmake.exe")).replace(QLatin1String("/"), QLatin1String("\\"));
+#elif defined(Q_OS_UNIX )
+ QString addedVersion = versionName + QLatin1Char('=') + QDir(path)
+ .absoluteFilePath(QLatin1String("bin/qmake"));
+#endif
+ addedVersion += QLatin1Char('=') + mingwPath.replace(QLatin1String("/"), QLatin1String("\\"));
+ addedVersion += QLatin1Char('=') + s60SdkPath.replace(QLatin1String("/"), QLatin1String("\\"));
+ addedVersion += QLatin1Char('=') + gccePath.replace(QLatin1String("/"), QLatin1String("\\"));
+ addedVersion += QLatin1Char('=') + carbidePath.replace(QLatin1String("/"), QLatin1String("\\"));
+ addedVersion += QLatin1Char('=') + msvcPath.replace(QLatin1String("/"), QLatin1String("\\"));
+ addedVersion += QLatin1Char('=') + sbsPath.replace(QLatin1String("/"), QLatin1String("\\"));
+ newVersions += addedVersion;
+ settings.setValue(QLatin1String("NewQtVersions"), newVersions);
+
+ return true;
+}
+
+//works with creator 2.1 and 2.2
+bool RegisterQtInCreatorOperation::undoOperation()
+{
+ const QString &rootInstallPath = arguments().value(0); //for example "C:\\Nokia_SDK\\"
+ QSettings settings(rootInstallPath + QLatin1String(QtCreatorSettingsSuffixPath), QSettings::IniFormat);
+ const QStringList oldNewQtVersions = settings.value(QLatin1String("NewQtVersions")).toString()
+ .split(QLatin1String(";"));
+
+ QString newVersions;
+ //remove not existing Qt versions, the current to remove Qt version has an already removed qmake
+ if (!oldNewQtVersions.isEmpty()) {
+ foreach (const QString &qtVersion, oldNewQtVersions) {
+ QStringList splitedQtConfiguration = qtVersion.split(QLatin1String("="));
+ if (splitedQtConfiguration.count() > 1
+ && splitedQtConfiguration.at(1).contains(QLatin1String("qmake"), Qt::CaseInsensitive)) {
+ QString qmakePath = splitedQtConfiguration.at(1);
+ if (QFile::exists(qmakePath))
+ newVersions.append(qtVersion + QLatin1String(";"));
+ }
+ }
+ }
+ settings.setValue(QLatin1String("NewQtVersions"), newVersions);
+ return true;
+}
+
+bool RegisterQtInCreatorOperation::testOperation()
+{
+ return true;
+}
+
+Operation *RegisterQtInCreatorOperation::clone() const
+{
+ return new RegisterQtInCreatorOperation();
+}