#!/usr/bin/env bash
#
# Run the include-cleaner tool (iwyu replacement) on a file in the webrtc source
# directory.
#
#
# 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 include-cleaner:
# - in google3: define an alias and/or point to it below
# - in debian distros: sudo apt install clang-tools-17 (or later, and fix below)
# Ignore errors of the type "this argument doesn't exist".

CLEANER=/usr/bin/clang-include-cleaner-17

# 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
}

WORKDIR=out/Default

usage() {
  echo "Usage: $0 [ -c compile-commands-file.json ] [-r] file.cc"
  echo "Runs the include-cleaner tool on a file"
  echo "Arguments:"
  echo " -n : just print changes, don't do them"
  echo " -r : Remove non-required includes from .h file"
  echo " -d <n> : Set debug level to <n>"
  echo " -h : Print this help message"
}

COMMAND=" --edit"
INCLUDE_ARGS=""

while getopts 'd:rnh' opts; do
  case "${opts}" in
    n) COMMAND=" --print=changes" ;;
    r) INCLUDE_ARGS=" --remove" ;;
    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 "$WORKDIR" ]; then
    if [ ! -f "$WORKDIR/compile_commands.json" ]; then
      echo "Generating compile commands file"
      gn gen --export-compile-commands $WORKDIR
    fi
    COMPILE_COMMANDS="$WORKDIR/compile_commands.json"
  else
    error "Could not generate $WORKDIR/compile_commands.json."
  fi
fi

FILE="$1"

if [ ! -f $FILE ]; then
  error "File $FILE is not found"
fi

cd $WORKDIR
$CLEANER $INCLUDE_ARGS $COMMAND ../../$FILE

echo "Finished. Check diff, compile, gn gen --check and git cl format"
echo "before uploading."
