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.

Files changed (50) hide show
  1. {Nuitka_winsvc-2.5.1.dist-info → Nuitka_winsvc-2.5.6.dist-info}/METADATA +55 -109
  2. {Nuitka_winsvc-2.5.1.dist-info → Nuitka_winsvc-2.5.6.dist-info}/RECORD +50 -49
  3. {Nuitka_winsvc-2.5.1.dist-info → Nuitka_winsvc-2.5.6.dist-info}/WHEEL +1 -1
  4. nuitka/OptionParsing.py +6 -5
  5. nuitka/Options.py +14 -5
  6. nuitka/Version.py +1 -1
  7. nuitka/build/SconsInterface.py +2 -0
  8. nuitka/build/include/nuitka/constants.h +2 -0
  9. nuitka/build/include/nuitka/helper/dictionaries.h +10 -2
  10. nuitka/build/include/nuitka/helper/tuples.h +12 -0
  11. nuitka/build/include/nuitka/prelude.h +1 -0
  12. nuitka/build/static_src/CompiledCodeHelpers.c +2 -0
  13. nuitka/build/static_src/CompiledCoroutineType.c +1 -1
  14. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +32 -23
  15. nuitka/build/static_src/HelpersBuiltin.c +1 -1
  16. nuitka/build/static_src/HelpersDeepcopy.c +1 -0
  17. nuitka/build/static_src/HelpersDictionaries.c +14 -2
  18. nuitka/build/static_src/HelpersDictionariesGenerated.c +12 -1
  19. nuitka/build/static_src/HelpersFiles.c +1 -1
  20. nuitka/build/static_src/HelpersTuples.c +1 -1
  21. nuitka/build/static_src/MainProgram.c +24 -3
  22. nuitka/code_generation/templates/CodeTemplatesVariables.py +23 -20
  23. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +4 -1
  24. nuitka/freezer/ImportDetection.py +4 -1
  25. nuitka/freezer/IncludedDataFiles.py +10 -1
  26. nuitka/freezer/Onefile.py +1 -0
  27. nuitka/nodes/BuiltinIteratorNodes.py +1 -1
  28. nuitka/nodes/DictionaryNodes.py +1 -1
  29. nuitka/nodes/VariableAssignNodes.py +2 -1
  30. nuitka/nodes/shapes/IteratorShapes.py +71 -0
  31. nuitka/nodes/shapes/ShapeMixins.py +3 -2
  32. nuitka/nodes/shapes/StandardShapes.py +1 -50
  33. nuitka/plugins/Plugins.py +10 -0
  34. nuitka/plugins/standard/DllFilesPlugin.py +78 -2
  35. nuitka/plugins/standard/ImplicitImports.py +4 -2
  36. nuitka/plugins/standard/MatplotlibPlugin.py +1 -1
  37. nuitka/plugins/standard/OptionsNannyPlugin.py +5 -4
  38. nuitka/plugins/standard/TkinterPlugin.py +23 -3
  39. nuitka/plugins/standard/standard.nuitka-package.config.yml +65 -11
  40. nuitka/tools/environments/Virtualenv.py +13 -5
  41. nuitka/tools/podman/__main__.py +4 -2
  42. nuitka/utils/FileOperations.py +4 -1
  43. nuitka/utils/Hashing.py +5 -1
  44. nuitka/utils/SharedLibraries.py +24 -0
  45. nuitka/utils/Signing.py +9 -1
  46. {Nuitka_winsvc-2.5.1.data → Nuitka_winsvc-2.5.6.data}/scripts/nuitka-run.cmd +0 -0
  47. {Nuitka_winsvc-2.5.1.data → Nuitka_winsvc-2.5.6.data}/scripts/nuitka.cmd +0 -0
  48. {Nuitka_winsvc-2.5.1.dist-info → Nuitka_winsvc-2.5.6.dist-info}/LICENSE.txt +0 -0
  49. {Nuitka_winsvc-2.5.1.dist-info → Nuitka_winsvc-2.5.6.dist-info}/entry_points.txt +0 -0
  50. {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
- yield self.makeExeEntryPoint(
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
- yield self.makeDllEntryPoint(
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' with not plugin for Qt binding active."
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
- self.info(
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
- % full_name
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 two names for the execution, yet we
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: 2bdc1095
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: 7b6be18
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
- - from_filenames:
5032
- relative_path: 'lib'
5033
- prefixes:
5034
- - 'spatialindex'
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
- - from_filenames:
5037
- relative_path: 'lib'
5038
- prefixes:
5039
- - 'libspatialindex'
5040
- when: 'not win32'
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), style=style
56
+ "Failure %s for: %s" % (exit_code, command),
57
+ keep_format=True,
58
+ style=style,
51
59
  )
52
60
 
53
61
  raise NuitkaCalledProcessError(
@@ -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
- assert False
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(container_file_path_template):
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 = [
@@ -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.hash)[2:]
121
+ return hex(self.asDigest())[2:]
118
122
 
119
123
 
120
124
  # Part of "Nuitka", an optimizing Python compiler that is compatible and
@@ -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