[Cmake-commits] CMake branch, next, updated. v3.7.0-1272-g760f2bf
Brad King
brad.king at kitware.com
Fri Nov 18 09:43:59 EST 2016
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".
The branch, next has been updated
via 760f2bfc6dc3f0d21460f1f85a6b2f7b50244639 (commit)
via 80ebc55a7ce934ee357c30713bcb96b209e97963 (commit)
via ce1abfa4149ae0b3920626bef2dd15e8ee8b1940 (commit)
via 44de61578130cbd6e0f23057f9cf86f884078a4e (commit)
from dc97bfc8af0895adadcce4ccd6f2099d70c44e5a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=760f2bfc6dc3f0d21460f1f85a6b2f7b50244639
commit 760f2bfc6dc3f0d21460f1f85a6b2f7b50244639
Merge: dc97bfc 80ebc55
Author: Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 18 09:43:59 2016 -0500
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Fri Nov 18 09:43:59 2016 -0500
Merge topic 'capture-clang-tidy-errors' into next
80ebc55a cmake: Report if the <LANG>_CLANG_TIDY tool exits with non-zero
ce1abfa4 cmake: If ldd for LINK_WHAT_YOU_USE fails to run then report why
44de6157 cmake: Comment why we ignore the include-what-you-use return code
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=80ebc55a7ce934ee357c30713bcb96b209e97963
commit 80ebc55a7ce934ee357c30713bcb96b209e97963
Author: Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 17 11:36:04 2016 -0500
Commit: Brad King <brad.king at kitware.com>
CommitDate: Fri Nov 18 09:43:22 2016 -0500
cmake: Report if the <LANG>_CLANG_TIDY tool exits with non-zero
When using `<LANG>_CLANG_TIDY` our internal launcher for the tool must
capture its return code and stderr and report them on failure.
Otherwise incorrect command lines silently fail.
Closes: #16435
diff --git a/Help/release/dev/capture-clang-tidy-errors.rst b/Help/release/dev/capture-clang-tidy-errors.rst
new file mode 100644
index 0000000..14c32e6
--- /dev/null
+++ b/Help/release/dev/capture-clang-tidy-errors.rst
@@ -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.
diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx
index dca5ffc..f1ce75a 100644
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@ -358,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
diff --git a/Tests/RunCMake/ClangTidy/C-bad-Build-result.txt b/Tests/RunCMake/ClangTidy/C-bad-Build-result.txt
new file mode 100644
index 0000000..d197c91
--- /dev/null
+++ b/Tests/RunCMake/ClangTidy/C-bad-Build-result.txt
@@ -0,0 +1 @@
+[^0]
diff --git a/Tests/RunCMake/ClangTidy/C-bad-Build-stdout.txt b/Tests/RunCMake/ClangTidy/C-bad-Build-stdout.txt
new file mode 100644
index 0000000..2370ce1
--- /dev/null
+++ b/Tests/RunCMake/ClangTidy/C-bad-Build-stdout.txt
@@ -0,0 +1,2 @@
+stdout from bad command line arg '-bad'
+stderr from bad command line arg '-bad'
diff --git a/Tests/RunCMake/ClangTidy/C-bad.cmake b/Tests/RunCMake/ClangTidy/C-bad.cmake
new file mode 100644
index 0000000..aa54c08
--- /dev/null
+++ b/Tests/RunCMake/ClangTidy/C-bad.cmake
@@ -0,0 +1,3 @@
+enable_language(C)
+set(CMAKE_C_CLANG_TIDY "${PSEUDO_TIDY}" -bad)
+add_executable(main main.c)
diff --git a/Tests/RunCMake/ClangTidy/RunCMakeTest.cmake b/Tests/RunCMake/ClangTidy/RunCMakeTest.cmake
index 27cd922..2f41e50 100644
--- a/Tests/RunCMake/ClangTidy/RunCMakeTest.cmake
+++ b/Tests/RunCMake/ClangTidy/RunCMakeTest.cmake
@@ -20,3 +20,4 @@ if (NOT RunCMake_GENERATOR STREQUAL "Watcom WMake")
run_tidy(C-launch)
run_tidy(CXX-launch)
endif()
+run_tidy(C-bad)
diff --git a/Tests/RunCMake/pseudo_tidy.c b/Tests/RunCMake/pseudo_tidy.c
index c950d03..2feeb0f 100644
--- a/Tests/RunCMake/pseudo_tidy.c
+++ b/Tests/RunCMake/pseudo_tidy.c
@@ -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;
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ce1abfa4149ae0b3920626bef2dd15e8ee8b1940
commit ce1abfa4149ae0b3920626bef2dd15e8ee8b1940
Author: Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 17 11:34:32 2016 -0500
Commit: Brad King <brad.king at kitware.com>
CommitDate: Fri Nov 18 09:43:22 2016 -0500
cmake: If ldd for LINK_WHAT_YOU_USE fails to run then report why
diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx
index 945913e..dca5ffc 100644
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@ -378,11 +378,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;
}
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=44de61578130cbd6e0f23057f9cf86f884078a4e
commit 44de61578130cbd6e0f23057f9cf86f884078a4e
Author: Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 17 11:33:24 2016 -0500
Commit: Brad King <brad.king at kitware.com>
CommitDate: Fri Nov 18 09:43:19 2016 -0500
cmake: Comment why we ignore the include-what-you-use return code
The include-what-you-use tool always returns non-zero to indicate that
it did not actually produce an object file as Clang would from the same
command line. Add a comment explaining that this is why we ignore its
return code. Also update our `pseudo_iwyu` test suite tool to always
exit with an error too.
diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx
index 1db147a..945913e 100644
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@ -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,
diff --git a/Tests/RunCMake/pseudo_iwyu.c b/Tests/RunCMake/pseudo_iwyu.c
index 1e25de7..c761741 100644
--- a/Tests/RunCMake/pseudo_iwyu.c
+++ b/Tests/RunCMake/pseudo_iwyu.c
@@ -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;
}
-----------------------------------------------------------------------
Summary of changes:
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list