macdeploy: use plugins dir to find plugins
What changed, and why it matters
This is a one-line fix in the macOS packaging script for Bitcoin Core. The script now looks for Qt's 'plugins' folder instead of its 'translations' folder when deciding where Qt is installed. The old check could fail on newer Homebrew Qt installs because the translations directory no longer exists there, which would prevent the macOS app bundle from being built correctly. There is no direct security vulnerability here—it's a build/packaging robustness fix.
Treat as a normal build-fix commit. No security response required. Ensure macOS release builds are re-tested with the new Qt path detection, especially on Apple Silicon/Homebrew environments.
Security signals we found
No direct security signal in diff
Build/packaging script change only
No changes to cryptography, networking, consensus, or wallet code
No input parsing, memory handling, or privilege boundary changes
Evidence from the diff
In contrib/macdeploy/macdeployqtplus, DeploymentInfo.detectQtPath() previously probed for parentDir/share/qt/translations to confirm a valid Qt prefix. On recent Homebrew Qt installations (qtbase) on Apple Silicon macOS, that path no longer exists, so detection fell back to the QTDIR environment variable or failed. The patch changes the probe to parentDir/share/qt/plugins, which is still present, so the script can reliably locate Qt and continue deploying plugins into the .app bundle. This is a build-time path-detection change, not a runtime or consensus change.
Changed components
contrib/macdeploy/macdeployqtplusmacOS release build processQt deployment step for Bitcoin-Qt .app bundlesInspect captured patch +1 / −1
diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus
index dc03d710..bb693e73 100755
--- a/contrib/macdeploy/macdeployqtplus
+++ b/contrib/macdeploy/macdeployqtplus
@@ -160,7 +160,7 @@ class DeploymentInfo(object):
def detectQtPath(self, frameworkDirectory: str):
parentDir = os.path.dirname(frameworkDirectory)
- if os.path.exists(os.path.join(parentDir, "share", "qt", "translations")):
+ if os.path.exists(os.path.join(parentDir, "share", "qt", "plugins")):
self.qtPath = parentDir
else:
self.qtPath = os.getenv("QTDIR", None)
Why this scored 18/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.