2005-11-16 Andrew Stubbs * cli-cmds.c: Include fcntl.h. (source_command): Use the GDB search path to find script files. doc/ * gdb.texinfo (Choosing files): Mention that -directory is used for script files. (Specifying source directories): Likewise. (Command files): Explain how script files are found. Index: src/gdb/cli/cli-cmds.c =================================================================== --- src.orig/gdb/cli/cli-cmds.c 2005-11-14 17:37:07.000000000 +0000 +++ src/gdb/cli/cli-cmds.c 2005-11-14 17:39:24.000000000 +0000 @@ -50,6 +50,8 @@ #include "tui/tui.h" /* For tui_active et.al. */ #endif +#include + /* Prototypes for local command functions */ static void complete_command (char *, int); @@ -433,6 +435,8 @@ source_command (char *args, int from_tty char *file = args; char *minusv=NULL; int old_source_verbose = source_verbose; + char *full_pathname = NULL; + int fd; /* -v causes the source command to run in verbose mode. We still have to be able to handle filenames with spaces. */ @@ -486,8 +490,21 @@ source_command (char *args, int from_tty file = tilde_expand (file); old_cleanups = make_cleanup (xfree, file); - stream = fopen (file, FOPEN_RT); - if (!stream) + /* Search for and open 'file' on the search path used for source + files. Put the full location in 'full_pathname'. */ + /* Search the current directory first if the filename has a directory + separtor in it - it might be a relative path. */ + fd = openp (source_path, + strchr (file, '/') != NULL ? OPF_TRY_CWD_FIRST : 0, + file, O_RDONLY, 0, &full_pathname); + + /* Use the full path name, if it is found. */ + if (full_pathname != NULL && fd != -1) + { + file = full_pathname; + } + + if (fd == -1) { source_verbose = old_source_verbose; if (from_tty) @@ -496,6 +513,7 @@ source_command (char *args, int from_tty return; } + stream = fdopen (fd, "r"); script_from_file (stream, file); do_cleanups (old_cleanups); Index: src/gdb/doc/gdb.texinfo =================================================================== --- src.orig/gdb/doc/gdb.texinfo 2005-11-14 17:37:07.000000000 +0000 +++ src/gdb/doc/gdb.texinfo 2005-11-14 17:39:24.000000000 +0000 @@ -951,7 +951,7 @@ also be interleaved with @samp{-command} @itemx -d @var{directory} @cindex @code{--directory} @cindex @code{-d} -Add @var{directory} to the path to search for source files. +Add @var{directory} to the path to search for source and script files. @item -r @itemx -readnow @@ -4824,6 +4824,9 @@ When you start @value{GDBN}, its source and @samp{cwd}, in that order. To add other directories, use the @code{directory} command. +The search path is used to find both program source files and @value{GDBN} +script files (read using the @samp{-command} option and @samp{source} command). + @table @code @item directory @var{dirname} @dots{} @item dir @var{dirname} @dots{} @@ -15991,6 +15994,11 @@ The lines in a command file are executed printed as they are executed. An error in any command terminates execution of the command file and control is returned to the console. +@value{GDBN} searches for @var{filename} on the search path (specified with the +@samp{directory} command), unless @var{filename} is specified with a relative +path, in which case it searches the current directory first, and then the +search path. Absolute paths are not affected by the search path. + If @code{-v}, for verbose mode, is given then then each command will be displayed as it is executed. The option may be given before or after @var{filename}, but will be interpreted as part of the filename anywhere else.