Index: gdb/top.c =================================================================== RCS file: /cvs/src/src/gdb/top.c,v retrieving revision 1.238 diff -u -p -r1.238 top.c --- gdb/top.c 6 Jul 2013 07:34:48 -0000 1.238 +++ gdb/top.c 29 Jul 2013 05:55:40 -0000 @@ -48,6 +48,7 @@ #include "interps.h" #include "observer.h" #include "maint.h" +#include "filenames.h" /* readline include files. */ #include "readline/readline.h" @@ -1698,6 +1699,17 @@ set_gdb_datadir (char *args, int from_tt } static void +set_history_filename (char *args, int from_tty, struct cmd_list_element *c) +{ + /*We include the current directory so that if the user changes + directories the file written will be the same as the one + that was read. */ + if (!IS_ABSOLUTE_PATH (history_filename)) + history_filename = reconcat (history_filename, current_directory, "/", + history_filename, (char *) NULL); +} + +static void init_main (void) { /* Initialize the prompt to a simple "(gdb) " prompt or to whatever @@ -1773,7 +1785,7 @@ variable \"HISTSIZE\", or to 256 if this Set the filename in which to record the command history"), _("\ Show the filename in which to record the command history"), _("\ (the list of previous commands of which a record is kept)."), - NULL, + set_history_filename, show_history_filename, &sethistlist, &showhistlist); Index: gdb/testsuite/gdb.base/setshow.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.base/setshow.exp,v retrieving revision 1.33 diff -u -p -r1.33 setshow.exp --- gdb/testsuite/gdb.base/setshow.exp 27 Jun 2013 18:58:28 -0000 1.33 +++ gdb/testsuite/gdb.base/setshow.exp 29 Jul 2013 05:57:23 -0000 @@ -165,11 +165,38 @@ gdb_test_no_output "set height unlimited gdb_test_no_output "set history expansion on" "set history expansion on" #test show history expansion on gdb_test "show history expansion on" "History expansion on command input is on.*" "show history expansion" +#get home directory path +set HOME "" +set test "show environment HOME" +gdb_test_multiple $test $test { + -re "\nHOME = (.*).\n.*" { + set HOME $expect_out(1,string) + pass $test + } +} +#test set history filename ~/foobar.baz +gdb_test_no_output "set history filename ~/foobar.baz" \ + "set history filename ~/foobar.baz" +#test show history filename ~/foobar.baz +gdb_test "show history filename" \ + "The filename in which to record the command history is \"$HOME/foobar.baz\"..*" \ + "show history filename (~/foobar.baz)" +#get current working directory +set PWD "" +set test "show working directory" +gdb_test_multiple "pwd" $test { + -re "\nWorking directory (.*)..\n.*" { + set PWD $expect_out(1,string) + pass $test + } +} #test set history filename foobar.baz gdb_test_no_output "set history filename foobar.baz" \ - "set history filename foobar.baz" + "set history filename foobar.baz" #test show history filename foobar.baz -gdb_test "show history filename" "The filename in which to record the command history is \"foobar.baz\"..*" "show history filename (foobar.baz)" +gdb_test "show history filename" \ + "The filename in which to record the command history is \"$PWD/foobar.baz\"..*" \ + "show history filename (current_directory/foobar.baz)" #test set history save on gdb_test_no_output "set history save on" "set history save on" #test show history save on