Note: apply-iwyu on a lone .h file *will* fail due to c++/c confusion. Bug: none Change-Id: I3dda0df28cd4ec85ecb895efed1b04c3d70343bb Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/212680 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/master@{#33525}
75 lines
2.0 KiB
Bash
Executable File
75 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# 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 from .cc
|
|
# that are also in the .h file, or are problematic to include.
|
|
#
|
|
# To get iwyu on Debian/glinux, do "sudo apt-get install iwyu".
|
|
|
|
set -e
|
|
set -x
|
|
FILE=$1
|
|
# If you want to exclude files that are in $FILE.h from $FILE.cc, set
|
|
# the following variable to "yes". This is a style guide violation.
|
|
REMOVE_CC_INCLUDES=no
|
|
|
|
if [ ! -f $FILE ]; then
|
|
# See if we have the root name of a .cc/.h pair
|
|
if [ ! -f $FILE.h ]; then
|
|
echo "$FILE.h not found"
|
|
exit 1
|
|
fi
|
|
FILE_H=$FILE.h
|
|
if [ ! -f $FILE.cc ]; then
|
|
echo "$FILE.cc not found"
|
|
exit 1
|
|
fi
|
|
FILE_CC=$FILE.cc
|
|
else
|
|
# Exact file, no .h file
|
|
FILE_CC=$FILE
|
|
FILE_H=""
|
|
fi
|
|
|
|
# IWYU has a confusing set of exit codes. Discard it.
|
|
iwyu -Xiwyu --no_fwd_decls -D__X86_64__ -DWEBRTC_POSIX -I . \
|
|
-I third_party/abseil-cpp \
|
|
-I third_party/googletest/src/googlemock/include \
|
|
-I third_party/googletest/src/googletest/include \
|
|
$FILE_CC >& /tmp/includefixes$$ || echo "IWYU done, code $?"
|
|
|
|
if grep 'fatal error' /tmp/includefixes$$; then
|
|
echo "iwyu run failed"
|
|
cat /tmp/includefixes$$
|
|
rm /tmp/includefixes$$
|
|
exit 1
|
|
else
|
|
fix_include < /tmp/includefixes$$ || echo "Some files modified"
|
|
rm /tmp/includefixes$$
|
|
fi
|
|
|
|
if [ $REMOVE_CC_INCLUDES == "yes" ]; then
|
|
if [ -n "$FILE_H" ]; then
|
|
# Don't include in .cc what's already included in .h
|
|
grep ^#include $FILE_H | grep -v -f - $FILE_CC > $FILE_CC.new
|
|
else
|
|
cp $FILE_CC $FILE_CC.new
|
|
fi
|
|
# Don't include stuff on the banlist
|
|
grep -v -f tools_webrtc/iwyu/iwyu-filter-list $FILE_CC.new > $FILE_CC
|
|
rm $FILE.ccnew
|
|
else
|
|
grep -v -f tools_webrtc/iwyu/iwyu-filter-list $FILE_CC > $FILE_CC.new
|
|
mv $FILE_CC.new $FILE_CC
|
|
fi
|
|
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."
|
|
|
|
|