shell: add a client config entry
diff --git a/src/shell.c b/src/shell.c
index 82c3cd8..0d386cf 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -229,6 +229,8 @@
 
 	struct wl_listener output_create_listener;
 	struct wl_list output_list;
+
+	char *client;
 };
 
 enum shell_surface_type {
@@ -536,6 +538,9 @@
 	section = weston_config_get_section(shell->compositor->config,
 					    "shell", NULL, NULL);
 	weston_config_section_get_string(section,
+					 "client", &s, LIBEXECDIR "/weston-desktop-shell");
+	shell->client = s;
+	weston_config_section_get_string(section,
 					 "binding-modifier", &s, "super");
 	shell->binding_modifier = get_modifier(s);
 	free(s);
@@ -4436,11 +4441,11 @@
 
 	shell->child.deathcount++;
 	if (shell->child.deathcount > 5) {
-		weston_log("weston-desktop-shell died, giving up.\n");
+		weston_log("%s died, giving up.\n", shell->client);
 		return;
 	}
 
-	weston_log("weston-desktop-shell died, respawning...\n");
+	weston_log("%s died, respawning...\n", shell->client);
 	launch_desktop_shell_process(shell);
 	shell_fade_startup(shell);
 }
@@ -4449,15 +4454,14 @@
 launch_desktop_shell_process(void *data)
 {
 	struct desktop_shell *shell = data;
-	const char *shell_exe = LIBEXECDIR "/weston-desktop-shell";
 
 	shell->child.client = weston_client_launch(shell->compositor,
 						 &shell->child.process,
-						 shell_exe,
+						 shell->client,
 						 desktop_shell_sigchld);
 
 	if (!shell->child.client)
-		weston_log("not able to start %s\n", shell_exe);
+		weston_log("not able to start %s\n", shell->client);
 }
 
 static void
@@ -5851,6 +5855,7 @@
 	wl_array_release(&shell->workspaces.array);
 
 	free(shell->screensaver.path);
+	free(shell->client);
 	free(shell);
 }