From 36e31d5aadf75a958dc5c57f98879d6698cd6b4b Mon Sep 17 00:00:00 2001 From: bbenoist Date: Mon, 30 Sep 2013 15:00:41 +0200 Subject: [PATCH 01/13] 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 55e33c45ca9..6cfe5efbe81 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 02/13] 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 59151d35326..72e08d608d1 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 6cfe5efbe81..b12f81db9c4 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 c6ce6f7efe6..7a6f6d40a88 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 03/13] 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 4fa5ee9e74a..483ea5a1fe4 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 00000000000..4663f68bd7d --- /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 04/13] 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 00000000000..e593200d159 --- /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 00000000000..65b817a2b14 --- /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 00000000000..05ff30b7ac3 --- /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 00000000000..7cd90551454 --- /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 00000000000..eb71e79d147 --- /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 7a6f6d40a88..f98604fdc87 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 05/13] 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 e8f42e9f7f5..0e0625a2cbb 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 f98604fdc87..13b6dff2432 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 06/13] 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 2fa95563e9a..4b0a2d2f947 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 cf568b6883784b18d51de5d11fd43b2fa8142878 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 07/13] 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 92463d80c2b..fdc2c675847 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 23f495689e73308d1826ee49acfa65a089889703 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 08/13] 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 4fa5ee9e74a..6a0ae2cf61e 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 4a96c8cf6aae464c5ec4a92cb8113c24060f8fed Mon Sep 17 00:00:00 2001 From: Marc Weber Date: Fri, 20 Sep 2013 21:36:17 +0200 Subject: [PATCH 09/13] gnome-autogen.sh: make check_m4macros aware of ACLOCAL_PATH --- pkgs/desktops/gnome-2/platform/gnome-common/default.nix | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkgs/desktops/gnome-2/platform/gnome-common/default.nix b/pkgs/desktops/gnome-2/platform/gnome-common/default.nix index 548783abf79..929ed44b752 100644 --- a/pkgs/desktops/gnome-2/platform/gnome-common/default.nix +++ b/pkgs/desktops/gnome-2/platform/gnome-common/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl_gnome }: +{ stdenv, fetchurl, fetchurl_gnome, which }: stdenv.mkDerivation rec { name = src.pkgname; @@ -8,4 +8,11 @@ stdenv.mkDerivation rec { major = "2"; minor = "34"; patchlevel = "0"; sha256 = "1pz13mpp09q5s3bikm8ml92s1g0scihsm4iipqv1ql3mp6d4z73s"; }; + + propagatedBuildInputs = [ which ]; # autogen.sh which is using gnome_common tends to require which + + patches = [(fetchurl { + url = "https://bug697543.bugzilla-attachments.gnome.org/attachment.cgi?id=240935"; + sha256 = "17abp7czfzirjm7qsn2czd03hdv9kbyhk3lkjxg2xsf5fky7z7jl"; + })]; } From f9fb7b7457e636f4f7edff866cee1c1812aa9501 Mon Sep 17 00:00:00 2001 From: Jack Cummings Date: Tue, 8 Oct 2013 22:34:05 -0700 Subject: [PATCH 10/13] new systemd can't inhibit lid switches Conflicts (repos merge): modules/services/x11/display-managers/default.nix --- .../modules/services/x11/display-managers/default.nix | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/nixos/modules/services/x11/display-managers/default.nix b/nixos/modules/services/x11/display-managers/default.nix index c4fce3706dc..bb86786f0f2 100644 --- a/nixos/modules/services/x11/display-managers/default.nix +++ b/nixos/modules/services/x11/display-managers/default.nix @@ -39,16 +39,6 @@ let exec > ~/.xsession-errors 2>&1 ''} - ${optionalString cfg.displayManager.desktopManagerHandlesLidAndPower '' - # Stop systemd from handling the power button and lid switch, - # since presumably the desktop environment will handle these. - if [ -z "$_INHIBITION_LOCK_TAKEN" ]; then - export _INHIBITION_LOCK_TAKEN=1 - exec ${config.systemd.package}/bin/systemd-inhibit --what=handle-lid-switch:handle-power-key "$0" "$sessionType" - fi - - ''} - ${optionalString cfg.startOpenSSHAgent '' if test -z "$SSH_AUTH_SOCK"; then # Restart this script as a child of the SSH agent. (It is From e790d27543ba9bd8fa89345b20094081451362e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Fri, 1 Nov 2013 10:54:29 +0100 Subject: [PATCH 11/13] polkit WIP: TESTED OK, only missing NM config testing/tweaking History: 7a29bd02 7cd5ff085 --- nixos/modules/security/polkit.nix | 73 +++++++------------ .../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 +- 5 files changed, 75 insertions(+), 77 deletions(-) diff --git a/nixos/modules/security/polkit.nix b/nixos/modules/security/polkit.nix index cafa9f82d5e..e3cca533e54 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,25 @@ 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 ''; - }; } + diff --git a/nixos/modules/services/networking/networkmanager.nix b/nixos/modules/services/networking/networkmanager.nix index ad6f9858aaf..1ed4e20b9a5 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,16 @@ let ResultAny=yes ResultInactive=no ResultActive=yes + */ + polkitConf = '' + polkit.addRule(function(action, subject) { + if ( + subject.isInGroup("networkmanager") + && (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 + || action.id.indexOf("org.freedesktop.ModemManager.") == 0 + )) + { return polkit.Result.YES; } #TODO: active/inactive + }); ''; ipUpScript = writeScript "01nixos-ip-up" '' @@ -179,7 +189,8 @@ in { systemctl restart NetworkManager ''; - security.polkit.permissions = polkitConf; + #TODO + #security.polkit.permissions = 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 55e0dada71e..1c0d77345b7 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 9d1f0d18c1a..821e66ea0b3 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 b5737918cff..9a4118098a5 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 { }; From cd49dfd335104a84aeeda2826af8ccfd41b2a5b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Sat, 2 Nov 2013 07:37:33 +0100 Subject: [PATCH 12/13] polkit WIP: resurrect the forgotten polkituser It needs no group anymore. I hope it won't clash with leftovers from previous usage of the user. --- nixos/modules/misc/ids.nix | 2 +- nixos/modules/security/polkit.nix | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/nixos/modules/misc/ids.nix b/nixos/modules/misc/ids.nix index e3edc9dda6b..29a29834e97 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 e3cca533e54..940e87e0b02 100644 --- a/nixos/modules/security/polkit.nix +++ b/nixos/modules/security/polkit.nix @@ -95,6 +95,12 @@ in # configuration. ${pkgs.procps}/bin/pkill -INT -u root -x polkitd ''; + + users.extraUsers.polkituser = { + description = "PolKit daemon"; + uid = config.ids.uids.polkituser; + }; + }; } From 1c0fdf2309fec2c1734cffdf5cdfd8f15c99cbff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Sat, 2 Nov 2013 12:59:47 +0100 Subject: [PATCH 13/13] polkit WIP: enable forgotten config for NetworkManager and only authorize "active" sessions. --- nixos/modules/services/networking/networkmanager.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nixos/modules/services/networking/networkmanager.nix b/nixos/modules/services/networking/networkmanager.nix index 1ed4e20b9a5..2e8d17d872d 100644 --- a/nixos/modules/services/networking/networkmanager.nix +++ b/nixos/modules/services/networking/networkmanager.nix @@ -40,10 +40,11 @@ let 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; } #TODO: active/inactive + { return polkit.Result.YES; } }); ''; @@ -189,8 +190,7 @@ in { systemctl restart NetworkManager ''; - #TODO - #security.polkit.permissions = polkitConf; + security.polkit.extraConfig = polkitConf; # openvpn plugin has only dbus interface services.dbus.packages = cfg.packages ++ [