Merge topic 'autogen-no-rcc-stderr'
258ba828
QtAutogen: Process 'rcc --list' stdout and stderr separately (#15523)acd4f01f
cmQtAutoGenerators: Split CR stripping out to helper function
This commit is contained in:
commit
df302bcc55
|
@ -170,6 +170,17 @@ static std::string getAutogenTargetDir(cmTarget const* target)
|
|||
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,
|
||||
cmTarget const* target,
|
||||
std::vector<std::string>& depends)
|
||||
|
@ -186,54 +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))
|
||||
{
|
||||
// Strip CR characters rcc may have printed (possibly more than one!).
|
||||
std::string::size_type cr = oline.find('\r');
|
||||
if (cr != oline.npos)
|
||||
{
|
||||
oline = oline.substr(0, cr);
|
||||
}
|
||||
|
||||
if (oline.empty())
|
||||
{
|
||||
// The output of rcc --list contains many empty lines.
|
||||
continue;
|
||||
}
|
||||
if (cmHasLiteralPrefix(oline, "RCC: Error in"))
|
||||
{
|
||||
static std::string searchString = "Cannot find file '";
|
||||
|
||||
std::string::size_type pos = oline.find(searchString);
|
||||
if (pos == std::string::npos)
|
||||
{
|
||||
std::cerr << "AUTOGEN: error: Rcc lists unparsable output "
|
||||
<< oline << 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
|
||||
oline = cmQtAutoGeneratorsStripCR(oline);
|
||||
if(!oline.empty())
|
||||
{
|
||||
qrcEntries.push_back(oline);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
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 = eline.find(searchString);
|
||||
if (pos == std::string::npos)
|
||||
{
|
||||
std::cerr << "AUTOGEN: error: Rcc lists unparsable output "
|
||||
<< eline << std::endl;
|
||||
return std::string();
|
||||
}
|
||||
pos += searchString.length();
|
||||
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@");
|
||||
}
|
||||
|
|
|
@ -63,7 +63,15 @@ add_library(codeeditorLib STATIC codeeditor.cpp)
|
|||
|
||||
add_library(privateSlot OBJECT private_slot.cpp)
|
||||
|
||||
configure_file(generated_resource.qrc.in generated_resource.qrc @ONLY)
|
||||
add_custom_command(
|
||||
OUTPUT generated.txt
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/generated.txt.in" "${CMAKE_CURRENT_BINARY_DIR}/generated.txt"
|
||||
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/generated.txt.in"
|
||||
)
|
||||
|
||||
add_custom_target(generate_moc_input
|
||||
DEPENDS generated.txt
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/myinterface.h.in" "${CMAKE_CURRENT_BINARY_DIR}"
|
||||
COMMAND ${CMAKE_COMMAND} -E rename "${CMAKE_CURRENT_BINARY_DIR}/myinterface.h.in" "${CMAKE_CURRENT_BINARY_DIR}/myinterface.h"
|
||||
)
|
||||
|
@ -89,6 +97,7 @@ add_executable(QtAutogen main.cpp calwidget.cpp second_widget.cpp foo.cpp blub.c
|
|||
multiplewidgets.cpp
|
||||
xyz.cpp yaf.cpp gadget.cpp $<TARGET_OBJECTS:privateSlot>
|
||||
test.qrc second_resource.qrc resourcetester.cpp generated.cpp ${debug_srcs}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/generated_resource.qrc
|
||||
)
|
||||
set_property(TARGET QtAutogen APPEND PROPERTY AUTOGEN_TARGET_DEPENDS generate_moc_input "${CMAKE_CURRENT_BINARY_DIR}/myotherinterface.h")
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Some generated text file.
|
|
@ -0,0 +1,5 @@
|
|||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource>
|
||||
<file>generated.txt</file>
|
||||
</qresource>
|
||||
</RCC>
|
Loading…
Reference in New Issue