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