Added experimental native consolekit support via -r7, and removed old -r5 ebuild...
authorIan Stakenvicius <axs@gentoo.org>
Wed, 14 Dec 2011 20:23:55 +0000 (20:23 +0000)
committerIan Stakenvicius <axs@gentoo.org>
Wed, 14 Dec 2011 20:23:55 +0000 (20:23 +0000)
Package-Manager: portage-2.1.10.11/cvs/Linux i686

x11-misc/slim/ChangeLog
x11-misc/slim/Manifest
x11-misc/slim/files/Xsession-r3 [new file with mode: 0644]
x11-misc/slim/files/slim-1.3.2-ck.patch [new file with mode: 0644]
x11-misc/slim/metadata.xml
x11-misc/slim/slim-1.3.2-r7.ebuild [moved from x11-misc/slim/slim-1.3.2-r5.ebuild with 77% similarity]

index 78a17a254c0772da95920f50eb1b7998059a59b8..92a9748f10827c342c880f321d772f6fff3302d4 100644 (file)
@@ -1,6 +1,14 @@
 # ChangeLog for x11-misc/slim
 # Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/x11-misc/slim/ChangeLog,v 1.73 2011/10/13 21:49:05 phajdan.jr Exp $
+# $Header: /var/cvsroot/gentoo-x86/x11-misc/slim/ChangeLog,v 1.74 2011/12/14 20:23:55 axs Exp $
+
+*slim-1.3.2-r7 (14 Dec 2011)
+
+  14 Dec 2011; Ian Stakenvicius <axs@gentoo.org> -slim-1.3.2-r5.ebuild,
+  +slim-1.3.2-r7.ebuild, +files/slim-1.3.2-ck.patch, +files/Xsession-r3,
+  metadata.xml:
+  Added experimental native consolekit support via -r7, and removed old -r5
+  ebuild as -r6 is stable on some archs
 
   13 Oct 2011; Pawel Hajdan jr <phajdan.jr@gentoo.org> slim-1.3.2-r6.ebuild:
   x86 stable wrt bug #386813
index b6fa15b859af57d16639bcf6f59d099a83afd6a1..3ab7af01cb89331d794b542b4a8c918ab573fdb8 100644 (file)
@@ -1,5 +1,5 @@
 -----BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA512
+Hash: SHA256
 
 AUX 14509-fix-keyboard-in-tty-from-which-slim-is-lauched.patch 754 RMD160 079984153eb6ca97dafc94b065aeff6c57cf19ee SHA1 25fc499e10133c5325823453202aefdf828c3c21 SHA256 72995a16600174994864b9af959659d321c1fc6aa093650ed0b95b6760d91a13
 AUX 15287-fix-pam-authentication-with-pam_unix2.patch 3017 RMD160 ae6a20b9eb313bd6b9f93726d5519309a2bafc85 SHA1 e17c582fe0cc1d2a07e51d410db2d61c11aba4c6 SHA256 ced3b92f48ba09cd61287b72737ea58e499a7eedd4f61e25ee1b148d0b6cfbb3
@@ -9,21 +9,23 @@ AUX 261713-restart-xserver-if-killed.patch 3198 RMD160 97b6627b17f74a6fb88a967fe
 AUX 346037-stop_setting_host_for_pam_ck_connector_so.patch 328 RMD160 62012df3cccf607d8cba139b0754a7238bfb1dd3 SHA1 04f26bc3ad82dab47c8911f3ac069b756fe5a1a8 SHA256 51bee429be20f2538b19b84c311b136761acdf2b857661af11749e45cc73ad44
 AUX Xsession 4215 RMD160 86ab057ea3f78a9604811a1bff7e5aad88c2f717 SHA1 46dc684b873b190b74df199eae39b38e0f5ffccc SHA256 55671397563aa32d89e66658e6594f17d4ddcddd1ad6aa2d7582ba56ceec7628
 AUX Xsession-r2 4262 RMD160 4346445ae8c0fb6857d098988863e9d9a368e326 SHA1 5798765fb36d260492e5aa58c7e73bb31674018c SHA256 13904325f2c6f905227059c7eb7cf162b233bdb5721ec95ef5e3f35e679a43a3
+AUX Xsession-r3 4045 RMD160 538a23b1f0812fe2243d678276bced4ea03256a3 SHA1 b4deabb6795738cedca66f171e2fc504dc0cc96d SHA256 5eaa3c03278443f27a8477397dd0bcaa5f95e7d0cf99448f028bf0165ce089af
 AUX slim-1.3.2-bsd-install.patch 1315 RMD160 290a7c31b077bce33b120ab55b9bdd3c6262d2be SHA1 a50d2e3e2810af82ab9bef058a72286734afd338 SHA256 bfb5a506b3baec6d24e6f0cfba34f045768bbccccc652af11199f30a7c45d843
+AUX slim-1.3.2-ck.patch 5590 RMD160 2be2c533d9cd2f9296d9be8582dd52266fa0b9cd SHA1 d40e8ef9a9a1d739590deacfe030511c885b5043 SHA256 fdeb519eee002944e4a01795a29fe98baf95dd85bf9911d1217b591424ee7cf1
 AUX slim-1.3.2-libpng15.patch 247 RMD160 b28d9a376f4c01baa8b1aec0c5e0e76294997255 SHA1 3cd674e548f4e0aadbbd32a67b4efd1ed263afef SHA256 f84e3e4c069ec103a5f4ec2a60698bf9d035346b604dee59b6efc883c7f14042
 AUX slim-1.3.2-r2-config.diff 2572 RMD160 217c3d64b77e0af496670cee82849a0500516d0d SHA1 7dbc1b0df45a49688b52bfc701acc3dc15019394 SHA256 7ea06809e15f40c5113d8c05df2b6ca4eb4ba9ebc1e9fc1747b080337997384d
 AUX slim-1.3.2-r3-config.diff 2736 RMD160 c570cf88acac9ac15bfb1caba025358564b4d13b SHA1 a79319663573c92b224d1d83b11747ca4d5a5a2f SHA256 cb5b95ae0102dc3625ec7b0f82103ababfd3ba97eeec107d9b034838a9ebc328
 AUX slim.logrotate 102 RMD160 ccf614eca8c0b8fc1fbc2dfb8bf71b02485a743b SHA1 d2bc9202862f0d33bb902eba3aa8fefe0797d7a3 SHA256 d0559cf7764147f601f2bab8077fd956b1171adad4872c0d324279f6a978264a
 DIST slim-1.3.2.tar.gz 220592 RMD160 1ca6504c07ea2d420fde86b6db0f4cfbbd6680fc SHA1 e421d5487732c8317f8f591906661e014b036358 SHA256 f1560125005f253b9b88220598fed7a9575ef405716862c6ca3fcc72dbd482b8
 EBUILD slim-1.3.2-r3.ebuild 3845 RMD160 c05d3a83231ff745710f184913797e54fa65d847 SHA1 a215c9cb6e4f01b59bccad3096c2efd9a0d021f2 SHA256 52b09e2d2a8b78c35b82001d5c71eb177494e15652c6a6ce34eeafc111858bc0
-EBUILD slim-1.3.2-r5.ebuild 4393 RMD160 e7bd5e11e3cfd7dc45f996bc346794927ecdd536 SHA1 792540c74c00fbfd8fb8f044213b8f9e45cc5899 SHA256 7f2f28f8c7c37cfb5c3eae98b9eacaf1c4f691280b94bcae3eba9d83bdcab26d
 EBUILD slim-1.3.2-r6.ebuild 4479 RMD160 fdaf41a2d458295877808e603db1bff0794d0d5c SHA1 d44a6564cbe64f98e35f9bed4e7bec80726b1e04 SHA256 a0abf6c0a074e835f6f83b2837524bef37a31efece55bba5534c8a528b70bbd5
-MISC ChangeLog 11804 RMD160 34a8424a33b06e772f66d1515e8b294d8b353068 SHA1 4f29bccf19aa35d0ff9beeb19c239215f6d1c35a SHA256 bce2af7a83dba5d86b4947f86a4266eb2d2c275913002506774dd3edb3ec5a82
-MISC metadata.xml 228 RMD160 29a631d94e0bf32c39d1ca21b5e8f65a2a011a56 SHA1 c2bd069120980146f05a6a3ae7c7f3a9293cc206 SHA256 2b1be332072fedf37b33a90282246af7cb897c6254ead0c7537fd4fd4e8f8aa4
+EBUILD slim-1.3.2-r7.ebuild 4356 RMD160 73aec945ccc96022d9ff3868b7e98dc7c4bafc07 SHA1 c74ca4cfd441e02c0f0527c01e728cfa9f127183 SHA256 4eb7afde40cb681598bf2f2d5a73a2f62263f08d7565d88a638c2609af6c96fe
+MISC ChangeLog 12105 RMD160 58e85c7e1af293e3c45f5ea74d764ec112d123f3 SHA1 1bd2e0555e7e5410a2950f1a06a45b92382ebb59 SHA256 14c6de238df6dfbf4f078170a6794fe214468f5af7e19f676e88b9ec02fd3518
+MISC metadata.xml 317 RMD160 fcfaa261187ff694f4a90b78c82250387f85b375 SHA1 fec8ad82b63348fcabfae1082a661ff051d1b51a SHA256 5b7154fd1fce1e40461b40b06533854dc7605d8b5eb19f68eeb9d84527c579c4
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.17 (GNU/Linux)
 
-iEYEAREKAAYFAk6XXNEACgkQuUQtlDBCeQL5rQCfXzDv2Szl52xi+gPTRjvHlbUB
-UeMAn0Y30WAPinAPfKuqRKuEC0Ha0Uta
-=+88u
+iF4EAREIAAYFAk7pBb8ACgkQAJxUfCtlWe14bAD/V3/7xhDOZzBeYTTolucY7HNg
+AnOaUMy0I4tJz0kwEkkA/2tp8BGzgu0FPi+owMEWjnteRG3F4N6i14QdwT/oiwuK
+=BPyN
 -----END PGP SIGNATURE-----
diff --git a/x11-misc/slim/files/Xsession-r3 b/x11-misc/slim/files/Xsession-r3
new file mode 100644 (file)
index 0000000..237fb36
--- /dev/null
@@ -0,0 +1,158 @@
+#!/bin/sh
+#
+# Slim login manager Xsession script
+#
+
+command="$@"
+
+# this will go into slim.log along with all other echo's
+# good for debugging where things go wrong
+echo "$0: Beginning session setup..."
+
+# First read /etc/profile and .profile
+test -f /etc/profile && . /etc/profile
+test -f "$HOME/.profile" && . "$HOME/.profile"
+# Second read /etc/xprofile and .xprofile for X specific setup
+test -f /etc/xprofile && . /etc/xprofile
+test -f "$HOME/.xprofile" && . "$HOME/.xprofile"
+
+# wrap possible arguments to determine whether to treat special or not
+if [ "x$command" = "xcustom" ] || [ "x$command" = "xCustom" ] || [ "x$command" = "xdefault" ] || [ "x$command" = "xDefault" ]; then
+  command="Xsession"
+fi
+if [ "x$command" = "x" ]; then
+  # no default specified, check if Xsession will complete
+  # and if not then assign XSESSION to command
+  if [ -x "$HOME/.xsession" ] || [ -x "$HOME/.Xclients" ] || [ -x /etc/X11/xinit/Xclients ] || [ -x /etc/X11/Xclients ]; then
+    command="Xsession"
+  else
+    command=$XSESSION
+  fi
+fi
+
+# most of this is from /etc/X11/chooser.sh
+sessionscript=""
+if [ -n "${command}" ]; then
+  # find a match for $command in /etc/X11/Sessions
+  for x in /etc/X11/Sessions/* ; do
+    if [ "`echo ${x##*/} | awk '{ print toupper($1) }'`" = "`echo ${command} | awk '{ print toupper($1) }'`" ]; then
+      sessionscript=${x}
+      break
+    fi
+  done
+  if [ -n "${sessionscript}" ]; then
+    if [ -x "${sessionscript}" ]; then
+      command="${sessionscript}"
+    else
+      command="/bin/sh ${sessionscript}"
+    fi
+  else
+
+    # find an executable for $command
+    x=""
+    y=""
+
+    for x in "${command}" "`echo ${command} | awk '{ print toupper($1) }'`" "`echo ${command} | awk '{ print tolower($1) }'`"
+    do
+      # Fall through ...
+      if [ -x "`which ${x} 2>/dev/null`" ]; then
+       y="`which ${x} 2>/dev/null`"
+       break
+      fi
+    done
+    # note , if the command could not be found then $command will be empty
+    command="$y"
+    unset x
+    unset y
+  fi
+fi
+
+# call xrdb and xmodmap and such, since $command is not a session script
+if [ -z "${sessionscript}" ]; then
+  userresources="$HOME/.Xresources"
+  usermodmap="$HOME/.Xmodmap"
+  userxkbmap="$HOME/.Xkbmap"
+
+  sysresources=/etc/X11/Xresources 
+  sysmodmap=/etc/X11/Xmodmap 
+  sysxkbmap=/etc/X11/Xkbmap
+
+  rh6sysresources=/etc/X11/xinit/Xresources 
+  rh6sysmodmap=/etc/X11/xinit/Xmodmap 
+
+  # merge in defaults
+  if [ -f "$rh6sysresources" ]; then
+    xrdb -merge "$rh6sysresources"
+  fi
+
+  if [ -f "$sysresources" ]; then
+    xrdb -merge "$sysresources"
+  fi
+
+  if [ -f "$userresources" ]; then
+    xrdb -merge "$userresources"
+  fi
+
+  # merge in keymaps
+  if [ -f "$sysxkbmap" ]; then
+    setxkbmap `cat "$sysxkbmap"`
+    XKB_IN_USE=yes
+  fi
+
+  if [ -f "$userxkbmap" ]; then
+    setxkbmap `cat "$userxkbmap"`
+    XKB_IN_USE=yes
+  fi
+
+  #
+  # Eeek, this seems like too much magic here
+  #
+  if [ -z "$XKB_IN_USE" -a ! -L /etc/X11/X ]; then
+    if grep '^exec.*/Xsun' /etc/X11/X > /dev/null 2>&1 && [ -f /etc/X11/XF86Config ]; then
+      xkbsymbols=`sed -n -e 's/^[     ]*XkbSymbols[   ]*"\(.*\)".*$/\1/p' /etc/X11/XF86Config`
+      if [ -n "$xkbsymbols" ]; then
+        setxkbmap -symbols "$xkbsymbols"
+        XKB_IN_USE=yes
+      fi
+    fi
+  fi
+
+  # xkb and xmodmap don't play nice together
+  if [ -z "$XKB_IN_USE" ]; then
+    if [ -f "$rh6sysmodmap" ]; then
+      xmodmap "$rh6sysmodmap"
+    fi
+
+    if [ -f "$sysmodmap" ]; then
+      xmodmap "$sysmodmap"
+    fi
+
+    if [ -f "$usermodmap" ]; then
+      xmodmap "$usermodmap"
+    fi
+  fi
+
+  unset XKB_IN_USE
+fi
+unset sessionscript
+
+# start failsafe session
+if [ -z "${command}" ]; then
+  echo "$0: Failed to find a command to start the session, so starting a failsafe xterm."
+  exec xterm -geometry 80x24+0+0
+fi
+
+# run all system xinitrc shell scripts which will update command
+if [ -d /etc/X11/xinit/xinitrc.d ]; then
+  for i in /etc/X11/xinit/xinitrc.d/* ; do
+    if [ -x "$i" ]; then
+      . "$i"
+    fi
+  done
+  unset i
+fi
+
+echo "$0: Setup done, will execute: $command"
+exec $command
+
+# vim:ts=4
diff --git a/x11-misc/slim/files/slim-1.3.2-ck.patch b/x11-misc/slim/files/slim-1.3.2-ck.patch
new file mode 100644 (file)
index 0000000..b5f4aa5
--- /dev/null
@@ -0,0 +1,186 @@
+diff -Naur slim-1.3.2/app.cpp slim-1.3.2.new/app.cpp
+--- slim-1.3.2/app.cpp 2011-12-14 14:33:45.000000000 -0500
++++ slim-1.3.2.new/app.cpp     2011-12-14 13:25:19.000000000 -0500
+@@ -536,6 +536,60 @@
+     string xauthority = pw->pw_dir;
+     xauthority.append("/.Xauthority");
+     
++#ifdef USE_CONSOLEKIT
++  cerr << APPNAME << ": consolekit support enabled" << endl;
++    int ret;
++    DBusError error;
++    char  *remote_host_name = "";
++    dbus_bool_t is_local;
++    char *display_device = "";
++    //char devtmp[16];
++
++    // if (!use_consolekit) return 1;
++    cerr << APPNAME << ": initializing a consolekit session" << endl;
++
++    is_local = TRUE; //is_local = Dpy->displayType.location == Local;
++    //if (Dpy->peerlen > 0 && Dpy->peer)
++    //remote_host_name = Dpy->peer;
++    /* how can we get the corresponding tty at best...? */
++//    if (Dpy->windowPath) {
++//   display_device = strchr(Dpy->windowPath, ':');
++//   if (display_device && display_device[1])
++//       display_device++;
++//   else
++//       display_device = Dpy->windowPath;
++//   snprintf(devtmp, sizeof(devtmp), "/dev/tty%s", display_device);
++//   display_device = devtmp;
++display_device = dpy_tty; //    }
++
++    ckconnector = ck_connector_new();
++    if (!ckconnector) {
++      cerr << APPNAME << ": ck_connector not initialized" << endl;
++   //return 0;
++    }
++
++    dbus_error_init(&error);
++    ret = ck_connector_open_session_with_parameters(
++       ckconnector, &error,
++       "unix-user", &pw->pw_uid,
++       "x11-display", &DisplayName,
++       "x11-display-device", &display_device,
++       "remote-host-name", &remote_host_name,
++       "is-local", &is_local,
++       NULL);
++    if (!ret) {
++   if (dbus_error_is_set(&error)) {
++       cerr << APPNAME << ": Dbus error: " << error.message << endl;
++       dbus_error_free(&error);
++   } else {
++       cerr << APPNAME << ": ConsoleKit error" << endl;
++   }
++   cerr << APPNAME << ": console-kit-daemon not running?" << endl;
++   ck_connector_unref(ckconnector);
++   ckconnector = NULL;
++    }  
++#endif
++
+ #ifdef USE_PAM
+     // Setup the PAM environment
+     try{
+@@ -548,6 +602,8 @@
+         pam.setenv("DISPLAY", DisplayName);
+         pam.setenv("MAIL", maildir.c_str());
+         pam.setenv("XAUTHORITY", xauthority.c_str());
++        pam.setenv("XDG_SESSION_COOKIE", ck_connector_get_cookie(ckconnector));
++    cerr << APPNAME << ": ck_connector has XDG_SESSION_COOKIE of " << ck_connector_get_cookie(ckconnector) << endl;
+     }
+     catch(PAM::Exception& e){
+         cerr << APPNAME << ": " << e << endl;
+@@ -564,7 +620,11 @@
+         char** child_env = pam.getenvlist();
+         pam.end();
+ #else
++#if USE_CONSOLEKIT
++        const int Num_Of_Variables = 11; // Number of env. variables + 1
++#else
+         const int Num_Of_Variables = 10; // Number of env. variables + 1
++#endif
+         char** child_env = static_cast<char**>(malloc(sizeof(char*)*Num_Of_Variables));
+         int n = 0;
+         if(term) child_env[n++]=StrConcat("TERM=", term);
+@@ -576,6 +636,10 @@
+         child_env[n++]=StrConcat("DISPLAY=", DisplayName);
+         child_env[n++]=StrConcat("MAIL=", maildir.c_str());
+         child_env[n++]=StrConcat("XAUTHORITY=", xauthority.c_str());
++#if USE_CONSOLEKIT
++              child_env[n++]=StrConcat("XDG_SESSION_COOKIE=", ck_connector_get_cookie(ckconnector));
++    cerr << APPNAME << ": ck_connector has XDG_SESSION_COOKIE of " << ck_connector_get_cookie(ckconnector) << endl;
++#endif
+         child_env[n++]=0;
+ #endif
+@@ -617,6 +681,28 @@
+         }
+     }
++#ifdef USE_CONSOLEKIT
++  
++    //DBusError error;
++
++   // if (!ckconnector)
++   //return;
++
++    //dbus_error_init(&error);
++    if (!ck_connector_close_session(ckconnector, &error)) {
++   if (dbus_error_is_set(&error)) {
++       cerr << APPNAME << ": Dbus error: " << error.message << endl;
++       dbus_error_free(&error);
++   } else {
++       cerr << APPNAME << ": ConsoleKit close error" << endl;
++   }
++   cerr << APPNAME << ": console-kit-daemon not running?" << endl;
++    }
++    ck_connector_unref(ckconnector);
++    ckconnector = NULL;
++  //}
++#endif
++
+ #ifdef USE_PAM
+     try{
+         pam.close_session();
+@@ -881,12 +967,18 @@
+             bool ok = false;
+             Cfg::string2int(server[i]+2, &ok);
+             if (ok) {
++#ifdef USE_CONSOLEKIT
++              sprintf(dpy_tty,"/dev/tty%d",atoi(server[i]+2));
++#endif
+                 hasVtSet = true;
+             }
+         }
+     }
+     if (!hasVtSet && daemonmode) {
++#ifdef USE_CONSOLEKIT
++      sprintf(dpy_tty,"/dev/tty7");
++#endif
+         server[argc++] = (char*)"vt07";
+     }
+     server[argc] = NULL;
+diff -Naur slim-1.3.2/app.h slim-1.3.2.new/app.h
+--- slim-1.3.2/app.h   2011-12-14 14:33:45.000000000 -0500
++++ slim-1.3.2.new/app.h       2011-12-14 11:51:39.000000000 -0500
+@@ -27,6 +27,10 @@
+ #ifdef USE_PAM
+ #include "PAM.h"
+ #endif
++#ifdef USE_CONSOLEKIT
++#include <ck-connector.h>
++#include <dbus/dbus.h>
++#endif
+ class App {
+ public:
+@@ -81,6 +85,12 @@
+ #ifdef USE_PAM
+       PAM::Authenticator pam;
+ #endif
++#ifdef USE_CONSOLEKIT
++      CkConnector *ckconnector;
++      int use_consolekit;
++      char dpy_tty[16];
++#endif
++
+     // Options
+     char* DispName;
+diff -Naur slim-1.3.2/Makefile slim-1.3.2.new/Makefile
+--- slim-1.3.2/Makefile        2011-12-14 14:33:45.000000000 -0500
++++ slim-1.3.2.new/Makefile    2011-12-14 11:43:02.000000000 -0500
+@@ -13,6 +13,11 @@
+ LDFLAGS+= -lpam
+ CUSTOM+= -DUSE_PAM
+ endif
++ifdef USE_CONSOLEKIT
++LDFLAGS+= `pkg-config --libs ck-connector`
++CFLAGS+= `pkg-config --cflags ck-connector`
++CUSTOM+= -DUSE_CONSOLEKIT
++endif
+ PREFIX=/usr
+ CFGDIR=/etc
+ MANDIR=/usr/share/man
index c805ac6fd3dc56441152986ba72feb09e509f0fa..f6d2292aaaba13b27543049da875452579db190e 100644 (file)
@@ -5,5 +5,8 @@
        <maintainer>
                <email>axs@gentoo.org</email>
        </maintainer>
+       <use> 
+               <flag name='consolekit'>Enable native consolekit support</flag>
+       </use>
 </pkgmetadata>
 
similarity index 77%
rename from x11-misc/slim/slim-1.3.2-r5.ebuild
rename to x11-misc/slim/slim-1.3.2-r7.ebuild
index 6b54291f1ca7d725c7b0f82d9b7daf09691d57ca..26048a6a6be3456e58754d4db3132bd696aa3a88 100644 (file)
@@ -1,8 +1,8 @@
 # Copyright 1999-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/x11-misc/slim/slim-1.3.2-r5.ebuild,v 1.1 2011/08/19 19:55:10 darkside Exp $
+# $Header: /var/cvsroot/gentoo-x86/x11-misc/slim/slim-1.3.2-r7.ebuild,v 1.1 2011/12/14 20:23:55 axs Exp $
 
-EAPI=2
+EAPI=4
 
 inherit toolchain-funcs pam eutils
 
@@ -13,7 +13,8 @@ SRC_URI="mirror://berlios/${PN}/${P}.tar.gz"
 LICENSE="GPL-2"
 SLOT="0"
 KEYWORDS="~amd64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd"
-IUSE="branding pam"
+IUSE="branding pam consolekit"
+REQUIRED_USE="consolekit? ( pam )"
 
 RDEPEND="x11-libs/libXmu
        x11-libs/libX11
@@ -22,6 +23,8 @@ RDEPEND="x11-libs/libXmu
        >=media-libs/libpng-1.4
        virtual/jpeg
        x11-apps/sessreg
+       consolekit? ( sys-auth/consolekit
+               sys-apps/dbus )
        pam? ( virtual/pam )"
 DEPEND="${RDEPEND}
        dev-util/pkgconfig
@@ -29,6 +32,7 @@ DEPEND="${RDEPEND}
 PDEPEND="branding? ( >=x11-themes/slim-themes-1.2.3a-r3 )"
 
 src_prepare() {
+
        # respect C[XX]FLAGS, fix crosscompile,
        # fix linking order for --as-needed"
        sed -i -e "s:^CXX=.*:CXX=$(tc-getCXX) ${CXXFLAGS}:" \
@@ -40,7 +44,7 @@ src_prepare() {
                -r -e "s:^LDFLAGS=(.*):LDFLAGS=\1 ${LDFLAGS}:" \
                Makefile || die "sed failed in Makefile"
        # Our Gentoo-specific config changes
-       epatch "${FILESDIR}"/${PN}-1.3.2-r2-config.diff
+       epatch "${FILESDIR}"/${PN}-1.3.2-r3-config.diff
 
        if use elibc_FreeBSD; then
                sed -i -e "s/CUSTOM=-DHAVE_SHADOW/CUSTOM=-DNEEDS_BASENAME/" Makefile \
@@ -64,29 +68,39 @@ src_prepare() {
        epatch "${FILESDIR}"/346037-stop_setting_host_for_pam_ck_connector_so.patch
        # Gentoo bug 378505
        epatch "${FILESDIR}"/${P}-libpng15.patch
+       # Gentoo bug 252280
+       epatch "${FILESDIR}"/252280-fix-default_user-focus_passwd.patch
+       # Native consolekit support
+       epatch "${FILESDIR}"/${P}-ck.patch
 }
 
 src_compile() {
-       if use pam ; then
-               emake USE_PAM=1 || die "emake failed."
+       if use consolekit && use pam ; then
+               emake USE_PAM=1 USE_CONSOLEKIT=1
+       elif use pam ; then
+               emake USE_PAM=1
        else
-               emake || die "emake failed."
+               emake
        fi
 }
 
 src_install() {
        if use pam ; then
-               emake USE_PAM=1 DESTDIR="${D}" install || die "emake install failed."
+               if use consolekit ; then
+                       emake USE_PAM=1 USE_CONSOLEKIT=1 DESTDIR="${D}" install
+               else
+                       emake USE_PAM=1 DESTDIR="${D}" install
+               fi
                pamd_mimic system-local-login slim auth account session
        else
-               emake DESTDIR="${D}" install || die "emake install failed."
+               emake DESTDIR="${D}" install
        fi
 
        insinto /usr/share/slim
-       newins "${FILESDIR}/Xsession-r2" Xsession || die "newins failed"
+       newins "${FILESDIR}/Xsession-r3" Xsession
 
        insinto /etc/logrotate.d
-       newins "${FILESDIR}/slim.logrotate" slim || die "newins failed"
+       newins "${FILESDIR}/slim.logrotate" slim
 
        dodoc xinitrc.sample ChangeLog README TODO THEMES
 }
@@ -111,14 +125,8 @@ pkg_postinst() {
        elog "accordingly."
        elog
        ewarn "Please note that the slim session start script now supports consolekit"
-       ewarn "directly, via xinitrc.d scripts.  Please remove any existing work-arounds to"
-       ewarn "avoid multiple calls to ck-launch-session."
-       if has_version "<=sys-auth/pambase-20101024[consolekit]" ; then
-               ewarn
-               ewarn "You should also remove the 'nox11' flag from the pam_ck_connector.so module "
-               ewarn "in /etc/pam.d/system-login if you have not already done so."
-               ewarn "(this is safe, it will be default in the next version of pambase)"
-       fi
+       ewarn "directly.  Please remove any existing work-arounds to avoid multiple calls "
+       ewarn "to ck-launch-session, and enable USE=\"consolekit\""
        elog
        if ! use pam; then
                elog "You have merged ${PN} without USE=pam, this will cause ${PN} to fall back to"