maturin 1.7.5__tar.gz → 1.7.6b1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of maturin might be problematic. Click here for more details.

Files changed (59) hide show
  1. {maturin-1.7.5 → maturin-1.7.6b1}/Cargo.lock +17 -42
  2. {maturin-1.7.5 → maturin-1.7.6b1}/Cargo.toml +3 -3
  3. {maturin-1.7.5 → maturin-1.7.6b1}/PKG-INFO +1 -1
  4. {maturin-1.7.5 → maturin-1.7.6b1}/src/build_context.rs +1 -7
  5. {maturin-1.7.5 → maturin-1.7.6b1}/src/build_options.rs +11 -7
  6. {maturin-1.7.5 → maturin-1.7.6b1}/src/ci.rs +78 -14
  7. {maturin-1.7.5 → maturin-1.7.6b1}/src/python_interpreter/config.rs +6 -3
  8. {maturin-1.7.5 → maturin-1.7.6b1}/src/python_interpreter/mod.rs +21 -19
  9. {maturin-1.7.5 → maturin-1.7.6b1}/.cirrus.yml +0 -0
  10. {maturin-1.7.5 → maturin-1.7.6b1}/.codespellrc +0 -0
  11. {maturin-1.7.5 → maturin-1.7.6b1}/.config/nextest.toml +0 -0
  12. {maturin-1.7.5 → maturin-1.7.6b1}/.gitignore +0 -0
  13. {maturin-1.7.5 → maturin-1.7.6b1}/.pre-commit-config.yaml +0 -0
  14. {maturin-1.7.5 → maturin-1.7.6b1}/Changelog.md +0 -0
  15. {maturin-1.7.5 → maturin-1.7.6b1}/MANIFEST.in +0 -0
  16. {maturin-1.7.5 → maturin-1.7.6b1}/README.md +0 -0
  17. {maturin-1.7.5 → maturin-1.7.6b1}/clippy.toml +0 -0
  18. {maturin-1.7.5 → maturin-1.7.6b1}/license-apache +0 -0
  19. {maturin-1.7.5 → maturin-1.7.6b1}/license-mit +0 -0
  20. {maturin-1.7.5 → maturin-1.7.6b1}/maturin/__init__.py +0 -0
  21. {maturin-1.7.5 → maturin-1.7.6b1}/maturin/__main__.py +0 -0
  22. {maturin-1.7.5 → maturin-1.7.6b1}/maturin.schema.json +0 -0
  23. {maturin-1.7.5 → maturin-1.7.6b1}/netlify.toml +0 -0
  24. {maturin-1.7.5 → maturin-1.7.6b1}/pyproject.toml +0 -0
  25. {maturin-1.7.5 → maturin-1.7.6b1}/setup.py +0 -0
  26. {maturin-1.7.5 → maturin-1.7.6b1}/src/auditwheel/audit.rs +0 -0
  27. {maturin-1.7.5 → maturin-1.7.6b1}/src/auditwheel/manylinux-policy.json +0 -0
  28. {maturin-1.7.5 → maturin-1.7.6b1}/src/auditwheel/mod.rs +0 -0
  29. {maturin-1.7.5 → maturin-1.7.6b1}/src/auditwheel/musllinux-policy.json +0 -0
  30. {maturin-1.7.5 → maturin-1.7.6b1}/src/auditwheel/musllinux.rs +0 -0
  31. {maturin-1.7.5 → maturin-1.7.6b1}/src/auditwheel/patchelf.rs +0 -0
  32. {maturin-1.7.5 → maturin-1.7.6b1}/src/auditwheel/platform_tag.rs +0 -0
  33. {maturin-1.7.5 → maturin-1.7.6b1}/src/auditwheel/policy.rs +0 -0
  34. {maturin-1.7.5 → maturin-1.7.6b1}/src/auditwheel/repair.rs +0 -0
  35. {maturin-1.7.5 → maturin-1.7.6b1}/src/cargo_toml.rs +0 -0
  36. {maturin-1.7.5 → maturin-1.7.6b1}/src/compile.rs +0 -0
  37. {maturin-1.7.5 → maturin-1.7.6b1}/src/cross_compile.rs +0 -0
  38. {maturin-1.7.5 → maturin-1.7.6b1}/src/develop.rs +0 -0
  39. {maturin-1.7.5 → maturin-1.7.6b1}/src/generate_json_schema.rs +0 -0
  40. {maturin-1.7.5 → maturin-1.7.6b1}/src/lib.rs +0 -0
  41. {maturin-1.7.5 → maturin-1.7.6b1}/src/main.rs +0 -0
  42. {maturin-1.7.5 → maturin-1.7.6b1}/src/metadata.rs +0 -0
  43. {maturin-1.7.5 → maturin-1.7.6b1}/src/module_writer.rs +0 -0
  44. {maturin-1.7.5 → maturin-1.7.6b1}/src/new_project.rs +0 -0
  45. {maturin-1.7.5 → maturin-1.7.6b1}/src/project_layout.rs +0 -0
  46. {maturin-1.7.5 → maturin-1.7.6b1}/src/pyproject_toml.rs +0 -0
  47. {maturin-1.7.5 → maturin-1.7.6b1}/src/python_interpreter/get_interpreter_metadata.py +0 -0
  48. {maturin-1.7.5 → maturin-1.7.6b1}/src/source_distribution.rs +0 -0
  49. {maturin-1.7.5 → maturin-1.7.6b1}/src/target.rs +0 -0
  50. {maturin-1.7.5 → maturin-1.7.6b1}/src/templates/.gitignore.j2 +0 -0
  51. {maturin-1.7.5 → maturin-1.7.6b1}/src/templates/Cargo.toml.j2 +0 -0
  52. {maturin-1.7.5 → maturin-1.7.6b1}/src/templates/__init__.py.j2 +0 -0
  53. {maturin-1.7.5 → maturin-1.7.6b1}/src/templates/build.rs.j2 +0 -0
  54. {maturin-1.7.5 → maturin-1.7.6b1}/src/templates/example.udl.j2 +0 -0
  55. {maturin-1.7.5 → maturin-1.7.6b1}/src/templates/lib.rs.j2 +0 -0
  56. {maturin-1.7.5 → maturin-1.7.6b1}/src/templates/main.rs.j2 +0 -0
  57. {maturin-1.7.5 → maturin-1.7.6b1}/src/templates/pyproject.toml.j2 +0 -0
  58. {maturin-1.7.5 → maturin-1.7.6b1}/src/templates/test_all.py.j2 +0 -0
  59. {maturin-1.7.5 → maturin-1.7.6b1}/src/upload.rs +0 -0
@@ -306,20 +306,20 @@ dependencies = [
306
306
 
307
307
  [[package]]
308
308
  name = "cbindgen"
309
- version = "0.26.0"
309
+ version = "0.27.0"
310
310
  source = "registry+https://github.com/rust-lang/crates.io-index"
311
- checksum = "da6bc11b07529f16944307272d5bd9b22530bc7d05751717c9d416586cedab49"
311
+ checksum = "3fce8dd7fcfcbf3a0a87d8f515194b49d6135acab73e18bd380d1d93bb1a15eb"
312
312
  dependencies = [
313
313
  "heck 0.4.1",
314
- "indexmap 1.9.3",
314
+ "indexmap",
315
315
  "log",
316
316
  "proc-macro2",
317
317
  "quote",
318
318
  "serde",
319
319
  "serde_json",
320
- "syn 1.0.109",
320
+ "syn 2.0.89",
321
321
  "tempfile",
322
- "toml 0.5.11",
322
+ "toml",
323
323
  ]
324
324
 
325
325
  [[package]]
@@ -364,7 +364,7 @@ version = "0.9.3"
364
364
  source = "registry+https://github.com/rust-lang/crates.io-index"
365
365
  checksum = "8eebd66744a15ded14960ab4ccdbfb51ad3b81f51f3f04a80adac98c985396c9"
366
366
  dependencies = [
367
- "hashbrown 0.14.5",
367
+ "hashbrown",
368
368
  "stacker",
369
369
  ]
370
370
 
@@ -960,12 +960,6 @@ dependencies = [
960
960
  "scroll",
961
961
  ]
962
962
 
963
- [[package]]
964
- name = "hashbrown"
965
- version = "0.12.3"
966
- source = "registry+https://github.com/rust-lang/crates.io-index"
967
- checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
968
-
969
963
  [[package]]
970
964
  name = "hashbrown"
971
965
  version = "0.14.5"
@@ -1168,16 +1162,6 @@ dependencies = [
1168
1162
  "winapi-util",
1169
1163
  ]
1170
1164
 
1171
- [[package]]
1172
- name = "indexmap"
1173
- version = "1.9.3"
1174
- source = "registry+https://github.com/rust-lang/crates.io-index"
1175
- checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
1176
- dependencies = [
1177
- "autocfg",
1178
- "hashbrown 0.12.3",
1179
- ]
1180
-
1181
1165
  [[package]]
1182
1166
  name = "indexmap"
1183
1167
  version = "2.5.0"
@@ -1185,7 +1169,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1185
1169
  checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5"
1186
1170
  dependencies = [
1187
1171
  "equivalent",
1188
- "hashbrown 0.14.5",
1172
+ "hashbrown",
1189
1173
  "serde",
1190
1174
  ]
1191
1175
 
@@ -1357,7 +1341,7 @@ dependencies = [
1357
1341
 
1358
1342
  [[package]]
1359
1343
  name = "maturin"
1360
- version = "1.7.5"
1344
+ version = "1.7.6-beta.1"
1361
1345
  dependencies = [
1362
1346
  "anyhow",
1363
1347
  "base64 0.21.7",
@@ -1384,7 +1368,7 @@ dependencies = [
1384
1368
  "glob",
1385
1369
  "goblin",
1386
1370
  "ignore",
1387
- "indexmap 2.5.0",
1371
+ "indexmap",
1388
1372
  "indoc",
1389
1373
  "itertools",
1390
1374
  "keyring",
@@ -1419,7 +1403,7 @@ dependencies = [
1419
1403
  "textwrap",
1420
1404
  "thiserror",
1421
1405
  "time",
1422
- "toml 0.8.15",
1406
+ "toml",
1423
1407
  "toml_edit 0.22.16",
1424
1408
  "tracing",
1425
1409
  "tracing-subscriber",
@@ -1465,9 +1449,9 @@ dependencies = [
1465
1449
 
1466
1450
  [[package]]
1467
1451
  name = "minijinja"
1468
- version = "1.0.21"
1452
+ version = "2.5.0"
1469
1453
  source = "registry+https://github.com/rust-lang/crates.io-index"
1470
- checksum = "55e877d961d4f96ce13615862322df7c0b6d169d40cab71a7ef3f9b9e594451e"
1454
+ checksum = "2c37e1b517d1dcd0e51dc36c4567b9d5a29262b3ec8da6cb5d35e27a8fb529b5"
1471
1455
  dependencies = [
1472
1456
  "serde",
1473
1457
  ]
@@ -1815,11 +1799,11 @@ version = "0.11.0"
1815
1799
  source = "registry+https://github.com/rust-lang/crates.io-index"
1816
1800
  checksum = "ef7061023bcb58a0fc4a4bbe9819c13b0dca7c2abc14da14f5ecc1532ab3a36a"
1817
1801
  dependencies = [
1818
- "indexmap 2.5.0",
1802
+ "indexmap",
1819
1803
  "pep440_rs",
1820
1804
  "pep508_rs",
1821
1805
  "serde",
1822
- "toml 0.8.15",
1806
+ "toml",
1823
1807
  ]
1824
1808
 
1825
1809
  [[package]]
@@ -2580,15 +2564,6 @@ dependencies = [
2580
2564
  "zerovec",
2581
2565
  ]
2582
2566
 
2583
- [[package]]
2584
- name = "toml"
2585
- version = "0.5.11"
2586
- source = "registry+https://github.com/rust-lang/crates.io-index"
2587
- checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
2588
- dependencies = [
2589
- "serde",
2590
- ]
2591
-
2592
2567
  [[package]]
2593
2568
  name = "toml"
2594
2569
  version = "0.8.15"
@@ -2616,7 +2591,7 @@ version = "0.21.1"
2616
2591
  source = "registry+https://github.com/rust-lang/crates.io-index"
2617
2592
  checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
2618
2593
  dependencies = [
2619
- "indexmap 2.5.0",
2594
+ "indexmap",
2620
2595
  "toml_datetime",
2621
2596
  "winnow 0.5.40",
2622
2597
  ]
@@ -2627,7 +2602,7 @@ version = "0.22.16"
2627
2602
  source = "registry+https://github.com/rust-lang/crates.io-index"
2628
2603
  checksum = "278f3d518e152219c994ce877758516bca5e118eaed6996192a774fb9fbf0788"
2629
2604
  dependencies = [
2630
- "indexmap 2.5.0",
2605
+ "indexmap",
2631
2606
  "serde",
2632
2607
  "serde_spanned",
2633
2608
  "toml_datetime",
@@ -3198,7 +3173,7 @@ dependencies = [
3198
3173
  "serde_json",
3199
3174
  "sha2",
3200
3175
  "tempfile",
3201
- "toml 0.8.15",
3176
+ "toml",
3202
3177
  "tracing",
3203
3178
  "tracing-subscriber",
3204
3179
  "twox-hash",
@@ -1,7 +1,7 @@
1
1
  [package]
2
2
  authors = ["konstin <konstin@mailbox.org>", "messense <messense@icloud.com>"]
3
3
  name = "maturin"
4
- version = "1.7.5"
4
+ version = "1.7.6-beta.1"
5
5
  description = "Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages"
6
6
  exclude = [
7
7
  "test-crates/**/*",
@@ -45,7 +45,7 @@ glob = "0.3.0"
45
45
  cargo-config2 = "0.1.24"
46
46
  cargo_metadata = "0.18.0"
47
47
  cargo-options = "0.7.2"
48
- cbindgen = { version = "0.26.0", default-features = false }
48
+ cbindgen = { version = "0.27.0", default-features = false }
49
49
  flate2 = "1.0.18"
50
50
  goblin = "0.9.0"
51
51
  platform-info = "2.0.2"
@@ -107,7 +107,7 @@ tracing-subscriber = { version = "0.3.15", features = ["env-filter"] }
107
107
  # project scaffolding, maturin new/init/generate-ci
108
108
  dialoguer = { version = "0.11.0", default-features = false, optional = true }
109
109
  console = { version = "0.15.4", optional = true }
110
- minijinja = { version = "1.0.7", optional = true }
110
+ minijinja = { version = "2.5.0", optional = true }
111
111
 
112
112
  # upload
113
113
  bytesize = { version = "1.0.1", optional = true }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: maturin
3
- Version: 1.7.5
3
+ Version: 1.7.6b1
4
4
  Classifier: Topic :: Software Development :: Build Tools
5
5
  Classifier: Programming Language :: Rust
6
6
  Classifier: Programming Language :: Python :: Implementation :: CPython
@@ -7,7 +7,6 @@ use crate::module_writer::{
7
7
  write_uniffi_module, write_wasm_launcher, WheelWriter,
8
8
  };
9
9
  use crate::project_layout::ProjectLayout;
10
- use crate::python_interpreter::InterpreterKind;
11
10
  use crate::source_distribution::source_distribution;
12
11
  use crate::target::{Arch, Os};
13
12
  use crate::{
@@ -235,12 +234,7 @@ impl BuildContext {
235
234
  if !non_abi3_interps.is_empty() {
236
235
  let interp_names: HashSet<_> = non_abi3_interps
237
236
  .iter()
238
- .map(|interp| match interp.interpreter_kind {
239
- InterpreterKind::CPython | InterpreterKind::GraalPy => {
240
- interp.implementation_name.to_string()
241
- }
242
- InterpreterKind::PyPy => "PyPy".to_string(),
243
- })
237
+ .map(|interp| format!("{}{}{}", interp, interp.major, interp.minor))
244
238
  .collect();
245
239
  eprintln!(
246
240
  "⚠️ Warning: {} does not yet support abi3 so the build artifacts will be version-specific.",
@@ -1266,12 +1266,7 @@ fn find_interpreter_in_sysconfig(
1266
1266
  )
1267
1267
  } else if let Some(ver) = python.strip_prefix("python") {
1268
1268
  // Also accept things like `python3.13t` for free-threaded python
1269
- let (ver, abiflags) =
1270
- if let Some(ver) = ver.strip_prefix('-').unwrap_or(ver).strip_suffix('t') {
1271
- (ver, "t")
1272
- } else {
1273
- (ver, "")
1274
- };
1269
+ let (ver, abiflags) = maybe_free_threaded(ver.strip_prefix('-').unwrap_or(ver));
1275
1270
  (InterpreterKind::CPython, ver, abiflags)
1276
1271
  } else if python
1277
1272
  .chars()
@@ -1280,7 +1275,8 @@ fn find_interpreter_in_sysconfig(
1280
1275
  .unwrap_or(false)
1281
1276
  {
1282
1277
  // Eg: -i 3.9 without interpreter kind, assume it's CPython
1283
- (InterpreterKind::CPython, &*python, "")
1278
+ let (ver, abiflags) = maybe_free_threaded(&python);
1279
+ (InterpreterKind::CPython, ver, abiflags)
1284
1280
  } else {
1285
1281
  // if interpreter not known
1286
1282
  if std::path::Path::new(&python).is_file() {
@@ -1319,6 +1315,14 @@ fn find_interpreter_in_sysconfig(
1319
1315
  Ok(interpreters)
1320
1316
  }
1321
1317
 
1318
+ fn maybe_free_threaded(python_ver: &str) -> (&str, &str) {
1319
+ if let Some(ver) = python_ver.strip_suffix('t') {
1320
+ (ver, "t")
1321
+ } else {
1322
+ (python_ver, "")
1323
+ }
1324
+ }
1325
+
1322
1326
  /// We need to pass the global flags to cargo metadata
1323
1327
  /// (https://github.com/PyO3/maturin/issues/211 and https://github.com/PyO3/maturin/issues/472),
1324
1328
  /// but we can't pass all the extra args, as e.g. `--target` isn't supported, so this tries to
@@ -376,17 +376,29 @@ jobs:\n",
376
376
  sccache: 'true'
377
377
  "
378
378
  ));
379
- match platform {
380
- Platform::ManyLinux => {
381
- conf.push_str(" manylinux: auto\n");
382
- }
383
- Platform::Musllinux => {
384
- conf.push_str(" manylinux: musllinux_1_2\n");
385
- }
386
- Platform::Emscripten => {
387
- conf.push_str(" rust-toolchain: nightly\n");
379
+ let maturin_action_args = match platform {
380
+ Platform::ManyLinux => "manylinux: auto",
381
+ Platform::Musllinux => "manylinux: musllinux_1_2",
382
+ Platform::Emscripten => "rust-toolchain: nightly",
383
+ _ => "",
384
+ };
385
+ if !maturin_action_args.is_empty() {
386
+ conf.push_str(&format!(" {maturin_action_args}\n"));
387
+ }
388
+ if is_abi3 {
389
+ // build free-threaded wheel for python3.13t
390
+ conf.push_str(&format!(
391
+ " - name: Build free-threaded wheels
392
+ uses: PyO3/maturin-action@v1
393
+ with:
394
+ target: ${{{{ matrix.platform.target }}}}
395
+ args: --release --out dist{maturin_args} -i python3.13t
396
+ sccache: 'true'
397
+ "
398
+ ));
399
+ if !maturin_action_args.is_empty() {
400
+ conf.push_str(&format!(" {maturin_action_args}\n"));
388
401
  }
389
- _ => {}
390
402
  }
391
403
  // upload wheels
392
404
  let artifact_name = match platform {
@@ -904,6 +916,13 @@ mod tests {
904
916
  args: --release --out dist
905
917
  sccache: 'true'
906
918
  manylinux: auto
919
+ - name: Build free-threaded wheels
920
+ uses: PyO3/maturin-action@v1
921
+ with:
922
+ target: ${{ matrix.platform.target }}
923
+ args: --release --out dist -i python3.13t
924
+ sccache: 'true'
925
+ manylinux: auto
907
926
  - name: Upload wheels
908
927
  uses: actions/upload-artifact@v4
909
928
  with:
@@ -935,6 +954,13 @@ mod tests {
935
954
  args: --release --out dist
936
955
  sccache: 'true'
937
956
  manylinux: musllinux_1_2
957
+ - name: Build free-threaded wheels
958
+ uses: PyO3/maturin-action@v1
959
+ with:
960
+ target: ${{ matrix.platform.target }}
961
+ args: --release --out dist -i python3.13t
962
+ sccache: 'true'
963
+ manylinux: musllinux_1_2
938
964
  - name: Upload wheels
939
965
  uses: actions/upload-artifact@v4
940
966
  with:
@@ -962,7 +988,13 @@ mod tests {
962
988
  target: ${{ matrix.platform.target }}
963
989
  args: --release --out dist
964
990
  sccache: 'true'
965
- - name: Upload wheels
991
+ - name: Build free-threaded wheels
992
+ uses: PyO3/maturin-action@v1
993
+ with:
994
+ target: ${{ matrix.platform.target }}
995
+ args: --release --out dist -i python3.13t
996
+ sccache: 'true'
997
+ - name: Upload wheels
966
998
  uses: actions/upload-artifact@v4
967
999
  with:
968
1000
  name: wheels-windows-${{ matrix.platform.target }}
@@ -988,7 +1020,13 @@ mod tests {
988
1020
  target: ${{ matrix.platform.target }}
989
1021
  args: --release --out dist
990
1022
  sccache: 'true'
991
- - name: Upload wheels
1023
+ - name: Build free-threaded wheels
1024
+ uses: PyO3/maturin-action@v1
1025
+ with:
1026
+ target: ${{ matrix.platform.target }}
1027
+ args: --release --out dist -i python3.13t
1028
+ sccache: 'true'
1029
+ - name: Upload wheels
992
1030
  uses: actions/upload-artifact@v4
993
1031
  with:
994
1032
  name: wheels-macos-${{ matrix.platform.target }}
@@ -1081,6 +1119,13 @@ mod tests {
1081
1119
  args: --release --out dist
1082
1120
  sccache: 'true'
1083
1121
  manylinux: auto
1122
+ - name: Build free-threaded wheels
1123
+ uses: PyO3/maturin-action@v1
1124
+ with:
1125
+ target: ${{ matrix.platform.target }}
1126
+ args: --release --out dist -i python3.13t
1127
+ sccache: 'true'
1128
+ manylinux: auto
1084
1129
  - name: Upload wheels
1085
1130
  uses: actions/upload-artifact@v4
1086
1131
  with:
@@ -1112,6 +1157,13 @@ mod tests {
1112
1157
  args: --release --out dist
1113
1158
  sccache: 'true'
1114
1159
  manylinux: musllinux_1_2
1160
+ - name: Build free-threaded wheels
1161
+ uses: PyO3/maturin-action@v1
1162
+ with:
1163
+ target: ${{ matrix.platform.target }}
1164
+ args: --release --out dist -i python3.13t
1165
+ sccache: 'true'
1166
+ manylinux: musllinux_1_2
1115
1167
  - name: Upload wheels
1116
1168
  uses: actions/upload-artifact@v4
1117
1169
  with:
@@ -1139,7 +1191,13 @@ mod tests {
1139
1191
  target: ${{ matrix.platform.target }}
1140
1192
  args: --release --out dist
1141
1193
  sccache: 'true'
1142
- - name: Upload wheels
1194
+ - name: Build free-threaded wheels
1195
+ uses: PyO3/maturin-action@v1
1196
+ with:
1197
+ target: ${{ matrix.platform.target }}
1198
+ args: --release --out dist -i python3.13t
1199
+ sccache: 'true'
1200
+ - name: Upload wheels
1143
1201
  uses: actions/upload-artifact@v4
1144
1202
  with:
1145
1203
  name: wheels-windows-${{ matrix.platform.target }}
@@ -1165,7 +1223,13 @@ mod tests {
1165
1223
  target: ${{ matrix.platform.target }}
1166
1224
  args: --release --out dist
1167
1225
  sccache: 'true'
1168
- - name: Upload wheels
1226
+ - name: Build free-threaded wheels
1227
+ uses: PyO3/maturin-action@v1
1228
+ with:
1229
+ target: ${{ matrix.platform.target }}
1230
+ args: --release --out dist -i python3.13t
1231
+ sccache: 'true'
1232
+ - name: Upload wheels
1169
1233
  uses: actions/upload-artifact@v4
1170
1234
  with:
1171
1235
  name: wheels-macos-${{ matrix.platform.target }}
@@ -120,6 +120,11 @@ impl InterpreterConfig {
120
120
  })
121
121
  }
122
122
  (Os::Windows, CPython) => {
123
+ let abiflags = if python_version < (3, 8) {
124
+ "m".to_string()
125
+ } else {
126
+ abiflags.to_string()
127
+ };
123
128
  let ext_suffix = if python_version < (3, 8) {
124
129
  ".pyd".to_string()
125
130
  } else {
@@ -135,8 +140,7 @@ impl InterpreterConfig {
135
140
  major,
136
141
  minor,
137
142
  interpreter_kind: CPython,
138
- // abiflags is always empty on Windows
139
- abiflags: String::new(),
143
+ abiflags,
140
144
  ext_suffix,
141
145
  pointer_width: Some(target.pointer_width()),
142
146
  gil_disabled,
@@ -152,7 +156,6 @@ impl InterpreterConfig {
152
156
  major,
153
157
  minor,
154
158
  interpreter_kind: PyPy,
155
- // abiflags is always empty on Windows
156
159
  abiflags: String::new(),
157
160
  ext_suffix,
158
161
  pointer_width: Some(target.pointer_width()),
@@ -1,7 +1,7 @@
1
1
  pub use self::config::InterpreterConfig;
2
2
  use crate::auditwheel::PlatformTag;
3
3
  use crate::{BridgeModel, BuildContext, Target};
4
- use anyhow::{bail, format_err, Context, Result};
4
+ use anyhow::{bail, ensure, format_err, Context, Result};
5
5
  use pep440_rs::{Version, VersionSpecifiers};
6
6
  use regex::Regex;
7
7
  use serde::Deserialize;
@@ -427,7 +427,19 @@ fn fun_with_abiflags(
427
427
  Ok("".to_string())
428
428
  } else if message.system == "windows" {
429
429
  if matches!(message.abiflags.as_deref(), Some("") | None) {
430
- Ok("".to_string())
430
+ // windows has a few annoying cases, but its abiflags in sysconfig always empty
431
+ // python <= 3.7 has "m"
432
+ if message.minor <= 7 {
433
+ Ok("m".to_string())
434
+ } else if message.gil_disabled {
435
+ ensure!(
436
+ message.minor >= 13,
437
+ "gil_disabled is only available in python 3.13+ ಠ_ಠ"
438
+ );
439
+ Ok("t".to_string())
440
+ } else {
441
+ Ok("".to_string())
442
+ }
431
443
  } else {
432
444
  bail!("A python 3 interpreter on Windows does not define abiflags in its sysconfig ಠ_ಠ")
433
445
  }
@@ -499,23 +511,13 @@ impl PythonInterpreter {
499
511
  } else {
500
512
  match self.interpreter_kind {
501
513
  InterpreterKind::CPython => {
502
- if target.is_unix() {
503
- format!(
504
- "cp{major}{minor}-cp{major}{minor}{abiflags}-{platform}",
505
- major = self.major,
506
- minor = self.minor,
507
- abiflags = self.abiflags,
508
- platform = platform
509
- )
510
- } else {
511
- // On windows the abiflags are missing, but this seems to work
512
- format!(
513
- "cp{major}{minor}-none-{platform}",
514
- major = self.major,
515
- minor = self.minor,
516
- platform = platform
517
- )
518
- }
514
+ format!(
515
+ "cp{major}{minor}-cp{major}{minor}{abiflags}-{platform}",
516
+ major = self.major,
517
+ minor = self.minor,
518
+ abiflags = self.abiflags,
519
+ platform = platform
520
+ )
519
521
  }
520
522
  InterpreterKind::PyPy => {
521
523
  // pypy uses its version as part of the ABI, e.g.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes