diff options
Diffstat (limited to 'checkrebuild')
-rwxr-xr-x | checkrebuild | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/checkrebuild b/checkrebuild new file mode 100755 index 000000000000..ad5df2664764 --- /dev/null +++ b/checkrebuild @@ -0,0 +1,41 @@ +#!/bin/bash +# +# Detect broken packages that need to be rebuilt + +shopt -s nullglob +shopt -s extglob + +get_broken_ldd_pkgs() { + while IFS= read -rd: dir; do readlink -f "$dir"; done <<<"$PATH" | + sort -u | + xargs -I{} find -L "{}" -maxdepth 1 -type f -print0 | + xargs -0 readlink -f | + sort -u | + parallel --will-cite 'ldd "{}" 2>/dev/null | grep "not found" >/dev/null && pacman -Qqo "{}"' +} + +get_broken_python_pkgs() { + python_version="$(python --version | cut -d'.' -f2)" + pacman -Qqo /usr/lib/python3.!($python_version) 2>/dev/null +} + +get_broken_perl_pkgs() { + perl_version="$(perl -v | grep -Po '\d+' | head -n2 | paste -sd '.\n')" + pacman -Qqo /usr/lib/perl*/!($perl_version) 2>/dev/null +} + +get_broken_pkgs() { + { + get_broken_ldd_pkgs + get_broken_python_pkgs + get_broken_perl_pkgs + } | sort -u +} + +get_repo_pkgs() { + pacman -Sl | cut -d' ' -f1-2 +} + +join -12 <(get_repo_pkgs | sort -k2) <(get_broken_pkgs) | awk '{ print $2 "\t" $1 }' + +exit 0 |