diff options
author | Daniel Teske <daniel.teske@digia.com> | 2013-06-10 18:19:08 +0200 |
---|---|---|
committer | Daniel Teske <daniel.teske@digia.com> | 2013-06-14 13:13:25 +0200 |
commit | 115b91a74637515382046b89153b295f3a0cb973 (patch) | |
tree | b8252426a2185060af85ed0aa66484e2ab4fd4ef | |
parent | cb6eaa3c2435128392d5ef7bd98e26902d086ece (diff) | |
download | qt-creator-115b91a74637515382046b89153b295f3a0cb973.tar.gz |
Android: Autodetect a value for OpenJDK path
First look into the current PATH, secondly into the registry.
Change-Id: I3b1d1ebccb1a85c03979ac3d48740c3de5a6df40
Reviewed-by: BogDan Vatra <bogdan@kde.org>
Reviewed-by: Ray Donnelly <mingw.android@gmail.com>
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
-rw-r--r-- | src/plugins/android/androidconfigurations.cpp | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index 3b778896a9..dbc7007faa 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -750,6 +750,7 @@ AndroidConfigurations::AndroidConfigurations(QObject *parent) void AndroidConfigurations::load() { + bool saveSettings = false; QSettings *settings = Core::ICore::instance()->settings(); settings->beginGroup(SettingsGroup); m_config = AndroidConfig(*settings); @@ -758,11 +759,61 @@ void AndroidConfigurations::load() Utils::Environment env = Utils::Environment::systemEnvironment(); QString location = env.searchInPath(QLatin1String("ant")); QFileInfo fi(location); - if (fi.exists() && fi.isExecutable() && !fi.isDir()) + if (fi.exists() && fi.isExecutable() && !fi.isDir()) { m_config.antLocation = Utils::FileName::fromString(location); + saveSettings = true; + } + } + + if (m_config.openJDKLocation.isEmpty()) { + Utils::Environment env = Utils::Environment::systemEnvironment(); + QString location = env.searchInPath(QLatin1String("javac")); + QFileInfo fi(location); + if (fi.exists() && fi.isExecutable() && !fi.isDir()) { + QDir parentDirectory = fi.canonicalPath(); + parentDirectory.cdUp(); // one up from bin + m_config.openJDKLocation = Utils::FileName::fromString(parentDirectory.absolutePath()); + saveSettings = true; + } else if (Utils::HostOsInfo::isWindowsHost()) { + QSettings settings(QLatin1String("HKEY_LOCAL_MACHINE\\SOFTWARE\\Javasoft\\Java Development Kit"), QSettings::NativeFormat); + QStringList allVersions = settings.childGroups(); + QString javaHome; + int major = -1; + int minor = -1; + foreach (const QString &version, allVersions) { + QStringList parts = version.split(QLatin1String(".")); + if (parts.size() != 2) // not interested in 1.7.0_u21 + continue; + bool okMajor, okMinor; + int tmpMajor = parts.at(0).toInt(&okMajor); + int tmpMinor = parts.at(1).toInt(&okMinor); + if (!okMajor || !okMinor) + continue; + if (tmpMajor > major + || (tmpMajor == major + && tmpMinor > minor)) { + settings.beginGroup(version); + QString tmpJavaHome = settings.value(QLatin1String("JavaHome")).toString(); + settings.endGroup(); + if (!QFileInfo(tmpJavaHome).exists()) + continue; + + major = tmpMajor; + minor = tmpMinor; + javaHome = tmpJavaHome; + } + } + if (!javaHome.isEmpty()) { + m_config.openJDKLocation = Utils::FileName::fromString(javaHome); + saveSettings = true; + } + } } settings->endGroup(); + + if (saveSettings) + save(); } AndroidConfigurations *AndroidConfigurations::m_instance = 0; |