summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: c7c666bf827bb433dea33ba3911de3ef073c7a8b (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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# Maintainer: everyx <lunt.luo#gmail.com>

_pkgbase=rime-ice
_schemas=(rime_ice double_pinyin double_pinyin_flypy double_pinyin_mspy double_pinyin_ziguang double_pinyin_abc)
_pkgname=$_pkgbase
pkgname=$_pkgname-git
pkgver=r326.10864f9
pkgrel=1
pkgdesc="Rime 配置:雾凇拼音 | 长期维护的简体词库"
arch=("any")
url="https://github.com/iDvel/rime-ice"
license=("GPL3")
makedepends=("git" "librime" "rime-prelude" "coreutils" "grep" "sed")
provides=("${_pkgname}")
conflicts=(
  "rime-emoji"
  "${_pkgname}"
  "${_pkgbase}-pinyin"
  "${_pkgbase}-double-pinyin"
  "${_pkgbase}-double-pinyin-flypy"
  "${_pkgbase}-double-pinyin-mspy"
  "${_pkgbase}-double-pinyin-ziguang"
  "${_pkgbase}-double-pinyin-abc"
)
source=("${_pkgname}::git+${url}.git")
sha512sums=("SKIP")

pkgver() {
  cd "${_pkgname}" &&
    printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}

_suggestion=${_pkgbase//-/_}_suggestion.yaml

prepare() {
  cd "${_pkgname}" &&
    mv ./default.yaml "./${_suggestion}" &&
    # Link essentials.
    for _f in $(pacman -Qql rime-prelude | grep -v "/$"); do ln -sf "$_f" .; done
}

build() {
  cd "${_pkgname}" || return

  _schemas_deps=()
  for _s in "${_schemas[@]}"; do
    _deps=()
    mapfile -t _deps <<< "$(sed -n '/dependencies:/,/^$/ {/dependencies:/d; /^$/d; s/.*- *//g; s/ *#.*//g; p }' "$_s.schema.yaml")"
    _schemas_deps=("${_schemas_deps[@]}" "${_deps[@]}")
  done

  mapfile -t _schemas_deps <<< "$(printf "%s\n" "${_schemas_deps[@]}" | sort -u)"
  # build current schema and it's depends only, sort by length
  _compile_schemas=("${_schemas_deps[@]}" "${_schemas[@]}")

  for _s in "${_compile_schemas[@]}"; do rime_deployer --compile "$_s.schema.yaml"; done

  # comment ignore schemas
  _suggestion_schemas=$(sed -n '/^schema_list:/,/^$/ {/^schema_list:/d; /^\s*#.*$/d; /^$/d; s/.*schema:\s*//g; s/\s*#.*//g; p }' "$_suggestion")

  for _s in $_suggestion_schemas; do
    if [[ ! ${_schemas[*]} =~ (^|[[:space:]])"$_s"($|[[:space:]]) ]]; then
      sed -i "s/^\s*- schema: $_s .*\$/#&/" "$_suggestion";
    fi
  done

  find . -type l -delete
}

package() {
  cd "${_pkgname}" || return

  _install_base="$pkgdir/usr/share/rime-data"

  install -Dm644 "$_suggestion"       -t "$_install_base/"
  install -Dm644 ./build/*.{bin,yaml} -t "$_install_base/build"

  [ -f "./rime.lua" ] && install -Dm644 ./rime.lua -t "$_install_base/"
  find lua -type f -exec sh -c 'install -Dm644 "$1" -t '"$_install_base"'/$(dirname $1)' shell {} \;

  for _f in *.schema.yaml; do
    if [ -f "build/$_f" ]; then
      install -Dm644 "$_f" -t "$_install_base/"

      grep -q "opencc_config: emoji.json" "$_f" &&
        install -Dm644 ./opencc/* -t "$_install_base/opencc/"
    fi
  done

  for _f in *.dict.yaml; do
    if [ -f "build/${_f/.dict.yaml/}.table.bin" ]; then
      install -Dm644 "$_f" -t "$_install_base/"
    fi
  done

  for _f in */*.dict.yaml; do
    if grep -q "\- ${_f/.dict.yaml/}" "$_install_base/"*.dict.yaml; then
      install -Dm644 "$_f" -t "$_install_base/$(dirname "$_f")"
    fi
  done

  for _f in *.yaml; do
    if grep -q "${_f/.yaml/:}" build/*.schema.yaml; then
      install -Dm644 "$_f" -t "$_install_base/"
    fi
  done
}