Remove old IWYU tool
The old tool is not well integrated with the WebRTC build system. The new tool - apply-include-cleaner - is fully integrated. Bug: None Change-Id: Id8d0cec85004c5289725502ab11fe81d865cafbd Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/377860 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Cr-Commit-Position: refs/heads/main@{#43932}
This commit is contained in:
parent
a0ba9bd3e7
commit
818696c156
@ -1,131 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# Run the include-what-you-use tool (iwyu) on a file in the webrtc source
|
|
||||||
# directory.
|
|
||||||
#
|
|
||||||
# The script uses a subsequent grep pass to remove #include files
|
|
||||||
# that are problematic to include.
|
|
||||||
#
|
|
||||||
# In order to handle include paths correctly, you need to provide
|
|
||||||
# a compile DB (aka compile_commands.json).
|
|
||||||
# You can create it in one of the following ways:
|
|
||||||
# "gn gen --export-compile-commands path/to/out"
|
|
||||||
# "tools/clang/scripts/generate_compdb.py -p path/to/out > compile_commands.json"
|
|
||||||
# If "out/Default" exists, the script will attempt to generate it for you.
|
|
||||||
#
|
|
||||||
# To get iwyu on Debian/glinux, do "sudo apt-get install iwyu".
|
|
||||||
|
|
||||||
# Debug level, also controlled by the "-d" argument.
|
|
||||||
# Set this to 1 to get more debug information.
|
|
||||||
# Set this to 2 to also get a dump of the iwyu tool output.
|
|
||||||
DEBUG=0
|
|
||||||
|
|
||||||
set -e
|
|
||||||
if [ $DEBUG -gt 0 ]; then
|
|
||||||
set -x
|
|
||||||
fi
|
|
||||||
|
|
||||||
error() {
|
|
||||||
echo "$*" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
find_alternates() {
|
|
||||||
for name in "$@"
|
|
||||||
do
|
|
||||||
name_path=$(which "${name}")
|
|
||||||
if [ ! -z "${name_path}" ]; then
|
|
||||||
echo ${name_path}
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
error "Could not find any of the tools '$@' in PATH."
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
IWYU_TOOL=$(find_alternates iwyu_tool iwyu_tool.py)
|
|
||||||
FIX_INCLUDE=$(find_alternates fix_include fix_includes.py)
|
|
||||||
FIX_INCLUDE_ARGS=''
|
|
||||||
IWYU_TOOL_DIR="${IWYU_TOOL_DIR:-tools_webrtc/iwyu}"
|
|
||||||
COMPILE_COMMANDS=''
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
echo "Usage: $0 [ -c compile-commands-file.json ] [-r] file.cc"
|
|
||||||
echo "Runs the IWYU and fix-include on a CC file and its associated .h file"
|
|
||||||
echo "Arguments:"
|
|
||||||
echo " -c compile-commands: Compiler command file"
|
|
||||||
echo " -r : Remove non-required includes from .h file"
|
|
||||||
echo " -d <n> : Set debug level to <n>"
|
|
||||||
echo " -h : Print this help message"
|
|
||||||
echo "(default command file: out/Default/compile_commands.json - this"
|
|
||||||
echo "will be generated if not present"
|
|
||||||
}
|
|
||||||
|
|
||||||
while getopts 'c:d:rh' opts; do
|
|
||||||
case "${opts}" in
|
|
||||||
c) COMPILE_COMMANDS="${OPTARG}" ;;
|
|
||||||
r) FIX_INCLUDE_ARGS="${FIX_INCLUDE_ARGS} --nosafe_headers" ;;
|
|
||||||
d) DEBUG=${OPTARG};if [ $DEBUG -gt 0 ]; then set -x; fi ;;
|
|
||||||
h) usage; exit 1 ;;
|
|
||||||
*) error "Unexpected option ${opts}" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift $(expr $OPTIND - 1 )
|
|
||||||
|
|
||||||
if [[ -z "$COMPILE_COMMANDS" ]]; then
|
|
||||||
if [ -d "out/Default" ]; then
|
|
||||||
if [ ! -f "out/Default/compile_commands.json" ]; then
|
|
||||||
gn gen --export-compile-commands out/Default
|
|
||||||
fi
|
|
||||||
COMPILE_COMMANDS="out/Default/compile_commands.json"
|
|
||||||
else
|
|
||||||
error "compile_commands.json must be passed."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
FILE="$1"
|
|
||||||
|
|
||||||
if [ ! -f $FILE_CC ]; then
|
|
||||||
error "File $FILE is not found"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Find the .h file that IWYU will modify, if any.
|
|
||||||
FILE_CC=$FILE
|
|
||||||
if [ -f $(dirname $FILE)/$(basename -s .cc $FILE).h ]; then
|
|
||||||
FILE_H=$(dirname $FILE)/$(basename -s .cc $FILE).h
|
|
||||||
else
|
|
||||||
FILE_H=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
tmpfile=$(realpath $(mktemp iwyu.XXXXXXX))
|
|
||||||
trap 'rm -f -- "${tmpfile}"' EXIT
|
|
||||||
|
|
||||||
# IWYU has a confusing set of exit codes. Discard it.
|
|
||||||
"$IWYU_TOOL" -p "$COMPILE_COMMANDS" "$FILE_CC" -- -Xiwyu --no_fwd_decls \
|
|
||||||
-Xiwyu --mapping_file=../../$IWYU_TOOL_DIR/mappings.imp \
|
|
||||||
>& ${tmpfile} || echo "IWYU done, code $?"
|
|
||||||
|
|
||||||
if grep 'fatal error' ${tmpfile}; then
|
|
||||||
echo "iwyu run failed"
|
|
||||||
cat ${tmpfile}
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
if [ $DEBUG -gt 1 ]; then
|
|
||||||
cat ${tmpfile}
|
|
||||||
fi
|
|
||||||
# In compile_commands.json, the file name is recorded
|
|
||||||
# as a relative path to the build directory.
|
|
||||||
pushd "$(dirname "$COMPILE_COMMANDS")" || error "pushd failed"
|
|
||||||
"$FIX_INCLUDE" $FIX_INCLUDE_ARGS < ${tmpfile} || echo "Some files modified"
|
|
||||||
popd
|
|
||||||
fi
|
|
||||||
|
|
||||||
grep -v -f tools_webrtc/iwyu/iwyu-filter-list $FILE_CC > $FILE_CC.new
|
|
||||||
mv $FILE_CC.new $FILE_CC
|
|
||||||
|
|
||||||
if [ -n "$FILE_H" ]; then
|
|
||||||
grep -v -f tools_webrtc/iwyu/iwyu-filter-list $FILE_H > $FILE_H.new
|
|
||||||
mv $FILE_H.new $FILE_H
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Finished. Check diff, compile and git cl format before uploading."
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
#
|
|
||||||
# Mappings file for IWYU in webrtc
|
|
||||||
#
|
|
||||||
# Documentation of syntax:
|
|
||||||
# https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUMappings.md
|
|
||||||
#
|
|
||||||
# Remember that it needs include strings INCLUDING <> or "" inside the quotes.
|
|
||||||
#
|
|
||||||
[
|
|
||||||
# Redirect to have gmock and gtest includes under our control
|
|
||||||
{ include: ['"gmock/gmock.h"', "private", '"test/gmock.h"', "public"] },
|
|
||||||
{ include: ['"gtest/gtest.h"', "private", '"test/gtest.h"', "public"] },
|
|
||||||
|
|
||||||
# rtc_base/containers internal defs
|
|
||||||
{ include: ['"rtc_base/containers/flat_tree.h"', "private", '"rtc_base/containers/flat_set.h"', "public"] },
|
|
||||||
|
|
||||||
# Revectoring of JSON
|
|
||||||
{ include: ['"json/reader.h"', "private", '"rtc_base/strings/json.h"', "public"] },
|
|
||||||
{ include: ['"json/value.h"', "private", '"rtc_base/strings/json.h"', "public"] },
|
|
||||||
|
|
||||||
# LIBSRTP overrides
|
|
||||||
{ include: ['"rdbx.h"', "private", '"third_party/libsrtp/include/srtp_priv.h"', "public"] },
|
|
||||||
|
|
||||||
# pthread internals
|
|
||||||
{ include: ['<bits/pthread_types.h>', "private", '<pthread.h>', "public"] },
|
|
||||||
|
|
||||||
# Needed to agree with presubmit tests for includes (and not include <iosfwd>)
|
|
||||||
{ symbol: ["std::string", "public", "<string>", "public"] },
|
|
||||||
{ symbol: ["std::move", "public", "<utility>", "public"] },
|
|
||||||
{ symbol: ["std::make_unique", "public", "<memory>", "public"] },
|
|
||||||
{ symbol: ["std::unique_ptr", "public", "<memory>", "public"] },
|
|
||||||
# Needed to avoid <iosfwd>
|
|
||||||
{ symbol: ["std::ostringstream", "public", "<sstream>", "public"] },
|
|
||||||
|
|
||||||
{ ref: "../../third_party/libc++/src/include/libcxx.imp" },
|
|
||||||
]
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user