blob: 79830c6eb26274b236923b3f93bb9a08af1c5ec5 (
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
# Maintainer: Alexander Bocken <alexander@bocken.org>
# Contributor: Posi <posi1981@gmail.com>
# Contributor: Johannes Löthberg <johannes@kyriasis.com>
# Contributor: Sergej Pupykin <pupykin.s+arch@gmail.com>
# Contributor: Timm Preetz <timm@preetz.us>
# Contributor: Michael 'manveru' Fellinger <m.fellinger@gmail.com>
# Contributor: Dave Pretty <david dot pretty at gmail dot com>
# anki -> git rev-parse --short=8 $pkgver
# ftl -> git submodule
declare -gA _tags=(
[ftl_core]="e1545f7f0ddeb617eeb1ca86e82862e552843578"
[ftl_desktop]="e0f9724f75f6248f4e74558b25c3182d4f348bce"
[anki]="8e5efc59"
)
declare -gA _caches=(
[yarn]="yarn-cache"
[cargo]="cargo-cache"
)
pkgname=anki-qt5
pkgver=24.11
pkgrel=3
pkgdesc="Helps you remember facts (like words/phrases in a foreign language) - Qt5 Build"
url="https://apps.ankiweb.net/"
license=('AGPL3')
arch=('x86_64')
provides=('anki')
conflicts=('anki' 'anki-bin' 'anki-git')
depends=(
# anki & aqt
'python>=3.9'
'python-beautifulsoup4'
'python-waitress>=2.0.0'
'python-requests'
'python-pyqt5-webengine'
# anki
'python-decorator'
'python-markdown'
'python-orjson'
'python-protobuf>=4.21'
'python-pysocks'
'python-distro'
#aqt
'python-flask-cors' # python-flask required for anki & aqt but a dependency of -cors
'python-jsonschema'
'python-send2trash'
'python-certifi'
'python-pyqt5>=5.14'
'qt5-svg'
)
makedepends=(
'rsync'
'git'
'ninja'
'cargo'
'python-installer'
'python-wheel'
'nodejs>=20'
'yarn'
'mold'
)
optdepends=(
'lame: record sound'
'mpv: play sound. prefered over mplayer'
'mplayer: play sound'
'texlive-most: render LaTex in cards'
)
changelog="$pkgname.changelog"
source=("$pkgname-$pkgver.tar.gz::https://github.com/ankitects/anki/archive/refs/tags/${pkgver}.tar.gz"
"anki-core-i18n-${_tags[ftl_core]}.tar.gz::https://github.com/ankitects/anki-core-i18n/archive/${_tags[ftl_core]}.tar.gz"
"anki-desktop-ftl-${_tags[ftl_desktop]}.tar.gz::https://github.com/ankitects/anki-desktop-ftl/archive/${_tags[ftl_desktop]}.tar.gz"
"no-update.patch"
"strip-formatter-deps.patch"
"strip-type-checking-deps.patch"
"force_qt5.patch"
"strip-python-pip-system-certs.patch"
)
sha256sums=(4c9b5d272240b76fa052760071c89d0eca5202dfd678a9464505ab99b121c868
65ea76e3e876dcf1feb9882f36ff0a1d86b9a1369fef5915eb17a5f26fd7c6fe
a0893a459a4c5fc3a8235d9b19d5f6ce868070aa12b604e2cc523e3db4224c09
cc546f4e5af642af89f82be0375800c2721dd904c0a212cf46f6459495b75bff
9858fefa254812980d252b29fc6f32bd19bb83ee7e5a96d72c707626ed5193a7
198bc2ec14439e3ba41a03c4823f07df4b0c559c1dcbdaf678416ed12a720c2e
fa48c31549fd5327ae1099a60ee88b64ceb9f8929c0e5de016bc3fb8b2c74185
2506cf9d5b0c47a2c519ec4bb0ef87e7921dca8db5cae39b0dae265d01e253b3
)
prepare() {
cd "anki-$pkgver"
patch -p1 < "$srcdir/force_qt5.patch"
patch -p1 < "$srcdir/no-update.patch"
patch -p1 < "$srcdir/strip-formatter-deps.patch"
patch -p1 < "$srcdir/strip-type-checking-deps.patch"
patch -p1 < "$srcdir/strip-python-pip-system-certs.patch"
sed -i 's/opt-level = 1$/opt-level= 3/' Cargo.toml # optimize more
sed -i 's/channel = "[0-9\.]*"$/channel = "stable"/' rust-toolchain.toml # use most recent stable rust toolchain
# Build process wants .git/HEAD to be present. Workaround to be able to use tarballs
mkdir -p out .git
touch .git/HEAD
echo "${_tags[anki]}" > out/buildhash # manually write the buildhash into out/buildhash to avoid git dependency in build
# place translations in build dir
rm -r ftl/core-repo ftl/qt-repo
ln -sT "${srcdir}"/anki-core-i18n-${_tags[ftl_core]} ftl/core-repo
ln -sT "${srcdir}"/anki-desktop-ftl-${_tags[ftl_desktop]} ftl/qt-repo
#force update for 'rustup' package users (not necesarry for 'rust' package users)
pacman -Qo $(which cargo) | grep -q rustup && rustup update
# fetch rust packages
export CARGO_HOME="$srcdir/${_caches[cargo]}" # do not litter in ~
cargo fetch --locked --target "$CARCH-unknown-linux-gnu"
# fetch node packages already in prepare()
export YARN_CACHE_FOLDER="$srcdir/${_caches[yarn]}" # do not litter in ~
yarn install --immutable --modules-folder out/node_modules --ignore-scripts
ln -sf out/node_modules ./
# mask pip-sync as we provide dependencies ourselves
local venv="out/pyenv"
python -m venv --system-site-packages --without-pip "$venv"
printf '#!/bin/bash\nexit 0' > "$venv/bin/pip-sync"
chmod +x "$venv/bin/pip-sync"
}
build() {
cd "anki-$pkgver"
export YARN_CACHE_FOLDER="$srcdir/${_caches[yarn]}" # do not litter in ~
#use local binaries instead of downloading them
export PYTHON_BINARY=$(which python)
export PROTOC_BINARY=$(which protoc)
export NODE_BINARY=$(which node)
export YARN_BINARY=$(which yarn)
export CARGO_HOME="$srcdir/${_caches[cargo]}" # do not litter in ~
export RELEASE=2 # anki-internal variable for optimization
export OFFLINE_BUILD=1 # do not download anything, disables git checks
# use fat LTO objects, allows for LTO, needed for rust crate "ring"
# See https://gitlab.archlinux.org/archlinux/packaging/packages/pacman/-/issues/20 and https://github.com/briansmith/ring/issues/1444
# export CFLAGS+=' -ffat-lto-objects'
# ./ninja wheels -v
mold -run ./ninja wheels -v
}
package() {
cd "anki-$pkgver"
for file in out/wheels/*.whl; do
python -m installer --destdir="$pkgdir" $file
done
install -Dm644 qt/bundle/lin/anki.desktop "$pkgdir"/usr/share/applications/anki.desktop
install -Dm644 qt/bundle/lin/anki.png "$pkgdir"/usr/share/pixmaps/anki.png
}
|