Nuitka-winsvc 1.8.6__cp312-cp312-win_amd64.whl → 1.9.3__cp312-cp312-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.
Files changed (214) hide show
  1. {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/METADATA +1 -1
  2. {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/RECORD +212 -203
  3. {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/WHEEL +1 -1
  4. nuitka/BytecodeCaching.py +4 -1
  5. nuitka/HardImportRegistry.py +348 -0
  6. nuitka/MainControl.py +45 -25
  7. nuitka/OptionParsing.py +31 -20
  8. nuitka/Options.py +47 -16
  9. nuitka/Progress.py +32 -2
  10. nuitka/PythonFlavors.py +1 -1
  11. nuitka/PythonVersions.py +61 -0
  12. nuitka/Tracing.py +25 -12
  13. nuitka/TreeXML.py +5 -5
  14. nuitka/Variables.py +15 -24
  15. nuitka/Version.py +16 -6
  16. nuitka/__main__.py +15 -0
  17. nuitka/__past__.py +15 -17
  18. nuitka/build/Backend.scons +44 -35
  19. nuitka/build/CCompilerVersion.scons +10 -9
  20. nuitka/build/Onefile.scons +11 -26
  21. nuitka/build/SconsCaching.py +2 -0
  22. nuitka/build/SconsCompilerSettings.py +72 -22
  23. nuitka/build/SconsHacks.py +1 -0
  24. nuitka/build/SconsInterface.py +5 -0
  25. nuitka/build/SconsSpawn.py +16 -3
  26. nuitka/build/SconsUtils.py +11 -12
  27. nuitka/build/include/nuitka/checksum_tools.h +0 -4
  28. nuitka/build/include/nuitka/compiled_asyncgen.h +1 -1
  29. nuitka/build/include/nuitka/compiled_coroutine.h +1 -1
  30. nuitka/build/include/nuitka/compiled_frame.h +7 -4
  31. nuitka/build/include/nuitka/compiled_function.h +13 -3
  32. nuitka/build/include/nuitka/compiled_generator.h +1 -1
  33. nuitka/build/include/nuitka/constants.h +2 -0
  34. nuitka/build/include/nuitka/environment_variables.h +45 -0
  35. nuitka/build/include/nuitka/exceptions.h +32 -4
  36. nuitka/build/include/nuitka/filesystem_paths.h +6 -1
  37. nuitka/build/include/nuitka/freelists.h +11 -1
  38. nuitka/build/include/nuitka/helper/dictionaries.h +1 -1
  39. nuitka/build/include/nuitka/helper/import_hard.h +3 -0
  40. nuitka/build/include/nuitka/helpers.h +2 -0
  41. nuitka/build/include/nuitka/importing.h +3 -0
  42. nuitka/build/include/nuitka/prelude.h +17 -6
  43. nuitka/build/include/nuitka/unfreezing.h +1 -1
  44. nuitka/build/inline_copy/bin/scons.py +14 -0
  45. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  46. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  47. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  48. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  49. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  50. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  51. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  52. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  53. nuitka/build/static_src/CompiledAsyncgenType.c +41 -41
  54. nuitka/build/static_src/CompiledCodeHelpers.c +14 -7
  55. nuitka/build/static_src/CompiledCoroutineType.c +60 -51
  56. nuitka/build/static_src/CompiledFrameType.c +12 -12
  57. nuitka/build/static_src/CompiledFunctionType.c +149 -28
  58. nuitka/build/static_src/CompiledGeneratorType.c +64 -65
  59. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +1 -1
  60. nuitka/build/static_src/CompiledMethodType.c +5 -3
  61. nuitka/build/static_src/HelperEnvironmentVariables.c +120 -0
  62. nuitka/build/static_src/HelpersAttributes.c +1 -1
  63. nuitka/build/static_src/HelpersBuiltin.c +1 -1
  64. nuitka/build/static_src/HelpersChecksumTools.c +19 -4
  65. nuitka/build/static_src/HelpersComparisonEq.c +4 -4
  66. nuitka/build/static_src/HelpersComparisonNe.c +4 -4
  67. nuitka/build/static_src/HelpersConstantsBlob.c +40 -23
  68. nuitka/build/static_src/HelpersDictionaries.c +3 -1
  69. nuitka/build/static_src/HelpersDictionariesGenerated.c +9 -9
  70. nuitka/build/static_src/HelpersFilesystemPaths.c +12 -2
  71. nuitka/build/static_src/HelpersImport.c +29 -1
  72. nuitka/build/static_src/HelpersImportHard.c +19 -0
  73. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +5 -4
  74. nuitka/build/static_src/HelpersPythonPgo.c +5 -5
  75. nuitka/build/static_src/HelpersSafeStrings.c +2 -1
  76. nuitka/build/static_src/HelpersStrings.c +12 -10
  77. nuitka/build/static_src/HelpersTypes.c +1 -1
  78. nuitka/build/static_src/InspectPatcher.c +3 -2
  79. nuitka/build/static_src/MainProgram.c +182 -214
  80. nuitka/build/static_src/MetaPathBasedLoader.c +36 -23
  81. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +4 -2
  82. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +38 -2
  83. nuitka/build/static_src/OnefileBootstrap.c +124 -93
  84. nuitka/code_generation/CodeGeneration.py +4 -2
  85. nuitka/code_generation/CodeObjectCodes.py +5 -1
  86. nuitka/code_generation/ConstantCodes.py +4 -0
  87. nuitka/code_generation/Contexts.py +111 -3
  88. nuitka/code_generation/DictCodes.py +5 -5
  89. nuitka/code_generation/FunctionCodes.py +4 -2
  90. nuitka/code_generation/GlobalConstants.py +10 -0
  91. nuitka/code_generation/ImportCodes.py +69 -33
  92. nuitka/code_generation/ModuleCodes.py +4 -1
  93. nuitka/code_generation/Namify.py +6 -5
  94. nuitka/code_generation/YieldCodes.py +3 -3
  95. nuitka/code_generation/templates/CodeTemplatesModules.py +61 -95
  96. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +3 -3
  97. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +2 -2
  98. nuitka/distutils/DistutilCommands.py +3 -0
  99. nuitka/finalizations/FinalizeMarkups.py +1 -1
  100. nuitka/freezer/DependsExe.py +2 -1
  101. nuitka/freezer/DllDependenciesPosix.py +11 -1
  102. nuitka/freezer/IncludedEntryPoints.py +54 -16
  103. nuitka/freezer/Onefile.py +7 -3
  104. nuitka/freezer/Standalone.py +39 -17
  105. nuitka/importing/Importing.py +195 -62
  106. nuitka/importing/PreloadedPackages.py +2 -1
  107. nuitka/importing/Recursion.py +98 -27
  108. nuitka/importing/StandardLibrary.py +7 -4
  109. nuitka/nodes/BuiltinOpenNodes.py +28 -1
  110. nuitka/nodes/BuiltinRangeNodes.py +2 -2
  111. nuitka/nodes/BuiltinSumNodes.py +1 -1
  112. nuitka/nodes/ChildrenHavingMixins.py +326 -2
  113. nuitka/nodes/HardImportNodesGenerated.py +141 -38
  114. nuitka/nodes/ImportHardNodes.py +0 -8
  115. nuitka/nodes/ImportNodes.py +267 -361
  116. nuitka/nodes/IterationHandles.py +36 -17
  117. nuitka/nodes/LocalsScopes.py +3 -1
  118. nuitka/nodes/NodeBases.py +8 -14
  119. nuitka/nodes/OperatorNodes.py +9 -9
  120. nuitka/nodes/OutlineNodes.py +3 -3
  121. nuitka/nodes/PackageMetadataNodes.py +19 -9
  122. nuitka/nodes/SliceNodes.py +1 -1
  123. nuitka/nodes/VariableAssignNodes.py +25 -15
  124. nuitka/nodes/VariableRefNodes.py +7 -7
  125. nuitka/nodes/YieldNodes.py +2 -2
  126. nuitka/nodes/shapes/BuiltinTypeShapes.py +81 -6
  127. nuitka/nodes/shapes/ShapeMixins.py +21 -0
  128. nuitka/nodes/shapes/StandardShapes.py +9 -3
  129. nuitka/optimizations/OptimizeBuiltinCalls.py +1 -1
  130. nuitka/optimizations/TraceCollections.py +75 -0
  131. nuitka/pgo/PGO.py +14 -6
  132. nuitka/plugins/PluginBase.py +83 -11
  133. nuitka/plugins/Plugins.py +78 -35
  134. nuitka/plugins/standard/AntiBloatPlugin.py +46 -1
  135. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +1 -1
  136. nuitka/plugins/standard/DelvewheelPlugin.py +2 -1
  137. nuitka/plugins/standard/DillPlugin.py +3 -99
  138. nuitka/plugins/standard/DllFilesPlugin.py +45 -0
  139. nuitka/plugins/standard/GiPlugin.py +23 -10
  140. nuitka/plugins/standard/GlfwPlugin.py +1 -0
  141. nuitka/plugins/standard/ImplicitImports.py +267 -15
  142. nuitka/plugins/standard/KivyPlugin.py +1 -0
  143. nuitka/plugins/standard/MatplotlibPlugin.py +43 -25
  144. nuitka/plugins/standard/OptionsNannyPlugin.py +5 -6
  145. nuitka/plugins/standard/PkgResourcesPlugin.py +1 -1
  146. nuitka/plugins/standard/PmwPlugin.py +1 -1
  147. nuitka/plugins/standard/PySidePyQtPlugin.py +37 -20
  148. nuitka/plugins/standard/TkinterPlugin.py +44 -30
  149. nuitka/plugins/standard/TransformersPlugin.py +3 -1
  150. nuitka/plugins/standard/standard.nuitka-package.config.yml +522 -86
  151. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +8 -1
  152. nuitka/reports/CompilationReportReader.py +53 -0
  153. nuitka/reports/LicenseReport.rst.j2 +4 -4
  154. nuitka/reports/Reports.py +129 -47
  155. nuitka/specs/HardImportSpecs.py +6 -0
  156. nuitka/tools/data_composer/DataComposer.py +29 -17
  157. nuitka/tools/onefile_compressor/OnefileCompressor.py +173 -110
  158. nuitka/tools/podman/__main__.py +17 -2
  159. nuitka/tools/scanning/DisplayPackageDLLs.py +11 -2
  160. nuitka/tools/scanning/DisplayPackageData.py +1 -1
  161. nuitka/tools/specialize/CTypeDescriptions.py +36 -27
  162. nuitka/tools/specialize/SpecializeC.py +1 -1
  163. nuitka/tools/specialize/SpecializePython.py +16 -0
  164. nuitka/tools/testing/Common.py +3 -4
  165. nuitka/tools/testing/OutputComparison.py +23 -0
  166. nuitka/tools/testing/SearchModes.py +2 -2
  167. nuitka/tools/testing/compare_with_cpython/__main__.py +13 -4
  168. nuitka/tools/testing/measure_construct_performance/__main__.py +2 -5
  169. nuitka/tools/watch/__main__.py +194 -56
  170. nuitka/tree/Building.py +8 -2
  171. nuitka/tree/ComplexCallHelperFunctions.py +45 -15
  172. nuitka/tree/ReformulationAssignmentStatements.py +18 -12
  173. nuitka/tree/ReformulationCallExpressions.py +1 -1
  174. nuitka/tree/ReformulationClasses.py +11 -5
  175. nuitka/tree/ReformulationClasses3.py +30 -12
  176. nuitka/tree/ReformulationComparisonExpressions.py +4 -2
  177. nuitka/tree/ReformulationContractionExpressions.py +19 -11
  178. nuitka/tree/ReformulationDictionaryCreation.py +9 -3
  179. nuitka/tree/ReformulationExecStatements.py +6 -6
  180. nuitka/tree/ReformulationForLoopStatements.py +5 -5
  181. nuitka/tree/ReformulationFunctionStatements.py +6 -2
  182. nuitka/tree/ReformulationImportStatements.py +7 -2
  183. nuitka/tree/ReformulationLambdaExpressions.py +1 -1
  184. nuitka/tree/ReformulationMatchStatements.py +3 -1
  185. nuitka/tree/ReformulationNamespacePackages.py +7 -3
  186. nuitka/tree/ReformulationPrintStatements.py +1 -1
  187. nuitka/tree/ReformulationSequenceCreation.py +18 -6
  188. nuitka/tree/ReformulationWithStatements.py +8 -8
  189. nuitka/tree/ReformulationYieldExpressions.py +2 -2
  190. nuitka/tree/SourceHandling.py +27 -5
  191. nuitka/tree/VariableClosure.py +11 -1
  192. nuitka/utils/AppDirs.py +2 -2
  193. nuitka/utils/CStrings.py +39 -3
  194. nuitka/utils/CommandLineOptions.py +42 -1
  195. nuitka/utils/Distributions.py +305 -38
  196. nuitka/utils/Download.py +27 -8
  197. nuitka/utils/FileOperations.py +103 -20
  198. nuitka/utils/Hashing.py +2 -3
  199. nuitka/utils/Importing.py +60 -3
  200. nuitka/utils/InstalledPythons.py +31 -36
  201. nuitka/utils/Jinja2.py +11 -5
  202. nuitka/utils/ModuleNames.py +11 -3
  203. nuitka/utils/ReExecute.py +7 -0
  204. nuitka/utils/SharedLibraries.py +38 -14
  205. nuitka/utils/SlotMetaClasses.py +55 -0
  206. nuitka/utils/Utils.py +10 -0
  207. nuitka/utils/Yaml.py +9 -1
  208. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  209. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  210. {Nuitka_winsvc-1.8.6.data → Nuitka_winsvc-1.9.3.data}/scripts/nuitka-run.bat +0 -0
  211. {Nuitka_winsvc-1.8.6.data → Nuitka_winsvc-1.9.3.data}/scripts/nuitka.bat +0 -0
  212. {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/LICENSE.txt +0 -0
  213. {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/entry_points.txt +0 -0
  214. {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/top_level.txt +0 -0
@@ -23,7 +23,7 @@ stuff related to importing, and of course the generated code license.
23
23
  """
24
24
 
25
25
  template_global_copyright = """\
26
- /* Generated code for Python module '%(module_name)s'
26
+ /* Generated code for Python module '%(module_identifier)s'
27
27
  * created by Nuitka version %(version)s
28
28
  *
29
29
  * This code is in part copyright %(year)s Kay Hayen.
@@ -130,47 +130,36 @@ extern PyTypeObject Nuitka_Loader_Type;
130
130
  // in another process, useful for multiprocessing extensions like dill
131
131
  extern void registerDillPluginTables(PyThreadState *tstate, char const *module_name, PyMethodDef *reduce_compiled_function, PyMethodDef *create_compiled_function);
132
132
 
133
- function_impl_code functable_%(module_identifier)s[] = {
133
+ static function_impl_code const function_table_%(module_identifier)s[] = {
134
134
  %(module_function_table_entries)s
135
135
  NULL
136
136
  };
137
137
 
138
- static char const *_reduce_compiled_function_argnames[] = {
139
- "func",
140
- NULL
141
- };
142
-
143
138
  static PyObject *_reduce_compiled_function(PyObject *self, PyObject *args, PyObject *kwds) {
144
139
  PyObject *func;
145
140
 
146
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:reduce_compiled_function", (char **)_reduce_compiled_function_argnames, &func, NULL)) {
141
+ if (!PyArg_ParseTuple(args, "O:reduce_compiled_function", &func, NULL)) {
147
142
  return NULL;
148
143
  }
149
144
 
150
145
  if (Nuitka_Function_Check(func) == false) {
151
146
  PyThreadState *tstate = PyThreadState_GET();
152
147
 
153
- SET_CURRENT_EXCEPTION_TYPE0_STR_STATE(tstate, PyExc_TypeError, "not a compiled function");
148
+ SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError, "not a compiled function");
154
149
  return NULL;
155
150
  }
156
151
 
157
152
  struct Nuitka_FunctionObject *function = (struct Nuitka_FunctionObject *)func;
158
153
 
159
- function_impl_code *current = functable_%(module_identifier)s;
160
- int offset = 0;
154
+ int offset = Nuitka_Function_GetFunctionCodeIndex(function, function_table_%(module_identifier)s);
161
155
 
162
- while (*current != NULL) {
163
- if (*current == function->m_c_code) {
164
- break;
165
- }
166
-
167
- current += 1;
168
- offset += 1;
169
- }
170
-
171
- if (*current == NULL) {
156
+ if (unlikely(offset == -1)) {
172
157
  PyThreadState *tstate = PyThreadState_GET();
173
-
158
+ #if 0
159
+ PRINT_STRING("Looking for:");
160
+ PRINT_ITEM(func);
161
+ PRINT_NEW_LINE();
162
+ #endif
174
163
  SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError, "Cannot find compiled function in module.");
175
164
  return NULL;
176
165
  }
@@ -185,11 +174,30 @@ static PyObject *_reduce_compiled_function(PyObject *self, PyObject *args, PyObj
185
174
 
186
175
  CHECK_OBJECT_DEEP(code_object_desc);
187
176
 
188
- PyObject *result = MAKE_TUPLE_EMPTY(4);
177
+
178
+ PyObject *result = MAKE_TUPLE_EMPTY(6);
189
179
  PyTuple_SET_ITEM(result, 0, PyLong_FromLong(offset));
190
180
  PyTuple_SET_ITEM(result, 1, code_object_desc);
191
181
  PyTuple_SET_ITEM0(result, 2, function->m_defaults);
192
- PyTuple_SET_ITEM0(result, 3, function->m_doc != NULL ? function->m_doc : Py_None);
182
+ #if PYTHON_VERSION >= 0x300
183
+ PyTuple_SET_ITEM0(result, 3, function->m_kwdefaults ? function->m_kwdefaults : Py_None);
184
+ #else
185
+ PyTuple_SET_ITEM0(result, 3, Py_None);
186
+ #endif
187
+ PyTuple_SET_ITEM0(result, 4, function->m_doc != NULL ? function->m_doc : Py_None);
188
+
189
+ if (offset == -5) {
190
+ CHECK_OBJECT(function->m_constant_return_value);
191
+ PyTuple_SET_ITEM0(result, 5, function->m_constant_return_value);
192
+ } else {
193
+ PyTuple_SET_ITEM0(result, 5, Py_None);
194
+ }
195
+
196
+ #if PYTHON_VERSION >= 0x300
197
+ PyTuple_SET_ITEM0(result, 6, function->m_qualname);
198
+ #else
199
+ PyTuple_SET_ITEM0(result, 6, Py_None);
200
+ #endif
193
201
 
194
202
  CHECK_OBJECT_DEEP(result);
195
203
 
@@ -197,92 +205,48 @@ static PyObject *_reduce_compiled_function(PyObject *self, PyObject *args, PyObj
197
205
  }
198
206
 
199
207
  static PyMethodDef _method_def_reduce_compiled_function = {"reduce_compiled_function", (PyCFunction)_reduce_compiled_function,
200
- METH_VARARGS | METH_KEYWORDS, NULL};
201
-
202
- static char const *_create_compiled_function_argnames[] = {
203
- "func",
204
- "code_object_desc",
205
- "defaults",
206
- "doc",
207
- NULL
208
- };
208
+ METH_VARARGS, NULL};
209
209
 
210
210
 
211
211
  static PyObject *_create_compiled_function(PyObject *self, PyObject *args, PyObject *kwds) {
212
212
  CHECK_OBJECT_DEEP(args);
213
213
 
214
- PyObject *func;
214
+ PyObject *function_index;
215
215
  PyObject *code_object_desc;
216
216
  PyObject *defaults;
217
+ PyObject *kw_defaults;
217
218
  PyObject *doc;
219
+ PyObject *constant_return_value;
220
+ PyObject *function_qualname;
218
221
 
219
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOOO:create_compiled_function", (char **)_create_compiled_function_argnames, &func, &code_object_desc, &defaults, &doc, NULL)) {
220
- return NULL;
221
- }
222
-
223
- int offset = PyLong_AsLong(func);
224
-
225
- if (offset == -1 && HAS_ERROR_OCCURRED(tstate)) {
222
+ if (!PyArg_ParseTuple(args, "OOOOOO:create_compiled_function", &function_index, &code_object_desc, &defaults, &kw_defaults, &doc, &constant_return_value, &function_qualname, NULL)) {
226
223
  return NULL;
227
224
  }
228
225
 
229
- if (offset > sizeof(functable_%(module_identifier)s) || offset < 0) {
230
- SET_CURRENT_EXCEPTION_TYPE0_STR_STATE(tstate, PyExc_TypeError, "Wrong offset for compiled function.");
231
- return NULL;
232
- }
233
-
234
- PyObject *filename = PyTuple_GET_ITEM(code_object_desc, 0);
235
- PyObject *function_name = PyTuple_GET_ITEM(code_object_desc, 1);
236
- PyObject *line = PyTuple_GET_ITEM(code_object_desc, 2);
237
- int line_int = PyLong_AsLong(line);
238
- assert(!HAS_ERROR_OCCURRED(tstate));
239
-
240
- PyObject *argnames = PyTuple_GET_ITEM(code_object_desc, 3);
241
- PyObject *arg_count = PyTuple_GET_ITEM(code_object_desc, 4);
242
- int arg_count_int = PyLong_AsLong(arg_count);
243
- assert(!HAS_ERROR_OCCURRED(tstate));
244
- PyObject *flags = PyTuple_GET_ITEM(code_object_desc, 5);
245
- int flags_int = PyLong_AsLong(flags);
246
- assert(!HAS_ERROR_OCCURRED(tstate));
247
-
248
- PyCodeObject *code_object = MAKE_CODE_OBJECT(
249
- filename,
250
- line_int,
251
- flags_int,
252
- function_name,
253
- function_name, // TODO: function_qualname
254
- argnames,
255
- NULL, // freevars
256
- arg_count_int,
257
- 0, // TODO: Missing kw_only_count
258
- 0 // TODO: Missing pos_only_count
259
- );
260
-
261
- struct Nuitka_FunctionObject *result = Nuitka_Function_New(
262
- functable_%(module_identifier)s[offset],
263
- code_object->co_name,
264
226
  #if PYTHON_VERSION >= 0x300
265
- NULL, // TODO: Not transferring qualname yet
266
- #endif
267
- code_object,
268
- defaults,
269
- #if PYTHON_VERSION >= 0x300
270
- NULL, // kwdefaults are done on the outside currently
271
- NULL, // TODO: Not transferring annotations
227
+ if (kw_defaults == Py_None) {
228
+ kw_defaults = NULL;
229
+ }
272
230
  #endif
231
+
232
+ return (PyObject *)Nuitka_Function_CreateFunctionViaCodeIndex(
273
233
  module_%(module_identifier)s,
234
+ function_qualname,
235
+ function_index,
236
+ code_object_desc,
237
+ constant_return_value,
238
+ defaults,
239
+ kw_defaults,
274
240
  doc,
275
- NULL,
276
- 0
241
+ function_table_%(module_identifier)s,
242
+ sizeof(function_table_%(module_identifier)s) / sizeof(function_impl_code)
277
243
  );
278
-
279
- return (PyObject *)result;
280
244
  }
281
245
 
282
246
  static PyMethodDef _method_def_create_compiled_function = {
283
247
  "create_compiled_function",
284
248
  (PyCFunction)_create_compiled_function,
285
- METH_VARARGS | METH_KEYWORDS, NULL
249
+ METH_VARARGS, NULL
286
250
  };
287
251
 
288
252
 
@@ -291,7 +255,7 @@ static PyMethodDef _method_def_create_compiled_function = {
291
255
  // Internal entry point for module code.
292
256
  PyObject *modulecode_%(module_identifier)s(PyThreadState *tstate, PyObject *module, struct Nuitka_MetaPathBasedLoaderEntry const *loader_entry) {
293
257
  // Report entry to PGO.
294
- PGO_onModuleEntered("%(module_name)s");
258
+ PGO_onModuleEntered("%(module_identifier)s");
295
259
 
296
260
  // Store the module for future use.
297
261
  module_%(module_identifier)s = module;
@@ -325,7 +289,7 @@ PyObject *modulecode_%(module_identifier)s(PyThreadState *tstate, PyObject *modu
325
289
 
326
290
  // Enable meta path based loader if not already done.
327
291
  #ifdef _NUITKA_TRACE
328
- PRINT_STRING("%(module_name)s: Calling setupMetaPathBasedLoader().\n");
292
+ PRINT_STRING("%(module_identifier)s: Calling setupMetaPathBasedLoader().\n");
329
293
  #endif
330
294
  setupMetaPathBasedLoader(tstate);
331
295
 
@@ -336,7 +300,7 @@ PyObject *modulecode_%(module_identifier)s(PyThreadState *tstate, PyObject *modu
336
300
  #endif
337
301
 
338
302
  /* The constants only used by this module are created now. */
339
- NUITKA_PRINT_TRACE("%(module_name)s: Calling createModuleConstants().\n");
303
+ NUITKA_PRINT_TRACE("%(module_identifier)s: Calling createModuleConstants().\n");
340
304
  createModuleConstants(tstate);
341
305
 
342
306
  createModuleCodeObjects();
@@ -465,7 +429,7 @@ PyObject *modulecode_%(module_identifier)s(PyThreadState *tstate, PyObject *modu
465
429
  %(module_code)s
466
430
 
467
431
  // Report to PGO about leaving the module without error.
468
- PGO_onModuleExit("%(module_name)s", false);
432
+ PGO_onModuleExit("%(module_identifier)s", false);
469
433
 
470
434
  Py_INCREF(module_%(module_identifier)s);
471
435
  return module_%(module_identifier)s;
@@ -560,7 +524,7 @@ static struct PyModuleDef mdef_%(module_identifier)s = {
560
524
  */
561
525
 
562
526
  // Actual name might be different when loaded as a package.
563
- static char const *module_full_name = "%(module_name)s";
527
+ static char const *module_full_name = %(module_name_cstr)s;
564
528
 
565
529
  MOD_INIT_DECL(%(module_identifier)s) {
566
530
  if (_Py_PackageContext != NULL) {
@@ -583,8 +547,10 @@ MOD_INIT_DECL(%(module_identifier)s) {
583
547
  PyObject *module = PyModule_Create(&mdef_%(module_identifier)s);
584
548
  CHECK_OBJECT(module);
585
549
 
586
- bool res = Nuitka_SetModuleString(module_full_name, module);
587
- assert(res != false);
550
+ {
551
+ NUITKA_MAY_BE_UNUSED bool res = Nuitka_SetModuleString(module_full_name, module);
552
+ assert(res != false);
553
+ }
588
554
  #endif
589
555
 
590
556
  PyThreadState *tstate = PyThreadState_GET();
@@ -41,7 +41,7 @@ else
41
41
  PyObject *value = entry->me_value;
42
42
  {{ per_value_code }}
43
43
 
44
- int res = PyDict_SetItem({{ result }}, key, value);
44
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem({{ result }}, key, value);
45
45
  assert(res == 0);
46
46
 
47
47
  {% if value_ref == 1 %}
@@ -241,7 +241,7 @@ else
241
241
 
242
242
  {{ per_value_code }}
243
243
 
244
- int res = PyDict_SetItem({{ result }}, key, value);
244
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem({{ result }}, key, value);
245
245
  assert(res == 0);
246
246
 
247
247
  {% if value_ref == 1 %}
@@ -263,7 +263,7 @@ else
263
263
 
264
264
  {{ per_value_code }}
265
265
 
266
- int res = PyDict_SetItem({{ result }}, key, value);
266
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem({{ result }}, key, value);
267
267
  assert(res == 0);
268
268
 
269
269
  {% if value_ref == 1 %}
@@ -46,7 +46,7 @@ static {{target.getTypeDecl()}} COMPARE_{{op_code}}_{{target.getHelperCodeName()
46
46
  } else {
47
47
  int kind1 = PyUnicode_KIND(a);
48
48
  if (unlikely(kind1 == 0)) {
49
- int res = _PyUnicode_Ready((PyObject *)a);
49
+ NUITKA_MAY_BE_UNUSED int res = _PyUnicode_Ready((PyObject *)a);
50
50
  assert(res != -1);
51
51
  kind1 = PyUnicode_KIND(a);
52
52
  assert(kind1 != 0);
@@ -54,7 +54,7 @@ static {{target.getTypeDecl()}} COMPARE_{{op_code}}_{{target.getHelperCodeName()
54
54
 
55
55
  int kind2 = PyUnicode_KIND(b);
56
56
  if (unlikely(kind2 == 0)) {
57
- int res = _PyUnicode_Ready((PyObject *)b);
57
+ NUITKA_MAY_BE_UNUSED int res = _PyUnicode_Ready((PyObject *)b);
58
58
  assert(res != -1);
59
59
  kind2 = PyUnicode_KIND(b);
60
60
  assert(kind2 != 0);
@@ -323,6 +323,9 @@ class build(distutils.command.build.build):
323
323
  for option, value in toml_options.get("nuitka", {}).items():
324
324
  command.extend(self._parseOptionsEntry(option, value))
325
325
 
326
+ for option, value in toml_options.get("tool.nuitka", {}).items():
327
+ command.extend(self._parseOptionsEntry(option, value))
328
+
326
329
  # Process any extra options from setuptools
327
330
  if "nuitka" in self.distribution.command_options:
328
331
  for option, value in self.distribution.command_options[
@@ -136,7 +136,7 @@ class FinalizeMarkups(VisitorNoopMixin):
136
136
  if (
137
137
  node.isExpressionYield()
138
138
  or node.isExpressionYieldFrom()
139
- or node.isExpressionYieldFromWaitable()
139
+ or node.isExpressionYieldFromAwaitable()
140
140
  ):
141
141
  search = node.getParent()
142
142
 
@@ -53,6 +53,7 @@ def getDependsExePath():
53
53
  depends_url = "https://dependencywalker.com/depends22_x64.zip"
54
54
 
55
55
  return getCachedDownload(
56
+ name="dependency walker",
56
57
  url=depends_url,
57
58
  is_arch_specific=getArchitecture(),
58
59
  binary="depends.exe",
@@ -216,7 +217,7 @@ SxS
216
217
  "-f1",
217
218
  "-pa1",
218
219
  "-ps1",
219
- binary_filename,
220
+ getExternalUsePath(binary_filename),
220
221
  ),
221
222
  external_cwd=True,
222
223
  )
@@ -28,7 +28,11 @@ from nuitka.PythonFlavors import isAnacondaPython
28
28
  from nuitka.Tracing import inclusion_logger
29
29
  from nuitka.utils.Execution import executeProcess, withEnvironmentPathAdded
30
30
  from nuitka.utils.SharedLibraries import getSharedLibraryRPATH
31
- from nuitka.utils.Utils import isAlpineLinux, isPosixWindows
31
+ from nuitka.utils.Utils import (
32
+ isAlpineLinux,
33
+ isAndroidBasedLinux,
34
+ isPosixWindows,
35
+ )
32
36
 
33
37
  from .DllDependenciesCommon import getLdLibraryPath
34
38
 
@@ -204,6 +208,9 @@ _linux_dll_ignore_list = [
204
208
  # The DRM layer should also be taken from the OS in question and won't
205
209
  # allow loading native drivers otherwise.
206
210
  "libdrm.so",
211
+ # The zlib can be assumed to be everywhere, and outside dependencies
212
+ # may actually load it.
213
+ "libz.so",
207
214
  ]
208
215
 
209
216
  if isAnacondaPython() or isAlpineLinux():
@@ -211,3 +218,6 @@ if isAnacondaPython() or isAlpineLinux():
211
218
  # so they have to be included.
212
219
  # Alpine linux does not include `libstdc++.so` by default.
213
220
  _linux_dll_ignore_list.remove("libstdc++.so")
221
+
222
+ if isAndroidBasedLinux():
223
+ _linux_dll_ignore_list.remove("libz.so")
@@ -37,7 +37,7 @@ from nuitka.utils.FileOperations import (
37
37
  isRelativePath,
38
38
  )
39
39
  from nuitka.utils.Importing import getSharedLibrarySuffix
40
- from nuitka.utils.ModuleNames import ModuleName
40
+ from nuitka.utils.ModuleNames import ModuleName, checkModuleName
41
41
  from nuitka.utils.SharedLibraries import getDLLVersion
42
42
 
43
43
  IncludedEntryPoint = collections.namedtuple(
@@ -47,6 +47,7 @@ IncludedEntryPoint = collections.namedtuple(
47
47
  "kind",
48
48
  "source_path",
49
49
  "dest_path",
50
+ "module_name",
50
51
  "package_name",
51
52
  "executable",
52
53
  "reason",
@@ -56,7 +57,7 @@ IncludedEntryPoint = collections.namedtuple(
56
57
 
57
58
  # Since inheritance is not a thing with namedtuple, have factory functions
58
59
  def _makeIncludedEntryPoint(
59
- logger, kind, source_path, dest_path, package_name, reason, executable
60
+ logger, kind, source_path, dest_path, module_name, package_name, reason, executable
60
61
  ):
61
62
  if package_name is not None:
62
63
  package_name = ModuleName(package_name)
@@ -70,23 +71,30 @@ def _makeIncludedEntryPoint(
70
71
  assert not hasFilenameExtension(path=source_path, extensions=(".qml", ".json"))
71
72
 
72
73
  return IncludedEntryPoint(
73
- logger,
74
- kind,
75
- source_path,
76
- os.path.normpath(dest_path),
77
- package_name,
78
- executable,
79
- reason,
74
+ logger=logger,
75
+ kind=kind,
76
+ source_path=source_path,
77
+ dest_path=os.path.normpath(dest_path),
78
+ module_name=module_name,
79
+ package_name=package_name,
80
+ executable=executable,
81
+ reason=reason,
80
82
  )
81
83
 
82
84
 
83
85
  def _makeDllOrExeEntryPoint(
84
- logger, kind, source_path, dest_path, package_name, reason, executable
86
+ logger, kind, source_path, dest_path, module_name, package_name, reason, executable
85
87
  ):
86
88
  assert type(dest_path) not in (tuple, list)
87
89
  assert type(source_path) not in (tuple, list)
88
90
  assert isRelativePath(dest_path), dest_path
89
91
  assert ".dist" not in dest_path, dest_path
92
+ if module_name is not None:
93
+ assert checkModuleName(module_name), module_name
94
+ module_name = ModuleName(module_name)
95
+ if package_name is not None:
96
+ assert checkModuleName(package_name), package_name
97
+ package_name = ModuleName(package_name)
90
98
 
91
99
  if not os.path.isfile(source_path):
92
100
  logger.sysexit(
@@ -99,42 +107,52 @@ def _makeDllOrExeEntryPoint(
99
107
  kind=kind,
100
108
  source_path=source_path,
101
109
  dest_path=dest_path,
110
+ module_name=module_name,
102
111
  package_name=package_name,
103
112
  reason=reason,
104
113
  executable=executable,
105
114
  )
106
115
 
107
116
 
108
- def makeExtensionModuleEntryPoint(logger, source_path, dest_path, package_name, reason):
117
+ def makeExtensionModuleEntryPoint(
118
+ logger, source_path, dest_path, module_name, package_name, reason
119
+ ):
109
120
  return _makeDllOrExeEntryPoint(
110
121
  logger=logger,
111
122
  kind="extension",
112
123
  source_path=source_path,
113
124
  dest_path=dest_path,
125
+ module_name=module_name,
114
126
  package_name=package_name,
115
127
  reason=reason,
116
128
  executable=False,
117
129
  )
118
130
 
119
131
 
120
- def makeDllEntryPoint(logger, source_path, dest_path, package_name, reason):
132
+ def makeDllEntryPoint(
133
+ logger, source_path, dest_path, module_name, package_name, reason
134
+ ):
121
135
  return _makeDllOrExeEntryPoint(
122
136
  logger=logger,
123
137
  kind="dll",
124
138
  source_path=source_path,
125
139
  dest_path=dest_path,
140
+ module_name=module_name,
126
141
  package_name=package_name,
127
142
  reason=reason,
128
143
  executable=False,
129
144
  )
130
145
 
131
146
 
132
- def makeExeEntryPoint(logger, source_path, dest_path, package_name, reason):
147
+ def makeExeEntryPoint(
148
+ logger, source_path, dest_path, module_name, package_name, reason
149
+ ):
133
150
  return _makeDllOrExeEntryPoint(
134
151
  logger=logger,
135
152
  kind="exe",
136
153
  source_path=source_path,
137
154
  dest_path=dest_path,
155
+ module_name=module_name,
138
156
  package_name=package_name,
139
157
  reason=reason,
140
158
  executable=True,
@@ -147,6 +165,7 @@ def makeMainExecutableEntryPoint(dest_path):
147
165
  kind="executable",
148
166
  source_path=dest_path,
149
167
  dest_path=os.path.basename(dest_path),
168
+ module_name=None,
150
169
  package_name=None,
151
170
  reason="main binary",
152
171
  executable=True,
@@ -159,6 +178,7 @@ def _makeIgnoredEntryPoint(entry_point):
159
178
  kind=entry_point.kind + "_ignored",
160
179
  source_path=entry_point.source_path,
161
180
  dest_path=entry_point.dest_path,
181
+ module_name=entry_point.module_name,
162
182
  package_name=entry_point.package_name,
163
183
  reason=entry_point.reason,
164
184
  executable=entry_point.executable,
@@ -176,7 +196,7 @@ def _getTopLevelPackageName(package_name):
176
196
 
177
197
 
178
198
  def _warnNonIdenticalEntryPoints(entry_point1, entry_point2):
179
- # Well know case, where they duplicate all the DLLs, seems to work well
199
+ # Well know cases, where they duplicate all the DLLs, seems to work well
180
200
  # enough to not report this. TODO: When we are adding to the report, it
181
201
  # ought to be still added. spell-checker: ignore scipy
182
202
  if frozenset(
@@ -187,10 +207,27 @@ def _warnNonIdenticalEntryPoints(entry_point1, entry_point2):
187
207
  ) == frozenset(("numpy", "scipy")):
188
208
  return
189
209
 
210
+ if frozenset(
211
+ (
212
+ _getTopLevelPackageName(entry_point1.package_name),
213
+ _getTopLevelPackageName(entry_point2.package_name),
214
+ )
215
+ ) == frozenset(("av", "cv2")):
216
+ return
217
+
218
+ def _describe(entry_point):
219
+ if entry_point.package_name:
220
+ return "'%s' of package '%s'" % (
221
+ entry_point.source_path,
222
+ entry_point.package_name,
223
+ )
224
+ else:
225
+ return "'%s'" % entry_point.source_path
226
+
190
227
  inclusion_logger.warning(
191
228
  """\
192
- Ignoring non-identical DLLs for '%s', '%s' different from '%s'. Using first one and hoping for the best."""
193
- % (entry_point1.dest_path, entry_point1.source_path, entry_point2.source_path)
229
+ Ignoring non-identical DLLs for %s, %s different from %s. Using first one and hoping for the best."""
230
+ % (entry_point1.dest_path, _describe(entry_point1), _describe(entry_point2))
194
231
  )
195
232
 
196
233
 
@@ -291,6 +328,7 @@ def addExtensionModuleEntryPoint(module):
291
328
  source_path=module.getFilename(),
292
329
  dest_path=module.getFullName().asPath()
293
330
  + getSharedLibrarySuffix(preferred=False),
331
+ module_name=module.getFullName(),
294
332
  package_name=module.getFullName().getPackageName(),
295
333
  reason="required extension module for CPython library startup"
296
334
  if module.isTechnical()
nuitka/freezer/Onefile.py CHANGED
@@ -27,7 +27,6 @@ from nuitka import Options, OutputDirectories
27
27
  from nuitka.build.SconsInterface import (
28
28
  asBoolStr,
29
29
  cleanSconsDirectory,
30
- getSconsDataPath,
31
30
  runScons,
32
31
  setCommonSconsOptions,
33
32
  )
@@ -69,7 +68,7 @@ def packDistFolderToOnefile(dist_dir):
69
68
  Plugins.onOnefileFinished(onefile_output_filename)
70
69
 
71
70
 
72
- def _runOnefileScons(onefile_compression):
71
+ def _runOnefileScons(onefile_compression, onefile_archive):
73
72
  source_dir = OutputDirectories.getSourceDirectoryPath(onefile=True)
74
73
 
75
74
  # Let plugins do their thing for onefile mode too.
@@ -81,7 +80,6 @@ def _runOnefileScons(onefile_compression):
81
80
  "source_dir": source_dir,
82
81
  "debug_mode": asBoolStr(Options.is_debug),
83
82
  "trace_mode": asBoolStr(Options.shallTraceExecution()),
84
- "nuitka_src": getSconsDataPath(),
85
83
  "onefile_splash_screen": asBoolStr(
86
84
  Options.getWindowsSplashScreen() is not None
87
85
  ),
@@ -93,6 +91,7 @@ def _runOnefileScons(onefile_compression):
93
91
  env_values["_NUITKA_ONEFILE_TEMP_BOOL"] = "1" if isOnefileTempDirMode() else "0"
94
92
  env_values["_NUITKA_ONEFILE_COMPRESSION_BOOL"] = "1" if onefile_compression else "0"
95
93
  env_values["_NUITKA_ONEFILE_BUILD_BOOL"] = "1" if onefile_compression else "0"
94
+ env_values["_NUITKA_ONEFILE_ARCHIVE_BOOL"] = "1" if onefile_archive else "0"
96
95
 
97
96
  # Allow plugins to build definitions.
98
97
  env_values.update(Plugins.getBuildDefinitions())
@@ -173,6 +172,8 @@ def runOnefileCompressor(
173
172
  onefile_output_filename=onefile_output_filename,
174
173
  start_binary=start_binary,
175
174
  expect_compression=compressor_python is not None,
175
+ as_archive=Options.shallOnefileAsArchive(),
176
+ use_compression_cache=not Options.shallDisableCompressionCacheUsage(),
176
177
  file_checksums=file_checksums,
177
178
  win_path_sep=win_path_sep,
178
179
  low_memory=Options.isLowMemory(),
@@ -206,6 +207,8 @@ def runOnefileCompressor(
206
207
  str(file_checksums),
207
208
  str(win_path_sep),
208
209
  str(Options.isLowMemory()),
210
+ str(Options.shallOnefileAsArchive()),
211
+ str(not Options.shallDisableCompressionCacheUsage()),
209
212
  ],
210
213
  shell=False,
211
214
  )
@@ -243,6 +246,7 @@ def packDistFolderToOnefileBootstrap(onefile_output_filename, dist_dir):
243
246
  # Create the bootstrap binary for unpacking.
244
247
  _runOnefileScons(
245
248
  onefile_compression=compressor_python is not None,
249
+ onefile_archive=Options.shallOnefileAsArchive(),
246
250
  )
247
251
 
248
252
  if isWin32Windows():