This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Add support for gdb.PYTHONDIR as $gdb_datadir/python.


On Thu, Jun 24, 2010 at 11:18 AM, Joel Brobecker <brobecker@adacore.com> wrote:
> Here is a new stab at implementing a "pythondir":
>
> Python scripts to be used by GDB can be stored in that directory,
> and will be automatically found by the interpreter when importing them.
> This patch also sets up <gdb_pythondir>/gdb as the directory where gdb
> submodules can be stored. ?For now, there is nothing there, but it can
> now be added easily without further code changes.
>
> The difference with the previous patch is that this pythondir is no
> longer changeable during configure - it's now hardcoded.
>
> Another tiny differnce is that I named the associated "variable"
> in the gdb module as "PYTHONDIR", rather than "pythondir". ?This is
> because Python does not have constants and the usual convention to
> name variables that are supposed to be constant is to use all-upper-case.
>
>
> gdb/ChangeLog:
> 2010-06-24 ?Joel Brobecker ?<brobecker@adacore.com>
>
> ? ? ? ?* python/python.c (_initialize_python): Add new "constant"
> ? ? ? ?PYTHONDIR in gdb module. ?Insert this path at the head of
> ? ? ? ?sys.path. Set gdb.__path__ to gdb.PYTHONDIR + '/gdb' and
> ? ? ? ?exec its __init__.py script if it exists in that directory.
>
> Tested on x86_64-linux, no regression. ?I also verified by hand that
> sys.path has the expected path at the start of the list, and that an
> import of a script in that directory works as expected.
>
> I guess documentation and NEWS will have to be written if this patch
> goes in...
>
> ---
> ?gdb/python/python.c | ? 14 ++++++++++++++
> ?1 files changed, 14 insertions(+), 0 deletions(-)
>
> diff --git a/gdb/python/python.c b/gdb/python/python.c
> index 31880c1..0018816 100644
> --- a/gdb/python/python.c
> +++ b/gdb/python/python.c
> @@ -668,6 +668,13 @@ Enables or disables printing of Python stack traces."),
> ? PyModule_AddStringConstant (gdb_module, "VERSION", (char*) version);
> ? PyModule_AddStringConstant (gdb_module, "HOST_CONFIG", (char*) host_name);
> ? PyModule_AddStringConstant (gdb_module, "TARGET_CONFIG", (char*) target_name);
> + ?{
> + ? ?char *gdb_pythondir;
> +
> + ? ?gdb_pythondir = concat (gdb_datadir, SLASH_STRING, "python", NULL);
> + ? ?PyModule_AddStringConstant (gdb_module, "PYTHONDIR", gdb_pythondir);
> + ? ?xfree (gdb_pythondir);
> + ?}
>
> ? gdbpy_gdberror_exc = PyErr_NewException ("gdb.GdbError", NULL, NULL);
> ? PyModule_AddObject (gdb_module, "GdbError", gdbpy_gdberror_exc);
> @@ -720,6 +727,13 @@ class GdbOutputFile:\n\
> ?\n\
> ?sys.stderr = GdbOutputFile()\n\
> ?sys.stdout = GdbOutputFile()\n\
> +\n\
> +sys.path.insert(0, gdb.PYTHONDIR)\n\
> +gdb.__path__ = [gdb.PYTHONDIR + '/gdb']\n\
> +from os.path import exists\n\
> +ipy = gdb.PYTHONDIR + '/gdb/__init__.py'\n\
> +if exists (ipy):\n\
> + ?execfile (ipy)\n\
> ?");
>
> ? /* Release the GIL while gdb runs. ?*/
> --
> 1.7.1
>
>

Hi.

Looks great to me with one nit.

The execfile of __init__.py feels odd.  I haven't seen it done
elsewhere and I wonder if it's needed.
[I know python has __init__.py, I just don't know if we have to
*explicitly* exec it.]


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]