Nuitka-winsvc 2.5.1__cp311-cp311-win_amd64.whl → 2.5.6__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of Nuitka-winsvc might be problematic. Click here for more details.
- {Nuitka_winsvc-2.5.1.dist-info → Nuitka_winsvc-2.5.6.dist-info}/METADATA +55 -109
- {Nuitka_winsvc-2.5.1.dist-info → Nuitka_winsvc-2.5.6.dist-info}/RECORD +50 -49
- {Nuitka_winsvc-2.5.1.dist-info → Nuitka_winsvc-2.5.6.dist-info}/WHEEL +1 -1
- nuitka/OptionParsing.py +6 -5
- nuitka/Options.py +14 -5
- nuitka/Version.py +1 -1
- nuitka/build/SconsInterface.py +2 -0
- nuitka/build/include/nuitka/constants.h +2 -0
- nuitka/build/include/nuitka/helper/dictionaries.h +10 -2
- nuitka/build/include/nuitka/helper/tuples.h +12 -0
- nuitka/build/include/nuitka/prelude.h +1 -0
- nuitka/build/static_src/CompiledCodeHelpers.c +2 -0
- nuitka/build/static_src/CompiledCoroutineType.c +1 -1
- nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +32 -23
- nuitka/build/static_src/HelpersBuiltin.c +1 -1
- nuitka/build/static_src/HelpersDeepcopy.c +1 -0
- nuitka/build/static_src/HelpersDictionaries.c +14 -2
- nuitka/build/static_src/HelpersDictionariesGenerated.c +12 -1
- nuitka/build/static_src/HelpersFiles.c +1 -1
- nuitka/build/static_src/HelpersTuples.c +1 -1
- nuitka/build/static_src/MainProgram.c +24 -3
- nuitka/code_generation/templates/CodeTemplatesVariables.py +23 -20
- nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +4 -1
- nuitka/freezer/ImportDetection.py +4 -1
- nuitka/freezer/IncludedDataFiles.py +10 -1
- nuitka/freezer/Onefile.py +1 -0
- nuitka/nodes/BuiltinIteratorNodes.py +1 -1
- nuitka/nodes/DictionaryNodes.py +1 -1
- nuitka/nodes/VariableAssignNodes.py +2 -1
- nuitka/nodes/shapes/IteratorShapes.py +71 -0
- nuitka/nodes/shapes/ShapeMixins.py +3 -2
- nuitka/nodes/shapes/StandardShapes.py +1 -50
- nuitka/plugins/Plugins.py +10 -0
- nuitka/plugins/standard/DllFilesPlugin.py +78 -2
- nuitka/plugins/standard/ImplicitImports.py +4 -2
- nuitka/plugins/standard/MatplotlibPlugin.py +1 -1
- nuitka/plugins/standard/OptionsNannyPlugin.py +5 -4
- nuitka/plugins/standard/TkinterPlugin.py +23 -3
- nuitka/plugins/standard/standard.nuitka-package.config.yml +65 -11
- nuitka/tools/environments/Virtualenv.py +13 -5
- nuitka/tools/podman/__main__.py +4 -2
- nuitka/utils/FileOperations.py +4 -1
- nuitka/utils/Hashing.py +5 -1
- nuitka/utils/SharedLibraries.py +24 -0
- nuitka/utils/Signing.py +9 -1
- {Nuitka_winsvc-2.5.1.data → Nuitka_winsvc-2.5.6.data}/scripts/nuitka-run.cmd +0 -0
- {Nuitka_winsvc-2.5.1.data → Nuitka_winsvc-2.5.6.data}/scripts/nuitka.cmd +0 -0
- {Nuitka_winsvc-2.5.1.dist-info → Nuitka_winsvc-2.5.6.dist-info}/LICENSE.txt +0 -0
- {Nuitka_winsvc-2.5.1.dist-info → Nuitka_winsvc-2.5.6.dist-info}/entry_points.txt +0 -0
- {Nuitka_winsvc-2.5.1.dist-info → Nuitka_winsvc-2.5.6.dist-info}/top_level.txt +0 -0
nuitka/plugins/Plugins.py
CHANGED
|
@@ -260,6 +260,16 @@ Error, unknown plug-in '%s' in wrong case referenced, use '%s' instead."""
|
|
|
260
260
|
return plugin_name2plugin_classes[plugin_name][0]
|
|
261
261
|
|
|
262
262
|
|
|
263
|
+
def hasPluginName(plugin_name):
|
|
264
|
+
# First, load plugin classes, to know what we are talking about.
|
|
265
|
+
loadPlugins()
|
|
266
|
+
|
|
267
|
+
# Backward compatibility.
|
|
268
|
+
plugin_name = Options.getPluginNameConsideringRenames(plugin_name)
|
|
269
|
+
|
|
270
|
+
return plugin_name in plugin_name2plugin_classes
|
|
271
|
+
|
|
272
|
+
|
|
263
273
|
def _addPluginClass(plugin_class, detector):
|
|
264
274
|
plugin_name = plugin_class.plugin_name
|
|
265
275
|
|
|
@@ -41,6 +41,72 @@ class NuitkaPluginDllFiles(NuitkaYamlPluginBase):
|
|
|
41
41
|
def isRelevant():
|
|
42
42
|
return isStandaloneMode()
|
|
43
43
|
|
|
44
|
+
def _handleDllConfigBySources(self, dll_config, full_name, dest_path):
|
|
45
|
+
# The "when" is at that level too for these.
|
|
46
|
+
if not self.evaluateCondition(
|
|
47
|
+
full_name=full_name, condition=dll_config.get("when", "True")
|
|
48
|
+
):
|
|
49
|
+
return
|
|
50
|
+
|
|
51
|
+
config_name = "module '%s' DLL config" % full_name
|
|
52
|
+
|
|
53
|
+
source_paths = []
|
|
54
|
+
|
|
55
|
+
for source_path in dll_config.get("source_paths", ()):
|
|
56
|
+
value = self.evaluateExpressionOrConstant(
|
|
57
|
+
full_name=full_name,
|
|
58
|
+
expression=source_path,
|
|
59
|
+
config_name=config_name,
|
|
60
|
+
extra_context=None,
|
|
61
|
+
single_value=False,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
if type(value) is str:
|
|
65
|
+
source_paths.append(value)
|
|
66
|
+
else:
|
|
67
|
+
source_paths.extend(value)
|
|
68
|
+
|
|
69
|
+
dest_names = []
|
|
70
|
+
|
|
71
|
+
for dest_name in dll_config.get("dest_names", ()):
|
|
72
|
+
value = self.evaluateExpressionOrConstant(
|
|
73
|
+
full_name=full_name,
|
|
74
|
+
expression=dest_name,
|
|
75
|
+
config_name=config_name,
|
|
76
|
+
extra_context=None,
|
|
77
|
+
single_value=False,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
if type(value) is str:
|
|
81
|
+
dest_names.append(value)
|
|
82
|
+
else:
|
|
83
|
+
dest_names.extend(value)
|
|
84
|
+
|
|
85
|
+
assert len(source_paths) == len(dest_names), (source_paths, dest_names)
|
|
86
|
+
|
|
87
|
+
module_filename = self.locateModule(full_name)
|
|
88
|
+
|
|
89
|
+
if os.path.isdir(module_filename):
|
|
90
|
+
if dest_path is None:
|
|
91
|
+
dest_path = full_name.asPath()
|
|
92
|
+
else:
|
|
93
|
+
if dest_path is None:
|
|
94
|
+
dest_path = os.path.join(full_name.asPath(), "..")
|
|
95
|
+
|
|
96
|
+
for source_path, dest_name in zip(source_paths, dest_names):
|
|
97
|
+
yield self.makeDllEntryPoint(
|
|
98
|
+
source_path=source_path,
|
|
99
|
+
dest_path=os.path.normpath(
|
|
100
|
+
os.path.join(
|
|
101
|
+
dest_path,
|
|
102
|
+
dest_name,
|
|
103
|
+
)
|
|
104
|
+
),
|
|
105
|
+
module_name=full_name,
|
|
106
|
+
package_name=full_name,
|
|
107
|
+
reason="Yaml config of '%s'" % full_name.asString(),
|
|
108
|
+
)
|
|
109
|
+
|
|
44
110
|
def _handleDllConfigFromFilenames(self, dll_config, full_name, dest_path):
|
|
45
111
|
# A lot of details here, pylint: disable=too-many-locals
|
|
46
112
|
|
|
@@ -159,7 +225,7 @@ class NuitkaPluginDllFiles(NuitkaYamlPluginBase):
|
|
|
159
225
|
dest_path = os.path.normpath(dest_path)
|
|
160
226
|
|
|
161
227
|
if executable:
|
|
162
|
-
|
|
228
|
+
return self.makeExeEntryPoint(
|
|
163
229
|
source_path=filename,
|
|
164
230
|
dest_path=dest_path,
|
|
165
231
|
module_name=full_name,
|
|
@@ -167,7 +233,7 @@ class NuitkaPluginDllFiles(NuitkaYamlPluginBase):
|
|
|
167
233
|
reason="Yaml config of '%s'" % full_name.asString(),
|
|
168
234
|
)
|
|
169
235
|
else:
|
|
170
|
-
|
|
236
|
+
return self.makeDllEntryPoint(
|
|
171
237
|
source_path=filename,
|
|
172
238
|
dest_path=dest_path,
|
|
173
239
|
module_name=full_name,
|
|
@@ -217,6 +283,16 @@ conditions are missing, or this version of the module needs treatment added."""
|
|
|
217
283
|
|
|
218
284
|
found = False
|
|
219
285
|
|
|
286
|
+
if "from_sources" in dll_config:
|
|
287
|
+
for result in self._handleDllConfigBySources(
|
|
288
|
+
dll_config=dll_config.get("from_sources"),
|
|
289
|
+
full_name=full_name,
|
|
290
|
+
dest_path=dest_path,
|
|
291
|
+
):
|
|
292
|
+
yield result
|
|
293
|
+
|
|
294
|
+
found = True
|
|
295
|
+
|
|
220
296
|
if "by_code" in dll_config:
|
|
221
297
|
for result in self._handleDllConfigByCode(
|
|
222
298
|
dll_config=dll_config.get("by_code"),
|
|
@@ -317,8 +317,6 @@ class NuitkaPluginImplicitImports(NuitkaYamlPluginBase):
|
|
|
317
317
|
for config_package_dir in config.get("package-dirs", ()):
|
|
318
318
|
yield os.path.normpath(os.path.join(package_dir, "..", config_package_dir))
|
|
319
319
|
|
|
320
|
-
yield package_dir
|
|
321
|
-
|
|
322
320
|
for config_package_name in config.get("package-paths", ()):
|
|
323
321
|
module_filename = self.locateModule(config_package_name)
|
|
324
322
|
|
|
@@ -543,6 +541,10 @@ __file__ = (__nuitka_binary_dir + '%ssite.py') if '__nuitka_binary_dir' in dict(
|
|
|
543
541
|
):
|
|
544
542
|
code = "\n".join(entry.get("pre-import-code"))
|
|
545
543
|
|
|
544
|
+
# TODO: Add a description to the Yaml file.
|
|
545
|
+
yield code, """\
|
|
546
|
+
According to Yaml 'pre-import-code' configuration."""
|
|
547
|
+
|
|
546
548
|
for entry in self.config.get(full_name, section="import-hacks"):
|
|
547
549
|
if "force-environment-variables" in entry:
|
|
548
550
|
if self.evaluateCondition(
|
|
@@ -99,7 +99,7 @@ https://matplotlib.org/stable/users/installing/environment_variables_faq.html#en
|
|
|
99
99
|
|
|
100
100
|
if info.backend == "QtAgg" and getActiveQtPlugin() is None:
|
|
101
101
|
self.sysexit(
|
|
102
|
-
"Error, cannot use 'QtAgg'
|
|
102
|
+
"Error, cannot use 'QtAgg' without a plugin for Qt binding active, use e.g. '--enable-plugin=pyside6'."
|
|
103
103
|
)
|
|
104
104
|
|
|
105
105
|
return info
|
|
@@ -81,15 +81,16 @@ Error, package '%s' requires '--macos-create-app-bundle' to be used or else it c
|
|
|
81
81
|
elif macos_bundle == "no":
|
|
82
82
|
pass
|
|
83
83
|
elif macos_bundle == "recommend":
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
if not shallCreateAppBundle():
|
|
85
|
+
self.info(
|
|
86
|
+
"""\
|
|
86
87
|
Note, when using '%s', consider using '--macos-create-app-bundle' option. \
|
|
87
88
|
Otherwise high resolution will not be available and a terminal window will \
|
|
88
89
|
open. However for debugging, terminal output is the easiest way to see \
|
|
89
90
|
informative traceback and error information, so launch it from there if \
|
|
90
91
|
possible."""
|
|
91
|
-
|
|
92
|
-
|
|
92
|
+
% full_name
|
|
93
|
+
)
|
|
93
94
|
else:
|
|
94
95
|
self.sysexitIllegalOptionValue(full_name, "macos_bundle", macos_bundle)
|
|
95
96
|
|
|
@@ -66,14 +66,14 @@ class NuitkaPluginTkinter(NuitkaPluginBase):
|
|
|
66
66
|
self.tcl_library_dir = tcl_library_dir
|
|
67
67
|
self.tk_library_dir = tk_library_dir
|
|
68
68
|
|
|
69
|
-
# ensure one-time action, we deal with
|
|
70
|
-
# only want to do it once.
|
|
69
|
+
# ensure one-time action, we deal with several names for the execution,
|
|
70
|
+
# yet we only want to do it once.
|
|
71
71
|
self.files_copied = False
|
|
72
72
|
|
|
73
73
|
self.tk_inter_version = getTkInterVersion()
|
|
74
74
|
|
|
75
75
|
if self.tk_inter_version is None:
|
|
76
|
-
self.sysexit("Error, it seems tk-inter is not installed.")
|
|
76
|
+
self.sysexit("Error, it seems 'tk-inter' is not installed.")
|
|
77
77
|
|
|
78
78
|
# Only ever saw these 2 in use.
|
|
79
79
|
assert self.tk_inter_version in ("8.5", "8.6"), self.tk_inter_version
|
|
@@ -164,6 +164,16 @@ The Tcl library dir. See comments for Tk library dir.""",
|
|
|
164
164
|
)
|
|
165
165
|
)
|
|
166
166
|
|
|
167
|
+
# Homebrew is compiled to think it's 8.6, but it might actually
|
|
168
|
+
# be the version 9.
|
|
169
|
+
yield os.path.normpath(
|
|
170
|
+
os.path.join(
|
|
171
|
+
_getHomebrewPrefix(self),
|
|
172
|
+
"lib",
|
|
173
|
+
"tcl9",
|
|
174
|
+
)
|
|
175
|
+
)
|
|
176
|
+
|
|
167
177
|
def _getTkCandidatePaths(self):
|
|
168
178
|
yield os.getenv("TK_LIBRARY")
|
|
169
179
|
|
|
@@ -191,6 +201,16 @@ The Tcl library dir. See comments for Tk library dir.""",
|
|
|
191
201
|
)
|
|
192
202
|
)
|
|
193
203
|
|
|
204
|
+
# Homebrew is compiled to think it's 8.6, but it might actually
|
|
205
|
+
# be the version 9.
|
|
206
|
+
yield os.path.normpath(
|
|
207
|
+
os.path.join(
|
|
208
|
+
_getHomebrewPrefix(self),
|
|
209
|
+
"lib",
|
|
210
|
+
"tk9.0",
|
|
211
|
+
)
|
|
212
|
+
)
|
|
213
|
+
|
|
194
214
|
def considerDataFiles(self, module):
|
|
195
215
|
"""Provide TCL libraries to the dist folder.
|
|
196
216
|
|
|
@@ -1033,6 +1033,11 @@
|
|
|
1033
1033
|
replacements_plain:
|
|
1034
1034
|
'__version__ = get_distribution(__name__).version': 'raise DistributionNotFound'
|
|
1035
1035
|
|
|
1036
|
+
- module-name: 'debian' # checksum: a633a55a
|
|
1037
|
+
data-files:
|
|
1038
|
+
- include-metadata:
|
|
1039
|
+
- 'debian'
|
|
1040
|
+
|
|
1036
1041
|
- module-name: 'deepspeed' # checksum: 5af29274
|
|
1037
1042
|
anti-bloat:
|
|
1038
1043
|
- description: 'remove setuptools usage via triton'
|
|
@@ -1237,6 +1242,11 @@
|
|
|
1237
1242
|
- '.IN.*'
|
|
1238
1243
|
- '.CH.A'
|
|
1239
1244
|
|
|
1245
|
+
- module-name: 'docling_core' # checksum: 690d0f0d
|
|
1246
|
+
data-files:
|
|
1247
|
+
- include-metadata:
|
|
1248
|
+
- 'docling-core'
|
|
1249
|
+
|
|
1240
1250
|
- module-name: 'dotenv' # checksum: c120bb25
|
|
1241
1251
|
anti-bloat:
|
|
1242
1252
|
- description: 'remove IPython reference'
|
|
@@ -2224,6 +2234,12 @@
|
|
|
2224
2234
|
prefixes:
|
|
2225
2235
|
- '_cext'
|
|
2226
2236
|
|
|
2237
|
+
- module-name: 'lab_lamma' # checksum: 2c54cdc3
|
|
2238
|
+
implicit-imports:
|
|
2239
|
+
- depends:
|
|
2240
|
+
- 'vipm_io'
|
|
2241
|
+
- 'keyring'
|
|
2242
|
+
|
|
2227
2243
|
- module-name: 'langchain.chains.llm_summarization_checker' # checksum: 9ac5f4e6
|
|
2228
2244
|
data-files:
|
|
2229
2245
|
- patterns:
|
|
@@ -2301,6 +2317,13 @@
|
|
|
2301
2317
|
- patterns:
|
|
2302
2318
|
- 'version.info'
|
|
2303
2319
|
|
|
2320
|
+
- module-name: 'litellm' # checksum: fa10c772
|
|
2321
|
+
data-files:
|
|
2322
|
+
- patterns:
|
|
2323
|
+
- '*.json'
|
|
2324
|
+
- dirs:
|
|
2325
|
+
- 'llms/tokenizers'
|
|
2326
|
+
|
|
2304
2327
|
- module-name: 'llama_cpp' # checksum: 34acaa89
|
|
2305
2328
|
dlls:
|
|
2306
2329
|
- from_filenames:
|
|
@@ -3751,6 +3774,11 @@
|
|
|
3751
3774
|
'"IPython" in sys.modules': 'False'
|
|
3752
3775
|
when: 'not use_ipython'
|
|
3753
3776
|
|
|
3777
|
+
- module-name: 'pdfminer' # checksum: a3629ef7
|
|
3778
|
+
data-files:
|
|
3779
|
+
- dirs:
|
|
3780
|
+
- 'cmap'
|
|
3781
|
+
|
|
3754
3782
|
- module-name: 'pendulum' # checksum: 71704ba2
|
|
3755
3783
|
data-files:
|
|
3756
3784
|
- empty_dir_structures:
|
|
@@ -4400,7 +4428,7 @@
|
|
|
4400
4428
|
- patterns:
|
|
4401
4429
|
- 'version.json'
|
|
4402
4430
|
|
|
4403
|
-
- module-name: 'pypdfium2_raw' # checksum:
|
|
4431
|
+
- module-name: 'pypdfium2_raw' # checksum: 2df23eb6
|
|
4404
4432
|
data-files:
|
|
4405
4433
|
- patterns:
|
|
4406
4434
|
- 'version.json'
|
|
@@ -4409,6 +4437,7 @@
|
|
|
4409
4437
|
- from_filenames:
|
|
4410
4438
|
prefixes:
|
|
4411
4439
|
- 'pdfium'
|
|
4440
|
+
- 'libpdfium'
|
|
4412
4441
|
|
|
4413
4442
|
- module-name: 'pyphen' # checksum: aa53bb0a
|
|
4414
4443
|
data-files:
|
|
@@ -5026,18 +5055,38 @@
|
|
|
5026
5055
|
- 'librlottie'
|
|
5027
5056
|
when: 'not win32'
|
|
5028
5057
|
|
|
5029
|
-
- module-name: 'rtree' # checksum:
|
|
5058
|
+
- module-name: 'rtree.finder' # checksum: 312489cf
|
|
5059
|
+
variables:
|
|
5060
|
+
setup_code:
|
|
5061
|
+
- 'import ctypes, os, rtree.finder'
|
|
5062
|
+
- 'orig_LoadLibrary = ctypes.cdll.LoadLibrary'
|
|
5063
|
+
- 'val = []'
|
|
5064
|
+
- 'def my_LoadLibrary(filename):'
|
|
5065
|
+
- ' val.append(filename)'
|
|
5066
|
+
- ' return orig_LoadLibrary(filename)'
|
|
5067
|
+
- 'ctypes.cdll.LoadLibrary = my_LoadLibrary'
|
|
5068
|
+
- 'rtree.finder.load()'
|
|
5069
|
+
declarations:
|
|
5070
|
+
'rtree_dll_source_paths': 'val[0]'
|
|
5071
|
+
'rtree_dll_names': '"libspatialindex" + (".dll" if os.name=="nt" else ".so")'
|
|
5030
5072
|
dlls:
|
|
5031
|
-
-
|
|
5032
|
-
|
|
5033
|
-
|
|
5034
|
-
|
|
5073
|
+
- from_sources:
|
|
5074
|
+
'source_paths':
|
|
5075
|
+
- 'get_variable("rtree_dll_source_paths")'
|
|
5076
|
+
'dest_names':
|
|
5077
|
+
- 'get_variable("rtree_dll_names")'
|
|
5078
|
+
anti-bloat:
|
|
5079
|
+
- description: 'workaround libspatialindex DLL name changes for arches'
|
|
5080
|
+
replacements_plain:
|
|
5081
|
+
'str(path / lib_name)': 'str(path)'
|
|
5082
|
+
'os.environ["PATH"] = ";".join([str(path), oldenv])': 'os.environ["PATH"] = ";".join([str(path.parent), oldenv])'
|
|
5035
5083
|
when: 'win32'
|
|
5036
|
-
|
|
5037
|
-
|
|
5038
|
-
|
|
5039
|
-
|
|
5040
|
-
|
|
5084
|
+
|
|
5085
|
+
implicit-imports:
|
|
5086
|
+
- pre-import-code:
|
|
5087
|
+
- |
|
|
5088
|
+
import os
|
|
5089
|
+
os.environ["SPATIALINDEX_C_LIBRARY"] = os.path.join(os.path.dirname(__file__), "libspatialindex" + (".dll" if os.name=="nt" else ".so"))
|
|
5041
5090
|
|
|
5042
5091
|
- module-name: 'scapy.all' # checksum: 8a9944ce
|
|
5043
5092
|
implicit-imports:
|
|
@@ -7498,6 +7547,11 @@
|
|
|
7498
7547
|
'PYTORCH_JIT': '0'
|
|
7499
7548
|
when: 'get_parameter("disable-jit", "yes" if standalone else "no") == "yes"'
|
|
7500
7549
|
|
|
7550
|
+
- module-name: 'torch._dynamo.polyfills.loader' # checksum: e5019356
|
|
7551
|
+
implicit-imports:
|
|
7552
|
+
- depends:
|
|
7553
|
+
- 'torch._dynamo.polyfills.*'
|
|
7554
|
+
|
|
7501
7555
|
- module-name: 'torch._dynamo.skipfiles' # checksum: 120e0012
|
|
7502
7556
|
anti-bloat:
|
|
7503
7557
|
# When calling inspect.getfile() on Nuitka's loader, it will yield
|
|
@@ -18,6 +18,7 @@ from nuitka.utils.Execution import (
|
|
|
18
18
|
)
|
|
19
19
|
from nuitka.utils.FileOperations import (
|
|
20
20
|
getDirectoryRealPath,
|
|
21
|
+
relpath,
|
|
21
22
|
removeDirectory,
|
|
22
23
|
withDirectoryChange,
|
|
23
24
|
)
|
|
@@ -28,15 +29,20 @@ class Virtualenv(object):
|
|
|
28
29
|
self.env_dir = os.path.abspath(env_dir)
|
|
29
30
|
self.logger = logger
|
|
30
31
|
|
|
31
|
-
def runCommand(self, commands, env=None, style=None):
|
|
32
|
+
def runCommand(self, commands, keep_cwd=False, env=None, style=None):
|
|
32
33
|
if type(commands) in (str, unicode):
|
|
33
34
|
commands = [commands]
|
|
34
35
|
|
|
35
|
-
with withDirectoryChange(self.env_dir):
|
|
36
|
+
with withDirectoryChange(None if keep_cwd else self.env_dir, allow_none=True):
|
|
37
|
+
if keep_cwd:
|
|
38
|
+
activate_dir = relpath(self.env_dir, os.getcwd())
|
|
39
|
+
else:
|
|
40
|
+
activate_dir = "."
|
|
41
|
+
|
|
36
42
|
if os.name == "nt":
|
|
37
|
-
commands = [r"call scripts\activate.bat"] + commands
|
|
43
|
+
commands = [r"call %s\scripts\activate.bat" % activate_dir] + commands
|
|
38
44
|
else:
|
|
39
|
-
commands = [". bin/activate"] + commands
|
|
45
|
+
commands = [". %s/bin/activate" % activate_dir] + commands
|
|
40
46
|
|
|
41
47
|
command = " && ".join(commands)
|
|
42
48
|
|
|
@@ -47,7 +53,9 @@ class Virtualenv(object):
|
|
|
47
53
|
exit_code = os.system(command)
|
|
48
54
|
if exit_code != 0:
|
|
49
55
|
self.logger.info(
|
|
50
|
-
"Failure %s for: %s" % (exit_code, command),
|
|
56
|
+
"Failure %s for: %s" % (exit_code, command),
|
|
57
|
+
keep_format=True,
|
|
58
|
+
style=style,
|
|
51
59
|
)
|
|
52
60
|
|
|
53
61
|
raise NuitkaCalledProcessError(
|
nuitka/tools/podman/__main__.py
CHANGED
|
@@ -275,7 +275,7 @@ def _checkContainerArgument(options, default_container_directory):
|
|
|
275
275
|
container_file_path_template = container_file_path
|
|
276
276
|
container_file_path = container_file_path[:-3]
|
|
277
277
|
else:
|
|
278
|
-
|
|
278
|
+
container_file_path_template = None
|
|
279
279
|
|
|
280
280
|
options.container_id = changeFilenameExtension(
|
|
281
281
|
os.path.basename(container_file_path), ""
|
|
@@ -306,7 +306,9 @@ def main():
|
|
|
306
306
|
options=options, default_container_directory=default_container_directory
|
|
307
307
|
)
|
|
308
308
|
|
|
309
|
-
if os.path.isfile(
|
|
309
|
+
if container_file_path_template is not None and os.path.isfile(
|
|
310
|
+
container_file_path_template
|
|
311
|
+
):
|
|
310
312
|
# Check requirement.
|
|
311
313
|
cpp_path = getCppPath()
|
|
312
314
|
command = [
|
nuitka/utils/FileOperations.py
CHANGED
|
@@ -890,7 +890,7 @@ def changeTextFileContents(filename, contents, encoding=None, compare_only=False
|
|
|
890
890
|
or getFileContents(filename, encoding=encoding) != contents
|
|
891
891
|
):
|
|
892
892
|
if not compare_only:
|
|
893
|
-
putTextFileContents(filename, contents)
|
|
893
|
+
putTextFileContents(filename, contents, encoding=encoding)
|
|
894
894
|
|
|
895
895
|
return True
|
|
896
896
|
else:
|
|
@@ -1515,6 +1515,9 @@ def getNormalizedPath(path):
|
|
|
1515
1515
|
if isWin32Windows():
|
|
1516
1516
|
path = path.replace("/", "\\")
|
|
1517
1517
|
|
|
1518
|
+
if isMacOS():
|
|
1519
|
+
path = os.path.expanduser(path)
|
|
1520
|
+
|
|
1518
1521
|
return path
|
|
1519
1522
|
|
|
1520
1523
|
|
nuitka/utils/Hashing.py
CHANGED
|
@@ -7,6 +7,7 @@ Offers support for hashing incrementally and files esp. without having
|
|
|
7
7
|
to read their contents.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
+
import struct
|
|
10
11
|
from binascii import crc32
|
|
11
12
|
|
|
12
13
|
from nuitka.__past__ import md5, unicode
|
|
@@ -111,10 +112,13 @@ class HashCRC32(HashBase):
|
|
|
111
112
|
self.hash = crc32(value, self.hash)
|
|
112
113
|
|
|
113
114
|
def asDigest(self):
|
|
115
|
+
if self.hash < 0:
|
|
116
|
+
return struct.unpack("I", struct.pack("i", self.hash))[0]
|
|
117
|
+
|
|
114
118
|
return self.hash
|
|
115
119
|
|
|
116
120
|
def asHexDigest(self):
|
|
117
|
-
return hex(self.
|
|
121
|
+
return hex(self.asDigest())[2:]
|
|
118
122
|
|
|
119
123
|
|
|
120
124
|
# Part of "Nuitka", an optimizing Python compiler that is compatible and
|
nuitka/utils/SharedLibraries.py
CHANGED
|
@@ -258,6 +258,29 @@ def _getMacOSArchOption():
|
|
|
258
258
|
return ()
|
|
259
259
|
|
|
260
260
|
|
|
261
|
+
# TODO: Use this for more output filters.
|
|
262
|
+
def _filterOutputByLine(output, filter_func):
|
|
263
|
+
non_errors = []
|
|
264
|
+
|
|
265
|
+
for line in output.splitlines():
|
|
266
|
+
if line and not filter_func(line):
|
|
267
|
+
non_errors.append(line)
|
|
268
|
+
|
|
269
|
+
output = b"\n".join(non_errors)
|
|
270
|
+
|
|
271
|
+
return (0 if non_errors else None), output
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def _filterOtoolErrorOutput(stderr):
|
|
275
|
+
def isNonErrorExit(line):
|
|
276
|
+
if b"missing from root that overrides" in line:
|
|
277
|
+
return True
|
|
278
|
+
|
|
279
|
+
return False
|
|
280
|
+
|
|
281
|
+
return _filterOutputByLine(stderr, isNonErrorExit)
|
|
282
|
+
|
|
283
|
+
|
|
261
284
|
def _getOToolCommandOutput(otool_option, filename):
|
|
262
285
|
filename = os.path.abspath(filename)
|
|
263
286
|
|
|
@@ -272,6 +295,7 @@ def _getOToolCommandOutput(otool_option, filename):
|
|
|
272
295
|
_otool_output_cache[cache_key] = executeToolChecked(
|
|
273
296
|
logger=postprocessing_logger,
|
|
274
297
|
command=command,
|
|
298
|
+
stderr_filter=_filterOtoolErrorOutput,
|
|
275
299
|
absence_message="The 'otool' is used to analyze dependencies on macOS and required to be found.",
|
|
276
300
|
)
|
|
277
301
|
|
nuitka/utils/Signing.py
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
from nuitka.Options import (
|
|
9
|
+
getMacOSSignedAppName,
|
|
9
10
|
getMacOSSigningIdentity,
|
|
10
11
|
shallUseSigningForNotarization,
|
|
11
12
|
)
|
|
@@ -104,9 +105,16 @@ def addMacOSCodeSignature(filenames):
|
|
|
104
105
|
"--force",
|
|
105
106
|
"--deep",
|
|
106
107
|
"--preserve-metadata=entitlements",
|
|
107
|
-
# ,
|
|
108
108
|
]
|
|
109
109
|
|
|
110
|
+
macos_signed_app_name = getMacOSSignedAppName()
|
|
111
|
+
|
|
112
|
+
if macos_signed_app_name is not None:
|
|
113
|
+
command += [
|
|
114
|
+
"-i",
|
|
115
|
+
macos_signed_app_name,
|
|
116
|
+
]
|
|
117
|
+
|
|
110
118
|
if shallUseSigningForNotarization():
|
|
111
119
|
command.append("--options=runtime")
|
|
112
120
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|