From b48447a1d603a6609b9d6735fda6f875266237c8 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Wed, 16 May 2018 10:23:25 +0000 Subject: [PATCH] [diagtool] Add diagtool to install target. Although not very well known, diagtool is an incredibly convenient utility for dealing with diagnostics. Particularly useful are the "tree" and "show-enabled" commands: - The former prints the hierarchy of diagnostic (warning) flags and which of them are enabled by default. - The latter can be used to replace an invocation to clang and will print which diagnostics are disabled, warnings or errors. For instance: `diagtool show-enabled -Wall -Werror /tmp/test.c` will print that -Wunused-variable (warn_unused_variable) will be treated as an error. This patch adds them to the install target so it gets shipped with the LLVM release. It also adds a very basic man page and mentions this change in the release notes. Differential revision: https://reviews.llvm.org/D46694 llvm-svn: 332448 --- clang/docs/CommandGuide/diagtool.rst | 52 ++++++++++++++++++++++++++++ clang/docs/CommandGuide/index.rst | 1 + clang/docs/ReleaseNotes.rst | 5 +++ clang/tools/diagtool/CMakeLists.txt | 12 +++++++ 4 files changed, 70 insertions(+) create mode 100644 clang/docs/CommandGuide/diagtool.rst diff --git a/clang/docs/CommandGuide/diagtool.rst b/clang/docs/CommandGuide/diagtool.rst new file mode 100644 index 0000000000000..59417f71f69d7 --- /dev/null +++ b/clang/docs/CommandGuide/diagtool.rst @@ -0,0 +1,52 @@ +diagtool - clang diagnostics tool +================================= + +SYNOPSIS +-------- + +:program:`diagtool` *command* [*args*] + +DESCRIPTION +----------- + +:program:`diagtool` is a combination of four tool for dealing with diagnostics in :program:`clang`. + +SUBCOMMANDS +----------- + +:program:`diagtool` is separated into several subcommands each tailored to a +different purpose. A brief summary of each command follows, with more detail in +the sections that follow. + + * :ref:`find_diagnostic_id` - Print the id of the given diagnostic. + * :ref:`list_warnings` - List warnings and their corresponding flags. + * :ref:`show_enabled` - Show which warnings are enabled for a given command line. + * :ref:`tree` - Show warning flags in a tree view. + +.. _find_diagnostic_id: + +find-diagnostic-id +~~~~~~~~~~~~~~~~~~ + +:program:`diagtool` find-diagnostic-id *diagnostic-name* + +.. _list_warnings: + +list-warnings +~~~~~~~~~~~~~ + +:program:`diagtool` list-warnings + +.. _show_enabled: + +show-enabled +~~~~~~~~~~~~ + +:program:`diagtool` show-enabled [*options*] *filename ...* + +.. _tree: + +tree +~~~~ + +:program:`diagtool` tree [*diagnostic-group*] diff --git a/clang/docs/CommandGuide/index.rst b/clang/docs/CommandGuide/index.rst index 826ed97119805..83a91182e9ca6 100644 --- a/clang/docs/CommandGuide/index.rst +++ b/clang/docs/CommandGuide/index.rst @@ -15,3 +15,4 @@ Basic Commands :maxdepth: 1 clang + diagtool diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 93a258c6378fd..8414555464732 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -93,6 +93,11 @@ Non-comprehensive list of changes in this release behavior can be restored by setting ``-fclang-abi-compat`` to ``6`` or lower. +- An existing tool named ``diagtool`` has been added to the release. As the + name suggests, it helps with dealing with diagnostics in ``clang``, such as + finding out the warning hierarchy, and which of them are enabled by default + or for a particular compiler invocation. + - ... New Compiler Flags diff --git a/clang/tools/diagtool/CMakeLists.txt b/clang/tools/diagtool/CMakeLists.txt index 5193c241cd8e2..96d1c390249c3 100644 --- a/clang/tools/diagtool/CMakeLists.txt +++ b/clang/tools/diagtool/CMakeLists.txt @@ -17,3 +17,15 @@ target_link_libraries(diagtool clangBasic clangFrontend ) + +if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) + install(TARGETS diagtool + COMPONENT diagtool + RUNTIME DESTINATION bin) + + if (NOT CMAKE_CONFIGURATION_TYPES) + add_llvm_install_targets(install-diagtool + DEPENDS diagtool + COMPONENT diagtool) + endif() +endif()