From owner-dev-commits-ports-main@freebsd.org Mon Aug 2 06:21:29 2021 Return-Path: Delivered-To: dev-commits-ports-main@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4C62166DD72; Mon, 2 Aug 2021 06:21:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4GdSZJ4QF8z4tLx; Mon, 2 Aug 2021 06:21:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5B1301A9AF; Mon, 2 Aug 2021 06:21:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1726LSc2074298; Mon, 2 Aug 2021 06:21:28 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1726LSrh074297; Mon, 2 Aug 2021 06:21:28 GMT (envelope-from git) Date: Mon, 2 Aug 2021 06:21:28 GMT Message-Id: <202108020621.1726LSrh074297@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Kai Knoblich Subject: git: 7cb5fb35608f - main - games/anki: Update to 2.1.44 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kai X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7cb5fb35608f4cc8a97afd2bdb83fa7f797fcadc Auto-Submitted: auto-generated X-BeenThere: dev-commits-ports-main@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commits to the main branch of the FreeBSD ports repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Aug 2021 06:21:29 -0000 The branch main has been updated by kai: URL: https://cgit.FreeBSD.org/ports/commit/?id=7cb5fb35608f4cc8a97afd2bdb83fa7f797fcadc commit 7cb5fb35608f4cc8a97afd2bdb83fa7f797fcadc Author: Kai Knoblich AuthorDate: 2021-08-02 06:10:10 +0000 Commit: Kai Knoblich CommitDate: 2021-08-02 06:16:01 +0000 games/anki: Update to 2.1.44 Since the 2.1.36 release the build system has changed significantly again and devel/bazel is now used by upstream for the entire build process. With this change, a lot of bazel rules and also some translation files needs to be downloaded from various repositories during the buildtime. In order to still make Anki compatible with the Ports framework, the following approach is used: 1. Prefetch all the required files before buildtime. 2. Create and setup a few local bazel repositories along with a set of custom bazel rules and to provide Node, Protobuf and Yarn from the Ports tree. 3. Compile the Rust library and place the output files to the respective local bazel repository for further processing. 4. Build the rest via devel/bazel From a technical point of view, Anki should also be able to be built on other 64-bit architectures (but requires further patching of a few bazel rules), as soon as devel/bazel can also be built for those platforms. The option NLS is gone because the translations are now compiled directly into the Rust library and they only generate a small overhead. Changelog since 2.1.35 (too many changes/fixes to list them separately): https://changes.ankiweb.net/ Reviewed by: tcberner MFH: 2021Q3 Differential Revision: https://reviews.freebsd.org/D31358 --- games/anki/Makefile | 652 ++++++----- games/anki/distinfo | 1164 +++++++++++--------- games/anki/files/bazel/BUILD.bazel-i18n | 10 + games/anki/files/bazel/BUILD.bazel-local_node | 1 + .../files/bazel/BUILD.bazel-protoc_bin_freebsd | 1 + games/anki/files/bazel/BUILD.bazel-pylib-rsbridge | 12 + games/anki/files/bazel/BUILD.bazel-pyqt5 | 27 + games/anki/files/bazel/BUILD.bazel-rslib | 25 + .../bazel/BUILD.bazel-rust_output-fluent_proto | 7 + .../bazel/BUILD.bazel-rust_output-librsbridge | 7 + games/anki/files/bazel/pyqt5.bzl | 13 + games/anki/files/bazel/repos.bzl | 109 ++ games/anki/files/patch-Makefile | 27 - games/anki/files/patch-defs.bzl | 61 + games/anki/files/patch-ftl_BUILD.bazel | 16 + games/anki/files/patch-late__deps.bzl | 14 + ...epos_rules__nodejs_internal_common_os__name.bzl | 29 + ...os_rules__nodejs_internal_node_node__patches.js | 13 + ...__nodejs_internal_npm__install_npm__install.bzl | 14 + ...repos_rules__nodejs_toolchains_node_BUILD.bazel | 55 + games/anki/files/patch-platforms_BUILD.bazel | 17 + games/anki/files/patch-protobuf.bzl | 27 + games/anki/files/patch-pylib_Makefile | 39 - games/anki/files/patch-pylib_anki_BUILD.bazel | 34 + .../files/patch-pylib_anki___backend_BUILD.bazel | 21 + games/anki/files/patch-pylib_orjson.bzl | 15 + games/anki/files/patch-pylib_tools_BUILD.bazel | 28 + games/anki/files/patch-qt_BUILD.bazel | 70 ++ games/anki/files/patch-qt_Makefile | 45 - games/anki/files/patch-qt_aqt_BUILD.bazel | 35 + games/anki/files/patch-qt_runanki | 10 - games/anki/files/patch-rslib_Cargo.toml | 29 +- games/anki/files/patch-rspy_Makefile | 27 - games/anki/files/patch-scripts_BUILD.bazel | 10 + games/anki/files/patch-scripts_status.sh | 9 + games/anki/pkg-plist | 551 +++------ 36 files changed, 1867 insertions(+), 1357 deletions(-) diff --git a/games/anki/Makefile b/games/anki/Makefile index d6568ad2c589..fbf47144582d 100644 --- a/games/anki/Makefile +++ b/games/anki/Makefile @@ -1,12 +1,11 @@ # Created by: Andrew Pantyukhin PORTNAME= anki -DISTVERSION= 2.1.35 -PORTREVISION= 11 -# Don't forget to update ${_MY_BUILDHASH} +DISTVERSION= 2.1.44 +# Don't forget to update ${_MY_BUILDHASH} if DISTVERSION changes CATEGORIES= games education python -MASTER_SITES= LOCAL/kai/:npmcache -DISTFILES= anki-npm-cache-${DISTVERSION}${EXTRACT_SUFX}:npmcache +MASTER_SITES= LOCAL/kai/:yarncache +DISTFILES= anki-yarn-cache-${DISTVERSION}${EXTRACT_SUFX}:yarncache DIST_SUBDIR= python MAINTAINER= kai@FreeBSD.org @@ -18,14 +17,17 @@ LICENSE_FILE= ${WRKSRC}/LICENSE DEPRECATED= Uses EOL Python 2.7 via www/py-qt5-webengine EXPIRATION_DATE=2021-06-23 +NOT_FOR_ARCHS= armv6 armv7 i386 mips powerpc +NOT_FOR_ARCHS_REASON= the bazel build framework supports only 64-bit systems. + BUILD_DEPENDS= bash:shells/bash \ - maturin:devel/py-maturin@${PY_FLAVOR} \ + bazel:devel/bazel \ protoc:devel/protobuf \ - npm:www/npm \ - rsync:net/rsync \ + yarn:www/yarn \ ${PYTHON_PKGNAMEPREFIX}mypy-protobuf>=1.21:devel/py-mypy-protobuf@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}stringcase==1.2.0:devel/py-stringcase@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}stringcase>0:devel/py-stringcase@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}black>0:devel/py-black@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}fluent>0:devel/py-fluent@${PY_FLAVOR} \ ${RUN_DEPENDS} # For x64 architectures there's also a Python package "orjson" that still needs @@ -51,295 +53,352 @@ RUN_DEPENDS= lame:audio/lame \ ${PYTHON_PKGNAMEPREFIX}waitress>0:www/py-waitress@${PY_FLAVOR} # USES=ssl is required for the compilation of the Rust code -USES= cargo desktop-file-utils gmake perl5 pyqt:5 python:3.7+ shebangfix ssl +USES= cargo desktop-file-utils pyqt:5 python:3.8+ shebangfix ssl USE_GITHUB= yes GH_ACCOUNT= ankitects -GH_TUPLE= ankitects:anki-core-i18n:fbda2ed:i18ncore \ - ankitects:anki-desktop-ftl:f56e959:i18nfluent \ - ankitects:anki-desktop-i18n:a93ccef:i18ndesktop \ - ankitects:rust-coarsetime:f9e2c86216f0f4803bc75404828318fc206dab29:coarsetime \ - ankitects:fluent-rs:f61c5e10a53161ef5261f3c87b62047f12e4aa74:fluent \ - ankitects:hyper-timeout:664b6f9c387f6a7d75d1609a65c02554e8c55bc7:hypertimeout \ - ankitects:reqwest:57665e2c2a39db85723ba860f1b570a608bb73f9:reqwest \ - ankitects:tokio-io-timeout:96e1358555c49905de89170f2b1102a7d8b6c4c2:tokioiotimeout -USE_PERL5= build +# Translation files +GH_TUPLE= ankitects:anki-core-i18n:30ab198:ftlrslib \ + ankitects:anki-desktop-ftl:3920d26:ftlextra +# Cargo crates +GH_TUPLE+= ankitects:hyper-timeout:anki-2020-11-03:hypertimeout \ + ankitects:reqwest:anki-2020-11-03:reqwest \ + ankitects:tokio-io-timeout:anki-2020-11-03:tokioiotimeout +# Bazel Skylib framework and sets of bazel rules +GH_TUPLE+= bazelbuild:bazel-skylib:e59b620:bzlskylib \ + bazelbuild:rules_cc:40548a2:bzlrcc \ + bazelbuild:rules_java:c13e3ea:bzlrjava \ + bazelbuild:rules_nodejs:1689fa1:bzlrnodejs \ + bazelbuild:rules_proto:f7a30f6:bzlrproto \ + ankitects:rules_pip:73953e0:bzlrpip \ + ankitects:rules_python:3927c9b:bzlrpython \ + ankitects:rules_rust:dfd1200:bzlrrust \ + ankitects:rules_sass:275ace7:bzlrsass \ + ankitects:rules_svelte:f09155c:bzlrsvelte + USE_PYQT= core gui network printsupport sip svg webchannel webengine widgets xml_build -SHEBANG_FILES= qt/po/scripts/build-mo-files \ - qt/po/scripts/copy-qt-files \ - qt/runanki \ - qt/tools/build_ui.sh \ - scripts/rename +SHEBANG_FILES= qt/tools/runanki.system.in -CARGO_CRATES= addr2line-0.13.0 \ - adler-0.2.3 \ - aho-corasick-0.7.14 \ - anyhow-1.0.33 \ - arc-swap-0.4.7 \ +CARGO_CRATES= addr2line-0.15.2 \ + adler-1.0.2 \ + ahash-0.4.7 \ + aho-corasick-0.7.18 \ + ammonia-3.1.2 \ + anyhow-1.0.42 \ + arc-swap-1.3.0 \ arrayref-0.3.6 \ arrayvec-0.4.12 \ - arrayvec-0.5.1 \ - askama-0.10.3 \ - askama_derive-0.10.3 \ + arrayvec-0.5.2 \ + askama-0.10.5 \ + askama_derive-0.10.5 \ askama_escape-0.10.1 \ - askama_shared-0.10.4 \ - async-compression-0.3.5 \ + askama_shared-0.11.1 \ + async-compression-0.3.8 \ + async-trait-0.1.50 \ atty-0.2.14 \ autocfg-1.0.1 \ - backtrace-0.3.53 \ + backtrace-0.3.60 \ base64-0.12.3 \ + base64-0.13.0 \ bitflags-1.2.1 \ - blake2b_simd-0.5.10 \ - blake3-0.3.7 \ - bumpalo-3.4.0 \ - byteorder-1.3.4 \ + bitvec-0.19.5 \ + blake3-0.3.8 \ + bumpalo-3.7.0 \ + byteorder-1.4.3 \ bytes-0.4.12 \ bytes-0.5.6 \ - cc-1.0.61 \ + bytes-1.0.1 \ + cc-1.0.69 \ cfg-if-0.1.10 \ cfg-if-1.0.0 \ chrono-0.4.19 \ - cloudabi-0.1.0 \ + coarsetime-0.1.19 \ constant_time_eq-0.1.5 \ - core-foundation-0.7.0 \ - core-foundation-sys-0.7.0 \ + core-foundation-0.9.1 \ + core-foundation-sys-0.8.2 \ crc32fast-1.2.1 \ - crossbeam-channel-0.4.4 \ - crossbeam-utils-0.7.2 \ + crossbeam-channel-0.5.1 \ + crossbeam-utils-0.8.5 \ crypto-mac-0.8.0 \ - ctor-0.1.16 \ - derivative-2.1.1 \ + ctor-0.1.20 \ + derivative-2.2.0 \ digest-0.9.0 \ - dirs-2.0.2 \ - dirs-sys-0.3.5 \ - dtoa-0.4.6 \ + dirs-next-2.0.0 \ + dirs-sys-next-0.1.2 \ + dtoa-0.4.8 \ either-1.6.1 \ - encoding_rs-0.8.24 \ + encoding_rs-0.8.28 \ + env_logger-0.8.4 \ failure-0.1.8 \ failure_derive-0.1.8 \ fallible-iterator-0.2.0 \ fallible-streaming-iterator-0.1.9 \ fixedbitset-0.2.0 \ - flate2-1.0.18 \ - fluent-langneg-0.12.1 \ - fluent-syntax-0.9.3 \ + flate2-1.0.20 \ + fluent-0.13.1 \ + fluent-bundle-0.13.2 \ + fluent-langneg-0.13.0 \ + fluent-syntax-0.10.3 \ fnv-1.0.7 \ foreign-types-0.3.2 \ foreign-types-shared-0.1.1 \ + form_urlencoded-1.0.1 \ fuchsia-zircon-0.3.3 \ fuchsia-zircon-sys-0.3.3 \ - futures-0.3.6 \ - futures-channel-0.3.6 \ - futures-core-0.3.6 \ - futures-executor-0.3.6 \ - futures-io-0.3.6 \ - futures-macro-0.3.6 \ - futures-sink-0.3.6 \ - futures-task-0.3.6 \ - futures-util-0.3.6 \ - fxhash-0.2.1 \ + funty-1.1.0 \ + futf-0.1.4 \ + futures-0.3.15 \ + futures-channel-0.3.15 \ + futures-core-0.3.15 \ + futures-executor-0.3.15 \ + futures-io-0.3.15 \ + futures-macro-0.3.15 \ + futures-sink-0.3.15 \ + futures-task-0.3.15 \ + futures-util-0.3.15 \ generic-array-0.14.4 \ - getrandom-0.1.15 \ + getopts-0.2.21 \ + getrandom-0.1.16 \ + getrandom-0.2.3 \ ghost-0.1.2 \ - gimli-0.22.0 \ - h2-0.2.6 \ + gimli-0.24.0 \ + h2-0.2.7 \ hashbrown-0.9.1 \ - heck-0.3.1 \ - hermit-abi-0.1.17 \ - hex-0.4.2 \ + hashbrown-0.11.2 \ + hashlink-0.6.0 \ + heck-0.3.3 \ + hermit-abi-0.1.19 \ + hex-0.4.3 \ + html5ever-0.25.1 \ htmlescape-0.3.1 \ - http-0.2.1 \ + http-0.2.4 \ http-body-0.3.1 \ - httparse-1.3.4 \ + httparse-1.4.1 \ httpdate-0.3.2 \ - humansize-1.1.0 \ - hyper-0.13.8 \ + humansize-1.1.1 \ + humantime-2.1.0 \ + hyper-0.13.10 \ + hyper-rustls-0.21.0 \ hyper-tls-0.4.3 \ - idna-0.2.0 \ - indexmap-1.6.0 \ + idna-0.2.3 \ + indexmap-1.7.0 \ indoc-0.3.6 \ indoc-impl-0.3.6 \ - instant-0.1.7 \ - intl_pluralrules-6.0.0 \ - inventory-0.1.9 \ - inventory-impl-0.1.9 \ + instant-0.1.10 \ + intl-memoizer-0.5.1 \ + intl_pluralrules-7.0.1 \ + inventory-0.1.10 \ + inventory-impl-0.1.10 \ iovec-0.1.4 \ - itertools-0.8.2 \ + ipnet-2.3.1 \ itertools-0.9.0 \ - itoa-0.4.6 \ - js-sys-0.3.45 \ + itoa-0.4.7 \ + js-sys-0.3.51 \ kernel32-sys-0.2.2 \ lazy_static-1.4.0 \ lexical-core-0.7.6 \ - libc-0.2.79 \ - libsqlite3-sys-0.18.0 \ - linked-hash-map-0.5.3 \ - lock_api-0.4.1 \ - log-0.4.11 \ - lru-cache-0.1.2 \ + libc-0.2.98 \ + libsqlite3-sys-0.20.1 \ + lock_api-0.4.4 \ + log-0.4.14 \ + mac-0.1.1 \ + maplit-1.0.2 \ + markup5ever-0.10.1 \ + markup5ever_rcdom-0.1.0 \ matches-0.1.8 \ - maybe-uninit-2.0.0 \ - memchr-2.3.3 \ + memchr-2.4.0 \ mime-0.3.16 \ mime_guess-2.0.3 \ - miniz_oxide-0.4.3 \ - mio-0.6.22 \ - miow-0.2.1 \ - multimap-0.8.2 \ - native-tls-0.2.4 \ - net2-0.2.35 \ + miniz_oxide-0.4.4 \ + mio-0.6.23 \ + miow-0.2.2 \ + multimap-0.8.3 \ + native-tls-0.2.7 \ + net2-0.2.37 \ + new_debug_unreachable-1.0.4 \ nodrop-0.1.14 \ - nom-5.1.2 \ + nom-6.1.2 \ num-format-0.4.0 \ - num-integer-0.1.43 \ - num-traits-0.2.12 \ + num-integer-0.1.44 \ + num-traits-0.2.14 \ num_cpus-1.13.0 \ - num_enum-0.5.1 \ - num_enum_derive-0.5.1 \ - object-0.21.1 \ - once_cell-1.4.1 \ - openssl-0.10.30 \ - openssl-probe-0.1.2 \ - openssl-sys-0.9.58 \ - parking_lot-0.11.0 \ - parking_lot_core-0.8.0 \ + num_enum-0.5.2 \ + num_enum_derive-0.5.2 \ + object-0.25.3 \ + once_cell-1.8.0 \ + openssl-0.10.35 \ + openssl-probe-0.1.4 \ + openssl-sys-0.9.65 \ + parking_lot-0.11.1 \ + parking_lot_core-0.8.3 \ paste-0.1.18 \ paste-impl-0.1.18 \ percent-encoding-2.1.0 \ petgraph-0.5.1 \ - pin-project-0.4.27 \ - pin-project-internal-0.4.27 \ - pin-project-lite-0.1.11 \ + phf-0.8.0 \ + phf_codegen-0.8.0 \ + phf_generator-0.8.0 \ + phf_shared-0.8.0 \ + pin-project-1.0.8 \ + pin-project-internal-1.0.8 \ + pin-project-lite-0.1.12 \ + pin-project-lite-0.2.7 \ pin-utils-0.1.0 \ pkg-config-0.3.19 \ - podio-0.1.7 \ - ppv-lite86-0.2.9 \ - proc-macro-crate-0.1.5 \ - proc-macro-hack-0.5.18 \ + ppv-lite86-0.2.10 \ + precomputed-hash-0.1.1 \ + proc-macro-crate-1.0.0 \ + proc-macro-hack-0.5.19 \ proc-macro-nested-0.1.6 \ - proc-macro2-1.0.24 \ - prost-0.6.1 \ - prost-build-0.6.1 \ - prost-derive-0.6.1 \ - prost-types-0.6.1 \ - pyo3-0.11.1 \ - pyo3-derive-backend-0.11.1 \ - pyo3cls-0.11.1 \ - quote-1.0.7 \ + proc-macro2-1.0.27 \ + prost-0.7.0 \ + prost-build-0.7.0 \ + prost-derive-0.7.0 \ + prost-types-0.7.0 \ + pulldown-cmark-0.8.0 \ + pyo3-0.13.2 \ + pyo3-macros-0.13.2 \ + pyo3-macros-backend-0.13.2 \ + quote-1.0.9 \ + radium-0.5.3 \ rand-0.7.3 \ + rand-0.8.4 \ rand_chacha-0.2.2 \ + rand_chacha-0.3.1 \ rand_core-0.5.1 \ + rand_core-0.6.3 \ rand_hc-0.2.0 \ - redox_syscall-0.1.57 \ - redox_users-0.3.5 \ - regex-1.4.1 \ - regex-syntax-0.6.20 \ + rand_hc-0.3.1 \ + rand_pcg-0.2.1 \ + redox_syscall-0.2.9 \ + redox_users-0.4.0 \ + regex-1.5.4 \ + regex-syntax-0.6.25 \ remove_dir_all-0.5.3 \ - rental-0.5.5 \ + rental-0.5.6 \ rental-impl-0.5.5 \ - rusqlite-0.23.1 \ - rust-argon2-0.8.2 \ - rustc-demangle-0.1.18 \ + ring-0.16.20 \ + rusqlite-0.24.2 \ + rustc-demangle-0.1.20 \ + rustc-hash-1.1.0 \ + rustls-0.18.1 \ + rustversion-1.0.5 \ ryu-1.0.5 \ schannel-0.1.19 \ scopeguard-1.1.0 \ - security-framework-0.4.4 \ - security-framework-sys-0.4.3 \ - serde-1.0.117 \ + sct-0.6.1 \ + security-framework-2.3.1 \ + security-framework-sys-2.3.0 \ + serde-1.0.126 \ serde-aux-0.6.1 \ - serde_derive-1.0.117 \ - serde_json-1.0.59 \ - serde_repr-0.1.6 \ + serde_derive-1.0.126 \ + serde_json-1.0.64 \ + serde_repr-0.1.7 \ serde_tuple-0.5.0 \ serde_tuple_macros-0.5.0 \ serde_urlencoded-0.6.1 \ sha1-0.6.0 \ - slab-0.4.2 \ - slog-2.5.2 \ - slog-async-2.5.0 \ + siphasher-0.3.5 \ + slab-0.4.3 \ + slog-2.7.0 \ + slog-async-2.6.0 \ slog-envlogger-2.2.0 \ - slog-scope-4.3.0 \ + slog-scope-4.4.0 \ slog-stdlog-4.1.0 \ - slog-term-2.6.0 \ - smallvec-1.4.2 \ - socket2-0.3.15 \ + slog-term-2.8.0 \ + smallvec-1.6.1 \ + socket2-0.3.19 \ + spin-0.5.2 \ stable_deref_trait-1.2.0 \ static_assertions-1.1.0 \ - subtle-2.3.0 \ - syn-1.0.46 \ - synstructure-0.12.4 \ + string_cache-0.8.1 \ + string_cache_codegen-0.5.1 \ + subtle-2.4.1 \ + syn-1.0.74 \ + synstructure-0.12.5 \ take_mut-0.2.2 \ - tempfile-3.1.0 \ - term-0.6.1 \ - thiserror-1.0.21 \ - thiserror-impl-1.0.21 \ - thread_local-1.0.1 \ - time-0.1.44 \ + tap-1.0.1 \ + tempfile-3.2.0 \ + tendril-0.4.2 \ + term-0.7.0 \ + termcolor-1.1.2 \ + thiserror-1.0.26 \ + thiserror-impl-1.0.26 \ + thread_local-1.1.3 \ + time-0.1.43 \ tinystr-0.3.4 \ - tinyvec-0.3.4 \ - tokio-0.2.22 \ - tokio-socks-0.2.2 \ + tinyvec-1.3.1 \ + tinyvec_macros-0.1.0 \ + tokio-0.2.25 \ + tokio-rustls-0.14.1 \ + tokio-socks-0.3.0 \ tokio-tls-0.3.1 \ tokio-util-0.3.1 \ - toml-0.5.7 \ - tower-service-0.3.0 \ - tracing-0.1.21 \ - tracing-core-0.1.17 \ + toml-0.5.8 \ + tower-service-0.3.1 \ + tracing-0.1.26 \ + tracing-core-0.1.18 \ + tracing-futures-0.2.5 \ try-lock-0.2.3 \ - type-map-0.3.0 \ - typenum-1.12.0 \ - unic-langid-0.8.0 \ - unic-langid-impl-0.8.0 \ - unic-langid-macros-0.8.0 \ - unic-langid-macros-impl-0.8.0 \ + type-map-0.4.0 \ + typenum-1.13.0 \ + unic-langid-0.9.0 \ + unic-langid-impl-0.9.0 \ + unic-langid-macros-0.9.0 \ + unic-langid-macros-impl-0.9.0 \ unicase-2.6.0 \ - unicode-bidi-0.3.4 \ - unicode-normalization-0.1.13 \ - unicode-segmentation-1.6.0 \ - unicode-xid-0.2.1 \ + unicode-bidi-0.3.5 \ + unicode-normalization-0.1.19 \ + unicode-segmentation-1.8.0 \ + unicode-width-0.1.8 \ + unicode-xid-0.2.2 \ unindent-0.1.7 \ - url-2.1.1 \ + untrusted-0.7.1 \ + url-2.2.2 \ + utf-8-0.7.6 \ utime-0.3.1 \ - vcpkg-0.2.10 \ - version_check-0.9.2 \ + vcpkg-0.2.15 \ + version_check-0.9.3 \ want-0.3.0 \ wasi-0.9.0+wasi-snapshot-preview1 \ - wasi-0.10.0+wasi-snapshot-preview1 \ - wasm-bindgen-0.2.68 \ - wasm-bindgen-backend-0.2.68 \ - wasm-bindgen-futures-0.4.18 \ - wasm-bindgen-macro-0.2.68 \ - wasm-bindgen-macro-support-0.2.68 \ - wasm-bindgen-shared-0.2.68 \ - web-sys-0.3.45 \ - which-3.1.1 \ + wasi-0.10.2+wasi-snapshot-preview1 \ + wasm-bindgen-0.2.74 \ + wasm-bindgen-backend-0.2.74 \ + wasm-bindgen-futures-0.4.24 \ + wasm-bindgen-macro-0.2.74 \ + wasm-bindgen-macro-support-0.2.74 \ + wasm-bindgen-shared-0.2.74 \ + web-sys-0.3.51 \ + webpki-0.21.4 \ + webpki-roots-0.20.0 \ + which-4.1.0 \ winapi-0.2.8 \ winapi-0.3.9 \ winapi-build-0.1.1 \ winapi-i686-pc-windows-gnu-0.4.0 \ + winapi-util-0.1.5 \ winapi-x86_64-pc-windows-gnu-0.4.0 \ - winreg-0.6.2 \ + winreg-0.7.0 \ ws2_32-sys-0.2.1 \ - zip-0.5.6 + wyz-0.2.0 \ + xml5ever-0.16.1 \ + zip-0.5.13 CARGO_USE_GITHUB= yes - -CARGO_CARGOLOCK= ${WRKSRC}/rspy/Cargo.lock -CARGO_CARGOTOML= ${WRKSRC}/rspy/Cargo.toml +CARGO_CARGOTOML= ${WRKSRC}/pylib/rsbridge/Cargo.toml CARGO_BUILD= no CARGO_INSTALL= no -MAKE_ARGS= DEVEL="rspy pylib ts qt" PYTHON_FILE="${PYTHON_CMD}" SHELL="${LOCALBASE}/bin/bash" -# devel/py-maturin acts as a wrapper for "cargo" and "rustc". Ensure that it -# uses the arguments/flags for Rust of the Ports framework. -MAKE_ARGS+= BUILDFLAGS="--cargo-extra-args='${CARGO_BUILD_ARGS} --verbose'" -MAKE_ENV= ${CARGO_ENV} npm_config_offline=true - -ALL_TARGET= build +# BAZEL=1 is required otherwise ${WRKSRC}/rslib/build/main.rs produces a dummy +# buildinfo.txt that doesn't contain the actual build hash. +CARGO_ENV= BAZEL=1 \ + BUILDINFO=${_MY_LOCALREPO}/rust_output/buildinfo.txt \ + PYO3_PYTHON=${PYTHON_CMD} \ + PROTOC=${LOCALBASE}/bin/protoc \ + BACKEND_PROTO=${WRKSRC}/rslib/backend.proto \ + RSLIB_FTL_ROOT=${_MY_LOCALREPO}/ftlrslib/l10n.toml \ + EXTRA_FTL_ROOT=${_MY_LOCALREPO}/ftlextra/l10n.toml -PLIST_SUB= _PY_SONAME=${_PY_SONAME} - -OPTIONS_DEFINE= NLS OPTIONS_DEFAULT= MPV OPTIONS_GROUP= PLAYER OPTIONS_GROUP_PLAYER= MPLAYER MPV @@ -350,101 +409,164 @@ MPV_DESC= mpv media player support MPLAYER_RUN_DEPENDS= mplayer:multimedia/mplayer MPV_RUN_DEPENDS= mpv:multimedia/mpv -NLS_USES= gettext - # Should contain the most recent commit that reflects ${DISTVERSION} and must # be exactly 8 digits otherwise the check for newer versions won't work as # expected. -_MY_BUILDHASH= 84dcaa86 - -.include +_MY_BUILDHASH= b2b3275f +# Path of the local bazel repositories +_MY_LOCALREPO= ${WRKSRC}/local_repos +# Path of cache that is used by www/yarn +_MY_YARNCACHE= ${WRKDIR}/.yarn -.if ${PYTHON_REL} < 30800 -_PY_SONAME= .cpython-${PYTHON_SUFFIX}m -.else -_PY_SONAME= ${PYTHON_EXT_SUFFIX} -.endif - -# Place the translation files to the appropriate directories post-extract: - @${RLN} ${WRKSRC_i18ncore} ${WRKSRC}/rslib/ftl/repo - @${RLN} ${WRKSRC_i18nfluent} ${WRKSRC}/qt/ftl/repo - @${RLN} ${WRKSRC_i18ndesktop} ${WRKSRC}/qt/po/repo + # Create a configuration file for bazel + @${ECHO_CMD} "startup --batch" > ${WRKSRC}/user.bazelrc + # Create local repositories which are used by bazel + @${MKDIR} ${_MY_LOCALREPO} \ + ${_MY_LOCALREPO}/local_node/node/bin \ + ${_MY_LOCALREPO}/local_node/node/lib \ + ${_MY_LOCALREPO}/local_node/yarn/bin \ + ${_MY_LOCALREPO}/protoc_bin_freebsd/bin \ + ${_MY_LOCALREPO}/pyqt5 \ + ${_MY_LOCALREPO}/rust_output/fluent_proto \ + ${_MY_LOCALREPO}/rust_output/librsbridge + # Create empty WORKSPACE files in the top directory of each local + # repository + @${TOUCH} ${_MY_LOCALREPO}/local_node/WORKSPACE \ + ${_MY_LOCALREPO}/protoc_bin_freebsd/WORKSPACE \ + ${_MY_LOCALREPO}/pyqt5/WORKSPACE \ + ${_MY_LOCALREPO}/rust_output/WORKSPACE + # Copy the bazel rules for NodeJS to the custom local repository as + # they need some patching + @${CP} -r ${WRKSRC_bzlrnodejs} ${_MY_LOCALREPO}/rules_nodejs + # Link the remaining bazel rules into the custom local repository as + # they don't need to be patched +.for _dir in bzlskylib bzlrcc bzlrjava bzlrpip bzlrproto bzlrpython bzlrrust bzlrsass bzlrsvelte ftlextra ftlrslib + @${RLN} ${WRKSRC_${_dir}} ${_MY_LOCALREPO}/${_dir:S/bzlr/rules_/} +.endfor + # Copy custom BUILD.bazel files to the local repositories + @${CP} ${FILESDIR}/bazel/BUILD.bazel-local_node \ + ${_MY_LOCALREPO}/local_node/BUILD.bazel + @${CP} ${FILESDIR}/bazel/BUILD.bazel-protoc_bin_freebsd \ + ${_MY_LOCALREPO}/protoc_bin_freebsd/BUILD.bazel + @${CP} ${FILESDIR}/bazel/BUILD.bazel-pyqt5 \ + ${_MY_LOCALREPO}/pyqt5/BUILD.bazel + @${CP} ${FILESDIR}/bazel/BUILD.bazel-rust_output-fluent_proto \ + ${_MY_LOCALREPO}/rust_output/fluent_proto/BUILD.bazel + @${CP} ${FILESDIR}/bazel/BUILD.bazel-rust_output-librsbridge \ + ${_MY_LOCALREPO}/rust_output/librsbridge/BUILD.bazel + @${CP} ${FILESDIR}/bazel/BUILD.bazel-i18n ${WRKSRC_ftlrslib}/BUILD.bazel + @${CP} ${FILESDIR}/bazel/BUILD.bazel-i18n ${WRKSRC_ftlextra}/BUILD.bazel + # Move some files out of the way as they will be replaced by custom copies. + @${MV} ${WRKSRC}/repos.bzl ${WRKSRC}/repos.bzl.dist + @${MV} ${WRKSRC}/pip/pyqt5/defs.bzl ${WRKSRC}/pip/pyqt5/defs.bzl.dist + @${MV} ${WRKSRC}/pylib/rsbridge/BUILD.bazel ${WRKSRC}/pylib/rsbridge/BUILD.bazel.dist + @${MV} ${WRKSRC}/rslib/BUILD.bazel ${WRKSRC}/rslib/BUILD.bazel.dist + # Required for a successful Rust compilation + @${MV} ${WRKSRC}/Cargo.lock ${WRKSRC}/Cargo.lock.dist + # Copy the replacement files + @${CP} ${FILESDIR}/bazel/repos.bzl ${WRKSRC}/ + @${CP} ${FILESDIR}/bazel/pyqt5.bzl ${WRKSRC}/pip/pyqt5/defs.bzl + @${CP} ${FILESDIR}/bazel/BUILD.bazel-pylib-rsbridge \ + ${WRKSRC}/pylib/rsbridge/BUILD.bazel + @${CP} ${FILESDIR}/bazel/BUILD.bazel-rslib \ + ${WRKSRC}/rslib/BUILD.bazel post-patch: - # Add trailing directory names to cargo repositories - @${REINPLACE_CMD} -Ee '/^fluent =/ s|(${WRKSRC_fluent})|\1/fluent|; \ - /^intl-memoizer =/ s|(${WRKSRC_fluent})|\1/intl-memoizer|' ${WRKSRC}/rslib/Cargo.toml - @${REINPLACE_CMD} -e 's|%%DATADIR%%|${DATADIR}|' ${WRKSRC}/qt/runanki - @${REINPLACE_CMD} -e 's|%%MAKE_CMD%%|${MAKE_CMD}|' ${WRKSRC}/qt/Makefile - @${REINPLACE_CMD} -e 's|%%UNZIP_NATIVE_CMD%%|${UNZIP_NATIVE_CMD}|' ${WRKSRC}/rspy/Makefile - -post-patch-NLS-on: - @${REINPLACE_CMD} -e 's|### NLS ###||' ${WRKSRC}/qt/Makefile + @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|' \ + ${_MY_LOCALREPO}/rules_nodejs/internal/node/node_patches.js + @${REINPLACE_CMD} -e 's|\@PREFIX\@|${PREFIX}|' \ + ${WRKSRC}/qt/tools/runanki.system.in + @${REINPLACE_CMD} -e 's|%%_MY_BUILDHASH%%|${_MY_BUILDHASH}|' \ + ${WRKSRC}/scripts/status.sh + @${REINPLACE_CMD} -e 's|%%_MY_LOCALREPO%%|${_MY_LOCALREPO}|g' \ + ${WRKSRC}/repos.bzl ${WRKSRC}/protobuf.bzl + @${REINPLACE_CMD} -e 's|%%_MY_YARNCACHE%%|${_MY_YARNCACHE}|' \ + ${_MY_LOCALREPO}/rules_nodejs/internal/npm_install/npm_install.bzl -# Although PYTHON_FILE is set to ${PYTHON_CMD} via MAKE_ARGS to make the -# compilation of the pyo3 crate possible there are also hardcoded "python" -# occurences in too many places. pre-configure: - ${MKDIR} ${WRKDIR}/.bin && ${LN} -s ${PYTHON_CMD} ${WRKDIR}/.bin/python + # Link the binaries of Node, Protobuf and Yarn into the local bazel + # repositories to provide them during build. + ${LN} -s ${LOCALBASE}/bin/protoc-gen-mypy ${WRKSRC}/pylib/tools/protoc-gen-mypy + ${LN} -s ${LOCALBASE}/bin/node ${_MY_LOCALREPO}/local_node/node/bin/node + ${LN} -s ${LOCALBASE}/bin/yarn.js ${_MY_LOCALREPO}/local_node/yarn/bin/yarn.js + ${LN} -s ${LOCALBASE}/bin/protoc ${_MY_LOCALREPO}/protoc_bin_freebsd/bin/protoc # Overview of the build process # +# Steps 1 and 2 are built separately from the bazel build process. +# # 1. rslib (Rust library, implictly built by step 2) -# `-> produces ${WRKSRC}/proto/fluent.proto -# 2. rspy (Rust/Python bridge) which is built by devel/py-maturin -# `-> produces ${WRKSRC}/pylib/ankirspy.cpython-${PYTHON_SUFFIX}m.so -# 3. pylib (Python-only library) -# 4. ts (builds ${WRKSRC}/ts/node_modules/.bin/{tsc,sass}) -# 5. qt (Python library with Qt5 bindings) +# `-> produces ${_MY_LOCALREPO}/rust_output/fluent.proto +# 2. pylib/rsbridge (Rust/Python bridge) +# `-> produces ${_MY_LOCALREPO}/rust_output/librsbridge.so +# 3. The remaining components (Python, Qt5 and JS) are built by bazel pre-build: - # Set the buildhash that is used at various places during build. - ${ECHO_CMD} ${_MY_BUILDHASH} > ${WRKSRC}/meta/buildhash + # Generate buildinfo.txt which is used via BUILDINFO in ${CARGO_ENV} during + # compilation. + ${ECHO_CMD} -e "STABLE_VERSION ${DISTVERSION}\nSTABLE_BUILDHASH ${_MY_BUILDHASH}" >> ${_MY_LOCALREPO}/rust_output/buildinfo.txt + ${CARGO_CARGO_RUN} build \ + --manifest-path ${CARGO_CARGOTOML} \ + --verbose \ + ${CARGO_BUILD_ARGS} + # These files are required for the remaining build process via bazel so copy + # them the local repository. + ${CP} `${FIND} ${CARGO_TARGET_DIR} -name "fluent.proto"` ${_MY_LOCALREPO}/rust_output/fluent_proto/ + ${CP} `${FIND} ${CARGO_TARGET_DIR} -name "librsbridge.so"` ${_MY_LOCALREPO}/rust_output/librsbridge/ + +do-build: + cd ${WRKSRC} && \ + bazel --output_user_root="${WRKDIR}/.bazel" build \ + --action_env=PYTHON_SITE_PACKAGES="${PYTHON_SITELIBDIR}" \ + --action_env=PYTHON_SYS_EXECUTABLE="${PYTHON_CMD}" \ + --compilation_mode opt \ + --subcommands \ + dist post-build: + ${TAR} -xf `${FIND} ${WRKDIR}/.bazel -name "dist.tar"` -C ${WRKSRC} + cd ${WRKSRC}/bazel-dist && \ + ${UNZIP_NATIVE_CMD} anki-${DISTVERSION}-*.whl && \ + ${UNZIP_NATIVE_CMD} aqt-${DISTVERSION}-*.whl # Compile Anki's Python libary (pylib) and Qt5 library (aqt) to prepare # them for installation - ${PYTHON_CMD} -m compileall ${WRKSRC}/pylib/anki - ${PYTHON_CMD} -O -m compileall ${WRKSRC}/pylib/anki - ${PYTHON_CMD} -m compileall ${WRKSRC}/qt/aqt - ${PYTHON_CMD} -O -m compileall ${WRKSRC}/qt/aqt + ${PYTHON_CMD} -m compileall ${WRKSRC}/bazel-dist/anki + ${PYTHON_CMD} -O -m compileall ${WRKSRC}/bazel-dist/anki + ${PYTHON_CMD} -m compileall ${WRKSRC}/bazel-dist/aqt + ${PYTHON_CMD} -O -m compileall ${WRKSRC}/bazel-dist/aqt do-install: ${MKDIR} ${STAGEDIR}${DATADIR}/anki \ ${STAGEDIR}${DATADIR}/aqt \ - ${STAGEDIR}${DATADIR}/aqt_data \ ${STAGEDIR}${PREFIX}/share/pixmaps \ ${STAGEDIR}${PREFIX}/share/applications - cd ${WRKSRC}/pylib \ + cd ${WRKSRC}/bazel-dist/ \ && ${COPYTREE_SHARE} anki ${STAGEDIR}${DATADIR} "! -name .gitignore" \ - && ${INSTALL_LIB} *.so ${STAGEDIR}${DATADIR} - cd ${WRKSRC}/qt \ - && ${COPYTREE_SHARE} aqt ${STAGEDIR}${DATADIR} "! -name .gitignore" \ - && ${COPYTREE_SHARE} aqt_data ${STAGEDIR}${DATADIR} "! -name .gitignore" \ + && ${COPYTREE_SHARE} aqt ${STAGEDIR}${DATADIR} "! -name .gitignore" + cd ${WRKSRC}/qt/linux \ && ${INSTALL_DATA} anki.xpm anki.png ${STAGEDIR}${PREFIX}/share/pixmaps \ && ${INSTALL_DATA} anki.desktop ${STAGEDIR}${PREFIX}/share/applications \ - && ${INSTALL_MAN} anki.1 ${STAGEDIR}${MANPREFIX}/man/man1 \ - && ${INSTALL_SCRIPT} runanki ${STAGEDIR}${PREFIX}/bin/anki + && ${INSTALL_MAN} anki.1 ${STAGEDIR}${MANPREFIX}/man/man1 + cd ${WRKSRC}/qt/tools \ + && ${INSTALL_SCRIPT} runanki.system.in ${STAGEDIR}${PREFIX}/bin/anki + ${STRIP_CMD} ${STAGEDIR}${DATADIR}/anki/_backend/rsbridge.so -# Helper target to make the generation of the npm cache easier -# -# The command "npx pbjs" tries to install additional dependencies for the CLI -# component of the "protobufjs" package and will fail during build because the -# environment variable "npm_config_offline" is set to "true" via ${MAKE_ENV}. -# -# Thus "npx pbjs" is issued after "npm install" to get the remaining -# dependencies to populate the cache with them. -make-npm-cache: +# Helper target to make the generation of the yarn cache easier +make-yarn-cache: # Run "make extract" before executing this target - @cd ${WRKDIR} && ${RM} -r .npm + @${RM} -r ${_MY_YARNCACHE} @cd ${WRKSRC}/ts \ - && ${SETENV} HOME=${WRKDIR} npm install \ - && ${TOUCH} in.proto \ - && ${SETENV} HOME=${WRKDIR} npx --cache ${WRKDIR}/.npm pbjs -q -t static-module in.proto -o out.proto - @cd ${WRKDIR}/.npm \ - && ${RM} -r _locks anonymous-cli-metrics.json + && ${LOCALBASE}/bin/yarn --cache-folder ${_MY_YARNCACHE} install + @cd ${WRKSRC_bzlrnodejs}/packages/labs/grpc_web/ \ + && ${LOCALBASE}/bin/yarn --cache-folder ${_MY_YARNCACHE} install + @cd ${WRKSRC_bzlrnodejs}/packages/labs/protobufjs/ \ + && ${LOCALBASE}/bin/yarn --cache-folder ${_MY_YARNCACHE} install + @cd ${WRKSRC_bzlrsass}/sass \ + && ${LOCALBASE}/bin/yarn --cache-folder ${_MY_YARNCACHE} install + @cd ${WRKSRC_bzlrsvelte}/internal \ + && ${LOCALBASE}/bin/yarn --cache-folder ${_MY_YARNCACHE} install @cd ${WRKDIR} \ - && ${TAR} -czf ${PORTNAME}-npm-cache-${DISTVERSION}${EXTRACT_SUFX} .npm \ - && ${ECHO} "Please upload the file ${WRKDIR}/${PORTNAME}-npm-cache-${DISTVERSION}${EXTRACT_SUFX}" + && ${TAR} -czf ${PORTNAME}-yarn-cache-${DISTVERSION}${EXTRACT_SUFX} .yarn \ + && ${ECHO} "Please upload the file ${WRKDIR}/${PORTNAME}-yarn-cache-${DISTVERSION}${EXTRACT_SUFX}" -.include +.include diff --git a/games/anki/distinfo b/games/anki/distinfo index 95be963edb9d..a1520a3a8641 100644 --- a/games/anki/distinfo +++ b/games/anki/distinfo @@ -1,521 +1,643 @@ -TIMESTAMP = 1624129001 -SHA256 (python/anki-npm-cache-2.1.35.tar.gz) = 2168a9374715882affbaaa78d2775bc365f23cab6ecf3e74154936e128d01246 -SIZE (python/anki-npm-cache-2.1.35.tar.gz) = 51533006 -SHA256 (python/rust/crates/addr2line-0.13.0.tar.gz) = 1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072 -SIZE (python/rust/crates/addr2line-0.13.0.tar.gz) = 29996 -SHA256 (python/rust/crates/adler-0.2.3.tar.gz) = ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e -SIZE (python/rust/crates/adler-0.2.3.tar.gz) = 12168 -SHA256 (python/rust/crates/aho-corasick-0.7.14.tar.gz) = b476ce7103678b0c6d3d395dbbae31d48ff910bd28be979ba5d48c6351131d0d -SIZE (python/rust/crates/aho-corasick-0.7.14.tar.gz) = 113042 -SHA256 (python/rust/crates/anyhow-1.0.33.tar.gz) = a1fd36ffbb1fb7c834eac128ea8d0e310c5aeb635548f9d58861e1308d46e71c -SIZE (python/rust/crates/anyhow-1.0.33.tar.gz) = 28540 -SHA256 (python/rust/crates/arc-swap-0.4.7.tar.gz) = 4d25d88fd6b8041580a654f9d0c581a047baee2b3efee13275f2fc392fc75034 -SIZE (python/rust/crates/arc-swap-0.4.7.tar.gz) = 48625 -SHA256 (python/rust/crates/arrayref-0.3.6.tar.gz) = a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544 -SIZE (python/rust/crates/arrayref-0.3.6.tar.gz) = 10035 -SHA256 (python/rust/crates/arrayvec-0.4.12.tar.gz) = cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9 -SIZE (python/rust/crates/arrayvec-0.4.12.tar.gz) = 26551 -SHA256 (python/rust/crates/arrayvec-0.5.1.tar.gz) = cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8 -SIZE (python/rust/crates/arrayvec-0.5.1.tar.gz) = 26816 -SHA256 (python/rust/crates/askama-0.10.3.tar.gz) = 70a6e7ebd44d0047fd48206c83c5cd3214acc7b9d87f001da170145c47ef7d12 -SIZE (python/rust/crates/askama-0.10.3.tar.gz) = 7988 -SHA256 (python/rust/crates/askama_derive-0.10.3.tar.gz) = e1d7169690c4f56343dcd821ab834972a22570a2662a19a84fd7775d5e1c3881 -SIZE (python/rust/crates/askama_derive-0.10.3.tar.gz) = 6834 -SHA256 (python/rust/crates/askama_escape-0.10.1.tar.gz) = 90c108c1a94380c89d2215d0ac54ce09796823cca0fd91b299cfff3b33e346fb -SIZE (python/rust/crates/askama_escape-0.10.1.tar.gz) = 8535 -SHA256 (python/rust/crates/askama_shared-0.10.4.tar.gz) = 62fc272363345c8cdc030e4c259d9d028237f8b057dc9bb327772a257bde6bb5 -SIZE (python/rust/crates/askama_shared-0.10.4.tar.gz) = 29058 -SHA256 (python/rust/crates/async-compression-0.3.5.tar.gz) = 9021768bcce77296b64648cc7a7460e3df99979b97ed5c925c38d1cc83778d98 -SIZE (python/rust/crates/async-compression-0.3.5.tar.gz) = 39371 -SHA256 (python/rust/crates/atty-0.2.14.tar.gz) = d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8 -SIZE (python/rust/crates/atty-0.2.14.tar.gz) = 5470 -SHA256 (python/rust/crates/autocfg-1.0.1.tar.gz) = cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a -SIZE (python/rust/crates/autocfg-1.0.1.tar.gz) = 12908 -SHA256 (python/rust/crates/backtrace-0.3.53.tar.gz) = 707b586e0e2f247cbde68cdd2c3ce69ea7b7be43e1c5b426e37c9319c4b9838e -SIZE (python/rust/crates/backtrace-0.3.53.tar.gz) = 71892 -SHA256 (python/rust/crates/base64-0.12.3.tar.gz) = 3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff -SIZE (python/rust/crates/base64-0.12.3.tar.gz) = 57545 -SHA256 (python/rust/crates/bitflags-1.2.1.tar.gz) = cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693 -SIZE (python/rust/crates/bitflags-1.2.1.tar.gz) = 16745 -SHA256 (python/rust/crates/blake2b_simd-0.5.10.tar.gz) = d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a -SIZE (python/rust/crates/blake2b_simd-0.5.10.tar.gz) = 34093 -SHA256 (python/rust/crates/blake3-0.3.7.tar.gz) = e9ff35b701f3914bdb8fad3368d822c766ef2858b2583198e41639b936f09d3f -SIZE (python/rust/crates/blake3-0.3.7.tar.gz) = 155136 -SHA256 (python/rust/crates/bumpalo-3.4.0.tar.gz) = 2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820 -SIZE (python/rust/crates/bumpalo-3.4.0.tar.gz) = 129102 -SHA256 (python/rust/crates/byteorder-1.3.4.tar.gz) = 08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de -SIZE (python/rust/crates/byteorder-1.3.4.tar.gz) = 21943 -SHA256 (python/rust/crates/bytes-0.4.12.tar.gz) = 206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c -SIZE (python/rust/crates/bytes-0.4.12.tar.gz) = 46361 -SHA256 (python/rust/crates/bytes-0.5.6.tar.gz) = 0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38 -SIZE (python/rust/crates/bytes-0.5.6.tar.gz) = 46291 -SHA256 (python/rust/crates/cc-1.0.61.tar.gz) = ed67cbde08356238e75fc4656be4749481eeffb09e19f320a25237d5221c985d -SIZE (python/rust/crates/cc-1.0.61.tar.gz) = 53454 -SHA256 (python/rust/crates/cfg-if-0.1.10.tar.gz) = 4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822 -SIZE (python/rust/crates/cfg-if-0.1.10.tar.gz) = 7933 -SHA256 (python/rust/crates/cfg-if-1.0.0.tar.gz) = baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd -SIZE (python/rust/crates/cfg-if-1.0.0.tar.gz) = 7934 -SHA256 (python/rust/crates/chrono-0.4.19.tar.gz) = 670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73 -SIZE (python/rust/crates/chrono-0.4.19.tar.gz) = 155663 -SHA256 (python/rust/crates/cloudabi-0.1.0.tar.gz) = 4344512281c643ae7638bbabc3af17a11307803ec8f0fcad9fae512a8bf36467 -SIZE (python/rust/crates/cloudabi-0.1.0.tar.gz) = 22687 -SHA256 (python/rust/crates/constant_time_eq-0.1.5.tar.gz) = 245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc -SIZE (python/rust/crates/constant_time_eq-0.1.5.tar.gz) = 4936 -SHA256 (python/rust/crates/core-foundation-0.7.0.tar.gz) = 57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171 -SIZE (python/rust/crates/core-foundation-0.7.0.tar.gz) = 25384 -SHA256 (python/rust/crates/core-foundation-sys-0.7.0.tar.gz) = b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac -SIZE (python/rust/crates/core-foundation-sys-0.7.0.tar.gz) = 17033 -SHA256 (python/rust/crates/crc32fast-1.2.1.tar.gz) = 81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a -SIZE (python/rust/crates/crc32fast-1.2.1.tar.gz) = 38172 -SHA256 (python/rust/crates/crossbeam-channel-0.4.4.tar.gz) = b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87 -SIZE (python/rust/crates/crossbeam-channel-0.4.4.tar.gz) = 86868 -SHA256 (python/rust/crates/crossbeam-utils-0.7.2.tar.gz) = c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8 -SIZE (python/rust/crates/crossbeam-utils-0.7.2.tar.gz) = 34338 -SHA256 (python/rust/crates/crypto-mac-0.8.0.tar.gz) = b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab -SIZE (python/rust/crates/crypto-mac-0.8.0.tar.gz) = 9115 -SHA256 (python/rust/crates/ctor-0.1.16.tar.gz) = 7fbaabec2c953050352311293be5c6aba8e141ba19d6811862b232d6fd020484 -SIZE (python/rust/crates/ctor-0.1.16.tar.gz) = 4770 -SHA256 (python/rust/crates/derivative-2.1.1.tar.gz) = cb582b60359da160a9477ee80f15c8d784c477e69c217ef2cdd4169c24ea380f -SIZE (python/rust/crates/derivative-2.1.1.tar.gz) = 45571 -SHA256 (python/rust/crates/digest-0.9.0.tar.gz) = d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066 -SIZE (python/rust/crates/digest-0.9.0.tar.gz) = 13247 -SHA256 (python/rust/crates/dirs-2.0.2.tar.gz) = 13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3 *** 2841 LINES SKIPPED ***