diff options
author | Doug Evans <dje@google.com> | 2010-10-04 15:30:25 +0000 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2010-10-04 15:30:25 +0000 |
commit | f17618eaf3b901702ad17e3168019a0047a4dda4 (patch) | |
tree | b3d7ffd6b16e22ab835f2b630d3b4c9543a0e2b8 /gdb/python/python.c | |
parent | d954098fc13bc2010aea9501f7ffb66e09cc6950 (diff) | |
download | gdb-f17618eaf3b901702ad17e3168019a0047a4dda4.zip gdb-f17618eaf3b901702ad17e3168019a0047a4dda4.tar.gz gdb-f17618eaf3b901702ad17e3168019a0047a4dda4.tar.bz2 |
* python/python.c (_initialize_python): Define new function
GdbSetPythonDirectory in python. Use it to update sys.path and
gdb.__path__.
Diffstat (limited to 'gdb/python/python.c')
-rw-r--r-- | gdb/python/python.c | 50 |
1 files changed, 36 insertions, 14 deletions
diff --git a/gdb/python/python.c b/gdb/python/python.c index 1cd1503..bbff55f 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -941,6 +941,10 @@ 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); + + /* gdb.parameter ("data-directory") doesn't necessarily exist when the python + script below is run (depending on order of _initialize_* functions). + Define the initial value of gdb.PYTHONDIR here. */ { char *gdb_pythondir; @@ -979,10 +983,14 @@ Enables or disables printing of Python stack traces."), gdbpy_doc_cst = PyString_FromString ("__doc__"); gdbpy_enabled_cst = PyString_FromString ("enabled"); - /* Create a couple objects which are used for Python's stdout and - stderr. */ + /* Remaining initialization is done in Python. + - create a couple objects which are used for Python's stdout and stderr + - provide function GdbSetPythonDirectory */ + PyRun_SimpleString ("\ +import os\n\ import sys\n\ +\n\ class GdbOutputFile:\n\ def close(self):\n\ # Do nothing.\n\ @@ -1004,19 +1012,33 @@ class GdbOutputFile:\n\ sys.stderr = GdbOutputFile()\n\ sys.stdout = GdbOutputFile()\n\ \n\ -# GDB's python scripts are stored inside gdb.PYTHONDIR. So insert\n\ -# that directory name at the start of sys.path to allow the Python\n\ -# interpreter to find them.\n\ -sys.path.insert(0, gdb.PYTHONDIR)\n\ +# Ideally this would live in the gdb module, but it's intentionally written\n\ +# in python, and we need this to bootstrap the gdb module.\n\ +\n\ +def GdbSetPythonDirectory (dir):\n\ + \"Set gdb.PYTHONDIR and update sys.path,etc.\"\n\ + old_dir = gdb.PYTHONDIR\n\ + gdb.PYTHONDIR = dir\n\ + # GDB's python scripts are stored inside gdb.PYTHONDIR. So insert\n\ + # that directory name at the start of sys.path to allow the Python\n\ + # interpreter to find them.\n\ + if old_dir in sys.path:\n\ + sys.path.remove (old_dir)\n\ + sys.path.insert (0, gdb.PYTHONDIR)\n\ +\n\ + # Tell python where to find submodules of gdb.\n\ + gdb.__path__ = [gdb.PYTHONDIR + '/gdb']\n\ +\n\ + # The gdb module is implemented in C rather than in Python. As a result,\n\ + # the associated __init.py__ script is not not executed by default when\n\ + # the gdb module gets imported. Execute that script manually if it\n\ + # exists.\n\ + ipy = gdb.PYTHONDIR + '/gdb/__init__.py'\n\ + if os.path.exists (ipy):\n\ + execfile (ipy)\n\ \n\ -# The gdb module is implemented in C rather than in Python. As a result,\n\ -# the associated __init.py__ script is not not executed by default when\n\ -# the gdb module gets imported. Execute that script manually if it exists.\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\ +# Install the default gdb.PYTHONDIR.\n\ +GdbSetPythonDirectory (gdb.PYTHONDIR)\n\ "); /* Release the GIL while gdb runs. */ |