You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
3.3 KiB
133 lines
3.3 KiB
#!/bin/bash
|
|
#
|
|
# Copyright (C) 2018 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
function _log()
|
|
{
|
|
echo -e "$*" >&2
|
|
}
|
|
|
|
function _eval()
|
|
{
|
|
local label="$1"
|
|
local cmd="$2"
|
|
local red="\e[31m"
|
|
local green="\e[32m"
|
|
local reset="\e[0m"
|
|
local output
|
|
|
|
_log "${green}[ RUN ]${reset} ${label}"
|
|
output="$(eval "$cmd" 2>&1)"
|
|
if [[ $? -eq 0 ]]; then
|
|
_log "${green}[ OK ]${reset} ${label}"
|
|
return 0
|
|
else
|
|
echo "${output}"
|
|
_log "${red}[ FAILED ]${reset} ${label}"
|
|
errors=$((errors + 1))
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
function _clang_format()
|
|
{
|
|
local path
|
|
local errors=0
|
|
|
|
for path in $cpp_files; do
|
|
local output="$(clang-format -style=file "$path" | diff $path -)"
|
|
if [[ "$output" ]]; then
|
|
echo "$path"
|
|
echo "$output"
|
|
errors=1
|
|
fi
|
|
done
|
|
return $errors
|
|
}
|
|
|
|
function _bpfmt()
|
|
{
|
|
local output="$(bpfmt -d $bp_files)"
|
|
if [[ "$output" ]]; then
|
|
echo "$output"
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
function _cpplint()
|
|
{
|
|
local cpplint="${ANDROID_BUILD_TOP}/tools/repohooks/tools/cpplint.py"
|
|
local output="$($cpplint --quiet $cpp_files 2>&1 >/dev/null | grep -v \
|
|
-e 'Found C system header after C++ system header.' \
|
|
-e 'Unknown NOLINT error category: cert-dcl50-cpp' \
|
|
-e 'Unknown NOLINT error category: misc-non-private-member-variables-in-classes' \
|
|
-e 'Unknown NOLINT error category: performance-unnecessary-copy-initialization' \
|
|
)"
|
|
if [[ "$output" ]]; then
|
|
echo "$output"
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
function _parse_args()
|
|
{
|
|
local opts
|
|
|
|
opts="$(getopt -o cfh --long check,fix,help -- "$@")"
|
|
if [[ $? -ne 0 ]]; then
|
|
exit 1
|
|
fi
|
|
eval set -- "$opts"
|
|
while true; do
|
|
case "$1" in
|
|
-c|--check) opt_mode="check"; shift ;;
|
|
-f|--fix) opt_mode="fix"; shift ;;
|
|
-h|--help) opt_mode="help"; shift ;;
|
|
*) break ;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
errors=0
|
|
script="$(readlink -f "$BASH_SOURCE")"
|
|
prefix="$(dirname "$script")"
|
|
cpp_files="$(find "$prefix" -name '*.cpp' -or -name '*.h')"
|
|
bp_files="$(find "$prefix" -name 'Android.bp')"
|
|
opt_mode="check"
|
|
|
|
_parse_args "$@"
|
|
if [[ $opt_mode == "check" ]]; then
|
|
_eval "clang-format" "_clang_format"
|
|
_eval "bpfmt" "_bpfmt"
|
|
_eval "cpplint" "_cpplint"
|
|
exit $errors
|
|
elif [[ $opt_mode == "fix" ]]; then
|
|
clang-format -style=file -i $cpp_files
|
|
bpfmt -w $bp_files
|
|
exit 0
|
|
elif [[ $opt_mode == "help" ]]; then
|
|
echo "Run static analysis tools such as clang-format and cpplint on the idmap2"
|
|
echo "module. Optionally fix some of the issues found (--fix). Intended to be run"
|
|
echo "before merging any changes."
|
|
echo
|
|
echo "usage: $(basename $script) [--check|--fix|--help]"
|
|
exit 0
|
|
else
|
|
exit 1
|
|
fi
|