2004-11-08 Leena Gunda <[email protected]>
authorlsgunda
Mon, 08 Nov 2004 06:31:35 +0000
changeset 4469 95b1ef8c7146
parent 4468 d2ebf6f0146d
child 4470 7d4787466c9c
2004-11-08 Leena Gunda <[email protected]> * bug-buddy.spec: Update * patches/bug-buddy-05-use-pstack.diff: added patch to make bug-buddy use pstack on Solaris as gdb is not available. Fixes bug #5102045. Patch approved by [email protected]
ChangeLog
bug-buddy.spec
patches/bug-buddy-05-use-pstack.diff
--- a/ChangeLog	Mon Nov 08 05:53:27 2004 +0000
+++ b/ChangeLog	Mon Nov 08 06:31:35 2004 +0000
@@ -1,3 +1,10 @@
+2004-11-08  Leena Gunda  <[email protected]>
+
+	* bug-buddy.spec: Update
+	* patches/bug-buddy-05-use-pstack.diff: added patch to make 
+	bug-buddy use pstack on Solaris as gdb is not available. Fixes
+	bug #5102045. Patch approved by [email protected]
+
 2004-11-08  Takao Fujiwara  <[email protected]>
 	* ext-sources/l10n-configure.sh: Updated for typo.
 	* evolution.spec: Updated to correct the insert line.
--- a/bug-buddy.spec	Mon Nov 08 05:53:27 2004 +0000
+++ b/bug-buddy.spec	Mon Nov 08 06:31:35 2004 +0000
@@ -16,6 +16,8 @@
 Patch2:       bug-buddy-02-srcMakefile.diff
 Patch3:       bug-buddy-03-docs.diff
 Patch4:       bug-buddy-04-l10n-online-help.diff
+Patch5:       bug-buddy-05-use-pstack.diff
+
 URL:          www.gnome.org
 BuildRoot:    %{_tmppath}/%{name}-%{version}-build
 Docdir:       %{_docdir}/bug-buddy
@@ -44,6 +46,7 @@
 %patch2 -p1
 %patch3 -p1
 %patch4 -p1
+%patch5 -p1
 
 bash -x %SOURCE5
 
@@ -117,6 +120,10 @@
  
 
 %changelog
+* Mon Nov 08 2004 - [email protected]
+- Added bug-buddy-05-use-pstack.diff to use pstack to get the stack 
+  trace on Solaris as gdb is not available. Fixes bug #5102045.
+
 * Wed Aug 25 2004 - [email protected]
 - Added l10n help contents with patch
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/bug-buddy-05-use-pstack.diff	Mon Nov 08 06:31:35 2004 +0000
@@ -0,0 +1,221 @@
+--- bug-buddy-2.6.1/configure.in	Fri Apr 16 17:11:54 2004
++++ bug-buddy-2.6.1-new/configure.in	Tue Nov  2 15:56:53 2004
+@@ -70,7 +70,12 @@ AM_GLIB_GNU_GETTEXT
+ 
+ AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal)
+ 
+-                                                                                                                             
++AC_CANONICAL_HOST
++case "$host" in
++*solaris*)
++	AC_DEFINE(SOLARIS,1,Define to 1 if solaris)
++	;;
++esac	                                                                                                                             
+ AC_ARG_ENABLE(deprecations,AC_HELP_STRING([--enable-deprecations],[warn about deprecated usages]))
+                                                                                                                              
+ AM_CONDITIONAL(ENABLE_DEPRECATIONS, test "x$enable_deprecations" = xyes)
+--- bug-buddy-2.6.1/src/gdb-buddy.c	Wed Oct  8 20:10:04 2003
++++ bug-buddy-2.6.1-new/src/gdb-buddy.c	Tue Nov  2 19:34:55 2004
+@@ -161,19 +161,33 @@ get_trace_from_core (const gchar *core_f
+ 	int status;
+ 	FILE *f;
+ 
+-	gdb_cmd = g_strdup_printf ("gdb --batch --core=%s", core_file);
++#ifdef SOLARIS
++	char *gdb = g_find_program_in_path ("gdb");
++	if (gdb)
++#endif
++		gdb_cmd = g_strdup_printf ("gdb --batch --core=%s", core_file);
++#ifdef SOLARIS
++	else
++		gdb_cmd = g_strdup_printf ("pstack %s", core_file);
++#endif
+ 
+ 	f = popen (gdb_cmd, "r");
+ 	g_free (gdb_cmd);
+ 
+ 	if (!f) {
+ 		GtkWidget *d;
++		char *str = "gdb";
++#ifdef SOLARIS
++		if (!gdb)
++			str = "pstack";
++#endif
++
+ 		d = gtk_message_dialog_new (GTK_WINDOW (GET_WIDGET ("druid-window")),
+ 					    0,
+ 					    GTK_MESSAGE_ERROR,
+ 					    GTK_BUTTONS_OK,
+-					    _("Unable to process core file with gdb:\n"
+-					      "'%s'"), core_file);
++					    _("Unable to process core file with %s:\n"
++					      "'%s'"), str, core_file);
+ 		gtk_dialog_set_default_response (GTK_DIALOG (d), GTK_RESPONSE_OK);
+ 		gtk_dialog_run (GTK_DIALOG (d));
+ 		gtk_widget_destroy (d);
+@@ -193,18 +207,39 @@ get_trace_from_core (const gchar *core_f
+ 				binary = g_strdup(s);
+ 			}
+ 		}
++#ifdef SOLARIS
++		else if (!binary && !strncmp(buf, "core ", 4)) {
++			gchar *s;
++			gchar *ptr = buf;
++			while (*ptr != ':' && *ptr !='\0') ptr++;
++			if (*ptr == ':') {
++				ptr++;
++				while (*ptr == ' ' || *ptr == '\t') ptr++;
++				s = ptr;
++				while (*ptr !='\0') ptr++;
++				*ptr = '\0';
++				binary = g_strdup(s);
++			}
++		}
++#endif
+ 	}
+ 
+ 	status = pclose(f);
+ 
+ 	if (!binary) {
+ 		GtkWidget *d;
++		char *str = "GDB";
++#ifdef SOLARIS
++		if (!gdb)
++			str = "Pstack";
++#endif
++
+ 		d = gtk_message_dialog_new (GTK_WINDOW (GET_WIDGET ("druid-window")),
+ 					    0,
+ 					    GTK_MESSAGE_ERROR,
+ 					    GTK_BUTTONS_OK,
+-					    _("GDB was unable to determine which binary created\n"
+-					      "'%s'"), core_file);
++					    _("%s was unable to determine which binary created\n"
++					      "'%s'"), str, core_file);
+ 		gtk_dialog_set_default_response (GTK_DIALOG (d), GTK_RESPONSE_OK);
+ 		gtk_dialog_run (GTK_DIALOG (d));
+ 		gtk_widget_destroy (d);
+@@ -276,21 +311,41 @@ get_trace_from_pair (const gchar *app, c
+ 	const char *short_app;
+ 	char *long_app;
+ 	GError *error = NULL;
+-	char *args[] = { "gdb",
+-			 "--batch", 
+-			 "--quiet",
+-			 "--command=" BUDDY_DATADIR "/gdb-cmd",
+-			 NULL, NULL, NULL };
+-	args[0] = g_find_program_in_path ("gdb");
+-	args[5] = (char *)extra;
++	char *args[7];
++	char *gdb = g_find_program_in_path ("gdb");
++
++        if (!app || !extra || !*app || !*extra)
++                return;
++
++	if (gdb) {
++		args[0] =  gdb;
++		args[1] = "--batch";
++		args[2] = "--quiet";
++		args[3] = "--command=" BUDDY_DATADIR "/gdb-cmd";
++		args[4] = NULL;
++		args[5] = (char *)extra;
++		args[6] = NULL;
++	}
++#ifdef SOLARIS
++	else {
++		args[0] = g_find_program_in_path ("pstack");
++		args[1] = (char *)extra;
++		args[2] = args[3] = args[4] =  args[5] = args[6] = NULL;
++	}
++#endif
+ 
+ 	if (!args[0]) {
++		char *str = "GDB";
++#ifdef SOLARIS
++		if (!gdb)		
++			str = "Pstack";
++#endif
+ 		d = gtk_message_dialog_new (GTK_WINDOW (GET_WIDGET ("druid-window")),
+ 					    0,
+ 					    GTK_MESSAGE_ERROR,
+ 					    GTK_BUTTONS_OK,
+-					    _("GDB could not be found on your system.\n"
+-					      "Debugging information will not be obtained."));
++					    _("%s could not be found on your system.\n"
++					      "Debugging information will not be obtained."), str);
+ 		d(g_message ("Path: %s", getenv ("PATH")));
+ 		gtk_dialog_set_default_response (GTK_DIALOG (d),
+ 						 GTK_RESPONSE_OK);
+@@ -299,10 +354,6 @@ get_trace_from_pair (const gchar *app, c
+ 		return;
+ 	}
+ 
+-	if (!app || !extra || !*app || !*extra)
+-		return;
+-	
+-
+ 	if (*app == G_DIR_SEPARATOR) {
+ 		long_app = g_strdup (app);
+ 		short_app = strrchr (app, G_DIR_SEPARATOR) + 1;
+@@ -322,24 +373,24 @@ get_trace_from_pair (const gchar *app, c
+ 		g_free (args[0]);
+ 		return;
+ 	}
+-
+-	args[4] = long_app;
+-
+ 	d(g_message ("About to debug '%s'", long_app));
+-	
+-	if (!g_file_test (BUDDY_DATADIR "/gdb-cmd", G_FILE_TEST_EXISTS)) {
+-		d = gtk_message_dialog_new (GTK_WINDOW (GET_WIDGET ("druid-window")),
+-					    0,
+-					    GTK_MESSAGE_ERROR,
+-					    GTK_BUTTONS_OK,
+-					    _("Could not find the gdb-cmd file.\n"
+-					      "Please try reinstalling Bug Buddy."));
+-		gtk_dialog_run (GTK_DIALOG (d));
+-		gtk_dialog_set_default_response (GTK_DIALOG (d),
+-						 GTK_RESPONSE_OK);
+-		gtk_widget_destroy (d);
+-		g_free (long_app);
+-		return;
++
++	if (gdb) {
++		args[4] = long_app;
++		if (!g_file_test (BUDDY_DATADIR "/gdb-cmd", G_FILE_TEST_EXISTS)) {
++			d = gtk_message_dialog_new (GTK_WINDOW (GET_WIDGET ("druid-window")),
++						    0,
++						    GTK_MESSAGE_ERROR,
++						    GTK_BUTTONS_OK,
++						    _("Could not find the gdb-cmd file.\n"
++						      "Please try reinstalling Bug Buddy."));
++			gtk_dialog_run (GTK_DIALOG (d));
++			gtk_dialog_set_default_response (GTK_DIALOG (d),
++							 GTK_RESPONSE_OK);
++			gtk_widget_destroy (d);
++			g_free (long_app);
++			return;
++		}
+ 	}
+ 
+ 	if (!g_spawn_async_with_pipes (NULL, args, NULL, 0, NULL, NULL,
+@@ -347,11 +398,18 @@ get_trace_from_pair (const gchar *app, c
+ 				       NULL, 
+ 				       &druid_data.fd, 
+ 				       NULL, &error)) {
++		char *str = "gdb";
++#ifdef SOLARIS
++		if (!gdb)
++			str = "pstack";
++#endif
++
+ 		d = gtk_message_dialog_new (GTK_WINDOW (GTK_WIDGET ("druid-window")),
+ 					    0,
+ 					    GTK_MESSAGE_ERROR,
+ 					    GTK_BUTTONS_OK,
+-					    _("There was an error running gdb:\n\n%s"),
++					    _("There was an error running %s:\n\n%s"),
++					    str, 
+ 					    error->message);
+ 		gtk_dialog_run (GTK_DIALOG (d));
+ 		gtk_dialog_set_default_response (GTK_DIALOG (d),