1dcb32c4bSMarcel Cornu#!/usr/bin/env bash 2dcb32c4bSMarcel Cornu 3dcb32c4bSMarcel Cornuverbose=0 4dcb32c4bSMarcel Cornuclang_format_min_version=18 5dcb32c4bSMarcel Cornu 6dcb32c4bSMarcel Cornufunction clang_format_version() { 7dcb32c4bSMarcel Cornu version_str=$($clang_format --version) 8dcb32c4bSMarcel Cornu regex="[0-9]+" 9dcb32c4bSMarcel Cornu if [[ $version_str =~ $regex ]]; then 10dcb32c4bSMarcel Cornu major_version="${BASH_REMATCH[0]}" 11dcb32c4bSMarcel Cornu echo $major_version 12dcb32c4bSMarcel Cornu fi 13dcb32c4bSMarcel Cornu} 14dcb32c4bSMarcel Cornu 15dcb32c4bSMarcel Cornu# set clang-format binary if not set externally 16dcb32c4bSMarcel Cornuif [[ -z $CLANGFORMAT ]]; then 17dcb32c4bSMarcel Cornu clang_format="clang-format" 18dcb32c4bSMarcel Cornuelse 19dcb32c4bSMarcel Cornu clang_format=$CLANGFORMAT 20dcb32c4bSMarcel Cornufi 21dcb32c4bSMarcel Cornu 22dcb32c4bSMarcel Cornuwhile [ -n "$*" ]; do 23dcb32c4bSMarcel Cornu case "$1" in 24dcb32c4bSMarcel Cornu -v ) 25dcb32c4bSMarcel Cornu verbose=1 26dcb32c4bSMarcel Cornu shift 27dcb32c4bSMarcel Cornu ;; 28dcb32c4bSMarcel Cornu -h ) 29dcb32c4bSMarcel Cornu echo format.sh [-h -v] 30dcb32c4bSMarcel Cornu exit 0 31dcb32c4bSMarcel Cornu ;; 32dcb32c4bSMarcel Cornu esac 33dcb32c4bSMarcel Cornudone 34dcb32c4bSMarcel Cornu 35dcb32c4bSMarcel Cornuif [ $(clang_format_version) -ge $clang_format_min_version ]; then 36dcb32c4bSMarcel Cornu echo "Formatting files using clang-format v$(clang_format_version)..." 37dcb32c4bSMarcel Cornu for f in `git ls-files '*.[c|h]'`; do 38dcb32c4bSMarcel Cornu [ "$verbose" -gt 0 ] && echo "formatting $f" 39*f36388d4SMarcel Cornu $clang_format -style=file -i "$f" & 40dcb32c4bSMarcel Cornu done 41dcb32c4bSMarcel Cornuelse 42dcb32c4bSMarcel Cornu echo "clang-format version ${clang_format_min_version}+ is required!" 43dcb32c4bSMarcel Cornufi 44*f36388d4SMarcel Cornu 45*f36388d4SMarcel Cornu# wait for background processes to finish 46*f36388d4SMarcel Cornuwait 47