Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.4.8__cp311-cp311-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 (704) hide show
  1. Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.4.8.data/scripts/nuitka-run.cmd +9 -9
  2. Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.4.8.data/scripts/nuitka.cmd +15 -15
  3. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/METADATA +4 -3
  4. Nuitka_winsvc-2.4.8.dist-info/RECORD +954 -0
  5. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +18 -17
  7. nuitka/BytecodeCaching.py +24 -20
  8. nuitka/Bytecodes.py +23 -19
  9. nuitka/CacheCleanup.py +28 -23
  10. nuitka/Constants.py +19 -17
  11. nuitka/Errors.py +23 -17
  12. nuitka/HardImportRegistry.py +400 -0
  13. nuitka/MainControl.py +200 -112
  14. nuitka/ModuleRegistry.py +83 -20
  15. nuitka/OptionParsing.py +368 -175
  16. nuitka/Options.py +632 -213
  17. nuitka/OutputDirectories.py +40 -21
  18. nuitka/PostProcessing.py +73 -50
  19. nuitka/Progress.py +58 -24
  20. nuitka/PythonFlavors.py +141 -32
  21. nuitka/PythonOperators.py +18 -17
  22. nuitka/PythonVersions.py +106 -19
  23. nuitka/Serialization.py +68 -55
  24. nuitka/SourceCodeReferences.py +19 -17
  25. nuitka/Tracing.py +108 -70
  26. nuitka/TreeXML.py +31 -26
  27. nuitka/Variables.py +39 -41
  28. nuitka/Version.py +21 -7
  29. nuitka/__init__.py +5 -4
  30. nuitka/__main__.py +95 -29
  31. nuitka/__past__.py +44 -34
  32. nuitka/build/Backend.scons +202 -140
  33. nuitka/build/CCompilerVersion.scons +39 -31
  34. nuitka/build/DataComposerInterface.py +20 -17
  35. nuitka/build/Onefile.scons +50 -54
  36. nuitka/build/SconsCaching.py +93 -90
  37. nuitka/build/SconsCompilerSettings.py +157 -69
  38. nuitka/build/SconsHacks.py +25 -19
  39. nuitka/build/SconsInterface.py +154 -54
  40. nuitka/build/SconsProgress.py +19 -18
  41. nuitka/build/SconsSpawn.py +62 -33
  42. nuitka/build/SconsUtils.py +147 -55
  43. nuitka/build/__init__.py +5 -4
  44. nuitka/build/include/nuitka/allocator.h +105 -22
  45. nuitka/build/include/nuitka/builtins.h +17 -17
  46. nuitka/build/include/nuitka/calling.h +18 -18
  47. nuitka/build/include/nuitka/checkers.h +17 -18
  48. nuitka/build/include/nuitka/checksum_tools.h +14 -19
  49. nuitka/build/include/nuitka/compiled_asyncgen.h +18 -18
  50. nuitka/build/include/nuitka/compiled_cell.h +33 -18
  51. nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
  52. nuitka/build/include/nuitka/compiled_frame.h +91 -53
  53. nuitka/build/include/nuitka/compiled_function.h +42 -20
  54. nuitka/build/include/nuitka/compiled_generator.h +24 -18
  55. nuitka/build/include/nuitka/compiled_method.h +17 -18
  56. nuitka/build/include/nuitka/constants.h +29 -18
  57. nuitka/build/include/nuitka/constants_blob.h +17 -17
  58. nuitka/build/include/nuitka/environment_variables.h +30 -0
  59. nuitka/build/include/nuitka/environment_variables_system.h +45 -0
  60. nuitka/build/include/nuitka/exception_groups.h +23 -26
  61. nuitka/build/include/nuitka/exceptions.h +593 -190
  62. nuitka/build/include/nuitka/filesystem_paths.h +26 -20
  63. nuitka/build/include/nuitka/freelists.h +38 -18
  64. nuitka/build/include/nuitka/helper/attributes.h +24 -18
  65. nuitka/build/include/nuitka/helper/boolean.h +17 -17
  66. nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
  67. nuitka/build/include/nuitka/helper/bytes.h +14 -15
  68. nuitka/build/include/nuitka/helper/calling_generated.h +17 -17
  69. nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
  70. nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
  71. nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
  72. nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
  73. nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
  74. nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
  75. nuitka/build/include/nuitka/helper/complex.h +17 -17
  76. nuitka/build/include/nuitka/helper/dictionaries.h +24 -22
  77. nuitka/build/include/nuitka/helper/floats.h +17 -18
  78. nuitka/build/include/nuitka/helper/import_hard.h +25 -17
  79. nuitka/build/include/nuitka/helper/indexes.h +17 -18
  80. nuitka/build/include/nuitka/helper/ints.h +32 -20
  81. nuitka/build/include/nuitka/helper/iterators.h +17 -17
  82. nuitka/build/include/nuitka/helper/lists.h +26 -24
  83. nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
  84. nuitka/build/include/nuitka/helper/mappings.h +17 -18
  85. nuitka/build/include/nuitka/helper/operations.h +17 -17
  86. nuitka/build/include/nuitka/helper/operations_binary_add.h +17 -17
  87. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
  88. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
  89. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
  90. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
  91. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
  92. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
  93. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
  94. nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
  95. nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
  96. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
  97. nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
  98. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
  99. nuitka/build/include/nuitka/helper/operations_binary_sub.h +17 -17
  100. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
  101. nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
  102. nuitka/build/include/nuitka/helper/operations_inplace_add.h +17 -17
  103. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
  104. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
  105. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
  106. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
  107. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
  108. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
  109. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
  110. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
  111. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
  112. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
  113. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
  114. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +17 -17
  115. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
  116. nuitka/build/include/nuitka/helper/raising.h +29 -17
  117. nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
  118. nuitka/build/include/nuitka/helper/richcomparisons.h +14 -14
  119. nuitka/build/include/nuitka/helper/sequences.h +19 -13
  120. nuitka/build/include/nuitka/helper/sets.h +11 -12
  121. nuitka/build/include/nuitka/helper/slices.h +31 -25
  122. nuitka/build/include/nuitka/helper/strings.h +16 -17
  123. nuitka/build/include/nuitka/helper/subscripts.h +18 -201
  124. nuitka/build/include/nuitka/helper/tuples.h +64 -52
  125. nuitka/build/include/nuitka/helpers.h +38 -20
  126. nuitka/build/include/nuitka/importing.h +28 -21
  127. nuitka/build/include/nuitka/jit_sources.h +25 -0
  128. nuitka/build/include/nuitka/prelude.h +128 -46
  129. nuitka/build/include/nuitka/printing.h +22 -17
  130. nuitka/build/include/nuitka/python_pgo.h +19 -18
  131. nuitka/build/include/nuitka/safe_string_ops.h +20 -18
  132. nuitka/build/include/nuitka/threading.h +32 -33
  133. nuitka/build/include/nuitka/tracing.h +28 -18
  134. nuitka/build/include/nuitka/type_aliases.h +27 -0
  135. nuitka/build/include/nuitka/unfreezing.h +29 -23
  136. nuitka/build/inline_copy/bin/scons.py +14 -0
  137. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
  138. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
  139. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  140. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  141. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  142. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  143. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  144. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  145. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  146. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  147. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  148. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  149. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  150. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  151. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  152. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  153. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  154. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  155. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  156. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  157. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  158. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  159. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  160. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  161. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
  162. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  163. nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
  164. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  165. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  166. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  167. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  168. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  169. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  170. nuitka/build/static_src/CompiledAsyncgenType.c +176 -182
  171. nuitka/build/static_src/CompiledCellType.c +63 -40
  172. nuitka/build/static_src/CompiledCodeHelpers.c +181 -128
  173. nuitka/build/static_src/CompiledCoroutineType.c +196 -203
  174. nuitka/build/static_src/CompiledFrameType.c +287 -133
  175. nuitka/build/static_src/CompiledFunctionType.c +389 -95
  176. nuitka/build/static_src/CompiledGeneratorType.c +376 -252
  177. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +185 -198
  178. nuitka/build/static_src/CompiledMethodType.c +83 -71
  179. nuitka/build/static_src/HelpersAllocator.c +88 -19
  180. nuitka/build/static_src/HelpersAttributes.c +33 -54
  181. nuitka/build/static_src/HelpersBuiltin.c +43 -33
  182. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
  183. nuitka/build/static_src/HelpersBytes.c +19 -20
  184. nuitka/build/static_src/HelpersCalling.c +33 -30
  185. nuitka/build/static_src/HelpersCallingGenerated.c +1000 -181
  186. nuitka/build/static_src/HelpersChecksumTools.c +35 -21
  187. nuitka/build/static_src/HelpersClasses.c +17 -17
  188. nuitka/build/static_src/HelpersComparisonEq.c +518 -492
  189. nuitka/build/static_src/HelpersComparisonEqUtils.c +21 -19
  190. nuitka/build/static_src/HelpersComparisonGe.c +513 -497
  191. nuitka/build/static_src/HelpersComparisonGt.c +512 -496
  192. nuitka/build/static_src/HelpersComparisonLe.c +513 -497
  193. nuitka/build/static_src/HelpersComparisonLt.c +512 -496
  194. nuitka/build/static_src/HelpersComparisonNe.c +520 -492
  195. nuitka/build/static_src/HelpersConsole.c +96 -0
  196. nuitka/build/static_src/HelpersConstantsBlob.c +542 -519
  197. nuitka/build/static_src/HelpersDeepcopy.c +33 -33
  198. nuitka/build/static_src/HelpersDictionaries.c +51 -29
  199. nuitka/build/static_src/HelpersDictionariesGenerated.c +177 -68
  200. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  201. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  202. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
  203. nuitka/build/static_src/HelpersExceptions.c +161 -50
  204. nuitka/build/static_src/HelpersFiles.c +37 -17
  205. nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
  206. nuitka/build/static_src/HelpersFloats.c +37 -31
  207. nuitka/build/static_src/HelpersHeapStorage.c +21 -17
  208. nuitka/build/static_src/HelpersImport.c +48 -20
  209. nuitka/build/static_src/HelpersImportHard.c +53 -17
  210. nuitka/build/static_src/HelpersJitSources.c +46 -0
  211. nuitka/build/static_src/HelpersLists.c +140 -50
  212. nuitka/build/static_src/HelpersListsGenerated.c +41 -41
  213. nuitka/build/static_src/HelpersMappings.c +17 -17
  214. nuitka/build/static_src/HelpersMatching.c +137 -51
  215. nuitka/build/static_src/HelpersOperationBinaryAdd.c +173 -146
  216. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +99 -52
  217. nuitka/build/static_src/HelpersOperationBinaryBitand.c +50 -50
  218. nuitka/build/static_src/HelpersOperationBinaryBitor.c +50 -50
  219. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +50 -50
  220. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +41 -41
  221. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
  222. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +41 -41
  223. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
  224. nuitka/build/static_src/HelpersOperationBinaryLshift.c +47 -47
  225. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +24 -24
  226. nuitka/build/static_src/HelpersOperationBinaryMod.c +107 -107
  227. nuitka/build/static_src/HelpersOperationBinaryMult.c +81 -75
  228. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
  229. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +41 -41
  230. nuitka/build/static_src/HelpersOperationBinaryPow.c +44 -44
  231. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
  232. nuitka/build/static_src/HelpersOperationBinaryRshift.c +47 -47
  233. nuitka/build/static_src/HelpersOperationBinarySub.c +80 -80
  234. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +41 -41
  235. nuitka/build/static_src/HelpersOperationInplaceAdd.c +171 -153
  236. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
  237. nuitka/build/static_src/HelpersOperationInplaceBitand.c +53 -53
  238. nuitka/build/static_src/HelpersOperationInplaceBitor.c +53 -53
  239. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +53 -53
  240. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +62 -62
  241. nuitka/build/static_src/HelpersOperationInplaceLshift.c +44 -44
  242. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +37 -37
  243. nuitka/build/static_src/HelpersOperationInplaceMod.c +134 -134
  244. nuitka/build/static_src/HelpersOperationInplaceMult.c +78 -78
  245. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +62 -62
  246. nuitka/build/static_src/HelpersOperationInplacePow.c +62 -62
  247. nuitka/build/static_src/HelpersOperationInplaceRshift.c +44 -44
  248. nuitka/build/static_src/HelpersOperationInplaceSub.c +112 -112
  249. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +62 -62
  250. nuitka/build/static_src/HelpersProfiling.c +24 -23
  251. nuitka/build/static_src/HelpersPythonPgo.c +22 -22
  252. nuitka/build/static_src/HelpersRaising.c +88 -20
  253. nuitka/build/static_src/HelpersSafeStrings.c +34 -22
  254. nuitka/build/static_src/HelpersSequences.c +18 -19
  255. nuitka/build/static_src/HelpersSlices.c +29 -23
  256. nuitka/build/static_src/HelpersStrings.c +234 -37
  257. nuitka/build/static_src/HelpersTuples.c +46 -34
  258. nuitka/build/static_src/HelpersTypes.c +68 -23
  259. nuitka/build/static_src/InspectPatcher.c +108 -27
  260. nuitka/build/static_src/MainProgram.c +359 -263
  261. nuitka/build/static_src/MetaPathBasedLoader.c +367 -242
  262. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
  263. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
  264. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +97 -22
  265. nuitka/build/static_src/OnefileBootstrap.c +276 -164
  266. nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
  267. nuitka/code_generation/AsyncgenCodes.py +19 -17
  268. nuitka/code_generation/AttributeCodes.py +31 -27
  269. nuitka/code_generation/BinaryOperationHelperDefinitions.py +24 -20
  270. nuitka/code_generation/BranchCodes.py +19 -17
  271. nuitka/code_generation/BuiltinCodes.py +20 -17
  272. nuitka/code_generation/CallCodes.py +19 -17
  273. nuitka/code_generation/ClassCodes.py +19 -17
  274. nuitka/code_generation/CodeGeneration.py +48 -27
  275. nuitka/code_generation/CodeHelperSelection.py +19 -17
  276. nuitka/code_generation/CodeHelpers.py +24 -20
  277. nuitka/code_generation/CodeObjectCodes.py +34 -24
  278. nuitka/code_generation/ComparisonCodes.py +38 -20
  279. nuitka/code_generation/ComparisonHelperDefinitions.py +19 -17
  280. nuitka/code_generation/ConditionalCodes.py +19 -17
  281. nuitka/code_generation/ConstantCodes.py +82 -28
  282. nuitka/code_generation/Contexts.py +152 -26
  283. nuitka/code_generation/CoroutineCodes.py +19 -17
  284. nuitka/code_generation/CtypesCodes.py +19 -17
  285. nuitka/code_generation/DictCodes.py +25 -23
  286. nuitka/code_generation/Emission.py +21 -18
  287. nuitka/code_generation/ErrorCodes.py +27 -33
  288. nuitka/code_generation/EvalCodes.py +24 -20
  289. nuitka/code_generation/ExceptionCodes.py +27 -18
  290. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +20 -17
  291. nuitka/code_generation/ExpressionCodes.py +19 -17
  292. nuitka/code_generation/FrameCodes.py +24 -20
  293. nuitka/code_generation/FunctionCodes.py +24 -21
  294. nuitka/code_generation/GeneratorCodes.py +23 -20
  295. nuitka/code_generation/GlobalConstants.py +43 -23
  296. nuitka/code_generation/GlobalsLocalsCodes.py +21 -19
  297. nuitka/code_generation/IdCodes.py +19 -17
  298. nuitka/code_generation/ImportCodes.py +90 -50
  299. nuitka/code_generation/Indentation.py +23 -22
  300. nuitka/code_generation/IndexCodes.py +19 -17
  301. nuitka/code_generation/InjectCCodes.py +14 -12
  302. nuitka/code_generation/IntegerCodes.py +19 -17
  303. nuitka/code_generation/IteratorCodes.py +19 -17
  304. nuitka/code_generation/JitCodes.py +44 -0
  305. nuitka/code_generation/LabelCodes.py +19 -17
  306. nuitka/code_generation/LineNumberCodes.py +19 -17
  307. nuitka/code_generation/ListCodes.py +32 -36
  308. nuitka/code_generation/LoaderCodes.py +22 -17
  309. nuitka/code_generation/LocalsDictCodes.py +56 -32
  310. nuitka/code_generation/LoopCodes.py +19 -17
  311. nuitka/code_generation/MatchCodes.py +42 -22
  312. nuitka/code_generation/ModuleCodes.py +43 -25
  313. nuitka/code_generation/Namify.py +27 -23
  314. nuitka/code_generation/NetworkxCodes.py +51 -0
  315. nuitka/code_generation/OperationCodes.py +29 -31
  316. nuitka/code_generation/PackageResourceCodes.py +59 -23
  317. nuitka/code_generation/PrintCodes.py +19 -17
  318. nuitka/code_generation/PythonAPICodes.py +19 -17
  319. nuitka/code_generation/RaisingCodes.py +19 -17
  320. nuitka/code_generation/Reports.py +19 -17
  321. nuitka/code_generation/ReturnCodes.py +19 -17
  322. nuitka/code_generation/SetCodes.py +19 -17
  323. nuitka/code_generation/SliceCodes.py +22 -20
  324. nuitka/code_generation/StringCodes.py +19 -17
  325. nuitka/code_generation/SubscriptCodes.py +24 -30
  326. nuitka/code_generation/TensorflowCodes.py +54 -0
  327. nuitka/code_generation/TryCodes.py +19 -17
  328. nuitka/code_generation/TupleCodes.py +20 -18
  329. nuitka/code_generation/TypeAliasCodes.py +71 -0
  330. nuitka/code_generation/VariableCodes.py +26 -22
  331. nuitka/code_generation/VariableDeclarations.py +20 -17
  332. nuitka/code_generation/YieldCodes.py +22 -20
  333. nuitka/code_generation/__init__.py +5 -4
  334. nuitka/code_generation/c_types/CTypeBases.py +19 -17
  335. nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
  336. nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
  337. nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
  338. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +19 -17
  339. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +19 -17
  340. nuitka/code_generation/c_types/CTypeNuitkaInts.py +19 -18
  341. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +19 -17
  342. nuitka/code_generation/c_types/CTypePyObjectPointers.py +27 -25
  343. nuitka/code_generation/c_types/CTypeVoids.py +20 -17
  344. nuitka/code_generation/c_types/__init__.py +5 -4
  345. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +18 -17
  346. nuitka/code_generation/templates/CodeTemplatesConstants.py +132 -36
  347. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +18 -17
  348. nuitka/code_generation/templates/CodeTemplatesExceptions.py +19 -18
  349. nuitka/code_generation/templates/CodeTemplatesFrames.py +18 -17
  350. nuitka/code_generation/templates/CodeTemplatesFunction.py +18 -17
  351. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +19 -17
  352. nuitka/code_generation/templates/CodeTemplatesIterators.py +18 -18
  353. nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
  354. nuitka/code_generation/templates/CodeTemplatesModules.py +244 -165
  355. nuitka/code_generation/templates/CodeTemplatesVariables.py +42 -27
  356. nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
  357. nuitka/code_generation/templates/__init__.py +5 -4
  358. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
  359. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +18 -18
  360. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +76 -25
  361. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
  362. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
  363. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
  364. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
  365. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +121 -48
  366. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +18 -18
  367. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +18 -18
  368. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
  369. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
  370. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
  371. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +28 -28
  372. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
  373. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
  374. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +44 -32
  375. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +20 -20
  376. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +28 -28
  377. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +24 -24
  378. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +33 -29
  379. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
  380. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +27 -27
  381. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
  382. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
  383. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
  384. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +17 -17
  385. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
  386. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +26 -24
  387. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
  388. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
  389. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
  390. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
  391. nuitka/containers/Namedtuples.py +19 -18
  392. nuitka/containers/OrderedSetsFallback.py +19 -17
  393. nuitka/containers/__init__.py +5 -4
  394. nuitka/distutils/Build.py +19 -18
  395. nuitka/distutils/DistutilCommands.py +34 -23
  396. nuitka/distutils/__init__.py +5 -4
  397. nuitka/finalizations/Finalization.py +20 -17
  398. nuitka/finalizations/FinalizeMarkups.py +21 -41
  399. nuitka/finalizations/__init__.py +5 -4
  400. nuitka/freezer/DependsExe.py +48 -28
  401. nuitka/freezer/DllDependenciesCommon.py +47 -20
  402. nuitka/freezer/DllDependenciesMacOS.py +147 -57
  403. nuitka/freezer/DllDependenciesPosix.py +29 -19
  404. nuitka/freezer/DllDependenciesWin32.py +29 -21
  405. nuitka/freezer/ImportDetection.py +20 -17
  406. nuitka/freezer/IncludedDataFiles.py +118 -47
  407. nuitka/freezer/IncludedEntryPoints.py +102 -38
  408. nuitka/freezer/Onefile.py +32 -22
  409. nuitka/freezer/Standalone.py +105 -50
  410. nuitka/freezer/__init__.py +5 -4
  411. nuitka/importing/IgnoreListing.py +19 -17
  412. nuitka/importing/ImportCache.py +24 -21
  413. nuitka/importing/ImportResolving.py +103 -95
  414. nuitka/importing/Importing.py +286 -92
  415. nuitka/importing/PreloadedPackages.py +21 -18
  416. nuitka/importing/Recursion.py +131 -47
  417. nuitka/importing/StandardLibrary.py +46 -28
  418. nuitka/importing/__init__.py +5 -4
  419. nuitka/nodes/AsyncgenNodes.py +19 -17
  420. nuitka/nodes/AttributeLookupNodes.py +19 -17
  421. nuitka/nodes/AttributeNodes.py +19 -17
  422. nuitka/nodes/AttributeNodesGenerated.py +49 -24
  423. nuitka/nodes/BuiltinAllNodes.py +19 -17
  424. nuitka/nodes/BuiltinAnyNodes.py +19 -17
  425. nuitka/nodes/BuiltinComplexNodes.py +20 -17
  426. nuitka/nodes/BuiltinDecodingNodes.py +19 -17
  427. nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
  428. nuitka/nodes/BuiltinDictNodes.py +19 -17
  429. nuitka/nodes/BuiltinFormatNodes.py +20 -17
  430. nuitka/nodes/BuiltinHashNodes.py +19 -17
  431. nuitka/nodes/BuiltinInputNodes.py +19 -17
  432. nuitka/nodes/BuiltinIntegerNodes.py +19 -17
  433. nuitka/nodes/BuiltinIteratorNodes.py +24 -20
  434. nuitka/nodes/BuiltinLenNodes.py +19 -17
  435. nuitka/nodes/BuiltinNextNodes.py +19 -17
  436. nuitka/nodes/BuiltinOpenNodes.py +52 -18
  437. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
  438. nuitka/nodes/BuiltinRangeNodes.py +21 -19
  439. nuitka/nodes/BuiltinRefNodes.py +68 -19
  440. nuitka/nodes/BuiltinSumNodes.py +20 -18
  441. nuitka/nodes/BuiltinTypeNodes.py +19 -17
  442. nuitka/nodes/BuiltinVarsNodes.py +19 -18
  443. nuitka/nodes/BytesNodes.py +19 -17
  444. nuitka/nodes/CallNodes.py +19 -17
  445. nuitka/nodes/Checkers.py +19 -17
  446. nuitka/nodes/ChildrenHavingMixins.py +1250 -302
  447. nuitka/nodes/ClassNodes.py +49 -29
  448. nuitka/nodes/CodeObjectSpecs.py +29 -18
  449. nuitka/nodes/ComparisonNodes.py +19 -17
  450. nuitka/nodes/ConditionalNodes.py +21 -23
  451. nuitka/nodes/ConstantRefNodes.py +57 -17
  452. nuitka/nodes/ContainerMakingNodes.py +19 -17
  453. nuitka/nodes/ContainerOperationNodes.py +19 -17
  454. nuitka/nodes/CoroutineNodes.py +19 -17
  455. nuitka/nodes/CtypesNodes.py +19 -18
  456. nuitka/nodes/DictionaryNodes.py +19 -18
  457. nuitka/nodes/ExceptionNodes.py +29 -17
  458. nuitka/nodes/ExecEvalNodes.py +19 -17
  459. nuitka/nodes/ExpressionBases.py +34 -26
  460. nuitka/nodes/ExpressionBasesGenerated.py +54 -32
  461. nuitka/nodes/ExpressionShapeMixins.py +19 -17
  462. nuitka/nodes/FrameNodes.py +19 -17
  463. nuitka/nodes/FunctionAttributeNodes.py +19 -17
  464. nuitka/nodes/FunctionNodes.py +81 -35
  465. nuitka/nodes/FutureSpecs.py +35 -20
  466. nuitka/nodes/GeneratorNodes.py +21 -19
  467. nuitka/nodes/GlobalsLocalsNodes.py +22 -17
  468. nuitka/nodes/HardImportNodesGenerated.py +545 -129
  469. nuitka/nodes/ImportHardNodes.py +46 -38
  470. nuitka/nodes/ImportNodes.py +436 -446
  471. nuitka/nodes/IndicatorMixins.py +19 -17
  472. nuitka/nodes/InjectCNodes.py +19 -18
  473. nuitka/nodes/IterationHandles.py +55 -34
  474. nuitka/nodes/KeyValuePairNodes.py +19 -17
  475. nuitka/nodes/ListOperationNodes.py +33 -21
  476. nuitka/nodes/LocalsDictNodes.py +19 -17
  477. nuitka/nodes/LocalsScopes.py +41 -41
  478. nuitka/nodes/LoopNodes.py +28 -17
  479. nuitka/nodes/MatchNodes.py +37 -24
  480. nuitka/nodes/ModuleAttributeNodes.py +18 -35
  481. nuitka/nodes/ModuleNodes.py +90 -31
  482. nuitka/nodes/NetworkxNodes.py +45 -0
  483. nuitka/nodes/NodeBases.py +45 -43
  484. nuitka/nodes/NodeMakingHelpers.py +21 -19
  485. nuitka/nodes/NodeMetaClasses.py +45 -28
  486. nuitka/nodes/OperatorNodes.py +28 -26
  487. nuitka/nodes/OperatorNodesUnary.py +20 -17
  488. nuitka/nodes/OsSysNodes.py +66 -18
  489. nuitka/nodes/OutlineNodes.py +22 -20
  490. nuitka/nodes/PackageMetadataNodes.py +37 -27
  491. nuitka/nodes/PackageResourceNodes.py +29 -23
  492. nuitka/nodes/PrintNodes.py +19 -17
  493. nuitka/nodes/ReturnNodes.py +20 -18
  494. nuitka/nodes/SideEffectNodes.py +19 -17
  495. nuitka/nodes/SliceNodes.py +20 -18
  496. nuitka/nodes/StatementBasesGenerated.py +125 -77
  497. nuitka/nodes/StatementNodes.py +19 -17
  498. nuitka/nodes/StrNodes.py +19 -17
  499. nuitka/nodes/StringConcatenationNodes.py +20 -17
  500. nuitka/nodes/SubscriptNodes.py +26 -24
  501. nuitka/nodes/TensorflowNodes.py +38 -0
  502. nuitka/nodes/TryNodes.py +19 -17
  503. nuitka/nodes/TypeMatchNodes.py +19 -17
  504. nuitka/nodes/TypeNodes.py +40 -17
  505. nuitka/nodes/VariableAssignNodes.py +122 -64
  506. nuitka/nodes/VariableDelNodes.py +19 -17
  507. nuitka/nodes/VariableNameNodes.py +19 -17
  508. nuitka/nodes/VariableRefNodes.py +63 -26
  509. nuitka/nodes/VariableReleaseNodes.py +19 -17
  510. nuitka/nodes/YieldNodes.py +21 -19
  511. nuitka/nodes/__init__.py +5 -4
  512. nuitka/nodes/shapes/BuiltinTypeShapes.py +145 -39
  513. nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
  514. nuitka/nodes/shapes/ShapeMixins.py +40 -17
  515. nuitka/nodes/shapes/StandardShapes.py +27 -20
  516. nuitka/nodes/shapes/__init__.py +5 -4
  517. nuitka/optimizations/BytecodeDemotion.py +19 -17
  518. nuitka/optimizations/FunctionInlining.py +22 -23
  519. nuitka/optimizations/Graphs.py +19 -17
  520. nuitka/optimizations/Optimization.py +39 -35
  521. nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
  522. nuitka/optimizations/Tags.py +19 -18
  523. nuitka/optimizations/TraceCollections.py +67 -24
  524. nuitka/optimizations/ValueTraces.py +92 -25
  525. nuitka/optimizations/__init__.py +5 -4
  526. nuitka/pgo/PGO.py +33 -23
  527. nuitka/pgo/__init__.py +5 -4
  528. nuitka/plugins/PluginBase.py +610 -109
  529. nuitka/plugins/Plugins.py +241 -58
  530. nuitka/plugins/YamlPluginBase.py +121 -0
  531. nuitka/plugins/__init__.py +5 -4
  532. nuitka/plugins/standard/AntiBloatPlugin.py +357 -129
  533. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
  534. nuitka/plugins/standard/DataFilesPlugin.py +65 -29
  535. nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
  536. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  537. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
  538. nuitka/plugins/standard/DillPlugin.py +42 -134
  539. nuitka/plugins/standard/DllFilesPlugin.py +125 -42
  540. nuitka/plugins/standard/EnumPlugin.py +19 -17
  541. nuitka/plugins/standard/EventletPlugin.py +19 -17
  542. nuitka/plugins/standard/GeventPlugin.py +19 -17
  543. nuitka/plugins/standard/GiPlugin.py +44 -28
  544. nuitka/plugins/standard/GlfwPlugin.py +20 -17
  545. nuitka/plugins/standard/ImplicitImports.py +407 -46
  546. nuitka/plugins/standard/KivyPlugin.py +30 -17
  547. nuitka/plugins/standard/MatplotlibPlugin.py +88 -42
  548. nuitka/plugins/standard/MultiprocessingPlugin.py +25 -20
  549. nuitka/plugins/standard/NumpyPlugin.py +19 -17
  550. nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
  551. nuitka/plugins/standard/PbrPlugin.py +21 -19
  552. nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
  553. nuitka/plugins/standard/PmwPlugin.py +30 -27
  554. nuitka/plugins/standard/PySidePyQtPlugin.py +74 -80
  555. nuitka/plugins/standard/PywebViewPlugin.py +19 -17
  556. nuitka/plugins/standard/SpacyPlugin.py +136 -0
  557. nuitka/plugins/standard/TensorflowPlugin.py +20 -17
  558. nuitka/plugins/standard/TkinterPlugin.py +103 -53
  559. nuitka/plugins/standard/TorchPlugin.py +20 -17
  560. nuitka/plugins/standard/TransformersPlugin.py +94 -30
  561. nuitka/plugins/standard/TrioPlugin.py +18 -15
  562. nuitka/plugins/standard/UpxPlugin.py +21 -19
  563. nuitka/plugins/standard/__init__.py +5 -4
  564. nuitka/plugins/standard/standard.nuitka-package.config.yml +3449 -1299
  565. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
  566. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +121 -66
  567. nuitka/reports/CompilationReportReader.py +67 -0
  568. nuitka/reports/LicenseReport.rst.j2 +21 -21
  569. nuitka/reports/Reports.py +352 -76
  570. nuitka/reports/__init__.py +5 -4
  571. nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
  572. nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
  573. nuitka/specs/BuiltinListOperationSpecs.py +18 -17
  574. nuitka/specs/BuiltinParameterSpecs.py +30 -20
  575. nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
  576. nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
  577. nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
  578. nuitka/specs/HardImportSpecs.py +67 -22
  579. nuitka/specs/ParameterSpecs.py +56 -41
  580. nuitka/specs/__init__.py +5 -4
  581. nuitka/tools/Basics.py +20 -18
  582. nuitka/tools/__init__.py +5 -4
  583. nuitka/tools/commercial/__init__.py +7 -6
  584. nuitka/tools/data_composer/DataComposer.py +78 -62
  585. nuitka/tools/data_composer/__init__.py +5 -4
  586. nuitka/tools/data_composer/__main__.py +18 -17
  587. nuitka/tools/environments/CreateEnvironment.py +20 -17
  588. nuitka/tools/environments/Virtualenv.py +60 -32
  589. nuitka/tools/environments/__init__.py +5 -4
  590. nuitka/tools/general/__init__.py +5 -4
  591. nuitka/tools/general/dll_report/__init__.py +5 -4
  592. nuitka/tools/general/dll_report/__main__.py +19 -21
  593. nuitka/tools/general/find_module/FindModuleCode.py +35 -22
  594. nuitka/tools/general/find_module/__init__.py +5 -4
  595. nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
  596. nuitka/tools/onefile_compressor/__init__.py +5 -4
  597. nuitka/tools/onefile_compressor/__main__.py +18 -17
  598. nuitka/tools/podman/Podman.py +19 -17
  599. nuitka/tools/podman/__init__.py +5 -4
  600. nuitka/tools/podman/__main__.py +35 -19
  601. nuitka/tools/profiler/__init__.py +5 -4
  602. nuitka/tools/profiler/__main__.py +18 -17
  603. nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
  604. nuitka/tools/scanning/DisplayPackageData.py +31 -19
  605. nuitka/tools/scanning/__init__.py +5 -4
  606. nuitka/tools/specialize/CTypeDescriptions.py +93 -71
  607. nuitka/tools/specialize/Common.py +18 -17
  608. nuitka/tools/specialize/SpecializeC.py +31 -27
  609. nuitka/tools/specialize/SpecializePython.py +108 -45
  610. nuitka/tools/specialize/__init__.py +5 -4
  611. nuitka/tools/testing/Common.py +106 -52
  612. nuitka/tools/testing/Constructs.py +19 -17
  613. nuitka/tools/testing/OutputComparison.py +54 -18
  614. nuitka/tools/testing/Pythons.py +19 -18
  615. nuitka/tools/testing/RuntimeTracing.py +20 -19
  616. nuitka/tools/testing/SearchModes.py +26 -20
  617. nuitka/tools/testing/Valgrind.py +19 -17
  618. nuitka/tools/testing/__init__.py +5 -4
  619. nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
  620. nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
  621. nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
  622. nuitka/tools/testing/compare_with_cpython/__main__.py +36 -29
  623. nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
  624. nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
  625. nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
  626. nuitka/tools/testing/measure_construct_performance/__main__.py +22 -25
  627. nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
  628. nuitka/tools/testing/run_nuitka_tests/__main__.py +57 -40
  629. nuitka/tools/watch/AutoStage.py +144 -0
  630. nuitka/tools/watch/GitHub.py +113 -0
  631. nuitka/tools/watch/__init__.py +5 -4
  632. nuitka/tools/watch/__main__.py +322 -91
  633. nuitka/tree/Building.py +176 -147
  634. nuitka/tree/ComplexCallHelperFunctions.py +80 -58
  635. nuitka/tree/Extractions.py +19 -17
  636. nuitka/tree/InternalModule.py +29 -20
  637. nuitka/tree/Operations.py +19 -17
  638. nuitka/tree/ReformulationAssertStatements.py +20 -17
  639. nuitka/tree/ReformulationAssignmentStatements.py +92 -91
  640. nuitka/tree/ReformulationBooleanExpressions.py +19 -17
  641. nuitka/tree/ReformulationCallExpressions.py +20 -18
  642. nuitka/tree/ReformulationClasses.py +45 -39
  643. nuitka/tree/ReformulationClasses3.py +146 -98
  644. nuitka/tree/ReformulationComparisonExpressions.py +29 -35
  645. nuitka/tree/ReformulationContractionExpressions.py +58 -55
  646. nuitka/tree/ReformulationDictionaryCreation.py +40 -35
  647. nuitka/tree/ReformulationExecStatements.py +42 -39
  648. nuitka/tree/ReformulationForLoopStatements.py +30 -34
  649. nuitka/tree/ReformulationFunctionStatements.py +58 -54
  650. nuitka/tree/ReformulationImportStatements.py +34 -29
  651. nuitka/tree/ReformulationLambdaExpressions.py +23 -24
  652. nuitka/tree/ReformulationMatchStatements.py +244 -92
  653. nuitka/tree/ReformulationMultidist.py +22 -18
  654. nuitka/tree/ReformulationNamespacePackages.py +55 -46
  655. nuitka/tree/ReformulationPrintStatements.py +23 -24
  656. nuitka/tree/ReformulationSequenceCreation.py +50 -49
  657. nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
  658. nuitka/tree/ReformulationTryExceptStatements.py +19 -17
  659. nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
  660. nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
  661. nuitka/tree/ReformulationWithStatements.py +39 -41
  662. nuitka/tree/ReformulationYieldExpressions.py +21 -19
  663. nuitka/tree/SourceHandling.py +76 -31
  664. nuitka/tree/SyntaxErrors.py +19 -17
  665. nuitka/tree/TreeHelpers.py +33 -20
  666. nuitka/tree/VariableClosure.py +35 -39
  667. nuitka/tree/__init__.py +5 -4
  668. nuitka/utils/AppDirs.py +41 -20
  669. nuitka/utils/CStrings.py +66 -21
  670. nuitka/utils/CommandLineOptions.py +84 -19
  671. nuitka/utils/Distributions.py +445 -54
  672. nuitka/utils/Download.py +89 -57
  673. nuitka/utils/Execution.py +73 -34
  674. nuitka/utils/FileOperations.py +318 -74
  675. nuitka/utils/Hashing.py +55 -33
  676. nuitka/utils/Images.py +26 -19
  677. nuitka/utils/Importing.py +118 -24
  678. nuitka/utils/InstalledPythons.py +80 -75
  679. nuitka/utils/InstanceCounters.py +20 -17
  680. nuitka/utils/Jinja2.py +30 -22
  681. nuitka/utils/Json.py +19 -17
  682. nuitka/utils/MacOSApp.py +26 -18
  683. nuitka/utils/MemoryUsage.py +20 -18
  684. nuitka/utils/ModuleNames.py +42 -26
  685. nuitka/utils/ReExecute.py +50 -28
  686. nuitka/utils/Rest.py +20 -17
  687. nuitka/utils/SharedLibraries.py +161 -75
  688. nuitka/utils/Shebang.py +20 -17
  689. nuitka/utils/Signing.py +63 -18
  690. nuitka/utils/SlotMetaClasses.py +57 -0
  691. nuitka/utils/StaticLibraries.py +83 -56
  692. nuitka/utils/ThreadedExecutor.py +18 -17
  693. nuitka/utils/Timing.py +22 -20
  694. nuitka/utils/Utils.py +115 -25
  695. nuitka/utils/WindowsFileUsage.py +22 -20
  696. nuitka/utils/WindowsResources.py +25 -18
  697. nuitka/utils/Yaml.py +62 -24
  698. nuitka/utils/__init__.py +5 -4
  699. Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
  700. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  701. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  702. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/LICENSE.txt +0 -0
  703. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/entry_points.txt +0 -0
  704. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/top_level.txt +0 -0
@@ -1,20 +1,5 @@
1
- // Copyright 2023, Kay Hayen, mailto:kay.hayen@gmail.com
2
- //
3
- // Part of "Nuitka", an optimizing Python compiler that is compatible and
4
- // integrates with CPython, but also works on its own.
5
- //
6
- // Licensed under the Apache License, Version 2.0 (the "License");
7
- // you may not use this file except in compliance with the License.
8
- // You may obtain a copy of the License at
9
- //
10
- // http://www.apache.org/licenses/LICENSE-2.0
11
- //
12
- // Unless required by applicable law or agreed to in writing, software
13
- // distributed under the License is distributed on an "AS IS" BASIS,
14
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- // See the License for the specific language governing permissions and
16
- // limitations under the License.
17
- //
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
18
3
  // Tools for working with file, and paths cross platform
19
4
  // for use in both onefile bootstrap and python compiled
20
5
  // program.
@@ -33,7 +18,9 @@
33
18
  #include <dlfcn.h>
34
19
  #include <fcntl.h>
35
20
  #include <libgen.h>
21
+ #if !defined(__wasi__)
36
22
  #include <pwd.h>
23
+ #endif
37
24
  #include <stdlib.h>
38
25
  #include <strings.h>
39
26
  #include <sys/mman.h>
@@ -49,6 +36,62 @@
49
36
  #include "nuitka/filesystem_paths.h"
50
37
  #include "nuitka/safe_string_ops.h"
51
38
 
39
+ #if defined(__OpenBSD__)
40
+ void _getBinaryPath2(char *binary_filename) {
41
+ int mib[4];
42
+ mib[0] = CTL_KERN;
43
+ mib[1] = KERN_PROC_ARGS;
44
+ mib[2] = getpid();
45
+ mib[3] = KERN_PROC_ARGV;
46
+
47
+ size_t len;
48
+
49
+ if (sysctl(mib, 4, NULL, &len, NULL, 0) < 0) {
50
+ abort();
51
+ }
52
+
53
+ char **argv = argv = malloc(len);
54
+ if (argv == NULL) {
55
+ abort();
56
+ }
57
+
58
+ if (sysctl(mib, 4, argv, &len, NULL, 0) < 0) {
59
+ abort();
60
+ }
61
+
62
+ const char *comm = argv[0];
63
+
64
+ if (*comm == '/' || *comm == '.') {
65
+ if (realpath(comm, binary_filename) == NULL) {
66
+ abort();
67
+ }
68
+ } else {
69
+ char *sp;
70
+ char *xpath = strdup(getenv("PATH"));
71
+ char *path = strtok_r(xpath, ":", &sp);
72
+ struct stat st;
73
+
74
+ if (xpath == NULL) {
75
+ abort();
76
+ }
77
+
78
+ while (path) {
79
+ snprintf(binary_filename, PATH_MAX, "%s/%s", path, comm);
80
+
81
+ if (!stat(binary_filename, &st) && (st.st_mode & S_IXUSR)) {
82
+ break;
83
+ }
84
+
85
+ path = strtok_r(NULL, ":", &sp);
86
+ }
87
+
88
+ free(xpath);
89
+ }
90
+
91
+ free(argv);
92
+ }
93
+ #endif
94
+
52
95
  filename_char_t *getBinaryPath(void) {
53
96
  static filename_char_t binary_filename[MAXPATHLEN];
54
97
 
@@ -64,7 +107,9 @@ filename_char_t *getBinaryPath(void) {
64
107
  if (res != 0) {
65
108
  abort();
66
109
  }
67
- #elif defined(__FreeBSD__) || defined(__OpenBSD__)
110
+ #elif defined(__OpenBSD__)
111
+ _getBinaryPath2(binary_filename);
112
+ #elif defined(__FreeBSD__)
68
113
  /* Not all of FreeBSD has /proc file system, so use the appropriate
69
114
  * "sysctl" instead.
70
115
  */
@@ -110,7 +155,7 @@ bool readFileChunk(FILE_HANDLE file_handle, void *buffer, size_t size) {
110
155
  #endif
111
156
  }
112
157
 
113
- bool writeFileChunk(FILE_HANDLE target_file, void *chunk, size_t chunk_size) {
158
+ bool writeFileChunk(FILE_HANDLE target_file, void const *chunk, size_t chunk_size) {
114
159
  #if defined(_WIN32)
115
160
  DWORD write_size = 0;
116
161
  return WriteFile(target_file, chunk, (DWORD)chunk_size, &write_size, NULL);
@@ -182,7 +227,7 @@ int64_t getFileSize(FILE_HANDLE file_handle) {
182
227
  #if defined(__APPLE__)
183
228
  #include <copyfile.h>
184
229
  #else
185
- #if defined(__MSYS__) || defined(__HAIKU__)
230
+ #if defined(__MSYS__) || defined(__HAIKU__) || defined(__OpenBSD__) || defined(__wasi__)
186
231
  static bool sendfile(int output_file, int input_file, off_t *bytesCopied, size_t count) {
187
232
  char buffer[32768];
188
233
 
@@ -289,6 +334,14 @@ bool renameFile(filename_char_t const *source, filename_char_t const *dest) {
289
334
 
290
335
  #include "nuitka/checksum_tools.h"
291
336
 
337
+ extern error_code_t getLastErrorCode(void) {
338
+ #if defined(_WIN32)
339
+ return GetLastError();
340
+ #else
341
+ return errno;
342
+ #endif
343
+ }
344
+
292
345
  #if defined(_WIN32)
293
346
  struct MapFileToMemoryInfo {
294
347
  bool error;
@@ -384,6 +437,7 @@ static struct MapFileToMemoryInfo mapFileToMemory(filename_char_t const *filenam
384
437
  result.error = true;
385
438
  result.error_code = errno;
386
439
  result.erroring_function = "open";
440
+ result.file_size = -1;
387
441
  return result;
388
442
  }
389
443
 
@@ -453,15 +507,15 @@ uint32_t getFileCRC32(filename_char_t const *filename) {
453
507
 
454
508
  #ifdef _WIN32
455
509
 
456
- static DWORD Nuitka_GetFinalPathNameByHandleW(HANDLE hFile, LPWSTR lpszFilePath, DWORD cchFilePath, DWORD dwFlags) {
457
- typedef DWORD(WINAPI * pfnGetFinalPathNameByHandleW)(HANDLE hFile, LPWSTR lpszFilePath, DWORD cchFilePath,
510
+ static DWORD Nuitka_GetFinalPathNameByHandleW(HANDLE hFile, LPWSTR FilePath, DWORD cchFilePath, DWORD dwFlags) {
511
+ typedef DWORD(WINAPI * pfnGetFinalPathNameByHandleW)(HANDLE hFile, LPWSTR FilePath, DWORD cchFilePath,
458
512
  DWORD dwFlags);
459
513
 
460
514
  pfnGetFinalPathNameByHandleW fnGetFinalPathNameByHandleW =
461
515
  (pfnGetFinalPathNameByHandleW)GetProcAddress(GetModuleHandleA("Kernel32.dll"), "GetFinalPathNameByHandleW");
462
516
 
463
517
  if (fnGetFinalPathNameByHandleW != NULL) {
464
- return fnGetFinalPathNameByHandleW(hFile, lpszFilePath, cchFilePath, dwFlags);
518
+ return fnGetFinalPathNameByHandleW(hFile, FilePath, cchFilePath, dwFlags);
465
519
  } else {
466
520
  // There are no symlinks before Windows Vista.
467
521
  return 0;
@@ -505,6 +559,14 @@ static void resolveFileSymbolicLink(wchar_t *resolved_filename, wchar_t const *f
505
559
  copyStringSafeW(resolved_filename, resolved_filename + 4, resolved_filename_size);
506
560
  }
507
561
  }
562
+
563
+ // Avoid network filenames with UNC prefix, they won't work for loading
564
+ // extension modules and other things, Python avoids them too.
565
+ if (wcsncmp(resolved_filename, L"\\\\?\\UNC\\", 8) == 0) {
566
+ copyStringSafeW(resolved_filename, resolved_filename + 6, resolved_filename_size);
567
+ resolved_filename[0] = L'\\';
568
+ }
569
+
508
570
  } else {
509
571
  copyStringSafeW(resolved_filename, filename, resolved_filename_size);
510
572
  }
@@ -514,6 +576,9 @@ static void resolveFileSymbolicLink(wchar_t *resolved_filename, wchar_t const *f
514
576
 
515
577
  static void resolveFileSymbolicLink(char *resolved_filename, char const *filename, size_t resolved_filename_size,
516
578
  bool resolve_symlinks) {
579
+ #ifdef __wasi__
580
+ copyStringSafe(resolved_filename, filename, resolved_filename_size);
581
+ #else
517
582
  if (resolve_symlinks) {
518
583
  // At least on macOS, realpath cannot allocate a buffer, itself, so lets
519
584
  // use a local one, only on Linux we could use NULL argument and have a
@@ -530,24 +595,27 @@ static void resolveFileSymbolicLink(char *resolved_filename, char const *filenam
530
595
  } else {
531
596
  copyStringSafe(resolved_filename, filename, resolved_filename_size);
532
597
  }
598
+ #endif
533
599
  }
534
600
  #endif
535
601
 
536
602
  #ifdef _WIN32
537
603
  wchar_t const *getBinaryFilenameWideChars(bool resolve_symlinks) {
538
- static wchar_t binary_filename[MAXPATHLEN + 1];
539
- static bool init_done = false;
604
+ static wchar_t binary_filename[MAXPATHLEN + 1] = {0};
605
+ static wchar_t binary_filename_resolved[MAXPATHLEN + 1] = {0};
606
+
607
+ wchar_t *buffer = resolve_symlinks ? binary_filename : binary_filename_resolved;
608
+ assert(sizeof(binary_filename) == sizeof(binary_filename_resolved));
540
609
 
541
- if (init_done == false) {
542
- DWORD res = GetModuleFileNameW(NULL, binary_filename, sizeof(binary_filename) / sizeof(wchar_t));
610
+ if (buffer[0] == 0) {
611
+ DWORD res = GetModuleFileNameW(NULL, buffer, sizeof(binary_filename) / sizeof(wchar_t));
543
612
  assert(res != 0);
544
613
 
545
614
  // Resolve any symlinks we were invoked via
546
- resolveFileSymbolicLink(binary_filename, binary_filename, sizeof(binary_filename) / sizeof(wchar_t),
547
- resolve_symlinks);
615
+ resolveFileSymbolicLink(buffer, buffer, sizeof(binary_filename) / sizeof(wchar_t), resolve_symlinks);
548
616
  }
549
617
 
550
- return binary_filename;
618
+ return buffer;
551
619
  }
552
620
  #endif
553
621
 
@@ -616,8 +684,13 @@ char const *getBinaryFilenameHostEncoded(bool resolve_symlinks) {
616
684
 
617
685
  // Resolve any symlinks we were invoked via
618
686
  resolveFileSymbolicLink(binary_filename_target, binary_filename_target, buffer_size, resolve_symlinks);
619
-
620
- #elif defined(__FreeBSD__) || defined(__OpenBSD__)
687
+ #elif defined(__wasi__)
688
+ const char *wasi_filename = "program.wasm";
689
+ strncpy(binary_filename_resolved, wasi_filename, MAXPATHLEN);
690
+ #elif defined(__OpenBSD__)
691
+ _getBinaryPath2(binary_filename_target);
692
+ resolveFileSymbolicLink(binary_filename_target, binary_filename_target, buffer_size, resolve_symlinks);
693
+ #elif defined(__FreeBSD__)
621
694
  /* Not all of FreeBSD has /proc file system, so use the appropriate
622
695
  * "sysctl" instead.
623
696
  */
@@ -682,6 +755,8 @@ static bool appendStringCSIDLPathW(wchar_t *target, int csidl_id, size_t buffer_
682
755
  return false;
683
756
  }
684
757
  #else
758
+ // spell-checker: ignore USERPROFILE,LOCALAPPDATA
759
+
685
760
  DWORD res = 0;
686
761
  if (csidl_id == CSIDL_PROFILE) {
687
762
  res = GetEnvironmentVariableW(L"USERPROFILE", path_buffer, sizeof(path_buffer));
@@ -704,101 +779,108 @@ bool expandTemplatePathW(wchar_t *target, wchar_t const *source, size_t buffer_s
704
779
  wchar_t var_name[1024];
705
780
  wchar_t *w = NULL;
706
781
 
782
+ bool var_started = false;
783
+
707
784
  while (*source != 0) {
708
- if (*source == '%') {
709
- if (w == NULL) {
710
- w = var_name;
711
- *w = 0;
785
+ if (*source == L'{') {
786
+ assert(var_started == false);
787
+ var_started = true;
712
788
 
713
- source++;
789
+ w = var_name;
790
+ *w = 0;
714
791
 
715
- continue;
716
- } else {
717
- *w = 0;
792
+ source++;
793
+
794
+ continue;
795
+ } else if (*source == L'}') {
796
+ assert(var_started == true);
797
+ var_started = false;
718
798
 
719
- bool is_path = false;
799
+ *w = 0;
720
800
 
721
- if (wcsicmp(var_name, L"TEMP") == 0) {
722
- GetTempPathW((DWORD)buffer_size, target);
723
- is_path = true;
724
- } else if (wcsicmp(var_name, L"PROGRAM") == 0) {
801
+ bool is_path = false;
802
+
803
+ if (wcsicmp(var_name, L"TEMP") == 0) {
804
+ GetTempPathW((DWORD)buffer_size, target);
805
+ is_path = true;
806
+ } else if (wcsicmp(var_name, L"PROGRAM") == 0) {
725
807
  #if _NUITKA_ONEFILE_TEMP_BOOL == 1
726
- appendWStringSafeW(target, __wargv[0], buffer_size);
808
+ appendWStringSafeW(target, __wargv[0], buffer_size);
727
809
  #else
728
- if (!GetModuleFileNameW(NULL, target, (DWORD)buffer_size)) {
729
- return false;
730
- }
810
+ if (!GetModuleFileNameW(NULL, target, (DWORD)buffer_size)) {
811
+ return false;
812
+ }
731
813
  #endif
732
- } else if (wcsicmp(var_name, L"PROGRAM_BASE") == 0) {
733
- if (expandTemplatePathW(target, L"%PROGRAM%", buffer_size - wcslen(target)) == false) {
734
- return false;
735
- }
814
+ } else if (wcsicmp(var_name, L"PROGRAM_BASE") == 0) {
815
+ if (expandTemplatePathW(target, L"{PROGRAM}", buffer_size - wcslen(target)) == false) {
816
+ return false;
817
+ }
736
818
 
737
- size_t length = wcslen(target);
819
+ size_t length = wcslen(target);
738
820
 
739
- if ((length >= 4) && (wcsicmp(target + length - 4, L".exe") == 0)) {
740
- target[length - 4] = 0;
741
- }
742
- } else if (wcsicmp(var_name, L"PID") == 0) {
743
- char pid_buffer[128];
744
- snprintf(pid_buffer, sizeof(pid_buffer), "%d", GetCurrentProcessId());
821
+ if ((length >= 4) && (wcsicmp(target + length - 4, L".exe") == 0)) {
822
+ target[length - 4] = 0;
823
+ }
824
+ } else if (wcsicmp(var_name, L"PID") == 0) {
825
+ char pid_buffer[128];
826
+ snprintf(pid_buffer, sizeof(pid_buffer), "%ld", GetCurrentProcessId());
745
827
 
746
- appendStringSafeW(target, pid_buffer, buffer_size);
747
- } else if (wcsicmp(var_name, L"HOME") == 0) {
748
- if (appendStringCSIDLPathW(target, CSIDL_PROFILE, buffer_size) == false) {
749
- return false;
750
- }
751
- is_path = true;
752
- } else if (wcsicmp(var_name, L"CACHE_DIR") == 0) {
753
- if (appendStringCSIDLPathW(target, CSIDL_LOCAL_APPDATA, buffer_size) == false) {
754
- return false;
755
- }
756
- is_path = true;
828
+ appendStringSafeW(target, pid_buffer, buffer_size);
829
+ } else if (wcsicmp(var_name, L"HOME") == 0) {
830
+ if (appendStringCSIDLPathW(target, CSIDL_PROFILE, buffer_size) == false) {
831
+ return false;
832
+ }
833
+ is_path = true;
834
+ } else if (wcsicmp(var_name, L"CACHE_DIR") == 0) {
835
+ if (appendStringCSIDLPathW(target, CSIDL_LOCAL_APPDATA, buffer_size) == false) {
836
+ return false;
837
+ }
838
+ is_path = true;
757
839
  #ifdef NUITKA_COMPANY_NAME
758
- } else if (wcsicmp(var_name, L"COMPANY") == 0) {
759
- appendWStringSafeW(target, L"" NUITKA_COMPANY_NAME, buffer_size);
840
+ } else if (wcsicmp(var_name, L"COMPANY") == 0) {
841
+ appendWStringSafeW(target, L"" NUITKA_COMPANY_NAME, buffer_size);
760
842
  #endif
761
843
  #ifdef NUITKA_PRODUCT_NAME
762
- } else if (wcsicmp(var_name, L"PRODUCT") == 0) {
763
- appendWStringSafeW(target, L"" NUITKA_PRODUCT_NAME, buffer_size);
844
+ } else if (wcsicmp(var_name, L"PRODUCT") == 0) {
845
+ appendWStringSafeW(target, L"" NUITKA_PRODUCT_NAME, buffer_size);
764
846
  #endif
765
847
  #ifdef NUITKA_VERSION_COMBINED
766
- } else if (wcsicmp(var_name, L"VERSION") == 0) {
767
- appendWStringSafeW(target, L"" NUITKA_VERSION_COMBINED, buffer_size);
848
+ } else if (wcsicmp(var_name, L"VERSION") == 0) {
849
+ appendWStringSafeW(target, L"" NUITKA_VERSION_COMBINED, buffer_size);
768
850
  #endif
769
- } else if (wcsicmp(var_name, L"TIME") == 0) {
770
- char time_buffer[1024];
851
+ } else if (wcsicmp(var_name, L"TIME") == 0) {
852
+ char time_buffer[1024];
771
853
 
772
- __int64 time = 0;
773
- assert(sizeof(time) == sizeof(FILETIME));
774
- GetSystemTimeAsFileTime((LPFILETIME)&time);
854
+ // spell-checker: ignore LPFILETIME
855
+ __int64 time = 0;
856
+ assert(sizeof(time) == sizeof(FILETIME));
857
+ GetSystemTimeAsFileTime((LPFILETIME)&time);
775
858
 
776
- snprintf(time_buffer, sizeof(time_buffer), "%lld", time);
859
+ snprintf(time_buffer, sizeof(time_buffer), "%lld", time);
777
860
 
778
- appendStringSafeW(target, time_buffer, buffer_size);
779
- } else {
780
- return false;
781
- }
861
+ appendStringSafeW(target, time_buffer, buffer_size);
862
+ } else {
863
+ return false;
864
+ }
782
865
 
783
- // Skip over appended stuff.
784
- while (*target) {
785
- target++;
786
- buffer_size -= 1;
787
- }
866
+ // Skip over appended stuff.
867
+ while (*target) {
868
+ target++;
869
+ buffer_size -= 1;
870
+ }
788
871
 
789
- if (is_path) {
790
- while (*(target - 1) == FILENAME_SEP_CHAR) {
791
- target--;
792
- *target = 0;
793
- buffer_size += 1;
794
- }
872
+ if (is_path) {
873
+ while (*(target - 1) == FILENAME_SEP_CHAR) {
874
+ target--;
875
+ *target = 0;
876
+ buffer_size += 1;
795
877
  }
878
+ }
796
879
 
797
- w = NULL;
798
- source++;
880
+ w = NULL;
881
+ source++;
799
882
 
800
- continue;
801
- }
883
+ continue;
802
884
  }
803
885
 
804
886
  if (w != NULL) {
@@ -811,11 +893,13 @@ bool expandTemplatePathW(wchar_t *target, wchar_t const *source, size_t buffer_s
811
893
  }
812
894
 
813
895
  *target++ = *source++;
896
+ *target = 0;
814
897
  buffer_size -= 1;
815
898
  }
816
899
 
817
900
  *target = 0;
818
901
 
902
+ assert(var_started == false);
819
903
  return true;
820
904
  }
821
905
 
@@ -827,114 +911,124 @@ bool expandTemplatePath(char *target, char const *source, size_t buffer_size) {
827
911
  char var_name[1024];
828
912
  char *w = NULL;
829
913
 
830
- while (*source != 0) {
831
- if (*source == '%') {
832
- if (w == NULL) {
833
- w = var_name;
834
- *w = 0;
914
+ NUITKA_MAY_BE_UNUSED bool var_started = false;
835
915
 
836
- source++;
916
+ while (*source != 0) {
917
+ if (*source == '{') {
918
+ assert(var_started == false);
919
+ var_started = true;
837
920
 
838
- continue;
839
- } else {
840
- *w = 0;
921
+ w = var_name;
922
+ *w = 0;
841
923
 
842
- bool is_path = false;
924
+ source++;
843
925
 
844
- if (strcasecmp(var_name, "TEMP") == 0) {
845
- char const *tmp_dir = getenv("TMPDIR");
846
- if (tmp_dir == NULL) {
847
- tmp_dir = "/tmp";
848
- }
926
+ continue;
927
+ } else if (*source == '}') {
928
+ assert(var_started == true);
929
+ var_started = false;
930
+ *w = 0;
849
931
 
850
- appendStringSafe(target, tmp_dir, buffer_size);
851
- is_path = true;
852
- } else if (strcasecmp(var_name, "PROGRAM") == 0) {
853
- char const *exe_name = getBinaryFilenameHostEncoded(false);
932
+ bool is_path = false;
854
933
 
855
- appendStringSafe(target, exe_name, buffer_size);
856
- } else if (strcasecmp(var_name, "PROGRAM_BASE") == 0) {
857
- if (expandTemplatePath(target, "%PROGRAM%", buffer_size - strlen(target)) == false) {
858
- return false;
859
- }
934
+ if (strcasecmp(var_name, "TEMP") == 0) {
935
+ char const *tmp_dir = getenv("TMPDIR");
936
+ if (tmp_dir == NULL) {
937
+ tmp_dir = "/tmp";
938
+ }
860
939
 
861
- size_t length = strlen(target);
940
+ appendStringSafe(target, tmp_dir, buffer_size);
941
+ is_path = true;
942
+ } else if (strcasecmp(var_name, "PROGRAM") == 0) {
943
+ char const *exe_name = getBinaryFilenameHostEncoded(false);
862
944
 
863
- if ((length >= 4) && (strcasecmp(target + length - 4, ".exe") == 0)) {
864
- target[length - 4] = 0;
865
- }
866
- } else if (strcasecmp(var_name, "PID") == 0) {
867
- char pid_buffer[128];
945
+ appendStringSafe(target, exe_name, buffer_size);
946
+ } else if (strcasecmp(var_name, "PROGRAM_BASE") == 0) {
947
+ if (expandTemplatePath(target, "{PROGRAM}", buffer_size - strlen(target)) == false) {
948
+ return false;
949
+ }
868
950
 
869
- snprintf(pid_buffer, sizeof(pid_buffer), "%d", getpid());
951
+ size_t length = strlen(target);
870
952
 
871
- appendStringSafe(target, pid_buffer, buffer_size);
872
- } else if (strcasecmp(var_name, "HOME") == 0) {
873
- char const *home_path = getenv("HOME");
953
+ if ((length >= 4) && (strcasecmp(target + length - 4, ".bin") == 0)) {
954
+ target[length - 4] = 0;
955
+ }
956
+ } else if (strcasecmp(var_name, "PID") == 0) {
957
+ char pid_buffer[128];
874
958
 
875
- if (home_path == NULL) {
876
- struct passwd *pw_data = getpwuid(getuid());
959
+ snprintf(pid_buffer, sizeof(pid_buffer), "%d", getpid());
877
960
 
878
- if (unlikely(pw_data == NULL)) {
879
- return false;
880
- }
961
+ appendStringSafe(target, pid_buffer, buffer_size);
962
+ } else if (strcasecmp(var_name, "HOME") == 0) {
963
+ char const *home_path = getenv("HOME");
964
+ if (home_path == NULL) {
965
+ #ifdef __wasi__
966
+ return false;
967
+ #else
968
+ struct passwd *pw_data = getpwuid(getuid());
881
969
 
882
- home_path = pw_data->pw_dir;
970
+ if (unlikely(pw_data == NULL)) {
971
+ return false;
883
972
  }
884
973
 
885
- appendStringSafe(target, home_path, buffer_size);
886
- is_path = true;
887
- } else if (strcasecmp(var_name, "CACHE_DIR") == 0) {
888
- if (expandTemplatePath(target, "%HOME%", buffer_size - strlen(target)) == false) {
974
+ home_path = pw_data->pw_dir;
975
+ #endif
976
+ }
977
+
978
+ appendStringSafe(target, home_path, buffer_size);
979
+ is_path = true;
980
+ } else if (strcasecmp(var_name, "CACHE_DIR") == 0) {
981
+ char const *xdg_cache_home = getenv("XDG_CACHE_HOME");
982
+
983
+ if (xdg_cache_home != NULL && xdg_cache_home[0] == '/') {
984
+ appendStringSafe(target, xdg_cache_home, buffer_size);
985
+ } else {
986
+ if (expandTemplatePath(target, "{HOME}/.cache", buffer_size - strlen(target)) == false) {
889
987
  return false;
890
988
  }
891
-
892
- appendCharSafe(target, '/', buffer_size);
893
- appendStringSafe(target, ".cache", buffer_size);
894
- is_path = true;
989
+ }
990
+ is_path = true;
895
991
  #ifdef NUITKA_COMPANY_NAME
896
- } else if (strcasecmp(var_name, "COMPANY") == 0) {
897
- appendStringSafe(target, NUITKA_COMPANY_NAME, buffer_size);
992
+ } else if (strcasecmp(var_name, "COMPANY") == 0) {
993
+ appendStringSafe(target, NUITKA_COMPANY_NAME, buffer_size);
898
994
  #endif
899
995
  #ifdef NUITKA_PRODUCT_NAME
900
- } else if (strcasecmp(var_name, "PRODUCT") == 0) {
901
- appendStringSafe(target, NUITKA_PRODUCT_NAME, buffer_size);
996
+ } else if (strcasecmp(var_name, "PRODUCT") == 0) {
997
+ appendStringSafe(target, NUITKA_PRODUCT_NAME, buffer_size);
902
998
  #endif
903
999
  #ifdef NUITKA_VERSION_COMBINED
904
- } else if (strcasecmp(var_name, "VERSION") == 0) {
905
- appendStringSafe(target, NUITKA_VERSION_COMBINED, buffer_size);
1000
+ } else if (strcasecmp(var_name, "VERSION") == 0) {
1001
+ appendStringSafe(target, NUITKA_VERSION_COMBINED, buffer_size);
906
1002
  #endif
907
- } else if (strcasecmp(var_name, "TIME") == 0) {
908
- char time_buffer[1024];
1003
+ } else if (strcasecmp(var_name, "TIME") == 0) {
1004
+ char time_buffer[1024];
909
1005
 
910
- struct timeval current_time;
911
- gettimeofday(&current_time, NULL);
912
- snprintf(time_buffer, sizeof(time_buffer), "%ld_%ld", current_time.tv_sec,
913
- (long)current_time.tv_usec);
1006
+ struct timeval current_time;
1007
+ gettimeofday(&current_time, NULL);
1008
+ snprintf(time_buffer, sizeof(time_buffer), "%ld_%ld", current_time.tv_sec, (long)current_time.tv_usec);
914
1009
 
915
- appendStringSafe(target, time_buffer, buffer_size);
916
- } else {
917
- return false;
918
- }
919
- // Skip over appended stuff.
920
- while (*target) {
921
- target++;
922
- buffer_size -= 1;
923
- }
1010
+ appendStringSafe(target, time_buffer, buffer_size);
1011
+ } else {
1012
+ return false;
1013
+ }
1014
+ // Skip over appended stuff.
1015
+ while (*target) {
1016
+ target++;
1017
+ buffer_size -= 1;
1018
+ }
924
1019
 
925
- if (is_path) {
926
- while (*(target - 1) == FILENAME_SEP_CHAR) {
927
- target--;
928
- *target = 0;
929
- buffer_size += 1;
930
- }
1020
+ if (is_path) {
1021
+ while (*(target - 1) == FILENAME_SEP_CHAR) {
1022
+ target--;
1023
+ *target = 0;
1024
+ buffer_size += 1;
931
1025
  }
1026
+ }
932
1027
 
933
- w = NULL;
934
- source++;
1028
+ w = NULL;
1029
+ source++;
935
1030
 
936
- continue;
937
- }
1031
+ continue;
938
1032
  }
939
1033
 
940
1034
  if (w != NULL) {
@@ -947,12 +1041,29 @@ bool expandTemplatePath(char *target, char const *source, size_t buffer_size) {
947
1041
  }
948
1042
 
949
1043
  *target++ = *source++;
1044
+ *target = 0;
950
1045
  buffer_size -= 1;
951
1046
  }
952
1047
 
953
1048
  *target = 0;
954
1049
 
1050
+ assert(var_started == false);
955
1051
  return true;
956
1052
  }
957
1053
 
958
1054
  #endif
1055
+
1056
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
1057
+ // integrates with CPython, but also works on its own.
1058
+ //
1059
+ // Licensed under the Apache License, Version 2.0 (the "License");
1060
+ // you may not use this file except in compliance with the License.
1061
+ // You may obtain a copy of the License at
1062
+ //
1063
+ // http://www.apache.org/licenses/LICENSE-2.0
1064
+ //
1065
+ // Unless required by applicable law or agreed to in writing, software
1066
+ // distributed under the License is distributed on an "AS IS" BASIS,
1067
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1068
+ // See the License for the specific language governing permissions and
1069
+ // limitations under the License.