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