[gimp] issue #2221: gimptool should install plug-ins into subfolders
- From: Jehan <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] issue #2221: gimptool should install plug-ins into subfolders
- Date: Mon, 16 Sep 2019 07:38:59 +0000 (UTC)
commit 283ec1da0f62216f694316bea307f6a26e2efe1e
Author: Sergio Jiménez Herena <sergio jimenez herena gmail com>
Date: Wed Oct 3 10:30:13 2018 +0200
issue #2221: gimptool should install plug-ins into subfolders
tools/gimptool.c | 133 ++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 103 insertions(+), 30 deletions(-)
---
diff --git a/tools/gimptool.c b/tools/gimptool.c
index 03b886ba21..0b0b2236e0 100644
--- a/tools/gimptool.c
+++ b/tools/gimptool.c
@@ -61,9 +61,11 @@ static const gchar *env_libs;
#ifdef G_OS_WIN32
#define COPY win32_command ("copy")
#define REMOVE win32_command ("del")
+#define REMOVE_DIR win32_command ("rd /s /q")
#else
#define COPY "cp"
#define REMOVE "rm -f"
+#define REMOVE_DIR "rm -Rf"
#endif
static struct {
@@ -563,13 +565,22 @@ do_build_2 (const gchar *cflags,
else
q++;
- tmp = dest_exe;
- dest_exe = g_strconcat (dest_dir, q, EXEEXT, NULL);
+ if (install_dir)
+ {
+ tmp = dest_dir;
+ dest_dir = g_strconcat (dest_dir, q, G_DIR_SEPARATOR_S, NULL);
+ g_free (tmp);
+
+ g_mkdir_with_parents (dest_dir,
+ S_IRUSR | S_IXUSR | S_IWUSR |
+ S_IRGRP | S_IXGRP |
+ S_IROTH | S_IXOTH);
+ }
+
+ tmp = g_strconcat (dest_dir, q, NULL);
g_free (dest_dir);
- g_free (tmp);
- tmp = dest_exe;
- dest_exe = g_shell_quote (dest_exe);
+ dest_exe = g_shell_quote (tmp);
g_free (tmp);
if (msvc_syntax)
@@ -644,6 +655,44 @@ get_user_plugin_dir (void)
NULL);
}
+static gchar *
+get_plugin_dir (const gchar *base_dir, const gchar *what)
+{
+ gchar *separator, *dot, *plugin_name, *plugin_dir;
+ gchar *tmp = g_strdup (what);
+
+ separator = strrchr (tmp, G_DIR_SEPARATOR);
+#ifdef G_OS_WIN32
+ {
+ gchar *alt_separator = strrchr (tmp, '/');
+ if (alt_separator != NULL &&
+ (separator == NULL || alt_separator > separator))
+ {
+ separator = alt_separator;
+ }
+ }
+#endif
+
+ dot = strrchr (tmp, '.');
+
+ if (separator)
+ plugin_name = separator + 1;
+ else
+ plugin_name = tmp;
+
+ if (dot)
+ *dot = '\0';
+
+ plugin_dir = g_strconcat (base_dir,
+ G_DIR_SEPARATOR_S,
+ plugin_name,
+ NULL);
+
+ g_free (tmp);
+
+ return plugin_dir;
+}
+
static void
do_install (const gchar *what)
{
@@ -757,16 +806,18 @@ do_install_bin_2 (const gchar *dir,
gchar *quoted_src;
gchar *quoted_dir;
- g_mkdir_with_parents (dir,
+ gchar *dest_dir = g_strconcat (dir, G_DIR_SEPARATOR_S, NULL);
+ g_mkdir_with_parents (dest_dir,
S_IRUSR | S_IXUSR | S_IWUSR |
S_IRGRP | S_IXGRP |
S_IROTH | S_IXOTH);
quoted_src = g_shell_quote (what);
- quoted_dir = g_shell_quote (dir);
+ quoted_dir = g_shell_quote (dest_dir);
cmd = g_strconcat (COPY, " ", quoted_src, " ", quoted_dir, NULL);
maybe_run (cmd);
+ g_free (dest_dir);
g_free (cmd);
g_free (quoted_src);
g_free (quoted_dir);
@@ -776,8 +827,11 @@ static void
do_install_bin (const gchar *what)
{
gchar *dir = get_user_plugin_dir ();
+ gchar *plugin_dir = get_plugin_dir (dir, what);
- do_install_bin_2 (dir, what);
+ do_install_bin_2 (plugin_dir, what);
+
+ g_free (plugin_dir);
g_free (dir);
}
@@ -785,14 +839,31 @@ static void
do_install_admin_bin (const gchar *what)
{
gchar *dir = get_sys_plugin_dir (FALSE);
+ gchar *plugin_dir = get_plugin_dir (dir, what);
do_install_bin_2 (dir, what);
+
+ g_free (plugin_dir);
g_free (dir);
}
static void
-do_uninstall (const gchar *dir,
- const gchar *what)
+do_uninstall (const gchar *dir)
+{
+ gchar *cmd;
+ gchar *quoted_src;
+ quoted_src = g_shell_quote (dir);
+
+ cmd = g_strconcat (REMOVE_DIR, " ", quoted_src, NULL);
+ maybe_run (cmd);
+
+ g_free (cmd);
+ g_free (quoted_src);
+}
+
+static void
+do_uninstall_script_2 (const gchar *dir,
+ const gchar *what)
{
gchar *cmd;
gchar *quoted_src;
@@ -800,13 +871,13 @@ do_uninstall (const gchar *dir,
src = g_strconcat (dir, G_DIR_SEPARATOR_S, what, NULL);
quoted_src = g_shell_quote (src);
- g_free (src);
cmd = g_strconcat (REMOVE, " ", quoted_src, NULL);
maybe_run (cmd);
g_free (cmd);
g_free (quoted_src);
+ g_free (src);
}
static gchar *
@@ -825,11 +896,13 @@ maybe_append_exe (const gchar *what)
static void
do_uninstall_bin (const gchar *what)
{
- gchar *dir = get_user_plugin_dir ();
- gchar *exe = maybe_append_exe (what);
+ gchar *dir = get_user_plugin_dir ();
+ gchar *exe = maybe_append_exe (what);
+ gchar *plugin_dir = get_plugin_dir (dir, what);
- do_uninstall (dir, exe);
+ do_uninstall (plugin_dir);
+ g_free (plugin_dir);
g_free (dir);
g_free (exe);
}
@@ -837,11 +910,13 @@ do_uninstall_bin (const gchar *what)
static void
do_uninstall_admin_bin (const gchar *what)
{
- gchar *dir = get_sys_plugin_dir (FALSE);
- gchar *exe = maybe_append_exe (what);
+ gchar *dir = get_sys_plugin_dir (FALSE);
+ gchar *exe = maybe_append_exe (what);
+ gchar *plugin_dir = get_plugin_dir (dir, what);
- do_uninstall (dir, exe);
+ do_uninstall (plugin_dir);
+ g_free (plugin_dir);
g_free (dir);
g_free (exe);
}
@@ -891,7 +966,7 @@ do_uninstall_script (const gchar *what)
{
gchar *dir = get_user_script_dir ();
- do_uninstall (dir, what);
+ do_uninstall_script_2 (dir, what);
g_free (dir);
}
@@ -900,7 +975,7 @@ do_uninstall_admin_script (const gchar *what)
{
gchar *dir = get_sys_script_dir ();
- do_uninstall (dir, what);
+ do_uninstall_script_2 (dir, what);
g_free (dir);
}
@@ -941,18 +1016,14 @@ main (int argc,
}
else if (strcmp (argv[argi], "--msvc-syntax") == 0)
{
+#ifdef G_OS_WIN32
msvc_syntax = TRUE;
+#else
+ g_printerr ("Ignoring --msvc-syntax\n");
+#endif
}
}
-#ifndef G_OS_WIN32
- if (msvc_syntax)
- {
- g_printerr ("Ignoring --msvc-syntax\n");
- msvc_syntax = FALSE;
- }
-#endif
-
find_out_env_flags ();
/* Second pass, actually do something. */
@@ -963,13 +1034,15 @@ main (int argc,
{
gchar *test = g_strconcat ("--", dirs[i].option, NULL);
- if (strcmp (argv[argi],
- g_strconcat ("--", dirs[i].option, NULL)) == 0)
+ if (strcmp (argv[argi], test) == 0)
{
g_free (test);
break;
}
- g_free (test);
+ else
+ {
+ g_free (test);
+ }
}
if (i < G_N_ELEMENTS (dirs))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]