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,1322 @@
1
+ // Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+ // Tools for working with file, and paths cross platform
4
+ // for use in both onefile bootstrap and python compiled
5
+ // program.
6
+
7
+ // This file is included from another C file, help IDEs to still parse it on
8
+ // its own.
9
+ #ifdef __IDE_ONLY__
10
+ #include "nuitka/prelude.h"
11
+ #endif
12
+
13
+ #if defined(__FreeBSD__) || defined(__OpenBSD__)
14
+ #include <sys/sysctl.h>
15
+ #endif
16
+
17
+ #if !defined(_WIN32)
18
+ #include <dlfcn.h>
19
+ #include <fcntl.h>
20
+ #include <libgen.h>
21
+ #if !defined(__wasi__)
22
+ #include <pwd.h>
23
+ #endif
24
+ #include <stdlib.h>
25
+ #include <strings.h>
26
+ #include <sys/mman.h>
27
+ #include <sys/stat.h>
28
+ #include <sys/time.h>
29
+ #include <unistd.h>
30
+ #endif
31
+
32
+ #if defined(__APPLE__)
33
+ #include <mach-o/dyld.h>
34
+ #endif
35
+
36
+ // We are using in onefile bootstrap as well, so copy it.
37
+ #ifndef Py_MIN
38
+ #define Py_MIN(x, y) (((x) > (y)) ? (y) : (x))
39
+ #endif
40
+
41
+ #include "nuitka/environment_variables_system.h"
42
+ #include "nuitka/filesystem_paths.h"
43
+ #include "nuitka/safe_string_ops.h"
44
+
45
+ void normalizePath(filename_char_t *filename) {
46
+ filename_char_t *w = filename;
47
+
48
+ while (*w != 0) {
49
+ // Eliminate duplicate slashes.
50
+ if (*w == FILENAME_SEP_CHAR) {
51
+ while (*(w + 1) == FILENAME_SEP_CHAR) {
52
+ filename_char_t *f = w;
53
+
54
+ for (;;) {
55
+ *f = *(f + 1);
56
+
57
+ if (*f == 0) {
58
+ break;
59
+ }
60
+
61
+ f++;
62
+ }
63
+ }
64
+ }
65
+
66
+ w++;
67
+ }
68
+
69
+ // TODO: Need to also remove "./" and resolve "/../" sequences for best
70
+ // results.
71
+ }
72
+
73
+ #if defined(_WIN32)
74
+ // Replacement for RemoveFileSpecW, slightly smaller, avoids a link library.
75
+ static wchar_t *stripFilenameW(wchar_t *path) {
76
+ wchar_t *last_slash = NULL;
77
+
78
+ while (*path != 0) {
79
+ if (*path == L'\\') {
80
+ last_slash = path;
81
+ }
82
+
83
+ path++;
84
+ }
85
+
86
+ if (last_slash != NULL) {
87
+ *last_slash = 0;
88
+ }
89
+
90
+ return last_slash;
91
+ }
92
+
93
+ filename_char_t *stripBaseFilename(filename_char_t const *filename) {
94
+ static wchar_t result[MAXPATHLEN + 1];
95
+
96
+ copyStringSafeW(result, filename, sizeof(result) / sizeof(wchar_t));
97
+ stripFilenameW(result);
98
+
99
+ return result;
100
+ }
101
+ #else
102
+ filename_char_t *stripBaseFilename(filename_char_t const *filename) {
103
+ static char result[MAXPATHLEN + 1];
104
+ copyStringSafe(result, filename, sizeof(result));
105
+
106
+ return dirname(result);
107
+ }
108
+ #endif
109
+
110
+ #if defined(_WIN32)
111
+ static void makeShortFilename(wchar_t *filename, size_t buffer_size) {
112
+ #ifndef _NUITKA_EXPERIMENTAL_AVOID_SHORT_PATH
113
+ // Query length of result first.
114
+ DWORD length = GetShortPathNameW(filename, NULL, 0);
115
+ if (length == 0) {
116
+ return;
117
+ }
118
+
119
+ wchar_t *short_filename = (wchar_t *)malloc((length + 1) * sizeof(wchar_t));
120
+ DWORD res = GetShortPathNameW(filename, short_filename, length);
121
+ assert(res != 0);
122
+
123
+ if (unlikely(res > length)) {
124
+ abort();
125
+ }
126
+
127
+ filename[0] = 0;
128
+ appendWStringSafeW(filename, short_filename, buffer_size);
129
+
130
+ free(short_filename);
131
+ #endif
132
+ }
133
+
134
+ static void makeShortDirFilename(wchar_t *filename, size_t buffer_size) {
135
+ wchar_t *changed = stripFilenameW(filename);
136
+ if (changed != NULL) {
137
+ changed = wcsdup(changed + 1);
138
+ }
139
+
140
+ // Shorten only the directory name.
141
+ makeShortFilename(filename, buffer_size);
142
+
143
+ if (changed != NULL) {
144
+ appendWCharSafeW(filename, FILENAME_SEP_CHAR, buffer_size);
145
+ appendWStringSafeW(filename, changed, buffer_size);
146
+
147
+ free(changed);
148
+ }
149
+ }
150
+
151
+ #endif
152
+
153
+ #if !defined(_WIN32)
154
+ filename_char_t *_getBinaryPath2(void) {
155
+ static filename_char_t binary_filename[MAXPATHLEN] = {0};
156
+ const size_t buffer_size = sizeof(binary_filename);
157
+
158
+ if (binary_filename[0] != 0) {
159
+ return binary_filename;
160
+ }
161
+
162
+ #if defined(__APPLE__)
163
+ uint32_t bufsize = buffer_size;
164
+ int res = _NSGetExecutablePath(binary_filename, &bufsize);
165
+
166
+ if (unlikely(res != 0)) {
167
+ abort();
168
+ }
169
+ #elif defined(__OpenBSD__) || defined(_AIX) || defined(_NUITKA_EXPERIMENTAL_FORCE_UNIX_BINARY_NAME)
170
+ const char *comm = getOriginalArgv0();
171
+
172
+ bool success = false;
173
+
174
+ if (*comm == '/') {
175
+ copyStringSafe(binary_filename, comm, buffer_size);
176
+ success = true;
177
+ } else {
178
+ if (getcwd(binary_filename, buffer_size) == NULL) {
179
+ abort();
180
+ }
181
+ // Add a separator either way, later removed.
182
+ appendCharSafe(binary_filename, '/', buffer_size);
183
+ appendStringSafe(binary_filename, comm, buffer_size);
184
+
185
+ if (isExecutableFile(binary_filename)) {
186
+ success = true;
187
+ } else {
188
+ char *path_environment_value = strdup(getenv("PATH"));
189
+
190
+ if (path_environment_value != NULL) {
191
+ char *sp;
192
+ char *path = strtok_r(path_environment_value, ":", &sp);
193
+
194
+ while (path != NULL) {
195
+ if (*path != '/') {
196
+ if (getcwd(binary_filename, buffer_size) == NULL) {
197
+ abort();
198
+ }
199
+
200
+ appendCharSafe(binary_filename, '/', buffer_size);
201
+ } else {
202
+ binary_filename[0] = 0;
203
+ }
204
+ appendStringSafe(binary_filename, path, buffer_size);
205
+ appendCharSafe(binary_filename, '/', buffer_size);
206
+ appendStringSafe(binary_filename, comm, buffer_size);
207
+
208
+ if (isExecutableFile(binary_filename)) {
209
+ success = true;
210
+ break;
211
+ }
212
+
213
+ path = strtok_r(NULL, ":", &sp);
214
+ }
215
+
216
+ free(path_environment_value);
217
+ }
218
+ }
219
+ }
220
+
221
+ if (success == true) {
222
+ // fprintf(stderr, "Did resolve binary path %s from PATH %s.\n", comm, binary_filename);
223
+
224
+ // TODO: Once it's fully capable, we ought to use this for all methods
225
+ // for consistency.
226
+ normalizePath(binary_filename);
227
+ // fprintf(stderr, "Did normalize binary path %s from PATH %s.\n", comm, binary_filename);
228
+ } else {
229
+ fprintf(stderr, "Error, cannot resolve binary path %s from PATH or current directory.\n", comm);
230
+ abort();
231
+ }
232
+ #elif defined(__FreeBSD__)
233
+ /* Not all of FreeBSD has /proc file system, so use the appropriate
234
+ * "sysctl" instead.
235
+ */
236
+ int mib[4];
237
+ mib[0] = CTL_KERN;
238
+ mib[1] = KERN_PROC;
239
+ mib[2] = KERN_PROC_PATHNAME;
240
+ mib[3] = -1;
241
+ size_t cb = buffer_size;
242
+ int res = sysctl(mib, 4, binary_filename, &cb, NULL, 0);
243
+
244
+ if (unlikely(res != 0)) {
245
+ abort();
246
+ }
247
+ #elif defined(__wasi__)
248
+ const char *wasi_filename = "program.wasm";
249
+ copyStringSafe(binary_filename, wasi_filename, buffer_size);
250
+ #elif defined(_AIX)
251
+ char proc_link_path[64];
252
+ snprintf(proc_link_path, sizeof(proc_link_path), "/proc/%d/object/a.out", (int)getpid());
253
+
254
+ memset(binary_filename, 0, sizeof(binary_filename));
255
+ ssize_t res = readlink(proc_link_path, binary_filename, buffer_size - 1);
256
+
257
+ if (unlikely(res == -1)) {
258
+ abort();
259
+ }
260
+ #else
261
+ /* The remaining platforms, mostly Linux or compatible. */
262
+
263
+ /* The "readlink" call does not terminate result, so fill zeros there, then
264
+ * it is a proper C string right away. */
265
+ memset(binary_filename, 0, buffer_size);
266
+ ssize_t res = readlink("/proc/self/exe", binary_filename, buffer_size - 1);
267
+
268
+ if (unlikely(res == -1)) {
269
+ abort();
270
+ }
271
+ #endif
272
+ return binary_filename;
273
+ }
274
+ #endif
275
+
276
+ filename_char_t const *getBinaryPath(void) {
277
+ #if defined(_WIN32)
278
+ static filename_char_t binary_filename[MAXPATHLEN] = {0};
279
+
280
+ if (binary_filename[0] != 0) {
281
+ return binary_filename;
282
+ }
283
+
284
+ DWORD res = GetModuleFileNameW(NULL, binary_filename, sizeof(binary_filename) / sizeof(wchar_t));
285
+ if (unlikely(res == 0)) {
286
+ abort();
287
+ }
288
+
289
+ return binary_filename;
290
+ #else
291
+ return _getBinaryPath2();
292
+ #endif
293
+ }
294
+
295
+ bool readFileChunk(FILE_HANDLE file_handle, void *buffer, size_t size) {
296
+ // printf("Reading %d\n", size);
297
+
298
+ #if defined(_WIN32)
299
+ DWORD read_size;
300
+ BOOL bool_res = ReadFile(file_handle, buffer, (DWORD)size, &read_size, NULL);
301
+
302
+ return bool_res && (read_size == size);
303
+ #else
304
+ size_t read_size = fread(buffer, 1, size, file_handle);
305
+
306
+ return read_size == size;
307
+ #endif
308
+ }
309
+
310
+ bool writeFileChunk(FILE_HANDLE target_file, void const *chunk, size_t chunk_size) {
311
+ #if defined(_WIN32)
312
+ DWORD write_size = 0;
313
+ return WriteFile(target_file, chunk, (DWORD)chunk_size, &write_size, NULL);
314
+ #else
315
+ size_t written = fwrite(chunk, 1, chunk_size, target_file);
316
+ return written == chunk_size;
317
+ #endif
318
+ }
319
+
320
+ FILE_HANDLE createFileForWriting(filename_char_t const *filename) {
321
+ #if defined(_WIN32)
322
+ FILE_HANDLE result = CreateFileW(filename, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, NULL);
323
+ #else
324
+ FILE *result = fopen(filename, "wb");
325
+ #endif
326
+
327
+ return result;
328
+ }
329
+
330
+ FILE_HANDLE openFileForReading(filename_char_t const *filename) {
331
+ #if defined(_WIN32)
332
+ FILE_HANDLE result = CreateFileW(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
333
+ #else
334
+ FILE *result = fopen(filename, "rb");
335
+ #endif
336
+
337
+ return result;
338
+ }
339
+
340
+ bool closeFile(FILE_HANDLE target_file) {
341
+ #if defined(_WIN32)
342
+ CloseHandle(target_file);
343
+ return true;
344
+ #else
345
+ int r = fclose(target_file);
346
+
347
+ return r == 0;
348
+ #endif
349
+ }
350
+
351
+ int64_t getFileSize(FILE_HANDLE file_handle) {
352
+ #if defined(_WIN32)
353
+ // TODO: File size is truncated here, but maybe an OK thing.
354
+ DWORD file_size = GetFileSize(file_handle, NULL);
355
+
356
+ if (file_size == INVALID_FILE_SIZE) {
357
+ return -1;
358
+ }
359
+ #else
360
+ int res = fseek(file_handle, 0, SEEK_END);
361
+
362
+ if (unlikely(res != 0)) {
363
+ return -1;
364
+ }
365
+
366
+ long file_size = ftell(file_handle);
367
+
368
+ res = fseek(file_handle, 0, SEEK_SET);
369
+
370
+ if (unlikely(res != 0)) {
371
+ return -1;
372
+ }
373
+ #endif
374
+
375
+ return (int64_t)file_size;
376
+ }
377
+
378
+ #if !defined(_WIN32)
379
+ #if defined(__APPLE__)
380
+ #include <copyfile.h>
381
+ #else
382
+ #if defined(__MSYS__) || defined(__HAIKU__) || defined(__OpenBSD__) || defined(_AIX) || defined(__wasi__)
383
+ static bool sendfile(int output_file, int input_file, off_t *bytesCopied, size_t count) {
384
+ char buffer[32768];
385
+
386
+ *bytesCopied = 0;
387
+
388
+ while (count > 0) {
389
+ ssize_t read_bytes = read(input_file, buffer, Py_MIN(sizeof(buffer), count));
390
+
391
+ if (unlikely(read <= 0)) {
392
+ return false;
393
+ }
394
+
395
+ count -= read_bytes;
396
+
397
+ ssize_t written_bytes = write(output_file, buffer, read_bytes);
398
+
399
+ if (unlikely(written_bytes != read_bytes)) {
400
+ return false;
401
+ }
402
+
403
+ *bytesCopied += written_bytes;
404
+ }
405
+
406
+ return true;
407
+ }
408
+ #elif !defined(__FreeBSD__)
409
+ #include <sys/sendfile.h>
410
+ #endif
411
+ #endif
412
+ #endif
413
+
414
+ #if !defined(_WIN32)
415
+ bool isExecutableFile(filename_char_t const *filename) {
416
+ int mode = getFileMode(filename);
417
+
418
+ if (mode == -1) {
419
+ return false;
420
+ }
421
+ return mode & S_IXUSR;
422
+ }
423
+ #endif
424
+
425
+ int getFileMode(filename_char_t const *filename) {
426
+ #if !defined(_WIN32)
427
+ struct stat fileinfo = {0};
428
+ if (stat(filename, &fileinfo) == -1) {
429
+ return -1;
430
+ }
431
+
432
+ return fileinfo.st_mode;
433
+ #else
434
+ // There is no mode on Windows, but copyFile calls should get it.
435
+ return 0;
436
+ #endif
437
+ }
438
+
439
+ bool copyFile(filename_char_t const *source, filename_char_t const *dest, int mode) {
440
+ #if !defined(_WIN32)
441
+ int input_file = open(source, O_RDONLY);
442
+
443
+ if (input_file == -1) {
444
+ return false;
445
+ }
446
+
447
+ int output_file = creat(dest, mode);
448
+
449
+ if (output_file == -1) {
450
+ close(input_file);
451
+ return false;
452
+ }
453
+
454
+ #if defined(__APPLE__)
455
+ // Use fcopyfile works on FreeBSD and macOS
456
+ bool result = fcopyfile(input_file, output_file, 0, COPYFILE_ALL) == 0;
457
+ #elif defined(__FreeBSD__)
458
+ struct stat input_fileinfo = {0};
459
+ fstat(input_file, &input_fileinfo);
460
+ off_t bytesCopied = 0;
461
+
462
+ bool result = sendfile(output_file, input_file, 0, input_fileinfo.st_size, 0, &bytesCopied, 0);
463
+ #else
464
+ // sendfile will work with on Linux 2.6.33+
465
+ struct stat fileinfo = {0};
466
+ fstat(input_file, &fileinfo);
467
+
468
+ off_t bytesCopied = 0;
469
+ bool result = sendfile(output_file, input_file, &bytesCopied, fileinfo.st_size) != -1;
470
+ #endif
471
+
472
+ close(input_file);
473
+ close(output_file);
474
+
475
+ return result;
476
+ #else
477
+ return CopyFileW(source, dest, 0) != 0;
478
+ #endif
479
+ }
480
+
481
+ bool deleteFile(filename_char_t const *filename) {
482
+ #if defined(_WIN32)
483
+ return DeleteFileW(filename) != 0;
484
+ #else
485
+ return unlink(filename) == 0;
486
+ #endif
487
+ }
488
+
489
+ bool renameFile(filename_char_t const *source, filename_char_t const *dest) {
490
+ // spell-checker: ignore _wrename
491
+ #if defined(_WIN32)
492
+ return _wrename(source, dest) == 0;
493
+ #else
494
+ return rename(source, dest) == 0;
495
+ #endif
496
+ }
497
+
498
+ #include "nuitka/checksum_tools.h"
499
+
500
+ extern error_code_t getLastErrorCode(void) {
501
+ #if defined(_WIN32)
502
+ return GetLastError();
503
+ #else
504
+ return errno;
505
+ #endif
506
+ }
507
+
508
+ #if defined(_WIN32)
509
+ struct MapFileToMemoryInfo {
510
+ bool error;
511
+ DWORD error_code;
512
+ char const *erroring_function;
513
+ unsigned char const *data;
514
+ HANDLE file_handle;
515
+ int64_t file_size;
516
+ HANDLE handle_mapping;
517
+ };
518
+
519
+ static struct MapFileToMemoryInfo mapFileToMemory(filename_char_t const *filename) {
520
+ struct MapFileToMemoryInfo result;
521
+
522
+ result.file_handle = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
523
+ NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
524
+
525
+ if (result.file_handle == INVALID_HANDLE_VALUE) {
526
+ result.error = true;
527
+ result.error_code = GetLastError();
528
+ result.erroring_function = "CreateFileW";
529
+
530
+ return result;
531
+ }
532
+
533
+ result.file_size = getFileSize(result.file_handle);
534
+
535
+ if (result.file_size == -1) {
536
+ result.error = true;
537
+ result.error_code = GetLastError();
538
+ result.erroring_function = "GetFileSize";
539
+
540
+ CloseHandle(result.file_handle);
541
+
542
+ return result;
543
+ }
544
+
545
+ result.handle_mapping = CreateFileMappingW(result.file_handle, NULL, PAGE_READONLY, 0, 0, NULL);
546
+
547
+ if (result.handle_mapping == NULL) {
548
+ result.error = true;
549
+ result.error_code = GetLastError();
550
+ result.erroring_function = "CreateFileMappingW";
551
+
552
+ CloseHandle(result.file_handle);
553
+
554
+ return result;
555
+ }
556
+
557
+ result.data = (unsigned char const *)MapViewOfFile(result.handle_mapping, FILE_MAP_READ, 0, 0, 0);
558
+
559
+ if (unlikely(result.data == NULL)) {
560
+ result.error = true;
561
+ result.error_code = GetLastError();
562
+ result.erroring_function = "MapViewOfFile";
563
+
564
+ CloseHandle(result.handle_mapping);
565
+ CloseHandle(result.file_handle);
566
+
567
+ return result;
568
+ }
569
+
570
+ result.error = false;
571
+ result.error_code = 0;
572
+
573
+ return result;
574
+ }
575
+
576
+ static void unmapFileFromMemory(struct MapFileToMemoryInfo *mapped_file) {
577
+ assert(!mapped_file->error);
578
+
579
+ UnmapViewOfFile(mapped_file->data);
580
+ CloseHandle(mapped_file->handle_mapping);
581
+ CloseHandle(mapped_file->file_handle);
582
+ }
583
+ #else
584
+
585
+ struct MapFileToMemoryInfo {
586
+ bool error;
587
+ int error_code;
588
+ char const *erroring_function;
589
+ unsigned char const *data;
590
+ int file_handle;
591
+ int64_t file_size;
592
+ };
593
+
594
+ static struct MapFileToMemoryInfo mapFileToMemory(filename_char_t const *filename) {
595
+ struct MapFileToMemoryInfo result;
596
+
597
+ result.file_handle = open(filename, O_RDONLY);
598
+
599
+ if (unlikely(result.file_handle == -1)) {
600
+ result.error = true;
601
+ result.error_code = errno;
602
+ result.erroring_function = "open";
603
+ result.file_size = -1;
604
+ return result;
605
+ }
606
+
607
+ result.file_size = lseek(result.file_handle, 0, SEEK_END);
608
+ if (unlikely(result.file_size == -1)) {
609
+ result.error = true;
610
+ result.error_code = errno;
611
+ result.erroring_function = "lseek";
612
+
613
+ close(result.file_handle);
614
+
615
+ return result;
616
+ }
617
+ off_t res = lseek(result.file_handle, 0, SEEK_SET);
618
+
619
+ if (unlikely(res == -1)) {
620
+ result.error = true;
621
+ result.error_code = errno;
622
+ result.erroring_function = "lseek";
623
+
624
+ close(result.file_handle);
625
+
626
+ return result;
627
+ }
628
+
629
+ result.data = (unsigned char const *)mmap(NULL, result.file_size, PROT_READ, MAP_PRIVATE, result.file_handle, 0);
630
+
631
+ if (unlikely(result.data == MAP_FAILED)) {
632
+ result.error = true;
633
+ result.error_code = errno;
634
+ result.erroring_function = "mmap";
635
+
636
+ close(result.file_handle);
637
+
638
+ return result;
639
+ }
640
+
641
+ result.error = false;
642
+ return result;
643
+ }
644
+
645
+ static void unmapFileFromMemory(struct MapFileToMemoryInfo *mapped_file) {
646
+ assert(!mapped_file->error);
647
+
648
+ munmap((void *)mapped_file->data, mapped_file->file_size);
649
+ close(mapped_file->file_handle);
650
+ }
651
+ #endif
652
+
653
+ uint32_t getFileCRC32(filename_char_t const *filename) {
654
+ struct MapFileToMemoryInfo mapped_file = mapFileToMemory(filename);
655
+
656
+ if (mapped_file.error) {
657
+ return 0;
658
+ }
659
+ uint32_t result = calcCRC32(mapped_file.data, (long)mapped_file.file_size);
660
+
661
+ // Lets reserve "0" value for error indication.
662
+ if (result == 0) {
663
+ result = 1;
664
+ }
665
+
666
+ unmapFileFromMemory(&mapped_file);
667
+
668
+ return result;
669
+ }
670
+
671
+ #ifdef _WIN32
672
+
673
+ static DWORD Nuitka_GetFinalPathNameByHandleW(HANDLE hFile, LPWSTR FilePath, DWORD cchFilePath, DWORD dwFlags) {
674
+ typedef DWORD(WINAPI * pfnGetFinalPathNameByHandleW)(HANDLE hFile, LPWSTR FilePath, DWORD cchFilePath,
675
+ DWORD dwFlags);
676
+
677
+ pfnGetFinalPathNameByHandleW fnGetFinalPathNameByHandleW =
678
+ (pfnGetFinalPathNameByHandleW)GetProcAddress(GetModuleHandleA("Kernel32.dll"), "GetFinalPathNameByHandleW");
679
+
680
+ if (fnGetFinalPathNameByHandleW != NULL) {
681
+ return fnGetFinalPathNameByHandleW(hFile, FilePath, cchFilePath, dwFlags);
682
+ } else {
683
+ // There are no symlinks before Windows Vista.
684
+ return 0;
685
+ }
686
+ }
687
+
688
+ static void resolveFileSymbolicLink(wchar_t *resolved_filename, wchar_t const *filename, DWORD resolved_filename_size,
689
+ bool resolve_symlinks) {
690
+ // Resolve any symbolic links in the filename.
691
+ // Copies the resolved path over the top of the parameter.
692
+
693
+ if (resolve_symlinks) {
694
+ // Open the file in the most non-exclusive way possible
695
+ HANDLE file_handle = CreateFileW(filename, 0, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
696
+ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
697
+
698
+ if (unlikely(file_handle == INVALID_HANDLE_VALUE)) {
699
+ abort();
700
+ }
701
+
702
+ // In case, the Windows API for symlinks does not yet exist, just used
703
+ // the unresolved one.
704
+ copyStringSafeW(resolved_filename, filename, resolved_filename_size);
705
+
706
+ // Resolve the path, get the result with a drive letter
707
+ DWORD len = Nuitka_GetFinalPathNameByHandleW(file_handle, resolved_filename, resolved_filename_size,
708
+ FILE_NAME_NORMALIZED | VOLUME_NAME_DOS);
709
+
710
+ CloseHandle(file_handle);
711
+
712
+ if (unlikely(len >= resolved_filename_size)) {
713
+ abort();
714
+ }
715
+
716
+ // Avoid network filenames added by just the resolution, revert it if
717
+ // they are pointing to local drive.
718
+ if (wcsncmp(resolved_filename, L"\\\\?\\", 4) == 0) {
719
+ if (wcscmp(resolved_filename + 4, filename) == 0) {
720
+ copyStringSafeW(resolved_filename, filename, resolved_filename_size);
721
+ } else if (resolved_filename[5] == L':') {
722
+ copyStringSafeW(resolved_filename, resolved_filename + 4, resolved_filename_size);
723
+ }
724
+ }
725
+
726
+ // Avoid network filenames with UNC prefix, they won't work for loading
727
+ // extension modules and other things, Python avoids them too.
728
+ if (wcsncmp(resolved_filename, L"\\\\?\\UNC\\", 8) == 0) {
729
+ copyStringSafeW(resolved_filename, resolved_filename + 6, resolved_filename_size);
730
+ resolved_filename[0] = L'\\';
731
+ }
732
+
733
+ } else {
734
+ copyStringSafeW(resolved_filename, filename, resolved_filename_size);
735
+ }
736
+ }
737
+
738
+ #else
739
+
740
+ static void resolveFileSymbolicLink(char *resolved_filename, char const *filename, size_t resolved_filename_size,
741
+ bool resolve_symlinks) {
742
+ #ifdef __wasi__
743
+ copyStringSafe(resolved_filename, filename, resolved_filename_size);
744
+ #else
745
+ if (resolve_symlinks) {
746
+ // At least on macOS, realpath cannot allocate a buffer, itself, so lets
747
+ // use a local one, only on Linux we could use NULL argument and have a
748
+ // malloc of the resulting value.
749
+ char buffer[MAXPATHLEN];
750
+
751
+ char *result = realpath(filename, buffer);
752
+
753
+ if (unlikely(result == NULL)) {
754
+ abort();
755
+ }
756
+
757
+ copyStringSafe(resolved_filename, buffer, resolved_filename_size);
758
+ } else {
759
+ copyStringSafe(resolved_filename, filename, resolved_filename_size);
760
+ }
761
+ #endif
762
+ }
763
+ #endif
764
+
765
+ #ifdef _WIN32
766
+ wchar_t const *getBinaryFilenameWideChars(bool resolve_symlinks) {
767
+ static wchar_t binary_filename[MAXPATHLEN + 1] = {0};
768
+ static wchar_t binary_filename_resolved[MAXPATHLEN + 1] = {0};
769
+
770
+ wchar_t *buffer = resolve_symlinks ? binary_filename : binary_filename_resolved;
771
+ assert(sizeof(binary_filename) == sizeof(binary_filename_resolved));
772
+
773
+ if (buffer[0] == 0) {
774
+ DWORD res = GetModuleFileNameW(NULL, buffer, sizeof(binary_filename) / sizeof(wchar_t));
775
+ assert(res != 0);
776
+
777
+ // Resolve any symlinks we were invoked via
778
+ resolveFileSymbolicLink(buffer, buffer, sizeof(binary_filename) / sizeof(wchar_t), resolve_symlinks);
779
+ makeShortDirFilename(binary_filename, sizeof(binary_filename) / sizeof(wchar_t));
780
+ }
781
+
782
+ return buffer;
783
+ }
784
+ #endif
785
+
786
+ #ifdef _WIN32
787
+ extern wchar_t const *getBinaryFilenameWideChars(bool resolve_symlinks);
788
+
789
+ char const *getBinaryFilenameHostEncoded(bool resolve_symlinks) {
790
+ static char *binary_filename = NULL;
791
+ static char *binary_filename_resolved = NULL;
792
+
793
+ char *binary_filename_target;
794
+
795
+ if (resolve_symlinks) {
796
+ binary_filename_target = binary_filename_resolved;
797
+ } else {
798
+ binary_filename_target = binary_filename;
799
+ }
800
+
801
+ if (binary_filename_target != NULL) {
802
+ return binary_filename_target;
803
+ }
804
+ wchar_t const *w = getBinaryFilenameWideChars(resolve_symlinks);
805
+
806
+ DWORD bufsize = WideCharToMultiByte(CP_ACP, 0, w, -1, NULL, 0, NULL, NULL);
807
+ assert(bufsize != 0);
808
+
809
+ binary_filename_target = (char *)malloc(bufsize + 1);
810
+ assert(binary_filename_target);
811
+
812
+ DWORD res2 = WideCharToMultiByte(CP_ACP, 0, w, -1, binary_filename_target, bufsize, NULL, NULL);
813
+ assert(res2 != 0);
814
+
815
+ if (unlikely(res2 > bufsize)) {
816
+ abort();
817
+ }
818
+
819
+ return (char const *)binary_filename_target;
820
+ }
821
+
822
+ #else
823
+ char const *getBinaryFilenameHostEncoded(bool resolve_symlinks) {
824
+ const int buffer_size = MAXPATHLEN + 1;
825
+
826
+ static char binary_filename[MAXPATHLEN + 1] = {0};
827
+ static char binary_filename_resolved[MAXPATHLEN + 1] = {0};
828
+
829
+ char *binary_filename_target;
830
+
831
+ if (resolve_symlinks) {
832
+ binary_filename_target = binary_filename_resolved;
833
+ } else {
834
+ binary_filename_target = binary_filename;
835
+ }
836
+
837
+ if (*binary_filename_target != 0) {
838
+ return binary_filename_target;
839
+ }
840
+
841
+ copyStringSafe(binary_filename_target, _getBinaryPath2(), buffer_size);
842
+ resolveFileSymbolicLink(binary_filename_target, binary_filename_target, buffer_size, resolve_symlinks);
843
+
844
+ return binary_filename_target;
845
+ }
846
+ #endif
847
+
848
+ #if defined(_WIN32)
849
+
850
+ // Note: Keep this separate line, must be included before other Windows headers.
851
+ #include <windows.h>
852
+
853
+ #include <shlobj.h>
854
+ #include <shlwapi.h>
855
+
856
+ // For less complete C compilers.
857
+ #ifndef CSIDL_LOCAL_APPDATA
858
+ #define CSIDL_LOCAL_APPDATA 28
859
+ #endif
860
+ #ifndef CSIDL_PROFILE
861
+ #define CSIDL_PROFILE 40
862
+ #endif
863
+
864
+ // spell-checker: ignore csidl
865
+
866
+ static bool appendStringCSIDLPathW(wchar_t *target, int csidl_id, size_t buffer_size) {
867
+ wchar_t path_buffer[MAX_PATH];
868
+ int res = SHGetFolderPathW(NULL, csidl_id, NULL, 0, path_buffer);
869
+
870
+ if (res != S_OK) {
871
+ return false;
872
+ }
873
+ appendWStringSafeW(target, path_buffer, buffer_size);
874
+
875
+ return true;
876
+ }
877
+
878
+ bool expandTemplatePathW(wchar_t *target, wchar_t const *source, size_t buffer_size) {
879
+ target[0] = 0;
880
+
881
+ wchar_t var_name[1024];
882
+ wchar_t *w = NULL;
883
+
884
+ bool var_started = false;
885
+
886
+ while (*source != 0) {
887
+ if (*source == L'{') {
888
+ assert(var_started == false);
889
+ var_started = true;
890
+
891
+ w = var_name;
892
+ *w = 0;
893
+
894
+ source++;
895
+
896
+ continue;
897
+ } else if (*source == L'}') {
898
+ assert(var_started == true);
899
+ var_started = false;
900
+
901
+ *w = 0;
902
+
903
+ bool is_path = false;
904
+
905
+ if (wcsicmp(var_name, L"TEMP") == 0) {
906
+ GetTempPathW((DWORD)buffer_size, target);
907
+ is_path = true;
908
+ } else if (wcsicmp(var_name, L"PROGRAM") == 0) {
909
+ #if _NUITKA_ONEFILE_TEMP_BOOL
910
+ appendWStringSafeW(target, __wargv[0], buffer_size);
911
+ #else
912
+ if (!GetModuleFileNameW(NULL, target, (DWORD)buffer_size)) {
913
+ return false;
914
+ }
915
+ #endif
916
+ } else if (wcsicmp(var_name, L"PROGRAM_BASE") == 0) {
917
+ if (expandTemplatePathW(target, L"{PROGRAM}", buffer_size - wcslen(target)) == false) {
918
+ return false;
919
+ }
920
+
921
+ size_t length = wcslen(target);
922
+
923
+ if ((length >= 4) && (wcsicmp(target + length - 4, L".exe") == 0)) {
924
+ target[length - 4] = 0;
925
+ }
926
+ } else if (wcsicmp(var_name, L"PROGRAM_DIR") == 0) {
927
+ if (expandTemplatePathW(target, L"{PROGRAM}", buffer_size - wcslen(target)) == false) {
928
+ return false;
929
+ }
930
+
931
+ stripFilenameW(target);
932
+ } else if (wcsicmp(var_name, L"PID") == 0) {
933
+ // Python binaries from onefile use onefile parent pid
934
+ environment_char_t const *environment_value = NULL;
935
+
936
+ #if _NUITKA_ONEFILE_MODE
937
+ environment_value = getEnvironmentVariable("NUITKA_ONEFILE_PARENT");
938
+ #endif
939
+ if (environment_value != NULL) {
940
+ checkWStringNumber(environment_value);
941
+
942
+ appendWStringSafeW(target, getEnvironmentVariable("NUITKA_ONEFILE_PARENT"), buffer_size);
943
+ } else {
944
+ char pid_buffer[128];
945
+ snprintf(pid_buffer, sizeof(pid_buffer), "%ld", GetCurrentProcessId());
946
+ appendStringSafeW(target, pid_buffer, buffer_size);
947
+ }
948
+ } else if (wcsicmp(var_name, L"HOME") == 0) {
949
+ if (appendStringCSIDLPathW(target, CSIDL_PROFILE, buffer_size) == false) {
950
+ return false;
951
+ }
952
+ is_path = true;
953
+ } else if (wcsicmp(var_name, L"CACHE_DIR") == 0) {
954
+ if (appendStringCSIDLPathW(target, CSIDL_LOCAL_APPDATA, buffer_size) == false) {
955
+ return false;
956
+ }
957
+ is_path = true;
958
+ #ifdef NUITKA_COMPANY_NAME
959
+ } else if (wcsicmp(var_name, L"COMPANY") == 0) {
960
+ appendWStringSafeW(target, L"" NUITKA_COMPANY_NAME, buffer_size);
961
+ #endif
962
+ #ifdef NUITKA_PRODUCT_NAME
963
+ } else if (wcsicmp(var_name, L"PRODUCT") == 0) {
964
+ appendWStringSafeW(target, L"" NUITKA_PRODUCT_NAME, buffer_size);
965
+ #endif
966
+ #ifdef NUITKA_VERSION_COMBINED
967
+ } else if (wcsicmp(var_name, L"VERSION") == 0) {
968
+ appendWStringSafeW(target, L"" NUITKA_VERSION_COMBINED, buffer_size);
969
+ #endif
970
+ } else if (wcsicmp(var_name, L"TIME") == 0) {
971
+ environment_char_t const *environment_value = NULL;
972
+
973
+ #if _NUITKA_ONEFILE_MODE
974
+ environment_value = getEnvironmentVariable("NUITKA_ONEFILE_START");
975
+ #endif
976
+
977
+ if (environment_value != NULL) {
978
+ appendWStringSafeW(target, getEnvironmentVariable("NUITKA_ONEFILE_START"), buffer_size);
979
+ } else {
980
+ wchar_t time_buffer[1024];
981
+
982
+ // spell-checker: ignore LPFILETIME
983
+ __int64 time = 0;
984
+ assert(sizeof(time) == sizeof(FILETIME));
985
+ GetSystemTimeAsFileTime((LPFILETIME)&time);
986
+
987
+ swprintf(time_buffer, sizeof(time_buffer), L"%lld", time);
988
+
989
+ #if _NUITKA_ONEFILE_MODE
990
+ setEnvironmentVariable("NUITKA_ONEFILE_START", time_buffer);
991
+ #endif
992
+ appendWStringSafeW(target, time_buffer, buffer_size);
993
+ }
994
+
995
+ } else {
996
+ return false;
997
+ }
998
+
999
+ // Skip over appended stuff.
1000
+ while (*target) {
1001
+ target++;
1002
+ buffer_size -= 1;
1003
+ }
1004
+
1005
+ if (is_path) {
1006
+ while (*(target - 1) == FILENAME_SEP_CHAR) {
1007
+ target--;
1008
+ *target = 0;
1009
+ buffer_size += 1;
1010
+ }
1011
+ }
1012
+
1013
+ w = NULL;
1014
+ source++;
1015
+
1016
+ continue;
1017
+ }
1018
+
1019
+ if (w != NULL) {
1020
+ *w++ = *source++;
1021
+ continue;
1022
+ }
1023
+
1024
+ if (buffer_size < 1) {
1025
+ return false;
1026
+ }
1027
+
1028
+ *target++ = *source++;
1029
+ *target = 0;
1030
+ buffer_size -= 1;
1031
+ }
1032
+
1033
+ *target = 0;
1034
+
1035
+ assert(var_started == false);
1036
+ return true;
1037
+ }
1038
+
1039
+ #else
1040
+
1041
+ bool expandTemplatePath(char *target, char const *source, size_t buffer_size) {
1042
+ target[0] = 0;
1043
+
1044
+ char var_name[1024];
1045
+ char *w = NULL;
1046
+
1047
+ NUITKA_MAY_BE_UNUSED bool var_started = false;
1048
+
1049
+ while (*source != 0) {
1050
+ if (*source == '{') {
1051
+ assert(var_started == false);
1052
+ var_started = true;
1053
+
1054
+ w = var_name;
1055
+ *w = 0;
1056
+
1057
+ source++;
1058
+
1059
+ continue;
1060
+ } else if (*source == '}') {
1061
+ assert(var_started == true);
1062
+ var_started = false;
1063
+ *w = 0;
1064
+
1065
+ bool is_path = false;
1066
+
1067
+ if (strcasecmp(var_name, "TEMP") == 0) {
1068
+ char const *tmp_dir = getenv("TMPDIR");
1069
+ if (tmp_dir == NULL) {
1070
+ tmp_dir = "/tmp";
1071
+ }
1072
+
1073
+ appendStringSafe(target, tmp_dir, buffer_size);
1074
+ is_path = true;
1075
+ } else if (strcasecmp(var_name, "PROGRAM") == 0) {
1076
+ char const *exe_name = getBinaryFilenameHostEncoded(false);
1077
+
1078
+ appendStringSafe(target, exe_name, buffer_size);
1079
+ } else if (strcasecmp(var_name, "PROGRAM_BASE") == 0) {
1080
+ if (expandTemplatePath(target, "{PROGRAM}", buffer_size - strlen(target)) == false) {
1081
+ return false;
1082
+ }
1083
+
1084
+ size_t length = strlen(target);
1085
+
1086
+ if ((length >= 4) && (strcasecmp(target + length - 4, ".bin") == 0)) {
1087
+ target[length - 4] = 0;
1088
+ }
1089
+ } else if (strcasecmp(var_name, "PROGRAM_DIR") == 0) {
1090
+ if (expandTemplatePath(target, "{PROGRAM}", buffer_size - strlen(target)) == false) {
1091
+ return false;
1092
+ }
1093
+
1094
+ size_t length = strlen(target);
1095
+
1096
+ // TODO: We should have an inplace strip dirname function, like for
1097
+ // Win32 stripFilenameW, but that then knows the length and check
1098
+ // if that empties the string, but this works for now.
1099
+ while (true) {
1100
+ if (length == 0) {
1101
+ return false;
1102
+ }
1103
+
1104
+ if (target[length] == '/') {
1105
+ break;
1106
+ }
1107
+
1108
+ target[length] = 0;
1109
+ }
1110
+
1111
+ is_path = true;
1112
+ } else if (strcasecmp(var_name, "PID") == 0) {
1113
+ // Python binaries from onefile use onefile parent pid
1114
+ environment_char_t const *environment_value = NULL;
1115
+
1116
+ #if _NUITKA_ONEFILE_MODE
1117
+ environment_value = getEnvironmentVariable("NUITKA_ONEFILE_PARENT");
1118
+ #endif
1119
+ if (environment_value != NULL) {
1120
+ checkStringNumber(environment_value);
1121
+
1122
+ appendStringSafe(target, getEnvironmentVariable("NUITKA_ONEFILE_PARENT"), buffer_size);
1123
+ } else {
1124
+ char pid_buffer[128];
1125
+
1126
+ snprintf(pid_buffer, sizeof(pid_buffer), "%d", getpid());
1127
+
1128
+ appendStringSafe(target, pid_buffer, buffer_size);
1129
+ }
1130
+ } else if (strcasecmp(var_name, "HOME") == 0) {
1131
+ char const *home_path = getenv("HOME");
1132
+ if (home_path == NULL) {
1133
+ #ifdef __wasi__
1134
+ return false;
1135
+ #else
1136
+ struct passwd *pw_data = getpwuid(getuid());
1137
+
1138
+ if (unlikely(pw_data == NULL)) {
1139
+ return false;
1140
+ }
1141
+
1142
+ home_path = pw_data->pw_dir;
1143
+ #endif
1144
+ }
1145
+
1146
+ appendStringSafe(target, home_path, buffer_size);
1147
+ is_path = true;
1148
+ } else if (strcasecmp(var_name, "CACHE_DIR") == 0) {
1149
+ char const *xdg_cache_home = getenv("XDG_CACHE_HOME");
1150
+
1151
+ if (xdg_cache_home != NULL && xdg_cache_home[0] == '/') {
1152
+ appendStringSafe(target, xdg_cache_home, buffer_size);
1153
+ } else {
1154
+ if (expandTemplatePath(target, "{HOME}/.cache", buffer_size - strlen(target)) == false) {
1155
+ return false;
1156
+ }
1157
+ }
1158
+ is_path = true;
1159
+ #ifdef NUITKA_COMPANY_NAME
1160
+ } else if (strcasecmp(var_name, "COMPANY") == 0) {
1161
+ appendStringSafe(target, NUITKA_COMPANY_NAME, buffer_size);
1162
+ #endif
1163
+ #ifdef NUITKA_PRODUCT_NAME
1164
+ } else if (strcasecmp(var_name, "PRODUCT") == 0) {
1165
+ appendStringSafe(target, NUITKA_PRODUCT_NAME, buffer_size);
1166
+ #endif
1167
+ #ifdef NUITKA_VERSION_COMBINED
1168
+ } else if (strcasecmp(var_name, "VERSION") == 0) {
1169
+ appendStringSafe(target, NUITKA_VERSION_COMBINED, buffer_size);
1170
+ #endif
1171
+ } else if (strcasecmp(var_name, "TIME") == 0) {
1172
+ environment_char_t const *environment_value = NULL;
1173
+
1174
+ #if _NUITKA_ONEFILE_MODE
1175
+ environment_value = getEnvironmentVariable("NUITKA_ONEFILE_START");
1176
+ #endif
1177
+
1178
+ if (environment_value != NULL) {
1179
+ appendStringSafe(target, getEnvironmentVariable("NUITKA_ONEFILE_START"), buffer_size);
1180
+ } else {
1181
+ char time_buffer[1024];
1182
+
1183
+ struct timeval current_time;
1184
+ gettimeofday(&current_time, NULL);
1185
+ snprintf(time_buffer, sizeof(time_buffer), "%ld_%ld", current_time.tv_sec,
1186
+ (long)current_time.tv_usec);
1187
+
1188
+ #if _NUITKA_ONEFILE_MODE
1189
+ setEnvironmentVariable("NUITKA_ONEFILE_START", time_buffer);
1190
+ #endif
1191
+
1192
+ appendStringSafe(target, time_buffer, buffer_size);
1193
+ }
1194
+ } else {
1195
+ return false;
1196
+ }
1197
+ // Skip over appended stuff.
1198
+ while (*target) {
1199
+ target++;
1200
+ buffer_size -= 1;
1201
+ }
1202
+
1203
+ if (is_path) {
1204
+ while (*(target - 1) == FILENAME_SEP_CHAR) {
1205
+ target--;
1206
+ *target = 0;
1207
+ buffer_size += 1;
1208
+ }
1209
+ }
1210
+
1211
+ w = NULL;
1212
+ source++;
1213
+
1214
+ continue;
1215
+ }
1216
+
1217
+ if (w != NULL) {
1218
+ *w++ = *source++;
1219
+ continue;
1220
+ }
1221
+
1222
+ if (buffer_size < 1) {
1223
+ return false;
1224
+ }
1225
+
1226
+ *target++ = *source++;
1227
+ *target = 0;
1228
+ buffer_size -= 1;
1229
+ }
1230
+
1231
+ *target = 0;
1232
+
1233
+ assert(var_started == false);
1234
+ return true;
1235
+ }
1236
+
1237
+ #endif
1238
+
1239
+ #if _NUITKA_DLL_MODE || _NUITKA_MODULE_MODE
1240
+ #if defined(_WIN32)
1241
+ // Small helper function to get current DLL handle, spell-checker: ignore lpcstr
1242
+ static HMODULE getDllModuleHandle(void) {
1243
+ static HMODULE hm = NULL;
1244
+
1245
+ if (hm == NULL) {
1246
+ int res =
1247
+ GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
1248
+ (LPCSTR)&getDllModuleHandle, &hm);
1249
+ assert(res != 0);
1250
+ }
1251
+
1252
+ assert(hm != NULL);
1253
+ return hm;
1254
+ }
1255
+ #endif
1256
+
1257
+ static filename_char_t const *getDllFilename(void) {
1258
+ #if defined(_WIN32)
1259
+ static WCHAR dll_filename[MAXPATHLEN + 1] = {0};
1260
+
1261
+ if (dll_filename[0] == 0) {
1262
+ int res = GetModuleFileNameW(getDllModuleHandle(), dll_filename, MAXPATHLEN);
1263
+ assert(res != 0);
1264
+
1265
+ makeShortDirFilename(dll_filename, sizeof(dll_filename) / sizeof(wchar_t));
1266
+ }
1267
+
1268
+ return dll_filename;
1269
+ #else
1270
+ Dl_info where;
1271
+
1272
+ {
1273
+ NUITKA_MAY_BE_UNUSED int res = dladdr((void *)getDllDirectory, &where);
1274
+ assert(res != 0);
1275
+ }
1276
+
1277
+ return where.dli_fname;
1278
+ #endif
1279
+ }
1280
+
1281
+ filename_char_t const *getDllDirectory(void) {
1282
+ #if defined(_WIN32)
1283
+ static WCHAR path[MAXPATHLEN + 1] = {0};
1284
+ if (path[0] == 0) {
1285
+ copyStringSafeFilename(path, getDllFilename(), MAXPATHLEN);
1286
+ stripFilenameW(path);
1287
+ }
1288
+
1289
+ return path;
1290
+ #else
1291
+ // Need to cache it, as dirname modifies stuff.
1292
+ static char const *result = NULL;
1293
+
1294
+ if (result == NULL) {
1295
+ Dl_info where;
1296
+
1297
+ {
1298
+ NUITKA_MAY_BE_UNUSED int res = dladdr((void *)getDllDirectory, &where);
1299
+ assert(res != 0);
1300
+ }
1301
+
1302
+ result = dirname((char *)strdup(where.dli_fname));
1303
+ }
1304
+
1305
+ return result;
1306
+ #endif
1307
+ }
1308
+ #endif
1309
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
1310
+ // integrates with CPython, but also works on its own.
1311
+ //
1312
+ // Licensed under the Apache License, Version 2.0 (the "License");
1313
+ // you may not use this file except in compliance with the License.
1314
+ // You may obtain a copy of the License at
1315
+ //
1316
+ // http://www.apache.org/licenses/LICENSE-2.0
1317
+ //
1318
+ // Unless required by applicable law or agreed to in writing, software
1319
+ // distributed under the License is distributed on an "AS IS" BASIS,
1320
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1321
+ // See the License for the specific language governing permissions and
1322
+ // limitations under the License.