Nuitka-winsvc 1.8.6__cp312-cp312-win_amd64.whl → 1.9.3__cp312-cp312-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/METADATA +1 -1
- {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/RECORD +212 -203
- {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/WHEEL +1 -1
- nuitka/BytecodeCaching.py +4 -1
- nuitka/HardImportRegistry.py +348 -0
- nuitka/MainControl.py +45 -25
- nuitka/OptionParsing.py +31 -20
- nuitka/Options.py +47 -16
- nuitka/Progress.py +32 -2
- nuitka/PythonFlavors.py +1 -1
- nuitka/PythonVersions.py +61 -0
- nuitka/Tracing.py +25 -12
- nuitka/TreeXML.py +5 -5
- nuitka/Variables.py +15 -24
- nuitka/Version.py +16 -6
- nuitka/__main__.py +15 -0
- nuitka/__past__.py +15 -17
- nuitka/build/Backend.scons +44 -35
- nuitka/build/CCompilerVersion.scons +10 -9
- nuitka/build/Onefile.scons +11 -26
- nuitka/build/SconsCaching.py +2 -0
- nuitka/build/SconsCompilerSettings.py +72 -22
- nuitka/build/SconsHacks.py +1 -0
- nuitka/build/SconsInterface.py +5 -0
- nuitka/build/SconsSpawn.py +16 -3
- nuitka/build/SconsUtils.py +11 -12
- nuitka/build/include/nuitka/checksum_tools.h +0 -4
- nuitka/build/include/nuitka/compiled_asyncgen.h +1 -1
- nuitka/build/include/nuitka/compiled_coroutine.h +1 -1
- nuitka/build/include/nuitka/compiled_frame.h +7 -4
- nuitka/build/include/nuitka/compiled_function.h +13 -3
- nuitka/build/include/nuitka/compiled_generator.h +1 -1
- nuitka/build/include/nuitka/constants.h +2 -0
- nuitka/build/include/nuitka/environment_variables.h +45 -0
- nuitka/build/include/nuitka/exceptions.h +32 -4
- nuitka/build/include/nuitka/filesystem_paths.h +6 -1
- nuitka/build/include/nuitka/freelists.h +11 -1
- nuitka/build/include/nuitka/helper/dictionaries.h +1 -1
- nuitka/build/include/nuitka/helper/import_hard.h +3 -0
- nuitka/build/include/nuitka/helpers.h +2 -0
- nuitka/build/include/nuitka/importing.h +3 -0
- nuitka/build/include/nuitka/prelude.h +17 -6
- nuitka/build/include/nuitka/unfreezing.h +1 -1
- nuitka/build/inline_copy/bin/scons.py +14 -0
- nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
- nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
- nuitka/build/inline_copy/zlib/LICENSE +22 -0
- nuitka/build/inline_copy/zlib/crc32.c +1049 -0
- nuitka/build/inline_copy/zlib/crc32.h +9446 -0
- nuitka/build/inline_copy/zlib/zconf.h +551 -0
- nuitka/build/inline_copy/zlib/zlib.h +1938 -0
- nuitka/build/inline_copy/zlib/zutil.h +275 -0
- nuitka/build/static_src/CompiledAsyncgenType.c +41 -41
- nuitka/build/static_src/CompiledCodeHelpers.c +14 -7
- nuitka/build/static_src/CompiledCoroutineType.c +60 -51
- nuitka/build/static_src/CompiledFrameType.c +12 -12
- nuitka/build/static_src/CompiledFunctionType.c +149 -28
- nuitka/build/static_src/CompiledGeneratorType.c +64 -65
- nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +1 -1
- nuitka/build/static_src/CompiledMethodType.c +5 -3
- nuitka/build/static_src/HelperEnvironmentVariables.c +120 -0
- nuitka/build/static_src/HelpersAttributes.c +1 -1
- nuitka/build/static_src/HelpersBuiltin.c +1 -1
- nuitka/build/static_src/HelpersChecksumTools.c +19 -4
- nuitka/build/static_src/HelpersComparisonEq.c +4 -4
- nuitka/build/static_src/HelpersComparisonNe.c +4 -4
- nuitka/build/static_src/HelpersConstantsBlob.c +40 -23
- nuitka/build/static_src/HelpersDictionaries.c +3 -1
- nuitka/build/static_src/HelpersDictionariesGenerated.c +9 -9
- nuitka/build/static_src/HelpersFilesystemPaths.c +12 -2
- nuitka/build/static_src/HelpersImport.c +29 -1
- nuitka/build/static_src/HelpersImportHard.c +19 -0
- nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +5 -4
- nuitka/build/static_src/HelpersPythonPgo.c +5 -5
- nuitka/build/static_src/HelpersSafeStrings.c +2 -1
- nuitka/build/static_src/HelpersStrings.c +12 -10
- nuitka/build/static_src/HelpersTypes.c +1 -1
- nuitka/build/static_src/InspectPatcher.c +3 -2
- nuitka/build/static_src/MainProgram.c +182 -214
- nuitka/build/static_src/MetaPathBasedLoader.c +36 -23
- nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +4 -2
- nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +38 -2
- nuitka/build/static_src/OnefileBootstrap.c +124 -93
- nuitka/code_generation/CodeGeneration.py +4 -2
- nuitka/code_generation/CodeObjectCodes.py +5 -1
- nuitka/code_generation/ConstantCodes.py +4 -0
- nuitka/code_generation/Contexts.py +111 -3
- nuitka/code_generation/DictCodes.py +5 -5
- nuitka/code_generation/FunctionCodes.py +4 -2
- nuitka/code_generation/GlobalConstants.py +10 -0
- nuitka/code_generation/ImportCodes.py +69 -33
- nuitka/code_generation/ModuleCodes.py +4 -1
- nuitka/code_generation/Namify.py +6 -5
- nuitka/code_generation/YieldCodes.py +3 -3
- nuitka/code_generation/templates/CodeTemplatesModules.py +61 -95
- nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +3 -3
- nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +2 -2
- nuitka/distutils/DistutilCommands.py +3 -0
- nuitka/finalizations/FinalizeMarkups.py +1 -1
- nuitka/freezer/DependsExe.py +2 -1
- nuitka/freezer/DllDependenciesPosix.py +11 -1
- nuitka/freezer/IncludedEntryPoints.py +54 -16
- nuitka/freezer/Onefile.py +7 -3
- nuitka/freezer/Standalone.py +39 -17
- nuitka/importing/Importing.py +195 -62
- nuitka/importing/PreloadedPackages.py +2 -1
- nuitka/importing/Recursion.py +98 -27
- nuitka/importing/StandardLibrary.py +7 -4
- nuitka/nodes/BuiltinOpenNodes.py +28 -1
- nuitka/nodes/BuiltinRangeNodes.py +2 -2
- nuitka/nodes/BuiltinSumNodes.py +1 -1
- nuitka/nodes/ChildrenHavingMixins.py +326 -2
- nuitka/nodes/HardImportNodesGenerated.py +141 -38
- nuitka/nodes/ImportHardNodes.py +0 -8
- nuitka/nodes/ImportNodes.py +267 -361
- nuitka/nodes/IterationHandles.py +36 -17
- nuitka/nodes/LocalsScopes.py +3 -1
- nuitka/nodes/NodeBases.py +8 -14
- nuitka/nodes/OperatorNodes.py +9 -9
- nuitka/nodes/OutlineNodes.py +3 -3
- nuitka/nodes/PackageMetadataNodes.py +19 -9
- nuitka/nodes/SliceNodes.py +1 -1
- nuitka/nodes/VariableAssignNodes.py +25 -15
- nuitka/nodes/VariableRefNodes.py +7 -7
- nuitka/nodes/YieldNodes.py +2 -2
- nuitka/nodes/shapes/BuiltinTypeShapes.py +81 -6
- nuitka/nodes/shapes/ShapeMixins.py +21 -0
- nuitka/nodes/shapes/StandardShapes.py +9 -3
- nuitka/optimizations/OptimizeBuiltinCalls.py +1 -1
- nuitka/optimizations/TraceCollections.py +75 -0
- nuitka/pgo/PGO.py +14 -6
- nuitka/plugins/PluginBase.py +83 -11
- nuitka/plugins/Plugins.py +78 -35
- nuitka/plugins/standard/AntiBloatPlugin.py +46 -1
- nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +1 -1
- nuitka/plugins/standard/DelvewheelPlugin.py +2 -1
- nuitka/plugins/standard/DillPlugin.py +3 -99
- nuitka/plugins/standard/DllFilesPlugin.py +45 -0
- nuitka/plugins/standard/GiPlugin.py +23 -10
- nuitka/plugins/standard/GlfwPlugin.py +1 -0
- nuitka/plugins/standard/ImplicitImports.py +267 -15
- nuitka/plugins/standard/KivyPlugin.py +1 -0
- nuitka/plugins/standard/MatplotlibPlugin.py +43 -25
- nuitka/plugins/standard/OptionsNannyPlugin.py +5 -6
- nuitka/plugins/standard/PkgResourcesPlugin.py +1 -1
- nuitka/plugins/standard/PmwPlugin.py +1 -1
- nuitka/plugins/standard/PySidePyQtPlugin.py +37 -20
- nuitka/plugins/standard/TkinterPlugin.py +44 -30
- nuitka/plugins/standard/TransformersPlugin.py +3 -1
- nuitka/plugins/standard/standard.nuitka-package.config.yml +522 -86
- nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +8 -1
- nuitka/reports/CompilationReportReader.py +53 -0
- nuitka/reports/LicenseReport.rst.j2 +4 -4
- nuitka/reports/Reports.py +129 -47
- nuitka/specs/HardImportSpecs.py +6 -0
- nuitka/tools/data_composer/DataComposer.py +29 -17
- nuitka/tools/onefile_compressor/OnefileCompressor.py +173 -110
- nuitka/tools/podman/__main__.py +17 -2
- nuitka/tools/scanning/DisplayPackageDLLs.py +11 -2
- nuitka/tools/scanning/DisplayPackageData.py +1 -1
- nuitka/tools/specialize/CTypeDescriptions.py +36 -27
- nuitka/tools/specialize/SpecializeC.py +1 -1
- nuitka/tools/specialize/SpecializePython.py +16 -0
- nuitka/tools/testing/Common.py +3 -4
- nuitka/tools/testing/OutputComparison.py +23 -0
- nuitka/tools/testing/SearchModes.py +2 -2
- nuitka/tools/testing/compare_with_cpython/__main__.py +13 -4
- nuitka/tools/testing/measure_construct_performance/__main__.py +2 -5
- nuitka/tools/watch/__main__.py +194 -56
- nuitka/tree/Building.py +8 -2
- nuitka/tree/ComplexCallHelperFunctions.py +45 -15
- nuitka/tree/ReformulationAssignmentStatements.py +18 -12
- nuitka/tree/ReformulationCallExpressions.py +1 -1
- nuitka/tree/ReformulationClasses.py +11 -5
- nuitka/tree/ReformulationClasses3.py +30 -12
- nuitka/tree/ReformulationComparisonExpressions.py +4 -2
- nuitka/tree/ReformulationContractionExpressions.py +19 -11
- nuitka/tree/ReformulationDictionaryCreation.py +9 -3
- nuitka/tree/ReformulationExecStatements.py +6 -6
- nuitka/tree/ReformulationForLoopStatements.py +5 -5
- nuitka/tree/ReformulationFunctionStatements.py +6 -2
- nuitka/tree/ReformulationImportStatements.py +7 -2
- nuitka/tree/ReformulationLambdaExpressions.py +1 -1
- nuitka/tree/ReformulationMatchStatements.py +3 -1
- nuitka/tree/ReformulationNamespacePackages.py +7 -3
- nuitka/tree/ReformulationPrintStatements.py +1 -1
- nuitka/tree/ReformulationSequenceCreation.py +18 -6
- nuitka/tree/ReformulationWithStatements.py +8 -8
- nuitka/tree/ReformulationYieldExpressions.py +2 -2
- nuitka/tree/SourceHandling.py +27 -5
- nuitka/tree/VariableClosure.py +11 -1
- nuitka/utils/AppDirs.py +2 -2
- nuitka/utils/CStrings.py +39 -3
- nuitka/utils/CommandLineOptions.py +42 -1
- nuitka/utils/Distributions.py +305 -38
- nuitka/utils/Download.py +27 -8
- nuitka/utils/FileOperations.py +103 -20
- nuitka/utils/Hashing.py +2 -3
- nuitka/utils/Importing.py +60 -3
- nuitka/utils/InstalledPythons.py +31 -36
- nuitka/utils/Jinja2.py +11 -5
- nuitka/utils/ModuleNames.py +11 -3
- nuitka/utils/ReExecute.py +7 -0
- nuitka/utils/SharedLibraries.py +38 -14
- nuitka/utils/SlotMetaClasses.py +55 -0
- nuitka/utils/Utils.py +10 -0
- nuitka/utils/Yaml.py +9 -1
- nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
- nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
- {Nuitka_winsvc-1.8.6.data → Nuitka_winsvc-1.9.3.data}/scripts/nuitka-run.bat +0 -0
- {Nuitka_winsvc-1.8.6.data → Nuitka_winsvc-1.9.3.data}/scripts/nuitka.bat +0 -0
- {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/LICENSE.txt +0 -0
- {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/entry_points.txt +0 -0
- {Nuitka_winsvc-1.8.6.dist-info → Nuitka_winsvc-1.9.3.dist-info}/top_level.txt +0 -0
nuitka/build/Backend.scons
CHANGED
|
@@ -102,7 +102,7 @@ from .SconsUtils import (
|
|
|
102
102
|
writeSconsReport,
|
|
103
103
|
)
|
|
104
104
|
|
|
105
|
-
# spell-checker: ignore ccversion,ccflags,werror,cppdefines,cpppath
|
|
105
|
+
# spell-checker: ignore ccversion,ccflags,werror,cppdefines,cpppath,linkflags,libpath
|
|
106
106
|
|
|
107
107
|
# Set the arguments.
|
|
108
108
|
setArguments(ARGUMENTS)
|
|
@@ -120,7 +120,7 @@ nuitka_src = getArgumentRequired("nuitka_src")
|
|
|
120
120
|
static_src = os.path.join(source_dir, "static")
|
|
121
121
|
|
|
122
122
|
# The name of executable or extension module that we produce.
|
|
123
|
-
|
|
123
|
+
result_base_path = getArgumentRequired("result_name")
|
|
124
124
|
|
|
125
125
|
# The name of executable that we produce (in executable mode).
|
|
126
126
|
result_exe = getArgumentDefaulted("result_exe", None)
|
|
@@ -178,10 +178,6 @@ lto_mode = getArgumentDefaulted("lto_mode", "auto")
|
|
|
178
178
|
# PGO mode: Use profile guided optimization of C compiler if available.
|
|
179
179
|
pgo_mode = getArgumentDefaulted("pgo_mode", "no")
|
|
180
180
|
|
|
181
|
-
# Windows target mode: Compile for Windows. Used to be an option, but we
|
|
182
|
-
# no longer cross compile this way.
|
|
183
|
-
win_target = os.name == "nt"
|
|
184
|
-
|
|
185
181
|
# Windows subsystem mode: Disable console for windows builds.
|
|
186
182
|
disable_console = getArgumentBool("disable_console", False)
|
|
187
183
|
|
|
@@ -204,7 +200,7 @@ clang_mode = getArgumentBool("clang_mode", False)
|
|
|
204
200
|
# Clang on Windows with no requirement to use MinGW64 or using MSYS2 MinGW flavor,
|
|
205
201
|
# is changed to ClangCL from Visual Studio.
|
|
206
202
|
clangcl_mode = False
|
|
207
|
-
if
|
|
203
|
+
if os.name == "nt" and not mingw_mode and clang_mode:
|
|
208
204
|
clang_mode = False
|
|
209
205
|
clangcl_mode = True
|
|
210
206
|
|
|
@@ -290,6 +286,9 @@ cpp_include_dirs = getArgumentList("cpp_include_dirs", "")
|
|
|
290
286
|
link_dirs = getArgumentList("link_dirs", "")
|
|
291
287
|
link_libraries = getArgumentList("link_libraries", "")
|
|
292
288
|
|
|
289
|
+
# From statically compiled modules of the Python
|
|
290
|
+
link_module_libs = getArgumentList("link_module_libs", "")
|
|
291
|
+
|
|
293
292
|
# Allow automatic downloads for ccache, etc.
|
|
294
293
|
assume_yes_for_downloads = getArgumentBool("assume_yes_for_downloads", False)
|
|
295
294
|
|
|
@@ -362,6 +361,7 @@ env.debug_mode = debug_mode
|
|
|
362
361
|
env.unstripped_mode = unstripped_mode
|
|
363
362
|
env.disable_console = disable_console
|
|
364
363
|
env.source_dir = source_dir
|
|
364
|
+
env.nuitka_src = nuitka_src
|
|
365
365
|
env.low_memory = low_memory
|
|
366
366
|
env.macos_min_version = macos_min_version
|
|
367
367
|
env.macos_target_arch = macos_target_arch
|
|
@@ -377,8 +377,8 @@ env.gcc_mode = isGccName(env.the_cc_name) or clang_mode
|
|
|
377
377
|
env.clang_mode = clang_mode
|
|
378
378
|
|
|
379
379
|
# Only use MSVC if not already clear, we are using MinGW.
|
|
380
|
-
env.msvc_mode =
|
|
381
|
-
env.mingw_mode =
|
|
380
|
+
env.msvc_mode = os.name == "nt" and not env.gcc_mode
|
|
381
|
+
env.mingw_mode = os.name == "nt" and env.gcc_mode
|
|
382
382
|
env.clangcl_mode = clangcl_mode
|
|
383
383
|
|
|
384
384
|
# Consider switching from gcc to its g++ compiler as a workaround that makes us work without C11.
|
|
@@ -395,7 +395,7 @@ if show_scons_mode:
|
|
|
395
395
|
my_print("Scons: Compiler used", end=" ")
|
|
396
396
|
my_print(getExecutablePath(env.the_compiler, env=env), end=" ")
|
|
397
397
|
|
|
398
|
-
if
|
|
398
|
+
if os.name == "nt" and env.msvc_mode:
|
|
399
399
|
my_print("(MSVC %s)" % getMsvcVersionString(env))
|
|
400
400
|
|
|
401
401
|
my_print()
|
|
@@ -412,6 +412,7 @@ setupCCompiler(
|
|
|
412
412
|
lto_mode=lto_mode,
|
|
413
413
|
pgo_mode=pgo_mode,
|
|
414
414
|
job_count=job_count,
|
|
415
|
+
onefile_compile=False,
|
|
415
416
|
)
|
|
416
417
|
|
|
417
418
|
|
|
@@ -425,14 +426,14 @@ if env.gcc_mode and not env.clang_mode and env.gcc_version >= (8,):
|
|
|
425
426
|
"--file-prefix-map=%s=%s" % (os.path.normpath(source_dir), "."),
|
|
426
427
|
"--file-prefix-map=%s=%s"
|
|
427
428
|
% (
|
|
428
|
-
os.path.normpath(os.path.join(source_dir, "static_src")),
|
|
429
|
-
os.path.normpath(os.path.join(nuitka_src, "static_src")),
|
|
429
|
+
os.path.normpath(os.path.join(env.source_dir, "static_src")),
|
|
430
|
+
os.path.normpath(os.path.join(env.nuitka_src, "static_src")),
|
|
430
431
|
),
|
|
431
432
|
]
|
|
432
433
|
)
|
|
433
434
|
|
|
434
435
|
if env.msvc_mode:
|
|
435
|
-
# With Clang on Windows, there is also an linker to use.
|
|
436
|
+
# With Clang on Windows, there is also an linker to use. spell-checker: ignore bigobj
|
|
436
437
|
env.Append(
|
|
437
438
|
CCFLAGS=[
|
|
438
439
|
"/EHsc", # No C++ exception handling code.
|
|
@@ -447,7 +448,7 @@ if env.msvc_mode:
|
|
|
447
448
|
|
|
448
449
|
if module_mode:
|
|
449
450
|
# Make sure we handle import library on our own and put it into the
|
|
450
|
-
# build directory
|
|
451
|
+
# build directory, spell-checker: ignore IMPLIB
|
|
451
452
|
|
|
452
453
|
no_import_lib = True
|
|
453
454
|
env.Append(
|
|
@@ -463,10 +464,17 @@ if env.debug_mode:
|
|
|
463
464
|
if env.gcc_mode:
|
|
464
465
|
# Allow gcc/clang to point out all kinds of inconsistency to us by
|
|
465
466
|
# raising an error.
|
|
467
|
+
|
|
468
|
+
if "allow-c-warnings" not in env.experimental_flags:
|
|
469
|
+
env.Append(
|
|
470
|
+
CCFLAGS=[
|
|
471
|
+
"-Wall",
|
|
472
|
+
"-Werror",
|
|
473
|
+
]
|
|
474
|
+
)
|
|
475
|
+
|
|
466
476
|
env.Append(
|
|
467
477
|
CCFLAGS=[
|
|
468
|
-
"-Wall",
|
|
469
|
-
"-Werror",
|
|
470
478
|
# Unfortunately Py_INCREF(Py_False) triggers aliasing warnings,
|
|
471
479
|
# which are unfounded, so disable them.
|
|
472
480
|
"-Wno-error=strict-aliasing",
|
|
@@ -571,7 +579,7 @@ if env.gcc_mode and env.debian_python:
|
|
|
571
579
|
|
|
572
580
|
|
|
573
581
|
def _detectPythonHeaderPath():
|
|
574
|
-
if
|
|
582
|
+
if os.name == "nt":
|
|
575
583
|
# On Windows, the CPython installation layout is relatively fixed, but on MSYS2
|
|
576
584
|
# compiled for mingw64, it's more standard.
|
|
577
585
|
|
|
@@ -611,7 +619,7 @@ def _detectPythonHeaderPath():
|
|
|
611
619
|
if os.path.exists(os.path.join(candidate, "Python.h")):
|
|
612
620
|
return candidate
|
|
613
621
|
|
|
614
|
-
if
|
|
622
|
+
if os.name == "nt":
|
|
615
623
|
scons_logger.sysexit(
|
|
616
624
|
"""Error, you seem to be using the unsupported embeddable CPython distribution."""
|
|
617
625
|
)
|
|
@@ -645,10 +653,10 @@ if env.nuitka_python:
|
|
|
645
653
|
if env.static_libpython:
|
|
646
654
|
env.Append(CPPDEFINES=["_NUITKA_STATIC_LIBPYTHON"])
|
|
647
655
|
|
|
648
|
-
if env.static_libpython and (not
|
|
656
|
+
if env.static_libpython and (not os.name == "nt" or env.nuitka_python):
|
|
649
657
|
env.Append(CPPDEFINES=["_NUITKA_USE_UNEXPOSED_API"])
|
|
650
658
|
|
|
651
|
-
if
|
|
659
|
+
if os.name == "nt":
|
|
652
660
|
if env.nuitka_python:
|
|
653
661
|
env.Append(
|
|
654
662
|
LINKFLAGS=[
|
|
@@ -709,16 +717,19 @@ elif not module_mode:
|
|
|
709
717
|
python_lib_path = os.path.join(python_prefix_external, "lib")
|
|
710
718
|
env.Append(LIBPATH=[python_lib_path])
|
|
711
719
|
|
|
720
|
+
# Any module libs that are for self-compiled Python to be static.
|
|
721
|
+
env.Append(_LIBFLAGS=["-l" + lib_desc for lib_desc in link_module_libs])
|
|
722
|
+
|
|
712
723
|
if env.nuitka_python:
|
|
713
724
|
link_data = loadJsonFromFilename(
|
|
714
725
|
os.path.join(python_prefix_external, "link.json")
|
|
715
726
|
)
|
|
716
727
|
for lib in link_data["libraries"]:
|
|
717
728
|
# Need to prevent Scons from stripping .a from the passed in libs.
|
|
718
|
-
if
|
|
719
|
-
env.Append(_LIBFLAGS=[lib])
|
|
720
|
-
elif lib.startswith(":") and lib.endswith(".a"):
|
|
729
|
+
if lib.startswith(":") and lib.endswith(".a"):
|
|
721
730
|
env.Append(_LIBFLAGS=["-l" + lib])
|
|
731
|
+
elif os.path.isfile(lib):
|
|
732
|
+
env.Append(_LIBFLAGS=[lib])
|
|
722
733
|
else:
|
|
723
734
|
env.Append(LIBS=[lib])
|
|
724
735
|
env.Append(LIBPATH=link_data["library_dirs"])
|
|
@@ -779,7 +790,7 @@ if isMacOS():
|
|
|
779
790
|
|
|
780
791
|
# The static include files reside in Nuitka installation, which may be where
|
|
781
792
|
# the "nuitka.build" package lives.
|
|
782
|
-
nuitka_include = os.path.join(nuitka_src, "include")
|
|
793
|
+
nuitka_include = os.path.join(env.nuitka_src, "include")
|
|
783
794
|
|
|
784
795
|
if not os.path.exists(os.path.join(nuitka_include, "nuitka", "prelude.h")):
|
|
785
796
|
scons_logger.sysexit(
|
|
@@ -789,10 +800,12 @@ if not os.path.exists(os.path.join(nuitka_include, "nuitka", "prelude.h")):
|
|
|
789
800
|
|
|
790
801
|
# We have include files in the build directory and the static include directory
|
|
791
802
|
# that is located inside Nuitka installation.
|
|
792
|
-
env.Append(
|
|
803
|
+
env.Append(
|
|
804
|
+
CPPPATH=[source_dir, nuitka_include, os.path.join(env.nuitka_src, "static_src")]
|
|
805
|
+
)
|
|
793
806
|
|
|
794
807
|
# Set load libpython from binary directory default
|
|
795
|
-
if env.gcc_mode and not isMacOS() and not
|
|
808
|
+
if env.gcc_mode and not isMacOS() and not os.name == "nt" and not module_mode:
|
|
796
809
|
if env.standalone_mode:
|
|
797
810
|
rpath = "$$ORIGIN"
|
|
798
811
|
else:
|
|
@@ -868,9 +881,8 @@ def discoverSourceFiles():
|
|
|
868
881
|
|
|
869
882
|
result += [
|
|
870
883
|
provideStaticSourceFile(
|
|
884
|
+
env=env,
|
|
871
885
|
sub_path=filename,
|
|
872
|
-
nuitka_src=nuitka_src,
|
|
873
|
-
source_dir=source_dir,
|
|
874
886
|
c11_mode=env.c11_mode,
|
|
875
887
|
)
|
|
876
888
|
for filename in static_src_filenames
|
|
@@ -883,11 +895,11 @@ source_files = discoverSourceFiles()
|
|
|
883
895
|
|
|
884
896
|
if module_mode:
|
|
885
897
|
# For Python modules, the standard shared library extension is not what
|
|
886
|
-
# gets used.
|
|
898
|
+
# gets used. spell-checker: ignore SHLIBSUFFIX
|
|
887
899
|
env["SHLIBSUFFIX"] = module_suffix
|
|
888
900
|
|
|
889
901
|
target = env.SharedLibrary(
|
|
890
|
-
|
|
902
|
+
result_base_path, source_files, no_import_lib=no_import_lib
|
|
891
903
|
)
|
|
892
904
|
else:
|
|
893
905
|
target = env.Program(result_exe, source_files)
|
|
@@ -967,9 +979,7 @@ def createBuildDefinitionsFile():
|
|
|
967
979
|
build_definitions["NUITKA_FORCED_STDERR_PATH"] = forced_stderr_path
|
|
968
980
|
|
|
969
981
|
build_definitions["NUITKA_MAIN_MODULE_NAME"] = main_module_name
|
|
970
|
-
|
|
971
|
-
if main_module_name != "__main__":
|
|
972
|
-
build_definitions["NUITKA_MAIN_PACKAGE_MODE"] = 1
|
|
982
|
+
build_definitions["NUITKA_MAIN_IS_PACKAGE_BOOL"] = main_module_name != "__main__"
|
|
973
983
|
|
|
974
984
|
createDefinitionsFile(source_dir, "build_definitions.h", build_definitions)
|
|
975
985
|
|
|
@@ -978,7 +988,7 @@ if forced_stderr_path and not forced_stdout_path:
|
|
|
978
988
|
env.Append(CPPDEFINES=["NUITKA_STDERR_NOT_VISIBLE"])
|
|
979
989
|
|
|
980
990
|
if file_reference_mode == "original":
|
|
981
|
-
env.Append(CPPDEFINES=["
|
|
991
|
+
env.Append(CPPDEFINES=["_NUITKA_FILE_REFERENCE_ORIGINAL_MODE"])
|
|
982
992
|
|
|
983
993
|
|
|
984
994
|
createBuildDefinitionsFile()
|
|
@@ -1010,7 +1020,6 @@ env.Append(LIBS=link_libraries)
|
|
|
1010
1020
|
# Work around windows bugs and use watchdogs to track progress of compilation.
|
|
1011
1021
|
enableSpawnMonitoring(
|
|
1012
1022
|
env=env,
|
|
1013
|
-
win_target=win_target,
|
|
1014
1023
|
module_mode=module_mode,
|
|
1015
1024
|
source_files=source_files,
|
|
1016
1025
|
)
|
|
@@ -69,6 +69,7 @@ from .SconsUtils import (
|
|
|
69
69
|
getArgumentBool,
|
|
70
70
|
getArgumentDefaulted,
|
|
71
71
|
getArgumentList,
|
|
72
|
+
getArgumentRequired,
|
|
72
73
|
getExecutablePath,
|
|
73
74
|
initScons,
|
|
74
75
|
isClangName,
|
|
@@ -86,6 +87,8 @@ setArguments(ARGUMENTS)
|
|
|
86
87
|
# Set up the basic stuff.
|
|
87
88
|
initScons()
|
|
88
89
|
|
|
90
|
+
nuitka_src = getArgumentRequired("nuitka_src")
|
|
91
|
+
|
|
89
92
|
# Module mode: Create a Python extension module, create an executable otherwise.
|
|
90
93
|
module_mode = getArgumentBool("module_mode", False)
|
|
91
94
|
|
|
@@ -99,10 +102,6 @@ experimental = getArgumentList("experimental", "")
|
|
|
99
102
|
# good with the compiler in question.
|
|
100
103
|
lto_mode = getArgumentDefaulted("lto_mode", "auto")
|
|
101
104
|
|
|
102
|
-
# Windows target mode: Compile for Windows. Used to be an option, but we
|
|
103
|
-
# no longer cross compile this way.
|
|
104
|
-
win_target = os.name == "nt"
|
|
105
|
-
|
|
106
105
|
# Windows subsystem mode: Disable console for windows builds.
|
|
107
106
|
disable_console = getArgumentBool("disable_console", False)
|
|
108
107
|
|
|
@@ -122,7 +121,7 @@ clang_mode = getArgumentBool("clang_mode", False)
|
|
|
122
121
|
# Clang on Windows with no requirement to use MinGW64 or using MSYS2 MinGW flavor,
|
|
123
122
|
# is changed to ClangCL from Visual Studio.
|
|
124
123
|
clangcl_mode = False
|
|
125
|
-
if
|
|
124
|
+
if os.name == "nt" and not mingw_mode and clang_mode:
|
|
126
125
|
clang_mode = False
|
|
127
126
|
clangcl_mode = True
|
|
128
127
|
|
|
@@ -163,7 +162,7 @@ if "CXX" in os.environ:
|
|
|
163
162
|
|
|
164
163
|
cxx_dirname = os.path.dirname(os.environ["CXX"])
|
|
165
164
|
|
|
166
|
-
if
|
|
165
|
+
if os.name == "nt" and isGccName(os.path.basename(os.environ["CXX"])):
|
|
167
166
|
if show_scons_mode:
|
|
168
167
|
my_print("Scons: Environment CXX seems to be a gcc, enable mingw_mode.")
|
|
169
168
|
mingw_mode = True
|
|
@@ -221,6 +220,7 @@ env.the_cc_name = os.path.normcase(os.path.basename(env.the_compiler))
|
|
|
221
220
|
env.debug_mode = debug_mode
|
|
222
221
|
env.unstripped_mode = unstripped_mode
|
|
223
222
|
env.disable_console = disable_console
|
|
223
|
+
env.nuitka_src = nuitka_src
|
|
224
224
|
env.low_memory = False
|
|
225
225
|
env.macos_min_version = macos_min_version
|
|
226
226
|
env.macos_target_arch = macos_target_arch
|
|
@@ -236,8 +236,8 @@ env.gcc_mode = isGccName(env.the_cc_name) or clang_mode
|
|
|
236
236
|
env.clang_mode = clang_mode
|
|
237
237
|
|
|
238
238
|
# Only use MSVC if not already clear, we are using MinGW.
|
|
239
|
-
env.msvc_mode =
|
|
240
|
-
env.mingw_mode =
|
|
239
|
+
env.msvc_mode = os.name == "nt" and not env.gcc_mode
|
|
240
|
+
env.mingw_mode = os.name == "nt" and env.gcc_mode
|
|
241
241
|
env.clangcl_mode = clangcl_mode
|
|
242
242
|
|
|
243
243
|
# Consider switching from gcc to its g++ compiler as a workaround that makes us work without C11.
|
|
@@ -253,12 +253,13 @@ env.the_compiler = getExecutablePath(env.the_compiler, env=env)
|
|
|
253
253
|
# Report the C compiler used.
|
|
254
254
|
reportCCompiler(env, "Version", my_print)
|
|
255
255
|
|
|
256
|
-
# Set up C compiler settings.
|
|
256
|
+
# Set up C compiler settings, we would use that mode mode outputs.
|
|
257
257
|
setupCCompiler(
|
|
258
258
|
env=env,
|
|
259
259
|
lto_mode=lto_mode,
|
|
260
260
|
pgo_mode="no", # TODO: Have this here too, decompression might benefit.
|
|
261
261
|
job_count=job_count,
|
|
262
|
+
onefile_compile=False,
|
|
262
263
|
)
|
|
263
264
|
|
|
264
265
|
# TODO: Report modes.
|
nuitka/build/Onefile.scons
CHANGED
|
@@ -141,10 +141,6 @@ trace_mode = getArgumentBool("trace_mode", False)
|
|
|
141
141
|
# good with the compiler in question.
|
|
142
142
|
lto_mode = getArgumentDefaulted("lto_mode", "auto")
|
|
143
143
|
|
|
144
|
-
# Windows target mode: Compile for Windows. Used to be an option, but we
|
|
145
|
-
# no longer cross compile this way.
|
|
146
|
-
win_target = os.name == "nt"
|
|
147
|
-
|
|
148
144
|
# Windows subsystem mode: Disable console for windows builds.
|
|
149
145
|
disable_console = getArgumentBool("disable_console", False)
|
|
150
146
|
|
|
@@ -164,7 +160,7 @@ clang_mode = getArgumentBool("clang_mode", False)
|
|
|
164
160
|
# Clang on Windows with no requirement to use MinGW64 or using MSYS2 MinGW flavor,
|
|
165
161
|
# is changed to ClangCL from Visual Studio.
|
|
166
162
|
clangcl_mode = False
|
|
167
|
-
if clang_mode and
|
|
163
|
+
if clang_mode and os.name == "nt" and not mingw_mode:
|
|
168
164
|
clang_mode = False
|
|
169
165
|
clangcl_mode = True
|
|
170
166
|
|
|
@@ -223,7 +219,7 @@ if "CXX" in os.environ:
|
|
|
223
219
|
|
|
224
220
|
cxx_dirname = os.path.dirname(os.environ["CXX"])
|
|
225
221
|
|
|
226
|
-
if
|
|
222
|
+
if os.name == "nt" and isGccName(os.path.basename(os.environ["CXX"])):
|
|
227
223
|
if show_scons_mode:
|
|
228
224
|
my_print("Scons: Environment CXX seems to be a gcc, enable mingw_mode.")
|
|
229
225
|
mingw_mode = True
|
|
@@ -283,6 +279,7 @@ env.debug_mode = debug_mode
|
|
|
283
279
|
env.unstripped_mode = unstripped_mode
|
|
284
280
|
env.disable_console = disable_console
|
|
285
281
|
env.source_dir = source_dir
|
|
282
|
+
env.nuitka_src = nuitka_src
|
|
286
283
|
env.low_memory = False # Never a concern in this case.
|
|
287
284
|
env.macos_min_version = macos_min_version
|
|
288
285
|
env.macos_target_arch = macos_target_arch
|
|
@@ -298,8 +295,8 @@ env.gcc_mode = isGccName(env.the_cc_name) or clang_mode
|
|
|
298
295
|
env.clang_mode = clang_mode
|
|
299
296
|
|
|
300
297
|
# Only use MSVC if not already clear, we are using MinGW.
|
|
301
|
-
env.msvc_mode =
|
|
302
|
-
env.mingw_mode =
|
|
298
|
+
env.msvc_mode = os.name == "nt" and not env.gcc_mode
|
|
299
|
+
env.mingw_mode = os.name == "nt" and env.gcc_mode
|
|
303
300
|
env.clangcl_mode = clangcl_mode
|
|
304
301
|
|
|
305
302
|
# Consider switching from gcc to its g++ compiler as a workaround that makes us work without C11.
|
|
@@ -314,7 +311,7 @@ if show_scons_mode:
|
|
|
314
311
|
my_print("Scons: Compiler used", end=" ")
|
|
315
312
|
my_print(getExecutablePath(env.the_compiler, env=env), end=" ")
|
|
316
313
|
|
|
317
|
-
if
|
|
314
|
+
if os.name == "nt" and env.msvc_mode:
|
|
318
315
|
my_print("(MSVC %s)" % getMsvcVersionString(env))
|
|
319
316
|
|
|
320
317
|
my_print()
|
|
@@ -332,6 +329,7 @@ setupCCompiler(
|
|
|
332
329
|
lto_mode=lto_mode,
|
|
333
330
|
pgo_mode="no", # TODO: Have this here too, decompression might benefit.
|
|
334
331
|
job_count=job_count,
|
|
332
|
+
onefile_compile=True,
|
|
335
333
|
)
|
|
336
334
|
|
|
337
335
|
# Avoid them as appearing to be different files. TODO: Find out which
|
|
@@ -373,14 +371,6 @@ if debug_mode:
|
|
|
373
371
|
CCFLAGS=[
|
|
374
372
|
"-Wall",
|
|
375
373
|
"-Werror",
|
|
376
|
-
# Unfortunately Py_INCREF(Py_False) triggers aliasing warnings,
|
|
377
|
-
# which are unfounded, so disable them.
|
|
378
|
-
"-Wno-error=strict-aliasing",
|
|
379
|
-
"-Wno-strict-aliasing",
|
|
380
|
-
# At least for self-compiled Python3.2, and MinGW this happens
|
|
381
|
-
# and has little use anyway.
|
|
382
|
-
"-Wno-error=format",
|
|
383
|
-
"-Wno-format",
|
|
384
374
|
]
|
|
385
375
|
)
|
|
386
376
|
|
|
@@ -427,8 +417,8 @@ env.Append(
|
|
|
427
417
|
CPPPATH=[
|
|
428
418
|
source_dir,
|
|
429
419
|
nuitka_include,
|
|
430
|
-
os.path.join(nuitka_src, "static_src"),
|
|
431
|
-
os.path.join(nuitka_src, "inline_copy", "zstd"),
|
|
420
|
+
os.path.join(env.nuitka_src, "static_src"),
|
|
421
|
+
os.path.join(env.nuitka_src, "inline_copy", "zstd"),
|
|
432
422
|
],
|
|
433
423
|
)
|
|
434
424
|
|
|
@@ -437,8 +427,6 @@ if env.msvc_mode:
|
|
|
437
427
|
env.Append(CCFLAGS=["/MT"]) # Multithreaded, static version of C run time.
|
|
438
428
|
|
|
439
429
|
if isMacOS():
|
|
440
|
-
env.Append(CPPDEFINES=["_NUITKA_PAYLOAD_FROM_MACOS_SECTION"])
|
|
441
|
-
|
|
442
430
|
addConstantBlobFile(
|
|
443
431
|
env=env,
|
|
444
432
|
blob_filename=os.path.join(source_dir, "__payload.bin"),
|
|
@@ -463,9 +451,8 @@ def discoverSourceFiles():
|
|
|
463
451
|
# Main onefile bootstrap program
|
|
464
452
|
result.append(
|
|
465
453
|
provideStaticSourceFile(
|
|
454
|
+
env=env,
|
|
466
455
|
sub_path="OnefileBootstrap.c",
|
|
467
|
-
nuitka_src=nuitka_src,
|
|
468
|
-
source_dir=source_dir,
|
|
469
456
|
c11_mode=env.c11_mode,
|
|
470
457
|
)
|
|
471
458
|
)
|
|
@@ -473,9 +460,8 @@ def discoverSourceFiles():
|
|
|
473
460
|
if onefile_splash_screen:
|
|
474
461
|
result.append(
|
|
475
462
|
provideStaticSourceFile(
|
|
463
|
+
env=env,
|
|
476
464
|
sub_path="OnefileSplashScreen.cpp",
|
|
477
|
-
nuitka_src=nuitka_src,
|
|
478
|
-
source_dir=source_dir,
|
|
479
465
|
c11_mode=False,
|
|
480
466
|
)
|
|
481
467
|
)
|
|
@@ -510,7 +496,6 @@ env.Append(LIBS=link_libraries)
|
|
|
510
496
|
# Work around windows bugs and use watchdogs to track progress of compilation.
|
|
511
497
|
enableSpawnMonitoring(
|
|
512
498
|
env=env,
|
|
513
|
-
win_target=win_target,
|
|
514
499
|
module_mode=module_mode,
|
|
515
500
|
source_files=source_files,
|
|
516
501
|
)
|
nuitka/build/SconsCaching.py
CHANGED
|
@@ -106,6 +106,7 @@ def _injectCcache(env, cc_path, python_prefix, assume_yes_for_downloads):
|
|
|
106
106
|
if isWin32Windows():
|
|
107
107
|
url = "https://github.com/ccache/ccache/releases/download/v4.6/ccache-4.6-windows-32.zip"
|
|
108
108
|
ccache_binary = getCachedDownload(
|
|
109
|
+
name="ccache",
|
|
109
110
|
url=url,
|
|
110
111
|
is_arch_specific=False,
|
|
111
112
|
specificity=url.rsplit("/", 2)[1],
|
|
@@ -121,6 +122,7 @@ def _injectCcache(env, cc_path, python_prefix, assume_yes_for_downloads):
|
|
|
121
122
|
url = "https://nuitka.net/ccache/v4.2.1/ccache-4.2.1.zip"
|
|
122
123
|
|
|
123
124
|
ccache_binary = getCachedDownload(
|
|
125
|
+
name="ccache",
|
|
124
126
|
url=url,
|
|
125
127
|
is_arch_specific=False,
|
|
126
128
|
specificity=url.rsplit("/", 2)[1],
|
|
@@ -52,11 +52,11 @@ from .SconsUtils import (
|
|
|
52
52
|
setEnvironmentVariable,
|
|
53
53
|
)
|
|
54
54
|
|
|
55
|
-
# spell-checker: ignore CPPDEFINES,CPPPATH,CXXVERSION,CCFLAGS,LINKFLAGS,CXXFLAGS
|
|
55
|
+
# spell-checker: ignore LIBPATH,CPPDEFINES,CPPPATH,CXXVERSION,CCFLAGS,LINKFLAGS,CXXFLAGS
|
|
56
56
|
# spell-checker: ignore -flto,-fpartial-inlining,-freorder-functions,-defsym,-fprofile
|
|
57
57
|
# spell-checker: ignore -fwrapv,-Wunused,fcompare,-ftrack,-fvisibility,-municode,
|
|
58
58
|
# spell-checker: ignore -feliminate,noexecstack,implib
|
|
59
|
-
# spell-checker: ignore LTCG,GENPROFILE,USEPROFILE,
|
|
59
|
+
# spell-checker: ignore LTCG,GENPROFILE,USEPROFILE,CGTHREADS
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
def _detectWindowsSDK(env):
|
|
@@ -161,6 +161,9 @@ def _enableLtoSettings(
|
|
|
161
161
|
elif env.nuitka_python:
|
|
162
162
|
lto_mode = True
|
|
163
163
|
reason = "known to be supported (Nuitka-Python)"
|
|
164
|
+
elif env.fedora_python:
|
|
165
|
+
lto_mode = True
|
|
166
|
+
reason = "known to be supported (Fedora Python)"
|
|
164
167
|
elif (
|
|
165
168
|
env.debian_python
|
|
166
169
|
and env.gcc_mode
|
|
@@ -210,26 +213,31 @@ version for lto mode (>= 4.6). Disabled."""
|
|
|
210
213
|
reason = "gcc 4.6 is doesn't have good enough LTO support"
|
|
211
214
|
|
|
212
215
|
if env.gcc_mode and lto_mode:
|
|
213
|
-
env.Append(CCFLAGS=["-flto"])
|
|
214
|
-
|
|
215
216
|
if env.clang_mode:
|
|
217
|
+
env.Append(CCFLAGS=["-flto"])
|
|
216
218
|
env.Append(LINKFLAGS=["-flto"])
|
|
217
219
|
else:
|
|
220
|
+
env.Append(CCFLAGS=["-flto=%d" % job_count])
|
|
221
|
+
env.Append(LINKFLAGS=["-flto=%d" % job_count])
|
|
222
|
+
|
|
218
223
|
env.Append(CCFLAGS=["-fuse-linker-plugin", "-fno-fat-lto-objects"])
|
|
219
224
|
env.Append(LINKFLAGS=["-fuse-linker-plugin"])
|
|
220
225
|
|
|
221
|
-
env.Append(LINKFLAGS=["-flto=%d" % job_count])
|
|
222
|
-
|
|
223
226
|
# Need to tell the linker these things are OK.
|
|
224
227
|
env.Append(LINKFLAGS=["-fpartial-inlining", "-freorder-functions"])
|
|
225
228
|
|
|
229
|
+
if env.mingw_mode and "MAKE" not in os.environ:
|
|
230
|
+
setEnvironmentVariable(env, "MAKE", "mingw32-make.exe")
|
|
231
|
+
|
|
226
232
|
# Tell compiler to use link time optimization for MSVC
|
|
227
233
|
if env.msvc_mode and lto_mode:
|
|
228
234
|
env.Append(CCFLAGS=["/GL"])
|
|
229
235
|
|
|
230
236
|
if not env.clangcl_mode:
|
|
231
237
|
env.Append(LINKFLAGS=["/LTCG"])
|
|
232
|
-
|
|
238
|
+
|
|
239
|
+
if getMsvcVersion(env) >= (14, 3):
|
|
240
|
+
env.Append(LINKFLAGS=["/CGTHREADS:%d" % job_count])
|
|
233
241
|
|
|
234
242
|
if orig_lto_mode == "auto":
|
|
235
243
|
scons_details_logger.info(
|
|
@@ -491,6 +499,11 @@ unsigned char const *getConstantsBlobData(void) {
|
|
|
491
499
|
# Indicate "linker" resource mode.
|
|
492
500
|
env.Append(CPPDEFINES=["_NUITKA_CONSTANTS_FROM_LINKER"])
|
|
493
501
|
|
|
502
|
+
# For MinGW the symbol name to be used is more low level.
|
|
503
|
+
constant_bin_link_name = "constant_bin_data"
|
|
504
|
+
if env.mingw_mode:
|
|
505
|
+
constant_bin_link_name = "_" + constant_bin_link_name
|
|
506
|
+
|
|
494
507
|
env.Append(
|
|
495
508
|
LINKFLAGS=[
|
|
496
509
|
"-Wl,-b",
|
|
@@ -503,9 +516,9 @@ unsigned char const *getConstantsBlobData(void) {
|
|
|
503
516
|
mingw_mode=env.mingw_mode or isPosixWindows(),
|
|
504
517
|
),
|
|
505
518
|
"-Wl,-defsym",
|
|
506
|
-
"-Wl,%
|
|
519
|
+
"-Wl,%s=_binary_%s___constants_bin_start"
|
|
507
520
|
% (
|
|
508
|
-
|
|
521
|
+
constant_bin_link_name,
|
|
509
522
|
"".join(re.sub("[^a-zA-Z0-9_]", "_", c) for c in env.source_dir),
|
|
510
523
|
),
|
|
511
524
|
]
|
|
@@ -573,7 +586,7 @@ def enableWindowsStackSize(env, target_arch):
|
|
|
573
586
|
env.Append(LINKFLAGS=["-Wl,--stack,%d" % stack_size])
|
|
574
587
|
|
|
575
588
|
|
|
576
|
-
def setupCCompiler(env, lto_mode, pgo_mode, job_count):
|
|
589
|
+
def setupCCompiler(env, lto_mode, pgo_mode, job_count, onefile_compile):
|
|
577
590
|
# This is driven by many branches on purpose and has a lot of things
|
|
578
591
|
# to deal with for LTO checks and flags, pylint: disable=too-many-branches,too-many-statements
|
|
579
592
|
|
|
@@ -765,12 +778,12 @@ def setupCCompiler(env, lto_mode, pgo_mode, job_count):
|
|
|
765
778
|
if env.disable_console:
|
|
766
779
|
env.Append(CPPDEFINES=["_NUITKA_WINMAIN_ENTRY_POINT"])
|
|
767
780
|
|
|
768
|
-
# Avoid dependency on MinGW libraries
|
|
781
|
+
# Avoid dependency on MinGW libraries, spell-checker: ignore libgcc
|
|
769
782
|
if env.mingw_mode and not env.clang_mode:
|
|
770
783
|
env.Append(LINKFLAGS=["-static-libgcc"])
|
|
771
784
|
|
|
772
785
|
# MinGW64 for 64 bits needs this due to CPython bugs.
|
|
773
|
-
if env.mingw_mode and env.target_arch == "x86_64":
|
|
786
|
+
if env.mingw_mode and env.target_arch == "x86_64" and env.python_version < (3, 12):
|
|
774
787
|
env.Append(CPPDEFINES=["MS_WIN64"])
|
|
775
788
|
|
|
776
789
|
# For shell API usage to lookup app folders we need this. Note that on Windows ARM
|
|
@@ -783,6 +796,24 @@ def setupCCompiler(env, lto_mode, pgo_mode, job_count):
|
|
|
783
796
|
if isFedoraBasedLinux():
|
|
784
797
|
env.Append(CCFLAGS=["-fPIC"])
|
|
785
798
|
|
|
799
|
+
# We use zlib for crc32 functionality
|
|
800
|
+
zlib_inline_copy_dir = os.path.join(env.nuitka_src, "inline_copy", "zlib")
|
|
801
|
+
if os.path.exists(os.path.join(zlib_inline_copy_dir, "crc32.c")):
|
|
802
|
+
env.Append(
|
|
803
|
+
CPPPATH=[
|
|
804
|
+
zlib_inline_copy_dir,
|
|
805
|
+
],
|
|
806
|
+
)
|
|
807
|
+
else:
|
|
808
|
+
# TODO: Should only happen for official Debian packages, and there we
|
|
809
|
+
# can use the zlib static linking maybe, but for onefile it's not easy
|
|
810
|
+
# to get it, so just use slow checksum for now.
|
|
811
|
+
if onefile_compile:
|
|
812
|
+
env.Append(CPPDEFINES=["_NUITKA_USE_OWN_CRC32"])
|
|
813
|
+
else:
|
|
814
|
+
env.Append(CPPDEFINES=["_NUITKA_USE_SYSTEM_CRC32"])
|
|
815
|
+
env.Append(LIBS="z")
|
|
816
|
+
|
|
786
817
|
|
|
787
818
|
def _enablePgoSettings(env, pgo_mode):
|
|
788
819
|
if pgo_mode == "no":
|
|
@@ -907,20 +938,29 @@ version (>= 5.3)."""
|
|
|
907
938
|
)
|
|
908
939
|
|
|
909
940
|
if env.gcc_version < (5,):
|
|
910
|
-
|
|
941
|
+
if env.python_version < (3, 11):
|
|
942
|
+
scons_logger.info(
|
|
943
|
+
"The provided gcc is too old, switching to its g++ instead.",
|
|
944
|
+
mnemonic="too-old-gcc",
|
|
945
|
+
)
|
|
911
946
|
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
947
|
+
# Switch to g++ from gcc then if possible, when C11 mode is false.
|
|
948
|
+
the_gpp_compiler = os.path.join(
|
|
949
|
+
os.path.dirname(env.the_compiler),
|
|
950
|
+
os.path.basename(env.the_compiler).replace("gcc", "g++"),
|
|
951
|
+
)
|
|
917
952
|
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
953
|
+
if getExecutablePath(the_gpp_compiler, env=env):
|
|
954
|
+
env.the_compiler = the_gpp_compiler
|
|
955
|
+
env.the_cc_name = env.the_cc_name.replace("gcc", "g++")
|
|
956
|
+
else:
|
|
957
|
+
scons_logger.sysexit(
|
|
958
|
+
"Error, your gcc is too old for C11 support, and no related g++ to workaround that is found."
|
|
959
|
+
)
|
|
921
960
|
else:
|
|
922
961
|
scons_logger.sysexit(
|
|
923
|
-
"Error, your gcc is too old for C11 support,
|
|
962
|
+
"Error, your gcc is too old for C11 support, install a newer one.",
|
|
963
|
+
mnemonic="too-old-gcc",
|
|
924
964
|
)
|
|
925
965
|
|
|
926
966
|
|
|
@@ -929,6 +969,16 @@ def reportCCompiler(env, context, output_func):
|
|
|
929
969
|
|
|
930
970
|
if env.the_cc_name == "cl":
|
|
931
971
|
cc_output = "%s %s" % (env.the_cc_name, getMsvcVersionString(env))
|
|
972
|
+
elif isGccName(env.the_cc_name):
|
|
973
|
+
cc_output = "%s %s" % (
|
|
974
|
+
env.the_cc_name,
|
|
975
|
+
".".join(str(d) for d in env.gcc_version),
|
|
976
|
+
)
|
|
977
|
+
elif isClangName(env.the_cc_name):
|
|
978
|
+
cc_output = "%s %s" % (
|
|
979
|
+
env.the_cc_name,
|
|
980
|
+
".".join(str(d) for d in myDetectVersion(env, env.the_cc_name)),
|
|
981
|
+
)
|
|
932
982
|
else:
|
|
933
983
|
cc_output = env.the_cc_name
|
|
934
984
|
|