[PATCH 2/2] Fix plugin deployment on Windows

Thiago Macieira thiago at macieira.org
Wed Nov 27 17:54:30 UTC 2013


And increase our list of plugins to be deployed to include the GIF and
SVG image plugins, the SVG icon engine and the CJK text codecs.

The install rules now iterate over the plugin list and deploy the
plugins in the right path in the staging area. The plugins must also
be scanned for dependencies (Fedora's qjpeg4.dll depends on
libjpeg-62.dll, which neds to be copied to the staging area).

Finally, fix qt.conf needed to be fixed.

Signed-off-by: Thiago Macieira <thiago at macieira.org>
---
 packaging/windows/subsurface.nsi.in |  1 +
 subsurface-install.pri              | 36 +++++++++++++++++++++++++++++-------
 subsurface.pro                      |  7 ++++++-
 3 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/packaging/windows/subsurface.nsi.in b/packaging/windows/subsurface.nsi.in
index 73ed2ce..ed9c9a8 100644
--- a/packaging/windows/subsurface.nsi.in
+++ b/packaging/windows/subsurface.nsi.in
@@ -103,6 +103,7 @@ Section
     File /r data
     File /r images
     File /r icons
+    File /r plugins
     File iconv.dll
     File libdivecomputer-0.dll
     File libpng15-15.dll
diff --git a/subsurface-install.pri b/subsurface-install.pri
index 4b06e17..89d1958 100644
--- a/subsurface-install.pri
+++ b/subsurface-install.pri
@@ -55,10 +55,37 @@ mac {
 
     qt_conf.commands = echo \'[Paths]\' > $@
     qt_conf.commands += $${nltab}echo \'Prefix=.\' >> $@
-    qt_conf.commands += $${nltab}echo \'Plugins=.\' >> $@
     qt_conf.target = $$PWD/packaging/windows/qt.conf
     install.depends += qt_conf
 
+    # Plugin code
+    defineTest(deployPlugin) {
+        plugin = $$1
+        plugintype = $$dirname(1)
+        CONFIG(debug, debug|release): plugin = $${plugin}d4.dll
+        else: plugin = $${plugin}4.dll
+
+        abs_plugin = $$[QT_INSTALL_PLUGINS]/$$plugin
+        ABS_DEPLOYMENT_PLUGIN += $$abs_plugin
+        export(ABS_DEPLOYMENT_PLUGIN)
+
+        safe_name = $$replace(1, /, _)
+        INSTALLS += $$safe_name
+
+        # Work around qmake bug in Qt4 that it can't handle $${xx}.yy properly
+        eval(safe_name_files = $${safe_name}.files)
+        eval(safe_name_path = $${safe_name}.path)
+        $$safe_name_files = $$abs_plugin
+        $$safe_name_path = $$WINDOWSSTAGING/plugins/$$plugintype
+        export($$safe_name_files)
+        export($$safe_name_path)
+        export(INSTALLS)
+    }
+    # Convert plugin names to the relative DLL path
+    for(plugin, $$list($$DEPLOYMENT_PLUGIN)) {
+        deployPlugin($$plugin)
+    }
+
     !win32-msvc* {
         #!equals($$QMAKE_HOST.os, "Windows"): dlls.commands += OBJDUMP=`$$QMAKE_CC -dumpmachine`-objdump
         dlls.commands += PATH=\$\$PATH:`$$QMAKE_CC -print-search-dirs | sed -nE \'/^libraries: =/{s///;s,/lib/?(:|\$\$),/bin\\1,g;p;q;}\'`
@@ -68,12 +95,7 @@ mac {
         CONFIG(debug, debug|release): dlls.commands += $$OUT_PWD/debug/subsurface$$EXE_SUFFIX
         else: dlls.commands += $$OUT_PWD/release/$$TARGET$$EXE_SUFFIX
 
-        for(plugin, $$list($$DEPLOYMENT_PLUGIN)) {
-            CONFIG(debug, debug|release): dlls.depends += $$[QT_INSTALL_PLUGINS]/$${plugin}d4.dll
-            else: dlls.depends += $$[QT_INSTALL_PLUGINS]/$${plugin}4.dll
-        }
-
-        dlls.commands += $$LIBS
+        dlls.commands += $$ABS_DEPLOYMENT_PLUGIN $$LIBS
         dlls.commands += | while read name; do $(INSTALL_FILE) \$\$name $$PWD/$$WINDOWSSTAGING; done
         dlls.depends += $(DESTDIR_TARGET)
 
diff --git a/subsurface.pro b/subsurface.pro
index 8754f1d..a84b904 100644
--- a/subsurface.pro
+++ b/subsurface.pro
@@ -175,7 +175,12 @@ XSLT_FILES = xslt
 ICONS_FILES = icons
 DOC_FILES = $$OUT_PWD/Documentation/user-manual.html Documentation/images
 MARBLEDIR = marbledata/maps marbledata/bitmaps
-DEPLOYMENT_PLUGIN += imageformats/qjpeg
+
+#DEPLOYMENT_PLUGIN += bearer/qnativewifibearer
+DEPLOYMENT_PLUGIN += codecs/qcncodecs codecs/qjpcodecs codecs/qkrcodecs codecs/qtwcodecs
+DEPLOYMENT_PLUGIN += imageformats/qgif imageformats/qjpeg imageformats/qsvg
+DEPLOYMENT_PLUGIN += iconengines/qsvgicon
+#DEPLOYMENT_PLUGIN += sqldrivers/qsqlite
 
 # This information will go into the Windows .rc file and linked into the .exe
 QMAKE_TARGET_COMPANY = subsurface team
-- 
1.7.11.7



More information about the subsurface mailing list