| Andrew Jeffery | 6bfc65c | 2024-06-21 06:03:21 +0000 | [diff] [blame] | 1 | #!/usr/bin/bash | 
|  | 2 |  | 
|  | 3 | set -eou pipefail | 
|  | 4 |  | 
|  | 5 | # Path to the meson build directory | 
|  | 6 | : "${BUILD:=build}" | 
|  | 7 |  | 
|  | 8 | ABSPATH="$(command -v "$0" | xargs realpath)" | 
|  | 9 |  | 
|  | 10 | # Deal with relative paths | 
|  | 11 | : "${LIBPLDM_ROOT:="${ABSPATH%scripts/apply-renames}"}" | 
|  | 12 |  | 
|  | 13 | # Deal with clang including its version in all the tool names | 
|  | 14 | : "${CLANG_VERSION:=17}" | 
|  | 15 | : "${CLANG_RENAME:="$(command -v clang-rename-"${CLANG_VERSION}")"}" | 
|  | 16 | : "${CLANG_APPLY_REPLACEMENTS:="$(command -v clang-apply-replacements-"${CLANG_VERSION}")"}" | 
|  | 17 |  | 
|  | 18 | # Make it parallel | 
|  | 19 | : "${JOBS:="$(nproc)"}" | 
|  | 20 |  | 
|  | 21 | # Allow clang-rename to pick up the per-file flags from the compile command | 
|  | 22 | # database | 
|  | 23 | : "${CRFLAGS:="-p=."}" | 
|  | 24 |  | 
|  | 25 | CRINPUT=$(realpath --relative-to "$BUILD" "$1") | 
|  | 26 |  | 
|  | 27 | # Deal with clang-rename segfaulting when file paths from the compile command | 
|  | 28 | # database don't resolve properly | 
|  | 29 | cd "$BUILD" | 
|  | 30 |  | 
|  | 31 | # We export the fixes to yaml files so we can apply them all in one hit later | 
|  | 32 | trap "rm -f fixes.*.yaml" EXIT | 
|  | 33 |  | 
|  | 34 | # See `man 7 gitglossary` for some explanation of the pathspec provided to `git | 
|  | 35 | # ls-files`, which, separately, is also subject to bash's brace expansion. See | 
|  | 36 | # "Brace Expansion" in `man bash`. | 
|  | 37 | # shellcheck disable=SC2016 | 
|  | 38 | git ls-files -- ':/:*.[ch]'{,pp} | | 
|  | 39 | xargs -I '{}' -n 1 -P "$JOBS" -- \ | 
|  | 40 | bash -c '"$0" --force --input="$1" --export-fixes="$(mktemp fixes.XXXXX.yaml)" "$2" "$3"' \ | 
|  | 41 | "$CLANG_RENAME" "$CRINPUT" "$CRFLAGS" '{}' | 
|  | 42 |  | 
|  | 43 | # Now apply the generated fixes | 
|  | 44 | "$CLANG_APPLY_REPLACEMENTS" .. | 
|  | 45 |  | 
|  | 46 | # Deal with subsequent runs of clang-rename bailing out because it's modified | 
|  | 47 | # the symbol declaration in the headers, and then is surprised by the lack of a | 
|  | 48 | # declaration for the as-yet un-renamed symbol in the implementation | 
|  | 49 | git -C "$LIBPLDM_ROOT" restore -- include |