Commit 283ec1da authored by Sergio Jiménez Herena's avatar Sergio Jiménez Herena Committed by Jehan

issue #2221: gimptool should install plug-ins into subfolders

parent a94a2865
Pipeline #115473 passed with stages
in 11 minutes and 51 seconds
......@@ -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))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment