diff --git a/pkgs/development/libraries/qt-5/5.6/qtbase/default.nix b/pkgs/development/libraries/qt-5/5.6/qtbase/default.nix index b26fc7faf9d7..289a1bbac6c7 100644 --- a/pkgs/development/libraries/qt-5/5.6/qtbase/default.nix +++ b/pkgs/development/libraries/qt-5/5.6/qtbase/default.nix @@ -104,6 +104,8 @@ stdenv.mkDerivation { -importdir $out/lib/qt5/imports \ -qmldir $out/lib/qt5/qml \ -docdir $out/share/doc/qt5" + + NIX_CFLAGS_COMPILE+=" -DNIXPKGS_QPA_PLATFORM_PLUGIN_PATH=\"''${!outputLib}/lib/qt5/plugins/platforms\"" ''; prefixKey = "-prefix "; diff --git a/pkgs/development/libraries/qt-5/5.6/qtbase/nix-profiles-library-paths.patch b/pkgs/development/libraries/qt-5/5.6/qtbase/nix-profiles-library-paths.patch new file mode 100644 index 000000000000..68163fc0c312 --- /dev/null +++ b/pkgs/development/libraries/qt-5/5.6/qtbase/nix-profiles-library-paths.patch @@ -0,0 +1,20 @@ +Index: qtbase-opensource-src-5.6.2/src/corelib/kernel/qcoreapplication.cpp +=================================================================== +--- qtbase-opensource-src-5.6.2.orig/src/corelib/kernel/qcoreapplication.cpp ++++ qtbase-opensource-src-5.6.2/src/corelib/kernel/qcoreapplication.cpp +@@ -2533,6 +2533,15 @@ QStringList QCoreApplication::libraryPat + QStringList *app_libpaths = new QStringList; + coreappdata()->app_libpaths.reset(app_libpaths); + ++ // Add library paths derived from NIX_PROFILES. ++ const QByteArrayList profiles = qgetenv("NIX_PROFILES").split(' '); ++ const QString plugindir = QString::fromLatin1("/lib/qt5/plugins"); ++ for (const QByteArray &profile: profiles) { ++ if (!profile.isEmpty()) { ++ app_libpaths->append(QFile::decodeName(profile) + plugindir); ++ } ++ } ++ + const QByteArray libPathEnv = qgetenv("QT_PLUGIN_PATH"); + if (!libPathEnv.isEmpty()) { + QStringList paths = QFile::decodeName(libPathEnv).split(QDir::listSeparator(), QString::SkipEmptyParts); diff --git a/pkgs/development/libraries/qt-5/5.6/qtbase/qpa-platform-plugin-path.patch b/pkgs/development/libraries/qt-5/5.6/qtbase/qpa-platform-plugin-path.patch new file mode 100644 index 000000000000..32d9dcad622d --- /dev/null +++ b/pkgs/development/libraries/qt-5/5.6/qtbase/qpa-platform-plugin-path.patch @@ -0,0 +1,43 @@ +Index: qtbase-opensource-src-5.6.2/src/gui/kernel/qplatformintegrationfactory.cpp +=================================================================== +--- qtbase-opensource-src-5.6.2.orig/src/gui/kernel/qplatformintegrationfactory.cpp ++++ qtbase-opensource-src-5.6.2/src/gui/kernel/qplatformintegrationfactory.cpp +@@ -67,9 +67,10 @@ QPlatformIntegration *QPlatformIntegrati + // Try loading the plugin from platformPluginPath first: + if (!platformPluginPath.isEmpty()) { + QCoreApplication::addLibraryPath(platformPluginPath); +- if (QPlatformIntegration *ret = loadIntegration(directLoader(), platform, paramList, argc, argv)) +- return ret; + } ++ QCoreApplication::addLibraryPath(QStringLiteral(NIXPKGS_QPA_PLATFORM_PLUGIN_PATH)); ++ if (QPlatformIntegration *ret = loadIntegration(directLoader(), platform, paramList, argc, argv)) ++ return ret; + if (QPlatformIntegration *ret = loadIntegration(loader(), platform, paramList, argc, argv)) + return ret; + #else +@@ -95,15 +96,16 @@ QStringList QPlatformIntegrationFactory: + QStringList list; + if (!platformPluginPath.isEmpty()) { + QCoreApplication::addLibraryPath(platformPluginPath); +- list = directLoader()->keyMap().values(); +- if (!list.isEmpty()) { +- const QString postFix = QStringLiteral(" (from ") +- + QDir::toNativeSeparators(platformPluginPath) +- + QLatin1Char(')'); +- const QStringList::iterator end = list.end(); +- for (QStringList::iterator it = list.begin(); it != end; ++it) +- (*it).append(postFix); +- } ++ } ++ QCoreApplication::addLibraryPath(QStringLiteral(NIXPKGS_QPA_PLATFORM_PLUGIN_PATH)); ++ list = directLoader()->keyMap().values(); ++ if (!list.isEmpty()) { ++ const QString postFix = QStringLiteral(" (from ") ++ + QDir::toNativeSeparators(platformPluginPath) ++ + QLatin1Char(')'); ++ const QStringList::iterator end = list.end(); ++ for (QStringList::iterator it = list.begin(); it != end; ++it) ++ (*it).append(postFix); + } + list.append(loader()->keyMap().values()); + return list; diff --git a/pkgs/development/libraries/qt-5/5.6/qtbase/series b/pkgs/development/libraries/qt-5/5.6/qtbase/series index 9ef8c998c661..3527a91c84de 100644 --- a/pkgs/development/libraries/qt-5/5.6/qtbase/series +++ b/pkgs/development/libraries/qt-5/5.6/qtbase/series @@ -4,5 +4,7 @@ dlopen-libXcursor.patch dlopen-openssl.patch dlopen-dbus.patch xdg-config-dirs.patch +nix-profiles-library-paths.patch compose-search-path.patch libressl.patch +qpa-platform-plugin-path.patch diff --git a/pkgs/development/libraries/qt-5/5.8/qtbase/default.nix b/pkgs/development/libraries/qt-5/5.8/qtbase/default.nix index 88684d9a753d..ee6399c2bd46 100644 --- a/pkgs/development/libraries/qt-5/5.8/qtbase/default.nix +++ b/pkgs/development/libraries/qt-5/5.8/qtbase/default.nix @@ -128,7 +128,7 @@ stdenv.mkDerivation { -qmldir $out/lib/qt5/qml \ -docdir $out/share/doc/qt5" - NIX_CFLAGS_COMPILE+=" -DNIXPKGS_QPA_PLATFORM_PLUGIN_PATH=\"''${!outputLib}/lib/qt5/plugins\"" + NIX_CFLAGS_COMPILE+=" -DNIXPKGS_QPA_PLATFORM_PLUGIN_PATH=\"''${!outputLib}/lib/qt5/plugins/platforms\"" ''; diff --git a/pkgs/development/libraries/qt-5/5.8/qtbase/nix-profiles-library-paths.patch b/pkgs/development/libraries/qt-5/5.8/qtbase/nix-profiles-library-paths.patch new file mode 100644 index 000000000000..553c71d0ace3 --- /dev/null +++ b/pkgs/development/libraries/qt-5/5.8/qtbase/nix-profiles-library-paths.patch @@ -0,0 +1,20 @@ +Index: qtbase-opensource-src-5.8.0/src/corelib/kernel/qcoreapplication.cpp +=================================================================== +--- qtbase-opensource-src-5.8.0.orig/src/corelib/kernel/qcoreapplication.cpp ++++ qtbase-opensource-src-5.8.0/src/corelib/kernel/qcoreapplication.cpp +@@ -2476,6 +2476,15 @@ QStringList QCoreApplication::libraryPat + QStringList *app_libpaths = new QStringList; + coreappdata()->app_libpaths.reset(app_libpaths); + ++ // Add library paths derived from NIX_PROFILES. ++ const QByteArrayList profiles = qgetenv("NIX_PROFILES").split(' '); ++ const QString plugindir = QString::fromLatin1("/lib/qt5/plugins"); ++ for (const QByteArray &profile: profiles) { ++ if (!profile.isEmpty()) { ++ app_libpaths->append(QFile::decodeName(profile) + plugindir); ++ } ++ } ++ + const QByteArray libPathEnv = qgetenv("QT_PLUGIN_PATH"); + if (!libPathEnv.isEmpty()) { + QStringList paths = QFile::decodeName(libPathEnv).split(QDir::listSeparator(), QString::SkipEmptyParts); diff --git a/pkgs/development/libraries/qt-5/5.8/qtbase/qpa-platform-plugin-path.patch b/pkgs/development/libraries/qt-5/5.8/qtbase/qpa-platform-plugin-path.patch new file mode 100644 index 000000000000..270116e1978d --- /dev/null +++ b/pkgs/development/libraries/qt-5/5.8/qtbase/qpa-platform-plugin-path.patch @@ -0,0 +1,43 @@ +Index: qtbase-opensource-src-5.8.0/src/gui/kernel/qplatformintegrationfactory.cpp +=================================================================== +--- qtbase-opensource-src-5.8.0.orig/src/gui/kernel/qplatformintegrationfactory.cpp ++++ qtbase-opensource-src-5.8.0/src/gui/kernel/qplatformintegrationfactory.cpp +@@ -62,9 +62,10 @@ QPlatformIntegration *QPlatformIntegrati + // Try loading the plugin from platformPluginPath first: + if (!platformPluginPath.isEmpty()) { + QCoreApplication::addLibraryPath(platformPluginPath); +- if (QPlatformIntegration *ret = qLoadPlugin(directLoader(), platform, paramList, argc, argv)) +- return ret; + } ++ QCoreApplication::addLibraryPath(QStringLiteral(NIXPKGS_QPA_PLATFORM_PLUGIN_PATH)); ++ if (QPlatformIntegration *ret = qLoadPlugin(directLoader(), platform, paramList, argc, argv)) ++ return ret; + #else + Q_UNUSED(platformPluginPath); + #endif +@@ -84,15 +85,16 @@ QStringList QPlatformIntegrationFactory: + #ifndef QT_NO_LIBRARY + if (!platformPluginPath.isEmpty()) { + QCoreApplication::addLibraryPath(platformPluginPath); +- list = directLoader()->keyMap().values(); +- if (!list.isEmpty()) { +- const QString postFix = QLatin1String(" (from ") +- + QDir::toNativeSeparators(platformPluginPath) +- + QLatin1Char(')'); +- const QStringList::iterator end = list.end(); +- for (QStringList::iterator it = list.begin(); it != end; ++it) +- (*it).append(postFix); +- } ++ } ++ QCoreApplication::addLibraryPath(QStringLiteral(NIXPKGS_QPA_PLATFORM_PLUGIN_PATH)); ++ list = directLoader()->keyMap().values(); ++ if (!list.isEmpty()) { ++ const QString postFix = QLatin1String(" (from ") ++ + QDir::toNativeSeparators(platformPluginPath) ++ + QLatin1Char(')'); ++ const QStringList::iterator end = list.end(); ++ for (QStringList::iterator it = list.begin(); it != end; ++it) ++ (*it).append(postFix); + } + #else + Q_UNUSED(platformPluginPath); diff --git a/pkgs/development/libraries/qt-5/5.8/qtbase/qpa-plugin-path.patch b/pkgs/development/libraries/qt-5/5.8/qtbase/qpa-plugin-path.patch deleted file mode 100644 index 6d40ed19c00a..000000000000 --- a/pkgs/development/libraries/qt-5/5.8/qtbase/qpa-plugin-path.patch +++ /dev/null @@ -1,15 +0,0 @@ -Index: qtbase-opensource-src-5.8.0/src/gui/kernel/qguiapplication.cpp -=================================================================== ---- qtbase-opensource-src-5.8.0.orig/src/gui/kernel/qguiapplication.cpp -+++ qtbase-opensource-src-5.8.0/src/gui/kernel/qguiapplication.cpp -@@ -1217,6 +1217,10 @@ void QGuiApplicationPrivate::createPlatf - - // Load the platform integration - QString platformPluginPath = QString::fromLocal8Bit(qgetenv("QT_QPA_PLATFORM_PLUGIN_PATH")); -+ if (!platformPluginPath.isEmpty()) { -+ platformPluginPath.append(QStringLiteral(":")); -+ } -+ platformPluginPath.append(QStringLiteral(NIXPKGS_QPA_PLATFORM_PLUGIN_PATH)); - - - QByteArray platformName; diff --git a/pkgs/development/libraries/qt-5/5.8/qtbase/series b/pkgs/development/libraries/qt-5/5.8/qtbase/series index 0378ca1f5035..47400cf7aa30 100644 --- a/pkgs/development/libraries/qt-5/5.8/qtbase/series +++ b/pkgs/development/libraries/qt-5/5.8/qtbase/series @@ -2,8 +2,9 @@ dlopen-resolv.patch tzdir.patch dlopen-libXcursor.patch xdg-config-dirs.patch +nix-profiles-library-paths.patch libressl.patch -qpa-plugin-path.patch +qpa-platform-plugin-path.patch dlopen-gl.patch compose-search-path.patch cmake-paths.patch