mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 06:22:22 -04:00

Closes #3787, and is a step towards #3081 and #4022 This change breaks our PyOxidizer bundling process. While we probably could update it to work with the new venvs & lockfile, my intention is to use this as a base to try out a uv-based packager/installer. Still to do: - move mpv distribution to a wheel - build the new uv-based installer. Some notes about the changes: - Use uv for python download + venv installation - Drop python/requirements* in favour of pyproject files / uv.lock - Bumped to latest Python 3.9 version. The move to 3.13 should be a fairly trivial change when we're ready. - Dropped the old write_wheel.py in favour of uv/hatchling. This has the unfortunate side-effect of dropping leading zeros in our wheels, which we could try hack around in the future. - Switch to Qt 6.7 for the dev repo, as it's the first PyQt version with a Linux/ARM WebEngine wheel. - Unified our macOS deployment target with minimum required for ARM. - Dropped unused fluent python files - Dropped unused python license generation - Dropped helpers to run under Qt 5, as our wheels were already requiring Qt 6 to install.
42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
# Copyright: Ankitects Pty Ltd and contributors
|
|
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
|
|
import os
|
|
import platform
|
|
import sys
|
|
from pathlib import Path
|
|
from typing import Any, Dict
|
|
|
|
from hatchling.builders.hooks.plugin.interface import BuildHookInterface
|
|
|
|
|
|
class CustomBuildHook(BuildHookInterface):
|
|
"""Build hook to include compiled rsbridge from out/pylib."""
|
|
|
|
PLUGIN_NAME = "custom"
|
|
|
|
def initialize(self, version: str, build_data: Dict[str, Any]) -> None:
|
|
"""Initialize the build hook."""
|
|
force_include = build_data.setdefault("force_include", {})
|
|
|
|
# Set platform-specific wheel tag
|
|
if not (platform_tag := os.environ.get("ANKI_WHEEL_TAG")):
|
|
# On Windows, uv invokes this build hook during the initial uv sync,
|
|
# when the tag has not been declared by our build script.
|
|
return
|
|
build_data.setdefault("tag", platform_tag)
|
|
|
|
# Mark as non-pure Python since we include compiled extension
|
|
build_data["pure_python"] = False
|
|
|
|
# Look for generated files in out/pylib/anki
|
|
project_root = Path(self.root).parent
|
|
generated_root = project_root / "out" / "pylib" / "anki"
|
|
|
|
assert generated_root.exists(), "you should build with --wheel"
|
|
for path in generated_root.rglob("*"):
|
|
if path.is_file():
|
|
relative_path = path.relative_to(generated_root)
|
|
# Place files under anki/ in the distribution
|
|
dist_path = "anki" / relative_path
|
|
force_include[str(path)] = str(dist_path)
|