summary refs log tree commit diff
path: root/pkgs/development/libraries/qt-5/5.5
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/libraries/qt-5/5.5')
-rw-r--r--pkgs/development/libraries/qt-5/5.5/default.nix104
-rwxr-xr-xpkgs/development/libraries/qt-5/5.5/fetchsrcs.sh47
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/0001-dlopen-gtkstyle.patch63
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/0002-dlopen-resolv.patch39
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/0003-dlopen-gl.patch25
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/0004-tzdir.patch52
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/0005-dlopen-libXcursor.patch29
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/0006-dlopen-openssl.patch38
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/0007-dlopen-dbus.patch25
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/0008-xdg-config-dirs.patch55
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/0009-decrypt-ssl-traffic.patch25
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/0014-mkspecs-libgl.patch17
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/default.nix233
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/setup-hook.sh109
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtconnectivity.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtdeclarative.nix7
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtdoc.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtenginio.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtgraphicaleffects.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtimageformats.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtlocation.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix11
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtquick1.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtquickcontrols.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtscript/0001-glib-2.32.patch25
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtscript/default.nix7
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtsensors.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtserialport/0001-dlopen-serialport-udev.patch28
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtserialport/default.nix7
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtsvg.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qttools.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qttranslations.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtwebkit-examples.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtwebkit/0001-dlopen-webkit-nsplugin.patch53
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtwebkit/0002-dlopen-webkit-gtk.patch25
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtwebkit/0003-dlopen-webkit-udev.patch31
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtwebkit/default.nix33
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtwebsockets.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtx11extras.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtxmlpatterns.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/srcs.nix261
41 files changed, 1445 insertions, 0 deletions
diff --git a/pkgs/development/libraries/qt-5/5.5/default.nix b/pkgs/development/libraries/qt-5/5.5/default.nix
new file mode 100644
index 00000000000..418ab88cd9f
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/default.nix
@@ -0,0 +1,104 @@
+# Maintainer's Notes:
+#
+# Minor updates:
+#  1. Edit ./manifest.sh to point to the updated URL.
+#  2. Run ./manifest.sh.
+#  3. Build and enjoy.
+#
+# Major updates:
+#  We prefer not to immediately overwrite older versions with major updates, so
+#  make a copy of this directory first. After copying, be sure to delete ./tmp
+#  if it exists. Then follow the minor update instructions. Be sure to check if
+#  any new components have been added and package them as necessary.
+
+{ pkgs
+
+# options
+, developerBuild ? false
+, decryptSslTraffic ? false
+}:
+
+let inherit (pkgs) stdenv; in
+
+with stdenv.lib;
+
+let
+
+  mirror = "http://download.qt.io";
+  srcs = import ./srcs.nix { inherit mirror; inherit (pkgs) fetchurl; };
+
+  qtSubmodule = args:
+    let
+      inherit (args) name;
+      inherit (srcs."${args.name}") version src;
+      inherit (pkgs.stdenv) mkDerivation;
+    in mkDerivation (args // {
+      name = "${name}-${version}";
+      inherit src;
+
+      propagatedBuildInputs = args.qtInputs ++ (args.propagatedBuildInputs or []);
+
+      NIX_QT_SUBMODULE = args.NIX_QT_SUBMODULE or true;
+      dontAddPrefix = args.dontAddPrefix or true;
+      dontFixLibtool = args.dontFixLibtool or true;
+      configureScript = args.configureScript or "qmake";
+
+      enableParallelBuilding = args.enableParallelBuilding or true;
+
+      meta = {
+        homepage = http://qt-project.org;
+        description = "A cross-platform application framework for C++";
+        license = with licenses; [ fdl13 gpl2 lgpl21 lgpl3 ];
+        maintainers = with maintainers; [ bbenoist qknight ttuegel ];
+        platforms = platforms.linux;
+      } // (args.meta or {});
+    });
+
+  addPackages = self: with self;
+    let
+      callPackage = self.newScope { inherit qtSubmodule srcs; };
+    in {
+
+      qtbase = callPackage ./qtbase {
+        mesa = pkgs.mesa_noglu;
+        cups = if stdenv.isLinux then pkgs.cups else null;
+        # GNOME dependencies are not used unless gtkStyle == true
+        inherit (pkgs.gnome) libgnomeui GConf gnome_vfs;
+        bison = pkgs.bison2; # error: too few arguments to function 'int yylex(...
+        inherit developerBuild decryptSslTraffic;
+      };
+
+      /* qt3d = not packaged */
+      /* qtactiveqt = not packaged */
+      /* qtandroidextras = not packaged */
+      /* qtcanvas3d = not packaged */
+      qtconnectivity = callPackage ./qtconnectivity.nix {};
+      qtdeclarative = callPackage ./qtdeclarative.nix {};
+      qtdoc = callPackage ./qtdoc.nix {};
+      qtenginio = callPackage ./qtenginio.nix {};
+      qtgraphicaleffects = callPackage ./qtgraphicaleffects.nix {};
+      qtimageformats = callPackage ./qtimageformats.nix {};
+      qtlocation = callPackage ./qtlocation.nix {};
+      /* qtmacextras = not packaged */
+      qtmultimedia = callPackage ./qtmultimedia.nix {};
+      qtquick1 = callPackage ./qtquick1.nix {};
+      qtquickcontrols = callPackage ./qtquickcontrols.nix {};
+      qtscript = callPackage ./qtscript {};
+      qtsensors = callPackage ./qtsensors.nix {};
+      qtserialport = callPackage ./qtserialport {};
+      qtsvg = callPackage ./qtsvg.nix {};
+      qttools = callPackage ./qttools.nix {};
+      qttranslations = callPackage ./qttranslations.nix {};
+      /* qtwayland = not packaged */
+      /* qtwebchannel = not packaged */
+      /* qtwebengine = not packaged */
+      qtwebkit = callPackage ./qtwebkit {};
+      qtwebkit-examples = callPackage ./qtwebkit-examples.nix {};
+      qtwebsockets = callPackage ./qtwebsockets.nix {};
+      /* qtwinextras = not packaged */
+      qtx11extras = callPackage ./qtx11extras.nix {};
+      qtxmlpatterns = callPackage ./qtxmlpatterns.nix {};
+
+    };
+
+in makeScope pkgs.newScope addPackages
diff --git a/pkgs/development/libraries/qt-5/5.5/fetchsrcs.sh b/pkgs/development/libraries/qt-5/5.5/fetchsrcs.sh
new file mode 100755
index 00000000000..8d48cd38ee4
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/fetchsrcs.sh
@@ -0,0 +1,47 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p coreutils findutils gnused nix wget
+
+set -x
+
+# The trailing slash at the end is necessary!
+RELEASE_URL="http://download.qt.io/official_releases/qt/5.5/5.5.0/submodules/"
+EXTRA_WGET_ARGS='-A *.tar.xz'
+
+mkdir tmp; cd tmp
+
+wget -nH -r -c --no-parent $RELEASE_URL $EXTRA_WGET_ARGS
+
+cat >../srcs.nix <<EOF
+# DO NOT EDIT! This file is generated automatically by manifest.sh
+{ fetchurl, mirror }:
+
+{
+EOF
+
+workdir=$(pwd)
+
+find . | while read src; do
+    if [[ -f "${src}" ]]; then
+        url="${src:2}"
+        # Sanitize file name
+        filename=$(basename "$src" | tr '@' '_')
+        nameversion="${filename%.tar.*}"
+        name=$(echo "$nameversion" | sed -e 's,-[[:digit:]].*,,' | sed -e 's,-opensource-src$,,')
+        version=$(echo "$nameversion" | sed -e 's,^\([[:alpha:]][[:alnum:]]*-\)\+,,')
+        sha256=$(nix-hash --type sha256 --base32 --flat "$src")
+        cat >>../srcs.nix <<EOF
+  $name = {
+    version = "$version";
+    src = fetchurl {
+      url = "\${mirror}/$url";
+      sha256 = "$sha256";
+      name = "$filename";
+    };
+  };
+EOF
+    fi
+done
+
+echo "}" >>../srcs.nix
+
+cd ..
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/0001-dlopen-gtkstyle.patch b/pkgs/development/libraries/qt-5/5.5/qtbase/0001-dlopen-gtkstyle.patch
new file mode 100644
index 00000000000..b86dfaf628b
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/0001-dlopen-gtkstyle.patch
@@ -0,0 +1,63 @@
+From d3224286c647f1d1e7dac485bbeee5bc8286e6c6 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Mon, 1 Dec 2014 17:21:58 -0600
+Subject: [PATCH 1/9] dlopen-gtkstyle
+
+---
+ qtbase/src/widgets/styles/qgtk2painter.cpp |  2 +-
+ qtbase/src/widgets/styles/qgtkstyle_p.cpp  | 12 ++++++------
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/qtbase/src/widgets/styles/qgtk2painter.cpp b/qtbase/src/widgets/styles/qgtk2painter.cpp
+index 489d456..c38e986 100644
+--- a/qtbase/src/widgets/styles/qgtk2painter.cpp
++++ b/qtbase/src/widgets/styles/qgtk2painter.cpp
+@@ -96,7 +96,7 @@ static void initGtk()
+     static bool initialized = false;
+     if (!initialized) {
+         // enforce the "0" suffix, so we'll open libgtk-x11-2.0.so.0
+-        QLibrary libgtk(QLS("gtk-x11-2.0"), 0, 0);
++        QLibrary libgtk(QLS("@gtk@/lib/libgtk-x11-2.0"), 0, 0);
+ 
+         QGtk2PainterPrivate::gdk_pixmap_new = (Ptr_gdk_pixmap_new)libgtk.resolve("gdk_pixmap_new");
+         QGtk2PainterPrivate::gdk_pixbuf_get_from_drawable = (Ptr_gdk_pixbuf_get_from_drawable)libgtk.resolve("gdk_pixbuf_get_from_drawable");
+diff --git a/qtbase/src/widgets/styles/qgtkstyle_p.cpp b/qtbase/src/widgets/styles/qgtkstyle_p.cpp
+index 0e119a1..ad6caa1 100644
+--- a/qtbase/src/widgets/styles/qgtkstyle_p.cpp
++++ b/qtbase/src/widgets/styles/qgtkstyle_p.cpp
+@@ -327,7 +327,7 @@ void QGtkStylePrivate::gtkWidgetSetFocus(GtkWidget *widget, bool focus)
+ void QGtkStylePrivate::resolveGtk() const
+ {
+     // enforce the "0" suffix, so we'll open libgtk-x11-2.0.so.0
+-    QLibrary libgtk(QLS("gtk-x11-2.0"), 0, 0);
++    QLibrary libgtk(QLS("@gtk@/lib/libgtk-x11-2.0"), 0, 0);
+ 
+     gtk_init = (Ptr_gtk_init)libgtk.resolve("gtk_init");
+     gtk_window_new = (Ptr_gtk_window_new)libgtk.resolve("gtk_window_new");
+@@ -425,8 +425,8 @@ void QGtkStylePrivate::resolveGtk() const
+     pango_font_description_get_family = (Ptr_pango_font_description_get_family)libgtk.resolve("pango_font_description_get_family");
+     pango_font_description_get_style = (Ptr_pango_font_description_get_style)libgtk.resolve("pango_font_description_get_style");
+ 
+-    gnome_icon_lookup_sync = (Ptr_gnome_icon_lookup_sync)QLibrary::resolve(QLS("gnomeui-2"), 0, "gnome_icon_lookup_sync");
+-    gnome_vfs_init= (Ptr_gnome_vfs_init)QLibrary::resolve(QLS("gnomevfs-2"), 0, "gnome_vfs_init");
++    gnome_icon_lookup_sync = (Ptr_gnome_icon_lookup_sync)QLibrary::resolve(QLS("@libgnomeui@/lib/libgnomeui-2"), 0, "gnome_icon_lookup_sync");
++    gnome_vfs_init= (Ptr_gnome_vfs_init)QLibrary::resolve(QLS("@gnome_vfs@/lib/libgnomevfs-2"), 0, "gnome_vfs_init");
+ }
+ 
+ /* \internal
+@@ -594,9 +594,9 @@ void QGtkStylePrivate::cleanupGtkWidgets()
+ static bool resolveGConf()
+ {
+     if (!QGtkStylePrivate::gconf_client_get_default) {
+-        QGtkStylePrivate::gconf_client_get_default = (Ptr_gconf_client_get_default)QLibrary::resolve(QLS("gconf-2"), 4, "gconf_client_get_default");
+-        QGtkStylePrivate::gconf_client_get_string =  (Ptr_gconf_client_get_string)QLibrary::resolve(QLS("gconf-2"), 4, "gconf_client_get_string");
+-        QGtkStylePrivate::gconf_client_get_bool =  (Ptr_gconf_client_get_bool)QLibrary::resolve(QLS("gconf-2"), 4, "gconf_client_get_bool");
++        QGtkStylePrivate::gconf_client_get_default = (Ptr_gconf_client_get_default)QLibrary::resolve(QLS("@gconf@/lib/libgconf-2"), 4, "gconf_client_get_default");
++        QGtkStylePrivate::gconf_client_get_string =  (Ptr_gconf_client_get_string)QLibrary::resolve(QLS("@gconf@/lib/libgconf-2"), 4, "gconf_client_get_string");
++        QGtkStylePrivate::gconf_client_get_bool =  (Ptr_gconf_client_get_bool)QLibrary::resolve(QLS("@gconf@/lib/libgconf-2"), 4, "gconf_client_get_bool");
+     }
+     return (QGtkStylePrivate::gconf_client_get_default !=0);
+ }
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/0002-dlopen-resolv.patch b/pkgs/development/libraries/qt-5/5.5/qtbase/0002-dlopen-resolv.patch
new file mode 100644
index 00000000000..90afce32dc1
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/0002-dlopen-resolv.patch
@@ -0,0 +1,39 @@
+From af315c076c8626292075592fab1726fcd62c3169 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Mon, 1 Dec 2014 17:22:55 -0600
+Subject: [PATCH 2/9] dlopen-resolv
+
+---
+ qtbase/src/network/kernel/qdnslookup_unix.cpp | 2 +-
+ qtbase/src/network/kernel/qhostinfo_unix.cpp  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/qtbase/src/network/kernel/qdnslookup_unix.cpp b/qtbase/src/network/kernel/qdnslookup_unix.cpp
+index fa782da..912ecc7 100644
+--- a/qtbase/src/network/kernel/qdnslookup_unix.cpp
++++ b/qtbase/src/network/kernel/qdnslookup_unix.cpp
+@@ -79,7 +79,7 @@ static void resolveLibrary()
+     if (!lib.load())
+ #endif
+     {
+-        lib.setFileName(QLatin1String("resolv"));
++        lib.setFileName(QLatin1String("@glibc/lib/resolv"));
+         if (!lib.load())
+             return;
+     }
+diff --git a/qtbase/src/network/kernel/qhostinfo_unix.cpp b/qtbase/src/network/kernel/qhostinfo_unix.cpp
+index 90a6f76..758407a 100644
+--- a/qtbase/src/network/kernel/qhostinfo_unix.cpp
++++ b/qtbase/src/network/kernel/qhostinfo_unix.cpp
+@@ -95,7 +95,7 @@ static void resolveLibrary()
+     if (!lib.load())
+ #endif
+     {
+-        lib.setFileName(QLatin1String("resolv"));
++        lib.setFileName(QLatin1String("@glibc@/lib/libresolv"));
+         if (!lib.load())
+             return;
+     }
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/0003-dlopen-gl.patch b/pkgs/development/libraries/qt-5/5.5/qtbase/0003-dlopen-gl.patch
new file mode 100644
index 00000000000..a8a0bdf4410
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/0003-dlopen-gl.patch
@@ -0,0 +1,25 @@
+From fc9f34b6e8a290615868e27bfcd31c355d11487c Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Mon, 1 Dec 2014 17:23:08 -0600
+Subject: [PATCH 3/9] dlopen-gl
+
+---
+ .../plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp   | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/qtbase/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp b/qtbase/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
+index 5166372..bdeb69a 100644
+--- a/qtbase/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
++++ b/qtbase/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
+@@ -560,7 +560,7 @@ void (*QGLXContext::getProcAddress(const QByteArray &procName)) ()
+             {
+                 extern const QString qt_gl_library_name();
+ //                QLibrary lib(qt_gl_library_name());
+-                QLibrary lib(QLatin1String("GL"));
++                QLibrary lib(QLatin1String("@openglDriver@/lib/libGL"));
+                 glXGetProcAddressARB = (qt_glXGetProcAddressARB) lib.resolve("glXGetProcAddressARB");
+             }
+         }
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/0004-tzdir.patch b/pkgs/development/libraries/qt-5/5.5/qtbase/0004-tzdir.patch
new file mode 100644
index 00000000000..a4e9cd986a2
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/0004-tzdir.patch
@@ -0,0 +1,52 @@
+From b1a0771652ddf91058f67fa92260a89c43f5c530 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Mon, 1 Dec 2014 17:23:22 -0600
+Subject: [PATCH 4/9] tzdir
+
+---
+ qtbase/src/corelib/tools/qtimezoneprivate_tz.cpp | 21 +++++++++++++++------
+ 1 file changed, 15 insertions(+), 6 deletions(-)
+
+diff --git a/qtbase/src/corelib/tools/qtimezoneprivate_tz.cpp b/qtbase/src/corelib/tools/qtimezoneprivate_tz.cpp
+index 29f0e17..3878974 100644
+--- a/qtbase/src/corelib/tools/qtimezoneprivate_tz.cpp
++++ b/qtbase/src/corelib/tools/qtimezoneprivate_tz.cpp
+@@ -62,7 +62,10 @@ typedef QHash<QByteArray, QTzTimeZone> QTzTimeZoneHash;
+ // Parse zone.tab table, assume lists all installed zones, if not will need to read directories
+ static QTzTimeZoneHash loadTzTimeZones()
+ {
+-    QString path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
++    QString path = qgetenv("TZDIR");
++    path += "/zone.tab";
++    if (!QFile::exists(path))
++        path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
+     if (!QFile::exists(path))
+         path = QStringLiteral("/usr/lib/zoneinfo/zone.tab");
+ 
+@@ -553,12 +556,18 @@ void QTzTimeZonePrivate::init(const QByteArray &ianaId)
+         if (!tzif.open(QIODevice::ReadOnly))
+             return;
+     } else {
+-        // Open named tz, try modern path first, if fails try legacy path
+-        tzif.setFileName(QLatin1String("/usr/share/zoneinfo/") + QString::fromLocal8Bit(ianaId));
++        // Try TZDIR first
++        QString zoneinfoDir = qgetenv("TZDIR");
++        zoneinfoDir += "/" + QString::fromLocal8Bit(ianaId);
++        tzif.setFileName(zoneinfoDir);
+         if (!tzif.open(QIODevice::ReadOnly)) {
+-            tzif.setFileName(QLatin1String("/usr/lib/zoneinfo/") + QString::fromLocal8Bit(ianaId));
+-            if (!tzif.open(QIODevice::ReadOnly))
+-                return;
++            // Open named tz, try modern path first, if fails try legacy path
++            tzif.setFileName(QLatin1String("/usr/share/zoneinfo/") + QString::fromLocal8Bit(ianaId));
++            if (!tzif.open(QIODevice::ReadOnly)) {
++                tzif.setFileName(QLatin1String("/usr/lib/zoneinfo/") + QString::fromLocal8Bit(ianaId));
++                if (!tzif.open(QIODevice::ReadOnly))
++                    return;
++            }
+         }
+     }
+ 
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/0005-dlopen-libXcursor.patch b/pkgs/development/libraries/qt-5/5.5/qtbase/0005-dlopen-libXcursor.patch
new file mode 100644
index 00000000000..fe53e0e7c48
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/0005-dlopen-libXcursor.patch
@@ -0,0 +1,29 @@
+From 5fbe717120864d490fa4d60bc7f7676ac19bd69d Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Mon, 1 Dec 2014 17:33:51 -0600
+Subject: [PATCH 5/9] dlopen-libXcursor
+
+---
+ qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp b/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp
+index e51ab85..7ec4b0b 100644
+--- a/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp
++++ b/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp
+@@ -303,10 +303,10 @@ QXcbCursor::QXcbCursor(QXcbConnection *conn, QXcbScreen *screen)
+ #ifdef XCB_USE_XLIB
+     static bool function_ptrs_not_initialized = true;
+     if (function_ptrs_not_initialized) {
+-        QLibrary xcursorLib(QLatin1String("Xcursor"), 1);
++        QLibrary xcursorLib(QLatin1String("@libXcursor@/lib/libXcursor"), 1);
+         bool xcursorFound = xcursorLib.load();
+         if (!xcursorFound) { // try without the version number
+-            xcursorLib.setFileName(QLatin1String("Xcursor"));
++            xcursorLib.setFileName(QLatin1String("@libXcursor@/lib/Xcursor"));
+             xcursorFound = xcursorLib.load();
+         }
+         if (xcursorFound) {
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/0006-dlopen-openssl.patch b/pkgs/development/libraries/qt-5/5.5/qtbase/0006-dlopen-openssl.patch
new file mode 100644
index 00000000000..718ff08ca43
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/0006-dlopen-openssl.patch
@@ -0,0 +1,38 @@
+From 4c4b1f2a35644014da79d089d3860e518fa9a27d Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Sun, 23 Aug 2015 08:52:04 -0500
+Subject: [PATCH 6/9] dlopen openssl
+
+---
+ qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp b/qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp
+index e2700df..a7ccf88 100644
+--- a/qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp
++++ b/qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp
+@@ -640,8 +640,8 @@ static QPair<QLibrary*, QLibrary*> loadOpenSsl()
+ #endif
+ #if defined(SHLIB_VERSION_NUMBER) && !defined(Q_OS_QNX) // on QNX, the libs are always libssl.so and libcrypto.so
+     // first attempt: the canonical name is libssl.so.<SHLIB_VERSION_NUMBER>
+-    libssl->setFileNameAndVersion(QLatin1String("ssl"), QLatin1String(SHLIB_VERSION_NUMBER));
+-    libcrypto->setFileNameAndVersion(QLatin1String("crypto"), QLatin1String(SHLIB_VERSION_NUMBER));
++    libssl->setFileNameAndVersion(QLatin1String("@openssl@/lib/libssl"), QLatin1String(SHLIB_VERSION_NUMBER));
++    libcrypto->setFileNameAndVersion(QLatin1String("@openssl@/lib/libcrypto"), QLatin1String(SHLIB_VERSION_NUMBER));
+     if (libcrypto->load() && libssl->load()) {
+         // libssl.so.<SHLIB_VERSION_NUMBER> and libcrypto.so.<SHLIB_VERSION_NUMBER> found
+         return pair;
+@@ -658,8 +658,8 @@ static QPair<QLibrary*, QLibrary*> loadOpenSsl()
+     //  OS X's /usr/lib/libssl.dylib, /usr/lib/libcrypto.dylib will be picked up in the third
+     //    attempt, _after_ <bundle>/Contents/Frameworks has been searched.
+     //  iOS does not ship a system libssl.dylib, libcrypto.dylib in the first place.
+-    libssl->setFileNameAndVersion(QLatin1String("ssl"), -1);
+-    libcrypto->setFileNameAndVersion(QLatin1String("crypto"), -1);
++    libssl->setFileNameAndVersion(QLatin1String("@openssl@/lib/libssl"), -1);
++    libcrypto->setFileNameAndVersion(QLatin1String("@openssl@/lib/libcrypto"), -1);
+     if (libcrypto->load() && libssl->load()) {
+         // libssl.so.0 and libcrypto.so.0 found
+         return pair;
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/0007-dlopen-dbus.patch b/pkgs/development/libraries/qt-5/5.5/qtbase/0007-dlopen-dbus.patch
new file mode 100644
index 00000000000..96d268c358b
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/0007-dlopen-dbus.patch
@@ -0,0 +1,25 @@
+From a23141d76cdde068ba1cefdad4a6352c921ce7c9 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Sun, 23 Aug 2015 08:52:27 -0500
+Subject: [PATCH 7/9] dlopen dbus
+
+---
+ qtbase/src/dbus/qdbus_symbols.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/qtbase/src/dbus/qdbus_symbols.cpp b/qtbase/src/dbus/qdbus_symbols.cpp
+index b82d92b..f72c9cb 100644
+--- a/qtbase/src/dbus/qdbus_symbols.cpp
++++ b/qtbase/src/dbus/qdbus_symbols.cpp
+@@ -89,7 +89,7 @@ bool qdbus_loadLibDBus()
+ #ifdef Q_OS_WIN
+         QLatin1String("dbus-1"),
+ #endif
+-        QLatin1String("libdbus-1")
++        QLatin1String("@dbus_libs@/lib/libdbus-1")
+     };
+ 
+     lib->unload();
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/0008-xdg-config-dirs.patch b/pkgs/development/libraries/qt-5/5.5/qtbase/0008-xdg-config-dirs.patch
new file mode 100644
index 00000000000..4d23d640df0
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/0008-xdg-config-dirs.patch
@@ -0,0 +1,55 @@
+From a7dc6209542ef8aa54191c0e17fbb9b41cbad67f Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Sun, 23 Aug 2015 08:52:57 -0500
+Subject: [PATCH 8/9] xdg config dirs
+
+---
+ qtbase/src/corelib/io/qsettings.cpp | 18 ++++++++++++++++++
+ qtbase/src/corelib/io/qsettings_p.h |  2 +-
+ 2 files changed, 19 insertions(+), 1 deletion(-)
+
+diff --git a/qtbase/src/corelib/io/qsettings.cpp b/qtbase/src/corelib/io/qsettings.cpp
+index 413f569..8ff4974 100644
+--- a/qtbase/src/corelib/io/qsettings.cpp
++++ b/qtbase/src/corelib/io/qsettings.cpp
+@@ -1131,6 +1131,24 @@ QConfFileSettingsPrivate::QConfFileSettingsPrivate(QSettings::Format format,
+     if (!application.isEmpty())
+         confFiles[F_System | F_Application].reset(QConfFile::fromName(systemPath + appFile, false));
+     confFiles[F_System | F_Organization].reset(QConfFile::fromName(systemPath + orgFile, false));
++
++#if !defined(Q_OS_WIN)
++    // Add directories specified in $XDG_CONFIG_DIRS
++    const QString pathEnv = QString::fromLocal8Bit(getenv("XDG_CONFIG_DIRS"));
++    if (!pathEnv.isEmpty()) {
++        const QStringList pathEntries = pathEnv.split(QLatin1Char(':'), QString::SkipEmptyParts);
++        if (!pathEntries.isEmpty()) {
++            int j = 4; // This is the number of confFiles set above -- we need to start adding $XDG_CONFIG_DIRS after those.
++            for (int k = 0; k < pathEntries.size() && j < NumConfFiles - 1; ++k) {
++                const QString& path = pathEntries.at(k);
++                if (!application.isEmpty())
++                    confFiles[j++].reset(QConfFile::fromName(path + QDir::separator() + appFile, false));
++                confFiles[j++].reset(QConfFile::fromName(path + QDir::separator() + orgFile, false));
++            }
++        }
++    }
++#endif
++
+ #else
+     QString confName = getPath(format, QSettings::UserScope) + org;
+     if (!application.isEmpty())
+diff --git a/qtbase/src/corelib/io/qsettings_p.h b/qtbase/src/corelib/io/qsettings_p.h
+index 93d63fd..160b197 100644
+--- a/qtbase/src/corelib/io/qsettings_p.h
++++ b/qtbase/src/corelib/io/qsettings_p.h
+@@ -240,7 +240,7 @@ public:
+         F_Organization = 0x1,
+         F_User = 0x0,
+         F_System = 0x2,
+-        NumConfFiles = 4
++        NumConfFiles = 40 // HACK: increase NumConfFiles from 4 to 40 in order to accommodate more paths in $XDG_CONFIG_DIRS -- ellis
+ #else
+         SandboxConfFile = 0,
+         NumConfFiles = 1
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/0009-decrypt-ssl-traffic.patch b/pkgs/development/libraries/qt-5/5.5/qtbase/0009-decrypt-ssl-traffic.patch
new file mode 100644
index 00000000000..8c8ec697458
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/0009-decrypt-ssl-traffic.patch
@@ -0,0 +1,25 @@
+From 64bc88615a4cb58d461fe600b46611415d74b7b2 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Sun, 23 Aug 2015 08:53:42 -0500
+Subject: [PATCH 9/9] decrypt ssl traffic
+
+---
+ qtbase/src/network/ssl/qsslsocket_openssl.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/qtbase/src/network/ssl/qsslsocket_openssl.cpp b/qtbase/src/network/ssl/qsslsocket_openssl.cpp
+index 049666b..e8342ab 100644
+--- a/qtbase/src/network/ssl/qsslsocket_openssl.cpp
++++ b/qtbase/src/network/ssl/qsslsocket_openssl.cpp
+@@ -48,7 +48,7 @@
+ ****************************************************************************/
+ 
+ //#define QSSLSOCKET_DEBUG
+-//#define QT_DECRYPT_SSL_TRAFFIC
++#define QT_DECRYPT_SSL_TRAFFIC
+ 
+ #include "qssl_p.h"
+ #include "qsslsocket_openssl_p.h"
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/0014-mkspecs-libgl.patch b/pkgs/development/libraries/qt-5/5.5/qtbase/0014-mkspecs-libgl.patch
new file mode 100644
index 00000000000..1fc4bbd6076
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/0014-mkspecs-libgl.patch
@@ -0,0 +1,17 @@
+Ensure Qt knows where libGL is.
+
+Author: Bjørn Forsman <bjorn.forsman@gmail.com>
+diff -uNr qt-everywhere-opensource-src-5.3.2.orig/qtbase/mkspecs/common/linux.conf qt-everywhere-opensource-src-5.3.2/qtbase/mkspecs/common/linux.conf
+--- qt-everywhere-opensource-src-5.3.2.orig/qtbase/mkspecs/common/linux.conf	2014-09-11 12:48:07.000000000 +0200
++++ qt-everywhere-opensource-src-5.3.2/qtbase/mkspecs/common/linux.conf	2015-08-23 13:03:30.617473019 +0200
+@@ -12,8 +12,8 @@
+ QMAKE_LIBDIR            =
+ QMAKE_INCDIR_X11        =
+ QMAKE_LIBDIR_X11        =
+-QMAKE_INCDIR_OPENGL     =
+-QMAKE_LIBDIR_OPENGL     =
++QMAKE_INCDIR_OPENGL     = @mesa@/include
++QMAKE_LIBDIR_OPENGL     = @mesa@/lib
+ QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_OPENGL
+ QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGL
+ QMAKE_INCDIR_EGL        =
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/default.nix b/pkgs/development/libraries/qt-5/5.5/qtbase/default.nix
new file mode 100644
index 00000000000..a80810353ad
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/default.nix
@@ -0,0 +1,233 @@
+{ stdenv, fetchurl, substituteAll, makeWrapper
+, srcs
+
+, xlibs, libX11, libxcb, libXcursor, libXext, libXrender, libXi
+, xcbutil, xcbutilimage, xcbutilkeysyms, xcbutilwm, libxkbcommon
+, fontconfig, freetype, openssl, dbus, glib, udev, libxml2, libxslt, pcre
+, zlib, libjpeg, libpng, libtiff, sqlite, icu
+
+, coreutils, bison, flex, gdb, gperf, lndir, ruby
+, python, perl, pkgconfig
+
+# optional dependencies
+, cups ? null
+, mysql ? null, postgresql ? null
+
+# options
+, mesaSupported, mesa, mesa_glu
+, buildDocs ? false
+, buildExamples ? false
+, buildTests ? false
+, developerBuild ? false
+, gtkStyle ? false, libgnomeui, GConf, gnome_vfs, gtk
+, decryptSslTraffic ? false
+}:
+
+with stdenv.lib;
+
+let
+  inherit (srcs.qt5) version;
+  system-x86_64 = elem stdenv.system platforms.x86_64;
+in
+
+stdenv.mkDerivation {
+
+  name = "qtbase-${version}";
+  inherit version;
+
+  srcs = with srcs; [ qt5.src qtbase.src ];
+
+  sourceRoot = "qt-everywhere-opensource-src-${version}";
+
+  postUnpack = ''
+    mv qtbase-opensource-src-${version} ./qt-everywhere-opensource-src-${version}/qtbase
+  '';
+
+  prePatch = ''
+    substituteInPlace configure --replace /bin/pwd pwd
+    substituteInPlace qtbase/configure --replace /bin/pwd pwd
+    substituteInPlace qtbase/src/corelib/global/global.pri --replace /bin/ls ${coreutils}/bin/ls
+    substituteInPlace qtbase/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp \
+        --replace /usr/share/X11/locale ${libX11}/share/X11/locale \
+        --replace /usr/lib/X11/locale ${libX11}/share/X11/locale
+    sed -e 's@/\(usr\|opt\)/@/var/empty/@g' -i config.tests/*/*.test -i qtbase/mkspecs/*/*.conf
+  '';
+
+  patches =
+    let dlopen-gtkstyle = substituteAll {
+          src = ./0001-dlopen-gtkstyle.patch;
+          # substituteAll ignores env vars starting with capital letter
+          gconf = GConf;
+          inherit gnome_vfs libgnomeui gtk;
+        };
+        dlopen-resolv = substituteAll {
+          src = ./0002-dlopen-resolv.patch;
+          glibc = stdenv.cc.libc;
+        };
+        dlopen-gl = substituteAll {
+          src = ./0003-dlopen-gl.patch;
+          openglDriver = if mesaSupported then mesa.driverLink else "/no-such-path";
+        };
+        tzdir = ./0004-tzdir.patch;
+        dlopen-libXcursor = substituteAll {
+          src = ./0005-dlopen-libXcursor.patch;
+          inherit libXcursor;
+        };
+        dlopen-openssl = substituteAll {
+          src = ./0006-dlopen-openssl.patch;
+          inherit openssl;
+        };
+        dlopen-dbus = substituteAll {
+          src = ./0007-dlopen-dbus.patch;
+          dbus_libs = dbus;
+        };
+        xdg-config-dirs = ./0008-xdg-config-dirs.patch;
+        decrypt-ssl-traffic = ./0009-decrypt-ssl-traffic.patch;
+        mkspecs-libgl = substituteAll {
+          src = ./0014-mkspecs-libgl.patch;
+          inherit mesa;
+        };
+    in [
+      dlopen-resolv dlopen-gl tzdir dlopen-libXcursor dlopen-openssl
+      dlopen-dbus xdg-config-dirs
+    ]
+    ++ optional gtkStyle dlopen-gtkstyle
+    ++ optional decryptSslTraffic decrypt-ssl-traffic
+    ++ optional mesaSupported mkspecs-libgl;
+
+  preConfigure = ''
+    export LD_LIBRARY_PATH="$PWD/qtbase/lib:$PWD/qtbase/plugins/platforms:$PWD/qttools/lib:$LD_LIBRARY_PATH"
+    export MAKEFLAGS=-j$NIX_BUILD_CORES
+
+    sed -i 's/PATHS.*NO_DEFAULT_PATH//' "qtbase/src/corelib/Qt5Config.cmake.in"
+    sed -i 's/PATHS.*NO_DEFAULT_PATH//' "qtbase/src/corelib/Qt5CoreMacros.cmake"
+    sed -i 's/NO_DEFAULT_PATH//' "qtbase/src/gui/Qt5GuiConfigExtras.cmake.in"
+    sed -i 's/PATHS.*NO_DEFAULT_PATH//' "qtbase/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in"
+
+    export configureFlags+="-plugindir $out/lib/qt5/plugins -importdir $out/lib/qt5/imports -qmldir $out/lib/qt5/qml"
+    export configureFlags+=" -docdir $out/share/doc/qt5"
+  '';
+
+  prefixKey = "-prefix ";
+
+  # -no-eglfs, -no-directfb, -no-linuxfb and -no-kms because of the current minimalist mesa
+  # TODO Remove obsolete and useless flags once the build will be totally mastered
+  configureFlags = ''
+    -verbose
+    -confirm-license
+    -opensource
+
+    -release
+    -shared
+    -c++11
+    ${optionalString developerBuild "-developer-build"}
+    -largefile
+    -accessibility
+    -rpath
+    -optimized-qmake
+    -strip
+    -reduce-relocations
+    -system-proxies
+    -pkg-config
+
+    -gui
+    -widgets
+    -opengl desktop
+    -qml-debug
+    -nis
+    -iconv
+    -icu
+    -pch
+    -glib
+    -xcb
+    -qpa xcb
+    -${optionalString (cups == null) "no-"}cups
+    -${optionalString (!gtkStyle) "no-"}gtkstyle
+
+    -no-eglfs
+    -no-directfb
+    -no-linuxfb
+    -no-kms
+
+    ${optionalString (!system-x86_64) "-no-sse2"}
+    -no-sse3
+    -no-ssse3
+    -no-sse4.1
+    -no-sse4.2
+    -no-avx
+    -no-avx2
+    -no-mips_dsp
+    -no-mips_dspr2
+
+    -system-zlib
+    -system-libpng
+    -system-libjpeg
+    -system-xcb
+    -system-xkbcommon
+    -openssl-linked
+    -dbus-linked
+
+    -system-sqlite
+    -${if mysql != null then "plugin" else "no"}-sql-mysql
+    -${if postgresql != null then "plugin" else "no"}-sql-psql
+
+    -make libs
+    -make tools
+    -${optionalString (buildExamples == false) "no"}make examples
+    -${optionalString (buildTests == false) "no"}make tests
+  '';
+
+  # PostgreSQL autodetection fails sporadically because Qt omits the "-lpq" flag
+  # if dependency paths contain the string "pq", which can occur in the hash.
+  # To prevent these failures, we need to override PostgreSQL detection.
+  PSQL_LIBS = optionalString (postgresql != null) "-L${postgresql}/lib -lpq";
+
+  propagatedBuildInputs = [
+    xlibs.libXcomposite libX11 libxcb libXext libXrender libXi
+    fontconfig freetype openssl dbus.libs glib udev libxml2 libxslt pcre
+    zlib libjpeg libpng libtiff sqlite icu
+    xcbutil xcbutilimage xcbutilkeysyms xcbutilwm libxkbcommon
+  ]
+  # Qt doesn't directly need GLU (just GL), but many apps use, it's small and
+  # doesn't remain a runtime-dep if not used
+  ++ optionals mesaSupported [ mesa mesa_glu ]
+  ++ optional (cups != null) cups
+  ++ optional (mysql != null) mysql.lib
+  ++ optional (postgresql != null) postgresql
+  ++ optionals gtkStyle [gnome_vfs libgnomeui gtk GConf];
+
+  buildInputs =
+    [ bison flex gperf ruby ]
+    ++ optional developerBuild gdb;
+
+  nativeBuildInputs = [ python perl pkgconfig ];
+
+  propagatedNativeBuildInputs = [ makeWrapper ];
+
+  # freetype-2.5.4 changed signedness of some struct fields
+  NIX_CFLAGS_COMPILE = "-Wno-error=sign-compare";
+
+  postInstall =
+    ''
+      ${optionalString buildDocs ''
+        make docs && make install_docs
+      ''}
+
+      # Don't retain build-time dependencies like gdb and ruby.
+      sed '/QMAKE_DEFAULT_.*DIRS/ d' -i $out/mkspecs/qconfig.pri
+    '';
+
+  inherit lndir;
+  setupHook = ./setup-hook.sh;
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://qt-project.org;
+    description = "A cross-platform application framework for C++";
+    license = "GPL/LGPL";
+    maintainers = with maintainers; [ bbenoist qknight ttuegel ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/setup-hook.sh b/pkgs/development/libraries/qt-5/5.5/qtbase/setup-hook.sh
new file mode 100644
index 00000000000..d9690559b42
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/setup-hook.sh
@@ -0,0 +1,109 @@
+if [[ -z "$QMAKE" ]]; then
+
+linkDependencyDir() {
+    @lndir@/bin/lndir -silent "$1/$2" "$qtOut/$2"
+    if [[ -n "$NIX_QT_SUBMODULE" ]]; then
+        find "$1/$2" -printf "$2/%P\n" >> "$out/nix-support/qt-inputs"
+    fi
+}
+
+addQtModule() {
+    if [[ -d "$1/mkspecs" ]]; then
+        # $1 is a Qt module
+        linkDependencyDir "$1" mkspecs
+
+        for dir in bin include lib share; do
+            if [[ -d "$1/$dir" ]]; then
+                linkDependencyDir "$1" "$dir"
+            fi
+        done
+    fi
+
+    if [[ -d "$1/lib/qt5/plugins" ]]; then
+        addToSearchPath QT_PLUGIN_PATH "$1/lib/qt5/plugins"
+    fi
+
+    if [[ -d "$1/lib/qt5/imports" ]]; then
+        addToSearchPath QML_IMPORT_PATH "$1/lib/qt5/imports"
+    fi
+
+    if [[ -d "$1/lib/qt5/qml" ]]; then
+        addToSearchPath QML2_IMPORT_PATH "$1/lib/qt5/qml"
+    fi
+
+    if [[ -d "$1/share" ]]; then
+        addToSearchPath XDG_DATA_DIRS "$1/share"
+    fi
+}
+
+rmQtModules() {
+    cat "$out/nix-support/qt-inputs" | while read file; do
+      if [[ -h "$out/$file" ]]; then
+        rm "$out/$file"
+      fi
+    done
+
+    cat "$out/nix-support/qt-inputs" | while read file; do
+      if [[ -d "$out/$file" ]]; then
+        rmdir --ignore-fail-on-non-empty -p "$out/$file"
+      fi
+    done
+
+    rm "$out/nix-support/qt-inputs"
+}
+
+rmQMake() {
+    rm "$qtOut/bin/qmake" "$qtOut/bin/qt.conf"
+}
+
+setQMakePath() {
+    export PATH="$qtOut/bin${PATH:+:}$PATH"
+}
+
+wrapQtProgram() {
+    wrapProgram "$1" \
+        --set QT_PLUGIN_PATH : "$QT_PLUGIN_PATH" \
+        --set QML_IMPORT_PATH : "$QML_IMPORT_PATH" \
+        --set QML2_IMPORT_PATH : "$QML2_IMPORT_PATH" \
+        "$@"
+}
+
+qtOut=""
+if [[ -z "$NIX_QT_SUBMODULE" ]]; then
+    qtOut="$PWD/qmake-$name"
+else
+    qtOut=$out
+fi
+
+mkdir -p "$qtOut/bin" "$qtOut/mkspecs" "$qtOut/include" "$qtOut/nix-support" "$qtOut/lib" "$qtOut/share"
+
+cp "@out@/bin/qmake" "$qtOut/bin"
+cat >"$qtOut/bin/qt.conf" <<EOF
+[Paths]
+Prefix = $qtOut
+Plugins = lib/qt5/plugins
+Imports = lib/qt5/imports
+Qml2Imports = lib/qt5/qml
+Documentation = share/doc/qt5
+EOF
+
+export QMAKE="$qtOut/bin/qmake"
+addToSearchPath QT_PLUGIN_PATH "$out/lib/qt5/plugins"
+addToSearchPath QML_IMPORT_PATH "$out/lib/qt5/imports"
+addToSearchPath QML2_IMPORT_PATH "$out/lib/qt5/qml"
+addToSearchPath XDG_DATA_DIRS "$out/share"
+
+envHooks+=(addQtModule)
+preConfigurePhases+=(setQMakePath)
+
+if [[ -n "$NIX_QT_SUBMODULE" ]]; then
+    preFixupPhases+=(rmQtModules)
+    postPhases+=(rmQMake)
+fi
+
+fi
+
+if [[ -z "$NIX_QT_PIC" ]]; then
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -fPIC"
+    export NIX_QT_PIC=1
+fi
diff --git a/pkgs/development/libraries/qt-5/5.5/qtconnectivity.nix b/pkgs/development/libraries/qt-5/5.5/qtconnectivity.nix
new file mode 100644
index 00000000000..95cd6fea79b
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtconnectivity.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtbase, qtdeclarative }:
+
+qtSubmodule {
+  name = "qtconnectivity";
+  qtInputs = [ qtbase qtdeclarative ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtdeclarative.nix b/pkgs/development/libraries/qt-5/5.5/qtdeclarative.nix
new file mode 100644
index 00000000000..a71f11b7d40
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtdeclarative.nix
@@ -0,0 +1,7 @@
+{ qtSubmodule, python, qtbase, qtsvg, qtxmlpatterns }:
+
+qtSubmodule {
+  name = "qtdeclarative";
+  qtInputs = [ qtbase qtsvg qtxmlpatterns ];
+  nativeBuildInputs = [ python ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtdoc.nix b/pkgs/development/libraries/qt-5/5.5/qtdoc.nix
new file mode 100644
index 00000000000..578ea6ba0b2
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtdoc.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtdeclarative }:
+
+qtSubmodule {
+  name = "qtdoc";
+  qtInputs = [ qtdeclarative ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtenginio.nix b/pkgs/development/libraries/qt-5/5.5/qtenginio.nix
new file mode 100644
index 00000000000..b860a73ef89
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtenginio.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtdeclarative }:
+
+qtSubmodule {
+  name = "qtenginio";
+  qtInputs = [ qtdeclarative ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtgraphicaleffects.nix b/pkgs/development/libraries/qt-5/5.5/qtgraphicaleffects.nix
new file mode 100644
index 00000000000..3273f12eb83
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtgraphicaleffects.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtdeclarative }:
+
+qtSubmodule {
+  name = "qtgraphicaleffects";
+  qtInputs = [ qtdeclarative ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtimageformats.nix b/pkgs/development/libraries/qt-5/5.5/qtimageformats.nix
new file mode 100644
index 00000000000..03d0fffbe80
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtimageformats.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtbase }:
+
+qtSubmodule {
+  name = "qtimageformats";
+  qtInputs = [ qtbase ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtlocation.nix b/pkgs/development/libraries/qt-5/5.5/qtlocation.nix
new file mode 100644
index 00000000000..1e134057c4b
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtlocation.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtbase, qtmultimedia }:
+
+qtSubmodule {
+  name = "qtlocation";
+  qtInputs = [ qtbase qtmultimedia ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix b/pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix
new file mode 100644
index 00000000000..7d70cf0e371
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix
@@ -0,0 +1,11 @@
+{ qtSubmodule, qtbase, qtdeclarative
+, alsaLib, gstreamer, gst_plugins_base, libpulseaudio
+}:
+
+qtSubmodule {
+  name = "qtmultimedia";
+  qtInputs = [ qtbase qtdeclarative ];
+  buildInputs = [
+    alsaLib gstreamer gst_plugins_base libpulseaudio
+  ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtquick1.nix b/pkgs/development/libraries/qt-5/5.5/qtquick1.nix
new file mode 100644
index 00000000000..23282e02906
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtquick1.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtscript, qtsvg, qtwebkit, qtxmlpatterns }:
+
+qtSubmodule {
+  name = "qtquick1";
+  qtInputs = [ qtscript qtsvg qtwebkit qtxmlpatterns ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtquickcontrols.nix b/pkgs/development/libraries/qt-5/5.5/qtquickcontrols.nix
new file mode 100644
index 00000000000..93a864621b8
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtquickcontrols.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtdeclarative }:
+
+qtSubmodule {
+  name = "qtquickcontrols";
+  qtInputs = [ qtdeclarative ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtscript/0001-glib-2.32.patch b/pkgs/development/libraries/qt-5/5.5/qtscript/0001-glib-2.32.patch
new file mode 100644
index 00000000000..887e107b6c1
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtscript/0001-glib-2.32.patch
@@ -0,0 +1,25 @@
+From abd80356449bb36c8adcc5c9ca1df6b47715d265 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Sun, 23 Aug 2015 09:13:34 -0500
+Subject: [PATCH] glib-2.32
+
+---
+ src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.h
+index 1f6d25e..087c3fb 100644
+--- a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.h
++++ b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.h
+@@ -81,7 +81,7 @@
+ #include <pthread.h>
+ #elif PLATFORM(GTK)
+ #include <wtf/gtk/GOwnPtr.h>
+-typedef struct _GMutex GMutex;
++typedef union _GMutex GMutex;
+ typedef struct _GCond GCond;
+ #endif
+ 
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtscript/default.nix b/pkgs/development/libraries/qt-5/5.5/qtscript/default.nix
new file mode 100644
index 00000000000..127766e2ebd
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtscript/default.nix
@@ -0,0 +1,7 @@
+{ qtSubmodule, qtbase, qttools }:
+
+qtSubmodule {
+  name = "qtscript";
+  qtInputs = [ qtbase qttools ];
+  patches = [ ./0001-glib-2.32.patch ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtsensors.nix b/pkgs/development/libraries/qt-5/5.5/qtsensors.nix
new file mode 100644
index 00000000000..61e64dc47e4
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtsensors.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtbase, qtdeclarative }:
+
+qtSubmodule {
+  name = "qtsensors";
+  qtInputs = [ qtbase qtdeclarative ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtserialport/0001-dlopen-serialport-udev.patch b/pkgs/development/libraries/qt-5/5.5/qtserialport/0001-dlopen-serialport-udev.patch
new file mode 100644
index 00000000000..6636cc9265a
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtserialport/0001-dlopen-serialport-udev.patch
@@ -0,0 +1,28 @@
+From d81c2c870b9bea8fb8e6b85baefb06542f568338 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Sun, 23 Aug 2015 09:16:02 -0500
+Subject: [PATCH] dlopen serialport udev
+
+---
+ src/serialport/qtudev_p.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/serialport/qtudev_p.h b/src/serialport/qtudev_p.h
+index 6f2cabd..81b9849 100644
+--- a/src/serialport/qtudev_p.h
++++ b/src/serialport/qtudev_p.h
+@@ -105,9 +105,9 @@ inline QFunctionPointer resolveSymbol(QLibrary *udevLibrary, const char *symbolN
+ inline bool resolveSymbols(QLibrary *udevLibrary)
+ {
+     if (!udevLibrary->isLoaded()) {
+-        udevLibrary->setFileNameAndVersion(QStringLiteral("udev"), 1);
++        udevLibrary->setFileNameAndVersion(QStringLiteral("@udev@/lib/libudev"), 1);
+         if (!udevLibrary->load()) {
+-            udevLibrary->setFileNameAndVersion(QStringLiteral("udev"), 0);
++            udevLibrary->setFileNameAndVersion(QStringLiteral("@udev@/lib/libudev"), 0);
+             if (!udevLibrary->load()) {
+                 qWarning("Failed to load the library: %s, supported version(s): %i and %i", qPrintable(udevLibrary->fileName()), 1, 0);
+                 return false;
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtserialport/default.nix b/pkgs/development/libraries/qt-5/5.5/qtserialport/default.nix
new file mode 100644
index 00000000000..fa7383fc1e7
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtserialport/default.nix
@@ -0,0 +1,7 @@
+{ qtSubmodule, qtbase }:
+
+qtSubmodule {
+  name = "qtserialport";
+  qtInputs = [ qtbase ];
+  patches = [ ./0001-dlopen-serialport-udev.patch ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtsvg.nix b/pkgs/development/libraries/qt-5/5.5/qtsvg.nix
new file mode 100644
index 00000000000..b9ccac7cf93
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtsvg.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtbase }:
+
+qtSubmodule {
+  name = "qtsvg";
+  qtInputs = [ qtbase ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qttools.nix b/pkgs/development/libraries/qt-5/5.5/qttools.nix
new file mode 100644
index 00000000000..65edc450812
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qttools.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtbase }:
+
+qtSubmodule {
+  name = "qttools";
+  qtInputs = [ qtbase ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qttranslations.nix b/pkgs/development/libraries/qt-5/5.5/qttranslations.nix
new file mode 100644
index 00000000000..50fc8cf6826
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qttranslations.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qttools }:
+
+qtSubmodule {
+  name = "qttranslations";
+  qtInputs = [ qttools ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtwebkit-examples.nix b/pkgs/development/libraries/qt-5/5.5/qtwebkit-examples.nix
new file mode 100644
index 00000000000..64f85c42d19
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtwebkit-examples.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qttools, qtwebkit }:
+
+qtSubmodule {
+  name = "qtwebkit-examples";
+  qtInputs = [ qttools qtwebkit ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtwebkit/0001-dlopen-webkit-nsplugin.patch b/pkgs/development/libraries/qt-5/5.5/qtwebkit/0001-dlopen-webkit-nsplugin.patch
new file mode 100644
index 00000000000..0eeacce1bc0
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtwebkit/0001-dlopen-webkit-nsplugin.patch
@@ -0,0 +1,53 @@
+From 862ce7d357a3ec32683ac6ec7c0ebdc9346b44ba Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Sun, 23 Aug 2015 09:18:54 -0500
+Subject: [PATCH 1/3] dlopen webkit nsplugin
+
+---
+ Source/WebCore/plugins/qt/PluginPackageQt.cpp                        | 2 +-
+ Source/WebCore/plugins/qt/PluginViewQt.cpp                           | 2 +-
+ Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/Source/WebCore/plugins/qt/PluginPackageQt.cpp b/Source/WebCore/plugins/qt/PluginPackageQt.cpp
+index a923d49..2731d05 100644
+--- a/Source/WebCore/plugins/qt/PluginPackageQt.cpp
++++ b/Source/WebCore/plugins/qt/PluginPackageQt.cpp
+@@ -136,7 +136,7 @@ static void initializeGtk(QLibrary* module = 0)
+         }
+     }
+ 
+-    QLibrary library(QLatin1String("libgtk-x11-2.0"), 0);
++    QLibrary library(QLatin1String("@gtk@/lib/libgtk-x11-2.0"), 0);
+     if (library.load()) {
+         typedef void *(*gtk_init_check_ptr)(int*, char***);
+         gtk_init_check_ptr gtkInitCheck = (gtk_init_check_ptr)library.resolve("gtk_init_check");
+diff --git a/Source/WebCore/plugins/qt/PluginViewQt.cpp b/Source/WebCore/plugins/qt/PluginViewQt.cpp
+index de06a2f..363bde5 100644
+--- a/Source/WebCore/plugins/qt/PluginViewQt.cpp
++++ b/Source/WebCore/plugins/qt/PluginViewQt.cpp
+@@ -697,7 +697,7 @@ static Display *getPluginDisplay()
+     // support gdk based plugins (like flash) that use a different X connection.
+     // The code below has the same effect as this one:
+     // Display *gdkDisplay = gdk_x11_display_get_xdisplay(gdk_display_get_default());
+-    QLibrary library(QLatin1String("libgdk-x11-2.0"), 0);
++    QLibrary library(QLatin1String("@gdk_pixbuf@/lib/libgdk-x11-2.0"), 0);
+     if (!library.load())
+         return 0;
+ 
+diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
+index d734ff6..62a2197 100644
+--- a/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
++++ b/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
+@@ -64,7 +64,7 @@ static Display* getPluginDisplay()
+     // The code below has the same effect as this one:
+     // Display *gdkDisplay = gdk_x11_display_get_xdisplay(gdk_display_get_default());
+ 
+-    QLibrary library(QLatin1String("libgdk-x11-2.0"), 0);
++    QLibrary library(QLatin1String("@gdk_pixbuf@/libgdk-x11-2.0"), 0);
+     if (!library.load())
+         return 0;
+ 
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtwebkit/0002-dlopen-webkit-gtk.patch b/pkgs/development/libraries/qt-5/5.5/qtwebkit/0002-dlopen-webkit-gtk.patch
new file mode 100644
index 00000000000..bb5d1f74364
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtwebkit/0002-dlopen-webkit-gtk.patch
@@ -0,0 +1,25 @@
+From 6a407d30357c2551abceac75c82f4a1688e47437 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Sun, 23 Aug 2015 09:19:16 -0500
+Subject: [PATCH 2/3] dlopen webkit gtk
+
+---
+ Source/WebKit2/PluginProcess/qt/PluginProcessMainQt.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Source/WebKit2/PluginProcess/qt/PluginProcessMainQt.cpp b/Source/WebKit2/PluginProcess/qt/PluginProcessMainQt.cpp
+index 8de6521..0b25748 100644
+--- a/Source/WebKit2/PluginProcess/qt/PluginProcessMainQt.cpp
++++ b/Source/WebKit2/PluginProcess/qt/PluginProcessMainQt.cpp
+@@ -53,7 +53,7 @@ static void messageHandler(QtMsgType type, const QMessageLogContext&, const QStr
+ 
+ static bool initializeGtk()
+ {
+-    QLibrary gtkLibrary(QLatin1String("libgtk-x11-2.0"), 0);
++    QLibrary gtkLibrary(QLatin1String("@gtk@/lib/libgtk-x11-2.0"), 0);
+     if (!gtkLibrary.load())
+         return false;
+     typedef void* (*gtk_init_ptr)(void*, void*);
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtwebkit/0003-dlopen-webkit-udev.patch b/pkgs/development/libraries/qt-5/5.5/qtwebkit/0003-dlopen-webkit-udev.patch
new file mode 100644
index 00000000000..f3b9d407bd7
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtwebkit/0003-dlopen-webkit-udev.patch
@@ -0,0 +1,31 @@
+From 864020dd47c3b6d532d9f26b82185904cf9324f2 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Sun, 23 Aug 2015 09:19:29 -0500
+Subject: [PATCH 3/3] dlopen webkit udev
+
+---
+ Source/WebCore/platform/qt/GamepadsQt.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Source/WebCore/platform/qt/GamepadsQt.cpp b/Source/WebCore/platform/qt/GamepadsQt.cpp
+index 60ff317..da8ac69 100644
+--- a/Source/WebCore/platform/qt/GamepadsQt.cpp
++++ b/Source/WebCore/platform/qt/GamepadsQt.cpp
+@@ -111,12 +111,12 @@ private:
+     bool load()
+     {
+         m_libUdev.setLoadHints(QLibrary::ResolveAllSymbolsHint);
+-        m_libUdev.setFileNameAndVersion(QStringLiteral("udev"), 1);
++        m_libUdev.setFileNameAndVersion(QStringLiteral("@udev@/lib/libudev"), 1);
+         m_loaded = m_libUdev.load();
+         if (resolveMethods())
+             return true;
+ 
+-        m_libUdev.setFileNameAndVersion(QStringLiteral("udev"), 0);
++        m_libUdev.setFileNameAndVersion(QStringLiteral("@udev@/lib/libudev"), 0);
+         m_loaded = m_libUdev.load();
+         return resolveMethods();
+     }
+-- 
+2.5.0
+
diff --git a/pkgs/development/libraries/qt-5/5.5/qtwebkit/default.nix b/pkgs/development/libraries/qt-5/5.5/qtwebkit/default.nix
new file mode 100644
index 00000000000..596c02d39af
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtwebkit/default.nix
@@ -0,0 +1,33 @@
+{ qtSubmodule, stdenv, qtdeclarative, qtlocation, qtmultimedia, qtsensors
+, fontconfig, gdk_pixbuf, gtk, libwebp, libxml2, libxslt
+, sqlite, udev
+, bison2, flex, gdb, gperf, perl, pkgconfig, python, ruby
+, substituteAll
+, flashplayerFix ? false
+}:
+
+with stdenv.lib;
+
+qtSubmodule {
+  name = "qtwebkit";
+  qtInputs = [ qtdeclarative qtlocation qtmultimedia qtsensors ];
+  buildInputs = [ fontconfig libwebp libxml2 libxslt sqlite ];
+  nativeBuildInputs = [
+    bison2 flex gdb gperf perl pkgconfig python ruby
+  ];
+  patches =
+    let dlopen-webkit-nsplugin = substituteAll {
+          src = ./0001-dlopen-webkit-nsplugin.patch;
+          inherit gtk gdk_pixbuf;
+        };
+        dlopen-webkit-gtk = substituteAll {
+          src = ./0002-dlopen-webkit-gtk.patch;
+          inherit gtk;
+        };
+        dlopen-webkit-udev = substituteAll {
+          src = ./0003-dlopen-webkit-udev.patch;
+          inherit udev;
+        };
+    in optionals flashplayerFix [ dlopen-webkit-nsplugin dlopen-webkit-gtk ]
+    ++ [ dlopen-webkit-udev ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtwebsockets.nix b/pkgs/development/libraries/qt-5/5.5/qtwebsockets.nix
new file mode 100644
index 00000000000..fbdfbbcf0db
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtwebsockets.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtbase, qtdeclarative }:
+
+qtSubmodule {
+  name = "qtwebsockets";
+  qtInputs = [ qtbase qtdeclarative ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtx11extras.nix b/pkgs/development/libraries/qt-5/5.5/qtx11extras.nix
new file mode 100644
index 00000000000..a765161e2d7
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtx11extras.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtbase }:
+
+qtSubmodule {
+  name = "qtx11extras";
+  qtInputs = [ qtbase ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/qtxmlpatterns.nix b/pkgs/development/libraries/qt-5/5.5/qtxmlpatterns.nix
new file mode 100644
index 00000000000..9a8ddbba2bd
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qtxmlpatterns.nix
@@ -0,0 +1,6 @@
+{ qtSubmodule, qtbase }:
+
+qtSubmodule {
+  name = "qtxmlpatterns";
+  qtInputs = [ qtbase ];
+}
diff --git a/pkgs/development/libraries/qt-5/5.5/srcs.nix b/pkgs/development/libraries/qt-5/5.5/srcs.nix
new file mode 100644
index 00000000000..f1b148629d3
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/srcs.nix
@@ -0,0 +1,261 @@
+# DO NOT EDIT! This file is generated automatically by manifest.sh
+{ fetchurl, mirror }:
+
+{
+  qtbase = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtbase-opensource-src-5.5.0.tar.xz";
+      sha256 = "0r89axg4vnli0i5s9zxwpcpsdiz12kyx7y2vz0zx204wff8hcgw9";
+      name = "qtbase-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtsensors = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtsensors-opensource-src-5.5.0.tar.xz";
+      sha256 = "0jyiby8q3gyly5sxli4bncs69k1fk0vq9cpkfb4dla2bz6frhnld";
+      name = "qtsensors-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtwinextras = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtwinextras-opensource-src-5.5.0.tar.xz";
+      sha256 = "17kf8hcgr98agr4c5dy3xaifbwzk06ys0qcc6r8s4a40lxpf5vxm";
+      name = "qtwinextras-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtxmlpatterns = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtxmlpatterns-opensource-src-5.5.0.tar.xz";
+      sha256 = "0lzg1j7766bfvhdjd7cp0r6lff7xpzd3q5wrq6p5qg61f3384a37";
+      name = "qtxmlpatterns-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtwayland = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtwayland-opensource-src-5.5.0.tar.xz";
+      sha256 = "0sf8s6vficn7njmrlqcwad1hd3gfhzz84r75h9c53lyys7zkyypa";
+      name = "qtwayland-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtwebchannel = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtwebchannel-opensource-src-5.5.0.tar.xz";
+      sha256 = "139dxdm5kqdf0nbqchvcm70gb6nf9cfn04qv387s6a8bzw28dy4l";
+      name = "qtwebchannel-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtwebsockets = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtwebsockets-opensource-src-5.5.0.tar.xz";
+      sha256 = "1s4axvvqs1ajmb62hg4hyq4c9cckkpvgjfj0vkdxvrninaqnbm0s";
+      name = "qtwebsockets-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtdeclarative = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtdeclarative-opensource-src-5.5.0.tar.xz";
+      sha256 = "0wv7dzlll1k8070kkdriz668hxxg8ka4xv7dh67xlr3pck2i52l5";
+      name = "qtdeclarative-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtcanvas3d = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtcanvas3d-opensource-src-5.5.0.tar.xz";
+      sha256 = "1is5yikkmps0l03i75r3djgr93nmlbhs6nhawvd4mxrvkwscggj6";
+      name = "qtcanvas3d-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qttools = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qttools-opensource-src-5.5.0.tar.xz";
+      sha256 = "0zf0z8r83255m5qximipywldf29p17qn7whfq9b48zzvhxqi8rav";
+      name = "qttools-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtsvg = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtsvg-opensource-src-5.5.0.tar.xz";
+      sha256 = "17z149inv8b83530s0vaas8rj5q7sv011i8pvznsnkfkcvndxvq0";
+      name = "qtsvg-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qt5 = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qt5-opensource-src-5.5.0.tar.xz";
+      sha256 = "1rbjrg73lr3782nic5rjpmkx9wacnbw7ql7wxwmsz9fpmpafs267";
+      name = "qt5-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtscript = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtscript-opensource-src-5.5.0.tar.xz";
+      sha256 = "12vyhs6y7c869gg0hmh56hjz5wkmg5dbb7dlv71idjrfigm34f9l";
+      name = "qtscript-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qt3d = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qt3d-opensource-src-5.5.0.tar.xz";
+      sha256 = "13jnqg4asik3jkw5csm0p9rl5b31ism7yzyndyyyjygjnvxm8v5z";
+      name = "qt3d-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtgraphicaleffects = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtgraphicaleffects-opensource-src-5.5.0.tar.xz";
+      sha256 = "1vj7l7qfqprmdd5ay9p32dfy3cqxbrilhqza9wk7yy8lfi752hzi";
+      name = "qtgraphicaleffects-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtmacextras = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtmacextras-opensource-src-5.5.0.tar.xz";
+      sha256 = "1r4pjcw07j4n110vf3amwbj1x31ncl3h9c5kfampn4fb3b0vjx6j";
+      name = "qtmacextras-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtx11extras = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtx11extras-opensource-src-5.5.0.tar.xz";
+      sha256 = "0ydrs0vdcapbdf2d8sj6pvxj11p0id684c6ywbq53dghr72wxcxw";
+      name = "qtx11extras-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qttranslations = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qttranslations-opensource-src-5.5.0.tar.xz";
+      sha256 = "11mzc3403r81krldlmnr9ap07lgqnz67bmvblp6gxjq1w4q1gkjs";
+      name = "qttranslations-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtquickcontrols = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtquickcontrols-opensource-src-5.5.0.tar.xz";
+      sha256 = "1sn2g3sazd3l3zi8m8a9qdakm9fic44m259iyf97yychnfk6lqfz";
+      name = "qtquickcontrols-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtwebkit = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtwebkit-opensource-src-5.5.0.tar.xz";
+      sha256 = "1v7fv4188rppd1l1nmhdkhlg2x1q9d5shy63n1l0l13x6jb4k5hp";
+      name = "qtwebkit-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtserialport = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtserialport-opensource-src-5.5.0.tar.xz";
+      sha256 = "0rm8xwq7fr6q9gwhqqp3b4y9n7mqhcgr40f9f5dqkhy12chjs3m6";
+      name = "qtserialport-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtmultimedia = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtmultimedia-opensource-src-5.5.0.tar.xz";
+      sha256 = "0nrmhmgwxc1flzg9qnjzpa6qq06gl7x8cskfj2ibnx5dkgaipgx8";
+      name = "qtmultimedia-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtwebkit-examples = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtwebkit-examples-opensource-src-5.5.0.tar.xz";
+      sha256 = "04mxshf730jkmp3cma65vb0m43y8y9y7l31rhbbnmq78avxn8mfj";
+      name = "qtwebkit-examples-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtquick1 = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtquick1-opensource-src-5.5.0.tar.xz";
+      sha256 = "0b7s1pdlbf1a7mz3pkdg7y81nl5s5670lg6majich2v7w4rknmnv";
+      name = "qtquick1-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtwebengine = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtwebengine-opensource-src-5.5.0.tar.xz";
+      sha256 = "0nnnrcrj0d0ksynsl60zv0z1vq7j123xv6s1lgwq6hkl704fc0yp";
+      name = "qtwebengine-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtactiveqt = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtactiveqt-opensource-src-5.5.0.tar.xz";
+      sha256 = "17nh4gi562cs8rpypvnzld87g407qhxi9gpdcvkjzm4mbhqwa9ql";
+      name = "qtactiveqt-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtimageformats = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtimageformats-opensource-src-5.5.0.tar.xz";
+      sha256 = "0mc9mxrggnhvvgkl7gf8sp6cn9g5ffhi77krcraxhzavmk9d2yb4";
+      name = "qtimageformats-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtlocation = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtlocation-opensource-src-5.5.0.tar.xz";
+      sha256 = "036bxsjscvwnpy72cvlzv8dday9r76mvpbj9r8fhwhgxakspyb8a";
+      name = "qtlocation-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtandroidextras = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtandroidextras-opensource-src-5.5.0.tar.xz";
+      sha256 = "1dnmacpvxrz11nc4hm702p88f1hy5prabvdjx1zwrf55724lc8q2";
+      name = "qtandroidextras-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtenginio = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtenginio-opensource-src-5.5.0.tar.xz";
+      sha256 = "080m3zr5av5bc2gxqyb648hy07jj3rdybkfgh5gcn2sm4qm4n77n";
+      name = "qtenginio-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtconnectivity = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtconnectivity-opensource-src-5.5.0.tar.xz";
+      sha256 = "00j3abhvq9bg4v5z25b7jsr5c2w7hdmnljn875013p0i9s9xvkzi";
+      name = "qtconnectivity-opensource-src-5.5.0.tar.xz";
+    };
+  };
+  qtdoc = {
+    version = "5.5.0";
+    src = fetchurl {
+      url = "${mirror}/official_releases/qt/5.5/5.5.0/submodules/qtdoc-opensource-src-5.5.0.tar.xz";
+      sha256 = "19vgx1h45g7plj23sckd52npsl8i14fknl5gg103p9xpbq8lw5vz";
+      name = "qtdoc-opensource-src-5.5.0.tar.xz";
+    };
+  };
+}