summarylogtreecommitdiffstats
path: root/checkrebuild
blob: ad5df2664764ffc94dae1a374f96dd1ee300e826 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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