summaryrefslogtreecommitdiff
path: root/pin-dependencies.PKGBUILDpatch
blob: d05e54436e123a4133c107a2c78531f90aa791a0 (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
77
78
79
80
81
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+=(
    $(
      printf '%s\n' "${_pinned_dependencies[@]}" \
      | if [ "${CARCH}" != 'x86_64' ]; then
        sed '
          /\.so=/ {
            s/-64$/-32/
          }
        '
      else
        cat
      fi
    )
  )
fi