From: Uwe Hermann Date: Sun, 29 Jan 2017 18:36:59 +0000 (+0100) Subject: Build fixes for Qt5 Windows/mingw/MXE support. X-Git-Tag: pulseview-0.4.0~203 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=09f55d9665efb3b17ba7de4bae47be6989e884fe;p=pulseview.git Build fixes for Qt5 Windows/mingw/MXE support. We currently need to (ab)use pkg-config to get all the required Qt5 static linking dependencies right, since this doesn't yet work properly in MXE's cmake. We use ${PKGDEPS_STATIC_LDFLAGS} instead of ${PKGDEPS_STATIC_LIBRARIES} to avoid some linker issues related to libbz2. We need to add Qt5::QSvgPlugin, Qt5::QWindowsIntegrationPlugin, Qt5PlatformSupport and all the Qt5 libs and their dependencies to the link libraries list (for both PulseView and the unit tests). In one of the source code files we need to explicitly list all static Qt plugins via Q_IMPORT_PLUGIN to make static builds work, which is currently QWindowsIntegrationPlugin and QSvgPlugin. We're only focusing on having a working Qt5 build for Windows, as we no longer need to or want to support Qt4 there. Details: https://github.com/mxe/mxe/issues/1642 Thanks to Tony Theodore for the help! This should also fix bug #871, since we're now building with Qt >= 5.6 which has high-DPI support in general. Tested via manual specification (might need further changes, though): set QT_SCALE_FACTOR=2 pulseview.exe --- diff --git a/CMakeLists.txt b/CMakeLists.txt index ee58ce2c..9d35376b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,6 +81,11 @@ if(FORCE_QT4) set(Qt5Core_FOUND FALSE) else() find_package(Qt5Core QUIET) +if(WIN32) + # MXE workaround: Use pkg-config to find Qt5 libs. + # https://github.com/mxe/mxe/issues/1642 + pkg_check_modules(QT5ALL REQUIRED Qt5Widgets Qt5Gui Qt5Svg) +endif() endif() if(Qt5Core_FOUND) @@ -446,11 +451,7 @@ set(PULSEVIEW_LINK_LIBS if(STATIC_PKGDEPS_LIBS) link_directories(${PKGDEPS_STATIC_LIBRARY_DIRS}) - list(APPEND PULSEVIEW_LINK_LIBS ${PKGDEPS_STATIC_LIBRARIES}) -if(WIN32) - # Workaround for a MinGW linking issue. - list(APPEND PULSEVIEW_LINK_LIBS "-llzma -llcms2") -endif() + list(APPEND PULSEVIEW_LINK_LIBS ${PKGDEPS_STATIC_LDFLAGS}) else() link_directories(${PKGDEPS_LIBRARY_DIRS}) list(APPEND PULSEVIEW_LINK_LIBS ${PKGDEPS_LIBRARIES}) @@ -459,10 +460,12 @@ endif() if(WIN32) # On Windows we need to statically link the libqsvg imageformat # plugin (and the QtSvg component) for SVG graphics/icons to work. + # We also need QWindowsIntegrationPlugin, Qt5PlatformSupport, and all + # Qt libs and their dependencies. add_definitions(-DQT_STATICPLUGIN) - link_directories("${QT_PLUGINS_DIR}/imageformats") - list(APPEND PULSEVIEW_LINK_LIBS "-lqsvg") - list(APPEND PULSEVIEW_LINK_LIBS ${QT_QTSVG_LIBRARY}) + list(APPEND PULSEVIEW_LINK_LIBS Qt5::QSvgPlugin) + list(APPEND PULSEVIEW_LINK_LIBS Qt5::QWindowsIntegrationPlugin) + list(APPEND PULSEVIEW_LINK_LIBS -lQt5PlatformSupport ${QT5ALL_LDFLAGS}) endif() if(ANDROID) diff --git a/main.cpp b/main.cpp index 03967064..0881c184 100644 --- a/main.cpp +++ b/main.cpp @@ -44,9 +44,9 @@ #include "config.h" #ifdef _WIN32 -// The static qsvg lib is required for SVG graphics/icons (on Windows). #include -Q_IMPORT_PLUGIN(qsvg) +Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) +Q_IMPORT_PLUGIN(QSvgPlugin) #endif void usage()