summary refs log tree commit diff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-02-22 00:27:57 +0100
committerLudovic Courtès <ludo@gnu.org>2014-02-22 00:27:57 +0100
commitb2bfa32d253337a48f3bc0260982cbb945b345a3 (patch)
treea75ae018b5c7608414bf50bd6e55683eb0c44f7a /gnu/packages/patches
parent99662b8dbf420d0112f83b7daddcecfb1bcb9bad (diff)
parent2096ef47aad57a9988c8fdfaa46a70770a0e0b12 (diff)
downloadguix-b2bfa32d253337a48f3bc0260982cbb945b345a3.tar.gz
Merge branch 'master' into core-updates
Conflicts:
	gnu-system.am
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/bigloo-gc-shebangs.patch4
-rw-r--r--gnu/packages/patches/curl-fix-test172.patch12
-rw-r--r--gnu/packages/patches/dmd-tests-longer-sleeps.patch52
-rw-r--r--gnu/packages/patches/gdb-loongson-madd-fix.patch44
-rw-r--r--gnu/packages/patches/gnunet-fix-scheduler.patch13
-rw-r--r--gnu/packages/patches/gnunet-fix-tests.patch58
-rw-r--r--gnu/packages/patches/inkscape-stray-comma.patch13
-rw-r--r--gnu/packages/patches/mpc123-initialize-ao.patch19
-rw-r--r--gnu/packages/patches/patchelf-page-size.patch69
-rw-r--r--gnu/packages/patches/ratpoison-shell.patch91
-rw-r--r--gnu/packages/patches/slim-config.patch27
-rw-r--r--gnu/packages/patches/slim-session.patch17
-rw-r--r--gnu/packages/patches/slim-sigusr1.patch33
13 files changed, 406 insertions, 46 deletions
diff --git a/gnu/packages/patches/bigloo-gc-shebangs.patch b/gnu/packages/patches/bigloo-gc-shebangs.patch
index 9ead2ba979..367708610a 100644
--- a/gnu/packages/patches/bigloo-gc-shebangs.patch
+++ b/gnu/packages/patches/bigloo-gc-shebangs.patch
@@ -1,7 +1,7 @@
 Patch shebangs in source that gets unpacked by `configure'.
 
---- bigloo4.0b/gc/install-gc-7.3alpha3-20130330	2013-08-19 10:45:20.000000000 +0200
-+++ bigloo4.0b/gc/install-gc-7.3alpha3-20130330	2013-08-19 10:46:36.000000000 +0200
+--- bigloo4.1a/gc/install-gc-7.4.0	2014-02-04 14:55:03.000000000 +0100
++++ bigloo4.1a/gc/install-gc-7.4.0	2014-02-04 14:55:36.000000000 +0100
 @@ -29,10 +29,12 @@ fi
  
  # untar the two versions of the GC
diff --git a/gnu/packages/patches/curl-fix-test172.patch b/gnu/packages/patches/curl-fix-test172.patch
new file mode 100644
index 0000000000..cc2c2705e7
--- /dev/null
+++ b/gnu/packages/patches/curl-fix-test172.patch
@@ -0,0 +1,12 @@
+diff --git a/tests/data/test172 b/tests/data/test172
+index b3efae9..3d53418 100644
+--- a/tests/data/test172
++++ b/tests/data/test172
+@@ -36,7 +36,7 @@ http://%HOSTIP:%HTTPPORT/we/want/172 -b log/jar172.txt -b "tool=curl; name=fool"
+ 
+ .%HOSTIP	TRUE	/silly/	FALSE	0	ismatch	this
+ .%HOSTIP	TRUE	/	FALSE	0	partmatch	present
+-%HOSTIP	FALSE	/we/want/	FALSE	1391252187	nodomain	value
++%HOSTIP	FALSE	/we/want/	FALSE	2139150993	nodomain	value
+ </file>
+ </client>
diff --git a/gnu/packages/patches/dmd-tests-longer-sleeps.patch b/gnu/packages/patches/dmd-tests-longer-sleeps.patch
new file mode 100644
index 0000000000..708000f351
--- /dev/null
+++ b/gnu/packages/patches/dmd-tests-longer-sleeps.patch
@@ -0,0 +1,52 @@
+Increase sleep times in tests, for slower machines.
+
+Patch by Mark H Weaver <mhw@netris.org>.
+
+--- dmd/tests/basic.sh	2013-11-30 17:22:00.000000000 -0500
++++ dmd/tests/basic.sh	2014-02-16 02:18:34.036376953 -0500
+@@ -46,7 +46,7 @@
+ dmd -I -s "$socket" -c "$conf" -l "$log" &
+ dmd_pid=$!
+ 
+-sleep 1				# XXX: wait till it's up
++sleep 3				# XXX: wait till it's up
+ kill -0 $dmd_pid
+ test -S "$socket"
+ $deco status dmd | grep -E '(Start.*dmd|Stop.*test)'
+--- dmd/tests/respawn.sh	2013-12-01 16:50:37.000000000 -0500
++++ dmd/tests/respawn.sh	2014-02-16 02:19:16.958251953 -0500
+@@ -39,7 +39,7 @@
+     i=0
+     while ! test -f "$1" && test $i -lt 20
+     do
+-	sleep 0.3
++	sleep 1
+ 	i=`expr $i + 1`
+     done
+     test -f "$1"
+@@ -65,14 +65,14 @@
+    #:provides '(test1)
+    #:start (make-forkexec-constructor
+ 	    "$SHELL" "-c"
+-	    "echo \$\$ > $service1_pid ; while true ; do sleep 1 ; done")
++	    "echo \$\$ > $service1_pid ; while true ; do sleep 3 ; done")
+    #:stop  (make-kill-destructor)
+    #:respawn? #t)
+  (make <service>
+    #:provides '(test2)
+    #:start (make-forkexec-constructor
+ 	    "$SHELL" "-c"
+-	    "echo \$\$ > $service2_pid ; while true ; do sleep 1 ; done")
++	    "echo \$\$ > $service2_pid ; while true ; do sleep 3 ; done")
+    #:stop  (make-kill-destructor)
+    #:respawn? #t))
+ (start 'test1)
+@@ -82,7 +82,7 @@
+ dmd -I -s "$socket" -c "$conf" -l "$log" &
+ dmd_pid=$!
+ 
+-sleep 1				# XXX: wait till it's up
++sleep 3				# XXX: wait till it's up
+ kill -0 $dmd_pid
+ test -S "$socket"
+ $deco status test1 | grep started
diff --git a/gnu/packages/patches/gdb-loongson-madd-fix.patch b/gnu/packages/patches/gdb-loongson-madd-fix.patch
deleted file mode 100644
index 0d50dd2dd4..0000000000
--- a/gnu/packages/patches/gdb-loongson-madd-fix.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-Fix the Loongson 2F specific fused multiply-add instructions on paired singles to
-use the encoding recognized by the processor, as opposed to the mistaken english
-Loongson 2F documentation.
-
-Patch by Mark H Weaver <mhw@netris.org>.
-
---- gdb/opcodes/mips-opc.c.orig	2013-02-09 05:24:18.000000000 -0500
-+++ gdb/opcodes/mips-opc.c	2013-10-27 23:35:20.191997541 -0400
-@@ -956,7 +956,7 @@
- {"madd.s",  "D,S,T",	0x4600001c, 0xffe0003f, RD_S|RD_T|WR_D|FP_S,	     0,		EE	},
- {"madd.ps", "D,R,S,T",	0x4c000026, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D,    0,		I5_33	},
- {"madd.ps",	"D,S,T",	0x45600018,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2E	},
--{"madd.ps",	"D,S,T",	0x71600018,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
-+{"madd.ps",	"D,S,T",	0x72c00018,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
- {"madd",    "s,t",      0x0000001c, 0xfc00ffff, RD_s|RD_t|WR_HILO,           0,		L1	},
- {"madd",    "s,t",      0x70000000, 0xfc00ffff, RD_s|RD_t|MOD_HILO,          0,		I32|N55	},
- {"madd",    "s,t",      0x70000000, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M,      0,		G1	},
-@@ -1084,7 +1084,7 @@
- {"msub.s",  "D,S,T",	0x4600001d, 0xffe0003f,	RD_S|RD_T|WR_D|FP_S,	0,		EE	},
- {"msub.ps", "D,R,S,T",	0x4c00002e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I5_33	},
- {"msub.ps",	"D,S,T",	0x45600019,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2E	},
--{"msub.ps",	"D,S,T",	0x71600019,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
-+{"msub.ps",	"D,S,T",	0x72c00019,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
- {"msub",    "s,t",      0x0000001e, 0xfc00ffff, RD_s|RD_t|WR_HILO,	0,		L1    	},
- {"msub",    "s,t",      0x70000004, 0xfc00ffff, RD_s|RD_t|MOD_HILO,     0,		I32|N55 },
- {"msub",    "7,s,t",	0x70000004, 0xfc00e7ff, MOD_a|RD_s|RD_t,        0,              D32	},
-@@ -1218,7 +1218,7 @@
- {"nmadd.s",	"D,S,T",	0x7200001a,	0xffe0003f,	RD_S|RD_T|WR_D|FP_S,	0,	IL2F	},
- {"nmadd.ps","D,R,S,T",	0x4c000036, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I5_33	},
- {"nmadd.ps",	"D,S,T",	0x4560001a,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2E	},
--{"nmadd.ps",	"D,S,T",	0x7160001a,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
-+{"nmadd.ps",	"D,S,T",	0x72c0001a,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
- {"nmsub.d", "D,R,S,T",	0x4c000039, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I4_33	},
- {"nmsub.d",	"D,S,T",	0x4620001b,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2E	},
- {"nmsub.d",	"D,S,T",	0x7220001b,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
-@@ -1227,7 +1227,7 @@
- {"nmsub.s",	"D,S,T",	0x7200001b,	0xffe0003f,	RD_S|RD_T|WR_D|FP_S,	0,	IL2F	},
- {"nmsub.ps","D,R,S,T",	0x4c00003e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I5_33	},
- {"nmsub.ps",	"D,S,T",	0x4560001b,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2E	},
--{"nmsub.ps",	"D,S,T",	0x7160001b,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
-+{"nmsub.ps",	"D,S,T",	0x72c0001b,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
- /* nop is at the start of the table.  */
- {"nor",     "d,v,t",	0x00000027, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I1	},
- {"nor",     "t,r,I",	0,    (int) M_NOR_I,	INSN_MACRO,		0,		I1	},
diff --git a/gnu/packages/patches/gnunet-fix-scheduler.patch b/gnu/packages/patches/gnunet-fix-scheduler.patch
new file mode 100644
index 0000000000..1e0aef2a1a
--- /dev/null
+++ b/gnu/packages/patches/gnunet-fix-scheduler.patch
@@ -0,0 +1,13 @@
+Index: src/util/scheduler.c
+===================================================================
+--- src/util/scheduler.c	(revision 31745)
++++ src/util/scheduler.c	(working copy)
+@@ -1599,7 +1599,7 @@
+   int real_fd;
+ 
+   GNUNET_DISK_internal_file_handle_ (fd, &real_fd, sizeof (int));
+-  GNUNET_assert (real_fd > 0);
++  GNUNET_assert (real_fd >= 0);
+   return add_without_sets (
+       delay, priority,
+       on_read  ? real_fd : -1,
diff --git a/gnu/packages/patches/gnunet-fix-tests.patch b/gnu/packages/patches/gnunet-fix-tests.patch
new file mode 100644
index 0000000000..4276db5a7c
--- /dev/null
+++ b/gnu/packages/patches/gnunet-fix-tests.patch
@@ -0,0 +1,58 @@
+diff -ru a/src/peerinfo-tool/Makefile.in b/src/peerinfo-tool/Makefile.in
+--- src/peerinfo-tool/Makefile.in	2013-12-24 13:55:04.000000000 +0100
++++ src/peerinfo-tool/Makefile.in	2014-01-30 13:07:52.275965484 +0100
+@@ -335,9 +335,6 @@
+   $(top_builddir)/src/statistics/libgnunetstatistics.la \
+   $(top_builddir)/src/util/libgnunetutil.la 
+ 
+-@HAVE_PYTHON_TRUE@check_SCRIPTS = \
+-@HAVE_PYTHON_TRUE@ test_gnunet_peerinfo.py 
+-
+ @ENABLE_TEST_RUN_TRUE@TESTS = $(check_SCRIPTS)
+ do_subst = $(SED) -e 's,[@]PYTHON[@],$(PYTHON),g'
+ EXTRA_DIST = \
+diff -ru a/src/revocation/test_revocation.conf b/src/revocation/test_revocation.conf
+--- src/revocation/test_revocation.conf	2013-12-21 18:57:06.000000000 +0100
++++ src/revocation/test_revocation.conf	2014-01-30 15:00:02.841340556 +0100
+@@ -20,6 +20,9 @@
+ [transport-udp]
+ BROADCAST = NO
+ 
++[nat]
++RETURN_LOCAL_ADDRESSES = YES
++
+ [peerinfo]
+ USE_INCLUDED_HELLOS = NO
+ 
+Index: src/gns/test_gns_cname_lookup.sh
+===================================================================
+--- src/gns/test_gns_cname_lookup.sh	(revision 32117)
++++ src/gns/test_gns_cname_lookup.sh	(revision 32118)
+@@ -13,6 +13,15 @@
+ 	exit 77
+ fi
+ 
++# permissive DNS resolver we will use for the test
++DNS_RESOLVER="8.8.8.8"
++if ! nslookup gnunet.org $DNS_RESOLVER &> /dev/null
++then
++  echo "Cannot reach DNS, skipping test"
++  exit 77
++fi
++
++
+ rm -rf /tmp/test-gnunet-gns-peer-1/
+ 
+ TEST_DOMAIN_PLUS="www.gnu"
+Index: src/integration-tests/confs/test_defaults.conf
+===================================================================
+--- src/integration-tests/confs/test_defaults.conf	(revision 32320)
++++ src/integration-tests/confs/test_defaults.conf	(working copy)
+@@ -17,6 +17,7 @@
+ EXTERNAL_ADDRESS = 127.0.0.1
+ INTERNAL_ADDRESS = 127.0.0.1
+ BINDTO = 127.0.0.1
++RETURN_LOCAL_ADDRESSES = YES
+ 
+ [hostlist]
+ SERVERS =
diff --git a/gnu/packages/patches/inkscape-stray-comma.patch b/gnu/packages/patches/inkscape-stray-comma.patch
new file mode 100644
index 0000000000..0b000d9e30
--- /dev/null
+++ b/gnu/packages/patches/inkscape-stray-comma.patch
@@ -0,0 +1,13 @@
+This is verbatim from Upstream:        http://bazaar.launchpad.net/~inkscape.dev/inkscape/RELEASE_0_48_BRANCH/diff/9943
+--- a/src/widgets/desktop-widget.h	2011-06-06 06:43:00 +0000
++++ b/src/widgets/desktop-widget.h	2013-01-05 14:34:09 +0000
+@@ -239,7 +239,7 @@
+ private:
+     GtkWidget *tool_toolbox;
+     GtkWidget *aux_toolbox;
+-    GtkWidget *commands_toolbox,;
++    GtkWidget *commands_toolbox;
+     GtkWidget *snap_toolbox;
+ 
+     static void init(SPDesktopWidget *widget);
+
diff --git a/gnu/packages/patches/mpc123-initialize-ao.patch b/gnu/packages/patches/mpc123-initialize-ao.patch
new file mode 100644
index 0000000000..85e461f896
--- /dev/null
+++ b/gnu/packages/patches/mpc123-initialize-ao.patch
@@ -0,0 +1,19 @@
+Description: Zero ao_sample_format structure to cope with libao 1.0.0
+Author: Colin Watson <cjwatson@debian.org>
+Bug-Debian: http://bugs.debian.org/591396
+Bug-Ubuntu: https://bugs.launchpad.net/bugs/710268
+Forwarded: no
+Last-Update: 2013-05-07
+
+Index: b/ao.c
+===================================================================
+--- a/ao.c
++++ b/ao.c
+@@ -123,6 +123,7 @@
+ 
+   /* initialize ao_format struct */
+   /* XXX VERY WRONG */
++  memset(&ao_fmt, 0, sizeof(ao_fmt));
+   ao_fmt.bits=16;       /*tmp_stream_info.average_bitrate;*/
+   ao_fmt.rate=streaminfo->sample_freq;
+   ao_fmt.channels=streaminfo->channels;
diff --git a/gnu/packages/patches/patchelf-page-size.patch b/gnu/packages/patches/patchelf-page-size.patch
new file mode 100644
index 0000000000..2528b604e5
--- /dev/null
+++ b/gnu/packages/patches/patchelf-page-size.patch
@@ -0,0 +1,69 @@
+Improve the determination of pageSize in patchelf.cc.
+
+Patch by Mark H Weaver <mhw@netris.org>.
+
+--- patchelf/src/patchelf.cc.orig	1969-12-31 19:00:01.000000000 -0500
++++ patchelf/src/patchelf.cc	2014-02-16 20:15:06.283203125 -0500
+@@ -21,11 +21,19 @@
+ using namespace std;
+ 
+ 
+-#ifdef MIPSEL
+-/* The lemote fuloong 2f kernel defconfig sets a page size of 16KB */
+-const unsigned int pageSize = 4096*4;
+-#else
++/* Note that some platforms support multiple page sizes.  Therefore,
++   it is not enough to query the current page size.  'pageSize' must
++   be the maximum architectural page size for the platform, which is
++   typically defined in the corresponding ABI document.
++
++   XXX FIXME: This won't work when we're cross-compiling.  */
++
++#if defined __MIPSEL__ || defined __MIPSEB__ || defined __aarch64__
++const unsigned int pageSize = 65536;
++#elif defined __x86_64__ || defined __i386__ || defined __arm__
+ const unsigned int pageSize = 4096;
++#else
++# error maximum architectural page size unknown for this platform
+ #endif
+ 
+ 
+--- patchelf/tests/no-rpath.sh.orig	1969-12-31 19:00:01.000000000 -0500
++++ patchelf/tests/no-rpath.sh	2014-02-16 20:44:12.036376953 -0500
+@@ -1,22 +1,22 @@
+ #! /bin/sh -e
+ 
+-rm -rf scratch
+-mkdir -p scratch
++if [ "$(uname -m)" = i686 -a "$(uname -s)" = Linux ]; then
++    rm -rf scratch
++    mkdir -p scratch
+ 
+-cp no-rpath scratch/
++    cp no-rpath scratch/
+ 
+-oldRPath=$(../src/patchelf --print-rpath scratch/no-rpath)
+-if test -n "$oldRPath"; then exit 1; fi
+-../src/patchelf \
+-  --set-interpreter "$(../src/patchelf --print-interpreter ../src/patchelf)" \
+-  --set-rpath /foo:/bar:/xxxxxxxxxxxxxxx scratch/no-rpath
++    oldRPath=$(../src/patchelf --print-rpath scratch/no-rpath)
++    if test -n "$oldRPath"; then exit 1; fi
++    ../src/patchelf \
++      --set-interpreter "$(../src/patchelf --print-interpreter ../src/patchelf)" \
++      --set-rpath /foo:/bar:/xxxxxxxxxxxxxxx scratch/no-rpath
+ 
+-newRPath=$(../src/patchelf --print-rpath scratch/no-rpath)
+-if ! echo "$newRPath" | grep -q '/foo:/bar'; then
+-    echo "incomplete RPATH"
+-    exit 1
+-fi
++    newRPath=$(../src/patchelf --print-rpath scratch/no-rpath)
++    if ! echo "$newRPath" | grep -q '/foo:/bar'; then
++        echo "incomplete RPATH"
++        exit 1
++    fi
+ 
+-if [ "$(uname -m)" = i686 -a "$(uname -s)" = Linux ]; then
+     cd scratch && ./no-rpath
+ fi
diff --git a/gnu/packages/patches/ratpoison-shell.patch b/gnu/packages/patches/ratpoison-shell.patch
new file mode 100644
index 0000000000..63d265a382
--- /dev/null
+++ b/gnu/packages/patches/ratpoison-shell.patch
@@ -0,0 +1,91 @@
+Use $SHELL instead of hardcoding /bin/sh in ratpoison.
+
+Patch by Mark H Weaver <mhw@netris.org>.
+
+--- ratpoison/src/actions.c.orig	2013-04-06 21:37:43.000000000 -0400
++++ ratpoison/src/actions.c	2014-02-13 00:34:10.992553710 -0500
+@@ -19,6 +19,7 @@
+  */
+ 
+ #include <unistd.h>
++#include <stdlib.h>
+ #include <ctype.h>		/* for isspace */
+ #include <sys/wait.h>
+ #include <X11/keysym.h>
+@@ -223,12 +223,12 @@
+   add_command ("escape",        cmd_escape,     1, 1, 1,
+                "Key: ", arg_KEY);
+   add_command ("exec",          cmd_exec,       1, 1, 1,
+-               "/bin/sh -c ", arg_SHELLCMD);
++               "$SHELL -c ", arg_SHELLCMD);
+   add_command ("execa",		cmd_execa,	1, 1, 1, 
+-	       "/bin/sh -c ", arg_SHELLCMD);
++	       "$SHELL -c ", arg_SHELLCMD);
+   add_command ("execf",		cmd_execf,	2, 2, 2, 
+ 	       "frame to execute in:", arg_FRAME,
+-	       "/bin/sh -c ", arg_SHELLCMD);
++	       "$SHELL -c ", arg_SHELLCMD);
+   add_command ("fdump",         cmd_fdump,      1, 0, 0,
+                "", arg_NUMBER);
+   add_command ("focus",         cmd_next_frame, 0, 0, 0);
+@@ -359,7 +359,7 @@
+   add_command ("unsetenv",      cmd_unsetenv,   1, 1, 1,
+                "Variable: ", arg_STRING);
+   add_command ("verbexec",      cmd_verbexec,   1, 1, 1,
+-               "/bin/sh -c ", arg_SHELLCMD);
++               "$SHELL -c ", arg_SHELLCMD);
+   add_command ("version",       cmd_version,    0, 0, 0);
+   add_command ("vsplit",        cmd_v_split,    1, 0, 0,
+                "Split: ", arg_STRING);
+@@ -2627,6 +2627,9 @@
+   pid = fork();
+   if (pid == 0)
+     {
++      char *shell_path;
++      char *shell_name;
++
+       /* Some process setup to make sure the spawned process runs
+          in its own session. */
+       putenv(current_screen()->display_string);
+@@ -2641,7 +2644,18 @@
+       /* raw means don't run it through sh.  */
+       if (raw)
+         execl (cmd, cmd, NULL);
+-      execl("/bin/sh", "sh", "-c", cmd, NULL);
++
++      shell_path = getenv ("SHELL");
++      if (shell_path == NULL)
++        shell_path = "/bin/sh";
++
++      shell_name = strrchr (shell_path, '/');
++      if (shell_name == NULL)
++        shell_name = shell_path;
++      else
++        shell_name++;
++
++      execl(shell_path, shell_name, "-c", cmd, NULL);
+       _exit(EXIT_FAILURE);
+     }
+ 
+--- ratpoison/src/events.c.orig	2013-04-06 20:05:48.000000000 -0400
++++ ratpoison/src/events.c	2014-02-13 00:34:39.327758789 -0500
+@@ -920,7 +920,7 @@
+             {
+               /* Report any child that didn't return 0. */
+               if (cur->status != 0)
+-                marked_message_printf (0,0, "/bin/sh -c \"%s\" finished (%d)",
++                marked_message_printf (0,0, "$SHELL -c \"%s\" finished (%d)",
+                                        cur->cmd, cur->status);
+               list_del  (&cur->node);
+               free (cur->cmd);
+--- ratpoison/src/messages.h.orig	2012-07-20 20:25:33.000000000 -0400
++++ ratpoison/src/messages.h	2014-02-13 00:34:28.608398437 -0500
+@@ -41,7 +41,7 @@
+ 
+ #define MESSAGE_PROMPT_SWITCH_TO_WINDOW "Switch to window: "
+ #define MESSAGE_PROMPT_NEW_WINDOW_NAME  "Set window's title to: "
+-#define MESSAGE_PROMPT_SHELL_COMMAND    "/bin/sh -c "
++#define MESSAGE_PROMPT_SHELL_COMMAND    "$SHELL -c "
+ #define MESSAGE_PROMPT_COMMAND          ":"
+ #define MESSAGE_PROMPT_SWITCH_WM        "Switch to wm: "
+ #define MESSAGE_PROMPT_XTERM_COMMAND    MESSAGE_PROMPT_SHELL_COMMAND TERM_PROG " -e "
diff --git a/gnu/packages/patches/slim-config.patch b/gnu/packages/patches/slim-config.patch
new file mode 100644
index 0000000000..5e6135d75c
--- /dev/null
+++ b/gnu/packages/patches/slim-config.patch
@@ -0,0 +1,27 @@
+Allow the configuration file and theme directory to be specified at run time.
+Patch by Eelco Dolstra, from Nixpkgs.
+
+--- slim-1.3.6/app.cpp	2013-10-02 00:38:05.000000000 +0200
++++ slim-1.3.6/app.cpp	2013-10-15 11:02:55.629263422 +0200
+@@ -200,7 +200,9 @@
+ 
+ 	/* Read configuration and theme */
+ 	cfg = new Cfg;
+-	cfg->readConf(CFGFILE);
++	char *cfgfile = getenv("SLIM_CFGFILE");
++	if (!cfgfile) cfgfile = CFGFILE;
++	cfg->readConf(cfgfile);
+ 	string themebase = "";
+ 	string themefile = "";
+ 	string themedir = "";
+@@ -208,7 +210,9 @@
+ 	if (testing) {
+ 		themeName = testtheme;
+ 	} else {
+-		themebase = string(THEMESDIR) + "/";
++		char *themesdir = getenv("SLIM_THEMESDIR");
++		if (!themesdir) themesdir = THEMESDIR;
++		themebase = string(themesdir) + "/";
+ 		themeName = cfg->getOption("current_theme");
+ 		string::size_type pos;
+ 		if ((pos = themeName.find(",")) != string::npos) {
diff --git a/gnu/packages/patches/slim-session.patch b/gnu/packages/patches/slim-session.patch
new file mode 100644
index 0000000000..b85d3f7dd0
--- /dev/null
+++ b/gnu/packages/patches/slim-session.patch
@@ -0,0 +1,17 @@
+Exit after the user's session has finished.  This works around slim's broken
+PAM session handling (see
+http://developer.berlios.de/bugs/?func=detailbug&bug_id=19102&group_id=2663).
+
+Patch by Eelco Dolstra, from Nixpkgs.
+
+--- slim-1.3.6/app.cpp	2013-10-15 11:02:55.629263422 +0200
++++ slim-1.3.6/app.cpp	2013-10-15 13:00:10.141210784 +0200
+@@ -816,7 +822,7 @@
+ 	StopServer();
+ 	RemoveLock();
+ 	while (waitpid(-1, NULL, WNOHANG) > 0); /* Collects all dead childrens */
+-	Run();
++	exit(OK_EXIT);
+ }
+ 
+ void App::KillAllClients(Bool top) {
diff --git a/gnu/packages/patches/slim-sigusr1.patch b/gnu/packages/patches/slim-sigusr1.patch
new file mode 100644
index 0000000000..344b02933e
--- /dev/null
+++ b/gnu/packages/patches/slim-sigusr1.patch
@@ -0,0 +1,33 @@
+This patch fixes SLiM so it really waits for the X server to be ready
+before attempting to connect to it.  Indeed, the X server notices that
+its parent process has a handler for SIGUSR1, and consequently sends it
+SIGUSR1 when it's ready to accept connections.
+
+The problem was that SLiM doesn't pay attention to SIGUSR1.  So in practice,
+if X starts slowly, then SLiM gets ECONNREFUSED a couple of time on
+/tmp/.X11-unix/X0, then goes on trying to connect to localhost:6000,
+where nobody answers; eventually, it times out and tries again on
+/tmp/.X11-unix/X0, and finally it shows up on the screen.
+
+Patch by L. Courtès.
+
+--- slim-1.3.6/app.cpp	2014-02-05 15:27:20.000000000 +0100
++++ slim-1.3.6/app.cpp	2014-02-09 22:42:04.000000000 +0100
+@@ -119,7 +119,9 @@ void CatchSignal(int sig) {
+ 	exit(ERR_EXIT);
+ }
+ 
++static volatile int got_sigusr1 = 0;
+ void User1Signal(int sig) {
++	got_sigusr1 = 1;
+ 	signal(sig, User1Signal);
+ }
+ 
+@@ -884,6 +886,7 @@ int App::WaitForServer() {
+ 	int	ncycles	 = 120;
+ 	int	cycles;
+ 
++	while (!got_sigusr1);
+ 	for(cycles = 0; cycles < ncycles; cycles++) {
+ 		if((Dpy = XOpenDisplay(DisplayName))) {
+ 			XSetIOErrorHandler(xioerror);