forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -750,6 +750,7 @@ AndroidConfigurations::AndroidConfigurations(QObject *parent)
|
|||||||
|
|
||||||
void AndroidConfigurations::load()
|
void AndroidConfigurations::load()
|
||||||
{
|
{
|
||||||
|
bool saveSettings = false;
|
||||||
QSettings *settings = Core::ICore::instance()->settings();
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
settings->beginGroup(SettingsGroup);
|
settings->beginGroup(SettingsGroup);
|
||||||
m_config = AndroidConfig(*settings);
|
m_config = AndroidConfig(*settings);
|
||||||
@@ -758,11 +759,61 @@ void AndroidConfigurations::load()
|
|||||||
Utils::Environment env = Utils::Environment::systemEnvironment();
|
Utils::Environment env = Utils::Environment::systemEnvironment();
|
||||||
QString location = env.searchInPath(QLatin1String("ant"));
|
QString location = env.searchInPath(QLatin1String("ant"));
|
||||||
QFileInfo fi(location);
|
QFileInfo fi(location);
|
||||||
if (fi.exists() && fi.isExecutable() && !fi.isDir())
|
if (fi.exists() && fi.isExecutable() && !fi.isDir()) {
|
||||||
m_config.antLocation = Utils::FileName::fromString(location);
|
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();
|
settings->endGroup();
|
||||||
|
|
||||||
|
if (saveSettings)
|
||||||
|
save();
|
||||||
}
|
}
|
||||||
|
|
||||||
AndroidConfigurations *AndroidConfigurations::m_instance = 0;
|
AndroidConfigurations *AndroidConfigurations::m_instance = 0;
|
||||||
|
Reference in New Issue
Block a user