From 514d09c5d1b40486d17016c439b068e5c87b22c1 Mon Sep 17 00:00:00 2001 From: David Hewitt Date: Tue, 26 Nov 2024 20:29:31 +0000 Subject: [PATCH] allow `-i 3.13t` --- src/build_options.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/build_options.rs b/src/build_options.rs index fd136cbc2..30b099eb7 100644 --- a/src/build_options.rs +++ b/src/build_options.rs @@ -1266,12 +1266,7 @@ fn find_interpreter_in_sysconfig( ) } else if let Some(ver) = python.strip_prefix("python") { // Also accept things like `python3.13t` for free-threaded python - let (ver, abiflags) = - if let Some(ver) = ver.strip_prefix('-').unwrap_or(ver).strip_suffix('t') { - (ver, "t") - } else { - (ver, "") - }; + let (ver, abiflags) = maybe_free_threaded(ver.strip_prefix('-').unwrap_or(ver)); (InterpreterKind::CPython, ver, abiflags) } else if python .chars() @@ -1280,7 +1275,8 @@ fn find_interpreter_in_sysconfig( .unwrap_or(false) { // Eg: -i 3.9 without interpreter kind, assume it's CPython - (InterpreterKind::CPython, &*python, "") + let (ver, abiflags) = maybe_free_threaded(&python); + (InterpreterKind::CPython, ver, abiflags) } else { // if interpreter not known if std::path::Path::new(&python).is_file() { @@ -1319,6 +1315,14 @@ fn find_interpreter_in_sysconfig( Ok(interpreters) } +fn maybe_free_threaded(python_ver: &str) -> (&str, &str) { + if let Some(ver) = python_ver.strip_suffix('t') { + (ver, "t") + } else { + (python_ver, "") + } +} + /// We need to pass the global flags to cargo metadata /// (https://github.com/PyO3/maturin/issues/211 and https://github.com/PyO3/maturin/issues/472), /// but we can't pass all the extra args, as e.g. `--target` isn't supported, so this tries to