android-notify 1.60.0__py3-none-any.whl → 1.60.2__py3-none-any.whl

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 android-notify might be problematic. Click here for more details.

Files changed (375) hide show
  1. android_notify/config.py +1 -1
  2. {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/METADATA +4 -4
  3. {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/RECORD +375 -6
  4. venv/Lib/site-packages/_distutils_hack/__init__.py +239 -0
  5. venv/Lib/site-packages/_distutils_hack/override.py +1 -0
  6. venv/Lib/site-packages/pkg_resources/__init__.py +3713 -0
  7. venv/Lib/site-packages/pkg_resources/py.typed +0 -0
  8. venv/Lib/site-packages/pkg_resources/tests/__init__.py +0 -0
  9. venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +7 -0
  10. venv/Lib/site-packages/pkg_resources/tests/test_find_distributions.py +56 -0
  11. venv/Lib/site-packages/pkg_resources/tests/test_integration_zope_interface.py +54 -0
  12. venv/Lib/site-packages/pkg_resources/tests/test_markers.py +8 -0
  13. venv/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +485 -0
  14. venv/Lib/site-packages/pkg_resources/tests/test_resources.py +869 -0
  15. venv/Lib/site-packages/pkg_resources/tests/test_working_set.py +505 -0
  16. venv/Lib/site-packages/setuptools/__init__.py +248 -0
  17. venv/Lib/site-packages/setuptools/_core_metadata.py +337 -0
  18. venv/Lib/site-packages/setuptools/_discovery.py +33 -0
  19. venv/Lib/site-packages/setuptools/_distutils/__init__.py +14 -0
  20. venv/Lib/site-packages/setuptools/_distutils/_log.py +3 -0
  21. venv/Lib/site-packages/setuptools/_distutils/_macos_compat.py +12 -0
  22. venv/Lib/site-packages/setuptools/_distutils/_modified.py +95 -0
  23. venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +16 -0
  24. venv/Lib/site-packages/setuptools/_distutils/archive_util.py +294 -0
  25. venv/Lib/site-packages/setuptools/_distutils/ccompiler.py +26 -0
  26. venv/Lib/site-packages/setuptools/_distutils/cmd.py +554 -0
  27. venv/Lib/site-packages/setuptools/_distutils/command/__init__.py +23 -0
  28. venv/Lib/site-packages/setuptools/_distutils/command/_framework_compat.py +54 -0
  29. venv/Lib/site-packages/setuptools/_distutils/command/bdist.py +167 -0
  30. venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +141 -0
  31. venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +598 -0
  32. venv/Lib/site-packages/setuptools/_distutils/command/build.py +156 -0
  33. venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +201 -0
  34. venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +812 -0
  35. venv/Lib/site-packages/setuptools/_distutils/command/build_py.py +407 -0
  36. venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +160 -0
  37. venv/Lib/site-packages/setuptools/_distutils/command/check.py +152 -0
  38. venv/Lib/site-packages/setuptools/_distutils/command/clean.py +77 -0
  39. venv/Lib/site-packages/setuptools/_distutils/command/config.py +358 -0
  40. venv/Lib/site-packages/setuptools/_distutils/command/install.py +805 -0
  41. venv/Lib/site-packages/setuptools/_distutils/command/install_data.py +94 -0
  42. venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py +91 -0
  43. venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py +46 -0
  44. venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py +238 -0
  45. venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +62 -0
  46. venv/Lib/site-packages/setuptools/_distutils/command/sdist.py +521 -0
  47. venv/Lib/site-packages/setuptools/_distutils/compat/__init__.py +18 -0
  48. venv/Lib/site-packages/setuptools/_distutils/compat/numpy.py +2 -0
  49. venv/Lib/site-packages/setuptools/_distutils/compat/py39.py +66 -0
  50. venv/Lib/site-packages/setuptools/_distutils/compilers/C/base.py +1394 -0
  51. venv/Lib/site-packages/setuptools/_distutils/compilers/C/cygwin.py +340 -0
  52. venv/Lib/site-packages/setuptools/_distutils/compilers/C/errors.py +24 -0
  53. venv/Lib/site-packages/setuptools/_distutils/compilers/C/msvc.py +614 -0
  54. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_base.py +83 -0
  55. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_cygwin.py +76 -0
  56. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_mingw.py +48 -0
  57. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_msvc.py +136 -0
  58. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_unix.py +413 -0
  59. venv/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +422 -0
  60. venv/Lib/site-packages/setuptools/_distutils/compilers/C/zos.py +230 -0
  61. venv/Lib/site-packages/setuptools/_distutils/core.py +289 -0
  62. venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +31 -0
  63. venv/Lib/site-packages/setuptools/_distutils/debug.py +5 -0
  64. venv/Lib/site-packages/setuptools/_distutils/dep_util.py +14 -0
  65. venv/Lib/site-packages/setuptools/_distutils/dir_util.py +244 -0
  66. venv/Lib/site-packages/setuptools/_distutils/dist.py +1386 -0
  67. venv/Lib/site-packages/setuptools/_distutils/errors.py +108 -0
  68. venv/Lib/site-packages/setuptools/_distutils/extension.py +258 -0
  69. venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py +471 -0
  70. venv/Lib/site-packages/setuptools/_distutils/file_util.py +236 -0
  71. venv/Lib/site-packages/setuptools/_distutils/filelist.py +431 -0
  72. venv/Lib/site-packages/setuptools/_distutils/log.py +56 -0
  73. venv/Lib/site-packages/setuptools/_distutils/spawn.py +134 -0
  74. venv/Lib/site-packages/setuptools/_distutils/sysconfig.py +598 -0
  75. venv/Lib/site-packages/setuptools/_distutils/tests/__init__.py +42 -0
  76. venv/Lib/site-packages/setuptools/_distutils/tests/compat/__init__.py +0 -0
  77. venv/Lib/site-packages/setuptools/_distutils/tests/compat/py39.py +40 -0
  78. venv/Lib/site-packages/setuptools/_distutils/tests/support.py +134 -0
  79. venv/Lib/site-packages/setuptools/_distutils/tests/test_archive_util.py +353 -0
  80. venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist.py +47 -0
  81. venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist_dumb.py +78 -0
  82. venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist_rpm.py +127 -0
  83. venv/Lib/site-packages/setuptools/_distutils/tests/test_build.py +49 -0
  84. venv/Lib/site-packages/setuptools/_distutils/tests/test_build_clib.py +134 -0
  85. venv/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +628 -0
  86. venv/Lib/site-packages/setuptools/_distutils/tests/test_build_py.py +196 -0
  87. venv/Lib/site-packages/setuptools/_distutils/tests/test_build_scripts.py +96 -0
  88. venv/Lib/site-packages/setuptools/_distutils/tests/test_check.py +194 -0
  89. venv/Lib/site-packages/setuptools/_distutils/tests/test_clean.py +45 -0
  90. venv/Lib/site-packages/setuptools/_distutils/tests/test_cmd.py +107 -0
  91. venv/Lib/site-packages/setuptools/_distutils/tests/test_config_cmd.py +87 -0
  92. venv/Lib/site-packages/setuptools/_distutils/tests/test_core.py +130 -0
  93. venv/Lib/site-packages/setuptools/_distutils/tests/test_dir_util.py +139 -0
  94. venv/Lib/site-packages/setuptools/_distutils/tests/test_dist.py +552 -0
  95. venv/Lib/site-packages/setuptools/_distutils/tests/test_extension.py +117 -0
  96. venv/Lib/site-packages/setuptools/_distutils/tests/test_file_util.py +95 -0
  97. venv/Lib/site-packages/setuptools/_distutils/tests/test_filelist.py +336 -0
  98. venv/Lib/site-packages/setuptools/_distutils/tests/test_install.py +245 -0
  99. venv/Lib/site-packages/setuptools/_distutils/tests/test_install_data.py +74 -0
  100. venv/Lib/site-packages/setuptools/_distutils/tests/test_install_headers.py +33 -0
  101. venv/Lib/site-packages/setuptools/_distutils/tests/test_install_lib.py +110 -0
  102. venv/Lib/site-packages/setuptools/_distutils/tests/test_install_scripts.py +52 -0
  103. venv/Lib/site-packages/setuptools/_distutils/tests/test_log.py +12 -0
  104. venv/Lib/site-packages/setuptools/_distutils/tests/test_modified.py +126 -0
  105. venv/Lib/site-packages/setuptools/_distutils/tests/test_sdist.py +470 -0
  106. venv/Lib/site-packages/setuptools/_distutils/tests/test_spawn.py +141 -0
  107. venv/Lib/site-packages/setuptools/_distutils/tests/test_sysconfig.py +319 -0
  108. venv/Lib/site-packages/setuptools/_distutils/tests/test_text_file.py +127 -0
  109. venv/Lib/site-packages/setuptools/_distutils/tests/test_util.py +243 -0
  110. venv/Lib/site-packages/setuptools/_distutils/tests/test_version.py +80 -0
  111. venv/Lib/site-packages/setuptools/_distutils/tests/test_versionpredicate.py +0 -0
  112. venv/Lib/site-packages/setuptools/_distutils/tests/unix_compat.py +17 -0
  113. venv/Lib/site-packages/setuptools/_distutils/text_file.py +286 -0
  114. venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +9 -0
  115. venv/Lib/site-packages/setuptools/_distutils/util.py +518 -0
  116. venv/Lib/site-packages/setuptools/_distutils/version.py +348 -0
  117. venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py +175 -0
  118. venv/Lib/site-packages/setuptools/_distutils/zosccompiler.py +3 -0
  119. venv/Lib/site-packages/setuptools/_entry_points.py +94 -0
  120. venv/Lib/site-packages/setuptools/_imp.py +87 -0
  121. venv/Lib/site-packages/setuptools/_importlib.py +9 -0
  122. venv/Lib/site-packages/setuptools/_itertools.py +23 -0
  123. venv/Lib/site-packages/setuptools/_normalization.py +177 -0
  124. venv/Lib/site-packages/setuptools/_path.py +93 -0
  125. venv/Lib/site-packages/setuptools/_reqs.py +42 -0
  126. venv/Lib/site-packages/setuptools/_scripts.py +361 -0
  127. venv/Lib/site-packages/setuptools/_shutil.py +59 -0
  128. venv/Lib/site-packages/setuptools/_static.py +188 -0
  129. venv/Lib/site-packages/setuptools/_vendor/autocommand/__init__.py +27 -0
  130. venv/Lib/site-packages/setuptools/_vendor/autocommand/autoasync.py +142 -0
  131. venv/Lib/site-packages/setuptools/_vendor/autocommand/autocommand.py +70 -0
  132. venv/Lib/site-packages/setuptools/_vendor/autocommand/automain.py +59 -0
  133. venv/Lib/site-packages/setuptools/_vendor/autocommand/autoparse.py +333 -0
  134. venv/Lib/site-packages/setuptools/_vendor/autocommand/errors.py +23 -0
  135. venv/Lib/site-packages/setuptools/_vendor/backports/__init__.py +1 -0
  136. venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/__init__.py +2937 -0
  137. venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/__main__.py +5 -0
  138. venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/compat/__init__.py +0 -0
  139. venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/compat/py38.py +24 -0
  140. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__init__.py +1083 -0
  141. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py +83 -0
  142. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_collections.py +30 -0
  143. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_compat.py +57 -0
  144. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_functools.py +104 -0
  145. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py +73 -0
  146. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_meta.py +67 -0
  147. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_text.py +99 -0
  148. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/__init__.py +0 -0
  149. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/py311.py +22 -0
  150. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/py39.py +36 -0
  151. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/diagnose.py +21 -0
  152. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/py.typed +0 -0
  153. venv/Lib/site-packages/setuptools/_vendor/inflect/__init__.py +3986 -0
  154. venv/Lib/site-packages/setuptools/_vendor/inflect/compat/__init__.py +0 -0
  155. venv/Lib/site-packages/setuptools/_vendor/inflect/compat/py38.py +7 -0
  156. venv/Lib/site-packages/setuptools/_vendor/inflect/py.typed +0 -0
  157. venv/Lib/site-packages/setuptools/_vendor/jaraco/collections/__init__.py +1091 -0
  158. venv/Lib/site-packages/setuptools/_vendor/jaraco/collections/py.typed +0 -0
  159. venv/Lib/site-packages/setuptools/_vendor/jaraco/context.py +361 -0
  160. venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.py +633 -0
  161. venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.pyi +125 -0
  162. venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/py.typed +0 -0
  163. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/__init__.py +624 -0
  164. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/layouts.py +25 -0
  165. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/show-newlines.py +33 -0
  166. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/strip-prefix.py +21 -0
  167. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/to-dvorak.py +6 -0
  168. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/to-qwerty.py +6 -0
  169. venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py +6 -0
  170. venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.pyi +2 -0
  171. venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py +4806 -0
  172. venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.pyi +709 -0
  173. venv/Lib/site-packages/setuptools/_vendor/more_itertools/py.typed +0 -0
  174. venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py +1046 -0
  175. venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.pyi +136 -0
  176. venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +15 -0
  177. venv/Lib/site-packages/setuptools/_vendor/packaging/_elffile.py +110 -0
  178. venv/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +263 -0
  179. venv/Lib/site-packages/setuptools/_vendor/packaging/_musllinux.py +85 -0
  180. venv/Lib/site-packages/setuptools/_vendor/packaging/_parser.py +354 -0
  181. venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +61 -0
  182. venv/Lib/site-packages/setuptools/_vendor/packaging/_tokenizer.py +194 -0
  183. venv/Lib/site-packages/setuptools/_vendor/packaging/licenses/__init__.py +145 -0
  184. venv/Lib/site-packages/setuptools/_vendor/packaging/licenses/_spdx.py +759 -0
  185. venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +331 -0
  186. venv/Lib/site-packages/setuptools/_vendor/packaging/metadata.py +863 -0
  187. venv/Lib/site-packages/setuptools/_vendor/packaging/py.typed +0 -0
  188. venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +91 -0
  189. venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +1020 -0
  190. venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +617 -0
  191. venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +163 -0
  192. venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +582 -0
  193. venv/Lib/site-packages/setuptools/_vendor/platformdirs/__init__.py +627 -0
  194. venv/Lib/site-packages/setuptools/_vendor/platformdirs/__main__.py +55 -0
  195. venv/Lib/site-packages/setuptools/_vendor/platformdirs/android.py +249 -0
  196. venv/Lib/site-packages/setuptools/_vendor/platformdirs/api.py +292 -0
  197. venv/Lib/site-packages/setuptools/_vendor/platformdirs/macos.py +130 -0
  198. venv/Lib/site-packages/setuptools/_vendor/platformdirs/py.typed +0 -0
  199. venv/Lib/site-packages/setuptools/_vendor/platformdirs/unix.py +275 -0
  200. venv/Lib/site-packages/setuptools/_vendor/platformdirs/version.py +16 -0
  201. venv/Lib/site-packages/setuptools/_vendor/platformdirs/windows.py +272 -0
  202. venv/Lib/site-packages/setuptools/_vendor/tomli/__init__.py +11 -0
  203. venv/Lib/site-packages/setuptools/_vendor/tomli/_parser.py +691 -0
  204. venv/Lib/site-packages/setuptools/_vendor/tomli/_re.py +107 -0
  205. venv/Lib/site-packages/setuptools/_vendor/tomli/_types.py +10 -0
  206. venv/Lib/site-packages/setuptools/_vendor/tomli/py.typed +1 -0
  207. venv/Lib/site-packages/setuptools/_vendor/typeguard/__init__.py +48 -0
  208. venv/Lib/site-packages/setuptools/_vendor/typeguard/_checkers.py +993 -0
  209. venv/Lib/site-packages/setuptools/_vendor/typeguard/_config.py +108 -0
  210. venv/Lib/site-packages/setuptools/_vendor/typeguard/_decorators.py +235 -0
  211. venv/Lib/site-packages/setuptools/_vendor/typeguard/_exceptions.py +42 -0
  212. venv/Lib/site-packages/setuptools/_vendor/typeguard/_functions.py +308 -0
  213. venv/Lib/site-packages/setuptools/_vendor/typeguard/_importhook.py +213 -0
  214. venv/Lib/site-packages/setuptools/_vendor/typeguard/_memo.py +48 -0
  215. venv/Lib/site-packages/setuptools/_vendor/typeguard/_pytest_plugin.py +127 -0
  216. venv/Lib/site-packages/setuptools/_vendor/typeguard/_suppression.py +86 -0
  217. venv/Lib/site-packages/setuptools/_vendor/typeguard/_transformer.py +1229 -0
  218. venv/Lib/site-packages/setuptools/_vendor/typeguard/_union_transformer.py +55 -0
  219. venv/Lib/site-packages/setuptools/_vendor/typeguard/_utils.py +173 -0
  220. venv/Lib/site-packages/setuptools/_vendor/typeguard/py.typed +0 -0
  221. venv/Lib/site-packages/setuptools/_vendor/typing_extensions.py +3641 -0
  222. venv/Lib/site-packages/setuptools/_vendor/wheel/__init__.py +3 -0
  223. venv/Lib/site-packages/setuptools/_vendor/wheel/__main__.py +23 -0
  224. venv/Lib/site-packages/setuptools/_vendor/wheel/_bdist_wheel.py +613 -0
  225. venv/Lib/site-packages/setuptools/_vendor/wheel/_setuptools_logging.py +26 -0
  226. venv/Lib/site-packages/setuptools/_vendor/wheel/bdist_wheel.py +26 -0
  227. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/__init__.py +155 -0
  228. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/convert.py +332 -0
  229. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/pack.py +85 -0
  230. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/tags.py +139 -0
  231. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/unpack.py +30 -0
  232. venv/Lib/site-packages/setuptools/_vendor/wheel/macosx_libfile.py +482 -0
  233. venv/Lib/site-packages/setuptools/_vendor/wheel/metadata.py +183 -0
  234. venv/Lib/site-packages/setuptools/_vendor/wheel/util.py +17 -0
  235. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/__init__.py +0 -0
  236. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/__init__.py +0 -0
  237. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_elffile.py +108 -0
  238. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_manylinux.py +260 -0
  239. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_musllinux.py +83 -0
  240. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_parser.py +356 -0
  241. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_structures.py +61 -0
  242. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_tokenizer.py +192 -0
  243. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/markers.py +253 -0
  244. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/requirements.py +90 -0
  245. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/specifiers.py +1011 -0
  246. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/tags.py +571 -0
  247. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/utils.py +172 -0
  248. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/version.py +561 -0
  249. venv/Lib/site-packages/setuptools/_vendor/wheel/wheelfile.py +227 -0
  250. venv/Lib/site-packages/setuptools/_vendor/zipp/__init__.py +501 -0
  251. venv/Lib/site-packages/setuptools/_vendor/zipp/compat/__init__.py +0 -0
  252. venv/Lib/site-packages/setuptools/_vendor/zipp/compat/py310.py +11 -0
  253. venv/Lib/site-packages/setuptools/_vendor/zipp/glob.py +106 -0
  254. venv/Lib/site-packages/setuptools/archive_util.py +219 -0
  255. venv/Lib/site-packages/setuptools/build_meta.py +548 -0
  256. venv/Lib/site-packages/setuptools/command/__init__.py +21 -0
  257. venv/Lib/site-packages/setuptools/command/_requirestxt.py +131 -0
  258. venv/Lib/site-packages/setuptools/command/alias.py +77 -0
  259. venv/Lib/site-packages/setuptools/command/bdist_egg.py +477 -0
  260. venv/Lib/site-packages/setuptools/command/bdist_rpm.py +42 -0
  261. venv/Lib/site-packages/setuptools/command/bdist_wheel.py +604 -0
  262. venv/Lib/site-packages/setuptools/command/build.py +135 -0
  263. venv/Lib/site-packages/setuptools/command/build_clib.py +103 -0
  264. venv/Lib/site-packages/setuptools/command/build_ext.py +470 -0
  265. venv/Lib/site-packages/setuptools/command/build_py.py +400 -0
  266. venv/Lib/site-packages/setuptools/command/develop.py +55 -0
  267. venv/Lib/site-packages/setuptools/command/dist_info.py +103 -0
  268. venv/Lib/site-packages/setuptools/command/easy_install.py +30 -0
  269. venv/Lib/site-packages/setuptools/command/editable_wheel.py +908 -0
  270. venv/Lib/site-packages/setuptools/command/egg_info.py +718 -0
  271. venv/Lib/site-packages/setuptools/command/install.py +131 -0
  272. venv/Lib/site-packages/setuptools/command/install_egg_info.py +58 -0
  273. venv/Lib/site-packages/setuptools/command/install_lib.py +137 -0
  274. venv/Lib/site-packages/setuptools/command/install_scripts.py +67 -0
  275. venv/Lib/site-packages/setuptools/command/rotate.py +65 -0
  276. venv/Lib/site-packages/setuptools/command/saveopts.py +21 -0
  277. venv/Lib/site-packages/setuptools/command/sdist.py +217 -0
  278. venv/Lib/site-packages/setuptools/command/setopt.py +141 -0
  279. venv/Lib/site-packages/setuptools/command/test.py +45 -0
  280. venv/Lib/site-packages/setuptools/compat/__init__.py +0 -0
  281. venv/Lib/site-packages/setuptools/compat/py310.py +20 -0
  282. venv/Lib/site-packages/setuptools/compat/py311.py +27 -0
  283. venv/Lib/site-packages/setuptools/compat/py312.py +13 -0
  284. venv/Lib/site-packages/setuptools/compat/py39.py +9 -0
  285. venv/Lib/site-packages/setuptools/config/__init__.py +43 -0
  286. venv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +526 -0
  287. venv/Lib/site-packages/setuptools/config/_validate_pyproject/__init__.py +34 -0
  288. venv/Lib/site-packages/setuptools/config/_validate_pyproject/error_reporting.py +336 -0
  289. venv/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +82 -0
  290. venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py +51 -0
  291. venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +1412 -0
  292. venv/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +402 -0
  293. venv/Lib/site-packages/setuptools/config/expand.py +452 -0
  294. venv/Lib/site-packages/setuptools/config/pyprojecttoml.py +468 -0
  295. venv/Lib/site-packages/setuptools/config/setupcfg.py +780 -0
  296. venv/Lib/site-packages/setuptools/depends.py +185 -0
  297. venv/Lib/site-packages/setuptools/discovery.py +614 -0
  298. venv/Lib/site-packages/setuptools/dist.py +1119 -0
  299. venv/Lib/site-packages/setuptools/errors.py +67 -0
  300. venv/Lib/site-packages/setuptools/extension.py +177 -0
  301. venv/Lib/site-packages/setuptools/glob.py +185 -0
  302. venv/Lib/site-packages/setuptools/installer.py +155 -0
  303. venv/Lib/site-packages/setuptools/launch.py +36 -0
  304. venv/Lib/site-packages/setuptools/logging.py +40 -0
  305. venv/Lib/site-packages/setuptools/modified.py +18 -0
  306. venv/Lib/site-packages/setuptools/monkey.py +126 -0
  307. venv/Lib/site-packages/setuptools/msvc.py +1536 -0
  308. venv/Lib/site-packages/setuptools/namespaces.py +106 -0
  309. venv/Lib/site-packages/setuptools/tests/__init__.py +13 -0
  310. venv/Lib/site-packages/setuptools/tests/compat/__init__.py +0 -0
  311. venv/Lib/site-packages/setuptools/tests/compat/py39.py +3 -0
  312. venv/Lib/site-packages/setuptools/tests/config/__init__.py +0 -0
  313. venv/Lib/site-packages/setuptools/tests/config/downloads/__init__.py +59 -0
  314. venv/Lib/site-packages/setuptools/tests/config/downloads/preload.py +18 -0
  315. venv/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +772 -0
  316. venv/Lib/site-packages/setuptools/tests/config/test_expand.py +247 -0
  317. venv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml.py +396 -0
  318. venv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py +109 -0
  319. venv/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +980 -0
  320. venv/Lib/site-packages/setuptools/tests/contexts.py +131 -0
  321. venv/Lib/site-packages/setuptools/tests/environment.py +95 -0
  322. venv/Lib/site-packages/setuptools/tests/fixtures.py +392 -0
  323. venv/Lib/site-packages/setuptools/tests/integration/__init__.py +0 -0
  324. venv/Lib/site-packages/setuptools/tests/integration/helpers.py +77 -0
  325. venv/Lib/site-packages/setuptools/tests/integration/test_pbr.py +20 -0
  326. venv/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +223 -0
  327. venv/Lib/site-packages/setuptools/tests/mod_with_constant.py +1 -0
  328. venv/Lib/site-packages/setuptools/tests/namespaces.py +90 -0
  329. venv/Lib/site-packages/setuptools/tests/script-with-bom.py +1 -0
  330. venv/Lib/site-packages/setuptools/tests/test_archive_util.py +36 -0
  331. venv/Lib/site-packages/setuptools/tests/test_bdist_deprecations.py +28 -0
  332. venv/Lib/site-packages/setuptools/tests/test_bdist_egg.py +73 -0
  333. venv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +708 -0
  334. venv/Lib/site-packages/setuptools/tests/test_build.py +33 -0
  335. venv/Lib/site-packages/setuptools/tests/test_build_clib.py +84 -0
  336. venv/Lib/site-packages/setuptools/tests/test_build_ext.py +293 -0
  337. venv/Lib/site-packages/setuptools/tests/test_build_meta.py +959 -0
  338. venv/Lib/site-packages/setuptools/tests/test_build_py.py +480 -0
  339. venv/Lib/site-packages/setuptools/tests/test_config_discovery.py +647 -0
  340. venv/Lib/site-packages/setuptools/tests/test_core_metadata.py +622 -0
  341. venv/Lib/site-packages/setuptools/tests/test_depends.py +15 -0
  342. venv/Lib/site-packages/setuptools/tests/test_develop.py +112 -0
  343. venv/Lib/site-packages/setuptools/tests/test_dist.py +278 -0
  344. venv/Lib/site-packages/setuptools/tests/test_dist_info.py +147 -0
  345. venv/Lib/site-packages/setuptools/tests/test_distutils_adoption.py +198 -0
  346. venv/Lib/site-packages/setuptools/tests/test_editable_install.py +1263 -0
  347. venv/Lib/site-packages/setuptools/tests/test_egg_info.py +1306 -0
  348. venv/Lib/site-packages/setuptools/tests/test_extern.py +15 -0
  349. venv/Lib/site-packages/setuptools/tests/test_find_packages.py +218 -0
  350. venv/Lib/site-packages/setuptools/tests/test_find_py_modules.py +73 -0
  351. venv/Lib/site-packages/setuptools/tests/test_glob.py +45 -0
  352. venv/Lib/site-packages/setuptools/tests/test_install_scripts.py +89 -0
  353. venv/Lib/site-packages/setuptools/tests/test_logging.py +76 -0
  354. venv/Lib/site-packages/setuptools/tests/test_manifest.py +622 -0
  355. venv/Lib/site-packages/setuptools/tests/test_namespaces.py +138 -0
  356. venv/Lib/site-packages/setuptools/tests/test_scripts.py +12 -0
  357. venv/Lib/site-packages/setuptools/tests/test_sdist.py +984 -0
  358. venv/Lib/site-packages/setuptools/tests/test_setopt.py +40 -0
  359. venv/Lib/site-packages/setuptools/tests/test_setuptools.py +290 -0
  360. venv/Lib/site-packages/setuptools/tests/test_shutil_wrapper.py +23 -0
  361. venv/Lib/site-packages/setuptools/tests/test_unicode_utils.py +10 -0
  362. venv/Lib/site-packages/setuptools/tests/test_virtualenv.py +113 -0
  363. venv/Lib/site-packages/setuptools/tests/test_warnings.py +106 -0
  364. venv/Lib/site-packages/setuptools/tests/test_wheel.py +690 -0
  365. venv/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +258 -0
  366. venv/Lib/site-packages/setuptools/tests/text.py +4 -0
  367. venv/Lib/site-packages/setuptools/tests/textwrap.py +6 -0
  368. venv/Lib/site-packages/setuptools/unicode_utils.py +102 -0
  369. venv/Lib/site-packages/setuptools/version.py +6 -0
  370. venv/Lib/site-packages/setuptools/warnings.py +110 -0
  371. venv/Lib/site-packages/setuptools/wheel.py +261 -0
  372. venv/Lib/site-packages/setuptools/windows_support.py +30 -0
  373. {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/WHEEL +0 -0
  374. {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/entry_points.txt +0 -0
  375. {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,812 @@
1
+ """distutils.command.build_ext
2
+
3
+ Implements the Distutils 'build_ext' command, for building extension
4
+ modules (currently limited to C extensions, should accommodate C++
5
+ extensions ASAP)."""
6
+
7
+ from __future__ import annotations
8
+
9
+ import contextlib
10
+ import os
11
+ import re
12
+ import sys
13
+ from collections.abc import Callable
14
+ from distutils._log import log
15
+ from site import USER_BASE
16
+ from typing import ClassVar
17
+
18
+ from .._modified import newer_group
19
+ from ..ccompiler import new_compiler, show_compilers
20
+ from ..core import Command
21
+ from ..errors import (
22
+ CCompilerError,
23
+ CompileError,
24
+ DistutilsError,
25
+ DistutilsOptionError,
26
+ DistutilsPlatformError,
27
+ DistutilsSetupError,
28
+ )
29
+ from ..extension import Extension
30
+ from ..sysconfig import customize_compiler, get_config_h_filename, get_python_version
31
+ from ..util import get_platform, is_freethreaded, is_mingw
32
+
33
+ # An extension name is just a dot-separated list of Python NAMEs (ie.
34
+ # the same as a fully-qualified module name).
35
+ extension_name_re = re.compile(r'^[a-zA-Z_][a-zA-Z_0-9]*(\.[a-zA-Z_][a-zA-Z_0-9]*)*$')
36
+
37
+
38
+ class build_ext(Command):
39
+ description = "build C/C++ extensions (compile/link to build directory)"
40
+
41
+ # XXX thoughts on how to deal with complex command-line options like
42
+ # these, i.e. how to make it so fancy_getopt can suck them off the
43
+ # command line and make it look like setup.py defined the appropriate
44
+ # lists of tuples of what-have-you.
45
+ # - each command needs a callback to process its command-line options
46
+ # - Command.__init__() needs access to its share of the whole
47
+ # command line (must ultimately come from
48
+ # Distribution.parse_command_line())
49
+ # - it then calls the current command class' option-parsing
50
+ # callback to deal with weird options like -D, which have to
51
+ # parse the option text and churn out some custom data
52
+ # structure
53
+ # - that data structure (in this case, a list of 2-tuples)
54
+ # will then be present in the command object by the time
55
+ # we get to finalize_options() (i.e. the constructor
56
+ # takes care of both command-line and client options
57
+ # in between initialize_options() and finalize_options())
58
+
59
+ sep_by = f" (separated by '{os.pathsep}')"
60
+ user_options = [
61
+ ('build-lib=', 'b', "directory for compiled extension modules"),
62
+ ('build-temp=', 't', "directory for temporary files (build by-products)"),
63
+ (
64
+ 'plat-name=',
65
+ 'p',
66
+ "platform name to cross-compile for, if supported "
67
+ f"[default: {get_platform()}]",
68
+ ),
69
+ (
70
+ 'inplace',
71
+ 'i',
72
+ "ignore build-lib and put compiled extensions into the source "
73
+ "directory alongside your pure Python modules",
74
+ ),
75
+ (
76
+ 'include-dirs=',
77
+ 'I',
78
+ "list of directories to search for header files" + sep_by,
79
+ ),
80
+ ('define=', 'D', "C preprocessor macros to define"),
81
+ ('undef=', 'U', "C preprocessor macros to undefine"),
82
+ ('libraries=', 'l', "external C libraries to link with"),
83
+ (
84
+ 'library-dirs=',
85
+ 'L',
86
+ "directories to search for external C libraries" + sep_by,
87
+ ),
88
+ ('rpath=', 'R', "directories to search for shared C libraries at runtime"),
89
+ ('link-objects=', 'O', "extra explicit link objects to include in the link"),
90
+ ('debug', 'g', "compile/link with debugging information"),
91
+ ('force', 'f', "forcibly build everything (ignore file timestamps)"),
92
+ ('compiler=', 'c', "specify the compiler type"),
93
+ ('parallel=', 'j', "number of parallel build jobs"),
94
+ ('swig-cpp', None, "make SWIG create C++ files (default is C)"),
95
+ ('swig-opts=', None, "list of SWIG command line options"),
96
+ ('swig=', None, "path to the SWIG executable"),
97
+ ('user', None, "add user include, library and rpath"),
98
+ ]
99
+
100
+ boolean_options: ClassVar[list[str]] = [
101
+ 'inplace',
102
+ 'debug',
103
+ 'force',
104
+ 'swig-cpp',
105
+ 'user',
106
+ ]
107
+
108
+ help_options: ClassVar[list[tuple[str, str | None, str, Callable[[], object]]]] = [
109
+ ('help-compiler', None, "list available compilers", show_compilers),
110
+ ]
111
+
112
+ def initialize_options(self):
113
+ self.extensions = None
114
+ self.build_lib = None
115
+ self.plat_name = None
116
+ self.build_temp = None
117
+ self.inplace = False
118
+ self.package = None
119
+
120
+ self.include_dirs = None
121
+ self.define = None
122
+ self.undef = None
123
+ self.libraries = None
124
+ self.library_dirs = None
125
+ self.rpath = None
126
+ self.link_objects = None
127
+ self.debug = None
128
+ self.force = None
129
+ self.compiler = None
130
+ self.swig = None
131
+ self.swig_cpp = None
132
+ self.swig_opts = None
133
+ self.user = None
134
+ self.parallel = None
135
+
136
+ @staticmethod
137
+ def _python_lib_dir(sysconfig):
138
+ """
139
+ Resolve Python's library directory for building extensions
140
+ that rely on a shared Python library.
141
+
142
+ See python/cpython#44264 and python/cpython#48686
143
+ """
144
+ if not sysconfig.get_config_var('Py_ENABLE_SHARED'):
145
+ return
146
+
147
+ if sysconfig.python_build:
148
+ yield '.'
149
+ return
150
+
151
+ if sys.platform == 'zos':
152
+ # On z/OS, a user is not required to install Python to
153
+ # a predetermined path, but can use Python portably
154
+ installed_dir = sysconfig.get_config_var('base')
155
+ lib_dir = sysconfig.get_config_var('platlibdir')
156
+ yield os.path.join(installed_dir, lib_dir)
157
+ else:
158
+ # building third party extensions
159
+ yield sysconfig.get_config_var('LIBDIR')
160
+
161
+ def finalize_options(self) -> None: # noqa: C901
162
+ from distutils import sysconfig
163
+
164
+ self.set_undefined_options(
165
+ 'build',
166
+ ('build_lib', 'build_lib'),
167
+ ('build_temp', 'build_temp'),
168
+ ('compiler', 'compiler'),
169
+ ('debug', 'debug'),
170
+ ('force', 'force'),
171
+ ('parallel', 'parallel'),
172
+ ('plat_name', 'plat_name'),
173
+ )
174
+
175
+ if self.package is None:
176
+ self.package = self.distribution.ext_package
177
+
178
+ self.extensions = self.distribution.ext_modules
179
+
180
+ # Make sure Python's include directories (for Python.h, pyconfig.h,
181
+ # etc.) are in the include search path.
182
+ py_include = sysconfig.get_python_inc()
183
+ plat_py_include = sysconfig.get_python_inc(plat_specific=True)
184
+ if self.include_dirs is None:
185
+ self.include_dirs = self.distribution.include_dirs or []
186
+ if isinstance(self.include_dirs, str):
187
+ self.include_dirs = self.include_dirs.split(os.pathsep)
188
+
189
+ # If in a virtualenv, add its include directory
190
+ # Issue 16116
191
+ if sys.exec_prefix != sys.base_exec_prefix:
192
+ self.include_dirs.append(os.path.join(sys.exec_prefix, 'include'))
193
+
194
+ # Put the Python "system" include dir at the end, so that
195
+ # any local include dirs take precedence.
196
+ self.include_dirs.extend(py_include.split(os.path.pathsep))
197
+ if plat_py_include != py_include:
198
+ self.include_dirs.extend(plat_py_include.split(os.path.pathsep))
199
+
200
+ self.ensure_string_list('libraries')
201
+ self.ensure_string_list('link_objects')
202
+
203
+ # Life is easier if we're not forever checking for None, so
204
+ # simplify these options to empty lists if unset
205
+ if self.libraries is None:
206
+ self.libraries = []
207
+ if self.library_dirs is None:
208
+ self.library_dirs = []
209
+ elif isinstance(self.library_dirs, str):
210
+ self.library_dirs = self.library_dirs.split(os.pathsep)
211
+
212
+ if self.rpath is None:
213
+ self.rpath = []
214
+ elif isinstance(self.rpath, str):
215
+ self.rpath = self.rpath.split(os.pathsep)
216
+
217
+ # for extensions under windows use different directories
218
+ # for Release and Debug builds.
219
+ # also Python's library directory must be appended to library_dirs
220
+ if os.name == 'nt' and not is_mingw():
221
+ # the 'libs' directory is for binary installs - we assume that
222
+ # must be the *native* platform. But we don't really support
223
+ # cross-compiling via a binary install anyway, so we let it go.
224
+ self.library_dirs.append(os.path.join(sys.exec_prefix, 'libs'))
225
+ if sys.base_exec_prefix != sys.prefix: # Issue 16116
226
+ self.library_dirs.append(os.path.join(sys.base_exec_prefix, 'libs'))
227
+ if self.debug:
228
+ self.build_temp = os.path.join(self.build_temp, "Debug")
229
+ else:
230
+ self.build_temp = os.path.join(self.build_temp, "Release")
231
+
232
+ # Append the source distribution include and library directories,
233
+ # this allows distutils on windows to work in the source tree
234
+ self.include_dirs.append(os.path.dirname(get_config_h_filename()))
235
+ self.library_dirs.append(sys.base_exec_prefix)
236
+
237
+ # Use the .lib files for the correct architecture
238
+ if self.plat_name == 'win32':
239
+ suffix = 'win32'
240
+ else:
241
+ # win-amd64
242
+ suffix = self.plat_name[4:]
243
+ new_lib = os.path.join(sys.exec_prefix, 'PCbuild')
244
+ if suffix:
245
+ new_lib = os.path.join(new_lib, suffix)
246
+ self.library_dirs.append(new_lib)
247
+
248
+ # For extensions under Cygwin, Python's library directory must be
249
+ # appended to library_dirs
250
+ if sys.platform[:6] == 'cygwin':
251
+ if not sysconfig.python_build:
252
+ # building third party extensions
253
+ self.library_dirs.append(
254
+ os.path.join(
255
+ sys.prefix, "lib", "python" + get_python_version(), "config"
256
+ )
257
+ )
258
+ else:
259
+ # building python standard extensions
260
+ self.library_dirs.append('.')
261
+
262
+ self.library_dirs.extend(self._python_lib_dir(sysconfig))
263
+
264
+ # The argument parsing will result in self.define being a string, but
265
+ # it has to be a list of 2-tuples. All the preprocessor symbols
266
+ # specified by the 'define' option will be set to '1'. Multiple
267
+ # symbols can be separated with commas.
268
+
269
+ if self.define:
270
+ defines = self.define.split(',')
271
+ self.define = [(symbol, '1') for symbol in defines]
272
+
273
+ # The option for macros to undefine is also a string from the
274
+ # option parsing, but has to be a list. Multiple symbols can also
275
+ # be separated with commas here.
276
+ if self.undef:
277
+ self.undef = self.undef.split(',')
278
+
279
+ if self.swig_opts is None:
280
+ self.swig_opts = []
281
+ else:
282
+ self.swig_opts = self.swig_opts.split(' ')
283
+
284
+ # Finally add the user include and library directories if requested
285
+ if self.user:
286
+ user_include = os.path.join(USER_BASE, "include")
287
+ user_lib = os.path.join(USER_BASE, "lib")
288
+ if os.path.isdir(user_include):
289
+ self.include_dirs.append(user_include)
290
+ if os.path.isdir(user_lib):
291
+ self.library_dirs.append(user_lib)
292
+ self.rpath.append(user_lib)
293
+
294
+ if isinstance(self.parallel, str):
295
+ try:
296
+ self.parallel = int(self.parallel)
297
+ except ValueError:
298
+ raise DistutilsOptionError("parallel should be an integer")
299
+
300
+ def run(self) -> None: # noqa: C901
301
+ # 'self.extensions', as supplied by setup.py, is a list of
302
+ # Extension instances. See the documentation for Extension (in
303
+ # distutils.extension) for details.
304
+ #
305
+ # For backwards compatibility with Distutils 0.8.2 and earlier, we
306
+ # also allow the 'extensions' list to be a list of tuples:
307
+ # (ext_name, build_info)
308
+ # where build_info is a dictionary containing everything that
309
+ # Extension instances do except the name, with a few things being
310
+ # differently named. We convert these 2-tuples to Extension
311
+ # instances as needed.
312
+
313
+ if not self.extensions:
314
+ return
315
+
316
+ # If we were asked to build any C/C++ libraries, make sure that the
317
+ # directory where we put them is in the library search path for
318
+ # linking extensions.
319
+ if self.distribution.has_c_libraries():
320
+ build_clib = self.get_finalized_command('build_clib')
321
+ self.libraries.extend(build_clib.get_library_names() or [])
322
+ self.library_dirs.append(build_clib.build_clib)
323
+
324
+ # Setup the CCompiler object that we'll use to do all the
325
+ # compiling and linking
326
+ self.compiler = new_compiler(
327
+ compiler=self.compiler,
328
+ verbose=self.verbose,
329
+ dry_run=self.dry_run,
330
+ force=self.force,
331
+ )
332
+ customize_compiler(self.compiler)
333
+ # If we are cross-compiling, init the compiler now (if we are not
334
+ # cross-compiling, init would not hurt, but people may rely on
335
+ # late initialization of compiler even if they shouldn't...)
336
+ if os.name == 'nt' and self.plat_name != get_platform():
337
+ self.compiler.initialize(self.plat_name)
338
+
339
+ # The official Windows free threaded Python installer doesn't set
340
+ # Py_GIL_DISABLED because its pyconfig.h is shared with the
341
+ # default build, so define it here (pypa/setuptools#4662).
342
+ if os.name == 'nt' and is_freethreaded():
343
+ self.compiler.define_macro('Py_GIL_DISABLED', '1')
344
+
345
+ # And make sure that any compile/link-related options (which might
346
+ # come from the command-line or from the setup script) are set in
347
+ # that CCompiler object -- that way, they automatically apply to
348
+ # all compiling and linking done here.
349
+ if self.include_dirs is not None:
350
+ self.compiler.set_include_dirs(self.include_dirs)
351
+ if self.define is not None:
352
+ # 'define' option is a list of (name,value) tuples
353
+ for name, value in self.define:
354
+ self.compiler.define_macro(name, value)
355
+ if self.undef is not None:
356
+ for macro in self.undef:
357
+ self.compiler.undefine_macro(macro)
358
+ if self.libraries is not None:
359
+ self.compiler.set_libraries(self.libraries)
360
+ if self.library_dirs is not None:
361
+ self.compiler.set_library_dirs(self.library_dirs)
362
+ if self.rpath is not None:
363
+ self.compiler.set_runtime_library_dirs(self.rpath)
364
+ if self.link_objects is not None:
365
+ self.compiler.set_link_objects(self.link_objects)
366
+
367
+ # Now actually compile and link everything.
368
+ self.build_extensions()
369
+
370
+ def check_extensions_list(self, extensions) -> None: # noqa: C901
371
+ """Ensure that the list of extensions (presumably provided as a
372
+ command option 'extensions') is valid, i.e. it is a list of
373
+ Extension objects. We also support the old-style list of 2-tuples,
374
+ where the tuples are (ext_name, build_info), which are converted to
375
+ Extension instances here.
376
+
377
+ Raise DistutilsSetupError if the structure is invalid anywhere;
378
+ just returns otherwise.
379
+ """
380
+ if not isinstance(extensions, list):
381
+ raise DistutilsSetupError(
382
+ "'ext_modules' option must be a list of Extension instances"
383
+ )
384
+
385
+ for i, ext in enumerate(extensions):
386
+ if isinstance(ext, Extension):
387
+ continue # OK! (assume type-checking done
388
+ # by Extension constructor)
389
+
390
+ if not isinstance(ext, tuple) or len(ext) != 2:
391
+ raise DistutilsSetupError(
392
+ "each element of 'ext_modules' option must be an "
393
+ "Extension instance or 2-tuple"
394
+ )
395
+
396
+ ext_name, build_info = ext
397
+
398
+ log.warning(
399
+ "old-style (ext_name, build_info) tuple found in "
400
+ "ext_modules for extension '%s' "
401
+ "-- please convert to Extension instance",
402
+ ext_name,
403
+ )
404
+
405
+ if not (isinstance(ext_name, str) and extension_name_re.match(ext_name)):
406
+ raise DistutilsSetupError(
407
+ "first element of each tuple in 'ext_modules' "
408
+ "must be the extension name (a string)"
409
+ )
410
+
411
+ if not isinstance(build_info, dict):
412
+ raise DistutilsSetupError(
413
+ "second element of each tuple in 'ext_modules' "
414
+ "must be a dictionary (build info)"
415
+ )
416
+
417
+ # OK, the (ext_name, build_info) dict is type-safe: convert it
418
+ # to an Extension instance.
419
+ ext = Extension(ext_name, build_info['sources'])
420
+
421
+ # Easy stuff: one-to-one mapping from dict elements to
422
+ # instance attributes.
423
+ for key in (
424
+ 'include_dirs',
425
+ 'library_dirs',
426
+ 'libraries',
427
+ 'extra_objects',
428
+ 'extra_compile_args',
429
+ 'extra_link_args',
430
+ ):
431
+ val = build_info.get(key)
432
+ if val is not None:
433
+ setattr(ext, key, val)
434
+
435
+ # Medium-easy stuff: same syntax/semantics, different names.
436
+ ext.runtime_library_dirs = build_info.get('rpath')
437
+ if 'def_file' in build_info:
438
+ log.warning("'def_file' element of build info dict no longer supported")
439
+
440
+ # Non-trivial stuff: 'macros' split into 'define_macros'
441
+ # and 'undef_macros'.
442
+ macros = build_info.get('macros')
443
+ if macros:
444
+ ext.define_macros = []
445
+ ext.undef_macros = []
446
+ for macro in macros:
447
+ if not (isinstance(macro, tuple) and len(macro) in (1, 2)):
448
+ raise DistutilsSetupError(
449
+ "'macros' element of build info dict must be 1- or 2-tuple"
450
+ )
451
+ if len(macro) == 1:
452
+ ext.undef_macros.append(macro[0])
453
+ elif len(macro) == 2:
454
+ ext.define_macros.append(macro)
455
+
456
+ extensions[i] = ext
457
+
458
+ def get_source_files(self):
459
+ self.check_extensions_list(self.extensions)
460
+ filenames = []
461
+
462
+ # Wouldn't it be neat if we knew the names of header files too...
463
+ for ext in self.extensions:
464
+ filenames.extend(ext.sources)
465
+ return filenames
466
+
467
+ def get_outputs(self):
468
+ # Sanity check the 'extensions' list -- can't assume this is being
469
+ # done in the same run as a 'build_extensions()' call (in fact, we
470
+ # can probably assume that it *isn't*!).
471
+ self.check_extensions_list(self.extensions)
472
+
473
+ # And build the list of output (built) filenames. Note that this
474
+ # ignores the 'inplace' flag, and assumes everything goes in the
475
+ # "build" tree.
476
+ return [self.get_ext_fullpath(ext.name) for ext in self.extensions]
477
+
478
+ def build_extensions(self) -> None:
479
+ # First, sanity-check the 'extensions' list
480
+ self.check_extensions_list(self.extensions)
481
+ if self.parallel:
482
+ self._build_extensions_parallel()
483
+ else:
484
+ self._build_extensions_serial()
485
+
486
+ def _build_extensions_parallel(self):
487
+ workers = self.parallel
488
+ if self.parallel is True:
489
+ workers = os.cpu_count() # may return None
490
+ try:
491
+ from concurrent.futures import ThreadPoolExecutor
492
+ except ImportError:
493
+ workers = None
494
+
495
+ if workers is None:
496
+ self._build_extensions_serial()
497
+ return
498
+
499
+ with ThreadPoolExecutor(max_workers=workers) as executor:
500
+ futures = [
501
+ executor.submit(self.build_extension, ext) for ext in self.extensions
502
+ ]
503
+ for ext, fut in zip(self.extensions, futures):
504
+ with self._filter_build_errors(ext):
505
+ fut.result()
506
+
507
+ def _build_extensions_serial(self):
508
+ for ext in self.extensions:
509
+ with self._filter_build_errors(ext):
510
+ self.build_extension(ext)
511
+
512
+ @contextlib.contextmanager
513
+ def _filter_build_errors(self, ext):
514
+ try:
515
+ yield
516
+ except (CCompilerError, DistutilsError, CompileError) as e:
517
+ if not ext.optional:
518
+ raise
519
+ self.warn(f'building extension "{ext.name}" failed: {e}')
520
+
521
+ def build_extension(self, ext) -> None:
522
+ sources = ext.sources
523
+ if sources is None or not isinstance(sources, (list, tuple)):
524
+ raise DistutilsSetupError(
525
+ f"in 'ext_modules' option (extension '{ext.name}'), "
526
+ "'sources' must be present and must be "
527
+ "a list of source filenames"
528
+ )
529
+ # sort to make the resulting .so file build reproducible
530
+ sources = sorted(sources)
531
+
532
+ ext_path = self.get_ext_fullpath(ext.name)
533
+ depends = sources + ext.depends
534
+ if not (self.force or newer_group(depends, ext_path, 'newer')):
535
+ log.debug("skipping '%s' extension (up-to-date)", ext.name)
536
+ return
537
+ else:
538
+ log.info("building '%s' extension", ext.name)
539
+
540
+ # First, scan the sources for SWIG definition files (.i), run
541
+ # SWIG on 'em to create .c files, and modify the sources list
542
+ # accordingly.
543
+ sources = self.swig_sources(sources, ext)
544
+
545
+ # Next, compile the source code to object files.
546
+
547
+ # XXX not honouring 'define_macros' or 'undef_macros' -- the
548
+ # CCompiler API needs to change to accommodate this, and I
549
+ # want to do one thing at a time!
550
+
551
+ # Two possible sources for extra compiler arguments:
552
+ # - 'extra_compile_args' in Extension object
553
+ # - CFLAGS environment variable (not particularly
554
+ # elegant, but people seem to expect it and I
555
+ # guess it's useful)
556
+ # The environment variable should take precedence, and
557
+ # any sensible compiler will give precedence to later
558
+ # command line args. Hence we combine them in order:
559
+ extra_args = ext.extra_compile_args or []
560
+
561
+ macros = ext.define_macros[:]
562
+ for undef in ext.undef_macros:
563
+ macros.append((undef,))
564
+
565
+ objects = self.compiler.compile(
566
+ sources,
567
+ output_dir=self.build_temp,
568
+ macros=macros,
569
+ include_dirs=ext.include_dirs,
570
+ debug=self.debug,
571
+ extra_postargs=extra_args,
572
+ depends=ext.depends,
573
+ )
574
+
575
+ # XXX outdated variable, kept here in case third-part code
576
+ # needs it.
577
+ self._built_objects = objects[:]
578
+
579
+ # Now link the object files together into a "shared object" --
580
+ # of course, first we have to figure out all the other things
581
+ # that go into the mix.
582
+ if ext.extra_objects:
583
+ objects.extend(ext.extra_objects)
584
+ extra_args = ext.extra_link_args or []
585
+
586
+ # Detect target language, if not provided
587
+ language = ext.language or self.compiler.detect_language(sources)
588
+
589
+ self.compiler.link_shared_object(
590
+ objects,
591
+ ext_path,
592
+ libraries=self.get_libraries(ext),
593
+ library_dirs=ext.library_dirs,
594
+ runtime_library_dirs=ext.runtime_library_dirs,
595
+ extra_postargs=extra_args,
596
+ export_symbols=self.get_export_symbols(ext),
597
+ debug=self.debug,
598
+ build_temp=self.build_temp,
599
+ target_lang=language,
600
+ )
601
+
602
+ def swig_sources(self, sources, extension):
603
+ """Walk the list of source files in 'sources', looking for SWIG
604
+ interface (.i) files. Run SWIG on all that are found, and
605
+ return a modified 'sources' list with SWIG source files replaced
606
+ by the generated C (or C++) files.
607
+ """
608
+ new_sources = []
609
+ swig_sources = []
610
+ swig_targets = {}
611
+
612
+ # XXX this drops generated C/C++ files into the source tree, which
613
+ # is fine for developers who want to distribute the generated
614
+ # source -- but there should be an option to put SWIG output in
615
+ # the temp dir.
616
+
617
+ if self.swig_cpp:
618
+ log.warning("--swig-cpp is deprecated - use --swig-opts=-c++")
619
+
620
+ if (
621
+ self.swig_cpp
622
+ or ('-c++' in self.swig_opts)
623
+ or ('-c++' in extension.swig_opts)
624
+ ):
625
+ target_ext = '.cpp'
626
+ else:
627
+ target_ext = '.c'
628
+
629
+ for source in sources:
630
+ (base, ext) = os.path.splitext(source)
631
+ if ext == ".i": # SWIG interface file
632
+ new_sources.append(base + '_wrap' + target_ext)
633
+ swig_sources.append(source)
634
+ swig_targets[source] = new_sources[-1]
635
+ else:
636
+ new_sources.append(source)
637
+
638
+ if not swig_sources:
639
+ return new_sources
640
+
641
+ swig = self.swig or self.find_swig()
642
+ swig_cmd = [swig, "-python"]
643
+ swig_cmd.extend(self.swig_opts)
644
+ if self.swig_cpp:
645
+ swig_cmd.append("-c++")
646
+
647
+ # Do not override commandline arguments
648
+ if not self.swig_opts:
649
+ swig_cmd.extend(extension.swig_opts)
650
+
651
+ for source in swig_sources:
652
+ target = swig_targets[source]
653
+ log.info("swigging %s to %s", source, target)
654
+ self.spawn(swig_cmd + ["-o", target, source])
655
+
656
+ return new_sources
657
+
658
+ def find_swig(self):
659
+ """Return the name of the SWIG executable. On Unix, this is
660
+ just "swig" -- it should be in the PATH. Tries a bit harder on
661
+ Windows.
662
+ """
663
+ if os.name == "posix":
664
+ return "swig"
665
+ elif os.name == "nt":
666
+ # Look for SWIG in its standard installation directory on
667
+ # Windows (or so I presume!). If we find it there, great;
668
+ # if not, act like Unix and assume it's in the PATH.
669
+ for vers in ("1.3", "1.2", "1.1"):
670
+ fn = os.path.join(f"c:\\swig{vers}", "swig.exe")
671
+ if os.path.isfile(fn):
672
+ return fn
673
+ else:
674
+ return "swig.exe"
675
+ else:
676
+ raise DistutilsPlatformError(
677
+ f"I don't know how to find (much less run) SWIG on platform '{os.name}'"
678
+ )
679
+
680
+ # -- Name generators -----------------------------------------------
681
+ # (extension names, filenames, whatever)
682
+ def get_ext_fullpath(self, ext_name: str) -> str:
683
+ """Returns the path of the filename for a given extension.
684
+
685
+ The file is located in `build_lib` or directly in the package
686
+ (inplace option).
687
+ """
688
+ fullname = self.get_ext_fullname(ext_name)
689
+ modpath = fullname.split('.')
690
+ filename = self.get_ext_filename(modpath[-1])
691
+
692
+ if not self.inplace:
693
+ # no further work needed
694
+ # returning :
695
+ # build_dir/package/path/filename
696
+ filename = os.path.join(*modpath[:-1] + [filename])
697
+ return os.path.join(self.build_lib, filename)
698
+
699
+ # the inplace option requires to find the package directory
700
+ # using the build_py command for that
701
+ package = '.'.join(modpath[0:-1])
702
+ build_py = self.get_finalized_command('build_py')
703
+ package_dir = os.path.abspath(build_py.get_package_dir(package))
704
+
705
+ # returning
706
+ # package_dir/filename
707
+ return os.path.join(package_dir, filename)
708
+
709
+ def get_ext_fullname(self, ext_name: str) -> str:
710
+ """Returns the fullname of a given extension name.
711
+
712
+ Adds the `package.` prefix"""
713
+ if self.package is None:
714
+ return ext_name
715
+ else:
716
+ return self.package + '.' + ext_name
717
+
718
+ def get_ext_filename(self, ext_name: str) -> str:
719
+ r"""Convert the name of an extension (eg. "foo.bar") into the name
720
+ of the file from which it will be loaded (eg. "foo/bar.so", or
721
+ "foo\bar.pyd").
722
+ """
723
+ from ..sysconfig import get_config_var
724
+
725
+ ext_path = ext_name.split('.')
726
+ ext_suffix = get_config_var('EXT_SUFFIX')
727
+ return os.path.join(*ext_path) + ext_suffix
728
+
729
+ def get_export_symbols(self, ext: Extension) -> list[str]:
730
+ """Return the list of symbols that a shared extension has to
731
+ export. This either uses 'ext.export_symbols' or, if it's not
732
+ provided, "PyInit_" + module_name. Only relevant on Windows, where
733
+ the .pyd file (DLL) must export the module "PyInit_" function.
734
+ """
735
+ name = self._get_module_name_for_symbol(ext)
736
+ try:
737
+ # Unicode module name support as defined in PEP-489
738
+ # https://peps.python.org/pep-0489/#export-hook-name
739
+ name.encode('ascii')
740
+ except UnicodeEncodeError:
741
+ suffix = 'U_' + name.encode('punycode').replace(b'-', b'_').decode('ascii')
742
+ else:
743
+ suffix = "_" + name
744
+
745
+ initfunc_name = "PyInit" + suffix
746
+ if initfunc_name not in ext.export_symbols:
747
+ ext.export_symbols.append(initfunc_name)
748
+ return ext.export_symbols
749
+
750
+ def _get_module_name_for_symbol(self, ext):
751
+ # Package name should be used for `__init__` modules
752
+ # https://github.com/python/cpython/issues/80074
753
+ # https://github.com/pypa/setuptools/issues/4826
754
+ parts = ext.name.split(".")
755
+ if parts[-1] == "__init__" and len(parts) >= 2:
756
+ return parts[-2]
757
+ return parts[-1]
758
+
759
+ def get_libraries(self, ext: Extension) -> list[str]: # noqa: C901
760
+ """Return the list of libraries to link against when building a
761
+ shared extension. On most platforms, this is just 'ext.libraries';
762
+ on Windows, we add the Python library (eg. python20.dll).
763
+ """
764
+ # The python library is always needed on Windows. For MSVC, this
765
+ # is redundant, since the library is mentioned in a pragma in
766
+ # pyconfig.h that MSVC groks. The other Windows compilers all seem
767
+ # to need it mentioned explicitly, though, so that's what we do.
768
+ # Append '_d' to the python import library on debug builds.
769
+ if sys.platform == "win32" and not is_mingw():
770
+ from .._msvccompiler import MSVCCompiler
771
+
772
+ if not isinstance(self.compiler, MSVCCompiler):
773
+ template = "python%d%d"
774
+ if self.debug:
775
+ template = template + '_d'
776
+ pythonlib = template % (
777
+ sys.hexversion >> 24,
778
+ (sys.hexversion >> 16) & 0xFF,
779
+ )
780
+ # don't extend ext.libraries, it may be shared with other
781
+ # extensions, it is a reference to the original list
782
+ return ext.libraries + [pythonlib]
783
+ else:
784
+ # On Android only the main executable and LD_PRELOADs are considered
785
+ # to be RTLD_GLOBAL, all the dependencies of the main executable
786
+ # remain RTLD_LOCAL and so the shared libraries must be linked with
787
+ # libpython when python is built with a shared python library (issue
788
+ # bpo-21536).
789
+ # On Cygwin (and if required, other POSIX-like platforms based on
790
+ # Windows like MinGW) it is simply necessary that all symbols in
791
+ # shared libraries are resolved at link time.
792
+ from ..sysconfig import get_config_var
793
+
794
+ link_libpython = False
795
+ if get_config_var('Py_ENABLE_SHARED'):
796
+ # A native build on an Android device or on Cygwin
797
+ if hasattr(sys, 'getandroidapilevel'):
798
+ link_libpython = True
799
+ elif sys.platform == 'cygwin' or is_mingw():
800
+ link_libpython = True
801
+ elif '_PYTHON_HOST_PLATFORM' in os.environ:
802
+ # We are cross-compiling for one of the relevant platforms
803
+ if get_config_var('ANDROID_API_LEVEL') != 0:
804
+ link_libpython = True
805
+ elif get_config_var('MACHDEP') == 'cygwin':
806
+ link_libpython = True
807
+
808
+ if link_libpython:
809
+ ldversion = get_config_var('LDVERSION')
810
+ return ext.libraries + ['python' + ldversion]
811
+
812
+ return ext.libraries