[evolution] killev: Search for killall/pkill in runtime, rather than in compile time



commit 1d68ce06686c81fe6839b2277a27561faf8ce707
Author: Milan Crha <mcrha redhat com>
Date:   Fri Aug 2 11:18:34 2019 +0200

    killev: Search for killall/pkill in runtime, rather than in compile time

 CMakeLists.txt     | 18 --------------
 config.h.in        |  9 -------
 src/shell/killev.c | 73 +++++++++++++++++++++++++++++++++++++-----------------
 src/shell/main.c   |  2 +-
 4 files changed, 51 insertions(+), 51 deletions(-)
---
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 54b1b2192a..730a71aa3d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -219,24 +219,6 @@ CHECK_INCLUDE_FILE(X11/XF86keysym.h HAVE_XFREE)
 CHECK_FUNCTION_EXISTS(mkdtemp HAVE_MKDTEMP)
 CHECK_FUNCTION_EXISTS(nl_langinfo HAVE_NL_LANGINFO)
 
-# ******************************
-# executables
-# ******************************
-
-find_program(KILL_PROCESS_COMMAND killall)
-if(NOT KILL_PROCESS_COMMAND)
-       find_program(KILL_PROCESS_COMMAND pkill)
-       set(KILL_PROCESS_COMMAND_ARGS "-f")
-       set(KILL_PROCESS_COMMAND_ARG_EXACT "-x")
-else(NOT KILL_PROCESS_COMMAND)
-       set(KILL_PROCESS_COMMAND_ARGS "")
-       set(KILL_PROCESS_COMMAND_ARG_EXACT "-e")
-endif(NOT KILL_PROCESS_COMMAND)
-
-if(NOT KILL_PROCESS_COMMAND)
-       message(WARNING "Could not find a command to kill a process by name")
-endif(NOT KILL_PROCESS_COMMAND)
-
 # ******************************
 # Check for nl_langinfo features
 # ******************************
diff --git a/config.h.in b/config.h.in
index 55666a185d..7e6abf00be 100644
--- a/config.h.in
+++ b/config.h.in
@@ -30,15 +30,6 @@
 /* Defined, when configured with ENABLE_MAINTAINER_MODE */
 #cmakedefine ENABLE_MAINTAINER_MODE 1
 
-/* Command to kill processes by name */
-#cmakedefine KILL_PROCESS_COMMAND "@KILL_PROCESS_COMMAND@"
-
-/* Extra arguments to kill command */
-#cmakedefine KILL_PROCESS_COMMAND_ARGS "@KILL_PROCESS_COMMAND_ARGS@"
-
-/* An argument to kill command to match exact process */
-#cmakedefine KILL_PROCESS_COMMAND_ARG_EXACT "@KILL_PROCESS_COMMAND_ARG_EXACT@"
-
 /* Define to 1 if you have the `nl_langinfo' function. */
 #cmakedefine HAVE_NL_LANGINFO 1
 
diff --git a/src/shell/killev.c b/src/shell/killev.c
index 5409eb139f..80b1683b63 100644
--- a/src/shell/killev.c
+++ b/src/shell/killev.c
@@ -93,6 +93,50 @@ exit:
        return success;
 }
 
+/* Returns whether found kill command, not whether killed anything */
+static gboolean
+call_kill_process (const gchar *process_name,
+                  gboolean request_exact_name)
+{
+       gchar *killcmd, *cmd;
+       const gchar *exact_arg = NULL, *extra_args = NULL;
+
+       g_return_val_if_fail (process_name, FALSE);
+
+       killcmd = g_find_program_in_path ("killall");
+
+       if (killcmd) {
+               exact_arg = "-e";
+       } else {
+               killcmd = g_find_program_in_path ("pkill");
+
+               if (!killcmd) {
+                       g_message ("No killall/pkill command found");
+
+                       return FALSE;
+               }
+
+               exact_arg = "-x";
+               extra_args = "-f";
+       }
+
+       cmd = g_strdup_printf ("%s%s%s%s%s -TERM %s 2> /dev/null",
+               killcmd,
+               extra_args ? " " : "",
+               extra_args ? extra_args : "",
+               request_exact_name ? " " : "",
+               request_exact_name ? exact_arg : "",
+               process_name);
+
+       if (system (cmd) == -1)
+               g_message ("%s: Failed to execute: '%s'", G_STRFUNC, cmd);
+
+       g_free (killcmd);
+       g_free (cmd);
+
+       return TRUE;
+}
+
 gint
 main (gint argc,
       gchar **argv)
@@ -161,29 +205,12 @@ main (gint argc,
        g_object_unref (monitor);
 
 kill:
-#ifdef KILL_PROCESS_COMMAND
-#ifdef KILL_PROCESS_COMMAND_ARGS
-#define KILL_CMD KILL_PROCESS_COMMAND " " KILL_PROCESS_COMMAND_ARGS
-#else
-#define KILL_CMD KILL_PROCESS_COMMAND
-#endif
-#ifndef KILL_PROCESS_COMMAND_ARG_EXACT
-#define KILL_PROCESS_COMMAND_ARG_EXACT ""
-#endif
-       if (system (KILL_CMD " " KILL_PROCESS_COMMAND_ARG_EXACT " -TERM evolution 2> /dev/null") == -1)
-               g_warning ("%s: Failed to execute: '%s'", G_STRFUNC, KILL_PROCESS_COMMAND);
-       if (system (KILL_CMD " -TERM evolution-alarm-notify 2> /dev/null") == -1)
-               g_warning ("%s: Failed to execute: '%s'", G_STRFUNC, KILL_PROCESS_COMMAND);
-       if (system (KILL_CMD " -TERM evolution-source-registry 2> /dev/null") == -1)
-               g_warning ("%s: Failed to execute: '%s'", G_STRFUNC, KILL_PROCESS_COMMAND);
-       if (system (KILL_CMD " -TERM evolution-addressbook-factory 2> /dev/null") == -1)
-               g_warning ("%s: Failed to execute: '%s'", G_STRFUNC, KILL_PROCESS_COMMAND);
-       if (system (KILL_CMD " -TERM evolution-calendar-factory 2> /dev/null") == -1)
-               g_warning ("%s: Failed to execute: '%s'", G_STRFUNC, KILL_PROCESS_COMMAND);
-#undef KILL_CMD
-#else
-       g_printerr ("No \"kill\" command available.\n");
-#endif
+       if (call_kill_process ("evolution", TRUE)) {
+               call_kill_process ("evolution-alarm-notify", FALSE);
+               call_kill_process ("evolution-source-registry", FALSE);
+               call_kill_process ("evolution-addressbook-factory", FALSE);
+               call_kill_process ("evolution-calendar-factory", FALSE);
+       }
 
        g_clear_object (&pid_file);
 
diff --git a/src/shell/main.c b/src/shell/main.c
index d89c4f8bb9..6dc5b8b8ae 100644
--- a/src/shell/main.c
+++ b/src/shell/main.c
@@ -333,7 +333,7 @@ static GOptionEntry entries[] = {
          N_("Start in online mode"), NULL },
        { "force-online", '\0', 0, G_OPTION_ARG_NONE, &force_online,
          N_("Ignore network availability"), NULL },
-#ifdef KILL_PROCESS_CMD
+#ifndef G_OS_WIN32
        { "force-shutdown", '\0', 0, G_OPTION_ARG_NONE, &force_shutdown,
          N_("Forcibly shut down Evolution"), NULL },
 #endif


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]