diff options
Diffstat (limited to 'src/plugins/remotelinux/maemoglobal.h')
-rw-r--r-- | src/plugins/remotelinux/maemoglobal.h | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/src/plugins/remotelinux/maemoglobal.h b/src/plugins/remotelinux/maemoglobal.h new file mode 100644 index 0000000000..4f9d9d957a --- /dev/null +++ b/src/plugins/remotelinux/maemoglobal.h @@ -0,0 +1,191 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.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 info@qt.nokia.com. +** +**************************************************************************/ + +#ifndef MAEMOGLOBAL_H +#define MAEMOGLOBAL_H + +#include "maemodeviceconfigurations.h" + +#include <coreplugin/ifile.h> +#include <utils/environment.h> + +#include <projectexplorer/buildstep.h> +#include <projectexplorer/buildsteplist.h> +#include <projectexplorer/deployconfiguration.h> + +#include <QtCore/QList> +#include <QtCore/QSharedPointer> +#include <QtCore/QCoreApplication> + +#define ASSERT_STATE_GENERIC(State, expected, actual) \ + MaemoGlobal::assertState<State>(expected, actual, Q_FUNC_INFO) + +QT_BEGIN_NAMESPACE +class QDateTime; +class QProcess; +class QString; +QT_END_NAMESPACE + +namespace QtSupport { class BaseQtVersion; } +namespace Utils { class SshConnection; } + +namespace RemoteLinux { +namespace Internal { + +class WatchableFile : public Core::IFile +{ + Q_OBJECT +public: + WatchableFile(const QString &fileName, QObject *parent = 0) + : Core::IFile(parent), m_fileName(fileName) {} + + bool save(QString *, const QString &, bool) { return false; } + QString fileName() const { return m_fileName; } + QString defaultPath() const { return QString(); } + QString suggestedFileName() const { return QString(); } + QString mimeType() const { return QLatin1String("text/plain"); } + bool isModified() const { return false; } + bool isReadOnly() const { return false; } + bool isSaveAsAllowed() const { return false; } + ReloadBehavior reloadBehavior(ChangeTrigger, ChangeType) const { return BehaviorSilent; } + bool reload(QString *, ReloadFlag, ChangeType) { emit modified(); return true; } + void rename(const QString &) {} + +signals: + void modified(); + +private: + QString m_fileName; +}; + +class MaemoGlobal +{ + Q_DECLARE_TR_FUNCTIONS(RemoteLinux::Internal::MaemoGlobal) +public: + enum PackagingSystem { Dpkg, Rpm, Tar }; + + static bool isMaemoTargetId(const QString &id); + static bool isFremantleTargetId(const QString &id); + static bool isHarmattanTargetId(const QString &id); + static bool isMeegoTargetId(const QString &id); + static bool isValidMaemo5QtVersion(const QString &qmakePath); + static bool isValidHarmattanQtVersion(const QString &qmakePath); + static bool isValidMeegoQtVersion(const QString &qmakePath); + + static bool isLinuxQt(const QtSupport::BaseQtVersion *qtVersion); + static bool hasLinuxQt(const ProjectExplorer::Target *target); + + static QString homeDirOnDevice(const QString &uname); + static QString devrootshPath(); + static int applicationIconSize(MaemoDeviceConfig::OsVersion osVersion); + static QString remoteSudo(MaemoDeviceConfig::OsVersion, + const QString &uname); + static QString remoteCommandPrefix(MaemoDeviceConfig::OsVersion osVersion, + const QString &userName, const QString &commandFilePath); + static QString remoteEnvironment(const QList<Utils::EnvironmentItem> &list); + static QString remoteSourceProfilesCommand(); + static QString failedToConnectToServerMessage(const QSharedPointer<Utils::SshConnection> &connection, + const QSharedPointer<const MaemoDeviceConfig> &deviceConfig); + static QString deviceConfigurationName(const QSharedPointer<const MaemoDeviceConfig> &devConf); + static MaemoPortList freePorts(const QSharedPointer<const MaemoDeviceConfig> &devConf, + const QtSupport::BaseQtVersion *qtVersion); + + static QString maddeRoot(const QString &qmakePath); + static QString targetRoot(const QString &qmakePath); + static QString targetName(const QString &qmakePath); + static QString madCommand(const QString &qmakePath); + static QString madDeveloperUiName(MaemoDeviceConfig::OsVersion maemoVersion); + static MaemoDeviceConfig::OsVersion version(const QString &qmakePath); + + // TODO: IS this still needed with Qt Version having an Abi? + static QString architecture(const QString &qmakePath); + + static bool callMad(QProcess &proc, const QStringList &args, + const QString &qmakePath, bool useTarget); + static bool callMadAdmin(QProcess &proc, const QStringList &args, + const QString &qmakePath, bool useTarget); + + static QString osVersionToString(MaemoDeviceConfig::OsVersion version); + + static PackagingSystem packagingSystem(MaemoDeviceConfig::OsVersion osVersion); + + static bool removeRecursively(const QString &filePath, QString &error); + static bool copyRecursively(const QString &srcFilePath, + const QString &tgtFilePath, QString *error = 0); + + static bool isFileNewerThan(const QString &filePath, + const QDateTime &timeStamp); + + template<class T> static T *earlierBuildStep(const ProjectExplorer::DeployConfiguration *dc, + const ProjectExplorer::BuildStep *laterBuildStep) + { + if (!dc) + return 0; + const ProjectExplorer::BuildStepList * const bsl = dc->stepList(); + const QList<ProjectExplorer::BuildStep *> &buildSteps = bsl->steps(); + for (int i = 0; i < buildSteps.count(); ++i) { + if (buildSteps.at(i) == laterBuildStep) + return 0; + if (T * const step = dynamic_cast<T *>(buildSteps.at(i))) + return step; + } + return 0; + } + + template<typename State> static void assertState(State expected, + State actual, const char *func) + { + assertState(QList<State>() << expected, actual, func); + } + + template<typename State> static void assertState(const QList<State> &expected, + State actual, const char *func) + { + if (!expected.contains(actual)) { + qWarning("Warning: Unexpected state %d in function %s.", + actual, func); + } + } + + static bool isValidMaemoQtVersion(const QString &qmakePath, + MaemoDeviceConfig::OsVersion maemoVersion); +private: + static QString madAdminCommand(const QString &qmakePath); + static bool callMaddeShellScript(QProcess &proc, const QString &qmakePath, + const QString &command, const QStringList &args, bool useTarget); + static QStringList targetArgs(const QString &qmakePath, bool useTarget); +}; + +} // namespace Internal +} // namespace RemoteLinux + +#endif // MAEMOGLOBAL_H |