Nuitka-winsvc 2.5.6__cp311-cp311-win_amd64.whl → 2.6.5__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 (701) hide show
  1. {Nuitka_winsvc-2.5.6.data → Nuitka_winsvc-2.6.5.data}/scripts/nuitka-run.cmd +1 -1
  2. {Nuitka_winsvc-2.5.6.data → Nuitka_winsvc-2.6.5.data}/scripts/nuitka.cmd +1 -1
  3. {Nuitka_winsvc-2.5.6.dist-info → Nuitka_winsvc-2.6.5.dist-info}/METADATA +36 -24
  4. Nuitka_winsvc-2.6.5.dist-info/RECORD +992 -0
  5. {Nuitka_winsvc-2.5.6.dist-info → Nuitka_winsvc-2.6.5.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +1 -1
  7. nuitka/BytecodeCaching.py +15 -4
  8. nuitka/Bytecodes.py +1 -1
  9. nuitka/CacheCleanup.py +1 -1
  10. nuitka/Constants.py +1 -1
  11. nuitka/Errors.py +1 -1
  12. nuitka/HardImportRegistry.py +1 -1
  13. nuitka/MainControl.py +93 -94
  14. nuitka/ModuleRegistry.py +19 -4
  15. nuitka/OptionParsing.py +86 -17
  16. nuitka/Options.py +230 -106
  17. nuitka/OutputDirectories.py +5 -3
  18. nuitka/PostProcessing.py +76 -27
  19. nuitka/Progress.py +1 -1
  20. nuitka/PythonFlavors.py +24 -3
  21. nuitka/PythonOperators.py +1 -1
  22. nuitka/PythonVersions.py +8 -4
  23. nuitka/Serialization.py +1 -1
  24. nuitka/SourceCodeReferences.py +1 -1
  25. nuitka/Tracing.py +2 -1
  26. nuitka/TreeXML.py +1 -1
  27. nuitka/Variables.py +1 -1
  28. nuitka/Version.py +2 -2
  29. nuitka/__init__.py +1 -1
  30. nuitka/__main__.py +4 -1
  31. nuitka/__past__.py +1 -1
  32. nuitka/build/Backend.scons +44 -66
  33. nuitka/build/CCompilerVersion.scons +2 -1
  34. nuitka/build/DataComposerInterface.py +2 -1
  35. nuitka/build/Offsets.scons +644 -0
  36. nuitka/build/Onefile.scons +5 -13
  37. nuitka/build/SconsCaching.py +9 -7
  38. nuitka/build/SconsCompilerSettings.py +57 -35
  39. nuitka/build/SconsHacks.py +3 -3
  40. nuitka/build/SconsInterface.py +86 -58
  41. nuitka/build/SconsProgress.py +12 -5
  42. nuitka/build/SconsSpawn.py +3 -3
  43. nuitka/build/SconsUtils.py +20 -1
  44. nuitka/build/__init__.py +1 -1
  45. nuitka/build/include/nuitka/allocator.h +3 -1
  46. nuitka/build/include/nuitka/builtins.h +1 -1
  47. nuitka/build/include/nuitka/calling.h +1 -1
  48. nuitka/build/include/nuitka/checkers.h +1 -1
  49. nuitka/build/include/nuitka/checksum_tools.h +1 -1
  50. nuitka/build/include/nuitka/compiled_asyncgen.h +4 -2
  51. nuitka/build/include/nuitka/compiled_cell.h +1 -1
  52. nuitka/build/include/nuitka/compiled_coroutine.h +3 -2
  53. nuitka/build/include/nuitka/compiled_frame.h +6 -13
  54. nuitka/build/include/nuitka/compiled_function.h +2 -3
  55. nuitka/build/include/nuitka/compiled_generator.h +3 -2
  56. nuitka/build/include/nuitka/compiled_method.h +1 -1
  57. nuitka/build/include/nuitka/constants.h +5 -1
  58. nuitka/build/include/nuitka/constants_blob.h +1 -1
  59. nuitka/build/include/nuitka/debug_settings.h +1 -1
  60. nuitka/build/include/nuitka/environment_variables.h +1 -1
  61. nuitka/build/include/nuitka/environment_variables_system.h +1 -1
  62. nuitka/build/include/nuitka/exception_groups.h +1 -1
  63. nuitka/build/include/nuitka/exceptions.h +2 -2
  64. nuitka/build/include/nuitka/filesystem_paths.h +4 -1
  65. nuitka/build/include/nuitka/freelists.h +2 -2
  66. nuitka/build/include/nuitka/helper/attributes.h +1 -1
  67. nuitka/build/include/nuitka/helper/boolean.h +1 -1
  68. nuitka/build/include/nuitka/helper/bytearrays.h +1 -1
  69. nuitka/build/include/nuitka/helper/bytes.h +1 -1
  70. nuitka/build/include/nuitka/helper/calling_generated.h +1 -1
  71. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +1 -1
  72. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +1 -1
  73. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +1 -1
  74. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +1 -1
  75. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +1 -1
  76. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +1 -1
  77. nuitka/build/include/nuitka/helper/comparisons_eq.h +1 -1
  78. nuitka/build/include/nuitka/helper/comparisons_ge.h +1 -1
  79. nuitka/build/include/nuitka/helper/comparisons_gt.h +1 -1
  80. nuitka/build/include/nuitka/helper/comparisons_le.h +1 -1
  81. nuitka/build/include/nuitka/helper/comparisons_lt.h +1 -1
  82. nuitka/build/include/nuitka/helper/comparisons_ne.h +1 -1
  83. nuitka/build/include/nuitka/helper/complex.h +1 -1
  84. nuitka/build/include/nuitka/helper/dictionaries.h +1 -1
  85. nuitka/build/include/nuitka/helper/floats.h +1 -1
  86. nuitka/build/include/nuitka/helper/import_hard.h +1 -1
  87. nuitka/build/include/nuitka/helper/indexes.h +1 -1
  88. nuitka/build/include/nuitka/helper/ints.h +1 -1
  89. nuitka/build/include/nuitka/helper/iterators.h +1 -1
  90. nuitka/build/include/nuitka/helper/lists.h +1 -1
  91. nuitka/build/include/nuitka/helper/lists_generated.h +1 -1
  92. nuitka/build/include/nuitka/helper/mappings.h +1 -1
  93. nuitka/build/include/nuitka/helper/operations.h +1 -1
  94. nuitka/build/include/nuitka/helper/operations_binary_add.h +1 -1
  95. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +1 -1
  96. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +1 -1
  97. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +1 -1
  98. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +1 -1
  99. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +1 -1
  100. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +1 -1
  101. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +1 -1
  102. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +1 -1
  103. nuitka/build/include/nuitka/helper/operations_binary_mod.h +1 -1
  104. nuitka/build/include/nuitka/helper/operations_binary_mult.h +1 -1
  105. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +1 -1
  106. nuitka/build/include/nuitka/helper/operations_binary_pow.h +1 -1
  107. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +1 -1
  108. nuitka/build/include/nuitka/helper/operations_binary_sub.h +1 -1
  109. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +1 -1
  110. nuitka/build/include/nuitka/helper/operations_builtin_types.h +1 -1
  111. nuitka/build/include/nuitka/helper/operations_inplace_add.h +1 -1
  112. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +1 -1
  113. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +1 -1
  114. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +1 -1
  115. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +1 -1
  116. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +1 -1
  117. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +1 -1
  118. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +1 -1
  119. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +1 -1
  120. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +1 -1
  121. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +1 -1
  122. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +1 -1
  123. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +1 -1
  124. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +1 -1
  125. nuitka/build/include/nuitka/helper/raising.h +1 -1
  126. nuitka/build/include/nuitka/helper/rangeobjects.h +1 -1
  127. nuitka/build/include/nuitka/helper/richcomparisons.h +1 -1
  128. nuitka/build/include/nuitka/helper/sequences.h +1 -1
  129. nuitka/build/include/nuitka/helper/sets.h +1 -1
  130. nuitka/build/include/nuitka/helper/slices.h +1 -1
  131. nuitka/build/include/nuitka/helper/strings.h +1 -1
  132. nuitka/build/include/nuitka/helper/subscripts.h +1 -1
  133. nuitka/build/include/nuitka/helper/tuples.h +1 -1
  134. nuitka/build/include/nuitka/helpers.h +1 -43
  135. nuitka/build/include/nuitka/importing.h +1 -1
  136. nuitka/build/include/nuitka/jit_sources.h +1 -1
  137. nuitka/build/include/nuitka/prelude.h +10 -10
  138. nuitka/build/include/nuitka/printing.h +1 -1
  139. nuitka/build/include/nuitka/python_pgo.h +1 -1
  140. nuitka/build/include/nuitka/safe_string_ops.h +1 -1
  141. nuitka/build/include/nuitka/threading.h +1 -1
  142. nuitka/build/include/nuitka/tracing.h +1 -1
  143. nuitka/build/include/nuitka/type_aliases.h +2 -2
  144. nuitka/build/include/nuitka/unfreezing.h +1 -1
  145. nuitka/build/inline_copy/pefile/LICENSE.txt +21 -0
  146. nuitka/build/inline_copy/pefile/ordlookup/__init__.py +41 -0
  147. nuitka/build/inline_copy/pefile/ordlookup/oleaut32.py +400 -0
  148. nuitka/build/inline_copy/pefile/ordlookup/ws2_32.py +120 -0
  149. nuitka/build/inline_copy/pefile/pefile.py +8034 -0
  150. nuitka/build/static_src/CompiledAsyncgenType.c +80 -75
  151. nuitka/build/static_src/CompiledCellType.c +2 -1
  152. nuitka/build/static_src/CompiledCodeHelpers.c +10 -28
  153. nuitka/build/static_src/CompiledCoroutineType.c +30 -40
  154. nuitka/build/static_src/CompiledFrameType.c +63 -5
  155. nuitka/build/static_src/CompiledFunctionType.c +11 -13
  156. nuitka/build/static_src/CompiledGeneratorType.c +56 -13
  157. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +1 -1
  158. nuitka/build/static_src/CompiledMethodType.c +2 -1
  159. nuitka/build/static_src/GenerateHeadersMain.c +30 -0
  160. nuitka/build/static_src/HelpersAllocator.c +1 -1
  161. nuitka/build/static_src/HelpersAttributes.c +5 -2
  162. nuitka/build/static_src/HelpersBuiltin.c +1 -1
  163. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +1 -1
  164. nuitka/build/static_src/HelpersBytes.c +1 -1
  165. nuitka/build/static_src/HelpersCalling.c +1 -1
  166. nuitka/build/static_src/HelpersCallingGenerated.c +6 -16
  167. nuitka/build/static_src/HelpersChecksumTools.c +1 -1
  168. nuitka/build/static_src/HelpersClasses.c +1 -1
  169. nuitka/build/static_src/HelpersComparisonDualEq.c +1 -1
  170. nuitka/build/static_src/HelpersComparisonDualGe.c +1 -1
  171. nuitka/build/static_src/HelpersComparisonDualGt.c +1 -1
  172. nuitka/build/static_src/HelpersComparisonDualLe.c +1 -1
  173. nuitka/build/static_src/HelpersComparisonDualLt.c +1 -1
  174. nuitka/build/static_src/HelpersComparisonDualNe.c +1 -1
  175. nuitka/build/static_src/HelpersComparisonEq.c +1 -1
  176. nuitka/build/static_src/HelpersComparisonEqUtils.c +1 -1
  177. nuitka/build/static_src/HelpersComparisonGe.c +1 -1
  178. nuitka/build/static_src/HelpersComparisonGt.c +1 -1
  179. nuitka/build/static_src/HelpersComparisonLe.c +1 -1
  180. nuitka/build/static_src/HelpersComparisonLt.c +1 -1
  181. nuitka/build/static_src/HelpersComparisonNe.c +1 -1
  182. nuitka/build/static_src/HelpersConsole.c +2 -2
  183. nuitka/build/static_src/HelpersConstantsBlob.c +199 -50
  184. nuitka/build/static_src/HelpersDeepcopy.c +3 -1
  185. nuitka/build/static_src/HelpersDictionaries.c +1 -1
  186. nuitka/build/static_src/HelpersDictionariesGenerated.c +1 -1
  187. nuitka/build/static_src/HelpersDumpBacktraces.c +1 -1
  188. nuitka/build/static_src/HelpersEnvironmentVariables.c +1 -1
  189. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +1 -1
  190. nuitka/build/static_src/HelpersExceptions.c +1 -1
  191. nuitka/build/static_src/HelpersFiles.c +18 -10
  192. nuitka/build/static_src/HelpersFilesystemPaths.c +36 -16
  193. nuitka/build/static_src/HelpersFloats.c +1 -1
  194. nuitka/build/static_src/HelpersHeapStorage.c +1 -1
  195. nuitka/build/static_src/HelpersImport.c +1 -1
  196. nuitka/build/static_src/HelpersImportHard.c +1 -1
  197. nuitka/build/static_src/HelpersJitSources.c +1 -1
  198. nuitka/build/static_src/HelpersLists.c +2 -1
  199. nuitka/build/static_src/HelpersListsGenerated.c +1 -1
  200. nuitka/build/static_src/HelpersMappings.c +1 -1
  201. nuitka/build/static_src/HelpersMatching.c +1 -1
  202. nuitka/build/static_src/HelpersOperationBinaryAdd.c +1 -1
  203. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +1 -1
  204. nuitka/build/static_src/HelpersOperationBinaryBitand.c +1 -1
  205. nuitka/build/static_src/HelpersOperationBinaryBitor.c +1 -1
  206. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +1 -1
  207. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +1 -1
  208. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +1 -1
  209. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +1 -1
  210. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +1 -1
  211. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +1 -1
  212. nuitka/build/static_src/HelpersOperationBinaryLshift.c +1 -1
  213. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +1 -1
  214. nuitka/build/static_src/HelpersOperationBinaryMod.c +1 -1
  215. nuitka/build/static_src/HelpersOperationBinaryMult.c +1 -1
  216. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +1 -1
  217. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +1 -1
  218. nuitka/build/static_src/HelpersOperationBinaryPow.c +1 -1
  219. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +1 -1
  220. nuitka/build/static_src/HelpersOperationBinaryRshift.c +1 -1
  221. nuitka/build/static_src/HelpersOperationBinarySub.c +1 -1
  222. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +1 -1
  223. nuitka/build/static_src/HelpersOperationInplaceAdd.c +1 -1
  224. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +1 -1
  225. nuitka/build/static_src/HelpersOperationInplaceBitand.c +1 -1
  226. nuitka/build/static_src/HelpersOperationInplaceBitor.c +1 -1
  227. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +1 -1
  228. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +1 -1
  229. nuitka/build/static_src/HelpersOperationInplaceLshift.c +1 -1
  230. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +1 -1
  231. nuitka/build/static_src/HelpersOperationInplaceMod.c +1 -1
  232. nuitka/build/static_src/HelpersOperationInplaceMult.c +1 -1
  233. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +1 -1
  234. nuitka/build/static_src/HelpersOperationInplacePow.c +1 -1
  235. nuitka/build/static_src/HelpersOperationInplaceRshift.c +1 -1
  236. nuitka/build/static_src/HelpersOperationInplaceSub.c +1 -1
  237. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +1 -1
  238. nuitka/build/static_src/HelpersProfiling.c +1 -1
  239. nuitka/build/static_src/HelpersPythonPgo.c +5 -2
  240. nuitka/build/static_src/HelpersRaising.c +1 -1
  241. nuitka/build/static_src/HelpersSafeStrings.c +1 -1
  242. nuitka/build/static_src/HelpersSequences.c +1 -1
  243. nuitka/build/static_src/HelpersSlices.c +1 -1
  244. nuitka/build/static_src/HelpersStrings.c +1 -1
  245. nuitka/build/static_src/HelpersTuples.c +1 -1
  246. nuitka/build/static_src/HelpersTypes.c +5 -5
  247. nuitka/build/static_src/InspectPatcher.c +2 -1
  248. nuitka/build/static_src/MainProgram.c +30 -6
  249. nuitka/build/static_src/MetaPathBasedLoader.c +19 -11
  250. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +1 -1
  251. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +1 -1
  252. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +17 -4
  253. nuitka/build/static_src/OnefileBootstrap.c +6 -4
  254. nuitka/build/static_src/OnefileSplashScreen.cpp +1 -1
  255. nuitka/code_generation/AsyncgenCodes.py +5 -6
  256. nuitka/code_generation/AttributeCodes.py +1 -1
  257. nuitka/code_generation/BinaryOperationHelperDefinitions.py +1 -1
  258. nuitka/code_generation/BranchCodes.py +1 -1
  259. nuitka/code_generation/BuiltinCodes.py +15 -5
  260. nuitka/code_generation/CallCodes.py +1 -1
  261. nuitka/code_generation/ClassCodes.py +1 -1
  262. nuitka/code_generation/CodeGeneration.py +23 -17
  263. nuitka/code_generation/CodeHelperSelection.py +1 -1
  264. nuitka/code_generation/CodeHelpers.py +1 -1
  265. nuitka/code_generation/CodeObjectCodes.py +19 -2
  266. nuitka/code_generation/ComparisonCodes.py +1 -1
  267. nuitka/code_generation/ComparisonHelperDefinitions.py +1 -1
  268. nuitka/code_generation/ConditionalCodes.py +1 -1
  269. nuitka/code_generation/ConstantCodes.py +1 -1
  270. nuitka/code_generation/Contexts.py +52 -39
  271. nuitka/code_generation/CoroutineCodes.py +4 -5
  272. nuitka/code_generation/CtypesCodes.py +1 -1
  273. nuitka/code_generation/DictCodes.py +1 -1
  274. nuitka/code_generation/Emission.py +1 -1
  275. nuitka/code_generation/ErrorCodes.py +1 -1
  276. nuitka/code_generation/EvalCodes.py +1 -1
  277. nuitka/code_generation/ExceptionCodes.py +1 -1
  278. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +1 -1
  279. nuitka/code_generation/ExpressionCodes.py +1 -1
  280. nuitka/code_generation/FrameCodes.py +26 -17
  281. nuitka/code_generation/FunctionCodes.py +9 -15
  282. nuitka/code_generation/GeneratorCodes.py +9 -10
  283. nuitka/code_generation/GlobalConstants.py +6 -4
  284. nuitka/code_generation/GlobalsLocalsCodes.py +1 -1
  285. nuitka/code_generation/IdCodes.py +1 -1
  286. nuitka/code_generation/ImportCodes.py +1 -1
  287. nuitka/code_generation/Indentation.py +1 -1
  288. nuitka/code_generation/IndexCodes.py +1 -1
  289. nuitka/code_generation/InjectCCodes.py +1 -1
  290. nuitka/code_generation/IntegerCodes.py +1 -1
  291. nuitka/code_generation/IteratorCodes.py +1 -1
  292. nuitka/code_generation/JitCodes.py +1 -1
  293. nuitka/code_generation/LabelCodes.py +1 -1
  294. nuitka/code_generation/LineNumberCodes.py +1 -1
  295. nuitka/code_generation/ListCodes.py +1 -1
  296. nuitka/code_generation/LoaderCodes.py +1 -1
  297. nuitka/code_generation/LocalsDictCodes.py +1 -1
  298. nuitka/code_generation/LoopCodes.py +1 -1
  299. nuitka/code_generation/MatchCodes.py +1 -1
  300. nuitka/code_generation/ModuleCodes.py +31 -4
  301. nuitka/code_generation/Namify.py +4 -1
  302. nuitka/code_generation/NetworkxCodes.py +1 -1
  303. nuitka/code_generation/OperationCodes.py +1 -1
  304. nuitka/code_generation/PackageResourceCodes.py +4 -10
  305. nuitka/code_generation/PrintCodes.py +1 -1
  306. nuitka/code_generation/PythonAPICodes.py +1 -1
  307. nuitka/code_generation/RaisingCodes.py +1 -1
  308. nuitka/code_generation/Reports.py +1 -1
  309. nuitka/code_generation/ReturnCodes.py +1 -1
  310. nuitka/code_generation/SetCodes.py +1 -1
  311. nuitka/code_generation/SliceCodes.py +1 -1
  312. nuitka/code_generation/StringCodes.py +1 -1
  313. nuitka/code_generation/SubscriptCodes.py +1 -1
  314. nuitka/code_generation/TensorflowCodes.py +1 -1
  315. nuitka/code_generation/TryCodes.py +1 -1
  316. nuitka/code_generation/TupleCodes.py +1 -1
  317. nuitka/code_generation/TypeAliasCodes.py +4 -3
  318. nuitka/code_generation/VariableCodes.py +1 -1
  319. nuitka/code_generation/VariableDeclarations.py +1 -1
  320. nuitka/code_generation/YieldCodes.py +1 -1
  321. nuitka/code_generation/__init__.py +1 -1
  322. nuitka/code_generation/c_types/CTypeBases.py +1 -1
  323. nuitka/code_generation/c_types/CTypeBooleans.py +1 -1
  324. nuitka/code_generation/c_types/CTypeCFloats.py +1 -1
  325. nuitka/code_generation/c_types/CTypeCLongs.py +1 -1
  326. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +1 -1
  327. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +1 -1
  328. nuitka/code_generation/c_types/CTypeNuitkaInts.py +1 -1
  329. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +1 -1
  330. nuitka/code_generation/c_types/CTypePyObjectPointers.py +1 -1
  331. nuitka/code_generation/c_types/CTypeVoids.py +1 -1
  332. nuitka/code_generation/c_types/__init__.py +1 -1
  333. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +1 -1
  334. nuitka/code_generation/templates/CodeTemplatesConstants.py +2 -2
  335. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +1 -1
  336. nuitka/code_generation/templates/CodeTemplatesExceptions.py +1 -1
  337. nuitka/code_generation/templates/CodeTemplatesFrames.py +21 -25
  338. nuitka/code_generation/templates/CodeTemplatesFunction.py +1 -1
  339. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +3 -3
  340. nuitka/code_generation/templates/CodeTemplatesIterators.py +1 -1
  341. nuitka/code_generation/templates/CodeTemplatesLoader.py +26 -3
  342. nuitka/code_generation/templates/CodeTemplatesModules.py +21 -8
  343. nuitka/code_generation/templates/CodeTemplatesVariables.py +1 -1
  344. nuitka/code_generation/templates/TemplateDebugWrapper.py +1 -1
  345. nuitka/code_generation/templates/__init__.py +1 -1
  346. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +1 -1
  347. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +1 -1
  348. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +1 -1
  349. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +21 -1
  350. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +1 -1
  351. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +1 -1
  352. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +1 -1
  353. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +1 -1
  354. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +1 -1
  355. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +1 -1
  356. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +1 -1
  357. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +1 -1
  358. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +1 -1
  359. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +1 -1
  360. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +1 -1
  361. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +1 -1
  362. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +1 -1
  363. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +1 -1
  364. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +1 -1
  365. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +1 -1
  366. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +1 -1
  367. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +1 -1
  368. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +1 -1
  369. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +1 -1
  370. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +1 -1
  371. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +1 -1
  372. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +1 -1
  373. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +1 -1
  374. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +1 -1
  375. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +1 -1
  376. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +1 -1
  377. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +1 -1
  378. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +1 -1
  379. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +1 -1
  380. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +1 -1
  381. nuitka/containers/Namedtuples.py +1 -1
  382. nuitka/containers/OrderedSetsFallback.py +1 -1
  383. nuitka/containers/__init__.py +1 -1
  384. nuitka/distutils/Build.py +1 -1
  385. nuitka/distutils/DistutilCommands.py +2 -2
  386. nuitka/distutils/__init__.py +1 -1
  387. nuitka/finalizations/Finalization.py +1 -1
  388. nuitka/finalizations/FinalizeMarkups.py +1 -1
  389. nuitka/finalizations/__init__.py +1 -1
  390. nuitka/freezer/DependsExe.py +2 -1
  391. nuitka/freezer/DllDependenciesCommon.py +1 -1
  392. nuitka/freezer/DllDependenciesMacOS.py +8 -3
  393. nuitka/freezer/DllDependenciesPosix.py +23 -4
  394. nuitka/freezer/DllDependenciesWin32.py +112 -25
  395. nuitka/freezer/ImportDetection.py +1 -1
  396. nuitka/freezer/IncludedDataFiles.py +2 -2
  397. nuitka/freezer/IncludedEntryPoints.py +9 -1
  398. nuitka/freezer/Onefile.py +13 -15
  399. nuitka/freezer/Standalone.py +16 -4
  400. nuitka/freezer/__init__.py +1 -1
  401. nuitka/importing/IgnoreListing.py +1 -1
  402. nuitka/importing/ImportCache.py +1 -1
  403. nuitka/importing/ImportResolving.py +1 -1
  404. nuitka/importing/Importing.py +6 -4
  405. nuitka/importing/PreloadedPackages.py +1 -1
  406. nuitka/importing/Recursion.py +37 -12
  407. nuitka/importing/StandardLibrary.py +1 -1
  408. nuitka/importing/__init__.py +1 -1
  409. nuitka/nodes/AsyncgenNodes.py +1 -1
  410. nuitka/nodes/AttributeLookupNodes.py +1 -1
  411. nuitka/nodes/AttributeNodes.py +1 -1
  412. nuitka/nodes/AttributeNodesGenerated.py +1 -1
  413. nuitka/nodes/BuiltinAllNodes.py +1 -1
  414. nuitka/nodes/BuiltinAnyNodes.py +1 -1
  415. nuitka/nodes/BuiltinComplexNodes.py +1 -1
  416. nuitka/nodes/BuiltinDecodingNodes.py +1 -1
  417. nuitka/nodes/BuiltinDecoratorNodes.py +1 -1
  418. nuitka/nodes/BuiltinDictNodes.py +1 -1
  419. nuitka/nodes/BuiltinFormatNodes.py +1 -1
  420. nuitka/nodes/BuiltinHashNodes.py +1 -1
  421. nuitka/nodes/BuiltinInputNodes.py +1 -1
  422. nuitka/nodes/BuiltinIntegerNodes.py +1 -1
  423. nuitka/nodes/BuiltinIteratorNodes.py +1 -1
  424. nuitka/nodes/BuiltinLenNodes.py +1 -1
  425. nuitka/nodes/BuiltinNextNodes.py +1 -1
  426. nuitka/nodes/BuiltinOpenNodes.py +1 -1
  427. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +1 -1
  428. nuitka/nodes/BuiltinRangeNodes.py +1 -1
  429. nuitka/nodes/BuiltinRefNodes.py +1 -1
  430. nuitka/nodes/BuiltinSumNodes.py +1 -1
  431. nuitka/nodes/BuiltinTypeNodes.py +1 -1
  432. nuitka/nodes/BuiltinVarsNodes.py +1 -1
  433. nuitka/nodes/BytesNodes.py +1 -1
  434. nuitka/nodes/CallNodes.py +1 -1
  435. nuitka/nodes/Checkers.py +1 -1
  436. nuitka/nodes/ChildrenHavingMixins.py +240 -16
  437. nuitka/nodes/ClassNodes.py +1 -1
  438. nuitka/nodes/CodeObjectSpecs.py +4 -4
  439. nuitka/nodes/ComparisonNodes.py +1 -1
  440. nuitka/nodes/ConditionalNodes.py +1 -1
  441. nuitka/nodes/ConstantRefNodes.py +1 -1
  442. nuitka/nodes/ContainerMakingNodes.py +1 -1
  443. nuitka/nodes/ContainerOperationNodes.py +1 -1
  444. nuitka/nodes/CoroutineNodes.py +1 -1
  445. nuitka/nodes/CtypesNodes.py +1 -1
  446. nuitka/nodes/DictionaryNodes.py +1 -1
  447. nuitka/nodes/ExceptionNodes.py +1 -1
  448. nuitka/nodes/ExecEvalNodes.py +1 -1
  449. nuitka/nodes/ExpressionBases.py +1 -1
  450. nuitka/nodes/ExpressionBasesGenerated.py +1 -1
  451. nuitka/nodes/ExpressionShapeMixins.py +1 -1
  452. nuitka/nodes/FrameNodes.py +19 -7
  453. nuitka/nodes/FunctionAttributeNodes.py +1 -1
  454. nuitka/nodes/FunctionNodes.py +8 -1
  455. nuitka/nodes/FutureSpecs.py +34 -2
  456. nuitka/nodes/GeneratorNodes.py +1 -1
  457. nuitka/nodes/GlobalsLocalsNodes.py +1 -1
  458. nuitka/nodes/HardImportNodesGenerated.py +140 -56
  459. nuitka/nodes/ImportHardNodes.py +1 -1
  460. nuitka/nodes/ImportNodes.py +1 -1
  461. nuitka/nodes/IndicatorMixins.py +1 -1
  462. nuitka/nodes/InjectCNodes.py +1 -1
  463. nuitka/nodes/IterationHandles.py +1 -1
  464. nuitka/nodes/KeyValuePairNodes.py +1 -1
  465. nuitka/nodes/ListOperationNodes.py +1 -1
  466. nuitka/nodes/LocalsDictNodes.py +1 -1
  467. nuitka/nodes/LocalsScopes.py +1 -1
  468. nuitka/nodes/LoopNodes.py +1 -1
  469. nuitka/nodes/MatchNodes.py +1 -1
  470. nuitka/nodes/ModuleAttributeNodes.py +1 -1
  471. nuitka/nodes/ModuleNodes.py +23 -9
  472. nuitka/nodes/NetworkxNodes.py +1 -1
  473. nuitka/nodes/NodeBases.py +1 -1
  474. nuitka/nodes/NodeMakingHelpers.py +1 -1
  475. nuitka/nodes/NodeMetaClasses.py +1 -1
  476. nuitka/nodes/OperatorNodes.py +1 -1
  477. nuitka/nodes/OperatorNodesUnary.py +1 -1
  478. nuitka/nodes/OsSysNodes.py +1 -1
  479. nuitka/nodes/OutlineNodes.py +1 -1
  480. nuitka/nodes/PackageMetadataNodes.py +4 -2
  481. nuitka/nodes/PackageResourceNodes.py +42 -7
  482. nuitka/nodes/PrintNodes.py +1 -1
  483. nuitka/nodes/ReturnNodes.py +1 -1
  484. nuitka/nodes/SideEffectNodes.py +1 -1
  485. nuitka/nodes/SliceNodes.py +1 -1
  486. nuitka/nodes/StatementBasesGenerated.py +1 -1
  487. nuitka/nodes/StatementNodes.py +1 -1
  488. nuitka/nodes/StrNodes.py +1 -1
  489. nuitka/nodes/StringConcatenationNodes.py +1 -1
  490. nuitka/nodes/SubscriptNodes.py +1 -1
  491. nuitka/nodes/TensorflowNodes.py +1 -1
  492. nuitka/nodes/TryNodes.py +1 -1
  493. nuitka/nodes/TypeMatchNodes.py +1 -1
  494. nuitka/nodes/TypeNodes.py +4 -4
  495. nuitka/nodes/VariableAssignNodes.py +1 -1
  496. nuitka/nodes/VariableDelNodes.py +1 -1
  497. nuitka/nodes/VariableNameNodes.py +1 -1
  498. nuitka/nodes/VariableRefNodes.py +1 -1
  499. nuitka/nodes/VariableReleaseNodes.py +1 -1
  500. nuitka/nodes/YieldNodes.py +1 -1
  501. nuitka/nodes/__init__.py +1 -1
  502. nuitka/nodes/shapes/BuiltinTypeShapes.py +1 -1
  503. nuitka/nodes/shapes/ControlFlowDescriptions.py +1 -1
  504. nuitka/nodes/shapes/IteratorShapes.py +1 -1
  505. nuitka/nodes/shapes/ShapeMixins.py +1 -1
  506. nuitka/nodes/shapes/StandardShapes.py +1 -1
  507. nuitka/nodes/shapes/__init__.py +1 -1
  508. nuitka/optimizations/BytecodeDemotion.py +1 -1
  509. nuitka/optimizations/FunctionInlining.py +1 -1
  510. nuitka/optimizations/Graphs.py +1 -1
  511. nuitka/optimizations/Optimization.py +1 -1
  512. nuitka/optimizations/OptimizeBuiltinCalls.py +1 -1
  513. nuitka/optimizations/Tags.py +1 -1
  514. nuitka/optimizations/TraceCollections.py +1 -1
  515. nuitka/optimizations/ValueTraces.py +1 -1
  516. nuitka/optimizations/__init__.py +1 -1
  517. nuitka/pgo/PGO.py +1 -1
  518. nuitka/pgo/__init__.py +1 -1
  519. nuitka/plugins/PluginBase.py +91 -16
  520. nuitka/plugins/Plugins.py +58 -15
  521. nuitka/plugins/YamlPluginBase.py +1 -1
  522. nuitka/plugins/__init__.py +1 -1
  523. nuitka/plugins/standard/AntiBloatPlugin.py +138 -66
  524. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +2 -1
  525. nuitka/plugins/standard/DataFilesPlugin.py +2 -2
  526. nuitka/plugins/standard/DelvewheelPlugin.py +2 -1
  527. nuitka/plugins/standard/DillPlugin/DillPlugin.c +1 -1
  528. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +1 -1
  529. nuitka/plugins/standard/DillPlugin.py +2 -2
  530. nuitka/plugins/standard/DllFilesPlugin.py +2 -12
  531. nuitka/plugins/standard/EnumPlugin.py +2 -2
  532. nuitka/plugins/standard/EventletPlugin.py +2 -1
  533. nuitka/plugins/standard/GeventPlugin.py +2 -1
  534. nuitka/plugins/standard/GiPlugin.py +2 -1
  535. nuitka/plugins/standard/GlfwPlugin.py +2 -1
  536. nuitka/plugins/standard/ImplicitImports.py +7 -6
  537. nuitka/plugins/standard/KivyPlugin.py +2 -1
  538. nuitka/plugins/standard/MatplotlibPlugin.py +2 -1
  539. nuitka/plugins/standard/MultiprocessingPlugin.py +2 -1
  540. nuitka/plugins/standard/NumpyPlugin.py +2 -1
  541. nuitka/plugins/standard/OptionsNannyPlugin.py +2 -2
  542. nuitka/plugins/standard/PbrPlugin.py +2 -2
  543. nuitka/plugins/standard/PkgResourcesPlugin.py +2 -1
  544. nuitka/plugins/standard/PlaywrightPlugin.py +10 -15
  545. nuitka/plugins/standard/PmwPlugin.py +2 -1
  546. nuitka/plugins/standard/PySidePyQtPlugin.py +25 -15
  547. nuitka/plugins/standard/PywebViewPlugin.py +2 -1
  548. nuitka/plugins/standard/SpacyPlugin.py +2 -1
  549. nuitka/plugins/standard/TensorflowPlugin.py +2 -1
  550. nuitka/plugins/standard/TkinterPlugin.py +15 -2
  551. nuitka/plugins/standard/TorchPlugin.py +2 -1
  552. nuitka/plugins/standard/TransformersPlugin.py +2 -2
  553. nuitka/plugins/standard/TrioPlugin.py +2 -1
  554. nuitka/plugins/standard/UpxPlugin.py +2 -1
  555. nuitka/plugins/standard/__init__.py +1 -1
  556. nuitka/plugins/standard/standard.nuitka-package.config.yml +257 -89
  557. nuitka/reports/CompilationReportReader.py +5 -1
  558. nuitka/reports/LicenseReport.rst.j2 +1 -1
  559. nuitka/reports/Reports.py +30 -3
  560. nuitka/reports/__init__.py +1 -1
  561. nuitka/specs/BuiltinBytesOperationSpecs.py +1 -1
  562. nuitka/specs/BuiltinDictOperationSpecs.py +1 -1
  563. nuitka/specs/BuiltinListOperationSpecs.py +1 -1
  564. nuitka/specs/BuiltinParameterSpecs.py +1 -1
  565. nuitka/specs/BuiltinStrOperationSpecs.py +1 -1
  566. nuitka/specs/BuiltinTypeOperationSpecs.py +1 -1
  567. nuitka/specs/BuiltinUnicodeOperationSpecs.py +1 -1
  568. nuitka/specs/HardImportSpecs.py +10 -2
  569. nuitka/specs/ParameterSpecs.py +17 -2
  570. nuitka/specs/__init__.py +1 -1
  571. nuitka/tools/Basics.py +1 -1
  572. nuitka/tools/__init__.py +1 -1
  573. nuitka/tools/commercial/__init__.py +1 -1
  574. nuitka/tools/data_composer/DataComposer.py +125 -1
  575. nuitka/tools/data_composer/__init__.py +1 -1
  576. nuitka/tools/data_composer/__main__.py +1 -1
  577. nuitka/tools/environments/CreateEnvironment.py +1 -1
  578. nuitka/tools/environments/Virtualenv.py +1 -1
  579. nuitka/tools/environments/__init__.py +1 -1
  580. nuitka/tools/general/__init__.py +1 -1
  581. nuitka/tools/general/dll_report/__init__.py +1 -1
  582. nuitka/tools/general/dll_report/__main__.py +1 -1
  583. nuitka/tools/general/find_module/FindModuleCode.py +6 -3
  584. nuitka/tools/general/find_module/__init__.py +1 -1
  585. nuitka/tools/general/generate_header/GenerateHeader.py +73 -0
  586. nuitka/tools/general/generate_header/__init__.py +19 -0
  587. nuitka/tools/onefile_compressor/OnefileCompressor.py +1 -1
  588. nuitka/tools/onefile_compressor/__init__.py +1 -1
  589. nuitka/tools/onefile_compressor/__main__.py +1 -1
  590. nuitka/tools/podman/Podman.py +1 -1
  591. nuitka/tools/podman/__init__.py +1 -1
  592. nuitka/tools/podman/__main__.py +4 -2
  593. nuitka/tools/profiler/__init__.py +1 -1
  594. nuitka/tools/profiler/__main__.py +1 -1
  595. nuitka/tools/scanning/DisplayPackageDLLs.py +42 -20
  596. nuitka/tools/scanning/DisplayPackageData.py +1 -1
  597. nuitka/tools/scanning/__init__.py +1 -1
  598. nuitka/tools/specialize/CTypeDescriptions.py +1 -1
  599. nuitka/tools/specialize/Common.py +1 -1
  600. nuitka/tools/specialize/SpecializeC.py +1 -1
  601. nuitka/tools/specialize/SpecializePython.py +7 -3
  602. nuitka/tools/specialize/__init__.py +1 -1
  603. nuitka/tools/testing/Common.py +140 -19
  604. nuitka/tools/testing/Constructs.py +1 -1
  605. nuitka/tools/testing/OutputComparison.py +5 -4
  606. nuitka/tools/testing/Pythons.py +1 -1
  607. nuitka/tools/testing/RuntimeTracing.py +1 -1
  608. nuitka/tools/testing/SearchModes.py +1 -1
  609. nuitka/tools/testing/Valgrind.py +1 -1
  610. nuitka/tools/testing/__init__.py +1 -1
  611. nuitka/tools/testing/check_reference_counts/__init__.py +1 -1
  612. nuitka/tools/testing/check_reference_counts/__main__.py +6 -2
  613. nuitka/tools/testing/compare_with_cpython/__init__.py +1 -1
  614. nuitka/tools/testing/compare_with_cpython/__main__.py +51 -14
  615. nuitka/tools/testing/find_sxs_modules/__init__.py +1 -1
  616. nuitka/tools/testing/find_sxs_modules/__main__.py +1 -1
  617. nuitka/tools/testing/measure_construct_performance/__init__.py +1 -1
  618. nuitka/tools/testing/measure_construct_performance/__main__.py +1 -1
  619. nuitka/tools/testing/run_nuitka_tests/__init__.py +1 -1
  620. nuitka/tools/testing/run_nuitka_tests/__main__.py +1 -1
  621. nuitka/tools/watch/AutoStage.py +1 -1
  622. nuitka/tools/watch/Common.py +55 -0
  623. nuitka/tools/watch/Conda.py +125 -0
  624. nuitka/tools/watch/GitHub.py +1 -1
  625. nuitka/tools/watch/Pacman.py +73 -0
  626. nuitka/tools/watch/Pipenv.py +143 -0
  627. nuitka/tools/watch/__init__.py +1 -1
  628. nuitka/tools/watch/__main__.py +124 -266
  629. nuitka/tree/Building.py +5 -7
  630. nuitka/tree/ComplexCallHelperFunctions.py +1 -1
  631. nuitka/tree/Extractions.py +1 -1
  632. nuitka/tree/FutureSpecState.py +71 -0
  633. nuitka/tree/InternalModule.py +1 -1
  634. nuitka/tree/Operations.py +1 -1
  635. nuitka/tree/ReformulationAssertStatements.py +1 -1
  636. nuitka/tree/ReformulationAssignmentStatements.py +3 -3
  637. nuitka/tree/ReformulationBooleanExpressions.py +1 -1
  638. nuitka/tree/ReformulationCallExpressions.py +1 -1
  639. nuitka/tree/ReformulationClasses.py +1 -1
  640. nuitka/tree/ReformulationClasses3.py +1 -1
  641. nuitka/tree/ReformulationComparisonExpressions.py +1 -1
  642. nuitka/tree/ReformulationContractionExpressions.py +3 -1
  643. nuitka/tree/ReformulationDictionaryCreation.py +3 -3
  644. nuitka/tree/ReformulationExecStatements.py +1 -1
  645. nuitka/tree/ReformulationForLoopStatements.py +1 -1
  646. nuitka/tree/ReformulationFunctionStatements.py +2 -2
  647. nuitka/tree/ReformulationImportStatements.py +5 -52
  648. nuitka/tree/ReformulationLambdaExpressions.py +2 -1
  649. nuitka/tree/ReformulationMatchStatements.py +1 -1
  650. nuitka/tree/ReformulationMultidist.py +2 -2
  651. nuitka/tree/ReformulationNamespacePackages.py +28 -6
  652. nuitka/tree/ReformulationPrintStatements.py +1 -1
  653. nuitka/tree/ReformulationSequenceCreation.py +1 -1
  654. nuitka/tree/ReformulationSubscriptExpressions.py +1 -1
  655. nuitka/tree/ReformulationTryExceptStatements.py +1 -1
  656. nuitka/tree/ReformulationTryFinallyStatements.py +1 -1
  657. nuitka/tree/ReformulationWhileLoopStatements.py +1 -1
  658. nuitka/tree/ReformulationWithStatements.py +1 -1
  659. nuitka/tree/ReformulationYieldExpressions.py +1 -1
  660. nuitka/tree/SourceHandling.py +57 -18
  661. nuitka/tree/SyntaxErrors.py +1 -1
  662. nuitka/tree/TreeHelpers.py +24 -10
  663. nuitka/tree/VariableClosure.py +1 -1
  664. nuitka/tree/__init__.py +1 -1
  665. nuitka/utils/AppDirs.py +5 -2
  666. nuitka/utils/CStrings.py +1 -1
  667. nuitka/utils/CommandLineOptions.py +2 -2
  668. nuitka/utils/Distributions.py +197 -15
  669. nuitka/utils/Download.py +14 -6
  670. nuitka/utils/Execution.py +43 -14
  671. nuitka/utils/FileOperations.py +43 -10
  672. nuitka/utils/Hashing.py +1 -1
  673. nuitka/utils/Images.py +8 -2
  674. nuitka/utils/Importing.py +1 -1
  675. nuitka/utils/InlineCopies.py +1 -1
  676. nuitka/utils/InstalledPythons.py +1 -1
  677. nuitka/utils/InstanceCounters.py +1 -1
  678. nuitka/utils/Jinja2.py +1 -1
  679. nuitka/utils/Json.py +2 -2
  680. nuitka/utils/MacOSApp.py +4 -3
  681. nuitka/utils/MemoryUsage.py +1 -1
  682. nuitka/utils/ModuleNames.py +1 -1
  683. nuitka/utils/PackageResources.py +1 -1
  684. nuitka/utils/ReExecute.py +1 -1
  685. nuitka/utils/Rest.py +1 -1
  686. nuitka/utils/SharedLibraries.py +52 -7
  687. nuitka/utils/Shebang.py +1 -1
  688. nuitka/utils/Signing.py +2 -4
  689. nuitka/utils/SlotMetaClasses.py +1 -1
  690. nuitka/utils/StaticLibraries.py +29 -1
  691. nuitka/utils/ThreadedExecutor.py +1 -1
  692. nuitka/utils/Timing.py +1 -1
  693. nuitka/utils/Utils.py +1 -1
  694. nuitka/utils/WindowsFileUsage.py +1 -1
  695. nuitka/utils/WindowsResources.py +3 -1
  696. nuitka/utils/Yaml.py +1 -1
  697. nuitka/utils/__init__.py +1 -1
  698. Nuitka_winsvc-2.5.6.dist-info/RECORD +0 -978
  699. {Nuitka_winsvc-2.5.6.dist-info → Nuitka_winsvc-2.6.5.dist-info}/LICENSE.txt +0 -0
  700. {Nuitka_winsvc-2.5.6.dist-info → Nuitka_winsvc-2.6.5.dist-info}/entry_points.txt +0 -0
  701. {Nuitka_winsvc-2.5.6.dist-info → Nuitka_winsvc-2.6.5.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,4 @@
1
- # Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
1
+ # Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
2
 
3
3
 
4
4
  """
@@ -150,7 +150,7 @@ def _getEvaluationContext():
150
150
  "android32": isAndroidBasedLinux() and sys.maxsize < 2**32,
151
151
  "android64": isAndroidBasedLinux() and sys.maxsize >= 2**64 - 1,
152
152
  "anaconda": isAnacondaPython(),
153
- "is_conda_package": isDistributionCondaPackage,
153
+ "is_conda_package": _isCondaPackage,
154
154
  "debian_python": isDebianPackagePython(),
155
155
  "nuitka_python": isNuitkaPython(),
156
156
  "standalone": isStandaloneMode(),
@@ -266,6 +266,12 @@ def _getDistributionNameFromPackageName(package_name):
266
266
  return getDistributionName(distribution)
267
267
 
268
268
 
269
+ def _isCondaPackage(package_name):
270
+ distribution_name = _getDistributionNameFromPackageName(package_name)
271
+
272
+ return isDistributionCondaPackage(distribution_name)
273
+
274
+
269
275
  def _getPackageVersion(distribution_name):
270
276
  if distribution_name not in _package_versions:
271
277
  try:
@@ -446,6 +452,21 @@ class NuitkaPluginBase(getMetaClassBase("Plugin", require_slots=False)):
446
452
  """Is this a detection plugin, i.e. one which is only there to inform."""
447
453
  return hasattr(cls, "detector_for")
448
454
 
455
+ @classmethod
456
+ def hasCategory(cls, category):
457
+ return category in cls.getCategories()
458
+
459
+ @classmethod
460
+ def getCategories(cls):
461
+ plugin_category = getattr(cls, "plugin_category", None)
462
+
463
+ if plugin_category is None:
464
+ result = ()
465
+ else:
466
+ result = plugin_category.split(",")
467
+
468
+ return OrderedSet(sorted(result))
469
+
449
470
  @classmethod
450
471
  def addPluginCommandLineOptions(cls, group):
451
472
  # Call group.add_option() here.
@@ -1280,7 +1301,8 @@ import sys
1280
1301
 
1281
1302
  try:
1282
1303
  %(setup_codes)s
1283
- except ImportError:
1304
+ except ImportError as e:
1305
+ sys.stderr.write("\n%%s" %% repr(e))
1284
1306
  sys.exit(38)
1285
1307
  try:
1286
1308
  %(query_codes)s
@@ -1302,6 +1324,11 @@ except Exception as e:
1302
1324
  feedback = check_output([sys.executable, "-c", cmd], env=env)
1303
1325
  except NuitkaCalledProcessError as e:
1304
1326
  if e.returncode == 38:
1327
+ self.warning(
1328
+ "Import error (not installed?) during compile time command execution: %s"
1329
+ % e.stderr.splitlines()[-1]
1330
+ )
1331
+
1305
1332
  return None
1306
1333
 
1307
1334
  if Options.is_debug:
@@ -1414,7 +1441,8 @@ except Exception as e:
1414
1441
  ):
1415
1442
  if self.isValueForEvaluation(expression):
1416
1443
  return self.evaluateExpression(
1417
- full_name=full_name,
1444
+ config_module_name=full_name,
1445
+ module_name=full_name,
1418
1446
  expression=expression,
1419
1447
  config_name=config_name,
1420
1448
  extra_context=extra_context,
@@ -1435,6 +1463,8 @@ except Exception as e:
1435
1463
  if declarations and self.evaluateCondition(
1436
1464
  full_name=full_name,
1437
1465
  condition=constant_config.get("when", "True"),
1466
+ allow_constants=False,
1467
+ allow_variables=False,
1438
1468
  ):
1439
1469
  for constant_name, constant_value in declarations.items():
1440
1470
  constants[constant_name] = self.evaluateExpressionOrConstant(
@@ -1471,6 +1501,8 @@ except Exception as e:
1471
1501
  if self.evaluateCondition(
1472
1502
  full_name=full_name,
1473
1503
  condition=variable_config.get("when", "True"),
1504
+ allow_constants=True,
1505
+ allow_variables=False,
1474
1506
  ):
1475
1507
  setup_codes.extend(
1476
1508
  "%s=%r" % (constant_name, constant_value)
@@ -1513,19 +1545,28 @@ except Exception as e:
1513
1545
  return _module_config_variables[full_name]
1514
1546
 
1515
1547
  def evaluateExpression(
1516
- self, full_name, expression, config_name, extra_context, single_value
1548
+ self,
1549
+ config_module_name,
1550
+ module_name,
1551
+ expression,
1552
+ config_name,
1553
+ extra_context,
1554
+ single_value,
1517
1555
  ):
1518
1556
  context = _makeEvaluationContext(
1519
- logger=self, full_name=full_name, config_name=config_name
1557
+ logger=self, full_name=config_module_name, config_name=config_name
1520
1558
  )
1521
1559
 
1522
1560
  def get_variable(variable_name):
1523
1561
  assert type(variable_name) is str, variable_name
1524
1562
 
1525
- result = self.getExpressionVariables(full_name=full_name)[variable_name]
1563
+ result = self.getExpressionVariables(full_name=config_module_name)[
1564
+ variable_name
1565
+ ]
1526
1566
 
1527
1567
  addModuleInfluencingVariable(
1528
- module_name=full_name,
1568
+ module_name=module_name,
1569
+ config_module_name=config_module_name,
1529
1570
  plugin_name=self.plugin_name,
1530
1571
  variable_name=variable_name,
1531
1572
  control_tags=context.used_tags,
@@ -1537,7 +1578,9 @@ except Exception as e:
1537
1578
  def get_constant(constant_name):
1538
1579
  assert type(constant_name) is str, constant_name
1539
1580
 
1540
- result = self.getExpressionConstants(full_name=full_name)[constant_name]
1581
+ result = self.getExpressionConstants(full_name=config_module_name)[
1582
+ constant_name
1583
+ ]
1541
1584
 
1542
1585
  # TODO: Record the constant value in report.
1543
1586
 
@@ -1547,13 +1590,13 @@ except Exception as e:
1547
1590
  context["get_constant"] = get_constant
1548
1591
 
1549
1592
  def get_parameter(parameter_name, default):
1550
- result = Options.getModuleParameter(full_name, parameter_name)
1593
+ result = Options.getModuleParameter(config_module_name, parameter_name)
1551
1594
 
1552
1595
  if result is None:
1553
1596
  result = default
1554
1597
 
1555
1598
  self.addModuleInfluencingParameter(
1556
- module_name=full_name,
1599
+ module_name=config_module_name,
1557
1600
  parameter_name=parameter_name,
1558
1601
  condition_tags_used=context.used_tags,
1559
1602
  result=result,
@@ -1582,16 +1625,16 @@ except Exception as e:
1582
1625
  if type(result) not in (str, unicode):
1583
1626
  if single_value:
1584
1627
  self._checkStrResult(
1585
- value=result, expression=expression, full_name=full_name
1628
+ value=result, expression=expression, full_name=config_module_name
1586
1629
  )
1587
1630
  else:
1588
1631
  self._checkSequenceResult(
1589
- value=result, expression=expression, full_name=full_name
1632
+ value=result, expression=expression, full_name=config_module_name
1590
1633
  )
1591
1634
 
1592
1635
  for v in result:
1593
1636
  self._checkStrResult(
1594
- value=v, expression=expression, full_name=full_name
1637
+ value=v, expression=expression, full_name=config_module_name
1595
1638
  )
1596
1639
 
1597
1640
  # Make it immutable in case it's a list.
@@ -1603,7 +1646,7 @@ except Exception as e:
1603
1646
  if type(value) not in (str, unicode):
1604
1647
  self.sysexit(
1605
1648
  """\
1606
- Error, expression '%s' for module '%s' did not evaluate to 'str', 'tuple[str]' or 'list[str]' result but '%s'"""
1649
+ Error, expression '%s' for module '%s' did not evaluate to 'str', 'tuple[str]' or 'list[str]' result, but '%s'"""
1607
1650
  % (expression, full_name, type(value))
1608
1651
  )
1609
1652
 
@@ -1615,7 +1658,9 @@ Error, expression '%s' for module '%s' did not evaluate to 'tuple[str]' or 'list
1615
1658
  % (expression, full_name)
1616
1659
  )
1617
1660
 
1618
- def evaluateCondition(self, full_name, condition):
1661
+ def evaluateCondition(
1662
+ self, full_name, condition, allow_constants=True, allow_variables=True
1663
+ ):
1619
1664
  # Note: Caching makes no sense yet, this should all be very fast and
1620
1665
  # cache themselves. TODO: Allow plugins to contribute their own control
1621
1666
  # tag values during creation and during certain actions.
@@ -1629,6 +1674,36 @@ Error, expression '%s' for module '%s' did not evaluate to 'tuple[str]' or 'list
1629
1674
  logger=self, full_name=full_name, config_name="'when' configuration"
1630
1675
  )
1631
1676
 
1677
+ def get_variable(variable_name):
1678
+ assert type(variable_name) is str, variable_name
1679
+
1680
+ result = self.getExpressionVariables(full_name=full_name)[variable_name]
1681
+
1682
+ addModuleInfluencingVariable(
1683
+ module_name=full_name,
1684
+ config_module_name=full_name,
1685
+ plugin_name=self.plugin_name,
1686
+ variable_name=variable_name,
1687
+ control_tags=context.used_tags,
1688
+ result=result,
1689
+ )
1690
+
1691
+ return result
1692
+
1693
+ def get_constant(constant_name):
1694
+ assert type(constant_name) is str, constant_name
1695
+
1696
+ result = self.getExpressionConstants(full_name=full_name)[constant_name]
1697
+
1698
+ # TODO: Record the constant value in report.
1699
+
1700
+ return result
1701
+
1702
+ if allow_constants:
1703
+ context["get_constant"] = get_constant
1704
+ if allow_variables:
1705
+ context["get_variable"] = get_variable
1706
+
1632
1707
  def get_parameter(parameter_name, default):
1633
1708
  result = Options.getModuleParameter(full_name, parameter_name)
1634
1709
 
nuitka/plugins/Plugins.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
1
+ # Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
2
 
3
3
 
4
4
  """
@@ -51,7 +51,7 @@ from .PluginBase import NuitkaPluginBase, control_tags
51
51
  # Maps plugin name to plugin instances.
52
52
  active_plugins = OrderedDict()
53
53
  plugin_name2plugin_classes = {}
54
- plugin_options = {}
54
+ plugin_options = OrderedDict()
55
55
  plugin_values = {}
56
56
  user_plugins = OrderedSet()
57
57
 
@@ -414,7 +414,7 @@ class Plugins(object):
414
414
  if not checkModuleName(v):
415
415
  plugin.sysexit(
416
416
  "Plugin '%s' returned an invalid module name, not %r (for module '%s')"
417
- % (plugin, v, module.getFullName())
417
+ % (plugin.plugin_name, v, module.getFullName())
418
418
  )
419
419
 
420
420
  yield ModuleName(v)
@@ -603,7 +603,7 @@ class Plugins(object):
603
603
  def onOnefileFinished(filename):
604
604
  """Let plugins post-process the onefile executable in onefile mode"""
605
605
  for plugin in getActivePlugins():
606
- plugin.onStandaloneDistributionFinished(filename)
606
+ plugin.onOnefileFinished(filename)
607
607
 
608
608
  @staticmethod
609
609
  def onBootstrapBinary(filename):
@@ -1680,17 +1680,37 @@ def loadPlugins():
1680
1680
  loadStandardPluginClasses()
1681
1681
 
1682
1682
 
1683
- def addStandardPluginCommandLineOptions(parser):
1683
+ # TODO: Use in more places.
1684
+ def _keyPluginForSort(plugin_class):
1685
+ return plugin_class.getCategories(), plugin_class.plugin_name
1686
+
1687
+
1688
+ def _keyPluginForSort2(item):
1689
+ _plugin_name, (plugin_class, _plugin_detector) = item
1690
+
1691
+ return _keyPluginForSort(plugin_class)
1692
+
1693
+
1694
+ def addStandardPluginCommandLineOptions(parser, plugin_help_mode):
1684
1695
  loadPlugins()
1685
1696
 
1686
1697
  for _plugin_name, (plugin_class, _plugin_detector) in sorted(
1687
- plugin_name2plugin_classes.items()
1698
+ plugin_name2plugin_classes.items(), key=_keyPluginForSort2
1688
1699
  ):
1689
1700
  if plugin_class.isAlwaysEnabled():
1690
- _addPluginCommandLineOptions(
1691
- parser=parser,
1692
- plugin_class=plugin_class,
1693
- )
1701
+ if not plugin_help_mode or not plugin_class.hasCategory("package-support"):
1702
+ _addPluginCommandLineOptions(
1703
+ parser=parser,
1704
+ plugin_class=plugin_class,
1705
+ plugin_help_mode=plugin_help_mode,
1706
+ )
1707
+ else:
1708
+ if plugin_help_mode:
1709
+ _addPluginCommandLineOptions(
1710
+ parser=parser,
1711
+ plugin_class=plugin_class,
1712
+ plugin_help_mode=plugin_help_mode,
1713
+ )
1694
1714
 
1695
1715
 
1696
1716
  def activatePlugins():
@@ -1772,11 +1792,27 @@ def activatePlugins():
1772
1792
  _addActivePlugin(plugin_detector, args=False)
1773
1793
 
1774
1794
 
1775
- def _addPluginCommandLineOptions(parser, plugin_class):
1795
+ def _addPluginCommandLineOptions(parser, plugin_class, plugin_help_mode):
1776
1796
  plugin_name = plugin_class.plugin_name
1777
1797
 
1778
1798
  if plugin_name not in plugin_options:
1779
- option_group = OptionGroup(parser, "Plugin options of '%s'" % plugin_name)
1799
+ plugin_display_name = repr(plugin_name)
1800
+
1801
+ if plugin_help_mode:
1802
+ # Ignore duplicate per design givers.
1803
+ if plugin_name in ("pyside2", "pyqt6", "pyqt5"):
1804
+ return
1805
+
1806
+ if plugin_name == "pyside6":
1807
+ plugin_display_name = (
1808
+ "'pyside6' (same for 'pyside2', 'pyqt6', 'pyqt5' plugins)"
1809
+ )
1810
+
1811
+ option_group = OptionGroup(
1812
+ parser,
1813
+ "Plugin options of %s (categories: %s)"
1814
+ % (plugin_display_name, ", ".join(plugin_class.getCategories())),
1815
+ )
1780
1816
  try:
1781
1817
  plugin_class.addPluginCommandLineOptions(option_group)
1782
1818
  except OptionConflictError as e:
@@ -1799,7 +1835,7 @@ def _addPluginCommandLineOptions(parser, plugin_class):
1799
1835
  plugin_options[plugin_name] = ()
1800
1836
 
1801
1837
 
1802
- def addPluginCommandLineOptions(parser, plugin_names):
1838
+ def addPluginCommandLineOptions(parser, plugin_names, plugin_help_mode):
1803
1839
  """Add option group for the plugin to the parser.
1804
1840
 
1805
1841
  Notes:
@@ -1813,12 +1849,19 @@ def addPluginCommandLineOptions(parser, plugin_names):
1813
1849
  """
1814
1850
  for plugin_name in plugin_names:
1815
1851
  plugin_class = getPluginClass(plugin_name)
1816
- _addPluginCommandLineOptions(parser=parser, plugin_class=plugin_class)
1852
+ _addPluginCommandLineOptions(
1853
+ parser=parser, plugin_class=plugin_class, plugin_help_mode=plugin_help_mode
1854
+ )
1817
1855
 
1818
1856
 
1819
1857
  def addUserPluginCommandLineOptions(parser, filename):
1820
1858
  plugin_class = loadUserPlugin(filename)
1821
- _addPluginCommandLineOptions(parser=parser, plugin_class=plugin_class)
1859
+ _addPluginCommandLineOptions(
1860
+ parser=parser,
1861
+ plugin_class=plugin_class,
1862
+ # List those user plugins always.
1863
+ plugin_help_mode=True,
1864
+ )
1822
1865
 
1823
1866
  user_plugins.add(plugin_class)
1824
1867
 
@@ -1,4 +1,4 @@
1
- # Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
1
+ # Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
2
 
3
3
 
4
4
  """
@@ -1,4 +1,4 @@
1
- # Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
1
+ # Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
2
 
3
3
 
4
4
  """ Dummy file to make this directory a package. """
@@ -1,4 +1,4 @@
1
- # Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
1
+ # Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
2
 
3
3
 
4
4
  """ Standard plug-in to avoid bloat at compile time.
@@ -31,6 +31,7 @@ class NuitkaPluginAntiBloat(NuitkaYamlPluginBase):
31
31
  plugin_desc = (
32
32
  "Patch stupid imports out of widely used library modules source codes."
33
33
  )
34
+ plugin_category = "core"
34
35
 
35
36
  @staticmethod
36
37
  def isAlwaysEnabled():
@@ -396,42 +397,69 @@ Error, cannot exec module '%s', context code '%s' due to: %s"""
396
397
 
397
398
  return dict(self.context_codes[context_code])
398
399
 
399
- def _onModuleSourceCode(self, module_name, anti_bloat_config, source_code):
400
- # Complex dealing with many cases, pylint: disable=too-many-branches
400
+ def _onModuleSourceCodeReplacement(
401
+ self,
402
+ config_module_name,
403
+ module_name,
404
+ source_code,
405
+ config_name,
406
+ extra_context,
407
+ replace_code,
408
+ replace_src,
409
+ ):
410
+ if replace_code:
411
+ replace_dst = self.evaluateExpression(
412
+ config_module_name=config_module_name,
413
+ module_name=module_name,
414
+ expression=replace_code,
415
+ config_name="module '%s' config '%s'"
416
+ % (config_module_name, config_name),
417
+ extra_context=extra_context,
418
+ single_value=True,
419
+ )
420
+ else:
421
+ replace_dst = ""
422
+
423
+ return source_code, source_code.replace(replace_src, replace_dst)
401
424
 
425
+ def _onModuleSourceCode(
426
+ self,
427
+ config_module_name,
428
+ module_name,
429
+ config_prefix,
430
+ anti_bloat_config,
431
+ source_code,
432
+ ):
433
+ # Complex dealing with many cases, pylint: disable=too-many-branches,too-many-locals
402
434
  description = anti_bloat_config.get("description", "description not given")
403
435
 
404
436
  # To allow detection if it did anything.
405
437
  change_count = 0
406
438
 
407
439
  for replace_src, replace_code in (
408
- anti_bloat_config.get("replacements") or {}
440
+ anti_bloat_config.get(config_prefix + "replacements") or {}
409
441
  ).items():
410
442
  # Avoid the eval, if the replace doesn't hit.
411
443
  if replace_src not in source_code:
412
444
  continue
413
445
 
414
- if replace_code:
415
- replace_dst = self.evaluateExpression(
416
- full_name=module_name,
417
- expression=replace_code,
418
- config_name="module '%s' config 'replacements'" % module_name,
419
- extra_context=self._getContextCode(
420
- module_name=module_name, anti_bloat_config=anti_bloat_config
421
- ),
422
- single_value=True,
423
- )
424
- else:
425
- replace_dst = ""
426
-
427
- old = source_code
428
- source_code = source_code.replace(replace_src, replace_dst)
446
+ old, source_code = self._onModuleSourceCodeReplacement(
447
+ config_module_name=config_module_name,
448
+ module_name=module_name,
449
+ source_code=source_code,
450
+ config_name=config_prefix + "replacements",
451
+ extra_context=self._getContextCode(
452
+ module_name=module_name, anti_bloat_config=anti_bloat_config
453
+ ),
454
+ replace_src=replace_src,
455
+ replace_code=replace_code,
456
+ )
429
457
 
430
458
  if old != source_code:
431
459
  change_count += 1
432
460
 
433
461
  for replace_src, replace_dst in (
434
- anti_bloat_config.get("replacements_plain") or {}
462
+ anti_bloat_config.get(config_prefix + "replacements_plain") or {}
435
463
  ).items():
436
464
  old = source_code
437
465
  source_code = source_code.replace(replace_src, replace_dst)
@@ -440,7 +468,7 @@ Error, cannot exec module '%s', context code '%s' due to: %s"""
440
468
  change_count += 1
441
469
 
442
470
  for replace_src, replace_dst in (
443
- anti_bloat_config.get("replacements_re") or {}
471
+ anti_bloat_config.get(config_prefix + "replacements_re") or {}
444
472
  ).items():
445
473
  old = source_code
446
474
  source_code = re.sub(replace_src, replace_dst, source_code, re.S)
@@ -450,31 +478,49 @@ Error, cannot exec module '%s', context code '%s' due to: %s"""
450
478
  elif isExperimental("display-anti-bloat-mismatches"):
451
479
  self.info("No match in %s no match %r" % (module_name, replace_src))
452
480
 
453
- append_code = anti_bloat_config.get("append_result", "")
454
- if type(append_code) in (tuple, list):
455
- append_code = "\n".join(append_code)
481
+ # These have no global variants.
482
+ if config_prefix == "":
483
+ append_code = anti_bloat_config.get("append_result", "")
484
+ if type(append_code) in (tuple, list):
485
+ append_code = "\n".join(append_code)
456
486
 
457
- if append_code:
458
- append_result = self.evaluateExpression(
459
- full_name=module_name,
460
- expression=append_code,
461
- config_name="module '%s' config 'append_code'" % module_name,
462
- extra_context=self._getContextCode(
463
- module_name=module_name, anti_bloat_config=anti_bloat_config
464
- ),
465
- single_value=True,
466
- )
487
+ if append_code:
488
+ append_result = self.evaluateExpression(
489
+ config_module_name=module_name,
490
+ module_name=module_name,
491
+ expression=append_code,
492
+ config_name="module '%s' config 'append_code'" % module_name,
493
+ extra_context=self._getContextCode(
494
+ module_name=module_name, anti_bloat_config=anti_bloat_config
495
+ ),
496
+ single_value=True,
497
+ )
467
498
 
468
- source_code += "\n" + append_result
469
- change_count += 1
499
+ source_code += "\n" + append_result
500
+ change_count += 1
501
+
502
+ append_plain = anti_bloat_config.get("append_plain", "")
503
+ if type(append_plain) in (tuple, list):
504
+ append_plain = "\n".join(append_plain)
470
505
 
471
- append_plain = anti_bloat_config.get("append_plain", "")
472
- if type(append_plain) in (tuple, list):
473
- append_plain = "\n".join(append_plain)
506
+ if append_plain:
507
+ source_code += "\n" + append_plain
508
+ change_count += 1
474
509
 
475
- if append_plain:
476
- source_code += "\n" + append_plain
477
- change_count += 1
510
+ module_code = anti_bloat_config.get("module_code", None)
511
+
512
+ if module_code is not None:
513
+ # Cannot be mixed.
514
+ assert not change_count
515
+
516
+ if self.show_changes:
517
+ self.info(
518
+ "Handling module '%s' with full replacement : %s."
519
+ % (module_name.asString(), description)
520
+ )
521
+
522
+ source_code = module_code
523
+ change_count = 1
478
524
 
479
525
  if change_count > 0 and self.show_changes:
480
526
  self.info(
@@ -482,31 +528,39 @@ Error, cannot exec module '%s', context code '%s' due to: %s"""
482
528
  % (module_name.asString(), change_count, description)
483
529
  )
484
530
 
485
- module_code = anti_bloat_config.get("module_code", None)
486
-
487
- if module_code is not None:
488
- assert not change_count
489
-
490
- if self.show_changes:
491
- self.info(
492
- "Handling module '%s' with full replacement : %s."
493
- % (module_name.asString(), description)
494
- )
495
-
496
- source_code = module_code
497
-
498
531
  return source_code
499
532
 
500
533
  def onModuleSourceCode(self, module_name, source_filename, source_code):
501
- for anti_bloat_config in self.config.get(module_name, section="anti-bloat"):
502
- if self.evaluateCondition(
503
- full_name=module_name, condition=anti_bloat_config.get("when", "True")
534
+ config_module_name = module_name
535
+ while True:
536
+ for anti_bloat_config in self.config.get(
537
+ config_module_name, section="anti-bloat"
504
538
  ):
505
- source_code = self._onModuleSourceCode(
506
- module_name=module_name,
507
- anti_bloat_config=anti_bloat_config,
508
- source_code=source_code,
509
- )
539
+ if self.evaluateCondition(
540
+ full_name=config_module_name,
541
+ condition=anti_bloat_config.get("when", "True"),
542
+ ):
543
+ if config_module_name == module_name:
544
+ source_code = self._onModuleSourceCode(
545
+ config_module_name=config_module_name,
546
+ module_name=module_name,
547
+ anti_bloat_config=anti_bloat_config,
548
+ config_prefix="",
549
+ source_code=source_code,
550
+ )
551
+
552
+ source_code = self._onModuleSourceCode(
553
+ config_module_name=config_module_name,
554
+ module_name=module_name,
555
+ anti_bloat_config=anti_bloat_config,
556
+ config_prefix="global_",
557
+ source_code=source_code,
558
+ )
559
+
560
+ config_module_name = config_module_name.getPackageName()
561
+
562
+ if not config_module_name:
563
+ break
510
564
 
511
565
  return source_code
512
566
 
@@ -525,7 +579,8 @@ Error, cannot exec module '%s', context code '%s' due to: %s"""
525
579
  return False
526
580
 
527
581
  replacement = self.evaluateExpression(
528
- full_name=module_name,
582
+ config_module_name=module_name,
583
+ module_name=module_name,
529
584
  expression=replace_code,
530
585
  config_name="module '%s' config 'change_function' of '%s'"
531
586
  % (module_name, function_name),
@@ -593,7 +648,8 @@ class %(class_name)s:
593
648
  return False
594
649
 
595
650
  replacement = self.evaluateExpression(
596
- full_name=module_name,
651
+ config_module_name=module_name,
652
+ module_name=module_name,
597
653
  expression=replace_code,
598
654
  config_name="module '%s' config 'change_class' of '%s'"
599
655
  % (module_name, class_name),
@@ -708,6 +764,22 @@ class %(class_name)s:
708
764
  ):
709
765
  self.no_follows[no_follow_pattern] = (config_of_module_name, description)
710
766
 
767
+ def _needsWarning(self, key):
768
+ if key in self.warnings_given:
769
+ return False
770
+
771
+ (
772
+ module_name,
773
+ using_module_name,
774
+ line_number,
775
+ ) = key
776
+
777
+ for parent_package in module_name.getParentPackageNames():
778
+ if (parent_package, using_module_name, line_number) in self.warnings_given:
779
+ return False
780
+
781
+ return True
782
+
711
783
  def onModuleRecursion(
712
784
  self,
713
785
  module_name,
@@ -775,7 +847,7 @@ class %(class_name)s:
775
847
  source_ref.getLineNumber(),
776
848
  )
777
849
 
778
- if key not in self.warnings_given:
850
+ if self._needsWarning(key):
779
851
  if handled_module_name == intended_module_name:
780
852
  handled_module_name_desc = "'%s'" % handled_module_name
781
853
  else: