py2docfx 0.1.13.dev2016723__py3-none-any.whl → 0.1.13.dev2021865__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.
Files changed (346) hide show
  1. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/_modified.py +26 -4
  2. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +2 -603
  3. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/archive_util.py +48 -18
  4. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/ccompiler.py +17 -1257
  5. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/cmd.py +133 -41
  6. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/bdist.py +19 -8
  7. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +2 -1
  8. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +6 -5
  9. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build.py +8 -4
  10. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +8 -7
  11. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +32 -13
  12. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build_py.py +10 -9
  13. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +3 -14
  14. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/check.py +1 -1
  15. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/clean.py +2 -1
  16. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/config.py +1 -8
  17. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/install.py +22 -19
  18. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/install_data.py +4 -3
  19. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/install_headers.py +1 -1
  20. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/install_lib.py +11 -7
  21. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +4 -3
  22. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/sdist.py +22 -16
  23. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compat/__init__.py +6 -1
  24. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/base.py +1391 -0
  25. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/cygwin.py +340 -0
  26. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/errors.py +24 -0
  27. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/msvc.py +614 -0
  28. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/{tests/test_ccompiler.py → compilers/C/tests/test_base.py} +9 -19
  29. py2docfx/venv/{venv1/Lib/site-packages/setuptools/_distutils/tests/test_cygwinccompiler.py → basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_cygwin.py} +7 -12
  30. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/{tests/test_mingwccompiler.py → compilers/C/tests/test_mingw.py} +12 -20
  31. py2docfx/venv/{venv1/Lib/site-packages/setuptools/_distutils/tests/test_msvccompiler.py → basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_msvc.py} +11 -12
  32. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/{tests/test_unixccompiler.py → compilers/C/tests/test_unix.py} +5 -5
  33. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +409 -0
  34. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/zos.py +230 -0
  35. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +20 -328
  36. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/dist.py +148 -80
  37. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/errors.py +11 -27
  38. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/extension.py +19 -16
  39. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/filelist.py +80 -15
  40. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/spawn.py +22 -5
  41. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/sysconfig.py +32 -7
  42. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +13 -0
  43. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/tests/test_sdist.py +1 -1
  44. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +2 -401
  45. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/util.py +38 -23
  46. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/zosccompiler.py +2 -228
  47. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_static.py +1 -1
  48. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/editable_wheel.py +3 -3
  49. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install.py +1 -1
  50. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +2 -0
  51. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_py.py +1 -1
  52. py2docfx/venv/basevenv/Lib/site-packages/setuptools/unicode_utils.py +1 -1
  53. py2docfx/venv/venv1/Lib/site-packages/adodbapi/__init__.py +2 -1
  54. py2docfx/venv/venv1/Lib/site-packages/adodbapi/ado_consts.py +3 -1
  55. py2docfx/venv/venv1/Lib/site-packages/adodbapi/adodbapi.py +22 -26
  56. py2docfx/venv/venv1/Lib/site-packages/adodbapi/apibase.py +3 -4
  57. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/db_print.py +1 -1
  58. py2docfx/venv/venv1/Lib/site-packages/adodbapi/examples/db_table_names.py +1 -1
  59. py2docfx/venv/venv1/Lib/site-packages/adodbapi/process_connect_string.py +7 -7
  60. py2docfx/venv/venv1/Lib/site-packages/adodbapi/setup.py +2 -2
  61. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/adodbapitest.py +21 -73
  62. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/adodbapitestconfig.py +1 -1
  63. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/dbapi20.py +11 -17
  64. py2docfx/venv/venv1/Lib/site-packages/adodbapi/test/setuptestframework.py +2 -1
  65. py2docfx/venv/venv1/Lib/site-packages/isapi/install.py +8 -11
  66. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/redirector.py +1 -1
  67. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/redirector_asynch.py +1 -1
  68. py2docfx/venv/venv1/Lib/site-packages/isapi/samples/redirector_with_filter.py +2 -1
  69. py2docfx/venv/venv1/Lib/site-packages/isapi/simple.py +1 -0
  70. py2docfx/venv/venv1/Lib/site-packages/isapi/threaded_extension.py +1 -0
  71. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/basictimerapp.py +1 -1
  72. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/customprint.py +1 -3
  73. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/app/demoutils.py +1 -3
  74. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/cmdserver.py +2 -5
  75. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/guidemo.py +14 -41
  76. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/objdoc.py +1 -1
  77. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/demoutils.py +1 -3
  78. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/flash.py +1 -1
  79. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxserialtest.py +1 -2
  80. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxtest.py +1 -2
  81. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/webbrowser.py +3 -3
  82. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/openGLDemo.py +57 -12
  83. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/toolbar.py +0 -1
  84. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/configui.py +1 -1
  85. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/dbgcon.py +0 -1
  86. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/debugger.py +7 -8
  87. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/debugger/fail.py +1 -1
  88. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/ideoptions.py +7 -10
  89. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/list.py +11 -8
  90. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/dialogs/login.py +0 -1
  91. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/docking/DockingBar.py +0 -1
  92. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/app.py +19 -22
  93. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/dbgcommands.py +2 -3
  94. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/ModuleBrowser.py +1 -1
  95. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/__init__.py +3 -1
  96. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/document.py +0 -1
  97. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/editor.py +6 -6
  98. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/editor/vss.py +2 -2
  99. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/help.py +2 -1
  100. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/interact.py +1 -1
  101. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/intpyapp.py +5 -7
  102. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/intpydde.py +7 -2
  103. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/scriptutils.py +4 -6
  104. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/sgrepmdi.py +13 -22
  105. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/startup.py +1 -1
  106. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/stdin.py +1 -0
  107. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/toolmenu.py +0 -2
  108. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/AutoIndent.py +3 -3
  109. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/idle/CallTips.py +1 -3
  110. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/activex.py +1 -2
  111. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/mfc/dialog.py +7 -10
  112. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/IDLEenvironment.py +1 -5
  113. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/bindings.py +4 -2
  114. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/config.py +3 -5
  115. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/configui.py +2 -3
  116. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/document.py +1 -1
  117. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/formatter.py +3 -3
  118. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/keycodes.py +2 -2
  119. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/scintillacon.py +1178 -78
  120. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/scintilla/view.py +17 -21
  121. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/browser.py +6 -18
  122. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/tools/hierlist.py +2 -2
  123. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/_modified.py +26 -4
  124. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +2 -603
  125. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/archive_util.py +48 -18
  126. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/ccompiler.py +17 -1257
  127. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/cmd.py +133 -41
  128. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/bdist.py +19 -8
  129. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +2 -1
  130. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +6 -5
  131. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build.py +8 -4
  132. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build_clib.py +8 -7
  133. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build_ext.py +32 -13
  134. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build_py.py +10 -9
  135. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +3 -14
  136. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/check.py +1 -1
  137. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/clean.py +2 -1
  138. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/config.py +1 -8
  139. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/install.py +22 -19
  140. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/install_data.py +4 -3
  141. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/install_headers.py +1 -1
  142. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/install_lib.py +11 -7
  143. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +4 -3
  144. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/sdist.py +22 -16
  145. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compat/__init__.py +6 -1
  146. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/base.py +1391 -0
  147. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/cygwin.py +340 -0
  148. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/errors.py +24 -0
  149. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/msvc.py +614 -0
  150. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/{tests/test_ccompiler.py → compilers/C/tests/test_base.py} +9 -19
  151. py2docfx/venv/{basevenv/Lib/site-packages/setuptools/_distutils/tests/test_cygwinccompiler.py → venv1/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_cygwin.py} +7 -12
  152. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/{tests/test_mingwccompiler.py → compilers/C/tests/test_mingw.py} +12 -20
  153. py2docfx/venv/{basevenv/Lib/site-packages/setuptools/_distutils/tests/test_msvccompiler.py → venv1/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_msvc.py} +11 -12
  154. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/{tests/test_unixccompiler.py → compilers/C/tests/test_unix.py} +5 -5
  155. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +409 -0
  156. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/zos.py +230 -0
  157. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +20 -328
  158. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/dist.py +148 -80
  159. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/errors.py +11 -27
  160. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/extension.py +19 -16
  161. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/filelist.py +80 -15
  162. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/spawn.py +22 -5
  163. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/sysconfig.py +32 -7
  164. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +13 -0
  165. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/tests/test_sdist.py +1 -1
  166. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/unixccompiler.py +2 -401
  167. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/util.py +38 -23
  168. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/zosccompiler.py +2 -228
  169. py2docfx/venv/venv1/Lib/site-packages/setuptools/_static.py +1 -1
  170. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/editable_wheel.py +3 -3
  171. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install.py +1 -1
  172. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +2 -0
  173. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_py.py +1 -1
  174. py2docfx/venv/venv1/Lib/site-packages/setuptools/unicode_utils.py +1 -1
  175. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/EvtFormatMessage.py +1 -1
  176. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/EvtSubscribe_push.py +8 -1
  177. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/GetSaveFileName.py +8 -8
  178. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/c_extension/setup.py +1 -1
  179. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/dde/ddeclient.py +1 -1
  180. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/dde/ddeserver.py +1 -1
  181. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/getfilever.py +1 -1
  182. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/pipes/runproc.py +2 -2
  183. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/rastest.py +4 -6
  184. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/GetTokenInformation.py +4 -4
  185. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/account_rights.py +0 -2
  186. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/explicit_entries.py +0 -1
  187. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/get_policy_info.py +0 -3
  188. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/list_rights.py +0 -2
  189. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/localized_names.py +7 -2
  190. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/query_information.py +1 -1
  191. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/set_file_audit.py +1 -2
  192. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/set_file_owner.py +0 -1
  193. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/set_policy_info.py +0 -3
  194. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setkernelobjectsecurity.py +0 -1
  195. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setsecurityinfo.py +0 -1
  196. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/setuserobjectsecurity.py +0 -1
  197. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/fetch_url.py +3 -3
  198. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/simple_auth.py +3 -3
  199. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/security/sspi/socket_server.py +1 -2
  200. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/pipeTestService.py +10 -9
  201. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/service/pipeTestServiceClient.py +6 -3
  202. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32clipboardDemo.py +17 -5
  203. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32comport_demo.py +32 -2
  204. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32console_demo.py +1 -4
  205. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_devicenotify.py +0 -1
  206. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_menu.py +60 -5
  207. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32gui_taskbar.py +1 -1
  208. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32netdemo.py +2 -5
  209. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32ts_logoff_disconnected.py +1 -1
  210. py2docfx/venv/venv1/Lib/site-packages/win32/Demos/win32wnet/testwnet.py +1 -1
  211. py2docfx/venv/venv1/Lib/site-packages/win32/lib/commctrl.py +1 -1
  212. py2docfx/venv/venv1/Lib/site-packages/win32/lib/netbios.py +8 -10
  213. py2docfx/venv/venv1/Lib/site-packages/win32/lib/pywin32_bootstrap.py +2 -10
  214. py2docfx/venv/venv1/Lib/site-packages/win32/lib/pywin32_testutil.py +2 -2
  215. py2docfx/venv/venv1/Lib/site-packages/win32/lib/pywintypes.py +1 -1
  216. py2docfx/venv/venv1/Lib/site-packages/win32/lib/regutil.py +1 -1
  217. py2docfx/venv/venv1/Lib/site-packages/win32/lib/sspi.py +3 -3
  218. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win2kras.py +14 -7
  219. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32con.py +16 -35
  220. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32cryptcon.py +1 -4
  221. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32evtlogutil.py +1 -2
  222. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32gui_struct.py +6 -6
  223. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32pdhquery.py +10 -11
  224. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32pdhutil.py +5 -5
  225. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32rcparser.py +1 -0
  226. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32serviceutil.py +4 -6
  227. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32timezone.py +304 -121
  228. py2docfx/venv/venv1/Lib/site-packages/win32/lib/win32verstamp.py +1 -1
  229. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winerror.py +4926 -604
  230. py2docfx/venv/venv1/Lib/site-packages/win32/lib/winxptheme.py +1 -1
  231. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/h2py.py +194 -0
  232. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/pywin32_postinstall.py +733 -0
  233. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/pywin32_testall.py +120 -0
  234. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/regsetup.py +4 -7
  235. py2docfx/venv/venv1/Lib/site-packages/win32/scripts/setup_d.py +1 -1
  236. py2docfx/venv/venv1/Lib/site-packages/win32/test/handles.py +13 -5
  237. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_clipboard.py +12 -1
  238. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_sspi.py +1 -1
  239. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32api.py +8 -4
  240. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32clipboard.py +2 -3
  241. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32cred.py +0 -1
  242. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32crypt.py +16 -3
  243. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32file.py +24 -8
  244. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32gui.py +0 -1
  245. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32guistruct.py +2 -5
  246. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32inet.py +23 -6
  247. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32net.py +0 -1
  248. py2docfx/venv/venv1/Lib/site-packages/win32/test/test_win32ts.py +19 -0
  249. py2docfx/venv/venv1/Lib/site-packages/win32/winxpgui.py +3 -11
  250. py2docfx/venv/venv1/Lib/site-packages/win32com/client/CLSIDToClass.py +3 -1
  251. py2docfx/venv/venv1/Lib/site-packages/win32com/client/__init__.py +97 -65
  252. py2docfx/venv/venv1/Lib/site-packages/win32com/client/build.py +24 -24
  253. py2docfx/venv/venv1/Lib/site-packages/win32com/client/combrowse.py +17 -33
  254. py2docfx/venv/venv1/Lib/site-packages/win32com/client/dynamic.py +14 -14
  255. py2docfx/venv/venv1/Lib/site-packages/win32com/client/gencache.py +30 -12
  256. py2docfx/venv/venv1/Lib/site-packages/win32com/client/genpy.py +50 -98
  257. py2docfx/venv/venv1/Lib/site-packages/win32com/client/makepy.py +12 -8
  258. py2docfx/venv/venv1/Lib/site-packages/win32com/client/selecttlb.py +3 -4
  259. py2docfx/venv/venv1/Lib/site-packages/win32com/client/util.py +1 -1
  260. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/dump_clipboard.py +1 -1
  261. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/excelAddin.py +1 -1
  262. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/excelRTDServer.py +1 -1
  263. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/iebutton.py +0 -3
  264. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/ietoolbar.py +1 -1
  265. py2docfx/venv/venv1/Lib/site-packages/win32com/demos/outlookAddin.py +1 -3
  266. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/makegw.py +48 -56
  267. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/makegwenum.py +2 -6
  268. py2docfx/venv/venv1/Lib/site-packages/win32com/makegw/makegwparse.py +9 -11
  269. py2docfx/venv/venv1/Lib/site-packages/win32com/olectl.py +1 -1
  270. py2docfx/venv/venv1/Lib/site-packages/win32com/server/connect.py +2 -2
  271. py2docfx/venv/venv1/Lib/site-packages/win32com/server/dispatcher.py +20 -24
  272. py2docfx/venv/venv1/Lib/site-packages/win32com/server/exception.py +8 -8
  273. py2docfx/venv/venv1/Lib/site-packages/win32com/server/policy.py +4 -18
  274. py2docfx/venv/venv1/Lib/site-packages/win32com/server/register.py +5 -6
  275. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/dictionary.py +2 -5
  276. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/interp.py +7 -7
  277. py2docfx/venv/venv1/Lib/site-packages/win32com/servers/test_pycomtest.py +0 -1
  278. py2docfx/venv/venv1/Lib/site-packages/win32com/test/GenTestScripts.py +2 -4
  279. py2docfx/venv/venv1/Lib/site-packages/win32com/test/errorSemantics.py +3 -3
  280. py2docfx/venv/venv1/Lib/site-packages/win32com/test/pippo_server.py +1 -4
  281. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testADOEvents.py +1 -1
  282. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testAXScript.py +1 -2
  283. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDictionary.py +4 -3
  284. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testDynamic.py +3 -5
  285. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testExchange.py +2 -7
  286. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testGatewayAddresses.py +1 -1
  287. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testIterators.py +1 -1
  288. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testMSOffice.py +40 -57
  289. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testMSOfficeEvents.py +3 -3
  290. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testPersist.py +7 -7
  291. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testPippo.py +2 -3
  292. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testPyComTest.py +143 -7
  293. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testServers.py +1 -2
  294. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testall.py +1 -2
  295. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testmakepy.py +1 -2
  296. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testvb.py +12 -8
  297. py2docfx/venv/venv1/Lib/site-packages/win32com/test/util.py +1 -3
  298. py2docfx/venv/venv1/Lib/site-packages/win32com/universal.py +1 -3
  299. py2docfx/venv/venv1/Lib/site-packages/win32com/util.py +1 -1
  300. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/scp.py +1 -1
  301. py2docfx/venv/venv1/Lib/site-packages/win32comext/adsi/demos/search.py +0 -1
  302. py2docfx/venv/venv1/Lib/site-packages/win32comext/authorization/demos/EditSecurity.py +1 -24
  303. py2docfx/venv/venv1/Lib/site-packages/win32comext/authorization/demos/EditServiceSecurity.py +0 -20
  304. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/adb.py +2 -8
  305. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/codecontainer.py +16 -12
  306. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/contexts.py +1 -3
  307. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/debugger.py +2 -2
  308. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/documents.py +2 -3
  309. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/dump.py +2 -4
  310. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/expressions.py +2 -2
  311. py2docfx/venv/venv1/Lib/site-packages/win32comext/axdebug/util.py +7 -14
  312. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/debug.py +2 -14
  313. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/error.py +4 -5
  314. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/framework.py +5 -5
  315. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/pydumper.py +0 -1
  316. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/pyscript.py +5 -10
  317. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/client/scriptdispatch.py +3 -4
  318. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/server/axsite.py +1 -2
  319. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/test/leakTest.py +2 -3
  320. py2docfx/venv/venv1/Lib/site-packages/win32comext/axscript/test/testHost4Dbg.py +0 -3
  321. py2docfx/venv/venv1/Lib/site-packages/win32comext/bits/test/test_bits.py +3 -3
  322. py2docfx/venv/venv1/Lib/site-packages/win32comext/ifilter/demo/filterDemo.py +1 -1
  323. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/demos/mapisend.py +1 -1
  324. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/emsabtags.py +1 -0
  325. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/mapitags.py +1 -3
  326. py2docfx/venv/venv1/Lib/site-packages/win32comext/mapi/mapiutil.py +2 -2
  327. py2docfx/venv/venv1/Lib/site-packages/win32comext/propsys/test/testpropsys.py +1 -1
  328. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/IFileOperationProgressSink.py +1 -1
  329. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/ITransferAdviseSink.py +5 -3
  330. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/column_provider.py +0 -1
  331. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/copy_hook.py +1 -1
  332. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/empty_volume_cache.py +1 -1
  333. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/folder_view.py +2 -2
  334. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/icon_handler.py +1 -2
  335. py2docfx/venv/venv1/Lib/site-packages/win32comext/shell/demos/servers/shell_view.py +4 -5
  336. py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_addtask_2.py +0 -1
  337. py2docfx/venv/venv1/Scripts/pywin32_postinstall.py +77 -122
  338. py2docfx/venv/venv1/Scripts/pywin32_testall.py +4 -9
  339. {py2docfx-0.1.13.dev2016723.dist-info → py2docfx-0.1.13.dev2021865.dist-info}/METADATA +1 -1
  340. {py2docfx-0.1.13.dev2016723.dist-info → py2docfx-0.1.13.dev2021865.dist-info}/RECORD +342 -330
  341. py2docfx/venv/venv1/Lib/site-packages/docs/conf.py +0 -384
  342. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/Demos/ocx/__init__.py +0 -0
  343. py2docfx/venv/venv1/Lib/site-packages/pythonwin/pywin/framework/mdi_pychecker.py +0 -850
  344. py2docfx/venv/venv1/Lib/site-packages/win32com/test/testNetscape.py +0 -24
  345. {py2docfx-0.1.13.dev2016723.dist-info → py2docfx-0.1.13.dev2021865.dist-info}/WHEEL +0 -0
  346. {py2docfx-0.1.13.dev2016723.dist-info → py2docfx-0.1.13.dev2021865.dist-info}/top_level.txt +0 -0
@@ -1,13 +1,24 @@
1
1
  """Timestamp comparison of files and groups of files."""
2
2
 
3
+ from __future__ import annotations
4
+
3
5
  import functools
4
6
  import os.path
7
+ from collections.abc import Callable, Iterable
8
+ from typing import Literal, TypeVar
5
9
 
6
10
  from jaraco.functools import splat
7
11
 
8
12
  from .compat.py39 import zip_strict
9
13
  from .errors import DistutilsFileError
10
14
 
15
+ _SourcesT = TypeVar(
16
+ "_SourcesT", bound="str | bytes | os.PathLike[str] | os.PathLike[bytes]"
17
+ )
18
+ _TargetsT = TypeVar(
19
+ "_TargetsT", bound="str | bytes | os.PathLike[str] | os.PathLike[bytes]"
20
+ )
21
+
11
22
 
12
23
  def _newer(source, target):
13
24
  return not os.path.exists(target) or (
@@ -15,7 +26,10 @@ def _newer(source, target):
15
26
  )
16
27
 
17
28
 
18
- def newer(source, target):
29
+ def newer(
30
+ source: str | bytes | os.PathLike[str] | os.PathLike[bytes],
31
+ target: str | bytes | os.PathLike[str] | os.PathLike[bytes],
32
+ ) -> bool:
19
33
  """
20
34
  Is source modified more recently than target.
21
35
 
@@ -25,12 +39,16 @@ def newer(source, target):
25
39
  Raises DistutilsFileError if 'source' does not exist.
26
40
  """
27
41
  if not os.path.exists(source):
28
- raise DistutilsFileError(f"file '{os.path.abspath(source)}' does not exist")
42
+ raise DistutilsFileError(f"file {os.path.abspath(source)!r} does not exist")
29
43
 
30
44
  return _newer(source, target)
31
45
 
32
46
 
33
- def newer_pairwise(sources, targets, newer=newer):
47
+ def newer_pairwise(
48
+ sources: Iterable[_SourcesT],
49
+ targets: Iterable[_TargetsT],
50
+ newer: Callable[[_SourcesT, _TargetsT], bool] = newer,
51
+ ) -> tuple[list[_SourcesT], list[_TargetsT]]:
34
52
  """
35
53
  Filter filenames where sources are newer than targets.
36
54
 
@@ -43,7 +61,11 @@ def newer_pairwise(sources, targets, newer=newer):
43
61
  return tuple(map(list, zip(*newer_pairs))) or ([], [])
44
62
 
45
63
 
46
- def newer_group(sources, target, missing='error'):
64
+ def newer_group(
65
+ sources: Iterable[str | bytes | os.PathLike[str] | os.PathLike[bytes]],
66
+ target: str | bytes | os.PathLike[str] | os.PathLike[bytes],
67
+ missing: Literal["error", "ignore", "newer"] = "error",
68
+ ) -> bool:
47
69
  """
48
70
  Is target out-of-date with respect to any file in sources.
49
71
 
@@ -1,604 +1,3 @@
1
- """distutils._msvccompiler
1
+ from .compilers.C import msvc
2
2
 
3
- Contains MSVCCompiler, an implementation of the abstract CCompiler class
4
- for Microsoft Visual Studio 2015.
5
-
6
- This module requires VS 2015 or later.
7
- """
8
-
9
- # Written by Perry Stoll
10
- # hacked by Robin Becker and Thomas Heller to do a better job of
11
- # finding DevStudio (through the registry)
12
- # ported to VS 2005 and VS 2008 by Christian Heimes
13
- # ported to VS 2015 by Steve Dower
14
-
15
- import contextlib
16
- import os
17
- import subprocess
18
- import unittest.mock as mock
19
- import warnings
20
-
21
- with contextlib.suppress(ImportError):
22
- import winreg
23
-
24
- from itertools import count
25
-
26
- from ._log import log
27
- from .ccompiler import CCompiler, gen_lib_options
28
- from .errors import (
29
- CompileError,
30
- DistutilsExecError,
31
- DistutilsPlatformError,
32
- LibError,
33
- LinkError,
34
- )
35
- from .util import get_host_platform, get_platform
36
-
37
-
38
- def _find_vc2015():
39
- try:
40
- key = winreg.OpenKeyEx(
41
- winreg.HKEY_LOCAL_MACHINE,
42
- r"Software\Microsoft\VisualStudio\SxS\VC7",
43
- access=winreg.KEY_READ | winreg.KEY_WOW64_32KEY,
44
- )
45
- except OSError:
46
- log.debug("Visual C++ is not registered")
47
- return None, None
48
-
49
- best_version = 0
50
- best_dir = None
51
- with key:
52
- for i in count():
53
- try:
54
- v, vc_dir, vt = winreg.EnumValue(key, i)
55
- except OSError:
56
- break
57
- if v and vt == winreg.REG_SZ and os.path.isdir(vc_dir):
58
- try:
59
- version = int(float(v))
60
- except (ValueError, TypeError):
61
- continue
62
- if version >= 14 and version > best_version:
63
- best_version, best_dir = version, vc_dir
64
- return best_version, best_dir
65
-
66
-
67
- def _find_vc2017():
68
- """Returns "15, path" based on the result of invoking vswhere.exe
69
- If no install is found, returns "None, None"
70
-
71
- The version is returned to avoid unnecessarily changing the function
72
- result. It may be ignored when the path is not None.
73
-
74
- If vswhere.exe is not available, by definition, VS 2017 is not
75
- installed.
76
- """
77
- root = os.environ.get("ProgramFiles(x86)") or os.environ.get("ProgramFiles")
78
- if not root:
79
- return None, None
80
-
81
- variant = 'arm64' if get_platform() == 'win-arm64' else 'x86.x64'
82
- suitable_components = (
83
- f"Microsoft.VisualStudio.Component.VC.Tools.{variant}",
84
- "Microsoft.VisualStudio.Workload.WDExpress",
85
- )
86
-
87
- for component in suitable_components:
88
- # Workaround for `-requiresAny` (only available on VS 2017 > 15.6)
89
- with contextlib.suppress(
90
- subprocess.CalledProcessError, OSError, UnicodeDecodeError
91
- ):
92
- path = (
93
- subprocess.check_output([
94
- os.path.join(
95
- root, "Microsoft Visual Studio", "Installer", "vswhere.exe"
96
- ),
97
- "-latest",
98
- "-prerelease",
99
- "-requires",
100
- component,
101
- "-property",
102
- "installationPath",
103
- "-products",
104
- "*",
105
- ])
106
- .decode(encoding="mbcs", errors="strict")
107
- .strip()
108
- )
109
-
110
- path = os.path.join(path, "VC", "Auxiliary", "Build")
111
- if os.path.isdir(path):
112
- return 15, path
113
-
114
- return None, None # no suitable component found
115
-
116
-
117
- PLAT_SPEC_TO_RUNTIME = {
118
- 'x86': 'x86',
119
- 'x86_amd64': 'x64',
120
- 'x86_arm': 'arm',
121
- 'x86_arm64': 'arm64',
122
- }
123
-
124
-
125
- def _find_vcvarsall(plat_spec):
126
- # bpo-38597: Removed vcruntime return value
127
- _, best_dir = _find_vc2017()
128
-
129
- if not best_dir:
130
- best_version, best_dir = _find_vc2015()
131
-
132
- if not best_dir:
133
- log.debug("No suitable Visual C++ version found")
134
- return None, None
135
-
136
- vcvarsall = os.path.join(best_dir, "vcvarsall.bat")
137
- if not os.path.isfile(vcvarsall):
138
- log.debug("%s cannot be found", vcvarsall)
139
- return None, None
140
-
141
- return vcvarsall, None
142
-
143
-
144
- def _get_vc_env(plat_spec):
145
- if os.getenv("DISTUTILS_USE_SDK"):
146
- return {key.lower(): value for key, value in os.environ.items()}
147
-
148
- vcvarsall, _ = _find_vcvarsall(plat_spec)
149
- if not vcvarsall:
150
- raise DistutilsPlatformError(
151
- 'Microsoft Visual C++ 14.0 or greater is required. '
152
- 'Get it with "Microsoft C++ Build Tools": '
153
- 'https://visualstudio.microsoft.com/visual-cpp-build-tools/'
154
- )
155
-
156
- try:
157
- out = subprocess.check_output(
158
- f'cmd /u /c "{vcvarsall}" {plat_spec} && set',
159
- stderr=subprocess.STDOUT,
160
- ).decode('utf-16le', errors='replace')
161
- except subprocess.CalledProcessError as exc:
162
- log.error(exc.output)
163
- raise DistutilsPlatformError(f"Error executing {exc.cmd}")
164
-
165
- env = {
166
- key.lower(): value
167
- for key, _, value in (line.partition('=') for line in out.splitlines())
168
- if key and value
169
- }
170
-
171
- return env
172
-
173
-
174
- def _find_exe(exe, paths=None):
175
- """Return path to an MSVC executable program.
176
-
177
- Tries to find the program in several places: first, one of the
178
- MSVC program search paths from the registry; next, the directories
179
- in the PATH environment variable. If any of those work, return an
180
- absolute path that is known to exist. If none of them work, just
181
- return the original program name, 'exe'.
182
- """
183
- if not paths:
184
- paths = os.getenv('path').split(os.pathsep)
185
- for p in paths:
186
- fn = os.path.join(os.path.abspath(p), exe)
187
- if os.path.isfile(fn):
188
- return fn
189
- return exe
190
-
191
-
192
- _vcvars_names = {
193
- 'win32': 'x86',
194
- 'win-amd64': 'amd64',
195
- 'win-arm32': 'arm',
196
- 'win-arm64': 'arm64',
197
- }
198
-
199
-
200
- def _get_vcvars_spec(host_platform, platform):
201
- """
202
- Given a host platform and platform, determine the spec for vcvarsall.
203
-
204
- Uses the native MSVC host if the host platform would need expensive
205
- emulation for x86.
206
-
207
- >>> _get_vcvars_spec('win-arm64', 'win32')
208
- 'arm64_x86'
209
- >>> _get_vcvars_spec('win-arm64', 'win-amd64')
210
- 'arm64_amd64'
211
-
212
- Otherwise, always cross-compile from x86 to work with the
213
- lighter-weight MSVC installs that do not include native 64-bit tools.
214
-
215
- >>> _get_vcvars_spec('win32', 'win32')
216
- 'x86'
217
- >>> _get_vcvars_spec('win-arm32', 'win-arm32')
218
- 'x86_arm'
219
- >>> _get_vcvars_spec('win-amd64', 'win-arm64')
220
- 'x86_arm64'
221
- """
222
- if host_platform != 'win-arm64':
223
- host_platform = 'win32'
224
- vc_hp = _vcvars_names[host_platform]
225
- vc_plat = _vcvars_names[platform]
226
- return vc_hp if vc_hp == vc_plat else f'{vc_hp}_{vc_plat}'
227
-
228
-
229
- class MSVCCompiler(CCompiler):
230
- """Concrete class that implements an interface to Microsoft Visual C++,
231
- as defined by the CCompiler abstract class."""
232
-
233
- compiler_type = 'msvc'
234
-
235
- # Just set this so CCompiler's constructor doesn't barf. We currently
236
- # don't use the 'set_executables()' bureaucracy provided by CCompiler,
237
- # as it really isn't necessary for this sort of single-compiler class.
238
- # Would be nice to have a consistent interface with UnixCCompiler,
239
- # though, so it's worth thinking about.
240
- executables = {}
241
-
242
- # Private class data (need to distinguish C from C++ source for compiler)
243
- _c_extensions = ['.c']
244
- _cpp_extensions = ['.cc', '.cpp', '.cxx']
245
- _rc_extensions = ['.rc']
246
- _mc_extensions = ['.mc']
247
-
248
- # Needed for the filename generation methods provided by the
249
- # base class, CCompiler.
250
- src_extensions = _c_extensions + _cpp_extensions + _rc_extensions + _mc_extensions
251
- res_extension = '.res'
252
- obj_extension = '.obj'
253
- static_lib_extension = '.lib'
254
- shared_lib_extension = '.dll'
255
- static_lib_format = shared_lib_format = '%s%s'
256
- exe_extension = '.exe'
257
-
258
- def __init__(self, verbose=False, dry_run=False, force=False):
259
- super().__init__(verbose, dry_run, force)
260
- # target platform (.plat_name is consistent with 'bdist')
261
- self.plat_name = None
262
- self.initialized = False
263
-
264
- @classmethod
265
- def _configure(cls, vc_env):
266
- """
267
- Set class-level include/lib dirs.
268
- """
269
- cls.include_dirs = cls._parse_path(vc_env.get('include', ''))
270
- cls.library_dirs = cls._parse_path(vc_env.get('lib', ''))
271
-
272
- @staticmethod
273
- def _parse_path(val):
274
- return [dir.rstrip(os.sep) for dir in val.split(os.pathsep) if dir]
275
-
276
- def initialize(self, plat_name=None):
277
- # multi-init means we would need to check platform same each time...
278
- assert not self.initialized, "don't init multiple times"
279
- if plat_name is None:
280
- plat_name = get_platform()
281
- # sanity check for platforms to prevent obscure errors later.
282
- if plat_name not in _vcvars_names:
283
- raise DistutilsPlatformError(
284
- f"--plat-name must be one of {tuple(_vcvars_names)}"
285
- )
286
-
287
- plat_spec = _get_vcvars_spec(get_host_platform(), plat_name)
288
-
289
- vc_env = _get_vc_env(plat_spec)
290
- if not vc_env:
291
- raise DistutilsPlatformError(
292
- "Unable to find a compatible Visual Studio installation."
293
- )
294
- self._configure(vc_env)
295
-
296
- self._paths = vc_env.get('path', '')
297
- paths = self._paths.split(os.pathsep)
298
- self.cc = _find_exe("cl.exe", paths)
299
- self.linker = _find_exe("link.exe", paths)
300
- self.lib = _find_exe("lib.exe", paths)
301
- self.rc = _find_exe("rc.exe", paths) # resource compiler
302
- self.mc = _find_exe("mc.exe", paths) # message compiler
303
- self.mt = _find_exe("mt.exe", paths) # message compiler
304
-
305
- self.preprocess_options = None
306
- # bpo-38597: Always compile with dynamic linking
307
- # Future releases of Python 3.x will include all past
308
- # versions of vcruntime*.dll for compatibility.
309
- self.compile_options = ['/nologo', '/O2', '/W3', '/GL', '/DNDEBUG', '/MD']
310
-
311
- self.compile_options_debug = [
312
- '/nologo',
313
- '/Od',
314
- '/MDd',
315
- '/Zi',
316
- '/W3',
317
- '/D_DEBUG',
318
- ]
319
-
320
- ldflags = ['/nologo', '/INCREMENTAL:NO', '/LTCG']
321
-
322
- ldflags_debug = ['/nologo', '/INCREMENTAL:NO', '/LTCG', '/DEBUG:FULL']
323
-
324
- self.ldflags_exe = [*ldflags, '/MANIFEST:EMBED,ID=1']
325
- self.ldflags_exe_debug = [*ldflags_debug, '/MANIFEST:EMBED,ID=1']
326
- self.ldflags_shared = [
327
- *ldflags,
328
- '/DLL',
329
- '/MANIFEST:EMBED,ID=2',
330
- '/MANIFESTUAC:NO',
331
- ]
332
- self.ldflags_shared_debug = [
333
- *ldflags_debug,
334
- '/DLL',
335
- '/MANIFEST:EMBED,ID=2',
336
- '/MANIFESTUAC:NO',
337
- ]
338
- self.ldflags_static = [*ldflags]
339
- self.ldflags_static_debug = [*ldflags_debug]
340
-
341
- self._ldflags = {
342
- (CCompiler.EXECUTABLE, None): self.ldflags_exe,
343
- (CCompiler.EXECUTABLE, False): self.ldflags_exe,
344
- (CCompiler.EXECUTABLE, True): self.ldflags_exe_debug,
345
- (CCompiler.SHARED_OBJECT, None): self.ldflags_shared,
346
- (CCompiler.SHARED_OBJECT, False): self.ldflags_shared,
347
- (CCompiler.SHARED_OBJECT, True): self.ldflags_shared_debug,
348
- (CCompiler.SHARED_LIBRARY, None): self.ldflags_static,
349
- (CCompiler.SHARED_LIBRARY, False): self.ldflags_static,
350
- (CCompiler.SHARED_LIBRARY, True): self.ldflags_static_debug,
351
- }
352
-
353
- self.initialized = True
354
-
355
- # -- Worker methods ------------------------------------------------
356
-
357
- @property
358
- def out_extensions(self):
359
- return {
360
- **super().out_extensions,
361
- **{
362
- ext: self.res_extension
363
- for ext in self._rc_extensions + self._mc_extensions
364
- },
365
- }
366
-
367
- def compile( # noqa: C901
368
- self,
369
- sources,
370
- output_dir=None,
371
- macros=None,
372
- include_dirs=None,
373
- debug=False,
374
- extra_preargs=None,
375
- extra_postargs=None,
376
- depends=None,
377
- ):
378
- if not self.initialized:
379
- self.initialize()
380
- compile_info = self._setup_compile(
381
- output_dir, macros, include_dirs, sources, depends, extra_postargs
382
- )
383
- macros, objects, extra_postargs, pp_opts, build = compile_info
384
-
385
- compile_opts = extra_preargs or []
386
- compile_opts.append('/c')
387
- if debug:
388
- compile_opts.extend(self.compile_options_debug)
389
- else:
390
- compile_opts.extend(self.compile_options)
391
-
392
- add_cpp_opts = False
393
-
394
- for obj in objects:
395
- try:
396
- src, ext = build[obj]
397
- except KeyError:
398
- continue
399
- if debug:
400
- # pass the full pathname to MSVC in debug mode,
401
- # this allows the debugger to find the source file
402
- # without asking the user to browse for it
403
- src = os.path.abspath(src)
404
-
405
- if ext in self._c_extensions:
406
- input_opt = "/Tc" + src
407
- elif ext in self._cpp_extensions:
408
- input_opt = "/Tp" + src
409
- add_cpp_opts = True
410
- elif ext in self._rc_extensions:
411
- # compile .RC to .RES file
412
- input_opt = src
413
- output_opt = "/fo" + obj
414
- try:
415
- self.spawn([self.rc] + pp_opts + [output_opt, input_opt])
416
- except DistutilsExecError as msg:
417
- raise CompileError(msg)
418
- continue
419
- elif ext in self._mc_extensions:
420
- # Compile .MC to .RC file to .RES file.
421
- # * '-h dir' specifies the directory for the
422
- # generated include file
423
- # * '-r dir' specifies the target directory of the
424
- # generated RC file and the binary message resource
425
- # it includes
426
- #
427
- # For now (since there are no options to change this),
428
- # we use the source-directory for the include file and
429
- # the build directory for the RC file and message
430
- # resources. This works at least for win32all.
431
- h_dir = os.path.dirname(src)
432
- rc_dir = os.path.dirname(obj)
433
- try:
434
- # first compile .MC to .RC and .H file
435
- self.spawn([self.mc, '-h', h_dir, '-r', rc_dir, src])
436
- base, _ = os.path.splitext(os.path.basename(src))
437
- rc_file = os.path.join(rc_dir, base + '.rc')
438
- # then compile .RC to .RES file
439
- self.spawn([self.rc, "/fo" + obj, rc_file])
440
-
441
- except DistutilsExecError as msg:
442
- raise CompileError(msg)
443
- continue
444
- else:
445
- # how to handle this file?
446
- raise CompileError(f"Don't know how to compile {src} to {obj}")
447
-
448
- args = [self.cc] + compile_opts + pp_opts
449
- if add_cpp_opts:
450
- args.append('/EHsc')
451
- args.extend((input_opt, "/Fo" + obj))
452
- args.extend(extra_postargs)
453
-
454
- try:
455
- self.spawn(args)
456
- except DistutilsExecError as msg:
457
- raise CompileError(msg)
458
-
459
- return objects
460
-
461
- def create_static_lib(
462
- self, objects, output_libname, output_dir=None, debug=False, target_lang=None
463
- ):
464
- if not self.initialized:
465
- self.initialize()
466
- objects, output_dir = self._fix_object_args(objects, output_dir)
467
- output_filename = self.library_filename(output_libname, output_dir=output_dir)
468
-
469
- if self._need_link(objects, output_filename):
470
- lib_args = objects + ['/OUT:' + output_filename]
471
- if debug:
472
- pass # XXX what goes here?
473
- try:
474
- log.debug('Executing "%s" %s', self.lib, ' '.join(lib_args))
475
- self.spawn([self.lib] + lib_args)
476
- except DistutilsExecError as msg:
477
- raise LibError(msg)
478
- else:
479
- log.debug("skipping %s (up-to-date)", output_filename)
480
-
481
- def link(
482
- self,
483
- target_desc,
484
- objects,
485
- output_filename,
486
- output_dir=None,
487
- libraries=None,
488
- library_dirs=None,
489
- runtime_library_dirs=None,
490
- export_symbols=None,
491
- debug=False,
492
- extra_preargs=None,
493
- extra_postargs=None,
494
- build_temp=None,
495
- target_lang=None,
496
- ):
497
- if not self.initialized:
498
- self.initialize()
499
- objects, output_dir = self._fix_object_args(objects, output_dir)
500
- fixed_args = self._fix_lib_args(libraries, library_dirs, runtime_library_dirs)
501
- libraries, library_dirs, runtime_library_dirs = fixed_args
502
-
503
- if runtime_library_dirs:
504
- self.warn(
505
- "I don't know what to do with 'runtime_library_dirs': "
506
- + str(runtime_library_dirs)
507
- )
508
-
509
- lib_opts = gen_lib_options(self, library_dirs, runtime_library_dirs, libraries)
510
- if output_dir is not None:
511
- output_filename = os.path.join(output_dir, output_filename)
512
-
513
- if self._need_link(objects, output_filename):
514
- ldflags = self._ldflags[target_desc, debug]
515
-
516
- export_opts = ["/EXPORT:" + sym for sym in (export_symbols or [])]
517
-
518
- ld_args = (
519
- ldflags + lib_opts + export_opts + objects + ['/OUT:' + output_filename]
520
- )
521
-
522
- # The MSVC linker generates .lib and .exp files, which cannot be
523
- # suppressed by any linker switches. The .lib files may even be
524
- # needed! Make sure they are generated in the temporary build
525
- # directory. Since they have different names for debug and release
526
- # builds, they can go into the same directory.
527
- build_temp = os.path.dirname(objects[0])
528
- if export_symbols is not None:
529
- (dll_name, dll_ext) = os.path.splitext(
530
- os.path.basename(output_filename)
531
- )
532
- implib_file = os.path.join(build_temp, self.library_filename(dll_name))
533
- ld_args.append('/IMPLIB:' + implib_file)
534
-
535
- if extra_preargs:
536
- ld_args[:0] = extra_preargs
537
- if extra_postargs:
538
- ld_args.extend(extra_postargs)
539
-
540
- output_dir = os.path.dirname(os.path.abspath(output_filename))
541
- self.mkpath(output_dir)
542
- try:
543
- log.debug('Executing "%s" %s', self.linker, ' '.join(ld_args))
544
- self.spawn([self.linker] + ld_args)
545
- except DistutilsExecError as msg:
546
- raise LinkError(msg)
547
- else:
548
- log.debug("skipping %s (up-to-date)", output_filename)
549
-
550
- def spawn(self, cmd):
551
- env = dict(os.environ, PATH=self._paths)
552
- with self._fallback_spawn(cmd, env) as fallback:
553
- return super().spawn(cmd, env=env)
554
- return fallback.value
555
-
556
- @contextlib.contextmanager
557
- def _fallback_spawn(self, cmd, env):
558
- """
559
- Discovered in pypa/distutils#15, some tools monkeypatch the compiler,
560
- so the 'env' kwarg causes a TypeError. Detect this condition and
561
- restore the legacy, unsafe behavior.
562
- """
563
- bag = type('Bag', (), {})()
564
- try:
565
- yield bag
566
- except TypeError as exc:
567
- if "unexpected keyword argument 'env'" not in str(exc):
568
- raise
569
- else:
570
- return
571
- warnings.warn("Fallback spawn triggered. Please update distutils monkeypatch.")
572
- with mock.patch.dict('os.environ', env):
573
- bag.value = super().spawn(cmd)
574
-
575
- # -- Miscellaneous methods -----------------------------------------
576
- # These are all used by the 'gen_lib_options() function, in
577
- # ccompiler.py.
578
-
579
- def library_dir_option(self, dir):
580
- return "/LIBPATH:" + dir
581
-
582
- def runtime_library_dir_option(self, dir):
583
- raise DistutilsPlatformError(
584
- "don't know how to set runtime library search path for MSVC"
585
- )
586
-
587
- def library_option(self, lib):
588
- return self.library_filename(lib)
589
-
590
- def find_library_file(self, dirs, lib, debug=False):
591
- # Prefer a debugging library if found (and requested), but deal
592
- # with it if we don't have one.
593
- if debug:
594
- try_names = [lib + "_d", lib]
595
- else:
596
- try_names = [lib]
597
- for dir in dirs:
598
- for name in try_names:
599
- libfile = os.path.join(dir, self.library_filename(name))
600
- if os.path.isfile(libfile):
601
- return libfile
602
- else:
603
- # Oops, didn't find it in *any* of 'dirs'
604
- return None
3
+ MSVCCompiler = msvc.Compiler