mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-02 09:46:52 -05:00
Merge bitcoin/bitcoin#22199: macdeploy: minor fixups and simplifications
0a5723beea
macdeploy: cleanup .temp.dmg if present (fanquake)ecffe8689d
macdeploy: remove qt4 related code (fanquake)639f064253
macdeploy: select the plugins we need, rather than excluding those we don't (fanquake)3d26b6b9e9
macdeploy: fix framework printing when passing -verbose (fanquake)dca6c90329
macdeploy: remove unused plistlib import (fanquake) Pull request description: This includes [one followup](https://github.com/bitcoin/bitcoin/pull/20422#discussion_r534207899) and [one bug fix](3d26b6b9e9
) from #20422, as well as some simplifications to the `macdeployqtplus` code. ACKs for top commit: hebasto: ACK0a5723beea
, tested on macOS Big Sur 11.4 (20F71, x86_64) + Homebrew's Qt 5.15.2. Tree-SHA512: cfad9505eacd32fe3a9d06eb13b2de0b6d2cad7b17778e90b503501cbf922e53d4e7f7f74952d1aed58410bdae9b0bb3248098583ef5b85689cb27d4dc06c029
This commit is contained in:
commit
4fdd0ff9ee
1 changed files with 10 additions and 111 deletions
|
@ -16,7 +16,6 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
|
||||||
import plistlib
|
|
||||||
import sys, re, os, shutil, stat, os.path
|
import sys, re, os, shutil, stat, os.path
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
from ds_store import DSStore
|
from ds_store import DSStore
|
||||||
|
@ -53,7 +52,7 @@ class FrameworkInfo(object):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f""" Framework name: {frameworkName}
|
return f""" Framework name: {self.frameworkName}
|
||||||
Framework directory: {self.frameworkDirectory}
|
Framework directory: {self.frameworkDirectory}
|
||||||
Framework path: {self.frameworkPath}
|
Framework path: {self.frameworkPath}
|
||||||
Binary name: {self.binaryName}
|
Binary name: {self.binaryName}
|
||||||
|
@ -85,8 +84,8 @@ class FrameworkInfo(object):
|
||||||
if line == "":
|
if line == "":
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Don't deploy system libraries (exception for libQtuitools and libQtlucene).
|
# Don't deploy system libraries
|
||||||
if line.startswith("/System/Library/") or line.startswith("@executable_path") or (line.startswith("/usr/lib/") and "libQt" not in line):
|
if line.startswith("/System/Library/") or line.startswith("@executable_path") or line.startswith("/usr/lib/"):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
m = cls.reOLine.match(line)
|
m = cls.reOLine.match(line)
|
||||||
|
@ -287,14 +286,6 @@ def copyFramework(framework: FrameworkInfo, path: str, verbose: int) -> Optional
|
||||||
if verbose:
|
if verbose:
|
||||||
print("Copied Contents:", fromContentsDir)
|
print("Copied Contents:", fromContentsDir)
|
||||||
print(" to:", toContentsDir)
|
print(" to:", toContentsDir)
|
||||||
elif framework.frameworkName.startswith("libQtGui"): # Copy qt_menu.nib (applies to non-framework layout)
|
|
||||||
qtMenuNibSourcePath = os.path.join(framework.frameworkDirectory, "Resources", "qt_menu.nib")
|
|
||||||
qtMenuNibDestinationPath = os.path.join(path, "Contents", "Resources", "qt_menu.nib")
|
|
||||||
if os.path.exists(qtMenuNibSourcePath) and not os.path.exists(qtMenuNibDestinationPath):
|
|
||||||
shutil.copytree(qtMenuNibSourcePath, qtMenuNibDestinationPath, symlinks=True)
|
|
||||||
if verbose:
|
|
||||||
print("Copied for libQtGui:", qtMenuNibSourcePath)
|
|
||||||
print(" to:", qtMenuNibDestinationPath)
|
|
||||||
|
|
||||||
return toPath
|
return toPath
|
||||||
|
|
||||||
|
@ -351,114 +342,19 @@ def deployFrameworksForAppBundle(applicationBundle: ApplicationBundleInfo, strip
|
||||||
return deployFrameworks(frameworks, applicationBundle.path, applicationBundle.binaryPath, strip, verbose)
|
return deployFrameworks(frameworks, applicationBundle.path, applicationBundle.binaryPath, strip, verbose)
|
||||||
|
|
||||||
def deployPlugins(appBundleInfo: ApplicationBundleInfo, deploymentInfo: DeploymentInfo, strip: bool, verbose: int):
|
def deployPlugins(appBundleInfo: ApplicationBundleInfo, deploymentInfo: DeploymentInfo, strip: bool, verbose: int):
|
||||||
# Lookup available plugins, exclude unneeded
|
|
||||||
plugins = []
|
plugins = []
|
||||||
if deploymentInfo.pluginPath is None:
|
if deploymentInfo.pluginPath is None:
|
||||||
return
|
return
|
||||||
for dirpath, dirnames, filenames in os.walk(deploymentInfo.pluginPath):
|
for dirpath, dirnames, filenames in os.walk(deploymentInfo.pluginPath):
|
||||||
pluginDirectory = os.path.relpath(dirpath, deploymentInfo.pluginPath)
|
pluginDirectory = os.path.relpath(dirpath, deploymentInfo.pluginPath)
|
||||||
if pluginDirectory == "designer":
|
|
||||||
# Skip designer plugins
|
if pluginDirectory not in ['styles', 'platforms']:
|
||||||
continue
|
|
||||||
elif pluginDirectory == "printsupport":
|
|
||||||
# Skip printsupport plugins
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "imageformats":
|
|
||||||
# Skip imageformats plugins
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "sqldrivers":
|
|
||||||
# Deploy the sql plugins only if QtSql is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtSql"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "script":
|
|
||||||
# Deploy the script plugins only if QtScript is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtScript"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "qmltooling" or pluginDirectory == "qml1tooling":
|
|
||||||
# Deploy the qml plugins only if QtDeclarative is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtDeclarative"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "bearer":
|
|
||||||
# Deploy the bearer plugins only if QtNetwork is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtNetwork"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "position":
|
|
||||||
# Deploy the position plugins only if QtPositioning is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtPositioning"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "sensors" or pluginDirectory == "sensorgestures":
|
|
||||||
# Deploy the sensor plugins only if QtSensors is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtSensors"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "audio" or pluginDirectory == "playlistformats":
|
|
||||||
# Deploy the audio plugins only if QtMultimedia is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtMultimedia"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "mediaservice":
|
|
||||||
# Deploy the mediaservice plugins only if QtMultimediaWidgets is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtMultimediaWidgets"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "canbus":
|
|
||||||
# Deploy the canbus plugins only if QtSerialBus is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtSerialBus"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "webview":
|
|
||||||
# Deploy the webview plugins only if QtWebView is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtWebView"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "gamepads":
|
|
||||||
# Deploy the webview plugins only if QtGamepad is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtGamepad"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "geoservices":
|
|
||||||
# Deploy the webview plugins only if QtLocation is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtLocation"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "texttospeech":
|
|
||||||
# Deploy the texttospeech plugins only if QtTextToSpeech is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtTextToSpeech"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "virtualkeyboard":
|
|
||||||
# Deploy the virtualkeyboard plugins only if QtVirtualKeyboard is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtVirtualKeyboard"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "sceneparsers":
|
|
||||||
# Deploy the virtualkeyboard plugins only if Qt3DCore is in use
|
|
||||||
if not deploymentInfo.usesFramework("Qt3DCore"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "renderplugins":
|
|
||||||
# Deploy the renderplugins plugins only if Qt3DCore is in use
|
|
||||||
if not deploymentInfo.usesFramework("Qt3DCore"):
|
|
||||||
continue
|
|
||||||
elif pluginDirectory == "geometryloaders":
|
|
||||||
# Deploy the geometryloaders plugins only if Qt3DCore is in use
|
|
||||||
if not deploymentInfo.usesFramework("Qt3DCore"):
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for pluginName in filenames:
|
for pluginName in filenames:
|
||||||
pluginPath = os.path.join(pluginDirectory, pluginName)
|
pluginPath = os.path.join(pluginDirectory, pluginName)
|
||||||
if pluginName.endswith("_debug.dylib"):
|
|
||||||
# Skip debug plugins
|
if pluginName.split('.')[0] not in ['libqminimal', 'libqcocoa', 'libqmacstyle']:
|
||||||
continue
|
|
||||||
elif pluginPath == "imageformats/libqsvg.dylib" or pluginPath == "iconengines/libqsvgicon.dylib":
|
|
||||||
# Deploy the svg plugins only if QtSvg is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtSvg"):
|
|
||||||
continue
|
|
||||||
elif pluginPath == "accessible/libqtaccessiblecompatwidgets.dylib":
|
|
||||||
# Deploy accessibility for Qt3Support only if the Qt3Support is in use
|
|
||||||
if not deploymentInfo.usesFramework("Qt3Support"):
|
|
||||||
continue
|
|
||||||
elif pluginPath == "graphicssystems/libqglgraphicssystem.dylib":
|
|
||||||
# Deploy the opengl graphicssystem plugin only if QtOpenGL is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtOpenGL"):
|
|
||||||
continue
|
|
||||||
elif pluginPath == "accessible/libqtaccessiblequick.dylib":
|
|
||||||
# Deploy the accessible qtquick plugin only if QtQuick is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtQuick"):
|
|
||||||
continue
|
|
||||||
elif pluginPath == "platforminputcontexts/libqtvirtualkeyboardplugin.dylib":
|
|
||||||
# Deploy the virtualkeyboardplugin plugin only if QtVirtualKeyboard is in use
|
|
||||||
if not deploymentInfo.usesFramework("QtVirtualKeyboard"):
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
plugins.append((pluginDirectory, pluginName))
|
plugins.append((pluginDirectory, pluginName))
|
||||||
|
@ -527,6 +423,9 @@ if os.path.exists(appname + ".dmg"):
|
||||||
print("+ Removing existing DMG +")
|
print("+ Removing existing DMG +")
|
||||||
os.unlink(appname + ".dmg")
|
os.unlink(appname + ".dmg")
|
||||||
|
|
||||||
|
if os.path.exists(appname + ".temp.dmg"):
|
||||||
|
os.unlink(appname + ".temp.dmg")
|
||||||
|
|
||||||
# ------------------------------------------------
|
# ------------------------------------------------
|
||||||
|
|
||||||
target = os.path.join("dist", "Bitcoin-Qt.app")
|
target = os.path.join("dist", "Bitcoin-Qt.app")
|
||||||
|
|
Loading…
Add table
Reference in a new issue