Nuitka-winsvc 2.7.7__cp313-cp313-win_amd64.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 Nuitka-winsvc might be problematic. Click here for more details.

Files changed (995) hide show
  1. nuitka/Builtins.py +259 -0
  2. nuitka/BytecodeCaching.py +184 -0
  3. nuitka/Bytecodes.py +109 -0
  4. nuitka/CacheCleanup.py +54 -0
  5. nuitka/Constants.py +425 -0
  6. nuitka/Errors.py +93 -0
  7. nuitka/HardImportRegistry.py +408 -0
  8. nuitka/MainControl.py +1201 -0
  9. nuitka/ModuleRegistry.py +364 -0
  10. nuitka/OptionParsing.py +2473 -0
  11. nuitka/Options.py +2948 -0
  12. nuitka/OutputDirectories.py +201 -0
  13. nuitka/PostProcessing.py +551 -0
  14. nuitka/Progress.py +252 -0
  15. nuitka/PythonFlavors.py +426 -0
  16. nuitka/PythonOperators.py +146 -0
  17. nuitka/PythonVersions.py +513 -0
  18. nuitka/Serialization.py +291 -0
  19. nuitka/SourceCodeReferences.py +176 -0
  20. nuitka/Tracing.py +579 -0
  21. nuitka/TreeXML.py +141 -0
  22. nuitka/Variables.py +515 -0
  23. nuitka/Version.py +88 -0
  24. nuitka/__init__.py +19 -0
  25. nuitka/__main__.py +224 -0
  26. nuitka/__past__.py +217 -0
  27. nuitka/build/Backend.scons +1111 -0
  28. nuitka/build/CCompilerVersion.scons +281 -0
  29. nuitka/build/DataComposerInterface.py +116 -0
  30. nuitka/build/Offsets.scons +626 -0
  31. nuitka/build/Onefile.scons +564 -0
  32. nuitka/build/SconsCaching.py +451 -0
  33. nuitka/build/SconsCompilerSettings.py +1133 -0
  34. nuitka/build/SconsHacks.py +215 -0
  35. nuitka/build/SconsInterface.py +664 -0
  36. nuitka/build/SconsProgress.py +100 -0
  37. nuitka/build/SconsSpawn.py +436 -0
  38. nuitka/build/SconsUtils.py +939 -0
  39. nuitka/build/__init__.py +19 -0
  40. nuitka/build/include/nuitka/allocator.h +450 -0
  41. nuitka/build/include/nuitka/builtins.h +97 -0
  42. nuitka/build/include/nuitka/calling.h +123 -0
  43. nuitka/build/include/nuitka/checkers.h +39 -0
  44. nuitka/build/include/nuitka/checksum_tools.h +28 -0
  45. nuitka/build/include/nuitka/compiled_asyncgen.h +281 -0
  46. nuitka/build/include/nuitka/compiled_cell.h +64 -0
  47. nuitka/build/include/nuitka/compiled_coroutine.h +271 -0
  48. nuitka/build/include/nuitka/compiled_frame.h +502 -0
  49. nuitka/build/include/nuitka/compiled_function.h +170 -0
  50. nuitka/build/include/nuitka/compiled_generator.h +287 -0
  51. nuitka/build/include/nuitka/compiled_method.h +54 -0
  52. nuitka/build/include/nuitka/constants.h +251 -0
  53. nuitka/build/include/nuitka/constants_blob.h +34 -0
  54. nuitka/build/include/nuitka/debug_settings.h +60 -0
  55. nuitka/build/include/nuitka/environment_variables.h +30 -0
  56. nuitka/build/include/nuitka/environment_variables_system.h +51 -0
  57. nuitka/build/include/nuitka/exception_groups.h +167 -0
  58. nuitka/build/include/nuitka/exceptions.h +1458 -0
  59. nuitka/build/include/nuitka/filesystem_paths.h +117 -0
  60. nuitka/build/include/nuitka/freelists.h +92 -0
  61. nuitka/build/include/nuitka/hedley.h +1774 -0
  62. nuitka/build/include/nuitka/helper/attributes.h +90 -0
  63. nuitka/build/include/nuitka/helper/boolean.h +86 -0
  64. nuitka/build/include/nuitka/helper/bytearrays.h +34 -0
  65. nuitka/build/include/nuitka/helper/bytes.h +28 -0
  66. nuitka/build/include/nuitka/helper/calling_generated.h +132 -0
  67. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  68. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  69. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  70. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  71. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  72. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  73. nuitka/build/include/nuitka/helper/comparisons_eq.h +247 -0
  74. nuitka/build/include/nuitka/helper/comparisons_ge.h +197 -0
  75. nuitka/build/include/nuitka/helper/comparisons_gt.h +197 -0
  76. nuitka/build/include/nuitka/helper/comparisons_le.h +247 -0
  77. nuitka/build/include/nuitka/helper/comparisons_lt.h +247 -0
  78. nuitka/build/include/nuitka/helper/comparisons_ne.h +197 -0
  79. nuitka/build/include/nuitka/helper/complex.h +46 -0
  80. nuitka/build/include/nuitka/helper/dictionaries.h +481 -0
  81. nuitka/build/include/nuitka/helper/floats.h +32 -0
  82. nuitka/build/include/nuitka/helper/import_hard.h +121 -0
  83. nuitka/build/include/nuitka/helper/indexes.h +47 -0
  84. nuitka/build/include/nuitka/helper/ints.h +165 -0
  85. nuitka/build/include/nuitka/helper/iterators.h +376 -0
  86. nuitka/build/include/nuitka/helper/lists.h +94 -0
  87. nuitka/build/include/nuitka/helper/lists_generated.h +36 -0
  88. nuitka/build/include/nuitka/helper/mappings.h +39 -0
  89. nuitka/build/include/nuitka/helper/operations.h +114 -0
  90. nuitka/build/include/nuitka/helper/operations_binary_add.h +240 -0
  91. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +108 -0
  92. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +108 -0
  93. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +108 -0
  94. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +103 -0
  95. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  96. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +103 -0
  97. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +99 -0
  98. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +60 -0
  99. nuitka/build/include/nuitka/helper/operations_binary_mod.h +304 -0
  100. nuitka/build/include/nuitka/helper/operations_binary_mult.h +247 -0
  101. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +125 -0
  102. nuitka/build/include/nuitka/helper/operations_binary_pow.h +90 -0
  103. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +99 -0
  104. nuitka/build/include/nuitka/helper/operations_binary_sub.h +117 -0
  105. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +103 -0
  106. nuitka/build/include/nuitka/helper/operations_builtin_types.h +247 -0
  107. nuitka/build/include/nuitka/helper/operations_inplace_add.h +173 -0
  108. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +76 -0
  109. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +76 -0
  110. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +76 -0
  111. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +95 -0
  112. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +62 -0
  113. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +60 -0
  114. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +218 -0
  115. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +184 -0
  116. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +115 -0
  117. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +87 -0
  118. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +62 -0
  119. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +102 -0
  120. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +95 -0
  121. nuitka/build/include/nuitka/helper/raising.h +114 -0
  122. nuitka/build/include/nuitka/helper/rangeobjects.h +66 -0
  123. nuitka/build/include/nuitka/helper/richcomparisons.h +35 -0
  124. nuitka/build/include/nuitka/helper/sequences.h +33 -0
  125. nuitka/build/include/nuitka/helper/sets.h +25 -0
  126. nuitka/build/include/nuitka/helper/slices.h +314 -0
  127. nuitka/build/include/nuitka/helper/strings.h +30 -0
  128. nuitka/build/include/nuitka/helper/subscripts.h +390 -0
  129. nuitka/build/include/nuitka/helper/tuples.h +187 -0
  130. nuitka/build/include/nuitka/helpers.h +417 -0
  131. nuitka/build/include/nuitka/importing.h +149 -0
  132. nuitka/build/include/nuitka/incbin.h +402 -0
  133. nuitka/build/include/nuitka/jit_sources.h +25 -0
  134. nuitka/build/include/nuitka/prelude.h +626 -0
  135. nuitka/build/include/nuitka/printing.h +84 -0
  136. nuitka/build/include/nuitka/python_pgo.h +57 -0
  137. nuitka/build/include/nuitka/safe_string_ops.h +57 -0
  138. nuitka/build/include/nuitka/threading.h +142 -0
  139. nuitka/build/include/nuitka/tracing.h +82 -0
  140. nuitka/build/include/nuitka/type_aliases.h +30 -0
  141. nuitka/build/include/nuitka/unfreezing.h +91 -0
  142. nuitka/build/inline_copy/appdirs/LICENSE.txt +23 -0
  143. nuitka/build/inline_copy/appdirs/appdirs.py +611 -0
  144. nuitka/build/inline_copy/atomicwrites/LICENSE +19 -0
  145. nuitka/build/inline_copy/atomicwrites/atomicwrites.py +226 -0
  146. nuitka/build/inline_copy/bin/scons.py +58 -0
  147. nuitka/build/inline_copy/clcache/clcache/LICENSE +30 -0
  148. nuitka/build/inline_copy/clcache/clcache/__init__.py +4 -0
  149. nuitka/build/inline_copy/clcache/clcache/caching.py +2008 -0
  150. nuitka/build/inline_copy/colorama/LICENSE.txt +27 -0
  151. nuitka/build/inline_copy/colorama/colorama/__init__.py +6 -0
  152. nuitka/build/inline_copy/colorama/colorama/ansi.py +102 -0
  153. nuitka/build/inline_copy/colorama/colorama/ansitowin32.py +258 -0
  154. nuitka/build/inline_copy/colorama/colorama/initialise.py +80 -0
  155. nuitka/build/inline_copy/colorama/colorama/win32.py +152 -0
  156. nuitka/build/inline_copy/colorama/colorama/winterm.py +169 -0
  157. nuitka/build/inline_copy/glob2/LICENSE +27 -0
  158. nuitka/build/inline_copy/glob2/glob2/__init__.py +5 -0
  159. nuitka/build/inline_copy/glob2/glob2/compat.py +167 -0
  160. nuitka/build/inline_copy/glob2/glob2/fnmatch.py +141 -0
  161. nuitka/build/inline_copy/glob2/glob2/impl.py +216 -0
  162. nuitka/build/inline_copy/jinja2/LICENSE.rst +28 -0
  163. nuitka/build/inline_copy/jinja2/README.rst +2 -0
  164. nuitka/build/inline_copy/jinja2/jinja2/__init__.py +72 -0
  165. nuitka/build/inline_copy/jinja2/jinja2/_compat.py +105 -0
  166. nuitka/build/inline_copy/jinja2/jinja2/_identifier.py +2 -0
  167. nuitka/build/inline_copy/jinja2/jinja2/bccache.py +361 -0
  168. nuitka/build/inline_copy/jinja2/jinja2/compiler.py +1721 -0
  169. nuitka/build/inline_copy/jinja2/jinja2/constants.py +32 -0
  170. nuitka/build/inline_copy/jinja2/jinja2/debug.py +378 -0
  171. nuitka/build/inline_copy/jinja2/jinja2/defaults.py +56 -0
  172. nuitka/build/inline_copy/jinja2/jinja2/environment.py +1276 -0
  173. nuitka/build/inline_copy/jinja2/jinja2/exceptions.py +146 -0
  174. nuitka/build/inline_copy/jinja2/jinja2/ext.py +627 -0
  175. nuitka/build/inline_copy/jinja2/jinja2/filters.py +1190 -0
  176. nuitka/build/inline_copy/jinja2/jinja2/idtracking.py +286 -0
  177. nuitka/build/inline_copy/jinja2/jinja2/lexer.py +739 -0
  178. nuitka/build/inline_copy/jinja2/jinja2/loaders.py +483 -0
  179. nuitka/build/inline_copy/jinja2/jinja2/meta.py +106 -0
  180. nuitka/build/inline_copy/jinja2/jinja2/nativetypes.py +220 -0
  181. nuitka/build/inline_copy/jinja2/jinja2/nodes.py +999 -0
  182. nuitka/build/inline_copy/jinja2/jinja2/optimizer.py +49 -0
  183. nuitka/build/inline_copy/jinja2/jinja2/parser.py +903 -0
  184. nuitka/build/inline_copy/jinja2/jinja2/runtime.py +808 -0
  185. nuitka/build/inline_copy/jinja2/jinja2/sandbox.py +488 -0
  186. nuitka/build/inline_copy/jinja2/jinja2/tests.py +174 -0
  187. nuitka/build/inline_copy/jinja2/jinja2/utils.py +642 -0
  188. nuitka/build/inline_copy/jinja2/jinja2/visitor.py +87 -0
  189. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Action.py +1475 -0
  190. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Builder.py +905 -0
  191. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/CacheDir.py +314 -0
  192. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Conftest.py +805 -0
  193. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Debug.py +251 -0
  194. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Defaults.py +646 -0
  195. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Environment.py +2561 -0
  196. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/EnvironmentValues.py +119 -0
  197. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Errors.py +222 -0
  198. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Executor.py +660 -0
  199. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Job.py +439 -0
  200. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Memoize.py +242 -0
  201. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/Alias.py +176 -0
  202. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/FS.py +3861 -0
  203. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/Python.py +195 -0
  204. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/__init__.py +1784 -0
  205. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/PathList.py +224 -0
  206. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/__init__.py +341 -0
  207. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/aix.py +81 -0
  208. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/cygwin.py +61 -0
  209. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/darwin.py +70 -0
  210. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/hpux.py +45 -0
  211. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/irix.py +41 -0
  212. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/mingw.py +33 -0
  213. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/os2.py +55 -0
  214. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/posix.py +124 -0
  215. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/sunos.py +47 -0
  216. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/virtualenv.py +115 -0
  217. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/win32.py +429 -0
  218. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/SConf.py +1119 -0
  219. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/SConsign.py +453 -0
  220. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/C.py +226 -0
  221. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/Dir.py +131 -0
  222. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/Prog.py +114 -0
  223. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/RC.py +57 -0
  224. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/__init__.py +436 -0
  225. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/Interactive.py +372 -0
  226. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/Main.py +1469 -0
  227. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/SConsOptions.py +1071 -0
  228. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/SConscript.py +686 -0
  229. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/__init__.py +425 -0
  230. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Subst.py +979 -0
  231. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Taskmaster.py +1062 -0
  232. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/386asm.py +61 -0
  233. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/GettextCommon.py +429 -0
  234. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/__init__.py +52 -0
  235. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/arch.py +66 -0
  236. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/common.py +371 -0
  237. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/netframework.py +83 -0
  238. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/sdk.py +411 -0
  239. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/vc.py +994 -0
  240. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/vs.py +608 -0
  241. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/PharLapCommon.py +116 -0
  242. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/__init__.py +882 -0
  243. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixc++.py +43 -0
  244. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixcc.py +74 -0
  245. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixcxx.py +77 -0
  246. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixlink.py +78 -0
  247. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/applelink.py +209 -0
  248. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ar.py +63 -0
  249. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/as.py +49 -0
  250. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/asm.py +78 -0
  251. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/bcc32.py +81 -0
  252. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/c++.py +44 -0
  253. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cc.py +105 -0
  254. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clang.py +91 -0
  255. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clangCommon/__init__.py +18 -0
  256. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clangxx.py +99 -0
  257. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cxx.py +95 -0
  258. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cyglink.py +212 -0
  259. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/default.py +50 -0
  260. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/filesystem.py +98 -0
  261. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/g++.py +45 -0
  262. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gas.py +56 -0
  263. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gcc.py +110 -0
  264. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gettext_tool.py +69 -0
  265. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gnulink.py +70 -0
  266. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gxx.py +78 -0
  267. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpc++.py +45 -0
  268. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpcc.py +53 -0
  269. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpcxx.py +88 -0
  270. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hplink.py +72 -0
  271. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/icc.py +59 -0
  272. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/icl.py +52 -0
  273. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ilink.py +55 -0
  274. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ilink32.py +60 -0
  275. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/install.py +510 -0
  276. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/intelc.py +617 -0
  277. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/link.py +72 -0
  278. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/LoadableModule.py +131 -0
  279. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/SharedLibrary.py +218 -0
  280. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/__init__.py +171 -0
  281. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkloc.py +112 -0
  282. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/m4.py +63 -0
  283. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/masm.py +77 -0
  284. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mingw.py +232 -0
  285. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msgfmt.py +132 -0
  286. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msginit.py +137 -0
  287. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msgmerge.py +125 -0
  288. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mslib.py +73 -0
  289. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mslink.py +339 -0
  290. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mssdk.py +50 -0
  291. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msvc.py +325 -0
  292. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msvs.py +2116 -0
  293. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mwcc.py +207 -0
  294. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mwld.py +108 -0
  295. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/nasm.py +72 -0
  296. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/rmic.py +139 -0
  297. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/rpcgen.py +70 -0
  298. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgiar.py +68 -0
  299. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgic++.py +43 -0
  300. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgicc.py +53 -0
  301. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgicxx.py +61 -0
  302. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgilink.py +59 -0
  303. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunar.py +64 -0
  304. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunc++.py +45 -0
  305. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/suncc.py +58 -0
  306. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/suncxx.py +153 -0
  307. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunlink.py +79 -0
  308. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/tar.py +73 -0
  309. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/textfile.py +198 -0
  310. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/tlib.py +53 -0
  311. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/wix.py +104 -0
  312. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/xgettext.py +337 -0
  313. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/zip.py +120 -0
  314. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Util.py +2134 -0
  315. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/ConfigureCache.py +171 -0
  316. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/__init__.py +0 -0
  317. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/sconsign.py +494 -0
  318. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/BoolVariable.py +96 -0
  319. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/EnumVariable.py +110 -0
  320. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +152 -0
  321. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/PackageVariable.py +107 -0
  322. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/PathVariable.py +158 -0
  323. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/__init__.py +334 -0
  324. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Warnings.py +238 -0
  325. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/__init__.py +9 -0
  326. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/__init__.py +104 -0
  327. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/_scons_dbm.py +42 -0
  328. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/win32.py +101 -0
  329. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/cpp.py +640 -0
  330. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/dblite.py +295 -0
  331. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/exitfuncs.py +59 -0
  332. nuitka/build/inline_copy/markupsafe/LICENSE.rst +28 -0
  333. nuitka/build/inline_copy/markupsafe/markupsafe/__init__.py +327 -0
  334. nuitka/build/inline_copy/markupsafe/markupsafe/_compat.py +33 -0
  335. nuitka/build/inline_copy/markupsafe/markupsafe/_constants.py +264 -0
  336. nuitka/build/inline_copy/markupsafe/markupsafe/_native.py +69 -0
  337. nuitka/build/inline_copy/pefile/LICENSE.txt +21 -0
  338. nuitka/build/inline_copy/pefile/ordlookup/__init__.py +41 -0
  339. nuitka/build/inline_copy/pefile/ordlookup/oleaut32.py +400 -0
  340. nuitka/build/inline_copy/pefile/ordlookup/ws2_32.py +120 -0
  341. nuitka/build/inline_copy/pefile/pefile.py +8034 -0
  342. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +3272 -0
  343. nuitka/build/inline_copy/pkg_resources/pkg_resources/py31compat.py +21 -0
  344. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  345. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  346. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  347. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  348. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  349. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  350. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  351. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  352. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  353. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  354. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  355. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  356. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  357. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  358. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  359. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  360. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  361. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  362. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  363. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  364. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  365. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  366. nuitka/build/inline_copy/stubgen/six.py +998 -0
  367. nuitka/build/inline_copy/stubgen/stubgen.py +484 -0
  368. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +40 -0
  369. nuitka/build/inline_copy/tqdm/tqdm/_main.py +9 -0
  370. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +97 -0
  371. nuitka/build/inline_copy/tqdm/tqdm/_tqdm.py +9 -0
  372. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_notebook.py +9 -0
  373. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_pandas.py +24 -0
  374. nuitka/build/inline_copy/tqdm/tqdm/_utils.py +12 -0
  375. nuitka/build/inline_copy/tqdm/tqdm/auto.py +44 -0
  376. nuitka/build/inline_copy/tqdm/tqdm/autonotebook.py +28 -0
  377. nuitka/build/inline_copy/tqdm/tqdm/dask.py +46 -0
  378. nuitka/build/inline_copy/tqdm/tqdm/notebook.py +316 -0
  379. nuitka/build/inline_copy/tqdm/tqdm/std.py +1524 -0
  380. nuitka/build/inline_copy/tqdm/tqdm/tk.py +207 -0
  381. nuitka/build/inline_copy/tqdm/tqdm/utils.py +351 -0
  382. nuitka/build/inline_copy/tqdm/tqdm/version.py +2 -0
  383. nuitka/build/inline_copy/yaml/LICENSE +20 -0
  384. nuitka/build/inline_copy/yaml/yaml/__init__.py +427 -0
  385. nuitka/build/inline_copy/yaml/yaml/composer.py +139 -0
  386. nuitka/build/inline_copy/yaml/yaml/constructor.py +748 -0
  387. nuitka/build/inline_copy/yaml/yaml/cyaml.py +101 -0
  388. nuitka/build/inline_copy/yaml/yaml/dumper.py +62 -0
  389. nuitka/build/inline_copy/yaml/yaml/emitter.py +1137 -0
  390. nuitka/build/inline_copy/yaml/yaml/error.py +75 -0
  391. nuitka/build/inline_copy/yaml/yaml/events.py +86 -0
  392. nuitka/build/inline_copy/yaml/yaml/loader.py +63 -0
  393. nuitka/build/inline_copy/yaml/yaml/nodes.py +49 -0
  394. nuitka/build/inline_copy/yaml/yaml/parser.py +589 -0
  395. nuitka/build/inline_copy/yaml/yaml/reader.py +185 -0
  396. nuitka/build/inline_copy/yaml/yaml/representer.py +389 -0
  397. nuitka/build/inline_copy/yaml/yaml/resolver.py +227 -0
  398. nuitka/build/inline_copy/yaml/yaml/scanner.py +1435 -0
  399. nuitka/build/inline_copy/yaml/yaml/serializer.py +111 -0
  400. nuitka/build/inline_copy/yaml/yaml/tokens.py +104 -0
  401. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  402. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  403. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  404. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  405. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  406. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  407. nuitka/build/inline_copy/zstd/LICENSE.txt +30 -0
  408. nuitka/build/inline_copy/zstd/common/bitstream.h +463 -0
  409. nuitka/build/inline_copy/zstd/common/compiler.h +288 -0
  410. nuitka/build/inline_copy/zstd/common/cpu.h +213 -0
  411. nuitka/build/inline_copy/zstd/common/debug.h +107 -0
  412. nuitka/build/inline_copy/zstd/common/entropy_common.c +360 -0
  413. nuitka/build/inline_copy/zstd/common/error_private.c +56 -0
  414. nuitka/build/inline_copy/zstd/common/error_private.h +80 -0
  415. nuitka/build/inline_copy/zstd/common/fse.h +715 -0
  416. nuitka/build/inline_copy/zstd/common/fse_decompress.c +393 -0
  417. nuitka/build/inline_copy/zstd/common/huf.h +361 -0
  418. nuitka/build/inline_copy/zstd/common/mem.h +426 -0
  419. nuitka/build/inline_copy/zstd/common/xxhash.c +826 -0
  420. nuitka/build/inline_copy/zstd/common/xxhash.h +285 -0
  421. nuitka/build/inline_copy/zstd/common/zstd_common.c +83 -0
  422. nuitka/build/inline_copy/zstd/common/zstd_deps.h +111 -0
  423. nuitka/build/inline_copy/zstd/common/zstd_errors.h +95 -0
  424. nuitka/build/inline_copy/zstd/common/zstd_internal.h +478 -0
  425. nuitka/build/inline_copy/zstd/decompress/huf_decompress.c +1350 -0
  426. nuitka/build/inline_copy/zstd/decompress/zstd_ddict.c +244 -0
  427. nuitka/build/inline_copy/zstd/decompress/zstd_ddict.h +44 -0
  428. nuitka/build/inline_copy/zstd/decompress/zstd_decompress.c +1930 -0
  429. nuitka/build/inline_copy/zstd/decompress/zstd_decompress_block.c +1540 -0
  430. nuitka/build/inline_copy/zstd/decompress/zstd_decompress_block.h +62 -0
  431. nuitka/build/inline_copy/zstd/decompress/zstd_decompress_internal.h +190 -0
  432. nuitka/build/inline_copy/zstd/zstd.h +2391 -0
  433. nuitka/build/static_src/CompiledAsyncgenType.c +2211 -0
  434. nuitka/build/static_src/CompiledCellType.c +300 -0
  435. nuitka/build/static_src/CompiledCodeHelpers.c +2160 -0
  436. nuitka/build/static_src/CompiledCoroutineType.c +1946 -0
  437. nuitka/build/static_src/CompiledFrameType.c +1337 -0
  438. nuitka/build/static_src/CompiledFunctionType.c +3320 -0
  439. nuitka/build/static_src/CompiledGeneratorType.c +1997 -0
  440. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +2117 -0
  441. nuitka/build/static_src/CompiledMethodType.c +614 -0
  442. nuitka/build/static_src/GenerateHeadersMain.c +30 -0
  443. nuitka/build/static_src/HelpersAllocator.c +939 -0
  444. nuitka/build/static_src/HelpersAttributes.c +1241 -0
  445. nuitka/build/static_src/HelpersBuiltin.c +901 -0
  446. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +3594 -0
  447. nuitka/build/static_src/HelpersBytes.c +107 -0
  448. nuitka/build/static_src/HelpersCalling.c +397 -0
  449. nuitka/build/static_src/HelpersCallingGenerated.c +14361 -0
  450. nuitka/build/static_src/HelpersChecksumTools.c +59 -0
  451. nuitka/build/static_src/HelpersClasses.c +91 -0
  452. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  453. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  454. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  455. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  456. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  457. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  458. nuitka/build/static_src/HelpersComparisonEq.c +12070 -0
  459. nuitka/build/static_src/HelpersComparisonEqUtils.c +169 -0
  460. nuitka/build/static_src/HelpersComparisonGe.c +11871 -0
  461. nuitka/build/static_src/HelpersComparisonGt.c +11855 -0
  462. nuitka/build/static_src/HelpersComparisonLe.c +11957 -0
  463. nuitka/build/static_src/HelpersComparisonLt.c +11941 -0
  464. nuitka/build/static_src/HelpersComparisonNe.c +11979 -0
  465. nuitka/build/static_src/HelpersConsole.c +124 -0
  466. nuitka/build/static_src/HelpersConstantsBlob.c +1487 -0
  467. nuitka/build/static_src/HelpersDeepcopy.c +636 -0
  468. nuitka/build/static_src/HelpersDictionaries.c +1739 -0
  469. nuitka/build/static_src/HelpersDictionariesGenerated.c +738 -0
  470. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  471. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  472. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +97 -0
  473. nuitka/build/static_src/HelpersExceptions.c +298 -0
  474. nuitka/build/static_src/HelpersFiles.c +353 -0
  475. nuitka/build/static_src/HelpersFilesystemPaths.c +1322 -0
  476. nuitka/build/static_src/HelpersFloats.c +92 -0
  477. nuitka/build/static_src/HelpersHeapStorage.c +68 -0
  478. nuitka/build/static_src/HelpersImport.c +506 -0
  479. nuitka/build/static_src/HelpersImportHard.c +526 -0
  480. nuitka/build/static_src/HelpersJitSources.c +48 -0
  481. nuitka/build/static_src/HelpersLists.c +899 -0
  482. nuitka/build/static_src/HelpersListsGenerated.c +564 -0
  483. nuitka/build/static_src/HelpersMappings.c +46 -0
  484. nuitka/build/static_src/HelpersMatching.c +192 -0
  485. nuitka/build/static_src/HelpersOperationBinaryAdd.c +6477 -0
  486. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +703 -0
  487. nuitka/build/static_src/HelpersOperationBinaryBitand.c +2738 -0
  488. nuitka/build/static_src/HelpersOperationBinaryBitor.c +2738 -0
  489. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +2738 -0
  490. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +2406 -0
  491. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +33 -0
  492. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  493. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +2422 -0
  494. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +220 -0
  495. nuitka/build/static_src/HelpersOperationBinaryLshift.c +2846 -0
  496. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +453 -0
  497. nuitka/build/static_src/HelpersOperationBinaryMod.c +6549 -0
  498. nuitka/build/static_src/HelpersOperationBinaryMult.c +6438 -0
  499. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +125 -0
  500. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +2355 -0
  501. nuitka/build/static_src/HelpersOperationBinaryPow.c +2743 -0
  502. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +26 -0
  503. nuitka/build/static_src/HelpersOperationBinaryRshift.c +2706 -0
  504. nuitka/build/static_src/HelpersOperationBinarySub.c +2649 -0
  505. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +2415 -0
  506. nuitka/build/static_src/HelpersOperationInplaceAdd.c +5211 -0
  507. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +144 -0
  508. nuitka/build/static_src/HelpersOperationInplaceBitand.c +1826 -0
  509. nuitka/build/static_src/HelpersOperationInplaceBitor.c +1826 -0
  510. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +1826 -0
  511. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +2605 -0
  512. nuitka/build/static_src/HelpersOperationInplaceLshift.c +1594 -0
  513. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +603 -0
  514. nuitka/build/static_src/HelpersOperationInplaceMod.c +4762 -0
  515. nuitka/build/static_src/HelpersOperationInplaceMult.c +4689 -0
  516. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +2553 -0
  517. nuitka/build/static_src/HelpersOperationInplacePow.c +2807 -0
  518. nuitka/build/static_src/HelpersOperationInplaceRshift.c +1534 -0
  519. nuitka/build/static_src/HelpersOperationInplaceSub.c +2894 -0
  520. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +2612 -0
  521. nuitka/build/static_src/HelpersProfiling.c +104 -0
  522. nuitka/build/static_src/HelpersPythonPgo.c +113 -0
  523. nuitka/build/static_src/HelpersRaising.c +447 -0
  524. nuitka/build/static_src/HelpersSafeStrings.c +185 -0
  525. nuitka/build/static_src/HelpersSequences.c +134 -0
  526. nuitka/build/static_src/HelpersSlices.c +73 -0
  527. nuitka/build/static_src/HelpersStrings.c +998 -0
  528. nuitka/build/static_src/HelpersTuples.c +148 -0
  529. nuitka/build/static_src/HelpersTypes.c +329 -0
  530. nuitka/build/static_src/InspectPatcher.c +439 -0
  531. nuitka/build/static_src/MainProgram.c +2060 -0
  532. nuitka/build/static_src/MetaPathBasedLoader.c +2290 -0
  533. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +125 -0
  534. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +158 -0
  535. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +785 -0
  536. nuitka/build/static_src/OnefileBootstrap.c +1580 -0
  537. nuitka/build/static_src/OnefileSplashScreen.cpp +275 -0
  538. nuitka/code_generation/AsyncgenCodes.py +186 -0
  539. nuitka/code_generation/AttributeCodes.py +357 -0
  540. nuitka/code_generation/BinaryOperationHelperDefinitions.py +720 -0
  541. nuitka/code_generation/BranchCodes.py +67 -0
  542. nuitka/code_generation/BuiltinCodes.py +529 -0
  543. nuitka/code_generation/CallCodes.py +1186 -0
  544. nuitka/code_generation/ClassCodes.py +156 -0
  545. nuitka/code_generation/CodeGeneration.py +1078 -0
  546. nuitka/code_generation/CodeHelperSelection.py +81 -0
  547. nuitka/code_generation/CodeHelpers.py +455 -0
  548. nuitka/code_generation/CodeObjectCodes.py +165 -0
  549. nuitka/code_generation/ComparisonCodes.py +569 -0
  550. nuitka/code_generation/ComparisonHelperDefinitions.py +146 -0
  551. nuitka/code_generation/ConditionalCodes.py +236 -0
  552. nuitka/code_generation/ConstantCodes.py +243 -0
  553. nuitka/code_generation/Contexts.py +1248 -0
  554. nuitka/code_generation/CoroutineCodes.py +253 -0
  555. nuitka/code_generation/CtypesCodes.py +46 -0
  556. nuitka/code_generation/DictCodes.py +918 -0
  557. nuitka/code_generation/Emission.py +75 -0
  558. nuitka/code_generation/ErrorCodes.py +281 -0
  559. nuitka/code_generation/EvalCodes.py +444 -0
  560. nuitka/code_generation/ExceptionCodes.py +337 -0
  561. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +227 -0
  562. nuitka/code_generation/ExpressionCodes.py +61 -0
  563. nuitka/code_generation/FrameCodes.py +518 -0
  564. nuitka/code_generation/FunctionCodes.py +858 -0
  565. nuitka/code_generation/GeneratorCodes.py +218 -0
  566. nuitka/code_generation/GlobalConstants.py +249 -0
  567. nuitka/code_generation/GlobalsLocalsCodes.py +211 -0
  568. nuitka/code_generation/IdCodes.py +53 -0
  569. nuitka/code_generation/ImportCodes.py +468 -0
  570. nuitka/code_generation/Indentation.py +45 -0
  571. nuitka/code_generation/IndexCodes.py +50 -0
  572. nuitka/code_generation/InjectCCodes.py +28 -0
  573. nuitka/code_generation/IntegerCodes.py +110 -0
  574. nuitka/code_generation/IteratorCodes.py +378 -0
  575. nuitka/code_generation/JitCodes.py +44 -0
  576. nuitka/code_generation/LabelCodes.py +68 -0
  577. nuitka/code_generation/LineNumberCodes.py +91 -0
  578. nuitka/code_generation/ListCodes.py +502 -0
  579. nuitka/code_generation/LoaderCodes.py +193 -0
  580. nuitka/code_generation/LocalsDictCodes.py +359 -0
  581. nuitka/code_generation/LoopCodes.py +88 -0
  582. nuitka/code_generation/MatchCodes.py +67 -0
  583. nuitka/code_generation/ModuleCodes.py +247 -0
  584. nuitka/code_generation/Namify.py +260 -0
  585. nuitka/code_generation/NetworkxCodes.py +51 -0
  586. nuitka/code_generation/OperationCodes.py +398 -0
  587. nuitka/code_generation/PackageResourceCodes.py +986 -0
  588. nuitka/code_generation/PrintCodes.py +93 -0
  589. nuitka/code_generation/PythonAPICodes.py +215 -0
  590. nuitka/code_generation/RaisingCodes.py +481 -0
  591. nuitka/code_generation/Reports.py +115 -0
  592. nuitka/code_generation/ReturnCodes.py +143 -0
  593. nuitka/code_generation/SetCodes.py +196 -0
  594. nuitka/code_generation/SliceCodes.py +465 -0
  595. nuitka/code_generation/StringCodes.py +303 -0
  596. nuitka/code_generation/SubscriptCodes.py +263 -0
  597. nuitka/code_generation/TensorflowCodes.py +54 -0
  598. nuitka/code_generation/TryCodes.py +326 -0
  599. nuitka/code_generation/TupleCodes.py +115 -0
  600. nuitka/code_generation/TypeAliasCodes.py +120 -0
  601. nuitka/code_generation/VariableCodes.py +519 -0
  602. nuitka/code_generation/VariableDeclarations.py +279 -0
  603. nuitka/code_generation/YieldCodes.py +253 -0
  604. nuitka/code_generation/__init__.py +19 -0
  605. nuitka/code_generation/c_types/CTypeBases.py +177 -0
  606. nuitka/code_generation/c_types/CTypeBooleans.py +104 -0
  607. nuitka/code_generation/c_types/CTypeCFloats.py +57 -0
  608. nuitka/code_generation/c_types/CTypeCLongs.py +45 -0
  609. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +109 -0
  610. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +150 -0
  611. nuitka/code_generation/c_types/CTypeNuitkaInts.py +200 -0
  612. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +107 -0
  613. nuitka/code_generation/c_types/CTypePyObjectPointers.py +572 -0
  614. nuitka/code_generation/c_types/CTypeVoids.py +92 -0
  615. nuitka/code_generation/c_types/__init__.py +19 -0
  616. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +106 -0
  617. nuitka/code_generation/templates/CodeTemplatesConstants.py +296 -0
  618. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +109 -0
  619. nuitka/code_generation/templates/CodeTemplatesExceptions.py +84 -0
  620. nuitka/code_generation/templates/CodeTemplatesFrames.py +235 -0
  621. nuitka/code_generation/templates/CodeTemplatesFunction.py +117 -0
  622. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +130 -0
  623. nuitka/code_generation/templates/CodeTemplatesIterators.py +40 -0
  624. nuitka/code_generation/templates/CodeTemplatesLoader.py +180 -0
  625. nuitka/code_generation/templates/CodeTemplatesModules.py +710 -0
  626. nuitka/code_generation/templates/CodeTemplatesVariables.py +388 -0
  627. nuitka/code_generation/templates/TemplateDebugWrapper.py +80 -0
  628. nuitka/code_generation/templates/__init__.py +19 -0
  629. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +321 -0
  630. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +143 -0
  631. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +677 -0
  632. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +165 -0
  633. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +38 -0
  634. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +41 -0
  635. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +53 -0
  636. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +364 -0
  637. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +37 -0
  638. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +53 -0
  639. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +20 -0
  640. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +148 -0
  641. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  642. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +352 -0
  643. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +115 -0
  644. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  645. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +31 -0
  646. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +32 -0
  647. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +112 -0
  648. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +157 -0
  649. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +115 -0
  650. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +99 -0
  651. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +115 -0
  652. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +281 -0
  653. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +420 -0
  654. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +51 -0
  655. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +71 -0
  656. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +327 -0
  657. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +411 -0
  658. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +59 -0
  659. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +229 -0
  660. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +47 -0
  661. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +55 -0
  662. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +58 -0
  663. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +62 -0
  664. nuitka/containers/Namedtuples.py +51 -0
  665. nuitka/containers/OrderedDicts.py +191 -0
  666. nuitka/containers/OrderedSets.py +123 -0
  667. nuitka/containers/OrderedSetsFallback.py +139 -0
  668. nuitka/containers/__init__.py +19 -0
  669. nuitka/distutils/Build.py +76 -0
  670. nuitka/distutils/DistutilCommands.py +438 -0
  671. nuitka/distutils/__init__.py +19 -0
  672. nuitka/finalizations/Finalization.py +35 -0
  673. nuitka/finalizations/FinalizeMarkups.py +136 -0
  674. nuitka/finalizations/__init__.py +19 -0
  675. nuitka/freezer/DependsExe.py +257 -0
  676. nuitka/freezer/DllDependenciesCommon.py +97 -0
  677. nuitka/freezer/DllDependenciesMacOS.py +444 -0
  678. nuitka/freezer/DllDependenciesPosix.py +242 -0
  679. nuitka/freezer/DllDependenciesWin32.py +315 -0
  680. nuitka/freezer/ImportDetection.py +359 -0
  681. nuitka/freezer/IncludedDataFiles.py +689 -0
  682. nuitka/freezer/IncludedEntryPoints.py +376 -0
  683. nuitka/freezer/Onefile.py +296 -0
  684. nuitka/freezer/Standalone.py +520 -0
  685. nuitka/freezer/__init__.py +19 -0
  686. nuitka/importing/IgnoreListing.py +449 -0
  687. nuitka/importing/ImportCache.py +95 -0
  688. nuitka/importing/ImportResolving.py +186 -0
  689. nuitka/importing/Importing.py +1200 -0
  690. nuitka/importing/PreloadedPackages.py +164 -0
  691. nuitka/importing/Recursion.py +611 -0
  692. nuitka/importing/StandardLibrary.py +429 -0
  693. nuitka/importing/__init__.py +19 -0
  694. nuitka/nodes/AsyncgenNodes.py +107 -0
  695. nuitka/nodes/AttributeLookupNodes.py +124 -0
  696. nuitka/nodes/AttributeNodes.py +386 -0
  697. nuitka/nodes/AttributeNodesGenerated.py +10734 -0
  698. nuitka/nodes/BuiltinAllNodes.py +115 -0
  699. nuitka/nodes/BuiltinAnyNodes.py +124 -0
  700. nuitka/nodes/BuiltinComplexNodes.py +83 -0
  701. nuitka/nodes/BuiltinDecodingNodes.py +52 -0
  702. nuitka/nodes/BuiltinDecoratorNodes.py +85 -0
  703. nuitka/nodes/BuiltinDictNodes.py +140 -0
  704. nuitka/nodes/BuiltinFormatNodes.py +159 -0
  705. nuitka/nodes/BuiltinHashNodes.py +63 -0
  706. nuitka/nodes/BuiltinInputNodes.py +39 -0
  707. nuitka/nodes/BuiltinIntegerNodes.py +170 -0
  708. nuitka/nodes/BuiltinIteratorNodes.py +391 -0
  709. nuitka/nodes/BuiltinLenNodes.py +61 -0
  710. nuitka/nodes/BuiltinNextNodes.py +111 -0
  711. nuitka/nodes/BuiltinOpenNodes.py +148 -0
  712. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +7367 -0
  713. nuitka/nodes/BuiltinRangeNodes.py +690 -0
  714. nuitka/nodes/BuiltinRefNodes.py +314 -0
  715. nuitka/nodes/BuiltinSumNodes.py +104 -0
  716. nuitka/nodes/BuiltinTypeNodes.py +454 -0
  717. nuitka/nodes/BuiltinVarsNodes.py +44 -0
  718. nuitka/nodes/BytesNodes.py +829 -0
  719. nuitka/nodes/CallNodes.py +217 -0
  720. nuitka/nodes/Checkers.py +55 -0
  721. nuitka/nodes/ChildrenHavingMixins.py +21576 -0
  722. nuitka/nodes/ClassNodes.py +286 -0
  723. nuitka/nodes/CodeObjectSpecs.py +230 -0
  724. nuitka/nodes/ComparisonNodes.py +687 -0
  725. nuitka/nodes/ConditionalNodes.py +884 -0
  726. nuitka/nodes/ConstantRefNodes.py +1717 -0
  727. nuitka/nodes/ContainerMakingNodes.py +408 -0
  728. nuitka/nodes/ContainerOperationNodes.py +87 -0
  729. nuitka/nodes/CoroutineNodes.py +144 -0
  730. nuitka/nodes/CtypesNodes.py +51 -0
  731. nuitka/nodes/DictionaryNodes.py +1513 -0
  732. nuitka/nodes/ExceptionNodes.py +393 -0
  733. nuitka/nodes/ExecEvalNodes.py +229 -0
  734. nuitka/nodes/ExpressionBases.py +1301 -0
  735. nuitka/nodes/ExpressionBasesGenerated.py +2103 -0
  736. nuitka/nodes/ExpressionShapeMixins.py +886 -0
  737. nuitka/nodes/FrameNodes.py +413 -0
  738. nuitka/nodes/FunctionAttributeNodes.py +102 -0
  739. nuitka/nodes/FunctionNodes.py +1303 -0
  740. nuitka/nodes/FutureSpecs.py +224 -0
  741. nuitka/nodes/GeneratorNodes.py +201 -0
  742. nuitka/nodes/GlobalsLocalsNodes.py +209 -0
  743. nuitka/nodes/HardImportNodesGenerated.py +3599 -0
  744. nuitka/nodes/ImportHardNodes.py +185 -0
  745. nuitka/nodes/ImportNodes.py +1366 -0
  746. nuitka/nodes/IndicatorMixins.py +79 -0
  747. nuitka/nodes/InjectCNodes.py +51 -0
  748. nuitka/nodes/IterationHandles.py +407 -0
  749. nuitka/nodes/KeyValuePairNodes.py +378 -0
  750. nuitka/nodes/ListOperationNodes.py +525 -0
  751. nuitka/nodes/LocalsDictNodes.py +717 -0
  752. nuitka/nodes/LocalsScopes.py +505 -0
  753. nuitka/nodes/LoopNodes.py +445 -0
  754. nuitka/nodes/MatchNodes.py +60 -0
  755. nuitka/nodes/ModuleAttributeNodes.py +180 -0
  756. nuitka/nodes/ModuleNodes.py +1137 -0
  757. nuitka/nodes/NetworkxNodes.py +45 -0
  758. nuitka/nodes/NodeBases.py +890 -0
  759. nuitka/nodes/NodeMakingHelpers.py +481 -0
  760. nuitka/nodes/NodeMetaClasses.py +172 -0
  761. nuitka/nodes/OperatorNodes.py +944 -0
  762. nuitka/nodes/OperatorNodesUnary.py +403 -0
  763. nuitka/nodes/OsSysNodes.py +215 -0
  764. nuitka/nodes/OutlineNodes.py +372 -0
  765. nuitka/nodes/PackageMetadataNodes.py +982 -0
  766. nuitka/nodes/PackageResourceNodes.py +424 -0
  767. nuitka/nodes/PrintNodes.py +105 -0
  768. nuitka/nodes/ReturnNodes.py +255 -0
  769. nuitka/nodes/SideEffectNodes.py +139 -0
  770. nuitka/nodes/SliceNodes.py +386 -0
  771. nuitka/nodes/StatementBasesGenerated.py +3419 -0
  772. nuitka/nodes/StatementNodes.py +316 -0
  773. nuitka/nodes/StrNodes.py +919 -0
  774. nuitka/nodes/StringConcatenationNodes.py +103 -0
  775. nuitka/nodes/SubscriptNodes.py +245 -0
  776. nuitka/nodes/TensorflowNodes.py +38 -0
  777. nuitka/nodes/TryNodes.py +519 -0
  778. nuitka/nodes/TypeMatchNodes.py +65 -0
  779. nuitka/nodes/TypeNodes.py +390 -0
  780. nuitka/nodes/VariableAssignNodes.py +1177 -0
  781. nuitka/nodes/VariableDelNodes.py +320 -0
  782. nuitka/nodes/VariableNameNodes.py +153 -0
  783. nuitka/nodes/VariableRefNodes.py +895 -0
  784. nuitka/nodes/VariableReleaseNodes.py +153 -0
  785. nuitka/nodes/YieldNodes.py +121 -0
  786. nuitka/nodes/__init__.py +19 -0
  787. nuitka/nodes/shapes/BuiltinTypeShapes.py +4290 -0
  788. nuitka/nodes/shapes/ControlFlowDescriptions.py +199 -0
  789. nuitka/nodes/shapes/IteratorShapes.py +71 -0
  790. nuitka/nodes/shapes/ShapeMixins.py +255 -0
  791. nuitka/nodes/shapes/StandardShapes.py +1384 -0
  792. nuitka/nodes/shapes/__init__.py +19 -0
  793. nuitka/optimizations/BytecodeDemotion.py +105 -0
  794. nuitka/optimizations/FunctionInlining.py +110 -0
  795. nuitka/optimizations/Graphs.py +70 -0
  796. nuitka/optimizations/Optimization.py +363 -0
  797. nuitka/optimizations/OptimizeBuiltinCalls.py +1582 -0
  798. nuitka/optimizations/Tags.py +76 -0
  799. nuitka/optimizations/TraceCollections.py +1257 -0
  800. nuitka/optimizations/ValueTraces.py +980 -0
  801. nuitka/optimizations/__init__.py +19 -0
  802. nuitka/pgo/PGO.py +160 -0
  803. nuitka/pgo/__init__.py +19 -0
  804. nuitka/plugins/PluginBase.py +1924 -0
  805. nuitka/plugins/Plugins.py +2007 -0
  806. nuitka/plugins/YamlPluginBase.py +121 -0
  807. nuitka/plugins/__init__.py +19 -0
  808. nuitka/plugins/standard/AntiBloatPlugin.py +1024 -0
  809. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +95 -0
  810. nuitka/plugins/standard/DataFilesPlugin.py +311 -0
  811. nuitka/plugins/standard/DelvewheelPlugin.py +150 -0
  812. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  813. nuitka/plugins/standard/DillPlugin/cloudpickle-postLoad.py +67 -0
  814. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +223 -0
  815. nuitka/plugins/standard/DillPlugin.py +137 -0
  816. nuitka/plugins/standard/DllFilesPlugin.py +527 -0
  817. nuitka/plugins/standard/EnumPlugin.py +64 -0
  818. nuitka/plugins/standard/EventletPlugin.py +57 -0
  819. nuitka/plugins/standard/GeventPlugin.py +64 -0
  820. nuitka/plugins/standard/GiPlugin.py +118 -0
  821. nuitka/plugins/standard/GlfwPlugin.py +138 -0
  822. nuitka/plugins/standard/ImplicitImports.py +845 -0
  823. nuitka/plugins/standard/KivyPlugin.py +141 -0
  824. nuitka/plugins/standard/MatplotlibPlugin.py +256 -0
  825. nuitka/plugins/standard/MultiprocessingPlugin.py +199 -0
  826. nuitka/plugins/standard/NumpyPlugin.py +35 -0
  827. nuitka/plugins/standard/OptionsNannyPlugin.py +158 -0
  828. nuitka/plugins/standard/PbrPlugin.py +62 -0
  829. nuitka/plugins/standard/PkgResourcesPlugin.py +162 -0
  830. nuitka/plugins/standard/PlaywrightPlugin.py +179 -0
  831. nuitka/plugins/standard/PmwPlugin.py +248 -0
  832. nuitka/plugins/standard/PySidePyQtPlugin.py +1666 -0
  833. nuitka/plugins/standard/PywebViewPlugin.py +81 -0
  834. nuitka/plugins/standard/SpacyPlugin.py +137 -0
  835. nuitka/plugins/standard/TensorflowPlugin.py +35 -0
  836. nuitka/plugins/standard/TkinterPlugin.py +416 -0
  837. nuitka/plugins/standard/TorchPlugin.py +35 -0
  838. nuitka/plugins/standard/TransformersPlugin.py +121 -0
  839. nuitka/plugins/standard/TrioPlugin.py +33 -0
  840. nuitka/plugins/standard/UpxPlugin.py +174 -0
  841. nuitka/plugins/standard/__init__.py +19 -0
  842. nuitka/plugins/standard/standard.nuitka-package.config.yml +9313 -0
  843. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +78 -0
  844. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +468 -0
  845. nuitka/reports/CompilationReportReader.py +83 -0
  846. nuitka/reports/LicenseReport.rst.j2 +41 -0
  847. nuitka/reports/Reports.py +961 -0
  848. nuitka/reports/__init__.py +19 -0
  849. nuitka/specs/BuiltinBytesOperationSpecs.py +180 -0
  850. nuitka/specs/BuiltinDictOperationSpecs.py +82 -0
  851. nuitka/specs/BuiltinListOperationSpecs.py +80 -0
  852. nuitka/specs/BuiltinParameterSpecs.py +831 -0
  853. nuitka/specs/BuiltinStrOperationSpecs.py +181 -0
  854. nuitka/specs/BuiltinTypeOperationSpecs.py +34 -0
  855. nuitka/specs/BuiltinUnicodeOperationSpecs.py +123 -0
  856. nuitka/specs/HardImportSpecs.py +236 -0
  857. nuitka/specs/ParameterSpecs.py +630 -0
  858. nuitka/specs/__init__.py +19 -0
  859. nuitka/tools/Basics.py +55 -0
  860. nuitka/tools/__init__.py +19 -0
  861. nuitka/tools/commercial/__init__.py +21 -0
  862. nuitka/tools/data_composer/DataComposer.py +593 -0
  863. nuitka/tools/data_composer/__init__.py +19 -0
  864. nuitka/tools/data_composer/__main__.py +41 -0
  865. nuitka/tools/environments/CreateEnvironment.py +69 -0
  866. nuitka/tools/environments/Virtualenv.py +158 -0
  867. nuitka/tools/environments/__init__.py +19 -0
  868. nuitka/tools/general/__init__.py +19 -0
  869. nuitka/tools/general/dll_report/__init__.py +19 -0
  870. nuitka/tools/general/dll_report/__main__.py +83 -0
  871. nuitka/tools/general/find_module/FindModuleCode.py +127 -0
  872. nuitka/tools/general/find_module/__init__.py +19 -0
  873. nuitka/tools/general/generate_header/GenerateHeader.py +73 -0
  874. nuitka/tools/general/generate_header/__init__.py +19 -0
  875. nuitka/tools/onefile_compressor/OnefileCompressor.py +390 -0
  876. nuitka/tools/onefile_compressor/__init__.py +19 -0
  877. nuitka/tools/onefile_compressor/__main__.py +41 -0
  878. nuitka/tools/podman/Podman.py +55 -0
  879. nuitka/tools/podman/__init__.py +19 -0
  880. nuitka/tools/podman/__main__.py +425 -0
  881. nuitka/tools/profiler/__init__.py +19 -0
  882. nuitka/tools/profiler/__main__.py +93 -0
  883. nuitka/tools/scanning/DisplayDistributions.py +39 -0
  884. nuitka/tools/scanning/DisplayPackageDLLs.py +151 -0
  885. nuitka/tools/scanning/DisplayPackageData.py +73 -0
  886. nuitka/tools/scanning/__init__.py +19 -0
  887. nuitka/tools/specialize/CTypeDescriptions.py +1928 -0
  888. nuitka/tools/specialize/Common.py +380 -0
  889. nuitka/tools/specialize/SpecializeC.py +1483 -0
  890. nuitka/tools/specialize/SpecializePython.py +1151 -0
  891. nuitka/tools/specialize/__init__.py +19 -0
  892. nuitka/tools/testing/Common.py +2007 -0
  893. nuitka/tools/testing/Constructs.py +53 -0
  894. nuitka/tools/testing/DocTests.py +156 -0
  895. nuitka/tools/testing/OutputComparison.py +313 -0
  896. nuitka/tools/testing/Pythons.py +34 -0
  897. nuitka/tools/testing/RuntimeTracing.py +260 -0
  898. nuitka/tools/testing/SearchModes.py +208 -0
  899. nuitka/tools/testing/Valgrind.py +103 -0
  900. nuitka/tools/testing/__init__.py +19 -0
  901. nuitka/tools/testing/check_reference_counts/__init__.py +19 -0
  902. nuitka/tools/testing/check_reference_counts/__main__.py +107 -0
  903. nuitka/tools/testing/compare_with_cpython/__init__.py +19 -0
  904. nuitka/tools/testing/compare_with_cpython/__main__.py +942 -0
  905. nuitka/tools/testing/find_sxs_modules/__init__.py +19 -0
  906. nuitka/tools/testing/find_sxs_modules/__main__.py +73 -0
  907. nuitka/tools/testing/measure_construct_performance/__init__.py +19 -0
  908. nuitka/tools/testing/measure_construct_performance/__main__.py +288 -0
  909. nuitka/tools/testing/run_nuitka_tests/__init__.py +19 -0
  910. nuitka/tools/testing/run_nuitka_tests/__main__.py +1091 -0
  911. nuitka/tools/watch/AutoStage.py +145 -0
  912. nuitka/tools/watch/Common.py +55 -0
  913. nuitka/tools/watch/Conda.py +125 -0
  914. nuitka/tools/watch/GitHub.py +113 -0
  915. nuitka/tools/watch/Pacman.py +73 -0
  916. nuitka/tools/watch/Pipenv.py +145 -0
  917. nuitka/tools/watch/__init__.py +19 -0
  918. nuitka/tools/watch/__main__.py +615 -0
  919. nuitka/tree/Building.py +1459 -0
  920. nuitka/tree/ComplexCallHelperFunctions.py +2150 -0
  921. nuitka/tree/Extractions.py +48 -0
  922. nuitka/tree/FutureSpecState.py +71 -0
  923. nuitka/tree/InternalModule.py +96 -0
  924. nuitka/tree/Operations.py +45 -0
  925. nuitka/tree/ReformulationAssertStatements.py +97 -0
  926. nuitka/tree/ReformulationAssignmentStatements.py +1260 -0
  927. nuitka/tree/ReformulationBooleanExpressions.py +97 -0
  928. nuitka/tree/ReformulationCallExpressions.py +314 -0
  929. nuitka/tree/ReformulationClasses.py +407 -0
  930. nuitka/tree/ReformulationClasses3.py +1149 -0
  931. nuitka/tree/ReformulationComparisonExpressions.py +174 -0
  932. nuitka/tree/ReformulationContractionExpressions.py +676 -0
  933. nuitka/tree/ReformulationDictionaryCreation.py +304 -0
  934. nuitka/tree/ReformulationExecStatements.py +386 -0
  935. nuitka/tree/ReformulationForLoopStatements.py +215 -0
  936. nuitka/tree/ReformulationFunctionStatements.py +931 -0
  937. nuitka/tree/ReformulationImportStatements.py +333 -0
  938. nuitka/tree/ReformulationLambdaExpressions.py +185 -0
  939. nuitka/tree/ReformulationMatchStatements.py +797 -0
  940. nuitka/tree/ReformulationMultidist.py +80 -0
  941. nuitka/tree/ReformulationNamespacePackages.py +239 -0
  942. nuitka/tree/ReformulationPrintStatements.py +127 -0
  943. nuitka/tree/ReformulationSequenceCreation.py +438 -0
  944. nuitka/tree/ReformulationSubscriptExpressions.py +123 -0
  945. nuitka/tree/ReformulationTryExceptStatements.py +418 -0
  946. nuitka/tree/ReformulationTryFinallyStatements.py +239 -0
  947. nuitka/tree/ReformulationWhileLoopStatements.py +160 -0
  948. nuitka/tree/ReformulationWithStatements.py +382 -0
  949. nuitka/tree/ReformulationYieldExpressions.py +133 -0
  950. nuitka/tree/SourceHandling.py +476 -0
  951. nuitka/tree/SyntaxErrors.py +143 -0
  952. nuitka/tree/TreeHelpers.py +720 -0
  953. nuitka/tree/VariableClosure.py +483 -0
  954. nuitka/tree/__init__.py +19 -0
  955. nuitka/utils/AppDirs.py +104 -0
  956. nuitka/utils/CStrings.py +208 -0
  957. nuitka/utils/CommandLineOptions.py +207 -0
  958. nuitka/utils/Distributions.py +728 -0
  959. nuitka/utils/Download.py +217 -0
  960. nuitka/utils/Execution.py +517 -0
  961. nuitka/utils/FileOperations.py +1587 -0
  962. nuitka/utils/Hashing.py +137 -0
  963. nuitka/utils/Images.py +79 -0
  964. nuitka/utils/Importing.py +335 -0
  965. nuitka/utils/InlineCopies.py +52 -0
  966. nuitka/utils/InstalledPythons.py +254 -0
  967. nuitka/utils/InstanceCounters.py +86 -0
  968. nuitka/utils/Jinja2.py +158 -0
  969. nuitka/utils/Json.py +40 -0
  970. nuitka/utils/MacOSApp.py +134 -0
  971. nuitka/utils/MemoryUsage.py +165 -0
  972. nuitka/utils/ModuleNames.py +317 -0
  973. nuitka/utils/PackageResources.py +44 -0
  974. nuitka/utils/ReExecute.py +152 -0
  975. nuitka/utils/Rest.py +60 -0
  976. nuitka/utils/SharedLibraries.py +1014 -0
  977. nuitka/utils/Shebang.py +113 -0
  978. nuitka/utils/Signing.py +144 -0
  979. nuitka/utils/SlotMetaClasses.py +57 -0
  980. nuitka/utils/StaticLibraries.py +260 -0
  981. nuitka/utils/ThreadedExecutor.py +87 -0
  982. nuitka/utils/Timing.py +102 -0
  983. nuitka/utils/Utils.py +483 -0
  984. nuitka/utils/WindowsFileUsage.py +337 -0
  985. nuitka/utils/WindowsResources.py +652 -0
  986. nuitka/utils/Yaml.py +247 -0
  987. nuitka/utils/__init__.py +19 -0
  988. nuitka_winsvc-2.7.7.data/scripts/nuitka-run.cmd +24 -0
  989. nuitka_winsvc-2.7.7.data/scripts/nuitka.cmd +30 -0
  990. nuitka_winsvc-2.7.7.dist-info/METADATA +115 -0
  991. nuitka_winsvc-2.7.7.dist-info/RECORD +995 -0
  992. nuitka_winsvc-2.7.7.dist-info/WHEEL +5 -0
  993. nuitka_winsvc-2.7.7.dist-info/entry_points.txt +7 -0
  994. nuitka_winsvc-2.7.7.dist-info/licenses/LICENSE.txt +202 -0
  995. nuitka_winsvc-2.7.7.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1475 @@
1
+ # MIT License
2
+ #
3
+ # Copyright The SCons Foundation
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included
14
+ # in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
17
+ # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
18
+ # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ """SCons Actions.
25
+
26
+ Information about executing any sort of action that
27
+ can build one or more target Nodes (typically files) from one or more
28
+ source Nodes (also typically files) given a specific Environment.
29
+
30
+ The base class here is ActionBase. The base class supplies just a few
31
+ utility methods and some generic methods for displaying information
32
+ about an Action in response to the various commands that control printing.
33
+
34
+ A second-level base class is _ActionAction. This extends ActionBase
35
+ by providing the methods that can be used to show and perform an
36
+ action. True Action objects will subclass _ActionAction; Action
37
+ factory class objects will subclass ActionBase.
38
+
39
+ The heavy lifting is handled by subclasses for the different types of
40
+ actions we might execute:
41
+
42
+ CommandAction
43
+ CommandGeneratorAction
44
+ FunctionAction
45
+ ListAction
46
+
47
+ The subclasses supply the following public interface methods used by
48
+ other modules:
49
+
50
+ __call__()
51
+ THE public interface, "calling" an Action object executes the
52
+ command or Python function. This also takes care of printing
53
+ a pre-substitution command for debugging purposes.
54
+
55
+ get_contents()
56
+ Fetches the "contents" of an Action for signature calculation
57
+ plus the varlist. This is what gets checksummed to decide
58
+ if a target needs to be rebuilt because its action changed.
59
+
60
+ genstring()
61
+ Returns a string representation of the Action *without*
62
+ command substitution, but allows a CommandGeneratorAction to
63
+ generate the right action based on the specified target,
64
+ source and env. This is used by the Signature subsystem
65
+ (through the Executor) to obtain an (imprecise) representation
66
+ of the Action operation for informative purposes.
67
+
68
+
69
+ Subclasses also supply the following methods for internal use within
70
+ this module:
71
+
72
+ __str__()
73
+ Returns a string approximation of the Action; no variable
74
+ substitution is performed.
75
+
76
+ execute()
77
+ The internal method that really, truly, actually handles the
78
+ execution of a command or Python function. This is used so
79
+ that the __call__() methods can take care of displaying any
80
+ pre-substitution representations, and *then* execute an action
81
+ without worrying about the specific Actions involved.
82
+
83
+ get_presig()
84
+ Fetches the "contents" of a subclass for signature calculation.
85
+ The varlist is added to this to produce the Action's contents.
86
+ TODO(?): Change this to always return bytes and not str?
87
+
88
+ strfunction()
89
+ Returns a substituted string representation of the Action.
90
+ This is used by the _ActionAction.show() command to display the
91
+ command/function that will be executed to generate the target(s).
92
+
93
+ There is a related independent ActionCaller class that looks like a
94
+ regular Action, and which serves as a wrapper for arbitrary functions
95
+ that we want to let the user specify the arguments to now, but actually
96
+ execute later (when an out-of-date check determines that it's needed to
97
+ be executed, for example). Objects of this class are returned by an
98
+ ActionFactory class that provides a __call__() method as a convenient
99
+ way for wrapping up the functions.
100
+
101
+ """
102
+
103
+ import os
104
+ import pickle
105
+ import re
106
+ import sys
107
+ import subprocess
108
+ from subprocess import DEVNULL
109
+ import inspect
110
+ from collections import OrderedDict
111
+
112
+ import SCons.Debug
113
+ from SCons.Debug import logInstanceCreation
114
+ import SCons.Errors
115
+ import SCons.Util
116
+ import SCons.Subst
117
+
118
+ # we use these a lot, so try to optimize them
119
+ from SCons.Util import is_String, is_List
120
+
121
+ class _null:
122
+ pass
123
+
124
+ print_actions = True
125
+ execute_actions = True
126
+ print_actions_presub = False
127
+
128
+ # Use pickle protocol 1 when pickling functions for signature
129
+ # otherwise python3 and python2 will yield different pickles
130
+ # for the same object.
131
+ # This is due to default being 1 for python 2.7, and 3 for 3.x
132
+ # TODO: We can roll this forward to 2 (if it has value), but not
133
+ # before a deprecation cycle as the sconsigns will change
134
+ ACTION_SIGNATURE_PICKLE_PROTOCOL = 1
135
+
136
+
137
+ def rfile(n):
138
+ try:
139
+ return n.rfile()
140
+ except AttributeError:
141
+ return n
142
+
143
+
144
+ def default_exitstatfunc(s):
145
+ return s
146
+
147
+ strip_quotes = re.compile(r'^[\'"](.*)[\'"]$')
148
+
149
+
150
+ def _callable_contents(obj):
151
+ """Return the signature contents of a callable Python object.
152
+ """
153
+ try:
154
+ # Test if obj is a method.
155
+ return _function_contents(obj.__func__)
156
+
157
+ except AttributeError:
158
+ try:
159
+ # Test if obj is a callable object.
160
+ return _function_contents(obj.__call__.__func__)
161
+
162
+ except AttributeError:
163
+ try:
164
+ # Test if obj is a code object.
165
+ return _code_contents(obj)
166
+
167
+ except AttributeError:
168
+ # Test if obj is a function object.
169
+ return _function_contents(obj)
170
+
171
+
172
+ def _object_contents(obj):
173
+ """Return the signature contents of any Python object.
174
+
175
+ We have to handle the case where object contains a code object
176
+ since it can be pickled directly.
177
+ """
178
+ try:
179
+ # Test if obj is a method.
180
+ return _function_contents(obj.__func__)
181
+
182
+ except AttributeError:
183
+ try:
184
+ # Test if obj is a callable object.
185
+ return _function_contents(obj.__call__.__func__)
186
+
187
+ except AttributeError:
188
+ try:
189
+ # Test if obj is a code object.
190
+ return _code_contents(obj)
191
+
192
+ except AttributeError:
193
+ try:
194
+ # Test if obj is a function object.
195
+ return _function_contents(obj)
196
+
197
+ except AttributeError as ae:
198
+ # Should be a pickle-able Python object.
199
+ try:
200
+ return _object_instance_content(obj)
201
+ # pickling an Action instance or object doesn't yield a stable
202
+ # content as instance property may be dumped in different orders
203
+ # return pickle.dumps(obj, ACTION_SIGNATURE_PICKLE_PROTOCOL)
204
+ except (pickle.PicklingError, TypeError, AttributeError) as ex:
205
+ # This is weird, but it seems that nested classes
206
+ # are unpickable. The Python docs say it should
207
+ # always be a PicklingError, but some Python
208
+ # versions seem to return TypeError. Just do
209
+ # the best we can.
210
+ return bytearray(repr(obj), 'utf-8')
211
+
212
+
213
+ def _code_contents(code, docstring=None):
214
+ r"""Return the signature contents of a code object.
215
+
216
+ By providing direct access to the code object of the
217
+ function, Python makes this extremely easy. Hooray!
218
+
219
+ Unfortunately, older versions of Python include line
220
+ number indications in the compiled byte code. Boo!
221
+ So we remove the line number byte codes to prevent
222
+ recompilations from moving a Python function.
223
+
224
+ See:
225
+ - https://docs.python.org/2/library/inspect.html
226
+ - http://python-reference.readthedocs.io/en/latest/docs/code/index.html
227
+
228
+ For info on what each co\_ variable provides
229
+
230
+ The signature is as follows (should be byte/chars):
231
+ co_argcount, len(co_varnames), len(co_cellvars), len(co_freevars),
232
+ ( comma separated signature for each object in co_consts ),
233
+ ( comma separated signature for each object in co_names ),
234
+ ( The bytecode with line number bytecodes removed from co_code )
235
+
236
+ co_argcount - Returns the number of positional arguments (including arguments with default values).
237
+ co_varnames - Returns a tuple containing the names of the local variables (starting with the argument names).
238
+ co_cellvars - Returns a tuple containing the names of local variables that are referenced by nested functions.
239
+ co_freevars - Returns a tuple containing the names of free variables. (?)
240
+ co_consts - Returns a tuple containing the literals used by the bytecode.
241
+ co_names - Returns a tuple containing the names used by the bytecode.
242
+ co_code - Returns a string representing the sequence of bytecode instructions.
243
+
244
+ """
245
+
246
+ # contents = []
247
+
248
+ # The code contents depends on the number of local variables
249
+ # but not their actual names.
250
+ contents = bytearray("{}, {}".format(code.co_argcount, len(code.co_varnames)), 'utf-8')
251
+
252
+ contents.extend(b", ")
253
+ contents.extend(bytearray(str(len(code.co_cellvars)), 'utf-8'))
254
+ contents.extend(b", ")
255
+ contents.extend(bytearray(str(len(code.co_freevars)), 'utf-8'))
256
+
257
+ # The code contents depends on any constants accessed by the
258
+ # function. Note that we have to call _object_contents on each
259
+ # constants because the code object of nested functions can
260
+ # show-up among the constants.
261
+ z = [_object_contents(cc) for cc in code.co_consts if cc != docstring]
262
+ contents.extend(b',(')
263
+ contents.extend(bytearray(',', 'utf-8').join(z))
264
+ contents.extend(b')')
265
+
266
+ # The code contents depends on the variable names used to
267
+ # accessed global variable, as changing the variable name changes
268
+ # the variable actually accessed and therefore changes the
269
+ # function result.
270
+ z= [bytearray(_object_contents(cc)) for cc in code.co_names]
271
+ contents.extend(b',(')
272
+ contents.extend(bytearray(',','utf-8').join(z))
273
+ contents.extend(b')')
274
+
275
+ # The code contents depends on its actual code!!!
276
+ contents.extend(b',(')
277
+ contents.extend(code.co_code)
278
+ contents.extend(b')')
279
+
280
+ return contents
281
+
282
+
283
+ def _function_contents(func):
284
+ """
285
+ The signature is as follows (should be byte/chars):
286
+ < _code_contents (see above) from func.__code__ >
287
+ ,( comma separated _object_contents for function argument defaults)
288
+ ,( comma separated _object_contents for any closure contents )
289
+
290
+
291
+ See also: https://docs.python.org/3/reference/datamodel.html
292
+ - func.__code__ - The code object representing the compiled function body.
293
+ - func.__defaults__ - A tuple containing default argument values for those arguments that have defaults, or None if no arguments have a default value
294
+ - func.__closure__ - None or a tuple of cells that contain bindings for the function's free variables.
295
+
296
+ :Returns:
297
+ Signature contents of a function. (in bytes)
298
+ """
299
+
300
+ contents = [_code_contents(func.__code__, func.__doc__)]
301
+
302
+ # The function contents depends on the value of defaults arguments
303
+ if func.__defaults__:
304
+
305
+ function_defaults_contents = [_object_contents(cc) for cc in func.__defaults__]
306
+
307
+ defaults = bytearray(b',(')
308
+ defaults.extend(bytearray(b',').join(function_defaults_contents))
309
+ defaults.extend(b')')
310
+
311
+ contents.append(defaults)
312
+ else:
313
+ contents.append(b',()')
314
+
315
+ # The function contents depends on the closure captured cell values.
316
+ closure = func.__closure__ or []
317
+
318
+ try:
319
+ closure_contents = [_object_contents(x.cell_contents) for x in closure]
320
+ except AttributeError:
321
+ closure_contents = []
322
+
323
+ contents.append(b',(')
324
+ contents.append(bytearray(b',').join(closure_contents))
325
+ contents.append(b')')
326
+
327
+ retval = bytearray(b'').join(contents)
328
+ return retval
329
+
330
+
331
+ def _object_instance_content(obj):
332
+ """
333
+ Returns consistant content for a action class or an instance thereof
334
+
335
+ :Parameters:
336
+ - `obj` Should be either and action class or an instance thereof
337
+
338
+ :Returns:
339
+ bytearray or bytes representing the obj suitable for generating a signature from.
340
+ """
341
+ retval = bytearray()
342
+
343
+ if obj is None:
344
+ return b'N.'
345
+
346
+ if isinstance(obj, SCons.Util.BaseStringTypes):
347
+ return SCons.Util.to_bytes(obj)
348
+
349
+ inst_class = obj.__class__
350
+ inst_class_name = bytearray(obj.__class__.__name__,'utf-8')
351
+ inst_class_module = bytearray(obj.__class__.__module__,'utf-8')
352
+ inst_class_hierarchy = bytearray(repr(inspect.getclasstree([obj.__class__,])),'utf-8')
353
+ # print("ICH:%s : %s"%(inst_class_hierarchy, repr(obj)))
354
+
355
+ properties = [(p, getattr(obj, p, "None")) for p in dir(obj) if not (p[:2] == '__' or inspect.ismethod(getattr(obj, p)) or inspect.isbuiltin(getattr(obj,p))) ]
356
+ properties.sort()
357
+ properties_str = ','.join(["%s=%s"%(p[0],p[1]) for p in properties])
358
+ properties_bytes = bytearray(properties_str,'utf-8')
359
+
360
+ methods = [p for p in dir(obj) if inspect.ismethod(getattr(obj, p))]
361
+ methods.sort()
362
+
363
+ method_contents = []
364
+ for m in methods:
365
+ # print("Method:%s"%m)
366
+ v = _function_contents(getattr(obj, m))
367
+ # print("[%s->]V:%s [%s]"%(m,v,type(v)))
368
+ method_contents.append(v)
369
+
370
+ retval = bytearray(b'{')
371
+ retval.extend(inst_class_name)
372
+ retval.extend(b":")
373
+ retval.extend(inst_class_module)
374
+ retval.extend(b'}[[')
375
+ retval.extend(inst_class_hierarchy)
376
+ retval.extend(b']]{{')
377
+ retval.extend(bytearray(b",").join(method_contents))
378
+ retval.extend(b"}}{{{")
379
+ retval.extend(properties_bytes)
380
+ retval.extend(b'}}}')
381
+ return retval
382
+
383
+ # print("class :%s"%inst_class)
384
+ # print("class_name :%s"%inst_class_name)
385
+ # print("class_module :%s"%inst_class_module)
386
+ # print("Class hier :\n%s"%pp.pformat(inst_class_hierarchy))
387
+ # print("Inst Properties:\n%s"%pp.pformat(properties))
388
+ # print("Inst Methods :\n%s"%pp.pformat(methods))
389
+
390
+ def _actionAppend(act1, act2):
391
+ # This function knows how to slap two actions together.
392
+ # Mainly, it handles ListActions by concatenating into
393
+ # a single ListAction.
394
+ a1 = Action(act1)
395
+ a2 = Action(act2)
396
+ if a1 is None:
397
+ return a2
398
+ if a2 is None:
399
+ return a1
400
+ if isinstance(a1, ListAction):
401
+ if isinstance(a2, ListAction):
402
+ return ListAction(a1.list + a2.list)
403
+ else:
404
+ return ListAction(a1.list + [ a2 ])
405
+ else:
406
+ if isinstance(a2, ListAction):
407
+ return ListAction([ a1 ] + a2.list)
408
+ else:
409
+ return ListAction([ a1, a2 ])
410
+
411
+
412
+ def _do_create_keywords(args, kw):
413
+ """This converts any arguments after the action argument into
414
+ their equivalent keywords and adds them to the kw argument.
415
+ """
416
+ v = kw.get('varlist', ())
417
+ # prevent varlist="FOO" from being interpreted as ['F', 'O', 'O']
418
+ if is_String(v): v = (v,)
419
+ kw['varlist'] = tuple(v)
420
+ if args:
421
+ # turn positional args into equivalent keywords
422
+ cmdstrfunc = args[0]
423
+ if cmdstrfunc is None or is_String(cmdstrfunc):
424
+ kw['cmdstr'] = cmdstrfunc
425
+ elif callable(cmdstrfunc):
426
+ kw['strfunction'] = cmdstrfunc
427
+ else:
428
+ raise SCons.Errors.UserError(
429
+ 'Invalid command display variable type. '
430
+ 'You must either pass a string or a callback which '
431
+ 'accepts (target, source, env) as parameters.')
432
+ if len(args) > 1:
433
+ kw['varlist'] = tuple(SCons.Util.flatten(args[1:])) + kw['varlist']
434
+ if kw.get('strfunction', _null) is not _null \
435
+ and kw.get('cmdstr', _null) is not _null:
436
+ raise SCons.Errors.UserError(
437
+ 'Cannot have both strfunction and cmdstr args to Action()')
438
+
439
+
440
+ def _do_create_action(act, kw):
441
+ """This is the actual "implementation" for the
442
+ Action factory method, below. This handles the
443
+ fact that passing lists to Action() itself has
444
+ different semantics than passing lists as elements
445
+ of lists.
446
+
447
+ The former will create a ListAction, the latter
448
+ will create a CommandAction by converting the inner
449
+ list elements to strings."""
450
+
451
+ if isinstance(act, ActionBase):
452
+ return act
453
+
454
+ if is_String(act):
455
+ var=SCons.Util.get_environment_var(act)
456
+ if var:
457
+ # This looks like a string that is purely an Environment
458
+ # variable reference, like "$FOO" or "${FOO}". We do
459
+ # something special here...we lazily evaluate the contents
460
+ # of that Environment variable, so a user could put something
461
+ # like a function or a CommandGenerator in that variable
462
+ # instead of a string.
463
+ return LazyAction(var, kw)
464
+ commands = str(act).split('\n')
465
+ if len(commands) == 1:
466
+ return CommandAction(commands[0], **kw)
467
+ # The list of string commands may include a LazyAction, so we
468
+ # reprocess them via _do_create_list_action.
469
+ return _do_create_list_action(commands, kw)
470
+
471
+ if is_List(act):
472
+ return CommandAction(act, **kw)
473
+
474
+ if callable(act):
475
+ try:
476
+ gen = kw['generator']
477
+ del kw['generator']
478
+ except KeyError:
479
+ gen = 0
480
+ if gen:
481
+ action_type = CommandGeneratorAction
482
+ else:
483
+ action_type = FunctionAction
484
+ return action_type(act, kw)
485
+
486
+ # Catch a common error case with a nice message:
487
+ if isinstance(act, int) or isinstance(act, float):
488
+ raise TypeError("Don't know how to create an Action from a number (%s)"%act)
489
+ # Else fail silently (???)
490
+ return None
491
+
492
+
493
+ def _do_create_list_action(act, kw):
494
+ """A factory for list actions. Convert the input list into Actions
495
+ and then wrap them in a ListAction."""
496
+ acts = []
497
+ for a in act:
498
+ aa = _do_create_action(a, kw)
499
+ if aa is not None: acts.append(aa)
500
+ if not acts:
501
+ return ListAction([])
502
+ elif len(acts) == 1:
503
+ return acts[0]
504
+ else:
505
+ return ListAction(acts)
506
+
507
+
508
+ def Action(act, *args, **kw):
509
+ """A factory for action objects."""
510
+ # Really simple: the _do_create_* routines do the heavy lifting.
511
+ _do_create_keywords(args, kw)
512
+ if is_List(act):
513
+ return _do_create_list_action(act, kw)
514
+ return _do_create_action(act, kw)
515
+
516
+
517
+ class ActionBase:
518
+ """Base class for all types of action objects that can be held by
519
+ other objects (Builders, Executors, etc.) This provides the
520
+ common methods for manipulating and combining those actions."""
521
+
522
+ def __eq__(self, other):
523
+ return self.__dict__ == other
524
+
525
+ def no_batch_key(self, env, target, source):
526
+ return None
527
+
528
+ batch_key = no_batch_key
529
+
530
+ def genstring(self, target, source, env):
531
+ return str(self)
532
+
533
+ def get_contents(self, target, source, env):
534
+ result = self.get_presig(target, source, env)
535
+
536
+ if not isinstance(result,(bytes, bytearray)):
537
+ result = bytearray(result, 'utf-8')
538
+ else:
539
+ # Make a copy and put in bytearray, without this the contents returned by get_presig
540
+ # can be changed by the logic below, appending with each call and causing very
541
+ # hard to track down issues...
542
+ result = bytearray(result)
543
+
544
+ # At this point everything should be a bytearray
545
+
546
+ # This should never happen, as the Action() factory should wrap
547
+ # the varlist, but just in case an action is created directly,
548
+ # we duplicate this check here.
549
+ vl = self.get_varlist(target, source, env)
550
+ if is_String(vl): vl = (vl,)
551
+ for v in vl:
552
+ # do the subst this way to ignore $(...$) parts:
553
+ if isinstance(result, bytearray):
554
+ result.extend(SCons.Util.to_bytes(env.subst_target_source('${'+v+'}', SCons.Subst.SUBST_SIG, target, source)))
555
+ else:
556
+ raise Exception("WE SHOULD NEVER GET HERE result should be bytearray not:%s"%type(result))
557
+ # result.append(SCons.Util.to_bytes(env.subst_target_source('${'+v+'}', SCons.Subst.SUBST_SIG, target, source)))
558
+
559
+
560
+ if isinstance(result, (bytes,bytearray)):
561
+ return result
562
+ else:
563
+ raise Exception("WE SHOULD NEVER GET HERE - #2 result should be bytearray not:%s" % type(result))
564
+ # return b''.join(result)
565
+
566
+ def __add__(self, other):
567
+ return _actionAppend(self, other)
568
+
569
+ def __radd__(self, other):
570
+ return _actionAppend(other, self)
571
+
572
+ def presub_lines(self, env):
573
+ # CommandGeneratorAction needs a real environment
574
+ # in order to return the proper string here, since
575
+ # it may call LazyAction, which looks up a key
576
+ # in that env. So we temporarily remember the env here,
577
+ # and CommandGeneratorAction will use this env
578
+ # when it calls its _generate method.
579
+ self.presub_env = env
580
+ lines = str(self).split('\n')
581
+ self.presub_env = None # don't need this any more
582
+ return lines
583
+
584
+ def get_varlist(self, target, source, env, executor=None):
585
+ return self.varlist
586
+
587
+ def get_targets(self, env, executor):
588
+ """
589
+ Returns the type of targets ($TARGETS, $CHANGED_TARGETS) used
590
+ by this action.
591
+ """
592
+ return self.targets
593
+
594
+
595
+ class _ActionAction(ActionBase):
596
+ """Base class for actions that create output objects."""
597
+ def __init__(self, cmdstr=_null, strfunction=_null, varlist=(),
598
+ presub=_null, chdir=None, exitstatfunc=None,
599
+ batch_key=None, targets='$TARGETS',
600
+ **kw):
601
+ self.cmdstr = cmdstr
602
+ if strfunction is not _null:
603
+ if strfunction is None:
604
+ self.cmdstr = None
605
+ else:
606
+ self.strfunction = strfunction
607
+ self.varlist = varlist
608
+ self.presub = presub
609
+ self.chdir = chdir
610
+ if not exitstatfunc:
611
+ exitstatfunc = default_exitstatfunc
612
+ self.exitstatfunc = exitstatfunc
613
+
614
+ self.targets = targets
615
+
616
+ if batch_key:
617
+ if not callable(batch_key):
618
+ # They have set batch_key, but not to their own
619
+ # callable. The default behavior here will batch
620
+ # *all* targets+sources using this action, separated
621
+ # for each construction environment.
622
+ def default_batch_key(self, env, target, source):
623
+ return (id(self), id(env))
624
+ batch_key = default_batch_key
625
+ SCons.Util.AddMethod(self, batch_key, 'batch_key')
626
+
627
+ def print_cmd_line(self, s, target, source, env):
628
+ """
629
+ In python 3, and in some of our tests, sys.stdout is
630
+ a String io object, and it takes unicode strings only
631
+ This code assumes s is a regular string.
632
+ """
633
+ sys.stdout.write(s + "\n")
634
+
635
+ def __call__(self, target, source, env,
636
+ exitstatfunc=_null,
637
+ presub=_null,
638
+ show=_null,
639
+ execute=_null,
640
+ chdir=_null,
641
+ executor=None):
642
+ if not is_List(target):
643
+ target = [target]
644
+ if not is_List(source):
645
+ source = [source]
646
+
647
+ if presub is _null:
648
+ presub = self.presub
649
+ if presub is _null:
650
+ presub = print_actions_presub
651
+ if exitstatfunc is _null:
652
+ exitstatfunc = self.exitstatfunc
653
+ if show is _null:
654
+ show = print_actions
655
+ if execute is _null:
656
+ execute = execute_actions
657
+ if chdir is _null:
658
+ chdir = self.chdir
659
+ save_cwd = None
660
+ if chdir:
661
+ save_cwd = os.getcwd()
662
+ try:
663
+ chdir = str(chdir.get_abspath())
664
+ except AttributeError:
665
+ if not is_String(chdir):
666
+ if executor:
667
+ chdir = str(executor.batches[0].targets[0].dir)
668
+ else:
669
+ chdir = str(target[0].dir)
670
+ if presub:
671
+ if executor:
672
+ target = executor.get_all_targets()
673
+ source = executor.get_all_sources()
674
+ t = ' and '.join(map(str, target))
675
+ l = '\n '.join(self.presub_lines(env))
676
+ out = "Building %s with action:\n %s\n" % (t, l)
677
+ sys.stdout.write(out)
678
+ cmd = None
679
+ if show and self.strfunction:
680
+ if executor:
681
+ target = executor.get_all_targets()
682
+ source = executor.get_all_sources()
683
+ try:
684
+ cmd = self.strfunction(target, source, env, executor)
685
+ except TypeError:
686
+ cmd = self.strfunction(target, source, env)
687
+ if cmd:
688
+ if chdir:
689
+ cmd = ('os.chdir(%s)\n' % repr(chdir)) + cmd
690
+ try:
691
+ get = env.get
692
+ except AttributeError:
693
+ print_func = self.print_cmd_line
694
+ else:
695
+ print_func = get('PRINT_CMD_LINE_FUNC')
696
+ if not print_func:
697
+ print_func = self.print_cmd_line
698
+ print_func(cmd, target, source, env)
699
+ stat = 0
700
+ if execute:
701
+ if chdir:
702
+ os.chdir(chdir)
703
+ try:
704
+ stat = self.execute(target, source, env, executor=executor)
705
+ if isinstance(stat, SCons.Errors.BuildError):
706
+ s = exitstatfunc(stat.status)
707
+ if s:
708
+ stat.status = s
709
+ else:
710
+ stat = s
711
+ else:
712
+ stat = exitstatfunc(stat)
713
+ finally:
714
+ if save_cwd:
715
+ os.chdir(save_cwd)
716
+ if cmd and save_cwd:
717
+ print_func('os.chdir(%s)' % repr(save_cwd), target, source, env)
718
+
719
+ return stat
720
+
721
+
722
+ def _string_from_cmd_list(cmd_list):
723
+ """Takes a list of command line arguments and returns a pretty
724
+ representation for printing."""
725
+ cl = []
726
+ for arg in map(str, cmd_list):
727
+ if ' ' in arg or '\t' in arg:
728
+ arg = '"' + arg + '"'
729
+ cl.append(arg)
730
+ return ' '.join(cl)
731
+
732
+ default_ENV = None
733
+
734
+
735
+ def get_default_ENV(env):
736
+ """
737
+ A fiddlin' little function that has an 'import SCons.Environment' which
738
+ can't be moved to the top level without creating an import loop. Since
739
+ this import creates a local variable named 'SCons', it blocks access to
740
+ the global variable, so we move it here to prevent complaints about local
741
+ variables being used uninitialized.
742
+ """
743
+ global default_ENV
744
+ try:
745
+ return env['ENV']
746
+ except KeyError:
747
+ if not default_ENV:
748
+ import SCons.Environment
749
+ # This is a hideously expensive way to get a default shell
750
+ # environment. What it really should do is run the platform
751
+ # setup to get the default ENV. Fortunately, it's incredibly
752
+ # rare for an Environment not to have a shell environment, so
753
+ # we're not going to worry about it overmuch.
754
+ default_ENV = SCons.Environment.Environment()['ENV']
755
+ return default_ENV
756
+
757
+
758
+ def _subproc(scons_env, cmd, error='ignore', **kw):
759
+ """Wrapper for subprocess which pulls from construction env.
760
+
761
+ Use for calls to subprocess which need to interpolate values from
762
+ an SCons construction environment into the environment passed to
763
+ subprocess. Adds an an error-handling argument. Adds ability
764
+ to specify std{in,out,err} with "'devnull'" tag.
765
+ """
766
+ # TODO: just uses subprocess.DEVNULL now, we can drop the "devnull"
767
+ # string now - it is a holdover from Py2, which didn't have DEVNULL.
768
+ for stream in 'stdin', 'stdout', 'stderr':
769
+ io = kw.get(stream)
770
+ if is_String(io) and io == 'devnull':
771
+ kw[stream] = DEVNULL
772
+
773
+ # Figure out what shell environment to use
774
+ ENV = kw.get('env', None)
775
+ if ENV is None: ENV = get_default_ENV(scons_env)
776
+
777
+ # Ensure that the ENV values are all strings:
778
+ new_env = {}
779
+ for key, value in ENV.items():
780
+ if is_List(value):
781
+ # If the value is a list, then we assume it is a path list,
782
+ # because that's a pretty common list-like value to stick
783
+ # in an environment variable:
784
+ value = SCons.Util.flatten_sequence(value)
785
+ new_env[key] = os.pathsep.join(map(str, value))
786
+ else:
787
+ # It's either a string or something else. If it's a string,
788
+ # we still want to call str() because it might be a *Unicode*
789
+ # string, which makes subprocess.Popen() gag. If it isn't a
790
+ # string or a list, then we just coerce it to a string, which
791
+ # is the proper way to handle Dir and File instances and will
792
+ # produce something reasonable for just about everything else:
793
+ new_env[key] = str(value)
794
+ kw['env'] = new_env
795
+
796
+ try:
797
+ pobj = subprocess.Popen(cmd, **kw)
798
+ except EnvironmentError as e:
799
+ if error == 'raise': raise
800
+ # return a dummy Popen instance that only returns error
801
+ class dummyPopen:
802
+ def __init__(self, e): self.exception = e
803
+ def communicate(self, input=None): return ('', '')
804
+ def wait(self): return -self.exception.errno
805
+ stdin = None
806
+ class f:
807
+ def read(self): return ''
808
+ def readline(self): return ''
809
+ def __iter__(self): return iter(())
810
+ stdout = stderr = f()
811
+ pobj = dummyPopen(e)
812
+ finally:
813
+ # clean up open file handles stored in parent's kw
814
+ for k, v in kw.items():
815
+ if inspect.ismethod(getattr(v, 'close', None)):
816
+ v.close()
817
+
818
+ return pobj
819
+
820
+
821
+ class CommandAction(_ActionAction):
822
+ """Class for command-execution actions."""
823
+ def __init__(self, cmd, **kw):
824
+ # Cmd can actually be a list or a single item; if it's a
825
+ # single item it should be the command string to execute; if a
826
+ # list then it should be the words of the command string to
827
+ # execute. Only a single command should be executed by this
828
+ # object; lists of commands should be handled by embedding
829
+ # these objects in a ListAction object (which the Action()
830
+ # factory above does). cmd will be passed to
831
+ # Environment.subst_list() for substituting environment
832
+ # variables.
833
+ if SCons.Debug.track_instances: logInstanceCreation(self, 'Action.CommandAction')
834
+
835
+ _ActionAction.__init__(self, **kw)
836
+ if is_List(cmd):
837
+ if [c for c in cmd if is_List(c)]:
838
+ raise TypeError("CommandAction should be given only "
839
+ "a single command")
840
+ self.cmd_list = cmd
841
+
842
+ def __str__(self):
843
+ if is_List(self.cmd_list):
844
+ return ' '.join(map(str, self.cmd_list))
845
+ return str(self.cmd_list)
846
+
847
+ def process(self, target, source, env, executor=None):
848
+ if executor:
849
+ result = env.subst_list(self.cmd_list, 0, executor=executor)
850
+ else:
851
+ result = env.subst_list(self.cmd_list, 0, target, source)
852
+ silent = None
853
+ ignore = None
854
+ while True:
855
+ try: c = result[0][0][0]
856
+ except IndexError: c = None
857
+ if c == '@': silent = 1
858
+ elif c == '-': ignore = 1
859
+ else: break
860
+ result[0][0] = result[0][0][1:]
861
+ try:
862
+ if not result[0][0]:
863
+ result[0] = result[0][1:]
864
+ except IndexError:
865
+ pass
866
+ return result, ignore, silent
867
+
868
+ def strfunction(self, target, source, env, executor=None):
869
+ if self.cmdstr is None:
870
+ return None
871
+ if self.cmdstr is not _null:
872
+ from SCons.Subst import SUBST_RAW
873
+ if executor:
874
+ c = env.subst(self.cmdstr, SUBST_RAW, executor=executor)
875
+ else:
876
+ c = env.subst(self.cmdstr, SUBST_RAW, target, source)
877
+ if c:
878
+ return c
879
+ cmd_list, ignore, silent = self.process(target, source, env, executor)
880
+ if silent:
881
+ return ''
882
+ return _string_from_cmd_list(cmd_list[0])
883
+
884
+ def execute(self, target, source, env, executor=None):
885
+ """Execute a command action.
886
+
887
+ This will handle lists of commands as well as individual commands,
888
+ because construction variable substitution may turn a single
889
+ "command" into a list. This means that this class can actually
890
+ handle lists of commands, even though that's not how we use it
891
+ externally.
892
+ """
893
+ escape_list = SCons.Subst.escape_list
894
+ flatten_sequence = SCons.Util.flatten_sequence
895
+
896
+ try:
897
+ shell = env['SHELL']
898
+ except KeyError:
899
+ raise SCons.Errors.UserError('Missing SHELL construction variable.')
900
+
901
+ try:
902
+ spawn = env['SPAWN']
903
+ except KeyError:
904
+ raise SCons.Errors.UserError('Missing SPAWN construction variable.')
905
+ else:
906
+ if is_String(spawn):
907
+ spawn = env.subst(spawn, raw=1, conv=lambda x: x)
908
+
909
+ escape = env.get('ESCAPE', lambda x: x)
910
+
911
+ ENV = get_default_ENV(env)
912
+
913
+ # Ensure that the ENV values are all strings:
914
+ for key, value in ENV.items():
915
+ if not is_String(value):
916
+ if is_List(value):
917
+ # If the value is a list, then we assume it is a
918
+ # path list, because that's a pretty common list-like
919
+ # value to stick in an environment variable:
920
+ value = flatten_sequence(value)
921
+ ENV[key] = os.pathsep.join(map(str, value))
922
+ else:
923
+ # If it isn't a string or a list, then we just coerce
924
+ # it to a string, which is the proper way to handle
925
+ # Dir and File instances and will produce something
926
+ # reasonable for just about everything else:
927
+ ENV[key] = str(value)
928
+
929
+ if executor:
930
+ target = executor.get_all_targets()
931
+ source = executor.get_all_sources()
932
+ cmd_list, ignore, silent = self.process(target, list(map(rfile, source)), env, executor)
933
+
934
+ # Use len() to filter out any "command" that's zero-length.
935
+ for cmd_line in filter(len, cmd_list):
936
+ # Escape the command line for the interpreter we are using.
937
+ cmd_line = escape_list(cmd_line, escape)
938
+ result = spawn(shell, escape, cmd_line[0], cmd_line, ENV)
939
+ if not ignore and result:
940
+ msg = "Error %s" % result
941
+ return SCons.Errors.BuildError(errstr=msg,
942
+ status=result,
943
+ action=self,
944
+ command=cmd_line)
945
+ return 0
946
+
947
+ def get_presig(self, target, source, env, executor=None):
948
+ """Return the signature contents of this action's command line.
949
+
950
+ This strips $(-$) and everything in between the string,
951
+ since those parts don't affect signatures.
952
+ """
953
+ from SCons.Subst import SUBST_SIG
954
+ cmd = self.cmd_list
955
+ if is_List(cmd):
956
+ cmd = ' '.join(map(str, cmd))
957
+ else:
958
+ cmd = str(cmd)
959
+ if executor:
960
+ return env.subst_target_source(cmd, SUBST_SIG, executor=executor)
961
+ else:
962
+ return env.subst_target_source(cmd, SUBST_SIG, target, source)
963
+
964
+ def get_implicit_deps(self, target, source, env, executor=None):
965
+ """Return the implicit dependencies of this action's command line."""
966
+ icd = env.get('IMPLICIT_COMMAND_DEPENDENCIES', True)
967
+ if is_String(icd) and icd[:1] == '$':
968
+ icd = env.subst(icd)
969
+
970
+ if not icd or str(icd).lower() in ('0', 'none', 'false', 'no', 'off'):
971
+ return []
972
+
973
+ try:
974
+ icd_int = int(icd)
975
+ except ValueError:
976
+ icd_int = None
977
+
978
+ if (icd_int and icd_int > 1) or str(icd).lower() == 'all':
979
+ # An integer value greater than 1 specifies the number of entries
980
+ # to scan. "all" means to scan all.
981
+ return self._get_implicit_deps_heavyweight(target, source, env, executor, icd_int)
982
+ else:
983
+ # Everything else (usually 1 or True) means that we want
984
+ # lightweight dependency scanning.
985
+ return self._get_implicit_deps_lightweight(target, source, env, executor)
986
+
987
+ def _get_implicit_deps_lightweight(self, target, source, env, executor):
988
+ """
989
+ Lightweight dependency scanning involves only scanning the first entry
990
+ in an action string, even if it contains &&.
991
+ """
992
+ from SCons.Subst import SUBST_SIG
993
+ if executor:
994
+ cmd_list = env.subst_list(self.cmd_list, SUBST_SIG, executor=executor)
995
+ else:
996
+ cmd_list = env.subst_list(self.cmd_list, SUBST_SIG, target, source)
997
+ res = []
998
+ for cmd_line in cmd_list:
999
+ if cmd_line:
1000
+ d = str(cmd_line[0])
1001
+ m = strip_quotes.match(d)
1002
+ if m:
1003
+ d = m.group(1)
1004
+ d = env.WhereIs(d)
1005
+ if d:
1006
+ res.append(env.fs.File(d))
1007
+ return res
1008
+
1009
+ def _get_implicit_deps_heavyweight(self, target, source, env, executor,
1010
+ icd_int):
1011
+ """
1012
+ Heavyweight dependency scanning involves scanning more than just the
1013
+ first entry in an action string. The exact behavior depends on the
1014
+ value of icd_int. Only files are taken as implicit dependencies;
1015
+ directories are ignored.
1016
+
1017
+ If icd_int is an integer value, it specifies the number of entries to
1018
+ scan for implicit dependencies. Action strings are also scanned after
1019
+ a &&. So for example, if icd_int=2 and the action string is
1020
+ "cd <some_dir> && $PYTHON $SCRIPT_PATH <another_path>", the implicit
1021
+ dependencies would be the path to the python binary and the path to the
1022
+ script.
1023
+
1024
+ If icd_int is None, all entries are scanned for implicit dependencies.
1025
+ """
1026
+
1027
+ # Avoid circular and duplicate dependencies by not providing source,
1028
+ # target, or executor to subst_list. This causes references to
1029
+ # $SOURCES, $TARGETS, and all related variables to disappear.
1030
+ from SCons.Subst import SUBST_SIG
1031
+ cmd_list = env.subst_list(self.cmd_list, SUBST_SIG, conv=lambda x: x)
1032
+ res = []
1033
+
1034
+ for cmd_line in cmd_list:
1035
+ if cmd_line:
1036
+ entry_count = 0
1037
+ for entry in cmd_line:
1038
+ d = str(entry)
1039
+ if ((icd_int is None or entry_count < icd_int) and
1040
+ not d.startswith(('&', '-', '/') if os.name == 'nt'
1041
+ else ('&', '-'))):
1042
+ m = strip_quotes.match(d)
1043
+ if m:
1044
+ d = m.group(1)
1045
+
1046
+ if d:
1047
+ # Resolve the first entry in the command string using
1048
+ # PATH, which env.WhereIs() looks in.
1049
+ # For now, only match files, not directories.
1050
+ p = os.path.abspath(d) if os.path.isfile(d) else None
1051
+ if not p and entry_count == 0:
1052
+ p = env.WhereIs(d)
1053
+
1054
+ if p:
1055
+ res.append(env.fs.File(p))
1056
+
1057
+ entry_count = entry_count + 1
1058
+ else:
1059
+ entry_count = 0 if d == '&&' else entry_count + 1
1060
+
1061
+ # Despite not providing source and target to env.subst() above, we
1062
+ # can still end up with sources in this list. For example, files in
1063
+ # LIBS will still resolve in env.subst(). This won't result in
1064
+ # circular dependencies, but it causes problems with cache signatures
1065
+ # changing between full and incremental builds.
1066
+ return [r for r in res if r not in target and r not in source]
1067
+
1068
+
1069
+ class CommandGeneratorAction(ActionBase):
1070
+ """Class for command-generator actions."""
1071
+ def __init__(self, generator, kw):
1072
+ if SCons.Debug.track_instances: logInstanceCreation(self, 'Action.CommandGeneratorAction')
1073
+ self.generator = generator
1074
+ self.gen_kw = kw
1075
+ self.varlist = kw.get('varlist', ())
1076
+ self.targets = kw.get('targets', '$TARGETS')
1077
+
1078
+ def _generate(self, target, source, env, for_signature, executor=None):
1079
+ # ensure that target is a list, to make it easier to write
1080
+ # generator functions:
1081
+ if not is_List(target):
1082
+ target = [target]
1083
+
1084
+ if executor:
1085
+ target = executor.get_all_targets()
1086
+ source = executor.get_all_sources()
1087
+ ret = self.generator(target=target,
1088
+ source=source,
1089
+ env=env,
1090
+ for_signature=for_signature)
1091
+ gen_cmd = Action(ret, **self.gen_kw)
1092
+ if not gen_cmd:
1093
+ raise SCons.Errors.UserError("Object returned from command generator: %s cannot be used to create an Action." % repr(ret))
1094
+ return gen_cmd
1095
+
1096
+ def __str__(self):
1097
+ try:
1098
+ env = self.presub_env
1099
+ except AttributeError:
1100
+ env = None
1101
+ if env is None:
1102
+ env = SCons.Defaults.DefaultEnvironment()
1103
+ act = self._generate([], [], env, 1)
1104
+ return str(act)
1105
+
1106
+ def batch_key(self, env, target, source):
1107
+ return self._generate(target, source, env, 1).batch_key(env, target, source)
1108
+
1109
+ def genstring(self, target, source, env, executor=None):
1110
+ return self._generate(target, source, env, 1, executor).genstring(target, source, env)
1111
+
1112
+ def __call__(self, target, source, env, exitstatfunc=_null, presub=_null,
1113
+ show=_null, execute=_null, chdir=_null, executor=None):
1114
+ act = self._generate(target, source, env, 0, executor)
1115
+ if act is None:
1116
+ raise SCons.Errors.UserError(
1117
+ "While building `%s': "
1118
+ "Cannot deduce file extension from source files: %s"
1119
+ % (repr(list(map(str, target))), repr(list(map(str, source))))
1120
+ )
1121
+ return act(
1122
+ target, source, env, exitstatfunc, presub, show, execute, chdir, executor
1123
+ )
1124
+
1125
+ def get_presig(self, target, source, env, executor=None):
1126
+ """Return the signature contents of this action's command line.
1127
+
1128
+ This strips $(-$) and everything in between the string,
1129
+ since those parts don't affect signatures.
1130
+ """
1131
+ return self._generate(target, source, env, 1, executor).get_presig(target, source, env)
1132
+
1133
+ def get_implicit_deps(self, target, source, env, executor=None):
1134
+ return self._generate(target, source, env, 1, executor).get_implicit_deps(target, source, env)
1135
+
1136
+ def get_varlist(self, target, source, env, executor=None):
1137
+ return self._generate(target, source, env, 1, executor).get_varlist(target, source, env, executor)
1138
+
1139
+ def get_targets(self, env, executor):
1140
+ return self._generate(None, None, env, 1, executor).get_targets(env, executor)
1141
+
1142
+
1143
+ class LazyAction(CommandGeneratorAction, CommandAction):
1144
+ """
1145
+ A LazyAction is a kind of hybrid generator and command action for
1146
+ strings of the form "$VAR". These strings normally expand to other
1147
+ strings (think "$CCCOM" to "$CC -c -o $TARGET $SOURCE"), but we also
1148
+ want to be able to replace them with functions in the construction
1149
+ environment. Consequently, we want lazy evaluation and creation of
1150
+ an Action in the case of the function, but that's overkill in the more
1151
+ normal case of expansion to other strings.
1152
+
1153
+ So we do this with a subclass that's both a generator *and*
1154
+ a command action. The overridden methods all do a quick check
1155
+ of the construction variable, and if it's a string we just call
1156
+ the corresponding CommandAction method to do the heavy lifting.
1157
+ If not, then we call the same-named CommandGeneratorAction method.
1158
+ The CommandGeneratorAction methods work by using the overridden
1159
+ _generate() method, that is, our own way of handling "generation" of
1160
+ an action based on what's in the construction variable.
1161
+ """
1162
+
1163
+ def __init__(self, var, kw):
1164
+ if SCons.Debug.track_instances: logInstanceCreation(self, 'Action.LazyAction')
1165
+ CommandAction.__init__(self, '${'+var+'}', **kw)
1166
+ self.var = SCons.Util.to_String(var)
1167
+ self.gen_kw = kw
1168
+
1169
+ def get_parent_class(self, env):
1170
+ c = env.get(self.var)
1171
+ if is_String(c) and '\n' not in c:
1172
+ return CommandAction
1173
+ return CommandGeneratorAction
1174
+
1175
+ def _generate_cache(self, env):
1176
+ if env:
1177
+ c = env.get(self.var, '')
1178
+ else:
1179
+ c = ''
1180
+ gen_cmd = Action(c, **self.gen_kw)
1181
+ if not gen_cmd:
1182
+ raise SCons.Errors.UserError("$%s value %s cannot be used to create an Action." % (self.var, repr(c)))
1183
+ return gen_cmd
1184
+
1185
+ def _generate(self, target, source, env, for_signature, executor=None):
1186
+ return self._generate_cache(env)
1187
+
1188
+ def __call__(self, target, source, env, *args, **kw):
1189
+ c = self.get_parent_class(env)
1190
+ return c.__call__(self, target, source, env, *args, **kw)
1191
+
1192
+ def get_presig(self, target, source, env):
1193
+ c = self.get_parent_class(env)
1194
+ return c.get_presig(self, target, source, env)
1195
+
1196
+ def get_varlist(self, target, source, env, executor=None):
1197
+ c = self.get_parent_class(env)
1198
+ return c.get_varlist(self, target, source, env, executor)
1199
+
1200
+
1201
+ class FunctionAction(_ActionAction):
1202
+ """Class for Python function actions."""
1203
+
1204
+ def __init__(self, execfunction, kw):
1205
+ if SCons.Debug.track_instances: logInstanceCreation(self, 'Action.FunctionAction')
1206
+
1207
+ self.execfunction = execfunction
1208
+ try:
1209
+ self.funccontents = _callable_contents(execfunction)
1210
+ except AttributeError:
1211
+ try:
1212
+ # See if execfunction will do the heavy lifting for us.
1213
+ self.gc = execfunction.get_contents
1214
+ except AttributeError:
1215
+ # This is weird, just do the best we can.
1216
+ self.funccontents = _object_contents(execfunction)
1217
+
1218
+ _ActionAction.__init__(self, **kw)
1219
+
1220
+ def function_name(self):
1221
+ try:
1222
+ return self.execfunction.__name__
1223
+ except AttributeError:
1224
+ try:
1225
+ return self.execfunction.__class__.__name__
1226
+ except AttributeError:
1227
+ return "unknown_python_function"
1228
+
1229
+ def strfunction(self, target, source, env, executor=None):
1230
+ if self.cmdstr is None:
1231
+ return None
1232
+ if self.cmdstr is not _null:
1233
+ from SCons.Subst import SUBST_RAW
1234
+ if executor:
1235
+ c = env.subst(self.cmdstr, SUBST_RAW, executor=executor)
1236
+ else:
1237
+ c = env.subst(self.cmdstr, SUBST_RAW, target, source)
1238
+ if c:
1239
+ return c
1240
+
1241
+ def array(a):
1242
+ def quote(s):
1243
+ try:
1244
+ str_for_display = s.str_for_display
1245
+ except AttributeError:
1246
+ s = repr(s)
1247
+ else:
1248
+ s = str_for_display()
1249
+ return s
1250
+ return '[' + ", ".join(map(quote, a)) + ']'
1251
+ try:
1252
+ strfunc = self.execfunction.strfunction
1253
+ except AttributeError:
1254
+ pass
1255
+ else:
1256
+ if strfunc is None:
1257
+ return None
1258
+ if callable(strfunc):
1259
+ return strfunc(target, source, env)
1260
+ name = self.function_name()
1261
+ tstr = array(target)
1262
+ sstr = array(source)
1263
+ return "%s(%s, %s)" % (name, tstr, sstr)
1264
+
1265
+ def __str__(self):
1266
+ name = self.function_name()
1267
+ if name == 'ActionCaller':
1268
+ return str(self.execfunction)
1269
+ return "%s(target, source, env)" % name
1270
+
1271
+ def execute(self, target, source, env, executor=None):
1272
+ exc_info = (None,None,None)
1273
+ try:
1274
+ if executor:
1275
+ target = executor.get_all_targets()
1276
+ source = executor.get_all_sources()
1277
+ rsources = list(map(rfile, source))
1278
+ try:
1279
+ result = self.execfunction(target=target, source=rsources, env=env)
1280
+ except KeyboardInterrupt as e:
1281
+ raise
1282
+ except SystemExit as e:
1283
+ raise
1284
+ except Exception as e:
1285
+ result = e
1286
+ exc_info = sys.exc_info()
1287
+
1288
+ if result:
1289
+ result = SCons.Errors.convert_to_BuildError(result, exc_info)
1290
+ result.node=target
1291
+ result.action=self
1292
+ try:
1293
+ result.command=self.strfunction(target, source, env, executor)
1294
+ except TypeError:
1295
+ result.command=self.strfunction(target, source, env)
1296
+
1297
+ # FIXME: This maintains backward compatibility with respect to
1298
+ # which type of exceptions were returned by raising an
1299
+ # exception and which ones were returned by value. It would
1300
+ # probably be best to always return them by value here, but
1301
+ # some codes do not check the return value of Actions and I do
1302
+ # not have the time to modify them at this point.
1303
+ if (exc_info[1] and
1304
+ not isinstance(exc_info[1],EnvironmentError)):
1305
+ raise result
1306
+
1307
+ return result
1308
+ finally:
1309
+ # Break the cycle between the traceback object and this
1310
+ # function stack frame. See the sys.exc_info() doc info for
1311
+ # more information about this issue.
1312
+ del exc_info
1313
+
1314
+ def get_presig(self, target, source, env):
1315
+ """Return the signature contents of this callable action."""
1316
+ try:
1317
+ return self.gc(target, source, env)
1318
+ except AttributeError:
1319
+ return self.funccontents
1320
+
1321
+ def get_implicit_deps(self, target, source, env):
1322
+ return []
1323
+
1324
+ class ListAction(ActionBase):
1325
+ """Class for lists of other actions."""
1326
+ def __init__(self, actionlist):
1327
+ if SCons.Debug.track_instances: logInstanceCreation(self, 'Action.ListAction')
1328
+ def list_of_actions(x):
1329
+ if isinstance(x, ActionBase):
1330
+ return x
1331
+ return Action(x)
1332
+ self.list = list(map(list_of_actions, actionlist))
1333
+ # our children will have had any varlist
1334
+ # applied; we don't need to do it again
1335
+ self.varlist = ()
1336
+ self.targets = '$TARGETS'
1337
+
1338
+ def genstring(self, target, source, env):
1339
+ return '\n'.join([a.genstring(target, source, env) for a in self.list])
1340
+
1341
+ def __str__(self):
1342
+ return '\n'.join(map(str, self.list))
1343
+
1344
+ def presub_lines(self, env):
1345
+ return SCons.Util.flatten_sequence(
1346
+ [a.presub_lines(env) for a in self.list])
1347
+
1348
+ def get_presig(self, target, source, env):
1349
+ """Return the signature contents of this action list.
1350
+
1351
+ Simple concatenation of the signatures of the elements.
1352
+ """
1353
+ return b"".join([bytes(x.get_contents(target, source, env)) for x in self.list])
1354
+
1355
+ def __call__(self, target, source, env, exitstatfunc=_null, presub=_null,
1356
+ show=_null, execute=_null, chdir=_null, executor=None):
1357
+ if executor:
1358
+ target = executor.get_all_targets()
1359
+ source = executor.get_all_sources()
1360
+ for act in self.list:
1361
+ stat = act(target, source, env, exitstatfunc, presub,
1362
+ show, execute, chdir, executor)
1363
+ if stat:
1364
+ return stat
1365
+ return 0
1366
+
1367
+ def get_implicit_deps(self, target, source, env):
1368
+ result = []
1369
+ for act in self.list:
1370
+ result.extend(act.get_implicit_deps(target, source, env))
1371
+ return result
1372
+
1373
+ def get_varlist(self, target, source, env, executor=None):
1374
+ result = OrderedDict()
1375
+ for act in self.list:
1376
+ for var in act.get_varlist(target, source, env, executor):
1377
+ result[var] = True
1378
+ return list(result.keys())
1379
+
1380
+
1381
+ class ActionCaller:
1382
+ """A class for delaying calling an Action function with specific
1383
+ (positional and keyword) arguments until the Action is actually
1384
+ executed.
1385
+
1386
+ This class looks to the rest of the world like a normal Action object,
1387
+ but what it's really doing is hanging on to the arguments until we
1388
+ have a target, source and env to use for the expansion.
1389
+ """
1390
+ def __init__(self, parent, args, kw):
1391
+ self.parent = parent
1392
+ self.args = args
1393
+ self.kw = kw
1394
+
1395
+ def get_contents(self, target, source, env):
1396
+ actfunc = self.parent.actfunc
1397
+ try:
1398
+ # "self.actfunc" is a function.
1399
+ contents = actfunc.__code__.co_code
1400
+ except AttributeError:
1401
+ # "self.actfunc" is a callable object.
1402
+ try:
1403
+ contents = actfunc.__call__.__func__.__code__.co_code
1404
+ except AttributeError:
1405
+ # No __call__() method, so it might be a builtin
1406
+ # or something like that. Do the best we can.
1407
+ contents = repr(actfunc)
1408
+
1409
+ return contents
1410
+
1411
+ def subst(self, s, target, source, env):
1412
+ # If s is a list, recursively apply subst()
1413
+ # to every element in the list
1414
+ if is_List(s):
1415
+ result = []
1416
+ for elem in s:
1417
+ result.append(self.subst(elem, target, source, env))
1418
+ return self.parent.convert(result)
1419
+
1420
+ # Special-case hack: Let a custom function wrapped in an
1421
+ # ActionCaller get at the environment through which the action
1422
+ # was called by using this hard-coded value as a special return.
1423
+ if s == '$__env__':
1424
+ return env
1425
+ elif is_String(s):
1426
+ return env.subst(s, 1, target, source)
1427
+ return self.parent.convert(s)
1428
+
1429
+ def subst_args(self, target, source, env):
1430
+ return [self.subst(x, target, source, env) for x in self.args]
1431
+
1432
+ def subst_kw(self, target, source, env):
1433
+ kw = {}
1434
+ for key in list(self.kw.keys()):
1435
+ kw[key] = self.subst(self.kw[key], target, source, env)
1436
+ return kw
1437
+
1438
+ def __call__(self, target, source, env, executor=None):
1439
+ args = self.subst_args(target, source, env)
1440
+ kw = self.subst_kw(target, source, env)
1441
+ return self.parent.actfunc(*args, **kw)
1442
+
1443
+ def strfunction(self, target, source, env):
1444
+ args = self.subst_args(target, source, env)
1445
+ kw = self.subst_kw(target, source, env)
1446
+ return self.parent.strfunc(*args, **kw)
1447
+
1448
+ def __str__(self):
1449
+ return self.parent.strfunc(*self.args, **self.kw)
1450
+
1451
+
1452
+ class ActionFactory:
1453
+ """A factory class that will wrap up an arbitrary function
1454
+ as an SCons-executable Action object.
1455
+
1456
+ The real heavy lifting here is done by the ActionCaller class.
1457
+ We just collect the (positional and keyword) arguments that we're
1458
+ called with and give them to the ActionCaller object we create,
1459
+ so it can hang onto them until it needs them.
1460
+ """
1461
+ def __init__(self, actfunc, strfunc, convert=lambda x: x):
1462
+ self.actfunc = actfunc
1463
+ self.strfunc = strfunc
1464
+ self.convert = convert
1465
+
1466
+ def __call__(self, *args, **kw):
1467
+ ac = ActionCaller(self, args, kw)
1468
+ action = Action(ac, strfunction=ac.strfunction)
1469
+ return action
1470
+
1471
+ # Local Variables:
1472
+ # tab-width:4
1473
+ # indent-tabs-mode:nil
1474
+ # End:
1475
+ # vim: set expandtab tabstop=4 shiftwidth=4: