meson-python 0.21.1__tar.gz → 0.22.0__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.
Files changed (271) hide show
  1. {meson_python-0.21.1 → meson_python-0.22.0}/.github/workflows/tests.yml +36 -23
  2. {meson_python-0.21.1 → meson_python-0.22.0}/.gitignore +1 -0
  3. {meson_python-0.21.1 → meson_python-0.22.0}/.pre-commit-config.yaml +2 -0
  4. {meson_python-0.21.1 → meson_python-0.22.0}/CHANGELOG.rst +15 -1
  5. {meson_python-0.21.1 → meson_python-0.22.0}/PKG-INFO +2 -2
  6. meson_python-0.22.0/RELEASE.rst +49 -0
  7. {meson_python-0.21.1 → meson_python-0.22.0}/docs/about.rst +8 -1
  8. {meson_python-0.21.1 → meson_python-0.22.0}/docs/changelog.rst +15 -1
  9. meson_python-0.22.0/docs/how-to-guides/limited-api.rst +176 -0
  10. {meson_python-0.21.1 → meson_python-0.22.0}/docs/how-to-guides/shared-libraries.rst +13 -11
  11. {meson_python-0.21.1 → meson_python-0.22.0}/docs/index.rst +3 -1
  12. {meson_python-0.21.1 → meson_python-0.22.0}/docs/reference/meson-compatibility.rst +10 -0
  13. {meson_python-0.21.1 → meson_python-0.22.0}/docs/reference/pyproject-settings.rst +6 -5
  14. {meson_python-0.21.1 → meson_python-0.22.0}/docs/tutorials/introduction.rst +2 -1
  15. {meson_python-0.21.1 → meson_python-0.22.0}/mesonpy/__init__.py +86 -80
  16. {meson_python-0.21.1 → meson_python-0.22.0}/mesonpy/_editable.py +4 -7
  17. meson_python-0.22.0/mesonpy/_rpath.py +161 -0
  18. {meson_python-0.21.1 → meson_python-0.22.0}/pyproject.toml +7 -2
  19. {meson_python-0.21.1 → meson_python-0.22.0}/tests/conftest.py +5 -9
  20. meson_python-0.22.0/tests/packages/same-name-sharedlibs/meson.build +9 -0
  21. meson_python-0.22.0/tests/packages/same-name-sharedlibs/pyproject.toml +7 -0
  22. meson_python-0.22.0/tests/packages/same-name-sharedlibs/same_name/__init__.py +3 -0
  23. meson_python-0.22.0/tests/packages/same-name-sharedlibs/same_name/competing/choice.c +7 -0
  24. meson_python-0.22.0/tests/packages/same-name-sharedlibs/same_name/competing/meson.build +9 -0
  25. meson_python-0.22.0/tests/packages/same-name-sharedlibs/same_name/meson.build +23 -0
  26. meson_python-0.22.0/tests/packages/same-name-sharedlibs/same_name/module.c +24 -0
  27. meson_python-0.22.0/tests/packages/same-name-sharedlibs/same_name/private/choice.c +7 -0
  28. meson_python-0.22.0/tests/packages/same-name-sharedlibs/same_name/private/meson.build +9 -0
  29. meson_python-0.22.0/tests/packages/sharedlib-in-package/meson.build +12 -0
  30. meson_python-0.22.0/tests/packages/sharedlib-in-package/mypkg/__init__.py +51 -0
  31. meson_python-0.22.0/tests/packages/sharedlib-in-package/mypkg/_examplemod.c +38 -0
  32. meson_python-0.22.0/tests/packages/sharedlib-in-package/mypkg/meson.build +23 -0
  33. meson_python-0.22.0/tests/packages/sharedlib-in-package/mypkg/sub/meson.build +16 -0
  34. meson_python-0.22.0/tests/packages/sharedlib-in-package/mypkg/sub/mypkg_dll.h +23 -0
  35. meson_python-0.22.0/tests/packages/sharedlib-in-package/src/lib.c +10 -0
  36. meson_python-0.22.0/tests/packages/sharedlib-in-package/src/lib.h +13 -0
  37. meson_python-0.22.0/tests/packages/sharedlib-in-package/src/meson.build +46 -0
  38. meson_python-0.22.0/tests/packages/sharedlib-in-package/src/sublib.c +9 -0
  39. meson_python-0.22.0/tests/packages/sharedlib-in-package/src/sublib.h +13 -0
  40. {meson_python-0.21.1/tests/packages/sharedlib-in-package → meson_python-0.22.0/tests/packages/sharedlib-in-package-legacy}/meson.build +1 -1
  41. {meson_python-0.21.1/tests/packages/sharedlib-in-package → meson_python-0.22.0/tests/packages/sharedlib-in-package-legacy}/mypkg/meson.build +1 -1
  42. meson_python-0.22.0/tests/packages/subdirs/pyproject.toml +7 -0
  43. meson_python-0.22.0/tests/packages/symlinks/submodule/bbb.py +6 -0
  44. {meson_python-0.21.1 → meson_python-0.22.0}/tests/test_editable.py +0 -1
  45. {meson_python-0.21.1 → meson_python-0.22.0}/tests/test_project.py +2 -4
  46. meson_python-0.22.0/tests/test_rpath.py +55 -0
  47. {meson_python-0.21.1 → meson_python-0.22.0}/tests/test_sdist.py +1 -0
  48. {meson_python-0.21.1 → meson_python-0.22.0}/tests/test_wheel.py +111 -10
  49. meson_python-0.21.1/RELEASE.rst +0 -58
  50. meson_python-0.21.1/mesonpy/_rpath.py +0 -89
  51. {meson_python-0.21.1 → meson_python-0.22.0}/.gitattributes +0 -0
  52. {meson_python-0.21.1 → meson_python-0.22.0}/.github/workflows/docs.yml +0 -0
  53. {meson_python-0.21.1 → meson_python-0.22.0}/.github/workflows/pixi.lock +0 -0
  54. {meson_python-0.21.1 → meson_python-0.22.0}/.github/workflows/pixi.toml +0 -0
  55. {meson_python-0.21.1 → meson_python-0.22.0}/.github/workflows/release.yml +0 -0
  56. {meson_python-0.21.1 → meson_python-0.22.0}/.github/workflows/zizmor.yml +0 -0
  57. {meson_python-0.21.1 → meson_python-0.22.0}/.github/zizmor.yml +0 -0
  58. {meson_python-0.21.1 → meson_python-0.22.0}/.mailmap +0 -0
  59. {meson_python-0.21.1 → meson_python-0.22.0}/.vscode/settings.json +0 -0
  60. {meson_python-0.21.1 → meson_python-0.22.0}/LICENSE +0 -0
  61. {meson_python-0.21.1 → meson_python-0.22.0}/LICENSES/MIT.txt +0 -0
  62. {meson_python-0.21.1 → meson_python-0.22.0}/README.rst +0 -0
  63. {meson_python-0.21.1 → meson_python-0.22.0}/REUSE.toml +0 -0
  64. {meson_python-0.21.1 → meson_python-0.22.0}/codecov.yml +0 -0
  65. {meson_python-0.21.1 → meson_python-0.22.0}/docs/conf.py +0 -0
  66. {meson_python-0.21.1 → meson_python-0.22.0}/docs/explanations/default-options.rst +0 -0
  67. {meson_python-0.21.1 → meson_python-0.22.0}/docs/explanations/design-old.rst +0 -0
  68. {meson_python-0.21.1 → meson_python-0.22.0}/docs/how-to-guides/config-settings.rst +0 -0
  69. {meson_python-0.21.1 → meson_python-0.22.0}/docs/how-to-guides/contributing.rst +0 -0
  70. {meson_python-0.21.1 → meson_python-0.22.0}/docs/how-to-guides/debug-builds.rst +0 -0
  71. {meson_python-0.21.1 → meson_python-0.22.0}/docs/how-to-guides/editable-installs.rst +0 -0
  72. {meson_python-0.21.1 → meson_python-0.22.0}/docs/how-to-guides/meson-args.rst +0 -0
  73. {meson_python-0.21.1 → meson_python-0.22.0}/docs/how-to-guides/sdist.rst +0 -0
  74. {meson_python-0.21.1 → meson_python-0.22.0}/docs/projects-using-meson-python.rst +0 -0
  75. {meson_python-0.21.1 → meson_python-0.22.0}/docs/reference/config-settings.rst +0 -0
  76. {meson_python-0.21.1 → meson_python-0.22.0}/docs/reference/environment-variables.rst +0 -0
  77. {meson_python-0.21.1 → meson_python-0.22.0}/docs/reference/limitations.rst +0 -0
  78. {meson_python-0.21.1 → meson_python-0.22.0}/meson.build +0 -0
  79. {meson_python-0.21.1 → meson_python-0.22.0}/mesonpy/_tags.py +0 -0
  80. {meson_python-0.21.1 → meson_python-0.22.0}/mesonpy/_util.py +0 -0
  81. {meson_python-0.21.1 → meson_python-0.22.0}/mesonpy/_wheelfile.py +0 -0
  82. {meson_python-0.21.1 → meson_python-0.22.0}/tests/__init__.py +0 -0
  83. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/cmake-subproject/cmakesubproject.pyx +0 -0
  84. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/cmake-subproject/meson.build +0 -0
  85. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/cmake-subproject/pyproject.toml +0 -0
  86. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/cmake-subproject/subprojects/cmaketest/CMakeLists.txt +0 -0
  87. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/cmake-subproject/subprojects/cmaketest/cmaketest.cpp +0 -0
  88. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/cmake-subproject/subprojects/cmaketest/cmaketest.hpp +0 -0
  89. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/cmake-subproject/subprojects/cmaketest.wrap +0 -0
  90. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/complex/complex/__init__.py +0 -0
  91. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/complex/complex/more/__init__.py +0 -0
  92. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/complex/complex/more/baz.pyx +0 -0
  93. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/complex/complex/more/meson.build +0 -0
  94. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/complex/complex/namespace/bar.py +0 -0
  95. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/complex/complex/namespace/foo.py +0 -0
  96. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/complex/extension.c +0 -0
  97. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/complex/foo.py +0 -0
  98. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/complex/meson.build +0 -0
  99. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/complex/move.py +0 -0
  100. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/complex/pyproject.toml +0 -0
  101. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/complex/test.pyx +0 -0
  102. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/configure-data/configure_data.py.in +0 -0
  103. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/configure-data/meson.build +0 -0
  104. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/configure-data/pyproject.toml +0 -0
  105. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/custom-target-dir/codegen.py +0 -0
  106. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/custom-target-dir/meson.build +0 -0
  107. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/custom-target-dir/pyproject.toml +0 -0
  108. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/detect-compiler/detect_compiler.c +0 -0
  109. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/detect-compiler/meson.build +0 -0
  110. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/detect-compiler/pyproject.toml +0 -0
  111. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/dist-script/meson.build +0 -0
  112. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/dist-script/pyproject.toml +0 -0
  113. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/dynamic-version/meson.build +0 -0
  114. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/dynamic-version/pyproject.toml +0 -0
  115. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/encoding/meson.build +0 -0
  116. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/encoding/pyproject.toml +0 -0
  117. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/encoding//343/203/206/343/202/271/343/203/210.py" +0 -0
  118. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/executable/example.c +0 -0
  119. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/executable/meson.build +0 -0
  120. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/executable/pyproject.toml +0 -0
  121. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/executable-bit/example-script.py +0 -0
  122. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/executable-bit/example.c +0 -0
  123. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/executable-bit/executable_module.py +0 -0
  124. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/executable-bit/meson.build +0 -0
  125. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/executable-bit/pyproject.toml +0 -0
  126. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/full-metadata/LICENSE +0 -0
  127. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/full-metadata/README.md +0 -0
  128. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/full-metadata/meson.build +0 -0
  129. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/full-metadata/pyproject.toml +0 -0
  130. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/generated-files/example-script.py +0 -0
  131. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/generated-files/example.c +0 -0
  132. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/generated-files/executable_module.py +0 -0
  133. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/generated-files/generate_version.py +0 -0
  134. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/generated-files/meson.build +0 -0
  135. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/generated-files/pyproject.toml +0 -0
  136. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/imports-itself-during-build/meson.build +0 -0
  137. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/imports-itself-during-build/plat.c +0 -0
  138. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/imports-itself-during-build/pure.py +0 -0
  139. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/imports-itself-during-build/pyproject.toml +0 -0
  140. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-data/__init__.py +0 -0
  141. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-data/data.txt +0 -0
  142. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-data/meson.build +0 -0
  143. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-data/pyproject.toml +0 -0
  144. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-subdir/meson.build +0 -0
  145. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-subdir/nested/deep/deep.py +0 -0
  146. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-subdir/nested/deep/excluded.py +0 -0
  147. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-subdir/nested/nested.py +0 -0
  148. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-subdir/pyproject.toml +0 -0
  149. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-subdir/strip/excluded.py +0 -0
  150. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-subdir/strip/module.py +0 -0
  151. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-subdir/subdir/__init__.py +0 -0
  152. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-subdir/subdir/excluded/__init__.py +0 -0
  153. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-subdir/subdir/excluded.py +0 -0
  154. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/install-subdir/subdir/test.py +0 -0
  155. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/library/example.c +0 -0
  156. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/library/examplelib.c +0 -0
  157. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/library/examplelib.h +0 -0
  158. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/library/meson.build +0 -0
  159. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/library/pyproject.toml +0 -0
  160. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/license-file/meson.build +0 -0
  161. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/license-file/pyproject.toml +0 -0
  162. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/license-file/something/LICENSE.custom +0 -0
  163. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/license-pep639/LICENSES/BSD-3-Clause.txt +0 -0
  164. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/license-pep639/LICENSES/MIT.txt +0 -0
  165. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/license-pep639/meson.build +0 -0
  166. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/license-pep639/pyproject.toml +0 -0
  167. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/limited-api/meson.build +0 -0
  168. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/limited-api/meson.options +0 -0
  169. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/limited-api/module.c +0 -0
  170. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/limited-api/pyproject.toml +0 -0
  171. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/limited-api-free-threaded/meson.build +0 -0
  172. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/limited-api-free-threaded/module.c +0 -0
  173. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/limited-api-free-threaded/pyproject.toml +0 -0
  174. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-against-local-lib/__init__.py +0 -0
  175. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-against-local-lib/examplemod.c +0 -0
  176. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-against-local-lib/lib/examplelib.c +0 -0
  177. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-against-local-lib/lib/examplelib.h +0 -0
  178. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-against-local-lib/lib/meson.build +0 -0
  179. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-against-local-lib/meson.build +0 -0
  180. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-against-local-lib/pyproject.toml +0 -0
  181. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-library-in-subproject/foo/__init__.py +0 -0
  182. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-library-in-subproject/foo/_examplemod.c +0 -0
  183. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-library-in-subproject/foo/meson.build +0 -0
  184. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-library-in-subproject/meson.build +0 -0
  185. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-library-in-subproject/pyproject.toml +0 -0
  186. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-library-in-subproject/subprojects/bar/bar_dll.h +0 -0
  187. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-library-in-subproject/subprojects/bar/examplelib.c +0 -0
  188. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-library-in-subproject/subprojects/bar/examplelib.h +0 -0
  189. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/link-library-in-subproject/subprojects/bar/meson.build +0 -0
  190. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/long-path/meson.build +0 -0
  191. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/long-path/pyproject.toml +0 -0
  192. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/missing-dynamic-version/meson.build +0 -0
  193. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/missing-dynamic-version/pyproject.toml +0 -0
  194. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/missing-meson-version/meson.build +0 -0
  195. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/missing-meson-version/pyproject.toml +0 -0
  196. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/module-types/file.py +0 -0
  197. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/module-types/meson.build +0 -0
  198. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/module-types/namespace/data.py +0 -0
  199. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/module-types/native.c +0 -0
  200. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/module-types/package/__init__.py +0 -0
  201. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/module-types/pyproject.toml +0 -0
  202. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/pure/meson.build +0 -0
  203. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/pure/pure.py +0 -0
  204. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/pure/pyproject.toml +0 -0
  205. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/purelib-and-platlib/meson.build +0 -0
  206. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/purelib-and-platlib/plat.c +0 -0
  207. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/purelib-and-platlib/pure.py +0 -0
  208. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/purelib-and-platlib/pyproject.toml +0 -0
  209. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/purelib-platlib-split/meson.build +0 -0
  210. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/purelib-platlib-split/plat.py +0 -0
  211. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/purelib-platlib-split/pure.py +0 -0
  212. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/purelib-platlib-split/pyproject.toml +0 -0
  213. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/scipy-like/meson.build +0 -0
  214. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/scipy-like/mypkg/__init__.py +0 -0
  215. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/scipy-like/mypkg/cy_extmod.pyx +0 -0
  216. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/scipy-like/mypkg/extmod.c +0 -0
  217. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/scipy-like/mypkg/meson.build +0 -0
  218. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/scipy-like/mypkg/submod/__init__.py +0 -0
  219. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/scipy-like/mypkg/submod/unknown_filetype.npq +0 -0
  220. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/scipy-like/pyproject.toml +0 -0
  221. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/scipy-like/tools/generate_config.py +0 -0
  222. {meson_python-0.21.1/tests/packages/subdirs → meson_python-0.22.0/tests/packages/sharedlib-in-package}/pyproject.toml +0 -0
  223. {meson_python-0.21.1/tests/packages/sharedlib-in-package → meson_python-0.22.0/tests/packages/sharedlib-in-package-legacy}/mypkg/__init__.py +0 -0
  224. {meson_python-0.21.1/tests/packages/sharedlib-in-package → meson_python-0.22.0/tests/packages/sharedlib-in-package-legacy}/mypkg/_examplemod.c +0 -0
  225. {meson_python-0.21.1/tests/packages/sharedlib-in-package → meson_python-0.22.0/tests/packages/sharedlib-in-package-legacy}/mypkg/examplelib.c +0 -0
  226. {meson_python-0.21.1/tests/packages/sharedlib-in-package → meson_python-0.22.0/tests/packages/sharedlib-in-package-legacy}/mypkg/examplelib.h +0 -0
  227. {meson_python-0.21.1/tests/packages/sharedlib-in-package → meson_python-0.22.0/tests/packages/sharedlib-in-package-legacy}/mypkg/sub/examplelib2.c +0 -0
  228. {meson_python-0.21.1/tests/packages/sharedlib-in-package → meson_python-0.22.0/tests/packages/sharedlib-in-package-legacy}/mypkg/sub/examplelib2.h +0 -0
  229. {meson_python-0.21.1/tests/packages/sharedlib-in-package → meson_python-0.22.0/tests/packages/sharedlib-in-package-legacy}/mypkg/sub/meson.build +0 -0
  230. {meson_python-0.21.1/tests/packages/sharedlib-in-package → meson_python-0.22.0/tests/packages/sharedlib-in-package-legacy}/mypkg/sub/mypkg_dll.h +0 -0
  231. {meson_python-0.21.1/tests/packages/sharedlib-in-package → meson_python-0.22.0/tests/packages/sharedlib-in-package-legacy}/pyproject.toml +0 -0
  232. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/simple/__init__.py +0 -0
  233. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/simple/data.txt +0 -0
  234. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/simple/meson.build +0 -0
  235. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/simple/pyproject.toml +0 -0
  236. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/simple/test.py +0 -0
  237. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/subdirs/meson.build +0 -0
  238. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/subdirs/subdirs/__init__.py +0 -0
  239. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/subdirs/subdirs/a/__init__.py +0 -0
  240. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/subdirs/subdirs/a/b/c.py +0 -0
  241. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/subdirs/subdirs/b/c.py +0 -0
  242. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/subproject/meson.build +0 -0
  243. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/subproject/pyproject.toml +0 -0
  244. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/subproject/subproject.py +0 -0
  245. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/subproject/subprojects/dep/data.txt +0 -0
  246. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/subproject/subprojects/dep/dep.py +0 -0
  247. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/subproject/subprojects/dep/meson.build +0 -0
  248. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/symlinks/__init__.py +0 -0
  249. /meson_python-0.21.1/tests/packages/symlinks/submodule/aaa.py → /meson_python-0.22.0/tests/packages/symlinks/ccc.py +0 -0
  250. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/symlinks/meson.build +0 -0
  251. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/symlinks/pyproject.toml +0 -0
  252. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/symlinks/submodule/__init__.py +0 -0
  253. /meson_python-0.21.1/tests/packages/symlinks/submodule/bbb.py → /meson_python-0.22.0/tests/packages/symlinks/submodule/aaa.py +0 -0
  254. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/unknown-user-args-meson-args/pyproject.toml +0 -0
  255. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/unknown-user-args-top-level/pyproject.toml +0 -0
  256. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/unsupported-python-version/meson.build +0 -0
  257. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/unsupported-python-version/pyproject.toml +0 -0
  258. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/user-args/meson.build +0 -0
  259. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/user-args/pure.py +0 -0
  260. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/user-args/pyproject.toml +0 -0
  261. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/vendored-meson/meson.build +0 -0
  262. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/vendored-meson/meson_options.txt +0 -0
  263. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/vendored-meson/pyproject.toml +0 -0
  264. {meson_python-0.21.1 → meson_python-0.22.0}/tests/packages/vendored-meson/third-party/meson.py +0 -0
  265. {meson_python-0.21.1 → meson_python-0.22.0}/tests/test_consistency.py +0 -0
  266. {meson_python-0.21.1 → meson_python-0.22.0}/tests/test_metadata.py +0 -0
  267. {meson_python-0.21.1 → meson_python-0.22.0}/tests/test_options.py +0 -0
  268. {meson_python-0.21.1 → meson_python-0.22.0}/tests/test_output.py +0 -0
  269. {meson_python-0.21.1 → meson_python-0.22.0}/tests/test_pep517.py +0 -0
  270. {meson_python-0.21.1 → meson_python-0.22.0}/tests/test_tags.py +0 -0
  271. {meson_python-0.21.1 → meson_python-0.22.0}/tests/test_wheelfile.py +0 -0
@@ -49,19 +49,15 @@ jobs:
49
49
  # a job running on macOS on x86-64 for a while longer.
50
50
  - macos-15-intel
51
51
  python:
52
- - '3.9'
52
+ - '3.10'
53
53
  - '3.15'
54
54
  meson:
55
55
  -
56
56
  dependencies:
57
57
  -
58
58
  include:
59
- - os: ubuntu-latest
60
- python: 'pypy-3.9'
61
59
  - os: ubuntu-latest
62
60
  python: 'pypy-3.11'
63
- - os: ubuntu-latest
64
- python: '3.10'
65
61
  # Test with older supported Meson version. Meson up to
66
62
  # version 1.2.3 requires distutils, which has been removed
67
63
  # from the stdlib in Python 3.12, thus test with Pythn 3.11.
@@ -100,6 +96,15 @@ jobs:
100
96
  - os: ubuntu-latest
101
97
  python: '3.13'
102
98
  meson: '~=1.8.0'
99
+ - os: ubuntu-latest
100
+ python: '3.13'
101
+ meson: '~=1.9.0'
102
+ - os: ubuntu-latest
103
+ python: '3.13'
104
+ meson: '~=1.10.0'
105
+ - os: ubuntu-latest
106
+ python: '3.13'
107
+ meson: '~=1.11.0'
103
108
  # Test with Meson master branch.
104
109
  - os: ubuntu-latest
105
110
  python: '3.14'
@@ -205,7 +210,7 @@ jobs:
205
210
  fail-fast: false
206
211
  matrix:
207
212
  python:
208
- - '3.9'
213
+ - '3.12'
209
214
  meson:
210
215
  -
211
216
 
@@ -219,10 +224,11 @@ jobs:
219
224
  uses: cygwin/cygwin-install-action@3f0a3f9f988f7e96b8c18098ae05eaec175f5b52 # v6
220
225
  with:
221
226
  packages: >-
222
- python39
223
- python39-devel
224
- python39-pip
225
- python39-setuptools
227
+ python312
228
+ python312-devel
229
+ python312-pip
230
+ python312-setuptools
231
+ python312-virtualenv
226
232
  cmake
227
233
  gcc-core
228
234
  gcc-g++
@@ -261,16 +267,7 @@ jobs:
261
267
  shell: C:\cygwin\bin\env.exe CYGWIN_NOWINPATH=1 CHERE_INVOKING=1 C:\cygwin\bin\bash.exe -leo pipefail -o igncr {0}
262
268
 
263
269
  - name: Install
264
- # Cygwin patches Python's ensurepip module to look for the
265
- # wheels needed to initialize a new virtual environment in
266
- # /usr/share/python-wheels/ but nothing in Cygwin actually
267
- # puts the setuptools and pip wheels there. Fix this.
268
- run: |
269
- mkdir /usr/share/python-wheels/
270
- pushd /usr/share/python-wheels/
271
- python -m pip download setuptools pip
272
- popd
273
- python -m pip install . --group test
270
+ run: python -m pip install . --group test
274
271
  shell: C:\cygwin\bin\env.exe CYGWIN_NOWINPATH=1 CHERE_INVOKING=1 C:\cygwin\bin\bash.exe -leo pipefail -o igncr {0}
275
272
 
276
273
  - name: Run tests
@@ -283,7 +280,7 @@ jobs:
283
280
  fail-fast: false
284
281
  matrix:
285
282
  python:
286
- - '3.9'
283
+ - '3.10'
287
284
  - '3.12'
288
285
  meson:
289
286
  -
@@ -327,13 +324,13 @@ jobs:
327
324
  - name: Setup Python
328
325
  uses: actions/setup-python@v7
329
326
  with:
330
- python-version: 3.9
327
+ python-version: '3.10'
331
328
 
332
329
  - name: Install dependencies
333
330
  run: python -m pip install .
334
331
 
335
332
  - name: Install mypy
336
- run: python -m pip install mypy~=1.19
333
+ run: python -m pip install mypy~=2.3.1
337
334
 
338
335
  - name: Run mypy
339
336
  run: mypy -p mesonpy
@@ -355,3 +352,19 @@ jobs:
355
352
  - name: Run tests
356
353
  working-directory: .github/workflows
357
354
  run: pixi run test
355
+
356
+ uv-sync:
357
+ runs-on: ubuntu-latest
358
+ steps:
359
+ - uses: actions/checkout@v7
360
+ with:
361
+ persist-credentials: false
362
+
363
+ - name: Install uv
364
+ uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
365
+ with:
366
+ enable-cache: false
367
+ version: "0.12.13" # Released on 2026-09-10
368
+
369
+ # Ensure that dependencies and dependency groups are consistent and resolvable.
370
+ - run: uv sync --all-extras --all-groups --dry-run
@@ -10,3 +10,4 @@ docs/_build
10
10
  dist/
11
11
  .coverage
12
12
  tests/packages/**/.wraplock
13
+ *.lock
@@ -2,6 +2,8 @@
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
4
 
5
+ # 'pre-commit' is not a project dependency -- if needed, users may choose to install it
6
+
5
7
  ci:
6
8
  autofix_prs: false
7
9
  autoupdate_commit_msg: 'MAINT: bump pre-commit dependencies'
@@ -11,6 +11,19 @@
11
11
  Changelog
12
12
  +++++++++
13
13
 
14
+ 0.22.0
15
+ ======
16
+
17
+ - Add support for adding RPATH entries specified with ``install_rpath``
18
+ argument to Meson functions that accept it.
19
+ - Add support for removing build RPATH entries added by Meson to allow
20
+ executing parts of the project from the build directory.
21
+ - Fix corner cases in handling RPATH entries and relocation of shared
22
+ libraries distributed as part of Python packages.
23
+
24
+ Daniele Nicolodi, Mike Taves, Nathan Goldbaum, Ralf Gommers --- 25-09-2026.
25
+
26
+
14
27
  0.21.1
15
28
  ======
16
29
 
@@ -30,8 +43,9 @@ Daniele Nicolodi, Ralf Gommers --- 11-09-2026.
30
43
  build errors when rebuilding.
31
44
  - Use ``.start`` files (PEP 829) instead of ``.pth`` files to implement editable
32
45
  wheels for Python 3.15 and later.
46
+ - From this release onwards, SSH keys used to sign release tags.
33
47
 
34
- Daniele Nicolodi, Michał Górny, Ralf Gommers --- 25-08-2026.
48
+ Daniele Nicolodi, Michał Górny, Ralf Gommers --- 07-09-2026.
35
49
 
36
50
 
37
51
  0.20.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meson-python
3
- Version: 0.21.1
3
+ Version: 0.22.0
4
4
  Summary: The Python build backend for Meson projects
5
5
  Keywords: meson,build,backend,pep517,package
6
6
  Maintainer-Email: Ralf Gommers <ralf.gommers@gmail.com>, Daniele Nicolodi <daniele@grinta.net>, Henry Schreiner <HenrySchreinerIII@gmail.com>
@@ -13,7 +13,7 @@ Project-URL: homepage, https://github.com/mesonbuild/meson-python
13
13
  Project-URL: repository, https://github.com/mesonbuild/meson-python
14
14
  Project-URL: documentation, https://mesonbuild.com/meson-python/
15
15
  Project-URL: changelog, https://mesonbuild.com/meson-python/changelog.html
16
- Requires-Python: >=3.9
16
+ Requires-Python: >=3.10
17
17
  Requires-Dist: meson>=0.64.0; python_version < "3.12"
18
18
  Requires-Dist: meson>=1.2.3; python_version >= "3.12"
19
19
  Requires-Dist: packaging>=23.2; sys_platform != "ios"
@@ -0,0 +1,49 @@
1
+ .. SPDX-FileCopyrightText: 2023 The meson-python developers
2
+ ..
3
+ .. SPDX-License-Identifier: MIT
4
+
5
+ Release Process
6
+ ===============
7
+
8
+ Releases are published as git tags, signed with either an SSH or a PGP key
9
+ belonging to a maintainer. The signing key must be registered on GitHub so that
10
+ GitHub shows the tag as verified.
11
+
12
+ You may release the project by following these steps:
13
+
14
+ #. Release to the Git repository on GitHub:
15
+
16
+ #. Create the release commit
17
+
18
+ #. Bump the versions in ``pyproject.toml`` and in ``mesonpy/__init__.py``.
19
+ #. Create ``CHANGELOG.rst`` section for the new release and fill it.
20
+ #. The commit message should read: ``REL: set version to X.Y.Z``
21
+
22
+ #. Create a signed tag for the release:
23
+
24
+ .. code-block:: console
25
+
26
+ $ git tag -s X.Y.Z
27
+
28
+ This signs with your PGP key by default. To sign with an SSH key instead,
29
+ configure git once beforehand:
30
+
31
+ .. code-block:: console
32
+
33
+ $ git config --global gpg.format ssh
34
+ $ git config --global user.signingkey ~/.ssh/id_ed25519.pub
35
+
36
+ The SSH signing key must be registered on
37
+ GitHub as a Signing Key for the tag to show as verified.
38
+
39
+ The tag title should follow the ``meson-python X.Y.Z`` format, and the
40
+ tag body should be a plain text version of the change-log for the current
41
+ release.
42
+
43
+ #. Push the tag to the repository:
44
+
45
+ .. code-block:: console
46
+
47
+ $ git push --tags
48
+
49
+ #. Release to PyPI is done via trusted publishing, triggering on the tag.
@@ -49,13 +49,20 @@ supported Python versions.
49
49
 
50
50
  Distributors are recommended to fetch release sources from the
51
51
  corresponding tags on the Git repository_ or from source distributions
52
- on `PyPI`_. Git tags are PGP-signed with one of the following keys:
52
+ on `PyPI`_. From ``0.21.0`` onwards, releases are published as signed tags,
53
+ signed with either an SSH or a PGP key belonging to `@rgommers`_ or
54
+ `@dnicolodi`_. Those signing keys can be retrieved from GitHub.
55
+
56
+ Releases up to and including ``0.20.0`` are PGP-signed with one of the
57
+ following keys:
53
58
 
54
59
  - |3DCE51D60930EBA47858BA4146F633CBB0EB4BF2|_ Filipe Laíns
55
60
  - |52BDC33FD1FBAB569D47FFA923D9E5499A08BDC5|_ Ralf Gommers
56
61
 
57
62
  .. _repository: https://github.com/mesonbuild/meson-python
58
63
  .. _PyPI: https://pypi.org/project/meson-python/
64
+ .. _@rgommers: https://github.com/rgommers
65
+ .. _@dnicolodi: https://github.com/dnicolodi
59
66
 
60
67
  .. |3DCE51D60930EBA47858BA4146F633CBB0EB4BF2| replace:: ``3DCE51D60930EBA47858BA4146F633CBB0EB4BF2``
61
68
  .. _3DCE51D60930EBA47858BA4146F633CBB0EB4BF2: https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3dce51d60930eba47858ba4146f633cbb0eb4bf2
@@ -11,6 +11,19 @@
11
11
  Changelog
12
12
  +++++++++
13
13
 
14
+ 0.22.0
15
+ ======
16
+
17
+ - Add support for adding RPATH entries specified with ``install_rpath``
18
+ argument to Meson functions that accept it.
19
+ - Add support for removing build RPATH entries added by Meson to allow
20
+ executing parts of the project from the build directory.
21
+ - Fix corner cases in handling RPATH entries and relocation of shared
22
+ libraries distributed as part of Python packages.
23
+
24
+ Daniele Nicolodi, Mike Taves, Nathan Goldbaum, Ralf Gommers --- 25-09-2026.
25
+
26
+
14
27
  0.21.1
15
28
  ======
16
29
 
@@ -30,8 +43,9 @@ Daniele Nicolodi, Ralf Gommers --- 11-09-2026.
30
43
  build errors when rebuilding.
31
44
  - Use ``.start`` files (PEP 829) instead of ``.pth`` files to implement editable
32
45
  wheels for Python 3.15 and later.
46
+ - From this release onwards, SSH keys used to sign release tags.
33
47
 
34
- Daniele Nicolodi, Michał Górny, Ralf Gommers --- 25-08-2026.
48
+ Daniele Nicolodi, Michał Górny, Ralf Gommers --- 07-09-2026.
35
49
 
36
50
 
37
51
  0.20.0
@@ -0,0 +1,176 @@
1
+ .. SPDX-FileCopyrightText: 2026 The meson-python developers
2
+ ..
3
+ .. SPDX-License-Identifier: MIT
4
+
5
+ .. _howto-limited-api:
6
+
7
+ ***********************************
8
+ Targeting the CPython Limited C API
9
+ ***********************************
10
+
11
+ This page describes how to configure your package to build against the
12
+ CPython `limited API`_ and build `stable ABI`_ wheels. Limited API builds
13
+ target a minimum interpreter version and produce a single wheel that
14
+ can support newer interpreter versions.
15
+
16
+ You can enable limited API builds by default or make them opt-in.
17
+ We recommend making them opt-in to avoid failures or special handling
18
+ when building for interpreters that do not support the stable ABI, such
19
+ as free-threaded CPython 3.14. Using the version-specific C API can also
20
+ `improve performance`_ for source installations and distribution packages
21
+ that do not need the stable ABI.
22
+
23
+ Compile your extension modules for the limited API by specifying the
24
+ ``limited_api`` argument to the ``extension_module()`` function in the
25
+ Meson Python module. The version passed to ``limited_api`` selects
26
+ the limited API your extension uses. Meson converts this version to
27
+ the corresponding value of the ``Py_LIMITED_API`` preprocessor macro.
28
+
29
+ The wheel's :ref:`Python compatibility tag <limited-api-wheel-tags>`
30
+ still corresponds to the interpreter used for the build, regardless of
31
+ the ``limited_api`` version you select.
32
+
33
+ Enabling the
34
+ :option:`tool.meson-python.limited-api` setting declares that all the
35
+ extension modules in your package target the limited API and adjusts the
36
+ wheel filename ABI tag accordingly:
37
+
38
+ .. code-block:: meson
39
+
40
+ py = import('python').find_installation(pure: false)
41
+
42
+ py.extension_module(
43
+ '_core',
44
+ '_core.c',
45
+ limited_api: '3.10',
46
+ install: true,
47
+ subdir: 'example',
48
+ )
49
+
50
+ .. code-block:: toml
51
+
52
+ [tool.meson-python]
53
+ limited-api = true
54
+
55
+
56
+ For limited API builds, on platforms where Python extension modules
57
+ targeting the stable ABI use a dedicated filename suffix, ``meson-python``
58
+ verifies that all the extension modules included in the wheel use the
59
+ stable ABI filename suffix and fails the build otherwise.
60
+
61
+
62
+ .. _opt-in-limited-api-example:
63
+
64
+ Set up Limited API support as opt-in
65
+ ------------------------------------
66
+
67
+ To make limited API builds opt-in, add
68
+ ``python.allow_limited_api=false`` to the ``default_options`` in your
69
+ existing ``project()`` call in ``meson.build``:
70
+
71
+ .. code-block:: meson
72
+
73
+ project(
74
+ 'example',
75
+ 'c',
76
+ default_options: ['python.allow_limited_api=false'],
77
+ )
78
+
79
+ Keep ``limited-api = true`` in ``pyproject.toml`` and the ``limited_api``
80
+ argument to ``extension_module()`` as shown above. When
81
+ ``python.allow_limited_api`` is false, Meson ignores the ``limited_api``
82
+ argument, compiles extension modules for the ABI of the interpreter
83
+ used for the build, and produces a wheel tagged as compatible with
84
+ the build interpreter.
85
+
86
+ To build a stable ABI wheel, explicitly enable limited API builds:
87
+
88
+ .. tab-set::
89
+
90
+ .. tab-item:: pypa/build
91
+ :sync: key_pypa_build
92
+
93
+ .. code-block:: console
94
+
95
+ $ python -m build --wheel -Csetup-args="-Dpython.allow_limited_api=true" .
96
+
97
+ .. tab-item:: pip
98
+ :sync: key_pip
99
+
100
+ .. code-block:: console
101
+
102
+ $ python -m pip wheel -Csetup-args="-Dpython.allow_limited_api=true" .
103
+
104
+
105
+ .. _limited-api-wheel-tags:
106
+
107
+ Limited API compatibility
108
+ -------------------------
109
+
110
+ ``meson-python`` conservatively chooses the wheel's Python compatibility
111
+ tag based only on the interpreter used for the build, regardless of the
112
+ target ``limited_api`` version. For example, a wheel built with CPython
113
+ 3.12 for the 3.10 limited API is tagged ``cp312-abi3`` and can be
114
+ installed only on GIL-enabled CPython 3.12 and later. When building
115
+ stable ABI wheels for distribution, for example on PyPI, build with the
116
+ oldest CPython version you want the wheel to support, as `recommended by
117
+ CPython`_. If you are installing from source into a particular
118
+ environment, use that environment's interpreter; you do not need to
119
+ build with the oldest supported version.
120
+
121
+ PyPy supports the limited API, but does not implement a stable ABI, thus
122
+ the :option:`tool.meson-python.limited-api` setting has no effect on the
123
+ wheel tags when building with PyPy.
124
+
125
+
126
+ The ``abi3t`` stable ABI
127
+ ------------------------
128
+
129
+ CPython 3.15 introduces the ``abi3t`` stable ABI. Extension modules built
130
+ for ``abi3t`` can be loaded by both the GIL-enabled and the free-threaded
131
+ builds of CPython 3.15 and later: a single wheel tagged ``abi3.abi3t``
132
+ supports all CPython interpreters from version 3.15 on.
133
+
134
+ ``abi3t`` extension modules require limited API version 3.15 or later
135
+ and, currently, a free-threaded interpreter for the build: compiling
136
+ for ``abi3t`` with a GIL-enabled interpreter is not supported yet.
137
+ Once you have made the source changes described in the
138
+ `abi3t migration guide`_, no additional build configuration is required:
139
+ the CPython headers select ``abi3t`` when ``Py_LIMITED_API`` is defined
140
+ while compiling for a free-threaded interpreter.
141
+
142
+ Meson refuses a ``limited_api`` version newer than the interpreter
143
+ used for the build. If you build ``abi3`` wheels for older
144
+ CPython versions and ``abi3.abi3t`` wheels for CPython 3.15 and later,
145
+ you can select the limited API version by querying the ``Py_GIL_DISABLED``
146
+ sysconfig variable, which is 1 for free-threaded builds:
147
+
148
+ .. code-block:: meson
149
+
150
+ py = import('python').find_installation(pure: false)
151
+
152
+ limited_api = '3.10'
153
+ if py.language_version().version_compare('>=3.15')
154
+ if py.get_variable('Py_GIL_DISABLED') == 1
155
+ limited_api = '3.15'
156
+ endif
157
+ endif
158
+
159
+ py.extension_module(
160
+ '_core',
161
+ '_core.c',
162
+ limited_api: limited_api,
163
+ install: true,
164
+ subdir: 'example',
165
+ )
166
+
167
+ Free-threaded CPython 3.13 and 3.14 do not support the limited API:
168
+ disable limited API builds when using these interpreters.
169
+ The :ref:`opt-in configuration above <opt-in-limited-api-example>`
170
+ disables them by default.
171
+
172
+ .. _limited API: https://docs.python.org/3/c-api/stable.html#limited-c-api
173
+ .. _stable ABI: https://docs.python.org/3/c-api/stable.html#stable-application-binary-interface
174
+ .. _recommended by CPython: https://docs.python.org/3/c-api/stable.html#limited-api-caveats
175
+ .. _improve performance: https://docs.python.org/3/c-api/stable.html#limited-api-scope-and-performance
176
+ .. _abi3t migration guide: https://docs.python.org/3.15/howto/abi3t-migration.html
@@ -67,11 +67,7 @@ is to be used inside the Python package being built, then it is best to modify
67
67
  the install location, via the ``install_dir`` argument, to be within
68
68
  the Python package itself:
69
69
 
70
- .. TODO update the text block below to 'meson' when
71
- .. meson lexer is updated to fix
72
- .. https://github.com/pygments/pygments/issues/2918
73
-
74
- .. code-block:: text
70
+ .. code-block:: meson
75
71
 
76
72
  example_lib = shared_library(
77
73
  'example',
@@ -80,8 +76,9 @@ the Python package itself:
80
76
  install_dir: py.get_install_dir() / 'mypkg/subdir',
81
77
  )
82
78
 
83
- Then an extension module in the same install directory can link against the
84
- shared library in a portable manner by using ``install_rpath``:
79
+ On Linux, macOS, and in general on all systems except Windows, an extension
80
+ module can dynamically link against a shared library installed in the same
81
+ package by using ``install_rpath`` with a relative path:
85
82
 
86
83
  .. code-block:: meson
87
84
 
@@ -90,12 +87,17 @@ shared library in a portable manner by using ``install_rpath``:
90
87
  link_with: example_lib,
91
88
  install: true,
92
89
  subdir: 'mypkg/subdir',
93
- install_rpath: '$ORIGIN'
90
+ install_rpath: host_machine.system() == 'darwin' ? '@loader_path' : '$ORIGIN'
94
91
  )
95
92
 
96
- The above method will work as advertised on macOS and Linux; ``meson-python`` does
97
- nothing special for this case. Windows needs some special handling though, due to
98
- the lack of RPATH support:
93
+ Note that Mach-O binaries on macOS use the ``@loader_path`` token to indicate
94
+ the location of the current executable or shared library while ELF binaries use
95
+ the ``$ORIGIN`` token. For backward compatibility, ``meson-python`` translates
96
+ the more common ``$ORIGIN`` token to the macOS-specific ``@loader_path`` token
97
+ when building on macOS. However, Meson itself does not, thus relying on this
98
+ translation is discouraged.
99
+
100
+ Windows needs some special handling though, due to the lack of RPATH support:
99
101
 
100
102
  .. literalinclude:: ../../tests/packages/sharedlib-in-package/mypkg/__init__.py
101
103
  :start-after: start-literalinclude
@@ -55,7 +55,8 @@ can be overridden and extended using the standard package metadata format in the
55
55
  version = '1.0.0'
56
56
  description = 'Example package using the meson-python build backend'
57
57
  readme = 'README.rst'
58
- license = {file = 'LICENSE.txt'}
58
+ license = 'MIT'
59
+ license-files = ['LICENSE.txt']
59
60
  authors = [
60
61
  {name = 'Au Thor', email = 'author@example.com'},
61
62
  ]
@@ -83,6 +84,7 @@ the use of ``meson-python`` and Meson for Python packaging.
83
84
  how-to-guides/meson-args
84
85
  how-to-guides/debug-builds
85
86
  how-to-guides/shared-libraries
87
+ how-to-guides/limited-api
86
88
  reference/limitations
87
89
  projects-using-meson-python
88
90
 
@@ -52,10 +52,20 @@ versions.
52
52
  populate the package license and license files from the ones
53
53
  declared via the ``project()`` call in ``meson.build``.
54
54
 
55
+ Meson 1.6.0 or later is also required to support the
56
+ ``install_rpath`` argument to Meson functions that accept it, such
57
+ as ``library()`` and ``extension_module()``. On older Meson
58
+ versions, this argument has no effect.
59
+
55
60
  .. option:: 1.9.0
56
61
 
57
62
  Meson 1.9.0 or later is required to support building for iOS.
58
63
 
64
+ Meson 1.9.0 or later is also required to remove RPATH entries that
65
+ are added by Meson to allow executing parts of the project from
66
+ the build directory and that are normally removed during ``meson
67
+ install``. On older Meson versions, these entries are not removed.
68
+
59
69
  Build front-ends by default build packages in an isolated Python
60
70
  environment where build dependencies are installed. Most often, unless
61
71
  a package or its build dependencies declare explicitly a version
@@ -40,11 +40,12 @@ use them and examples.
40
40
  modules can be compiled for the Python limited API specifying the
41
41
  ``limited_api`` argument to the |extension_module()|_ function
42
42
  in the Meson Python module. When this setting is set to true, the
43
- value ``abi3`` is used for the Python wheel filename ABI tag.
44
-
45
- This setting is automatically reverted to false when the
43
+ Python wheel filename ABI tag is set to ``abi3``, or ``abi3.abi3t``
44
+ when building with free-threaded CPython 3.15 or later. This
45
+ setting is automatically reverted to false when the
46
46
  ``-Dpython.allow_limited_api=false`` option is passed to ``meson
47
- setup``.
47
+ setup``. See :ref:`howto-limited-api` for more information on limited
48
+ API builds.
48
49
 
49
50
  .. option:: tool.meson-python.meson
50
51
 
@@ -98,7 +99,7 @@ use them and examples.
98
99
  glob pattern is useful exclusively to limit the effect of an exclude
99
100
  pattern that matches too many files.
100
101
 
101
- .. _python limited api: https://docs.python.org/3/c-api/stable.html?highlight=limited%20api#stable-application-binary-interface
102
+ .. _python limited api: https://docs.python.org/3/c-api/stable.html#stable-application-binary-interface
102
103
  .. _extension_module(): `https://mesonbuild.com/Python-module.html#extension_module
103
104
  .. _meson introspection data: https://mesonbuild.com/IDE-integration.html#install-plan
104
105
 
@@ -139,7 +139,8 @@ self-explanatory:
139
139
  description = 'Our first Python project, using meson-python!'
140
140
  readme = 'README.md'
141
141
  requires-python = '>=3.8'
142
- license = {file = 'LICENSE.txt'}
142
+ license = 'MIT'
143
+ license-files = ['LICENSE.txt']
143
144
  authors = [
144
145
  {name = 'Bowsette Koopa', email = 'bowsette@example.com'},
145
146
  ]