@@ -1490,7 +1490,7 @@ fn validate_extension_modules(
14901490
14911491 if is_macos {
14921492 wanted. extend ( GLOBAL_EXTENSIONS_POSIX ) ;
1493- if python_major_minor == "3.13" {
1493+ if matches ! ( python_major_minor, "3.13" | "3.14" ) {
14941494 wanted. remove ( "_crypt" ) ;
14951495 }
14961496 wanted. extend ( GLOBAL_EXTENSIONS_MACOS ) ;
@@ -1514,7 +1514,7 @@ fn validate_extension_modules(
15141514 wanted. extend ( GLOBAL_EXTENSIONS_POSIX ) ;
15151515 // TODO: If there are more differences for `GLOBAL_EXTENSIONS_POSIX` in future Python
15161516 // versions, we should move the `_crypt` special-case into a constant
1517- if python_major_minor == "3.13" {
1517+ if matches ! ( python_major_minor, "3.13" | "3.14" ) {
15181518 wanted. remove ( "_crypt" ) ;
15191519 }
15201520 if matches ! ( python_major_minor, "3.9" | "3.10" | "3.11" | "3.12" ) {
@@ -1530,7 +1530,7 @@ fn validate_extension_modules(
15301530 if ( is_linux || is_macos)
15311531 && matches ! (
15321532 python_major_minor,
1533- "3.9" | "3.10" | "3.11" | "3.12" | "3.13"
1533+ "3.9" | "3.10" | "3.11" | "3.12" | "3.13" | "3.14"
15341534 )
15351535 {
15361536 wanted. extend ( [
@@ -1541,16 +1541,16 @@ fn validate_extension_modules(
15411541 ] ) ;
15421542 }
15431543
1544- if ( is_linux || is_macos) && python_major_minor == "3.13" {
1544+ if ( is_linux || is_macos) && matches ! ( python_major_minor, "3.13" | "3.14" ) {
15451545 wanted. extend ( [ "_suggestions" , "_testexternalinspection" ] ) ;
15461546 }
15471547
1548- if ( is_linux || is_macos) && matches ! ( python_major_minor, "3.12" | "3.13" ) {
1548+ if ( is_linux || is_macos) && matches ! ( python_major_minor, "3.12" | "3.13" | "3.14" ) {
15491549 wanted. insert ( "_testsinglephase" ) ;
15501550 }
15511551
15521552 // _wmi is Windows only on 3.12+.
1553- if matches ! ( python_major_minor, "3.12" | "3.13" ) && is_windows {
1553+ if matches ! ( python_major_minor, "3.12" | "3.13" | "3.14" ) && is_windows {
15541554 wanted. insert ( "_wmi" ) ;
15551555 }
15561556
@@ -1673,6 +1673,8 @@ fn validate_distribution(
16731673 "3.12"
16741674 } else if dist_filename. starts_with ( "cpython-3.13." ) {
16751675 "3.13"
1676+ } else if dist_filename. starts_with ( "cpython-3.14." ) {
1677+ "3.14"
16761678 } else {
16771679 return Err ( anyhow ! ( "could not parse Python version from filename" ) ) ;
16781680 } ;
@@ -1955,7 +1957,7 @@ fn validate_distribution(
19551957 false
19561958 // For some strange reason _PyWarnings_Init is exported as part of the ABI
19571959 } else if name == "_warnings" {
1958- // But not on Python 3.13 on Windows
1960+ // But not on Python 3.13+ on Windows
19591961 if triple. contains ( "-windows-" ) {
19601962 matches ! ( python_major_minor, "3.9" | "3.10" | "3.11" | "3.12" )
19611963 } else {
0 commit comments