Commit | Line | Data |
---|---|---|
e89902fd JG |
1 | #!/bin/bash |
2 | # | |
3 | # SPDX-License-Identifier: GPL-2.0-only | |
4 | # | |
5 | # Copyright (C) 2020-2022 Philippe Proulx <pproulx@efficios.com> | |
6 | ||
7 | expected_formatter_major_version=14 | |
8 | ||
9 | # Runs the formatter, making sure it's the expected version. | |
10 | format_cpp() { | |
11 | local formatter=$1 | |
12 | local version | |
13 | ||
14 | version=$($formatter --version) | |
15 | ||
16 | # shellcheck disable=SC2181 | |
17 | if (($? != 0)); then | |
18 | echo "Cannot execute \`$formatter --version\`." >&2 | |
19 | return 1 | |
20 | fi | |
21 | ||
22 | if [[ "$version" != *"clang-format version $expected_formatter_major_version"* ]]; then | |
23 | echo "Expecting clang-format $expected_formatter_major_version." >&2 | |
24 | echo -n Got: >&2 | |
25 | echo " \`$version\`" >&2 | |
26 | echo >&2 | |
27 | echo "Use the FORMATTER environment variable to specify the location of clang-format $expected_formatter_major_version" | |
28 | return 1 | |
29 | fi | |
30 | ||
31 | local root_dir | |
32 | ||
33 | root_dir="$(dirname "${BASH_SOURCE[0]}")" | |
34 | ||
35 | # Using xargs to fail as soon as the formatter fails (`-exec` | |
36 | # won't stop if its subprocess fails). | |
37 | # | |
38 | # shellcheck disable=SC2086 | |
39 | find "$root_dir" -path './src/vendor' -prune \ | |
40 | -o -type f \( -name '*\.h' -o -name '*\.hpp' -o -name '*\.c' -o -name '*\.cpp' \) \ | |
41 | -not -path '*/\.*' -print0 | xargs -n1 -0 $formatter -i --style=file --fallback-style=none | |
42 | } | |
43 | ||
44 | if [[ -n "$FORMATTER" ]]; then | |
45 | # Try using environment-provided formatter | |
46 | formatter=$FORMATTER | |
47 | elif command -v clang-format-$expected_formatter_major_version &> /dev/null; then | |
48 | # Try using the expected version of clang-format | |
49 | formatter="clang-format-$expected_formatter_major_version -i" | |
50 | else | |
51 | # Try using `clang-format` as is | |
52 | formatter='clang-format -i' | |
53 | fi | |
54 | ||
55 | # Try to format files | |
56 | format_cpp "$formatter" |