diff options
author | Karsten Heimrich <karsten.heimrich@theqtcompany.com> | 2015-07-10 11:54:41 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@theqtcompany.com> | 2015-07-14 11:45:04 +0000 |
commit | 7530807cb040224a2ed31e290ed6f2fb7fc75574 (patch) | |
tree | 52e06de5db9b907b63cae25abc7ac50205379702 /src/libs/installer/packagemanagercoredata.cpp | |
parent | b4a2001d65e13f006da03d39e56a0d989117c597 (diff) |
Make the installation relocatable (with some limitations).
Replace the install path with a constant that's updated while
loading the stored configuration and operation values. Dynamic
variables now need to be set after reading the .ini file, cause
there we store the values we found during installation. Makes
an installation relocatable, though with some limitations:
* Uninstaller entry might break on Windows
* Start menu sortcuts might break on Windows
* Everything else written to the system using full path
Task-number: QTIFW-653
Change-Id: Ie3255299460d4ad7f18c88de9044c95db10d17ac
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Reviewed-by: Karsten Heimrich <karsten.heimrich@theqtcompany.com>
Diffstat (limited to 'src/libs/installer/packagemanagercoredata.cpp')
-rw-r--r-- | src/libs/installer/packagemanagercoredata.cpp | 82 |
1 files changed, 47 insertions, 35 deletions
diff --git a/src/libs/installer/packagemanagercoredata.cpp b/src/libs/installer/packagemanagercoredata.cpp index 77103b61e..399f929f9 100644 --- a/src/libs/installer/packagemanagercoredata.cpp +++ b/src/libs/installer/packagemanagercoredata.cpp @@ -52,27 +52,14 @@ namespace QInstaller PackageManagerCoreData::PackageManagerCoreData(const QHash<QString, QString> &variables) { m_variables = variables; + setDynamicPredefinedVariables(); // Set some common variables that may used e.g. as placeholder in some of the settings variables or // in a script or... - m_variables.insert(QLatin1String("rootDir"), QDir::rootPath()); - m_variables.insert(QLatin1String("homeDir"), QDir::homePath()); - m_variables.insert(QLatin1String("RootDir"), QDir::rootPath()); - m_variables.insert(QLatin1String("HomeDir"), QDir::homePath()); m_variables.insert(scTargetConfigurationFile, QLatin1String("components.xml")); m_variables.insert(QLatin1String("InstallerDirPath"), QCoreApplication::applicationDirPath()); m_variables.insert(QLatin1String("InstallerFilePath"), QCoreApplication::applicationFilePath()); - QString dir = QLatin1String("/opt"); -#ifdef Q_OS_WIN - TCHAR buffer[MAX_PATH + 1] = { 0 }; - SHGetFolderPath(0, CSIDL_PROGRAM_FILES, 0, 0, buffer); - dir = QString::fromWCharArray(buffer); -#elif defined (Q_OS_OSX) - dir = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation).value(0); -#endif - m_variables.insert(QLatin1String("ApplicationsDir"), dir); - #ifdef Q_OS_WIN m_variables.insert(QLatin1String("os"), QLatin1String("win")); #elif defined(Q_OS_OSX) @@ -83,26 +70,6 @@ PackageManagerCoreData::PackageManagerCoreData(const QHash<QString, QString> &va // TODO: add more platforms as needed... #endif -#ifdef Q_OS_WIN - QSettingsWrapper user(QLatin1String("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\" - "CurrentVersion\\Explorer\\User Shell Folders"), QSettingsWrapper::NativeFormat); - QSettingsWrapper system(QLatin1String("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\" - "CurrentVersion\\Explorer\\Shell Folders"), QSettingsWrapper::NativeFormat); - - const QString programs = user.value(QLatin1String("Programs"), QString()).toString(); - const QString allPrograms = system.value(QLatin1String("Common Programs"), QString()).toString(); - - QString desktop; - if (m_variables.value(scAllUsers) == scTrue) { - desktop = system.value(QLatin1String("Desktop")).toString(); - } else { - desktop = user.value(QLatin1String("Desktop")).toString(); - } - m_variables.insert(QLatin1String("DesktopDir"), replaceWindowsEnvironmentVariables(desktop)); - m_variables.insert(QLatin1String("UserStartMenuProgramsPath"), replaceWindowsEnvironmentVariables(programs)); - m_variables.insert(QLatin1String("AllUsersStartMenuProgramsPath"), replaceWindowsEnvironmentVariables(allPrograms)); -#endif - m_settings = Settings::fromFileAndPrefix(QLatin1String(":/metadata/installer-config/config.xml"), QLatin1String(":/metadata/installer-config/"), Settings::RelaxedParseMode); @@ -132,12 +99,57 @@ void PackageManagerCoreData::clear() m_settings = Settings(); } +/*! + Set some common variables that may be used e.g. as placeholder in some of the settings + variables or in a script or... +*/ +void PackageManagerCoreData::setDynamicPredefinedVariables() +{ + m_variables.insert(QLatin1String("rootDir"), QDir::rootPath()); + m_variables.insert(QLatin1String("homeDir"), QDir::homePath()); + m_variables.insert(QLatin1String("RootDir"), QDir::rootPath()); + m_variables.insert(QLatin1String("HomeDir"), QDir::homePath()); + + QString dir = QLatin1String("/opt"); +#ifdef Q_OS_WIN + TCHAR buffer[MAX_PATH + 1] = { 0 }; + SHGetFolderPath(0, CSIDL_PROGRAM_FILES, 0, 0, buffer); + dir = QString::fromWCharArray(buffer); +#elif defined (Q_OS_OSX) + dir = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation).value(0); +#endif + m_variables.insert(QLatin1String("ApplicationsDir"), dir); + +#ifdef Q_OS_WIN + QSettingsWrapper user(QLatin1String("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\" + "CurrentVersion\\Explorer\\User Shell Folders"), QSettingsWrapper::NativeFormat); + QSettingsWrapper system(QLatin1String("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\" + "CurrentVersion\\Explorer\\Shell Folders"), QSettingsWrapper::NativeFormat); + + const QString programs = user.value(QLatin1String("Programs"), QString()).toString(); + const QString allPrograms = system.value(QLatin1String("Common Programs"), QString()) + .toString(); + + QString desktop; + if (m_variables.value(QLatin1String("AllUsers")) == scTrue) { + desktop = system.value(QLatin1String("Desktop")).toString(); + } else { + desktop = user.value(QLatin1String("Desktop")).toString(); + } + m_variables.insert(QLatin1String("DesktopDir"), replaceWindowsEnvironmentVariables(desktop)); + m_variables.insert(QLatin1String("UserStartMenuProgramsPath"), + replaceWindowsEnvironmentVariables(programs)); + m_variables.insert(QLatin1String("AllUsersStartMenuProgramsPath"), + replaceWindowsEnvironmentVariables(allPrograms)); +#endif +} + Settings &PackageManagerCoreData::settings() const { return m_settings; } -QList<QString> PackageManagerCoreData::keys() const +QStringList PackageManagerCoreData::keys() const { return m_variables.keys(); } |