From ff59b33c54ac64ed47440ff8faad632063fc05ce Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Mon, 23 Jan 2023 17:22:48 +1000 Subject: [PATCH] Use a ninja variable for Python binary If we're going to allow for swapping out other dependencies with local versions, we don't want to have to be passing them around everywhere they are used. --- build/configure/src/bundle.rs | 12 +++++------- build/configure/src/main.rs | 6 +++--- build/configure/src/python.rs | 11 +++++------ build/ninja_gen/src/python.rs | 7 +++---- 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/build/configure/src/bundle.rs b/build/configure/src/bundle.rs index e4226f62c..10a2cf29a 100644 --- a/build/configure/src/bundle.rs +++ b/build/configure/src/bundle.rs @@ -43,9 +43,9 @@ impl DistKind { } } -pub fn build_bundle(build: &mut Build, python_binary: &BuildInput) -> Result<()> { +pub fn build_bundle(build: &mut Build) -> Result<()> { // install into venv - setup_primary_venv(build, python_binary)?; + setup_primary_venv(build)?; install_anki_wheels(build)?; // bundle venv into output binary + extra_files @@ -60,7 +60,7 @@ pub fn build_bundle(build: &mut Build, python_binary: &BuildInput) -> Result<()> // repeat for Qt5 if !targetting_macos_arm() { if !cfg!(target_os = "macos") { - setup_qt5_venv(build, python_binary)?; + setup_qt5_venv(build)?; } build_dist_folder(build, DistKind::Alternate)?; } @@ -171,7 +171,7 @@ const QT5_VENV: Venv = Venv { path_without_builddir: "bundle/pyenv-qt5", }; -fn setup_primary_venv(build: &mut Build, python_binary: &BuildInput) -> Result<()> { +fn setup_primary_venv(build: &mut Build) -> Result<()> { let mut qt6_reqs = inputs![ "python/requirements.bundle.txt", if cfg!(target_os = "macos") { @@ -189,14 +189,13 @@ fn setup_primary_venv(build: &mut Build, python_binary: &BuildInput) -> Result<( folder: PRIMARY_VENV.path_without_builddir, base_requirements_txt: "python/requirements.base.txt".into(), requirements_txt: qt6_reqs, - python_binary, extra_binary_exports: &[], }, )?; Ok(()) } -fn setup_qt5_venv(build: &mut Build, python_binary: &BuildInput) -> Result<()> { +fn setup_qt5_venv(build: &mut Build) -> Result<()> { let qt5_reqs = inputs![ "python/requirements.base.txt", if cfg!(target_os = "macos") { @@ -211,7 +210,6 @@ fn setup_qt5_venv(build: &mut Build, python_binary: &BuildInput) -> Result<()> { folder: QT5_VENV.path_without_builddir, base_requirements_txt: "python/requirements.base.txt".into(), requirements_txt: qt5_reqs, - python_binary, extra_binary_exports: &[], }, ) diff --git a/build/configure/src/main.rs b/build/configure/src/main.rs index 58956169c..5a02bfed2 100644 --- a/build/configure/src/main.rs +++ b/build/configure/src/main.rs @@ -35,14 +35,14 @@ fn main() -> Result<()> { let mut build = Build::new()?; let build = &mut build; - let python_binary = setup_python(build)?; - setup_venv(build, &python_binary)?; + setup_python(build)?; + setup_venv(build)?; build_rust(build)?; build_pylib(build)?; build_and_check_web(build)?; build_and_check_aqt(build)?; - build_bundle(build, &python_binary)?; + build_bundle(build)?; check_rust(build)?; check_pylib(build)?; diff --git a/build/configure/src/python.rs b/build/configure/src/python.rs index 6dd329b6c..a4acbfac1 100644 --- a/build/configure/src/python.rs +++ b/build/configure/src/python.rs @@ -59,7 +59,7 @@ fn python_archive(platform: Platform) -> OnlineArchive { /// Returns the Python binary, which can be used to create venvs. /// Downloads if missing. -pub fn setup_python(build: &mut Build) -> Result { +pub fn setup_python(build: &mut Build) -> Result<()> { // if changing this, make sure you remove out/pyenv let python_binary = match env::var("PYTHON_BINARY") { Ok(path) => { @@ -81,10 +81,12 @@ pub fn setup_python(build: &mut Build) -> Result { inputs![":extract:python:bin"] } }; - Ok(python_binary) + let python_binary = build.expand_inputs(python_binary); + build.variable("python_binary", &python_binary[0]); + Ok(()) } -pub fn setup_venv(build: &mut Build, python_binary: &BuildInput) -> Result<()> { +pub fn setup_venv(build: &mut Build) -> Result<()> { let requirements_txt = if cfg!(windows) { inputs![ "python/requirements.dev.txt", @@ -109,7 +111,6 @@ pub fn setup_venv(build: &mut Build, python_binary: &BuildInput) -> Result<()> { folder: "pyenv", base_requirements_txt: inputs!["python/requirements.base.txt"], requirements_txt, - python_binary, extra_binary_exports: &[ "pip-compile", "pip-sync", @@ -135,7 +136,6 @@ pub fn setup_venv(build: &mut Build, python_binary: &BuildInput) -> Result<()> { folder: "pyenv-qt5.15", base_requirements_txt: inputs!["python/requirements.base.txt"], requirements_txt: inputs![&reqs_qt5, "python/requirements.qt5_15.txt"], - python_binary, extra_binary_exports: &[], }, )?; @@ -145,7 +145,6 @@ pub fn setup_venv(build: &mut Build, python_binary: &BuildInput) -> Result<()> { folder: "pyenv-qt5.14", base_requirements_txt: inputs!["python/requirements.base.txt"], requirements_txt: inputs![reqs_qt5, "python/requirements.qt5_14.txt"], - python_binary, extra_binary_exports: &[], }, )?; diff --git a/build/ninja_gen/src/python.rs b/build/ninja_gen/src/python.rs index 2a367b46b..c999d5112 100644 --- a/build/ninja_gen/src/python.rs +++ b/build/ninja_gen/src/python.rs @@ -8,15 +8,14 @@ use crate::inputs; use crate::Build; use crate::Result; -pub struct PythonEnvironment<'a> { +pub struct PythonEnvironment { pub folder: &'static str, pub base_requirements_txt: BuildInput, pub requirements_txt: BuildInput, - pub python_binary: &'a BuildInput, pub extra_binary_exports: &'static [&'static str], } -impl BuildAction for PythonEnvironment<'_> { +impl BuildAction for PythonEnvironment { fn command(&self) -> &str { "$runner pyenv $python_binary $builddir/$pyenv_folder $system_pkgs $base_requirements $requirements" } @@ -32,7 +31,7 @@ impl BuildAction for PythonEnvironment<'_> { vec![path] }; - build.add_inputs("python_binary", self.python_binary); + build.add_inputs("python_binary", inputs!["$python_binary"]); build.add_inputs("base_requirements", &self.base_requirements_txt); build.add_inputs("requirements", &self.requirements_txt); build.add_variable("pyenv_folder", self.folder);