diff --git a/Source/cmQtAutoGenerator.cxx b/Source/cmQtAutoGenerator.cxx index a1abd3f572..27afe48cbd 100644 --- a/Source/cmQtAutoGenerator.cxx +++ b/Source/cmQtAutoGenerator.cxx @@ -15,6 +15,7 @@ #include "cmake.h" #include +#include #include // -- Class methods @@ -504,6 +505,13 @@ void cmQtAutoGenerator::ReadOnlyProcessT::setup( Setup_.MergedOutput = mergedOutput; } +static std::string getUVError(const char* prefixString, int uvErrorCode) +{ + std::ostringstream ost; + ost << prefixString << ": " << uv_strerror(uvErrorCode); + return ost.str(); +} + bool cmQtAutoGenerator::ReadOnlyProcessT::start( uv_loop_t* uv_loop, std::function&& finishedCallback) { @@ -560,8 +568,10 @@ bool cmQtAutoGenerator::ReadOnlyProcessT::start( UVOptions_.stdio = UVOptionsStdIO_.data(); // -- Spawn process - if (UVProcess_.spawn(*uv_loop, UVOptions_, this) != 0) { - Result()->ErrorMessage = "libuv process spawn failed"; + int uvErrorCode = UVProcess_.spawn(*uv_loop, UVOptions_, this); + if (uvErrorCode != 0) { + Result()->ErrorMessage = + getUVError("libuv process spawn failed ", uvErrorCode); } } // -- Start reading from stdio streams diff --git a/Source/cmQtAutoGeneratorMocUic.cxx b/Source/cmQtAutoGeneratorMocUic.cxx index cb6f7eab1e..0982473767 100644 --- a/Source/cmQtAutoGeneratorMocUic.cxx +++ b/Source/cmQtAutoGeneratorMocUic.cxx @@ -1107,13 +1107,17 @@ void cmQtAutoGeneratorMocUic::WorkerT::UVProcessStart(uv_async_t* handle) wrk.Process_->start(handle->loop, [&wrk] { wrk.UVProcessFinished(); }); } } + + if (!wrk.Process_->IsStarted()) { + wrk.UVProcessFinished(); + } } void cmQtAutoGeneratorMocUic::WorkerT::UVProcessFinished() { { std::lock_guard lock(ProcessMutex_); - if (Process_ && Process_->IsFinished()) { + if (Process_ && (Process_->IsFinished() || !Process_->IsStarted())) { Process_.reset(); } }