| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- # This script is based on the implementation of windeployqt for qt5.7.1
- #
- # Qt's plugin deployment strategy is that each main Qt Module has a hardcoded
- # set of plugin subdirectories. Each of these subdirectories is deployed in
- # full if that Module is referenced.
- #
- # This hardcoded list is found inside qttools\src\windeployqt\main.cpp. For
- # updating, inspect the symbols qtModuleEntries and qtModuleForPlugin.
- # Note: this function signature and behavior is depended upon by applocal.ps1
- function deployPluginsIfQt([string]$targetBinaryDir, [string]$QtPluginsDir, [string]$targetBinaryName) {
- $baseDir = Split-Path $QtPluginsDir -parent
- $binDir = "$baseDir\bin"
- function deployPlugins([string]$pluginSubdirName) {
- if (Test-Path "$QtPluginsDir\$pluginSubdirName") {
- Write-Verbose " Deploying plugins directory '$pluginSubdirName'"
- New-Item "$targetBinaryDir\plugins\$pluginSubdirName" -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
- Get-ChildItem "$QtPluginsDir\$pluginSubdirName\*.dll" | % {
- deployBinary "$targetBinaryDir\plugins\$pluginSubdirName" "$QtPluginsDir\$pluginSubdirName" $_.Name
- resolve "$targetBinaryDir\plugins\$pluginSubdirName\$($_.Name)"
- }
- } else {
- Write-Verbose " Skipping plugins directory '$pluginSubdirName': doesn't exist"
- }
- }
- # We detect Qt modules in use via the DLLs themselves. See qtModuleEntries in Qt to find the mapping.
- if ($targetBinaryName -match "Qt5Cored?.dll") {
- if (!(Test-Path "$targetBinaryDir\qt.conf")) {
- "[Paths]" | Out-File -encoding ascii "$targetBinaryDir\qt.conf"
- }
- } elseif ($targetBinaryName -match "Qt5Guid?.dll") {
- Write-Verbose " Deploying platforms"
- New-Item "$targetBinaryDir\plugins\platforms" -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
- Get-ChildItem "$QtPluginsDir\platforms\qwindows*.dll" | % {
- deployBinary "$targetBinaryDir\plugins\platforms" "$QtPluginsDir\platforms" $_.Name
- }
- deployPlugins "accessible"
- deployPlugins "imageformats"
- deployPlugins "iconengines"
- deployPlugins "platforminputcontexts"
- deployPlugins "styles"
- } elseif ($targetBinaryName -match "Qt5Networkd?.dll") {
- deployPlugins "bearer"
- if (Test-Path "$binDir\libcrypto-1_1-x64.dll")
- {
- deployBinary "$targetBinaryDir" "$binDir" "libcrypto-1_1-x64.dll"
- deployBinary "$targetBinaryDir" "$binDir" "libssl-1_1-x64.dll"
- }
- if (Test-Path "$binDir\libcrypto-1_1.dll")
- {
- deployBinary "$targetBinaryDir" "$binDir" "libcrypto-1_1.dll"
- deployBinary "$targetBinaryDir" "$binDir" "libssl-1_1.dll"
- }
- } elseif ($targetBinaryName -match "Qt5Sqld?.dll") {
- deployPlugins "sqldrivers"
- } elseif ($targetBinaryName -match "Qt5Multimediad?.dll") {
- deployPlugins "audio"
- deployPlugins "mediaservice"
- deployPlugins "playlistformats"
- } elseif ($targetBinaryName -match "Qt5PrintSupportd?.dll") {
- deployPlugins "printsupport"
- } elseif ($targetBinaryName -match "Qt5Qmld?.dll") {
- if(!(Test-Path "$targetBinaryDir\qml"))
- {
- if (Test-Path "$binDir\..\qml") {
- cp -r "$binDir\..\qml" $targetBinaryDir
- } elseif (Test-Path "$binDir\..\..\qml") {
- cp -r "$binDir\..\..\qml" $targetBinaryDir
- } else {
- throw "FAILED"
- }
- }
- } elseif ($targetBinaryName -match "Qt5Quickd?.dll") {
- foreach ($a in @("Qt5QuickControls2", "Qt5QuickControls2d", "Qt5QuickShapes", "Qt5QuickShapesd", "Qt5QuickTemplates2", "Qt5QuickTemplates2d", "Qt5QmlWorkerScript", "Qt5QmlWorkerScriptd", "Qt5QuickParticles", "Qt5QuickParticlesd", "Qt5QuickWidgets", "Qt5QuickWidgetsd", "Qt5PositioningQuick", "Qt5PositioningQuickd", "Qt5Multimedia", "Qt5Multimediad", "Qt5MultimediaQuick", "Qt5MultimediaQuickd", "Qt5Charts", "Qt5Chartsd"))
- {
- if (Test-Path "$binDir\$a.dll")
- {
- deployBinary "$targetBinaryDir" "$binDir" "$a.dll"
- }
- }
- deployPlugins "scenegraph"
- deployPlugins "qmltooling"
- } elseif ($targetBinaryName -like "Qt5Declarative*.dll") {
- deployPlugins "qml1tooling"
- } elseif ($targetBinaryName -like "Qt5Positioning*.dll") {
- deployPlugins "position"
- } elseif ($targetBinaryName -like "Qt5Location*.dll") {
- deployPlugins "geoservices"
- } elseif ($targetBinaryName -like "Qt5Sensors*.dll") {
- deployPlugins "sensors"
- deployPlugins "sensorgestures"
- } elseif ($targetBinaryName -like "Qt5WebEngineCore*.dll") {
- deployPlugins "qtwebengine"
- } elseif ($targetBinaryName -like "Qt53DRenderer*.dll") {
- deployPlugins "sceneparsers"
- } elseif ($targetBinaryName -like "Qt5TextToSpeech*.dll") {
- deployPlugins "texttospeech"
- } elseif ($targetBinaryName -like "Qt5SerialBus*.dll") {
- deployPlugins "canbus"
- }
- }
|