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
nuitka/Options.py CHANGED
@@ -1,20 +1,6 @@
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
+
3
+
18
4
  """ Options module
19
5
 
20
6
  This exposes the choices made by the user. Defaults will be applied here, and
@@ -35,12 +21,21 @@ import sys
35
21
  from nuitka import Progress, Tracing
36
22
  from nuitka.containers.OrderedDicts import OrderedDict
37
23
  from nuitka.containers.OrderedSets import OrderedSet
38
- from nuitka.OptionParsing import parseOptions
24
+ from nuitka.importing.StandardLibrary import isStandardLibraryPath
25
+ from nuitka.OptionParsing import (
26
+ parseOptions,
27
+ run_time_variable_names,
28
+ runSpecialCommandsFromOptions,
29
+ )
39
30
  from nuitka.PythonFlavors import (
40
31
  getPythonFlavorName,
41
32
  isAnacondaPython,
42
33
  isApplePython,
34
+ isArchPackagePython,
35
+ isCPythonOfficialPackage,
43
36
  isDebianPackagePython,
37
+ isHomebrewPython,
38
+ isManyLinuxPython,
44
39
  isMSYS2MingwPython,
45
40
  isNuitkaPython,
46
41
  isPyenvPython,
@@ -48,14 +43,17 @@ from nuitka.PythonFlavors import (
48
43
  isUninstalledPython,
49
44
  )
50
45
  from nuitka.PythonVersions import (
46
+ getLaunchingSystemPrefixPath,
51
47
  getNotYetSupportedPythonVersions,
52
48
  getSupportedPythonVersions,
53
49
  isDebugPython,
50
+ isPythonWithGil,
54
51
  python_version,
55
52
  python_version_str,
56
53
  )
57
54
  from nuitka.utils.Execution import getExecutablePath
58
55
  from nuitka.utils.FileOperations import (
56
+ isLegalPath,
59
57
  isPathExecutable,
60
58
  openTextFile,
61
59
  resolveShellPatternToFilenames,
@@ -65,7 +63,9 @@ from nuitka.utils.StaticLibraries import getSystemStaticLibPythonPath
65
63
  from nuitka.utils.Utils import (
66
64
  getArchitecture,
67
65
  getCPUCoreCount,
66
+ getLaunchingNuitkaProcessEnvironmentValue,
68
67
  getLinuxDistribution,
68
+ getMacOSRelease,
69
69
  getOS,
70
70
  getWindowsRelease,
71
71
  hasOnefileSupportedOS,
@@ -92,71 +92,132 @@ is_report_missing = None
92
92
  is_verbose = None
93
93
 
94
94
 
95
+ def _convertOldStylePathSpecQuotes(value):
96
+ quote = None
97
+
98
+ result = ""
99
+ for c in value:
100
+ if c == "%":
101
+ if quote is None:
102
+ quote = "{"
103
+ result += quote
104
+ elif quote == "{":
105
+ result += "}"
106
+ quote = None
107
+ else:
108
+ result += c
109
+
110
+ return result
111
+
112
+
95
113
  def checkPathSpec(value, arg_name, allow_disable):
96
114
  # There are never enough checks here, pylint: disable=too-many-branches
115
+ old = value
116
+ value = _convertOldStylePathSpecQuotes(value)
117
+ if old != value:
118
+ Tracing.options_logger.warning(
119
+ "Adapted '%s' option value from legacy quoting style to '%s' -> '%s'"
120
+ % (arg_name, old, value)
121
+ )
97
122
 
98
- if "%NONE%" in value:
123
+ # This changes the '/' to '\' on Windows at least.
124
+ value = os.path.normpath(value)
125
+
126
+ if "\n" in value or "\r" in value:
127
+ Tracing.options_logger.sysexit(
128
+ "Using a new line in value '%s=%r' value is not allowed."
129
+ % (arg_name, value)
130
+ )
131
+
132
+ if "{NONE}" in value:
99
133
  if not allow_disable:
100
134
  Tracing.options_logger.sysexit(
101
- "Using value '%%NONE%%' in '%s=%s' value is not allowed."
135
+ "Using value '{NONE}' in '%s=%s' value is not allowed."
102
136
  % (arg_name, value)
103
137
  )
104
138
 
105
- if value != "%NONE%":
139
+ if value != "{NONE}":
106
140
  Tracing.options_logger.sysexit(
107
- "Using value '%%NONE%%' in '%s=%s' value does not allow anything else used too."
141
+ "Using value '{NONE}' in '%s=%s' value does not allow anything else used too."
108
142
  % (arg_name, value)
109
143
  )
110
144
 
111
- if "%NULL%" in value:
145
+ if "{NULL}" in value:
112
146
  if not allow_disable:
113
147
  Tracing.options_logger.sysexit(
114
- "Using value '%%NULL%%' in '%s=%s' value is not allowed."
148
+ "Using value '{NULL}' in '%s=%s' value is not allowed."
115
149
  % (arg_name, value)
116
150
  )
117
151
 
118
- if value != "%NULL%":
152
+ if value != "{NULL}":
119
153
  Tracing.options_logger.sysexit(
120
- "Using value '%%NULL%%' in '%s=%s' value does not allow anything else used too."
154
+ "Using value '{NULL}' in '%s=%s' value does not allow anything else used too."
121
155
  % (arg_name, value)
122
156
  )
123
157
 
124
- if "%COMPANY%" in value and not getCompanyName():
158
+ if "{COMPANY}" in value and not getCompanyName():
125
159
  Tracing.options_logger.sysexit(
126
- "Using value '%%COMPANY%%' in '%s=%s' value without being specified."
160
+ "Using value '{COMPANY}' in '%s=%s' value without being specified."
127
161
  % (arg_name, value)
128
162
  )
129
163
 
130
- if "%PRODUCT%" in value and not getProductName():
164
+ if "{PRODUCT}" in value and not getProductName():
131
165
  Tracing.options_logger.sysexit(
132
- "Using value '%%PRODUCT%%' in '%s=%s' value without being specified."
166
+ "Using value '{PRODUCT}' in '%s=%s' value without being specified."
133
167
  % (arg_name, value)
134
168
  )
135
169
 
136
- if "%VERSION%" in value and not (getFileVersion() or getProductVersion()):
170
+ if "{VERSION}" in value and not (getFileVersionTuple() or getProductVersionTuple()):
137
171
  Tracing.options_logger.sysexit(
138
- "Using value '%%VERSION%%' in '%s=%s' value without being specified."
172
+ "Using value '{VERSION}' in '%s=%s' value without being specified."
139
173
  % (arg_name, value)
140
174
  )
141
175
 
142
- if value.count("%") % 2 != 0:
143
- Tracing.options_logger.warning(
144
- """Unmatched '%%' is suspicious for '%s=%s' and may \
145
- not do what you want it to do."""
176
+ if value.count("{") != value.count("}"):
177
+ Tracing.options_logger.sysexit(
178
+ """Unmatched '{}' is wrong for '%s=%s' and may \
179
+ definitely not do what you want it to do."""
146
180
  % (arg_name, value)
147
181
  )
148
182
 
183
+ # Catch nested or illegal variable names.
184
+ var_name = None
185
+ for c in value:
186
+ if c in "{":
187
+ if var_name is not None:
188
+ Tracing.options_logger.sysexit(
189
+ """Nested '{' is wrong for '%s=%s'.""" % (arg_name, value)
190
+ )
191
+ var_name = ""
192
+ elif c == "}":
193
+ if var_name is None:
194
+ Tracing.options_logger.sysexit(
195
+ """Stray '}' is wrong for '%s=%s'.""" % (arg_name, value)
196
+ )
197
+
198
+ if var_name not in run_time_variable_names:
199
+ Tracing.onefile_logger.sysexit(
200
+ "Found unknown variable name '%s' in for '%s=%s'."
201
+ "" % (var_name, arg_name, value)
202
+ )
203
+
204
+ var_name = None
205
+ else:
206
+ if var_name is not None:
207
+ var_name += c
208
+
149
209
  for candidate in (
150
- "%PROGRAM%",
151
- "%PROGRAM_BASE%",
152
- "%CACHE_DIR%",
153
- "%HOME%",
154
- "%TEMP%",
210
+ "{PROGRAM}",
211
+ "{PROGRAM_BASE}",
212
+ "{CACHE_DIR}",
213
+ "{HOME}",
214
+ "{TEMP}",
155
215
  ):
156
216
  if candidate in value[1:]:
157
217
  Tracing.options_logger.sysexit(
158
- """Absolute run time path of '%s' can only be at the \
159
- start of '%s=%s', using it in the middle is not allowed."""
218
+ """\
219
+ Absolute run time paths of '%s' can only be at the start of \
220
+ '%s=%s', using it in the middle of it is not allowed."""
160
221
  % (candidate, arg_name, value)
161
222
  )
162
223
 
@@ -167,9 +228,27 @@ start of '%s=%s', using that alone is not allowed."""
167
228
  % (candidate, arg_name, value)
168
229
  )
169
230
 
231
+ if value.startswith(candidate):
232
+ if value[len(candidate)] != os.path.sep:
233
+ Tracing.options_logger.sysexit(
234
+ """Cannot use general system folder %s, without a path \
235
+ separator '%s=%s', just appending to these is not allowed, needs to be \
236
+ below them."""
237
+ % (candidate, arg_name, value)
238
+ )
239
+
240
+ is_legal, reason = isLegalPath(value)
241
+ if not is_legal:
242
+ Tracing.options_logger.sysexit(
243
+ """Cannot use illegal paths '%s=%s', due to %s."""
244
+ % (arg_name, value, reason)
245
+ )
246
+
247
+ return value
248
+
170
249
 
171
250
  def _checkOnefileTargetSpec():
172
- checkPathSpec(
251
+ options.onefile_tempdir_spec = checkPathSpec(
173
252
  options.onefile_tempdir_spec,
174
253
  arg_name="--onefile-tempdir-spec",
175
254
  allow_disable=False,
@@ -183,7 +262,7 @@ you cannot unpack the onefile payload into the same directory as the binary,
183
262
  as that would overwrite it and cause locking issues as well."""
184
263
  )
185
264
 
186
- if options.onefile_tempdir_spec.count("%") == 0:
265
+ if options.onefile_tempdir_spec.count("{") == 0:
187
266
  Tracing.options_logger.warning(
188
267
  """Not using any variables for '--onefile-tempdir-spec' should only be \
189
268
  done if your program absolutely needs to be in the same path always: '%s'"""
@@ -192,16 +271,20 @@ done if your program absolutely needs to be in the same path always: '%s'"""
192
271
 
193
272
  if os.path.isabs(options.onefile_tempdir_spec):
194
273
  Tracing.options_logger.warning(
195
- """Using an absolute path should be avoided unless you are targeting a \
196
- very well known environment: anchor with e.g. %%TEMP%%, %%CACHE_DIR%% is recommended: '%s'"""
274
+ """\
275
+ Using an absolute path should be avoided unless you are targeting a \
276
+ very well known environment: anchoring it with e.g. '{TEMP}', \
277
+ '{CACHE_DIR}' is recommended: You seemingly gave the value '%s'"""
197
278
  % options.onefile_tempdir_spec
198
279
  )
199
280
  elif not options.onefile_tempdir_spec.startswith(
200
- ("%TEMP%", "%HOME%", "%CACHE_DIR%")
281
+ ("{TEMP}", "{HOME}", "{CACHE_DIR}")
201
282
  ):
202
283
  Tracing.options_logger.warning(
203
- """Using an relative to the executable should be avoided unless you are targeting a \
204
- very well known environment, anchor with e.g. %%TEMP%%, %%CACHE_DIR%% is recommended: '%s'"""
284
+ """\
285
+ Using a relative to the onefile executable should be avoided \
286
+ unless you are targeting a very well known environment, anchoring \
287
+ it with e.g. '{TEMP}', '{CACHE_DIR}' is recommended: '%s'"""
205
288
  % options.onefile_tempdir_spec
206
289
  )
207
290
 
@@ -213,6 +296,8 @@ def _getVersionInformationValues():
213
296
  yield "Commercial: %s" % getCommercialVersion()
214
297
  yield "Python: %s" % sys.version.split("\n", 1)[0]
215
298
  yield "Flavor: %s" % getPythonFlavorName()
299
+ if python_version >= 0x3D0:
300
+ yield "GIL: %s" % ("yes" if isPythonWithGil() else "no")
216
301
  yield "Executable: %s" % sys.executable
217
302
  yield "OS: %s" % getOS()
218
303
  yield "Arch: %s" % getArchitecture()
@@ -232,6 +317,9 @@ def _getVersionInformationValues():
232
317
  if isWin32OrPosixWindows():
233
318
  yield "WindowsRelease: %s" % getWindowsRelease()
234
319
 
320
+ if isMacOS():
321
+ yield "macOSRelease: %s" % getMacOSRelease()
322
+
235
323
 
236
324
  def printVersionInformation():
237
325
  print("\n".join(_getVersionInformationValues()))
@@ -252,6 +340,38 @@ def printVersionInformation():
252
340
  )
253
341
 
254
342
 
343
+ def _warnOnefileOnlyOption(option_name):
344
+ if not options.is_onefile:
345
+ Tracing.options_logger.warning(
346
+ """\
347
+ Using onefile specific option '%s' has no effect \
348
+ when '--onefile' is not specified."""
349
+ % option_name
350
+ )
351
+
352
+
353
+ def _checkDataDirOptionValue(data_dir, option_name):
354
+ if "=" not in data_dir:
355
+ Tracing.options_logger.sysexit(
356
+ "Error, malformed '%s' value '%s' description, must specify a relative target path with '=' separating it."
357
+ % (option_name, data_dir)
358
+ )
359
+
360
+ src, dst = data_dir.split("=", 1)
361
+
362
+ if os.path.isabs(dst):
363
+ Tracing.options_logger.sysexit(
364
+ "Error, malformed '%s' value, must specify relative target path for data dir, not '%s' as in '%s'."
365
+ % (option_name, dst, data_dir)
366
+ )
367
+
368
+ if not os.path.isdir(src):
369
+ Tracing.options_logger.sysexit(
370
+ "Error, malformed '%s' value, must specify existing source data directory, not '%s' as in '%s'."
371
+ % (option_name, dst, data_dir)
372
+ )
373
+
374
+
255
375
  def parseArgs():
256
376
  """Parse the command line arguments
257
377
 
@@ -271,7 +391,7 @@ def parseArgs():
271
391
  Tracing.general.sysexit(
272
392
  """\
273
393
  Error, the Python from Windows app store is not supported.""",
274
- mnemonic="unsupported-python",
394
+ mnemonic="unsupported-windows-app-store-python",
275
395
  )
276
396
 
277
397
  is_nuitka_run, options, positional_args, extra_args = parseOptions(
@@ -296,7 +416,7 @@ Error, the Python from Windows app store is not supported.""",
296
416
  # TODO: Have dedicated option for it.
297
417
  is_report_missing = is_debug
298
418
 
299
- if options.quiet or int(os.environ.get("NUITKA_QUIET", "0")):
419
+ if options.quiet or int(os.getenv("NUITKA_QUIET", "0")):
300
420
  Tracing.setQuiet()
301
421
 
302
422
  def _quoteArg(arg):
@@ -310,17 +430,26 @@ Error, the Python from Windows app store is not supported.""",
310
430
  else:
311
431
  return arg
312
432
 
433
+ # This will not return if a non-compiling command is given.
434
+ runSpecialCommandsFromOptions(options)
435
+
313
436
  if not options.version:
314
437
  Tracing.options_logger.info(
315
438
  "Used command line options: %s"
316
439
  % " ".join(_quoteArg(arg) for arg in sys.argv[1:])
317
440
  )
318
441
 
319
- if os.environ.get("NUITKA_REEXECUTION") and not isAllowedToReexecute():
442
+ if (
443
+ getLaunchingNuitkaProcessEnvironmentValue("NUITKA_RE_EXECUTION")
444
+ and not isAllowedToReexecute()
445
+ ):
320
446
  Tracing.general.sysexit(
321
447
  "Error, not allowed to re-execute, but that has happened."
322
448
  )
323
449
 
450
+ # Force to persist this one early.
451
+ getLaunchingSystemPrefixPath()
452
+
324
453
  if options.progress_bar:
325
454
  Progress.enableProgressBar()
326
455
 
@@ -362,7 +491,35 @@ Error, the Python from Windows app store is not supported.""",
362
491
  if options.is_onefile:
363
492
  options.is_standalone = True
364
493
 
365
- # Standalone implies no_site build
494
+ # macOS bundle implies standalone build.
495
+ if shallCreateAppBundle():
496
+ options.is_standalone = True
497
+
498
+ if isMacOS():
499
+ macos_target_arch = getMacOSTargetArch()
500
+
501
+ if macos_target_arch == "universal":
502
+ Tracing.options_logger.sysexit(
503
+ "Cannot create universal macOS binaries (yet), please pick an arch and create two binaries."
504
+ )
505
+
506
+ if (options.macos_target_arch or "native") != "native":
507
+ from nuitka.utils.SharedLibraries import (
508
+ hasUniversalOrMatchingMacOSArchitecture,
509
+ )
510
+
511
+ if not hasUniversalOrMatchingMacOSArchitecture(
512
+ os.path.realpath(sys.executable)
513
+ ):
514
+ Tracing.options_logger.sysexit(
515
+ """\
516
+ Cannot cross compile to other arch, using non-universal Python binaries \
517
+ for macOS. Please install the "universal" Python package as offered on \
518
+ the Python download page."""
519
+ )
520
+
521
+ # Standalone implies no_site build unless overridden, therefore put it
522
+ # at start of flags, so "site" can override it.
366
523
  if options.is_standalone:
367
524
  options.python_flags.insert(0, "no_site")
368
525
 
@@ -370,12 +527,7 @@ Error, the Python from Windows app store is not supported.""",
370
527
  if options.onefile_tempdir_spec:
371
528
  _checkOnefileTargetSpec()
372
529
 
373
- if not options.is_onefile:
374
- Tracing.options_logger.warning(
375
- """\
376
- Using onefile specific option '--onefile-windows-splash-screen-image' has no effect \
377
- when '--onefile' is not specified."""
378
- )
530
+ _warnOnefileOnlyOption("--onefile-tempdir-spec")
379
531
 
380
532
  # Check onefile splash image
381
533
  if options.splash_screen_image:
@@ -385,34 +537,27 @@ when '--onefile' is not specified."""
385
537
  % options.splash_screen_image
386
538
  )
387
539
 
388
- if not options.is_onefile:
389
- Tracing.options_logger.warning(
390
- """\
391
- Using onefile specific option '--onefile-windows-splash-screen-image' has no effect \
392
- when '--onefile' is not specified."""
393
- )
540
+ _warnOnefileOnlyOption("--onefile-windows-splash-screen-image")
394
541
 
395
542
  if options.onefile_child_grace_time is not None:
396
543
  if not options.onefile_child_grace_time.isdigit():
397
544
  Tracing.options_logger.sysexit(
398
545
  """\
399
- Error, value given for '--onefile-child-grace-time' must be integer."""
546
+ Error, the value given for '--onefile-child-grace-time' must be integer."""
400
547
  )
401
548
 
402
- if not options.is_onefile:
403
- Tracing.options_logger.warning(
404
- """\
405
- Using onefile specific option '--onefile-windows-splash-screen-image' has no effect \
406
- when '--onefile-child-grace-time' is not specified."""
407
- )
549
+ _warnOnefileOnlyOption("--onefile-child-grace-time")
550
+
551
+ if getShallIncludeExternallyDataFilePatterns():
552
+ _warnOnefileOnlyOption("--include-onefile-external-data")
408
553
 
409
554
  if options.force_stdout_spec:
410
- checkPathSpec(
555
+ options.force_stdout_spec = checkPathSpec(
411
556
  options.force_stdout_spec, "--force-stdout-spec", allow_disable=True
412
557
  )
413
558
 
414
559
  if options.force_stderr_spec:
415
- checkPathSpec(
560
+ options.force_stderr_spec = checkPathSpec(
416
561
  options.force_stderr_spec, "--force-stderr-spec", allow_disable=True
417
562
  )
418
563
 
@@ -504,18 +649,18 @@ it before using it: '%s' (from --output-filename='%s')."""
504
649
  )
505
650
 
506
651
  if isLinux():
507
- if len(getIconPaths()) > 1:
652
+ if len(getLinuxIconPaths()) > 1:
508
653
  Tracing.options_logger.sysexit(
509
654
  "Error, can only use one icon file on Linux."
510
655
  )
511
656
 
512
657
  if isMacOS():
513
- if len(getIconPaths()) > 1:
658
+ if len(getMacOSIconPaths()) > 1:
514
659
  Tracing.options_logger.sysexit(
515
660
  "Error, can only use one icon file on macOS."
516
661
  )
517
662
 
518
- for icon_path in getIconPaths():
663
+ for icon_path in getWindowsIconPaths():
519
664
  if "#" in icon_path and isWin32Windows():
520
665
  icon_path, icon_index = icon_path.rsplit("#", 1)
521
666
 
@@ -525,13 +670,6 @@ it before using it: '%s' (from --output-filename='%s')."""
525
670
  % (icon_path + "#" + icon_index)
526
671
  )
527
672
 
528
- if not os.path.exists(icon_path):
529
- Tracing.options_logger.sysexit(
530
- "Error, icon path '%s' does not exist." % icon_path
531
- )
532
-
533
- checkIconUsage(logger=Tracing.options_logger, icon_path=icon_path)
534
-
535
673
  if getWindowsIconExecutablePath():
536
674
  Tracing.options_logger.sysexit(
537
675
  "Error, can only use icons from template executable or from icon files, but not both."
@@ -543,13 +681,8 @@ it before using it: '%s' (from --output-filename='%s')."""
543
681
  "Error, icon path executable '%s' does not exist." % icon_exe_path
544
682
  )
545
683
 
546
- if isMacOS() and not shallCreateAppBundle() and shallDisableConsoleWindow():
547
- Tracing.options_logger.sysexit(
548
- "Error, cannot disable console unless also using '--macos-create-app-bundle'."
549
- )
550
-
551
684
  try:
552
- file_version = getFileVersion()
685
+ file_version = getFileVersionTuple()
553
686
  # Catch all the things, don't want any interface, pylint: disable=broad-except
554
687
  except Exception:
555
688
  Tracing.options_logger.sysexit(
@@ -557,7 +690,7 @@ it before using it: '%s' (from --output-filename='%s')."""
557
690
  )
558
691
 
559
692
  try:
560
- product_version = getProductVersion()
693
+ product_version = getProductVersionTuple()
561
694
  # Catch all the things, don't want any interface, pylint: disable=broad-except
562
695
  except Exception:
563
696
  Tracing.options_logger.sysexit(
@@ -639,18 +772,20 @@ it before using it: '%s' (from --output-filename='%s')."""
639
772
 
640
773
  if data_file_desc.count("=") == 1:
641
774
  src, dst = data_file_desc.split("=", 1)
642
-
643
- filenames = resolveShellPatternToFilenames(src)
644
-
645
- if len(filenames) > 1 and not dst.endswith(("/", os.path.sep)):
646
- Tracing.options_logger.sysexit(
647
- "Error, pattern '%s' matches more than one file, but target has no trailing slash, not a directory."
648
- % src
649
- )
775
+ src = os.path.expanduser(src)
776
+ src_pattern = src
650
777
  else:
651
778
  src, dst, pattern = data_file_desc.split("=", 2)
779
+ src = os.path.expanduser(src)
780
+ src_pattern = os.path.join(src, pattern)
652
781
 
653
- filenames = resolveShellPatternToFilenames(os.path.join(src, pattern))
782
+ filenames = resolveShellPatternToFilenames(src_pattern)
783
+
784
+ if len(filenames) > 1 and not dst.endswith(("/", os.path.sep)):
785
+ Tracing.options_logger.sysexit(
786
+ "Error, pattern '%s' matches more than one file, but target has no trailing slash, not a directory."
787
+ % src
788
+ )
654
789
 
655
790
  if not filenames:
656
791
  Tracing.options_logger.sysexit(
@@ -664,29 +799,31 @@ it before using it: '%s' (from --output-filename='%s')."""
664
799
  )
665
800
 
666
801
  for data_dir in options.data_dirs:
667
- if "=" not in data_dir:
668
- Tracing.options_logger.sysexit(
669
- "Error, malformed data dir description, must specify relative target path with '=' separating it."
670
- )
802
+ _checkDataDirOptionValue(data_dir=data_dir, option_name="--include-data-dir")
671
803
 
672
- src, dst = data_dir.split("=", 1)
804
+ for data_dir in options.raw_dirs:
805
+ _checkDataDirOptionValue(data_dir=data_dir, option_name="--include-raw-dir")
673
806
 
674
- if os.path.isabs(dst):
807
+ for pattern in getShallFollowExtraFilePatterns():
808
+ if os.path.isdir(pattern):
675
809
  Tracing.options_logger.sysexit(
676
- "Error, must specify relative target path for data dir, not '%s' as in '%s'."
677
- % (dst, data_dir)
810
+ "Error, pattern '%s' given to '--include-plugin-files' cannot be a directory name."
811
+ % pattern
678
812
  )
679
813
 
680
- if not os.path.isdir(src):
814
+ for directory_name in getShallFollowExtra():
815
+ if not os.path.isdir(directory_name):
681
816
  Tracing.options_logger.sysexit(
682
- "Error, must specify existing source data directory, not '%s' as in '%s'."
683
- % (dst, data_dir)
817
+ "Error, value '%s' given to '--include-plugin-directory' must be a directory name."
818
+ % directory_name
684
819
  )
685
820
 
686
- for pattern in getShallFollowExtraFilePatterns():
687
- if os.path.isdir(pattern):
821
+ if isStandardLibraryPath(directory_name):
688
822
  Tracing.options_logger.sysexit(
689
- "Error, pattern '%s' given to '--include-plugin-files' cannot be a directory name."
823
+ """\
824
+ Error, directory '%s' given to '--include-plugin-directory' must not be a \
825
+ standard library path. Use '--include-module' or '--include-package' \
826
+ options instead."""
690
827
  % pattern
691
828
  )
692
829
 
@@ -717,11 +854,14 @@ download. With that, your program will work on macOS 10.9 or higher."""
717
854
  "Error, Apple Python 2.7 from macOS is not usable as per Apple decision, use e.g. CPython 2.7 instead."
718
855
  )
719
856
 
720
- if isStandaloneMode() and isLinux() and getExecutablePath("patchelf") is None:
721
- Tracing.options_logger.sysexit(
722
- "Error, standalone mode on Linux requires 'patchelf' to be installed. Use 'apt/dnf/yum install patchelf' first."
857
+ if isStandaloneMode() and isLinux():
858
+ # Cyclic dependency
859
+ from nuitka.utils.SharedLibraries import (
860
+ checkPatchElfPresenceAndUsability,
723
861
  )
724
862
 
863
+ checkPatchElfPresenceAndUsability(Tracing.options_logger)
864
+
725
865
  pgo_executable = getPgoExecutable()
726
866
  if pgo_executable and not isPathExecutable(pgo_executable):
727
867
  Tracing.options_logger.sysexit(
@@ -740,6 +880,14 @@ Error, onefile mode on Termux requires 'termux-elf-cleaner' to be installed, \
740
880
  use 'pkg install termux-elf-cleaner' to use it."""
741
881
  )
742
882
 
883
+ for user_yaml_filename in getUserProvidedYamlFiles():
884
+ if not os.path.exists(user_yaml_filename):
885
+ Tracing.options_logger.sysexit(
886
+ """\
887
+ Error, cannot find user provider yaml file '%s'."""
888
+ % user_yaml_filename
889
+ )
890
+
743
891
  # This triggers checks inside that code
744
892
  getCompilationReportUserData()
745
893
 
@@ -752,6 +900,20 @@ def commentArgs():
752
900
  """
753
901
  # A ton of cases to consider, pylint: disable=too-many-branches,too-many-statements
754
902
 
903
+ # Check files to exist or be suitable first before giving other warnings.
904
+ for filename in getMainEntryPointFilenames():
905
+ if not os.path.exists(filename):
906
+ Tracing.general.sysexit("Error, file '%s' is not found." % filename)
907
+
908
+ if (
909
+ shallMakeModule()
910
+ and os.path.normcase(os.path.basename(filename)) == "__init__.py"
911
+ ):
912
+ Tracing.general.sysexit(
913
+ """\
914
+ Error, to compile a package, specify its directory but, not the '__init__.py'."""
915
+ )
916
+
755
917
  # Inform the user about potential issues with the running version. e.g. unsupported
756
918
  # version.
757
919
  if python_version_str not in getSupportedPythonVersions():
@@ -770,8 +932,28 @@ version '%s' instead or newer Nuitka."""
770
932
  )
771
933
  )
772
934
 
935
+ # spell-checker: ignore releaselevel
936
+ if sys.version_info.releaselevel not in ("final", "candidate"):
937
+ if python_version_str not in getNotYetSupportedPythonVersions():
938
+ Tracing.general.sysexit(
939
+ """\
940
+ Non-final versions '%s' '%s' are not supported by Nuitka, use the \
941
+ final version instead."""
942
+ % (python_version_str, sys.version_info.releaselevel)
943
+ )
944
+
773
945
  if python_version_str in getNotYetSupportedPythonVersions():
774
- if not isExperimental("python" + python_version_str):
946
+ if sys.version_info.releaselevel != "final" and not isExperimental(
947
+ "python" + python_version_str
948
+ ):
949
+ Tracing.general.warning(
950
+ """\
951
+ The Python version '%s' '%s' is only experimentally supported by \
952
+ and recommended only for use in Nuitka development and testing."""
953
+ % (python_version_str, sys.version_info.releaselevel)
954
+ )
955
+
956
+ elif not isExperimental("python" + python_version_str):
775
957
  Tracing.general.sysexit(
776
958
  """\
777
959
  The Python version '%s' is not supported by Nuitka '%s', but an upcoming \
@@ -783,6 +965,13 @@ release will add it. In the mean time use '%s' instead."""
783
965
  )
784
966
  )
785
967
 
968
+ if not isPythonWithGil():
969
+ Tracing.general.warning(
970
+ """\
971
+ The Python without GIL is only experimentally supported by \
972
+ and recommended only for use in Nuitka development and testing."""
973
+ )
974
+
786
975
  default_reference_mode = (
787
976
  "runtime" if shallMakeModule() or isStandaloneMode() else "original"
788
977
  )
@@ -848,6 +1037,14 @@ release will add it. In the mean time use '%s' instead."""
848
1037
  % getMsvcVersion()
849
1038
  )
850
1039
 
1040
+ try:
1041
+ getJobLimit()
1042
+ except ValueError:
1043
+ Tracing.options_logger.sysexit(
1044
+ "For '--jobs' value, use integer values only, not, but not '%s'."
1045
+ % options.jobs
1046
+ )
1047
+
851
1048
  if isOnefileMode():
852
1049
  standalone_mode = "onefile"
853
1050
  elif isStandaloneMode():
@@ -893,7 +1090,8 @@ to work. You need to instead selectively add them with \
893
1090
  )
894
1091
 
895
1092
  if (
896
- not standalone_mode
1093
+ not shallCreatePythonPgoInput()
1094
+ and not standalone_mode
897
1095
  and options.follow_all is None
898
1096
  and not options.follow_modules
899
1097
  and not options.follow_stdlib
@@ -921,7 +1119,7 @@ make sure that is intended."""
921
1119
  options.static_libpython = "no"
922
1120
 
923
1121
  if (
924
- not isPgoMode()
1122
+ not isCPgoMode()
925
1123
  and not isPythonPgoMode()
926
1124
  and (getPgoArgs() or getPgoExecutable())
927
1125
  ):
@@ -929,15 +1127,19 @@ make sure that is intended."""
929
1127
  "Providing PGO arguments without enabling PGO mode has no effect."
930
1128
  )
931
1129
 
932
- if isPgoMode():
1130
+ if isCPgoMode():
933
1131
  if isStandaloneMode():
934
1132
  Tracing.optimization_logger.warning(
935
- "Using PGO with standalone/onefile mode is not currently working. Expect errors."
1133
+ """\
1134
+ Using C level PGO with standalone/onefile mode is not \
1135
+ currently working. Expect errors."""
936
1136
  )
937
1137
 
938
1138
  if shallMakeModule():
939
1139
  Tracing.optimization_logger.warning(
940
- "Using PGO with module mode is not currently working. Expect errors."
1140
+ """\
1141
+ Using C level PGO with module mode is not currently \
1142
+ working. Expect errors."""
941
1143
  )
942
1144
 
943
1145
  if (
@@ -945,6 +1147,7 @@ make sure that is intended."""
945
1147
  and not shallMakeModule()
946
1148
  and not shallUseStaticLibPython()
947
1149
  and getSystemStaticLibPythonPath() is not None
1150
+ and not shallUsePythonDebug()
948
1151
  ):
949
1152
  Tracing.options_logger.info(
950
1153
  """Detected static libpython to exist, consider '--static-libpython=yes' for better performance, \
@@ -957,11 +1160,6 @@ but errors may happen."""
957
1160
  "The '--debugger' option has no effect outside of '--debug' without '--run' option."
958
1161
  )
959
1162
 
960
- if not shallClearPythonPathEnvironment():
961
- Tracing.options_logger.warning(
962
- "The '--execute-with-pythonpath' option has no effect without '--run' option."
963
- )
964
-
965
1163
  # Check if the fallback is used, except for Python2 on Windows, where we cannot
966
1164
  # have it.
967
1165
  if hasattr(OrderedSet, "is_fallback") and not (
@@ -983,15 +1181,10 @@ and not with the non-debug version.
983
1181
  """
984
1182
  )
985
1183
 
986
- if (
987
- isMacOS()
988
- and shallCreateAppBundle()
989
- and shallDisableConsoleWindow()
990
- and not getIconPaths()
991
- ):
1184
+ if isMacOS() and shallCreateAppBundle() and not getMacOSIconPaths():
992
1185
  Tracing.general.warning(
993
1186
  """\
994
- For GUI applications, you ought to specify an icon with '--macos-app-icon'.", \
1187
+ For application bundles, you ought to specify an icon with '--macos-app-icon'.", \
995
1188
  otherwise a dock icon may not be present."""
996
1189
  )
997
1190
 
@@ -1007,23 +1200,10 @@ notarization capable signature, the default identify 'ad-hoc' is not going \
1007
1200
  to work."""
1008
1201
  )
1009
1202
 
1010
- for filename in getMainEntryPointFilenames():
1011
- if not os.path.exists(filename):
1012
- Tracing.general.sysexit("Error, file '%s' is not found." % filename)
1013
-
1014
- if (
1015
- shallMakeModule()
1016
- and os.path.normcase(os.path.basename(filename)) == "__init__.py"
1017
- ):
1018
- Tracing.general.sysexit(
1019
- """\
1020
- Error, to compile a package, specify its directory but, not the '__init__.py'."""
1021
- )
1022
-
1023
1203
  if (
1024
1204
  isWin32Windows()
1025
1205
  and 0x340 <= python_version < 0x380
1026
- and not shallDisableConsoleWindow()
1206
+ and getWindowsConsoleMode() != "disable"
1027
1207
  ):
1028
1208
  Tracing.general.warning(
1029
1209
  """\
@@ -1036,6 +1216,49 @@ console window for deployment.
1036
1216
  mnemonic="old-python-windows-console",
1037
1217
  )
1038
1218
 
1219
+ if shallMakeModule() and (getForcedStderrPath() or getForcedStdoutPath()):
1220
+ Tracing.general.warning(
1221
+ """\
1222
+ Extension modules do not control process outputs, therefore the \
1223
+ options '--force-stdout-spec' and '--force-stderr-spec' have no \
1224
+ impact and should not be specified."""
1225
+ )
1226
+
1227
+ if shallMakeModule() and options.console_mode is not None:
1228
+ Tracing.general.warning(
1229
+ """\
1230
+ Extension modules are not binaries, and therefore the option \
1231
+ '--windows-console-mode' does not have an impact and should \
1232
+ not be specified."""
1233
+ )
1234
+
1235
+ if options.disable_console in (True, False):
1236
+ if isWin32Windows():
1237
+ Tracing.general.warning(
1238
+ """\
1239
+ The old console option '%s' should not be given anymore, use '%s' \
1240
+ instead. It also has the extra mode 'attach' to consider."""
1241
+ % (
1242
+ (
1243
+ "--disable-console"
1244
+ if options.disable_console
1245
+ else "--enable-console"
1246
+ ),
1247
+ "--windows-console-mode=%s"
1248
+ % ("disable" if options.disable_console else "force"),
1249
+ )
1250
+ )
1251
+ else:
1252
+ Tracing.general.warning(
1253
+ """The old console option '%s' should not be given anymore, and doesn't
1254
+ have any effect anymore on non-Windows."""
1255
+ % (
1256
+ "--disable-console"
1257
+ if options.disable_console
1258
+ else "--enable-console"
1259
+ )
1260
+ )
1261
+
1039
1262
 
1040
1263
  def isVerbose():
1041
1264
  """:returns: bool derived from ``--verbose``"""
@@ -1049,7 +1272,7 @@ def shallTraceExecution():
1049
1272
 
1050
1273
  def shallExecuteImmediately():
1051
1274
  """:returns: bool derived from ``--run``"""
1052
- return options.immediate_execution
1275
+ return options is not None and options.immediate_execution
1053
1276
 
1054
1277
 
1055
1278
  def shallRunInDebugger():
@@ -1120,6 +1343,9 @@ def shallFollowNoImports():
1120
1343
 
1121
1344
  def shallFollowAllImports():
1122
1345
  """:returns: bool derived from ``--follow-imports``"""
1346
+ if shallCreatePythonPgoInput() and options.is_standalone:
1347
+ return True
1348
+
1123
1349
  return options.is_standalone or options.follow_all is True
1124
1350
 
1125
1351
 
@@ -1133,7 +1359,7 @@ def getShallFollowInNoCase():
1133
1359
 
1134
1360
 
1135
1361
  def getShallFollowModules():
1136
- """*list*, items of ``--follow-import-to=``"""
1362
+ """*list*, items of ``--follow-import-to=`` amended with what ``--include-module`` and ``--include-package`` got"""
1137
1363
  return sum(
1138
1364
  [
1139
1365
  _splitShellPattern(x)
@@ -1198,11 +1424,15 @@ def getShallIncludeDataFiles():
1198
1424
  src, dest = data_file_desc.split("=", 1)
1199
1425
 
1200
1426
  for pattern in _splitShellPattern(src):
1427
+ pattern = os.path.expanduser(pattern)
1428
+
1201
1429
  yield pattern, None, dest, data_file_desc
1202
1430
  else:
1203
1431
  src, dest, pattern = data_file_desc.split("=", 2)
1204
1432
 
1205
1433
  for pattern in _splitShellPattern(pattern):
1434
+ pattern = os.path.expanduser(pattern)
1435
+
1206
1436
  yield os.path.join(src, pattern), src, dest, data_file_desc
1207
1437
 
1208
1438
 
@@ -1220,6 +1450,12 @@ def getShallNotIncludeDataFilePatterns():
1220
1450
  return options.data_files_inhibited
1221
1451
 
1222
1452
 
1453
+ def getShallIncludeExternallyDataFilePatterns():
1454
+ """*list*, items of ``--include-onefile-external-data=``"""
1455
+
1456
+ return options.data_files_external
1457
+
1458
+
1223
1459
  def getShallNotIncludeDllFilePatterns():
1224
1460
  """*list*, items of ``--noinclude-dlls=``"""
1225
1461
 
@@ -1315,9 +1551,15 @@ def getMainEntryPointFilenames():
1315
1551
  if len(options.mains) == 1:
1316
1552
  assert not positional_args
1317
1553
 
1318
- return tuple(options.mains)
1554
+ result = tuple(options.mains)
1319
1555
  else:
1320
- return [positional_args[0]]
1556
+ result = (positional_args[0],)
1557
+
1558
+ return tuple(os.path.normpath(r).rstrip(os.path.sep) for r in result)
1559
+
1560
+
1561
+ def isMultidistMode():
1562
+ return options is not None and options.mains and len(options.mains) > 1
1321
1563
 
1322
1564
 
1323
1565
  def shallOptimizeStringExec():
@@ -1325,11 +1567,6 @@ def shallOptimizeStringExec():
1325
1567
  return False
1326
1568
 
1327
1569
 
1328
- def shallClearPythonPathEnvironment():
1329
- """*bool* = **not** ``--execute-with-pythonpath``"""
1330
- return not options.keep_pythonpath
1331
-
1332
-
1333
1570
  _shall_use_static_lib_python = None
1334
1571
 
1335
1572
 
@@ -1342,7 +1579,10 @@ def _shallUseStaticLibPython():
1342
1579
  if options.static_libpython == "auto":
1343
1580
  # Nuitka-Python is good to to static linking.
1344
1581
  if isNuitkaPython():
1345
- return True, "Nuitka-Python is broken."
1582
+ return True, "Nuitka-Python is unexpectedly broken."
1583
+
1584
+ if isHomebrewPython():
1585
+ return True, "Homebrew Python is unexpectedly broken."
1346
1586
 
1347
1587
  # Debian packages with are usable if the OS is new enough
1348
1588
  from nuitka.utils.StaticLibraries import (
@@ -1364,7 +1604,7 @@ def _shallUseStaticLibPython():
1364
1604
 
1365
1605
  # For Anaconda default to trying static lib python library, which
1366
1606
  # normally is just not available or if it is even unusable.
1367
- if isAnacondaPython() and not isMacOS() and not isWin32Windows():
1607
+ if isAnacondaPython() and not isWin32Windows():
1368
1608
  return (
1369
1609
  True,
1370
1610
  "Nuitka on Anaconda needs package for static libpython installed. Execute 'conda install libpython-static'.",
@@ -1373,6 +1613,21 @@ def _shallUseStaticLibPython():
1373
1613
  if isPyenvPython():
1374
1614
  return True, "Nuitka on pyenv should not use '--enable-shared'."
1375
1615
 
1616
+ if isManyLinuxPython():
1617
+ return (
1618
+ True,
1619
+ """\
1620
+ Nuitka on 'manylinux' has no shared libraries. Use container with \
1621
+ the command 'RUN cd /opt/_internal && tar xf static-libs-for-embedding-only.tar.xz' \
1622
+ added to provide the static link library.""",
1623
+ )
1624
+
1625
+ if isMacOS() and isCPythonOfficialPackage():
1626
+ return True, None
1627
+
1628
+ if isArchPackagePython():
1629
+ return True, None
1630
+
1376
1631
  return options.static_libpython == "yes", None
1377
1632
 
1378
1633
 
@@ -1438,17 +1693,25 @@ def isShowScons():
1438
1693
 
1439
1694
  def getJobLimit():
1440
1695
  """*int*, value of ``--jobs`` / "-j" or number of CPU kernels"""
1441
- if options.jobs is None:
1442
- if isLowMemory():
1443
- return 1
1444
- else:
1445
- return getCPUCoreCount()
1696
+ jobs = options.jobs
1697
+
1698
+ # Low memory has a default of 1.
1699
+ if jobs is None and isLowMemory():
1700
+ return 1
1701
+
1702
+ if jobs is None:
1703
+ result = getCPUCoreCount()
1704
+ else:
1705
+ result = int(jobs)
1706
+
1707
+ if result <= 0:
1708
+ result = max(1, getCPUCoreCount() + result)
1446
1709
 
1447
- return int(options.jobs)
1710
+ return result
1448
1711
 
1449
1712
 
1450
1713
  def getLtoMode():
1451
- """:returns: bool derived from ``--lto`` or ``--pgo``"""
1714
+ """:returns: bool derived from ``--lto``"""
1452
1715
  return options.lto
1453
1716
 
1454
1717
 
@@ -1507,16 +1770,18 @@ def shallDisableBytecodeCacheUsage():
1507
1770
  return shallDisableCacheUsage("bytecode")
1508
1771
 
1509
1772
 
1510
- def shallDisableConsoleWindow():
1511
- """:returns: None (not given), False, or True derived from ``--disable-console or ``--enable-console``"""
1512
- return options.disable_console
1513
-
1773
+ def shallDisableCompressionCacheUsage():
1774
+ """:returns: bool derived from ``--disable-cache=compression``"""
1775
+ return shallDisableCacheUsage("compression")
1514
1776
 
1515
- def mayDisableConsoleWindow():
1516
- """:returns: bool derived from platform support of disabling the console,"""
1517
1777
 
1518
- # TODO: What about MSYS2?
1519
- return isWin32Windows() or isMacOS()
1778
+ def getWindowsConsoleMode():
1779
+ """:returns: str from ``--windows-console-mode``"""
1780
+ if options.disable_console is True:
1781
+ return "disable"
1782
+ if options.disable_console is False:
1783
+ return "force"
1784
+ return options.console_mode or "force"
1520
1785
 
1521
1786
 
1522
1787
  def _isFullCompat():
@@ -1577,10 +1842,6 @@ def enableExperimental(indication):
1577
1842
  _experimental.add(indication)
1578
1843
 
1579
1844
 
1580
- def disableExperimental(indication):
1581
- _experimental.remove(indication)
1582
-
1583
-
1584
1845
  def getExperimentalIndications():
1585
1846
  """*tuple*, items of ``--experimental=``"""
1586
1847
  if hasattr(options, "experimental"):
@@ -1589,6 +1850,23 @@ def getExperimentalIndications():
1589
1850
  return ()
1590
1851
 
1591
1852
 
1853
+ def getDebugModeIndications():
1854
+ result = []
1855
+
1856
+ for debug_option_value_name in ("debug_immortal",):
1857
+ if debug_option_value_name == "debug_immortal" and python_version < 0x3C0:
1858
+ continue
1859
+
1860
+ if _isDebug():
1861
+ if getattr(options, debug_option_value_name) is not False:
1862
+ result.append(debug_option_value_name)
1863
+ else:
1864
+ if getattr(options, debug_option_value_name) is True:
1865
+ result.append(debug_option_value_name)
1866
+
1867
+ return result
1868
+
1869
+
1592
1870
  def shallExplainImports():
1593
1871
  """:returns: bool derived from ``--explain-imports``"""
1594
1872
  return options is not None and options.explain_imports
@@ -1596,12 +1874,18 @@ def shallExplainImports():
1596
1874
 
1597
1875
  def isStandaloneMode():
1598
1876
  """:returns: bool derived from ``--standalone``"""
1599
- return options.is_standalone
1877
+ if shallCreatePythonPgoInput():
1878
+ return False
1879
+
1880
+ return bool(options.is_standalone or options.list_package_dlls)
1600
1881
 
1601
1882
 
1602
1883
  def isOnefileMode():
1603
1884
  """:returns: bool derived from ``--onefile``"""
1604
- return options.is_onefile
1885
+ if shallCreatePythonPgoInput():
1886
+ return False
1887
+
1888
+ return bool(options.is_onefile)
1605
1889
 
1606
1890
 
1607
1891
  def isAcceleratedMode():
@@ -1616,13 +1900,16 @@ def isOnefileTempDirMode():
1616
1900
  Using cached onefile execution when the spec doesn't contain
1617
1901
  volatile things.
1618
1902
  """
1903
+ if shallCreatePythonPgoInput():
1904
+ return False
1905
+
1619
1906
  spec = getOnefileTempDirSpec()
1620
1907
 
1621
1908
  for candidate in (
1622
- "%PID",
1623
- "%TIME%",
1624
- "%PROGRAM%",
1625
- "%PROGRAM_BASE%",
1909
+ "{PID}",
1910
+ "{TIME}",
1911
+ "{PROGRAM}",
1912
+ "{PROGRAM_BASE}",
1626
1913
  ):
1627
1914
  if candidate in spec:
1628
1915
  return True
@@ -1630,8 +1917,11 @@ def isOnefileTempDirMode():
1630
1917
  return False
1631
1918
 
1632
1919
 
1633
- def isPgoMode():
1634
- """:returns: bool derived from ``--pgo``"""
1920
+ def isCPgoMode():
1921
+ """:returns: bool derived from ``--pgo-c``"""
1922
+ if shallCreatePythonPgoInput():
1923
+ return False
1924
+
1635
1925
  return options.is_c_pgo
1636
1926
 
1637
1927
 
@@ -1645,7 +1935,7 @@ def getPythonPgoInput():
1645
1935
  return options.python_pgo_input
1646
1936
 
1647
1937
 
1648
- def shallCreatePgoInput():
1938
+ def shallCreatePythonPgoInput():
1649
1939
  return isPythonPgoMode() and getPythonPgoInput() is None
1650
1940
 
1651
1941
 
@@ -1659,9 +1949,7 @@ def getPgoExecutable():
1659
1949
 
1660
1950
  if options.pgo_executable and os.path.exists(options.pgo_executable):
1661
1951
  if not os.path.isabs(options.pgo_executable):
1662
- options.pgo_executable = os.path.normcase(
1663
- os.path.join(".", options.pgo_executable)
1664
- )
1952
+ options.pgo_executable = os.path.join(".", options.pgo_executable)
1665
1953
 
1666
1954
  return options.pgo_executable
1667
1955
 
@@ -1674,11 +1962,10 @@ def getPythonPgoUnseenModulePolicy():
1674
1962
  def getOnefileTempDirSpec():
1675
1963
  """*str* = ``--onefile-tempdir-spec``"""
1676
1964
  result = (
1677
- options.onefile_tempdir_spec or "%TEMP%" + os.path.sep + "onefile_%PID%_%TIME%"
1965
+ options.onefile_tempdir_spec or "{TEMP}" + os.path.sep + "onefile_{PID}_{TIME}"
1678
1966
  )
1679
1967
 
1680
- # This changes the '/' to '\' on Windows at least.
1681
- return os.path.normpath(result)
1968
+ return result
1682
1969
 
1683
1970
 
1684
1971
  def getOnefileChildGraceTime():
@@ -1695,10 +1982,31 @@ def shallNotCompressOnefile():
1695
1982
  return options.onefile_no_compression
1696
1983
 
1697
1984
 
1698
- def getIconPaths():
1699
- """*list of str*, values of ``--windows-icon-from-ico`` and ``--linux-onefile-icon``"""
1985
+ def shallOnefileAsArchive():
1986
+ """*bool* = ``--onefile-as-archive``"""
1987
+ return options.onefile_as_archive
1988
+
1989
+
1990
+ def _checkIconPaths(icon_paths):
1991
+ for icon_path in icon_paths:
1992
+ if not os.path.exists(icon_path):
1993
+ Tracing.options_logger.sysexit(
1994
+ "Error, icon path '%s' does not exist." % icon_path
1995
+ )
1996
+
1997
+ checkIconUsage(logger=Tracing.options_logger, icon_path=icon_path)
1998
+
1999
+ return icon_paths
1700
2000
 
1701
- result = options.icon_path
2001
+
2002
+ def getWindowsIconPaths():
2003
+ """*list of str*, values of ``--windows-icon-from-ico``"""
2004
+ return _checkIconPaths(options.windows_icon_path)
2005
+
2006
+
2007
+ def getLinuxIconPaths():
2008
+ """*list of str*, values of ``--linux-icon``"""
2009
+ result = options.linux_icon_path
1702
2010
 
1703
2011
  # Check if Linux icon requirement is met.
1704
2012
  if isLinux() and not result and isOnefileMode():
@@ -1714,7 +2022,12 @@ def getIconPaths():
1714
2022
  result.append(icon)
1715
2023
  break
1716
2024
 
1717
- return result
2025
+ return _checkIconPaths(result)
2026
+
2027
+
2028
+ def getMacOSIconPaths():
2029
+ """*list of str*, values of ``--macos-app-icon``"""
2030
+ return _checkIconPaths(options.macos_icon_path)
1718
2031
 
1719
2032
 
1720
2033
  def getWindowsIconExecutablePath():
@@ -1732,6 +2045,28 @@ def shallAskForWindowsUIAccessRights():
1732
2045
  return options.windows_uac_uiaccess
1733
2046
 
1734
2047
 
2048
+ def getLegalCopyright():
2049
+ """*str* name of the product to use derived from ``--copyright``"""
2050
+ return options.legal_copyright
2051
+
2052
+
2053
+ def getLegalTrademarks():
2054
+ """*str* name of the product to use derived from ``--trademarks``"""
2055
+ return options.legal_trademarks
2056
+
2057
+
2058
+ def getLegalInformation():
2059
+ result = options.legal_copyright
2060
+
2061
+ if options.legal_trademarks:
2062
+ if result is not None:
2063
+ result += "\nTrademark information:" + options.legal_trademarks
2064
+ else:
2065
+ result = options.legal_trademarks
2066
+
2067
+ return result
2068
+
2069
+
1735
2070
  def isWindowsServiceMode():
1736
2071
  """*bool*, value of ``--windows-service``"""
1737
2072
  return options.windows_service
@@ -1800,27 +2135,47 @@ def _parseVersionNumber(value):
1800
2135
 
1801
2136
 
1802
2137
  def getProductVersion():
2138
+ """:returns: str, derived from ``--product-version``"""
2139
+ return options.product_version
2140
+
2141
+
2142
+ def getProductVersionTuple():
1803
2143
  """:returns: tuple of 4 ints or None, derived from ``--product-version``"""
1804
2144
  return _parseVersionNumber(options.product_version)
1805
2145
 
1806
2146
 
1807
2147
  def getFileVersion():
2148
+ """:returns str, derived from ``--file-version``"""
2149
+ return options.file_version
2150
+
2151
+
2152
+ def getFileVersionTuple():
1808
2153
  """:returns tuple of 4 ints or None, derived from ``--file-version``"""
1809
2154
  return _parseVersionNumber(options.file_version)
1810
2155
 
1811
2156
 
2157
+ def getProductFileVersion():
2158
+ if options.product_version:
2159
+ if options.file_version:
2160
+ return "%s-%s" % (options.product_version, options.file_version)
2161
+ else:
2162
+ return options.product_version
2163
+ else:
2164
+ return options.file_version
2165
+
2166
+
1812
2167
  def getWindowsSplashScreen():
1813
2168
  """:returns: bool derived from ``--onefile-windows-splash-screen-image``"""
1814
2169
  return options.splash_screen_image
1815
2170
 
1816
2171
 
1817
2172
  def getCompanyName():
1818
- """*str* name of the company to use"""
2173
+ """*str* name of the company to use derived from ``--company-name``"""
1819
2174
  return options.company_name
1820
2175
 
1821
2176
 
1822
2177
  def getProductName():
1823
- """*str* name of the product to use"""
2178
+ """*str* name of the product to use derived from ``--product-name``"""
1824
2179
  return options.product_name
1825
2180
 
1826
2181
 
@@ -1836,6 +2191,9 @@ def getMacOSTargetArch():
1836
2191
 
1837
2192
  def shallCreateAppBundle():
1838
2193
  """*bool* shall create an application bundle, derived from ``--macos-create-app-bundle`` value"""
2194
+ if shallCreatePythonPgoInput():
2195
+ return False
2196
+
1839
2197
  return options.macos_create_bundle and isMacOS()
1840
2198
 
1841
2199
 
@@ -2106,27 +2464,28 @@ def shallUseProgressBar():
2106
2464
 
2107
2465
  def getForcedStdoutPath():
2108
2466
  """*str* force program stdout output into that filename"""
2109
- result = options.force_stdout_spec
2467
+ if shallCreatePythonPgoInput():
2468
+ return False
2110
2469
 
2111
- if result is not None:
2112
- result = os.path.normpath(result)
2113
-
2114
- return result
2470
+ return options.force_stdout_spec
2115
2471
 
2116
2472
 
2117
2473
  def getForcedStderrPath():
2118
2474
  """*str* force program stderr output into that filename"""
2119
- result = options.force_stderr_spec
2120
-
2121
- if result is not None:
2122
- result = os.path.normpath(result)
2475
+ if shallCreatePythonPgoInput():
2476
+ return False
2123
2477
 
2124
- return result
2478
+ return options.force_stderr_spec
2125
2479
 
2126
2480
 
2127
- def shallShowSourceModifications():
2481
+ def shallShowSourceModifications(module_name):
2128
2482
  """*bool* display plugin source changes derived from --show-source-changes"""
2129
- return options is not None and options.show_source_changes
2483
+ if options is None:
2484
+ return False
2485
+
2486
+ result, _reason = module_name.matchesToShellPatterns(options.show_source_changes)
2487
+
2488
+ return result
2130
2489
 
2131
2490
 
2132
2491
  def isLowMemory():
@@ -2208,3 +2567,63 @@ def shallDisplayWarningMnemonic(mnemonic):
2208
2567
 
2209
2568
  def shallShowExecutedCommands():
2210
2569
  return isExperimental("show-commands")
2570
+
2571
+
2572
+ def getTargetPythonDescription():
2573
+ """:returns: tuple(python_version,OS/arch) string derived from ``--target``"""
2574
+ if options.target_spec is not None:
2575
+ # TODO: Only one we are working on right now.
2576
+ assert options.target_spec == "wasi"
2577
+
2578
+ return python_version, "wasi"
2579
+
2580
+ return None
2581
+
2582
+
2583
+ def getFcfProtectionMode():
2584
+ """:returns: string derived from ``--fcf-protection``"""
2585
+ return options.cf_protection
2586
+
2587
+
2588
+ def getModuleParameter(module_name, parameter_name):
2589
+ """:returns: string derived from ``--module-parameter``"""
2590
+
2591
+ module_name_prefix = module_name.getTopLevelPackageName().asString()
2592
+
2593
+ if parameter_name.startswith(module_name_prefix + "-"):
2594
+ option_name = parameter_name
2595
+ else:
2596
+ option_name = module_name_prefix + "-" + parameter_name
2597
+
2598
+ for module_option in options.module_parameters:
2599
+ module_option_name, module_option_value = module_option.split("=", 1)
2600
+
2601
+ if option_name == module_option_name:
2602
+ return module_option_value
2603
+
2604
+ return None
2605
+
2606
+
2607
+ def getForcedRuntimeEnvironmentVariableValues():
2608
+ """:returns: iterable (string, string) derived from ``----force-runtime-environment-variable``"""
2609
+
2610
+ for forced_runtime_env_variables_spec in options.forced_runtime_env_variables:
2611
+ name, value = forced_runtime_env_variables_spec.split("=", 1)
2612
+
2613
+ yield (name, value)
2614
+
2615
+
2616
+ # Part of "Nuitka", an optimizing Python compiler that is compatible and
2617
+ # integrates with CPython, but also works on its own.
2618
+ #
2619
+ # Licensed under the Apache License, Version 2.0 (the "License");
2620
+ # you may not use this file except in compliance with the License.
2621
+ # You may obtain a copy of the License at
2622
+ #
2623
+ # http://www.apache.org/licenses/LICENSE-2.0
2624
+ #
2625
+ # Unless required by applicable law or agreed to in writing, software
2626
+ # distributed under the License is distributed on an "AS IS" BASIS,
2627
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2628
+ # See the License for the specific language governing permissions and
2629
+ # limitations under the License.