From 36e31d5aadf75a958dc5c57f98879d6698cd6b4b Mon Sep 17 00:00:00 2001 From: bbenoist Date: Mon, 30 Sep 2013 15:00:41 +0200 Subject: [PATCH 1/9] qtcreator: Update to 2.8.1 --- pkgs/development/qtcreator/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/qtcreator/default.nix b/pkgs/development/qtcreator/default.nix index 55e33c45ca95..6cfe5efbe815 100644 --- a/pkgs/development/qtcreator/default.nix +++ b/pkgs/development/qtcreator/default.nix @@ -2,7 +2,7 @@ let baseVersion = "2.8"; - revision = "0"; + revision = "1"; version = "${baseVersion}.${revision}"; qt4_for_qtcreator = qt48.override { developerBuild = true; @@ -14,7 +14,7 @@ stdenv.mkDerivation rec { src = fetchurl { url = "http://download.qt-project.org/official_releases/qtcreator/${baseVersion}/${version}/qt-creator-${version}-src.tar.gz"; - sha256 = "7ac5d9a36c2f561f74d77378d4eae95a78c7752b323e1df924d6e895e99f45d2"; + sha256 = "d5ae007a297a4288d0e95fd605edbfb8aee80f6788c7a6cfb9cb297f50c364b9"; }; buildInputs = [ qt4_for_qtcreator ]; From 45851fc39abb0172c8c16b66913e22344da8c3fb Mon Sep 17 00:00:00 2001 From: bbenoist Date: Mon, 30 Sep 2013 15:15:25 +0200 Subject: [PATCH 2/9] qtcreator: Make the qt package optional and introduce the QtSDK To give the ability to use a different Qt version than the default one (which can build 3 different times Qt Libraries if we mixed the default one, the qtcreator one and the version including all the examples and the docs). Right now a developer can choose to directly install the QtSDK which includes a "full" (developerBuild + docs + examples) Qt version and uses it to build QtCreator. The possibility to only install QtCreator and its previous behavior has been kept for flexibility purposes (we do not need to force someone on the SDK approach). --- .../libraries/qt-4.x/4.8/default.nix | 3 +++ pkgs/development/qtcreator/default.nix | 27 ++++++++++++------- pkgs/top-level/all-packages.nix | 12 +++++++-- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/pkgs/development/libraries/qt-4.x/4.8/default.nix b/pkgs/development/libraries/qt-4.x/4.8/default.nix index 59151d35326d..72e08d608d11 100644 --- a/pkgs/development/libraries/qt-4.x/4.8/default.nix +++ b/pkgs/development/libraries/qt-4.x/4.8/default.nix @@ -33,6 +33,9 @@ stdenv.mkDerivation rec { sha256 = "0f51dbgn1dcck8pqimls2qyf1pfmsmyknh767cvw87c3d218ywpb"; }; + # The version property must be kept because it will be included into the QtSDK package name + version = vers; + prePatch = '' substituteInPlace configure --replace /bin/pwd pwd substituteInPlace src/corelib/global/global.pri --replace /bin/ls ${coreutils}/bin/ls diff --git a/pkgs/development/qtcreator/default.nix b/pkgs/development/qtcreator/default.nix index 6cfe5efbe815..b12f81db9c4c 100644 --- a/pkgs/development/qtcreator/default.nix +++ b/pkgs/development/qtcreator/default.nix @@ -1,30 +1,39 @@ -{ stdenv, fetchurl, qt48 }: +{ stdenv, fetchurl, qtLib, sdkBuild ? false }: + +with stdenv.lib; let baseVersion = "2.8"; revision = "1"; version = "${baseVersion}.${revision}"; - qt4_for_qtcreator = qt48.override { - developerBuild = true; - }; in stdenv.mkDerivation rec { - name = "qtcreator-${version}"; + # The package name depends on wether we are just building the QtCreator package or the whole Qt SDK + # If we are building the QtCreator package: qtcreator-version + # If we are building the QtSDK package, the Qt version is also included: qtsdk-version-qt-version + name = "qt${if sdkBuild then "sdk" else "creator"}-${version}" + + optionalString sdkBuild "-qt-${qtLib.version}"; src = fetchurl { url = "http://download.qt-project.org/official_releases/qtcreator/${baseVersion}/${version}/qt-creator-${version}-src.tar.gz"; sha256 = "d5ae007a297a4288d0e95fd605edbfb8aee80f6788c7a6cfb9cb297f50c364b9"; }; - buildInputs = [ qt4_for_qtcreator ]; + # This property can be used in a nix development environment to refer to the Qt package + # eg: export QTDIR=${qtSDK.qt} + qt = qtLib; + + # We must only propagate Qt (including qmake) when building the QtSDK + propagatedBuildInputs = if sdkBuild then [ qtLib ] else []; + buildInputs = if sdkBuild == false then [ qtLib ] else []; doCheck = false; enableParallelBuilding = true; preConfigure = '' - qmake -spec linux-g++ "QT_PRIVATE_HEADERS=${qt4_for_qtcreator}/include" qtcreator.pro + qmake -spec linux-g++ "QT_PRIVATE_HEADERS=${qtLib}/include" qtcreator.pro ''; installFlags = "INSTALL_ROOT=$(out)"; @@ -38,7 +47,7 @@ stdenv.mkDerivation rec { ''; homepage = "http://qt-project.org/wiki/Category:Tools::QtCreator"; license = "LGPL"; - maintainers = [ stdenv.lib.maintainers.bbenoist ]; - platforms = stdenv.lib.platforms.all; + maintainers = [ maintainers.bbenoist ]; + platforms = platforms.all; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c6ce6f7efe67..7a6f6d40a88d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5438,6 +5438,16 @@ let docs = true; demos = true; examples = true; + developerBuild = true; + }; + + qt4SDK = qtcreator.override { + sdkBuild = true; + qtLib = qt48Full; + }; + + qtcreator = callPackage ../development/qtcreator { + qtLib = qt48.override { developerBuild = true; }; }; qtscriptgenerator = callPackage ../development/libraries/qtscriptgenerator { }; @@ -8511,8 +8521,6 @@ let qsynth = callPackage ../applications/audio/qsynth { }; - qtcreator = callPackage ../development/qtcreator { }; - qtpfsgui = callPackage ../applications/graphics/qtpfsgui { }; qtractor = callPackage ../applications/audio/qtractor { }; From 4edbaf9aa1e30cc2ebfb5f8c58b1b367c56ef7cf Mon Sep 17 00:00:00 2001 From: bbenoist Date: Mon, 30 Sep 2013 15:38:26 +0200 Subject: [PATCH 3/9] mesa: Minor fix on GL/gl.h Apply a fix which prevented to use -DGL_GLEXT_LEGACY, -Werror and -Wundef to be used together. This produced a build fail on any software meeting these requirements. --- pkgs/development/libraries/mesa/default.nix | 1 + pkgs/development/libraries/mesa/werror-wundef.patch | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 pkgs/development/libraries/mesa/werror-wundef.patch diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix index 4fa5ee9e74ae..483ea5a1fe44 100644 --- a/pkgs/development/libraries/mesa/default.nix +++ b/pkgs/development/libraries/mesa/default.nix @@ -41,6 +41,7 @@ stdenv.mkDerivation { ./static-gallium.patch ./dricore-gallium.patch ./fix-rounding.patch + ./werror-wundef.patch ]; # Change the search path for EGL drivers from $drivers/* to driverLink diff --git a/pkgs/development/libraries/mesa/werror-wundef.patch b/pkgs/development/libraries/mesa/werror-wundef.patch new file mode 100644 index 000000000000..4663f68bd7d3 --- /dev/null +++ b/pkgs/development/libraries/mesa/werror-wundef.patch @@ -0,0 +1,12 @@ +diff -rupN Mesa-9.2.0-orig/include/GL/gl.h Mesa-9.2.0/include/GL/gl.h +--- Mesa-9.2.0-orig/include/GL/gl.h 2013-08-14 03:34:42.000000000 +0200 ++++ Mesa-9.2.0/include/GL/gl.h 2013-09-24 19:34:58.319140812 +0200 +@@ -2088,7 +2088,7 @@ typedef void (APIENTRYP PFNGLMULTITEXCOO + + + +-#if GL_ARB_shader_objects ++#if defined(GL_ARB_shaders_objects) && GL_ARB_shader_objects + + #ifndef GL_MESA_shader_debug + #define GL_MESA_shader_debug 1 From 90872e2b6cef90f3039b65367f85a9be68cab1e7 Mon Sep 17 00:00:00 2001 From: bbenoist Date: Wed, 16 Oct 2013 20:07:18 +0200 Subject: [PATCH 4/9] Add Qt 5.1.1 and its SDK Consider this as a first step towards the integration of Qt5 into nixpkgs, it does not yet intends to replace Qt4 on every packages even if possible. My goal here is to have a first derivation in common between people who needs qt5 for development purposes. The derivation has been written from scratch but I took care to read at the version 4 to re-integrate some patches which are still compatible. However, I did not had enough time to test gtkStyle and flashplayerFix as I do not use any of them. Also, OSX users will have to do some extra work because I do not have any mac. Finally, as some configure flags have changed and in an hope to provide a clear package definition before it becomes mature, I voluntary added some flags which are default. Once every option will be mastered, we will just have to redo a pass on qt5 configure flags and remove the ones which are set by default. --- pkgs/development/libraries/qt-5/default.nix | 157 ++++++++++++++++++ .../qt-5/dlopen-absolute-paths.patch | 36 ++++ .../libraries/qt-5/dlopen-gtkstyle.patch | 36 ++++ .../qt-5/dlopen-webkit-nsplugin.patch | 36 ++++ .../libraries/qt-5/glib-2.32.patch | 12 ++ pkgs/top-level/all-packages.nix | 19 +++ 6 files changed, 296 insertions(+) create mode 100644 pkgs/development/libraries/qt-5/default.nix create mode 100644 pkgs/development/libraries/qt-5/dlopen-absolute-paths.patch create mode 100644 pkgs/development/libraries/qt-5/dlopen-gtkstyle.patch create mode 100644 pkgs/development/libraries/qt-5/dlopen-webkit-nsplugin.patch create mode 100644 pkgs/development/libraries/qt-5/glib-2.32.patch diff --git a/pkgs/development/libraries/qt-5/default.nix b/pkgs/development/libraries/qt-5/default.nix new file mode 100644 index 000000000000..e593200d1599 --- /dev/null +++ b/pkgs/development/libraries/qt-5/default.nix @@ -0,0 +1,157 @@ +{ stdenv, fetchurl, substituteAll, libXrender, libXext +, libXfixes, freetype, fontconfig, zlib, libjpeg, libpng +, mesaSupported, mesa, mesa_glu, openssl, dbus, cups, pkgconfig +, libtiff, glib, icu, mysql, postgresql, sqlite, perl, coreutils, libXi +, gdk_pixbuf, python, gdb, xlibs, libX11, libxcb, xcbutil, xcbutilimage +, xcbutilkeysyms, xcbutilwm,udev, libxml2, libxslt, pcre, libxkbcommon +, alsaLib, gstreamer, gst_plugins_base +, pulseaudio, bison, flex, gperf, ruby, libwebp +, flashplayerFix ? false +, gtkStyle ? false, libgnomeui, gtk, GConf, gnome_vfs +, buildDocs ? false +, buildExamples ? false +, buildTests ? true +, developerBuild ? false +}: + +with stdenv.lib; + +let + v_maj = "5.1"; + v_min = "1"; + ver = "${v_maj}.${v_min}"; +in + +stdenv.mkDerivation rec { + name = "qt-${ver}"; + + src = fetchurl { + url = "http://download.qt-project.org/official_releases/qt/" + + "${v_maj}/${ver}/single/qt-everywhere-opensource-src-${ver}.tar.gz"; + sha256 = "4c05742db52325e96b1d610a2388140dcc1e3d03d93faea2b2d3791015b186f6"; + }; + + # The version property must be kept because it will be included into the QtSDK package name + version = ver; + + 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 + sed -e 's@/\(usr\|opt\)/@/var/empty/@g' -i config.tests/*/*.test -i qtbase/mkspecs/*/*.conf + ''; + + patches = + [ ./glib-2.32.patch + (substituteAll { + src = ./dlopen-absolute-paths.patch; + inherit cups icu libXfixes; + glibc = stdenv.gcc.libc; + openglDriver = if mesaSupported then mesa.driverLink else "/no-such-path"; + }) + ] ++ optional gtkStyle (substituteAll { + src = ./dlopen-gtkstyle.patch; + # substituteAll ignores env vars starting with capital letter + gconf = GConf; + inherit gnome_vfs libgnomeui gtk; + }) + ++ optional flashplayerFix (substituteAll { + src = ./dlopen-webkit-nsplugin.patch; + inherit gtk gdk_pixbuf; + }); + + preConfigure = '' + export LD_LIBRARY_PATH="$PWD/qtbase/lib:$PWD/qtbase/plugins/platforms:$PWD/qttools/lib:$LD_LIBRARY_PATH" + export MAKEFLAGS=-j$NIX_BUILD_CORES + ''; + + 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 + -force-debug-info + -no-separate-debug-info + -system-proxies + + -gui + -widgets + -opengl desktop + -javascript-jit + -qml-debug + -nis + -iconv + -icu + -pch + -glib + -xcb + -qpa xcb + -${optionalString (cups == null) "no-"}cups + + -no-eglfs + -no-directfb + -no-linuxfb + -no-kms + + -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 + ''; + + propagatedBuildInputs = [ + xlibs.libXcomposite libX11 libxcb libXext libXrender libXi + fontconfig freetype openssl dbus.libs glib udev libxml2 libxslt pcre + zlib libjpeg libpng libtiff sqlite icu + libwebp alsaLib gstreamer gst_plugins_base pulseaudio + 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 + ++ optional (postgresql != null) postgresql; + + buildInputs = [ gdb bison flex gperf ruby ]; + + nativeBuildInputs = [ python perl pkgconfig ]; + + postInstall = if buildDocs then "make docs&&make install_docs" else ""; + + enableParallelBuilding = true; + + meta = { + homepage = http://qt-project.org; + description = "A cross-platform application framework for C++"; + license = "GPL/LGPL"; + maintainers = [ maintainers.bbenoist ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/development/libraries/qt-5/dlopen-absolute-paths.patch b/pkgs/development/libraries/qt-5/dlopen-absolute-paths.patch new file mode 100644 index 000000000000..65b817a2b141 --- /dev/null +++ b/pkgs/development/libraries/qt-5/dlopen-absolute-paths.patch @@ -0,0 +1,36 @@ +diff -ruN qt-everywhere-opensource-src-5.1.1-orig/qtbase/src/network/kernel/qhostinfo_unix.cpp qt-everywhere-opensource-src-5.1.1/qtbase/src/network/kernel/qhostinfo_unix.cpp +--- qt-everywhere-opensource-src-5.1.1-orig/qtbase/src/network/kernel/qhostinfo_unix.cpp 2013-08-25 20:03:35.000000000 +0200 ++++ qt-everywhere-opensource-src-5.1.1/qtbase/src/network/kernel/qhostinfo_unix.cpp 2013-09-25 17:43:14.047015411 +0200 +@@ -93,7 +93,7 @@ + static void resolveLibrary() + { + #if !defined(QT_NO_LIBRARY) && !defined(Q_OS_QNX) +- QLibrary lib(QLatin1String("resolv")); ++ QLibrary lib(QLatin1String("@glibc@/lib/libresolv")); + if (!lib.load()) + return; + +diff -ruN qt-everywhere-opensource-src-5.1.1-orig/qtbase/src/plugins/platforms/xcb/qglxintegration.cpp qt-everywhere-opensource-src-5.1.1/qtbase/src/plugins/platforms/xcb/qglxintegration.cpp +--- qt-everywhere-opensource-src-5.1.1-orig/qtbase/src/plugins/platforms/xcb/qglxintegration.cpp 2013-08-25 20:03:35.000000000 +0200 ++++ qt-everywhere-opensource-src-5.1.1/qtbase/src/plugins/platforms/xcb/qglxintegration.cpp 2013-09-25 17:51:29.834674976 +0200 +@@ -379,7 +379,7 @@ + { + 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"); + } + } +diff -ruN qt-everywhere-opensource-src-5.1.1-orig/qtbase/src/printsupport/kernel/qcups.cpp qt-everywhere-opensource-src-5.1.1/qtbase/src/printsupport/kernel/qcups.cpp +--- qt-everywhere-opensource-src-5.1.1-orig/qtbase/src/printsupport/kernel/qcups.cpp 2013-08-25 20:03:36.000000000 +0200 ++++ qt-everywhere-opensource-src-5.1.1/qtbase/src/printsupport/kernel/qcups.cpp 2013-09-25 17:40:35.895942599 +0200 +@@ -91,7 +91,7 @@ + + static void resolveCups() + { +- QLibrary cupsLib(QLatin1String("cups"), 2); ++ QLibrary cupsLib(QLatin1String("@cups@/lib/libcups"), 2); + if(cupsLib.load()) { + _cupsGetDests = (CupsGetDests) cupsLib.resolve("cupsGetDests"); + _cupsFreeDests = (CupsFreeDests) cupsLib.resolve("cupsFreeDests"); diff --git a/pkgs/development/libraries/qt-5/dlopen-gtkstyle.patch b/pkgs/development/libraries/qt-5/dlopen-gtkstyle.patch new file mode 100644 index 000000000000..05ff30b7ac33 --- /dev/null +++ b/pkgs/development/libraries/qt-5/dlopen-gtkstyle.patch @@ -0,0 +1,36 @@ +diff -ruN qt-everywhere-opensource-src-5.1.1-orig/qtbase/src/widgets/styles/qgtkstyle_p.cpp qt-everywhere-opensource-src-5.1.1/qtbase/src/widgets/styles/qgtkstyle_p.cpp +--- qt-everywhere-opensource-src-5.1.1-orig/qtbase/src/widgets/styles/qgtkstyle_p.cpp 2013-08-25 20:03:30.000000000 +0200 ++++ qt-everywhere-opensource-src-5.1.1/qtbase/src/widgets/styles/qgtkstyle_p.cpp 2013-09-25 17:58:04.229373681 +0200 +@@ -348,7 +348,7 @@ + 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"); +@@ -461,8 +461,8 @@ + 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 +@@ -630,9 +630,9 @@ + 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); + } diff --git a/pkgs/development/libraries/qt-5/dlopen-webkit-nsplugin.patch b/pkgs/development/libraries/qt-5/dlopen-webkit-nsplugin.patch new file mode 100644 index 000000000000..7cd90551454f --- /dev/null +++ b/pkgs/development/libraries/qt-5/dlopen-webkit-nsplugin.patch @@ -0,0 +1,36 @@ +diff -ruN qt-everywhere-opensource-src-5.1.1-orig/qtwebkit/Source/WebCore/plugins/qt/PluginPackageQt.cpp qt-everywhere-opensource-src-5.1.1/qtwebkit/Source/WebCore/plugins/qt/PluginPackageQt.cpp +--- qt-everywhere-opensource-src-5.1.1-orig/qtwebkit/Source/WebCore/plugins/qt/PluginPackageQt.cpp 2013-08-25 20:04:47.000000000 +0200 ++++ qt-everywhere-opensource-src-5.1.1/qtwebkit/Source/WebCore/plugins/qt/PluginPackageQt.cpp 2013-09-25 17:59:45.925363807 +0200 +@@ -132,7 +132,7 @@ + } + } + +- 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 -ruN qt-everywhere-opensource-src-5.1.1-orig/qtwebkit/Source/WebCore/plugins/qt/PluginViewQt.cpp qt-everywhere-opensource-src-5.1.1/qtwebkit/Source/WebCore/plugins/qt/PluginViewQt.cpp +--- qt-everywhere-opensource-src-5.1.1-orig/qtwebkit/Source/WebCore/plugins/qt/PluginViewQt.cpp 2013-08-25 20:04:47.000000000 +0200 ++++ qt-everywhere-opensource-src-5.1.1/qtwebkit/Source/WebCore/plugins/qt/PluginViewQt.cpp 2013-09-25 18:00:29.551215155 +0200 +@@ -702,7 +702,7 @@ + // 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 -ruN qt-everywhere-opensource-src-5.1.1-orig/qtwebkit/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp qt-everywhere-opensource-src-5.1.1/qtwebkit/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp +--- qt-everywhere-opensource-src-5.1.1-orig/qtwebkit/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp 2013-08-25 20:04:42.000000000 +0200 ++++ qt-everywhere-opensource-src-5.1.1/qtwebkit/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp 2013-09-25 18:04:54.955408293 +0200 +@@ -64,7 +64,7 @@ + // 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; + diff --git a/pkgs/development/libraries/qt-5/glib-2.32.patch b/pkgs/development/libraries/qt-5/glib-2.32.patch new file mode 100644 index 000000000000..eb71e79d1472 --- /dev/null +++ b/pkgs/development/libraries/qt-5/glib-2.32.patch @@ -0,0 +1,12 @@ +diff -ruN qt-everywhere-opensource-src-5.1.1-orig/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.h qt-everywhere-opensource-src-5.1.1/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.h +--- qt-everywhere-opensource-src-5.1.1-orig/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.h 2013-08-25 20:04:35.000000000 +0200 ++++ qt-everywhere-opensource-src-5.1.1/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.h 2013-09-25 18:09:22.154639482 +0200 +@@ -81,7 +81,7 @@ + #include + #elif PLATFORM(GTK) + #include +-typedef struct _GMutex GMutex; ++typedef union _GMutex GMutex; + typedef struct _GCond GCond; + #endif + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7a6f6d40a88d..f98604fdc87f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5446,6 +5446,25 @@ let qtLib = qt48Full; }; + qt5 = callPackage ../development/libraries/qt-5 { + mesa = mesa_noglu; + cups = if stdenv.isLinux then cups else null; + # GNOME dependencies are not used unless gtkStyle == true + inherit (gnome) libgnomeui GConf gnome_vfs; + }; + + qt5Full = qt5.override { + buildDocs = true; + buildExamples = true; + buildTests = true; + developerBuild = true; + }; + + qt5SDK = qtcreator.override { + sdkBuild = true; + qtLib = qt5Full; + }; + qtcreator = callPackage ../development/qtcreator { qtLib = qt48.override { developerBuild = true; }; }; From 736b295bc56199280bbe35c9822a7c473c44f909 Mon Sep 17 00:00:00 2001 From: Baptist BENOIST Date: Mon, 28 Oct 2013 09:56:19 +0100 Subject: [PATCH 5/9] vtk: Use the Qt libraries as an argument instead of a boolean To prevent multiple Qt libraries when developing with a custom one, the Qt support can now be activated by directly supplying the Qt libraries as an argument (qtLib). qtSDK and qtFull users/developers now just have to define an override such as the following one in order to use it inside their development environment: vtk.override { qtLib = qt4SDK; }; The previous behavior is still the same for vtk and vtkWithQt4 end-users. Change-Id: I517762d4ff7de46d32cc46e6e725fd62737caa52 --- pkgs/development/libraries/vtk/default.nix | 10 +++++----- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkgs/development/libraries/vtk/default.nix b/pkgs/development/libraries/vtk/default.nix index e8f42e9f7f5f..0e0625a2cbbe 100644 --- a/pkgs/development/libraries/vtk/default.nix +++ b/pkgs/development/libraries/vtk/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl, cmake, mesa, libX11, xproto, libXt -, useQt4 ? false, qt4 }: +, qtLib ? null }: with stdenv.lib; @@ -11,22 +11,22 @@ let in stdenv.mkDerivation rec { - name = "vtk-${os useQt4 "qvtk-"}${version}"; + name = "vtk-${os (qtLib != null) "qvtk-"}${version}"; src = fetchurl { url = "${meta.homepage}files/release/${majorVersion}/vtk-${version}.tar.gz"; md5 = "a0363f78910f466ba8f1bd5ab5437cb9"; }; buildInputs = [ cmake mesa libX11 xproto libXt ] - ++ optional useQt4 qt4; + ++ optional (qtLib != null) qtLib; # Shared libraries don't work, because of rpath troubles with the current # nixpkgs camke approach. It wants to call a binary at build time, just # built and requiring one of the shared objects. # At least, we use -fPIC for other packages to be able to use this in shared # objects. - cmakeFlags = [ "-DCMAKE_C_FLAGS=-fPIC" "-DCMAKE_CXX_FLAGS=-fPIC" ] ++ optional useQt4 - [ "-DVTK_USE_QT:BOOL=ON" ]; + cmakeFlags = [ "-DCMAKE_C_FLAGS=-fPIC" "-DCMAKE_CXX_FLAGS=-fPIC" ] + ++ optional (qtLib != null) [ "-DVTK_USE_QT:BOOL=ON" ]; enableParallelBuilding = true; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f98604fdc87f..13b6dff2432b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5731,7 +5731,7 @@ let vtk = callPackage ../development/libraries/vtk { }; - vtkWithQt4 = vtk.override { useQt4 = true; }; + vtkWithQt4 = vtk.override { qtLib = qt4; }; vxl = callPackage ../development/libraries/vxl { libpng = libpng12; From 6fda96ba105d0d128ea122f2a400e831d484c2eb Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 24 Oct 2013 15:17:37 +0200 Subject: [PATCH 6/9] Set the channel for this release --- nixos/modules/misc/version.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/modules/misc/version.nix b/nixos/modules/misc/version.nix index 2fa95563e9ab..4b0a2d2f947f 100644 --- a/nixos/modules/misc/version.nix +++ b/nixos/modules/misc/version.nix @@ -33,7 +33,7 @@ with pkgs.lib; system.defaultChannel = mkOption { internal = true; type = types.str; - default = https://nixos.org/channels/nixos-unstable; + default = https://nixos.org/channels/nixos-13.10; description = "Default NixOS channel to which the root user is subscribed."; }; From 2a9bdac39aa17516495a82441f018712d0ad4eb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Sat, 5 Oct 2013 20:41:40 +0200 Subject: [PATCH 7/9] gtk2: minor update .20 -> .22 --- pkgs/development/libraries/gtk+/2.x.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/gtk+/2.x.nix b/pkgs/development/libraries/gtk+/2.x.nix index 92463d80c2bd..fdc2c675847f 100644 --- a/pkgs/development/libraries/gtk+/2.x.nix +++ b/pkgs/development/libraries/gtk+/2.x.nix @@ -8,11 +8,11 @@ assert xineramaSupport -> xlibs.libXinerama != null; assert cupsSupport -> cups != null; stdenv.mkDerivation rec { - name = "gtk+-2.24.20"; + name = "gtk+-2.24.22"; src = fetchurl { url = "mirror://gnome/sources/gtk+/2.24/${name}.tar.xz"; - sha256 = "18qdvb7nxi25hfnpmcy01p3majw9jnx83ikm263dk9rrjazvqrnc"; + sha256 = "0zxf810znlk80j230rbr0xscx3gm71jmf2bdiamg76rqzglvc55i"; }; enableParallelBuilding = true; From 61528849e3020e9bfdd152b569a0e8302748bbb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Sat, 26 Oct 2013 15:19:39 +0200 Subject: [PATCH 8/9] mesa: bugfix update 9.1.6 -> .7 Thist is just for master before the official release, x-updates has 9.2.* already. --- pkgs/development/libraries/mesa/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix index 4fa5ee9e74ae..6a0ae2cf61e7 100644 --- a/pkgs/development/libraries/mesa/default.nix +++ b/pkgs/development/libraries/mesa/default.nix @@ -23,7 +23,7 @@ else */ let - version = "9.1.6"; + version = "9.1.7"; # this is the default search path for DRI drivers (note: X server introduces an overriding env var) driverLink = "/run/opengl-driver" + stdenv.lib.optionalString stdenv.isi686 "-32"; in @@ -32,7 +32,7 @@ stdenv.mkDerivation { src = fetchurl { url = "ftp://ftp.freedesktop.org/pub/mesa/${version}/MesaLib-${version}.tar.bz2"; - sha256 = "0gay00fy84hrnp25hpacz5cbvxrpvgg1d390vichmbdgmkqdycp6"; + sha256 = "1824p185ys7z9bah46xasp7khv44n9wv2c4p38i1dispniwbirih"; }; prePatch = "patchShebangs ."; From 8d14c7baa6b293b3b48741b203400116ed9882ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Sat, 9 Nov 2013 16:29:18 +0100 Subject: [PATCH 9/9] polkit: major update 0.105 -> 0.112 - It now uses JavaScript for configuration (only), so I had to "convert" config for NetworkManager. - I tested suspend/restart/(un)mount on KDE/Xfce, Phreedom tested NetworkManager config conversion. --- nixos/modules/misc/ids.nix | 2 +- nixos/modules/security/polkit.nix | 77 ++++++++----------- .../services/networking/networkmanager.nix | 15 +++- .../interpreters/spidermonkey/185-1.0.0.nix | 6 +- pkgs/development/libraries/polkit/default.nix | 54 +++++++------ pkgs/top-level/all-packages.nix | 4 +- 6 files changed, 81 insertions(+), 77 deletions(-) diff --git a/nixos/modules/misc/ids.nix b/nixos/modules/misc/ids.nix index e3edc9dda6b6..29a29834e973 100644 --- a/nixos/modules/misc/ids.nix +++ b/nixos/modules/misc/ids.nix @@ -140,7 +140,7 @@ tape = 25; video = 26; dialout = 27; - polkituser = 28; + #polkituser = 28; # currently unused, polkitd doesn't need a group utmp = 29; davfs2 = 31; privoxy = 32; diff --git a/nixos/modules/security/polkit.nix b/nixos/modules/security/polkit.nix index cafa9f82d5e4..940e87e0b024 100644 --- a/nixos/modules/security/polkit.nix +++ b/nixos/modules/security/polkit.nix @@ -18,35 +18,17 @@ in description = "Whether to enable PolKit."; }; - security.polkit.permissions = mkOption { + security.polkit.extraConfig = mkOption { type = types.lines; default = ""; example = '' - [Disallow Users To Suspend] - Identity=unix-group:users - Action=org.freedesktop.upower.* - ResultAny=no - ResultInactive=no - ResultActive=no - - [Allow Anybody To Eject Disks] - Identity=unix-user:* - Action=org.freedesktop.udisks.drive-eject - ResultAny=yes - ResultInactive=yes - ResultActive=yes - - [Allow Alice To Mount Filesystems After Admin Authentication] - Identity=unix-user:alice - Action=org.freedesktop.udisks.filesystem-mount - ResultAny=auth_admin - ResultInactive=auth_admin - ResultActive=auth_admin + TODO ''; description = '' - Allows the default permissions of privileged actions to be overridden. + Any polkit rules to be added to config (in JavaScript ;-). See: + http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html#polkit-rules ''; }; @@ -71,29 +53,23 @@ in environment.systemPackages = [ pkgs.polkit ]; - # The polkit daemon reads action files - environment.pathsToLink = [ "/share/polkit-1/actions" ]; + systemd.packages = [ pkgs.polkit ]; - environment.etc = - [ # No idea what the "null backend" is, but it seems to need this. - { source = "${pkgs.polkit}/etc/polkit-1/nullbackend.conf.d"; - target = "polkit-1/nullbackend.conf.d"; - } + # The polkit daemon reads action/rule files + environment.pathsToLink = [ "/share/polkit-1" ]; - # This file determines what users are considered - # "administrators". - { source = pkgs.writeText "10-nixos.conf" - '' - [Configuration] - AdminIdentities=${cfg.adminIdentities} - ''; - target = "polkit-1/localauthority.conf.d/10-nixos.conf"; - } + # PolKit rules for NixOS + environment.etc = [ { + source = pkgs.writeText "10-nixos.conf" + '' + polkit.addAdminRule(function(action, subject) { + return ["${cfg.adminIdentities}"]; + }); - { source = pkgs.writeText "org.nixos.pkla" cfg.permissions; - target = "polkit-1/localauthority/10-vendor.d/org.nixos.pkla"; - } - ]; + ${cfg.extraConfig} + ''; #TODO: validation on compilation (at least against typos) + target = "polkit-1/rules.d/10-nixos.conf"; + } ]; services.dbus.packages = [ pkgs.polkit ]; @@ -101,24 +77,31 @@ in security.setuidPrograms = [ "pkexec" ]; - security.setuidOwners = singleton + security.setuidOwners = [ { program = "polkit-agent-helper-1"; owner = "root"; group = "root"; setuid = true; - source = "${pkgs.polkit}/libexec/polkit-1/polkit-agent-helper-1"; - }; + source = "${pkgs.polkit}/lib/polkit-1/polkit-agent-helper-1"; + } + ]; system.activationScripts.polkit = '' - mkdir -p /var/lib/polkit-1/localauthority - chmod 700 /var/lib/polkit-1{/localauthority,} + # Probably no more needed, clean up + rm -rf /var/lib/{polkit-1,PolicyKit} # Force polkitd to be restarted so that it reloads its # configuration. ${pkgs.procps}/bin/pkill -INT -u root -x polkitd ''; + users.extraUsers.polkituser = { + description = "PolKit daemon"; + uid = config.ids.uids.polkituser; + }; + }; } + diff --git a/nixos/modules/services/networking/networkmanager.nix b/nixos/modules/services/networking/networkmanager.nix index ad6f9858aaf6..2e8d17d872d2 100644 --- a/nixos/modules/services/networking/networkmanager.nix +++ b/nixos/modules/services/networking/networkmanager.nix @@ -21,7 +21,7 @@ let level=WARN ''; - polkitConf = '' + /* [network-manager] Identity=unix-group:networkmanager Action=org.freedesktop.NetworkManager.* @@ -35,6 +35,17 @@ let ResultAny=yes ResultInactive=no ResultActive=yes + */ + polkitConf = '' + polkit.addRule(function(action, subject) { + if ( + subject.isInGroup("networkmanager") + && subject.active + && (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 + || action.id.indexOf("org.freedesktop.ModemManager.") == 0 + )) + { return polkit.Result.YES; } + }); ''; ipUpScript = writeScript "01nixos-ip-up" '' @@ -179,7 +190,7 @@ in { systemctl restart NetworkManager ''; - security.polkit.permissions = polkitConf; + security.polkit.extraConfig = polkitConf; # openvpn plugin has only dbus interface services.dbus.packages = cfg.packages ++ [ diff --git a/pkgs/development/interpreters/spidermonkey/185-1.0.0.nix b/pkgs/development/interpreters/spidermonkey/185-1.0.0.nix index 55e0dada71e0..1c0d77345b73 100644 --- a/pkgs/development/interpreters/spidermonkey/185-1.0.0.nix +++ b/pkgs/development/interpreters/spidermonkey/185-1.0.0.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, autoconf213, nspr, perl, python, readline, zip }: +{ stdenv, fetchurl, pkgconfig, autoconf213, nspr, perl, python, readline, zip }: stdenv.mkDerivation rec { version = "185-1.0.0"; @@ -9,7 +9,9 @@ stdenv.mkDerivation rec { sha256 = "5d12f7e1f5b4a99436685d97b9b7b75f094d33580227aa998c406bbae6f2a687"; }; - buildInputs = [ autoconf213 nspr perl python readline zip ]; + propagatedBuildInputs = [ nspr ]; + + buildInputs = [ pkgconfig autoconf213 perl python readline zip ]; postUnpack = "sourceRoot=\${sourceRoot}/js/src"; diff --git a/pkgs/development/libraries/polkit/default.nix b/pkgs/development/libraries/polkit/default.nix index 9d1f0d18c1ad..821e66ea0b30 100644 --- a/pkgs/development/libraries/polkit/default.nix +++ b/pkgs/development/libraries/polkit/default.nix @@ -1,48 +1,59 @@ -{ stdenv, fetchurl, pkgconfig, glib, expat, pam, intltool, gettext -, gobjectIntrospection +{ stdenv, fetchurl, pkgconfig, glib, expat, pam, intltool, spidermonkey +, gobjectIntrospection, libxslt, docbook_xsl , useSystemd ? stdenv.isLinux, systemd }: let system = "/var/run/current-system/sw"; + setuid = "/var/setuid-wrappers"; #TODO: from config.security.wrapperDir; foolVars = { - LOCALSTATE = "/var"; SYSCONF = "/etc"; - LIB = "${system}/lib"; - DATA = "${system}/share"; + DATA = "${system}/share"; # to find share/polkit-1/actions of other apps at runtime }; in stdenv.mkDerivation rec { - name = "polkit-0.105"; + name = "polkit-0.112"; src = fetchurl { url = "http://www.freedesktop.org/software/polkit/releases/${name}.tar.gz"; - sha256 = "1pz1hn4z0f1wk4f7w8q1g6ygwan1b6kxmfad3b7gql27pb47rp4g"; + sha256 = "1xkary7yirdcjdva950nqyhmsz48qhrdsr78zciahj27p8yg95fn"; }; buildInputs = - [ pkgconfig glib expat pam intltool gobjectIntrospection ] + [ pkgconfig glib expat pam intltool spidermonkey gobjectIntrospection ] + ++ [ libxslt docbook_xsl ] # man pages ++ stdenv.lib.optional useSystemd systemd; - configureFlags = "--libexecdir=$(out)/libexec/polkit-1"; - # Ugly hack to overwrite hardcoded directories # TODO: investigate a proper patch which will be accepted upstream + # After update it's good to check the sources via: + # grep '\ config.ids.uids.polkituser + "--with-os-type=NixOS" # not recognized but prevents impurities on non-NixOS + ]; makeFlags = '' @@ -50,12 +61,7 @@ stdenv.mkDerivation rec { INTROSPECTION_TYPELIBDIR=$(out)lib/girepository-1.0 ''; - postInstall = - '' - # Allow some files with paranoid permissions to be stripped in - # the fixup phase. - chmod a+rX -R $out - ''; + #doCheck = true; # some /bin/bash problem that isn't auto-solved by patchShebangs meta = with stdenv.lib; { homepage = http://www.freedesktop.org/wiki/Software/polkit; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b5737918cff8..9a4118098a5f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5400,7 +5400,9 @@ let podofo = callPackage ../development/libraries/podofo { }; - polkit = callPackage ../development/libraries/polkit { }; + polkit = callPackage ../development/libraries/polkit { + spidermonkey = spidermonkey_185; + }; polkit_qt_1 = callPackage ../development/libraries/polkit-qt-1 { };