Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.5.1__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 (728) hide show
  1. Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka-run.cmd +9 -9
  2. Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka.cmd +15 -15
  3. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +5 -3
  4. Nuitka_winsvc-2.5.1.dist-info/RECORD +977 -0
  5. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +49 -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 +408 -0
  13. nuitka/MainControl.py +209 -116
  14. nuitka/ModuleRegistry.py +83 -20
  15. nuitka/OptionParsing.py +467 -221
  16. nuitka/Options.py +701 -225
  17. nuitka/OutputDirectories.py +47 -23
  18. nuitka/PostProcessing.py +133 -79
  19. nuitka/Progress.py +73 -24
  20. nuitka/PythonFlavors.py +141 -32
  21. nuitka/PythonOperators.py +18 -17
  22. nuitka/PythonVersions.py +107 -19
  23. nuitka/Serialization.py +70 -55
  24. nuitka/SourceCodeReferences.py +19 -17
  25. nuitka/Tracing.py +176 -70
  26. nuitka/TreeXML.py +31 -26
  27. nuitka/Variables.py +39 -41
  28. nuitka/Version.py +22 -8
  29. nuitka/__init__.py +5 -4
  30. nuitka/__main__.py +95 -29
  31. nuitka/__past__.py +44 -34
  32. nuitka/build/Backend.scons +243 -141
  33. nuitka/build/CCompilerVersion.scons +45 -31
  34. nuitka/build/DataComposerInterface.py +20 -17
  35. nuitka/build/Onefile.scons +56 -54
  36. nuitka/build/SconsCaching.py +105 -92
  37. nuitka/build/SconsCompilerSettings.py +167 -68
  38. nuitka/build/SconsHacks.py +25 -19
  39. nuitka/build/SconsInterface.py +155 -54
  40. nuitka/build/SconsProgress.py +19 -18
  41. nuitka/build/SconsSpawn.py +62 -33
  42. nuitka/build/SconsUtils.py +152 -55
  43. nuitka/build/__init__.py +5 -4
  44. nuitka/build/include/nuitka/allocator.h +228 -22
  45. nuitka/build/include/nuitka/builtins.h +17 -17
  46. nuitka/build/include/nuitka/calling.h +24 -24
  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 +28 -25
  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 +93 -54
  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 +35 -18
  57. nuitka/build/include/nuitka/constants_blob.h +17 -17
  58. nuitka/build/include/nuitka/debug_settings.h +60 -0
  59. nuitka/build/include/nuitka/environment_variables.h +30 -0
  60. nuitka/build/include/nuitka/environment_variables_system.h +45 -0
  61. nuitka/build/include/nuitka/exception_groups.h +23 -26
  62. nuitka/build/include/nuitka/exceptions.h +717 -171
  63. nuitka/build/include/nuitka/filesystem_paths.h +26 -20
  64. nuitka/build/include/nuitka/freelists.h +38 -18
  65. nuitka/build/include/nuitka/helper/attributes.h +24 -22
  66. nuitka/build/include/nuitka/helper/boolean.h +17 -17
  67. nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
  68. nuitka/build/include/nuitka/helper/bytes.h +14 -15
  69. nuitka/build/include/nuitka/helper/calling_generated.h +69 -69
  70. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  71. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  72. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  73. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  74. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  75. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  76. nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
  77. nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
  78. nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
  79. nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
  80. nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
  81. nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
  82. nuitka/build/include/nuitka/helper/complex.h +17 -17
  83. nuitka/build/include/nuitka/helper/dictionaries.h +89 -51
  84. nuitka/build/include/nuitka/helper/floats.h +17 -18
  85. nuitka/build/include/nuitka/helper/import_hard.h +25 -17
  86. nuitka/build/include/nuitka/helper/indexes.h +17 -18
  87. nuitka/build/include/nuitka/helper/ints.h +115 -54
  88. nuitka/build/include/nuitka/helper/iterators.h +99 -51
  89. nuitka/build/include/nuitka/helper/lists.h +26 -24
  90. nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
  91. nuitka/build/include/nuitka/helper/mappings.h +17 -18
  92. nuitka/build/include/nuitka/helper/operations.h +20 -17
  93. nuitka/build/include/nuitka/helper/operations_binary_add.h +23 -17
  94. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
  95. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
  96. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
  97. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
  98. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  99. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
  100. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
  101. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
  102. nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
  103. nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
  104. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
  105. nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
  106. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
  107. nuitka/build/include/nuitka/helper/operations_binary_sub.h +23 -17
  108. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
  109. nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
  110. nuitka/build/include/nuitka/helper/operations_inplace_add.h +20 -17
  111. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
  112. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
  113. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
  114. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
  115. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
  116. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
  117. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
  118. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
  119. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
  120. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
  121. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
  122. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +20 -17
  123. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
  124. nuitka/build/include/nuitka/helper/raising.h +68 -37
  125. nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
  126. nuitka/build/include/nuitka/helper/richcomparisons.h +21 -14
  127. nuitka/build/include/nuitka/helper/sequences.h +19 -13
  128. nuitka/build/include/nuitka/helper/sets.h +11 -12
  129. nuitka/build/include/nuitka/helper/slices.h +31 -25
  130. nuitka/build/include/nuitka/helper/strings.h +16 -17
  131. nuitka/build/include/nuitka/helper/subscripts.h +18 -201
  132. nuitka/build/include/nuitka/helper/tuples.h +64 -52
  133. nuitka/build/include/nuitka/helpers.h +50 -22
  134. nuitka/build/include/nuitka/importing.h +28 -21
  135. nuitka/build/include/nuitka/jit_sources.h +25 -0
  136. nuitka/build/include/nuitka/prelude.h +163 -71
  137. nuitka/build/include/nuitka/printing.h +29 -22
  138. nuitka/build/include/nuitka/python_pgo.h +19 -18
  139. nuitka/build/include/nuitka/safe_string_ops.h +20 -18
  140. nuitka/build/include/nuitka/threading.h +45 -32
  141. nuitka/build/include/nuitka/tracing.h +28 -18
  142. nuitka/build/include/nuitka/type_aliases.h +30 -0
  143. nuitka/build/include/nuitka/unfreezing.h +29 -23
  144. nuitka/build/inline_copy/bin/scons.py +14 -0
  145. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
  146. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
  147. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  148. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  149. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  150. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  151. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  152. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  153. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  154. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  155. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  156. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  157. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  158. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  159. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  160. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  161. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  162. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  163. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  164. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  165. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  166. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  167. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  168. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  169. nuitka/build/inline_copy/stubgen/six.py +998 -0
  170. nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
  171. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  172. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
  173. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  174. nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
  175. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  176. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  177. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  178. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  179. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  180. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  181. nuitka/build/static_src/CompiledAsyncgenType.c +221 -221
  182. nuitka/build/static_src/CompiledCellType.c +69 -44
  183. nuitka/build/static_src/CompiledCodeHelpers.c +276 -159
  184. nuitka/build/static_src/CompiledCoroutineType.c +229 -226
  185. nuitka/build/static_src/CompiledFrameType.c +323 -138
  186. nuitka/build/static_src/CompiledFunctionType.c +547 -231
  187. nuitka/build/static_src/CompiledGeneratorType.c +416 -290
  188. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +593 -228
  189. nuitka/build/static_src/CompiledMethodType.c +91 -82
  190. nuitka/build/static_src/HelpersAllocator.c +352 -45
  191. nuitka/build/static_src/HelpersAttributes.c +30 -72
  192. nuitka/build/static_src/HelpersBuiltin.c +65 -46
  193. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
  194. nuitka/build/static_src/HelpersBytes.c +19 -20
  195. nuitka/build/static_src/HelpersCalling.c +40 -37
  196. nuitka/build/static_src/HelpersCallingGenerated.c +1061 -242
  197. nuitka/build/static_src/HelpersChecksumTools.c +35 -21
  198. nuitka/build/static_src/HelpersClasses.c +17 -17
  199. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  200. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  201. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  202. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  203. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  204. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  205. nuitka/build/static_src/HelpersComparisonEq.c +536 -496
  206. nuitka/build/static_src/HelpersComparisonEqUtils.c +22 -19
  207. nuitka/build/static_src/HelpersComparisonGe.c +531 -501
  208. nuitka/build/static_src/HelpersComparisonGt.c +530 -500
  209. nuitka/build/static_src/HelpersComparisonLe.c +531 -501
  210. nuitka/build/static_src/HelpersComparisonLt.c +530 -500
  211. nuitka/build/static_src/HelpersComparisonNe.c +538 -496
  212. nuitka/build/static_src/HelpersConsole.c +122 -0
  213. nuitka/build/static_src/HelpersConstantsBlob.c +550 -521
  214. nuitka/build/static_src/HelpersDeepcopy.c +33 -33
  215. nuitka/build/static_src/HelpersDictionaries.c +232 -63
  216. nuitka/build/static_src/HelpersDictionariesGenerated.c +130 -127
  217. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  218. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  219. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
  220. nuitka/build/static_src/HelpersExceptions.c +147 -62
  221. nuitka/build/static_src/HelpersFiles.c +116 -22
  222. nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
  223. nuitka/build/static_src/HelpersFloats.c +37 -31
  224. nuitka/build/static_src/HelpersHeapStorage.c +21 -17
  225. nuitka/build/static_src/HelpersImport.c +61 -29
  226. nuitka/build/static_src/HelpersImportHard.c +74 -61
  227. nuitka/build/static_src/HelpersJitSources.c +46 -0
  228. nuitka/build/static_src/HelpersLists.c +237 -58
  229. nuitka/build/static_src/HelpersListsGenerated.c +41 -41
  230. nuitka/build/static_src/HelpersMappings.c +17 -17
  231. nuitka/build/static_src/HelpersMatching.c +137 -51
  232. nuitka/build/static_src/HelpersOperationBinaryAdd.c +397 -152
  233. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +102 -52
  234. nuitka/build/static_src/HelpersOperationBinaryBitand.c +55 -55
  235. nuitka/build/static_src/HelpersOperationBinaryBitor.c +55 -55
  236. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +55 -55
  237. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +49 -43
  238. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
  239. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  240. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +55 -49
  241. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
  242. nuitka/build/static_src/HelpersOperationBinaryLshift.c +83 -83
  243. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +25 -24
  244. nuitka/build/static_src/HelpersOperationBinaryMod.c +129 -117
  245. nuitka/build/static_src/HelpersOperationBinaryMult.c +98 -82
  246. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
  247. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +55 -49
  248. nuitka/build/static_src/HelpersOperationBinaryPow.c +68 -68
  249. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
  250. nuitka/build/static_src/HelpersOperationBinaryRshift.c +51 -51
  251. nuitka/build/static_src/HelpersOperationBinarySub.c +309 -88
  252. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +49 -43
  253. nuitka/build/static_src/HelpersOperationInplaceAdd.c +333 -163
  254. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
  255. nuitka/build/static_src/HelpersOperationInplaceBitand.c +58 -58
  256. nuitka/build/static_src/HelpersOperationInplaceBitor.c +58 -58
  257. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +58 -58
  258. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +73 -68
  259. nuitka/build/static_src/HelpersOperationInplaceLshift.c +64 -64
  260. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +38 -37
  261. nuitka/build/static_src/HelpersOperationInplaceMod.c +145 -140
  262. nuitka/build/static_src/HelpersOperationInplaceMult.c +89 -84
  263. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +73 -68
  264. nuitka/build/static_src/HelpersOperationInplacePow.c +82 -82
  265. nuitka/build/static_src/HelpersOperationInplaceRshift.c +48 -48
  266. nuitka/build/static_src/HelpersOperationInplaceSub.c +275 -122
  267. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +68 -63
  268. nuitka/build/static_src/HelpersProfiling.c +25 -24
  269. nuitka/build/static_src/HelpersPythonPgo.c +22 -22
  270. nuitka/build/static_src/HelpersRaising.c +296 -283
  271. nuitka/build/static_src/HelpersSafeStrings.c +34 -22
  272. nuitka/build/static_src/HelpersSequences.c +18 -19
  273. nuitka/build/static_src/HelpersSlices.c +29 -23
  274. nuitka/build/static_src/HelpersStrings.c +235 -38
  275. nuitka/build/static_src/HelpersTuples.c +46 -34
  276. nuitka/build/static_src/HelpersTypes.c +166 -25
  277. nuitka/build/static_src/InspectPatcher.c +108 -27
  278. nuitka/build/static_src/MainProgram.c +464 -280
  279. nuitka/build/static_src/MetaPathBasedLoader.c +381 -257
  280. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
  281. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
  282. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +227 -29
  283. nuitka/build/static_src/OnefileBootstrap.c +281 -164
  284. nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
  285. nuitka/code_generation/AsyncgenCodes.py +21 -23
  286. nuitka/code_generation/AttributeCodes.py +31 -27
  287. nuitka/code_generation/BinaryOperationHelperDefinitions.py +290 -184
  288. nuitka/code_generation/BranchCodes.py +19 -17
  289. nuitka/code_generation/BuiltinCodes.py +29 -18
  290. nuitka/code_generation/CallCodes.py +35 -33
  291. nuitka/code_generation/ClassCodes.py +19 -17
  292. nuitka/code_generation/CodeGeneration.py +61 -28
  293. nuitka/code_generation/CodeHelperSelection.py +20 -18
  294. nuitka/code_generation/CodeHelpers.py +28 -21
  295. nuitka/code_generation/CodeObjectCodes.py +36 -26
  296. nuitka/code_generation/ComparisonCodes.py +51 -22
  297. nuitka/code_generation/ComparisonHelperDefinitions.py +42 -25
  298. nuitka/code_generation/ConditionalCodes.py +19 -17
  299. nuitka/code_generation/ConstantCodes.py +82 -28
  300. nuitka/code_generation/Contexts.py +180 -42
  301. nuitka/code_generation/CoroutineCodes.py +21 -23
  302. nuitka/code_generation/CtypesCodes.py +19 -17
  303. nuitka/code_generation/DictCodes.py +28 -26
  304. nuitka/code_generation/Emission.py +21 -18
  305. nuitka/code_generation/ErrorCodes.py +57 -79
  306. nuitka/code_generation/EvalCodes.py +24 -20
  307. nuitka/code_generation/ExceptionCodes.py +182 -104
  308. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +45 -27
  309. nuitka/code_generation/ExpressionCodes.py +19 -17
  310. nuitka/code_generation/FrameCodes.py +28 -31
  311. nuitka/code_generation/FunctionCodes.py +26 -27
  312. nuitka/code_generation/GeneratorCodes.py +25 -26
  313. nuitka/code_generation/GlobalConstants.py +51 -25
  314. nuitka/code_generation/GlobalsLocalsCodes.py +23 -21
  315. nuitka/code_generation/IdCodes.py +19 -17
  316. nuitka/code_generation/ImportCodes.py +90 -50
  317. nuitka/code_generation/Indentation.py +23 -22
  318. nuitka/code_generation/IndexCodes.py +19 -17
  319. nuitka/code_generation/InjectCCodes.py +14 -12
  320. nuitka/code_generation/IntegerCodes.py +19 -17
  321. nuitka/code_generation/IteratorCodes.py +86 -71
  322. nuitka/code_generation/JitCodes.py +44 -0
  323. nuitka/code_generation/LabelCodes.py +19 -17
  324. nuitka/code_generation/LineNumberCodes.py +20 -20
  325. nuitka/code_generation/ListCodes.py +32 -36
  326. nuitka/code_generation/LoaderCodes.py +22 -17
  327. nuitka/code_generation/LocalsDictCodes.py +56 -32
  328. nuitka/code_generation/LoopCodes.py +19 -17
  329. nuitka/code_generation/MatchCodes.py +42 -22
  330. nuitka/code_generation/ModuleCodes.py +71 -29
  331. nuitka/code_generation/Namify.py +27 -23
  332. nuitka/code_generation/NetworkxCodes.py +51 -0
  333. nuitka/code_generation/OperationCodes.py +80 -51
  334. nuitka/code_generation/PackageResourceCodes.py +96 -23
  335. nuitka/code_generation/PrintCodes.py +19 -17
  336. nuitka/code_generation/PythonAPICodes.py +19 -17
  337. nuitka/code_generation/RaisingCodes.py +183 -107
  338. nuitka/code_generation/Reports.py +32 -22
  339. nuitka/code_generation/ReturnCodes.py +20 -32
  340. nuitka/code_generation/SetCodes.py +19 -17
  341. nuitka/code_generation/SliceCodes.py +22 -20
  342. nuitka/code_generation/StringCodes.py +19 -17
  343. nuitka/code_generation/SubscriptCodes.py +24 -30
  344. nuitka/code_generation/TensorflowCodes.py +54 -0
  345. nuitka/code_generation/TryCodes.py +31 -41
  346. nuitka/code_generation/TupleCodes.py +20 -18
  347. nuitka/code_generation/TypeAliasCodes.py +119 -0
  348. nuitka/code_generation/VariableCodes.py +118 -55
  349. nuitka/code_generation/VariableDeclarations.py +28 -25
  350. nuitka/code_generation/YieldCodes.py +23 -21
  351. nuitka/code_generation/__init__.py +5 -4
  352. nuitka/code_generation/c_types/CTypeBases.py +29 -19
  353. nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
  354. nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
  355. nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
  356. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +22 -17
  357. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +22 -21
  358. nuitka/code_generation/c_types/CTypeNuitkaInts.py +89 -43
  359. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +20 -18
  360. nuitka/code_generation/c_types/CTypePyObjectPointers.py +43 -31
  361. nuitka/code_generation/c_types/CTypeVoids.py +20 -17
  362. nuitka/code_generation/c_types/__init__.py +5 -4
  363. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +20 -19
  364. nuitka/code_generation/templates/CodeTemplatesConstants.py +143 -39
  365. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +20 -19
  366. nuitka/code_generation/templates/CodeTemplatesExceptions.py +33 -33
  367. nuitka/code_generation/templates/CodeTemplatesFrames.py +36 -27
  368. nuitka/code_generation/templates/CodeTemplatesFunction.py +20 -19
  369. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +21 -19
  370. nuitka/code_generation/templates/CodeTemplatesIterators.py +19 -53
  371. nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
  372. nuitka/code_generation/templates/CodeTemplatesModules.py +278 -169
  373. nuitka/code_generation/templates/CodeTemplatesVariables.py +115 -27
  374. nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
  375. nuitka/code_generation/templates/__init__.py +5 -4
  376. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
  377. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +21 -21
  378. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +79 -28
  379. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
  380. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
  381. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
  382. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
  383. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +74 -106
  384. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +19 -20
  385. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +19 -19
  386. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
  387. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
  388. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  389. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
  390. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +37 -37
  391. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  392. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
  393. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
  394. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +50 -38
  395. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +27 -27
  396. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +37 -37
  397. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +31 -31
  398. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +35 -31
  399. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
  400. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +28 -28
  401. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
  402. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
  403. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
  404. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +48 -48
  405. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
  406. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +27 -25
  407. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
  408. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
  409. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
  410. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
  411. nuitka/containers/Namedtuples.py +25 -18
  412. nuitka/containers/OrderedSets.py +105 -5
  413. nuitka/containers/OrderedSetsFallback.py +19 -17
  414. nuitka/containers/__init__.py +5 -4
  415. nuitka/distutils/Build.py +33 -18
  416. nuitka/distutils/DistutilCommands.py +84 -33
  417. nuitka/distutils/__init__.py +5 -4
  418. nuitka/finalizations/Finalization.py +21 -18
  419. nuitka/finalizations/FinalizeMarkups.py +31 -55
  420. nuitka/finalizations/__init__.py +5 -4
  421. nuitka/freezer/DependsExe.py +60 -30
  422. nuitka/freezer/DllDependenciesCommon.py +47 -20
  423. nuitka/freezer/DllDependenciesMacOS.py +165 -58
  424. nuitka/freezer/DllDependenciesPosix.py +29 -19
  425. nuitka/freezer/DllDependenciesWin32.py +55 -33
  426. nuitka/freezer/ImportDetection.py +23 -17
  427. nuitka/freezer/IncludedDataFiles.py +142 -48
  428. nuitka/freezer/IncludedEntryPoints.py +104 -39
  429. nuitka/freezer/Onefile.py +32 -22
  430. nuitka/freezer/Standalone.py +166 -53
  431. nuitka/freezer/__init__.py +5 -4
  432. nuitka/importing/IgnoreListing.py +19 -17
  433. nuitka/importing/ImportCache.py +24 -21
  434. nuitka/importing/ImportResolving.py +103 -95
  435. nuitka/importing/Importing.py +319 -98
  436. nuitka/importing/PreloadedPackages.py +21 -18
  437. nuitka/importing/Recursion.py +142 -47
  438. nuitka/importing/StandardLibrary.py +96 -80
  439. nuitka/importing/__init__.py +5 -4
  440. nuitka/nodes/AsyncgenNodes.py +22 -23
  441. nuitka/nodes/AttributeLookupNodes.py +19 -17
  442. nuitka/nodes/AttributeNodes.py +19 -17
  443. nuitka/nodes/AttributeNodesGenerated.py +49 -24
  444. nuitka/nodes/BuiltinAllNodes.py +19 -17
  445. nuitka/nodes/BuiltinAnyNodes.py +19 -17
  446. nuitka/nodes/BuiltinComplexNodes.py +20 -17
  447. nuitka/nodes/BuiltinDecodingNodes.py +19 -17
  448. nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
  449. nuitka/nodes/BuiltinDictNodes.py +19 -17
  450. nuitka/nodes/BuiltinFormatNodes.py +20 -17
  451. nuitka/nodes/BuiltinHashNodes.py +19 -17
  452. nuitka/nodes/BuiltinInputNodes.py +19 -17
  453. nuitka/nodes/BuiltinIntegerNodes.py +19 -17
  454. nuitka/nodes/BuiltinIteratorNodes.py +25 -21
  455. nuitka/nodes/BuiltinLenNodes.py +19 -17
  456. nuitka/nodes/BuiltinNextNodes.py +19 -17
  457. nuitka/nodes/BuiltinOpenNodes.py +52 -18
  458. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
  459. nuitka/nodes/BuiltinRangeNodes.py +21 -19
  460. nuitka/nodes/BuiltinRefNodes.py +73 -40
  461. nuitka/nodes/BuiltinSumNodes.py +20 -18
  462. nuitka/nodes/BuiltinTypeNodes.py +19 -17
  463. nuitka/nodes/BuiltinVarsNodes.py +19 -18
  464. nuitka/nodes/BytesNodes.py +19 -17
  465. nuitka/nodes/CallNodes.py +19 -17
  466. nuitka/nodes/Checkers.py +19 -17
  467. nuitka/nodes/ChildrenHavingMixins.py +1624 -283
  468. nuitka/nodes/ClassNodes.py +49 -29
  469. nuitka/nodes/CodeObjectSpecs.py +29 -18
  470. nuitka/nodes/ComparisonNodes.py +19 -17
  471. nuitka/nodes/ConditionalNodes.py +24 -25
  472. nuitka/nodes/ConstantRefNodes.py +57 -17
  473. nuitka/nodes/ContainerMakingNodes.py +19 -17
  474. nuitka/nodes/ContainerOperationNodes.py +19 -17
  475. nuitka/nodes/CoroutineNodes.py +22 -23
  476. nuitka/nodes/CtypesNodes.py +19 -18
  477. nuitka/nodes/DictionaryNodes.py +19 -18
  478. nuitka/nodes/ExceptionNodes.py +131 -43
  479. nuitka/nodes/ExecEvalNodes.py +19 -17
  480. nuitka/nodes/ExpressionBases.py +34 -26
  481. nuitka/nodes/ExpressionBasesGenerated.py +341 -35
  482. nuitka/nodes/ExpressionShapeMixins.py +19 -17
  483. nuitka/nodes/FrameNodes.py +41 -28
  484. nuitka/nodes/FunctionAttributeNodes.py +19 -17
  485. nuitka/nodes/FunctionNodes.py +84 -38
  486. nuitka/nodes/FutureSpecs.py +35 -20
  487. nuitka/nodes/GeneratorNodes.py +24 -25
  488. nuitka/nodes/GlobalsLocalsNodes.py +22 -17
  489. nuitka/nodes/HardImportNodesGenerated.py +746 -148
  490. nuitka/nodes/ImportHardNodes.py +46 -38
  491. nuitka/nodes/ImportNodes.py +438 -448
  492. nuitka/nodes/IndicatorMixins.py +19 -17
  493. nuitka/nodes/InjectCNodes.py +19 -18
  494. nuitka/nodes/IterationHandles.py +55 -34
  495. nuitka/nodes/KeyValuePairNodes.py +19 -17
  496. nuitka/nodes/ListOperationNodes.py +33 -21
  497. nuitka/nodes/LocalsDictNodes.py +19 -17
  498. nuitka/nodes/LocalsScopes.py +41 -41
  499. nuitka/nodes/LoopNodes.py +28 -17
  500. nuitka/nodes/MatchNodes.py +37 -24
  501. nuitka/nodes/ModuleAttributeNodes.py +18 -35
  502. nuitka/nodes/ModuleNodes.py +90 -31
  503. nuitka/nodes/NetworkxNodes.py +45 -0
  504. nuitka/nodes/NodeBases.py +73 -44
  505. nuitka/nodes/NodeMakingHelpers.py +92 -69
  506. nuitka/nodes/NodeMetaClasses.py +45 -28
  507. nuitka/nodes/OperatorNodes.py +28 -26
  508. nuitka/nodes/OperatorNodesUnary.py +148 -20
  509. nuitka/nodes/OsSysNodes.py +97 -18
  510. nuitka/nodes/OutlineNodes.py +24 -22
  511. nuitka/nodes/PackageMetadataNodes.py +37 -27
  512. nuitka/nodes/PackageResourceNodes.py +29 -23
  513. nuitka/nodes/PrintNodes.py +19 -17
  514. nuitka/nodes/ReturnNodes.py +20 -18
  515. nuitka/nodes/SideEffectNodes.py +19 -17
  516. nuitka/nodes/SliceNodes.py +20 -18
  517. nuitka/nodes/StatementBasesGenerated.py +125 -79
  518. nuitka/nodes/StatementNodes.py +27 -24
  519. nuitka/nodes/StrNodes.py +19 -17
  520. nuitka/nodes/StringConcatenationNodes.py +20 -17
  521. nuitka/nodes/SubscriptNodes.py +27 -25
  522. nuitka/nodes/TensorflowNodes.py +38 -0
  523. nuitka/nodes/TryNodes.py +19 -17
  524. nuitka/nodes/TypeMatchNodes.py +19 -17
  525. nuitka/nodes/TypeNodes.py +68 -18
  526. nuitka/nodes/VariableAssignNodes.py +122 -64
  527. nuitka/nodes/VariableDelNodes.py +19 -17
  528. nuitka/nodes/VariableNameNodes.py +19 -17
  529. nuitka/nodes/VariableRefNodes.py +63 -26
  530. nuitka/nodes/VariableReleaseNodes.py +19 -17
  531. nuitka/nodes/YieldNodes.py +21 -19
  532. nuitka/nodes/__init__.py +5 -4
  533. nuitka/nodes/shapes/BuiltinTypeShapes.py +169 -46
  534. nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
  535. nuitka/nodes/shapes/ShapeMixins.py +57 -17
  536. nuitka/nodes/shapes/StandardShapes.py +80 -21
  537. nuitka/nodes/shapes/__init__.py +5 -4
  538. nuitka/optimizations/BytecodeDemotion.py +21 -18
  539. nuitka/optimizations/FunctionInlining.py +22 -23
  540. nuitka/optimizations/Graphs.py +19 -17
  541. nuitka/optimizations/Optimization.py +39 -35
  542. nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
  543. nuitka/optimizations/Tags.py +19 -18
  544. nuitka/optimizations/TraceCollections.py +67 -24
  545. nuitka/optimizations/ValueTraces.py +92 -25
  546. nuitka/optimizations/__init__.py +5 -4
  547. nuitka/pgo/PGO.py +33 -23
  548. nuitka/pgo/__init__.py +5 -4
  549. nuitka/plugins/PluginBase.py +655 -112
  550. nuitka/plugins/Plugins.py +247 -61
  551. nuitka/plugins/YamlPluginBase.py +121 -0
  552. nuitka/plugins/__init__.py +5 -4
  553. nuitka/plugins/standard/AntiBloatPlugin.py +374 -135
  554. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
  555. nuitka/plugins/standard/DataFilesPlugin.py +65 -29
  556. nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
  557. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  558. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
  559. nuitka/plugins/standard/DillPlugin.py +42 -134
  560. nuitka/plugins/standard/DllFilesPlugin.py +125 -42
  561. nuitka/plugins/standard/EnumPlugin.py +19 -17
  562. nuitka/plugins/standard/EventletPlugin.py +19 -17
  563. nuitka/plugins/standard/GeventPlugin.py +19 -17
  564. nuitka/plugins/standard/GiPlugin.py +44 -28
  565. nuitka/plugins/standard/GlfwPlugin.py +20 -17
  566. nuitka/plugins/standard/ImplicitImports.py +403 -54
  567. nuitka/plugins/standard/KivyPlugin.py +24 -20
  568. nuitka/plugins/standard/MatplotlibPlugin.py +99 -42
  569. nuitka/plugins/standard/MultiprocessingPlugin.py +35 -39
  570. nuitka/plugins/standard/NumpyPlugin.py +19 -17
  571. nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
  572. nuitka/plugins/standard/PbrPlugin.py +21 -19
  573. nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
  574. nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
  575. nuitka/plugins/standard/PmwPlugin.py +30 -27
  576. nuitka/plugins/standard/PySidePyQtPlugin.py +82 -80
  577. nuitka/plugins/standard/PywebViewPlugin.py +19 -17
  578. nuitka/plugins/standard/SpacyPlugin.py +136 -0
  579. nuitka/plugins/standard/TensorflowPlugin.py +20 -17
  580. nuitka/plugins/standard/TkinterPlugin.py +102 -108
  581. nuitka/plugins/standard/TorchPlugin.py +20 -17
  582. nuitka/plugins/standard/TransformersPlugin.py +90 -231
  583. nuitka/plugins/standard/TrioPlugin.py +18 -15
  584. nuitka/plugins/standard/UpxPlugin.py +21 -19
  585. nuitka/plugins/standard/__init__.py +5 -4
  586. nuitka/plugins/standard/standard.nuitka-package.config.yml +3925 -1293
  587. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
  588. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +154 -66
  589. nuitka/reports/CompilationReportReader.py +79 -0
  590. nuitka/reports/LicenseReport.rst.j2 +21 -21
  591. nuitka/reports/Reports.py +363 -76
  592. nuitka/reports/__init__.py +5 -4
  593. nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
  594. nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
  595. nuitka/specs/BuiltinListOperationSpecs.py +18 -17
  596. nuitka/specs/BuiltinParameterSpecs.py +35 -21
  597. nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
  598. nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
  599. nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
  600. nuitka/specs/HardImportSpecs.py +74 -22
  601. nuitka/specs/ParameterSpecs.py +60 -45
  602. nuitka/specs/__init__.py +5 -4
  603. nuitka/tools/Basics.py +20 -18
  604. nuitka/tools/__init__.py +5 -4
  605. nuitka/tools/commercial/__init__.py +7 -6
  606. nuitka/tools/data_composer/DataComposer.py +78 -62
  607. nuitka/tools/data_composer/__init__.py +5 -4
  608. nuitka/tools/data_composer/__main__.py +18 -17
  609. nuitka/tools/environments/CreateEnvironment.py +20 -17
  610. nuitka/tools/environments/Virtualenv.py +60 -32
  611. nuitka/tools/environments/__init__.py +5 -4
  612. nuitka/tools/general/__init__.py +5 -4
  613. nuitka/tools/general/dll_report/__init__.py +5 -4
  614. nuitka/tools/general/dll_report/__main__.py +29 -22
  615. nuitka/tools/general/find_module/FindModuleCode.py +35 -22
  616. nuitka/tools/general/find_module/__init__.py +5 -4
  617. nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
  618. nuitka/tools/onefile_compressor/__init__.py +5 -4
  619. nuitka/tools/onefile_compressor/__main__.py +18 -17
  620. nuitka/tools/podman/Podman.py +19 -17
  621. nuitka/tools/podman/__init__.py +5 -4
  622. nuitka/tools/podman/__main__.py +35 -19
  623. nuitka/tools/profiler/__init__.py +5 -4
  624. nuitka/tools/profiler/__main__.py +18 -17
  625. nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
  626. nuitka/tools/scanning/DisplayPackageData.py +31 -19
  627. nuitka/tools/scanning/__init__.py +5 -4
  628. nuitka/tools/specialize/CTypeDescriptions.py +251 -80
  629. nuitka/tools/specialize/Common.py +18 -17
  630. nuitka/tools/specialize/SpecializeC.py +248 -82
  631. nuitka/tools/specialize/SpecializePython.py +108 -45
  632. nuitka/tools/specialize/__init__.py +5 -4
  633. nuitka/tools/testing/Common.py +175 -114
  634. nuitka/tools/testing/Constructs.py +19 -17
  635. nuitka/tools/testing/OutputComparison.py +54 -18
  636. nuitka/tools/testing/Pythons.py +19 -18
  637. nuitka/tools/testing/RuntimeTracing.py +20 -19
  638. nuitka/tools/testing/SearchModes.py +26 -20
  639. nuitka/tools/testing/Valgrind.py +19 -17
  640. nuitka/tools/testing/__init__.py +5 -4
  641. nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
  642. nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
  643. nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
  644. nuitka/tools/testing/compare_with_cpython/__main__.py +39 -30
  645. nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
  646. nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
  647. nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
  648. nuitka/tools/testing/measure_construct_performance/__main__.py +23 -33
  649. nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
  650. nuitka/tools/testing/run_nuitka_tests/__main__.py +134 -51
  651. nuitka/tools/watch/AutoStage.py +145 -0
  652. nuitka/tools/watch/GitHub.py +113 -0
  653. nuitka/tools/watch/__init__.py +5 -4
  654. nuitka/tools/watch/__main__.py +322 -91
  655. nuitka/tree/Building.py +184 -182
  656. nuitka/tree/ComplexCallHelperFunctions.py +84 -58
  657. nuitka/tree/Extractions.py +19 -17
  658. nuitka/tree/InternalModule.py +29 -20
  659. nuitka/tree/Operations.py +19 -17
  660. nuitka/tree/ReformulationAssertStatements.py +51 -31
  661. nuitka/tree/ReformulationAssignmentStatements.py +96 -91
  662. nuitka/tree/ReformulationBooleanExpressions.py +19 -17
  663. nuitka/tree/ReformulationCallExpressions.py +20 -18
  664. nuitka/tree/ReformulationClasses.py +45 -39
  665. nuitka/tree/ReformulationClasses3.py +239 -116
  666. nuitka/tree/ReformulationComparisonExpressions.py +29 -35
  667. nuitka/tree/ReformulationContractionExpressions.py +58 -55
  668. nuitka/tree/ReformulationDictionaryCreation.py +41 -35
  669. nuitka/tree/ReformulationExecStatements.py +42 -39
  670. nuitka/tree/ReformulationForLoopStatements.py +30 -34
  671. nuitka/tree/ReformulationFunctionStatements.py +59 -55
  672. nuitka/tree/ReformulationImportStatements.py +34 -29
  673. nuitka/tree/ReformulationLambdaExpressions.py +23 -24
  674. nuitka/tree/ReformulationMatchStatements.py +246 -92
  675. nuitka/tree/ReformulationMultidist.py +22 -18
  676. nuitka/tree/ReformulationNamespacePackages.py +55 -46
  677. nuitka/tree/ReformulationPrintStatements.py +23 -24
  678. nuitka/tree/ReformulationSequenceCreation.py +50 -49
  679. nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
  680. nuitka/tree/ReformulationTryExceptStatements.py +19 -17
  681. nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
  682. nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
  683. nuitka/tree/ReformulationWithStatements.py +39 -41
  684. nuitka/tree/ReformulationYieldExpressions.py +44 -24
  685. nuitka/tree/SourceHandling.py +76 -31
  686. nuitka/tree/SyntaxErrors.py +19 -17
  687. nuitka/tree/TreeHelpers.py +33 -20
  688. nuitka/tree/VariableClosure.py +35 -39
  689. nuitka/tree/__init__.py +5 -4
  690. nuitka/utils/AppDirs.py +41 -20
  691. nuitka/utils/CStrings.py +66 -21
  692. nuitka/utils/CommandLineOptions.py +111 -22
  693. nuitka/utils/Distributions.py +445 -54
  694. nuitka/utils/Download.py +89 -57
  695. nuitka/utils/Execution.py +102 -58
  696. nuitka/utils/FileOperations.py +357 -128
  697. nuitka/utils/Hashing.py +55 -33
  698. nuitka/utils/Images.py +26 -19
  699. nuitka/utils/Importing.py +119 -37
  700. nuitka/utils/InlineCopies.py +52 -0
  701. nuitka/utils/InstalledPythons.py +85 -75
  702. nuitka/utils/InstanceCounters.py +20 -17
  703. nuitka/utils/Jinja2.py +30 -22
  704. nuitka/utils/Json.py +21 -19
  705. nuitka/utils/MacOSApp.py +26 -18
  706. nuitka/utils/MemoryUsage.py +20 -18
  707. nuitka/utils/ModuleNames.py +42 -26
  708. nuitka/utils/PackageResources.py +44 -0
  709. nuitka/utils/ReExecute.py +50 -28
  710. nuitka/utils/Rest.py +20 -17
  711. nuitka/utils/SharedLibraries.py +161 -75
  712. nuitka/utils/Shebang.py +20 -17
  713. nuitka/utils/Signing.py +63 -18
  714. nuitka/utils/SlotMetaClasses.py +57 -0
  715. nuitka/utils/StaticLibraries.py +83 -56
  716. nuitka/utils/ThreadedExecutor.py +18 -17
  717. nuitka/utils/Timing.py +22 -20
  718. nuitka/utils/Utils.py +132 -25
  719. nuitka/utils/WindowsFileUsage.py +22 -20
  720. nuitka/utils/WindowsResources.py +25 -18
  721. nuitka/utils/Yaml.py +62 -24
  722. nuitka/utils/__init__.py +5 -4
  723. Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
  724. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  725. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  726. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
  727. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
  728. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.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
  /* The main program for a compiled program.
19
4
  *
20
5
  * It needs to prepare the interpreter and then loads and executes
@@ -23,7 +8,7 @@
23
8
  * For multiprocessing, joblib, loky there is things here that will
24
9
  * allow them to fork properly with their intended entry points.
25
10
  *
26
- * spell-checker: ignore joblib loky
11
+ * spell-checker: ignore joblib loky anyio platlibdir
27
12
  *
28
13
  */
29
14
 
@@ -47,10 +32,10 @@
47
32
  #define SYSFLAG_BYTES_WARNING 0
48
33
  #define SYSFLAG_UTF8 0
49
34
  #define SYSFLAG_UNBUFFERED 0
50
- #endif
51
-
52
- #ifndef NUITKA_MAIN_MODULE_NAME
35
+ #define SYSFLAG_DONTWRITEBYTECODE 0
53
36
  #define NUITKA_MAIN_MODULE_NAME "__main__"
37
+ #define NUITKA_MAIN_IS_PACKAGE_BOOL false
38
+ #define _NUITKA_ATTACH_CONSOLE_WINDOW 1
54
39
  #endif
55
40
 
56
41
  // It doesn't work for MinGW64 to update the standard output handles early on,
@@ -65,7 +50,11 @@
65
50
  #define NUITKA_STANDARD_HANDLES_EARLY 0
66
51
  #endif
67
52
 
68
- extern PyCodeObject *codeobj_main;
53
+ #if defined(_WIN32) && (defined(_NUITKA_ATTACH_CONSOLE_WINDOW) || defined(_NUITKA_HIDE_CONSOLE_WINDOW))
54
+ #include "HelpersConsole.c"
55
+ #endif
56
+
57
+ extern PyCodeObject *code_objects_main;
69
58
 
70
59
  /* For later use in "Py_GetArgcArgv" we expose the needed value */
71
60
  #if PYTHON_VERSION >= 0x300
@@ -79,13 +68,13 @@ static int orig_argc;
79
68
  extern void copyFrozenModulesTo(struct _frozen *destination);
80
69
 
81
70
  // The original frozen modules list.
82
- #if PYTHON_VERSION < 0x340
71
+ #if PYTHON_VERSION < 0x300
83
72
  static struct _frozen *old_frozen = NULL;
84
73
  #else
85
74
  static struct _frozen const *old_frozen = NULL;
86
75
  #endif
87
76
 
88
- static void prepareFrozenModules() {
77
+ static void prepareFrozenModules(void) {
89
78
  // Tell the CPython library to use our pre-compiled modules as frozen
90
79
  // modules. This for those modules/packages like "encoding" that will be
91
80
  // loaded during "Py_Initialize" already, for the others they may be
@@ -118,112 +107,7 @@ static void prepareFrozenModules() {
118
107
  }
119
108
  #endif
120
109
 
121
- #if SYSFLAG_NO_RANDOMIZATION == 1 || SYSFLAG_UNBUFFERED == 1 || defined(_NUITKA_STANDALONE)
122
-
123
- #if defined(_WIN32)
124
- #define environment_char_t wchar_t
125
-
126
- static environment_char_t const *getEnvironmentVariable(char const *name) {
127
- // Max size for environment variables according to docs.
128
- wchar_t buffer[32768];
129
- buffer[0] = 0;
130
-
131
- wchar_t name_wide[40];
132
- name_wide[0] = 0;
133
- appendStringSafeW(name_wide, name, sizeof(name_wide) / sizeof(wchar_t));
134
-
135
- // Size must be in bytes apparently, not in characters. Cannot be larger anyway.
136
- DWORD res = GetEnvironmentVariableW(name_wide, buffer, 65536);
137
-
138
- if (res == 0 || res > sizeof(buffer)) {
139
- return NULL;
140
- }
141
-
142
- return wcsdup(buffer);
143
- }
144
-
145
- static void setEnvironmentVariable(char const *name, environment_char_t const *value) {
146
- assert(name != NULL);
147
- assert(value != NULL);
148
-
149
- wchar_t name_wide[40];
150
- name_wide[0] = 0;
151
- appendStringSafeW(name_wide, name, sizeof(name_wide) / sizeof(wchar_t));
152
-
153
- DWORD res = SetEnvironmentVariableW(name_wide, value);
154
- assert(wcscmp(getEnvironmentVariable(name), value) == 0);
155
-
156
- assert(res != 0);
157
- }
158
-
159
- static void unsetEnvironmentVariable(char const *name) {
160
- wchar_t name_wide[40];
161
- name_wide[0] = 0;
162
- appendStringSafeW(name_wide, name, sizeof(name_wide) / sizeof(wchar_t));
163
-
164
- DWORD res = SetEnvironmentVariableW(name_wide, NULL);
165
-
166
- assert(res != 0);
167
- }
168
-
169
- #define makeEnvironmentLiteral(x) L##x
170
-
171
- #else
172
- #define environment_char_t char
173
-
174
- #define makeEnvironmentLiteral(x) x
175
-
176
- static environment_char_t const *getEnvironmentVariable(char const *name) { return getenv(name); }
177
-
178
- static void setEnvironmentVariable(char const *name, environment_char_t const *value) { setenv(name, value, 1); }
179
-
180
- static void unsetEnvironmentVariable(char const *name) { unsetenv(name); }
181
-
182
- #endif
183
-
184
- static void undoEnvironmentVariable(PyThreadState *tstate, char const *variable_name,
185
- environment_char_t const *old_value) {
186
- PyObject *os_module = IMPORT_HARD_OS();
187
- CHECK_OBJECT(os_module);
188
-
189
- PyObject *os_environ = PyObject_GetAttrString(os_module, "environ");
190
- CHECK_OBJECT(os_environ);
191
-
192
- PyObject *variable_name_str = Nuitka_String_FromString(variable_name);
193
- CHECK_OBJECT(variable_name_str);
194
-
195
- if (old_value) {
196
- setEnvironmentVariable(variable_name, old_value);
197
-
198
- #ifdef _WIN32
199
- PyObject *env_value = NuitkaUnicode_FromWideChar(old_value, -1);
200
- #else
201
- PyObject *env_value = Nuitka_String_FromString(old_value);
202
- #endif
203
- CHECK_OBJECT(env_value);
204
-
205
- int res = PyObject_SetItem(os_environ, variable_name_str, env_value);
206
-
207
- if (unlikely(res != 0)) {
208
- PyErr_PrintEx(1);
209
- Py_Exit(1);
210
- }
211
-
212
- Py_DECREF(env_value);
213
- } else {
214
- unsetEnvironmentVariable(variable_name);
215
-
216
- int res = PyObject_DelItem(os_environ, variable_name_str);
217
-
218
- if (unlikely(res != 0)) {
219
- CLEAR_ERROR_OCCURRED(tstate);
220
- }
221
- }
222
-
223
- Py_DECREF(variable_name_str);
224
- Py_DECREF(os_environ);
225
- }
226
- #endif
110
+ #include "nuitka/environment_variables.h"
227
111
 
228
112
  #ifdef _NUITKA_STANDALONE
229
113
 
@@ -313,7 +197,7 @@ extern void _initCompiledFrameType();
313
197
  static wchar_t **convertCommandLineParameters(int argc, char **argv) {
314
198
  // Originally taken from CPython3: There seems to be no sane way to use
315
199
  static wchar_t **argv_copy;
316
- argv_copy = (wchar_t **)PyMem_MALLOC(sizeof(wchar_t *) * argc);
200
+ argv_copy = (wchar_t **)malloc(sizeof(wchar_t *) * argc);
317
201
 
318
202
  // Temporarily disable locale for conversions to not use it.
319
203
  char *old_locale = strdup(setlocale(LC_ALL, NULL));
@@ -344,6 +228,11 @@ static void PRINT_REFCOUNTS(void) {
344
228
 
345
229
  PRINT_STRING("REFERENCE counts at program end:\n");
346
230
  PRINT_STRING("active | allocated | released\n");
231
+ PRINT_FORMAT("Compiled Functions: %d | %d | %d (module/class ownership may occur)\n",
232
+ count_active_Nuitka_Function_Type, count_allocated_Nuitka_Function_Type,
233
+ count_released_Nuitka_Function_Type);
234
+ PRINT_FORMAT("Compiled Generators: %d | %d | %d\n", count_active_Nuitka_Generator_Type,
235
+ count_allocated_Nuitka_Generator_Type, count_released_Nuitka_Generator_Type);
347
236
  #if PYTHON_VERSION >= 0x350
348
237
  PRINT_FORMAT("Compiled Coroutines: %d | %d | %d\n", count_active_Nuitka_Coroutine_Type,
349
238
  count_allocated_Nuitka_Coroutine_Type, count_released_Nuitka_Coroutine_Type);
@@ -366,6 +255,8 @@ static void PRINT_REFCOUNTS(void) {
366
255
 
367
256
  PRINT_FORMAT("Compiled Frames: %d | %d | %d (cache usage may occur)\n", count_active_Nuitka_Frame_Type,
368
257
  count_allocated_Nuitka_Frame_Type, count_released_Nuitka_Frame_Type);
258
+ PRINT_FORMAT("Compiled Cells: %d | %d | %d (function ownership may occur)\n", count_active_Nuitka_Cell_Type,
259
+ count_allocated_Nuitka_Cell_Type, count_released_Nuitka_Cell_Type);
369
260
  PRINT_STRING("CACHED counts at program end:\n");
370
261
  PRINT_STRING("active | allocated | released | hits\n");
371
262
  PRINT_FORMAT("Cached Frames: %d | %d | %d | %d\n", count_active_frame_cache_instances,
@@ -374,17 +265,16 @@ static void PRINT_REFCOUNTS(void) {
374
265
  }
375
266
  #endif
376
267
 
377
- static int HANDLE_PROGRAM_EXIT(void) {
268
+ static int HANDLE_PROGRAM_EXIT(PyThreadState *tstate) {
378
269
  #if _DEBUG_REFCOUNTS
379
270
  PRINT_REFCOUNTS();
380
271
  #endif
381
272
 
382
273
  int exit_code;
383
274
 
384
- PyThreadState *tstate = PyThreadState_GET();
385
-
386
275
  if (HAS_ERROR_OCCURRED(tstate)) {
387
- #if PYTHON_VERSION >= 0x300
276
+ // TODO: Clarify which versions this applies to still
277
+ #if PYTHON_VERSION >= 0x300 && PYTHON_VERSION < 0x3c0
388
278
  /* Remove the frozen importlib traceback part, which would not be compatible. */
389
279
 
390
280
  while (tstate->curexc_traceback) {
@@ -402,6 +292,7 @@ static int HANDLE_PROGRAM_EXIT(void) {
402
292
  break;
403
293
  }
404
294
  #endif
295
+ NUITKA_FINALIZE_PROGRAM(tstate);
405
296
 
406
297
  PyErr_PrintEx(0);
407
298
 
@@ -413,13 +304,10 @@ static int HANDLE_PROGRAM_EXIT(void) {
413
304
  return exit_code;
414
305
  }
415
306
 
416
- static PyObject *EXECUTE_MAIN_MODULE(char const *module_name) {
307
+ static PyObject *EXECUTE_MAIN_MODULE(PyThreadState *tstate, char const *module_name, bool is_package) {
417
308
  NUITKA_INIT_PROGRAM_LATE(module_name);
418
309
 
419
- PyThreadState *tstate = PyThreadState_GET();
420
-
421
- #if NUITKA_MAIN_PACKAGE_MODE
422
- {
310
+ if (is_package) {
423
311
  char const *w = module_name;
424
312
 
425
313
  for (;;) {
@@ -442,25 +330,27 @@ static PyObject *EXECUTE_MAIN_MODULE(char const *module_name) {
442
330
  }
443
331
  }
444
332
  }
445
- #endif
446
333
 
447
334
  return IMPORT_EMBEDDED_MODULE(tstate, module_name);
448
335
  }
449
336
 
450
- #ifdef _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
337
+ #if _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
451
338
  #include "nuitka_windows_service.h"
452
339
 
453
340
  // Callback from Windows Service logic.
454
- bool SvcStartPython(void) {
455
- EXECUTE_MAIN_MODULE(NUITKA_MAIN_MODULE_NAME);
456
-
341
+ void SvcStartPython(void) {
457
342
  PyThreadState *tstate = PyThreadState_GET();
458
343
 
459
- if (HAS_ERROR_OCCURRED(tstate)) {
460
- return true;
461
- } else {
462
- return false;
463
- }
344
+ EXECUTE_MAIN_MODULE(tstate, NUITKA_MAIN_MODULE_NAME, NUITKA_MAIN_IS_PACKAGE_BOOL);
345
+
346
+ NUITKA_PRINT_TIMING("SvcStartPython() Python exited.")
347
+
348
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
349
+
350
+ // TODO: Log exception and call ReportSvcStatus
351
+
352
+ NUITKA_PRINT_TIMING("SvcStartPython(): Calling Py_Exit.");
353
+ Py_Exit(exit_code);
464
354
  }
465
355
 
466
356
  void SvcStopPython(void) { PyErr_SetInterrupt(); }
@@ -473,107 +363,127 @@ static bool is_multiprocessing_fork = false;
473
363
  static int multiprocessing_resource_tracker_arg = -1;
474
364
 
475
365
  // This is a joblib loky fork
366
+ #ifdef _WIN32
367
+ static bool is_joblib_popen_loky_win32 = false;
368
+ static int loky_joblib_pipe_handle_arg = 0;
369
+ static int loky_joblib_parent_pid_arg = 0;
370
+ #else
476
371
  static bool is_joblib_popen_loky_posix = false;
372
+ #endif
373
+
477
374
  // This is a joblib resource tracker if not -1
478
375
  static int loky_resource_tracker_arg = -1;
479
376
 
480
- // Parse the command line parameters and provide it to "sys" built-in module,
481
- // as well as decide if it's a multiprocessing usage.
377
+ // This is a "anyio.to_process" fork
378
+ static bool is_anyio_to_process = false;
379
+
380
+ // Parse the command line parameters to decide if it's a multiprocessing usage
381
+ // or something else special.
482
382
  #if _NUITKA_NATIVE_WCHAR_ARGV == 0
483
- static void setCommandLineParameters(int argc, char **argv, bool initial) {
383
+ static void setCommandLineParameters(int argc, char **argv) {
484
384
  #else
485
- static void setCommandLineParameters(int argc, wchar_t **argv, bool initial) {
385
+ static void setCommandLineParameters(int argc, wchar_t **argv) {
486
386
  #endif
487
- if (initial) {
488
387
  #ifdef _NUITKA_EXPERIMENTAL_DEBUG_SELF_FORKING
489
388
  #if _NUITKA_NATIVE_WCHAR_ARGV == 0
490
- printf("Commandline: ");
491
- for (int i = 0; i < argc; i++) {
492
- if (i != 0) {
493
- printf(" ");
494
- }
495
- printf("'%s'", argv[i]);
389
+ printf("Command line: ");
390
+ for (int i = 0; i < argc; i++) {
391
+ if (i != 0) {
392
+ printf(" ");
496
393
  }
497
- printf("\n");
394
+ printf("'%s'", argv[i]);
395
+ }
396
+ printf("\n");
498
397
  #else
499
- wprintf(L"Commandline: '%lS' %d\n", GetCommandLineW(), argc);
398
+ wprintf(L"Command line: '%lS' %d\n", GetCommandLineW(), argc);
500
399
  #endif
501
400
  #endif
502
401
 
503
- // We might need to handle special parameters from plugins that are
504
- // very deeply woven into command line handling. These are right now
505
- // multiprocessing, which indicates that it's forking via extra
402
+ // We might need to handle special parameters from plugins that are
403
+ // very deeply woven into command line handling. These are right now
404
+ // multiprocessing, which indicates that it's forking via extra
506
405
 
507
- // command line argument. And Windows Service indicates need to
508
- // install and exit here too.
406
+ // command line argument. And Windows Service indicates need to
407
+ // install and exit here too.
509
408
 
510
- for (int i = 1; i < argc; i++) {
511
- if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "--multiprocessing-fork")) == 0) {
512
- is_multiprocessing_fork = true;
513
- break;
514
- }
409
+ for (int i = 1; i < argc; i++) {
410
+ if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "--multiprocessing-fork")) == 0) {
411
+ is_multiprocessing_fork = true;
412
+ break;
413
+ }
515
414
 
516
- if ((i + 1 < argc) &&
517
- (strcmpFilename(argv[i], FILENAME_EMPTY_STR "--multiprocessing-resource-tracker")) == 0) {
415
+ if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "--multiprocessing-resource-tracker")) == 0) {
518
416
  #if _NUITKA_NATIVE_WCHAR_ARGV == 0
519
- multiprocessing_resource_tracker_arg = atoi(argv[i + 1]);
417
+ multiprocessing_resource_tracker_arg = atoi(argv[i + 1]);
520
418
  #else
521
- multiprocessing_resource_tracker_arg = _wtoi(argv[i + 1]);
419
+ multiprocessing_resource_tracker_arg = _wtoi(argv[i + 1]);
522
420
  #endif
523
- break;
524
- }
421
+ break;
422
+ }
525
423
 
526
- if (i == 1) {
527
- #ifdef _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
528
- if (strcmpFilename(argv[i], FILENAME_EMPTY_STR "install") == 0) {
529
- NUITKA_PRINT_TRACE("main(): Calling plugin SvcInstall().");
424
+ if (i == 1) {
425
+ #if _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
426
+ if (strcmpFilename(argv[i], FILENAME_EMPTY_STR "install") == 0) {
427
+ NUITKA_PRINT_TRACE("main(): Calling plugin SvcInstall().");
530
428
 
531
- SvcInstall();
532
- NUITKA_CANNOT_GET_HERE("SvcInstall must not return");
533
- }
429
+ SvcInstall();
430
+ NUITKA_CANNOT_GET_HERE("main(): SvcInstall must not return");
431
+ }
534
432
  #endif
433
+ }
434
+
435
+ if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "-c") == 0)) {
436
+ // The joblib loky resource tracker is launched like this.
437
+ if (scanFilename(argv[i + 1],
438
+ FILENAME_EMPTY_STR
439
+ "from joblib.externals.loky.backend.resource_tracker import main; main(%i, False)",
440
+ &loky_resource_tracker_arg)) {
441
+ break;
535
442
  }
536
443
 
537
- if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "-c") == 0)) {
538
- // The joblib loky resource tracker is launched like this.
539
- #if _NUITKA_NATIVE_WCHAR_ARGV == 0
540
- int res = sscanf(argv[i + 1],
541
- "from joblib.externals.loky.backend.resource_tracker import main; main(%i, False)",
542
- &loky_resource_tracker_arg);
543
- #else
544
- int res = swscanf(argv[i + 1],
545
- L"from joblib.externals.loky.backend.resource_tracker import main; main(%i, False)",
546
- &loky_resource_tracker_arg);
547
- #endif
548
- if (res == 1) {
549
- break;
550
- }
444
+ #if defined(_WIN32)
445
+ if (strcmpFilename(argv[i + 1], FILENAME_EMPTY_STR
446
+ "from joblib.externals.loky.backend.popen_loky_win32 import main; main()") == 0) {
447
+ is_joblib_popen_loky_win32 = true;
448
+ break;
551
449
  }
552
450
 
553
- if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "-m") == 0)) {
554
- // The joblib loky posix popen is launching like this.
555
- if (strcmpFilename(argv[i + 1], FILENAME_EMPTY_STR "joblib.externals.loky.backend.popen_loky_posix") ==
556
- 0) {
557
- is_joblib_popen_loky_posix = true;
558
- break;
559
- }
451
+ if (scanFilename(argv[i + 1],
452
+ FILENAME_EMPTY_STR "from joblib.externals.loky.backend.popen_loky_win32 import main; "
453
+ "main(pipe_handle=%i, parent_pid=%i)",
454
+ &loky_joblib_pipe_handle_arg, &loky_joblib_parent_pid_arg)) {
455
+ is_joblib_popen_loky_win32 = true;
456
+ break;
560
457
  }
561
458
 
562
- #if !defined(_NUITKA_DEPLOYMENT_MODE) && !defined(_NUITKA_NO_DEPLOYMENT_SELF_EXECUTION)
563
- if ((strcmpFilename(argv[i], FILENAME_EMPTY_STR "-c") == 0) ||
564
- (strcmpFilename(argv[i], FILENAME_EMPTY_STR "-m") == 0)) {
565
- fprintf(stderr,
566
- "Error, the program tried to call itself with '" FILENAME_FORMAT_STR "' argument. Disable with "
567
- "'--no-deployment-flag=self-execution'.\n",
568
- argv[i]);
569
- exit(2);
459
+ #endif
460
+ }
461
+
462
+ if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "-m") == 0)) {
463
+ #if !defined(_WIN32)
464
+ // The joblib loky posix popen is launching like this.
465
+ if (strcmpFilename(argv[i + 1], FILENAME_EMPTY_STR "joblib.externals.loky.backend.popen_loky_posix") == 0) {
466
+ is_joblib_popen_loky_posix = true;
467
+ break;
570
468
  }
571
469
  #endif
470
+
471
+ // The anyio.to_process module is launching like this.
472
+ if (strcmpFilename(argv[i + 1], FILENAME_EMPTY_STR "anyio.to_process") == 0) {
473
+ is_anyio_to_process = true;
474
+ break;
475
+ }
572
476
  }
573
477
 
574
- #ifdef _NUITKA_EXPERIMENTAL_DEBUG_SELF_FORKING
575
- assert(argc == 1 || is_multiprocessing_fork || is_joblib_popen_loky_posix || loky_resource_tracker_arg != -1 ||
576
- multiprocessing_resource_tracker_arg != -1);
478
+ #if !defined(_NUITKA_DEPLOYMENT_MODE) && !defined(_NUITKA_NO_DEPLOYMENT_SELF_EXECUTION)
479
+ if ((strcmpFilename(argv[i], FILENAME_EMPTY_STR "-c") == 0) ||
480
+ (strcmpFilename(argv[i], FILENAME_EMPTY_STR "-m") == 0)) {
481
+ fprintf(stderr,
482
+ "Error, the program tried to call itself with '" FILENAME_FORMAT_STR "' argument. Disable with "
483
+ "'--no-deployment-flag=self-execution'.\n",
484
+ argv[i]);
485
+ exit(2);
486
+ }
577
487
  #endif
578
488
  }
579
489
  }
@@ -826,6 +736,10 @@ static bool shallSetOutputHandleToNull(char const *name) {
826
736
  if (strcmp(name, "stderr") == 0) {
827
737
  return true;
828
738
  }
739
+ #elif defined(NUITKA_FORCED_STDERR_PATH) || defined(NUITKA_FORCED_STDERR_NONE_BOOL)
740
+ if (strcmp(name, "stderr") == 0) {
741
+ return false;
742
+ }
829
743
  #endif
830
744
 
831
745
  PyObject *sys_std_handle = Nuitka_SysGetObject(name);
@@ -909,44 +823,51 @@ static void setInputOutputHandles(PyThreadState *tstate) {
909
823
  // better, and force it to utf-8, it often becomes platform IO for no good
910
824
  // reason.
911
825
  #if NUITKA_STANDARD_HANDLES_EARLY == 1 && PYTHON_VERSION >= 0x370
826
+ NUITKA_PRINT_TRACE("setInputOutputHandles(): Early handles.");
912
827
  #if defined(NUITKA_FORCED_STDOUT_PATH) || defined(NUITKA_FORCED_STDERR_PATH)
913
- PyObject *args = MAKE_DICT_EMPTY();
828
+ PyObject *args = MAKE_DICT_EMPTY(tstate);
914
829
 
915
830
  DICT_SET_ITEM(args, const_str_plain_encoding, Nuitka_String_FromString("utf-8"));
916
831
  DICT_SET_ITEM(args, const_str_plain_line_buffering, Py_True);
917
832
 
918
833
  #if defined(NUITKA_FORCED_STDOUT_PATH)
834
+ NUITKA_PRINT_TRACE("setInputOutputHandles(): Forced stdout update.");
919
835
  {
920
836
  PyObject *sys_stdout = Nuitka_SysGetObject("stdout");
921
837
 
922
838
  PyObject *method = LOOKUP_ATTRIBUTE(tstate, sys_stdout, const_str_plain_reconfigure);
923
839
  CHECK_OBJECT(method);
924
840
 
925
- PyObject *result = CALL_FUNCTION_WITH_KEYARGS(tstate, method, args);
841
+ PyObject *result = CALL_FUNCTION_WITH_KW_ARGS(tstate, method, args);
926
842
  CHECK_OBJECT(result);
927
843
  }
928
844
  #endif
929
845
 
930
846
  #if defined(NUITKA_FORCED_STDERR_PATH)
847
+ NUITKA_PRINT_TRACE("setInputOutputHandles(): Forced stderr update.");
931
848
  {
932
849
  PyObject *sys_stderr = Nuitka_SysGetObject("stderr");
850
+ if (sys_stderr != Py_None) {
851
+ PyObject *method = LOOKUP_ATTRIBUTE(tstate, sys_stderr, const_str_plain_reconfigure);
852
+ CHECK_OBJECT(method);
933
853
 
934
- PyObject *method = LOOKUP_ATTRIBUTE(tstate, sys_stderr, const_str_plain_reconfigure);
935
- CHECK_OBJECT(method);
936
-
937
- PyObject *result = CALL_FUNCTION_WITH_KEYARGS(tstate, method, args);
938
- CHECK_OBJECT(result);
854
+ PyObject *result = CALL_FUNCTION_WITH_KW_ARGS(tstate, method, args);
855
+ CHECK_OBJECT(result);
856
+ }
939
857
  }
940
858
  #endif
941
859
 
942
860
  Py_DECREF(args);
943
861
  #endif
862
+
863
+ NUITKA_PRINT_TRACE("setInputOutputHandles(): Done with early handles.");
944
864
  #endif
945
865
 
946
866
  #if NUITKA_STANDARD_HANDLES_EARLY == 0
867
+ NUITKA_PRINT_TRACE("setInputOutputHandles(): Late handles.");
947
868
  #if defined(NUITKA_FORCED_STDOUT_PATH)
948
869
  {
949
- #ifdef _WIN32
870
+ #if defined(_WIN32)
950
871
  PyObject *filename = getExpandedTemplatePath(L"" NUITKA_FORCED_STDOUT_PATH);
951
872
  #else
952
873
  PyObject *filename = getExpandedTemplatePath(NUITKA_FORCED_STDOUT_PATH);
@@ -957,7 +878,7 @@ static void setInputOutputHandles(PyThreadState *tstate) {
957
878
  Py_Exit(1);
958
879
  }
959
880
 
960
- setStdoutHandle(stdout_file);
881
+ setStdoutHandle(tstate, stdout_file);
961
882
  }
962
883
  #endif
963
884
 
@@ -974,7 +895,7 @@ static void setInputOutputHandles(PyThreadState *tstate) {
974
895
  Py_Exit(1);
975
896
  }
976
897
 
977
- setStderrHandle(stderr_file);
898
+ setStderrHandle(tstate, stderr_file);
978
899
  }
979
900
  #endif
980
901
  #endif
@@ -986,22 +907,37 @@ static void setInputOutputHandles(PyThreadState *tstate) {
986
907
  PyObject *devnull_filename = Nuitka_String_FromString("/dev/null");
987
908
  #endif
988
909
 
910
+ NUITKA_PRINT_TRACE("setInputOutputHandles(): Considering stdin.");
911
+
989
912
  if (shallSetOutputHandleToNull("stdin")) {
913
+ NUITKA_PRINT_TRACE("setInputOutputHandles(): Set stdin to NULL file.");
914
+
990
915
  // CPython core requires stdin to be buffered due to methods usage, and it won't matter
991
916
  // here much.
992
917
  PyObject *stdin_file = BUILTIN_OPEN_SIMPLE(tstate, devnull_filename, "r", true, encoding);
918
+ CHECK_OBJECT(stdin_file);
993
919
 
994
920
  setStdinHandle(tstate, stdin_file);
995
921
  }
996
922
 
923
+ NUITKA_PRINT_TRACE("setInputOutputHandles(): Considering stdout.");
924
+
997
925
  if (shallSetOutputHandleToNull("stdout")) {
926
+ NUITKA_PRINT_TRACE("setInputOutputHandles(): Set stdout to NULL file.");
927
+
998
928
  PyObject *stdout_file = BUILTIN_OPEN_SIMPLE(tstate, devnull_filename, "w", false, encoding);
929
+ CHECK_OBJECT(stdout_file);
999
930
 
1000
931
  setStdoutHandle(tstate, stdout_file);
1001
932
  }
1002
933
 
934
+ NUITKA_PRINT_TRACE("setInputOutputHandles(): Considering stderr.");
935
+
1003
936
  if (shallSetOutputHandleToNull("stderr")) {
937
+ NUITKA_PRINT_TRACE("setInputOutputHandles(): Set stderr to NULL file.");
938
+
1004
939
  PyObject *stderr_file = BUILTIN_OPEN_SIMPLE(tstate, devnull_filename, "w", false, encoding);
940
+ CHECK_OBJECT(stderr_file);
1005
941
 
1006
942
  setStderrHandle(tstate, stderr_file);
1007
943
  }
@@ -1010,27 +946,36 @@ static void setInputOutputHandles(PyThreadState *tstate) {
1010
946
  }
1011
947
 
1012
948
  #if NUITKA_FORCED_STDOUT_NONE_BOOL
1013
- setStdoutHandle(Py_None);
949
+ NUITKA_PRINT_TRACE("setInputOutputHandles(): Forcing stdout to None.");
950
+ setStdoutHandle(tstate, Py_None);
1014
951
  #endif
1015
952
 
1016
953
  #if NUITKA_FORCED_STDERR_NONE_BOOL
1017
- setStderrHandle(Py_None);
954
+ NUITKA_PRINT_TRACE("setInputOutputHandles(): Forcing stderr to None.");
955
+ setStderrHandle(tstate, Py_None);
1018
956
  #endif
1019
957
 
1020
958
  Py_XDECREF(encoding);
1021
959
  }
1022
960
 
1023
961
  static void Nuitka_Py_Initialize(void) {
962
+ #if PYTHON_VERSION > 0x350 && !defined(_NUITKA_EXPERIMENTAL_DISABLE_ALLOCATORS)
963
+ initNuitkaAllocators();
964
+ #endif
965
+
1024
966
  #if PYTHON_VERSION < 0x380 || defined(_NUITKA_EXPERIMENTAL_OLD_PY_INITIALIZE)
1025
967
  Py_Initialize();
1026
968
  #else
969
+ #if PYTHON_VERSION < 0x3d0
1027
970
  PyStatus status = _PyRuntime_Initialize();
1028
971
  if (unlikely(status._type != 0)) {
1029
972
  Py_ExitStatusException(status);
1030
973
  }
1031
- _PyRuntimeState *runtime = &_PyRuntime;
1032
-
974
+ NUITKA_MAY_BE_UNUSED _PyRuntimeState *runtime = &_PyRuntime;
1033
975
  assert(!runtime->initialized);
976
+ #else
977
+ PyStatus status;
978
+ #endif
1034
979
 
1035
980
  PyConfig config;
1036
981
  _PyConfig_InitCompatConfig(&config);
@@ -1059,6 +1004,25 @@ static void Nuitka_Py_Initialize(void) {
1059
1004
  config.module_search_paths_set = 1;
1060
1005
  #endif
1061
1006
 
1007
+ // Need to disable frozen modules, Nuitka can handle them better itself.
1008
+ #if PYTHON_VERSION >= 0x3b0
1009
+ #ifdef _NUITKA_STANDALONE
1010
+ config.use_frozen_modules = 0;
1011
+ #else
1012
+ // Emulate PYTHON_FROZEN_MODULES for accelerated mode, it is only added in 3.13,
1013
+ // but we need to control it for controlling things for accelerated binaries
1014
+ // too.
1015
+ #if PYTHON_VERSION >= 0x3b0 && PYTHON_VERSION <= 0x3d0
1016
+ environment_char_t const *frozen_modules_env = getEnvironmentVariable("PYTHON_FROZEN_MODULES");
1017
+
1018
+ if (frozen_modules_env == NULL ||
1019
+ (compareEnvironmentString(frozen_modules_env, makeEnvironmentLiteral("off")) == 0)) {
1020
+ config.use_frozen_modules = 0;
1021
+ }
1022
+ #endif
1023
+ #endif
1024
+ #endif
1025
+
1062
1026
  config.install_signal_handlers = 1;
1063
1027
 
1064
1028
  NUITKA_PRINT_TIMING("Nuitka_Py_Initialize(): Calling Py_InitializeFromConfig.");
@@ -1089,23 +1053,13 @@ static void Nuitka_Py_Initialize(void) {
1089
1053
  static void changeStandardHandleTarget(int std_handle_id, FILE *std_handle, filename_char_t const *template_path) {
1090
1054
  filename_char_t filename_buffer[1024];
1091
1055
 
1092
- // TODO: We should only have one that works with filename_char_t rather than having
1093
- // to make a difference here.
1094
- #ifdef _WIN32
1095
- bool res = expandTemplatePathW(filename_buffer, template_path, sizeof(filename_buffer) / sizeof(filename_char_t));
1096
-
1097
- if (res == false) {
1098
- wprintf(L"Error, couldn't expand pattern '%lS'\n", template_path);
1099
- abort();
1100
- }
1101
- #else
1102
- bool res = expandTemplatePath(filename_buffer, template_path, sizeof(filename_buffer) / sizeof(filename_char_t));
1056
+ bool res =
1057
+ expandTemplatePathFilename(filename_buffer, template_path, sizeof(filename_buffer) / sizeof(filename_char_t));
1103
1058
 
1104
1059
  if (res == false) {
1105
- printf("Error, couldn't expand pattern: '%s'\n", template_path);
1060
+ printf("Error, couldn't expand pattern '" FILENAME_FORMAT_STR "'\n", template_path);
1106
1061
  abort();
1107
1062
  }
1108
- #endif
1109
1063
 
1110
1064
  if (GetStdHandle(std_handle_id) == 0) {
1111
1065
  FILE *file_handle;
@@ -1154,12 +1108,11 @@ static void changeStandardHandleTarget(int std_handle_id, FILE *std_handle, file
1154
1108
  abort();
1155
1109
  }
1156
1110
 
1157
- int int_res = dup2(os_handle, fileno(std_handle));
1111
+ int _int_res = dup2(os_handle, fileno(std_handle));
1158
1112
 
1159
- // Without a console, this is normal.
1160
- if (int_res == -1) {
1161
- perror("_open_osfhandle");
1162
- abort();
1113
+ if (_int_res == -1) {
1114
+ // Note: Without a console, this is normal to get no file number to
1115
+ // work with.
1163
1116
  }
1164
1117
 
1165
1118
  close(os_handle);
@@ -1195,6 +1148,41 @@ static void changeStandardHandleTarget(FILE *std_handle, filename_char_t const *
1195
1148
  #endif
1196
1149
  #endif
1197
1150
 
1151
+ #if defined(_NUITKA_EXPERIMENTAL_SHOW_STARTUP_TIME)
1152
+ static void Nuitka_at_exit(void) { NUITKA_PRINT_TIMING("Nuitka_at_exit(): Called by C exit()"); }
1153
+ #endif
1154
+
1155
+ #if !defined(_NUITKA_DEPLOYMENT_MODE) && !defined(_NUITKA_NO_DEPLOYMENT_SEGFAULT)
1156
+ #include <signal.h>
1157
+ static void nuitka_segfault_handler(int sig) {
1158
+ puts("Nuitka: A segmentation fault has occurred. This is highly unusual and can");
1159
+ puts("have multiple reasons. Please check https://nuitka.net/info/segfault.html");
1160
+ puts("for solutions.");
1161
+
1162
+ signal(SIGSEGV, SIG_DFL);
1163
+ raise(SIGSEGV);
1164
+ }
1165
+ #endif
1166
+
1167
+ #if _NUITKA_NATIVE_WCHAR_ARGV == 1
1168
+ extern wchar_t const *getBinaryFilenameWideChars(bool resolve_symlinks);
1169
+ #else
1170
+ extern char const *getBinaryFilenameHostEncoded(bool resolve_symlinks);
1171
+ #endif
1172
+
1173
+ // No longer in header files, but still usable.
1174
+ #if PYTHON_VERSION >= 0x3d0
1175
+ PyAPI_FUNC(void) PySys_AddWarnOption(const wchar_t *s);
1176
+ #endif
1177
+
1178
+ // Preserve and provide the original argv[0] as recorded by the bootstrap stage.
1179
+ static environment_char_t const *original_argv0 = NULL;
1180
+
1181
+ PyObject *getOriginalArgv0Object(void) {
1182
+ assert(original_argv0 != NULL);
1183
+ return Nuitka_String_FromFilename(original_argv0);
1184
+ }
1185
+
1198
1186
  #ifdef _NUITKA_WINMAIN_ENTRY_POINT
1199
1187
  int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, wchar_t *lpCmdLine, int nCmdShow) {
1200
1188
  /* MSVC, MINGW64 */
@@ -1203,12 +1191,35 @@ int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, wchar_t *lp
1203
1191
  #else
1204
1192
  #if defined(_WIN32)
1205
1193
  int wmain(int argc, wchar_t **argv) {
1194
+ #if defined(_NUITKA_HIDE_CONSOLE_WINDOW)
1195
+ hideConsoleIfSpawned();
1196
+ #endif
1206
1197
  #else
1207
1198
  int main(int argc, char **argv) {
1208
1199
  #endif
1209
1200
  #endif
1210
1201
 
1211
- // First things, set up stdout/stderr according to user specification.
1202
+ // Installer a segfault handler that outputs a helpful message.
1203
+ #if !defined(_NUITKA_DEPLOYMENT_MODE) && !defined(_NUITKA_NO_DEPLOYMENT_SEGFAULT)
1204
+ signal(SIGSEGV, nuitka_segfault_handler);
1205
+ #endif
1206
+
1207
+ #ifdef _NUITKA_EXPERIMENTAL_DUMP_C_TRACEBACKS
1208
+ INIT_C_BACKTRACES();
1209
+ DUMP_C_BACKTRACE();
1210
+ #endif
1211
+ // Trace when the process exits.
1212
+ #if defined(_NUITKA_EXPERIMENTAL_SHOW_STARTUP_TIME)
1213
+ atexit(Nuitka_at_exit);
1214
+ #endif
1215
+
1216
+ // Attach to the parent console respecting redirection only, otherwise we
1217
+ // cannot even output traces.
1218
+ #if defined(_WIN32) && defined(_NUITKA_ATTACH_CONSOLE_WINDOW)
1219
+ inheritAttachedConsole();
1220
+ #endif
1221
+
1222
+ // Set up stdout/stderr according to user specification.
1212
1223
  #if NUITKA_STANDARD_HANDLES_EARLY == 1
1213
1224
  #if defined(NUITKA_FORCED_STDOUT_PATH)
1214
1225
  #ifdef _WIN32
@@ -1239,6 +1250,8 @@ int main(int argc, char **argv) {
1239
1250
  setbuf(stderr, (char *)NULL);
1240
1251
 
1241
1252
  #if PYTHON_VERSION >= 0x300
1253
+ // spell-checker: ignore PYTHONUNBUFFERED
1254
+
1242
1255
  environment_char_t const *old_env_unbuffered = getEnvironmentVariable("PYTHONUNBUFFERED");
1243
1256
  setEnvironmentVariable("PYTHONUNBUFFERED", makeEnvironmentLiteral("1"));
1244
1257
  #endif
@@ -1248,7 +1261,8 @@ int main(int argc, char **argv) {
1248
1261
  NUITKA_INIT_PROGRAM_EARLY(argc, argv);
1249
1262
 
1250
1263
  #ifdef __FreeBSD__
1251
- /* FP exceptions run in "no stop" mode by default */
1264
+ // FP exceptions run in "no stop" mode by default
1265
+ // spell-checker: ignore fpgetmask,fpsetmask
1252
1266
 
1253
1267
  fp_except_t m;
1254
1268
 
@@ -1259,11 +1273,10 @@ int main(int argc, char **argv) {
1259
1273
  #ifdef _NUITKA_STANDALONE
1260
1274
  NUITKA_PRINT_TIMING("main(): Prepare standalone environment.");
1261
1275
  prepareStandaloneEnvironment();
1262
- #else
1263
-
1264
1276
  #endif
1265
1277
 
1266
1278
  #if _NUITKA_FROZEN > 0
1279
+ NUITKA_PRINT_TIMING("main(): Preparing frozen modules.");
1267
1280
  prepareFrozenModules();
1268
1281
  #endif
1269
1282
 
@@ -1278,7 +1291,7 @@ int main(int argc, char **argv) {
1278
1291
  Py_InspectFlag = 0;
1279
1292
  Py_InteractiveFlag = 0;
1280
1293
  Py_OptimizeFlag = SYSFLAG_OPTIMIZE;
1281
- Py_DontWriteBytecodeFlag = 0;
1294
+ Py_DontWriteBytecodeFlag = SYSFLAG_DONTWRITEBYTECODE;
1282
1295
  Py_NoUserSiteDirectory = SYSFLAG_NO_SITE;
1283
1296
  Py_IgnoreEnvironmentFlag = 0;
1284
1297
  Py_VerboseFlag = SYSFLAG_VERBOSE;
@@ -1305,6 +1318,7 @@ int main(int argc, char **argv) {
1305
1318
  #endif
1306
1319
 
1307
1320
  #ifdef NUITKA_PYTHON_STATIC
1321
+ NUITKA_PRINT_TIMING("main(): Preparing static modules.");
1308
1322
  Py_InitStaticModules();
1309
1323
  #endif
1310
1324
 
@@ -1319,13 +1333,40 @@ int main(int argc, char **argv) {
1319
1333
 
1320
1334
  /* Initial command line handling only. */
1321
1335
 
1336
+ // Make sure, we use the absolute program path for argv[0]
1337
+ #if !defined(_NUITKA_ONEFILE_MODE) && _NUITKA_NATIVE_WCHAR_ARGV == 0
1338
+ original_argv0 = argv[0];
1339
+ argv[0] = (char *)getBinaryFilenameHostEncoded(false);
1340
+ #endif
1341
+
1342
+ #if defined(_NUITKA_ONEFILE_MODE)
1343
+ {
1344
+ environment_char_t const *parent_original_argv0 = getEnvironmentVariable("NUITKA_ORIGINAL_ARGV0");
1345
+
1346
+ if (parent_original_argv0 != NULL) {
1347
+ original_argv0 = strdupFilename(parent_original_argv0);
1348
+
1349
+ unsetEnvironmentVariable("NUITKA_ORIGINAL_ARGV0");
1350
+ }
1351
+ }
1352
+ #endif
1353
+
1322
1354
  #if PYTHON_VERSION >= 0x300 && _NUITKA_NATIVE_WCHAR_ARGV == 0
1323
1355
  NUITKA_PRINT_TRACE("main(): Calling convertCommandLineParameters.");
1324
1356
  orig_argv = convertCommandLineParameters(argc, argv);
1325
1357
  #elif PYTHON_VERSION < 0x300 && _NUITKA_NATIVE_WCHAR_ARGV == 1
1358
+ NUITKA_PRINT_TRACE("main(): Calling getCommandLineToArgvA.");
1326
1359
  orig_argv = getCommandLineToArgvA(GetCommandLineA());
1327
1360
  #else
1328
1361
  orig_argv = argv;
1362
+ #endif
1363
+
1364
+ // Make sure, we use the absolute program path for argv[0]
1365
+ #if !defined(_NUITKA_ONEFILE_MODE) && _NUITKA_NATIVE_WCHAR_ARGV == 1
1366
+ original_argv0 = argv[0];
1367
+ #if PYTHON_VERSION >= 0x300
1368
+ orig_argv[0] = (wchar_t *)getBinaryFilenameWideChars(false);
1369
+ #endif
1329
1370
  #endif
1330
1371
 
1331
1372
  // Make sure the compiled path of Python is replaced.
@@ -1334,8 +1375,8 @@ orig_argv = argv;
1334
1375
  orig_argc = argc;
1335
1376
 
1336
1377
  // Early command line parsing.
1337
- NUITKA_PRINT_TRACE("main(): Calling initial setCommandLineParameters.");
1338
- setCommandLineParameters(argc, argv, true);
1378
+ NUITKA_PRINT_TRACE("main(): Calling setCommandLineParameters.");
1379
+ setCommandLineParameters(argc, argv);
1339
1380
 
1340
1381
  /* For Python installations that need the home set, we inject it back here. */
1341
1382
  #if defined(PYTHON_HOME_PATH)
@@ -1371,7 +1412,7 @@ orig_argv = argv;
1371
1412
  #endif
1372
1413
 
1373
1414
  // Workaround older Python not handling stream setup on redirected files properly.
1374
- #if PYTHON_VERSION >= 0x340 && PYTHON_VERSION < 0x380
1415
+ #if PYTHON_VERSION >= 0x300 && PYTHON_VERSION < 0x380
1375
1416
  {
1376
1417
  char const *encoding = NULL;
1377
1418
 
@@ -1397,6 +1438,24 @@ orig_argv = argv;
1397
1438
  #ifdef _NUITKA_STANDALONE
1398
1439
  NUITKA_PRINT_TRACE("main(): Restore standalone environment.");
1399
1440
  restoreStandaloneEnvironment();
1441
+ #else
1442
+ {
1443
+ environment_char_t const *python_path_cstr = getEnvironmentVariable("NUITKA_PYTHONPATH");
1444
+
1445
+ if (python_path_cstr != NULL) {
1446
+ PyObject *python_path_str = Nuitka_String_FromFilename(python_path_cstr);
1447
+ #ifdef _WIN32
1448
+ PyObject *python_path_list = PyObject_CallMethod(python_path_str, (char *)"split", (char *)"s", ";");
1449
+ #else
1450
+ PyObject *python_path_list = PyObject_CallMethod(python_path_str, (char *)"split", (char *)"s", ":");
1451
+ #endif
1452
+ Py_DECREF(python_path_str);
1453
+
1454
+ PySys_SetObject("path", python_path_list);
1455
+
1456
+ unsetEnvironmentVariable("NUITKA_PYTHONPATH");
1457
+ }
1458
+ }
1400
1459
  #endif
1401
1460
 
1402
1461
  /* Lie about it, believe it or not, there are "site" files, that check
@@ -1405,9 +1464,6 @@ orig_argv = argv;
1405
1464
  Py_NoSiteFlag = SYSFLAG_NO_SITE;
1406
1465
 
1407
1466
  /* Set the command line parameters for run time usage. */
1408
- NUITKA_PRINT_TRACE("main(): Calling setCommandLineParameters.");
1409
- setCommandLineParameters(argc, argv, false);
1410
-
1411
1467
  PySys_SetArgv(argc, orig_argv);
1412
1468
  // Empty "sys.path" again, the above adds program directory to it.
1413
1469
  #if SYSFLAG_ISOLATED
@@ -1477,6 +1533,57 @@ orig_argv = argv;
1477
1533
  }
1478
1534
  #endif
1479
1535
 
1536
+ #if defined(_WIN32) && defined(_NUITKA_ATTACH_CONSOLE_WINDOW)
1537
+ if (needs_stdout_attaching) {
1538
+ PyObject *filename = Nuitka_String_FromString("CONOUT$");
1539
+ // This defaults to "utf-8" internally. We may add an argument of use
1540
+ // platform ones in the future.
1541
+ PyObject *encoding = NULL;
1542
+
1543
+ PyObject *stdout_file = BUILTIN_OPEN_SIMPLE(tstate, filename, "w", SYSFLAG_UNBUFFERED != 1, encoding);
1544
+ if (unlikely(stdout_file == NULL)) {
1545
+ PyErr_PrintEx(1);
1546
+ Py_Exit(1);
1547
+ }
1548
+
1549
+ Py_DECREF(filename);
1550
+
1551
+ Nuitka_SysSetObject("stdout", stdout_file);
1552
+ }
1553
+
1554
+ if (needs_stderr_attaching) {
1555
+ PyObject *filename = Nuitka_String_FromString("CONOUT$");
1556
+ // This defaults to "utf-8" internally. We may add an argument of use
1557
+ // platform ones in the future.
1558
+ PyObject *encoding = NULL;
1559
+
1560
+ PyObject *stderr_file = BUILTIN_OPEN_SIMPLE(tstate, filename, "w", SYSFLAG_UNBUFFERED != 1, encoding);
1561
+ if (unlikely(stderr_file == NULL)) {
1562
+ PyErr_PrintEx(1);
1563
+ Py_Exit(1);
1564
+ }
1565
+
1566
+ Py_DECREF(filename);
1567
+
1568
+ Nuitka_SysSetObject("stderr", stderr_file);
1569
+ }
1570
+
1571
+ if (needs_stdin_attaching) {
1572
+ PyObject *filename = Nuitka_String_FromString("CONIN$");
1573
+ // This defaults to "utf-8" internally. We may add an argument of use
1574
+ // platform ones in the future.
1575
+ PyObject *encoding = NULL;
1576
+
1577
+ // CPython core requires stdin to be buffered due to methods usage, and it won't matter
1578
+ // here much.
1579
+ PyObject *stdin_file = BUILTIN_OPEN_SIMPLE(tstate, filename, "r", true, encoding);
1580
+
1581
+ Py_DECREF(filename);
1582
+
1583
+ Nuitka_SysSetObject("stdin", stdin_file);
1584
+ }
1585
+ #endif
1586
+
1480
1587
  NUITKA_PRINT_TRACE("main(): Setting Python input/output handles.");
1481
1588
  setInputOutputHandles(tstate);
1482
1589
 
@@ -1485,8 +1592,10 @@ orig_argv = argv;
1485
1592
  #if PYTHON_VERSION >= 0x300
1486
1593
  // Make sure the importlib fully bootstraps as we couldn't load it with the
1487
1594
  // standard loader.
1488
- PyObject *importlib_module = getImportLibBootstrapModule();
1489
- CHECK_OBJECT(importlib_module);
1595
+ {
1596
+ NUITKA_MAY_BE_UNUSED PyObject *importlib_module = getImportLibBootstrapModule();
1597
+ CHECK_OBJECT(importlib_module);
1598
+ }
1490
1599
  #endif
1491
1600
 
1492
1601
  NUITKA_PRINT_TRACE("main(): Calling setEarlyFrozenModulesFileAttribute().");
@@ -1503,12 +1612,14 @@ orig_argv = argv;
1503
1612
  /* Enable meta path based loader. */
1504
1613
  setupMetaPathBasedLoader(tstate);
1505
1614
 
1615
+ #if PYTHON_VERSION < 0x3d0
1506
1616
  /* Initialize warnings module. */
1507
1617
  _PyWarnings_Init();
1618
+ #endif
1508
1619
 
1509
1620
  #if NO_PYTHON_WARNINGS && PYTHON_VERSION >= 0x342 && PYTHON_VERSION < 0x3a0 && defined(_NUITKA_FULL_COMPAT)
1510
1621
  // For full compatibility bump the warnings registry version,
1511
- // otherwise modules "__warningsregistry__" will mismatch.
1622
+ // otherwise modules "__warningregistry__" will mismatch.
1512
1623
  PyObject *warnings_module = PyImport_ImportModule("warnings");
1513
1624
  PyObject *meth = PyObject_GetAttrString(warnings_module, "_filters_mutated");
1514
1625
 
@@ -1521,8 +1632,13 @@ orig_argv = argv;
1521
1632
 
1522
1633
  #if PYTHON_VERSION >= 0x300
1523
1634
  NUITKA_PRINT_TRACE("main(): Calling patchInspectModule().");
1635
+
1636
+ // TODO: Python3.13 NoGIL: This is causing errors during bytecode import
1637
+ // that are unexplained.
1638
+ #if !defined(Py_GIL_DISABLED)
1524
1639
  patchInspectModule(tstate);
1525
1640
  #endif
1641
+ #endif
1526
1642
 
1527
1643
  #if PYTHON_VERSION >= 0x300 && SYSFLAG_NO_RANDOMIZATION == 1
1528
1644
  NUITKA_PRINT_TRACE("main(): Reverting to initial 'PYTHONHASHSEED' value.");
@@ -1558,16 +1674,52 @@ orig_argv = argv;
1558
1674
  #ifdef _NUITKA_PLUGIN_MULTIPROCESSING_ENABLED
1559
1675
  if (unlikely(is_multiprocessing_fork)) {
1560
1676
  NUITKA_PRINT_TRACE("main(): Calling __parents_main__.");
1561
- EXECUTE_MAIN_MODULE("__parents_main__");
1677
+ EXECUTE_MAIN_MODULE(tstate, "__parents_main__", false);
1562
1678
 
1563
- int exit_code = HANDLE_PROGRAM_EXIT();
1679
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
1564
1680
 
1565
1681
  NUITKA_PRINT_TRACE("main(): Calling __parents_main__ Py_Exit.");
1566
1682
  Py_Exit(exit_code);
1683
+ #if defined(_WIN32)
1684
+ } else if (unlikely(is_joblib_popen_loky_win32)) {
1685
+ NUITKA_PRINT_TRACE("main(): Calling joblib.externals.loky.backend.popen_loky_win32.");
1686
+ PyObject *joblib_popen_loky_win32_module =
1687
+ EXECUTE_MAIN_MODULE(tstate, "joblib.externals.loky.backend.popen_loky_win32", true);
1688
+
1689
+ // Remove the "-c" and options part like CPython would do as well.
1690
+ PyObject *argv_list = Nuitka_SysGetObject("argv");
1691
+ Py_ssize_t size = PyList_Size(argv_list);
1692
+
1693
+ // Negative indexes are not supported by this function.
1694
+ int res = PyList_SetSlice(argv_list, 1, size - 2, const_tuple_empty);
1695
+ assert(res == 0);
1696
+
1697
+ PyObject *main_function = PyObject_GetAttrString(joblib_popen_loky_win32_module, "main");
1698
+ CHECK_OBJECT(main_function);
1699
+
1700
+ if (loky_joblib_pipe_handle_arg == 0) {
1701
+ CALL_FUNCTION_NO_ARGS(tstate, main_function);
1702
+ } else {
1703
+ char const *kw_keys[] = {"pipe_handle", "parent_pid"};
1704
+ PyObject *kw_values[] = {
1705
+ Nuitka_PyLong_FromLong(loky_joblib_pipe_handle_arg),
1706
+ Nuitka_PyLong_FromLong(loky_joblib_parent_pid_arg),
1707
+ };
1708
+
1709
+ PyObject *kw_args = MAKE_DICT_X_CSTR(kw_keys, kw_values, sizeof(kw_values) / sizeof(PyObject *));
1710
+
1711
+ CALL_FUNCTION_WITH_KW_ARGS(tstate, main_function, kw_args);
1712
+ }
1713
+
1714
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
1715
+
1716
+ NUITKA_PRINT_TRACE("main(): Calling 'joblib.externals.loky.backend.popen_loky_posix' Py_Exit.");
1717
+ Py_Exit(exit_code);
1718
+ #else
1567
1719
  } else if (unlikely(is_joblib_popen_loky_posix)) {
1568
1720
  NUITKA_PRINT_TRACE("main(): Calling joblib.externals.loky.backend.popen_loky_posix.");
1569
1721
  PyObject *joblib_popen_loky_posix_module =
1570
- EXECUTE_MAIN_MODULE("joblib.externals.loky.backend.popen_loky_posix");
1722
+ EXECUTE_MAIN_MODULE(tstate, "joblib.externals.loky.backend.popen_loky_posix", true);
1571
1723
 
1572
1724
  // Remove the "-m" like CPython would do as well.
1573
1725
  int res = PyList_SetSlice(Nuitka_SysGetObject("argv"), 0, 2, const_tuple_empty);
@@ -1578,35 +1730,51 @@ orig_argv = argv;
1578
1730
 
1579
1731
  CALL_FUNCTION_NO_ARGS(tstate, main_function);
1580
1732
 
1581
- int exit_code = HANDLE_PROGRAM_EXIT();
1733
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
1582
1734
 
1583
- NUITKA_PRINT_TRACE("main(): Calling joblib.externals.loky.backend.popen_loky_posix Py_Exit.");
1735
+ NUITKA_PRINT_TRACE("main(): Calling 'joblib.externals.loky.backend.popen_loky_posix' Py_Exit.");
1584
1736
  Py_Exit(exit_code);
1737
+ #endif
1585
1738
  } else if (unlikely(multiprocessing_resource_tracker_arg != -1)) {
1586
1739
  NUITKA_PRINT_TRACE("main(): Launching as 'multiprocessing.resource_tracker'.");
1587
- PyObject *resource_tracker_module = EXECUTE_MAIN_MODULE("multiprocessing.resource_tracker");
1740
+ PyObject *resource_tracker_module = EXECUTE_MAIN_MODULE(tstate, "multiprocessing.resource_tracker", true);
1588
1741
 
1589
1742
  PyObject *main_function = PyObject_GetAttrString(resource_tracker_module, "main");
1590
1743
  CHECK_OBJECT(main_function);
1591
1744
 
1592
- CALL_FUNCTION_WITH_SINGLE_ARG(tstate, main_function, PyInt_FromLong(multiprocessing_resource_tracker_arg));
1745
+ CALL_FUNCTION_WITH_SINGLE_ARG(tstate, main_function,
1746
+ Nuitka_PyInt_FromLong(multiprocessing_resource_tracker_arg));
1593
1747
 
1594
- int exit_code = HANDLE_PROGRAM_EXIT();
1748
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
1595
1749
 
1596
- NUITKA_PRINT_TRACE("main(): Calling resource_tracker Py_Exit.");
1750
+ NUITKA_PRINT_TRACE("main(): Calling 'multiprocessing.resource_tracker' Py_Exit.");
1597
1751
  Py_Exit(exit_code);
1598
1752
  } else if (unlikely(loky_resource_tracker_arg != -1)) {
1599
1753
  NUITKA_PRINT_TRACE("main(): Launching as 'joblib.externals.loky.backend.resource_tracker'.");
1600
- PyObject *resource_tracker_module = EXECUTE_MAIN_MODULE("joblib.externals.loky.backend.resource_tracker");
1754
+ PyObject *resource_tracker_module =
1755
+ EXECUTE_MAIN_MODULE(tstate, "joblib.externals.loky.backend.resource_tracker", true);
1756
+ CHECK_OBJECT(resource_tracker_module);
1601
1757
 
1602
1758
  PyObject *main_function = PyObject_GetAttrString(resource_tracker_module, "main");
1603
1759
  CHECK_OBJECT(main_function);
1604
1760
 
1605
- CALL_FUNCTION_WITH_SINGLE_ARG(tstate, main_function, PyInt_FromLong(loky_resource_tracker_arg));
1761
+ CALL_FUNCTION_WITH_SINGLE_ARG(tstate, main_function, Nuitka_PyInt_FromLong(loky_resource_tracker_arg));
1762
+
1763
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
1764
+
1765
+ NUITKA_PRINT_TRACE("main(): Calling 'joblib.externals.loky.backend.resource_tracker' Py_Exit.");
1766
+ Py_Exit(exit_code);
1767
+ } else if (unlikely(is_anyio_to_process)) {
1768
+ PyObject *anyio_module = EXECUTE_MAIN_MODULE(tstate, "anyio.to_process", false);
1769
+
1770
+ PyObject *main_function = PyObject_GetAttrString(anyio_module, "process_worker");
1771
+ CHECK_OBJECT(main_function);
1772
+
1773
+ CALL_FUNCTION_NO_ARGS(tstate, main_function);
1606
1774
 
1607
- int exit_code = HANDLE_PROGRAM_EXIT();
1775
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
1608
1776
 
1609
- NUITKA_PRINT_TRACE("main(): Calling resource_tracker Py_Exit.");
1777
+ NUITKA_PRINT_TRACE("main(): Calling 'anyio.to_process' Py_Exit.");
1610
1778
  Py_Exit(exit_code);
1611
1779
  } else {
1612
1780
  #endif
@@ -1623,6 +1791,7 @@ orig_argv = argv;
1623
1791
  }
1624
1792
  #endif
1625
1793
  PyDict_DelItemString(Nuitka_GetSysModules(), NUITKA_MAIN_MODULE_NAME);
1794
+ DROP_ERROR_OCCURRED(tstate);
1626
1795
 
1627
1796
  #if _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
1628
1797
  NUITKA_PRINT_TRACE("main(): Calling plugin SvcLaunchService() entry point.");
@@ -1630,7 +1799,7 @@ orig_argv = argv;
1630
1799
  #else
1631
1800
  /* Execute the "__main__" module. */
1632
1801
  NUITKA_PRINT_TIMING("main(): Calling " NUITKA_MAIN_MODULE_NAME ".");
1633
- EXECUTE_MAIN_MODULE(NUITKA_MAIN_MODULE_NAME);
1802
+ EXECUTE_MAIN_MODULE(tstate, NUITKA_MAIN_MODULE_NAME, NUITKA_MAIN_IS_PACKAGE_BOOL);
1634
1803
  NUITKA_PRINT_TIMING("main(): Exited from " NUITKA_MAIN_MODULE_NAME ".");
1635
1804
 
1636
1805
  #endif
@@ -1651,13 +1820,13 @@ orig_argv = argv;
1651
1820
  checkGlobalConstants();
1652
1821
 
1653
1822
  /* TODO: Walk over all loaded compiled modules, and make this kind of checks. */
1654
- #if !NUITKA_MAIN_PACKAGE_MODE
1823
+ #if !NUITKA_MAIN_IS_PACKAGE_BOOL
1655
1824
  checkModuleConstants___main__(tstate);
1656
1825
  #endif
1657
1826
 
1658
1827
  #endif
1659
1828
 
1660
- int exit_code = HANDLE_PROGRAM_EXIT();
1829
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
1661
1830
 
1662
1831
  NUITKA_PRINT_TIMING("main(): Calling Py_Exit.");
1663
1832
  Py_Exit(exit_code);
@@ -1710,3 +1879,18 @@ int Py_Main(int argc, char **argv) { return 0; }
1710
1879
  }
1711
1880
  #endif
1712
1881
  #endif
1882
+
1883
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
1884
+ // integrates with CPython, but also works on its own.
1885
+ //
1886
+ // Licensed under the Apache License, Version 2.0 (the "License");
1887
+ // you may not use this file except in compliance with the License.
1888
+ // You may obtain a copy of the License at
1889
+ //
1890
+ // http://www.apache.org/licenses/LICENSE-2.0
1891
+ //
1892
+ // Unless required by applicable law or agreed to in writing, software
1893
+ // distributed under the License is distributed on an "AS IS" BASIS,
1894
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1895
+ // See the License for the specific language governing permissions and
1896
+ // limitations under the License.