123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #!/bin/bash
- #
- # Copyright 2020 Mobvoi Inc. (authors: Fangjun Kuang)
- #
- # 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.
- #
- # Usage:
- #
- # (1) To check files of the last commit
- # ./scripts/check_style_cpplint.sh
- #
- # (2) To check changed files not committed yet
- # ./scripts/check_style_cpplint.sh 1
- #
- # (3) To check all files in the project
- # ./scripts/check_style_cpplint.sh 2
- cpplint_version="1.5.4"
- cur_dir=$(cd $(dirname $BASH_SOURCE) && pwd)
- sherpa_ncnn_dir=$(cd $cur_dir/.. && pwd)
- build_dir=$sherpa_ncnn_dir/build
- mkdir -p $build_dir
- cpplint_src=$build_dir/cpplint-${cpplint_version}/cpplint.py
- if [ ! -d "$build_dir/cpplint-${cpplint_version}" ]; then
- pushd $build_dir
- if command -v wget &> /dev/null; then
- wget https://github.com/cpplint/cpplint/archive/${cpplint_version}.tar.gz
- elif command -v curl &> /dev/null; then
- curl -O -SL https://github.com/cpplint/cpplint/archive/${cpplint_version}.tar.gz
- else
- echo "Please install wget or curl to download cpplint"
- exit 1
- fi
- tar xf ${cpplint_version}.tar.gz
- rm ${cpplint_version}.tar.gz
- # cpplint will report the following error for: __host__ __device__ (
- #
- # Extra space before ( in function call [whitespace/parens] [4]
- #
- # the following patch disables the above error
- sed -i "3490i\ not Search(r'__host__ __device__\\\s+\\\(', fncall) and" $cpplint_src
- popd
- fi
- source $sherpa_ncnn_dir/scripts/utils.sh
- # return true if the given file is a c++ source file
- # return false otherwise
- function is_source_code_file() {
- case "$1" in
- *.cc|*.h|*.cu)
- echo true;;
- *)
- echo false;;
- esac
- }
- function check_style() {
- python3 $cpplint_src $1 || abort $1
- }
- function check_last_commit() {
- files=$(git diff HEAD^1 --name-only --diff-filter=ACDMRUXB)
- echo $files
- }
- function check_current_dir() {
- files=$(git status -s -uno --porcelain | awk '{
- if (NF == 4) {
- # a file has been renamed
- print $NF
- } else {
- print $2
- }}')
- echo $files
- }
- function do_check() {
- case "$1" in
- 1)
- echo "Check changed files"
- files=$(check_current_dir)
- ;;
- 2)
- echo "Check all files"
- files=$(find $sherpa_ncnn_dir/sherpa-ncnn -name "*.h" -o -name "*.cc")
- ;;
- *)
- echo "Check last commit"
- files=$(check_last_commit)
- ;;
- esac
- for f in $files; do
- need_check=$(is_source_code_file $f)
- if $need_check; then
- [[ -f $f ]] && check_style $f
- fi
- done
- }
- function main() {
- do_check $1
- ok "Great! Style check passed!"
- }
- cd $sherpa_ncnn_dir
- main $1
|