summarylogtreecommitdiffstats
path: root/checkrebuild
diff options
context:
space:
mode:
Diffstat (limited to 'checkrebuild')
-rwxr-xr-xcheckrebuild41
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