summaryrefslogtreecommitdiff
path: root/pin-dependencies.PKGBUILDpatch
blob: a06c768e05efcb790f6679c1879c870cbf854248 (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
67
68
69
70
71
72
73
74
75
76
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
    ) <(
      printf '%s\n' "${_pinned_dependencies[@]}" \
      | sed 's/=.*$//' \
      | 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
  depends+=(
    $(
      [ "${CARCH}" = 'x86_64' ] && _suffix='-64' || _suffix='-32'
      printf '%s\n' "${_pinned_dependencies[@]}" \
      | sed '
        /\.so=/ s/$/'"${_suffix}"'/
      '
    )
  )
fi