commit:     32f5552f1eb4870ec5935c59341b1365aa627daa
Author:     Lucio Sauer <watermanpaint <AT> posteo <DOT> net>
AuthorDate: Thu May 15 13:17:32 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed May 21 21:01:51 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=32f5552f

app-misc/anki: add 25.02.5

Signed-off-by: Lucio Sauer <watermanpaint <AT> posteo.net>
Part-of: https://github.com/gentoo/gentoo/pull/42135
Signed-off-by: Sam James <sam <AT> gentoo.org>

 app-misc/anki/Manifest            |   2 +
 app-misc/anki/anki-25.02.5.ebuild | 320 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 322 insertions(+)

diff --git a/app-misc/anki/Manifest b/app-misc/anki/Manifest
index fd5adea6f464..edc5c6442eb1 100644
--- a/app-misc/anki/Manifest
+++ b/app-misc/anki/Manifest
@@ -1,6 +1,8 @@
 DIST anki-25.02.4-crates.tar.xz 57606472 BLAKE2B 
40f976c4e20c6ecd0877db05a733bd66b608e1e054177479ec3068a5d9d8b8dcd32495a4c81caee4e37e12090bb8b000f41f7c3162e3d7b80dbe522bca797f47
 SHA512 
f382f304ead6edee5c64472945ac56fb418adf046129c45771862ff5732a1a944f84e6d80ef590f11bde2ca2058c989ed70847ebb791f101af9a3ad34285d396
 DIST anki-25.02.4-node_modules.tar.xz 304237316 BLAKE2B 
270db46a9d7d64f87a57052f82071108e78371805e68c7d426dad268edd4f548b2ace4e7f2712597f4894e7c4d20fa7a9e72e3cd2278f023317f40361bcf3a37
 SHA512 
820495a61a3bf5bdaeaf40c4ae6d1b1cf3a9b2924494c40c66065b4b4214e52cfaf6477af2b7e801500e180f8c6956881c5206b049996ab0ae58f45966a368f4
 DIST anki-25.02.4.gh.tar.gz 2430814 BLAKE2B 
3351b23dd47686d8048dd55783e0a8ea1d90ed8f329aecab141ef4bf2c044278e66b4f0369d70ca57020a6f4ab4deda2358185fd89d36eab25b8faade9149d53
 SHA512 
d371c79e6f78af07420c7384a47eef63e6764775386c94fa52203d2bb03929b8176b51e042de70613d1985317c840fcb3ff9c9cb9f7147d19312a4e505d4b766
+DIST anki-25.02.5-crates.tar.xz 57606472 BLAKE2B 
40f976c4e20c6ecd0877db05a733bd66b608e1e054177479ec3068a5d9d8b8dcd32495a4c81caee4e37e12090bb8b000f41f7c3162e3d7b80dbe522bca797f47
 SHA512 
f382f304ead6edee5c64472945ac56fb418adf046129c45771862ff5732a1a944f84e6d80ef590f11bde2ca2058c989ed70847ebb791f101af9a3ad34285d396
+DIST anki-25.02.5.gh.tar.gz 2433426 BLAKE2B 
95518d0038c5f697ebae0ce8a04a5ff67419c7a15e99205574e6c3ab94543cd05d3d9dc636decc3e4de1ebc294bb0c9649cd2eb4a717e53c1d6051c85472f48c
 SHA512 
39f98052d8869e3170b65eca472b02edd61d83f6b4c2628c0351c239a68ccea7da4d8488e11cb23ea1d3df7b9be6d1b1ef84b9ea0e14650ab0d4e65b06e38656
 DIST anki-core-i18n-0fe0162f4a18e8ef2fbac1d9a33af8e38cf7260e.gh.tar.gz 1521578 
BLAKE2B 
101505d871df70316222db08f2bc85fdd00be81320600c64c76bb51565a88c13fa6fdd9e059ed404931f2dc97611cf2a954650d10d6556cd181427dbffc4f1a6
 SHA512 
c72eaea9e0f350d092a44f7623a7cfdcb74ff99a97ca4b53c51b1b26af387c9c6cd64bfca3dc4577c14c3ee4040b8ce1a7a50f2e209b0fa47c5297f97c92a910
 DIST anki-desktop-ftl-17216b03db7249600542e388bd4ea124478400e5.gh.tar.gz 
235720 BLAKE2B 
0e1a454dbfa5f0f8750000c86b1468c7cfde99e53e6e7683820f5523963c4187e76ef40c4be4c2ef7037cc269f258fe3270ba99006912fb2844ba6cc18dc91d3
 SHA512 
6d91607c6b0805e6dfce8a93dbf46ac945e9b1631aa054cb98e513d7a6da64d905035b8da8ea5d10c0d700a0aa96b056748d956342fe4ddf7232f7f7540ee88a
 DIST linkcheck-184b2ca50ed39ca43da13f0b830a463861adb9ca.gh.tar.gz 19408 
BLAKE2B 
c5e4f155f2d79d6d4340eaf3caaab8cbc0a558bc351d06b6c77ac4b61afa4172f5e3497106d5535b79911c7697a74ef8765f3fdcb7b602edb7524d6b5169a6fc
 SHA512 
2cff7ad872c9ce3b29a8c74f9ce1ca365f6c381e1d9bc5da46bb34d0687708164ad86fb78baecdb596de37f79f891d1326b994348e51f4e74ec2731da23034d4

diff --git a/app-misc/anki/anki-25.02.5.ebuild 
b/app-misc/anki/anki-25.02.5.ebuild
new file mode 100644
index 000000000000..8fcfad92f488
--- /dev/null
+++ b/app-misc/anki/anki-25.02.5.ebuild
@@ -0,0 +1,320 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_OPTIONAL=1
+DISTUTILS_SINGLE_IMPL=1
+DISTUTILS_USE_PEP517=no
+PYTHON_COMPAT=( python3_{11..13} )
+
+declare -A GIT_CRATES=(
+       
[linkcheck]='https://github.com/ankitects/linkcheck;184b2ca50ed39ca43da13f0b830a463861adb9ca;linkcheck-%commit%'
+       
[percent-encoding-iri]='https://github.com/ankitects/rust-url;bb930b8d089f4d30d7d19c12e54e66191de47b88;rust-url-%commit%/percent_encoding'
+)
+RUST_MIN_VER="1.82.0"
+
+inherit cargo desktop distutils-r1 greadme multiprocessing ninja-utils \
+       optfeature toolchain-funcs xdg
+
+DESCRIPTION="A spaced-repetition memory training program (flash cards)"
+HOMEPAGE="https://apps.ankiweb.net/";
+
+declare -A COMMITS=(
+       [anki]="29192d156ae60d6ce35e80ccf815a8331c9db724"
+       [ftl-core]="0fe0162f4a18e8ef2fbac1d9a33af8e38cf7260e"
+       [ftl-desktop]="17216b03db7249600542e388bd4ea124478400e5"
+)
+SRC_URI="${CARGO_CRATE_URIS}
+       https://github.com/ankitects/anki/archive/refs/tags/${PV}.tar.gz -> 
${P}.gh.tar.gz
+       
https://github.com/ankitects/anki-core-i18n/archive/${COMMITS[ftl-core]}.tar.gz
+       -> anki-core-i18n-${COMMITS[ftl-core]}.gh.tar.gz
+       
https://github.com/ankitects/anki-desktop-ftl/archive/${COMMITS[ftl-desktop]}.tar.gz
+       -> anki-desktop-ftl-${COMMITS[ftl-desktop]}.gh.tar.gz
+       
https://github.com/gentoo-crate-dist/anki/releases/download/${PV}/${P}-crates.tar.xz
+       gui? (
+       https://home.cit.tum.de/~salu/distfiles/anki-25.02.4-node_modules.tar.xz
+       )
+"
+# How to get an up-to-date summary of runtime JS libs' licenses:
+# ./node_modules/.bin/license-checker-rseidelsohn --production 
--excludePackages anki --summary
+LICENSE="AGPL-3+ BSD public-domain gui? ( 0BSD CC-BY-4.0 GPL-3+ )"
+# Dependent crate licenses
+LICENSE+="
+       Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD-2 CC0-1.0 ISC MIT
+       MPL-2.0 Unicode-3.0 Unicode-DFS-2016 Unlicense ZLIB
+"
+# Manually added crate licenses
+LICENSE+=" openssl"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+IUSE="+gui"
+REQUIRED_USE="gui? ( ${PYTHON_REQUIRED_USE} )"
+RESTRICT="!gui? ( test ) !test? ( test )"
+
+# Dependencies:
+# Python: python/requirements.{anki,aqt}.in
+# If ENABLE_QT5_COMPAT is set at runtime
+# additionally depend on PyQt6[dbus,printsupport].
+# Qt: qt/{aqt/{sound.py,qt/*.py},tools/build_ui.py}
+# app-misc/certificates: The rust backend library is built against
+# rustls-native-certs to use the native certificate store.
+# No ${PYTHON_DEPS} in DEPEND despite external module because it doesn't link
+# against libpython
+
+DEPEND="
+       >=app-arch/zstd-1.5.5:=
+       dev-db/sqlite:3
+"
+GUI_RDEPEND="
+       ${PYTHON_DEPS}
+       dev-qt/qtsvg:6
+       $(python_gen_cond_dep '
+               dev-python/beautifulsoup4[${PYTHON_USEDEP}]
+               dev-python/distro[${PYTHON_USEDEP}]
+               dev-python/decorator[${PYTHON_USEDEP}]
+               dev-python/flask[${PYTHON_USEDEP}]
+               dev-python/flask-cors[${PYTHON_USEDEP}]
+               dev-python/jsonschema[${PYTHON_USEDEP}]
+               dev-python/markdown[${PYTHON_USEDEP}]
+               dev-python/protobuf[${PYTHON_USEDEP}]
+               
>=dev-python/pyqt6-6.6.1[gui,network,opengl,quick,webchannel,widgets,${PYTHON_USEDEP}]
+               >=dev-python/pyqt6-sip-13.6.0[${PYTHON_USEDEP}]
+               >=dev-python/pyqt6-webengine-6.6.0[widgets,${PYTHON_USEDEP}]
+               dev-python/requests[${PYTHON_USEDEP}]
+               dev-python/send2trash[${PYTHON_USEDEP}]
+               dev-python/waitress[${PYTHON_USEDEP}]
+       ')
+"
+RDEPEND="
+       ${DEPEND}
+       app-misc/ca-certificates
+       gui? ( ${GUI_RDEPEND} )
+"
+
+BDEPEND="
+       >=app-arch/zstd-1.5.5:=
+       dev-libs/protobuf[protoc(+)]
+       virtual/pkgconfig
+       gui? (
+               ${PYTHON_DEPS}
+               app-alternatives/ninja
+               >=net-libs/nodejs-20.12.1
+               sys-apps/yarn
+               $(python_gen_cond_dep '
+                       dev-python/pyqt6[${PYTHON_USEDEP}]
+                       dev-python/wheel[${PYTHON_USEDEP}]
+               ')
+       )
+       test? (
+               ${RDEPEND}
+               app-text/dvipng
+               app-text/texlive
+               dev-libs/openssl
+               dev-util/cargo-nextest
+               $(python_gen_cond_dep 'dev-python/mock[${PYTHON_USEDEP}]')
+       )
+"
+
+distutils_enable_sphinx python/sphinx \
+                       dev-python/sphinx-autoapi \
+                       dev-python/sphinx-rtd-theme
+
+distutils_enable_tests pytest
+
+PATCHES=(
+       "${FILESDIR}"/24.06.3/remove-yarn.patch
+       "${FILESDIR}"/24.04.1/remove-mypy-protobuf.patch
+       "${FILESDIR}"/24.04.1/revert-cert-store-hack.patch
+       "${FILESDIR}"/23.12.1/ninja-rules-for-cargo.patch
+)
+
+QA_FLAGS_IGNORED="usr/bin/anki-sync-server
+       usr/lib/python.*/site-packages/anki/_rsbridge.so"
+
+pkg_setup() {
+       export PROTOC_BINARY="${BROOT}"/usr/bin/protoc
+       export LIBSQLITE3_SYS_USE_PKG_CONFIG=1
+       export ZSTD_SYS_USE_PKG_CONFIG=1
+       rust_pkg_setup
+       use gui && python-single-r1_pkg_setup
+}
+
+python_prepare_all() {
+       mv "${WORKDIR}"/node_modules out || die
+
+       # Expected files and directories
+       mkdir .git out/env || die
+       mkdir -p out/pyenv/bin || die
+       ln -s "${PYTHON}" out/pyenv/bin/python || die
+
+       if use doc; then
+               sed "/^REPO_ROOT/s|=.*|= \"${S}\"|" -i python/sphinx/conf.py || 
die
+       fi
+
+       # Unpin Yarn
+       sed -e '/"type": "module"/s/,//' \
+               -e '/packageManager/d' -i package.json || die
+
+       # Not running the black formatter on generated files saves a dependency
+       sed '/subprocess/d' -i pylib/tools/hookslib.py || die
+
+       # Fix hardcoded runner location
+       export CARGO_TARGET_DIR="${S}"/out/rust
+       cbuild_dir="$(CHOST=${CBUILD:-${CHOST}} cargo_target_dir)"
+       sed "s,rust/release,${cbuild_dir##*out/}," \
+               -i build/ninja_gen/src/render.rs || die
+       # Separate src_configure from runner build
+       sed '/ConfigureBuild/d' -i build/ninja_gen/src/build.rs || die
+       distutils-r1_python_prepare_all
+}
+
+src_prepare() {
+       default
+       rm -r ftl/{core,qt}-repo || die
+       ln -s "${WORKDIR}"/anki-core-i18n-${COMMITS[ftl-core]} ftl/core-repo || 
die
+       ln -s "${WORKDIR}"/anki-desktop-ftl-${COMMITS[ftl-desktop]} ftl/qt-repo 
|| die
+
+       mkdir out || die
+       echo -e "${COMMITS[anki]:0:8}" > out/buildhash || die
+
+       # None of our ninja implementations are n2
+       sed 's/which::which("n2").*/false,/' -i build/ninja_gen/src/build.rs || 
die
+
+       use gui && distutils-r1_src_prepare
+}
+
+_cbuild_cargo_build() {
+       CHOST=${CBUILD:-${CHOST}} cargo_src_compile "${@}"
+}
+
+python_configure_all() {
+       tc-env_build _cbuild_cargo_build -p configure
+
+       local -x NODE_BINARY="${BROOT}"/usr/bin/node \
+       YARN_BINARY="${BROOT}"/usr/bin/yarn \
+       OFFLINE_BUILD=1
+       if ! use debug; then
+               if tc-is-lto; then
+                       local -x RELEASE=2
+               else
+                       local -x RELEASE=1
+               fi
+       fi
+       cargo_env "${cbuild_dir}"/configure || die
+       unset cbuild_dir
+}
+
+src_configure() {
+       cargo_gen_config
+       cargo_src_configure
+       use gui && distutils-r1_src_configure
+}
+
+python_compile() {
+       tc-env_build _cbuild_cargo_build -p runner
+       cargo_env eninja -f out/build.ninja wheels
+       local w
+       for w in out/wheels/*.whl; do
+               distutils_wheel_install "${BUILD_DIR}"/install ${w}
+       done
+}
+
+src_compile() {
+       if use gui; then
+               distutils-r1_src_compile
+       else
+               cargo_src_compile -p anki-sync-server
+       fi
+}
+
+python_test() {
+       epytest qt
+       epytest pylib
+}
+
+python_test_all() {
+       local nextest_opts=(
+               cargo-verbose
+               failure-output=immediate
+               status-level=all
+               test-threads=$(get_makeopts_jobs)
+       )
+       if [[ ! ${CARGO_TERM_COLOR} ]]; then
+               [[ "${NOCOLOR}" = true || "${NOCOLOR}" = yes ]] && 
nextest_opts+=( color=never )
+       fi
+       nextest_opts=( ${nextest_opts[@]/#/--} )
+       cargo_env cargo nextest run ${nextest_opts[@]} || die
+
+       eninja -f out/build.ninja check_vitest
+}
+
+src_test() {
+       local -x ANKI_TEST_MODE=1
+       distutils-r1_src_test
+}
+
+python_install_all() {
+       pushd qt/bundle/lin > /dev/null || die
+       doman anki.1
+       doicon anki.{png,xpm}
+       domenu anki.desktop
+       insinto /usr/share/mime/packages
+       doins anki.xml
+       popd || die
+       python_newscript - anki <<-EOF
+               #!${EPREFIX}/usr/bin/python
+               import sys
+               from aqt import run
+               sys.exit(run())
+       EOF
+       distutils-r1_python_install_all
+}
+
+src_install() {
+       greadme_stdin <<- EOF
+       Anki's user manual is located online at https://docs.ankiweb.net/
+       Anki's add-on developer manual is located online at 
https://addon-docs.ankiweb.net/
+       EOF
+
+       if use gui; then
+               greadme_stdin --append <<-EOF
+               Users with add-ons that still rely on Anki's Qt5 GUI
+               can temporarily set the environment variable ENABLE_QT5_COMPAT 
to 1 to have
+               Anki install the previous compatibility code. This option has 
additional
+               runtime dependencies. Please take a look at this package's 
optional runtime
+               features for a complete listing.
+
+               ENABLE_QT5_COMPAT may be removed in the future, so this is not a
+               long-term solution.
+               EOF
+
+               distutils-r1_src_install
+       else
+               cargo_src_install --path rslib/sync
+       fi
+}
+
+pkg_preinst() {
+       greadme_pkg_preinst
+       use gui && xdg_pkg_preinst
+}
+
+pkg_postinst() {
+       greadme_pkg_postinst
+       if use gui; then
+               xdg_pkg_postinst
+               optfeature "LaTeX in cards" "app-text/texlive[extra] 
app-text/dvipng"
+               optfeature "sound support" media-video/mpv media-video/mplayer
+               optfeature "recording support" "media-sound/lame[frontend] 
dev-python/pyqt6[multimedia]"
+               optfeature "faster database operations" dev-python/orjson
+               optfeature "compatibility with Qt5-dependent add-ons" 
dev-python/pyqt6[dbus,printsupport]
+               optfeature "Vulkan driver" "media-libs/vulkan-loader 
dev-qt/qtbase:6[vulkan]
+                       dev-qt/qtdeclarative:6[vulkan] 
dev-qt/qtwebengine:6[vulkan]"
+
+               einfo "You can customize the LaTeX header for your cards to fit 
your needs:"
+               einfo "Notes > Manage Note Types > [select a note type] > 
Options"
+       fi
+}

Reply via email to