[anjuta] Patch from Debarishi. Install required packages using packagekit during a new project creation.
- From: Naba Kumar <naba src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [anjuta] Patch from Debarishi. Install required packages using packagekit during a new project creation.
- Date: Sun, 24 Jan 2010 16:02:52 +0000 (UTC)
commit c884e45f1d5e71d501660ee47be0185bbd32c160
Author: Naba Kumar <naba gnome org>
Date: Sat Jan 23 21:46:09 2010 +0200
Patch from Debarishi. Install required packages using packagekit during a
new project creation.
plugins/project-wizard/Makefile.am | 2 +
plugins/project-wizard/druid.c | 48 +++++++++++++++++++++++++++++++++---
plugins/project-wizard/header.c | 25 +++++-------------
3 files changed, 53 insertions(+), 22 deletions(-)
---
diff --git a/plugins/project-wizard/Makefile.am b/plugins/project-wizard/Makefile.am
index 1f7c1bf..6ee5bff 100644
--- a/plugins/project-wizard/Makefile.am
+++ b/plugins/project-wizard/Makefile.am
@@ -31,6 +31,8 @@ AM_CPPFLAGS = \
$(WARN_CFLAGS) \
$(DEPRECATED_FLAGS) \
$(LIBANJUTA_CFLAGS) \
+ -DANJUTA_BINDIR=\"$(bindir)\" \
+ -DANJUTA_LIBDIR=\"$(libdir)\" \
-DG_LOG_DOMAIN=\"libanjuta-project-wizard\"
libanjuta_project_wizard_la_LDFLAGS = $(ANJUTA_PLUGIN_LDFLAGS)
diff --git a/plugins/project-wizard/druid.c b/plugins/project-wizard/druid.c
index bc64e56..53bd4c9 100644
--- a/plugins/project-wizard/druid.c
+++ b/plugins/project-wizard/druid.c
@@ -761,15 +761,55 @@ on_druid_parse_page (const gchar* output, gpointer data)
npw_page_parser_parse (parser, output, strlen (output), NULL);
}
+static void
+strip_package_version_info (gpointer data, gpointer user_data)
+{
+ gchar * const pkg = (gchar *) data;
+
+ if (!data)
+ return;
+ g_strdelimit (pkg, " ", '\0');
+}
+
static gboolean
check_and_warn_missing (NPWDruid *druid)
{
GList *missing_programs, *missing_packages;
+ GList *missing_files = NULL;
GString *missing_message = NULL;
-
+ gboolean installed = TRUE;
+
missing_programs = npw_header_check_required_programs (druid->header);
missing_packages = npw_header_check_required_packages (druid->header);
-
+
+ anjuta_util_glist_strings_prefix (missing_programs, ANJUTA_BINDIR "/");
+
+ g_list_foreach (missing_packages, (GFunc *) strip_package_version_info,
+ NULL);
+ anjuta_util_glist_strings_prefix (missing_packages,
+ ANJUTA_LIBDIR "/pkgconfig/");
+ anjuta_util_glist_strings_sufix (missing_packages, ".pc");
+
+ missing_files = g_list_concat (missing_programs, missing_packages);
+
+ if (missing_files)
+ {
+ gchar * missing_names = NULL;
+
+ missing_names = anjuta_util_glist_strings_join (missing_files, ", ");
+ installed = anjuta_util_install_files (missing_names);
+
+ if (missing_names)
+ g_free (missing_names);
+ anjuta_util_glist_strings_free (missing_files);
+ }
+
+ if (installed == TRUE)
+ return TRUE;
+
+ missing_programs = npw_header_check_required_programs (druid->header);
+ missing_packages = npw_header_check_required_packages (druid->header);
+
if (missing_programs || missing_packages)
{
missing_message = g_string_new (NULL);
@@ -783,7 +823,7 @@ check_and_warn_missing (NPWDruid *druid)
g_string_append_printf (missing_message,
_("\nMissing programs: %s."), missing_progs);
g_free (missing_progs);
- g_list_free (missing_programs);
+ anjuta_util_glist_strings_free (missing_programs);
}
if (missing_packages)
@@ -794,7 +834,7 @@ check_and_warn_missing (NPWDruid *druid)
g_string_append_printf (missing_message,
_("\nMissing packages: %s."), missing_pkgs);
g_free (missing_pkgs);
- g_list_free (missing_packages);
+ anjuta_util_glist_strings_free (missing_packages);
}
if (missing_message)
diff --git a/plugins/project-wizard/header.c b/plugins/project-wizard/header.c
index 6fa0cd7..9101101 100644
--- a/plugins/project-wizard/header.c
+++ b/plugins/project-wizard/header.c
@@ -155,27 +155,14 @@ npw_header_check_required_programs (NPWHeader* self)
{
if (!anjuta_util_prog_is_installed (node->data, FALSE))
{
- failed_programs = g_list_prepend (failed_programs, node->data);
+ const gchar *const prog = (const gchar *) node->data;
+ failed_programs = g_list_prepend (failed_programs,
+ g_strdup (prog));
}
}
return failed_programs;
}
-static gboolean
-package_is_installed (const gchar *package)
-{
- int status;
- int exit_status;
- pid_t pid;
- if ((pid = fork()) == 0)
- {
- execlp ("pkg-config", "pkg-config", "--exists", package, NULL);
- }
- waitpid (pid, &status, 0);
- exit_status = WEXITSTATUS (status);
- return (exit_status == 0);
-}
-
GList*
npw_header_check_required_packages (NPWHeader* self)
{
@@ -183,9 +170,11 @@ npw_header_check_required_packages (NPWHeader* self)
GList *failed_packages = NULL;
for (node = self->required_packages; node; node = g_list_next (node))
{
- if (!package_is_installed (node->data))
+ if (!anjuta_util_package_is_installed (node->data, FALSE))
{
- failed_packages = g_list_prepend (failed_packages, node->data);
+ const gchar *const pkg = (const gchar *) node->data;
+ failed_packages = g_list_prepend (failed_packages,
+ g_strdup (pkg));
}
}
return failed_packages;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]