Nuitka-winsvc 2.7.7__cp313-cp313-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/Builtins.py +259 -0
- nuitka/BytecodeCaching.py +184 -0
- nuitka/Bytecodes.py +109 -0
- nuitka/CacheCleanup.py +54 -0
- nuitka/Constants.py +425 -0
- nuitka/Errors.py +93 -0
- nuitka/HardImportRegistry.py +408 -0
- nuitka/MainControl.py +1201 -0
- nuitka/ModuleRegistry.py +364 -0
- nuitka/OptionParsing.py +2473 -0
- nuitka/Options.py +2948 -0
- nuitka/OutputDirectories.py +201 -0
- nuitka/PostProcessing.py +551 -0
- nuitka/Progress.py +252 -0
- nuitka/PythonFlavors.py +426 -0
- nuitka/PythonOperators.py +146 -0
- nuitka/PythonVersions.py +513 -0
- nuitka/Serialization.py +291 -0
- nuitka/SourceCodeReferences.py +176 -0
- nuitka/Tracing.py +579 -0
- nuitka/TreeXML.py +141 -0
- nuitka/Variables.py +515 -0
- nuitka/Version.py +88 -0
- nuitka/__init__.py +19 -0
- nuitka/__main__.py +224 -0
- nuitka/__past__.py +217 -0
- nuitka/build/Backend.scons +1111 -0
- nuitka/build/CCompilerVersion.scons +281 -0
- nuitka/build/DataComposerInterface.py +116 -0
- nuitka/build/Offsets.scons +626 -0
- nuitka/build/Onefile.scons +564 -0
- nuitka/build/SconsCaching.py +451 -0
- nuitka/build/SconsCompilerSettings.py +1133 -0
- nuitka/build/SconsHacks.py +215 -0
- nuitka/build/SconsInterface.py +664 -0
- nuitka/build/SconsProgress.py +100 -0
- nuitka/build/SconsSpawn.py +436 -0
- nuitka/build/SconsUtils.py +939 -0
- nuitka/build/__init__.py +19 -0
- nuitka/build/include/nuitka/allocator.h +450 -0
- nuitka/build/include/nuitka/builtins.h +97 -0
- nuitka/build/include/nuitka/calling.h +123 -0
- nuitka/build/include/nuitka/checkers.h +39 -0
- nuitka/build/include/nuitka/checksum_tools.h +28 -0
- nuitka/build/include/nuitka/compiled_asyncgen.h +281 -0
- nuitka/build/include/nuitka/compiled_cell.h +64 -0
- nuitka/build/include/nuitka/compiled_coroutine.h +271 -0
- nuitka/build/include/nuitka/compiled_frame.h +502 -0
- nuitka/build/include/nuitka/compiled_function.h +170 -0
- nuitka/build/include/nuitka/compiled_generator.h +287 -0
- nuitka/build/include/nuitka/compiled_method.h +54 -0
- nuitka/build/include/nuitka/constants.h +251 -0
- nuitka/build/include/nuitka/constants_blob.h +34 -0
- 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 +51 -0
- nuitka/build/include/nuitka/exception_groups.h +167 -0
- nuitka/build/include/nuitka/exceptions.h +1458 -0
- nuitka/build/include/nuitka/filesystem_paths.h +117 -0
- nuitka/build/include/nuitka/freelists.h +92 -0
- nuitka/build/include/nuitka/hedley.h +1774 -0
- nuitka/build/include/nuitka/helper/attributes.h +90 -0
- nuitka/build/include/nuitka/helper/boolean.h +86 -0
- nuitka/build/include/nuitka/helper/bytearrays.h +34 -0
- nuitka/build/include/nuitka/helper/bytes.h +28 -0
- nuitka/build/include/nuitka/helper/calling_generated.h +132 -0
- 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 +247 -0
- nuitka/build/include/nuitka/helper/comparisons_ge.h +197 -0
- nuitka/build/include/nuitka/helper/comparisons_gt.h +197 -0
- nuitka/build/include/nuitka/helper/comparisons_le.h +247 -0
- nuitka/build/include/nuitka/helper/comparisons_lt.h +247 -0
- nuitka/build/include/nuitka/helper/comparisons_ne.h +197 -0
- nuitka/build/include/nuitka/helper/complex.h +46 -0
- nuitka/build/include/nuitka/helper/dictionaries.h +481 -0
- nuitka/build/include/nuitka/helper/floats.h +32 -0
- nuitka/build/include/nuitka/helper/import_hard.h +121 -0
- nuitka/build/include/nuitka/helper/indexes.h +47 -0
- nuitka/build/include/nuitka/helper/ints.h +165 -0
- nuitka/build/include/nuitka/helper/iterators.h +376 -0
- nuitka/build/include/nuitka/helper/lists.h +94 -0
- nuitka/build/include/nuitka/helper/lists_generated.h +36 -0
- nuitka/build/include/nuitka/helper/mappings.h +39 -0
- nuitka/build/include/nuitka/helper/operations.h +114 -0
- nuitka/build/include/nuitka/helper/operations_binary_add.h +240 -0
- nuitka/build/include/nuitka/helper/operations_binary_bitand.h +108 -0
- nuitka/build/include/nuitka/helper/operations_binary_bitor.h +108 -0
- nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +108 -0
- nuitka/build/include/nuitka/helper/operations_binary_divmod.h +103 -0
- nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
- nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +103 -0
- nuitka/build/include/nuitka/helper/operations_binary_lshift.h +99 -0
- nuitka/build/include/nuitka/helper/operations_binary_matmult.h +60 -0
- nuitka/build/include/nuitka/helper/operations_binary_mod.h +304 -0
- nuitka/build/include/nuitka/helper/operations_binary_mult.h +247 -0
- nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +125 -0
- nuitka/build/include/nuitka/helper/operations_binary_pow.h +90 -0
- nuitka/build/include/nuitka/helper/operations_binary_rshift.h +99 -0
- nuitka/build/include/nuitka/helper/operations_binary_sub.h +117 -0
- nuitka/build/include/nuitka/helper/operations_binary_truediv.h +103 -0
- nuitka/build/include/nuitka/helper/operations_builtin_types.h +247 -0
- nuitka/build/include/nuitka/helper/operations_inplace_add.h +173 -0
- nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +76 -0
- nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +76 -0
- nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +76 -0
- nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +95 -0
- nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +62 -0
- nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +60 -0
- nuitka/build/include/nuitka/helper/operations_inplace_mod.h +218 -0
- nuitka/build/include/nuitka/helper/operations_inplace_mult.h +184 -0
- nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +115 -0
- nuitka/build/include/nuitka/helper/operations_inplace_pow.h +87 -0
- nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +62 -0
- nuitka/build/include/nuitka/helper/operations_inplace_sub.h +102 -0
- nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +95 -0
- nuitka/build/include/nuitka/helper/raising.h +114 -0
- nuitka/build/include/nuitka/helper/rangeobjects.h +66 -0
- nuitka/build/include/nuitka/helper/richcomparisons.h +35 -0
- nuitka/build/include/nuitka/helper/sequences.h +33 -0
- nuitka/build/include/nuitka/helper/sets.h +25 -0
- nuitka/build/include/nuitka/helper/slices.h +314 -0
- nuitka/build/include/nuitka/helper/strings.h +30 -0
- nuitka/build/include/nuitka/helper/subscripts.h +390 -0
- nuitka/build/include/nuitka/helper/tuples.h +187 -0
- nuitka/build/include/nuitka/helpers.h +417 -0
- nuitka/build/include/nuitka/importing.h +149 -0
- nuitka/build/include/nuitka/incbin.h +402 -0
- nuitka/build/include/nuitka/jit_sources.h +25 -0
- nuitka/build/include/nuitka/prelude.h +626 -0
- nuitka/build/include/nuitka/printing.h +84 -0
- nuitka/build/include/nuitka/python_pgo.h +57 -0
- nuitka/build/include/nuitka/safe_string_ops.h +57 -0
- nuitka/build/include/nuitka/threading.h +142 -0
- nuitka/build/include/nuitka/tracing.h +82 -0
- nuitka/build/include/nuitka/type_aliases.h +30 -0
- nuitka/build/include/nuitka/unfreezing.h +91 -0
- nuitka/build/inline_copy/appdirs/LICENSE.txt +23 -0
- nuitka/build/inline_copy/appdirs/appdirs.py +611 -0
- nuitka/build/inline_copy/atomicwrites/LICENSE +19 -0
- nuitka/build/inline_copy/atomicwrites/atomicwrites.py +226 -0
- nuitka/build/inline_copy/bin/scons.py +58 -0
- nuitka/build/inline_copy/clcache/clcache/LICENSE +30 -0
- nuitka/build/inline_copy/clcache/clcache/__init__.py +4 -0
- nuitka/build/inline_copy/clcache/clcache/caching.py +2008 -0
- nuitka/build/inline_copy/colorama/LICENSE.txt +27 -0
- nuitka/build/inline_copy/colorama/colorama/__init__.py +6 -0
- nuitka/build/inline_copy/colorama/colorama/ansi.py +102 -0
- nuitka/build/inline_copy/colorama/colorama/ansitowin32.py +258 -0
- nuitka/build/inline_copy/colorama/colorama/initialise.py +80 -0
- nuitka/build/inline_copy/colorama/colorama/win32.py +152 -0
- nuitka/build/inline_copy/colorama/colorama/winterm.py +169 -0
- nuitka/build/inline_copy/glob2/LICENSE +27 -0
- nuitka/build/inline_copy/glob2/glob2/__init__.py +5 -0
- nuitka/build/inline_copy/glob2/glob2/compat.py +167 -0
- nuitka/build/inline_copy/glob2/glob2/fnmatch.py +141 -0
- nuitka/build/inline_copy/glob2/glob2/impl.py +216 -0
- nuitka/build/inline_copy/jinja2/LICENSE.rst +28 -0
- nuitka/build/inline_copy/jinja2/README.rst +2 -0
- nuitka/build/inline_copy/jinja2/jinja2/__init__.py +72 -0
- nuitka/build/inline_copy/jinja2/jinja2/_compat.py +105 -0
- nuitka/build/inline_copy/jinja2/jinja2/_identifier.py +2 -0
- nuitka/build/inline_copy/jinja2/jinja2/bccache.py +361 -0
- nuitka/build/inline_copy/jinja2/jinja2/compiler.py +1721 -0
- nuitka/build/inline_copy/jinja2/jinja2/constants.py +32 -0
- nuitka/build/inline_copy/jinja2/jinja2/debug.py +378 -0
- nuitka/build/inline_copy/jinja2/jinja2/defaults.py +56 -0
- nuitka/build/inline_copy/jinja2/jinja2/environment.py +1276 -0
- nuitka/build/inline_copy/jinja2/jinja2/exceptions.py +146 -0
- nuitka/build/inline_copy/jinja2/jinja2/ext.py +627 -0
- nuitka/build/inline_copy/jinja2/jinja2/filters.py +1190 -0
- nuitka/build/inline_copy/jinja2/jinja2/idtracking.py +286 -0
- nuitka/build/inline_copy/jinja2/jinja2/lexer.py +739 -0
- nuitka/build/inline_copy/jinja2/jinja2/loaders.py +483 -0
- nuitka/build/inline_copy/jinja2/jinja2/meta.py +106 -0
- nuitka/build/inline_copy/jinja2/jinja2/nativetypes.py +220 -0
- nuitka/build/inline_copy/jinja2/jinja2/nodes.py +999 -0
- nuitka/build/inline_copy/jinja2/jinja2/optimizer.py +49 -0
- nuitka/build/inline_copy/jinja2/jinja2/parser.py +903 -0
- nuitka/build/inline_copy/jinja2/jinja2/runtime.py +808 -0
- nuitka/build/inline_copy/jinja2/jinja2/sandbox.py +488 -0
- nuitka/build/inline_copy/jinja2/jinja2/tests.py +174 -0
- nuitka/build/inline_copy/jinja2/jinja2/utils.py +642 -0
- nuitka/build/inline_copy/jinja2/jinja2/visitor.py +87 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Action.py +1475 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Builder.py +905 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/CacheDir.py +314 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Conftest.py +805 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Debug.py +251 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Defaults.py +646 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Environment.py +2561 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/EnvironmentValues.py +119 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Errors.py +222 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Executor.py +660 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Job.py +439 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Memoize.py +242 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/Alias.py +176 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/FS.py +3861 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/Python.py +195 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/__init__.py +1784 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/PathList.py +224 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/__init__.py +341 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/aix.py +81 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/cygwin.py +61 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/darwin.py +70 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/hpux.py +45 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/irix.py +41 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/mingw.py +33 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/os2.py +55 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/posix.py +124 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/sunos.py +47 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/virtualenv.py +115 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/win32.py +429 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/SConf.py +1119 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/SConsign.py +453 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/C.py +226 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/Dir.py +131 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/Prog.py +114 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/RC.py +57 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/__init__.py +436 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/Interactive.py +372 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/Main.py +1469 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/SConsOptions.py +1071 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/SConscript.py +686 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/__init__.py +425 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Subst.py +979 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Taskmaster.py +1062 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/386asm.py +61 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/GettextCommon.py +429 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/__init__.py +52 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/arch.py +66 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/common.py +371 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/netframework.py +83 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/sdk.py +411 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/vc.py +994 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/vs.py +608 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/PharLapCommon.py +116 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/__init__.py +882 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixc++.py +43 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixcc.py +74 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixcxx.py +77 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixlink.py +78 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/applelink.py +209 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ar.py +63 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/as.py +49 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/asm.py +78 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/bcc32.py +81 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/c++.py +44 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cc.py +105 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clang.py +91 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clangCommon/__init__.py +18 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clangxx.py +99 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cxx.py +95 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cyglink.py +212 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/default.py +50 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/filesystem.py +98 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/g++.py +45 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gas.py +56 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gcc.py +110 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gettext_tool.py +69 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gnulink.py +70 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gxx.py +78 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpc++.py +45 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpcc.py +53 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpcxx.py +88 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hplink.py +72 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/icc.py +59 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/icl.py +52 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ilink.py +55 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ilink32.py +60 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/install.py +510 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/intelc.py +617 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/link.py +72 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/LoadableModule.py +131 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/SharedLibrary.py +218 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/__init__.py +171 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkloc.py +112 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/m4.py +63 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/masm.py +77 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mingw.py +232 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msgfmt.py +132 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msginit.py +137 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msgmerge.py +125 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mslib.py +73 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mslink.py +339 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mssdk.py +50 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msvc.py +325 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msvs.py +2116 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mwcc.py +207 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mwld.py +108 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/nasm.py +72 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/rmic.py +139 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/rpcgen.py +70 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgiar.py +68 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgic++.py +43 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgicc.py +53 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgicxx.py +61 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgilink.py +59 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunar.py +64 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunc++.py +45 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/suncc.py +58 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/suncxx.py +153 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunlink.py +79 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/tar.py +73 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/textfile.py +198 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/tlib.py +53 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/wix.py +104 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/xgettext.py +337 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/zip.py +120 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Util.py +2134 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/ConfigureCache.py +171 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/__init__.py +0 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/sconsign.py +494 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/BoolVariable.py +96 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/EnumVariable.py +110 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +152 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/PackageVariable.py +107 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/PathVariable.py +158 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/__init__.py +334 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Warnings.py +238 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/__init__.py +9 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/__init__.py +104 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/_scons_dbm.py +42 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/win32.py +101 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/cpp.py +640 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/dblite.py +295 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/exitfuncs.py +59 -0
- nuitka/build/inline_copy/markupsafe/LICENSE.rst +28 -0
- nuitka/build/inline_copy/markupsafe/markupsafe/__init__.py +327 -0
- nuitka/build/inline_copy/markupsafe/markupsafe/_compat.py +33 -0
- nuitka/build/inline_copy/markupsafe/markupsafe/_constants.py +264 -0
- nuitka/build/inline_copy/markupsafe/markupsafe/_native.py +69 -0
- nuitka/build/inline_copy/pefile/LICENSE.txt +21 -0
- nuitka/build/inline_copy/pefile/ordlookup/__init__.py +41 -0
- nuitka/build/inline_copy/pefile/ordlookup/oleaut32.py +400 -0
- nuitka/build/inline_copy/pefile/ordlookup/ws2_32.py +120 -0
- nuitka/build/inline_copy/pefile/pefile.py +8034 -0
- nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +3272 -0
- nuitka/build/inline_copy/pkg_resources/pkg_resources/py31compat.py +21 -0
- 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 +484 -0
- nuitka/build/inline_copy/tqdm/tqdm/__init__.py +40 -0
- nuitka/build/inline_copy/tqdm/tqdm/_main.py +9 -0
- nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +97 -0
- nuitka/build/inline_copy/tqdm/tqdm/_tqdm.py +9 -0
- nuitka/build/inline_copy/tqdm/tqdm/_tqdm_notebook.py +9 -0
- nuitka/build/inline_copy/tqdm/tqdm/_tqdm_pandas.py +24 -0
- nuitka/build/inline_copy/tqdm/tqdm/_utils.py +12 -0
- nuitka/build/inline_copy/tqdm/tqdm/auto.py +44 -0
- nuitka/build/inline_copy/tqdm/tqdm/autonotebook.py +28 -0
- nuitka/build/inline_copy/tqdm/tqdm/dask.py +46 -0
- nuitka/build/inline_copy/tqdm/tqdm/notebook.py +316 -0
- nuitka/build/inline_copy/tqdm/tqdm/std.py +1524 -0
- nuitka/build/inline_copy/tqdm/tqdm/tk.py +207 -0
- nuitka/build/inline_copy/tqdm/tqdm/utils.py +351 -0
- nuitka/build/inline_copy/tqdm/tqdm/version.py +2 -0
- nuitka/build/inline_copy/yaml/LICENSE +20 -0
- nuitka/build/inline_copy/yaml/yaml/__init__.py +427 -0
- nuitka/build/inline_copy/yaml/yaml/composer.py +139 -0
- nuitka/build/inline_copy/yaml/yaml/constructor.py +748 -0
- nuitka/build/inline_copy/yaml/yaml/cyaml.py +101 -0
- nuitka/build/inline_copy/yaml/yaml/dumper.py +62 -0
- nuitka/build/inline_copy/yaml/yaml/emitter.py +1137 -0
- nuitka/build/inline_copy/yaml/yaml/error.py +75 -0
- nuitka/build/inline_copy/yaml/yaml/events.py +86 -0
- nuitka/build/inline_copy/yaml/yaml/loader.py +63 -0
- nuitka/build/inline_copy/yaml/yaml/nodes.py +49 -0
- nuitka/build/inline_copy/yaml/yaml/parser.py +589 -0
- nuitka/build/inline_copy/yaml/yaml/reader.py +185 -0
- nuitka/build/inline_copy/yaml/yaml/representer.py +389 -0
- nuitka/build/inline_copy/yaml/yaml/resolver.py +227 -0
- nuitka/build/inline_copy/yaml/yaml/scanner.py +1435 -0
- nuitka/build/inline_copy/yaml/yaml/serializer.py +111 -0
- nuitka/build/inline_copy/yaml/yaml/tokens.py +104 -0
- 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/inline_copy/zstd/LICENSE.txt +30 -0
- nuitka/build/inline_copy/zstd/common/bitstream.h +463 -0
- nuitka/build/inline_copy/zstd/common/compiler.h +288 -0
- nuitka/build/inline_copy/zstd/common/cpu.h +213 -0
- nuitka/build/inline_copy/zstd/common/debug.h +107 -0
- nuitka/build/inline_copy/zstd/common/entropy_common.c +360 -0
- nuitka/build/inline_copy/zstd/common/error_private.c +56 -0
- nuitka/build/inline_copy/zstd/common/error_private.h +80 -0
- nuitka/build/inline_copy/zstd/common/fse.h +715 -0
- nuitka/build/inline_copy/zstd/common/fse_decompress.c +393 -0
- nuitka/build/inline_copy/zstd/common/huf.h +361 -0
- nuitka/build/inline_copy/zstd/common/mem.h +426 -0
- nuitka/build/inline_copy/zstd/common/xxhash.c +826 -0
- nuitka/build/inline_copy/zstd/common/xxhash.h +285 -0
- nuitka/build/inline_copy/zstd/common/zstd_common.c +83 -0
- nuitka/build/inline_copy/zstd/common/zstd_deps.h +111 -0
- nuitka/build/inline_copy/zstd/common/zstd_errors.h +95 -0
- nuitka/build/inline_copy/zstd/common/zstd_internal.h +478 -0
- nuitka/build/inline_copy/zstd/decompress/huf_decompress.c +1350 -0
- nuitka/build/inline_copy/zstd/decompress/zstd_ddict.c +244 -0
- nuitka/build/inline_copy/zstd/decompress/zstd_ddict.h +44 -0
- nuitka/build/inline_copy/zstd/decompress/zstd_decompress.c +1930 -0
- nuitka/build/inline_copy/zstd/decompress/zstd_decompress_block.c +1540 -0
- nuitka/build/inline_copy/zstd/decompress/zstd_decompress_block.h +62 -0
- nuitka/build/inline_copy/zstd/decompress/zstd_decompress_internal.h +190 -0
- nuitka/build/inline_copy/zstd/zstd.h +2391 -0
- nuitka/build/static_src/CompiledAsyncgenType.c +2211 -0
- nuitka/build/static_src/CompiledCellType.c +300 -0
- nuitka/build/static_src/CompiledCodeHelpers.c +2160 -0
- nuitka/build/static_src/CompiledCoroutineType.c +1946 -0
- nuitka/build/static_src/CompiledFrameType.c +1337 -0
- nuitka/build/static_src/CompiledFunctionType.c +3320 -0
- nuitka/build/static_src/CompiledGeneratorType.c +1997 -0
- nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +2117 -0
- nuitka/build/static_src/CompiledMethodType.c +614 -0
- nuitka/build/static_src/GenerateHeadersMain.c +30 -0
- nuitka/build/static_src/HelpersAllocator.c +939 -0
- nuitka/build/static_src/HelpersAttributes.c +1241 -0
- nuitka/build/static_src/HelpersBuiltin.c +901 -0
- nuitka/build/static_src/HelpersBuiltinTypeMethods.c +3594 -0
- nuitka/build/static_src/HelpersBytes.c +107 -0
- nuitka/build/static_src/HelpersCalling.c +397 -0
- nuitka/build/static_src/HelpersCallingGenerated.c +14361 -0
- nuitka/build/static_src/HelpersChecksumTools.c +59 -0
- nuitka/build/static_src/HelpersClasses.c +91 -0
- 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 +12070 -0
- nuitka/build/static_src/HelpersComparisonEqUtils.c +169 -0
- nuitka/build/static_src/HelpersComparisonGe.c +11871 -0
- nuitka/build/static_src/HelpersComparisonGt.c +11855 -0
- nuitka/build/static_src/HelpersComparisonLe.c +11957 -0
- nuitka/build/static_src/HelpersComparisonLt.c +11941 -0
- nuitka/build/static_src/HelpersComparisonNe.c +11979 -0
- nuitka/build/static_src/HelpersConsole.c +124 -0
- nuitka/build/static_src/HelpersConstantsBlob.c +1487 -0
- nuitka/build/static_src/HelpersDeepcopy.c +636 -0
- nuitka/build/static_src/HelpersDictionaries.c +1739 -0
- nuitka/build/static_src/HelpersDictionariesGenerated.c +738 -0
- nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
- nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
- nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +97 -0
- nuitka/build/static_src/HelpersExceptions.c +298 -0
- nuitka/build/static_src/HelpersFiles.c +353 -0
- nuitka/build/static_src/HelpersFilesystemPaths.c +1322 -0
- nuitka/build/static_src/HelpersFloats.c +92 -0
- nuitka/build/static_src/HelpersHeapStorage.c +68 -0
- nuitka/build/static_src/HelpersImport.c +506 -0
- nuitka/build/static_src/HelpersImportHard.c +526 -0
- nuitka/build/static_src/HelpersJitSources.c +48 -0
- nuitka/build/static_src/HelpersLists.c +899 -0
- nuitka/build/static_src/HelpersListsGenerated.c +564 -0
- nuitka/build/static_src/HelpersMappings.c +46 -0
- nuitka/build/static_src/HelpersMatching.c +192 -0
- nuitka/build/static_src/HelpersOperationBinaryAdd.c +6477 -0
- nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +703 -0
- nuitka/build/static_src/HelpersOperationBinaryBitand.c +2738 -0
- nuitka/build/static_src/HelpersOperationBinaryBitor.c +2738 -0
- nuitka/build/static_src/HelpersOperationBinaryBitxor.c +2738 -0
- nuitka/build/static_src/HelpersOperationBinaryDivmod.c +2406 -0
- nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +33 -0
- nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
- nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +2422 -0
- nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +220 -0
- nuitka/build/static_src/HelpersOperationBinaryLshift.c +2846 -0
- nuitka/build/static_src/HelpersOperationBinaryMatmult.c +453 -0
- nuitka/build/static_src/HelpersOperationBinaryMod.c +6549 -0
- nuitka/build/static_src/HelpersOperationBinaryMult.c +6438 -0
- nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +125 -0
- nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +2355 -0
- nuitka/build/static_src/HelpersOperationBinaryPow.c +2743 -0
- nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +26 -0
- nuitka/build/static_src/HelpersOperationBinaryRshift.c +2706 -0
- nuitka/build/static_src/HelpersOperationBinarySub.c +2649 -0
- nuitka/build/static_src/HelpersOperationBinaryTruediv.c +2415 -0
- nuitka/build/static_src/HelpersOperationInplaceAdd.c +5211 -0
- nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +144 -0
- nuitka/build/static_src/HelpersOperationInplaceBitand.c +1826 -0
- nuitka/build/static_src/HelpersOperationInplaceBitor.c +1826 -0
- nuitka/build/static_src/HelpersOperationInplaceBitxor.c +1826 -0
- nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +2605 -0
- nuitka/build/static_src/HelpersOperationInplaceLshift.c +1594 -0
- nuitka/build/static_src/HelpersOperationInplaceMatmult.c +603 -0
- nuitka/build/static_src/HelpersOperationInplaceMod.c +4762 -0
- nuitka/build/static_src/HelpersOperationInplaceMult.c +4689 -0
- nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +2553 -0
- nuitka/build/static_src/HelpersOperationInplacePow.c +2807 -0
- nuitka/build/static_src/HelpersOperationInplaceRshift.c +1534 -0
- nuitka/build/static_src/HelpersOperationInplaceSub.c +2894 -0
- nuitka/build/static_src/HelpersOperationInplaceTruediv.c +2612 -0
- nuitka/build/static_src/HelpersProfiling.c +104 -0
- nuitka/build/static_src/HelpersPythonPgo.c +113 -0
- nuitka/build/static_src/HelpersRaising.c +447 -0
- nuitka/build/static_src/HelpersSafeStrings.c +185 -0
- nuitka/build/static_src/HelpersSequences.c +134 -0
- nuitka/build/static_src/HelpersSlices.c +73 -0
- nuitka/build/static_src/HelpersStrings.c +998 -0
- nuitka/build/static_src/HelpersTuples.c +148 -0
- nuitka/build/static_src/HelpersTypes.c +329 -0
- nuitka/build/static_src/InspectPatcher.c +439 -0
- nuitka/build/static_src/MainProgram.c +2060 -0
- nuitka/build/static_src/MetaPathBasedLoader.c +2290 -0
- nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +125 -0
- nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +158 -0
- nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +785 -0
- nuitka/build/static_src/OnefileBootstrap.c +1580 -0
- nuitka/build/static_src/OnefileSplashScreen.cpp +275 -0
- nuitka/code_generation/AsyncgenCodes.py +186 -0
- nuitka/code_generation/AttributeCodes.py +357 -0
- nuitka/code_generation/BinaryOperationHelperDefinitions.py +720 -0
- nuitka/code_generation/BranchCodes.py +67 -0
- nuitka/code_generation/BuiltinCodes.py +529 -0
- nuitka/code_generation/CallCodes.py +1186 -0
- nuitka/code_generation/ClassCodes.py +156 -0
- nuitka/code_generation/CodeGeneration.py +1078 -0
- nuitka/code_generation/CodeHelperSelection.py +81 -0
- nuitka/code_generation/CodeHelpers.py +455 -0
- nuitka/code_generation/CodeObjectCodes.py +165 -0
- nuitka/code_generation/ComparisonCodes.py +569 -0
- nuitka/code_generation/ComparisonHelperDefinitions.py +146 -0
- nuitka/code_generation/ConditionalCodes.py +236 -0
- nuitka/code_generation/ConstantCodes.py +243 -0
- nuitka/code_generation/Contexts.py +1248 -0
- nuitka/code_generation/CoroutineCodes.py +253 -0
- nuitka/code_generation/CtypesCodes.py +46 -0
- nuitka/code_generation/DictCodes.py +918 -0
- nuitka/code_generation/Emission.py +75 -0
- nuitka/code_generation/ErrorCodes.py +281 -0
- nuitka/code_generation/EvalCodes.py +444 -0
- nuitka/code_generation/ExceptionCodes.py +337 -0
- nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +227 -0
- nuitka/code_generation/ExpressionCodes.py +61 -0
- nuitka/code_generation/FrameCodes.py +518 -0
- nuitka/code_generation/FunctionCodes.py +858 -0
- nuitka/code_generation/GeneratorCodes.py +218 -0
- nuitka/code_generation/GlobalConstants.py +249 -0
- nuitka/code_generation/GlobalsLocalsCodes.py +211 -0
- nuitka/code_generation/IdCodes.py +53 -0
- nuitka/code_generation/ImportCodes.py +468 -0
- nuitka/code_generation/Indentation.py +45 -0
- nuitka/code_generation/IndexCodes.py +50 -0
- nuitka/code_generation/InjectCCodes.py +28 -0
- nuitka/code_generation/IntegerCodes.py +110 -0
- nuitka/code_generation/IteratorCodes.py +378 -0
- nuitka/code_generation/JitCodes.py +44 -0
- nuitka/code_generation/LabelCodes.py +68 -0
- nuitka/code_generation/LineNumberCodes.py +91 -0
- nuitka/code_generation/ListCodes.py +502 -0
- nuitka/code_generation/LoaderCodes.py +193 -0
- nuitka/code_generation/LocalsDictCodes.py +359 -0
- nuitka/code_generation/LoopCodes.py +88 -0
- nuitka/code_generation/MatchCodes.py +67 -0
- nuitka/code_generation/ModuleCodes.py +247 -0
- nuitka/code_generation/Namify.py +260 -0
- nuitka/code_generation/NetworkxCodes.py +51 -0
- nuitka/code_generation/OperationCodes.py +398 -0
- nuitka/code_generation/PackageResourceCodes.py +986 -0
- nuitka/code_generation/PrintCodes.py +93 -0
- nuitka/code_generation/PythonAPICodes.py +215 -0
- nuitka/code_generation/RaisingCodes.py +481 -0
- nuitka/code_generation/Reports.py +115 -0
- nuitka/code_generation/ReturnCodes.py +143 -0
- nuitka/code_generation/SetCodes.py +196 -0
- nuitka/code_generation/SliceCodes.py +465 -0
- nuitka/code_generation/StringCodes.py +303 -0
- nuitka/code_generation/SubscriptCodes.py +263 -0
- nuitka/code_generation/TensorflowCodes.py +54 -0
- nuitka/code_generation/TryCodes.py +326 -0
- nuitka/code_generation/TupleCodes.py +115 -0
- nuitka/code_generation/TypeAliasCodes.py +120 -0
- nuitka/code_generation/VariableCodes.py +519 -0
- nuitka/code_generation/VariableDeclarations.py +279 -0
- nuitka/code_generation/YieldCodes.py +253 -0
- nuitka/code_generation/__init__.py +19 -0
- nuitka/code_generation/c_types/CTypeBases.py +177 -0
- nuitka/code_generation/c_types/CTypeBooleans.py +104 -0
- nuitka/code_generation/c_types/CTypeCFloats.py +57 -0
- nuitka/code_generation/c_types/CTypeCLongs.py +45 -0
- nuitka/code_generation/c_types/CTypeModuleDictVariables.py +109 -0
- nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +150 -0
- nuitka/code_generation/c_types/CTypeNuitkaInts.py +200 -0
- nuitka/code_generation/c_types/CTypeNuitkaVoids.py +107 -0
- nuitka/code_generation/c_types/CTypePyObjectPointers.py +572 -0
- nuitka/code_generation/c_types/CTypeVoids.py +92 -0
- nuitka/code_generation/c_types/__init__.py +19 -0
- nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +106 -0
- nuitka/code_generation/templates/CodeTemplatesConstants.py +296 -0
- nuitka/code_generation/templates/CodeTemplatesCoroutines.py +109 -0
- nuitka/code_generation/templates/CodeTemplatesExceptions.py +84 -0
- nuitka/code_generation/templates/CodeTemplatesFrames.py +235 -0
- nuitka/code_generation/templates/CodeTemplatesFunction.py +117 -0
- nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +130 -0
- nuitka/code_generation/templates/CodeTemplatesIterators.py +40 -0
- nuitka/code_generation/templates/CodeTemplatesLoader.py +180 -0
- nuitka/code_generation/templates/CodeTemplatesModules.py +710 -0
- nuitka/code_generation/templates/CodeTemplatesVariables.py +388 -0
- nuitka/code_generation/templates/TemplateDebugWrapper.py +80 -0
- nuitka/code_generation/templates/__init__.py +19 -0
- nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +321 -0
- nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +143 -0
- nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +677 -0
- nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +165 -0
- nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +38 -0
- nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +41 -0
- nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +53 -0
- nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +364 -0
- nuitka/code_generation/templates_c/HelperImportHard.c.j2 +37 -0
- nuitka/code_generation/templates_c/HelperLongTools.c.j2 +53 -0
- nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +20 -0
- nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +148 -0
- nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
- nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +352 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +115 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +31 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +32 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +112 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +157 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +115 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +99 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +115 -0
- nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +281 -0
- nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +420 -0
- nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +51 -0
- nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +71 -0
- nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +327 -0
- nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +411 -0
- nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +59 -0
- nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +229 -0
- nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +47 -0
- nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +55 -0
- nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +58 -0
- nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +62 -0
- nuitka/containers/Namedtuples.py +51 -0
- nuitka/containers/OrderedDicts.py +191 -0
- nuitka/containers/OrderedSets.py +123 -0
- nuitka/containers/OrderedSetsFallback.py +139 -0
- nuitka/containers/__init__.py +19 -0
- nuitka/distutils/Build.py +76 -0
- nuitka/distutils/DistutilCommands.py +438 -0
- nuitka/distutils/__init__.py +19 -0
- nuitka/finalizations/Finalization.py +35 -0
- nuitka/finalizations/FinalizeMarkups.py +136 -0
- nuitka/finalizations/__init__.py +19 -0
- nuitka/freezer/DependsExe.py +257 -0
- nuitka/freezer/DllDependenciesCommon.py +97 -0
- nuitka/freezer/DllDependenciesMacOS.py +444 -0
- nuitka/freezer/DllDependenciesPosix.py +242 -0
- nuitka/freezer/DllDependenciesWin32.py +315 -0
- nuitka/freezer/ImportDetection.py +359 -0
- nuitka/freezer/IncludedDataFiles.py +689 -0
- nuitka/freezer/IncludedEntryPoints.py +376 -0
- nuitka/freezer/Onefile.py +296 -0
- nuitka/freezer/Standalone.py +520 -0
- nuitka/freezer/__init__.py +19 -0
- nuitka/importing/IgnoreListing.py +449 -0
- nuitka/importing/ImportCache.py +95 -0
- nuitka/importing/ImportResolving.py +186 -0
- nuitka/importing/Importing.py +1200 -0
- nuitka/importing/PreloadedPackages.py +164 -0
- nuitka/importing/Recursion.py +611 -0
- nuitka/importing/StandardLibrary.py +429 -0
- nuitka/importing/__init__.py +19 -0
- nuitka/nodes/AsyncgenNodes.py +107 -0
- nuitka/nodes/AttributeLookupNodes.py +124 -0
- nuitka/nodes/AttributeNodes.py +386 -0
- nuitka/nodes/AttributeNodesGenerated.py +10734 -0
- nuitka/nodes/BuiltinAllNodes.py +115 -0
- nuitka/nodes/BuiltinAnyNodes.py +124 -0
- nuitka/nodes/BuiltinComplexNodes.py +83 -0
- nuitka/nodes/BuiltinDecodingNodes.py +52 -0
- nuitka/nodes/BuiltinDecoratorNodes.py +85 -0
- nuitka/nodes/BuiltinDictNodes.py +140 -0
- nuitka/nodes/BuiltinFormatNodes.py +159 -0
- nuitka/nodes/BuiltinHashNodes.py +63 -0
- nuitka/nodes/BuiltinInputNodes.py +39 -0
- nuitka/nodes/BuiltinIntegerNodes.py +170 -0
- nuitka/nodes/BuiltinIteratorNodes.py +391 -0
- nuitka/nodes/BuiltinLenNodes.py +61 -0
- nuitka/nodes/BuiltinNextNodes.py +111 -0
- nuitka/nodes/BuiltinOpenNodes.py +148 -0
- nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +7367 -0
- nuitka/nodes/BuiltinRangeNodes.py +690 -0
- nuitka/nodes/BuiltinRefNodes.py +314 -0
- nuitka/nodes/BuiltinSumNodes.py +104 -0
- nuitka/nodes/BuiltinTypeNodes.py +454 -0
- nuitka/nodes/BuiltinVarsNodes.py +44 -0
- nuitka/nodes/BytesNodes.py +829 -0
- nuitka/nodes/CallNodes.py +217 -0
- nuitka/nodes/Checkers.py +55 -0
- nuitka/nodes/ChildrenHavingMixins.py +21576 -0
- nuitka/nodes/ClassNodes.py +286 -0
- nuitka/nodes/CodeObjectSpecs.py +230 -0
- nuitka/nodes/ComparisonNodes.py +687 -0
- nuitka/nodes/ConditionalNodes.py +884 -0
- nuitka/nodes/ConstantRefNodes.py +1717 -0
- nuitka/nodes/ContainerMakingNodes.py +408 -0
- nuitka/nodes/ContainerOperationNodes.py +87 -0
- nuitka/nodes/CoroutineNodes.py +144 -0
- nuitka/nodes/CtypesNodes.py +51 -0
- nuitka/nodes/DictionaryNodes.py +1513 -0
- nuitka/nodes/ExceptionNodes.py +393 -0
- nuitka/nodes/ExecEvalNodes.py +229 -0
- nuitka/nodes/ExpressionBases.py +1301 -0
- nuitka/nodes/ExpressionBasesGenerated.py +2103 -0
- nuitka/nodes/ExpressionShapeMixins.py +886 -0
- nuitka/nodes/FrameNodes.py +413 -0
- nuitka/nodes/FunctionAttributeNodes.py +102 -0
- nuitka/nodes/FunctionNodes.py +1303 -0
- nuitka/nodes/FutureSpecs.py +224 -0
- nuitka/nodes/GeneratorNodes.py +201 -0
- nuitka/nodes/GlobalsLocalsNodes.py +209 -0
- nuitka/nodes/HardImportNodesGenerated.py +3599 -0
- nuitka/nodes/ImportHardNodes.py +185 -0
- nuitka/nodes/ImportNodes.py +1366 -0
- nuitka/nodes/IndicatorMixins.py +79 -0
- nuitka/nodes/InjectCNodes.py +51 -0
- nuitka/nodes/IterationHandles.py +407 -0
- nuitka/nodes/KeyValuePairNodes.py +378 -0
- nuitka/nodes/ListOperationNodes.py +525 -0
- nuitka/nodes/LocalsDictNodes.py +717 -0
- nuitka/nodes/LocalsScopes.py +505 -0
- nuitka/nodes/LoopNodes.py +445 -0
- nuitka/nodes/MatchNodes.py +60 -0
- nuitka/nodes/ModuleAttributeNodes.py +180 -0
- nuitka/nodes/ModuleNodes.py +1137 -0
- nuitka/nodes/NetworkxNodes.py +45 -0
- nuitka/nodes/NodeBases.py +890 -0
- nuitka/nodes/NodeMakingHelpers.py +481 -0
- nuitka/nodes/NodeMetaClasses.py +172 -0
- nuitka/nodes/OperatorNodes.py +944 -0
- nuitka/nodes/OperatorNodesUnary.py +403 -0
- nuitka/nodes/OsSysNodes.py +215 -0
- nuitka/nodes/OutlineNodes.py +372 -0
- nuitka/nodes/PackageMetadataNodes.py +982 -0
- nuitka/nodes/PackageResourceNodes.py +424 -0
- nuitka/nodes/PrintNodes.py +105 -0
- nuitka/nodes/ReturnNodes.py +255 -0
- nuitka/nodes/SideEffectNodes.py +139 -0
- nuitka/nodes/SliceNodes.py +386 -0
- nuitka/nodes/StatementBasesGenerated.py +3419 -0
- nuitka/nodes/StatementNodes.py +316 -0
- nuitka/nodes/StrNodes.py +919 -0
- nuitka/nodes/StringConcatenationNodes.py +103 -0
- nuitka/nodes/SubscriptNodes.py +245 -0
- nuitka/nodes/TensorflowNodes.py +38 -0
- nuitka/nodes/TryNodes.py +519 -0
- nuitka/nodes/TypeMatchNodes.py +65 -0
- nuitka/nodes/TypeNodes.py +390 -0
- nuitka/nodes/VariableAssignNodes.py +1177 -0
- nuitka/nodes/VariableDelNodes.py +320 -0
- nuitka/nodes/VariableNameNodes.py +153 -0
- nuitka/nodes/VariableRefNodes.py +895 -0
- nuitka/nodes/VariableReleaseNodes.py +153 -0
- nuitka/nodes/YieldNodes.py +121 -0
- nuitka/nodes/__init__.py +19 -0
- nuitka/nodes/shapes/BuiltinTypeShapes.py +4290 -0
- nuitka/nodes/shapes/ControlFlowDescriptions.py +199 -0
- nuitka/nodes/shapes/IteratorShapes.py +71 -0
- nuitka/nodes/shapes/ShapeMixins.py +255 -0
- nuitka/nodes/shapes/StandardShapes.py +1384 -0
- nuitka/nodes/shapes/__init__.py +19 -0
- nuitka/optimizations/BytecodeDemotion.py +105 -0
- nuitka/optimizations/FunctionInlining.py +110 -0
- nuitka/optimizations/Graphs.py +70 -0
- nuitka/optimizations/Optimization.py +363 -0
- nuitka/optimizations/OptimizeBuiltinCalls.py +1582 -0
- nuitka/optimizations/Tags.py +76 -0
- nuitka/optimizations/TraceCollections.py +1257 -0
- nuitka/optimizations/ValueTraces.py +980 -0
- nuitka/optimizations/__init__.py +19 -0
- nuitka/pgo/PGO.py +160 -0
- nuitka/pgo/__init__.py +19 -0
- nuitka/plugins/PluginBase.py +1924 -0
- nuitka/plugins/Plugins.py +2007 -0
- nuitka/plugins/YamlPluginBase.py +121 -0
- nuitka/plugins/__init__.py +19 -0
- nuitka/plugins/standard/AntiBloatPlugin.py +1024 -0
- nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +95 -0
- nuitka/plugins/standard/DataFilesPlugin.py +311 -0
- nuitka/plugins/standard/DelvewheelPlugin.py +150 -0
- nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
- nuitka/plugins/standard/DillPlugin/cloudpickle-postLoad.py +67 -0
- nuitka/plugins/standard/DillPlugin/dill-postLoad.py +223 -0
- nuitka/plugins/standard/DillPlugin.py +137 -0
- nuitka/plugins/standard/DllFilesPlugin.py +527 -0
- nuitka/plugins/standard/EnumPlugin.py +64 -0
- nuitka/plugins/standard/EventletPlugin.py +57 -0
- nuitka/plugins/standard/GeventPlugin.py +64 -0
- nuitka/plugins/standard/GiPlugin.py +118 -0
- nuitka/plugins/standard/GlfwPlugin.py +138 -0
- nuitka/plugins/standard/ImplicitImports.py +845 -0
- nuitka/plugins/standard/KivyPlugin.py +141 -0
- nuitka/plugins/standard/MatplotlibPlugin.py +256 -0
- nuitka/plugins/standard/MultiprocessingPlugin.py +199 -0
- nuitka/plugins/standard/NumpyPlugin.py +35 -0
- nuitka/plugins/standard/OptionsNannyPlugin.py +158 -0
- nuitka/plugins/standard/PbrPlugin.py +62 -0
- nuitka/plugins/standard/PkgResourcesPlugin.py +162 -0
- nuitka/plugins/standard/PlaywrightPlugin.py +179 -0
- nuitka/plugins/standard/PmwPlugin.py +248 -0
- nuitka/plugins/standard/PySidePyQtPlugin.py +1666 -0
- nuitka/plugins/standard/PywebViewPlugin.py +81 -0
- nuitka/plugins/standard/SpacyPlugin.py +137 -0
- nuitka/plugins/standard/TensorflowPlugin.py +35 -0
- nuitka/plugins/standard/TkinterPlugin.py +416 -0
- nuitka/plugins/standard/TorchPlugin.py +35 -0
- nuitka/plugins/standard/TransformersPlugin.py +121 -0
- nuitka/plugins/standard/TrioPlugin.py +33 -0
- nuitka/plugins/standard/UpxPlugin.py +174 -0
- nuitka/plugins/standard/__init__.py +19 -0
- nuitka/plugins/standard/standard.nuitka-package.config.yml +9313 -0
- nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +78 -0
- nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +468 -0
- nuitka/reports/CompilationReportReader.py +83 -0
- nuitka/reports/LicenseReport.rst.j2 +41 -0
- nuitka/reports/Reports.py +961 -0
- nuitka/reports/__init__.py +19 -0
- nuitka/specs/BuiltinBytesOperationSpecs.py +180 -0
- nuitka/specs/BuiltinDictOperationSpecs.py +82 -0
- nuitka/specs/BuiltinListOperationSpecs.py +80 -0
- nuitka/specs/BuiltinParameterSpecs.py +831 -0
- nuitka/specs/BuiltinStrOperationSpecs.py +181 -0
- nuitka/specs/BuiltinTypeOperationSpecs.py +34 -0
- nuitka/specs/BuiltinUnicodeOperationSpecs.py +123 -0
- nuitka/specs/HardImportSpecs.py +236 -0
- nuitka/specs/ParameterSpecs.py +630 -0
- nuitka/specs/__init__.py +19 -0
- nuitka/tools/Basics.py +55 -0
- nuitka/tools/__init__.py +19 -0
- nuitka/tools/commercial/__init__.py +21 -0
- nuitka/tools/data_composer/DataComposer.py +593 -0
- nuitka/tools/data_composer/__init__.py +19 -0
- nuitka/tools/data_composer/__main__.py +41 -0
- nuitka/tools/environments/CreateEnvironment.py +69 -0
- nuitka/tools/environments/Virtualenv.py +158 -0
- nuitka/tools/environments/__init__.py +19 -0
- nuitka/tools/general/__init__.py +19 -0
- nuitka/tools/general/dll_report/__init__.py +19 -0
- nuitka/tools/general/dll_report/__main__.py +83 -0
- nuitka/tools/general/find_module/FindModuleCode.py +127 -0
- nuitka/tools/general/find_module/__init__.py +19 -0
- nuitka/tools/general/generate_header/GenerateHeader.py +73 -0
- nuitka/tools/general/generate_header/__init__.py +19 -0
- nuitka/tools/onefile_compressor/OnefileCompressor.py +390 -0
- nuitka/tools/onefile_compressor/__init__.py +19 -0
- nuitka/tools/onefile_compressor/__main__.py +41 -0
- nuitka/tools/podman/Podman.py +55 -0
- nuitka/tools/podman/__init__.py +19 -0
- nuitka/tools/podman/__main__.py +425 -0
- nuitka/tools/profiler/__init__.py +19 -0
- nuitka/tools/profiler/__main__.py +93 -0
- nuitka/tools/scanning/DisplayDistributions.py +39 -0
- nuitka/tools/scanning/DisplayPackageDLLs.py +151 -0
- nuitka/tools/scanning/DisplayPackageData.py +73 -0
- nuitka/tools/scanning/__init__.py +19 -0
- nuitka/tools/specialize/CTypeDescriptions.py +1928 -0
- nuitka/tools/specialize/Common.py +380 -0
- nuitka/tools/specialize/SpecializeC.py +1483 -0
- nuitka/tools/specialize/SpecializePython.py +1151 -0
- nuitka/tools/specialize/__init__.py +19 -0
- nuitka/tools/testing/Common.py +2007 -0
- nuitka/tools/testing/Constructs.py +53 -0
- nuitka/tools/testing/DocTests.py +156 -0
- nuitka/tools/testing/OutputComparison.py +313 -0
- nuitka/tools/testing/Pythons.py +34 -0
- nuitka/tools/testing/RuntimeTracing.py +260 -0
- nuitka/tools/testing/SearchModes.py +208 -0
- nuitka/tools/testing/Valgrind.py +103 -0
- nuitka/tools/testing/__init__.py +19 -0
- nuitka/tools/testing/check_reference_counts/__init__.py +19 -0
- nuitka/tools/testing/check_reference_counts/__main__.py +107 -0
- nuitka/tools/testing/compare_with_cpython/__init__.py +19 -0
- nuitka/tools/testing/compare_with_cpython/__main__.py +942 -0
- nuitka/tools/testing/find_sxs_modules/__init__.py +19 -0
- nuitka/tools/testing/find_sxs_modules/__main__.py +73 -0
- nuitka/tools/testing/measure_construct_performance/__init__.py +19 -0
- nuitka/tools/testing/measure_construct_performance/__main__.py +288 -0
- nuitka/tools/testing/run_nuitka_tests/__init__.py +19 -0
- nuitka/tools/testing/run_nuitka_tests/__main__.py +1091 -0
- nuitka/tools/watch/AutoStage.py +145 -0
- nuitka/tools/watch/Common.py +55 -0
- nuitka/tools/watch/Conda.py +125 -0
- nuitka/tools/watch/GitHub.py +113 -0
- nuitka/tools/watch/Pacman.py +73 -0
- nuitka/tools/watch/Pipenv.py +145 -0
- nuitka/tools/watch/__init__.py +19 -0
- nuitka/tools/watch/__main__.py +615 -0
- nuitka/tree/Building.py +1459 -0
- nuitka/tree/ComplexCallHelperFunctions.py +2150 -0
- nuitka/tree/Extractions.py +48 -0
- nuitka/tree/FutureSpecState.py +71 -0
- nuitka/tree/InternalModule.py +96 -0
- nuitka/tree/Operations.py +45 -0
- nuitka/tree/ReformulationAssertStatements.py +97 -0
- nuitka/tree/ReformulationAssignmentStatements.py +1260 -0
- nuitka/tree/ReformulationBooleanExpressions.py +97 -0
- nuitka/tree/ReformulationCallExpressions.py +314 -0
- nuitka/tree/ReformulationClasses.py +407 -0
- nuitka/tree/ReformulationClasses3.py +1149 -0
- nuitka/tree/ReformulationComparisonExpressions.py +174 -0
- nuitka/tree/ReformulationContractionExpressions.py +676 -0
- nuitka/tree/ReformulationDictionaryCreation.py +304 -0
- nuitka/tree/ReformulationExecStatements.py +386 -0
- nuitka/tree/ReformulationForLoopStatements.py +215 -0
- nuitka/tree/ReformulationFunctionStatements.py +931 -0
- nuitka/tree/ReformulationImportStatements.py +333 -0
- nuitka/tree/ReformulationLambdaExpressions.py +185 -0
- nuitka/tree/ReformulationMatchStatements.py +797 -0
- nuitka/tree/ReformulationMultidist.py +80 -0
- nuitka/tree/ReformulationNamespacePackages.py +239 -0
- nuitka/tree/ReformulationPrintStatements.py +127 -0
- nuitka/tree/ReformulationSequenceCreation.py +438 -0
- nuitka/tree/ReformulationSubscriptExpressions.py +123 -0
- nuitka/tree/ReformulationTryExceptStatements.py +418 -0
- nuitka/tree/ReformulationTryFinallyStatements.py +239 -0
- nuitka/tree/ReformulationWhileLoopStatements.py +160 -0
- nuitka/tree/ReformulationWithStatements.py +382 -0
- nuitka/tree/ReformulationYieldExpressions.py +133 -0
- nuitka/tree/SourceHandling.py +476 -0
- nuitka/tree/SyntaxErrors.py +143 -0
- nuitka/tree/TreeHelpers.py +720 -0
- nuitka/tree/VariableClosure.py +483 -0
- nuitka/tree/__init__.py +19 -0
- nuitka/utils/AppDirs.py +104 -0
- nuitka/utils/CStrings.py +208 -0
- nuitka/utils/CommandLineOptions.py +207 -0
- nuitka/utils/Distributions.py +728 -0
- nuitka/utils/Download.py +217 -0
- nuitka/utils/Execution.py +517 -0
- nuitka/utils/FileOperations.py +1587 -0
- nuitka/utils/Hashing.py +137 -0
- nuitka/utils/Images.py +79 -0
- nuitka/utils/Importing.py +335 -0
- nuitka/utils/InlineCopies.py +52 -0
- nuitka/utils/InstalledPythons.py +254 -0
- nuitka/utils/InstanceCounters.py +86 -0
- nuitka/utils/Jinja2.py +158 -0
- nuitka/utils/Json.py +40 -0
- nuitka/utils/MacOSApp.py +134 -0
- nuitka/utils/MemoryUsage.py +165 -0
- nuitka/utils/ModuleNames.py +317 -0
- nuitka/utils/PackageResources.py +44 -0
- nuitka/utils/ReExecute.py +152 -0
- nuitka/utils/Rest.py +60 -0
- nuitka/utils/SharedLibraries.py +1014 -0
- nuitka/utils/Shebang.py +113 -0
- nuitka/utils/Signing.py +144 -0
- nuitka/utils/SlotMetaClasses.py +57 -0
- nuitka/utils/StaticLibraries.py +260 -0
- nuitka/utils/ThreadedExecutor.py +87 -0
- nuitka/utils/Timing.py +102 -0
- nuitka/utils/Utils.py +483 -0
- nuitka/utils/WindowsFileUsage.py +337 -0
- nuitka/utils/WindowsResources.py +652 -0
- nuitka/utils/Yaml.py +247 -0
- nuitka/utils/__init__.py +19 -0
- nuitka_winsvc-2.7.7.data/scripts/nuitka-run.cmd +24 -0
- nuitka_winsvc-2.7.7.data/scripts/nuitka.cmd +30 -0
- nuitka_winsvc-2.7.7.dist-info/METADATA +115 -0
- nuitka_winsvc-2.7.7.dist-info/RECORD +995 -0
- nuitka_winsvc-2.7.7.dist-info/WHEEL +5 -0
- nuitka_winsvc-2.7.7.dist-info/entry_points.txt +7 -0
- nuitka_winsvc-2.7.7.dist-info/licenses/LICENSE.txt +202 -0
- nuitka_winsvc-2.7.7.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,1580 @@
|
|
|
1
|
+
// Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
2
|
+
|
|
3
|
+
/* The main program for onefile bootstrap.
|
|
4
|
+
*
|
|
5
|
+
* It needs to unpack the attached files and and then loads and executes
|
|
6
|
+
* the compiled program as a separate process.
|
|
7
|
+
*
|
|
8
|
+
* spell-checker: ignore _wrename,SHFILEOPSTRUCTW,FOF_NOCONFIRMATION,FOF_NOERRORUI
|
|
9
|
+
* spell-checker: ignore HRESULT,HINSTANCE,lpUnkcaller,MAKELANGID,SUBLANG
|
|
10
|
+
*
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
#define _CRT_SECURE_NO_WARNINGS
|
|
14
|
+
|
|
15
|
+
#if !defined(_WIN32)
|
|
16
|
+
#define _POSIX_C_SOURCE 200809L
|
|
17
|
+
#ifndef _GNU_SOURCE
|
|
18
|
+
#define _GNU_SOURCE
|
|
19
|
+
#endif
|
|
20
|
+
#endif
|
|
21
|
+
|
|
22
|
+
#ifdef __NUITKA_NO_ASSERT__
|
|
23
|
+
#undef NDEBUG
|
|
24
|
+
#define NDEBUG
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
#if defined(_WIN32)
|
|
28
|
+
// Note: Keep this separate line, must be included before other Windows headers.
|
|
29
|
+
#include <windows.h>
|
|
30
|
+
|
|
31
|
+
// Other windows header files.
|
|
32
|
+
#include <psapi.h>
|
|
33
|
+
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
#include <assert.h>
|
|
37
|
+
#include <errno.h>
|
|
38
|
+
#include <signal.h>
|
|
39
|
+
#include <stdint.h>
|
|
40
|
+
#include <stdio.h>
|
|
41
|
+
#include <stdlib.h>
|
|
42
|
+
#include <string.h>
|
|
43
|
+
#include <time.h>
|
|
44
|
+
#include <wchar.h>
|
|
45
|
+
|
|
46
|
+
/* Type bool */
|
|
47
|
+
#ifndef __cplusplus
|
|
48
|
+
#include <stdbool.h>
|
|
49
|
+
#endif
|
|
50
|
+
|
|
51
|
+
#if !defined(_WIN32)
|
|
52
|
+
#include <dirent.h>
|
|
53
|
+
#include <signal.h>
|
|
54
|
+
#include <sys/stat.h>
|
|
55
|
+
#include <sys/types.h>
|
|
56
|
+
#include <sys/wait.h>
|
|
57
|
+
#include <unistd.h>
|
|
58
|
+
#endif
|
|
59
|
+
|
|
60
|
+
#ifndef __IDE_ONLY__
|
|
61
|
+
// Generated during build with optional defines.
|
|
62
|
+
#include "onefile_definitions.h"
|
|
63
|
+
#else
|
|
64
|
+
#define _NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_CACHING
|
|
65
|
+
#define _NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_HANDLING
|
|
66
|
+
#define _NUITKA_ONEFILE_TEMP_BOOL 0
|
|
67
|
+
#define _NUITKA_ONEFILE_CHILD_GRACE_TIME_INT 5000
|
|
68
|
+
#define _NUITKA_ONEFILE_TEMP_SPEC "{TEMP}/onefile_{PID}_{TIME}"
|
|
69
|
+
|
|
70
|
+
#define _NUITKA_AUTO_UPDATE_BOOL 1
|
|
71
|
+
#define _NUITKA_AUTO_UPDATE_DEBUG_BOOL 1
|
|
72
|
+
#define _NUITKA_AUTO_UPDATE_URL_SPEC "https://..."
|
|
73
|
+
|
|
74
|
+
#define _NUITKA_ATTACH_CONSOLE_WINDOW 1
|
|
75
|
+
#endif
|
|
76
|
+
|
|
77
|
+
#if _NUITKA_ONEFILE_COMPRESSION_BOOL == 1
|
|
78
|
+
// Header of zstd goes first, spellchecker: ignore ZSTDERRORLIB,ZSTDLIB
|
|
79
|
+
#define ZSTDERRORLIB_VISIBILITY
|
|
80
|
+
#define ZSTDLIB_VISIBILITY
|
|
81
|
+
#include "zstd.h"
|
|
82
|
+
|
|
83
|
+
// Should be in our inline copy, we include all C files into this one.
|
|
84
|
+
#include "common/error_private.c"
|
|
85
|
+
#include "common/fse_decompress.c"
|
|
86
|
+
#include "common/xxhash.c"
|
|
87
|
+
#include "common/zstd_common.c"
|
|
88
|
+
// Need to make sure this is last in common as it depends on the others.
|
|
89
|
+
#include "common/entropy_common.c"
|
|
90
|
+
|
|
91
|
+
// Decompression stuff.
|
|
92
|
+
#include "decompress/huf_decompress.c"
|
|
93
|
+
#include "decompress/zstd_ddict.c"
|
|
94
|
+
#include "decompress/zstd_decompress.c"
|
|
95
|
+
#include "decompress/zstd_decompress_block.c"
|
|
96
|
+
#endif
|
|
97
|
+
|
|
98
|
+
// Some handy macro definitions, e.g. unlikely and NUITKA_MAY_BE_UNUSED
|
|
99
|
+
#include "nuitka/hedley.h"
|
|
100
|
+
#define likely(x) HEDLEY_LIKELY(x)
|
|
101
|
+
#define unlikely(x) HEDLEY_UNLIKELY(x)
|
|
102
|
+
#ifdef __GNUC__
|
|
103
|
+
#define NUITKA_MAY_BE_UNUSED __attribute__((__unused__))
|
|
104
|
+
#else
|
|
105
|
+
#define NUITKA_MAY_BE_UNUSED
|
|
106
|
+
#endif
|
|
107
|
+
|
|
108
|
+
#include "HelpersChecksumTools.c"
|
|
109
|
+
#include "HelpersEnvironmentVariablesSystem.c"
|
|
110
|
+
#include "HelpersFilesystemPaths.c"
|
|
111
|
+
#include "HelpersSafeStrings.c"
|
|
112
|
+
|
|
113
|
+
#if defined(_WIN32) && (defined(_NUITKA_ATTACH_CONSOLE_WINDOW) || defined(_NUITKA_HIDE_CONSOLE_WINDOW))
|
|
114
|
+
#include "HelpersConsole.c"
|
|
115
|
+
#endif
|
|
116
|
+
|
|
117
|
+
// For tracing outputs if enabled at compile time.
|
|
118
|
+
#include "nuitka/tracing.h"
|
|
119
|
+
|
|
120
|
+
static void fatalError(char const *message) {
|
|
121
|
+
puts(message);
|
|
122
|
+
exit(2);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
static void fatalIOError(char const *message, error_code_t error_code) {
|
|
126
|
+
printOSErrorMessage(message, error_code);
|
|
127
|
+
exit(2);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Failure to expand the template for where to extract to.
|
|
131
|
+
static void fatalErrorTempFiles(void) {
|
|
132
|
+
fatalIOError("Error, couldn't unpack file to target path.", getLastErrorCode());
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
#if _NUITKA_ONEFILE_COMPRESSION_BOOL == 1
|
|
136
|
+
static void fatalErrorAttachedData(void) { fatalError("Error, couldn't decode attached data."); }
|
|
137
|
+
#endif
|
|
138
|
+
|
|
139
|
+
static void fatalErrorHeaderAttachedData(void) { fatalError("Error, couldn't find attached data header."); }
|
|
140
|
+
|
|
141
|
+
// Out of memory error.
|
|
142
|
+
#if !defined(_WIN32) || _NUITKA_ONEFILE_COMPRESSION_BOOL == 1
|
|
143
|
+
static void fatalErrorMemory(void) { fatalError("Error, couldn't allocate memory."); }
|
|
144
|
+
#endif
|
|
145
|
+
|
|
146
|
+
// Could not launch child process.
|
|
147
|
+
static void fatalErrorChild(char const *message, error_code_t error_code) { fatalIOError(message, error_code); }
|
|
148
|
+
|
|
149
|
+
static void fatalErrorTempFileCreate(filename_char_t const *filename) {
|
|
150
|
+
fprintf(stderr, "Error, failed to open '" FILENAME_FORMAT_STR "' for writing.\n", filename);
|
|
151
|
+
exit(2);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
static void fatalErrorSpec(filename_char_t const *spec) {
|
|
155
|
+
fprintf(stderr, "Error, couldn't runtime expand spec '" FILENAME_FORMAT_STR "'.\n", spec);
|
|
156
|
+
abort();
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
static FILE_HANDLE createFileForWritingChecked(filename_char_t const *filename) {
|
|
160
|
+
FILE_HANDLE result = createFileForWriting(filename);
|
|
161
|
+
|
|
162
|
+
if (result == FILE_HANDLE_NULL) {
|
|
163
|
+
fatalErrorTempFileCreate(filename);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
static unsigned char const *payload_data = NULL;
|
|
170
|
+
static unsigned char const *payload_current = NULL;
|
|
171
|
+
static unsigned long long payload_size = 0;
|
|
172
|
+
|
|
173
|
+
#ifdef __APPLE__
|
|
174
|
+
|
|
175
|
+
#include <mach-o/getsect.h>
|
|
176
|
+
#include <mach-o/ldsyms.h>
|
|
177
|
+
|
|
178
|
+
static void initPayloadData2(void) {
|
|
179
|
+
const struct mach_header *header = &_mh_execute_header;
|
|
180
|
+
|
|
181
|
+
unsigned long section_size;
|
|
182
|
+
|
|
183
|
+
payload_data = getsectiondata(header, "payload", "payload", §ion_size);
|
|
184
|
+
payload_current = payload_data;
|
|
185
|
+
payload_size = section_size;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
static void closePayloadData(void) {}
|
|
189
|
+
|
|
190
|
+
#elif defined(_WIN32)
|
|
191
|
+
|
|
192
|
+
static void initPayloadData2(void) {
|
|
193
|
+
HRSRC windows_resource = FindResource(NULL, MAKEINTRESOURCE(27), RT_RCDATA);
|
|
194
|
+
|
|
195
|
+
payload_data = (const unsigned char *)LockResource(LoadResource(NULL, windows_resource));
|
|
196
|
+
payload_current = payload_data;
|
|
197
|
+
|
|
198
|
+
payload_size = SizeofResource(NULL, windows_resource);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Note: it appears unlocking the resource is not actually foreseen.
|
|
202
|
+
static void closePayloadData(void) {}
|
|
203
|
+
|
|
204
|
+
#else
|
|
205
|
+
|
|
206
|
+
static void fatalErrorFindAttachedData(char const *erroring_function, error_code_t error_code) {
|
|
207
|
+
char buffer[1024] = "Error, couldn't find attached data:";
|
|
208
|
+
appendStringSafe(buffer, erroring_function, sizeof(buffer));
|
|
209
|
+
|
|
210
|
+
fatalIOError(buffer, error_code);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
static struct MapFileToMemoryInfo exe_file_mapped;
|
|
214
|
+
|
|
215
|
+
static void initPayloadData2(void) {
|
|
216
|
+
exe_file_mapped = mapFileToMemory(getBinaryPath());
|
|
217
|
+
|
|
218
|
+
if (exe_file_mapped.error) {
|
|
219
|
+
fatalErrorFindAttachedData(exe_file_mapped.erroring_function, exe_file_mapped.error_code);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
payload_data = exe_file_mapped.data;
|
|
223
|
+
payload_current = payload_data;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
static void closePayloadData(void) { unmapFileFromMemory(&exe_file_mapped); }
|
|
227
|
+
|
|
228
|
+
#endif
|
|
229
|
+
|
|
230
|
+
static void initPayloadData(void) {
|
|
231
|
+
initPayloadData2();
|
|
232
|
+
|
|
233
|
+
#if !defined(__APPLE__) && !defined(_WIN32)
|
|
234
|
+
const off_t size_end_offset = exe_file_mapped.file_size;
|
|
235
|
+
|
|
236
|
+
NUITKA_PRINT_TIMING("ONEFILE: Determining payload start position.");
|
|
237
|
+
|
|
238
|
+
assert(sizeof(payload_size) == sizeof(unsigned long long));
|
|
239
|
+
memcpy(&payload_size, payload_data + size_end_offset - sizeof(payload_size), sizeof(payload_size));
|
|
240
|
+
|
|
241
|
+
unsigned long long start_pos = size_end_offset - sizeof(payload_size) - payload_size;
|
|
242
|
+
|
|
243
|
+
payload_current += start_pos;
|
|
244
|
+
payload_data += start_pos;
|
|
245
|
+
#endif
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
#if _NUITKA_ONEFILE_COMPRESSION_BOOL == 1
|
|
249
|
+
|
|
250
|
+
static ZSTD_DCtx *dest_ctx = NULL;
|
|
251
|
+
static ZSTD_inBuffer input = {NULL, 0, 0};
|
|
252
|
+
static ZSTD_outBuffer output = {NULL, 0, 0};
|
|
253
|
+
|
|
254
|
+
static void initZSTD(void) {
|
|
255
|
+
input.src = NULL;
|
|
256
|
+
|
|
257
|
+
size_t const output_buffer_size = ZSTD_DStreamOutSize();
|
|
258
|
+
output.dst = malloc(output_buffer_size);
|
|
259
|
+
if (output.dst == NULL) {
|
|
260
|
+
fatalErrorMemory();
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
dest_ctx = ZSTD_createDCtx();
|
|
264
|
+
if (dest_ctx == NULL) {
|
|
265
|
+
fatalErrorMemory();
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
static void releaseZSTD(void) {
|
|
270
|
+
ZSTD_freeDCtx(dest_ctx);
|
|
271
|
+
|
|
272
|
+
free(output.dst);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
#endif
|
|
276
|
+
|
|
277
|
+
static void readChunk(void *buffer, size_t size) {
|
|
278
|
+
// printf("Reading %d\n", size);
|
|
279
|
+
|
|
280
|
+
memcpy(buffer, payload_current, size);
|
|
281
|
+
payload_current += size;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
static void readPayloadChunk(void *buffer, size_t size) {
|
|
285
|
+
#if _NUITKA_ONEFILE_COMPRESSION_BOOL == 1 && _NUITKA_ONEFILE_ARCHIVE_BOOL == 0
|
|
286
|
+
bool end_of_buffer = false;
|
|
287
|
+
|
|
288
|
+
// Loop until finished with asked chunk.
|
|
289
|
+
while (size > 0) {
|
|
290
|
+
size_t available = output.size - output.pos;
|
|
291
|
+
|
|
292
|
+
// printf("already available %d asking for %d\n", available, size);
|
|
293
|
+
|
|
294
|
+
// Consider available data.
|
|
295
|
+
if (available != 0) {
|
|
296
|
+
size_t use = available;
|
|
297
|
+
if (size < use) {
|
|
298
|
+
use = size;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
memcpy(buffer, ((char *)output.dst) + output.pos, use);
|
|
302
|
+
buffer = (void *)(((char *)buffer) + use);
|
|
303
|
+
size -= use;
|
|
304
|
+
|
|
305
|
+
output.pos += use;
|
|
306
|
+
|
|
307
|
+
// Loop end check may exist when "size" is "use".
|
|
308
|
+
continue;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Nothing available, make sure to make it available from existing input.
|
|
312
|
+
if (input.pos < input.size || end_of_buffer) {
|
|
313
|
+
output.pos = 0;
|
|
314
|
+
output.size = ZSTD_DStreamOutSize();
|
|
315
|
+
|
|
316
|
+
size_t const ret = ZSTD_decompressStream(dest_ctx, &output, &input);
|
|
317
|
+
// printf("return output %d %d\n", output.pos, output.size);
|
|
318
|
+
end_of_buffer = (output.pos == output.size);
|
|
319
|
+
|
|
320
|
+
if (ZSTD_isError(ret)) {
|
|
321
|
+
fatalErrorAttachedData();
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
output.size = output.pos;
|
|
325
|
+
output.pos = 0;
|
|
326
|
+
|
|
327
|
+
// printf("made output %d %d\n", output.pos, output.size);
|
|
328
|
+
|
|
329
|
+
// Above code gets a turn.
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
if (input.size != input.pos) {
|
|
334
|
+
fatalErrorAttachedData();
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
#else
|
|
338
|
+
readChunk(buffer, size);
|
|
339
|
+
#endif
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
#if _NUITKA_ONEFILE_TEMP_BOOL == 0
|
|
343
|
+
static uint32_t readPayloadChecksumValue(void) {
|
|
344
|
+
unsigned int result;
|
|
345
|
+
readPayloadChunk(&result, sizeof(unsigned int));
|
|
346
|
+
|
|
347
|
+
return (uint32_t)result;
|
|
348
|
+
}
|
|
349
|
+
#endif
|
|
350
|
+
|
|
351
|
+
#if !defined(_WIN32) && !defined(__MSYS__)
|
|
352
|
+
static unsigned char readPayloadFileFlagsValue(void) {
|
|
353
|
+
unsigned char result;
|
|
354
|
+
readPayloadChunk(&result, 1);
|
|
355
|
+
|
|
356
|
+
return result;
|
|
357
|
+
}
|
|
358
|
+
#endif
|
|
359
|
+
|
|
360
|
+
static unsigned long long readPayloadSizeValue(void) {
|
|
361
|
+
unsigned long long result;
|
|
362
|
+
readPayloadChunk(&result, sizeof(unsigned long long));
|
|
363
|
+
|
|
364
|
+
return result;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
#if _NUITKA_ONEFILE_ARCHIVE_BOOL == 1 && _NUITKA_ONEFILE_COMPRESSION_BOOL == 1
|
|
368
|
+
static unsigned long long readArchiveFileSizeValue(void) {
|
|
369
|
+
unsigned long long result;
|
|
370
|
+
readPayloadChunk(&result, sizeof(unsigned int));
|
|
371
|
+
|
|
372
|
+
return result;
|
|
373
|
+
}
|
|
374
|
+
#endif
|
|
375
|
+
|
|
376
|
+
static filename_char_t readPayloadFilenameCharacter(void) {
|
|
377
|
+
filename_char_t result;
|
|
378
|
+
|
|
379
|
+
readPayloadChunk(&result, sizeof(filename_char_t));
|
|
380
|
+
|
|
381
|
+
return result;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
static filename_char_t *readPayloadFilename(void) {
|
|
385
|
+
static filename_char_t buffer[1024];
|
|
386
|
+
|
|
387
|
+
filename_char_t *w = buffer;
|
|
388
|
+
|
|
389
|
+
for (;;) {
|
|
390
|
+
*w = readPayloadFilenameCharacter();
|
|
391
|
+
|
|
392
|
+
if (*w == 0) {
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
w += 1;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
return buffer;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
static void writeContainedFile(FILE_HANDLE target_file, unsigned long long file_size) {
|
|
403
|
+
#if _NUITKA_ONEFILE_ARCHIVE_BOOL == 1
|
|
404
|
+
|
|
405
|
+
#if _NUITKA_ONEFILE_COMPRESSION_BOOL == 0
|
|
406
|
+
if (target_file != FILE_HANDLE_NULL) {
|
|
407
|
+
if (writeFileChunk(target_file, payload_current, file_size) == false) {
|
|
408
|
+
fatalErrorTempFiles();
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
payload_current += file_size;
|
|
413
|
+
#else
|
|
414
|
+
if (target_file != FILE_HANDLE_NULL) {
|
|
415
|
+
|
|
416
|
+
// Nothing available, make sure to make it available from existing input.
|
|
417
|
+
while (input.pos < input.size) {
|
|
418
|
+
// printf("available input %ld %ld\n", input.pos, input.size);
|
|
419
|
+
|
|
420
|
+
output.pos = 0;
|
|
421
|
+
output.size = ZSTD_DStreamOutSize();
|
|
422
|
+
|
|
423
|
+
size_t const ret = ZSTD_decompressStream(dest_ctx, &output, &input);
|
|
424
|
+
if (ZSTD_isError(ret)) {
|
|
425
|
+
fatalErrorAttachedData();
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
// printf("available output %ld %ld\n", output.pos, output.size);
|
|
429
|
+
|
|
430
|
+
if (writeFileChunk(target_file, (char const *)output.dst, output.pos) == false) {
|
|
431
|
+
fatalErrorTempFiles();
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// printf("made output %ld %lld\n", output.pos, file_size);
|
|
435
|
+
file_size -= output.pos;
|
|
436
|
+
assert(file_size >= 0);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
assert(file_size == 0);
|
|
440
|
+
}
|
|
441
|
+
#endif
|
|
442
|
+
#else
|
|
443
|
+
while (file_size > 0) {
|
|
444
|
+
static char chunk[32768];
|
|
445
|
+
|
|
446
|
+
long chunk_size;
|
|
447
|
+
|
|
448
|
+
// Doing min manually, as otherwise the compiler is confused from types.
|
|
449
|
+
if (file_size <= sizeof(chunk)) {
|
|
450
|
+
chunk_size = (long)file_size;
|
|
451
|
+
} else {
|
|
452
|
+
chunk_size = sizeof(chunk);
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
readPayloadChunk(chunk, chunk_size);
|
|
456
|
+
|
|
457
|
+
if (target_file != FILE_HANDLE_NULL) {
|
|
458
|
+
if (writeFileChunk(target_file, chunk, chunk_size) == false) {
|
|
459
|
+
fatalErrorTempFiles();
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
file_size -= chunk_size;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
assert(file_size == 0);
|
|
467
|
+
#endif
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// Zero means, not yet created, created unsuccessfully, terminated already.
|
|
471
|
+
#if defined(_WIN32)
|
|
472
|
+
HANDLE handle_process = 0;
|
|
473
|
+
#else
|
|
474
|
+
pid_t handle_process = 0;
|
|
475
|
+
#endif
|
|
476
|
+
|
|
477
|
+
static filename_char_t payload_path[4096] = {0};
|
|
478
|
+
|
|
479
|
+
#if _NUITKA_ONEFILE_TEMP_BOOL
|
|
480
|
+
static bool payload_created = false;
|
|
481
|
+
#endif
|
|
482
|
+
|
|
483
|
+
#define MAX_CREATED_DIRS 1024
|
|
484
|
+
static filename_char_t *created_dir_paths[MAX_CREATED_DIRS];
|
|
485
|
+
int created_dir_count = 0;
|
|
486
|
+
|
|
487
|
+
static bool createDirectory(filename_char_t const *path) {
|
|
488
|
+
bool bool_res;
|
|
489
|
+
|
|
490
|
+
#if defined(_WIN32)
|
|
491
|
+
if (created_dir_count == 0) {
|
|
492
|
+
filename_char_t home_path[4096];
|
|
493
|
+
wchar_t *pattern = L"{HOME}";
|
|
494
|
+
|
|
495
|
+
bool_res = expandTemplatePathFilename(home_path, pattern, sizeof(payload_path) / sizeof(filename_char_t));
|
|
496
|
+
|
|
497
|
+
if (unlikely(bool_res == false)) {
|
|
498
|
+
fatalErrorSpec(pattern);
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
created_dir_paths[created_dir_count] = wcsdup(home_path);
|
|
502
|
+
created_dir_count += 1;
|
|
503
|
+
}
|
|
504
|
+
#endif
|
|
505
|
+
|
|
506
|
+
for (int i = 0; i < created_dir_count; i++) {
|
|
507
|
+
if (strcmpFilename(path, created_dir_paths[i]) == 0) {
|
|
508
|
+
return true;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
#if defined(_WIN32)
|
|
513
|
+
// On Windows, lets ignore drive letters.
|
|
514
|
+
if (strlenFilename(path) == 2 && path[1] == L':') {
|
|
515
|
+
return true;
|
|
516
|
+
}
|
|
517
|
+
#endif
|
|
518
|
+
|
|
519
|
+
#if defined(_WIN32)
|
|
520
|
+
bool_res = CreateDirectoryW(path, NULL);
|
|
521
|
+
|
|
522
|
+
if (bool_res == false && GetLastError() == 183) {
|
|
523
|
+
bool_res = true;
|
|
524
|
+
}
|
|
525
|
+
#else
|
|
526
|
+
if (access(path, F_OK) != -1) {
|
|
527
|
+
bool_res = true;
|
|
528
|
+
} else {
|
|
529
|
+
bool_res = mkdir(path, 0700) == 0;
|
|
530
|
+
}
|
|
531
|
+
#endif
|
|
532
|
+
|
|
533
|
+
if (bool_res != false && created_dir_count < MAX_CREATED_DIRS) {
|
|
534
|
+
created_dir_paths[created_dir_count] = strdupFilename(path);
|
|
535
|
+
created_dir_count += 1;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
return bool_res;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
static bool createContainingDirectory(filename_char_t const *path) {
|
|
542
|
+
filename_char_t dir_path[4096] = {0};
|
|
543
|
+
dir_path[0] = 0;
|
|
544
|
+
|
|
545
|
+
appendStringSafeFilename(dir_path, path, sizeof(dir_path) / sizeof(filename_char_t));
|
|
546
|
+
|
|
547
|
+
filename_char_t *w = dir_path + strlenFilename(dir_path);
|
|
548
|
+
|
|
549
|
+
while (w > dir_path) {
|
|
550
|
+
if (*w == FILENAME_SEP_CHAR) {
|
|
551
|
+
*w = 0;
|
|
552
|
+
|
|
553
|
+
bool res = createDirectory(dir_path);
|
|
554
|
+
if (res != false) {
|
|
555
|
+
return true;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
createContainingDirectory(dir_path);
|
|
559
|
+
return createDirectory(dir_path);
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
w--;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
return true;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
#if _NUITKA_ONEFILE_TEMP_BOOL
|
|
569
|
+
#if defined(_WIN32)
|
|
570
|
+
|
|
571
|
+
static bool isDirectory(wchar_t const *path) {
|
|
572
|
+
DWORD dwAttrib = GetFileAttributesW(path);
|
|
573
|
+
|
|
574
|
+
return (dwAttrib != INVALID_FILE_ATTRIBUTES && (dwAttrib & FILE_ATTRIBUTE_DIRECTORY) != 0);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
static void _removeDirectory(wchar_t const *path) {
|
|
578
|
+
SHFILEOPSTRUCTW file_op_struct = {
|
|
579
|
+
NULL, FO_DELETE, payload_path, L"", FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT, false, 0, L""};
|
|
580
|
+
SHFileOperationW(&file_op_struct);
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
static void removeDirectory(wchar_t const *path) {
|
|
584
|
+
_removeDirectory(path);
|
|
585
|
+
|
|
586
|
+
for (int i = 0; i < 20; i++) {
|
|
587
|
+
if (!isDirectory(path)) {
|
|
588
|
+
break;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
// Delay 0.1s before trying again.
|
|
592
|
+
Sleep(100);
|
|
593
|
+
|
|
594
|
+
_removeDirectory(path);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
#else
|
|
599
|
+
static int removeDirectory(char const *path) {
|
|
600
|
+
DIR *d = opendir(path);
|
|
601
|
+
size_t path_len = strlen(path);
|
|
602
|
+
|
|
603
|
+
int r = -1;
|
|
604
|
+
|
|
605
|
+
if (d != NULL) {
|
|
606
|
+
struct dirent *p;
|
|
607
|
+
|
|
608
|
+
r = 0;
|
|
609
|
+
while (!r && (p = readdir(d))) {
|
|
610
|
+
int r2 = -1;
|
|
611
|
+
|
|
612
|
+
size_t len;
|
|
613
|
+
|
|
614
|
+
// Ignore special names
|
|
615
|
+
if (!strcmp(p->d_name, ".") || !strcmp(p->d_name, "..")) {
|
|
616
|
+
continue;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
len = path_len + strlen(p->d_name) + 2;
|
|
620
|
+
char *buf = (char *)malloc(len);
|
|
621
|
+
|
|
622
|
+
if (buf == NULL) {
|
|
623
|
+
fatalErrorMemory();
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
struct stat statbuf;
|
|
627
|
+
|
|
628
|
+
snprintf(buf, len, "%s/%s", path, p->d_name);
|
|
629
|
+
|
|
630
|
+
if (!stat(buf, &statbuf)) {
|
|
631
|
+
if (S_ISDIR(statbuf.st_mode))
|
|
632
|
+
r2 = removeDirectory(buf);
|
|
633
|
+
else
|
|
634
|
+
r2 = unlink(buf);
|
|
635
|
+
}
|
|
636
|
+
free(buf);
|
|
637
|
+
r = r2;
|
|
638
|
+
}
|
|
639
|
+
closedir(d);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
if (!r) {
|
|
643
|
+
rmdir(path);
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
return r;
|
|
647
|
+
}
|
|
648
|
+
#endif
|
|
649
|
+
#endif
|
|
650
|
+
|
|
651
|
+
#if !defined(_WIN32)
|
|
652
|
+
static int waitpid_retried(pid_t pid, int *status, bool async) {
|
|
653
|
+
int res;
|
|
654
|
+
|
|
655
|
+
for (;;) {
|
|
656
|
+
if (status != NULL) {
|
|
657
|
+
*status = 0;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
res = waitpid(pid, status, async ? WNOHANG : 0);
|
|
661
|
+
|
|
662
|
+
if ((res == -1) && (errno == EINTR)) {
|
|
663
|
+
continue;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
break;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
return res;
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
static int waitpid_timeout(pid_t pid) {
|
|
673
|
+
// Check if already exited.
|
|
674
|
+
if (waitpid(pid, NULL, WNOHANG) == -1) {
|
|
675
|
+
return 0;
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
// Checking 5 times per second should be good enough.
|
|
679
|
+
long ns = 200000000L; // 0.2s
|
|
680
|
+
|
|
681
|
+
// Seconds, nanoseconds from our milliseconds value.
|
|
682
|
+
struct timespec timeout = {
|
|
683
|
+
_NUITKA_ONEFILE_CHILD_GRACE_TIME_INT / 1000,
|
|
684
|
+
(_NUITKA_ONEFILE_CHILD_GRACE_TIME_INT % 1000) * 1000,
|
|
685
|
+
};
|
|
686
|
+
struct timespec delay = {0, ns};
|
|
687
|
+
struct timespec elapsed = {0, 0};
|
|
688
|
+
struct timespec rem;
|
|
689
|
+
|
|
690
|
+
do {
|
|
691
|
+
// Only want to care about SIGCHLD here.
|
|
692
|
+
int res = waitpid_retried(pid, NULL, true);
|
|
693
|
+
|
|
694
|
+
if (unlikely(res < 0)) {
|
|
695
|
+
perror("waitpid");
|
|
696
|
+
|
|
697
|
+
return -1;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
if (res != 0) {
|
|
701
|
+
break;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
nanosleep(&delay, &rem);
|
|
705
|
+
|
|
706
|
+
elapsed.tv_sec += (elapsed.tv_nsec + ns) / 1000000000L;
|
|
707
|
+
elapsed.tv_nsec = (elapsed.tv_nsec + ns) % 1000000000L;
|
|
708
|
+
} while (elapsed.tv_sec < timeout.tv_sec ||
|
|
709
|
+
(elapsed.tv_sec == timeout.tv_sec && elapsed.tv_nsec < timeout.tv_nsec));
|
|
710
|
+
|
|
711
|
+
return 0;
|
|
712
|
+
}
|
|
713
|
+
#endif
|
|
714
|
+
|
|
715
|
+
static void cleanupChildProcess(bool send_sigint) {
|
|
716
|
+
|
|
717
|
+
// Cause KeyboardInterrupt in the child process.
|
|
718
|
+
if (handle_process != 0) {
|
|
719
|
+
|
|
720
|
+
if (send_sigint) {
|
|
721
|
+
#if defined(_NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_HANDLING)
|
|
722
|
+
puts("Sending CTRL-C to child\n");
|
|
723
|
+
#endif
|
|
724
|
+
|
|
725
|
+
#if defined(_WIN32)
|
|
726
|
+
AttachConsole(GetProcessId(handle_process));
|
|
727
|
+
SetConsoleCtrlHandler(NULL, TRUE);
|
|
728
|
+
BOOL res = GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0);
|
|
729
|
+
FreeConsole();
|
|
730
|
+
|
|
731
|
+
if (res == false) {
|
|
732
|
+
printOSErrorMessage("Failed to send CTRL-C to child process.", GetLastError());
|
|
733
|
+
// No error exit is done, we still want to cleanup when it does exit
|
|
734
|
+
}
|
|
735
|
+
#else
|
|
736
|
+
kill(handle_process, SIGINT);
|
|
737
|
+
#endif
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
// TODO: We ought to only need to wait if there is a need to cleanup
|
|
741
|
+
// files when we are on Windows, on Linux maybe exec can be used so
|
|
742
|
+
// this process to exist anymore if there is nothing to do.
|
|
743
|
+
#if _NUITKA_ONEFILE_TEMP_BOOL || 1
|
|
744
|
+
NUITKA_PRINT_TRACE("Waiting for child to exit.\n");
|
|
745
|
+
#if defined(_WIN32)
|
|
746
|
+
if (WaitForSingleObject(handle_process, _NUITKA_ONEFILE_CHILD_GRACE_TIME_INT) != 0) {
|
|
747
|
+
TerminateProcess(handle_process, 0);
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
CloseHandle(handle_process);
|
|
751
|
+
#else
|
|
752
|
+
waitpid_timeout(handle_process);
|
|
753
|
+
kill(handle_process, SIGKILL);
|
|
754
|
+
#endif
|
|
755
|
+
NUITKA_PRINT_TRACE("Child is exited.\n");
|
|
756
|
+
#endif
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
#if _NUITKA_ONEFILE_TEMP_BOOL
|
|
760
|
+
if (payload_created) {
|
|
761
|
+
#if _NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_HANDLING
|
|
762
|
+
wprintf(L"Removing payload path '%lS'\n", payload_path);
|
|
763
|
+
#endif
|
|
764
|
+
removeDirectory(payload_path);
|
|
765
|
+
}
|
|
766
|
+
#endif
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
#if defined(_WIN32)
|
|
770
|
+
BOOL WINAPI ourConsoleCtrlHandler(DWORD fdwCtrlType) {
|
|
771
|
+
switch (fdwCtrlType) {
|
|
772
|
+
// Handle the CTRL-C signal.
|
|
773
|
+
case CTRL_C_EVENT:
|
|
774
|
+
#ifdef _NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_HANDLING
|
|
775
|
+
puts("Ctrl-C event");
|
|
776
|
+
#endif
|
|
777
|
+
cleanupChildProcess(false);
|
|
778
|
+
return FALSE;
|
|
779
|
+
|
|
780
|
+
// CTRL-CLOSE: confirm that the user wants to exit.
|
|
781
|
+
case CTRL_CLOSE_EVENT:
|
|
782
|
+
#ifdef _NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_HANDLING
|
|
783
|
+
puts("Ctrl-Close event");
|
|
784
|
+
#endif
|
|
785
|
+
cleanupChildProcess(false);
|
|
786
|
+
return FALSE;
|
|
787
|
+
|
|
788
|
+
// Pass other signals to the next handler.
|
|
789
|
+
case CTRL_BREAK_EVENT:
|
|
790
|
+
#ifdef _NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_HANDLING
|
|
791
|
+
puts("Ctrl-Break event");
|
|
792
|
+
#endif
|
|
793
|
+
cleanupChildProcess(false);
|
|
794
|
+
return FALSE;
|
|
795
|
+
|
|
796
|
+
case CTRL_LOGOFF_EVENT:
|
|
797
|
+
#ifdef _NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_HANDLING
|
|
798
|
+
puts("Ctrl-Logoff event");
|
|
799
|
+
#endif
|
|
800
|
+
cleanupChildProcess(false);
|
|
801
|
+
return FALSE;
|
|
802
|
+
|
|
803
|
+
case CTRL_SHUTDOWN_EVENT:
|
|
804
|
+
#ifdef _NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_HANDLING
|
|
805
|
+
puts("Ctrl-Shutdown event");
|
|
806
|
+
#endif
|
|
807
|
+
cleanupChildProcess(false);
|
|
808
|
+
return FALSE;
|
|
809
|
+
|
|
810
|
+
default:
|
|
811
|
+
return FALSE;
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
#else
|
|
816
|
+
void ourConsoleCtrlHandler(int sig) { cleanupChildProcess(false); }
|
|
817
|
+
#endif
|
|
818
|
+
|
|
819
|
+
#if _NUITKA_AUTO_UPDATE_BOOL && !defined(__IDE_ONLY__)
|
|
820
|
+
#include "nuitka_onefile_auto_updater.h"
|
|
821
|
+
#endif
|
|
822
|
+
|
|
823
|
+
#if _NUITKA_AUTO_UPDATE_BOOL
|
|
824
|
+
extern bool exe_file_updatable;
|
|
825
|
+
#endif
|
|
826
|
+
|
|
827
|
+
#ifdef _NUITKA_ONEFILE_SPLASH_SCREEN
|
|
828
|
+
#ifdef __cplusplus
|
|
829
|
+
extern "C" {
|
|
830
|
+
#endif
|
|
831
|
+
extern void initSplashScreen(void);
|
|
832
|
+
extern bool checkSplashScreen(void);
|
|
833
|
+
#ifdef __cplusplus
|
|
834
|
+
}
|
|
835
|
+
#endif
|
|
836
|
+
#endif
|
|
837
|
+
|
|
838
|
+
#ifdef _WIN32
|
|
839
|
+
|
|
840
|
+
static bool containsWStringAny(wchar_t const *source, wchar_t const *characters) {
|
|
841
|
+
while (*characters) {
|
|
842
|
+
if (wcschr(source, *characters) != NULL) {
|
|
843
|
+
return true;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
characters++;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
return false;
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
static wchar_t *getCommandLineForChildProcess(void) {
|
|
853
|
+
|
|
854
|
+
wchar_t *orig_command_line = GetCommandLineW();
|
|
855
|
+
#if defined(_NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_HANDLING)
|
|
856
|
+
wprintf(L"Command line was '%ls'\n", orig_command_line);
|
|
857
|
+
#endif
|
|
858
|
+
|
|
859
|
+
int argc;
|
|
860
|
+
LPWSTR *argv = CommandLineToArgvW(orig_command_line, &argc);
|
|
861
|
+
assert(argv != NULL);
|
|
862
|
+
assert(argc > 0);
|
|
863
|
+
|
|
864
|
+
static wchar_t result[32768];
|
|
865
|
+
result[0] = 0;
|
|
866
|
+
|
|
867
|
+
// Assigning constant value to there, strongly hoping nothing ever modifies
|
|
868
|
+
// the contents.
|
|
869
|
+
argv[0] = (wchar_t *)getBinaryPath();
|
|
870
|
+
|
|
871
|
+
for (int i = 0; i < argc; i++) {
|
|
872
|
+
if (i >= 1) {
|
|
873
|
+
appendWCharSafeW(result, L' ', sizeof(result) / sizeof(wchar_t));
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
bool needs_quote = containsWStringAny(argv[i], L" \t\n\v\"");
|
|
877
|
+
|
|
878
|
+
#if defined(_NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_HANDLING)
|
|
879
|
+
wprintf(L"Command line arg %d was '%ls' needs quoting %ls\n", i, argv[i], needs_quote ? L"yes" : L"no");
|
|
880
|
+
#endif
|
|
881
|
+
|
|
882
|
+
if (needs_quote) {
|
|
883
|
+
appendWCharSafeW(result, L'"', sizeof(result) / sizeof(wchar_t));
|
|
884
|
+
|
|
885
|
+
wchar_t const *current = argv[i];
|
|
886
|
+
|
|
887
|
+
for (;;) {
|
|
888
|
+
int backslash_count = 0;
|
|
889
|
+
|
|
890
|
+
while (*current == L'\\') {
|
|
891
|
+
current++;
|
|
892
|
+
backslash_count += 1;
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
if (*current == 0) {
|
|
896
|
+
for (int j = 0; j < backslash_count * 2; j++) {
|
|
897
|
+
appendWCharSafeW(result, L'\\', sizeof(result) / sizeof(wchar_t));
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
break;
|
|
901
|
+
} else if (*current == L'"') {
|
|
902
|
+
for (int j = 0; j < backslash_count * 2 + 1; j++) {
|
|
903
|
+
appendWCharSafeW(result, L'\\', sizeof(result) / sizeof(wchar_t));
|
|
904
|
+
}
|
|
905
|
+
} else {
|
|
906
|
+
for (int j = 0; j < backslash_count; j++) {
|
|
907
|
+
appendWCharSafeW(result, L'\\', sizeof(result) / sizeof(wchar_t));
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
appendWCharSafeW(result, *current, sizeof(result) / sizeof(wchar_t));
|
|
912
|
+
|
|
913
|
+
current++;
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
appendWCharSafeW(result, L'"', sizeof(result) / sizeof(wchar_t));
|
|
917
|
+
|
|
918
|
+
} else {
|
|
919
|
+
appendWStringSafeW(result, argv[i], sizeof(result) / sizeof(wchar_t));
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
#if defined(_NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_HANDLING)
|
|
924
|
+
wprintf(L"Command line composed to '%ls'\n", result);
|
|
925
|
+
#endif
|
|
926
|
+
return result;
|
|
927
|
+
}
|
|
928
|
+
#endif
|
|
929
|
+
|
|
930
|
+
#if _NUITKA_ONEFILE_DLL_MODE
|
|
931
|
+
static int runPythonCodeDLL(filename_char_t const *dll_filename, int argc, native_command_line_argument_t **argv) {
|
|
932
|
+
|
|
933
|
+
#if defined(_WIN32)
|
|
934
|
+
DLL_DIRECTORY_COOKIE dll_dir_cookie = AddDllDirectory(payload_path);
|
|
935
|
+
assert(dll_dir_cookie != 0);
|
|
936
|
+
|
|
937
|
+
HINSTANCE hGetProcIDDLL = LoadLibraryExW(dll_filename, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
|
|
938
|
+
|
|
939
|
+
if (!hGetProcIDDLL) {
|
|
940
|
+
fatalIOError("Error, load DLL.", getLastErrorCode());
|
|
941
|
+
|
|
942
|
+
return EXIT_FAILURE;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
typedef int(__stdcall * nuitka_dll_function_ptr)(int, wchar_t **);
|
|
946
|
+
|
|
947
|
+
nuitka_dll_function_ptr nuitka_dll_function = (nuitka_dll_function_ptr)GetProcAddress(hGetProcIDDLL, "run_code");
|
|
948
|
+
|
|
949
|
+
if (nuitka_dll_function == NULL) {
|
|
950
|
+
fatalError("Error, DLL entry point not found.");
|
|
951
|
+
|
|
952
|
+
return EXIT_FAILURE;
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
return (*nuitka_dll_function)(argc, argv);
|
|
956
|
+
#else
|
|
957
|
+
typedef int (*nuitka_dll_function_ptr)(int, native_command_line_argument_t **);
|
|
958
|
+
|
|
959
|
+
void *handle = dlopen(dll_filename, RTLD_LOCAL | RTLD_NOW);
|
|
960
|
+
|
|
961
|
+
if (unlikely(handle == NULL)) {
|
|
962
|
+
const char *error = dlerror();
|
|
963
|
+
|
|
964
|
+
if (unlikely(error == NULL)) {
|
|
965
|
+
error = "unknown dlopen() error";
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
fatalError(error);
|
|
969
|
+
return EXIT_FAILURE;
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
nuitka_dll_function_ptr nuitka_dll_function = (nuitka_dll_function_ptr)dlsym(handle, "run_code");
|
|
973
|
+
assert(nuitka_dll_function);
|
|
974
|
+
|
|
975
|
+
return (*nuitka_dll_function)(argc, argv);
|
|
976
|
+
#endif
|
|
977
|
+
}
|
|
978
|
+
#endif
|
|
979
|
+
|
|
980
|
+
#ifdef _NUITKA_WINMAIN_ENTRY_POINT
|
|
981
|
+
int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, wchar_t *lpCmdLine, int nCmdShow) {
|
|
982
|
+
int argc = __argc;
|
|
983
|
+
wchar_t **argv = __wargv;
|
|
984
|
+
#else
|
|
985
|
+
#if defined(_WIN32)
|
|
986
|
+
#ifdef _NUITKA_WINSVC_BOOL
|
|
987
|
+
SERVICE_STATUS_HANDLE svcStatusHandle;
|
|
988
|
+
SERVICE_STATUS svcStatus;
|
|
989
|
+
int startup(int, wchar_t**);
|
|
990
|
+
|
|
991
|
+
DWORD PrintError(const wchar_t* fnName)
|
|
992
|
+
{
|
|
993
|
+
LPWSTR errorMessage = NULL;
|
|
994
|
+
DWORD errorCode = GetLastError();
|
|
995
|
+
FormatMessageW(
|
|
996
|
+
FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
997
|
+
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
998
|
+
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
999
|
+
NULL,
|
|
1000
|
+
errorCode,
|
|
1001
|
+
MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
|
|
1002
|
+
(LPWSTR)&errorMessage,
|
|
1003
|
+
0, NULL);
|
|
1004
|
+
wprintf(L"%ls failed (%d): %ls", fnName, errorCode, errorMessage);
|
|
1005
|
+
LocalFree(errorMessage);
|
|
1006
|
+
return errorCode;
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
DWORD SvcInstall(LPCWSTR cmdLine)
|
|
1010
|
+
{
|
|
1011
|
+
SC_HANDLE scManagerHandle = OpenSCManagerW(NULL, NULL, SC_MANAGER_ALL_ACCESS);
|
|
1012
|
+
if (NULL == scManagerHandle) {
|
|
1013
|
+
return PrintError(L"OpenSCManager");
|
|
1014
|
+
}
|
|
1015
|
+
SC_HANDLE serviceHandle = CreateServiceW(
|
|
1016
|
+
scManagerHandle,
|
|
1017
|
+
_NUITKA_WINSVC_NAME_WIDE_STRING,
|
|
1018
|
+
_NUITKA_WINSVC_DISPLAY_NAME_WIDE_STRING,
|
|
1019
|
+
SERVICE_ALL_ACCESS,
|
|
1020
|
+
SERVICE_WIN32_OWN_PROCESS,
|
|
1021
|
+
SERVICE_AUTO_START,
|
|
1022
|
+
SERVICE_ERROR_NORMAL,
|
|
1023
|
+
cmdLine,
|
|
1024
|
+
NULL, NULL, NULL, NULL, NULL);
|
|
1025
|
+
if (NULL == serviceHandle) {
|
|
1026
|
+
CloseServiceHandle(scManagerHandle);
|
|
1027
|
+
return PrintError(L"CreateService");
|
|
1028
|
+
}
|
|
1029
|
+
else wprintf(L"Service installed successfully\n");
|
|
1030
|
+
#ifdef _NUITKA_WINSVC_DESCRIPTION_WIDE_STRING
|
|
1031
|
+
SERVICE_DESCRIPTIONW serviceDescription;
|
|
1032
|
+
serviceDescription.lpDescription = _NUITKA_WINSVC_DESCRIPTION_WIDE_STRING;
|
|
1033
|
+
if (0 == ChangeServiceConfig2W(serviceHandle, SERVICE_CONFIG_DESCRIPTION, &serviceDescription)) {
|
|
1034
|
+
return PrintError(L"ChangeServiceConfig2W");
|
|
1035
|
+
}
|
|
1036
|
+
#endif
|
|
1037
|
+
CloseServiceHandle(serviceHandle);
|
|
1038
|
+
CloseServiceHandle(scManagerHandle);
|
|
1039
|
+
return NO_ERROR;
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
DWORD SvcUninstall()
|
|
1043
|
+
{
|
|
1044
|
+
SC_HANDLE scManagerHandle = OpenSCManagerW(NULL, NULL, SC_MANAGER_ALL_ACCESS);
|
|
1045
|
+
if (NULL == scManagerHandle) {
|
|
1046
|
+
return PrintError(L"OpenSCManager");
|
|
1047
|
+
}
|
|
1048
|
+
SC_HANDLE serviceHandle = OpenServiceW(scManagerHandle, _NUITKA_WINSVC_NAME_WIDE_STRING, DELETE);
|
|
1049
|
+
if (serviceHandle == NULL) {
|
|
1050
|
+
CloseServiceHandle(scManagerHandle);
|
|
1051
|
+
return PrintError(L"OpenService");
|
|
1052
|
+
}
|
|
1053
|
+
if (!DeleteService(serviceHandle)) {
|
|
1054
|
+
CloseServiceHandle(serviceHandle);
|
|
1055
|
+
return PrintError(L"DeleteService");
|
|
1056
|
+
}
|
|
1057
|
+
else wprintf(L"Service uninstalled successfully\n");
|
|
1058
|
+
CloseServiceHandle(serviceHandle);
|
|
1059
|
+
CloseServiceHandle(scManagerHandle);
|
|
1060
|
+
return NO_ERROR;
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
VOID ReportSvcStatus(DWORD currentState, DWORD win32ExitCode, DWORD waitHint)
|
|
1064
|
+
{
|
|
1065
|
+
static DWORD checkPoint = 1;
|
|
1066
|
+
svcStatus.dwCurrentState = currentState;
|
|
1067
|
+
svcStatus.dwWin32ExitCode = win32ExitCode;
|
|
1068
|
+
svcStatus.dwWaitHint = waitHint;
|
|
1069
|
+
|
|
1070
|
+
if (currentState == SERVICE_START_PENDING)
|
|
1071
|
+
svcStatus.dwControlsAccepted = 0;
|
|
1072
|
+
else svcStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
|
|
1073
|
+
|
|
1074
|
+
if ((currentState == SERVICE_RUNNING) ||
|
|
1075
|
+
(currentState == SERVICE_STOPPED))
|
|
1076
|
+
svcStatus.dwCheckPoint = 0;
|
|
1077
|
+
else svcStatus.dwCheckPoint = checkPoint++;
|
|
1078
|
+
SetServiceStatus(svcStatusHandle, &svcStatus);
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
VOID WINAPI SvcCtrlHandler(DWORD ctrl)
|
|
1082
|
+
{
|
|
1083
|
+
switch (ctrl) {
|
|
1084
|
+
case SERVICE_CONTROL_STOP:
|
|
1085
|
+
ReportSvcStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);
|
|
1086
|
+
cleanupChildProcess(true);
|
|
1087
|
+
ReportSvcStatus(svcStatus.dwCurrentState, NO_ERROR, 0);
|
|
1088
|
+
return;
|
|
1089
|
+
case SERVICE_CONTROL_INTERROGATE:
|
|
1090
|
+
break;
|
|
1091
|
+
default:
|
|
1092
|
+
break;
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
VOID WINAPI SvcMain(DWORD argc, LPSTR* argv)
|
|
1097
|
+
{
|
|
1098
|
+
svcStatusHandle = RegisterServiceCtrlHandlerW(_NUITKA_WINSVC_NAME_WIDE_STRING, SvcCtrlHandler);
|
|
1099
|
+
if (!svcStatusHandle) {
|
|
1100
|
+
return;
|
|
1101
|
+
}
|
|
1102
|
+
svcStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
|
|
1103
|
+
svcStatus.dwServiceSpecificExitCode = 0;
|
|
1104
|
+
ReportSvcStatus(SERVICE_START_PENDING, NO_ERROR, 100);
|
|
1105
|
+
|
|
1106
|
+
ReportSvcStatus(SERVICE_RUNNING, NO_ERROR, 0);
|
|
1107
|
+
startup(argc, (wchar_t **)argv);
|
|
1108
|
+
ReportSvcStatus(SERVICE_STOPPED, NO_ERROR, 0);
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
int wmain(int argc, wchar_t** argv)
|
|
1112
|
+
{
|
|
1113
|
+
if (argc == 2) {
|
|
1114
|
+
if (wcscmp(argv[1], _NUITKA_WINSVC_INSTALL_WIDE_STRING) == 0) {
|
|
1115
|
+
wchar_t imagePath[MAX_PATH];
|
|
1116
|
+
if (0 == GetModuleFileNameW(NULL, imagePath, MAX_PATH)) {
|
|
1117
|
+
return PrintError(L"GetModuleFileNameW");
|
|
1118
|
+
}
|
|
1119
|
+
#ifdef _NUITKA_WINSVC_CMDLINE_WIDE_STRING
|
|
1120
|
+
wchar_t cmdLine[2 << 12];
|
|
1121
|
+
swprintf_s(cmdLine, _countof(cmdLine), L"%s %s", imagePath, _NUITKA_WINSVC_CMDLINE_WIDE_STRING);
|
|
1122
|
+
return SvcInstall(cmdLine);
|
|
1123
|
+
#else
|
|
1124
|
+
return SvcInstall(imagePath);
|
|
1125
|
+
#endif
|
|
1126
|
+
}
|
|
1127
|
+
else if (wcscmp(argv[1], _NUITKA_WINSVC_UNINSTALL_WIDE_STRING) == 0) {
|
|
1128
|
+
return SvcUninstall();
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
SERVICE_TABLE_ENTRYW serviceTable[] = {
|
|
1133
|
+
{ (LPWSTR)_NUITKA_WINSVC_NAME_WIDE_STRING, (LPSERVICE_MAIN_FUNCTIONW)SvcMain },
|
|
1134
|
+
{ NULL, NULL }
|
|
1135
|
+
};
|
|
1136
|
+
if (!StartServiceCtrlDispatcherW(serviceTable)) {
|
|
1137
|
+
return startup(argc, argv);
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
int startup(int argc, wchar_t **argv) {
|
|
1142
|
+
#else
|
|
1143
|
+
int wmain(int argc, wchar_t **argv) {
|
|
1144
|
+
#if defined(_NUITKA_HIDE_CONSOLE_WINDOW)
|
|
1145
|
+
hideConsoleIfSpawned();
|
|
1146
|
+
#endif
|
|
1147
|
+
#endif
|
|
1148
|
+
#else
|
|
1149
|
+
int main(int argc, char **argv) {
|
|
1150
|
+
#endif
|
|
1151
|
+
#endif
|
|
1152
|
+
// Attach to the parent console respecting redirection only, otherwise we cannot
|
|
1153
|
+
// even output traces.
|
|
1154
|
+
#if defined(_WIN32) && defined(_NUITKA_ATTACH_CONSOLE_WINDOW)
|
|
1155
|
+
inheritAttachedConsole();
|
|
1156
|
+
#endif
|
|
1157
|
+
|
|
1158
|
+
NUITKA_PRINT_TIMING("ONEFILE: Entered main().");
|
|
1159
|
+
|
|
1160
|
+
filename_char_t const *pattern = FILENAME_EMPTY_STR _NUITKA_ONEFILE_TEMP_SPEC;
|
|
1161
|
+
bool bool_res = expandTemplatePathFilename(payload_path, pattern, sizeof(payload_path) / sizeof(filename_char_t));
|
|
1162
|
+
|
|
1163
|
+
// _putws(payload_path);
|
|
1164
|
+
|
|
1165
|
+
#if _NUITKA_ONEFILE_DLL_MODE
|
|
1166
|
+
environment_char_t const *process_role = getEnvironmentVariable("NUITKA_ONEFILE_PARENT");
|
|
1167
|
+
|
|
1168
|
+
// Empty strings do not count.
|
|
1169
|
+
if (process_role != NULL && *process_role == 0) {
|
|
1170
|
+
process_role = NULL;
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
#if defined(_WIN32)
|
|
1174
|
+
if (process_role != NULL) {
|
|
1175
|
+
errno = 0;
|
|
1176
|
+
wchar_t *endptr = NULL;
|
|
1177
|
+
unsigned long onefile_parent_pid = wcstoul(process_role, &endptr, 10);
|
|
1178
|
+
|
|
1179
|
+
if (errno == 0 && *endptr == 0) {
|
|
1180
|
+
HANDLE parent_process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, onefile_parent_pid);
|
|
1181
|
+
|
|
1182
|
+
if (parent_process != NULL) {
|
|
1183
|
+
filename_char_t onefile_parent_path[2048];
|
|
1184
|
+
|
|
1185
|
+
DWORD len = GetModuleFileNameExW(parent_process, NULL, onefile_parent_path,
|
|
1186
|
+
sizeof(onefile_parent_path) / sizeof(onefile_parent_path[0]));
|
|
1187
|
+
|
|
1188
|
+
if (len == 0) {
|
|
1189
|
+
process_role = NULL;
|
|
1190
|
+
} else {
|
|
1191
|
+
resolveFileSymbolicLink(onefile_parent_path, onefile_parent_path,
|
|
1192
|
+
sizeof(onefile_parent_path) / sizeof(wchar_t), true);
|
|
1193
|
+
makeShortDirFilename(onefile_parent_path, sizeof(onefile_parent_path) / sizeof(wchar_t));
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
if (strcmpFilename(onefile_parent_path, getBinaryFilenameWideChars(true)) != 0) {
|
|
1197
|
+
process_role = NULL;
|
|
1198
|
+
}
|
|
1199
|
+
} else {
|
|
1200
|
+
process_role = NULL;
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
CloseHandle(parent_process);
|
|
1204
|
+
} else {
|
|
1205
|
+
process_role = NULL;
|
|
1206
|
+
}
|
|
1207
|
+
}
|
|
1208
|
+
#endif
|
|
1209
|
+
|
|
1210
|
+
#else
|
|
1211
|
+
environment_char_t const *process_role = NULL;
|
|
1212
|
+
#endif
|
|
1213
|
+
|
|
1214
|
+
// IF we are the bootstrasp binary, show the splash screen.
|
|
1215
|
+
#if defined(_NUITKA_ONEFILE_SPLASH_SCREEN) && _NUITKA_ONEFILE_COMPRESSION_BOOL == 1
|
|
1216
|
+
if (process_role == NULL) {
|
|
1217
|
+
initSplashScreen();
|
|
1218
|
+
}
|
|
1219
|
+
#endif
|
|
1220
|
+
|
|
1221
|
+
NUITKA_PRINT_TIMING("ONEFILE: Unpacking payload.");
|
|
1222
|
+
initPayloadData();
|
|
1223
|
+
|
|
1224
|
+
static filename_char_t first_filename[1024] = {0};
|
|
1225
|
+
|
|
1226
|
+
if (unlikely(bool_res == false)) {
|
|
1227
|
+
fatalErrorSpec(pattern);
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
#if defined(_NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_HANDLING)
|
|
1231
|
+
wprintf(L"payload path: '%lS'\n", payload_path);
|
|
1232
|
+
#endif
|
|
1233
|
+
|
|
1234
|
+
#if defined(_WIN32)
|
|
1235
|
+
bool_res = SetConsoleCtrlHandler(ourConsoleCtrlHandler, true);
|
|
1236
|
+
if (bool_res == false) {
|
|
1237
|
+
fatalError("Error, failed to register signal handler.");
|
|
1238
|
+
}
|
|
1239
|
+
#else
|
|
1240
|
+
signal(SIGINT, ourConsoleCtrlHandler);
|
|
1241
|
+
signal(SIGQUIT, ourConsoleCtrlHandler);
|
|
1242
|
+
signal(SIGTERM, ourConsoleCtrlHandler);
|
|
1243
|
+
#endif
|
|
1244
|
+
|
|
1245
|
+
#if _NUITKA_AUTO_UPDATE_BOOL
|
|
1246
|
+
checkAutoUpdates();
|
|
1247
|
+
#endif
|
|
1248
|
+
|
|
1249
|
+
NUITKA_PRINT_TIMING("ONEFILE: Checking header for compression.");
|
|
1250
|
+
|
|
1251
|
+
char header[3];
|
|
1252
|
+
readChunk(&header, sizeof(header));
|
|
1253
|
+
|
|
1254
|
+
if (header[0] != 'K' || header[1] != 'A') {
|
|
1255
|
+
fatalErrorHeaderAttachedData();
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1258
|
+
NUITKA_PRINT_TIMING("ONEFILE: Header is OK.");
|
|
1259
|
+
|
|
1260
|
+
// The 'X' stands for no compression, 'Y' is compressed, handle that.
|
|
1261
|
+
#if _NUITKA_ONEFILE_COMPRESSION_BOOL == 1
|
|
1262
|
+
if (header[2] != 'Y') {
|
|
1263
|
+
fatalErrorHeaderAttachedData();
|
|
1264
|
+
}
|
|
1265
|
+
initZSTD();
|
|
1266
|
+
|
|
1267
|
+
input.src = payload_current;
|
|
1268
|
+
input.pos = 0;
|
|
1269
|
+
|
|
1270
|
+
// TODO: Ought to assert that this doesn't truncate anything.
|
|
1271
|
+
input.size = (size_t)payload_size;
|
|
1272
|
+
|
|
1273
|
+
assert(payload_size > 0);
|
|
1274
|
+
#else
|
|
1275
|
+
if (header[2] != 'X') {
|
|
1276
|
+
fatalErrorHeaderAttachedData();
|
|
1277
|
+
}
|
|
1278
|
+
#endif
|
|
1279
|
+
|
|
1280
|
+
NUITKA_PRINT_TIMING("ONEFILE: Entering decompression.");
|
|
1281
|
+
|
|
1282
|
+
#if _NUITKA_ONEFILE_TEMP_BOOL
|
|
1283
|
+
payload_created = true;
|
|
1284
|
+
#endif
|
|
1285
|
+
|
|
1286
|
+
for (;;) {
|
|
1287
|
+
filename_char_t *filename = readPayloadFilename();
|
|
1288
|
+
|
|
1289
|
+
// printf("Filename: " FILENAME_FORMAT_STR "\n", filename);
|
|
1290
|
+
|
|
1291
|
+
// Detect EOF from empty filename.
|
|
1292
|
+
if (filename[0] == 0) {
|
|
1293
|
+
break;
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
static filename_char_t target_path[4096] = {0};
|
|
1297
|
+
target_path[0] = 0;
|
|
1298
|
+
|
|
1299
|
+
appendStringSafeFilename(target_path, payload_path, sizeof(target_path) / sizeof(filename_char_t));
|
|
1300
|
+
appendCharSafeFilename(target_path, FILENAME_SEP_CHAR, sizeof(target_path) / sizeof(filename_char_t));
|
|
1301
|
+
appendStringSafeFilename(target_path, filename, sizeof(target_path) / sizeof(filename_char_t));
|
|
1302
|
+
|
|
1303
|
+
if (first_filename[0] == 0) {
|
|
1304
|
+
appendStringSafeFilename(first_filename, target_path, sizeof(target_path) / sizeof(filename_char_t));
|
|
1305
|
+
|
|
1306
|
+
// Run the Python code DLL if it's already unpacked.
|
|
1307
|
+
#if _NUITKA_ONEFILE_DLL_MODE
|
|
1308
|
+
if (process_role != NULL) {
|
|
1309
|
+
return runPythonCodeDLL(first_filename, argc, argv);
|
|
1310
|
+
}
|
|
1311
|
+
#endif
|
|
1312
|
+
}
|
|
1313
|
+
|
|
1314
|
+
#if !defined(_WIN32) && !defined(__MSYS__)
|
|
1315
|
+
unsigned char file_flags = readPayloadFileFlagsValue();
|
|
1316
|
+
#endif
|
|
1317
|
+
|
|
1318
|
+
#if !defined(_WIN32) && !defined(__MSYS__)
|
|
1319
|
+
if (file_flags & 2) {
|
|
1320
|
+
filename_char_t *link_target_path = readPayloadFilename();
|
|
1321
|
+
|
|
1322
|
+
// printf("Filename: " FILENAME_FORMAT_STR " symlink to " FILENAME_FORMAT_STR "\n", target_path,
|
|
1323
|
+
// link_target_path);
|
|
1324
|
+
|
|
1325
|
+
createContainingDirectory(target_path);
|
|
1326
|
+
|
|
1327
|
+
unlink(target_path);
|
|
1328
|
+
if (symlink(link_target_path, target_path) != 0) {
|
|
1329
|
+
fatalErrorTempFileCreate(target_path);
|
|
1330
|
+
}
|
|
1331
|
+
|
|
1332
|
+
continue;
|
|
1333
|
+
}
|
|
1334
|
+
#endif
|
|
1335
|
+
// _putws(target_path);
|
|
1336
|
+
unsigned long long file_size = readPayloadSizeValue();
|
|
1337
|
+
|
|
1338
|
+
bool needs_write = true;
|
|
1339
|
+
|
|
1340
|
+
#if _NUITKA_ONEFILE_TEMP_BOOL == 0
|
|
1341
|
+
uint32_t contained_file_checksum = readPayloadChecksumValue();
|
|
1342
|
+
uint32_t existing_file_checksum = getFileCRC32(target_path);
|
|
1343
|
+
|
|
1344
|
+
if (contained_file_checksum == existing_file_checksum) {
|
|
1345
|
+
needs_write = false;
|
|
1346
|
+
|
|
1347
|
+
#ifdef _NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_CACHING
|
|
1348
|
+
fprintf(stderr, "CACHE HIT for '" FILENAME_FORMAT_STR "'.\n", target_path);
|
|
1349
|
+
#endif
|
|
1350
|
+
} else {
|
|
1351
|
+
#ifdef _NUITKA_EXPERIMENTAL_DEBUG_ONEFILE_CACHING
|
|
1352
|
+
fprintf(stderr, "CACHE MISS for '" FILENAME_FORMAT_STR "'.\n", target_path);
|
|
1353
|
+
#endif
|
|
1354
|
+
}
|
|
1355
|
+
#endif
|
|
1356
|
+
|
|
1357
|
+
#if _NUITKA_ONEFILE_ARCHIVE_BOOL == 1
|
|
1358
|
+
#if _NUITKA_ONEFILE_COMPRESSION_BOOL == 1
|
|
1359
|
+
uint32_t contained_archive_file_size = readArchiveFileSizeValue();
|
|
1360
|
+
|
|
1361
|
+
input.src = payload_current;
|
|
1362
|
+
input.pos = 0;
|
|
1363
|
+
input.size = contained_archive_file_size;
|
|
1364
|
+
|
|
1365
|
+
output.pos = 0;
|
|
1366
|
+
output.size = 0;
|
|
1367
|
+
|
|
1368
|
+
payload_current += contained_archive_file_size;
|
|
1369
|
+
#endif
|
|
1370
|
+
#endif
|
|
1371
|
+
FILE_HANDLE target_file = FILE_HANDLE_NULL;
|
|
1372
|
+
|
|
1373
|
+
if (needs_write) {
|
|
1374
|
+
createContainingDirectory(target_path);
|
|
1375
|
+
target_file = createFileForWritingChecked(target_path);
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
writeContainedFile(target_file, file_size);
|
|
1379
|
+
|
|
1380
|
+
#if !defined(_WIN32) && !defined(__MSYS__)
|
|
1381
|
+
if ((file_flags & 1) && (target_file != FILE_HANDLE_NULL)) {
|
|
1382
|
+
int fd = fileno(target_file);
|
|
1383
|
+
|
|
1384
|
+
struct stat stat_buffer;
|
|
1385
|
+
int res = fstat(fd, &stat_buffer);
|
|
1386
|
+
|
|
1387
|
+
if (res == -1) {
|
|
1388
|
+
printOSErrorMessage("fstat", errno);
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
// User shall be able to execute if at least.
|
|
1392
|
+
stat_buffer.st_mode |= S_IXUSR;
|
|
1393
|
+
|
|
1394
|
+
// Follow read flags for group, others according to umask.
|
|
1395
|
+
if ((stat_buffer.st_mode & S_IRGRP) != 0) {
|
|
1396
|
+
stat_buffer.st_mode |= S_IXOTH;
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1399
|
+
if ((stat_buffer.st_mode & S_IRGRP) != 0) {
|
|
1400
|
+
stat_buffer.st_mode |= S_IXOTH;
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
res = fchmod(fd, stat_buffer.st_mode);
|
|
1404
|
+
|
|
1405
|
+
if (res == -1) {
|
|
1406
|
+
printOSErrorMessage("fchmod", errno);
|
|
1407
|
+
}
|
|
1408
|
+
}
|
|
1409
|
+
#endif
|
|
1410
|
+
|
|
1411
|
+
if (target_file != FILE_HANDLE_NULL) {
|
|
1412
|
+
if (closeFile(target_file) == false) {
|
|
1413
|
+
fatalErrorTempFiles();
|
|
1414
|
+
}
|
|
1415
|
+
}
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
NUITKA_PRINT_TIMING("ONEFILE: Finishing decompression, cleanup payload.");
|
|
1419
|
+
|
|
1420
|
+
closePayloadData();
|
|
1421
|
+
|
|
1422
|
+
#if _NUITKA_AUTO_UPDATE_BOOL
|
|
1423
|
+
exe_file_updatable = true;
|
|
1424
|
+
#endif
|
|
1425
|
+
|
|
1426
|
+
#if _NUITKA_ONEFILE_COMPRESSION_BOOL == 1
|
|
1427
|
+
releaseZSTD();
|
|
1428
|
+
#endif
|
|
1429
|
+
|
|
1430
|
+
// Pass our pid by value to the child. If we exit for some reason, re-parenting
|
|
1431
|
+
// might change it by the time the child looks at its parent.
|
|
1432
|
+
if (process_role == NULL) {
|
|
1433
|
+
#if defined(_WIN32)
|
|
1434
|
+
setEnvironmentVariableFromLong("NUITKA_ONEFILE_PARENT", GetCurrentProcessId());
|
|
1435
|
+
#else
|
|
1436
|
+
setEnvironmentVariableFromLong("NUITKA_ONEFILE_PARENT", (long)getpid());
|
|
1437
|
+
#endif
|
|
1438
|
+
}
|
|
1439
|
+
|
|
1440
|
+
#if defined(_WIN32)
|
|
1441
|
+
filename_char_t const *binary_filename = getBinaryFilenameWideChars(false);
|
|
1442
|
+
#else
|
|
1443
|
+
filename_char_t const *binary_filename = getBinaryFilenameHostEncoded(false);
|
|
1444
|
+
#endif
|
|
1445
|
+
setEnvironmentVariable("NUITKA_ONEFILE_DIRECTORY", stripBaseFilename(binary_filename));
|
|
1446
|
+
|
|
1447
|
+
setEnvironmentVariable("NUITKA_ORIGINAL_ARGV0", argv[0]);
|
|
1448
|
+
|
|
1449
|
+
NUITKA_PRINT_TIMING("ONEFILE: Preparing forking of slave process.");
|
|
1450
|
+
|
|
1451
|
+
#if _NUITKA_ONEFILE_DLL_MODE
|
|
1452
|
+
filename_char_t const *fork_binary = getBinaryPath();
|
|
1453
|
+
#else
|
|
1454
|
+
filename_char_t const *fork_binary = first_filename;
|
|
1455
|
+
#endif
|
|
1456
|
+
|
|
1457
|
+
#if defined(_WIN32)
|
|
1458
|
+
|
|
1459
|
+
// spell-checker: ignore STARTUPINFOW, STARTF_USESTDHANDLES
|
|
1460
|
+
STARTUPINFOW si;
|
|
1461
|
+
memset(&si, 0, sizeof(si));
|
|
1462
|
+
si.dwFlags = STARTF_USESTDHANDLES;
|
|
1463
|
+
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
|
|
1464
|
+
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
|
|
1465
|
+
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
|
|
1466
|
+
si.cb = sizeof(si);
|
|
1467
|
+
|
|
1468
|
+
PROCESS_INFORMATION pi;
|
|
1469
|
+
|
|
1470
|
+
bool_res = CreateProcessW(fork_binary,
|
|
1471
|
+
getCommandLineForChildProcess(), // command line
|
|
1472
|
+
NULL, // process attributes
|
|
1473
|
+
NULL, // thread attributes
|
|
1474
|
+
TRUE, // inherit handles
|
|
1475
|
+
NORMAL_PRIORITY_CLASS, // creation flags
|
|
1476
|
+
NULL, NULL, &si, &pi);
|
|
1477
|
+
|
|
1478
|
+
NUITKA_PRINT_TIMING("ONEFILE: Started slave process.");
|
|
1479
|
+
|
|
1480
|
+
if (bool_res == false) {
|
|
1481
|
+
fatalErrorChild("Error, couldn't launch child", GetLastError());
|
|
1482
|
+
}
|
|
1483
|
+
|
|
1484
|
+
CloseHandle(pi.hThread);
|
|
1485
|
+
handle_process = pi.hProcess;
|
|
1486
|
+
|
|
1487
|
+
DWORD exit_code = 0;
|
|
1488
|
+
|
|
1489
|
+
#if _NUITKA_ONEFILE_SPLASH_SCREEN
|
|
1490
|
+
DWORD wait_time = 50;
|
|
1491
|
+
#else
|
|
1492
|
+
DWORD wait_time = INFINITE;
|
|
1493
|
+
#endif
|
|
1494
|
+
|
|
1495
|
+
// Loop with splash screen, otherwise this will be only once.
|
|
1496
|
+
while (handle_process != 0) {
|
|
1497
|
+
WaitForSingleObject(handle_process, wait_time);
|
|
1498
|
+
|
|
1499
|
+
if (!GetExitCodeProcess(handle_process, &exit_code)) {
|
|
1500
|
+
exit_code = 1;
|
|
1501
|
+
}
|
|
1502
|
+
|
|
1503
|
+
#if _NUITKA_ONEFILE_SPLASH_SCREEN
|
|
1504
|
+
if (process_role == NULL) {
|
|
1505
|
+
if (exit_code == STILL_ACTIVE) {
|
|
1506
|
+
bool done = checkSplashScreen();
|
|
1507
|
+
|
|
1508
|
+
// Stop checking splash screen, can increase timeout.
|
|
1509
|
+
if (done) {
|
|
1510
|
+
wait_time = INFINITE;
|
|
1511
|
+
}
|
|
1512
|
+
|
|
1513
|
+
continue;
|
|
1514
|
+
}
|
|
1515
|
+
}
|
|
1516
|
+
#endif
|
|
1517
|
+
CloseHandle(handle_process);
|
|
1518
|
+
|
|
1519
|
+
handle_process = 0;
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1522
|
+
cleanupChildProcess(false);
|
|
1523
|
+
#else
|
|
1524
|
+
pid_t pid = fork();
|
|
1525
|
+
int exit_code;
|
|
1526
|
+
|
|
1527
|
+
if (pid < 0) {
|
|
1528
|
+
int error_code = errno;
|
|
1529
|
+
|
|
1530
|
+
cleanupChildProcess(false);
|
|
1531
|
+
|
|
1532
|
+
fatalErrorChild("Error, couldn't launch child (fork)", error_code);
|
|
1533
|
+
exit_code = 2;
|
|
1534
|
+
} else if (pid == 0) {
|
|
1535
|
+
// Child process
|
|
1536
|
+
|
|
1537
|
+
// Make sure, we use the absolute program path for argv[0]
|
|
1538
|
+
argv[0] = (char *)getBinaryPath();
|
|
1539
|
+
|
|
1540
|
+
execv(fork_binary, argv);
|
|
1541
|
+
|
|
1542
|
+
fatalErrorChild("Error, couldn't launch child (exec)", errno);
|
|
1543
|
+
exit_code = 2;
|
|
1544
|
+
} else {
|
|
1545
|
+
// Onefile bootstrap process
|
|
1546
|
+
handle_process = pid;
|
|
1547
|
+
|
|
1548
|
+
int status;
|
|
1549
|
+
int res = waitpid_retried(handle_process, &status, false);
|
|
1550
|
+
|
|
1551
|
+
if (res == -1 && errno != ECHILD) {
|
|
1552
|
+
exit_code = 2;
|
|
1553
|
+
} else {
|
|
1554
|
+
exit_code = WEXITSTATUS(status);
|
|
1555
|
+
}
|
|
1556
|
+
|
|
1557
|
+
cleanupChildProcess(false);
|
|
1558
|
+
}
|
|
1559
|
+
|
|
1560
|
+
#endif
|
|
1561
|
+
|
|
1562
|
+
NUITKA_PRINT_TIMING("ONEFILE: Exiting.");
|
|
1563
|
+
|
|
1564
|
+
return exit_code;
|
|
1565
|
+
}
|
|
1566
|
+
|
|
1567
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1568
|
+
// integrates with CPython, but also works on its own.
|
|
1569
|
+
//
|
|
1570
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
1571
|
+
// you may not use this file except in compliance with the License.
|
|
1572
|
+
// You may obtain a copy of the License at
|
|
1573
|
+
//
|
|
1574
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
1575
|
+
//
|
|
1576
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
1577
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
1578
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1579
|
+
// See the License for the specific language governing permissions and
|
|
1580
|
+
// limitations under the License.
|