@@ -1040,27 +1040,31 @@ impl FromStr for BuildFlag {
1040
1040
pub struct BuildFlags ( pub HashSet < BuildFlag > ) ;
1041
1041
1042
1042
impl BuildFlags {
1043
- const ALL : [ BuildFlag ; 4 ] = [
1044
- BuildFlag :: Py_DEBUG ,
1045
- BuildFlag :: Py_REF_DEBUG ,
1046
- BuildFlag :: Py_TRACE_REFS ,
1047
- BuildFlag :: COUNT_ALLOCS ,
1048
- ] ;
1043
+ fn iter_all ( ) -> impl Iterator < Item = BuildFlag > {
1044
+ [
1045
+ BuildFlag :: Py_DEBUG ,
1046
+ BuildFlag :: Py_REF_DEBUG ,
1047
+ BuildFlag :: Py_TRACE_REFS ,
1048
+ BuildFlag :: COUNT_ALLOCS ,
1049
+ // done this way for the 0.22 branch because adding Py_GIL_DISABLED as
1050
+ // an enum member is a breaking change
1051
+ BuildFlag :: Other ( "Py_GIL_DISABLED" . to_string ( ) ) ,
1052
+ ]
1053
+ . into_iter ( )
1054
+ }
1049
1055
1050
1056
pub fn new ( ) -> Self {
1051
1057
BuildFlags ( HashSet :: new ( ) )
1052
1058
}
1053
1059
1054
1060
fn from_sysconfigdata ( config_map : & Sysconfigdata ) -> Self {
1055
1061
Self (
1056
- BuildFlags :: ALL
1057
- . iter ( )
1062
+ BuildFlags :: iter_all ( )
1058
1063
. filter ( |flag| {
1059
1064
config_map
1060
1065
. get_value ( flag. to_string ( ) )
1061
1066
. map_or ( false , |value| value == "1" )
1062
1067
} )
1063
- . cloned ( )
1064
1068
. collect ( ) ,
1065
1069
)
1066
1070
. fixup ( )
@@ -1079,20 +1083,19 @@ impl BuildFlags {
1079
1083
let mut script = String :: from ( "import sysconfig\n " ) ;
1080
1084
script. push_str ( "config = sysconfig.get_config_vars()\n " ) ;
1081
1085
1082
- for k in & BuildFlags :: ALL {
1086
+ for k in BuildFlags :: iter_all ( ) {
1083
1087
use std:: fmt:: Write ;
1084
1088
writeln ! ( & mut script, "print(config.get('{}', '0'))" , k) . unwrap ( ) ;
1085
1089
}
1086
1090
1087
1091
let stdout = run_python_script ( interpreter. as_ref ( ) , & script) ?;
1088
1092
let split_stdout: Vec < & str > = stdout. trim_end ( ) . lines ( ) . collect ( ) ;
1089
1093
ensure ! (
1090
- split_stdout. len( ) == BuildFlags :: ALL . len ( ) ,
1094
+ split_stdout. len( ) == BuildFlags :: iter_all ( ) . count ( ) ,
1091
1095
"Python stdout len didn't return expected number of lines: {}" ,
1092
1096
split_stdout. len( )
1093
1097
) ;
1094
- let flags = BuildFlags :: ALL
1095
- . iter ( )
1098
+ let flags = BuildFlags :: iter_all ( )
1096
1099
. zip ( split_stdout)
1097
1100
. filter ( |( _, flag_value) | * flag_value == "1" )
1098
1101
. map ( |( flag, _) | flag. clone ( ) )
@@ -1980,7 +1983,7 @@ mod tests {
1980
1983
HashSet :: new( )
1981
1984
) ;
1982
1985
1983
- for flag in & BuildFlags :: ALL {
1986
+ for flag in BuildFlags :: iter_all ( ) {
1984
1987
sysconfigdata. insert ( flag. to_string ( ) , "0" . into ( ) ) ;
1985
1988
}
1986
1989
@@ -1990,7 +1993,7 @@ mod tests {
1990
1993
) ;
1991
1994
1992
1995
let mut expected_flags = HashSet :: new ( ) ;
1993
- for flag in & BuildFlags :: ALL {
1996
+ for flag in BuildFlags :: iter_all ( ) {
1994
1997
sysconfigdata. insert ( flag. to_string ( ) , "1" . into ( ) ) ;
1995
1998
expected_flags. insert ( flag. clone ( ) ) ;
1996
1999
}
0 commit comments