diff --git a/doc/api/coding-style.qdoc b/doc/api/coding-style.qdoc index a8afd6a3988a304f89d64f496b901be1d1ddda95..7ea0f6eec3110167b262e43769f703e012058bbf 100644 --- a/doc/api/coding-style.qdoc +++ b/doc/api/coding-style.qdoc @@ -17,7 +17,6 @@ ****************************************************************************/ /*! - \contentspage{index.html}{Qt Creator} \previouspage qtcreator-ui-text.html \page coding-style.html \nextpage qtcreator-api.html diff --git a/doc/api/external-tool-spec.qdoc b/doc/api/external-tool-spec.qdoc index a87456d97d7b61b7d9a421a9fb740eba63aaca91..6dd114fad45f6c19645bd98c130b68371e6a8120 100644 --- a/doc/api/external-tool-spec.qdoc +++ b/doc/api/external-tool-spec.qdoc @@ -17,7 +17,6 @@ ****************************************************************************/ /*! - \contentspage{index.html}{Qt Creator} \page external-tool-spec.html \nextpage coding-style.html diff --git a/doc/api/qtcreator-api.qdoc b/doc/api/qtcreator-api.qdoc index 8dcd8967bd9ab52b18a456f53beeb8fde8383810..464e791c5b19828f076051be07fbcfbaba5a3489 100644 --- a/doc/api/qtcreator-api.qdoc +++ b/doc/api/qtcreator-api.qdoc @@ -17,7 +17,6 @@ ****************************************************************************/ /*! - \contentspage{index.html}{Extending Qt Creator Manual} \page qtcreator-api.html \title Qt Creator API Reference diff --git a/doc/api/qtcreator-dev.qdoc b/doc/api/qtcreator-dev.qdoc index 51eb4bac9bd7e319fb7657adead5a1a839b3ed6e..8a421f35b3c0666ec11839de45776612bd557e3d 100644 --- a/doc/api/qtcreator-dev.qdoc +++ b/doc/api/qtcreator-dev.qdoc @@ -17,7 +17,7 @@ ****************************************************************************/ /*! - \page index.html + \page extending-index.html \title Extending Qt Creator Manual Qt Creator is a cross-platform integrated development environment (IDE) diff --git a/doc/api/qtcreator-documentation.qdoc b/doc/api/qtcreator-documentation.qdoc index 90fdcda6b79547241ec9a19209a354d2256e73b3..d89329e2c2aa36142b8bbcd6aaaf9f493f860495 100644 --- a/doc/api/qtcreator-documentation.qdoc +++ b/doc/api/qtcreator-documentation.qdoc @@ -17,7 +17,6 @@ ****************************************************************************/ /*! - \contentspage{index.html}{Qt Creator} \previouspage external-tool-spec.html \page qtcreator-documentation.html \nextpage coding-style.html diff --git a/doc/api/qtcreator-ui-text.qdoc b/doc/api/qtcreator-ui-text.qdoc index a352af2bb77c6688c63b5ec3139e2e79dc30c513..4ca8091517144eddb12d56ed807b9b8a77c1b42c 100644 --- a/doc/api/qtcreator-ui-text.qdoc +++ b/doc/api/qtcreator-ui-text.qdoc @@ -17,7 +17,6 @@ ****************************************************************************/ /*! - \contentspage{index.html}{Qt Creator} \previouspage external-tool-spec.html \page qtcreator-ui-text.html \nextpage coding-style.html diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index 800b43403dafdbecf0ca90f73127106d8fcd9da1..718d96061a26cbc9b7e67e21f926fb15c33ce189 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -779,6 +779,7 @@ AndroidConfigurations::AndroidConfigurations(QObject *parent) void AndroidConfigurations::load() { + bool saveSettings = false; QSettings *settings = Core::ICore::instance()->settings(); settings->beginGroup(SettingsGroup); m_config = AndroidConfig(*settings); @@ -787,11 +788,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(); } void AndroidConfigurations::updateAndroidDevice() diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index a47e6fccb0d4fd910f029335ec99b47ab3fb1072..38cfe6eece2bc8e497be86b59649e57c943a998f 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -550,9 +550,14 @@ void AndroidManager::updateTarget(ProjectExplorer::Target *target, const QString { QString androidDir = dirPath(target).toString(); + Utils::Environment env = Utils::Environment::systemEnvironment(); + QString javaHome = AndroidConfigurations::instance().config().openJDKLocation.toString(); + if (!javaHome.isEmpty()) + env.set(QLatin1String("JAVA_HOME"), javaHome); // clean previous build QProcess androidProc; androidProc.setWorkingDirectory(androidDir); + androidProc.setProcessEnvironment(env.toProcessEnvironment()); androidProc.start(AndroidConfigurations::instance().antToolPath().toString(), QStringList() << QLatin1String("clean")); if (!androidProc.waitForFinished(-1)) diff --git a/src/plugins/android/androidpackagecreationstep.cpp b/src/plugins/android/androidpackagecreationstep.cpp index 6dc511910303ceb8ba090b6d30c3b2950c731497..0030bb78b8786dc890578a55c43f15c727d5942f 100644 --- a/src/plugins/android/androidpackagecreationstep.cpp +++ b/src/plugins/android/androidpackagecreationstep.cpp @@ -169,6 +169,7 @@ bool AndroidPackageCreationStep::init() m_certificatePasswdForRun = m_certificatePasswd; m_jarSigner = AndroidConfigurations::instance().jarsignerPath(); m_zipAligner = AndroidConfigurations::instance().zipalignPath(); + m_environment = bc->environment(); ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target()->kit()); if (tc->type() != QLatin1String(Constants::ANDROID_TOOLCHAIN_TYPE)) @@ -686,6 +687,7 @@ bool AndroidPackageCreationStep::createPackage() emit addOutput(tr("Creating package file ..."), MessageOutput); QProcess *const buildProc = new QProcess; + buildProc->setProcessEnvironment(m_environment.toProcessEnvironment()); connect(buildProc, SIGNAL(readyReadStandardOutput()), this, SLOT(handleBuildStdOutOutput())); @@ -802,6 +804,10 @@ bool AndroidPackageCreationStep::runCommand(QProcess *buildProc return false; } buildProc->waitForFinished(-1); + + handleProcessOutput(buildProc, false); + handleProcessOutput(buildProc, true); + if (buildProc->error() != QProcess::UnknownError || buildProc->exitCode() != 0) { QString mainMessage = tr("Packaging Error: Command '%1 %2' failed.") @@ -821,13 +827,7 @@ void AndroidPackageCreationStep::handleBuildStdOutOutput() QProcess *const process = qobject_cast<QProcess *>(sender()); if (!process) return; - - process->setReadChannel(QProcess::StandardOutput); - while (process->canReadLine()) { - QString line = QString::fromLocal8Bit(process->readLine()); - m_outputParser.stdOutput(line); - emit addOutput(line, BuildStep::NormalOutput, BuildStep::DontAppendNewline); - } + handleProcessOutput(process, false); } void AndroidPackageCreationStep::handleBuildStdErrOutput() @@ -836,11 +836,21 @@ void AndroidPackageCreationStep::handleBuildStdErrOutput() if (!process) return; - process->setReadChannel(QProcess::StandardError); + handleProcessOutput(process, true); +} + +void AndroidPackageCreationStep::handleProcessOutput(QProcess *process, bool stdErr) +{ + process->setReadChannel(stdErr ? QProcess::StandardError : QProcess::StandardOutput); while (process->canReadLine()) { QString line = QString::fromLocal8Bit(process->readLine()); - m_outputParser.stdError(line); - emit addOutput(line, BuildStep::ErrorOutput, BuildStep::DontAppendNewline); + if (stdErr) + m_outputParser.stdError(line); + else + m_outputParser.stdOutput(line); + emit addOutput(line, stdErr ? BuildStep::ErrorOutput + : BuildStep::NormalOutput, + BuildStep::DontAppendNewline); } } diff --git a/src/plugins/android/androidpackagecreationstep.h b/src/plugins/android/androidpackagecreationstep.h index 19c01682937ccdc8cd33edda2bb067a2f428c27e..bc7336cd2ad0885cc45f6d0aa27bcc0599d361f1 100644 --- a/src/plugins/android/androidpackagecreationstep.h +++ b/src/plugins/android/androidpackagecreationstep.h @@ -35,6 +35,7 @@ #include <projectexplorer/abi.h> #include <projectexplorer/buildstep.h> +#include <utils/environment.h> #include <QAbstractItemModel> @@ -113,6 +114,7 @@ private: static const Core::Id CreatePackageId; private: + void handleProcessOutput(QProcess *process, bool stdErr); Utils::FileName m_keystorePath; QString m_keystorePasswd; QString m_certificateAlias; @@ -139,10 +141,10 @@ private: QStringList m_qtLibsWithDependencies; QVector<AndroidManager::Library> m_availableQtLibs; QStringList m_prebundledLibs; - QStringList m_bundledJars; QStringList m_otherBundledFiles; bool m_bundleQt; + Utils::Environment m_environment; }; } // namespace Internal diff --git a/src/plugins/android/androidpackageinstallationstep.cpp b/src/plugins/android/androidpackageinstallationstep.cpp index 629c857a90e032818c3ea16e854e4d03aa509b9a..7b69ac34674c0b46b2c65be70406f0c5f5c9d7e7 100644 --- a/src/plugins/android/androidpackageinstallationstep.cpp +++ b/src/plugins/android/androidpackageinstallationstep.cpp @@ -31,6 +31,11 @@ #include "androidmanager.h" #include <projectexplorer/buildsteplist.h> +#include <projectexplorer/target.h> +#include <projectexplorer/buildconfiguration.h> +#include <utils/hostosinfo.h> + +#include <QDir> using namespace Android::Internal; @@ -50,6 +55,14 @@ AndroidPackageInstallationStep::AndroidPackageInstallationStep(ProjectExplorer:: bool AndroidPackageInstallationStep::init() { - setUserArguments(QString::fromLatin1("INSTALL_ROOT=\"%1\" install").arg(AndroidManager::dirPath(target()).toUserOutput())); + ProjectExplorer::BuildConfiguration *bc = buildConfiguration(); + if (!bc) + bc = target()->activeBuildConfiguration(); + QString dirPath = AndroidManager::dirPath(target()).toString(); + if (Utils::HostOsInfo::isWindowsHost()) + if (bc->environment().searchInPath(QLatin1String("sh.exe")).isEmpty()) + dirPath = QDir::toNativeSeparators(dirPath); + setUserArguments(QString::fromLatin1("INSTALL_ROOT=\"%1\" install").arg(dirPath)); + return MakeStep::init(); } diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp index 359b2ea2ed38f913bb250e9247c050ab407c1957..e88b2fa7ae7ac068cda75f44d5f5a7ccb9b7162a 100644 --- a/src/plugins/android/androidtoolchain.cpp +++ b/src/plugins/android/androidtoolchain.cpp @@ -113,6 +113,9 @@ void AndroidToolChain::addToEnvironment(Environment &env) const env.set(QLatin1String("ANDROID_NDK_TOOLCHAIN_PREFIX"), AndroidConfigurations::toolchainPrefix(targetAbi().architecture())); env.set(QLatin1String("ANDROID_NDK_TOOLS_PREFIX"), AndroidConfigurations::toolsPrefix(targetAbi().architecture())); env.set(QLatin1String("ANDROID_NDK_TOOLCHAIN_VERSION"), m_ndkToolChainVersion); + QString javaHome = AndroidConfigurations::instance().openJDKPath().toString(); + if (!javaHome.isEmpty() && QFileInfo(javaHome).exists()) + env.set(QLatin1String("JAVA_HOME"), javaHome); } bool AndroidToolChain::operator ==(const ToolChain &tc) const diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index 89e63aceb798d0fb4547c3f6c2b17f2c18d2443d..52855dd790a71b1429dac621c6039af31029a7af 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -85,7 +85,7 @@ contains(QT_CONFIG, declarative)|!isEmpty(QT.declarative.name) { } } } else { - warning("QmlProjectManager, QmlProfiler and QmlDesigner plugins have been disabled: The plugins require QtDeclarative"); + warning("QmlProjectManager, QmlProfiler and QmlDesigner plugins have been disabled: The plugins require QtDeclarative") } for(p, SUBDIRS) { diff --git a/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp b/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp index d6b3dccf970052ac5bf0d84ed9c4775a53dab10c..a7883f506c823f8c7174d7f60ecb26a834578084 100644 --- a/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp +++ b/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp @@ -41,6 +41,11 @@ LocalQmlProfilerRunner::LocalQmlProfilerRunner(const Configuration &configuratio this, SIGNAL(appendMessage(QString,Utils::OutputFormat))); } +LocalQmlProfilerRunner::~LocalQmlProfilerRunner() +{ + disconnect(); +} + void LocalQmlProfilerRunner::start() { QString arguments = QString::fromLatin1("-qmljsdebugger=port:%1,block").arg(m_configuration.port); diff --git a/src/plugins/qmlprofiler/localqmlprofilerrunner.h b/src/plugins/qmlprofiler/localqmlprofilerrunner.h index 042df146252aef04e76c0009816ed91226af5974..26a9b4516182c2172072169d4a2726e104fc180d 100644 --- a/src/plugins/qmlprofiler/localqmlprofilerrunner.h +++ b/src/plugins/qmlprofiler/localqmlprofilerrunner.h @@ -52,6 +52,7 @@ public: }; explicit LocalQmlProfilerRunner(const Configuration &configuration, QObject *parent = 0); + ~LocalQmlProfilerRunner(); // AbstractQmlProfilerRunner virtual void start(); diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.cpp b/src/plugins/qmlprofiler/qmlprofilerengine.cpp index ce65ee8e497cbb6ac68df0ff87ab2667c50a4b5f..02398eff93875da52203668bcb9a5f3b43c70fe1 100644 --- a/src/plugins/qmlprofiler/qmlprofilerengine.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerengine.cpp @@ -65,7 +65,7 @@ class QmlProfilerEngine::QmlProfilerEnginePrivate { public: QmlProfilerEnginePrivate(QmlProfilerEngine *qq, const AnalyzerStartParameters &sp) : q(qq), m_runner(0), sp(sp) {} - ~QmlProfilerEnginePrivate() { m_runner->disconnect(); delete m_runner; } + ~QmlProfilerEnginePrivate() { delete m_runner; } bool attach(const QString &address, uint port); AbstractQmlProfilerRunner *createRunner(ProjectExplorer::RunConfiguration *runConfiguration, @@ -161,7 +161,6 @@ bool QmlProfilerEngine::start() QTC_ASSERT(d->m_profilerState, return false); if (d->m_runner) { - d->m_runner->disconnect(); delete d->m_runner; d->m_runner = 0; } @@ -378,7 +377,6 @@ void QmlProfilerEngine::profilerStateChanged() // (a new one will be created at start) d->m_noDebugOutputTimer.stop(); if (d->m_runner) { - d->m_runner->disconnect(); delete d->m_runner; d->m_runner = 0; }