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
nuitka/plugins/PluginBase.py
CHANGED
|
@@ -1,20 +1,6 @@
|
|
|
1
|
-
# Copyright
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
# integrates with CPython, but also works on its own.
|
|
5
|
-
#
|
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
# you may not use this file except in compliance with the License.
|
|
8
|
-
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
1
|
+
# Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
2
|
+
|
|
3
|
+
|
|
18
4
|
"""
|
|
19
5
|
Plugins: Welcome to Nuitka! This is your shortest way to become part of it.
|
|
20
6
|
|
|
@@ -31,9 +17,10 @@ import functools
|
|
|
31
17
|
import inspect
|
|
32
18
|
import os
|
|
33
19
|
import sys
|
|
20
|
+
import unittest
|
|
34
21
|
|
|
35
22
|
from nuitka import Options
|
|
36
|
-
from nuitka.__past__ import
|
|
23
|
+
from nuitka.__past__ import iter_modules, unicode
|
|
37
24
|
from nuitka.containers.Namedtuples import makeNamedtupleClass
|
|
38
25
|
from nuitka.containers.OrderedSets import OrderedSet
|
|
39
26
|
from nuitka.freezer.IncludedDataFiles import (
|
|
@@ -50,27 +37,53 @@ from nuitka.freezer.IncludedEntryPoints import (
|
|
|
50
37
|
)
|
|
51
38
|
from nuitka.ModuleRegistry import (
|
|
52
39
|
addModuleInfluencingCondition,
|
|
40
|
+
addModuleInfluencingDetection,
|
|
41
|
+
addModuleInfluencingParameter,
|
|
42
|
+
addModuleInfluencingVariable,
|
|
53
43
|
getModuleInclusionInfoByName,
|
|
54
44
|
)
|
|
55
45
|
from nuitka.Options import (
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
46
|
+
getCompanyName,
|
|
47
|
+
getFileVersion,
|
|
48
|
+
getProductFileVersion,
|
|
49
|
+
getProductName,
|
|
50
|
+
getProductVersion,
|
|
59
51
|
isDeploymentMode,
|
|
52
|
+
isOnefileMode,
|
|
53
|
+
isOnefileTempDirMode,
|
|
60
54
|
isStandaloneMode,
|
|
61
55
|
shallCreateAppBundle,
|
|
62
56
|
shallMakeModule,
|
|
63
57
|
shallShowExecutedCommands,
|
|
64
58
|
)
|
|
65
|
-
from nuitka.PythonFlavors import
|
|
59
|
+
from nuitka.PythonFlavors import (
|
|
60
|
+
isAnacondaPython,
|
|
61
|
+
isDebianPackagePython,
|
|
62
|
+
isNuitkaPython,
|
|
63
|
+
)
|
|
66
64
|
from nuitka.PythonVersions import (
|
|
67
65
|
getTestExecutionPythonVersions,
|
|
68
66
|
python_version,
|
|
67
|
+
python_version_full_str,
|
|
68
|
+
python_version_str,
|
|
69
69
|
)
|
|
70
70
|
from nuitka.Tracing import plugins_logger
|
|
71
|
-
from nuitka.utils.
|
|
72
|
-
from nuitka.utils.
|
|
73
|
-
|
|
71
|
+
from nuitka.utils.AppDirs import getAppdirsModule
|
|
72
|
+
from nuitka.utils.Distributions import (
|
|
73
|
+
getDistributionFromModuleName,
|
|
74
|
+
getDistributionName,
|
|
75
|
+
isDistributionCondaPackage,
|
|
76
|
+
)
|
|
77
|
+
from nuitka.utils.Execution import (
|
|
78
|
+
NuitkaCalledProcessError,
|
|
79
|
+
check_output,
|
|
80
|
+
withEnvironmentVarsOverridden,
|
|
81
|
+
)
|
|
82
|
+
from nuitka.utils.FileOperations import (
|
|
83
|
+
changeFilenameExtension,
|
|
84
|
+
getFileContents,
|
|
85
|
+
)
|
|
86
|
+
from nuitka.utils.Importing import getSharedLibrarySuffix, isBuiltinModuleName
|
|
74
87
|
from nuitka.utils.ModuleNames import (
|
|
75
88
|
ModuleName,
|
|
76
89
|
makeTriggerModuleName,
|
|
@@ -78,11 +91,15 @@ from nuitka.utils.ModuleNames import (
|
|
|
78
91
|
pre_module_load_trigger_name,
|
|
79
92
|
)
|
|
80
93
|
from nuitka.utils.SharedLibraries import locateDLL, locateDLLsInDirectory
|
|
94
|
+
from nuitka.utils.SlotMetaClasses import getMetaClassBase
|
|
95
|
+
from nuitka.utils.StaticLibraries import getSystemStaticLibPythonPath
|
|
81
96
|
from nuitka.utils.Utils import (
|
|
82
97
|
getArchitecture,
|
|
98
|
+
isAndroidBasedLinux,
|
|
83
99
|
isLinux,
|
|
84
100
|
isMacOS,
|
|
85
101
|
isWin32Windows,
|
|
102
|
+
withNoWarning,
|
|
86
103
|
)
|
|
87
104
|
|
|
88
105
|
_warned_unused_plugins = set()
|
|
@@ -94,6 +111,131 @@ _package_versions = {}
|
|
|
94
111
|
# "getEvaluationConditionControlTags" value.
|
|
95
112
|
control_tags = {}
|
|
96
113
|
|
|
114
|
+
_context_dict = None
|
|
115
|
+
|
|
116
|
+
# Populated when "constants" and "variables" yaml sections get evaluated.
|
|
117
|
+
_module_config_constants = {}
|
|
118
|
+
_module_config_variables = {}
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def _getImportLibModule():
|
|
122
|
+
try:
|
|
123
|
+
import importlib
|
|
124
|
+
except ImportError:
|
|
125
|
+
return None
|
|
126
|
+
else:
|
|
127
|
+
return importlib
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def _makeEvaluationContext(logger, full_name, config_name):
|
|
131
|
+
context = TagContext(logger=logger, full_name=full_name, config_name=config_name)
|
|
132
|
+
context.update(control_tags)
|
|
133
|
+
|
|
134
|
+
context.update(_getEvaluationContext())
|
|
135
|
+
|
|
136
|
+
return context
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def _getEvaluationContext():
|
|
140
|
+
# Using global here, as this is really a singleton, in the form of a module,
|
|
141
|
+
# pylint: disable=global-statement
|
|
142
|
+
global _context_dict
|
|
143
|
+
|
|
144
|
+
if _context_dict is None:
|
|
145
|
+
_context_dict = {
|
|
146
|
+
"macos": isMacOS(),
|
|
147
|
+
"win32": isWin32Windows(),
|
|
148
|
+
"linux": isLinux(),
|
|
149
|
+
"android": isAndroidBasedLinux(),
|
|
150
|
+
"android32": isAndroidBasedLinux() and sys.maxsize < 2**32,
|
|
151
|
+
"android64": isAndroidBasedLinux() and sys.maxsize >= 2**64 - 1,
|
|
152
|
+
"anaconda": isAnacondaPython(),
|
|
153
|
+
"is_conda_package": isDistributionCondaPackage,
|
|
154
|
+
"debian_python": isDebianPackagePython(),
|
|
155
|
+
"nuitka_python": isNuitkaPython(),
|
|
156
|
+
"standalone": isStandaloneMode(),
|
|
157
|
+
"onefile": isOnefileMode(),
|
|
158
|
+
"onefile_cached": not isOnefileTempDirMode(),
|
|
159
|
+
"module_mode": shallMakeModule(),
|
|
160
|
+
"deployment": isDeploymentMode(),
|
|
161
|
+
# Version information
|
|
162
|
+
"company": getCompanyName(),
|
|
163
|
+
"product": getProductName(),
|
|
164
|
+
"file_version": getFileVersion(),
|
|
165
|
+
"product_version": getProductVersion(),
|
|
166
|
+
"combined_version": getProductFileVersion(),
|
|
167
|
+
# Querying package versions.
|
|
168
|
+
"version": _getPackageVersion,
|
|
169
|
+
"version_str": _getPackageVersionStr,
|
|
170
|
+
"get_dist_name": _getDistributionNameFromPackageName,
|
|
171
|
+
"plugin": _isPluginActive,
|
|
172
|
+
# Iterating packages
|
|
173
|
+
"iterate_modules": _iterate_module_names,
|
|
174
|
+
# Locating package directories
|
|
175
|
+
"get_module_directory": _getModuleDirectory,
|
|
176
|
+
# Checking module presence
|
|
177
|
+
"has_module": _hasModule,
|
|
178
|
+
# Getting data files contents
|
|
179
|
+
"get_data": _getPackageData,
|
|
180
|
+
# Querying package properties
|
|
181
|
+
"has_builtin_module": isBuiltinModuleName,
|
|
182
|
+
# Architectures
|
|
183
|
+
"arch_x86": getArchitecture() == "x86",
|
|
184
|
+
"arch_amd64": getArchitecture() == "x86_64",
|
|
185
|
+
"arch_arm64": getArchitecture() == "arm64",
|
|
186
|
+
# Frequent used modules
|
|
187
|
+
"sys": sys,
|
|
188
|
+
"os": os,
|
|
189
|
+
"importlib": _getImportLibModule(),
|
|
190
|
+
"appdirs": getAppdirsModule(),
|
|
191
|
+
"unittest": unittest,
|
|
192
|
+
# Python version string
|
|
193
|
+
"python_version_str": python_version_str,
|
|
194
|
+
"python_version_full_str": python_version_full_str,
|
|
195
|
+
# Technical requirements
|
|
196
|
+
"static_libpython": getSystemStaticLibPythonPath() is not None,
|
|
197
|
+
# Builtins
|
|
198
|
+
"True": True,
|
|
199
|
+
"False": False,
|
|
200
|
+
"None": None,
|
|
201
|
+
"repr": repr,
|
|
202
|
+
"len": len,
|
|
203
|
+
"str": str,
|
|
204
|
+
"bool": bool,
|
|
205
|
+
"int": int,
|
|
206
|
+
"tuple": tuple,
|
|
207
|
+
"list": list,
|
|
208
|
+
"dict": dict,
|
|
209
|
+
"set": set,
|
|
210
|
+
"getattr": getattr,
|
|
211
|
+
"hasattr": hasattr,
|
|
212
|
+
"frozenset": frozenset,
|
|
213
|
+
"__import__": __import__,
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
versions = getTestExecutionPythonVersions()
|
|
217
|
+
|
|
218
|
+
for version in versions:
|
|
219
|
+
big, major = version.split(".")
|
|
220
|
+
numeric_version = int(big) * 256 + int(major) * 16
|
|
221
|
+
is_same_or_higher_version = python_version >= numeric_version
|
|
222
|
+
|
|
223
|
+
_context_dict["python" + big + major + "_or_higher"] = (
|
|
224
|
+
is_same_or_higher_version
|
|
225
|
+
)
|
|
226
|
+
_context_dict["before_python" + big + major] = not is_same_or_higher_version
|
|
227
|
+
|
|
228
|
+
_context_dict["before_python3"] = python_version < 0x300
|
|
229
|
+
_context_dict["python3_or_higher"] = python_version >= 0x300
|
|
230
|
+
|
|
231
|
+
if not isNuitkaPython():
|
|
232
|
+
_context_dict["extension_std_suffix"] = getSharedLibrarySuffix(
|
|
233
|
+
preferred=True
|
|
234
|
+
)
|
|
235
|
+
_context_dict["extension_suffix"] = getSharedLibrarySuffix(preferred=False)
|
|
236
|
+
|
|
237
|
+
return _context_dict
|
|
238
|
+
|
|
97
239
|
|
|
98
240
|
def _convertVersionToTuple(version_str):
|
|
99
241
|
def numberize(v):
|
|
@@ -104,6 +246,8 @@ def _convertVersionToTuple(version_str):
|
|
|
104
246
|
|
|
105
247
|
|
|
106
248
|
def _getPackageNameFromDistributionName(distribution_name):
|
|
249
|
+
# spell-checker: ignore opencv, pyobjc, objc
|
|
250
|
+
|
|
107
251
|
if distribution_name in ("opencv-python", "opencv-python-headless"):
|
|
108
252
|
return "cv2"
|
|
109
253
|
elif distribution_name == "pyobjc":
|
|
@@ -112,6 +256,16 @@ def _getPackageNameFromDistributionName(distribution_name):
|
|
|
112
256
|
return distribution_name
|
|
113
257
|
|
|
114
258
|
|
|
259
|
+
def _getDistributionNameFromPackageName(package_name):
|
|
260
|
+
package_name = ModuleName(package_name)
|
|
261
|
+
distribution = getDistributionFromModuleName(package_name)
|
|
262
|
+
|
|
263
|
+
if distribution is None:
|
|
264
|
+
return package_name.asString()
|
|
265
|
+
else:
|
|
266
|
+
return getDistributionName(distribution)
|
|
267
|
+
|
|
268
|
+
|
|
115
269
|
def _getPackageVersion(distribution_name):
|
|
116
270
|
if distribution_name not in _package_versions:
|
|
117
271
|
try:
|
|
@@ -157,13 +311,64 @@ def _getPackageVersion(distribution_name):
|
|
|
157
311
|
return _package_versions[distribution_name]
|
|
158
312
|
|
|
159
313
|
|
|
314
|
+
def _getPackageVersionStr(distribution_name):
|
|
315
|
+
version = _getPackageVersion(distribution_name)
|
|
316
|
+
|
|
317
|
+
if version is not None:
|
|
318
|
+
version = ".".join(str(d) for d in version)
|
|
319
|
+
|
|
320
|
+
return version
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
def _getModuleDirectory(module_name):
|
|
324
|
+
from nuitka.importing.Importing import locateModule
|
|
325
|
+
|
|
326
|
+
_module_name, module_filename, _module_kind, _finding = locateModule(
|
|
327
|
+
module_name=ModuleName(module_name), parent_package=None, level=0
|
|
328
|
+
)
|
|
329
|
+
|
|
330
|
+
return module_filename
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
def _hasModule(module_name):
|
|
334
|
+
from nuitka.importing.Importing import locateModule
|
|
335
|
+
|
|
336
|
+
_module_name, _module_filename, _module_kind, finding = locateModule(
|
|
337
|
+
module_name=ModuleName(module_name), parent_package=None, level=0
|
|
338
|
+
)
|
|
339
|
+
|
|
340
|
+
return finding != "not-found"
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
def _getPackageData(package_name, resource):
|
|
344
|
+
from nuitka.utils.PackageResources import getPackageData
|
|
345
|
+
|
|
346
|
+
return getPackageData(package_name=ModuleName(package_name), resource=resource)
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
def _iterate_module_names(package_name):
|
|
350
|
+
package_name = ModuleName(package_name)
|
|
351
|
+
package_path = _getModuleDirectory(module_name=package_name)
|
|
352
|
+
|
|
353
|
+
result = []
|
|
354
|
+
|
|
355
|
+
for module_info in iter_modules([package_path]):
|
|
356
|
+
module_name = package_name.getChildNamed(module_info.name)
|
|
357
|
+
result.append(module_name.asString())
|
|
358
|
+
|
|
359
|
+
if module_info.ispkg: # spell-checker: ignore ispkg
|
|
360
|
+
result.extend(_iterate_module_names(package_name=module_name))
|
|
361
|
+
|
|
362
|
+
return result
|
|
363
|
+
|
|
364
|
+
|
|
160
365
|
def _isPluginActive(plugin_name):
|
|
161
366
|
from .Plugins import getUserActivatedPluginNames
|
|
162
367
|
|
|
163
368
|
return plugin_name in getUserActivatedPluginNames()
|
|
164
369
|
|
|
165
370
|
|
|
166
|
-
class NuitkaPluginBase(getMetaClassBase("Plugin")):
|
|
371
|
+
class NuitkaPluginBase(getMetaClassBase("Plugin", require_slots=False)):
|
|
167
372
|
"""Nuitka base class for all plugins.
|
|
168
373
|
|
|
169
374
|
Derive your plugin from "NuitkaPluginBase" please.
|
|
@@ -273,7 +478,7 @@ class NuitkaPluginBase(getMetaClassBase("Plugin")):
|
|
|
273
478
|
# Virtual method, pylint: disable=no-self-use,unused-argument
|
|
274
479
|
return ()
|
|
275
480
|
|
|
276
|
-
def onModuleSourceCode(self, module_name, source_code):
|
|
481
|
+
def onModuleSourceCode(self, module_name, source_filename, source_code):
|
|
277
482
|
"""Inspect or modify source code.
|
|
278
483
|
|
|
279
484
|
Args:
|
|
@@ -286,6 +491,7 @@ class NuitkaPluginBase(getMetaClassBase("Plugin")):
|
|
|
286
491
|
going to allow simply checking the source code without the need to
|
|
287
492
|
pass it back.
|
|
288
493
|
"""
|
|
494
|
+
# Virtual method, pylint: disable=unused-argument
|
|
289
495
|
self.checkModuleSourceCode(module_name, source_code)
|
|
290
496
|
|
|
291
497
|
return source_code
|
|
@@ -431,6 +637,25 @@ class NuitkaPluginBase(getMetaClassBase("Plugin")):
|
|
|
431
637
|
# Virtual method, pylint: disable=no-self-use,unused-argument
|
|
432
638
|
return None
|
|
433
639
|
|
|
640
|
+
def onModuleUsageLookAhead(
|
|
641
|
+
self, module_name, module_filename, module_kind, get_module_source
|
|
642
|
+
):
|
|
643
|
+
"""React to tentative recursion of a module coming up.
|
|
644
|
+
|
|
645
|
+
For definite usage, use onModuleRecursion where it's a fact and
|
|
646
|
+
happening next. This may be a usage that is later optimized away
|
|
647
|
+
and doesn't impact anything. The main usage is to setup e.g.
|
|
648
|
+
hard imports as a factory, e.g. with detectable lazy loaders.
|
|
649
|
+
|
|
650
|
+
Args:
|
|
651
|
+
module_name: full module name
|
|
652
|
+
module_filename: filename
|
|
653
|
+
module_kind: one of "py", "extension" (shared library)
|
|
654
|
+
get_module_source: callable to get module source code if any
|
|
655
|
+
Returns:
|
|
656
|
+
None
|
|
657
|
+
"""
|
|
658
|
+
|
|
434
659
|
def onModuleRecursion(
|
|
435
660
|
self,
|
|
436
661
|
module_name,
|
|
@@ -440,7 +665,7 @@ class NuitkaPluginBase(getMetaClassBase("Plugin")):
|
|
|
440
665
|
source_ref,
|
|
441
666
|
reason,
|
|
442
667
|
):
|
|
443
|
-
"""React to recursion
|
|
668
|
+
"""React to recursion of a module coming up.
|
|
444
669
|
|
|
445
670
|
Args:
|
|
446
671
|
module_name: full module name
|
|
@@ -555,22 +780,28 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
|
|
|
555
780
|
"""
|
|
556
781
|
return locateDLLsInDirectory(directory)
|
|
557
782
|
|
|
558
|
-
def makeDllEntryPoint(
|
|
783
|
+
def makeDllEntryPoint(
|
|
784
|
+
self, source_path, dest_path, module_name, package_name, reason
|
|
785
|
+
):
|
|
559
786
|
"""Create an entry point, as expected to be provided by getExtraDlls."""
|
|
560
787
|
return makeDllEntryPoint(
|
|
561
788
|
logger=self,
|
|
562
789
|
source_path=source_path,
|
|
563
790
|
dest_path=dest_path,
|
|
791
|
+
module_name=module_name,
|
|
564
792
|
package_name=package_name,
|
|
565
793
|
reason=reason,
|
|
566
794
|
)
|
|
567
795
|
|
|
568
|
-
def makeExeEntryPoint(
|
|
796
|
+
def makeExeEntryPoint(
|
|
797
|
+
self, source_path, dest_path, module_name, package_name, reason
|
|
798
|
+
):
|
|
569
799
|
"""Create an entry point, as expected to be provided by getExtraDlls."""
|
|
570
800
|
return makeExeEntryPoint(
|
|
571
801
|
logger=self,
|
|
572
802
|
source_path=source_path,
|
|
573
803
|
dest_path=dest_path,
|
|
804
|
+
module_name=module_name,
|
|
574
805
|
package_name=package_name,
|
|
575
806
|
reason=reason,
|
|
576
807
|
)
|
|
@@ -716,6 +947,7 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
|
|
|
716
947
|
ignore_suffixes=(),
|
|
717
948
|
only_suffixes=(),
|
|
718
949
|
normalize=True,
|
|
950
|
+
raw=False,
|
|
719
951
|
):
|
|
720
952
|
return makeIncludedDataDirectory(
|
|
721
953
|
source_path=source_path,
|
|
@@ -728,6 +960,7 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
|
|
|
728
960
|
ignore_suffixes=ignore_suffixes,
|
|
729
961
|
only_suffixes=only_suffixes,
|
|
730
962
|
normalize=normalize,
|
|
963
|
+
raw=raw,
|
|
731
964
|
)
|
|
732
965
|
|
|
733
966
|
def makeIncludedEmptyDirectory(self, dest_path, reason, tags):
|
|
@@ -866,6 +1099,18 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
|
|
|
866
1099
|
# Virtual method, pylint: disable=no-self-use,unused-argument
|
|
867
1100
|
return None
|
|
868
1101
|
|
|
1102
|
+
def decideAnnotations(self, module_name):
|
|
1103
|
+
# Virtual method, pylint: disable=no-self-use,unused-argument
|
|
1104
|
+
return None
|
|
1105
|
+
|
|
1106
|
+
def decideDocStrings(self, module_name):
|
|
1107
|
+
# Virtual method, pylint: disable=no-self-use,unused-argument
|
|
1108
|
+
return None
|
|
1109
|
+
|
|
1110
|
+
def decideAssertions(self, module_name):
|
|
1111
|
+
# Virtual method, pylint: disable=no-self-use,unused-argument
|
|
1112
|
+
return None
|
|
1113
|
+
|
|
869
1114
|
def getPreprocessorSymbols(self):
|
|
870
1115
|
"""Decide which C defines to be used in compilation.
|
|
871
1116
|
|
|
@@ -904,6 +1149,21 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
|
|
|
904
1149
|
# Virtual method, pylint: disable=no-self-use
|
|
905
1150
|
return None
|
|
906
1151
|
|
|
1152
|
+
@classmethod
|
|
1153
|
+
def getPluginDataFilesDir(cls):
|
|
1154
|
+
"""Helper function that returns path, where data files for the plugin are stored."""
|
|
1155
|
+
plugin_filename = sys.modules[cls.__module__].__file__
|
|
1156
|
+
return changeFilenameExtension(plugin_filename, "")
|
|
1157
|
+
|
|
1158
|
+
def getPluginDataFileContents(self, filename):
|
|
1159
|
+
"""Helper function that returns contents of a plugin data file."""
|
|
1160
|
+
return getFileContents(
|
|
1161
|
+
os.path.join(
|
|
1162
|
+
self.getPluginDataFilesDir(),
|
|
1163
|
+
filename,
|
|
1164
|
+
)
|
|
1165
|
+
)
|
|
1166
|
+
|
|
907
1167
|
def getExtraCodeFiles(self):
|
|
908
1168
|
"""Add extra code files to the compilation.
|
|
909
1169
|
|
|
@@ -992,7 +1252,8 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
|
|
|
992
1252
|
_runtime_information_cache = {}
|
|
993
1253
|
|
|
994
1254
|
def queryRuntimeInformationMultiple(self, info_name, setup_codes, values):
|
|
995
|
-
info_name = self.plugin_name
|
|
1255
|
+
info_name = self.plugin_name + "_" + info_name
|
|
1256
|
+
info_name = info_name.replace("-", "_").replace(".", "_")
|
|
996
1257
|
|
|
997
1258
|
if info_name in self._runtime_information_cache:
|
|
998
1259
|
return self._runtime_information_cache[info_name]
|
|
@@ -1010,31 +1271,52 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
|
|
|
1010
1271
|
setup_codes = setup_codes.splitlines()
|
|
1011
1272
|
|
|
1012
1273
|
if not setup_codes:
|
|
1013
|
-
setup_codes =
|
|
1274
|
+
setup_codes = ("pass",)
|
|
1014
1275
|
|
|
1015
1276
|
cmd = r"""\
|
|
1016
1277
|
from __future__ import print_function
|
|
1017
1278
|
from __future__ import absolute_import
|
|
1279
|
+
import sys
|
|
1018
1280
|
|
|
1019
1281
|
try:
|
|
1020
1282
|
%(setup_codes)s
|
|
1021
1283
|
except ImportError:
|
|
1022
|
-
import sys
|
|
1023
1284
|
sys.exit(38)
|
|
1285
|
+
try:
|
|
1024
1286
|
%(query_codes)s
|
|
1287
|
+
except Exception as e:
|
|
1288
|
+
sys.stderr.write("\n%%s" %% repr(e))
|
|
1289
|
+
sys.exit(39)
|
|
1025
1290
|
""" % {
|
|
1026
1291
|
"setup_codes": "\n".join(" %s" % line for line in setup_codes),
|
|
1027
|
-
"query_codes": "\n".join(query_codes),
|
|
1292
|
+
"query_codes": "\n".join(" %s" % line for line in query_codes),
|
|
1028
1293
|
}
|
|
1029
1294
|
|
|
1030
1295
|
if shallShowExecutedCommands():
|
|
1031
|
-
self.info("Executing query command:\n%s" % cmd)
|
|
1296
|
+
self.info("Executing query command:\n%s" % cmd, keep_format=True)
|
|
1297
|
+
|
|
1298
|
+
env = dict(os.environ)
|
|
1299
|
+
env["PYTHONIOENCODING"] = "utf8"
|
|
1032
1300
|
|
|
1033
1301
|
try:
|
|
1034
|
-
feedback = check_output([sys.executable, "-c", cmd])
|
|
1302
|
+
feedback = check_output([sys.executable, "-c", cmd], env=env)
|
|
1035
1303
|
except NuitkaCalledProcessError as e:
|
|
1036
1304
|
if e.returncode == 38:
|
|
1037
1305
|
return None
|
|
1306
|
+
|
|
1307
|
+
if Options.is_debug:
|
|
1308
|
+
self.info(cmd, keep_format=True)
|
|
1309
|
+
|
|
1310
|
+
if e.returncode == 39:
|
|
1311
|
+
# TODO: Recognize the ModuleNotFoundError or ImportError exceptions
|
|
1312
|
+
# and output the missing module.
|
|
1313
|
+
self.warning(
|
|
1314
|
+
"Exception during compile time command execution: %s"
|
|
1315
|
+
% e.stderr.splitlines()[-1]
|
|
1316
|
+
)
|
|
1317
|
+
|
|
1318
|
+
return None
|
|
1319
|
+
|
|
1038
1320
|
raise
|
|
1039
1321
|
|
|
1040
1322
|
if str is not bytes: # We want to work with strings, that's hopefully OK.
|
|
@@ -1079,6 +1361,14 @@ except ImportError:
|
|
|
1079
1361
|
# Virtual method, pylint: disable=no-self-use,unused-argument
|
|
1080
1362
|
return False
|
|
1081
1363
|
|
|
1364
|
+
def onClassBodyParsing(self, module_name, class_name, node):
|
|
1365
|
+
# Virtual method, pylint: disable=no-self-use,unused-argument
|
|
1366
|
+
"""Provide a different class body for the class of that module.
|
|
1367
|
+
|
|
1368
|
+
Should return a boolean, indicating if any actual change was done.
|
|
1369
|
+
"""
|
|
1370
|
+
return False
|
|
1371
|
+
|
|
1082
1372
|
def getCacheContributionValues(self, module_name):
|
|
1083
1373
|
"""Provide values that represent the include of a plugin on the compilation.
|
|
1084
1374
|
|
|
@@ -1090,6 +1380,11 @@ except ImportError:
|
|
|
1090
1380
|
# Virtual method, pylint: disable=unused-argument
|
|
1091
1381
|
return self.plugin_name
|
|
1092
1382
|
|
|
1383
|
+
def getExtraConstantDefaultPopulation(self):
|
|
1384
|
+
"""Provide extra global constant values to code generation."""
|
|
1385
|
+
# Virtual method, pylint: disable=no-self-use
|
|
1386
|
+
return ()
|
|
1387
|
+
|
|
1093
1388
|
def decideAllowOutsideDependencies(self, module_name):
|
|
1094
1389
|
"""Decide if outside of Python dependencies are allowed.
|
|
1095
1390
|
|
|
@@ -1100,14 +1395,226 @@ except ImportError:
|
|
|
1100
1395
|
return None
|
|
1101
1396
|
|
|
1102
1397
|
@staticmethod
|
|
1103
|
-
def getPackageVersion(
|
|
1398
|
+
def getPackageVersion(module_name):
|
|
1104
1399
|
"""Provide package version of a distribution."""
|
|
1400
|
+
distribution_name = _getDistributionNameFromPackageName(module_name)
|
|
1401
|
+
|
|
1105
1402
|
return _getPackageVersion(distribution_name)
|
|
1106
1403
|
|
|
1107
1404
|
def getEvaluationConditionControlTags(self):
|
|
1108
1405
|
# Virtual method, pylint: disable=no-self-use
|
|
1109
1406
|
return {}
|
|
1110
1407
|
|
|
1408
|
+
@staticmethod
|
|
1409
|
+
def isValueForEvaluation(expression):
|
|
1410
|
+
return '"' in expression or "'" in expression or "(" in expression
|
|
1411
|
+
|
|
1412
|
+
def evaluateExpressionOrConstant(
|
|
1413
|
+
self, full_name, expression, config_name, extra_context, single_value
|
|
1414
|
+
):
|
|
1415
|
+
if self.isValueForEvaluation(expression):
|
|
1416
|
+
return self.evaluateExpression(
|
|
1417
|
+
full_name=full_name,
|
|
1418
|
+
expression=expression,
|
|
1419
|
+
config_name=config_name,
|
|
1420
|
+
extra_context=extra_context,
|
|
1421
|
+
single_value=single_value,
|
|
1422
|
+
)
|
|
1423
|
+
else:
|
|
1424
|
+
return expression
|
|
1425
|
+
|
|
1426
|
+
def getExpressionConstants(self, full_name):
|
|
1427
|
+
if full_name not in _module_config_constants:
|
|
1428
|
+
constants = {}
|
|
1429
|
+
|
|
1430
|
+
for count, constant_config in enumerate(
|
|
1431
|
+
self.config.get(full_name, section="constants"), start=1
|
|
1432
|
+
):
|
|
1433
|
+
declarations = constant_config.get("declarations")
|
|
1434
|
+
|
|
1435
|
+
if declarations and self.evaluateCondition(
|
|
1436
|
+
full_name=full_name,
|
|
1437
|
+
condition=constant_config.get("when", "True"),
|
|
1438
|
+
):
|
|
1439
|
+
for constant_name, constant_value in declarations.items():
|
|
1440
|
+
constants[constant_name] = self.evaluateExpressionOrConstant(
|
|
1441
|
+
full_name=full_name,
|
|
1442
|
+
expression=constant_value,
|
|
1443
|
+
config_name="constants config #%d" % count,
|
|
1444
|
+
extra_context=None,
|
|
1445
|
+
single_value=False,
|
|
1446
|
+
)
|
|
1447
|
+
|
|
1448
|
+
_module_config_constants[full_name] = constants
|
|
1449
|
+
|
|
1450
|
+
return _module_config_constants[full_name]
|
|
1451
|
+
|
|
1452
|
+
def getExpressionVariables(self, full_name):
|
|
1453
|
+
if full_name not in _module_config_variables:
|
|
1454
|
+
variables = {}
|
|
1455
|
+
|
|
1456
|
+
for count, variable_config in enumerate(
|
|
1457
|
+
self.config.get(full_name, section="variables")
|
|
1458
|
+
):
|
|
1459
|
+
environment = variable_config.get("environment", {})
|
|
1460
|
+
setup_codes = variable_config.get("setup_code", [])
|
|
1461
|
+
if type(setup_codes) is str:
|
|
1462
|
+
setup_codes = setup_codes.splitlines()
|
|
1463
|
+
declarations = variable_config.get("declarations", {})
|
|
1464
|
+
|
|
1465
|
+
if len(declarations) < 1:
|
|
1466
|
+
self.sysexit(
|
|
1467
|
+
"Error, no variable 'declarations' for %s makes no sense."
|
|
1468
|
+
% full_name
|
|
1469
|
+
)
|
|
1470
|
+
|
|
1471
|
+
if self.evaluateCondition(
|
|
1472
|
+
full_name=full_name,
|
|
1473
|
+
condition=variable_config.get("when", "True"),
|
|
1474
|
+
):
|
|
1475
|
+
setup_codes.extend(
|
|
1476
|
+
"%s=%r" % (constant_name, constant_value)
|
|
1477
|
+
for (
|
|
1478
|
+
constant_name,
|
|
1479
|
+
constant_value,
|
|
1480
|
+
) in self.getExpressionConstants(full_name=full_name).items()
|
|
1481
|
+
)
|
|
1482
|
+
|
|
1483
|
+
env_variables = {}
|
|
1484
|
+
|
|
1485
|
+
for env_name, env_value in environment.items():
|
|
1486
|
+
env_variables[env_name] = self.evaluateExpressionOrConstant(
|
|
1487
|
+
full_name=full_name,
|
|
1488
|
+
expression=env_value,
|
|
1489
|
+
config_name="variables config #%d" % count,
|
|
1490
|
+
extra_context=None,
|
|
1491
|
+
single_value=True,
|
|
1492
|
+
)
|
|
1493
|
+
|
|
1494
|
+
with withEnvironmentVarsOverridden(env_variables):
|
|
1495
|
+
info = self.queryRuntimeInformationMultiple(
|
|
1496
|
+
"%s_variables_%s" % (full_name.asString(), count),
|
|
1497
|
+
setup_codes=setup_codes,
|
|
1498
|
+
values=tuple(declarations.items()),
|
|
1499
|
+
)
|
|
1500
|
+
|
|
1501
|
+
if Options.isExperimental("display-yaml-variables"):
|
|
1502
|
+
self.info("Evaluated %r" % info)
|
|
1503
|
+
|
|
1504
|
+
if info is None:
|
|
1505
|
+
self.sysexit(
|
|
1506
|
+
"Error, failed to evaluate variables for '%s'." % full_name
|
|
1507
|
+
)
|
|
1508
|
+
|
|
1509
|
+
variables.update(info.asDict())
|
|
1510
|
+
|
|
1511
|
+
_module_config_variables[full_name] = variables
|
|
1512
|
+
|
|
1513
|
+
return _module_config_variables[full_name]
|
|
1514
|
+
|
|
1515
|
+
def evaluateExpression(
|
|
1516
|
+
self, full_name, expression, config_name, extra_context, single_value
|
|
1517
|
+
):
|
|
1518
|
+
context = _makeEvaluationContext(
|
|
1519
|
+
logger=self, full_name=full_name, config_name=config_name
|
|
1520
|
+
)
|
|
1521
|
+
|
|
1522
|
+
def get_variable(variable_name):
|
|
1523
|
+
assert type(variable_name) is str, variable_name
|
|
1524
|
+
|
|
1525
|
+
result = self.getExpressionVariables(full_name=full_name)[variable_name]
|
|
1526
|
+
|
|
1527
|
+
addModuleInfluencingVariable(
|
|
1528
|
+
module_name=full_name,
|
|
1529
|
+
plugin_name=self.plugin_name,
|
|
1530
|
+
variable_name=variable_name,
|
|
1531
|
+
control_tags=context.used_tags,
|
|
1532
|
+
result=result,
|
|
1533
|
+
)
|
|
1534
|
+
|
|
1535
|
+
return result
|
|
1536
|
+
|
|
1537
|
+
def get_constant(constant_name):
|
|
1538
|
+
assert type(constant_name) is str, constant_name
|
|
1539
|
+
|
|
1540
|
+
result = self.getExpressionConstants(full_name=full_name)[constant_name]
|
|
1541
|
+
|
|
1542
|
+
# TODO: Record the constant value in report.
|
|
1543
|
+
|
|
1544
|
+
return result
|
|
1545
|
+
|
|
1546
|
+
context["get_variable"] = get_variable
|
|
1547
|
+
context["get_constant"] = get_constant
|
|
1548
|
+
|
|
1549
|
+
def get_parameter(parameter_name, default):
|
|
1550
|
+
result = Options.getModuleParameter(full_name, parameter_name)
|
|
1551
|
+
|
|
1552
|
+
if result is None:
|
|
1553
|
+
result = default
|
|
1554
|
+
|
|
1555
|
+
self.addModuleInfluencingParameter(
|
|
1556
|
+
module_name=full_name,
|
|
1557
|
+
parameter_name=parameter_name,
|
|
1558
|
+
condition_tags_used=context.used_tags,
|
|
1559
|
+
result=result,
|
|
1560
|
+
)
|
|
1561
|
+
|
|
1562
|
+
return result
|
|
1563
|
+
|
|
1564
|
+
context["get_parameter"] = get_parameter
|
|
1565
|
+
|
|
1566
|
+
if extra_context:
|
|
1567
|
+
context.update(extra_context)
|
|
1568
|
+
|
|
1569
|
+
with withNoWarning():
|
|
1570
|
+
# We trust the yaml files, pylint: disable=eval-used
|
|
1571
|
+
try:
|
|
1572
|
+
result = eval(expression, context)
|
|
1573
|
+
except Exception as e: # Catch all the things, pylint: disable=broad-except
|
|
1574
|
+
if Options.is_debug:
|
|
1575
|
+
raise
|
|
1576
|
+
|
|
1577
|
+
self.sysexit(
|
|
1578
|
+
"Error, failed to evaluate expression %r in this context, exception was '%r'."
|
|
1579
|
+
% (expression, e)
|
|
1580
|
+
)
|
|
1581
|
+
|
|
1582
|
+
if type(result) not in (str, unicode):
|
|
1583
|
+
if single_value:
|
|
1584
|
+
self._checkStrResult(
|
|
1585
|
+
value=result, expression=expression, full_name=full_name
|
|
1586
|
+
)
|
|
1587
|
+
else:
|
|
1588
|
+
self._checkSequenceResult(
|
|
1589
|
+
value=result, expression=expression, full_name=full_name
|
|
1590
|
+
)
|
|
1591
|
+
|
|
1592
|
+
for v in result:
|
|
1593
|
+
self._checkStrResult(
|
|
1594
|
+
value=v, expression=expression, full_name=full_name
|
|
1595
|
+
)
|
|
1596
|
+
|
|
1597
|
+
# Make it immutable in case it's a list.
|
|
1598
|
+
result = tuple(result)
|
|
1599
|
+
|
|
1600
|
+
return result
|
|
1601
|
+
|
|
1602
|
+
def _checkStrResult(self, value, expression, full_name):
|
|
1603
|
+
if type(value) not in (str, unicode):
|
|
1604
|
+
self.sysexit(
|
|
1605
|
+
"""\
|
|
1606
|
+
Error, expression '%s' for module '%s' did not evaluate to 'str', 'tuple[str]' or 'list[str]' result but '%s'"""
|
|
1607
|
+
% (expression, full_name, type(value))
|
|
1608
|
+
)
|
|
1609
|
+
|
|
1610
|
+
def _checkSequenceResult(self, value, expression, full_name):
|
|
1611
|
+
if type(value) not in (tuple, list):
|
|
1612
|
+
self.sysexit(
|
|
1613
|
+
"""\
|
|
1614
|
+
Error, expression '%s' for module '%s' did not evaluate to 'tuple[str]' or 'list[str]' result."""
|
|
1615
|
+
% (expression, full_name)
|
|
1616
|
+
)
|
|
1617
|
+
|
|
1111
1618
|
def evaluateCondition(self, full_name, condition):
|
|
1112
1619
|
# Note: Caching makes no sense yet, this should all be very fast and
|
|
1113
1620
|
# cache themselves. TODO: Allow plugins to contribute their own control
|
|
@@ -1117,64 +1624,40 @@ except ImportError:
|
|
|
1117
1624
|
if condition == "False":
|
|
1118
1625
|
return False
|
|
1119
1626
|
|
|
1120
|
-
|
|
1121
|
-
context
|
|
1122
|
-
|
|
1123
|
-
context.update(
|
|
1124
|
-
{
|
|
1125
|
-
"macos": isMacOS(),
|
|
1126
|
-
"win32": isWin32Windows(),
|
|
1127
|
-
"linux": isLinux(),
|
|
1128
|
-
"anaconda": isAnacondaPython(),
|
|
1129
|
-
"is_conda_package": isDistributionCondaPackage,
|
|
1130
|
-
"debian_python": isDebianPackagePython(),
|
|
1131
|
-
"standalone": isStandaloneMode(),
|
|
1132
|
-
"module_mode": shallMakeModule(),
|
|
1133
|
-
"deployment": isDeploymentMode(),
|
|
1134
|
-
# Querying package versions.
|
|
1135
|
-
"version": _getPackageVersion,
|
|
1136
|
-
"plugin": _isPluginActive,
|
|
1137
|
-
"no_asserts": hasPythonFlagNoAsserts(),
|
|
1138
|
-
"no_docstrings": hasPythonFlagNoDocStrings(),
|
|
1139
|
-
"no_annotations": hasPythonFlagNoAnnotations(),
|
|
1140
|
-
# Querying package properties
|
|
1141
|
-
"has_builtin_module": isBuiltinModuleName,
|
|
1142
|
-
}
|
|
1627
|
+
# TODO: Maybe add module name to config name?
|
|
1628
|
+
context = _makeEvaluationContext(
|
|
1629
|
+
logger=self, full_name=full_name, config_name="'when' configuration"
|
|
1143
1630
|
)
|
|
1144
1631
|
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
{
|
|
1148
|
-
"arch_x86": getArchitecture() == "x86",
|
|
1149
|
-
"arch_amd64": getArchitecture() == "x86_64",
|
|
1150
|
-
"arch_arm64": getArchitecture() == "arm64",
|
|
1151
|
-
}
|
|
1152
|
-
)
|
|
1632
|
+
def get_parameter(parameter_name, default):
|
|
1633
|
+
result = Options.getModuleParameter(full_name, parameter_name)
|
|
1153
1634
|
|
|
1154
|
-
|
|
1635
|
+
if result is None:
|
|
1636
|
+
result = default
|
|
1155
1637
|
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
context["before_python" + big + major] = not is_same_or_higher_version
|
|
1638
|
+
self.addModuleInfluencingParameter(
|
|
1639
|
+
module_name=full_name,
|
|
1640
|
+
parameter_name=parameter_name,
|
|
1641
|
+
condition_tags_used=context.used_tags,
|
|
1642
|
+
result=result,
|
|
1643
|
+
)
|
|
1163
1644
|
|
|
1164
|
-
|
|
1165
|
-
context["python3_or_higher"] = python_version >= 0x300
|
|
1645
|
+
return result
|
|
1166
1646
|
|
|
1167
|
-
|
|
1168
|
-
try:
|
|
1169
|
-
result = eval(condition, context)
|
|
1170
|
-
except Exception as e: # Catch all the things, pylint: disable=broad-except
|
|
1171
|
-
if Options.is_debug:
|
|
1172
|
-
raise
|
|
1647
|
+
context["get_parameter"] = get_parameter
|
|
1173
1648
|
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1649
|
+
with withNoWarning():
|
|
1650
|
+
# We trust the yaml files, pylint: disable=eval-used
|
|
1651
|
+
try:
|
|
1652
|
+
result = eval(condition, context)
|
|
1653
|
+
except Exception as e: # Catch all the things, pylint: disable=broad-except
|
|
1654
|
+
if Options.is_debug:
|
|
1655
|
+
raise
|
|
1656
|
+
|
|
1657
|
+
self.sysexit(
|
|
1658
|
+
"Error, failed to evaluate condition '%s' in this context, exception was '%s'."
|
|
1659
|
+
% (condition, e)
|
|
1660
|
+
)
|
|
1178
1661
|
|
|
1179
1662
|
if type(result) is not bool:
|
|
1180
1663
|
self.sysexit(
|
|
@@ -1192,6 +1675,27 @@ except ImportError:
|
|
|
1192
1675
|
|
|
1193
1676
|
return result
|
|
1194
1677
|
|
|
1678
|
+
def addModuleInfluencingParameter(
|
|
1679
|
+
self, module_name, parameter_name, condition_tags_used, result
|
|
1680
|
+
):
|
|
1681
|
+
addModuleInfluencingParameter(
|
|
1682
|
+
module_name=module_name,
|
|
1683
|
+
plugin_name=self.plugin_name,
|
|
1684
|
+
parameter_name=parameter_name,
|
|
1685
|
+
condition_tags_used=condition_tags_used,
|
|
1686
|
+
result=result,
|
|
1687
|
+
)
|
|
1688
|
+
|
|
1689
|
+
def addModuleInfluencingDetection(
|
|
1690
|
+
self, module_name, detection_name, detection_value
|
|
1691
|
+
):
|
|
1692
|
+
addModuleInfluencingDetection(
|
|
1693
|
+
module_name=module_name,
|
|
1694
|
+
plugin_name=self.plugin_name,
|
|
1695
|
+
detection_name=detection_name,
|
|
1696
|
+
detection_value=detection_value,
|
|
1697
|
+
)
|
|
1698
|
+
|
|
1195
1699
|
@classmethod
|
|
1196
1700
|
def warning(cls, message, **kwargs):
|
|
1197
1701
|
# Doing keyword only arguments manually, to keep older Python compatibility, and avoid
|
|
@@ -1203,40 +1707,31 @@ except ImportError:
|
|
|
1203
1707
|
plugins_logger.warning(cls.plugin_name + ": " + message, mnemonic=mnemonic)
|
|
1204
1708
|
|
|
1205
1709
|
@classmethod
|
|
1206
|
-
def info(cls, message):
|
|
1207
|
-
plugins_logger.info(cls.plugin_name
|
|
1710
|
+
def info(cls, message, keep_format=False):
|
|
1711
|
+
plugins_logger.info(message, prefix=cls.plugin_name, keep_format=keep_format)
|
|
1712
|
+
|
|
1713
|
+
@classmethod
|
|
1714
|
+
def debug(cls, message, keep_format=False):
|
|
1715
|
+
if Options.is_debug:
|
|
1716
|
+
cls.info(message, keep_format=keep_format)
|
|
1208
1717
|
|
|
1209
1718
|
@classmethod
|
|
1210
|
-
def sysexit(cls, message, mnemonic=None):
|
|
1719
|
+
def sysexit(cls, message, mnemonic=None, reporting=True):
|
|
1211
1720
|
plugins_logger.sysexit(
|
|
1212
|
-
cls.plugin_name + ": " + message, mnemonic=mnemonic, reporting=
|
|
1721
|
+
cls.plugin_name + ": " + message, mnemonic=mnemonic, reporting=reporting
|
|
1213
1722
|
)
|
|
1214
1723
|
|
|
1215
1724
|
|
|
1216
|
-
def standalone_only(func):
|
|
1217
|
-
"""For plugins that have functionality that should be done in standalone mode only."""
|
|
1218
|
-
|
|
1219
|
-
@functools.wraps(func)
|
|
1220
|
-
def wrapped(*args, **kwargs):
|
|
1221
|
-
if isStandaloneMode():
|
|
1222
|
-
return func(*args, **kwargs)
|
|
1223
|
-
else:
|
|
1224
|
-
if inspect.isgeneratorfunction(func):
|
|
1225
|
-
return ()
|
|
1226
|
-
else:
|
|
1227
|
-
return None
|
|
1228
|
-
|
|
1229
|
-
return wrapped
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
1725
|
class TagContext(dict):
|
|
1233
|
-
def __init__(self, logger, full_name,
|
|
1234
|
-
dict.__init__(self
|
|
1726
|
+
def __init__(self, logger, full_name, config_name):
|
|
1727
|
+
dict.__init__(self)
|
|
1235
1728
|
|
|
1236
1729
|
self.logger = logger
|
|
1237
1730
|
self.full_name = full_name
|
|
1731
|
+
self.config_name = config_name
|
|
1238
1732
|
|
|
1239
1733
|
self.used_tags = OrderedSet()
|
|
1734
|
+
self.used_variables = OrderedSet()
|
|
1240
1735
|
|
|
1241
1736
|
def __getitem__(self, key):
|
|
1242
1737
|
try:
|
|
@@ -1247,7 +1742,55 @@ class TagContext(dict):
|
|
|
1247
1742
|
if key.startswith("use_"):
|
|
1248
1743
|
return False
|
|
1249
1744
|
|
|
1745
|
+
if key == "no_asserts":
|
|
1746
|
+
# TODO: This should be better decoupled.
|
|
1747
|
+
from .Plugins import Plugins
|
|
1748
|
+
|
|
1749
|
+
return Plugins.decideAssertions(self.full_name) is False
|
|
1750
|
+
|
|
1751
|
+
if key == "no_docstrings":
|
|
1752
|
+
from .Plugins import Plugins
|
|
1753
|
+
|
|
1754
|
+
return Plugins.decideDocStrings(self.full_name) is False
|
|
1755
|
+
|
|
1756
|
+
if key == "no_annotations":
|
|
1757
|
+
from .Plugins import Plugins
|
|
1758
|
+
|
|
1759
|
+
return Plugins.decideAnnotations(self.full_name) is False
|
|
1760
|
+
|
|
1250
1761
|
self.logger.sysexit(
|
|
1251
|
-
"Identifier '%s' in
|
|
1252
|
-
% (key, self.full_name)
|
|
1762
|
+
"Identifier '%s' in %s of module '%s' is unknown."
|
|
1763
|
+
% (key, self.config_name, self.full_name)
|
|
1253
1764
|
)
|
|
1765
|
+
|
|
1766
|
+
|
|
1767
|
+
def standalone_only(func):
|
|
1768
|
+
"""For plugins that have functionality that should be done in standalone mode only."""
|
|
1769
|
+
|
|
1770
|
+
@functools.wraps(func)
|
|
1771
|
+
def wrapped(*args, **kwargs):
|
|
1772
|
+
if isStandaloneMode():
|
|
1773
|
+
return func(*args, **kwargs)
|
|
1774
|
+
else:
|
|
1775
|
+
if inspect.isgeneratorfunction(func):
|
|
1776
|
+
return ()
|
|
1777
|
+
else:
|
|
1778
|
+
return None
|
|
1779
|
+
|
|
1780
|
+
return wrapped
|
|
1781
|
+
|
|
1782
|
+
|
|
1783
|
+
# Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1784
|
+
# integrates with CPython, but also works on its own.
|
|
1785
|
+
#
|
|
1786
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
1787
|
+
# you may not use this file except in compliance with the License.
|
|
1788
|
+
# You may obtain a copy of the License at
|
|
1789
|
+
#
|
|
1790
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
1791
|
+
#
|
|
1792
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
1793
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
1794
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1795
|
+
# See the License for the specific language governing permissions and
|
|
1796
|
+
# limitations under the License.
|