#!/usr/bin/env bash update_alternatives() { local version=${1} local priority=${2} local master=${3} local slaves=${4} local path=${5} local cmdln slave_tgt cmdln="--verbose --install ${path}${master} ${master} ${path}${master}-${version} ${priority}" for slave in ${slaves}; do if [[ "$slave" = *.py ]]; then slave_tgt="${slave%.py}-${version}.py" else slave_tgt="${slave}-${version}" fi cmdln="${cmdln} --slave ${path}${slave} ${slave} ${path}${slave_tgt}" done sudo update-alternatives ${cmdln} } if [[ ${#} -ne 2 ]]; then echo usage: "${0}" clang_version priority exit 1 fi version=${1} priority=${2} path="/usr/bin/" master="llvm-config" slaves="ld.lld ld64.lld llc lld lld-link lldb lldb-argdumper lldb-dap lldb-instr lldb-server lldb-vscode lli lli-child-target llvm-addr2line llvm-ar llvm-as llvm-bcanalyzer llvm-bitcode-strip llvm-boltdiff llvm-c-test llvm-cat llvm-cfi-verify llvm-cov llvm-cvtres llvm-cxxdump llvm-cxxfilt llvm-cxxmap llvm-debuginfo-analyzer llvm-debuginfod llvm-debuginfod-find llvm-diff llvm-dis llvm-dlltool llvm-dwarfdump llvm-dwarfutil llvm-dwp llvm-exegesis llvm-extract llvm-gsymutil llvm-ifs llvm-install-name-tool llvm-jitlink llvm-jitlink-executor llvm-lib llvm-libtool-darwin llvm-link llvm-lipo llvm-lto llvm-lto2 llvm-mc llvm-mca llvm-ml llvm-modextract llvm-mt llvm-nm llvm-objcopy llvm-objdump llvm-omp-device-info llvm-omp-kernel-replay llvm-opt-report llvm-otool llvm-pdbutil llvm-PerfectShuffle llvm-profdata llvm-profgen llvm-ranlib llvm-rc llvm-readelf llvm-readobj llvm-readtapi llvm-reduce llvm-remark-size-diff llvm-remarkutil llvm-rtdyld llvm-sim llvm-size llvm-split llvm-stress llvm-strings llvm-strip llvm-symbolizer llvm-tapi-diff llvm-tblgen llvm-tli-checker llvm-undname llvm-windres llvm-xray" update_alternatives "${version}" "${priority}" "${master}" "${slaves}" "${path}" master="clang" slaves="amdgpu-arch analyze-build asan_symbolize bbc bugpoint c-index-test clang-apply-replacements clang-change-namespace clang-check clang-cl clang-cpp clang-doc clang-extdef-mapping clang-format clang-format-diff clang-include-cleaner clang-include-fixer clang-installapi clang-linker-wrapper clang-move clang-nvlink-wrapper clang-offload-bundler clang-offload-packager clang-offload-wrapper clang-pseudo clang-query clang-refactor clang-rename clang-reorder-fields clang-repl clang-scan-deps clang-tblgen clang-tidy clang-tidy-diff.py clang++ clangd count diagtool dsymutil f18-parse-demo FileCheck find-all-symbols fir-opt git-clang-format hmaptool hwasan_symbolize intercept-build merge-fdata mlir-cat mlir-cpu-runner mlir-linalg-ods-yaml-gen mlir-lsp-server mlir-minimal-opt mlir-minimal-opt-canonicalize mlir-opt mlir-pdll mlir-pdll-lsp-server mlir-query mlir-reduce mlir-transform-opt mlir-translate modularize not nvptx-arch obj2yaml opt perf2bolt pp-trace reduce-chunk-list run-clang-tidy run-clang-tidy.py sancov sanstats scan-build scan-build-py scan-view split-file tblgen-lsp-server tblgen-to-irdl tco UnicodeNameMappingGenerator verify-uselistorder wasm-ld yaml-bench yaml2obj" update_alternatives "${version}" "${priority}" "${master}" "${slaves}" "${path}"