#!/bin/sh # Formatting rules are in .clang-format. # To protect a block of code from automatic formatting, enclose in # comments such as # # // clang-format off # ... # // clang-format on # Sometimes, a comment of the form `// line-break` may appear in the # code to prevent clang-format from removing an intentional line # break. # For emacs users, the file `.dir-locals.el` configures cc-mode for an # indentation style that is close to but not exactly like what # clang-format produces. clang-format is authoritative. # Please see "Code Formatting" in the manual for additional notes. # If a newer version of clang-format causes changes to the output that # are improvements, bump the minimum required version of clang-format # here, and update manual/contributing.rst. There's a comment there # that refers to this comment. See also .clang-format. min_version=18 clang_format=clang-format if clang-format-$min_version --version >/dev/null 2>&1; then clang_format=clang-format-$min_version else clang_version=$(clang-format --version | \ awk '{for (i=1; i<=NF; i++) if ($i == "version") {print int($(i+1)); exit}}') if [ "$clang_version" -lt "$min_version" ]; then echo "clang-format version >= $min_version is required" exit 2 fi fi cd $(dirname $0) for i in $(find . -name '*build*' -prune -o '(' \ -name '*.hh' -o -name '*.h' -o -name '*.cc' -o -name '*.c' \ ')' -print); do if $clang_format < $i >| $i.new; then if diff -q $i $i.new >/dev/null 2>/dev/null; then echo "okay: $i" rm $i.new else echo "updated: $i" mv $i.new $i fi fi done