diff --git a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp index dfe36cea5cf..30002333e5f 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp +++ b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp @@ -67,6 +67,12 @@ bool PuppetBuildProgressDialog::useFallbackPuppet() const return m_useFallbackPuppet; } +void PuppetBuildProgressDialog::setErrorOutputFile(const QString &filePath) +{ + ui->openErrorOutputFileLabel->setText(QString::fromLatin1("%2").arg( + filePath, ui->openErrorOutputFileLabel->text())); +} + void PuppetBuildProgressDialog::setUseFallbackPuppet() { m_useFallbackPuppet = true; diff --git a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.h b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.h index ab2622c7fb7..53432f70ab2 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.h +++ b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.h @@ -51,6 +51,7 @@ public: void setProgress(int progress); void newBuildOutput(const QByteArray &standardOutput); bool useFallbackPuppet() const; + void setErrorOutputFile(const QString &filePath); private slots: void setUseFallbackPuppet(); diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp index b397d1a2646..55b91b0bc13 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp +++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp @@ -391,21 +391,31 @@ bool PuppetCreator::startBuildProcess(const QString &buildDirectoryPath, if (command.isEmpty()) return false; + const QString errorOutputFilePath(buildDirectoryPath + QLatin1String("/build_error_output.txt")); + if (QFile::exists(errorOutputFilePath)) + QFile(errorOutputFilePath).remove(); + progressDialog->setErrorOutputFile(errorOutputFilePath); + QProcess process; + process.setStandardErrorFile(errorOutputFilePath); process.setProcessChannelMode(QProcess::SeparateChannels); process.setProcessEnvironment(processEnvironment()); process.setWorkingDirectory(buildDirectoryPath); process.start(command, processArguments); process.waitForStarted(); - while (process.waitForReadyRead(-1)) { + while (process.waitForReadyRead(100) || process.state() == QProcess::Running) { if (progressDialog->useFallbackPuppet()) return false; - QByteArray newOutput = process.readAllStandardOutput(); - if (progressDialog) - progressDialog->newBuildOutput(newOutput); + QApplication::processEvents(QEventLoop::ExcludeSocketNotifiers); - m_compileLog.append(newOutput); + QByteArray newOutput = process.readAllStandardOutput(); + if (!newOutput.isEmpty()) { + if (progressDialog) + progressDialog->newBuildOutput(newOutput); + + m_compileLog.append(QString::fromLatin1(newOutput)); + } } process.waitForFinished();