mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-07 06:09:52 -06:00
Merge topic 'capture-clang-tidy-errors'
80ebc55acmake: Report if the <LANG>_CLANG_TIDY tool exits with non-zeroce1abfa4cmake: If ldd for LINK_WHAT_YOU_USE fails to run then report why44de6157cmake: Comment why we ignore the include-what-you-use return code
This commit is contained in:
6
Help/release/dev/capture-clang-tidy-errors.rst
Normal file
6
Help/release/dev/capture-clang-tidy-errors.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
capture-clang-tidy-errors
|
||||
-------------------------
|
||||
|
||||
* If a command specified by the :prop_tgt:`<LANG>_CLANG_TIDY` target property
|
||||
returns non-zero at build time this is now treated as an error instead of
|
||||
silently ignored.
|
||||
@@ -327,6 +327,7 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string>& args)
|
||||
iwyu_cmd.insert(iwyu_cmd.end(), orig_cmd.begin() + 1, orig_cmd.end());
|
||||
|
||||
// Run the iwyu command line. Capture its stderr and hide its stdout.
|
||||
// Ignore its return code because the tool always returns non-zero.
|
||||
std::string stdErr;
|
||||
if (!cmSystemTools::RunSingleCommand(iwyu_cmd, CM_NULLPTR, &stdErr,
|
||||
&ret, CM_NULLPTR,
|
||||
@@ -357,14 +358,21 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string>& args)
|
||||
|
||||
// Run the tidy command line. Capture its stdout and hide its stderr.
|
||||
std::string stdOut;
|
||||
if (!cmSystemTools::RunSingleCommand(tidy_cmd, &stdOut, CM_NULLPTR,
|
||||
&ret, CM_NULLPTR,
|
||||
std::string stdErr;
|
||||
if (!cmSystemTools::RunSingleCommand(tidy_cmd, &stdOut, &stdErr, &ret,
|
||||
CM_NULLPTR,
|
||||
cmSystemTools::OUTPUT_NONE)) {
|
||||
std::cerr << "Error running '" << tidy_cmd[0] << "'\n";
|
||||
std::cerr << "Error running '" << tidy_cmd[0] << "': " << stdErr
|
||||
<< "\n";
|
||||
return 1;
|
||||
}
|
||||
// Output the stdout from clang-tidy to stderr
|
||||
std::cerr << stdOut;
|
||||
// If clang-tidy exited with an error do the same.
|
||||
if (ret != 0) {
|
||||
std::cerr << stdErr;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
if (!lwyu.empty()) {
|
||||
// Construct the ldd -r -u (link what you use lwyu) command line
|
||||
@@ -377,11 +385,15 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string>& args)
|
||||
|
||||
// Run the ldd -u -r command line.
|
||||
// Capture its stdout and hide its stderr.
|
||||
// Ignore its return code because the tool always returns non-zero
|
||||
// if there are any warnings, but we just want to warn.
|
||||
std::string stdOut;
|
||||
if (!cmSystemTools::RunSingleCommand(lwyu_cmd, &stdOut, CM_NULLPTR,
|
||||
&ret, CM_NULLPTR,
|
||||
std::string stdErr;
|
||||
if (!cmSystemTools::RunSingleCommand(lwyu_cmd, &stdOut, &stdErr, &ret,
|
||||
CM_NULLPTR,
|
||||
cmSystemTools::OUTPUT_NONE)) {
|
||||
std::cerr << "Error running '" << lwyu_cmd[0] << "'\n";
|
||||
std::cerr << "Error running '" << lwyu_cmd[0] << "': " << stdErr
|
||||
<< "\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
1
Tests/RunCMake/ClangTidy/C-bad-Build-result.txt
Normal file
1
Tests/RunCMake/ClangTidy/C-bad-Build-result.txt
Normal file
@@ -0,0 +1 @@
|
||||
[^0]
|
||||
2
Tests/RunCMake/ClangTidy/C-bad-Build-stdout.txt
Normal file
2
Tests/RunCMake/ClangTidy/C-bad-Build-stdout.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
stdout from bad command line arg '-bad'
|
||||
stderr from bad command line arg '-bad'
|
||||
3
Tests/RunCMake/ClangTidy/C-bad.cmake
Normal file
3
Tests/RunCMake/ClangTidy/C-bad.cmake
Normal file
@@ -0,0 +1,3 @@
|
||||
enable_language(C)
|
||||
set(CMAKE_C_CLANG_TIDY "${PSEUDO_TIDY}" -bad)
|
||||
add_executable(main main.c)
|
||||
@@ -20,3 +20,4 @@ if (NOT RunCMake_GENERATOR STREQUAL "Watcom WMake")
|
||||
run_tidy(C-launch)
|
||||
run_tidy(CXX-launch)
|
||||
endif()
|
||||
run_tidy(C-bad)
|
||||
|
||||
@@ -3,5 +3,6 @@
|
||||
int main(void)
|
||||
{
|
||||
fprintf(stderr, "should add these lines:\n#include <...>\n");
|
||||
return 0;
|
||||
/* include-what-you-use always returns failure */
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
int i;
|
||||
for (i = 1; i < argc; ++i) {
|
||||
if (strcmp(argv[i], "-bad") == 0) {
|
||||
fprintf(stdout, "stdout from bad command line arg '-bad'\n");
|
||||
fprintf(stderr, "stderr from bad command line arg '-bad'\n");
|
||||
return 1;
|
||||
}
|
||||
if (argv[i][0] != '-') {
|
||||
fprintf(stdout, "%s:0:0: warning: message [checker]\n", argv[i]);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user