Re: [RFC] Improve testsuite for poor expect behavior

Joel Brobecker
2009-06-16T14:58:13Z

[-- Attachment #1: Type: text/plain, Size: 485 bytes --]

> > Yeah - we use that in two situations, one of them being our testsuite.
> > I can resend if it helps.
>
> Yes, please. This would be very helpful to check if my solution
> brings something more or if yours should be used.

Here it is. I've extracted it from our tree, and the patch itself
is pretty raw - needs testing and documentation, but it should allow
you to see whether that helps or not in your case. I'll finish up
the patch as soon as you confirm it's helping.

--
Joel

[-- Attachment #2: interactive.diff --]
[-- Type: text/x-diff, Size: 2587 bytes --]

Index: top.c
===================================================================
--- top.c (.../branches/gdb/FSF/current/gdb/top.c) (revision 149871)
+++ top.c (.../trunk/gdb/gdb-head/gdb/top.c) (revision 149871)
@@ -1288,12 +1308,38 @@ quit_force (char *args, int from_tty)
exit (exit_code);
}

+/* If OFF, the debugger will run in non-interactive mode, which means
+ that it will automatically select the default answer to all the
+ queries made to the user. If ON, gdb will wait for the user to
+ answer all queries. If AUTO, gdb will determine whether to run
+ in interactive mode or not depending on whether stdin is a terminal
+ or not. */
+static enum auto_boolean interactive_mode = AUTO_BOOLEAN_AUTO;
+
+/* Implement the "show interactive-mode" option. */
+
+static void
+show_interactive_mode (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
+{
+ if (interactive_mode == AUTO_BOOLEAN_AUTO)
+ fprintf_filtered (file, "\
+Debugger's interactive mode is %s (currently %s).\n",
+ value, input_from_terminal_p () ? "on" : "off");
+ else
+ fprintf_filtered (file, "Debugger's interactive mode is %s.\n", value);
+}
+
/* Returns whether GDB is running on a terminal and input is
currently coming from that terminal. */

int
input_from_terminal_p (void)
{
+ if (interactive_mode != AUTO_BOOLEAN_AUTO)
+ return interactive_mode == AUTO_BOOLEAN_TRUE;
+
if (gdb_has_a_terminal () && instream == stdin)
return 1;

@@ -1625,6 +1675,19 @@ Use \"on\" to enable the notification, a
show_exec_done_display_p,
&setlist, &showlist);

+ add_setshow_auto_boolean_cmd ("interactive-mode", class_support,
+ &interactive_mode, _("\
+Set whether gdb should run in interactive mode or not"), _("\
+Show whether gdb runs in interactive mode"), _("\
+If on, gdb runs in interactive mode and waits for the user to answer\n\
+all its queries. If off, gdb runs in non-interactive mode and\n\
+automatically assumes the default answer to all its queries. If auto\n\
+(which is the default), automatically determine which mode to use based\n\
+on the standard input settings"),
+ NULL,
+ show_interactive_mode,
+ &setlist, &showlist);
+
add_setshow_filename_cmd ("data-directory", class_maintenance,
&gdb_datadir, _("Set GDB's data directory."),
_("Show GDB's data directory."),