Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.5.1__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.
- Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka-run.cmd +9 -9
- Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka.cmd +15 -15
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +5 -3
- Nuitka_winsvc-2.5.1.dist-info/RECORD +977 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
- nuitka/Builtins.py +49 -17
- nuitka/BytecodeCaching.py +24 -20
- nuitka/Bytecodes.py +23 -19
- nuitka/CacheCleanup.py +28 -23
- nuitka/Constants.py +19 -17
- nuitka/Errors.py +23 -17
- nuitka/HardImportRegistry.py +408 -0
- nuitka/MainControl.py +209 -116
- nuitka/ModuleRegistry.py +83 -20
- nuitka/OptionParsing.py +467 -221
- nuitka/Options.py +701 -225
- nuitka/OutputDirectories.py +47 -23
- nuitka/PostProcessing.py +133 -79
- nuitka/Progress.py +73 -24
- nuitka/PythonFlavors.py +141 -32
- nuitka/PythonOperators.py +18 -17
- nuitka/PythonVersions.py +107 -19
- nuitka/Serialization.py +70 -55
- nuitka/SourceCodeReferences.py +19 -17
- nuitka/Tracing.py +176 -70
- nuitka/TreeXML.py +31 -26
- nuitka/Variables.py +39 -41
- nuitka/Version.py +22 -8
- nuitka/__init__.py +5 -4
- nuitka/__main__.py +95 -29
- nuitka/__past__.py +44 -34
- nuitka/build/Backend.scons +243 -141
- nuitka/build/CCompilerVersion.scons +45 -31
- nuitka/build/DataComposerInterface.py +20 -17
- nuitka/build/Onefile.scons +56 -54
- nuitka/build/SconsCaching.py +105 -92
- nuitka/build/SconsCompilerSettings.py +167 -68
- nuitka/build/SconsHacks.py +25 -19
- nuitka/build/SconsInterface.py +155 -54
- nuitka/build/SconsProgress.py +19 -18
- nuitka/build/SconsSpawn.py +62 -33
- nuitka/build/SconsUtils.py +152 -55
- nuitka/build/__init__.py +5 -4
- nuitka/build/include/nuitka/allocator.h +228 -22
- nuitka/build/include/nuitka/builtins.h +17 -17
- nuitka/build/include/nuitka/calling.h +24 -24
- nuitka/build/include/nuitka/checkers.h +17 -18
- nuitka/build/include/nuitka/checksum_tools.h +14 -19
- nuitka/build/include/nuitka/compiled_asyncgen.h +28 -25
- nuitka/build/include/nuitka/compiled_cell.h +33 -18
- nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
- nuitka/build/include/nuitka/compiled_frame.h +93 -54
- nuitka/build/include/nuitka/compiled_function.h +42 -20
- nuitka/build/include/nuitka/compiled_generator.h +24 -18
- nuitka/build/include/nuitka/compiled_method.h +17 -18
- nuitka/build/include/nuitka/constants.h +35 -18
- nuitka/build/include/nuitka/constants_blob.h +17 -17
- nuitka/build/include/nuitka/debug_settings.h +60 -0
- nuitka/build/include/nuitka/environment_variables.h +30 -0
- nuitka/build/include/nuitka/environment_variables_system.h +45 -0
- nuitka/build/include/nuitka/exception_groups.h +23 -26
- nuitka/build/include/nuitka/exceptions.h +717 -171
- nuitka/build/include/nuitka/filesystem_paths.h +26 -20
- nuitka/build/include/nuitka/freelists.h +38 -18
- nuitka/build/include/nuitka/helper/attributes.h +24 -22
- nuitka/build/include/nuitka/helper/boolean.h +17 -17
- nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
- nuitka/build/include/nuitka/helper/bytes.h +14 -15
- nuitka/build/include/nuitka/helper/calling_generated.h +69 -69
- nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
- nuitka/build/include/nuitka/helper/complex.h +17 -17
- nuitka/build/include/nuitka/helper/dictionaries.h +89 -51
- nuitka/build/include/nuitka/helper/floats.h +17 -18
- nuitka/build/include/nuitka/helper/import_hard.h +25 -17
- nuitka/build/include/nuitka/helper/indexes.h +17 -18
- nuitka/build/include/nuitka/helper/ints.h +115 -54
- nuitka/build/include/nuitka/helper/iterators.h +99 -51
- nuitka/build/include/nuitka/helper/lists.h +26 -24
- nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
- nuitka/build/include/nuitka/helper/mappings.h +17 -18
- nuitka/build/include/nuitka/helper/operations.h +20 -17
- nuitka/build/include/nuitka/helper/operations_binary_add.h +23 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
- nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_sub.h +23 -17
- nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_add.h +20 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_sub.h +20 -17
- nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
- nuitka/build/include/nuitka/helper/raising.h +68 -37
- nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
- nuitka/build/include/nuitka/helper/richcomparisons.h +21 -14
- nuitka/build/include/nuitka/helper/sequences.h +19 -13
- nuitka/build/include/nuitka/helper/sets.h +11 -12
- nuitka/build/include/nuitka/helper/slices.h +31 -25
- nuitka/build/include/nuitka/helper/strings.h +16 -17
- nuitka/build/include/nuitka/helper/subscripts.h +18 -201
- nuitka/build/include/nuitka/helper/tuples.h +64 -52
- nuitka/build/include/nuitka/helpers.h +50 -22
- nuitka/build/include/nuitka/importing.h +28 -21
- nuitka/build/include/nuitka/jit_sources.h +25 -0
- nuitka/build/include/nuitka/prelude.h +163 -71
- nuitka/build/include/nuitka/printing.h +29 -22
- nuitka/build/include/nuitka/python_pgo.h +19 -18
- nuitka/build/include/nuitka/safe_string_ops.h +20 -18
- nuitka/build/include/nuitka/threading.h +45 -32
- nuitka/build/include/nuitka/tracing.h +28 -18
- nuitka/build/include/nuitka/type_aliases.h +30 -0
- nuitka/build/include/nuitka/unfreezing.h +29 -23
- nuitka/build/inline_copy/bin/scons.py +14 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
- nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
- nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
- nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
- nuitka/build/inline_copy/stubgen/six.py +998 -0
- nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
- nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
- nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
- nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
- nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -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 +221 -221
- nuitka/build/static_src/CompiledCellType.c +69 -44
- nuitka/build/static_src/CompiledCodeHelpers.c +276 -159
- nuitka/build/static_src/CompiledCoroutineType.c +229 -226
- nuitka/build/static_src/CompiledFrameType.c +323 -138
- nuitka/build/static_src/CompiledFunctionType.c +547 -231
- nuitka/build/static_src/CompiledGeneratorType.c +416 -290
- nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +593 -228
- nuitka/build/static_src/CompiledMethodType.c +91 -82
- nuitka/build/static_src/HelpersAllocator.c +352 -45
- nuitka/build/static_src/HelpersAttributes.c +30 -72
- nuitka/build/static_src/HelpersBuiltin.c +65 -46
- nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
- nuitka/build/static_src/HelpersBytes.c +19 -20
- nuitka/build/static_src/HelpersCalling.c +40 -37
- nuitka/build/static_src/HelpersCallingGenerated.c +1061 -242
- nuitka/build/static_src/HelpersChecksumTools.c +35 -21
- nuitka/build/static_src/HelpersClasses.c +17 -17
- nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
- nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
- nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
- nuitka/build/static_src/HelpersComparisonEq.c +536 -496
- nuitka/build/static_src/HelpersComparisonEqUtils.c +22 -19
- nuitka/build/static_src/HelpersComparisonGe.c +531 -501
- nuitka/build/static_src/HelpersComparisonGt.c +530 -500
- nuitka/build/static_src/HelpersComparisonLe.c +531 -501
- nuitka/build/static_src/HelpersComparisonLt.c +530 -500
- nuitka/build/static_src/HelpersComparisonNe.c +538 -496
- nuitka/build/static_src/HelpersConsole.c +122 -0
- nuitka/build/static_src/HelpersConstantsBlob.c +550 -521
- nuitka/build/static_src/HelpersDeepcopy.c +33 -33
- nuitka/build/static_src/HelpersDictionaries.c +232 -63
- nuitka/build/static_src/HelpersDictionariesGenerated.c +130 -127
- nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
- nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
- nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
- nuitka/build/static_src/HelpersExceptions.c +147 -62
- nuitka/build/static_src/HelpersFiles.c +116 -22
- nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
- nuitka/build/static_src/HelpersFloats.c +37 -31
- nuitka/build/static_src/HelpersHeapStorage.c +21 -17
- nuitka/build/static_src/HelpersImport.c +61 -29
- nuitka/build/static_src/HelpersImportHard.c +74 -61
- nuitka/build/static_src/HelpersJitSources.c +46 -0
- nuitka/build/static_src/HelpersLists.c +237 -58
- nuitka/build/static_src/HelpersListsGenerated.c +41 -41
- nuitka/build/static_src/HelpersMappings.c +17 -17
- nuitka/build/static_src/HelpersMatching.c +137 -51
- nuitka/build/static_src/HelpersOperationBinaryAdd.c +397 -152
- nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +102 -52
- nuitka/build/static_src/HelpersOperationBinaryBitand.c +55 -55
- nuitka/build/static_src/HelpersOperationBinaryBitor.c +55 -55
- nuitka/build/static_src/HelpersOperationBinaryBitxor.c +55 -55
- nuitka/build/static_src/HelpersOperationBinaryDivmod.c +49 -43
- nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
- nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
- nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +55 -49
- nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
- nuitka/build/static_src/HelpersOperationBinaryLshift.c +83 -83
- nuitka/build/static_src/HelpersOperationBinaryMatmult.c +25 -24
- nuitka/build/static_src/HelpersOperationBinaryMod.c +129 -117
- nuitka/build/static_src/HelpersOperationBinaryMult.c +98 -82
- nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
- nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +55 -49
- nuitka/build/static_src/HelpersOperationBinaryPow.c +68 -68
- nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
- nuitka/build/static_src/HelpersOperationBinaryRshift.c +51 -51
- nuitka/build/static_src/HelpersOperationBinarySub.c +309 -88
- nuitka/build/static_src/HelpersOperationBinaryTruediv.c +49 -43
- nuitka/build/static_src/HelpersOperationInplaceAdd.c +333 -163
- nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
- nuitka/build/static_src/HelpersOperationInplaceBitand.c +58 -58
- nuitka/build/static_src/HelpersOperationInplaceBitor.c +58 -58
- nuitka/build/static_src/HelpersOperationInplaceBitxor.c +58 -58
- nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +73 -68
- nuitka/build/static_src/HelpersOperationInplaceLshift.c +64 -64
- nuitka/build/static_src/HelpersOperationInplaceMatmult.c +38 -37
- nuitka/build/static_src/HelpersOperationInplaceMod.c +145 -140
- nuitka/build/static_src/HelpersOperationInplaceMult.c +89 -84
- nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +73 -68
- nuitka/build/static_src/HelpersOperationInplacePow.c +82 -82
- nuitka/build/static_src/HelpersOperationInplaceRshift.c +48 -48
- nuitka/build/static_src/HelpersOperationInplaceSub.c +275 -122
- nuitka/build/static_src/HelpersOperationInplaceTruediv.c +68 -63
- nuitka/build/static_src/HelpersProfiling.c +25 -24
- nuitka/build/static_src/HelpersPythonPgo.c +22 -22
- nuitka/build/static_src/HelpersRaising.c +296 -283
- nuitka/build/static_src/HelpersSafeStrings.c +34 -22
- nuitka/build/static_src/HelpersSequences.c +18 -19
- nuitka/build/static_src/HelpersSlices.c +29 -23
- nuitka/build/static_src/HelpersStrings.c +235 -38
- nuitka/build/static_src/HelpersTuples.c +46 -34
- nuitka/build/static_src/HelpersTypes.c +166 -25
- nuitka/build/static_src/InspectPatcher.c +108 -27
- nuitka/build/static_src/MainProgram.c +464 -280
- nuitka/build/static_src/MetaPathBasedLoader.c +381 -257
- nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
- nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
- nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +227 -29
- nuitka/build/static_src/OnefileBootstrap.c +281 -164
- nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
- nuitka/code_generation/AsyncgenCodes.py +21 -23
- nuitka/code_generation/AttributeCodes.py +31 -27
- nuitka/code_generation/BinaryOperationHelperDefinitions.py +290 -184
- nuitka/code_generation/BranchCodes.py +19 -17
- nuitka/code_generation/BuiltinCodes.py +29 -18
- nuitka/code_generation/CallCodes.py +35 -33
- nuitka/code_generation/ClassCodes.py +19 -17
- nuitka/code_generation/CodeGeneration.py +61 -28
- nuitka/code_generation/CodeHelperSelection.py +20 -18
- nuitka/code_generation/CodeHelpers.py +28 -21
- nuitka/code_generation/CodeObjectCodes.py +36 -26
- nuitka/code_generation/ComparisonCodes.py +51 -22
- nuitka/code_generation/ComparisonHelperDefinitions.py +42 -25
- nuitka/code_generation/ConditionalCodes.py +19 -17
- nuitka/code_generation/ConstantCodes.py +82 -28
- nuitka/code_generation/Contexts.py +180 -42
- nuitka/code_generation/CoroutineCodes.py +21 -23
- nuitka/code_generation/CtypesCodes.py +19 -17
- nuitka/code_generation/DictCodes.py +28 -26
- nuitka/code_generation/Emission.py +21 -18
- nuitka/code_generation/ErrorCodes.py +57 -79
- nuitka/code_generation/EvalCodes.py +24 -20
- nuitka/code_generation/ExceptionCodes.py +182 -104
- nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +45 -27
- nuitka/code_generation/ExpressionCodes.py +19 -17
- nuitka/code_generation/FrameCodes.py +28 -31
- nuitka/code_generation/FunctionCodes.py +26 -27
- nuitka/code_generation/GeneratorCodes.py +25 -26
- nuitka/code_generation/GlobalConstants.py +51 -25
- nuitka/code_generation/GlobalsLocalsCodes.py +23 -21
- nuitka/code_generation/IdCodes.py +19 -17
- nuitka/code_generation/ImportCodes.py +90 -50
- nuitka/code_generation/Indentation.py +23 -22
- nuitka/code_generation/IndexCodes.py +19 -17
- nuitka/code_generation/InjectCCodes.py +14 -12
- nuitka/code_generation/IntegerCodes.py +19 -17
- nuitka/code_generation/IteratorCodes.py +86 -71
- nuitka/code_generation/JitCodes.py +44 -0
- nuitka/code_generation/LabelCodes.py +19 -17
- nuitka/code_generation/LineNumberCodes.py +20 -20
- nuitka/code_generation/ListCodes.py +32 -36
- nuitka/code_generation/LoaderCodes.py +22 -17
- nuitka/code_generation/LocalsDictCodes.py +56 -32
- nuitka/code_generation/LoopCodes.py +19 -17
- nuitka/code_generation/MatchCodes.py +42 -22
- nuitka/code_generation/ModuleCodes.py +71 -29
- nuitka/code_generation/Namify.py +27 -23
- nuitka/code_generation/NetworkxCodes.py +51 -0
- nuitka/code_generation/OperationCodes.py +80 -51
- nuitka/code_generation/PackageResourceCodes.py +96 -23
- nuitka/code_generation/PrintCodes.py +19 -17
- nuitka/code_generation/PythonAPICodes.py +19 -17
- nuitka/code_generation/RaisingCodes.py +183 -107
- nuitka/code_generation/Reports.py +32 -22
- nuitka/code_generation/ReturnCodes.py +20 -32
- nuitka/code_generation/SetCodes.py +19 -17
- nuitka/code_generation/SliceCodes.py +22 -20
- nuitka/code_generation/StringCodes.py +19 -17
- nuitka/code_generation/SubscriptCodes.py +24 -30
- nuitka/code_generation/TensorflowCodes.py +54 -0
- nuitka/code_generation/TryCodes.py +31 -41
- nuitka/code_generation/TupleCodes.py +20 -18
- nuitka/code_generation/TypeAliasCodes.py +119 -0
- nuitka/code_generation/VariableCodes.py +118 -55
- nuitka/code_generation/VariableDeclarations.py +28 -25
- nuitka/code_generation/YieldCodes.py +23 -21
- nuitka/code_generation/__init__.py +5 -4
- nuitka/code_generation/c_types/CTypeBases.py +29 -19
- nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
- nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
- nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
- nuitka/code_generation/c_types/CTypeModuleDictVariables.py +22 -17
- nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +22 -21
- nuitka/code_generation/c_types/CTypeNuitkaInts.py +89 -43
- nuitka/code_generation/c_types/CTypeNuitkaVoids.py +20 -18
- nuitka/code_generation/c_types/CTypePyObjectPointers.py +43 -31
- nuitka/code_generation/c_types/CTypeVoids.py +20 -17
- nuitka/code_generation/c_types/__init__.py +5 -4
- nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +20 -19
- nuitka/code_generation/templates/CodeTemplatesConstants.py +143 -39
- nuitka/code_generation/templates/CodeTemplatesCoroutines.py +20 -19
- nuitka/code_generation/templates/CodeTemplatesExceptions.py +33 -33
- nuitka/code_generation/templates/CodeTemplatesFrames.py +36 -27
- nuitka/code_generation/templates/CodeTemplatesFunction.py +20 -19
- nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +21 -19
- nuitka/code_generation/templates/CodeTemplatesIterators.py +19 -53
- nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
- nuitka/code_generation/templates/CodeTemplatesModules.py +278 -169
- nuitka/code_generation/templates/CodeTemplatesVariables.py +115 -27
- nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
- nuitka/code_generation/templates/__init__.py +5 -4
- nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
- nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +21 -21
- nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +79 -28
- nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
- nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
- nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
- nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +74 -106
- nuitka/code_generation/templates_c/HelperImportHard.c.j2 +19 -20
- nuitka/code_generation/templates_c/HelperLongTools.c.j2 +19 -19
- nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
- nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
- nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
- nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
- nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +37 -37
- nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
- nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +50 -38
- nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +27 -27
- nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +37 -37
- nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +31 -31
- nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +35 -31
- nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
- nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +28 -28
- nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +48 -48
- nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
- nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +27 -25
- nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
- nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
- nuitka/containers/Namedtuples.py +25 -18
- nuitka/containers/OrderedSets.py +105 -5
- nuitka/containers/OrderedSetsFallback.py +19 -17
- nuitka/containers/__init__.py +5 -4
- nuitka/distutils/Build.py +33 -18
- nuitka/distutils/DistutilCommands.py +84 -33
- nuitka/distutils/__init__.py +5 -4
- nuitka/finalizations/Finalization.py +21 -18
- nuitka/finalizations/FinalizeMarkups.py +31 -55
- nuitka/finalizations/__init__.py +5 -4
- nuitka/freezer/DependsExe.py +60 -30
- nuitka/freezer/DllDependenciesCommon.py +47 -20
- nuitka/freezer/DllDependenciesMacOS.py +165 -58
- nuitka/freezer/DllDependenciesPosix.py +29 -19
- nuitka/freezer/DllDependenciesWin32.py +55 -33
- nuitka/freezer/ImportDetection.py +23 -17
- nuitka/freezer/IncludedDataFiles.py +142 -48
- nuitka/freezer/IncludedEntryPoints.py +104 -39
- nuitka/freezer/Onefile.py +32 -22
- nuitka/freezer/Standalone.py +166 -53
- nuitka/freezer/__init__.py +5 -4
- nuitka/importing/IgnoreListing.py +19 -17
- nuitka/importing/ImportCache.py +24 -21
- nuitka/importing/ImportResolving.py +103 -95
- nuitka/importing/Importing.py +319 -98
- nuitka/importing/PreloadedPackages.py +21 -18
- nuitka/importing/Recursion.py +142 -47
- nuitka/importing/StandardLibrary.py +96 -80
- nuitka/importing/__init__.py +5 -4
- nuitka/nodes/AsyncgenNodes.py +22 -23
- nuitka/nodes/AttributeLookupNodes.py +19 -17
- nuitka/nodes/AttributeNodes.py +19 -17
- nuitka/nodes/AttributeNodesGenerated.py +49 -24
- nuitka/nodes/BuiltinAllNodes.py +19 -17
- nuitka/nodes/BuiltinAnyNodes.py +19 -17
- nuitka/nodes/BuiltinComplexNodes.py +20 -17
- nuitka/nodes/BuiltinDecodingNodes.py +19 -17
- nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
- nuitka/nodes/BuiltinDictNodes.py +19 -17
- nuitka/nodes/BuiltinFormatNodes.py +20 -17
- nuitka/nodes/BuiltinHashNodes.py +19 -17
- nuitka/nodes/BuiltinInputNodes.py +19 -17
- nuitka/nodes/BuiltinIntegerNodes.py +19 -17
- nuitka/nodes/BuiltinIteratorNodes.py +25 -21
- nuitka/nodes/BuiltinLenNodes.py +19 -17
- nuitka/nodes/BuiltinNextNodes.py +19 -17
- nuitka/nodes/BuiltinOpenNodes.py +52 -18
- nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
- nuitka/nodes/BuiltinRangeNodes.py +21 -19
- nuitka/nodes/BuiltinRefNodes.py +73 -40
- nuitka/nodes/BuiltinSumNodes.py +20 -18
- nuitka/nodes/BuiltinTypeNodes.py +19 -17
- nuitka/nodes/BuiltinVarsNodes.py +19 -18
- nuitka/nodes/BytesNodes.py +19 -17
- nuitka/nodes/CallNodes.py +19 -17
- nuitka/nodes/Checkers.py +19 -17
- nuitka/nodes/ChildrenHavingMixins.py +1624 -283
- nuitka/nodes/ClassNodes.py +49 -29
- nuitka/nodes/CodeObjectSpecs.py +29 -18
- nuitka/nodes/ComparisonNodes.py +19 -17
- nuitka/nodes/ConditionalNodes.py +24 -25
- nuitka/nodes/ConstantRefNodes.py +57 -17
- nuitka/nodes/ContainerMakingNodes.py +19 -17
- nuitka/nodes/ContainerOperationNodes.py +19 -17
- nuitka/nodes/CoroutineNodes.py +22 -23
- nuitka/nodes/CtypesNodes.py +19 -18
- nuitka/nodes/DictionaryNodes.py +19 -18
- nuitka/nodes/ExceptionNodes.py +131 -43
- nuitka/nodes/ExecEvalNodes.py +19 -17
- nuitka/nodes/ExpressionBases.py +34 -26
- nuitka/nodes/ExpressionBasesGenerated.py +341 -35
- nuitka/nodes/ExpressionShapeMixins.py +19 -17
- nuitka/nodes/FrameNodes.py +41 -28
- nuitka/nodes/FunctionAttributeNodes.py +19 -17
- nuitka/nodes/FunctionNodes.py +84 -38
- nuitka/nodes/FutureSpecs.py +35 -20
- nuitka/nodes/GeneratorNodes.py +24 -25
- nuitka/nodes/GlobalsLocalsNodes.py +22 -17
- nuitka/nodes/HardImportNodesGenerated.py +746 -148
- nuitka/nodes/ImportHardNodes.py +46 -38
- nuitka/nodes/ImportNodes.py +438 -448
- nuitka/nodes/IndicatorMixins.py +19 -17
- nuitka/nodes/InjectCNodes.py +19 -18
- nuitka/nodes/IterationHandles.py +55 -34
- nuitka/nodes/KeyValuePairNodes.py +19 -17
- nuitka/nodes/ListOperationNodes.py +33 -21
- nuitka/nodes/LocalsDictNodes.py +19 -17
- nuitka/nodes/LocalsScopes.py +41 -41
- nuitka/nodes/LoopNodes.py +28 -17
- nuitka/nodes/MatchNodes.py +37 -24
- nuitka/nodes/ModuleAttributeNodes.py +18 -35
- nuitka/nodes/ModuleNodes.py +90 -31
- nuitka/nodes/NetworkxNodes.py +45 -0
- nuitka/nodes/NodeBases.py +73 -44
- nuitka/nodes/NodeMakingHelpers.py +92 -69
- nuitka/nodes/NodeMetaClasses.py +45 -28
- nuitka/nodes/OperatorNodes.py +28 -26
- nuitka/nodes/OperatorNodesUnary.py +148 -20
- nuitka/nodes/OsSysNodes.py +97 -18
- nuitka/nodes/OutlineNodes.py +24 -22
- nuitka/nodes/PackageMetadataNodes.py +37 -27
- nuitka/nodes/PackageResourceNodes.py +29 -23
- nuitka/nodes/PrintNodes.py +19 -17
- nuitka/nodes/ReturnNodes.py +20 -18
- nuitka/nodes/SideEffectNodes.py +19 -17
- nuitka/nodes/SliceNodes.py +20 -18
- nuitka/nodes/StatementBasesGenerated.py +125 -79
- nuitka/nodes/StatementNodes.py +27 -24
- nuitka/nodes/StrNodes.py +19 -17
- nuitka/nodes/StringConcatenationNodes.py +20 -17
- nuitka/nodes/SubscriptNodes.py +27 -25
- nuitka/nodes/TensorflowNodes.py +38 -0
- nuitka/nodes/TryNodes.py +19 -17
- nuitka/nodes/TypeMatchNodes.py +19 -17
- nuitka/nodes/TypeNodes.py +68 -18
- nuitka/nodes/VariableAssignNodes.py +122 -64
- nuitka/nodes/VariableDelNodes.py +19 -17
- nuitka/nodes/VariableNameNodes.py +19 -17
- nuitka/nodes/VariableRefNodes.py +63 -26
- nuitka/nodes/VariableReleaseNodes.py +19 -17
- nuitka/nodes/YieldNodes.py +21 -19
- nuitka/nodes/__init__.py +5 -4
- nuitka/nodes/shapes/BuiltinTypeShapes.py +169 -46
- nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
- nuitka/nodes/shapes/ShapeMixins.py +57 -17
- nuitka/nodes/shapes/StandardShapes.py +80 -21
- nuitka/nodes/shapes/__init__.py +5 -4
- nuitka/optimizations/BytecodeDemotion.py +21 -18
- nuitka/optimizations/FunctionInlining.py +22 -23
- nuitka/optimizations/Graphs.py +19 -17
- nuitka/optimizations/Optimization.py +39 -35
- nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
- nuitka/optimizations/Tags.py +19 -18
- nuitka/optimizations/TraceCollections.py +67 -24
- nuitka/optimizations/ValueTraces.py +92 -25
- nuitka/optimizations/__init__.py +5 -4
- nuitka/pgo/PGO.py +33 -23
- nuitka/pgo/__init__.py +5 -4
- nuitka/plugins/PluginBase.py +655 -112
- nuitka/plugins/Plugins.py +247 -61
- nuitka/plugins/YamlPluginBase.py +121 -0
- nuitka/plugins/__init__.py +5 -4
- nuitka/plugins/standard/AntiBloatPlugin.py +374 -135
- nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
- nuitka/plugins/standard/DataFilesPlugin.py +65 -29
- nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
- nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
- nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
- nuitka/plugins/standard/DillPlugin.py +42 -134
- nuitka/plugins/standard/DllFilesPlugin.py +125 -42
- nuitka/plugins/standard/EnumPlugin.py +19 -17
- nuitka/plugins/standard/EventletPlugin.py +19 -17
- nuitka/plugins/standard/GeventPlugin.py +19 -17
- nuitka/plugins/standard/GiPlugin.py +44 -28
- nuitka/plugins/standard/GlfwPlugin.py +20 -17
- nuitka/plugins/standard/ImplicitImports.py +403 -54
- nuitka/plugins/standard/KivyPlugin.py +24 -20
- nuitka/plugins/standard/MatplotlibPlugin.py +99 -42
- nuitka/plugins/standard/MultiprocessingPlugin.py +35 -39
- nuitka/plugins/standard/NumpyPlugin.py +19 -17
- nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
- nuitka/plugins/standard/PbrPlugin.py +21 -19
- nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
- nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
- nuitka/plugins/standard/PmwPlugin.py +30 -27
- nuitka/plugins/standard/PySidePyQtPlugin.py +82 -80
- nuitka/plugins/standard/PywebViewPlugin.py +19 -17
- nuitka/plugins/standard/SpacyPlugin.py +136 -0
- nuitka/plugins/standard/TensorflowPlugin.py +20 -17
- nuitka/plugins/standard/TkinterPlugin.py +102 -108
- nuitka/plugins/standard/TorchPlugin.py +20 -17
- nuitka/plugins/standard/TransformersPlugin.py +90 -231
- nuitka/plugins/standard/TrioPlugin.py +18 -15
- nuitka/plugins/standard/UpxPlugin.py +21 -19
- nuitka/plugins/standard/__init__.py +5 -4
- nuitka/plugins/standard/standard.nuitka-package.config.yml +3925 -1293
- nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
- nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +154 -66
- nuitka/reports/CompilationReportReader.py +79 -0
- nuitka/reports/LicenseReport.rst.j2 +21 -21
- nuitka/reports/Reports.py +363 -76
- nuitka/reports/__init__.py +5 -4
- nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
- nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
- nuitka/specs/BuiltinListOperationSpecs.py +18 -17
- nuitka/specs/BuiltinParameterSpecs.py +35 -21
- nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
- nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
- nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
- nuitka/specs/HardImportSpecs.py +74 -22
- nuitka/specs/ParameterSpecs.py +60 -45
- nuitka/specs/__init__.py +5 -4
- nuitka/tools/Basics.py +20 -18
- nuitka/tools/__init__.py +5 -4
- nuitka/tools/commercial/__init__.py +7 -6
- nuitka/tools/data_composer/DataComposer.py +78 -62
- nuitka/tools/data_composer/__init__.py +5 -4
- nuitka/tools/data_composer/__main__.py +18 -17
- nuitka/tools/environments/CreateEnvironment.py +20 -17
- nuitka/tools/environments/Virtualenv.py +60 -32
- nuitka/tools/environments/__init__.py +5 -4
- nuitka/tools/general/__init__.py +5 -4
- nuitka/tools/general/dll_report/__init__.py +5 -4
- nuitka/tools/general/dll_report/__main__.py +29 -22
- nuitka/tools/general/find_module/FindModuleCode.py +35 -22
- nuitka/tools/general/find_module/__init__.py +5 -4
- nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
- nuitka/tools/onefile_compressor/__init__.py +5 -4
- nuitka/tools/onefile_compressor/__main__.py +18 -17
- nuitka/tools/podman/Podman.py +19 -17
- nuitka/tools/podman/__init__.py +5 -4
- nuitka/tools/podman/__main__.py +35 -19
- nuitka/tools/profiler/__init__.py +5 -4
- nuitka/tools/profiler/__main__.py +18 -17
- nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
- nuitka/tools/scanning/DisplayPackageData.py +31 -19
- nuitka/tools/scanning/__init__.py +5 -4
- nuitka/tools/specialize/CTypeDescriptions.py +251 -80
- nuitka/tools/specialize/Common.py +18 -17
- nuitka/tools/specialize/SpecializeC.py +248 -82
- nuitka/tools/specialize/SpecializePython.py +108 -45
- nuitka/tools/specialize/__init__.py +5 -4
- nuitka/tools/testing/Common.py +175 -114
- nuitka/tools/testing/Constructs.py +19 -17
- nuitka/tools/testing/OutputComparison.py +54 -18
- nuitka/tools/testing/Pythons.py +19 -18
- nuitka/tools/testing/RuntimeTracing.py +20 -19
- nuitka/tools/testing/SearchModes.py +26 -20
- nuitka/tools/testing/Valgrind.py +19 -17
- nuitka/tools/testing/__init__.py +5 -4
- nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
- nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
- nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
- nuitka/tools/testing/compare_with_cpython/__main__.py +39 -30
- nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
- nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
- nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
- nuitka/tools/testing/measure_construct_performance/__main__.py +23 -33
- nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
- nuitka/tools/testing/run_nuitka_tests/__main__.py +134 -51
- nuitka/tools/watch/AutoStage.py +145 -0
- nuitka/tools/watch/GitHub.py +113 -0
- nuitka/tools/watch/__init__.py +5 -4
- nuitka/tools/watch/__main__.py +322 -91
- nuitka/tree/Building.py +184 -182
- nuitka/tree/ComplexCallHelperFunctions.py +84 -58
- nuitka/tree/Extractions.py +19 -17
- nuitka/tree/InternalModule.py +29 -20
- nuitka/tree/Operations.py +19 -17
- nuitka/tree/ReformulationAssertStatements.py +51 -31
- nuitka/tree/ReformulationAssignmentStatements.py +96 -91
- nuitka/tree/ReformulationBooleanExpressions.py +19 -17
- nuitka/tree/ReformulationCallExpressions.py +20 -18
- nuitka/tree/ReformulationClasses.py +45 -39
- nuitka/tree/ReformulationClasses3.py +239 -116
- nuitka/tree/ReformulationComparisonExpressions.py +29 -35
- nuitka/tree/ReformulationContractionExpressions.py +58 -55
- nuitka/tree/ReformulationDictionaryCreation.py +41 -35
- nuitka/tree/ReformulationExecStatements.py +42 -39
- nuitka/tree/ReformulationForLoopStatements.py +30 -34
- nuitka/tree/ReformulationFunctionStatements.py +59 -55
- nuitka/tree/ReformulationImportStatements.py +34 -29
- nuitka/tree/ReformulationLambdaExpressions.py +23 -24
- nuitka/tree/ReformulationMatchStatements.py +246 -92
- nuitka/tree/ReformulationMultidist.py +22 -18
- nuitka/tree/ReformulationNamespacePackages.py +55 -46
- nuitka/tree/ReformulationPrintStatements.py +23 -24
- nuitka/tree/ReformulationSequenceCreation.py +50 -49
- nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
- nuitka/tree/ReformulationTryExceptStatements.py +19 -17
- nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
- nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
- nuitka/tree/ReformulationWithStatements.py +39 -41
- nuitka/tree/ReformulationYieldExpressions.py +44 -24
- nuitka/tree/SourceHandling.py +76 -31
- nuitka/tree/SyntaxErrors.py +19 -17
- nuitka/tree/TreeHelpers.py +33 -20
- nuitka/tree/VariableClosure.py +35 -39
- nuitka/tree/__init__.py +5 -4
- nuitka/utils/AppDirs.py +41 -20
- nuitka/utils/CStrings.py +66 -21
- nuitka/utils/CommandLineOptions.py +111 -22
- nuitka/utils/Distributions.py +445 -54
- nuitka/utils/Download.py +89 -57
- nuitka/utils/Execution.py +102 -58
- nuitka/utils/FileOperations.py +357 -128
- nuitka/utils/Hashing.py +55 -33
- nuitka/utils/Images.py +26 -19
- nuitka/utils/Importing.py +119 -37
- nuitka/utils/InlineCopies.py +52 -0
- nuitka/utils/InstalledPythons.py +85 -75
- nuitka/utils/InstanceCounters.py +20 -17
- nuitka/utils/Jinja2.py +30 -22
- nuitka/utils/Json.py +21 -19
- nuitka/utils/MacOSApp.py +26 -18
- nuitka/utils/MemoryUsage.py +20 -18
- nuitka/utils/ModuleNames.py +42 -26
- nuitka/utils/PackageResources.py +44 -0
- nuitka/utils/ReExecute.py +50 -28
- nuitka/utils/Rest.py +20 -17
- nuitka/utils/SharedLibraries.py +161 -75
- nuitka/utils/Shebang.py +20 -17
- nuitka/utils/Signing.py +63 -18
- nuitka/utils/SlotMetaClasses.py +57 -0
- nuitka/utils/StaticLibraries.py +83 -56
- nuitka/utils/ThreadedExecutor.py +18 -17
- nuitka/utils/Timing.py +22 -20
- nuitka/utils/Utils.py +132 -25
- nuitka/utils/WindowsFileUsage.py +22 -20
- nuitka/utils/WindowsResources.py +25 -18
- nuitka/utils/Yaml.py +62 -24
- nuitka/utils/__init__.py +5 -4
- Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
- 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.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/top_level.txt +0 -0
|
@@ -1,20 +1,5 @@
|
|
|
1
|
-
// Copyright
|
|
2
|
-
|
|
3
|
-
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
4
|
-
// integrates with CPython, but also works on its own.
|
|
5
|
-
//
|
|
6
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
// you may not use this file except in compliance with the License.
|
|
8
|
-
// You may obtain a copy of the License at
|
|
9
|
-
//
|
|
10
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
//
|
|
12
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
// See the License for the specific language governing permissions and
|
|
16
|
-
// limitations under the License.
|
|
17
|
-
//
|
|
1
|
+
// Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
2
|
+
|
|
18
3
|
/* The main program for a compiled program.
|
|
19
4
|
*
|
|
20
5
|
* It needs to prepare the interpreter and then loads and executes
|
|
@@ -23,7 +8,7 @@
|
|
|
23
8
|
* For multiprocessing, joblib, loky there is things here that will
|
|
24
9
|
* allow them to fork properly with their intended entry points.
|
|
25
10
|
*
|
|
26
|
-
* spell-checker: ignore joblib loky
|
|
11
|
+
* spell-checker: ignore joblib loky anyio platlibdir
|
|
27
12
|
*
|
|
28
13
|
*/
|
|
29
14
|
|
|
@@ -47,10 +32,10 @@
|
|
|
47
32
|
#define SYSFLAG_BYTES_WARNING 0
|
|
48
33
|
#define SYSFLAG_UTF8 0
|
|
49
34
|
#define SYSFLAG_UNBUFFERED 0
|
|
50
|
-
#
|
|
51
|
-
|
|
52
|
-
#ifndef NUITKA_MAIN_MODULE_NAME
|
|
35
|
+
#define SYSFLAG_DONTWRITEBYTECODE 0
|
|
53
36
|
#define NUITKA_MAIN_MODULE_NAME "__main__"
|
|
37
|
+
#define NUITKA_MAIN_IS_PACKAGE_BOOL false
|
|
38
|
+
#define _NUITKA_ATTACH_CONSOLE_WINDOW 1
|
|
54
39
|
#endif
|
|
55
40
|
|
|
56
41
|
// It doesn't work for MinGW64 to update the standard output handles early on,
|
|
@@ -65,7 +50,11 @@
|
|
|
65
50
|
#define NUITKA_STANDARD_HANDLES_EARLY 0
|
|
66
51
|
#endif
|
|
67
52
|
|
|
68
|
-
|
|
53
|
+
#if defined(_WIN32) && (defined(_NUITKA_ATTACH_CONSOLE_WINDOW) || defined(_NUITKA_HIDE_CONSOLE_WINDOW))
|
|
54
|
+
#include "HelpersConsole.c"
|
|
55
|
+
#endif
|
|
56
|
+
|
|
57
|
+
extern PyCodeObject *code_objects_main;
|
|
69
58
|
|
|
70
59
|
/* For later use in "Py_GetArgcArgv" we expose the needed value */
|
|
71
60
|
#if PYTHON_VERSION >= 0x300
|
|
@@ -79,13 +68,13 @@ static int orig_argc;
|
|
|
79
68
|
extern void copyFrozenModulesTo(struct _frozen *destination);
|
|
80
69
|
|
|
81
70
|
// The original frozen modules list.
|
|
82
|
-
#if PYTHON_VERSION <
|
|
71
|
+
#if PYTHON_VERSION < 0x300
|
|
83
72
|
static struct _frozen *old_frozen = NULL;
|
|
84
73
|
#else
|
|
85
74
|
static struct _frozen const *old_frozen = NULL;
|
|
86
75
|
#endif
|
|
87
76
|
|
|
88
|
-
static void prepareFrozenModules() {
|
|
77
|
+
static void prepareFrozenModules(void) {
|
|
89
78
|
// Tell the CPython library to use our pre-compiled modules as frozen
|
|
90
79
|
// modules. This for those modules/packages like "encoding" that will be
|
|
91
80
|
// loaded during "Py_Initialize" already, for the others they may be
|
|
@@ -118,112 +107,7 @@ static void prepareFrozenModules() {
|
|
|
118
107
|
}
|
|
119
108
|
#endif
|
|
120
109
|
|
|
121
|
-
#
|
|
122
|
-
|
|
123
|
-
#if defined(_WIN32)
|
|
124
|
-
#define environment_char_t wchar_t
|
|
125
|
-
|
|
126
|
-
static environment_char_t const *getEnvironmentVariable(char const *name) {
|
|
127
|
-
// Max size for environment variables according to docs.
|
|
128
|
-
wchar_t buffer[32768];
|
|
129
|
-
buffer[0] = 0;
|
|
130
|
-
|
|
131
|
-
wchar_t name_wide[40];
|
|
132
|
-
name_wide[0] = 0;
|
|
133
|
-
appendStringSafeW(name_wide, name, sizeof(name_wide) / sizeof(wchar_t));
|
|
134
|
-
|
|
135
|
-
// Size must be in bytes apparently, not in characters. Cannot be larger anyway.
|
|
136
|
-
DWORD res = GetEnvironmentVariableW(name_wide, buffer, 65536);
|
|
137
|
-
|
|
138
|
-
if (res == 0 || res > sizeof(buffer)) {
|
|
139
|
-
return NULL;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
return wcsdup(buffer);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
static void setEnvironmentVariable(char const *name, environment_char_t const *value) {
|
|
146
|
-
assert(name != NULL);
|
|
147
|
-
assert(value != NULL);
|
|
148
|
-
|
|
149
|
-
wchar_t name_wide[40];
|
|
150
|
-
name_wide[0] = 0;
|
|
151
|
-
appendStringSafeW(name_wide, name, sizeof(name_wide) / sizeof(wchar_t));
|
|
152
|
-
|
|
153
|
-
DWORD res = SetEnvironmentVariableW(name_wide, value);
|
|
154
|
-
assert(wcscmp(getEnvironmentVariable(name), value) == 0);
|
|
155
|
-
|
|
156
|
-
assert(res != 0);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
static void unsetEnvironmentVariable(char const *name) {
|
|
160
|
-
wchar_t name_wide[40];
|
|
161
|
-
name_wide[0] = 0;
|
|
162
|
-
appendStringSafeW(name_wide, name, sizeof(name_wide) / sizeof(wchar_t));
|
|
163
|
-
|
|
164
|
-
DWORD res = SetEnvironmentVariableW(name_wide, NULL);
|
|
165
|
-
|
|
166
|
-
assert(res != 0);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
#define makeEnvironmentLiteral(x) L##x
|
|
170
|
-
|
|
171
|
-
#else
|
|
172
|
-
#define environment_char_t char
|
|
173
|
-
|
|
174
|
-
#define makeEnvironmentLiteral(x) x
|
|
175
|
-
|
|
176
|
-
static environment_char_t const *getEnvironmentVariable(char const *name) { return getenv(name); }
|
|
177
|
-
|
|
178
|
-
static void setEnvironmentVariable(char const *name, environment_char_t const *value) { setenv(name, value, 1); }
|
|
179
|
-
|
|
180
|
-
static void unsetEnvironmentVariable(char const *name) { unsetenv(name); }
|
|
181
|
-
|
|
182
|
-
#endif
|
|
183
|
-
|
|
184
|
-
static void undoEnvironmentVariable(PyThreadState *tstate, char const *variable_name,
|
|
185
|
-
environment_char_t const *old_value) {
|
|
186
|
-
PyObject *os_module = IMPORT_HARD_OS();
|
|
187
|
-
CHECK_OBJECT(os_module);
|
|
188
|
-
|
|
189
|
-
PyObject *os_environ = PyObject_GetAttrString(os_module, "environ");
|
|
190
|
-
CHECK_OBJECT(os_environ);
|
|
191
|
-
|
|
192
|
-
PyObject *variable_name_str = Nuitka_String_FromString(variable_name);
|
|
193
|
-
CHECK_OBJECT(variable_name_str);
|
|
194
|
-
|
|
195
|
-
if (old_value) {
|
|
196
|
-
setEnvironmentVariable(variable_name, old_value);
|
|
197
|
-
|
|
198
|
-
#ifdef _WIN32
|
|
199
|
-
PyObject *env_value = NuitkaUnicode_FromWideChar(old_value, -1);
|
|
200
|
-
#else
|
|
201
|
-
PyObject *env_value = Nuitka_String_FromString(old_value);
|
|
202
|
-
#endif
|
|
203
|
-
CHECK_OBJECT(env_value);
|
|
204
|
-
|
|
205
|
-
int res = PyObject_SetItem(os_environ, variable_name_str, env_value);
|
|
206
|
-
|
|
207
|
-
if (unlikely(res != 0)) {
|
|
208
|
-
PyErr_PrintEx(1);
|
|
209
|
-
Py_Exit(1);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
Py_DECREF(env_value);
|
|
213
|
-
} else {
|
|
214
|
-
unsetEnvironmentVariable(variable_name);
|
|
215
|
-
|
|
216
|
-
int res = PyObject_DelItem(os_environ, variable_name_str);
|
|
217
|
-
|
|
218
|
-
if (unlikely(res != 0)) {
|
|
219
|
-
CLEAR_ERROR_OCCURRED(tstate);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
Py_DECREF(variable_name_str);
|
|
224
|
-
Py_DECREF(os_environ);
|
|
225
|
-
}
|
|
226
|
-
#endif
|
|
110
|
+
#include "nuitka/environment_variables.h"
|
|
227
111
|
|
|
228
112
|
#ifdef _NUITKA_STANDALONE
|
|
229
113
|
|
|
@@ -313,7 +197,7 @@ extern void _initCompiledFrameType();
|
|
|
313
197
|
static wchar_t **convertCommandLineParameters(int argc, char **argv) {
|
|
314
198
|
// Originally taken from CPython3: There seems to be no sane way to use
|
|
315
199
|
static wchar_t **argv_copy;
|
|
316
|
-
argv_copy = (wchar_t **)
|
|
200
|
+
argv_copy = (wchar_t **)malloc(sizeof(wchar_t *) * argc);
|
|
317
201
|
|
|
318
202
|
// Temporarily disable locale for conversions to not use it.
|
|
319
203
|
char *old_locale = strdup(setlocale(LC_ALL, NULL));
|
|
@@ -344,6 +228,11 @@ static void PRINT_REFCOUNTS(void) {
|
|
|
344
228
|
|
|
345
229
|
PRINT_STRING("REFERENCE counts at program end:\n");
|
|
346
230
|
PRINT_STRING("active | allocated | released\n");
|
|
231
|
+
PRINT_FORMAT("Compiled Functions: %d | %d | %d (module/class ownership may occur)\n",
|
|
232
|
+
count_active_Nuitka_Function_Type, count_allocated_Nuitka_Function_Type,
|
|
233
|
+
count_released_Nuitka_Function_Type);
|
|
234
|
+
PRINT_FORMAT("Compiled Generators: %d | %d | %d\n", count_active_Nuitka_Generator_Type,
|
|
235
|
+
count_allocated_Nuitka_Generator_Type, count_released_Nuitka_Generator_Type);
|
|
347
236
|
#if PYTHON_VERSION >= 0x350
|
|
348
237
|
PRINT_FORMAT("Compiled Coroutines: %d | %d | %d\n", count_active_Nuitka_Coroutine_Type,
|
|
349
238
|
count_allocated_Nuitka_Coroutine_Type, count_released_Nuitka_Coroutine_Type);
|
|
@@ -366,6 +255,8 @@ static void PRINT_REFCOUNTS(void) {
|
|
|
366
255
|
|
|
367
256
|
PRINT_FORMAT("Compiled Frames: %d | %d | %d (cache usage may occur)\n", count_active_Nuitka_Frame_Type,
|
|
368
257
|
count_allocated_Nuitka_Frame_Type, count_released_Nuitka_Frame_Type);
|
|
258
|
+
PRINT_FORMAT("Compiled Cells: %d | %d | %d (function ownership may occur)\n", count_active_Nuitka_Cell_Type,
|
|
259
|
+
count_allocated_Nuitka_Cell_Type, count_released_Nuitka_Cell_Type);
|
|
369
260
|
PRINT_STRING("CACHED counts at program end:\n");
|
|
370
261
|
PRINT_STRING("active | allocated | released | hits\n");
|
|
371
262
|
PRINT_FORMAT("Cached Frames: %d | %d | %d | %d\n", count_active_frame_cache_instances,
|
|
@@ -374,17 +265,16 @@ static void PRINT_REFCOUNTS(void) {
|
|
|
374
265
|
}
|
|
375
266
|
#endif
|
|
376
267
|
|
|
377
|
-
static int HANDLE_PROGRAM_EXIT(
|
|
268
|
+
static int HANDLE_PROGRAM_EXIT(PyThreadState *tstate) {
|
|
378
269
|
#if _DEBUG_REFCOUNTS
|
|
379
270
|
PRINT_REFCOUNTS();
|
|
380
271
|
#endif
|
|
381
272
|
|
|
382
273
|
int exit_code;
|
|
383
274
|
|
|
384
|
-
PyThreadState *tstate = PyThreadState_GET();
|
|
385
|
-
|
|
386
275
|
if (HAS_ERROR_OCCURRED(tstate)) {
|
|
387
|
-
|
|
276
|
+
// TODO: Clarify which versions this applies to still
|
|
277
|
+
#if PYTHON_VERSION >= 0x300 && PYTHON_VERSION < 0x3c0
|
|
388
278
|
/* Remove the frozen importlib traceback part, which would not be compatible. */
|
|
389
279
|
|
|
390
280
|
while (tstate->curexc_traceback) {
|
|
@@ -402,6 +292,7 @@ static int HANDLE_PROGRAM_EXIT(void) {
|
|
|
402
292
|
break;
|
|
403
293
|
}
|
|
404
294
|
#endif
|
|
295
|
+
NUITKA_FINALIZE_PROGRAM(tstate);
|
|
405
296
|
|
|
406
297
|
PyErr_PrintEx(0);
|
|
407
298
|
|
|
@@ -413,13 +304,10 @@ static int HANDLE_PROGRAM_EXIT(void) {
|
|
|
413
304
|
return exit_code;
|
|
414
305
|
}
|
|
415
306
|
|
|
416
|
-
static PyObject *EXECUTE_MAIN_MODULE(char const *module_name) {
|
|
307
|
+
static PyObject *EXECUTE_MAIN_MODULE(PyThreadState *tstate, char const *module_name, bool is_package) {
|
|
417
308
|
NUITKA_INIT_PROGRAM_LATE(module_name);
|
|
418
309
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
#if NUITKA_MAIN_PACKAGE_MODE
|
|
422
|
-
{
|
|
310
|
+
if (is_package) {
|
|
423
311
|
char const *w = module_name;
|
|
424
312
|
|
|
425
313
|
for (;;) {
|
|
@@ -442,25 +330,27 @@ static PyObject *EXECUTE_MAIN_MODULE(char const *module_name) {
|
|
|
442
330
|
}
|
|
443
331
|
}
|
|
444
332
|
}
|
|
445
|
-
#endif
|
|
446
333
|
|
|
447
334
|
return IMPORT_EMBEDDED_MODULE(tstate, module_name);
|
|
448
335
|
}
|
|
449
336
|
|
|
450
|
-
#
|
|
337
|
+
#if _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
|
|
451
338
|
#include "nuitka_windows_service.h"
|
|
452
339
|
|
|
453
340
|
// Callback from Windows Service logic.
|
|
454
|
-
|
|
455
|
-
EXECUTE_MAIN_MODULE(NUITKA_MAIN_MODULE_NAME);
|
|
456
|
-
|
|
341
|
+
void SvcStartPython(void) {
|
|
457
342
|
PyThreadState *tstate = PyThreadState_GET();
|
|
458
343
|
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
344
|
+
EXECUTE_MAIN_MODULE(tstate, NUITKA_MAIN_MODULE_NAME, NUITKA_MAIN_IS_PACKAGE_BOOL);
|
|
345
|
+
|
|
346
|
+
NUITKA_PRINT_TIMING("SvcStartPython() Python exited.")
|
|
347
|
+
|
|
348
|
+
int exit_code = HANDLE_PROGRAM_EXIT(tstate);
|
|
349
|
+
|
|
350
|
+
// TODO: Log exception and call ReportSvcStatus
|
|
351
|
+
|
|
352
|
+
NUITKA_PRINT_TIMING("SvcStartPython(): Calling Py_Exit.");
|
|
353
|
+
Py_Exit(exit_code);
|
|
464
354
|
}
|
|
465
355
|
|
|
466
356
|
void SvcStopPython(void) { PyErr_SetInterrupt(); }
|
|
@@ -473,107 +363,127 @@ static bool is_multiprocessing_fork = false;
|
|
|
473
363
|
static int multiprocessing_resource_tracker_arg = -1;
|
|
474
364
|
|
|
475
365
|
// This is a joblib loky fork
|
|
366
|
+
#ifdef _WIN32
|
|
367
|
+
static bool is_joblib_popen_loky_win32 = false;
|
|
368
|
+
static int loky_joblib_pipe_handle_arg = 0;
|
|
369
|
+
static int loky_joblib_parent_pid_arg = 0;
|
|
370
|
+
#else
|
|
476
371
|
static bool is_joblib_popen_loky_posix = false;
|
|
372
|
+
#endif
|
|
373
|
+
|
|
477
374
|
// This is a joblib resource tracker if not -1
|
|
478
375
|
static int loky_resource_tracker_arg = -1;
|
|
479
376
|
|
|
480
|
-
//
|
|
481
|
-
|
|
377
|
+
// This is a "anyio.to_process" fork
|
|
378
|
+
static bool is_anyio_to_process = false;
|
|
379
|
+
|
|
380
|
+
// Parse the command line parameters to decide if it's a multiprocessing usage
|
|
381
|
+
// or something else special.
|
|
482
382
|
#if _NUITKA_NATIVE_WCHAR_ARGV == 0
|
|
483
|
-
static void setCommandLineParameters(int argc, char **argv
|
|
383
|
+
static void setCommandLineParameters(int argc, char **argv) {
|
|
484
384
|
#else
|
|
485
|
-
static void setCommandLineParameters(int argc, wchar_t **argv
|
|
385
|
+
static void setCommandLineParameters(int argc, wchar_t **argv) {
|
|
486
386
|
#endif
|
|
487
|
-
if (initial) {
|
|
488
387
|
#ifdef _NUITKA_EXPERIMENTAL_DEBUG_SELF_FORKING
|
|
489
388
|
#if _NUITKA_NATIVE_WCHAR_ARGV == 0
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
}
|
|
495
|
-
printf("'%s'", argv[i]);
|
|
389
|
+
printf("Command line: ");
|
|
390
|
+
for (int i = 0; i < argc; i++) {
|
|
391
|
+
if (i != 0) {
|
|
392
|
+
printf(" ");
|
|
496
393
|
}
|
|
497
|
-
printf("
|
|
394
|
+
printf("'%s'", argv[i]);
|
|
395
|
+
}
|
|
396
|
+
printf("\n");
|
|
498
397
|
#else
|
|
499
|
-
|
|
398
|
+
wprintf(L"Command line: '%lS' %d\n", GetCommandLineW(), argc);
|
|
500
399
|
#endif
|
|
501
400
|
#endif
|
|
502
401
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
402
|
+
// We might need to handle special parameters from plugins that are
|
|
403
|
+
// very deeply woven into command line handling. These are right now
|
|
404
|
+
// multiprocessing, which indicates that it's forking via extra
|
|
506
405
|
|
|
507
|
-
|
|
508
|
-
|
|
406
|
+
// command line argument. And Windows Service indicates need to
|
|
407
|
+
// install and exit here too.
|
|
509
408
|
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
409
|
+
for (int i = 1; i < argc; i++) {
|
|
410
|
+
if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "--multiprocessing-fork")) == 0) {
|
|
411
|
+
is_multiprocessing_fork = true;
|
|
412
|
+
break;
|
|
413
|
+
}
|
|
515
414
|
|
|
516
|
-
|
|
517
|
-
(strcmpFilename(argv[i], FILENAME_EMPTY_STR "--multiprocessing-resource-tracker")) == 0) {
|
|
415
|
+
if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "--multiprocessing-resource-tracker")) == 0) {
|
|
518
416
|
#if _NUITKA_NATIVE_WCHAR_ARGV == 0
|
|
519
|
-
|
|
417
|
+
multiprocessing_resource_tracker_arg = atoi(argv[i + 1]);
|
|
520
418
|
#else
|
|
521
|
-
|
|
419
|
+
multiprocessing_resource_tracker_arg = _wtoi(argv[i + 1]);
|
|
522
420
|
#endif
|
|
523
|
-
|
|
524
|
-
|
|
421
|
+
break;
|
|
422
|
+
}
|
|
525
423
|
|
|
526
|
-
|
|
527
|
-
#
|
|
528
|
-
|
|
529
|
-
|
|
424
|
+
if (i == 1) {
|
|
425
|
+
#if _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
|
|
426
|
+
if (strcmpFilename(argv[i], FILENAME_EMPTY_STR "install") == 0) {
|
|
427
|
+
NUITKA_PRINT_TRACE("main(): Calling plugin SvcInstall().");
|
|
530
428
|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
429
|
+
SvcInstall();
|
|
430
|
+
NUITKA_CANNOT_GET_HERE("main(): SvcInstall must not return");
|
|
431
|
+
}
|
|
534
432
|
#endif
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "-c") == 0)) {
|
|
436
|
+
// The joblib loky resource tracker is launched like this.
|
|
437
|
+
if (scanFilename(argv[i + 1],
|
|
438
|
+
FILENAME_EMPTY_STR
|
|
439
|
+
"from joblib.externals.loky.backend.resource_tracker import main; main(%i, False)",
|
|
440
|
+
&loky_resource_tracker_arg)) {
|
|
441
|
+
break;
|
|
535
442
|
}
|
|
536
443
|
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
&loky_resource_tracker_arg);
|
|
543
|
-
#else
|
|
544
|
-
int res = swscanf(argv[i + 1],
|
|
545
|
-
L"from joblib.externals.loky.backend.resource_tracker import main; main(%i, False)",
|
|
546
|
-
&loky_resource_tracker_arg);
|
|
547
|
-
#endif
|
|
548
|
-
if (res == 1) {
|
|
549
|
-
break;
|
|
550
|
-
}
|
|
444
|
+
#if defined(_WIN32)
|
|
445
|
+
if (strcmpFilename(argv[i + 1], FILENAME_EMPTY_STR
|
|
446
|
+
"from joblib.externals.loky.backend.popen_loky_win32 import main; main()") == 0) {
|
|
447
|
+
is_joblib_popen_loky_win32 = true;
|
|
448
|
+
break;
|
|
551
449
|
}
|
|
552
450
|
|
|
553
|
-
if ((i + 1
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
}
|
|
451
|
+
if (scanFilename(argv[i + 1],
|
|
452
|
+
FILENAME_EMPTY_STR "from joblib.externals.loky.backend.popen_loky_win32 import main; "
|
|
453
|
+
"main(pipe_handle=%i, parent_pid=%i)",
|
|
454
|
+
&loky_joblib_pipe_handle_arg, &loky_joblib_parent_pid_arg)) {
|
|
455
|
+
is_joblib_popen_loky_win32 = true;
|
|
456
|
+
break;
|
|
560
457
|
}
|
|
561
458
|
|
|
562
|
-
#
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
459
|
+
#endif
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
if ((i + 1 < argc) && (strcmpFilename(argv[i], FILENAME_EMPTY_STR "-m") == 0)) {
|
|
463
|
+
#if !defined(_WIN32)
|
|
464
|
+
// The joblib loky posix popen is launching like this.
|
|
465
|
+
if (strcmpFilename(argv[i + 1], FILENAME_EMPTY_STR "joblib.externals.loky.backend.popen_loky_posix") == 0) {
|
|
466
|
+
is_joblib_popen_loky_posix = true;
|
|
467
|
+
break;
|
|
570
468
|
}
|
|
571
469
|
#endif
|
|
470
|
+
|
|
471
|
+
// The anyio.to_process module is launching like this.
|
|
472
|
+
if (strcmpFilename(argv[i + 1], FILENAME_EMPTY_STR "anyio.to_process") == 0) {
|
|
473
|
+
is_anyio_to_process = true;
|
|
474
|
+
break;
|
|
475
|
+
}
|
|
572
476
|
}
|
|
573
477
|
|
|
574
|
-
#
|
|
575
|
-
|
|
576
|
-
|
|
478
|
+
#if !defined(_NUITKA_DEPLOYMENT_MODE) && !defined(_NUITKA_NO_DEPLOYMENT_SELF_EXECUTION)
|
|
479
|
+
if ((strcmpFilename(argv[i], FILENAME_EMPTY_STR "-c") == 0) ||
|
|
480
|
+
(strcmpFilename(argv[i], FILENAME_EMPTY_STR "-m") == 0)) {
|
|
481
|
+
fprintf(stderr,
|
|
482
|
+
"Error, the program tried to call itself with '" FILENAME_FORMAT_STR "' argument. Disable with "
|
|
483
|
+
"'--no-deployment-flag=self-execution'.\n",
|
|
484
|
+
argv[i]);
|
|
485
|
+
exit(2);
|
|
486
|
+
}
|
|
577
487
|
#endif
|
|
578
488
|
}
|
|
579
489
|
}
|
|
@@ -826,6 +736,10 @@ static bool shallSetOutputHandleToNull(char const *name) {
|
|
|
826
736
|
if (strcmp(name, "stderr") == 0) {
|
|
827
737
|
return true;
|
|
828
738
|
}
|
|
739
|
+
#elif defined(NUITKA_FORCED_STDERR_PATH) || defined(NUITKA_FORCED_STDERR_NONE_BOOL)
|
|
740
|
+
if (strcmp(name, "stderr") == 0) {
|
|
741
|
+
return false;
|
|
742
|
+
}
|
|
829
743
|
#endif
|
|
830
744
|
|
|
831
745
|
PyObject *sys_std_handle = Nuitka_SysGetObject(name);
|
|
@@ -909,44 +823,51 @@ static void setInputOutputHandles(PyThreadState *tstate) {
|
|
|
909
823
|
// better, and force it to utf-8, it often becomes platform IO for no good
|
|
910
824
|
// reason.
|
|
911
825
|
#if NUITKA_STANDARD_HANDLES_EARLY == 1 && PYTHON_VERSION >= 0x370
|
|
826
|
+
NUITKA_PRINT_TRACE("setInputOutputHandles(): Early handles.");
|
|
912
827
|
#if defined(NUITKA_FORCED_STDOUT_PATH) || defined(NUITKA_FORCED_STDERR_PATH)
|
|
913
|
-
PyObject *args = MAKE_DICT_EMPTY();
|
|
828
|
+
PyObject *args = MAKE_DICT_EMPTY(tstate);
|
|
914
829
|
|
|
915
830
|
DICT_SET_ITEM(args, const_str_plain_encoding, Nuitka_String_FromString("utf-8"));
|
|
916
831
|
DICT_SET_ITEM(args, const_str_plain_line_buffering, Py_True);
|
|
917
832
|
|
|
918
833
|
#if defined(NUITKA_FORCED_STDOUT_PATH)
|
|
834
|
+
NUITKA_PRINT_TRACE("setInputOutputHandles(): Forced stdout update.");
|
|
919
835
|
{
|
|
920
836
|
PyObject *sys_stdout = Nuitka_SysGetObject("stdout");
|
|
921
837
|
|
|
922
838
|
PyObject *method = LOOKUP_ATTRIBUTE(tstate, sys_stdout, const_str_plain_reconfigure);
|
|
923
839
|
CHECK_OBJECT(method);
|
|
924
840
|
|
|
925
|
-
PyObject *result =
|
|
841
|
+
PyObject *result = CALL_FUNCTION_WITH_KW_ARGS(tstate, method, args);
|
|
926
842
|
CHECK_OBJECT(result);
|
|
927
843
|
}
|
|
928
844
|
#endif
|
|
929
845
|
|
|
930
846
|
#if defined(NUITKA_FORCED_STDERR_PATH)
|
|
847
|
+
NUITKA_PRINT_TRACE("setInputOutputHandles(): Forced stderr update.");
|
|
931
848
|
{
|
|
932
849
|
PyObject *sys_stderr = Nuitka_SysGetObject("stderr");
|
|
850
|
+
if (sys_stderr != Py_None) {
|
|
851
|
+
PyObject *method = LOOKUP_ATTRIBUTE(tstate, sys_stderr, const_str_plain_reconfigure);
|
|
852
|
+
CHECK_OBJECT(method);
|
|
933
853
|
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
PyObject *result = CALL_FUNCTION_WITH_KEYARGS(tstate, method, args);
|
|
938
|
-
CHECK_OBJECT(result);
|
|
854
|
+
PyObject *result = CALL_FUNCTION_WITH_KW_ARGS(tstate, method, args);
|
|
855
|
+
CHECK_OBJECT(result);
|
|
856
|
+
}
|
|
939
857
|
}
|
|
940
858
|
#endif
|
|
941
859
|
|
|
942
860
|
Py_DECREF(args);
|
|
943
861
|
#endif
|
|
862
|
+
|
|
863
|
+
NUITKA_PRINT_TRACE("setInputOutputHandles(): Done with early handles.");
|
|
944
864
|
#endif
|
|
945
865
|
|
|
946
866
|
#if NUITKA_STANDARD_HANDLES_EARLY == 0
|
|
867
|
+
NUITKA_PRINT_TRACE("setInputOutputHandles(): Late handles.");
|
|
947
868
|
#if defined(NUITKA_FORCED_STDOUT_PATH)
|
|
948
869
|
{
|
|
949
|
-
#
|
|
870
|
+
#if defined(_WIN32)
|
|
950
871
|
PyObject *filename = getExpandedTemplatePath(L"" NUITKA_FORCED_STDOUT_PATH);
|
|
951
872
|
#else
|
|
952
873
|
PyObject *filename = getExpandedTemplatePath(NUITKA_FORCED_STDOUT_PATH);
|
|
@@ -957,7 +878,7 @@ static void setInputOutputHandles(PyThreadState *tstate) {
|
|
|
957
878
|
Py_Exit(1);
|
|
958
879
|
}
|
|
959
880
|
|
|
960
|
-
setStdoutHandle(stdout_file);
|
|
881
|
+
setStdoutHandle(tstate, stdout_file);
|
|
961
882
|
}
|
|
962
883
|
#endif
|
|
963
884
|
|
|
@@ -974,7 +895,7 @@ static void setInputOutputHandles(PyThreadState *tstate) {
|
|
|
974
895
|
Py_Exit(1);
|
|
975
896
|
}
|
|
976
897
|
|
|
977
|
-
setStderrHandle(stderr_file);
|
|
898
|
+
setStderrHandle(tstate, stderr_file);
|
|
978
899
|
}
|
|
979
900
|
#endif
|
|
980
901
|
#endif
|
|
@@ -986,22 +907,37 @@ static void setInputOutputHandles(PyThreadState *tstate) {
|
|
|
986
907
|
PyObject *devnull_filename = Nuitka_String_FromString("/dev/null");
|
|
987
908
|
#endif
|
|
988
909
|
|
|
910
|
+
NUITKA_PRINT_TRACE("setInputOutputHandles(): Considering stdin.");
|
|
911
|
+
|
|
989
912
|
if (shallSetOutputHandleToNull("stdin")) {
|
|
913
|
+
NUITKA_PRINT_TRACE("setInputOutputHandles(): Set stdin to NULL file.");
|
|
914
|
+
|
|
990
915
|
// CPython core requires stdin to be buffered due to methods usage, and it won't matter
|
|
991
916
|
// here much.
|
|
992
917
|
PyObject *stdin_file = BUILTIN_OPEN_SIMPLE(tstate, devnull_filename, "r", true, encoding);
|
|
918
|
+
CHECK_OBJECT(stdin_file);
|
|
993
919
|
|
|
994
920
|
setStdinHandle(tstate, stdin_file);
|
|
995
921
|
}
|
|
996
922
|
|
|
923
|
+
NUITKA_PRINT_TRACE("setInputOutputHandles(): Considering stdout.");
|
|
924
|
+
|
|
997
925
|
if (shallSetOutputHandleToNull("stdout")) {
|
|
926
|
+
NUITKA_PRINT_TRACE("setInputOutputHandles(): Set stdout to NULL file.");
|
|
927
|
+
|
|
998
928
|
PyObject *stdout_file = BUILTIN_OPEN_SIMPLE(tstate, devnull_filename, "w", false, encoding);
|
|
929
|
+
CHECK_OBJECT(stdout_file);
|
|
999
930
|
|
|
1000
931
|
setStdoutHandle(tstate, stdout_file);
|
|
1001
932
|
}
|
|
1002
933
|
|
|
934
|
+
NUITKA_PRINT_TRACE("setInputOutputHandles(): Considering stderr.");
|
|
935
|
+
|
|
1003
936
|
if (shallSetOutputHandleToNull("stderr")) {
|
|
937
|
+
NUITKA_PRINT_TRACE("setInputOutputHandles(): Set stderr to NULL file.");
|
|
938
|
+
|
|
1004
939
|
PyObject *stderr_file = BUILTIN_OPEN_SIMPLE(tstate, devnull_filename, "w", false, encoding);
|
|
940
|
+
CHECK_OBJECT(stderr_file);
|
|
1005
941
|
|
|
1006
942
|
setStderrHandle(tstate, stderr_file);
|
|
1007
943
|
}
|
|
@@ -1010,27 +946,36 @@ static void setInputOutputHandles(PyThreadState *tstate) {
|
|
|
1010
946
|
}
|
|
1011
947
|
|
|
1012
948
|
#if NUITKA_FORCED_STDOUT_NONE_BOOL
|
|
1013
|
-
|
|
949
|
+
NUITKA_PRINT_TRACE("setInputOutputHandles(): Forcing stdout to None.");
|
|
950
|
+
setStdoutHandle(tstate, Py_None);
|
|
1014
951
|
#endif
|
|
1015
952
|
|
|
1016
953
|
#if NUITKA_FORCED_STDERR_NONE_BOOL
|
|
1017
|
-
|
|
954
|
+
NUITKA_PRINT_TRACE("setInputOutputHandles(): Forcing stderr to None.");
|
|
955
|
+
setStderrHandle(tstate, Py_None);
|
|
1018
956
|
#endif
|
|
1019
957
|
|
|
1020
958
|
Py_XDECREF(encoding);
|
|
1021
959
|
}
|
|
1022
960
|
|
|
1023
961
|
static void Nuitka_Py_Initialize(void) {
|
|
962
|
+
#if PYTHON_VERSION > 0x350 && !defined(_NUITKA_EXPERIMENTAL_DISABLE_ALLOCATORS)
|
|
963
|
+
initNuitkaAllocators();
|
|
964
|
+
#endif
|
|
965
|
+
|
|
1024
966
|
#if PYTHON_VERSION < 0x380 || defined(_NUITKA_EXPERIMENTAL_OLD_PY_INITIALIZE)
|
|
1025
967
|
Py_Initialize();
|
|
1026
968
|
#else
|
|
969
|
+
#if PYTHON_VERSION < 0x3d0
|
|
1027
970
|
PyStatus status = _PyRuntime_Initialize();
|
|
1028
971
|
if (unlikely(status._type != 0)) {
|
|
1029
972
|
Py_ExitStatusException(status);
|
|
1030
973
|
}
|
|
1031
|
-
_PyRuntimeState *runtime = &_PyRuntime;
|
|
1032
|
-
|
|
974
|
+
NUITKA_MAY_BE_UNUSED _PyRuntimeState *runtime = &_PyRuntime;
|
|
1033
975
|
assert(!runtime->initialized);
|
|
976
|
+
#else
|
|
977
|
+
PyStatus status;
|
|
978
|
+
#endif
|
|
1034
979
|
|
|
1035
980
|
PyConfig config;
|
|
1036
981
|
_PyConfig_InitCompatConfig(&config);
|
|
@@ -1059,6 +1004,25 @@ static void Nuitka_Py_Initialize(void) {
|
|
|
1059
1004
|
config.module_search_paths_set = 1;
|
|
1060
1005
|
#endif
|
|
1061
1006
|
|
|
1007
|
+
// Need to disable frozen modules, Nuitka can handle them better itself.
|
|
1008
|
+
#if PYTHON_VERSION >= 0x3b0
|
|
1009
|
+
#ifdef _NUITKA_STANDALONE
|
|
1010
|
+
config.use_frozen_modules = 0;
|
|
1011
|
+
#else
|
|
1012
|
+
// Emulate PYTHON_FROZEN_MODULES for accelerated mode, it is only added in 3.13,
|
|
1013
|
+
// but we need to control it for controlling things for accelerated binaries
|
|
1014
|
+
// too.
|
|
1015
|
+
#if PYTHON_VERSION >= 0x3b0 && PYTHON_VERSION <= 0x3d0
|
|
1016
|
+
environment_char_t const *frozen_modules_env = getEnvironmentVariable("PYTHON_FROZEN_MODULES");
|
|
1017
|
+
|
|
1018
|
+
if (frozen_modules_env == NULL ||
|
|
1019
|
+
(compareEnvironmentString(frozen_modules_env, makeEnvironmentLiteral("off")) == 0)) {
|
|
1020
|
+
config.use_frozen_modules = 0;
|
|
1021
|
+
}
|
|
1022
|
+
#endif
|
|
1023
|
+
#endif
|
|
1024
|
+
#endif
|
|
1025
|
+
|
|
1062
1026
|
config.install_signal_handlers = 1;
|
|
1063
1027
|
|
|
1064
1028
|
NUITKA_PRINT_TIMING("Nuitka_Py_Initialize(): Calling Py_InitializeFromConfig.");
|
|
@@ -1089,23 +1053,13 @@ static void Nuitka_Py_Initialize(void) {
|
|
|
1089
1053
|
static void changeStandardHandleTarget(int std_handle_id, FILE *std_handle, filename_char_t const *template_path) {
|
|
1090
1054
|
filename_char_t filename_buffer[1024];
|
|
1091
1055
|
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
#ifdef _WIN32
|
|
1095
|
-
bool res = expandTemplatePathW(filename_buffer, template_path, sizeof(filename_buffer) / sizeof(filename_char_t));
|
|
1096
|
-
|
|
1097
|
-
if (res == false) {
|
|
1098
|
-
wprintf(L"Error, couldn't expand pattern '%lS'\n", template_path);
|
|
1099
|
-
abort();
|
|
1100
|
-
}
|
|
1101
|
-
#else
|
|
1102
|
-
bool res = expandTemplatePath(filename_buffer, template_path, sizeof(filename_buffer) / sizeof(filename_char_t));
|
|
1056
|
+
bool res =
|
|
1057
|
+
expandTemplatePathFilename(filename_buffer, template_path, sizeof(filename_buffer) / sizeof(filename_char_t));
|
|
1103
1058
|
|
|
1104
1059
|
if (res == false) {
|
|
1105
|
-
printf("Error, couldn't expand pattern
|
|
1060
|
+
printf("Error, couldn't expand pattern '" FILENAME_FORMAT_STR "'\n", template_path);
|
|
1106
1061
|
abort();
|
|
1107
1062
|
}
|
|
1108
|
-
#endif
|
|
1109
1063
|
|
|
1110
1064
|
if (GetStdHandle(std_handle_id) == 0) {
|
|
1111
1065
|
FILE *file_handle;
|
|
@@ -1154,12 +1108,11 @@ static void changeStandardHandleTarget(int std_handle_id, FILE *std_handle, file
|
|
|
1154
1108
|
abort();
|
|
1155
1109
|
}
|
|
1156
1110
|
|
|
1157
|
-
int
|
|
1111
|
+
int _int_res = dup2(os_handle, fileno(std_handle));
|
|
1158
1112
|
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
abort();
|
|
1113
|
+
if (_int_res == -1) {
|
|
1114
|
+
// Note: Without a console, this is normal to get no file number to
|
|
1115
|
+
// work with.
|
|
1163
1116
|
}
|
|
1164
1117
|
|
|
1165
1118
|
close(os_handle);
|
|
@@ -1195,6 +1148,41 @@ static void changeStandardHandleTarget(FILE *std_handle, filename_char_t const *
|
|
|
1195
1148
|
#endif
|
|
1196
1149
|
#endif
|
|
1197
1150
|
|
|
1151
|
+
#if defined(_NUITKA_EXPERIMENTAL_SHOW_STARTUP_TIME)
|
|
1152
|
+
static void Nuitka_at_exit(void) { NUITKA_PRINT_TIMING("Nuitka_at_exit(): Called by C exit()"); }
|
|
1153
|
+
#endif
|
|
1154
|
+
|
|
1155
|
+
#if !defined(_NUITKA_DEPLOYMENT_MODE) && !defined(_NUITKA_NO_DEPLOYMENT_SEGFAULT)
|
|
1156
|
+
#include <signal.h>
|
|
1157
|
+
static void nuitka_segfault_handler(int sig) {
|
|
1158
|
+
puts("Nuitka: A segmentation fault has occurred. This is highly unusual and can");
|
|
1159
|
+
puts("have multiple reasons. Please check https://nuitka.net/info/segfault.html");
|
|
1160
|
+
puts("for solutions.");
|
|
1161
|
+
|
|
1162
|
+
signal(SIGSEGV, SIG_DFL);
|
|
1163
|
+
raise(SIGSEGV);
|
|
1164
|
+
}
|
|
1165
|
+
#endif
|
|
1166
|
+
|
|
1167
|
+
#if _NUITKA_NATIVE_WCHAR_ARGV == 1
|
|
1168
|
+
extern wchar_t const *getBinaryFilenameWideChars(bool resolve_symlinks);
|
|
1169
|
+
#else
|
|
1170
|
+
extern char const *getBinaryFilenameHostEncoded(bool resolve_symlinks);
|
|
1171
|
+
#endif
|
|
1172
|
+
|
|
1173
|
+
// No longer in header files, but still usable.
|
|
1174
|
+
#if PYTHON_VERSION >= 0x3d0
|
|
1175
|
+
PyAPI_FUNC(void) PySys_AddWarnOption(const wchar_t *s);
|
|
1176
|
+
#endif
|
|
1177
|
+
|
|
1178
|
+
// Preserve and provide the original argv[0] as recorded by the bootstrap stage.
|
|
1179
|
+
static environment_char_t const *original_argv0 = NULL;
|
|
1180
|
+
|
|
1181
|
+
PyObject *getOriginalArgv0Object(void) {
|
|
1182
|
+
assert(original_argv0 != NULL);
|
|
1183
|
+
return Nuitka_String_FromFilename(original_argv0);
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1198
1186
|
#ifdef _NUITKA_WINMAIN_ENTRY_POINT
|
|
1199
1187
|
int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, wchar_t *lpCmdLine, int nCmdShow) {
|
|
1200
1188
|
/* MSVC, MINGW64 */
|
|
@@ -1203,12 +1191,35 @@ int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, wchar_t *lp
|
|
|
1203
1191
|
#else
|
|
1204
1192
|
#if defined(_WIN32)
|
|
1205
1193
|
int wmain(int argc, wchar_t **argv) {
|
|
1194
|
+
#if defined(_NUITKA_HIDE_CONSOLE_WINDOW)
|
|
1195
|
+
hideConsoleIfSpawned();
|
|
1196
|
+
#endif
|
|
1206
1197
|
#else
|
|
1207
1198
|
int main(int argc, char **argv) {
|
|
1208
1199
|
#endif
|
|
1209
1200
|
#endif
|
|
1210
1201
|
|
|
1211
|
-
//
|
|
1202
|
+
// Installer a segfault handler that outputs a helpful message.
|
|
1203
|
+
#if !defined(_NUITKA_DEPLOYMENT_MODE) && !defined(_NUITKA_NO_DEPLOYMENT_SEGFAULT)
|
|
1204
|
+
signal(SIGSEGV, nuitka_segfault_handler);
|
|
1205
|
+
#endif
|
|
1206
|
+
|
|
1207
|
+
#ifdef _NUITKA_EXPERIMENTAL_DUMP_C_TRACEBACKS
|
|
1208
|
+
INIT_C_BACKTRACES();
|
|
1209
|
+
DUMP_C_BACKTRACE();
|
|
1210
|
+
#endif
|
|
1211
|
+
// Trace when the process exits.
|
|
1212
|
+
#if defined(_NUITKA_EXPERIMENTAL_SHOW_STARTUP_TIME)
|
|
1213
|
+
atexit(Nuitka_at_exit);
|
|
1214
|
+
#endif
|
|
1215
|
+
|
|
1216
|
+
// Attach to the parent console respecting redirection only, otherwise we
|
|
1217
|
+
// cannot even output traces.
|
|
1218
|
+
#if defined(_WIN32) && defined(_NUITKA_ATTACH_CONSOLE_WINDOW)
|
|
1219
|
+
inheritAttachedConsole();
|
|
1220
|
+
#endif
|
|
1221
|
+
|
|
1222
|
+
// Set up stdout/stderr according to user specification.
|
|
1212
1223
|
#if NUITKA_STANDARD_HANDLES_EARLY == 1
|
|
1213
1224
|
#if defined(NUITKA_FORCED_STDOUT_PATH)
|
|
1214
1225
|
#ifdef _WIN32
|
|
@@ -1239,6 +1250,8 @@ int main(int argc, char **argv) {
|
|
|
1239
1250
|
setbuf(stderr, (char *)NULL);
|
|
1240
1251
|
|
|
1241
1252
|
#if PYTHON_VERSION >= 0x300
|
|
1253
|
+
// spell-checker: ignore PYTHONUNBUFFERED
|
|
1254
|
+
|
|
1242
1255
|
environment_char_t const *old_env_unbuffered = getEnvironmentVariable("PYTHONUNBUFFERED");
|
|
1243
1256
|
setEnvironmentVariable("PYTHONUNBUFFERED", makeEnvironmentLiteral("1"));
|
|
1244
1257
|
#endif
|
|
@@ -1248,7 +1261,8 @@ int main(int argc, char **argv) {
|
|
|
1248
1261
|
NUITKA_INIT_PROGRAM_EARLY(argc, argv);
|
|
1249
1262
|
|
|
1250
1263
|
#ifdef __FreeBSD__
|
|
1251
|
-
|
|
1264
|
+
// FP exceptions run in "no stop" mode by default
|
|
1265
|
+
// spell-checker: ignore fpgetmask,fpsetmask
|
|
1252
1266
|
|
|
1253
1267
|
fp_except_t m;
|
|
1254
1268
|
|
|
@@ -1259,11 +1273,10 @@ int main(int argc, char **argv) {
|
|
|
1259
1273
|
#ifdef _NUITKA_STANDALONE
|
|
1260
1274
|
NUITKA_PRINT_TIMING("main(): Prepare standalone environment.");
|
|
1261
1275
|
prepareStandaloneEnvironment();
|
|
1262
|
-
#else
|
|
1263
|
-
|
|
1264
1276
|
#endif
|
|
1265
1277
|
|
|
1266
1278
|
#if _NUITKA_FROZEN > 0
|
|
1279
|
+
NUITKA_PRINT_TIMING("main(): Preparing frozen modules.");
|
|
1267
1280
|
prepareFrozenModules();
|
|
1268
1281
|
#endif
|
|
1269
1282
|
|
|
@@ -1278,7 +1291,7 @@ int main(int argc, char **argv) {
|
|
|
1278
1291
|
Py_InspectFlag = 0;
|
|
1279
1292
|
Py_InteractiveFlag = 0;
|
|
1280
1293
|
Py_OptimizeFlag = SYSFLAG_OPTIMIZE;
|
|
1281
|
-
Py_DontWriteBytecodeFlag =
|
|
1294
|
+
Py_DontWriteBytecodeFlag = SYSFLAG_DONTWRITEBYTECODE;
|
|
1282
1295
|
Py_NoUserSiteDirectory = SYSFLAG_NO_SITE;
|
|
1283
1296
|
Py_IgnoreEnvironmentFlag = 0;
|
|
1284
1297
|
Py_VerboseFlag = SYSFLAG_VERBOSE;
|
|
@@ -1305,6 +1318,7 @@ int main(int argc, char **argv) {
|
|
|
1305
1318
|
#endif
|
|
1306
1319
|
|
|
1307
1320
|
#ifdef NUITKA_PYTHON_STATIC
|
|
1321
|
+
NUITKA_PRINT_TIMING("main(): Preparing static modules.");
|
|
1308
1322
|
Py_InitStaticModules();
|
|
1309
1323
|
#endif
|
|
1310
1324
|
|
|
@@ -1319,13 +1333,40 @@ int main(int argc, char **argv) {
|
|
|
1319
1333
|
|
|
1320
1334
|
/* Initial command line handling only. */
|
|
1321
1335
|
|
|
1336
|
+
// Make sure, we use the absolute program path for argv[0]
|
|
1337
|
+
#if !defined(_NUITKA_ONEFILE_MODE) && _NUITKA_NATIVE_WCHAR_ARGV == 0
|
|
1338
|
+
original_argv0 = argv[0];
|
|
1339
|
+
argv[0] = (char *)getBinaryFilenameHostEncoded(false);
|
|
1340
|
+
#endif
|
|
1341
|
+
|
|
1342
|
+
#if defined(_NUITKA_ONEFILE_MODE)
|
|
1343
|
+
{
|
|
1344
|
+
environment_char_t const *parent_original_argv0 = getEnvironmentVariable("NUITKA_ORIGINAL_ARGV0");
|
|
1345
|
+
|
|
1346
|
+
if (parent_original_argv0 != NULL) {
|
|
1347
|
+
original_argv0 = strdupFilename(parent_original_argv0);
|
|
1348
|
+
|
|
1349
|
+
unsetEnvironmentVariable("NUITKA_ORIGINAL_ARGV0");
|
|
1350
|
+
}
|
|
1351
|
+
}
|
|
1352
|
+
#endif
|
|
1353
|
+
|
|
1322
1354
|
#if PYTHON_VERSION >= 0x300 && _NUITKA_NATIVE_WCHAR_ARGV == 0
|
|
1323
1355
|
NUITKA_PRINT_TRACE("main(): Calling convertCommandLineParameters.");
|
|
1324
1356
|
orig_argv = convertCommandLineParameters(argc, argv);
|
|
1325
1357
|
#elif PYTHON_VERSION < 0x300 && _NUITKA_NATIVE_WCHAR_ARGV == 1
|
|
1358
|
+
NUITKA_PRINT_TRACE("main(): Calling getCommandLineToArgvA.");
|
|
1326
1359
|
orig_argv = getCommandLineToArgvA(GetCommandLineA());
|
|
1327
1360
|
#else
|
|
1328
1361
|
orig_argv = argv;
|
|
1362
|
+
#endif
|
|
1363
|
+
|
|
1364
|
+
// Make sure, we use the absolute program path for argv[0]
|
|
1365
|
+
#if !defined(_NUITKA_ONEFILE_MODE) && _NUITKA_NATIVE_WCHAR_ARGV == 1
|
|
1366
|
+
original_argv0 = argv[0];
|
|
1367
|
+
#if PYTHON_VERSION >= 0x300
|
|
1368
|
+
orig_argv[0] = (wchar_t *)getBinaryFilenameWideChars(false);
|
|
1369
|
+
#endif
|
|
1329
1370
|
#endif
|
|
1330
1371
|
|
|
1331
1372
|
// Make sure the compiled path of Python is replaced.
|
|
@@ -1334,8 +1375,8 @@ orig_argv = argv;
|
|
|
1334
1375
|
orig_argc = argc;
|
|
1335
1376
|
|
|
1336
1377
|
// Early command line parsing.
|
|
1337
|
-
NUITKA_PRINT_TRACE("main(): Calling
|
|
1338
|
-
setCommandLineParameters(argc, argv
|
|
1378
|
+
NUITKA_PRINT_TRACE("main(): Calling setCommandLineParameters.");
|
|
1379
|
+
setCommandLineParameters(argc, argv);
|
|
1339
1380
|
|
|
1340
1381
|
/* For Python installations that need the home set, we inject it back here. */
|
|
1341
1382
|
#if defined(PYTHON_HOME_PATH)
|
|
@@ -1371,7 +1412,7 @@ orig_argv = argv;
|
|
|
1371
1412
|
#endif
|
|
1372
1413
|
|
|
1373
1414
|
// Workaround older Python not handling stream setup on redirected files properly.
|
|
1374
|
-
#if PYTHON_VERSION >=
|
|
1415
|
+
#if PYTHON_VERSION >= 0x300 && PYTHON_VERSION < 0x380
|
|
1375
1416
|
{
|
|
1376
1417
|
char const *encoding = NULL;
|
|
1377
1418
|
|
|
@@ -1397,6 +1438,24 @@ orig_argv = argv;
|
|
|
1397
1438
|
#ifdef _NUITKA_STANDALONE
|
|
1398
1439
|
NUITKA_PRINT_TRACE("main(): Restore standalone environment.");
|
|
1399
1440
|
restoreStandaloneEnvironment();
|
|
1441
|
+
#else
|
|
1442
|
+
{
|
|
1443
|
+
environment_char_t const *python_path_cstr = getEnvironmentVariable("NUITKA_PYTHONPATH");
|
|
1444
|
+
|
|
1445
|
+
if (python_path_cstr != NULL) {
|
|
1446
|
+
PyObject *python_path_str = Nuitka_String_FromFilename(python_path_cstr);
|
|
1447
|
+
#ifdef _WIN32
|
|
1448
|
+
PyObject *python_path_list = PyObject_CallMethod(python_path_str, (char *)"split", (char *)"s", ";");
|
|
1449
|
+
#else
|
|
1450
|
+
PyObject *python_path_list = PyObject_CallMethod(python_path_str, (char *)"split", (char *)"s", ":");
|
|
1451
|
+
#endif
|
|
1452
|
+
Py_DECREF(python_path_str);
|
|
1453
|
+
|
|
1454
|
+
PySys_SetObject("path", python_path_list);
|
|
1455
|
+
|
|
1456
|
+
unsetEnvironmentVariable("NUITKA_PYTHONPATH");
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1400
1459
|
#endif
|
|
1401
1460
|
|
|
1402
1461
|
/* Lie about it, believe it or not, there are "site" files, that check
|
|
@@ -1405,9 +1464,6 @@ orig_argv = argv;
|
|
|
1405
1464
|
Py_NoSiteFlag = SYSFLAG_NO_SITE;
|
|
1406
1465
|
|
|
1407
1466
|
/* Set the command line parameters for run time usage. */
|
|
1408
|
-
NUITKA_PRINT_TRACE("main(): Calling setCommandLineParameters.");
|
|
1409
|
-
setCommandLineParameters(argc, argv, false);
|
|
1410
|
-
|
|
1411
1467
|
PySys_SetArgv(argc, orig_argv);
|
|
1412
1468
|
// Empty "sys.path" again, the above adds program directory to it.
|
|
1413
1469
|
#if SYSFLAG_ISOLATED
|
|
@@ -1477,6 +1533,57 @@ orig_argv = argv;
|
|
|
1477
1533
|
}
|
|
1478
1534
|
#endif
|
|
1479
1535
|
|
|
1536
|
+
#if defined(_WIN32) && defined(_NUITKA_ATTACH_CONSOLE_WINDOW)
|
|
1537
|
+
if (needs_stdout_attaching) {
|
|
1538
|
+
PyObject *filename = Nuitka_String_FromString("CONOUT$");
|
|
1539
|
+
// This defaults to "utf-8" internally. We may add an argument of use
|
|
1540
|
+
// platform ones in the future.
|
|
1541
|
+
PyObject *encoding = NULL;
|
|
1542
|
+
|
|
1543
|
+
PyObject *stdout_file = BUILTIN_OPEN_SIMPLE(tstate, filename, "w", SYSFLAG_UNBUFFERED != 1, encoding);
|
|
1544
|
+
if (unlikely(stdout_file == NULL)) {
|
|
1545
|
+
PyErr_PrintEx(1);
|
|
1546
|
+
Py_Exit(1);
|
|
1547
|
+
}
|
|
1548
|
+
|
|
1549
|
+
Py_DECREF(filename);
|
|
1550
|
+
|
|
1551
|
+
Nuitka_SysSetObject("stdout", stdout_file);
|
|
1552
|
+
}
|
|
1553
|
+
|
|
1554
|
+
if (needs_stderr_attaching) {
|
|
1555
|
+
PyObject *filename = Nuitka_String_FromString("CONOUT$");
|
|
1556
|
+
// This defaults to "utf-8" internally. We may add an argument of use
|
|
1557
|
+
// platform ones in the future.
|
|
1558
|
+
PyObject *encoding = NULL;
|
|
1559
|
+
|
|
1560
|
+
PyObject *stderr_file = BUILTIN_OPEN_SIMPLE(tstate, filename, "w", SYSFLAG_UNBUFFERED != 1, encoding);
|
|
1561
|
+
if (unlikely(stderr_file == NULL)) {
|
|
1562
|
+
PyErr_PrintEx(1);
|
|
1563
|
+
Py_Exit(1);
|
|
1564
|
+
}
|
|
1565
|
+
|
|
1566
|
+
Py_DECREF(filename);
|
|
1567
|
+
|
|
1568
|
+
Nuitka_SysSetObject("stderr", stderr_file);
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1571
|
+
if (needs_stdin_attaching) {
|
|
1572
|
+
PyObject *filename = Nuitka_String_FromString("CONIN$");
|
|
1573
|
+
// This defaults to "utf-8" internally. We may add an argument of use
|
|
1574
|
+
// platform ones in the future.
|
|
1575
|
+
PyObject *encoding = NULL;
|
|
1576
|
+
|
|
1577
|
+
// CPython core requires stdin to be buffered due to methods usage, and it won't matter
|
|
1578
|
+
// here much.
|
|
1579
|
+
PyObject *stdin_file = BUILTIN_OPEN_SIMPLE(tstate, filename, "r", true, encoding);
|
|
1580
|
+
|
|
1581
|
+
Py_DECREF(filename);
|
|
1582
|
+
|
|
1583
|
+
Nuitka_SysSetObject("stdin", stdin_file);
|
|
1584
|
+
}
|
|
1585
|
+
#endif
|
|
1586
|
+
|
|
1480
1587
|
NUITKA_PRINT_TRACE("main(): Setting Python input/output handles.");
|
|
1481
1588
|
setInputOutputHandles(tstate);
|
|
1482
1589
|
|
|
@@ -1485,8 +1592,10 @@ orig_argv = argv;
|
|
|
1485
1592
|
#if PYTHON_VERSION >= 0x300
|
|
1486
1593
|
// Make sure the importlib fully bootstraps as we couldn't load it with the
|
|
1487
1594
|
// standard loader.
|
|
1488
|
-
|
|
1489
|
-
|
|
1595
|
+
{
|
|
1596
|
+
NUITKA_MAY_BE_UNUSED PyObject *importlib_module = getImportLibBootstrapModule();
|
|
1597
|
+
CHECK_OBJECT(importlib_module);
|
|
1598
|
+
}
|
|
1490
1599
|
#endif
|
|
1491
1600
|
|
|
1492
1601
|
NUITKA_PRINT_TRACE("main(): Calling setEarlyFrozenModulesFileAttribute().");
|
|
@@ -1503,12 +1612,14 @@ orig_argv = argv;
|
|
|
1503
1612
|
/* Enable meta path based loader. */
|
|
1504
1613
|
setupMetaPathBasedLoader(tstate);
|
|
1505
1614
|
|
|
1615
|
+
#if PYTHON_VERSION < 0x3d0
|
|
1506
1616
|
/* Initialize warnings module. */
|
|
1507
1617
|
_PyWarnings_Init();
|
|
1618
|
+
#endif
|
|
1508
1619
|
|
|
1509
1620
|
#if NO_PYTHON_WARNINGS && PYTHON_VERSION >= 0x342 && PYTHON_VERSION < 0x3a0 && defined(_NUITKA_FULL_COMPAT)
|
|
1510
1621
|
// For full compatibility bump the warnings registry version,
|
|
1511
|
-
// otherwise modules "
|
|
1622
|
+
// otherwise modules "__warningregistry__" will mismatch.
|
|
1512
1623
|
PyObject *warnings_module = PyImport_ImportModule("warnings");
|
|
1513
1624
|
PyObject *meth = PyObject_GetAttrString(warnings_module, "_filters_mutated");
|
|
1514
1625
|
|
|
@@ -1521,8 +1632,13 @@ orig_argv = argv;
|
|
|
1521
1632
|
|
|
1522
1633
|
#if PYTHON_VERSION >= 0x300
|
|
1523
1634
|
NUITKA_PRINT_TRACE("main(): Calling patchInspectModule().");
|
|
1635
|
+
|
|
1636
|
+
// TODO: Python3.13 NoGIL: This is causing errors during bytecode import
|
|
1637
|
+
// that are unexplained.
|
|
1638
|
+
#if !defined(Py_GIL_DISABLED)
|
|
1524
1639
|
patchInspectModule(tstate);
|
|
1525
1640
|
#endif
|
|
1641
|
+
#endif
|
|
1526
1642
|
|
|
1527
1643
|
#if PYTHON_VERSION >= 0x300 && SYSFLAG_NO_RANDOMIZATION == 1
|
|
1528
1644
|
NUITKA_PRINT_TRACE("main(): Reverting to initial 'PYTHONHASHSEED' value.");
|
|
@@ -1558,16 +1674,52 @@ orig_argv = argv;
|
|
|
1558
1674
|
#ifdef _NUITKA_PLUGIN_MULTIPROCESSING_ENABLED
|
|
1559
1675
|
if (unlikely(is_multiprocessing_fork)) {
|
|
1560
1676
|
NUITKA_PRINT_TRACE("main(): Calling __parents_main__.");
|
|
1561
|
-
EXECUTE_MAIN_MODULE("__parents_main__");
|
|
1677
|
+
EXECUTE_MAIN_MODULE(tstate, "__parents_main__", false);
|
|
1562
1678
|
|
|
1563
|
-
int exit_code = HANDLE_PROGRAM_EXIT();
|
|
1679
|
+
int exit_code = HANDLE_PROGRAM_EXIT(tstate);
|
|
1564
1680
|
|
|
1565
1681
|
NUITKA_PRINT_TRACE("main(): Calling __parents_main__ Py_Exit.");
|
|
1566
1682
|
Py_Exit(exit_code);
|
|
1683
|
+
#if defined(_WIN32)
|
|
1684
|
+
} else if (unlikely(is_joblib_popen_loky_win32)) {
|
|
1685
|
+
NUITKA_PRINT_TRACE("main(): Calling joblib.externals.loky.backend.popen_loky_win32.");
|
|
1686
|
+
PyObject *joblib_popen_loky_win32_module =
|
|
1687
|
+
EXECUTE_MAIN_MODULE(tstate, "joblib.externals.loky.backend.popen_loky_win32", true);
|
|
1688
|
+
|
|
1689
|
+
// Remove the "-c" and options part like CPython would do as well.
|
|
1690
|
+
PyObject *argv_list = Nuitka_SysGetObject("argv");
|
|
1691
|
+
Py_ssize_t size = PyList_Size(argv_list);
|
|
1692
|
+
|
|
1693
|
+
// Negative indexes are not supported by this function.
|
|
1694
|
+
int res = PyList_SetSlice(argv_list, 1, size - 2, const_tuple_empty);
|
|
1695
|
+
assert(res == 0);
|
|
1696
|
+
|
|
1697
|
+
PyObject *main_function = PyObject_GetAttrString(joblib_popen_loky_win32_module, "main");
|
|
1698
|
+
CHECK_OBJECT(main_function);
|
|
1699
|
+
|
|
1700
|
+
if (loky_joblib_pipe_handle_arg == 0) {
|
|
1701
|
+
CALL_FUNCTION_NO_ARGS(tstate, main_function);
|
|
1702
|
+
} else {
|
|
1703
|
+
char const *kw_keys[] = {"pipe_handle", "parent_pid"};
|
|
1704
|
+
PyObject *kw_values[] = {
|
|
1705
|
+
Nuitka_PyLong_FromLong(loky_joblib_pipe_handle_arg),
|
|
1706
|
+
Nuitka_PyLong_FromLong(loky_joblib_parent_pid_arg),
|
|
1707
|
+
};
|
|
1708
|
+
|
|
1709
|
+
PyObject *kw_args = MAKE_DICT_X_CSTR(kw_keys, kw_values, sizeof(kw_values) / sizeof(PyObject *));
|
|
1710
|
+
|
|
1711
|
+
CALL_FUNCTION_WITH_KW_ARGS(tstate, main_function, kw_args);
|
|
1712
|
+
}
|
|
1713
|
+
|
|
1714
|
+
int exit_code = HANDLE_PROGRAM_EXIT(tstate);
|
|
1715
|
+
|
|
1716
|
+
NUITKA_PRINT_TRACE("main(): Calling 'joblib.externals.loky.backend.popen_loky_posix' Py_Exit.");
|
|
1717
|
+
Py_Exit(exit_code);
|
|
1718
|
+
#else
|
|
1567
1719
|
} else if (unlikely(is_joblib_popen_loky_posix)) {
|
|
1568
1720
|
NUITKA_PRINT_TRACE("main(): Calling joblib.externals.loky.backend.popen_loky_posix.");
|
|
1569
1721
|
PyObject *joblib_popen_loky_posix_module =
|
|
1570
|
-
EXECUTE_MAIN_MODULE("joblib.externals.loky.backend.popen_loky_posix");
|
|
1722
|
+
EXECUTE_MAIN_MODULE(tstate, "joblib.externals.loky.backend.popen_loky_posix", true);
|
|
1571
1723
|
|
|
1572
1724
|
// Remove the "-m" like CPython would do as well.
|
|
1573
1725
|
int res = PyList_SetSlice(Nuitka_SysGetObject("argv"), 0, 2, const_tuple_empty);
|
|
@@ -1578,35 +1730,51 @@ orig_argv = argv;
|
|
|
1578
1730
|
|
|
1579
1731
|
CALL_FUNCTION_NO_ARGS(tstate, main_function);
|
|
1580
1732
|
|
|
1581
|
-
int exit_code = HANDLE_PROGRAM_EXIT();
|
|
1733
|
+
int exit_code = HANDLE_PROGRAM_EXIT(tstate);
|
|
1582
1734
|
|
|
1583
|
-
NUITKA_PRINT_TRACE("main(): Calling joblib.externals.loky.backend.popen_loky_posix Py_Exit.");
|
|
1735
|
+
NUITKA_PRINT_TRACE("main(): Calling 'joblib.externals.loky.backend.popen_loky_posix' Py_Exit.");
|
|
1584
1736
|
Py_Exit(exit_code);
|
|
1737
|
+
#endif
|
|
1585
1738
|
} else if (unlikely(multiprocessing_resource_tracker_arg != -1)) {
|
|
1586
1739
|
NUITKA_PRINT_TRACE("main(): Launching as 'multiprocessing.resource_tracker'.");
|
|
1587
|
-
PyObject *resource_tracker_module = EXECUTE_MAIN_MODULE("multiprocessing.resource_tracker");
|
|
1740
|
+
PyObject *resource_tracker_module = EXECUTE_MAIN_MODULE(tstate, "multiprocessing.resource_tracker", true);
|
|
1588
1741
|
|
|
1589
1742
|
PyObject *main_function = PyObject_GetAttrString(resource_tracker_module, "main");
|
|
1590
1743
|
CHECK_OBJECT(main_function);
|
|
1591
1744
|
|
|
1592
|
-
CALL_FUNCTION_WITH_SINGLE_ARG(tstate, main_function,
|
|
1745
|
+
CALL_FUNCTION_WITH_SINGLE_ARG(tstate, main_function,
|
|
1746
|
+
Nuitka_PyInt_FromLong(multiprocessing_resource_tracker_arg));
|
|
1593
1747
|
|
|
1594
|
-
int exit_code = HANDLE_PROGRAM_EXIT();
|
|
1748
|
+
int exit_code = HANDLE_PROGRAM_EXIT(tstate);
|
|
1595
1749
|
|
|
1596
|
-
NUITKA_PRINT_TRACE("main(): Calling resource_tracker Py_Exit.");
|
|
1750
|
+
NUITKA_PRINT_TRACE("main(): Calling 'multiprocessing.resource_tracker' Py_Exit.");
|
|
1597
1751
|
Py_Exit(exit_code);
|
|
1598
1752
|
} else if (unlikely(loky_resource_tracker_arg != -1)) {
|
|
1599
1753
|
NUITKA_PRINT_TRACE("main(): Launching as 'joblib.externals.loky.backend.resource_tracker'.");
|
|
1600
|
-
PyObject *resource_tracker_module =
|
|
1754
|
+
PyObject *resource_tracker_module =
|
|
1755
|
+
EXECUTE_MAIN_MODULE(tstate, "joblib.externals.loky.backend.resource_tracker", true);
|
|
1756
|
+
CHECK_OBJECT(resource_tracker_module);
|
|
1601
1757
|
|
|
1602
1758
|
PyObject *main_function = PyObject_GetAttrString(resource_tracker_module, "main");
|
|
1603
1759
|
CHECK_OBJECT(main_function);
|
|
1604
1760
|
|
|
1605
|
-
CALL_FUNCTION_WITH_SINGLE_ARG(tstate, main_function,
|
|
1761
|
+
CALL_FUNCTION_WITH_SINGLE_ARG(tstate, main_function, Nuitka_PyInt_FromLong(loky_resource_tracker_arg));
|
|
1762
|
+
|
|
1763
|
+
int exit_code = HANDLE_PROGRAM_EXIT(tstate);
|
|
1764
|
+
|
|
1765
|
+
NUITKA_PRINT_TRACE("main(): Calling 'joblib.externals.loky.backend.resource_tracker' Py_Exit.");
|
|
1766
|
+
Py_Exit(exit_code);
|
|
1767
|
+
} else if (unlikely(is_anyio_to_process)) {
|
|
1768
|
+
PyObject *anyio_module = EXECUTE_MAIN_MODULE(tstate, "anyio.to_process", false);
|
|
1769
|
+
|
|
1770
|
+
PyObject *main_function = PyObject_GetAttrString(anyio_module, "process_worker");
|
|
1771
|
+
CHECK_OBJECT(main_function);
|
|
1772
|
+
|
|
1773
|
+
CALL_FUNCTION_NO_ARGS(tstate, main_function);
|
|
1606
1774
|
|
|
1607
|
-
int exit_code = HANDLE_PROGRAM_EXIT();
|
|
1775
|
+
int exit_code = HANDLE_PROGRAM_EXIT(tstate);
|
|
1608
1776
|
|
|
1609
|
-
NUITKA_PRINT_TRACE("main(): Calling
|
|
1777
|
+
NUITKA_PRINT_TRACE("main(): Calling 'anyio.to_process' Py_Exit.");
|
|
1610
1778
|
Py_Exit(exit_code);
|
|
1611
1779
|
} else {
|
|
1612
1780
|
#endif
|
|
@@ -1623,6 +1791,7 @@ orig_argv = argv;
|
|
|
1623
1791
|
}
|
|
1624
1792
|
#endif
|
|
1625
1793
|
PyDict_DelItemString(Nuitka_GetSysModules(), NUITKA_MAIN_MODULE_NAME);
|
|
1794
|
+
DROP_ERROR_OCCURRED(tstate);
|
|
1626
1795
|
|
|
1627
1796
|
#if _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
|
|
1628
1797
|
NUITKA_PRINT_TRACE("main(): Calling plugin SvcLaunchService() entry point.");
|
|
@@ -1630,7 +1799,7 @@ orig_argv = argv;
|
|
|
1630
1799
|
#else
|
|
1631
1800
|
/* Execute the "__main__" module. */
|
|
1632
1801
|
NUITKA_PRINT_TIMING("main(): Calling " NUITKA_MAIN_MODULE_NAME ".");
|
|
1633
|
-
EXECUTE_MAIN_MODULE(NUITKA_MAIN_MODULE_NAME);
|
|
1802
|
+
EXECUTE_MAIN_MODULE(tstate, NUITKA_MAIN_MODULE_NAME, NUITKA_MAIN_IS_PACKAGE_BOOL);
|
|
1634
1803
|
NUITKA_PRINT_TIMING("main(): Exited from " NUITKA_MAIN_MODULE_NAME ".");
|
|
1635
1804
|
|
|
1636
1805
|
#endif
|
|
@@ -1651,13 +1820,13 @@ orig_argv = argv;
|
|
|
1651
1820
|
checkGlobalConstants();
|
|
1652
1821
|
|
|
1653
1822
|
/* TODO: Walk over all loaded compiled modules, and make this kind of checks. */
|
|
1654
|
-
#if !
|
|
1823
|
+
#if !NUITKA_MAIN_IS_PACKAGE_BOOL
|
|
1655
1824
|
checkModuleConstants___main__(tstate);
|
|
1656
1825
|
#endif
|
|
1657
1826
|
|
|
1658
1827
|
#endif
|
|
1659
1828
|
|
|
1660
|
-
int exit_code = HANDLE_PROGRAM_EXIT();
|
|
1829
|
+
int exit_code = HANDLE_PROGRAM_EXIT(tstate);
|
|
1661
1830
|
|
|
1662
1831
|
NUITKA_PRINT_TIMING("main(): Calling Py_Exit.");
|
|
1663
1832
|
Py_Exit(exit_code);
|
|
@@ -1710,3 +1879,18 @@ int Py_Main(int argc, char **argv) { return 0; }
|
|
|
1710
1879
|
}
|
|
1711
1880
|
#endif
|
|
1712
1881
|
#endif
|
|
1882
|
+
|
|
1883
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1884
|
+
// integrates with CPython, but also works on its own.
|
|
1885
|
+
//
|
|
1886
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
1887
|
+
// you may not use this file except in compliance with the License.
|
|
1888
|
+
// You may obtain a copy of the License at
|
|
1889
|
+
//
|
|
1890
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
1891
|
+
//
|
|
1892
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
1893
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
1894
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1895
|
+
// See the License for the specific language governing permissions and
|
|
1896
|
+
// limitations under the License.
|