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,1666 @@
1
+ # Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+
4
+ """ Standard plug-in to make PyQt and PySide work well in standalone mode.
5
+
6
+ To run properly, these need the Qt plugins copied along, which have their
7
+ own dependencies.
8
+ """
9
+
10
+ import os
11
+
12
+ from nuitka.containers.OrderedSets import OrderedSet
13
+ from nuitka.Options import (
14
+ getWindowsIconExecutablePath,
15
+ getWindowsIconPaths,
16
+ isStandaloneMode,
17
+ shallCreateAppBundle,
18
+ )
19
+ from nuitka.plugins.PluginBase import NuitkaPluginBase
20
+ from nuitka.plugins.Plugins import (
21
+ getActiveQtPlugin,
22
+ getOtherGUIBindingNames,
23
+ getQtBindingNames,
24
+ getQtPluginNames,
25
+ hasActiveGuiPluginForBinding,
26
+ )
27
+ from nuitka.PythonFlavors import isAnacondaPython
28
+ from nuitka.PythonVersions import python_version
29
+ from nuitka.utils.Distributions import getDistributionFromModuleName
30
+ from nuitka.utils.FileOperations import getFileList, getNormalizedPath, listDir
31
+ from nuitka.utils.ModuleNames import ModuleName
32
+ from nuitka.utils.Utils import getArchitecture, isMacOS, isWin32Windows
33
+
34
+
35
+ class NuitkaPluginQtBindingsPluginBase(NuitkaPluginBase):
36
+ # Plenty of attributes, because it's storing many states.
37
+ # pylint: disable=too-many-instance-attributes
38
+
39
+ plugin_category = "package-support,qt-binding"
40
+
41
+ # Automatically suppress detectors for any other toolkit
42
+ plugin_gui_toolkit = True
43
+
44
+ # For overload in the derived bindings plugin.
45
+ binding_name = None
46
+
47
+ warned_about = set()
48
+
49
+ def __init__(self, include_qt_plugins, noinclude_qt_plugins, no_qt_translations):
50
+ self.binding_package_name = ModuleName(self.binding_name)
51
+
52
+ self.include_qt_plugins = include_qt_plugins
53
+ self.noinclude_qt_plugins = noinclude_qt_plugins
54
+ self.no_qt_translations = no_qt_translations
55
+
56
+ # Qt plugin directories found.
57
+ self.qt_plugins_dirs = None
58
+
59
+ # Selected Qt plugins.
60
+ self.qt_plugins = None
61
+
62
+ active_qt_plugin_name = getActiveQtPlugin()
63
+
64
+ if active_qt_plugin_name is not None:
65
+ self.sysexit(
66
+ "Error, conflicting plugin '%s', you can only have one enabled."
67
+ % active_qt_plugin_name
68
+ )
69
+
70
+ self.web_engine_done_binaries = False
71
+ self.web_engine_done_data = False
72
+
73
+ def onCompilationStartChecks(self):
74
+ # Make sure, distribution location for this uses shortest name approach,
75
+ # we do not need to use the value, just want to make sure it is resolved
76
+ # properly and quickly.
77
+ _distribution = getDistributionFromModuleName(
78
+ self.binding_package_name, prefer_shorter_distribution_name=True
79
+ )
80
+
81
+ if self.locateModule(self.binding_package_name) is None:
82
+ self.sysexit(
83
+ "Error, failed to locate the '%s' installation." % self.binding_name
84
+ )
85
+
86
+ sensible_qt_plugins = self._getSensiblePlugins()
87
+
88
+ self.include_qt_plugins = OrderedSet(
89
+ sum([value.split(",") for value in self.include_qt_plugins], [])
90
+ )
91
+
92
+ # Useless, but nice for old option usage, where expanding it meant to repeat it.
93
+ if "sensible" in self.include_qt_plugins:
94
+ self.include_qt_plugins.remove("sensible")
95
+
96
+ for include_qt_plugin in self.include_qt_plugins:
97
+ if include_qt_plugin not in ("qml", "all") and not self.hasPluginFamily(
98
+ include_qt_plugin
99
+ ):
100
+ self.sysexit(
101
+ "Error, there is no Qt plugin family '%s'." % include_qt_plugin
102
+ )
103
+
104
+ self.qt_plugins = sensible_qt_plugins
105
+ self.qt_plugins.update(self.include_qt_plugins)
106
+
107
+ for noinclude_qt_plugin in self.noinclude_qt_plugins:
108
+ self.qt_plugins.discard(noinclude_qt_plugin)
109
+
110
+ # Allow to specify none.
111
+ if self.qt_plugins == set(["none"]):
112
+ self.qt_plugins = set()
113
+
114
+ # Prevent the list of binding names from being incomplete, it's used for conflicts.
115
+ assert self.binding_name in getQtBindingNames(), self.binding_name
116
+
117
+ # Also lets have consistency in naming.
118
+ assert self.plugin_name in getQtPluginNames()
119
+
120
+ @classmethod
121
+ def addPluginCommandLineOptions(cls, group):
122
+ group.add_option(
123
+ "--include-qt-plugins",
124
+ action="append",
125
+ dest="include_qt_plugins",
126
+ default=[],
127
+ help="""\
128
+ Which Qt plugins to include. These can be big with dependencies, so
129
+ by default only the "sensible" ones are included, but you can also put
130
+ "all" or list them individually. If you specify something that does
131
+ not exist, a list of all available will be given.""",
132
+ )
133
+
134
+ group.add_option(
135
+ "--noinclude-qt-plugins",
136
+ action="append",
137
+ dest="noinclude_qt_plugins",
138
+ default=[],
139
+ help="""\
140
+ Which Qt plugins to not include. This removes things, so you can
141
+ ask to include "all" and selectively remove from there, or even
142
+ from the default sensible list.""",
143
+ )
144
+
145
+ group.add_option(
146
+ "--noinclude-qt-translations",
147
+ action="store_true",
148
+ dest="no_qt_translations",
149
+ default=False,
150
+ help="""\
151
+ Include Qt translations with QtWebEngine if used. These can be a lot
152
+ of files that you may not want to be included.""",
153
+ )
154
+
155
+ def _getQmlTargetDir(self):
156
+ """Where does the Qt bindings package expect the QML files."""
157
+ return os.path.join(self.binding_name, "qml")
158
+
159
+ def _isUsingMacOSFrameworks(self):
160
+ """Is this a framework based build, or one that shared more commonality with Linux"""
161
+ if isMacOS() and self.binding_name in ("PySide6", "PySide2"):
162
+ return os.path.exists(
163
+ os.path.join(
164
+ self._getQtInformation().data_path,
165
+ "lib/QtWebEngineCore.framework",
166
+ )
167
+ )
168
+ else:
169
+ return False
170
+
171
+ def _getWebEngineResourcesTargetDir(self):
172
+ """Where does the Qt bindings package expect the resources files."""
173
+ if isWin32Windows():
174
+ if self.binding_name in ("PySide2", "PyQt5"):
175
+ return "resources"
176
+ else:
177
+ # While PyQt6/PySide6 complains about these, they are not working
178
+ # return os.path.join(self.binding_name, "resources")
179
+ return "."
180
+ else:
181
+ if self.binding_name in ("PySide2", "PySide6", "PyQt6"):
182
+ return "."
183
+ elif self.binding_name == "PyQt5":
184
+ return "resources"
185
+ else:
186
+ assert False
187
+
188
+ def _getTranslationsTargetDir(self):
189
+ """Where does the Qt bindings package expect the translation files."""
190
+ if isMacOS():
191
+ # default name of PySide6, spell-checker: ignore qtwebengine_locales
192
+ return os.path.join(self.binding_name, "Qt", "translations")
193
+ elif isWin32Windows():
194
+ if self.binding_name in ("PySide2", "PyQt5"):
195
+ return "translations"
196
+ elif self.binding_name == "PyQt6":
197
+ # TODO: PyQt6 is complaining about not being in "translations", but ignores it there.
198
+ return "."
199
+ else:
200
+ return os.path.join(self.binding_name, "translations")
201
+ else:
202
+ if self.binding_name in ("PySide2", "PySide6", "PyQt6"):
203
+ return "."
204
+ elif self.binding_name == "PyQt5":
205
+ return "translations"
206
+ else:
207
+ assert False
208
+
209
+ @staticmethod
210
+ def _getWebEngineTargetDir():
211
+ """Where to put the web process executable."""
212
+ return "."
213
+
214
+ def _getSensiblePlugins(self):
215
+ # spell-checker: ignore imageformats,iconengines,mediaservice,printsupport
216
+ # spell-checker: ignore platformthemes,egldeviceintegrations,xcbglintegrations
217
+ return OrderedSet(
218
+ tuple(
219
+ family
220
+ for family in (
221
+ "imageformats",
222
+ "iconengines",
223
+ "mediaservice",
224
+ "printsupport",
225
+ "platforms",
226
+ "platformthemes",
227
+ "styles",
228
+ # Wayland on Linux needs these
229
+ "wayland-shell-integration",
230
+ "wayland-decoration-client",
231
+ "wayland-graphics-integration-client",
232
+ "egldeviceintegrations",
233
+ # OpenGL rendering, maybe should be something separate.
234
+ "xcbglintegrations",
235
+ # SSL network needs those
236
+ "tls",
237
+ )
238
+ if self.hasPluginFamily(family)
239
+ )
240
+ )
241
+
242
+ def getQtPluginsSelected(self):
243
+ return self.qt_plugins
244
+
245
+ def hasQtPluginSelected(self, plugin_name):
246
+ selected = self.getQtPluginsSelected()
247
+
248
+ return "all" in selected or plugin_name in selected
249
+
250
+ def _applyBindingCondaLibraryPath(self, sub_path):
251
+ return self._applyBindingName(
252
+ "os.path.join(os.path.dirname(%(binding_name)s.__file__), '..', '..', '..', 'Library', "
253
+ + sub_path
254
+ + ")"
255
+ )
256
+
257
+ def _applyBindingName(self, template):
258
+ return template % {
259
+ "binding_name": self.binding_name,
260
+ "qt_major_version": self.binding_name[-1],
261
+ }
262
+
263
+ def _getQtInformation(self):
264
+ # This is generic, and therefore needs to apply this to a lot of strings.
265
+
266
+ def getLocationQueryCode(path_name):
267
+ if self.binding_name == "PyQt6":
268
+ template = """\
269
+ %(binding_name)s.QtCore.QLibraryInfo.path(%(binding_name)s.QtCore.QLibraryInfo.LibraryPath.%(path_name)s)"""
270
+ else:
271
+ template = """\
272
+ %(binding_name)s.QtCore.QLibraryInfo.location(%(binding_name)s.QtCore.QLibraryInfo.%(path_name)s)"""
273
+
274
+ return template % {
275
+ "binding_name": self.binding_name,
276
+ "path_name": path_name,
277
+ }
278
+
279
+ setup_codes = self._applyBindingName(
280
+ r"""
281
+ import os
282
+ import %(binding_name)s.QtCore
283
+ """
284
+ )
285
+
286
+ info = self.queryRuntimeInformationMultiple(
287
+ info_name=self._applyBindingName("%(binding_name)s_info"),
288
+ setup_codes=setup_codes,
289
+ values=(
290
+ (
291
+ "library_paths",
292
+ self._applyBindingName(
293
+ "%(binding_name)s.QtCore.QCoreApplication.libraryPaths()"
294
+ ),
295
+ ),
296
+ (
297
+ "guess_path1",
298
+ self._applyBindingName(
299
+ "os.path.join(os.path.dirname(%(binding_name)s.__file__), 'plugins')"
300
+ ),
301
+ ),
302
+ (
303
+ "guess_path2",
304
+ self._applyBindingCondaLibraryPath("'plugins'"),
305
+ ),
306
+ (
307
+ "guess_path3",
308
+ self._applyBindingCondaLibraryPath(
309
+ "'lib', 'qt%(qt_major_version)s', 'plugins'"
310
+ ),
311
+ ),
312
+ (
313
+ "version",
314
+ self._applyBindingName(
315
+ "%(binding_name)s.__version_info__"
316
+ if "PySide" in self.binding_name
317
+ else "%(binding_name)s.QtCore.PYQT_VERSION_STR"
318
+ ),
319
+ ),
320
+ (
321
+ "nuitka_patch_level",
322
+ self._applyBindingName(
323
+ "getattr(%(binding_name)s, '_nuitka_patch_level', 0)"
324
+ ),
325
+ ),
326
+ (
327
+ "translations_path",
328
+ getLocationQueryCode("TranslationsPath"),
329
+ ),
330
+ (
331
+ "translations_path_guess",
332
+ self._applyBindingCondaLibraryPath(
333
+ "'share', 'qt%(qt_major_version)s', 'translations'"
334
+ ),
335
+ ),
336
+ (
337
+ "library_executables_path",
338
+ getLocationQueryCode("LibraryExecutablesPath"),
339
+ ),
340
+ (
341
+ "library_executables_path_guess",
342
+ self._applyBindingCondaLibraryPath(
343
+ "'lib', 'qt%(qt_major_version)s'"
344
+ ),
345
+ ),
346
+ (
347
+ "data_path",
348
+ getLocationQueryCode("DataPath"),
349
+ ),
350
+ (
351
+ "qt_resources_path_guess",
352
+ self._applyBindingCondaLibraryPath(
353
+ "'share', 'qt%(qt_major_version)s', 'resources'"
354
+ ),
355
+ ),
356
+ ),
357
+ )
358
+
359
+ if info is None:
360
+ self.sysexit(
361
+ "Error, it seems '%s' is not installed or broken." % self.binding_name
362
+ )
363
+
364
+ return info
365
+
366
+ def _getBindingVersion(self):
367
+ """Get the version of the binding in tuple digit form, e.g. (6,0,3)"""
368
+ return self._getQtInformation().version
369
+
370
+ def _getNuitkaPatchLevel(self):
371
+ """Does it include the Nuitka patch, i.e. is a self-built one with it applied."""
372
+ return self._getQtInformation().nuitka_patch_level
373
+
374
+ def _getTranslationsPath(self):
375
+ """Get the path to the Qt translations."""
376
+ translation_path = self._getQtInformation().translations_path
377
+
378
+ if not os.path.exists(translation_path):
379
+ translation_path = self._getQtInformation().translations_path_guess
380
+
381
+ if not os.path.exists(translation_path):
382
+ self.sysexit("Error, failed to detect QtWebEngine translation path")
383
+
384
+ return translation_path
385
+
386
+ def _getWebEngineResourcesPath(self):
387
+ """Get the path to the Qt web engine resources."""
388
+ if self._isUsingMacOSFrameworks():
389
+ return os.path.join(
390
+ self._getQtInformation().data_path,
391
+ "lib/QtWebEngineCore.framework/Resources",
392
+ )
393
+ else:
394
+ resources_path = os.path.join(
395
+ self._getQtInformation().data_path, "resources"
396
+ )
397
+
398
+ if not os.path.exists(resources_path):
399
+ resources_path = self._getQtInformation().qt_resources_path_guess
400
+
401
+ if not os.path.exists(resources_path):
402
+ self.sysexit("Error, failed to detect QtWebEngine resources path")
403
+
404
+ return resources_path
405
+
406
+ def _getWebEngineExecutablePath(self):
407
+ """Get the path to QtWebEngine binary."""
408
+ library_executables_path = self._getQtInformation().library_executables_path
409
+
410
+ if not os.path.exists(library_executables_path):
411
+ library_executables_path = (
412
+ self._getQtInformation().library_executables_path_guess
413
+ )
414
+
415
+ if not os.path.exists(library_executables_path):
416
+ self.sysexit("Error, failed to detect QtWebEngine library path")
417
+
418
+ return getNormalizedPath(library_executables_path)
419
+
420
+ def getQtPluginDirs(self):
421
+ if self.qt_plugins_dirs is not None:
422
+ return self.qt_plugins_dirs
423
+
424
+ qt_info = self._getQtInformation()
425
+
426
+ self.qt_plugins_dirs = qt_info.library_paths
427
+
428
+ if not self.qt_plugins_dirs and os.path.exists(qt_info.guess_path1):
429
+ self.qt_plugins_dirs.append(qt_info.guess_path1)
430
+ if not self.qt_plugins_dirs and os.path.exists(qt_info.guess_path2):
431
+ self.qt_plugins_dirs.append(qt_info.guess_path2)
432
+ if not self.qt_plugins_dirs and os.path.exists(qt_info.guess_path3):
433
+ self.qt_plugins_dirs.append(qt_info.guess_path3)
434
+
435
+ # Avoid duplicates.
436
+ self.qt_plugins_dirs = [
437
+ getNormalizedPath(dirname) for dirname in self.qt_plugins_dirs
438
+ ]
439
+ self.qt_plugins_dirs = tuple(sorted(set(self.qt_plugins_dirs)))
440
+
441
+ if not self.qt_plugins_dirs:
442
+ self.warning("Couldn't detect Qt plugin directories.")
443
+
444
+ return self.qt_plugins_dirs
445
+
446
+ def _getQtBinDirs(self):
447
+ for plugin_dir in self.getQtPluginDirs():
448
+ if "PyQt" in self.binding_name:
449
+ qt_bin_dir = getNormalizedPath(os.path.join(plugin_dir, "..", "bin"))
450
+
451
+ if os.path.isdir(qt_bin_dir):
452
+ yield qt_bin_dir
453
+ else:
454
+ qt_bin_dir = getNormalizedPath(os.path.join(plugin_dir, ".."))
455
+
456
+ yield qt_bin_dir
457
+
458
+ def hasPluginFamily(self, family):
459
+ return any(
460
+ os.path.isdir(os.path.join(plugin_dir, family))
461
+ for plugin_dir in self.getQtPluginDirs()
462
+ )
463
+
464
+ def _getQmlDirectory(self):
465
+ for plugin_dir in self.getQtPluginDirs():
466
+ qml_plugin_dir = getNormalizedPath(os.path.join(plugin_dir, "..", "qml"))
467
+
468
+ if os.path.exists(qml_plugin_dir):
469
+ return qml_plugin_dir
470
+
471
+ self.sysexit("Error, no such Qt plugin family: qml")
472
+
473
+ def _getQmlFileList(self, dlls):
474
+ qml_plugin_dir = self._getQmlDirectory()
475
+
476
+ # List all file types of the QML plugin folder that are data files and
477
+ # not DLLs, spell-checker: ignore qmlc,qmltypes,metainfo,qmldir
478
+ datafile_suffixes = (
479
+ ".qml",
480
+ ".qmlc",
481
+ ".qmltypes",
482
+ ".js",
483
+ ".jsc",
484
+ ".json",
485
+ ".png",
486
+ ".ttf",
487
+ ".metainfo",
488
+ ".mesh",
489
+ ".frag",
490
+ "qmldir",
491
+ ".webp",
492
+ )
493
+
494
+ if dlls:
495
+ ignore_suffixes = datafile_suffixes
496
+ only_suffixes = ()
497
+ else:
498
+ ignore_suffixes = ()
499
+ only_suffixes = datafile_suffixes
500
+
501
+ return getFileList(
502
+ qml_plugin_dir,
503
+ ignore_suffixes=ignore_suffixes,
504
+ only_suffixes=only_suffixes,
505
+ )
506
+
507
+ def _findQtPluginDLLs(self):
508
+ for qt_plugins_dir in self.getQtPluginDirs():
509
+ for filename in getFileList(qt_plugins_dir):
510
+ filename_relative = os.path.relpath(filename, start=qt_plugins_dir)
511
+
512
+ qt_plugin_name = filename_relative.split(os.path.sep, 1)[0]
513
+
514
+ if not self.hasQtPluginSelected(qt_plugin_name):
515
+ continue
516
+
517
+ yield self.makeDllEntryPoint(
518
+ source_path=filename,
519
+ dest_path=os.path.join(
520
+ self.getQtPluginTargetPath(),
521
+ filename_relative,
522
+ ),
523
+ module_name=self.binding_package_name,
524
+ package_name=self.binding_package_name,
525
+ reason="qt plugin",
526
+ )
527
+
528
+ def _getChildNamed(self, *child_names):
529
+ for child_name in child_names:
530
+ return ModuleName(self.binding_name).getChildNamed(child_name)
531
+
532
+ def getImplicitImports(self, module):
533
+ # Way too many indeed, pylint: disable=too-many-branches,too-many-statements
534
+
535
+ full_name = module.getFullName()
536
+ top_level_package_name, child_name = full_name.splitPackageName()
537
+
538
+ if top_level_package_name != self.binding_name:
539
+ return
540
+
541
+ # These are alternatives depending on PyQt5 version
542
+ if child_name == "QtCore" and "PyQt" in self.binding_name:
543
+ if python_version < 0x300:
544
+ yield "atexit"
545
+
546
+ yield "sip"
547
+ yield self._getChildNamed("sip")
548
+
549
+ if child_name in (
550
+ "QtGui",
551
+ "QtAssistant",
552
+ "QtDBus",
553
+ "QtDeclarative",
554
+ "QtSql",
555
+ "QtDesigner",
556
+ "QtHelp",
557
+ "QtNetwork",
558
+ "QtScript",
559
+ "QtQml",
560
+ "QtGui",
561
+ "QtScriptTools",
562
+ "QtSvg",
563
+ "QtTest",
564
+ "QtWebKit",
565
+ "QtOpenGL",
566
+ "QtXml",
567
+ "QtXmlPatterns",
568
+ "QtPrintSupport",
569
+ "QtNfc",
570
+ "QtWebKitWidgets",
571
+ "QtBluetooth",
572
+ "QtMultimediaWidgets",
573
+ "QtQuick",
574
+ "QtWebChannel",
575
+ "QtWebSockets",
576
+ "QtX11Extras",
577
+ "_QOpenGLFunctions_2_0",
578
+ "_QOpenGLFunctions_2_1",
579
+ "_QOpenGLFunctions_4_1_Core",
580
+ ):
581
+ yield self._getChildNamed("QtCore")
582
+
583
+ if child_name in (
584
+ "QtDeclarative",
585
+ "QtWebKit",
586
+ "QtXmlPatterns",
587
+ "QtQml",
588
+ "QtPrintSupport",
589
+ "QtWebKitWidgets",
590
+ "QtMultimedia",
591
+ "QtMultimediaWidgets",
592
+ "QtQuick",
593
+ "QtQuickWidgets",
594
+ "QtWebSockets",
595
+ "QtWebEngineWidgets",
596
+ ):
597
+ yield self._getChildNamed("QtNetwork")
598
+
599
+ if child_name == "QtWebEngineWidgets":
600
+ yield self._getChildNamed("QtWebEngineCore")
601
+ yield self._getChildNamed("QtWebChannel")
602
+ yield self._getChildNamed("QtPrintSupport")
603
+ elif child_name == "QtScriptTools":
604
+ yield self._getChildNamed("QtScript")
605
+ elif child_name in (
606
+ "QtWidgets",
607
+ "QtDeclarative",
608
+ "QtDesigner",
609
+ "QtHelp",
610
+ "QtScriptTools",
611
+ "QtSvg",
612
+ "QtTest",
613
+ "QtWebKit",
614
+ "QtPrintSupport",
615
+ "QtWebKitWidgets",
616
+ "QtMultimedia",
617
+ "QtMultimediaWidgets",
618
+ "QtOpenGL",
619
+ "QtQuick",
620
+ "QtQuickWidgets",
621
+ "QtSql",
622
+ "_QOpenGLFunctions_2_0",
623
+ "_QOpenGLFunctions_2_1",
624
+ "_QOpenGLFunctions_4_1_Core",
625
+ ):
626
+ yield self._getChildNamed("QtGui")
627
+
628
+ if child_name in (
629
+ "QtDesigner",
630
+ "QtHelp",
631
+ "QtTest",
632
+ "QtPrintSupport",
633
+ "QtSvg",
634
+ "QtOpenGL",
635
+ "QtWebKitWidgets",
636
+ "QtMultimediaWidgets",
637
+ "QtQuickWidgets",
638
+ "QtSql",
639
+ ):
640
+ yield self._getChildNamed("QtWidgets")
641
+
642
+ if child_name in ("QtPrintSupport",):
643
+ yield self._getChildNamed("QtSvg")
644
+
645
+ if child_name in ("QtWebKitWidgets",):
646
+ yield self._getChildNamed("QtWebKit")
647
+ yield self._getChildNamed("QtPrintSupport")
648
+
649
+ if child_name in ("QtMultimediaWidgets",):
650
+ yield self._getChildNamed("QtMultimedia")
651
+
652
+ if child_name in ("QtQuick", "QtQuickWidgets"):
653
+ yield self._getChildNamed("QtQml")
654
+ yield self._getChildNamed("QtOpenGL")
655
+
656
+ if child_name in ("QtQuickWidgets", "QtQml", "QtQuickControls2"):
657
+ yield self._getChildNamed("QtQuick")
658
+
659
+ if child_name == "Qt":
660
+ yield self._getChildNamed("QtCore")
661
+ yield self._getChildNamed("QtDBus")
662
+ yield self._getChildNamed("QtGui")
663
+ yield self._getChildNamed("QtNetwork")
664
+ yield self._getChildNamed("QtNetworkAuth")
665
+ yield self._getChildNamed("QtSensors")
666
+ yield self._getChildNamed("QtSerialPort")
667
+ yield self._getChildNamed("QtMultimedia")
668
+ yield self._getChildNamed("QtQml")
669
+ yield self._getChildNamed("QtWidgets")
670
+
671
+ # TODO: Questionable if this still exists in newer PySide.
672
+ if child_name == "QtUiTools":
673
+ yield self._getChildNamed("QtGui")
674
+ yield self._getChildNamed("QtXml")
675
+
676
+ # TODO: Questionable if this still exists in newer PySide.
677
+ if full_name == "phonon":
678
+ yield self._getChildNamed("QtGui")
679
+
680
+ def createPostModuleLoadCode(self, module):
681
+ """Create code to load after a module was successfully imported.
682
+
683
+ For Qt we need to set the library path to the distribution folder
684
+ we are running from. The code is immediately run after the code
685
+ and therefore makes sure it's updated properly.
686
+
687
+ Also, for QApplication we try and load icons automatically.
688
+ TODO: Currently only for Windows, but we could add icons from macOS too
689
+ """
690
+
691
+ full_name = module.getFullName()
692
+
693
+ # We do this for PySide6 only.
694
+ if (
695
+ full_name == "%s" % self.binding_name
696
+ and self.binding_name == "PySide6"
697
+ and (getWindowsIconPaths() or getWindowsIconExecutablePath())
698
+ ):
699
+ # TODO: Ideally we would know the icons count and not be confused by
700
+ # resources the user may have added themselves.
701
+
702
+ # spell-checker: ignore Pixmap
703
+ code = """\
704
+ import sys
705
+ import %(binding_name)s.QtWidgets
706
+ orig_QApplication = %(binding_name)s.QtWidgets.QApplication
707
+
708
+ from %(binding_name)s.QtGui import QIcon, QPixmap, QImage
709
+
710
+ class OurQApplication(orig_QApplication):
711
+ def __init__(self, *args, **kwargs):
712
+ orig_QApplication.__init__(self, *args, **kwargs)
713
+ main_filename = sys.argv[0]
714
+
715
+ import ctypes
716
+ ctypes.windll.shell32.ExtractIconExW.restype = ctypes.wintypes.HICON
717
+ ctypes.windll.shell32.ExtractIconExW.argtypes = (ctypes.wintypes.LPCWSTR, ctypes.c_int, ctypes.POINTER(ctypes.wintypes.HICON), ctypes.POINTER(ctypes.wintypes.HICON), ctypes.c_uint)
718
+ icon_count = ctypes.windll.shell32.ExtractIconExW(main_filename, -1, None, None, 0)
719
+
720
+ assert icon_count > 0
721
+
722
+ small_icon = ctypes.wintypes.HICON()
723
+ large_icon = ctypes.wintypes.HICON()
724
+
725
+ icons = []
726
+ for icon_index in range(icon_count):
727
+ res = ctypes.windll.shell32.ExtractIconExW(main_filename, icon_index, ctypes.byref(small_icon), ctypes.byref(large_icon), 1)
728
+
729
+ icons.append(small_icon.value)
730
+ icons.append(large_icon.value)
731
+
732
+ icon = QIcon()
733
+ for icon_handle in icons:
734
+ icon.addPixmap(QPixmap.fromImage(QImage.fromHICON(icon_handle)))
735
+
736
+ self.setWindowIcon(icon)
737
+
738
+ %(binding_name)s.QtWidgets.QApplication = OurQApplication
739
+ """ % {
740
+ "binding_name": self.binding_name
741
+ }
742
+
743
+ yield (code, "Loading Qt application icon from Windows resources.")
744
+
745
+ # Only in standalone mode, this will be needed.
746
+ if full_name == "%s.QtCore" % self.binding_name and isStandaloneMode():
747
+ code = """\
748
+ from __future__ import absolute_import
749
+
750
+ from %(package_name)s import QCoreApplication
751
+ import os
752
+
753
+ qt_plugins_path = %(qt_plugins_path)s
754
+
755
+ if qt_plugins_path is not None:
756
+ QCoreApplication.setLibraryPaths(
757
+ [
758
+ os.path.join(
759
+ os.path.dirname(__file__),
760
+ "..",
761
+ %(qt_plugins_path)s
762
+ )
763
+ ]
764
+ )
765
+
766
+ os.environ["QML2_IMPORT_PATH"] = os.path.join(
767
+ os.path.dirname(__file__),
768
+ "qml"
769
+ )
770
+ """ % {
771
+ "package_name": full_name,
772
+ "qt_plugins_path": repr(
773
+ None
774
+ if self.isDefaultQtPluginTargetPath()
775
+ else self.getQtPluginTargetPath()
776
+ ),
777
+ }
778
+
779
+ yield (
780
+ code,
781
+ """\
782
+ Setting Qt library path to distribution folder. We need to avoid loading target
783
+ system Qt plugins, which may be from another Qt version.""",
784
+ )
785
+
786
+ def isQtWebEngineModule(self, full_name):
787
+ return full_name in (
788
+ self.binding_name + ".QtWebEngine",
789
+ self.binding_name + ".QtWebEngineCore",
790
+ )
791
+
792
+ def createPreModuleLoadCode(self, module):
793
+ """Method called when a module is being imported.
794
+
795
+ Notes:
796
+ If full name equals to the binding we insert code to include the dist
797
+ folder in the 'PATH' environment variable (on Windows only).
798
+
799
+ Args:
800
+ module: the module object
801
+ Returns:
802
+ Code to insert and descriptive text (tuple), or (None, None).
803
+ """
804
+
805
+ # This is only relevant on standalone mode for Windows
806
+ if not isStandaloneMode():
807
+ return
808
+
809
+ full_name = module.getFullName()
810
+
811
+ if full_name == self.binding_name and isWin32Windows():
812
+ code = """\
813
+ import os
814
+ path = os.getenv("PATH", "")
815
+ if not path.startswith(__nuitka_binary_dir):
816
+ os.environ["PATH"] = __nuitka_binary_dir + ";" + path
817
+ """
818
+ yield (
819
+ code,
820
+ "Adding binary folder to runtime 'PATH' environment variable for proper Qt loading.",
821
+ )
822
+
823
+ # We need to set these variables, to force the layout
824
+ # spell-checker: ignore QTWEBENGINEPROCESS_PATH,QTWEBENGINE_DISABLE_SANDBOX,
825
+ # spell-checker: ignore QTWEBENGINE_RESOURCES_PATH
826
+
827
+ if self.isQtWebEngineModule(full_name):
828
+ code = r"""
829
+ import os
830
+ os.environ["QTWEBENGINE_LOCALES_PATH"] = os.path.join(
831
+ __nuitka_binary_dir,
832
+ %(web_engine_locales_path)r,
833
+ "qtwebengine_locales"
834
+ )
835
+ """ % {
836
+ "web_engine_locales_path": self._getTranslationsTargetDir()
837
+ }
838
+
839
+ yield (
840
+ code,
841
+ "Setting WebEngine translations path'.",
842
+ )
843
+
844
+ if isWin32Windows():
845
+ # TODO: Need to do it for DLL mode for sure, but we should do it
846
+ # for all platforms.
847
+ code = r"""
848
+ os.environ["QTWEBENGINEPROCESS_PATH"] = os.path.normpath(
849
+ os.path.join(
850
+ __nuitka_binary_dir,
851
+ %(web_engine_process_path)r
852
+ )
853
+ )
854
+ os.environ["QTWEBENGINE_RESOURCES_PATH"] = os.path.normpath(
855
+ os.path.join(
856
+ __nuitka_binary_dir,
857
+ %(web_engine_resources_path)r
858
+ )
859
+ )
860
+
861
+ """ % {
862
+ "web_engine_process_path": "QtWebEngineProcess.exe",
863
+ "web_engine_resources_path": self._getWebEngineResourcesTargetDir(),
864
+ }
865
+
866
+ yield (
867
+ code,
868
+ "Setting Qt WebEngine binary path'.",
869
+ )
870
+
871
+ if self._isUsingMacOSFrameworks():
872
+ code = r"""
873
+ os.environ["QTWEBENGINEPROCESS_PATH"] = os.path.join(
874
+ __nuitka_binary_dir,
875
+ %(web_engine_process_path)r
876
+ )
877
+ os.environ["QTWEBENGINE_LOCALES_PATH"] = os.path.join(
878
+ __nuitka_binary_dir,
879
+ "qtwebengine_locales"
880
+ )
881
+ os.environ["QTWEBENGINE_DISABLE_SANDBOX"]="1"
882
+ """ % {
883
+ "web_engine_process_path": """\
884
+ %s/Qt/lib/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app/Contents/MacOS/QtWebEngineProcess"""
885
+ % self.binding_name
886
+ }
887
+
888
+ yield (
889
+ code,
890
+ "Setting Qt WebEngine binary path'.",
891
+ )
892
+
893
+ def _handleWebEngineDataFiles(self):
894
+ # Do it only once
895
+ if self.web_engine_done_data:
896
+ return
897
+
898
+ yield self.makeIncludedGeneratedDataFile(
899
+ data="""\
900
+ [Paths]
901
+ Prefix = .
902
+ """,
903
+ dest_path="qt6.conf" if "6" in self.binding_name else "qt.conf",
904
+ reason="QtWebEngine needs Qt configuration file",
905
+ )
906
+
907
+ if self._isUsingMacOSFrameworks():
908
+ yield self._handleWebEngineDataFilesMacOSFrameworks()
909
+ else:
910
+ yield self._handleWebEngineDataFilesGeneric()
911
+
912
+ self.web_engine_done_data = True
913
+
914
+ def _handleWebEngineDataFilesMacOSFrameworks(self):
915
+ if not shallCreateAppBundle():
916
+ self.sysexit(
917
+ "Error, cannot include required Qt WebEngine binaries unless in an application bundle."
918
+ )
919
+
920
+ resources_dir = self._getWebEngineResourcesPath()
921
+
922
+ for filename in getFileList(resources_dir):
923
+ filename_relative = os.path.relpath(filename, resources_dir)
924
+
925
+ yield self.makeIncludedDataFile(
926
+ source_path=filename,
927
+ dest_path=filename_relative,
928
+ reason="Qt WebEngine resources",
929
+ )
930
+
931
+ used_frameworks = [
932
+ "QtWebEngineCore",
933
+ "QtCore",
934
+ "QtQuick",
935
+ "QtQml",
936
+ "QtQmlModels",
937
+ "QtNetwork",
938
+ "QtGui",
939
+ "QtWebChannel",
940
+ "QtPositioning",
941
+ ]
942
+ if self.binding_name in ("PySide6", "PyQt6"):
943
+ used_frameworks += ["QtOpenGL", "QtDBus"]
944
+
945
+ # Newer PySide6 needs even more.
946
+ if self.binding_name == "PySide6" and self._getBindingVersion() >= (6, 8, 0):
947
+ used_frameworks.append("QtQmlMeta")
948
+ used_frameworks.append("QtQmlWorkerScript")
949
+
950
+ for used_framework in used_frameworks:
951
+ yield self.makeIncludedAppBundleFramework(
952
+ source_path=os.path.join(self._getQtInformation().data_path, "lib"),
953
+ framework_name=used_framework,
954
+ reason="Qt WebEngine dependency",
955
+ )
956
+
957
+ def makeIncludedAppBundleFramework(
958
+ self, source_path, framework_name, reason, tags=""
959
+ ):
960
+ framework_basename = framework_name + ".framework"
961
+ framework_path = os.path.join(source_path, framework_basename)
962
+
963
+ for filename in getFileList(framework_path):
964
+ filename_relative = os.path.relpath(filename, framework_path)
965
+
966
+ yield self.makeIncludedDataFile(
967
+ source_path=filename,
968
+ dest_path=os.path.join(
969
+ self.binding_name,
970
+ "Qt",
971
+ "lib",
972
+ framework_basename,
973
+ filename_relative,
974
+ ),
975
+ reason=reason,
976
+ tags=tags,
977
+ )
978
+
979
+ def _handleWebEngineDataFilesGeneric(self):
980
+ resources_dir = self._getWebEngineResourcesPath()
981
+
982
+ for filename in getFileList(resources_dir):
983
+ filename_relative = os.path.relpath(filename, resources_dir)
984
+
985
+ yield self.makeIncludedDataFile(
986
+ source_path=filename,
987
+ dest_path=os.path.join(
988
+ self._getWebEngineResourcesTargetDir(), filename_relative
989
+ ),
990
+ reason="Qt resources",
991
+ )
992
+
993
+ if not self.no_qt_translations:
994
+ translations_path = self._getTranslationsPath()
995
+ dest_path = self._getTranslationsTargetDir()
996
+
997
+ for filename in getFileList(translations_path):
998
+ filename_relative = os.path.relpath(filename, translations_path)
999
+
1000
+ yield self.makeIncludedDataFile(
1001
+ source_path=filename,
1002
+ dest_path=os.path.join(dest_path, filename_relative),
1003
+ reason="Qt translation",
1004
+ tags="translation",
1005
+ )
1006
+
1007
+ def considerDataFiles(self, module):
1008
+ full_name = module.getFullName()
1009
+
1010
+ if full_name == self.binding_name and (
1011
+ "qml" in self.getQtPluginsSelected() or "all" in self.getQtPluginsSelected()
1012
+ ):
1013
+ qml_plugin_dir = self._getQmlDirectory()
1014
+ qml_target_dir = self._getQmlTargetDir()
1015
+
1016
+ self.info("Including Qt plugins 'qml' below '%s'." % qml_target_dir)
1017
+
1018
+ for filename in self._getQmlFileList(dlls=False):
1019
+ filename_relative = os.path.relpath(filename, qml_plugin_dir)
1020
+
1021
+ yield self.makeIncludedDataFile(
1022
+ source_path=filename,
1023
+ dest_path=os.path.join(
1024
+ qml_target_dir,
1025
+ filename_relative,
1026
+ ),
1027
+ reason="Qt QML datafile",
1028
+ tags="qml",
1029
+ )
1030
+ elif self.isQtWebEngineModule(full_name):
1031
+ yield self._handleWebEngineDataFiles()
1032
+
1033
+ def _getExtraBinariesWebEngineGeneric(self, full_name):
1034
+ if self.web_engine_done_binaries:
1035
+ return
1036
+
1037
+ self.info("Including QtWebEngine executable.")
1038
+
1039
+ qt_web_engine_dir = self._getWebEngineExecutablePath()
1040
+
1041
+ if not os.path.isdir(qt_web_engine_dir):
1042
+ assert False, qt_web_engine_dir
1043
+
1044
+ for filename, filename_relative in listDir(qt_web_engine_dir):
1045
+ if filename_relative.startswith("QtWebEngineProcess"):
1046
+ yield self.makeExeEntryPoint(
1047
+ source_path=filename,
1048
+ dest_path=getNormalizedPath(
1049
+ os.path.join(self._getWebEngineTargetDir(), filename_relative)
1050
+ ),
1051
+ module_name=full_name,
1052
+ package_name=full_name,
1053
+ reason="needed by '%s'" % full_name.asString(),
1054
+ )
1055
+
1056
+ break
1057
+ else:
1058
+ self.sysexit(
1059
+ "Error, cannot locate 'QtWebEngineProcess' executable at '%s'."
1060
+ % qt_web_engine_dir
1061
+ )
1062
+
1063
+ self.web_engine_done_binaries = True # prevent multiple copies
1064
+
1065
+ def getQtPluginTargetPath(self):
1066
+ if self.binding_name == "PyQt6":
1067
+ return os.path.join(self.binding_name, "Qt6", "plugins")
1068
+ else:
1069
+ return os.path.join(self.binding_name, "qt-plugins")
1070
+
1071
+ def isDefaultQtPluginTargetPath(self):
1072
+ # So far we use the default only with PyQt6, since our post load code to
1073
+ # change it crashes on macOS, probably being called too soon.
1074
+ return self.binding_name == "PyQt6"
1075
+
1076
+ def getExtraDlls(self, module):
1077
+ # pylint: disable=too-many-branches
1078
+ full_name = module.getFullName()
1079
+
1080
+ if full_name == self.binding_name:
1081
+ if not self.getQtPluginDirs():
1082
+ self.sysexit(
1083
+ "Error, failed to detect '%s' plugin directories."
1084
+ % self.binding_name
1085
+ )
1086
+
1087
+ self.info(
1088
+ "Including Qt plugins '%s' below '%s'."
1089
+ % (
1090
+ ",".join(
1091
+ sorted(x for x in self.getQtPluginsSelected() if x != "xml")
1092
+ ),
1093
+ self.getQtPluginTargetPath(),
1094
+ )
1095
+ )
1096
+
1097
+ # TODO: Yielding a generator should become OK too.
1098
+ for r in self._findQtPluginDLLs():
1099
+ yield r
1100
+
1101
+ if isWin32Windows():
1102
+ # Those 2 vars will be used later, just saving some resources
1103
+ # by caching the files list
1104
+ qt_bin_files = sum(
1105
+ (getFileList(qt_bin_dir) for qt_bin_dir in self._getQtBinDirs()),
1106
+ [],
1107
+ )
1108
+
1109
+ count = 0
1110
+ for filename in qt_bin_files:
1111
+ basename = os.path.basename(filename).lower()
1112
+ # spell-checker: ignore libeay32,ssleay32
1113
+
1114
+ if basename in ("libeay32.dll", "ssleay32.dll"):
1115
+ yield self.makeDllEntryPoint(
1116
+ source_path=filename,
1117
+ dest_path=basename,
1118
+ module_name=full_name,
1119
+ package_name=full_name,
1120
+ reason="needed by '%s'" % full_name.asString(),
1121
+ )
1122
+
1123
+ count += 1
1124
+
1125
+ self.reportFileCount(full_name, count, section="OpenSSL")
1126
+
1127
+ if (
1128
+ "qml" in self.getQtPluginsSelected()
1129
+ or "all" in self.getQtPluginsSelected()
1130
+ ):
1131
+ qml_plugin_dir = self._getQmlDirectory()
1132
+ qml_target_dir = self._getQmlTargetDir()
1133
+
1134
+ for filename in self._getQmlFileList(dlls=True):
1135
+ filename_relative = os.path.relpath(filename, qml_plugin_dir)
1136
+
1137
+ yield self.makeDllEntryPoint(
1138
+ source_path=filename,
1139
+ dest_path=os.path.join(
1140
+ qml_target_dir,
1141
+ filename_relative,
1142
+ ),
1143
+ module_name=full_name,
1144
+ package_name=full_name,
1145
+ reason="Qt QML plugin DLL",
1146
+ )
1147
+
1148
+ # Also copy required OpenGL DLLs on Windows,
1149
+ # spell-checker: ignore libegl,libglesv2,opengl32sw,d3dcompiler_
1150
+ if isWin32Windows():
1151
+ gl_dlls = ("libegl.dll", "libglesv2.dll", "opengl32sw.dll")
1152
+
1153
+ count = 0
1154
+ for filename in qt_bin_files:
1155
+ basename = os.path.basename(filename).lower()
1156
+
1157
+ if basename in gl_dlls or basename.startswith("d3dcompiler_"):
1158
+ yield self.makeDllEntryPoint(
1159
+ source_path=filename,
1160
+ dest_path=basename,
1161
+ module_name=full_name,
1162
+ package_name=full_name,
1163
+ reason="needed by OpenGL for '%s'"
1164
+ % full_name.asString(),
1165
+ )
1166
+
1167
+ self.reportFileCount(full_name, count, section="OpenGL")
1168
+ elif full_name == self.binding_name + ".QtNetwork":
1169
+ yield self._getExtraBinariesQtNetwork(full_name=full_name)
1170
+ elif self.isQtWebEngineModule(full_name):
1171
+ if not self._isUsingMacOSFrameworks():
1172
+ yield self._getExtraBinariesWebEngineGeneric(full_name=full_name)
1173
+
1174
+ def _getExtraBinariesQtNetwork(self, full_name):
1175
+ if isWin32Windows():
1176
+ if self.binding_name == "PyQt5":
1177
+ arch_name = getArchitecture()
1178
+
1179
+ if arch_name == "x86":
1180
+ arch_suffix = ""
1181
+ elif arch_name == "x86_64":
1182
+ arch_suffix = "-x64"
1183
+ else:
1184
+ self.sysexit(
1185
+ "Error, unknown architecture encountered, need to add support for %s."
1186
+ % arch_name
1187
+ )
1188
+
1189
+ # Manually loaded DLLs by Qt5.
1190
+ # spell-checker: ignore libcrypto
1191
+ for dll_basename in ("libssl-1_1", "libcrypto-1_1"):
1192
+ dll_filename = dll_basename + arch_suffix + ".dll"
1193
+
1194
+ for plugin_dir in self._getQtBinDirs():
1195
+ candidate = os.path.join(plugin_dir, dll_filename)
1196
+
1197
+ if os.path.exists(candidate):
1198
+ yield self.makeDllEntryPoint(
1199
+ source_path=candidate,
1200
+ dest_path=dll_filename,
1201
+ module_name=full_name,
1202
+ package_name=full_name,
1203
+ reason="needed by '%s'" % full_name.asString(),
1204
+ )
1205
+
1206
+ break
1207
+
1208
+ else:
1209
+ dll_path = self.locateDLL("crypto")
1210
+ if dll_path is not None:
1211
+ yield self.makeDllEntryPoint(
1212
+ source_path=dll_path,
1213
+ dest_path=os.path.basename(dll_path),
1214
+ module_name=full_name,
1215
+ package_name=full_name,
1216
+ reason="needed by '%s'" % full_name.asString(),
1217
+ )
1218
+
1219
+ dll_path = self.locateDLL("ssl")
1220
+ if dll_path is not None:
1221
+ yield self.makeDllEntryPoint(
1222
+ source_path=dll_path,
1223
+ dest_path=os.path.basename(dll_path),
1224
+ module_name=full_name,
1225
+ package_name=full_name,
1226
+ reason="needed by '%s'" % full_name.asString(),
1227
+ )
1228
+
1229
+ def onModuleEncounter(
1230
+ self, using_module_name, module_name, module_filename, module_kind
1231
+ ):
1232
+ top_package_name = module_name.getTopLevelPackageName()
1233
+
1234
+ if isStandaloneMode():
1235
+ if (
1236
+ top_package_name in getQtBindingNames()
1237
+ and top_package_name != self.binding_name
1238
+ ):
1239
+ if top_package_name not in self.warned_about:
1240
+ self.info(
1241
+ """\
1242
+ Unwanted import of '%(unwanted)s' that conflicts with '%(binding_name)s' \
1243
+ encountered, preventing its inclusion. As a result an "ImportError" might \
1244
+ be given at run time. Uninstall the module it for fully compatible \
1245
+ behavior with the uncompiled code."""
1246
+ % {
1247
+ "unwanted": top_package_name,
1248
+ "binding_name": self.binding_name,
1249
+ }
1250
+ )
1251
+
1252
+ self.warned_about.add(top_package_name)
1253
+
1254
+ return (
1255
+ False,
1256
+ "Not included due to potentially conflicting Qt versions with selected Qt binding '%s'."
1257
+ % self.binding_name,
1258
+ )
1259
+
1260
+ if (
1261
+ top_package_name in getOtherGUIBindingNames()
1262
+ and not hasActiveGuiPluginForBinding(top_package_name)
1263
+ ):
1264
+ return (
1265
+ False,
1266
+ "Not included due to its plugin not being active, but a Qt plugin is.",
1267
+ )
1268
+
1269
+ if module_name == self.binding_name:
1270
+ return (True, "Included to allow post load workaround code.")
1271
+
1272
+ def onModuleCompleteSet(self, module_set):
1273
+ self.onModuleCompleteSetGUI(
1274
+ module_set=module_set, plugin_binding_name=self.binding_name
1275
+ )
1276
+
1277
+ def onModuleSourceCode(self, module_name, source_filename, source_code):
1278
+ """Third party packages that make binding selections."""
1279
+ # spell-checker: ignore pyqtgraph
1280
+ if module_name.hasNamespace("pyqtgraph"):
1281
+ # TODO: Add a mechanism to force all variable references of a name to something
1282
+ # during tree building, that would cover all uses in a nicer way.
1283
+ source_code = source_code.replace(
1284
+ "{QT_LIB.lower()}", self.binding_name.lower()
1285
+ )
1286
+ source_code = source_code.replace(
1287
+ "QT_LIB.lower()", repr(self.binding_name.lower())
1288
+ )
1289
+
1290
+ return source_code
1291
+
1292
+ def onDataFileTags(self, included_datafile):
1293
+ if included_datafile.dest_path.endswith(
1294
+ ".qml"
1295
+ ) and not self.hasQtPluginSelected("qml"):
1296
+ self.warning(
1297
+ """Including QML file %s, but not having Qt qml plugins is unlikely \
1298
+ to work. Consider using '--include-qt-plugins=qml' to include the \
1299
+ necessary files to use it."""
1300
+ % included_datafile.dest_path
1301
+ )
1302
+
1303
+
1304
+ class NuitkaPluginPyQt5QtPluginsPlugin(NuitkaPluginQtBindingsPluginBase):
1305
+ """This is for plugins of PyQt5.
1306
+
1307
+ When loads an image, it may use a plug-in, which in turn used DLLs,
1308
+ which for standalone mode, can cause issues of not having it.
1309
+ """
1310
+
1311
+ plugin_name = "pyqt5"
1312
+ plugin_desc = "Required by the PyQt5 package."
1313
+
1314
+ binding_name = "PyQt5"
1315
+
1316
+ def __init__(self, include_qt_plugins, noinclude_qt_plugins, no_qt_translations):
1317
+ NuitkaPluginQtBindingsPluginBase.__init__(
1318
+ self,
1319
+ include_qt_plugins=include_qt_plugins,
1320
+ noinclude_qt_plugins=noinclude_qt_plugins,
1321
+ no_qt_translations=no_qt_translations,
1322
+ )
1323
+
1324
+ # TODO: make this into yaml instead, so we do not pollute this constructor.
1325
+ self.warning(
1326
+ """\
1327
+ For the obsolete PyQt5 the Nuitka support is incomplete. Threading, callbacks \
1328
+ to compiled functions, etc. may not be working.""",
1329
+ mnemonic="pyqt5",
1330
+ )
1331
+
1332
+ def _getQtInformation(self):
1333
+ result = NuitkaPluginQtBindingsPluginBase._getQtInformation(self)
1334
+
1335
+ if isAnacondaPython():
1336
+ if "CONDA_PREFIX" in os.environ:
1337
+ conda_prefix = os.environ["CONDA_PREFIX"]
1338
+ elif "CONDA_PYTHON_EXE" in os.environ:
1339
+ conda_prefix = os.path.dirname(os.environ["CONDA_PYTHON_EXE"])
1340
+
1341
+ if conda_prefix is not None:
1342
+ values = result._asdict()
1343
+
1344
+ def updateStaticPath(value):
1345
+ path_parts = value.split("/")
1346
+
1347
+ # That is how it is built for Anaconda.
1348
+ if "_h_env" in path_parts:
1349
+ return getNormalizedPath(
1350
+ os.path.join(
1351
+ conda_prefix,
1352
+ *path_parts[path_parts.index("_h_env") + 1 :]
1353
+ )
1354
+ )
1355
+ else:
1356
+ return value
1357
+
1358
+ for key in "translations_path", "library_executables_path", "data_path":
1359
+ values[key] = updateStaticPath(values[key])
1360
+
1361
+ # Update the "namedtuple".
1362
+ result = result.__class__(**values)
1363
+
1364
+ return result
1365
+
1366
+ @classmethod
1367
+ def isRelevant(cls):
1368
+ return isStandaloneMode()
1369
+
1370
+
1371
+ class NuitkaPluginDetectorPyQt5QtPluginsPlugin(NuitkaPluginBase):
1372
+ detector_for = NuitkaPluginPyQt5QtPluginsPlugin
1373
+
1374
+ @classmethod
1375
+ def isRelevant(cls):
1376
+ return isStandaloneMode()
1377
+
1378
+ def onModuleDiscovered(self, module):
1379
+ full_name = module.getFullName()
1380
+
1381
+ if full_name == NuitkaPluginPyQt5QtPluginsPlugin.binding_name + ".QtCore":
1382
+ self.warnUnusedPlugin("Inclusion of Qt plugins.")
1383
+ elif full_name == "PyQt4.QtCore":
1384
+ self.warning(
1385
+ "Support for PyQt4 has been dropped. Please contact Nuitka commercial if you need it."
1386
+ )
1387
+
1388
+
1389
+ class NuitkaPluginPySide2Plugins(NuitkaPluginQtBindingsPluginBase):
1390
+ """This is for plugins of PySide2.
1391
+
1392
+ When Qt loads an image, it may use a plug-in, which in turn used DLLs,
1393
+ which for standalone mode, can cause issues of not having it.
1394
+ """
1395
+
1396
+ plugin_name = "pyside2"
1397
+ plugin_desc = "Required by the PySide2 package."
1398
+
1399
+ binding_name = "PySide2"
1400
+
1401
+ def __init__(self, include_qt_plugins, noinclude_qt_plugins, no_qt_translations):
1402
+ if self._getNuitkaPatchLevel() < 1:
1403
+ self.warning(
1404
+ """\
1405
+ For the standard PySide2 incomplete workarounds are applied. For \
1406
+ full support consider provided information.""",
1407
+ mnemonic="pyside2",
1408
+ )
1409
+
1410
+ if python_version < 0x360:
1411
+ self.sysexit(
1412
+ """\
1413
+ The standard PySide2 is not supported before CPython <3.6. For full support: https://nuitka.net/pages/pyside2.html"""
1414
+ )
1415
+
1416
+ NuitkaPluginQtBindingsPluginBase.__init__(
1417
+ self,
1418
+ include_qt_plugins=include_qt_plugins,
1419
+ noinclude_qt_plugins=noinclude_qt_plugins,
1420
+ no_qt_translations=no_qt_translations,
1421
+ )
1422
+
1423
+ def onModuleEncounter(
1424
+ self, using_module_name, module_name, module_filename, module_kind
1425
+ ):
1426
+ if module_name == self.binding_name and self._getNuitkaPatchLevel() < 1:
1427
+ return True, "Need to monkey patch PySide2 for abstract methods."
1428
+
1429
+ return NuitkaPluginQtBindingsPluginBase.onModuleEncounter(
1430
+ self,
1431
+ using_module_name=using_module_name,
1432
+ module_name=module_name,
1433
+ module_filename=module_filename,
1434
+ module_kind=module_kind,
1435
+ )
1436
+
1437
+ def createPostModuleLoadCode(self, module):
1438
+ """Create code to load after a module was successfully imported.
1439
+
1440
+ For Qt we need to set the library path to the distribution folder
1441
+ we are running from. The code is immediately run after the code
1442
+ and therefore makes sure it's updated properly.
1443
+ """
1444
+
1445
+ for result in NuitkaPluginQtBindingsPluginBase.createPostModuleLoadCode(
1446
+ self, module
1447
+ ):
1448
+ yield result
1449
+
1450
+ if (
1451
+ self._getNuitkaPatchLevel() < 1
1452
+ and module.getFullName() == self.binding_name
1453
+ ):
1454
+ code = r"""
1455
+ # Make them unique and count them.
1456
+ wrapper_count = 0
1457
+ import functools
1458
+ import inspect
1459
+
1460
+ def nuitka_wrap(cls):
1461
+ global wrapper_count
1462
+
1463
+ for attr in cls.__dict__:
1464
+ if attr.startswith("__") and attr.endswith("__"):
1465
+ continue
1466
+
1467
+ value = getattr(cls, attr)
1468
+
1469
+ if type(value).__name__ == "compiled_function":
1470
+ # Only work on overloaded attributes.
1471
+ for base in cls.__bases__:
1472
+ base_value = getattr(base, attr, None)
1473
+
1474
+ if base_value:
1475
+ module = inspect.getmodule(base_value)
1476
+
1477
+ # PySide C stuff does this, and we only need to cover that.
1478
+ if module is None:
1479
+ break
1480
+ else:
1481
+ continue
1482
+
1483
+ wrapper_count += 1
1484
+ wrapper_name = "_wrapped_function_%s_%d" % (attr, wrapper_count)
1485
+
1486
+ signature = inspect.signature(value)
1487
+
1488
+ # Remove annotations junk that cannot be executed.
1489
+ signature = signature.replace(
1490
+ return_annotation = inspect.Signature.empty,
1491
+ parameters=[
1492
+ parameter.replace(default=inspect.Signature.empty,annotation=inspect.Signature.empty)
1493
+ for parameter in
1494
+ signature.parameters.values()
1495
+ ]
1496
+ )
1497
+
1498
+ v = r'''
1499
+ def %(wrapper_name)s%(signature)s:
1500
+ return %(wrapper_name)s.func(%(parameters)s)
1501
+ ''' % {
1502
+ "signature": signature,
1503
+ "parameters": ",".join(signature.parameters),
1504
+ "wrapper_name": wrapper_name
1505
+ }
1506
+
1507
+ # TODO: Nuitka does not currently statically optimize this, might change!
1508
+ exec(
1509
+ v,
1510
+ globals(),
1511
+ )
1512
+
1513
+ wrapper = globals()[wrapper_name]
1514
+ wrapper.func = value
1515
+ wrapper.__defaults__ = value.__defaults__
1516
+
1517
+ setattr(cls, attr, wrapper)
1518
+
1519
+ return cls
1520
+
1521
+ @classmethod
1522
+ def my_init_subclass(cls, *args):
1523
+ return nuitka_wrap(cls)
1524
+
1525
+ import PySide2.QtCore
1526
+ PySide2.QtCore.QAbstractItemModel.__init_subclass__ = my_init_subclass
1527
+ PySide2.QtCore.QAbstractTableModel.__init_subclass__ = my_init_subclass
1528
+ PySide2.QtCore.QObject.__init_subclass__ = my_init_subclass
1529
+ """
1530
+ yield (
1531
+ code,
1532
+ """\
1533
+ Monkey patching classes derived from PySide2 base classes to pass PySide2 checks.""",
1534
+ )
1535
+
1536
+
1537
+ class NuitkaPluginDetectorPySide2Plugins(NuitkaPluginBase):
1538
+ detector_for = NuitkaPluginPySide2Plugins
1539
+
1540
+ def onModuleDiscovered(self, module):
1541
+ if (
1542
+ module.getFullName() == NuitkaPluginPySide2Plugins.binding_name + ".QtCore"
1543
+ and getActiveQtPlugin() is None
1544
+ ):
1545
+ self.warnUnusedPlugin("Making callbacks work and include Qt plugins.")
1546
+
1547
+
1548
+ class NuitkaPluginPySide6Plugins(NuitkaPluginQtBindingsPluginBase):
1549
+ """This is for plugins of PySide6.
1550
+
1551
+ When Qt loads an image, it may use a plug-in, which in turn used DLLs,
1552
+ which for standalone mode, can cause issues of not having it.
1553
+ """
1554
+
1555
+ plugin_name = "pyside6"
1556
+ plugin_desc = "Required by the PySide6 package for standalone mode."
1557
+
1558
+ binding_name = "PySide6"
1559
+
1560
+ def onCompilationStartChecks(self):
1561
+ NuitkaPluginQtBindingsPluginBase.onCompilationStartChecks(self)
1562
+
1563
+ if self._getBindingVersion() < (6, 5, 0):
1564
+ self.warning(
1565
+ """\
1566
+ Make sure to use PySide 6.5.0 or higher, otherwise Qt slots won't work in all cases."""
1567
+ )
1568
+
1569
+ if self._getBindingVersion() < (6, 1, 2):
1570
+ self.warning(
1571
+ """\
1572
+ Make sure to use PySide 6.1.2 or higher, otherwise Qt callbacks to Python won't work."""
1573
+ )
1574
+
1575
+
1576
+ class NuitkaPluginDetectorPySide6Plugins(NuitkaPluginBase):
1577
+ detector_for = NuitkaPluginPySide6Plugins
1578
+
1579
+ def onModuleDiscovered(self, module):
1580
+ if module.getFullName() == NuitkaPluginPySide6Plugins.binding_name + ".QtCore":
1581
+ self.warnUnusedPlugin("Standalone mode support and Qt plugins.")
1582
+
1583
+
1584
+ class NuitkaPluginPyQt6Plugins(NuitkaPluginQtBindingsPluginBase):
1585
+ """This is for plugins of PyQt6.
1586
+
1587
+ When Qt loads an image, it may use a plug-in, which in turn used DLLs,
1588
+ which for standalone mode, can cause issues of not having it.
1589
+ """
1590
+
1591
+ plugin_name = "pyqt6"
1592
+ plugin_desc = "Required by the PyQt6 package for standalone mode."
1593
+
1594
+ binding_name = "PyQt6"
1595
+
1596
+ def __init__(self, include_qt_plugins, noinclude_qt_plugins, no_qt_translations):
1597
+ NuitkaPluginQtBindingsPluginBase.__init__(
1598
+ self,
1599
+ include_qt_plugins=include_qt_plugins,
1600
+ noinclude_qt_plugins=noinclude_qt_plugins,
1601
+ no_qt_translations=no_qt_translations,
1602
+ )
1603
+
1604
+ self.info(
1605
+ """\
1606
+ Support for PyQt6 is not perfect, e.g. Qt threading does not work, so prefer PySide6 if you can."""
1607
+ )
1608
+
1609
+
1610
+ class NuitkaPluginDetectorPyQt6Plugins(NuitkaPluginBase):
1611
+ detector_for = NuitkaPluginPyQt6Plugins
1612
+
1613
+ def onModuleDiscovered(self, module):
1614
+ if module.getFullName() == NuitkaPluginPyQt6Plugins.binding_name + ".QtCore":
1615
+ self.warnUnusedPlugin("Standalone mode support and Qt plugins.")
1616
+
1617
+
1618
+ class NuitkaPluginNoQt(NuitkaPluginBase):
1619
+ """This is a plugins for suppression of all Qt binding plugins."""
1620
+
1621
+ plugin_name = "no-qt"
1622
+ plugin_desc = "Disable inclusion of all Qt bindings."
1623
+ plugin_category = "package-support"
1624
+
1625
+ warned_about = set()
1626
+
1627
+ def onModuleEncounter(
1628
+ self, using_module_name, module_name, module_filename, module_kind
1629
+ ):
1630
+ top_package_name = module_name.getTopLevelPackageName()
1631
+
1632
+ if top_package_name in getQtBindingNames():
1633
+ if isStandaloneMode() and top_package_name not in self.warned_about:
1634
+ self.info(
1635
+ """\
1636
+ Unwanted import of '%(unwanted)s' that is forbidden encountered, preventing \
1637
+ its use. As a result an "ImportError" might be given at run time. Uninstall \
1638
+ it for full compatible behavior with the uncompiled code to debug it."""
1639
+ % {
1640
+ "unwanted": top_package_name,
1641
+ }
1642
+ )
1643
+
1644
+ self.warned_about.add(top_package_name)
1645
+
1646
+ return (False, "Not included due to all Qt bindings disallowed.")
1647
+
1648
+ def getEvaluationConditionControlTags(self):
1649
+ # spell-checker: ignore noqt
1650
+ return {"use_noqt": True}
1651
+
1652
+
1653
+ # Part of "Nuitka", an optimizing Python compiler that is compatible and
1654
+ # integrates with CPython, but also works on its own.
1655
+ #
1656
+ # Licensed under the Apache License, Version 2.0 (the "License");
1657
+ # you may not use this file except in compliance with the License.
1658
+ # You may obtain a copy of the License at
1659
+ #
1660
+ # http://www.apache.org/licenses/LICENSE-2.0
1661
+ #
1662
+ # Unless required by applicable law or agreed to in writing, software
1663
+ # distributed under the License is distributed on an "AS IS" BASIS,
1664
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1665
+ # See the License for the specific language governing permissions and
1666
+ # limitations under the License.