aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Hale <Squareys@googlemail.com>2018-04-19 04:33:12 +0200
committerRobert Schumacher <roschuma@microsoft.com>2018-04-18 19:33:12 -0700
commit3a3fa5cd8f02dde78b00c12273b338e293edcd51 (patch)
tree68ed6e05289fbfb2ffa9393777cd946b039d776c
parent08438e581c3818932f5bc66c744b4d49b2734b62 (diff)
downloadvcpkg-3a3fa5cd8f02dde78b00c12273b338e293edcd51.tar.gz
vcpkg-3a3fa5cd8f02dde78b00c12273b338e293edcd51.zip
[magnum] Properly deploy plugins (#3191)
* [magnum] Properly deploy magnum plugins Signed-off-by: Squareys <squareys@googlemail.com> * [magnum-plugins] Add tinygltfimporter feature Signed-off-by: Squareys <squareys@googlemail.com> * [magnum][magnum-plugins] Add features: trade and any* Prepares upcoming move of those sublibraries and allows building --head immediately. For current release this only adds some unused cmake flags that will be ignored. Signed-off-by: Squareys <squareys@googlemail.com> * [magnum] Add gl feature, cleanup dependencies, mark upcoming features And sort features alphabetically. Signed-off-by: Squareys <squareys@googlemail.com> * [magnum-plugins] Prepare renaming of static flag for --head installs Signed-off-by: Squareys <squareys@googlemail.com> * [magnum] Add two missing feature dependencies Signed-off-by: Squareys <squareys@googlemail.com> * [magnum] Enable magnum[any*] features by default Signed-off-by: Squareys <squareys@googlemail.com>
-rw-r--r--ports/magnum-plugins/CONTROL26
-rw-r--r--ports/magnum-plugins/portfile.cmake7
-rw-r--r--ports/magnum/CONTROL102
-rw-r--r--ports/magnum/magnumdeploy.ps138
-rw-r--r--ports/magnum/portfile.cmake3
-rw-r--r--scripts/buildsystems/msbuild/applocal.ps117
6 files changed, 148 insertions, 45 deletions
diff --git a/ports/magnum-plugins/CONTROL b/ports/magnum-plugins/CONTROL
index 12a444e2d..98e7e606d 100644
--- a/ports/magnum-plugins/CONTROL
+++ b/ports/magnum-plugins/CONTROL
@@ -1,31 +1,36 @@
Source: magnum-plugins
-Version: 2018.02-1
+Version: 2018.02-2
Build-Depends: magnum
Description: Plugins for magnum, C++11/C++14 graphics middleware for games and data visualization http://magnum.graphics/
Default-Features: anyimageimporter, anysceneimporter, anyimageconverter, ddsimporter, miniexrimageconverter, opengeximporter, stanfordimporter, stbimageconverter, stbimageimporter
Feature: anyimageimporter
Description: AnyImageImporter plugin
+Build-Depends: magnum[trade]
Feature: anyaudioimporter
Description: AnyAudioImporter plugin
+Build-Depends: magnum[audio]
Feature: anyimageconverter
Description: AnyImageConverter plugin
+Build-Depends: magnum[trade]
Feature: anysceneimporter
Description: AnySceneImporter plugin
+Build-Depends: magnum[trade]
Feature: assimpimporter
Description: AssimpImporter plugin
-Build-Depends: assimp, magnum-plugins[anyimageimporter]
+Build-Depends: assimp, magnum-plugins[anyimageimporter], magnum[anyimageimporter], magnum[trade]
Feature: ddsimporter
Description: DdsImporter plugin
+Build-Depends: magnum[trade]
Feature: devilimageimporter
Description: DevIlImageImporter plugin
-Build-Depends: devil
+Build-Depends: devil, magnum[trade]
Feature: drflacaudioimporter
Description: DrFlacAudioImporter plugin
@@ -45,31 +50,35 @@ Build-Depends: harfbuzz, magnum-plugins[freetypefont]
Feature: jpegimporter
Description: JpegImporter plugin
-Build-Depends: libjpeg-turbo
+Build-Depends: libjpeg-turbo, magnum[trade]
Feature: miniexrimageconverter
Description: MiniExrImageConverter plugin
+Build-Depends: magnum[trade]
Feature: opengeximporter
Description: OpenGexImporter plugin
-Build-Depends: magnum-plugins[anyimageimporter]
+Build-Depends: magnum-plugins[anyimageimporter], magnum[anyimageimporter], magnum[trade]
Feature: pngimageconverter
Description: PngImageConverter plugin
-Build-Depends: libpng
+Build-Depends: libpng, magnum[trade]
Feature: pngimporter
Description: PngImporter plugin
-Build-Depends: libpng
+Build-Depends: libpng, magnum[trade]
Feature: stanfordimporter
Description: StanfordImporter plugin
+Build-Depends: magnum[trade]
Feature: stbimageconverter
Description: StbImageConverter plugin
+Build-Depends: magnum[trade]
Feature: stbimageimporter
Description: StbImageImporter plugin
+Build-Depends: magnum[trade]
Feature: stbtruetypefont
Description: StbTrueTypeFont plugin
@@ -79,3 +88,6 @@ Feature: stbvorbisaudioimporter
Description: StbVorbisAudioImporter plugin
Build-Depends: magnum[audio]
+Feature: tinygltfimporter
+Description: (Upcoming) TinyGltfImporter plugin
+Build-Depends: magnum-plugins[anyimageimporter], magnum[anyimageimporter], magnum-plugins[stbimageimporter], magnum[trade]
diff --git a/ports/magnum-plugins/portfile.cmake b/ports/magnum-plugins/portfile.cmake
index 86e5622d5..bedf9e395 100644
--- a/ports/magnum-plugins/portfile.cmake
+++ b/ports/magnum-plugins/portfile.cmake
@@ -14,9 +14,9 @@ vcpkg_apply_patches(
)
if(VCPKG_LIBRARY_LINKAGE STREQUAL static)
- set(BUILD_STATIC 1)
+ set(BUILD_PLUGINS_STATIC 1)
else()
- set(BUILD_STATIC 0)
+ set(BUILD_PLUGINS_STATIC 0)
endif()
# Handle features
@@ -40,7 +40,8 @@ vcpkg_configure_cmake(
PREFER_NINJA # Disable this option if project cannot be built with Ninja
OPTIONS
${_COMPONENT_FLAGS}
- -DBUILD_STATIC=${BUILD_STATIC}
+ -DBUILD_STATIC=${BUILD_PLUGINS_STATIC}
+ -DBUILD_PLUGINS_STATIC=${BUILD_PLUGINS_STATIC}
-DMAGNUM_PLUGINS_DEBUG_DIR=${CURRENT_INSTALLED_DIR}/debug/bin/magnum-d
-DMAGNUM_PLUGINS_RELEASE_DIR=${CURRENT_INSTALLED_DIR}/bin/magnum
)
diff --git a/ports/magnum/CONTROL b/ports/magnum/CONTROL
index dcf86f079..6f3aebadc 100644
--- a/ports/magnum/CONTROL
+++ b/ports/magnum/CONTROL
@@ -1,42 +1,65 @@
Source: magnum
-Version: 2018.02-1
+Version: 2018.02-2
Build-Depends: corrade[pluginmanager], corrade[utility]
Description: C++11/C++14 graphics middleware for games and data visualization http://magnum.graphics/
-Default-Features: debugtools, meshtools, primitives, scenegraph, shaders, shapes, text, texturetools, sdl2application, windowlesswglapplication
+Default-Features: anyimageimporter, anyaudioimporter, anyimageconverter, anysceneimporter, debugtools, gl, meshtools, primitives, scenegraph, shaders, shapes, text, texturetools, trade, sdl2application, windowlesswglapplication
-Feature: sdl2application
-Description: Sdl2Application library
-Build-Depends: sdl2
+Feature: al-info
+Description: magnum-al-info utility
+Build-Depends: magnum[audio]
-Feature: glfwapplication
-Description: GlfwApplication library
-Build-Depends: glfw3
+Feature: anyimageimporter
+Description: (Upcoming) AnyImageImporter plugin
+Build-Depends: magnum[trade]
-Feature: glutapplication
-Description: GlutApplication library
-Build-Depends: freeglut
+Feature: anyaudioimporter
+Description: (Upcoming) AnyAudioImporter plugin
+Build-Depends: magnum[audio]
+
+Feature: anyimageconverter
+Description: (Upcoming) AnyImageConverter plugin
+Build-Depends: magnum[trade]
+
+Feature: anysceneimporter
+Description: (Upcoming) AnySceneImporter plugin
+Build-Depends: magnum[trade]
Feature: audio
Description: Audio library
Build-Depends: openal-soft
-Feature: magnuminfo
-Description: magnum-info utility
+Feature: debugtools
+Description: DebugTools library
+
+Feature: distancefieldconverter
+Description: magnum-distancefieldconverter utility
+Build-Depends: magnum[texturetools], magnum[gl]
Feature: fontconverter
Description: magnum-fontconverter utility
-Build-Depends: magnum[text]
+Build-Depends: magnum[text], magnum[gl]
-Feature: distancefieldconverter
-Description: magnum-distancefieldconverter utility
-Build-Depends: magnum[texturetools]
+Feature: gl
+Description: (Upcoming) GL library
+
+Feature: gl-info
+Description: (Upcoming) gl-info utility
+Build-Depends: magnum[gl]
+
+Feature: glfwapplication
+Description: GlfwApplication library
+Build-Depends: glfw3
+
+Feature: glutapplication
+Description: GlutApplication library
+Build-Depends: freeglut, magnum[gl]
Feature: imageconverter
Description: magnum-imageconverter utility
+Build-Depends: magnum[trade]
-Feature: wavaudioimporter
-Description: WavAudioImporter plugin
-Build-Depends: magnum[audio]
+Feature: magnuminfo
+Description: magnum-info utility
Feature: magnumfont
Description: MagnumFont plugin
@@ -46,23 +69,29 @@ Feature: magnumfontconverter
Description: MagnumFontConverter plugin
Build-Depends: magnum[text], magnum[tgaimageconverter]
+Feature: meshtools
+Description: MeshTools library
+Build-Depends: magnum[trade]
+
Feature: objimporter
Description: ObjImporter plugin
+Build-Depends: magnum[trade]
Feature: tgaimageconverter
Description: TgaImageConverter plugin
+Build-Depends: magnum[trade]
-Feature: tgaimporter
-Description: TgaImporter plugin
-
-Feature: debugtools
-Description: DebugTools library
-
-Feature: meshtools
-Description: MeshTools library
+Feature: opengltester
+Description: OpenGLTester library
+Build-Depends: corrade[testsuite], magnum[gl]
Feature: primitives
Description: Primitives library
+Build-Depends: magnum[trade]
+
+Feature: sdl2application
+Description: Sdl2Application library
+Build-Depends: sdl2
Feature: shapes
Description: Shapes library
@@ -80,16 +109,21 @@ Build-Depends: magnum[texturetools]
Feature: texturetools
Description: TextureTools library
-Feature: al-info
-Description: magnum-al-info utility
+Feature: tgaimporter
+Description: TgaImporter plugin
+Build-Depends: magnum[trade]
+
+Feature: trade
+Description: (Upcoming) Trade library
+
+Feature: wavaudioimporter
+Description: WavAudioImporter plugin
Build-Depends: magnum[audio]
Feature: windowlesswglapplication
Description: WindowlessWglApplication library
+Build-Depends: magnum[gl]
Feature: wglcontext
Description: WglContext library
-
-Feature: opengltester
-Description: OpenGLTester library
-Build-Depends: corrade[testsuite]
+Build-Depends: magnum[gl]
diff --git a/ports/magnum/magnumdeploy.ps1 b/ports/magnum/magnumdeploy.ps1
new file mode 100644
index 000000000..203f2bac3
--- /dev/null
+++ b/ports/magnum/magnumdeploy.ps1
@@ -0,0 +1,38 @@
+# Magnum's plugin deployment strategy is that each Magnum module has a hardcoded
+# set of plugin directories. Each of these directories is deployed in
+# full if that Module is referenced.
+#
+# Note: this function signature and behavior is depended upon by applocal.ps1
+function deployPluginsIfMagnum([string]$targetBinaryDir, [string]$MagnumPluginsDir, [string]$targetBinaryName) {
+ Write-Verbose "Deploying magnum plugins"
+
+ $baseDir = Split-Path $MagnumPluginsDir -parent
+ $pluginsBase = Split-Path $MagnumPluginsDir -Leaf
+ $binDir = "$baseDir\bin"
+
+ function deployPlugins([string]$pluginSubdirName) {
+ if (Test-Path "$MagnumPluginsDir\$pluginSubdirName") {
+ Write-Verbose " Deploying plugins directory '$pluginSubdirName'"
+ New-Item "$targetBinaryDir\$pluginsBase\$pluginSubdirName" -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
+ Get-ChildItem -Path "$MagnumPluginsDir\$pluginSubdirName\*" -Include "*.dll", "*.conf", "*.pdb" | % {
+ deployBinary "$targetBinaryDir\$pluginsBase\$pluginSubdirName" "$MagnumPluginsDir\$pluginSubdirName" $_.Name
+ resolve $_
+ }
+ } else {
+ Write-Verbose " Skipping plugins directory '$pluginSubdirName': doesn't exist"
+ }
+ }
+
+ # We detect Magnum modules in use via the DLLs themselves.
+ # Rather than checking for Magnum*.dll, we check for Magnum.dll and
+ # Magnum-d.dll to avoid falsly matching MagnumTextureTools.dll for example.
+ if ($targetBinaryName -like "MagnumAudio.dll" -or $targetBinaryName -like "MagnumAudio-d.dll") {
+ deployPlugins "audioimporters"
+ } elseif ($targetBinaryName -like "MagnumText.dll" -or $targetBinaryName -like "MagnumText-d.dll") {
+ deployPlugins "fonts"
+ deployPlugins "fontconverters"
+ } elseif ($targetBinaryName -like "Magnum.dll" -or $targetBinaryName -like "Magnum-d.dll") {
+ deployPlugins "importers"
+ deployPlugins "imageconverters"
+ }
+}
diff --git a/ports/magnum/portfile.cmake b/ports/magnum/portfile.cmake
index 10d7f02fc..af22fbb60 100644
--- a/ports/magnum/portfile.cmake
+++ b/ports/magnum/portfile.cmake
@@ -94,6 +94,9 @@ else()
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/include/MagnumPlugins)
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/lib/magnum)
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/lib/magnum-d)
+
+ file(COPY ${CMAKE_CURRENT_LIST_DIR}/magnumdeploy.ps1 DESTINATION ${CURRENT_PACKAGES_DIR}/bin/magnum)
+ file(COPY ${CMAKE_CURRENT_LIST_DIR}/magnumdeploy.ps1 DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin/magnum-d)
endif()
# Handle copyright
diff --git a/scripts/buildsystems/msbuild/applocal.ps1 b/scripts/buildsystems/msbuild/applocal.ps1
index 3f0f2ef37..e5f3c3dd0 100644
--- a/scripts/buildsystems/msbuild/applocal.ps1
+++ b/scripts/buildsystems/msbuild/applocal.ps1
@@ -4,6 +4,7 @@ param([string]$targetBinary, [string]$installedDir, [string]$tlogFile, [string]$
$g_searched = @{}
# Note: installedDir is actually the bin\ directory.
$g_install_root = Split-Path $installedDir -parent
+$g_is_debug = $g_install_root -match '(.*\\)?debug(\\)?$'
# Ensure we create the copied files log, even if we don't end up copying any files
if ($copiedFilesLog)
@@ -63,6 +64,13 @@ function resolve([string]$targetBinary) {
deployBinary $baseTargetBinaryDir $installedDir "$_"
if (Test-Path function:\deployPluginsIfQt) { deployPluginsIfQt $targetBinaryDir "$g_install_root\plugins" "$_" }
if (Test-Path function:\deployOpenNI2) { deployOpenNI2 $targetBinaryDir "$g_install_root" "$_" }
+ if (Test-Path function:\deployPluginsIfMagnum) {
+ if ($g_is_debug) {
+ deployPluginsIfMagnum $targetBinaryDir "$g_install_root\bin\magnum-d" "$_"
+ } else {
+ deployPluginsIfMagnum $targetBinaryDir "$g_install_root\bin\magnum" "$_"
+ }
+ }
resolve "$baseTargetBinaryDir\$_"
} elseif (Test-Path "$targetBinaryDir\$_") {
Write-Verbose " ${_}: $_ not found in vcpkg; locally deployed"
@@ -85,5 +93,12 @@ if (Test-Path "$g_install_root\bin\OpenNI2\openni2deploy.ps1") {
. "$g_install_root\bin\OpenNI2\openni2deploy.ps1"
}
+# Note: This is a hack to make Magnum work.
+if (Test-Path "$g_install_root\bin\magnum\magnumdeploy.ps1") {
+ . "$g_install_root\bin\magnum\magnumdeploy.ps1"
+} elseif (Test-Path "$g_install_root\bin\magnum-d\magnumdeploy.ps1") {
+ . "$g_install_root\bin\magnum-d\magnumdeploy.ps1"
+}
+
resolve($targetBinary)
-Write-Verbose $($g_searched | out-string) \ No newline at end of file
+Write-Verbose $($g_searched | out-string)