diff options
author | Brad King <brad.king@kitware.com> | 2015-04-20 20:42:19 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2015-04-21 13:33:19 (GMT) |
commit | 258ba82882545d70162c865e56fc024ccd9cd164 (patch) | |
tree | cbb6220eddfff53b50fba60bcde8e231c38f28ad /Source/cmQtAutoGenerators.cxx | |
parent | acd4f01fd81c4303cad37128a75ca390c1a42571 (diff) | |
download | CMake-258ba82882545d70162c865e56fc024ccd9cd164.zip CMake-258ba82882545d70162c865e56fc024ccd9cd164.tar.gz CMake-258ba82882545d70162c865e56fc024ccd9cd164.tar.bz2 |
QtAutogen: Process 'rcc --list' stdout and stderr separately (#15523)
The stderr may have warning messages. We should not treat these lines
as resource files. However, we must still recognize error message lines
for missing resource files that may be generated.
Extend the QtAutogen test to cover a generated resource as the only one
listed in a .qrc file. This causes 'rcc --list' to print a warning to
stderr that we now intend to ignore.
Diffstat (limited to 'Source/cmQtAutoGenerators.cxx')
-rw-r--r-- | Source/cmQtAutoGenerators.cxx | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx index 547be6e..644c528 100644 --- a/Source/cmQtAutoGenerators.cxx +++ b/Source/cmQtAutoGenerators.cxx @@ -197,48 +197,56 @@ std::string cmQtAutoGenerators::ListQt5RccInputs(cmSourceFile* sf, command.push_back(absFile); - std::string output; + std::string rccStdOut; + std::string rccStdErr; int retVal = 0; - bool result = cmSystemTools::RunSingleCommand(command, &output, &output, - &retVal, 0, - cmSystemTools::OUTPUT_NONE); + bool result = cmSystemTools::RunSingleCommand( + command, &rccStdOut, &rccStdErr, + &retVal, 0, cmSystemTools::OUTPUT_NONE); if (!result || retVal) { std::cerr << "AUTOGEN: error: Rcc list process for " << sf->GetFullPath() - << " failed:\n" << output << std::endl; + << " failed:\n" << rccStdOut << "\n" << rccStdErr << std::endl; return std::string(); } - std::istringstream ostr(output); + { + std::istringstream ostr(rccStdOut); std::string oline; while(std::getline(ostr, oline)) { oline = cmQtAutoGeneratorsStripCR(oline); - if (oline.empty()) + if(!oline.empty()) { - // The output of rcc --list contains many empty lines. - continue; + qrcEntries.push_back(oline); } - if (cmHasLiteralPrefix(oline, "RCC: Error in")) + } + } + + { + std::istringstream estr(rccStdErr); + std::string eline; + while(std::getline(estr, eline)) + { + eline = cmQtAutoGeneratorsStripCR(eline); + if (cmHasLiteralPrefix(eline, "RCC: Error in")) { static std::string searchString = "Cannot find file '"; - std::string::size_type pos = oline.find(searchString); + std::string::size_type pos = eline.find(searchString); if (pos == std::string::npos) { std::cerr << "AUTOGEN: error: Rcc lists unparsable output " - << oline << std::endl; + << eline << std::endl; return std::string(); } pos += searchString.length(); - std::string::size_type sz = oline.size() - pos - 1; - qrcEntries.push_back(oline.substr(pos, sz)); - } - else - { - qrcEntries.push_back(oline); + std::string::size_type sz = eline.size() - pos - 1; + qrcEntries.push_back(eline.substr(pos, sz)); } } + } + depends.insert(depends.end(), qrcEntries.begin(), qrcEntries.end()); return cmJoin(qrcEntries, "@list_sep@"); } |