|
@@ -170,6 +170,17 @@ static std::string getAutogenTargetDir(cmTarget const* target)
|
|
|
return targetDir;
|
|
return targetDir;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+static std::string cmQtAutoGeneratorsStripCR(std::string const& line)
|
|
|
|
|
+{
|
|
|
|
|
+ // Strip CR characters rcc may have printed (possibly more than one!).
|
|
|
|
|
+ std::string::size_type cr = line.find('\r');
|
|
|
|
|
+ if (cr != line.npos)
|
|
|
|
|
+ {
|
|
|
|
|
+ return line.substr(0, cr);
|
|
|
|
|
+ }
|
|
|
|
|
+ return line;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
std::string cmQtAutoGenerators::ListQt5RccInputs(cmSourceFile* sf,
|
|
std::string cmQtAutoGenerators::ListQt5RccInputs(cmSourceFile* sf,
|
|
|
cmTarget const* target,
|
|
cmTarget const* target,
|
|
|
std::vector<std::string>& depends)
|
|
std::vector<std::string>& depends)
|
|
@@ -186,54 +197,56 @@ std::string cmQtAutoGenerators::ListQt5RccInputs(cmSourceFile* sf,
|
|
|
|
|
|
|
|
command.push_back(absFile);
|
|
command.push_back(absFile);
|
|
|
|
|
|
|
|
- std::string output;
|
|
|
|
|
|
|
+ std::string rccStdOut;
|
|
|
|
|
+ std::string rccStdErr;
|
|
|
int retVal = 0;
|
|
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)
|
|
if (!result || retVal)
|
|
|
{
|
|
{
|
|
|
std::cerr << "AUTOGEN: error: Rcc list process for " << sf->GetFullPath()
|
|
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();
|
|
return std::string();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- std::istringstream ostr(output);
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ std::istringstream ostr(rccStdOut);
|
|
|
std::string oline;
|
|
std::string oline;
|
|
|
while(std::getline(ostr, oline))
|
|
while(std::getline(ostr, oline))
|
|
|
{
|
|
{
|
|
|
- // Strip CR characters rcc may have printed (possibly more than one!).
|
|
|
|
|
- std::string::size_type cr = oline.find('\r');
|
|
|
|
|
- if (cr != oline.npos)
|
|
|
|
|
|
|
+ oline = cmQtAutoGeneratorsStripCR(oline);
|
|
|
|
|
+ if(!oline.empty())
|
|
|
{
|
|
{
|
|
|
- oline = oline.substr(0, cr);
|
|
|
|
|
|
|
+ qrcEntries.push_back(oline);
|
|
|
}
|
|
}
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- if (oline.empty())
|
|
|
|
|
- {
|
|
|
|
|
- // The output of rcc --list contains many empty lines.
|
|
|
|
|
- continue;
|
|
|
|
|
- }
|
|
|
|
|
- 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 '";
|
|
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)
|
|
if (pos == std::string::npos)
|
|
|
{
|
|
{
|
|
|
std::cerr << "AUTOGEN: error: Rcc lists unparsable output "
|
|
std::cerr << "AUTOGEN: error: Rcc lists unparsable output "
|
|
|
- << oline << std::endl;
|
|
|
|
|
|
|
+ << eline << std::endl;
|
|
|
return std::string();
|
|
return std::string();
|
|
|
}
|
|
}
|
|
|
pos += searchString.length();
|
|
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());
|
|
depends.insert(depends.end(), qrcEntries.begin(), qrcEntries.end());
|
|
|
return cmJoin(qrcEntries, "@list_sep@");
|
|
return cmJoin(qrcEntries, "@list_sep@");
|
|
|
}
|
|
}
|