summaryrefslogtreecommitdiff
path: root/pin-dependencies.PKGBUILDpatch
blob: 6d5d5cb65d14732ebb8e9d7d913266170df72243 (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
if printf '%s\n' "${arch[@]}" | grep -qvxF any; then
  if ! _errors=$(
    diff <(
      find "${pkgdir}" -type f -exec objdump -x {} \; 2>/dev/null \
      | sed '
        s/^\s*NEEDED\s\+\(\S\+\)\s*$/\1/
        t
        d
      ' \
      | sort -u \
      | while read -r _lib; do
        if ! _pkg=$(
          pacman -Qqo "/usr/lib/${_lib}" 2>/dev/null
        ); then
          printf '%s\n' "${_lib}"
          continue
        fi
        if pacman -Qi "${_pkg}" \
        | sed '
          :a
            $! N
            s/\n\s\+/  /
            ta
          P
          D
        ' \
        | sed -n '
          s/^Provides\s*:\s*//
          T
          y/ /\n/
          p
        ' \
        | sed -n '
          /^$/d
          s/=.*$//
          T
          /\.so$/p
        ' \
        | grep -qxF "${_lib}"; then
          printf '%s\n' "${_lib}"
        else
          printf '%s\n' "${_pkg}"
        fi
      done \
      | sed 's/[<>]\?=.*$//' \
      | sort -u
    ) <(
      eval 'printf '"'"'%s\n'"'"' "${_pinned_dependencies[@]}" "${_pinned_dependencies_'"${CARCH}"'[@]}"' \
      | sort -u
    )
  ); then
    printf 'There are discrepancies between the _pinned_dependencies and the linked libraries in %s'"'"'s %s:\n' \
      "${pkgbase:-${pkgname}}" \
      "${FUNCNAME[0]}"
    printf '%s\n' "${_errors}" \
    | sed '
      s/^</actual  /
      t
      s/^>/claimed /
      t
      d
    ' \
    | sort -k1,1
    return 1
  fi
fi