Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.4.8__cp311-cp311-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of Nuitka-winsvc might be problematic. Click here for more details.

Files changed (704) hide show
  1. Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.4.8.data/scripts/nuitka-run.cmd +9 -9
  2. Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.4.8.data/scripts/nuitka.cmd +15 -15
  3. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/METADATA +4 -3
  4. Nuitka_winsvc-2.4.8.dist-info/RECORD +954 -0
  5. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +18 -17
  7. nuitka/BytecodeCaching.py +24 -20
  8. nuitka/Bytecodes.py +23 -19
  9. nuitka/CacheCleanup.py +28 -23
  10. nuitka/Constants.py +19 -17
  11. nuitka/Errors.py +23 -17
  12. nuitka/HardImportRegistry.py +400 -0
  13. nuitka/MainControl.py +200 -112
  14. nuitka/ModuleRegistry.py +83 -20
  15. nuitka/OptionParsing.py +368 -175
  16. nuitka/Options.py +632 -213
  17. nuitka/OutputDirectories.py +40 -21
  18. nuitka/PostProcessing.py +73 -50
  19. nuitka/Progress.py +58 -24
  20. nuitka/PythonFlavors.py +141 -32
  21. nuitka/PythonOperators.py +18 -17
  22. nuitka/PythonVersions.py +106 -19
  23. nuitka/Serialization.py +68 -55
  24. nuitka/SourceCodeReferences.py +19 -17
  25. nuitka/Tracing.py +108 -70
  26. nuitka/TreeXML.py +31 -26
  27. nuitka/Variables.py +39 -41
  28. nuitka/Version.py +21 -7
  29. nuitka/__init__.py +5 -4
  30. nuitka/__main__.py +95 -29
  31. nuitka/__past__.py +44 -34
  32. nuitka/build/Backend.scons +202 -140
  33. nuitka/build/CCompilerVersion.scons +39 -31
  34. nuitka/build/DataComposerInterface.py +20 -17
  35. nuitka/build/Onefile.scons +50 -54
  36. nuitka/build/SconsCaching.py +93 -90
  37. nuitka/build/SconsCompilerSettings.py +157 -69
  38. nuitka/build/SconsHacks.py +25 -19
  39. nuitka/build/SconsInterface.py +154 -54
  40. nuitka/build/SconsProgress.py +19 -18
  41. nuitka/build/SconsSpawn.py +62 -33
  42. nuitka/build/SconsUtils.py +147 -55
  43. nuitka/build/__init__.py +5 -4
  44. nuitka/build/include/nuitka/allocator.h +105 -22
  45. nuitka/build/include/nuitka/builtins.h +17 -17
  46. nuitka/build/include/nuitka/calling.h +18 -18
  47. nuitka/build/include/nuitka/checkers.h +17 -18
  48. nuitka/build/include/nuitka/checksum_tools.h +14 -19
  49. nuitka/build/include/nuitka/compiled_asyncgen.h +18 -18
  50. nuitka/build/include/nuitka/compiled_cell.h +33 -18
  51. nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
  52. nuitka/build/include/nuitka/compiled_frame.h +91 -53
  53. nuitka/build/include/nuitka/compiled_function.h +42 -20
  54. nuitka/build/include/nuitka/compiled_generator.h +24 -18
  55. nuitka/build/include/nuitka/compiled_method.h +17 -18
  56. nuitka/build/include/nuitka/constants.h +29 -18
  57. nuitka/build/include/nuitka/constants_blob.h +17 -17
  58. nuitka/build/include/nuitka/environment_variables.h +30 -0
  59. nuitka/build/include/nuitka/environment_variables_system.h +45 -0
  60. nuitka/build/include/nuitka/exception_groups.h +23 -26
  61. nuitka/build/include/nuitka/exceptions.h +593 -190
  62. nuitka/build/include/nuitka/filesystem_paths.h +26 -20
  63. nuitka/build/include/nuitka/freelists.h +38 -18
  64. nuitka/build/include/nuitka/helper/attributes.h +24 -18
  65. nuitka/build/include/nuitka/helper/boolean.h +17 -17
  66. nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
  67. nuitka/build/include/nuitka/helper/bytes.h +14 -15
  68. nuitka/build/include/nuitka/helper/calling_generated.h +17 -17
  69. nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
  70. nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
  71. nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
  72. nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
  73. nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
  74. nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
  75. nuitka/build/include/nuitka/helper/complex.h +17 -17
  76. nuitka/build/include/nuitka/helper/dictionaries.h +24 -22
  77. nuitka/build/include/nuitka/helper/floats.h +17 -18
  78. nuitka/build/include/nuitka/helper/import_hard.h +25 -17
  79. nuitka/build/include/nuitka/helper/indexes.h +17 -18
  80. nuitka/build/include/nuitka/helper/ints.h +32 -20
  81. nuitka/build/include/nuitka/helper/iterators.h +17 -17
  82. nuitka/build/include/nuitka/helper/lists.h +26 -24
  83. nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
  84. nuitka/build/include/nuitka/helper/mappings.h +17 -18
  85. nuitka/build/include/nuitka/helper/operations.h +17 -17
  86. nuitka/build/include/nuitka/helper/operations_binary_add.h +17 -17
  87. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
  88. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
  89. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
  90. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
  91. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
  92. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
  93. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
  94. nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
  95. nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
  96. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
  97. nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
  98. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
  99. nuitka/build/include/nuitka/helper/operations_binary_sub.h +17 -17
  100. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
  101. nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
  102. nuitka/build/include/nuitka/helper/operations_inplace_add.h +17 -17
  103. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
  104. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
  105. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
  106. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
  107. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
  108. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
  109. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
  110. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
  111. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
  112. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
  113. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
  114. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +17 -17
  115. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
  116. nuitka/build/include/nuitka/helper/raising.h +29 -17
  117. nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
  118. nuitka/build/include/nuitka/helper/richcomparisons.h +14 -14
  119. nuitka/build/include/nuitka/helper/sequences.h +19 -13
  120. nuitka/build/include/nuitka/helper/sets.h +11 -12
  121. nuitka/build/include/nuitka/helper/slices.h +31 -25
  122. nuitka/build/include/nuitka/helper/strings.h +16 -17
  123. nuitka/build/include/nuitka/helper/subscripts.h +18 -201
  124. nuitka/build/include/nuitka/helper/tuples.h +64 -52
  125. nuitka/build/include/nuitka/helpers.h +38 -20
  126. nuitka/build/include/nuitka/importing.h +28 -21
  127. nuitka/build/include/nuitka/jit_sources.h +25 -0
  128. nuitka/build/include/nuitka/prelude.h +128 -46
  129. nuitka/build/include/nuitka/printing.h +22 -17
  130. nuitka/build/include/nuitka/python_pgo.h +19 -18
  131. nuitka/build/include/nuitka/safe_string_ops.h +20 -18
  132. nuitka/build/include/nuitka/threading.h +32 -33
  133. nuitka/build/include/nuitka/tracing.h +28 -18
  134. nuitka/build/include/nuitka/type_aliases.h +27 -0
  135. nuitka/build/include/nuitka/unfreezing.h +29 -23
  136. nuitka/build/inline_copy/bin/scons.py +14 -0
  137. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
  138. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
  139. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  140. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  141. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  142. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  143. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  144. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  145. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  146. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  147. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  148. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  149. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  150. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  151. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  152. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  153. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  154. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  155. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  156. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  157. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  158. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  159. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  160. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  161. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
  162. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  163. nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
  164. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  165. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  166. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  167. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  168. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  169. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  170. nuitka/build/static_src/CompiledAsyncgenType.c +176 -182
  171. nuitka/build/static_src/CompiledCellType.c +63 -40
  172. nuitka/build/static_src/CompiledCodeHelpers.c +181 -128
  173. nuitka/build/static_src/CompiledCoroutineType.c +196 -203
  174. nuitka/build/static_src/CompiledFrameType.c +287 -133
  175. nuitka/build/static_src/CompiledFunctionType.c +389 -95
  176. nuitka/build/static_src/CompiledGeneratorType.c +376 -252
  177. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +185 -198
  178. nuitka/build/static_src/CompiledMethodType.c +83 -71
  179. nuitka/build/static_src/HelpersAllocator.c +88 -19
  180. nuitka/build/static_src/HelpersAttributes.c +33 -54
  181. nuitka/build/static_src/HelpersBuiltin.c +43 -33
  182. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
  183. nuitka/build/static_src/HelpersBytes.c +19 -20
  184. nuitka/build/static_src/HelpersCalling.c +33 -30
  185. nuitka/build/static_src/HelpersCallingGenerated.c +1000 -181
  186. nuitka/build/static_src/HelpersChecksumTools.c +35 -21
  187. nuitka/build/static_src/HelpersClasses.c +17 -17
  188. nuitka/build/static_src/HelpersComparisonEq.c +518 -492
  189. nuitka/build/static_src/HelpersComparisonEqUtils.c +21 -19
  190. nuitka/build/static_src/HelpersComparisonGe.c +513 -497
  191. nuitka/build/static_src/HelpersComparisonGt.c +512 -496
  192. nuitka/build/static_src/HelpersComparisonLe.c +513 -497
  193. nuitka/build/static_src/HelpersComparisonLt.c +512 -496
  194. nuitka/build/static_src/HelpersComparisonNe.c +520 -492
  195. nuitka/build/static_src/HelpersConsole.c +96 -0
  196. nuitka/build/static_src/HelpersConstantsBlob.c +542 -519
  197. nuitka/build/static_src/HelpersDeepcopy.c +33 -33
  198. nuitka/build/static_src/HelpersDictionaries.c +51 -29
  199. nuitka/build/static_src/HelpersDictionariesGenerated.c +177 -68
  200. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  201. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  202. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
  203. nuitka/build/static_src/HelpersExceptions.c +161 -50
  204. nuitka/build/static_src/HelpersFiles.c +37 -17
  205. nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
  206. nuitka/build/static_src/HelpersFloats.c +37 -31
  207. nuitka/build/static_src/HelpersHeapStorage.c +21 -17
  208. nuitka/build/static_src/HelpersImport.c +48 -20
  209. nuitka/build/static_src/HelpersImportHard.c +53 -17
  210. nuitka/build/static_src/HelpersJitSources.c +46 -0
  211. nuitka/build/static_src/HelpersLists.c +140 -50
  212. nuitka/build/static_src/HelpersListsGenerated.c +41 -41
  213. nuitka/build/static_src/HelpersMappings.c +17 -17
  214. nuitka/build/static_src/HelpersMatching.c +137 -51
  215. nuitka/build/static_src/HelpersOperationBinaryAdd.c +173 -146
  216. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +99 -52
  217. nuitka/build/static_src/HelpersOperationBinaryBitand.c +50 -50
  218. nuitka/build/static_src/HelpersOperationBinaryBitor.c +50 -50
  219. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +50 -50
  220. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +41 -41
  221. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
  222. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +41 -41
  223. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
  224. nuitka/build/static_src/HelpersOperationBinaryLshift.c +47 -47
  225. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +24 -24
  226. nuitka/build/static_src/HelpersOperationBinaryMod.c +107 -107
  227. nuitka/build/static_src/HelpersOperationBinaryMult.c +81 -75
  228. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
  229. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +41 -41
  230. nuitka/build/static_src/HelpersOperationBinaryPow.c +44 -44
  231. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
  232. nuitka/build/static_src/HelpersOperationBinaryRshift.c +47 -47
  233. nuitka/build/static_src/HelpersOperationBinarySub.c +80 -80
  234. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +41 -41
  235. nuitka/build/static_src/HelpersOperationInplaceAdd.c +171 -153
  236. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
  237. nuitka/build/static_src/HelpersOperationInplaceBitand.c +53 -53
  238. nuitka/build/static_src/HelpersOperationInplaceBitor.c +53 -53
  239. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +53 -53
  240. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +62 -62
  241. nuitka/build/static_src/HelpersOperationInplaceLshift.c +44 -44
  242. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +37 -37
  243. nuitka/build/static_src/HelpersOperationInplaceMod.c +134 -134
  244. nuitka/build/static_src/HelpersOperationInplaceMult.c +78 -78
  245. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +62 -62
  246. nuitka/build/static_src/HelpersOperationInplacePow.c +62 -62
  247. nuitka/build/static_src/HelpersOperationInplaceRshift.c +44 -44
  248. nuitka/build/static_src/HelpersOperationInplaceSub.c +112 -112
  249. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +62 -62
  250. nuitka/build/static_src/HelpersProfiling.c +24 -23
  251. nuitka/build/static_src/HelpersPythonPgo.c +22 -22
  252. nuitka/build/static_src/HelpersRaising.c +88 -20
  253. nuitka/build/static_src/HelpersSafeStrings.c +34 -22
  254. nuitka/build/static_src/HelpersSequences.c +18 -19
  255. nuitka/build/static_src/HelpersSlices.c +29 -23
  256. nuitka/build/static_src/HelpersStrings.c +234 -37
  257. nuitka/build/static_src/HelpersTuples.c +46 -34
  258. nuitka/build/static_src/HelpersTypes.c +68 -23
  259. nuitka/build/static_src/InspectPatcher.c +108 -27
  260. nuitka/build/static_src/MainProgram.c +359 -263
  261. nuitka/build/static_src/MetaPathBasedLoader.c +367 -242
  262. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
  263. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
  264. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +97 -22
  265. nuitka/build/static_src/OnefileBootstrap.c +276 -164
  266. nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
  267. nuitka/code_generation/AsyncgenCodes.py +19 -17
  268. nuitka/code_generation/AttributeCodes.py +31 -27
  269. nuitka/code_generation/BinaryOperationHelperDefinitions.py +24 -20
  270. nuitka/code_generation/BranchCodes.py +19 -17
  271. nuitka/code_generation/BuiltinCodes.py +20 -17
  272. nuitka/code_generation/CallCodes.py +19 -17
  273. nuitka/code_generation/ClassCodes.py +19 -17
  274. nuitka/code_generation/CodeGeneration.py +48 -27
  275. nuitka/code_generation/CodeHelperSelection.py +19 -17
  276. nuitka/code_generation/CodeHelpers.py +24 -20
  277. nuitka/code_generation/CodeObjectCodes.py +34 -24
  278. nuitka/code_generation/ComparisonCodes.py +38 -20
  279. nuitka/code_generation/ComparisonHelperDefinitions.py +19 -17
  280. nuitka/code_generation/ConditionalCodes.py +19 -17
  281. nuitka/code_generation/ConstantCodes.py +82 -28
  282. nuitka/code_generation/Contexts.py +152 -26
  283. nuitka/code_generation/CoroutineCodes.py +19 -17
  284. nuitka/code_generation/CtypesCodes.py +19 -17
  285. nuitka/code_generation/DictCodes.py +25 -23
  286. nuitka/code_generation/Emission.py +21 -18
  287. nuitka/code_generation/ErrorCodes.py +27 -33
  288. nuitka/code_generation/EvalCodes.py +24 -20
  289. nuitka/code_generation/ExceptionCodes.py +27 -18
  290. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +20 -17
  291. nuitka/code_generation/ExpressionCodes.py +19 -17
  292. nuitka/code_generation/FrameCodes.py +24 -20
  293. nuitka/code_generation/FunctionCodes.py +24 -21
  294. nuitka/code_generation/GeneratorCodes.py +23 -20
  295. nuitka/code_generation/GlobalConstants.py +43 -23
  296. nuitka/code_generation/GlobalsLocalsCodes.py +21 -19
  297. nuitka/code_generation/IdCodes.py +19 -17
  298. nuitka/code_generation/ImportCodes.py +90 -50
  299. nuitka/code_generation/Indentation.py +23 -22
  300. nuitka/code_generation/IndexCodes.py +19 -17
  301. nuitka/code_generation/InjectCCodes.py +14 -12
  302. nuitka/code_generation/IntegerCodes.py +19 -17
  303. nuitka/code_generation/IteratorCodes.py +19 -17
  304. nuitka/code_generation/JitCodes.py +44 -0
  305. nuitka/code_generation/LabelCodes.py +19 -17
  306. nuitka/code_generation/LineNumberCodes.py +19 -17
  307. nuitka/code_generation/ListCodes.py +32 -36
  308. nuitka/code_generation/LoaderCodes.py +22 -17
  309. nuitka/code_generation/LocalsDictCodes.py +56 -32
  310. nuitka/code_generation/LoopCodes.py +19 -17
  311. nuitka/code_generation/MatchCodes.py +42 -22
  312. nuitka/code_generation/ModuleCodes.py +43 -25
  313. nuitka/code_generation/Namify.py +27 -23
  314. nuitka/code_generation/NetworkxCodes.py +51 -0
  315. nuitka/code_generation/OperationCodes.py +29 -31
  316. nuitka/code_generation/PackageResourceCodes.py +59 -23
  317. nuitka/code_generation/PrintCodes.py +19 -17
  318. nuitka/code_generation/PythonAPICodes.py +19 -17
  319. nuitka/code_generation/RaisingCodes.py +19 -17
  320. nuitka/code_generation/Reports.py +19 -17
  321. nuitka/code_generation/ReturnCodes.py +19 -17
  322. nuitka/code_generation/SetCodes.py +19 -17
  323. nuitka/code_generation/SliceCodes.py +22 -20
  324. nuitka/code_generation/StringCodes.py +19 -17
  325. nuitka/code_generation/SubscriptCodes.py +24 -30
  326. nuitka/code_generation/TensorflowCodes.py +54 -0
  327. nuitka/code_generation/TryCodes.py +19 -17
  328. nuitka/code_generation/TupleCodes.py +20 -18
  329. nuitka/code_generation/TypeAliasCodes.py +71 -0
  330. nuitka/code_generation/VariableCodes.py +26 -22
  331. nuitka/code_generation/VariableDeclarations.py +20 -17
  332. nuitka/code_generation/YieldCodes.py +22 -20
  333. nuitka/code_generation/__init__.py +5 -4
  334. nuitka/code_generation/c_types/CTypeBases.py +19 -17
  335. nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
  336. nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
  337. nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
  338. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +19 -17
  339. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +19 -17
  340. nuitka/code_generation/c_types/CTypeNuitkaInts.py +19 -18
  341. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +19 -17
  342. nuitka/code_generation/c_types/CTypePyObjectPointers.py +27 -25
  343. nuitka/code_generation/c_types/CTypeVoids.py +20 -17
  344. nuitka/code_generation/c_types/__init__.py +5 -4
  345. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +18 -17
  346. nuitka/code_generation/templates/CodeTemplatesConstants.py +132 -36
  347. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +18 -17
  348. nuitka/code_generation/templates/CodeTemplatesExceptions.py +19 -18
  349. nuitka/code_generation/templates/CodeTemplatesFrames.py +18 -17
  350. nuitka/code_generation/templates/CodeTemplatesFunction.py +18 -17
  351. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +19 -17
  352. nuitka/code_generation/templates/CodeTemplatesIterators.py +18 -18
  353. nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
  354. nuitka/code_generation/templates/CodeTemplatesModules.py +244 -165
  355. nuitka/code_generation/templates/CodeTemplatesVariables.py +42 -27
  356. nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
  357. nuitka/code_generation/templates/__init__.py +5 -4
  358. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
  359. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +18 -18
  360. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +76 -25
  361. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
  362. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
  363. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
  364. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
  365. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +121 -48
  366. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +18 -18
  367. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +18 -18
  368. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
  369. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
  370. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
  371. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +28 -28
  372. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
  373. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
  374. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +44 -32
  375. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +20 -20
  376. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +28 -28
  377. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +24 -24
  378. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +33 -29
  379. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
  380. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +27 -27
  381. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
  382. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
  383. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
  384. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +17 -17
  385. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
  386. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +26 -24
  387. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
  388. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
  389. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
  390. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
  391. nuitka/containers/Namedtuples.py +19 -18
  392. nuitka/containers/OrderedSetsFallback.py +19 -17
  393. nuitka/containers/__init__.py +5 -4
  394. nuitka/distutils/Build.py +19 -18
  395. nuitka/distutils/DistutilCommands.py +34 -23
  396. nuitka/distutils/__init__.py +5 -4
  397. nuitka/finalizations/Finalization.py +20 -17
  398. nuitka/finalizations/FinalizeMarkups.py +21 -41
  399. nuitka/finalizations/__init__.py +5 -4
  400. nuitka/freezer/DependsExe.py +48 -28
  401. nuitka/freezer/DllDependenciesCommon.py +47 -20
  402. nuitka/freezer/DllDependenciesMacOS.py +147 -57
  403. nuitka/freezer/DllDependenciesPosix.py +29 -19
  404. nuitka/freezer/DllDependenciesWin32.py +29 -21
  405. nuitka/freezer/ImportDetection.py +20 -17
  406. nuitka/freezer/IncludedDataFiles.py +118 -47
  407. nuitka/freezer/IncludedEntryPoints.py +102 -38
  408. nuitka/freezer/Onefile.py +32 -22
  409. nuitka/freezer/Standalone.py +105 -50
  410. nuitka/freezer/__init__.py +5 -4
  411. nuitka/importing/IgnoreListing.py +19 -17
  412. nuitka/importing/ImportCache.py +24 -21
  413. nuitka/importing/ImportResolving.py +103 -95
  414. nuitka/importing/Importing.py +286 -92
  415. nuitka/importing/PreloadedPackages.py +21 -18
  416. nuitka/importing/Recursion.py +131 -47
  417. nuitka/importing/StandardLibrary.py +46 -28
  418. nuitka/importing/__init__.py +5 -4
  419. nuitka/nodes/AsyncgenNodes.py +19 -17
  420. nuitka/nodes/AttributeLookupNodes.py +19 -17
  421. nuitka/nodes/AttributeNodes.py +19 -17
  422. nuitka/nodes/AttributeNodesGenerated.py +49 -24
  423. nuitka/nodes/BuiltinAllNodes.py +19 -17
  424. nuitka/nodes/BuiltinAnyNodes.py +19 -17
  425. nuitka/nodes/BuiltinComplexNodes.py +20 -17
  426. nuitka/nodes/BuiltinDecodingNodes.py +19 -17
  427. nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
  428. nuitka/nodes/BuiltinDictNodes.py +19 -17
  429. nuitka/nodes/BuiltinFormatNodes.py +20 -17
  430. nuitka/nodes/BuiltinHashNodes.py +19 -17
  431. nuitka/nodes/BuiltinInputNodes.py +19 -17
  432. nuitka/nodes/BuiltinIntegerNodes.py +19 -17
  433. nuitka/nodes/BuiltinIteratorNodes.py +24 -20
  434. nuitka/nodes/BuiltinLenNodes.py +19 -17
  435. nuitka/nodes/BuiltinNextNodes.py +19 -17
  436. nuitka/nodes/BuiltinOpenNodes.py +52 -18
  437. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
  438. nuitka/nodes/BuiltinRangeNodes.py +21 -19
  439. nuitka/nodes/BuiltinRefNodes.py +68 -19
  440. nuitka/nodes/BuiltinSumNodes.py +20 -18
  441. nuitka/nodes/BuiltinTypeNodes.py +19 -17
  442. nuitka/nodes/BuiltinVarsNodes.py +19 -18
  443. nuitka/nodes/BytesNodes.py +19 -17
  444. nuitka/nodes/CallNodes.py +19 -17
  445. nuitka/nodes/Checkers.py +19 -17
  446. nuitka/nodes/ChildrenHavingMixins.py +1250 -302
  447. nuitka/nodes/ClassNodes.py +49 -29
  448. nuitka/nodes/CodeObjectSpecs.py +29 -18
  449. nuitka/nodes/ComparisonNodes.py +19 -17
  450. nuitka/nodes/ConditionalNodes.py +21 -23
  451. nuitka/nodes/ConstantRefNodes.py +57 -17
  452. nuitka/nodes/ContainerMakingNodes.py +19 -17
  453. nuitka/nodes/ContainerOperationNodes.py +19 -17
  454. nuitka/nodes/CoroutineNodes.py +19 -17
  455. nuitka/nodes/CtypesNodes.py +19 -18
  456. nuitka/nodes/DictionaryNodes.py +19 -18
  457. nuitka/nodes/ExceptionNodes.py +29 -17
  458. nuitka/nodes/ExecEvalNodes.py +19 -17
  459. nuitka/nodes/ExpressionBases.py +34 -26
  460. nuitka/nodes/ExpressionBasesGenerated.py +54 -32
  461. nuitka/nodes/ExpressionShapeMixins.py +19 -17
  462. nuitka/nodes/FrameNodes.py +19 -17
  463. nuitka/nodes/FunctionAttributeNodes.py +19 -17
  464. nuitka/nodes/FunctionNodes.py +81 -35
  465. nuitka/nodes/FutureSpecs.py +35 -20
  466. nuitka/nodes/GeneratorNodes.py +21 -19
  467. nuitka/nodes/GlobalsLocalsNodes.py +22 -17
  468. nuitka/nodes/HardImportNodesGenerated.py +545 -129
  469. nuitka/nodes/ImportHardNodes.py +46 -38
  470. nuitka/nodes/ImportNodes.py +436 -446
  471. nuitka/nodes/IndicatorMixins.py +19 -17
  472. nuitka/nodes/InjectCNodes.py +19 -18
  473. nuitka/nodes/IterationHandles.py +55 -34
  474. nuitka/nodes/KeyValuePairNodes.py +19 -17
  475. nuitka/nodes/ListOperationNodes.py +33 -21
  476. nuitka/nodes/LocalsDictNodes.py +19 -17
  477. nuitka/nodes/LocalsScopes.py +41 -41
  478. nuitka/nodes/LoopNodes.py +28 -17
  479. nuitka/nodes/MatchNodes.py +37 -24
  480. nuitka/nodes/ModuleAttributeNodes.py +18 -35
  481. nuitka/nodes/ModuleNodes.py +90 -31
  482. nuitka/nodes/NetworkxNodes.py +45 -0
  483. nuitka/nodes/NodeBases.py +45 -43
  484. nuitka/nodes/NodeMakingHelpers.py +21 -19
  485. nuitka/nodes/NodeMetaClasses.py +45 -28
  486. nuitka/nodes/OperatorNodes.py +28 -26
  487. nuitka/nodes/OperatorNodesUnary.py +20 -17
  488. nuitka/nodes/OsSysNodes.py +66 -18
  489. nuitka/nodes/OutlineNodes.py +22 -20
  490. nuitka/nodes/PackageMetadataNodes.py +37 -27
  491. nuitka/nodes/PackageResourceNodes.py +29 -23
  492. nuitka/nodes/PrintNodes.py +19 -17
  493. nuitka/nodes/ReturnNodes.py +20 -18
  494. nuitka/nodes/SideEffectNodes.py +19 -17
  495. nuitka/nodes/SliceNodes.py +20 -18
  496. nuitka/nodes/StatementBasesGenerated.py +125 -77
  497. nuitka/nodes/StatementNodes.py +19 -17
  498. nuitka/nodes/StrNodes.py +19 -17
  499. nuitka/nodes/StringConcatenationNodes.py +20 -17
  500. nuitka/nodes/SubscriptNodes.py +26 -24
  501. nuitka/nodes/TensorflowNodes.py +38 -0
  502. nuitka/nodes/TryNodes.py +19 -17
  503. nuitka/nodes/TypeMatchNodes.py +19 -17
  504. nuitka/nodes/TypeNodes.py +40 -17
  505. nuitka/nodes/VariableAssignNodes.py +122 -64
  506. nuitka/nodes/VariableDelNodes.py +19 -17
  507. nuitka/nodes/VariableNameNodes.py +19 -17
  508. nuitka/nodes/VariableRefNodes.py +63 -26
  509. nuitka/nodes/VariableReleaseNodes.py +19 -17
  510. nuitka/nodes/YieldNodes.py +21 -19
  511. nuitka/nodes/__init__.py +5 -4
  512. nuitka/nodes/shapes/BuiltinTypeShapes.py +145 -39
  513. nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
  514. nuitka/nodes/shapes/ShapeMixins.py +40 -17
  515. nuitka/nodes/shapes/StandardShapes.py +27 -20
  516. nuitka/nodes/shapes/__init__.py +5 -4
  517. nuitka/optimizations/BytecodeDemotion.py +19 -17
  518. nuitka/optimizations/FunctionInlining.py +22 -23
  519. nuitka/optimizations/Graphs.py +19 -17
  520. nuitka/optimizations/Optimization.py +39 -35
  521. nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
  522. nuitka/optimizations/Tags.py +19 -18
  523. nuitka/optimizations/TraceCollections.py +67 -24
  524. nuitka/optimizations/ValueTraces.py +92 -25
  525. nuitka/optimizations/__init__.py +5 -4
  526. nuitka/pgo/PGO.py +33 -23
  527. nuitka/pgo/__init__.py +5 -4
  528. nuitka/plugins/PluginBase.py +610 -109
  529. nuitka/plugins/Plugins.py +241 -58
  530. nuitka/plugins/YamlPluginBase.py +121 -0
  531. nuitka/plugins/__init__.py +5 -4
  532. nuitka/plugins/standard/AntiBloatPlugin.py +357 -129
  533. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
  534. nuitka/plugins/standard/DataFilesPlugin.py +65 -29
  535. nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
  536. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  537. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
  538. nuitka/plugins/standard/DillPlugin.py +42 -134
  539. nuitka/plugins/standard/DllFilesPlugin.py +125 -42
  540. nuitka/plugins/standard/EnumPlugin.py +19 -17
  541. nuitka/plugins/standard/EventletPlugin.py +19 -17
  542. nuitka/plugins/standard/GeventPlugin.py +19 -17
  543. nuitka/plugins/standard/GiPlugin.py +44 -28
  544. nuitka/plugins/standard/GlfwPlugin.py +20 -17
  545. nuitka/plugins/standard/ImplicitImports.py +407 -46
  546. nuitka/plugins/standard/KivyPlugin.py +30 -17
  547. nuitka/plugins/standard/MatplotlibPlugin.py +88 -42
  548. nuitka/plugins/standard/MultiprocessingPlugin.py +25 -20
  549. nuitka/plugins/standard/NumpyPlugin.py +19 -17
  550. nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
  551. nuitka/plugins/standard/PbrPlugin.py +21 -19
  552. nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
  553. nuitka/plugins/standard/PmwPlugin.py +30 -27
  554. nuitka/plugins/standard/PySidePyQtPlugin.py +74 -80
  555. nuitka/plugins/standard/PywebViewPlugin.py +19 -17
  556. nuitka/plugins/standard/SpacyPlugin.py +136 -0
  557. nuitka/plugins/standard/TensorflowPlugin.py +20 -17
  558. nuitka/plugins/standard/TkinterPlugin.py +103 -53
  559. nuitka/plugins/standard/TorchPlugin.py +20 -17
  560. nuitka/plugins/standard/TransformersPlugin.py +94 -30
  561. nuitka/plugins/standard/TrioPlugin.py +18 -15
  562. nuitka/plugins/standard/UpxPlugin.py +21 -19
  563. nuitka/plugins/standard/__init__.py +5 -4
  564. nuitka/plugins/standard/standard.nuitka-package.config.yml +3449 -1299
  565. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
  566. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +121 -66
  567. nuitka/reports/CompilationReportReader.py +67 -0
  568. nuitka/reports/LicenseReport.rst.j2 +21 -21
  569. nuitka/reports/Reports.py +352 -76
  570. nuitka/reports/__init__.py +5 -4
  571. nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
  572. nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
  573. nuitka/specs/BuiltinListOperationSpecs.py +18 -17
  574. nuitka/specs/BuiltinParameterSpecs.py +30 -20
  575. nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
  576. nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
  577. nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
  578. nuitka/specs/HardImportSpecs.py +67 -22
  579. nuitka/specs/ParameterSpecs.py +56 -41
  580. nuitka/specs/__init__.py +5 -4
  581. nuitka/tools/Basics.py +20 -18
  582. nuitka/tools/__init__.py +5 -4
  583. nuitka/tools/commercial/__init__.py +7 -6
  584. nuitka/tools/data_composer/DataComposer.py +78 -62
  585. nuitka/tools/data_composer/__init__.py +5 -4
  586. nuitka/tools/data_composer/__main__.py +18 -17
  587. nuitka/tools/environments/CreateEnvironment.py +20 -17
  588. nuitka/tools/environments/Virtualenv.py +60 -32
  589. nuitka/tools/environments/__init__.py +5 -4
  590. nuitka/tools/general/__init__.py +5 -4
  591. nuitka/tools/general/dll_report/__init__.py +5 -4
  592. nuitka/tools/general/dll_report/__main__.py +19 -21
  593. nuitka/tools/general/find_module/FindModuleCode.py +35 -22
  594. nuitka/tools/general/find_module/__init__.py +5 -4
  595. nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
  596. nuitka/tools/onefile_compressor/__init__.py +5 -4
  597. nuitka/tools/onefile_compressor/__main__.py +18 -17
  598. nuitka/tools/podman/Podman.py +19 -17
  599. nuitka/tools/podman/__init__.py +5 -4
  600. nuitka/tools/podman/__main__.py +35 -19
  601. nuitka/tools/profiler/__init__.py +5 -4
  602. nuitka/tools/profiler/__main__.py +18 -17
  603. nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
  604. nuitka/tools/scanning/DisplayPackageData.py +31 -19
  605. nuitka/tools/scanning/__init__.py +5 -4
  606. nuitka/tools/specialize/CTypeDescriptions.py +93 -71
  607. nuitka/tools/specialize/Common.py +18 -17
  608. nuitka/tools/specialize/SpecializeC.py +31 -27
  609. nuitka/tools/specialize/SpecializePython.py +108 -45
  610. nuitka/tools/specialize/__init__.py +5 -4
  611. nuitka/tools/testing/Common.py +106 -52
  612. nuitka/tools/testing/Constructs.py +19 -17
  613. nuitka/tools/testing/OutputComparison.py +54 -18
  614. nuitka/tools/testing/Pythons.py +19 -18
  615. nuitka/tools/testing/RuntimeTracing.py +20 -19
  616. nuitka/tools/testing/SearchModes.py +26 -20
  617. nuitka/tools/testing/Valgrind.py +19 -17
  618. nuitka/tools/testing/__init__.py +5 -4
  619. nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
  620. nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
  621. nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
  622. nuitka/tools/testing/compare_with_cpython/__main__.py +36 -29
  623. nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
  624. nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
  625. nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
  626. nuitka/tools/testing/measure_construct_performance/__main__.py +22 -25
  627. nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
  628. nuitka/tools/testing/run_nuitka_tests/__main__.py +57 -40
  629. nuitka/tools/watch/AutoStage.py +144 -0
  630. nuitka/tools/watch/GitHub.py +113 -0
  631. nuitka/tools/watch/__init__.py +5 -4
  632. nuitka/tools/watch/__main__.py +322 -91
  633. nuitka/tree/Building.py +176 -147
  634. nuitka/tree/ComplexCallHelperFunctions.py +80 -58
  635. nuitka/tree/Extractions.py +19 -17
  636. nuitka/tree/InternalModule.py +29 -20
  637. nuitka/tree/Operations.py +19 -17
  638. nuitka/tree/ReformulationAssertStatements.py +20 -17
  639. nuitka/tree/ReformulationAssignmentStatements.py +92 -91
  640. nuitka/tree/ReformulationBooleanExpressions.py +19 -17
  641. nuitka/tree/ReformulationCallExpressions.py +20 -18
  642. nuitka/tree/ReformulationClasses.py +45 -39
  643. nuitka/tree/ReformulationClasses3.py +146 -98
  644. nuitka/tree/ReformulationComparisonExpressions.py +29 -35
  645. nuitka/tree/ReformulationContractionExpressions.py +58 -55
  646. nuitka/tree/ReformulationDictionaryCreation.py +40 -35
  647. nuitka/tree/ReformulationExecStatements.py +42 -39
  648. nuitka/tree/ReformulationForLoopStatements.py +30 -34
  649. nuitka/tree/ReformulationFunctionStatements.py +58 -54
  650. nuitka/tree/ReformulationImportStatements.py +34 -29
  651. nuitka/tree/ReformulationLambdaExpressions.py +23 -24
  652. nuitka/tree/ReformulationMatchStatements.py +244 -92
  653. nuitka/tree/ReformulationMultidist.py +22 -18
  654. nuitka/tree/ReformulationNamespacePackages.py +55 -46
  655. nuitka/tree/ReformulationPrintStatements.py +23 -24
  656. nuitka/tree/ReformulationSequenceCreation.py +50 -49
  657. nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
  658. nuitka/tree/ReformulationTryExceptStatements.py +19 -17
  659. nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
  660. nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
  661. nuitka/tree/ReformulationWithStatements.py +39 -41
  662. nuitka/tree/ReformulationYieldExpressions.py +21 -19
  663. nuitka/tree/SourceHandling.py +76 -31
  664. nuitka/tree/SyntaxErrors.py +19 -17
  665. nuitka/tree/TreeHelpers.py +33 -20
  666. nuitka/tree/VariableClosure.py +35 -39
  667. nuitka/tree/__init__.py +5 -4
  668. nuitka/utils/AppDirs.py +41 -20
  669. nuitka/utils/CStrings.py +66 -21
  670. nuitka/utils/CommandLineOptions.py +84 -19
  671. nuitka/utils/Distributions.py +445 -54
  672. nuitka/utils/Download.py +89 -57
  673. nuitka/utils/Execution.py +73 -34
  674. nuitka/utils/FileOperations.py +318 -74
  675. nuitka/utils/Hashing.py +55 -33
  676. nuitka/utils/Images.py +26 -19
  677. nuitka/utils/Importing.py +118 -24
  678. nuitka/utils/InstalledPythons.py +80 -75
  679. nuitka/utils/InstanceCounters.py +20 -17
  680. nuitka/utils/Jinja2.py +30 -22
  681. nuitka/utils/Json.py +19 -17
  682. nuitka/utils/MacOSApp.py +26 -18
  683. nuitka/utils/MemoryUsage.py +20 -18
  684. nuitka/utils/ModuleNames.py +42 -26
  685. nuitka/utils/ReExecute.py +50 -28
  686. nuitka/utils/Rest.py +20 -17
  687. nuitka/utils/SharedLibraries.py +161 -75
  688. nuitka/utils/Shebang.py +20 -17
  689. nuitka/utils/Signing.py +63 -18
  690. nuitka/utils/SlotMetaClasses.py +57 -0
  691. nuitka/utils/StaticLibraries.py +83 -56
  692. nuitka/utils/ThreadedExecutor.py +18 -17
  693. nuitka/utils/Timing.py +22 -20
  694. nuitka/utils/Utils.py +115 -25
  695. nuitka/utils/WindowsFileUsage.py +22 -20
  696. nuitka/utils/WindowsResources.py +25 -18
  697. nuitka/utils/Yaml.py +62 -24
  698. nuitka/utils/__init__.py +5 -4
  699. Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
  700. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  701. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  702. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/LICENSE.txt +0 -0
  703. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/entry_points.txt +0 -0
  704. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/top_level.txt +0 -0
@@ -1,20 +1,5 @@
1
- // Copyright 2023, Kay Hayen, mailto:kay.hayen@gmail.com
2
- //
3
- // Part of "Nuitka", an optimizing Python compiler that is compatible and
4
- // integrates with CPython, but also works on its own.
5
- //
6
- // Licensed under the Apache License, Version 2.0 (the "License");
7
- // you may not use this file except in compliance with the License.
8
- // You may obtain a copy of the License at
9
- //
10
- // http://www.apache.org/licenses/LICENSE-2.0
11
- //
12
- // Unless required by applicable law or agreed to in writing, software
13
- // distributed under the License is distributed on an "AS IS" BASIS,
14
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- // See the License for the specific language governing permissions and
16
- // limitations under the License.
17
- //
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
18
3
  /* The main program for a compiled program.
19
4
  *
20
5
  * It needs to prepare the interpreter and then loads and executes
@@ -47,10 +32,9 @@
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
53
35
  #define NUITKA_MAIN_MODULE_NAME "__main__"
36
+ #define NUITKA_MAIN_IS_PACKAGE_BOOL false
37
+ #define _NUITKA_ATTACH_CONSOLE_WINDOW 1
54
38
  #endif
55
39
 
56
40
  // It doesn't work for MinGW64 to update the standard output handles early on,
@@ -65,6 +49,10 @@
65
49
  #define NUITKA_STANDARD_HANDLES_EARLY 0
66
50
  #endif
67
51
 
52
+ #if defined(_WIN32) && defined(_NUITKA_ATTACH_CONSOLE_WINDOW)
53
+ #include "HelpersConsole.c"
54
+ #endif
55
+
68
56
  extern PyCodeObject *codeobj_main;
69
57
 
70
58
  /* For later use in "Py_GetArgcArgv" we expose the needed value */
@@ -85,7 +73,7 @@ static struct _frozen *old_frozen = NULL;
85
73
  static struct _frozen const *old_frozen = NULL;
86
74
  #endif
87
75
 
88
- static void prepareFrozenModules() {
76
+ static void prepareFrozenModules(void) {
89
77
  // Tell the CPython library to use our pre-compiled modules as frozen
90
78
  // modules. This for those modules/packages like "encoding" that will be
91
79
  // loaded during "Py_Initialize" already, for the others they may be
@@ -118,112 +106,7 @@ static void prepareFrozenModules() {
118
106
  }
119
107
  #endif
120
108
 
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
109
+ #include "nuitka/environment_variables.h"
227
110
 
228
111
  #ifdef _NUITKA_STANDALONE
229
112
 
@@ -313,7 +196,7 @@ extern void _initCompiledFrameType();
313
196
  static wchar_t **convertCommandLineParameters(int argc, char **argv) {
314
197
  // Originally taken from CPython3: There seems to be no sane way to use
315
198
  static wchar_t **argv_copy;
316
- argv_copy = (wchar_t **)PyMem_MALLOC(sizeof(wchar_t *) * argc);
199
+ argv_copy = (wchar_t **)malloc(sizeof(wchar_t *) * argc);
317
200
 
318
201
  // Temporarily disable locale for conversions to not use it.
319
202
  char *old_locale = strdup(setlocale(LC_ALL, NULL));
@@ -344,6 +227,11 @@ static void PRINT_REFCOUNTS(void) {
344
227
 
345
228
  PRINT_STRING("REFERENCE counts at program end:\n");
346
229
  PRINT_STRING("active | allocated | released\n");
230
+ PRINT_FORMAT("Compiled Functions: %d | %d | %d (module/class ownership may occur)\n",
231
+ count_active_Nuitka_Function_Type, count_allocated_Nuitka_Function_Type,
232
+ count_released_Nuitka_Function_Type);
233
+ PRINT_FORMAT("Compiled Generators: %d | %d | %d\n", count_active_Nuitka_Generator_Type,
234
+ count_allocated_Nuitka_Generator_Type, count_released_Nuitka_Generator_Type);
347
235
  #if PYTHON_VERSION >= 0x350
348
236
  PRINT_FORMAT("Compiled Coroutines: %d | %d | %d\n", count_active_Nuitka_Coroutine_Type,
349
237
  count_allocated_Nuitka_Coroutine_Type, count_released_Nuitka_Coroutine_Type);
@@ -366,6 +254,8 @@ static void PRINT_REFCOUNTS(void) {
366
254
 
367
255
  PRINT_FORMAT("Compiled Frames: %d | %d | %d (cache usage may occur)\n", count_active_Nuitka_Frame_Type,
368
256
  count_allocated_Nuitka_Frame_Type, count_released_Nuitka_Frame_Type);
257
+ PRINT_FORMAT("Compiled Cells: %d | %d | %d (function ownership may occur)\n", count_active_Nuitka_Cell_Type,
258
+ count_allocated_Nuitka_Cell_Type, count_released_Nuitka_Cell_Type);
369
259
  PRINT_STRING("CACHED counts at program end:\n");
370
260
  PRINT_STRING("active | allocated | released | hits\n");
371
261
  PRINT_FORMAT("Cached Frames: %d | %d | %d | %d\n", count_active_frame_cache_instances,
@@ -374,17 +264,16 @@ static void PRINT_REFCOUNTS(void) {
374
264
  }
375
265
  #endif
376
266
 
377
- static int HANDLE_PROGRAM_EXIT(void) {
267
+ static int HANDLE_PROGRAM_EXIT(PyThreadState *tstate) {
378
268
  #if _DEBUG_REFCOUNTS
379
269
  PRINT_REFCOUNTS();
380
270
  #endif
381
271
 
382
272
  int exit_code;
383
273
 
384
- PyThreadState *tstate = PyThreadState_GET();
385
-
386
274
  if (HAS_ERROR_OCCURRED(tstate)) {
387
- #if PYTHON_VERSION >= 0x300
275
+ // TODO: Clarify which versions this applies to still
276
+ #if PYTHON_VERSION >= 0x300 && PYTHON_VERSION < 0x3c0
388
277
  /* Remove the frozen importlib traceback part, which would not be compatible. */
389
278
 
390
279
  while (tstate->curexc_traceback) {
@@ -402,6 +291,7 @@ static int HANDLE_PROGRAM_EXIT(void) {
402
291
  break;
403
292
  }
404
293
  #endif
294
+ NUITKA_FINALIZE_PROGRAM(tstate);
405
295
 
406
296
  PyErr_PrintEx(0);
407
297
 
@@ -413,13 +303,10 @@ static int HANDLE_PROGRAM_EXIT(void) {
413
303
  return exit_code;
414
304
  }
415
305
 
416
- static PyObject *EXECUTE_MAIN_MODULE(char const *module_name) {
306
+ static PyObject *EXECUTE_MAIN_MODULE(PyThreadState *tstate, char const *module_name, bool is_package) {
417
307
  NUITKA_INIT_PROGRAM_LATE(module_name);
418
308
 
419
- PyThreadState *tstate = PyThreadState_GET();
420
-
421
- #if NUITKA_MAIN_PACKAGE_MODE
422
- {
309
+ if (is_package) {
423
310
  char const *w = module_name;
424
311
 
425
312
  for (;;) {
@@ -442,25 +329,27 @@ static PyObject *EXECUTE_MAIN_MODULE(char const *module_name) {
442
329
  }
443
330
  }
444
331
  }
445
- #endif
446
332
 
447
333
  return IMPORT_EMBEDDED_MODULE(tstate, module_name);
448
334
  }
449
335
 
450
- #ifdef _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
336
+ #if _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
451
337
  #include "nuitka_windows_service.h"
452
338
 
453
339
  // Callback from Windows Service logic.
454
- bool SvcStartPython(void) {
455
- EXECUTE_MAIN_MODULE(NUITKA_MAIN_MODULE_NAME);
456
-
340
+ void SvcStartPython(void) {
457
341
  PyThreadState *tstate = PyThreadState_GET();
458
342
 
459
- if (HAS_ERROR_OCCURRED(tstate)) {
460
- return true;
461
- } else {
462
- return false;
463
- }
343
+ EXECUTE_MAIN_MODULE(tstate, NUITKA_MAIN_MODULE_NAME, NUITKA_MAIN_IS_PACKAGE_BOOL);
344
+
345
+ NUITKA_PRINT_TIMING("SvcStartPython() Python exited.")
346
+
347
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
348
+
349
+ // TODO: Log exception and call ReportSvcStatus
350
+
351
+ NUITKA_PRINT_TIMING("SvcStartPython(): Calling Py_Exit.");
352
+ Py_Exit(exit_code);
464
353
  }
465
354
 
466
355
  void SvcStopPython(void) { PyErr_SetInterrupt(); }
@@ -473,107 +362,117 @@ static bool is_multiprocessing_fork = false;
473
362
  static int multiprocessing_resource_tracker_arg = -1;
474
363
 
475
364
  // This is a joblib loky fork
365
+ #ifdef _WIN32
366
+ static bool is_joblib_popen_loky_win32 = false;
367
+ static int loky_joblib_pipe_handle_arg = 0;
368
+ static int loky_joblib_parent_pid_arg = 0;
369
+ #else
476
370
  static bool is_joblib_popen_loky_posix = false;
371
+ #endif
477
372
  // This is a joblib resource tracker if not -1
478
373
  static int loky_resource_tracker_arg = -1;
479
374
 
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.
375
+ // Parse the command line parameters to decide if it's a multiprocessing usage
376
+ // or something else special.
482
377
  #if _NUITKA_NATIVE_WCHAR_ARGV == 0
483
- static void setCommandLineParameters(int argc, char **argv, bool initial) {
378
+ static void setCommandLineParameters(int argc, char **argv) {
484
379
  #else
485
- static void setCommandLineParameters(int argc, wchar_t **argv, bool initial) {
380
+ static void setCommandLineParameters(int argc, wchar_t **argv) {
486
381
  #endif
487
- if (initial) {
488
382
  #ifdef _NUITKA_EXPERIMENTAL_DEBUG_SELF_FORKING
489
383
  #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]);
384
+ printf("Commandline: ");
385
+ for (int i = 0; i < argc; i++) {
386
+ if (i != 0) {
387
+ printf(" ");
496
388
  }
497
- printf("\n");
389
+ printf("'%s'", argv[i]);
390
+ }
391
+ printf("\n");
498
392
  #else
499
- wprintf(L"Commandline: '%lS' %d\n", GetCommandLineW(), argc);
393
+ wprintf(L"Commandline: '%lS' %d\n", GetCommandLineW(), argc);
500
394
  #endif
501
395
  #endif
502
396
 
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
397
+ // We might need to handle special parameters from plugins that are
398
+ // very deeply woven into command line handling. These are right now
399
+ // multiprocessing, which indicates that it's forking via extra
506
400
 
507
- // command line argument. And Windows Service indicates need to
508
- // install and exit here too.
401
+ // command line argument. And Windows Service indicates need to
402
+ // install and exit here too.
509
403
 
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
- }
404
+ for (int i = 1; i < argc; i++) {
405
+ if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "--multiprocessing-fork")) == 0) {
406
+ is_multiprocessing_fork = true;
407
+ break;
408
+ }
515
409
 
516
- if ((i + 1 < argc) &&
517
- (strcmpFilename(argv[i], FILENAME_EMPTY_STR "--multiprocessing-resource-tracker")) == 0) {
410
+ if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "--multiprocessing-resource-tracker")) == 0) {
518
411
  #if _NUITKA_NATIVE_WCHAR_ARGV == 0
519
- multiprocessing_resource_tracker_arg = atoi(argv[i + 1]);
412
+ multiprocessing_resource_tracker_arg = atoi(argv[i + 1]);
520
413
  #else
521
- multiprocessing_resource_tracker_arg = _wtoi(argv[i + 1]);
414
+ multiprocessing_resource_tracker_arg = _wtoi(argv[i + 1]);
522
415
  #endif
523
- break;
524
- }
416
+ break;
417
+ }
525
418
 
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().");
419
+ if (i == 1) {
420
+ #if _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
421
+ if (strcmpFilename(argv[i], FILENAME_EMPTY_STR "install") == 0) {
422
+ NUITKA_PRINT_TRACE("main(): Calling plugin SvcInstall().");
530
423
 
531
- SvcInstall();
532
- NUITKA_CANNOT_GET_HERE("SvcInstall must not return");
533
- }
534
- #endif
424
+ SvcInstall();
425
+ NUITKA_CANNOT_GET_HERE("main(): SvcInstall must not return");
535
426
  }
536
-
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
427
  #endif
548
- if (res == 1) {
549
- break;
550
- }
428
+ }
429
+
430
+ if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "-c") == 0)) {
431
+ // The joblib loky resource tracker is launched like this.
432
+ if (scanFilename(argv[i + 1],
433
+ FILENAME_EMPTY_STR
434
+ "from joblib.externals.loky.backend.resource_tracker import main; main(%i, False)",
435
+ &loky_resource_tracker_arg)) {
436
+ break;
551
437
  }
552
438
 
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
- }
439
+ #if defined(_WIN32)
440
+ if (strcmpFilename(argv[i + 1], FILENAME_EMPTY_STR
441
+ "from joblib.externals.loky.backend.popen_loky_win32 import main; main()") == 0) {
442
+ is_joblib_popen_loky_win32 = true;
443
+ break;
560
444
  }
561
445
 
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);
446
+ if (scanFilename(argv[i + 1],
447
+ FILENAME_EMPTY_STR "from joblib.externals.loky.backend.popen_loky_win32 import main; "
448
+ "main(pipe_handle=%i, parent_pid=%i)",
449
+ &loky_joblib_pipe_handle_arg, &loky_joblib_parent_pid_arg)) {
450
+ is_joblib_popen_loky_win32 = true;
451
+ break;
570
452
  }
453
+
571
454
  #endif
572
455
  }
573
456
 
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);
457
+ #if !defined(_WIN32)
458
+ if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "-m") == 0)) {
459
+ // The joblib loky posix popen is launching like this.
460
+ if (strcmpFilename(argv[i + 1], FILENAME_EMPTY_STR "joblib.externals.loky.backend.popen_loky_posix") == 0) {
461
+ is_joblib_popen_loky_posix = true;
462
+ break;
463
+ }
464
+ }
465
+ #endif
466
+
467
+ #if !defined(_NUITKA_DEPLOYMENT_MODE) && !defined(_NUITKA_NO_DEPLOYMENT_SELF_EXECUTION)
468
+ if ((strcmpFilename(argv[i], FILENAME_EMPTY_STR "-c") == 0) ||
469
+ (strcmpFilename(argv[i], FILENAME_EMPTY_STR "-m") == 0)) {
470
+ fprintf(stderr,
471
+ "Error, the program tried to call itself with '" FILENAME_FORMAT_STR "' argument. Disable with "
472
+ "'--no-deployment-flag=self-execution'.\n",
473
+ argv[i]);
474
+ exit(2);
475
+ }
577
476
  #endif
578
477
  }
579
478
  }
@@ -910,7 +809,7 @@ static void setInputOutputHandles(PyThreadState *tstate) {
910
809
  // reason.
911
810
  #if NUITKA_STANDARD_HANDLES_EARLY == 1 && PYTHON_VERSION >= 0x370
912
811
  #if defined(NUITKA_FORCED_STDOUT_PATH) || defined(NUITKA_FORCED_STDERR_PATH)
913
- PyObject *args = MAKE_DICT_EMPTY();
812
+ PyObject *args = MAKE_DICT_EMPTY(tstate);
914
813
 
915
814
  DICT_SET_ITEM(args, const_str_plain_encoding, Nuitka_String_FromString("utf-8"));
916
815
  DICT_SET_ITEM(args, const_str_plain_line_buffering, Py_True);
@@ -946,7 +845,7 @@ static void setInputOutputHandles(PyThreadState *tstate) {
946
845
  #if NUITKA_STANDARD_HANDLES_EARLY == 0
947
846
  #if defined(NUITKA_FORCED_STDOUT_PATH)
948
847
  {
949
- #ifdef _WIN32
848
+ #if defined(_WIN32)
950
849
  PyObject *filename = getExpandedTemplatePath(L"" NUITKA_FORCED_STDOUT_PATH);
951
850
  #else
952
851
  PyObject *filename = getExpandedTemplatePath(NUITKA_FORCED_STDOUT_PATH);
@@ -957,7 +856,7 @@ static void setInputOutputHandles(PyThreadState *tstate) {
957
856
  Py_Exit(1);
958
857
  }
959
858
 
960
- setStdoutHandle(stdout_file);
859
+ setStdoutHandle(tstate, stdout_file);
961
860
  }
962
861
  #endif
963
862
 
@@ -974,7 +873,7 @@ static void setInputOutputHandles(PyThreadState *tstate) {
974
873
  Py_Exit(1);
975
874
  }
976
875
 
977
- setStderrHandle(stderr_file);
876
+ setStderrHandle(tstate, stderr_file);
978
877
  }
979
878
  #endif
980
879
  #endif
@@ -1010,27 +909,34 @@ static void setInputOutputHandles(PyThreadState *tstate) {
1010
909
  }
1011
910
 
1012
911
  #if NUITKA_FORCED_STDOUT_NONE_BOOL
1013
- setStdoutHandle(Py_None);
912
+ setStdoutHandle(tstate, Py_None);
1014
913
  #endif
1015
914
 
1016
915
  #if NUITKA_FORCED_STDERR_NONE_BOOL
1017
- setStderrHandle(Py_None);
916
+ setStderrHandle(tstate, Py_None);
1018
917
  #endif
1019
918
 
1020
919
  Py_XDECREF(encoding);
1021
920
  }
1022
921
 
1023
922
  static void Nuitka_Py_Initialize(void) {
923
+ #if PYTHON_VERSION > 0x350 && !defined(_NUITKA_EXPERIMENTAL_DISABLE_ALLOCATORS)
924
+ initNuitkaAllocators();
925
+ #endif
926
+
1024
927
  #if PYTHON_VERSION < 0x380 || defined(_NUITKA_EXPERIMENTAL_OLD_PY_INITIALIZE)
1025
928
  Py_Initialize();
1026
929
  #else
930
+ #if PYTHON_VERSION < 0x3d0
1027
931
  PyStatus status = _PyRuntime_Initialize();
1028
932
  if (unlikely(status._type != 0)) {
1029
933
  Py_ExitStatusException(status);
1030
934
  }
1031
- _PyRuntimeState *runtime = &_PyRuntime;
1032
-
935
+ NUITKA_MAY_BE_UNUSED _PyRuntimeState *runtime = &_PyRuntime;
1033
936
  assert(!runtime->initialized);
937
+ #else
938
+ PyStatus status;
939
+ #endif
1034
940
 
1035
941
  PyConfig config;
1036
942
  _PyConfig_InitCompatConfig(&config);
@@ -1059,6 +965,25 @@ static void Nuitka_Py_Initialize(void) {
1059
965
  config.module_search_paths_set = 1;
1060
966
  #endif
1061
967
 
968
+ // Need to disable frozen modules, Nuitka can handle them better itself.
969
+ #if PYTHON_VERSION >= 0x3b0
970
+ #ifdef _NUITKA_STANDALONE
971
+ config.use_frozen_modules = 0;
972
+ #else
973
+ // Emulate PYTHON_FROZEN_MODULES for accelerated mode, it is only added in 3.13,
974
+ // but we need to control it for controlling things for accelerated binaries
975
+ // too.
976
+ #if PYTHON_VERSION >= 0x3b0 && PYTHON_VERSION <= 0x3d0
977
+ environment_char_t const *frozen_modules_env = getEnvironmentVariable("PYTHON_FROZEN_MODULES");
978
+
979
+ if (frozen_modules_env == NULL ||
980
+ (compareEnvironmentString(frozen_modules_env, makeEnvironmentLiteral("off")) == 0)) {
981
+ config.use_frozen_modules = 0;
982
+ }
983
+ #endif
984
+ #endif
985
+ #endif
986
+
1062
987
  config.install_signal_handlers = 1;
1063
988
 
1064
989
  NUITKA_PRINT_TIMING("Nuitka_Py_Initialize(): Calling Py_InitializeFromConfig.");
@@ -1089,23 +1014,13 @@ static void Nuitka_Py_Initialize(void) {
1089
1014
  static void changeStandardHandleTarget(int std_handle_id, FILE *std_handle, filename_char_t const *template_path) {
1090
1015
  filename_char_t filename_buffer[1024];
1091
1016
 
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));
1017
+ bool res =
1018
+ expandTemplatePathFilename(filename_buffer, template_path, sizeof(filename_buffer) / sizeof(filename_char_t));
1096
1019
 
1097
1020
  if (res == false) {
1098
- wprintf(L"Error, couldn't expand pattern '%lS'\n", template_path);
1021
+ printf("Error, couldn't expand pattern '" FILENAME_FORMAT_STR "'\n", template_path);
1099
1022
  abort();
1100
1023
  }
1101
- #else
1102
- bool res = expandTemplatePath(filename_buffer, template_path, sizeof(filename_buffer) / sizeof(filename_char_t));
1103
-
1104
- if (res == false) {
1105
- printf("Error, couldn't expand pattern: '%s'\n", template_path);
1106
- abort();
1107
- }
1108
- #endif
1109
1024
 
1110
1025
  if (GetStdHandle(std_handle_id) == 0) {
1111
1026
  FILE *file_handle;
@@ -1195,6 +1110,28 @@ static void changeStandardHandleTarget(FILE *std_handle, filename_char_t const *
1195
1110
  #endif
1196
1111
  #endif
1197
1112
 
1113
+ #if defined(_NUITKA_EXPERIMENTAL_SHOW_STARTUP_TIME)
1114
+ static void Nuitka_at_exit(void) { NUITKA_PRINT_TIMING("Nuitka_at_exit(): Called by C exit()"); }
1115
+ #endif
1116
+
1117
+ #if !defined(_NUITKA_DEPLOYMENT_MODE) && !defined(_NUITKA_NO_DEPLOYMENT_SEGFAILT)
1118
+ #include <signal.h>
1119
+ static void nuitka_segfault_handler(int sig) {
1120
+ puts("Nuitka: A segmentation fault has occurred. This is highly unusual and can");
1121
+ puts("have multiple reasons. Please check https://nuitka.net/info/segfault.html");
1122
+ puts("for solutions.");
1123
+
1124
+ signal(SIGSEGV, SIG_DFL);
1125
+ raise(SIGSEGV);
1126
+ }
1127
+ #endif
1128
+
1129
+ #if _NUITKA_NATIVE_WCHAR_ARGV == 1
1130
+ extern wchar_t const *getBinaryFilenameWideChars(bool resolve_symlinks);
1131
+ #else
1132
+ extern char const *getBinaryFilenameHostEncoded(bool resolve_symlinks);
1133
+ #endif
1134
+
1198
1135
  #ifdef _NUITKA_WINMAIN_ENTRY_POINT
1199
1136
  int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, wchar_t *lpCmdLine, int nCmdShow) {
1200
1137
  /* MSVC, MINGW64 */
@@ -1208,7 +1145,27 @@ int main(int argc, char **argv) {
1208
1145
  #endif
1209
1146
  #endif
1210
1147
 
1211
- // First things, set up stdout/stderr according to user specification.
1148
+ // Installer a segfault handler that outputs a helpful message.
1149
+ #if !defined(_NUITKA_DEPLOYMENT_MODE) && !defined(_NUITKA_NO_DEPLOYMENT_SEGFAILT)
1150
+ signal(SIGSEGV, nuitka_segfault_handler);
1151
+ #endif
1152
+
1153
+ #ifdef _NUITKA_EXPERIMENTAL_DUMP_C_TRACEBACKS
1154
+ INIT_C_BACKTRACES();
1155
+ DUMP_C_BACKTRACE();
1156
+ #endif
1157
+ // Trace when the process exits.
1158
+ #if defined(_NUITKA_EXPERIMENTAL_SHOW_STARTUP_TIME)
1159
+ atexit(Nuitka_at_exit);
1160
+ #endif
1161
+
1162
+ // Attach to the parent console respecting redirection only, otherwise we
1163
+ // cannot even output traces.
1164
+ #if defined(_WIN32) && defined(_NUITKA_ATTACH_CONSOLE_WINDOW)
1165
+ inheritAttachedConsole();
1166
+ #endif
1167
+
1168
+ // Set up stdout/stderr according to user specification.
1212
1169
  #if NUITKA_STANDARD_HANDLES_EARLY == 1
1213
1170
  #if defined(NUITKA_FORCED_STDOUT_PATH)
1214
1171
  #ifdef _WIN32
@@ -1239,6 +1196,8 @@ int main(int argc, char **argv) {
1239
1196
  setbuf(stderr, (char *)NULL);
1240
1197
 
1241
1198
  #if PYTHON_VERSION >= 0x300
1199
+ // spell-checker: ignore PYTHONUNBUFFERED
1200
+
1242
1201
  environment_char_t const *old_env_unbuffered = getEnvironmentVariable("PYTHONUNBUFFERED");
1243
1202
  setEnvironmentVariable("PYTHONUNBUFFERED", makeEnvironmentLiteral("1"));
1244
1203
  #endif
@@ -1248,7 +1207,8 @@ int main(int argc, char **argv) {
1248
1207
  NUITKA_INIT_PROGRAM_EARLY(argc, argv);
1249
1208
 
1250
1209
  #ifdef __FreeBSD__
1251
- /* FP exceptions run in "no stop" mode by default */
1210
+ // FP exceptions run in "no stop" mode by default
1211
+ // spell-checker: ignore fpgetmask,fpsetmask
1252
1212
 
1253
1213
  fp_except_t m;
1254
1214
 
@@ -1259,11 +1219,10 @@ int main(int argc, char **argv) {
1259
1219
  #ifdef _NUITKA_STANDALONE
1260
1220
  NUITKA_PRINT_TIMING("main(): Prepare standalone environment.");
1261
1221
  prepareStandaloneEnvironment();
1262
- #else
1263
-
1264
1222
  #endif
1265
1223
 
1266
1224
  #if _NUITKA_FROZEN > 0
1225
+ NUITKA_PRINT_TIMING("main(): Preparing frozen modules.");
1267
1226
  prepareFrozenModules();
1268
1227
  #endif
1269
1228
 
@@ -1305,6 +1264,7 @@ int main(int argc, char **argv) {
1305
1264
  #endif
1306
1265
 
1307
1266
  #ifdef NUITKA_PYTHON_STATIC
1267
+ NUITKA_PRINT_TIMING("main(): Preparing static modules.");
1308
1268
  Py_InitStaticModules();
1309
1269
  #endif
1310
1270
 
@@ -1319,23 +1279,34 @@ int main(int argc, char **argv) {
1319
1279
 
1320
1280
  /* Initial command line handling only. */
1321
1281
 
1282
+ // Make sure, we use the absolute program path for argv[0]
1283
+ #if !defined(_NUITKA_ONEFILE_MODE) && _NUITKA_NATIVE_WCHAR_ARGV == 0
1284
+ argv[0] = (char *)getBinaryFilenameHostEncoded(false);
1285
+ #endif
1286
+
1322
1287
  #if PYTHON_VERSION >= 0x300 && _NUITKA_NATIVE_WCHAR_ARGV == 0
1323
1288
  NUITKA_PRINT_TRACE("main(): Calling convertCommandLineParameters.");
1324
1289
  orig_argv = convertCommandLineParameters(argc, argv);
1325
1290
  #elif PYTHON_VERSION < 0x300 && _NUITKA_NATIVE_WCHAR_ARGV == 1
1291
+ NUITKA_PRINT_TRACE("main(): Calling getCommandLineToArgvA.");
1326
1292
  orig_argv = getCommandLineToArgvA(GetCommandLineA());
1327
1293
  #else
1328
1294
  orig_argv = argv;
1329
1295
  #endif
1330
1296
 
1297
+ // Make sure, we use the absolute program path for argv[0]
1298
+ #if !defined(_NUITKA_ONEFILE_MODE) && _NUITKA_NATIVE_WCHAR_ARGV == 1 && PYTHON_VERSION >= 0x300
1299
+ orig_argv[0] = (wchar_t *)getBinaryFilenameWideChars(false);
1300
+ #endif
1301
+
1331
1302
  // Make sure the compiled path of Python is replaced.
1332
1303
  Py_SetProgramName(orig_argv[0]);
1333
1304
 
1334
1305
  orig_argc = argc;
1335
1306
 
1336
1307
  // Early command line parsing.
1337
- NUITKA_PRINT_TRACE("main(): Calling initial setCommandLineParameters.");
1338
- setCommandLineParameters(argc, argv, true);
1308
+ NUITKA_PRINT_TRACE("main(): Calling setCommandLineParameters.");
1309
+ setCommandLineParameters(argc, argv);
1339
1310
 
1340
1311
  /* For Python installations that need the home set, we inject it back here. */
1341
1312
  #if defined(PYTHON_HOME_PATH)
@@ -1397,6 +1368,24 @@ orig_argv = argv;
1397
1368
  #ifdef _NUITKA_STANDALONE
1398
1369
  NUITKA_PRINT_TRACE("main(): Restore standalone environment.");
1399
1370
  restoreStandaloneEnvironment();
1371
+ #else
1372
+ {
1373
+ environment_char_t const *python_path_cstr = getEnvironmentVariable("NUITKA_PYTHONPATH");
1374
+
1375
+ if (python_path_cstr != NULL) {
1376
+ PyObject *python_path_str = Nuitka_String_FromFilename(python_path_cstr);
1377
+ #ifdef _WIN32
1378
+ PyObject *python_path_list = PyObject_CallMethod(python_path_str, (char *)"split", (char *)"s", ";");
1379
+ #else
1380
+ PyObject *python_path_list = PyObject_CallMethod(python_path_str, (char *)"split", (char *)"s", ":");
1381
+ #endif
1382
+ Py_DECREF(python_path_str);
1383
+
1384
+ PySys_SetObject("path", python_path_list);
1385
+
1386
+ unsetEnvironmentVariable("NUITKA_PYTHONPATH");
1387
+ }
1388
+ }
1400
1389
  #endif
1401
1390
 
1402
1391
  /* Lie about it, believe it or not, there are "site" files, that check
@@ -1405,9 +1394,6 @@ orig_argv = argv;
1405
1394
  Py_NoSiteFlag = SYSFLAG_NO_SITE;
1406
1395
 
1407
1396
  /* Set the command line parameters for run time usage. */
1408
- NUITKA_PRINT_TRACE("main(): Calling setCommandLineParameters.");
1409
- setCommandLineParameters(argc, argv, false);
1410
-
1411
1397
  PySys_SetArgv(argc, orig_argv);
1412
1398
  // Empty "sys.path" again, the above adds program directory to it.
1413
1399
  #if SYSFLAG_ISOLATED
@@ -1477,6 +1463,57 @@ orig_argv = argv;
1477
1463
  }
1478
1464
  #endif
1479
1465
 
1466
+ #if defined(_WIN32) && defined(_NUITKA_ATTACH_CONSOLE_WINDOW)
1467
+ if (needs_stdout_attaching) {
1468
+ PyObject *filename = Nuitka_String_FromString("CONOUT$");
1469
+ // This defaults to "utf-8" internally. We may add an argument of use
1470
+ // platform ones in the future.
1471
+ PyObject *encoding = NULL;
1472
+
1473
+ PyObject *stdout_file = BUILTIN_OPEN_SIMPLE(tstate, filename, "w", SYSFLAG_UNBUFFERED != 1, encoding);
1474
+ if (unlikely(stdout_file == NULL)) {
1475
+ PyErr_PrintEx(1);
1476
+ Py_Exit(1);
1477
+ }
1478
+
1479
+ Py_DECREF(filename);
1480
+
1481
+ Nuitka_SysSetObject("stdout", stdout_file);
1482
+ }
1483
+
1484
+ if (needs_stderr_attaching) {
1485
+ PyObject *filename = Nuitka_String_FromString("CONOUT$");
1486
+ // This defaults to "utf-8" internally. We may add an argument of use
1487
+ // platform ones in the future.
1488
+ PyObject *encoding = NULL;
1489
+
1490
+ PyObject *stderr_file = BUILTIN_OPEN_SIMPLE(tstate, filename, "w", SYSFLAG_UNBUFFERED != 1, encoding);
1491
+ if (unlikely(stderr_file == NULL)) {
1492
+ PyErr_PrintEx(1);
1493
+ Py_Exit(1);
1494
+ }
1495
+
1496
+ Py_DECREF(filename);
1497
+
1498
+ Nuitka_SysSetObject("stderr", stderr_file);
1499
+ }
1500
+
1501
+ if (needs_stdin_attaching) {
1502
+ PyObject *filename = Nuitka_String_FromString("CONIN$");
1503
+ // This defaults to "utf-8" internally. We may add an argument of use
1504
+ // platform ones in the future.
1505
+ PyObject *encoding = NULL;
1506
+
1507
+ // CPython core requires stdin to be buffered due to methods usage, and it won't matter
1508
+ // here much.
1509
+ PyObject *stdin_file = BUILTIN_OPEN_SIMPLE(tstate, filename, "r", true, encoding);
1510
+
1511
+ Py_DECREF(filename);
1512
+
1513
+ Nuitka_SysSetObject("stdin", stdin_file);
1514
+ }
1515
+ #endif
1516
+
1480
1517
  NUITKA_PRINT_TRACE("main(): Setting Python input/output handles.");
1481
1518
  setInputOutputHandles(tstate);
1482
1519
 
@@ -1485,8 +1522,10 @@ orig_argv = argv;
1485
1522
  #if PYTHON_VERSION >= 0x300
1486
1523
  // Make sure the importlib fully bootstraps as we couldn't load it with the
1487
1524
  // standard loader.
1488
- PyObject *importlib_module = getImportLibBootstrapModule();
1489
- CHECK_OBJECT(importlib_module);
1525
+ {
1526
+ NUITKA_MAY_BE_UNUSED PyObject *importlib_module = getImportLibBootstrapModule();
1527
+ CHECK_OBJECT(importlib_module);
1528
+ }
1490
1529
  #endif
1491
1530
 
1492
1531
  NUITKA_PRINT_TRACE("main(): Calling setEarlyFrozenModulesFileAttribute().");
@@ -1503,12 +1542,14 @@ orig_argv = argv;
1503
1542
  /* Enable meta path based loader. */
1504
1543
  setupMetaPathBasedLoader(tstate);
1505
1544
 
1545
+ #if PYTHON_VERSION < 0x3d0
1506
1546
  /* Initialize warnings module. */
1507
1547
  _PyWarnings_Init();
1548
+ #endif
1508
1549
 
1509
1550
  #if NO_PYTHON_WARNINGS && PYTHON_VERSION >= 0x342 && PYTHON_VERSION < 0x3a0 && defined(_NUITKA_FULL_COMPAT)
1510
1551
  // For full compatibility bump the warnings registry version,
1511
- // otherwise modules "__warningsregistry__" will mismatch.
1552
+ // otherwise modules "__warningregistry__" will mismatch.
1512
1553
  PyObject *warnings_module = PyImport_ImportModule("warnings");
1513
1554
  PyObject *meth = PyObject_GetAttrString(warnings_module, "_filters_mutated");
1514
1555
 
@@ -1558,16 +1599,52 @@ orig_argv = argv;
1558
1599
  #ifdef _NUITKA_PLUGIN_MULTIPROCESSING_ENABLED
1559
1600
  if (unlikely(is_multiprocessing_fork)) {
1560
1601
  NUITKA_PRINT_TRACE("main(): Calling __parents_main__.");
1561
- EXECUTE_MAIN_MODULE("__parents_main__");
1602
+ EXECUTE_MAIN_MODULE(tstate, "__parents_main__", false);
1562
1603
 
1563
- int exit_code = HANDLE_PROGRAM_EXIT();
1604
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
1564
1605
 
1565
1606
  NUITKA_PRINT_TRACE("main(): Calling __parents_main__ Py_Exit.");
1566
1607
  Py_Exit(exit_code);
1608
+ #if defined(_WIN32)
1609
+ } else if (unlikely(is_joblib_popen_loky_win32)) {
1610
+ NUITKA_PRINT_TRACE("main(): Calling joblib.externals.loky.backend.popen_loky_win32.");
1611
+ PyObject *joblib_popen_loky_win32_module =
1612
+ EXECUTE_MAIN_MODULE(tstate, "joblib.externals.loky.backend.popen_loky_win32", true);
1613
+
1614
+ // Remove the "-c" and options part like CPython would do as well.
1615
+ PyObject *argv_list = Nuitka_SysGetObject("argv");
1616
+ Py_ssize_t size = PyList_Size(argv_list);
1617
+
1618
+ // Negative indexes are not supported by this function.
1619
+ int res = PyList_SetSlice(argv_list, 1, size - 2, const_tuple_empty);
1620
+ assert(res == 0);
1621
+
1622
+ PyObject *main_function = PyObject_GetAttrString(joblib_popen_loky_win32_module, "main");
1623
+ CHECK_OBJECT(main_function);
1624
+
1625
+ if (loky_joblib_pipe_handle_arg == 0) {
1626
+ CALL_FUNCTION_NO_ARGS(tstate, main_function);
1627
+ } else {
1628
+ char const *kw_keys[] = {"pipe_handle", "parent_pid"};
1629
+ PyObject *kw_values[] = {
1630
+ PyLong_FromLong(loky_joblib_pipe_handle_arg),
1631
+ PyLong_FromLong(loky_joblib_parent_pid_arg),
1632
+ };
1633
+
1634
+ PyObject *kw_args = MAKE_DICT_X_CSTR(kw_keys, kw_values, sizeof(kw_values) / sizeof(PyObject *));
1635
+
1636
+ CALL_FUNCTION_WITH_KEYARGS(tstate, main_function, kw_args);
1637
+ }
1638
+
1639
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
1640
+
1641
+ NUITKA_PRINT_TRACE("main(): Calling 'joblib.externals.loky.backend.popen_loky_posix' Py_Exit.");
1642
+ Py_Exit(exit_code);
1643
+ #else
1567
1644
  } else if (unlikely(is_joblib_popen_loky_posix)) {
1568
1645
  NUITKA_PRINT_TRACE("main(): Calling joblib.externals.loky.backend.popen_loky_posix.");
1569
1646
  PyObject *joblib_popen_loky_posix_module =
1570
- EXECUTE_MAIN_MODULE("joblib.externals.loky.backend.popen_loky_posix");
1647
+ EXECUTE_MAIN_MODULE(tstate, "joblib.externals.loky.backend.popen_loky_posix", true);
1571
1648
 
1572
1649
  // Remove the "-m" like CPython would do as well.
1573
1650
  int res = PyList_SetSlice(Nuitka_SysGetObject("argv"), 0, 2, const_tuple_empty);
@@ -1578,35 +1655,38 @@ orig_argv = argv;
1578
1655
 
1579
1656
  CALL_FUNCTION_NO_ARGS(tstate, main_function);
1580
1657
 
1581
- int exit_code = HANDLE_PROGRAM_EXIT();
1658
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
1582
1659
 
1583
- NUITKA_PRINT_TRACE("main(): Calling joblib.externals.loky.backend.popen_loky_posix Py_Exit.");
1660
+ NUITKA_PRINT_TRACE("main(): Calling 'joblib.externals.loky.backend.popen_loky_posix' Py_Exit.");
1584
1661
  Py_Exit(exit_code);
1662
+ #endif
1585
1663
  } else if (unlikely(multiprocessing_resource_tracker_arg != -1)) {
1586
1664
  NUITKA_PRINT_TRACE("main(): Launching as 'multiprocessing.resource_tracker'.");
1587
- PyObject *resource_tracker_module = EXECUTE_MAIN_MODULE("multiprocessing.resource_tracker");
1665
+ PyObject *resource_tracker_module = EXECUTE_MAIN_MODULE(tstate, "multiprocessing.resource_tracker", true);
1588
1666
 
1589
1667
  PyObject *main_function = PyObject_GetAttrString(resource_tracker_module, "main");
1590
1668
  CHECK_OBJECT(main_function);
1591
1669
 
1592
1670
  CALL_FUNCTION_WITH_SINGLE_ARG(tstate, main_function, PyInt_FromLong(multiprocessing_resource_tracker_arg));
1593
1671
 
1594
- int exit_code = HANDLE_PROGRAM_EXIT();
1672
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
1595
1673
 
1596
- NUITKA_PRINT_TRACE("main(): Calling resource_tracker Py_Exit.");
1674
+ NUITKA_PRINT_TRACE("main(): Calling 'multiprocessing.resource_tracker' Py_Exit.");
1597
1675
  Py_Exit(exit_code);
1598
1676
  } else if (unlikely(loky_resource_tracker_arg != -1)) {
1599
1677
  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");
1678
+ PyObject *resource_tracker_module =
1679
+ EXECUTE_MAIN_MODULE(tstate, "joblib.externals.loky.backend.resource_tracker", true);
1680
+ CHECK_OBJECT(resource_tracker_module);
1601
1681
 
1602
1682
  PyObject *main_function = PyObject_GetAttrString(resource_tracker_module, "main");
1603
1683
  CHECK_OBJECT(main_function);
1604
1684
 
1605
1685
  CALL_FUNCTION_WITH_SINGLE_ARG(tstate, main_function, PyInt_FromLong(loky_resource_tracker_arg));
1606
1686
 
1607
- int exit_code = HANDLE_PROGRAM_EXIT();
1687
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
1608
1688
 
1609
- NUITKA_PRINT_TRACE("main(): Calling resource_tracker Py_Exit.");
1689
+ NUITKA_PRINT_TRACE("main(): Calling 'joblib.externals.loky.backend.resource_tracker' Py_Exit.");
1610
1690
  Py_Exit(exit_code);
1611
1691
  } else {
1612
1692
  #endif
@@ -1623,6 +1703,7 @@ orig_argv = argv;
1623
1703
  }
1624
1704
  #endif
1625
1705
  PyDict_DelItemString(Nuitka_GetSysModules(), NUITKA_MAIN_MODULE_NAME);
1706
+ DROP_ERROR_OCCURRED(tstate);
1626
1707
 
1627
1708
  #if _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
1628
1709
  NUITKA_PRINT_TRACE("main(): Calling plugin SvcLaunchService() entry point.");
@@ -1630,7 +1711,7 @@ orig_argv = argv;
1630
1711
  #else
1631
1712
  /* Execute the "__main__" module. */
1632
1713
  NUITKA_PRINT_TIMING("main(): Calling " NUITKA_MAIN_MODULE_NAME ".");
1633
- EXECUTE_MAIN_MODULE(NUITKA_MAIN_MODULE_NAME);
1714
+ EXECUTE_MAIN_MODULE(tstate, NUITKA_MAIN_MODULE_NAME, NUITKA_MAIN_IS_PACKAGE_BOOL);
1634
1715
  NUITKA_PRINT_TIMING("main(): Exited from " NUITKA_MAIN_MODULE_NAME ".");
1635
1716
 
1636
1717
  #endif
@@ -1651,13 +1732,13 @@ orig_argv = argv;
1651
1732
  checkGlobalConstants();
1652
1733
 
1653
1734
  /* TODO: Walk over all loaded compiled modules, and make this kind of checks. */
1654
- #if !NUITKA_MAIN_PACKAGE_MODE
1735
+ #if !NUITKA_MAIN_IS_PACKAGE_BOOL
1655
1736
  checkModuleConstants___main__(tstate);
1656
1737
  #endif
1657
1738
 
1658
1739
  #endif
1659
1740
 
1660
- int exit_code = HANDLE_PROGRAM_EXIT();
1741
+ int exit_code = HANDLE_PROGRAM_EXIT(tstate);
1661
1742
 
1662
1743
  NUITKA_PRINT_TIMING("main(): Calling Py_Exit.");
1663
1744
  Py_Exit(exit_code);
@@ -1710,3 +1791,18 @@ int Py_Main(int argc, char **argv) { return 0; }
1710
1791
  }
1711
1792
  #endif
1712
1793
  #endif
1794
+
1795
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
1796
+ // integrates with CPython, but also works on its own.
1797
+ //
1798
+ // Licensed under the Apache License, Version 2.0 (the "License");
1799
+ // you may not use this file except in compliance with the License.
1800
+ // You may obtain a copy of the License at
1801
+ //
1802
+ // http://www.apache.org/licenses/LICENSE-2.0
1803
+ //
1804
+ // Unless required by applicable law or agreed to in writing, software
1805
+ // distributed under the License is distributed on an "AS IS" BASIS,
1806
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1807
+ // See the License for the specific language governing permissions and
1808
+ // limitations under the License.