@@ -9,7 +9,10 @@ use std::{
9
9
str:: FromStr ,
10
10
} ;
11
11
12
- const PY3_MIN_MINOR : u8 = 5 ;
12
+ /// Minimum required Python version.
13
+ const PY3_MIN_MINOR : u8 = 6 ;
14
+ /// Maximum Python version that can be used as minimum required Python version with abi3.
15
+ const ABI3_MAX_MIN_MINOR : u8 = 9 ;
13
16
const CFG_KEY : & str = "py_sys_config" ;
14
17
15
18
type Result < T > = std:: result:: Result < T , Box < dyn std:: error:: Error > > ;
@@ -770,12 +773,24 @@ fn configure(interpreter_config: &InterpreterConfig) -> Result<String> {
770
773
bail ! ( "Python 2 is not supported" ) ;
771
774
}
772
775
773
- if env:: var_os ( "CARGO_FEATURE_ABI3" ) . is_some ( ) {
774
- println ! ( "cargo:rustc-cfg=Py_LIMITED_API" ) ;
776
+ fn get_abi3_min_python ( ) -> Option < u8 > {
777
+ for i in PY3_MIN_MINOR ..=ABI3_MAX_MIN_MINOR {
778
+ if env:: var_os ( format ! ( "CARGO_FEATURE_ABI{}" , i) ) . is_some ( ) {
779
+ return Some ( i) ;
780
+ }
781
+ }
782
+ None
775
783
}
776
784
777
- if let Some ( minor) = interpreter_config. version . minor {
778
- for i in 6 ..=minor {
785
+ let minor = if env:: var_os ( "CARGO_FEATURE_ABI3" ) . is_some ( ) {
786
+ println ! ( "cargo:rustc-cfg=Py_LIMITED_API" ) ;
787
+ get_abi3_min_python ( ) . or ( interpreter_config. version . minor )
788
+ } else {
789
+ interpreter_config. version . minor
790
+ } ;
791
+
792
+ if let Some ( minor) = minor {
793
+ for i in PY3_MIN_MINOR ..=minor {
779
794
println ! ( "cargo:rustc-cfg=Py_3_{}" , i) ;
780
795
flags += format ! ( "CFG_Py_3_{}," , i) . as_ref ( ) ;
781
796
}
0 commit comments