diff options
Diffstat (limited to 'app-misc/anki/files/23.12.1/pseudo-venv.patch')
-rw-r--r-- | app-misc/anki/files/23.12.1/pseudo-venv.patch | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/app-misc/anki/files/23.12.1/pseudo-venv.patch b/app-misc/anki/files/23.12.1/pseudo-venv.patch new file mode 100644 index 000000000000..8c173021a5b7 --- /dev/null +++ b/app-misc/anki/files/23.12.1/pseudo-venv.patch @@ -0,0 +1,127 @@ +This is an adapted patch from the games/anki FreeBSD port. +https://github.com/freebsd/freebsd-ports/blob/109c3d4629b84972e660b689d169ac0761c1a519/games/anki/files/patch-build_configure_src_python.rs +https://github.com/freebsd/freebsd-ports/blob/109c3d4629b84972e660b689d169ac0761c1a519/games/anki/files/patch-build_ninja__gen_src_python.rs + +Use the "PythonEnvironmentStub" function to use a native Python environment +instead of a Python venv. +* Avoid the use of Python's pip (network access). +* Remove the python_binary input for PythonEnvironmentStub since we create the + pseudo venv manually in the ebuild. This saves us from setting an extra + environment variable to prevent network access. + + The python_binary input should really only be added to PythonEnvironment, if + the venv is not set up. +* TODO: add dev-python/mypy-protobuf to tree for fully typed Anki. + +From: Lucio Sauer <watermanpaint@posteo.net> +--- a/build/configure/src/python.rs ++++ b/build/configure/src/python.rs +@@ -13,6 +13,7 @@ use ninja_gen::input::BuildInput; + use ninja_gen::inputs; + use ninja_gen::python::python_format; + use ninja_gen::python::PythonEnvironment; ++use ninja_gen::python::PythonEnvironmentStub; + use ninja_gen::python::PythonLint; + use ninja_gen::python::PythonTypecheck; + use ninja_gen::rsync::RsyncFiles; +@@ -81,6 +82,25 @@ pub fn setup_venv(build: &mut Build) -> Result<()> { + Ok(()) + } + ++pub fn setup_venv_stub(build: &mut Build) -> Result<()> { ++ build.add_action( ++ "pyenv", ++ PythonEnvironmentStub { ++ folder: "pyenv", ++ extra_binary_exports: &[ ++ "mypy", // Required in some parts of the code, but not for build ++ "black", // dito ++ "isort", // dito ++ "pylint", // dito ++ "pytest", // dito ++ "protoc-gen-mypy", ++ ], ++ }, ++ )?; ++ ++ Ok(()) ++} ++ + pub struct GenPythonProto { + pub proto_files: BuildInput, + } +@@ -88,9 +108,7 @@ pub struct GenPythonProto { + impl BuildAction for GenPythonProto { + fn command(&self) -> &str { + "$protoc $ +- --plugin=protoc-gen-mypy=$protoc-gen-mypy $ + --python_out=$builddir/pylib $ +- --mypy_out=$builddir/pylib $ + -Iproto $in" + } + +@@ -108,7 +126,6 @@ impl BuildAction for GenPythonProto { + .collect(); + build.add_inputs("in", &self.proto_files); + build.add_inputs("protoc", inputs![":protoc_binary"]); +- build.add_inputs("protoc-gen-mypy", inputs![":pyenv:protoc-gen-mypy"]); + build.add_outputs("", python_outputs); + } + +@@ -254,7 +271,6 @@ impl BuildAction for Sphinx { + + fn files(&mut self, build: &mut impl FilesHandle) { + build.add_inputs("python", inputs![":pyenv:bin"]); +- build.add_inputs("pip", inputs![":pyenv:pip"]); + build.add_inputs("", &self.deps); + build.add_output_stamp("python/sphinx/stamp"); + } +--- a/build/ninja_gen/src/python.rs ++++ b/build/ninja_gen/src/python.rs +@@ -86,6 +86,11 @@ pub struct PythonEnvironment { + pub extra_binary_exports: &'static [&'static str], + } + ++pub struct PythonEnvironmentStub { ++ pub folder: &'static str, ++ pub extra_binary_exports: &'static [&'static str], ++} ++ + impl BuildAction for PythonEnvironment { + fn command(&self) -> &str { + "$runner pyenv $python_binary $builddir/$pyenv_folder $system_pkgs $base_requirements $requirements" +@@ -118,6 +123,34 @@ impl BuildAction for PythonEnvironment { + } + } + ++impl BuildAction for PythonEnvironmentStub { ++ fn command(&self) -> &str { ++ "echo Running PythonEnvironmentStub..." ++ } ++ ++ fn files(&mut self, build: &mut impl crate::build::FilesHandle) { ++ let bin_path = |binary: &str| -> Vec<String> { ++ let folder = self.folder; ++ let path = if cfg!(windows) { ++ format!("{folder}/scripts/{binary}.exe") ++ } else { ++ format!("{folder}/bin/{binary}") ++ }; ++ vec![path] ++ }; ++ ++ build.add_variable("pyenv_folder", self.folder); ++ build.add_outputs_ext("bin", bin_path("python"), true); ++ for binary in self.extra_binary_exports { ++ build.add_outputs_ext(*binary, bin_path(binary), true); ++ } ++ } ++ ++ fn check_output_timestamps(&self) -> bool { ++ true ++ } ++} ++ + pub struct PythonTypecheck { + pub folders: &'static [&'static str], + pub deps: BuildInput, |