@@ -129,6 +129,8 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[
129
129
"python312.dll" ,
130
130
"python313.dll" ,
131
131
"python313t.dll" ,
132
+ "python314.dll" ,
133
+ "python314t.dll" ,
132
134
"sqlite3.dll" ,
133
135
"tcl86t.dll" ,
134
136
"tk86t.dll" ,
@@ -304,6 +306,26 @@ static DARWIN_ALLOWED_DYLIBS: Lazy<Vec<MachOAllowedDylib>> = Lazy::new(|| {
304
306
max_compatibility_version : "3.13.0" . try_into ( ) . unwrap ( ) ,
305
307
required : false ,
306
308
} ,
309
+ MachOAllowedDylib {
310
+ name : "@executable_path/../lib/libpython3.14.dylib" . to_string ( ) ,
311
+ max_compatibility_version : "3.14.0" . try_into ( ) . unwrap ( ) ,
312
+ required : false ,
313
+ } ,
314
+ MachOAllowedDylib {
315
+ name : "@executable_path/../lib/libpython3.14d.dylib" . to_string ( ) ,
316
+ max_compatibility_version : "3.14.0" . try_into ( ) . unwrap ( ) ,
317
+ required : false ,
318
+ } ,
319
+ MachOAllowedDylib {
320
+ name : "@executable_path/../lib/libpython3.14t.dylib" . to_string ( ) ,
321
+ max_compatibility_version : "3.14.0" . try_into ( ) . unwrap ( ) ,
322
+ required : false ,
323
+ } ,
324
+ MachOAllowedDylib {
325
+ name : "@executable_path/../lib/libpython3.14td.dylib" . to_string ( ) ,
326
+ max_compatibility_version : "3.14.0" . try_into ( ) . unwrap ( ) ,
327
+ required : false ,
328
+ } ,
307
329
MachOAllowedDylib {
308
330
name : "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit" . to_string ( ) ,
309
331
max_compatibility_version : "45.0.0" . try_into ( ) . unwrap ( ) ,
@@ -581,7 +603,6 @@ const GLOBAL_EXTENSIONS: &[&str] = &[
581
603
"_ast" ,
582
604
"_asyncio" ,
583
605
"_bisect" ,
584
- "_blake2" ,
585
606
"_bz2" ,
586
607
"_codecs" ,
587
608
"_codecs_cn" ,
@@ -667,6 +688,7 @@ const GLOBAL_EXTENSIONS: &[&str] = &[
667
688
668
689
const GLOBAL_EXTENSIONS_PYTHON_3_9 : & [ & str ] = & [
669
690
"audioop" ,
691
+ "_blake2" ,
670
692
"_peg_parser" ,
671
693
"_sha256" ,
672
694
"_sha512" ,
@@ -677,6 +699,7 @@ const GLOBAL_EXTENSIONS_PYTHON_3_9: &[&str] = &[
677
699
678
700
const GLOBAL_EXTENSIONS_PYTHON_3_10 : & [ & str ] = & [
679
701
"audioop" ,
702
+ "_blake2" ,
680
703
"_sha256" ,
681
704
"_sha512" ,
682
705
"_xxsubinterpreters" ,
@@ -685,6 +708,7 @@ const GLOBAL_EXTENSIONS_PYTHON_3_10: &[&str] = &[
685
708
686
709
const GLOBAL_EXTENSIONS_PYTHON_3_11 : & [ & str ] = & [
687
710
"audioop" ,
711
+ "_blake2" ,
688
712
"_sha256" ,
689
713
"_sha512" ,
690
714
"_tokenize" ,
@@ -695,6 +719,7 @@ const GLOBAL_EXTENSIONS_PYTHON_3_11: &[&str] = &[
695
719
696
720
const GLOBAL_EXTENSIONS_PYTHON_3_12 : & [ & str ] = & [
697
721
"audioop" ,
722
+ "_blake2" ,
698
723
"_sha2" ,
699
724
"_tokenize" ,
700
725
"_typing" ,
@@ -704,6 +729,18 @@ const GLOBAL_EXTENSIONS_PYTHON_3_12: &[&str] = &[
704
729
] ;
705
730
706
731
const GLOBAL_EXTENSIONS_PYTHON_3_13 : & [ & str ] = & [
732
+ "_blake2" ,
733
+ "_interpchannels" ,
734
+ "_interpqueues" ,
735
+ "_interpreters" ,
736
+ "_sha2" ,
737
+ "_sysconfig" ,
738
+ "_tokenize" ,
739
+ "_typing" ,
740
+ "_zoneinfo" ,
741
+ ] ;
742
+
743
+ const GLOBAL_EXTENSIONS_PYTHON_3_14 : & [ & str ] = & [
707
744
"_interpchannels" ,
708
745
"_interpqueues" ,
709
746
"_interpreters" ,
@@ -717,7 +754,6 @@ const GLOBAL_EXTENSIONS_PYTHON_3_13: &[&str] = &[
717
754
const GLOBAL_EXTENSIONS_MACOS : & [ & str ] = & [ "_scproxy" ] ;
718
755
719
756
const GLOBAL_EXTENSIONS_POSIX : & [ & str ] = & [
720
- "_crypt" ,
721
757
"_ctypes_test" ,
722
758
"_curses" ,
723
759
"_curses_panel" ,
@@ -735,6 +771,8 @@ const GLOBAL_EXTENSIONS_POSIX: &[&str] = &[
735
771
"termios" ,
736
772
] ;
737
773
774
+ const GLOBAL_EXTENSIONS_POSIX_PRE_3_13 : & [ & str ] = & [ "_crypt" ] ;
775
+
738
776
const GLOBAL_EXTENSIONS_LINUX_PRE_3_13 : & [ & str ] = & [ "spwd" ] ;
739
777
740
778
const GLOBAL_EXTENSIONS_WINDOWS : & [ & str ] = & [
@@ -1070,7 +1108,6 @@ fn parse_version_nibbles(v: u32) -> semver::Version {
1070
1108
fn validate_macho < Mach : MachHeader < Endian = Endianness > > (
1071
1109
context : & mut ValidationContext ,
1072
1110
target_triple : & str ,
1073
- python_major_minor : & str ,
1074
1111
advertised_target_version : & str ,
1075
1112
advertised_sdk_version : & str ,
1076
1113
path : & Path ,
@@ -1365,7 +1402,6 @@ fn validate_possible_object_file(
1365
1402
validate_macho (
1366
1403
& mut context,
1367
1404
triple,
1368
- python_major_minor,
1369
1405
json. apple_sdk_deployment_target
1370
1406
. as_ref ( )
1371
1407
. expect ( "apple_sdk_deployment_target should be set" ) ,
@@ -1383,7 +1419,6 @@ fn validate_possible_object_file(
1383
1419
validate_macho (
1384
1420
& mut context,
1385
1421
triple,
1386
- python_major_minor,
1387
1422
json. apple_sdk_deployment_target
1388
1423
. as_ref ( )
1389
1424
. expect ( "apple_sdk_deployment_target should be set" ) ,
@@ -1454,16 +1489,21 @@ fn validate_extension_modules(
1454
1489
"3.13" => {
1455
1490
wanted. extend ( GLOBAL_EXTENSIONS_PYTHON_3_13 ) ;
1456
1491
}
1492
+ "3.14" => {
1493
+ wanted. extend ( GLOBAL_EXTENSIONS_PYTHON_3_14 ) ;
1494
+ }
1457
1495
_ => {
1458
1496
panic ! ( "unhandled Python version: {}" , python_major_minor) ;
1459
1497
}
1460
1498
}
1461
1499
1462
1500
if is_macos {
1463
1501
wanted. extend ( GLOBAL_EXTENSIONS_POSIX ) ;
1464
- if python_major_minor == "3.13" {
1465
- wanted. remove ( "_crypt" ) ;
1502
+
1503
+ if matches ! ( python_major_minor, "3.9" | "3.10" | "3.11" | "3.12" ) {
1504
+ wanted. extend ( GLOBAL_EXTENSIONS_POSIX_PRE_3_13 ) ;
1466
1505
}
1506
+
1467
1507
wanted. extend ( GLOBAL_EXTENSIONS_MACOS ) ;
1468
1508
}
1469
1509
@@ -1483,11 +1523,11 @@ fn validate_extension_modules(
1483
1523
1484
1524
if is_linux {
1485
1525
wanted. extend ( GLOBAL_EXTENSIONS_POSIX ) ;
1486
- // TODO: If there are more differences for `GLOBAL_EXTENSIONS_POSIX` in future Python
1487
- // versions, we should move the `_crypt` special-case into a constant
1488
- if python_major_minor == "3.13" {
1489
- wanted. remove ( "_crypt" ) ;
1526
+
1527
+ if matches ! ( python_major_minor, "3.9" | "3.10" | "3.11" | "3.12" ) {
1528
+ wanted. extend ( GLOBAL_EXTENSIONS_POSIX_PRE_3_13 ) ;
1490
1529
}
1530
+
1491
1531
if matches ! ( python_major_minor, "3.9" | "3.10" | "3.11" | "3.12" ) {
1492
1532
wanted. extend ( GLOBAL_EXTENSIONS_LINUX_PRE_3_13 ) ;
1493
1533
}
@@ -1497,7 +1537,7 @@ fn validate_extension_modules(
1497
1537
}
1498
1538
}
1499
1539
1500
- if ( is_linux || is_macos) {
1540
+ if is_linux || is_macos {
1501
1541
wanted. extend ( [
1502
1542
"_testbuffer" ,
1503
1543
"_testimportmultiple" ,
@@ -1506,11 +1546,11 @@ fn validate_extension_modules(
1506
1546
] ) ;
1507
1547
}
1508
1548
1509
- if ( is_linux || is_macos) && python_major_minor == "3.13" {
1549
+ if ( is_linux || is_macos) && matches ! ( python_major_minor, "3.13" | "3.14" ) {
1510
1550
wanted. extend ( [ "_suggestions" , "_testexternalinspection" ] ) ;
1511
1551
}
1512
1552
1513
- if ( is_linux || is_macos) && matches ! ( python_major_minor, "3.12" | "3.13" ) {
1553
+ if ( is_linux || is_macos) && matches ! ( python_major_minor, "3.12" | "3.13" | "3.14" ) {
1514
1554
wanted. insert ( "_testsinglephase" ) ;
1515
1555
}
1516
1556
0 commit comments