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.
- {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/METADATA +1 -1
- {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/RECORD +212 -203
- {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/WHEEL +1 -1
- nuitka/BytecodeCaching.py +4 -1
- nuitka/HardImportRegistry.py +348 -0
- nuitka/MainControl.py +45 -25
- nuitka/OptionParsing.py +31 -20
- nuitka/Options.py +47 -16
- nuitka/Progress.py +32 -2
- nuitka/PythonFlavors.py +1 -1
- nuitka/PythonVersions.py +61 -0
- nuitka/Tracing.py +25 -12
- nuitka/TreeXML.py +5 -5
- nuitka/Variables.py +15 -24
- nuitka/Version.py +16 -6
- nuitka/__main__.py +15 -0
- nuitka/__past__.py +15 -17
- nuitka/build/Backend.scons +44 -35
- nuitka/build/CCompilerVersion.scons +10 -9
- nuitka/build/Onefile.scons +11 -26
- nuitka/build/SconsCaching.py +2 -0
- nuitka/build/SconsCompilerSettings.py +72 -22
- nuitka/build/SconsHacks.py +1 -0
- nuitka/build/SconsInterface.py +5 -0
- nuitka/build/SconsSpawn.py +16 -3
- nuitka/build/SconsUtils.py +11 -12
- nuitka/build/include/nuitka/checksum_tools.h +0 -4
- nuitka/build/include/nuitka/compiled_asyncgen.h +1 -1
- nuitka/build/include/nuitka/compiled_coroutine.h +1 -1
- nuitka/build/include/nuitka/compiled_frame.h +7 -4
- nuitka/build/include/nuitka/compiled_function.h +13 -3
- nuitka/build/include/nuitka/compiled_generator.h +1 -1
- nuitka/build/include/nuitka/constants.h +2 -0
- nuitka/build/include/nuitka/environment_variables.h +45 -0
- nuitka/build/include/nuitka/exceptions.h +32 -4
- nuitka/build/include/nuitka/filesystem_paths.h +6 -1
- nuitka/build/include/nuitka/freelists.h +11 -1
- nuitka/build/include/nuitka/helper/dictionaries.h +1 -1
- nuitka/build/include/nuitka/helper/import_hard.h +3 -0
- nuitka/build/include/nuitka/helpers.h +2 -0
- nuitka/build/include/nuitka/importing.h +3 -0
- nuitka/build/include/nuitka/prelude.h +17 -6
- nuitka/build/include/nuitka/unfreezing.h +1 -1
- nuitka/build/inline_copy/bin/scons.py +14 -0
- nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
- nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
- nuitka/build/inline_copy/zlib/LICENSE +22 -0
- nuitka/build/inline_copy/zlib/crc32.c +1049 -0
- nuitka/build/inline_copy/zlib/crc32.h +9446 -0
- nuitka/build/inline_copy/zlib/zconf.h +551 -0
- nuitka/build/inline_copy/zlib/zlib.h +1938 -0
- nuitka/build/inline_copy/zlib/zutil.h +275 -0
- nuitka/build/static_src/CompiledAsyncgenType.c +41 -41
- nuitka/build/static_src/CompiledCodeHelpers.c +14 -7
- nuitka/build/static_src/CompiledCoroutineType.c +60 -51
- nuitka/build/static_src/CompiledFrameType.c +12 -12
- nuitka/build/static_src/CompiledFunctionType.c +149 -28
- nuitka/build/static_src/CompiledGeneratorType.c +64 -65
- nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +1 -1
- nuitka/build/static_src/CompiledMethodType.c +5 -3
- nuitka/build/static_src/HelperEnvironmentVariables.c +120 -0
- nuitka/build/static_src/HelpersAttributes.c +1 -1
- nuitka/build/static_src/HelpersBuiltin.c +1 -1
- nuitka/build/static_src/HelpersChecksumTools.c +19 -4
- nuitka/build/static_src/HelpersComparisonEq.c +4 -4
- nuitka/build/static_src/HelpersComparisonNe.c +4 -4
- nuitka/build/static_src/HelpersConstantsBlob.c +40 -23
- nuitka/build/static_src/HelpersDictionaries.c +3 -1
- nuitka/build/static_src/HelpersDictionariesGenerated.c +9 -9
- nuitka/build/static_src/HelpersFilesystemPaths.c +12 -2
- nuitka/build/static_src/HelpersImport.c +29 -1
- nuitka/build/static_src/HelpersImportHard.c +19 -0
- nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +5 -4
- nuitka/build/static_src/HelpersPythonPgo.c +5 -5
- nuitka/build/static_src/HelpersSafeStrings.c +2 -1
- nuitka/build/static_src/HelpersStrings.c +12 -10
- nuitka/build/static_src/HelpersTypes.c +1 -1
- nuitka/build/static_src/InspectPatcher.c +3 -2
- nuitka/build/static_src/MainProgram.c +182 -214
- nuitka/build/static_src/MetaPathBasedLoader.c +36 -23
- nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +4 -2
- nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +38 -2
- nuitka/build/static_src/OnefileBootstrap.c +124 -93
- nuitka/code_generation/CodeGeneration.py +4 -2
- nuitka/code_generation/CodeObjectCodes.py +5 -1
- nuitka/code_generation/ConstantCodes.py +4 -0
- nuitka/code_generation/Contexts.py +111 -3
- nuitka/code_generation/DictCodes.py +5 -5
- nuitka/code_generation/FunctionCodes.py +4 -2
- nuitka/code_generation/GlobalConstants.py +10 -0
- nuitka/code_generation/ImportCodes.py +69 -33
- nuitka/code_generation/ModuleCodes.py +4 -1
- nuitka/code_generation/Namify.py +6 -5
- nuitka/code_generation/YieldCodes.py +3 -3
- nuitka/code_generation/templates/CodeTemplatesModules.py +61 -95
- nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +3 -3
- nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +2 -2
- nuitka/distutils/DistutilCommands.py +3 -0
- nuitka/finalizations/FinalizeMarkups.py +1 -1
- nuitka/freezer/DependsExe.py +2 -1
- nuitka/freezer/DllDependenciesPosix.py +11 -1
- nuitka/freezer/IncludedEntryPoints.py +54 -16
- nuitka/freezer/Onefile.py +7 -3
- nuitka/freezer/Standalone.py +39 -17
- nuitka/importing/Importing.py +195 -62
- nuitka/importing/PreloadedPackages.py +2 -1
- nuitka/importing/Recursion.py +98 -27
- nuitka/importing/StandardLibrary.py +7 -4
- nuitka/nodes/BuiltinOpenNodes.py +28 -1
- nuitka/nodes/BuiltinRangeNodes.py +2 -2
- nuitka/nodes/BuiltinSumNodes.py +1 -1
- nuitka/nodes/ChildrenHavingMixins.py +326 -2
- nuitka/nodes/HardImportNodesGenerated.py +141 -38
- nuitka/nodes/ImportHardNodes.py +0 -8
- nuitka/nodes/ImportNodes.py +267 -361
- nuitka/nodes/IterationHandles.py +36 -17
- nuitka/nodes/LocalsScopes.py +3 -1
- nuitka/nodes/NodeBases.py +8 -14
- nuitka/nodes/OperatorNodes.py +9 -9
- nuitka/nodes/OutlineNodes.py +3 -3
- nuitka/nodes/PackageMetadataNodes.py +19 -9
- nuitka/nodes/SliceNodes.py +1 -1
- nuitka/nodes/VariableAssignNodes.py +25 -15
- nuitka/nodes/VariableRefNodes.py +7 -7
- nuitka/nodes/YieldNodes.py +2 -2
- nuitka/nodes/shapes/BuiltinTypeShapes.py +81 -6
- nuitka/nodes/shapes/ShapeMixins.py +21 -0
- nuitka/nodes/shapes/StandardShapes.py +9 -3
- nuitka/optimizations/OptimizeBuiltinCalls.py +1 -1
- nuitka/optimizations/TraceCollections.py +75 -0
- nuitka/pgo/PGO.py +14 -6
- nuitka/plugins/PluginBase.py +83 -11
- nuitka/plugins/Plugins.py +78 -35
- nuitka/plugins/standard/AntiBloatPlugin.py +46 -1
- nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +1 -1
- nuitka/plugins/standard/DelvewheelPlugin.py +2 -1
- nuitka/plugins/standard/DillPlugin.py +3 -99
- nuitka/plugins/standard/DllFilesPlugin.py +45 -0
- nuitka/plugins/standard/GiPlugin.py +23 -10
- nuitka/plugins/standard/GlfwPlugin.py +1 -0
- nuitka/plugins/standard/ImplicitImports.py +267 -15
- nuitka/plugins/standard/KivyPlugin.py +1 -0
- nuitka/plugins/standard/MatplotlibPlugin.py +43 -25
- nuitka/plugins/standard/OptionsNannyPlugin.py +5 -6
- nuitka/plugins/standard/PkgResourcesPlugin.py +1 -1
- nuitka/plugins/standard/PmwPlugin.py +1 -1
- nuitka/plugins/standard/PySidePyQtPlugin.py +37 -20
- nuitka/plugins/standard/TkinterPlugin.py +44 -30
- nuitka/plugins/standard/TransformersPlugin.py +3 -1
- nuitka/plugins/standard/standard.nuitka-package.config.yml +522 -86
- nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +8 -1
- nuitka/reports/CompilationReportReader.py +53 -0
- nuitka/reports/LicenseReport.rst.j2 +4 -4
- nuitka/reports/Reports.py +129 -47
- nuitka/specs/HardImportSpecs.py +6 -0
- nuitka/tools/data_composer/DataComposer.py +29 -17
- nuitka/tools/onefile_compressor/OnefileCompressor.py +173 -110
- nuitka/tools/podman/__main__.py +17 -2
- nuitka/tools/scanning/DisplayPackageDLLs.py +11 -2
- nuitka/tools/scanning/DisplayPackageData.py +1 -1
- nuitka/tools/specialize/CTypeDescriptions.py +36 -27
- nuitka/tools/specialize/SpecializeC.py +1 -1
- nuitka/tools/specialize/SpecializePython.py +16 -0
- nuitka/tools/testing/Common.py +3 -4
- nuitka/tools/testing/OutputComparison.py +23 -0
- nuitka/tools/testing/SearchModes.py +2 -2
- nuitka/tools/testing/compare_with_cpython/__main__.py +13 -4
- nuitka/tools/testing/measure_construct_performance/__main__.py +2 -5
- nuitka/tools/watch/__main__.py +194 -56
- nuitka/tree/Building.py +8 -2
- nuitka/tree/ComplexCallHelperFunctions.py +45 -15
- nuitka/tree/ReformulationAssignmentStatements.py +18 -12
- nuitka/tree/ReformulationCallExpressions.py +1 -1
- nuitka/tree/ReformulationClasses.py +11 -5
- nuitka/tree/ReformulationClasses3.py +30 -12
- nuitka/tree/ReformulationComparisonExpressions.py +4 -2
- nuitka/tree/ReformulationContractionExpressions.py +19 -11
- nuitka/tree/ReformulationDictionaryCreation.py +9 -3
- nuitka/tree/ReformulationExecStatements.py +6 -6
- nuitka/tree/ReformulationForLoopStatements.py +5 -5
- nuitka/tree/ReformulationFunctionStatements.py +6 -2
- nuitka/tree/ReformulationImportStatements.py +7 -2
- nuitka/tree/ReformulationLambdaExpressions.py +1 -1
- nuitka/tree/ReformulationMatchStatements.py +3 -1
- nuitka/tree/ReformulationNamespacePackages.py +7 -3
- nuitka/tree/ReformulationPrintStatements.py +1 -1
- nuitka/tree/ReformulationSequenceCreation.py +18 -6
- nuitka/tree/ReformulationWithStatements.py +8 -8
- nuitka/tree/ReformulationYieldExpressions.py +2 -2
- nuitka/tree/SourceHandling.py +27 -5
- nuitka/tree/VariableClosure.py +11 -1
- nuitka/utils/AppDirs.py +2 -2
- nuitka/utils/CStrings.py +39 -3
- nuitka/utils/CommandLineOptions.py +42 -1
- nuitka/utils/Distributions.py +305 -38
- nuitka/utils/Download.py +27 -8
- nuitka/utils/FileOperations.py +103 -20
- nuitka/utils/Hashing.py +2 -3
- nuitka/utils/Importing.py +60 -3
- nuitka/utils/InstalledPythons.py +31 -36
- nuitka/utils/Jinja2.py +11 -5
- nuitka/utils/ModuleNames.py +11 -3
- nuitka/utils/ReExecute.py +7 -0
- nuitka/utils/SharedLibraries.py +38 -14
- nuitka/utils/SlotMetaClasses.py +55 -0
- nuitka/utils/Utils.py +10 -0
- nuitka/utils/Yaml.py +9 -1
- nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
- nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
- {Nuitka_winsvc-1.8.6.data → Nuitka_winsvc-1.9.3.data}/scripts/nuitka-run.bat +0 -0
- {Nuitka_winsvc-1.8.6.data → Nuitka_winsvc-1.9.3.data}/scripts/nuitka.bat +0 -0
- {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/LICENSE.txt +0 -0
- {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/entry_points.txt +0 -0
- {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 '%(
|
|
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
|
|
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 (!
|
|
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
|
-
|
|
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
|
-
|
|
160
|
-
int offset = 0;
|
|
154
|
+
int offset = Nuitka_Function_GetFunctionCodeIndex(function, function_table_%(module_identifier)s);
|
|
161
155
|
|
|
162
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 *
|
|
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 (!
|
|
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
|
-
|
|
266
|
-
|
|
267
|
-
|
|
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
|
-
|
|
276
|
-
|
|
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
|
|
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("%(
|
|
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("%(
|
|
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("%(
|
|
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("%(
|
|
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 =
|
|
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
|
-
|
|
587
|
-
|
|
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[
|
nuitka/freezer/DependsExe.py
CHANGED
|
@@ -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
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
193
|
-
% (entry_point1.dest_path, entry_point1
|
|
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():
|