blob: d4cc52f40c19d847cabe6dc9f928bf618e2183cc (
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
160
161
162
163
164
165
166
|
# 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]="0fe0162f4a18e8ef2fbac1d9a33af8e38cf7260e"
[ftl_desktop]="17216b03db7249600542e388bd4ea124478400e5"
[anki]="0d6788d5"
)
declare -gA _caches=(
[yarn]="yarn-cache"
[cargo]="cargo-cache"
)
pkgname=anki-qt5
pkgver=25.02
pkgrel=1
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=(dc6dfc859c871d360e17aa955478a9547ef90ce77192f9b48f6408936f361191
da57df3665ee094aa7d3566cd45a126f95b6cffef662a4c6f1959ea9e5b3f135
041684b0e23d041d4f7a0c21785371e3344c6b67824b1683318e3e70f08523bc
cc546f4e5af642af89f82be0375800c2721dd904c0a212cf46f6459495b75bff
9858fefa254812980d252b29fc6f32bd19bb83ee7e5a96d72c707626ed5193a7
198bc2ec14439e3ba41a03c4823f07df4b0c559c1dcbdaf678416ed12a720c2e
fa48c31549fd5327ae1099a60ee88b64ceb9f8929c0e5de016bc3fb8b2c74185
2506cf9d5b0c47a2c519ec4bb0ef87e7921dca8db5cae39b0dae265d01e253b3
)
prepare() {
cd "anki-$pkgver"
# program patches
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"
# Remove any corepack references to build with normal system yarn
rm -f yarn.lock
sed -i 's/"type": "module",/"type": "module"/' package.json
sed -i '/packageManager/d' package.json
sed -i 's/"corepack enable yarn"/"true"/' ./build/ninja_gen/src/node.rs
# 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
}
|