From 6ba49852d83084f36ec1998f3209a2737fcb01c1 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 17 Jun 2009 20:06:27 +0000 Subject: [PATCH] hook.in: Do not fail when there is no current objfile. * python/hook.in: Do not fail when there is no current objfile. Use os.path.normpath. From-SVN: r148626 --- libstdc++-v3/ChangeLog | 5 ++++ libstdc++-v3/python/hook.in | 59 ++++++++++++++++++++++++--------------------- 2 files changed, 37 insertions(+), 27 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 03c0110..5abe284 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2009-06-17 Tom Tromey + + * python/hook.in: Do not fail when there is no current objfile. + Use os.path.normpath. + 2009-06-16 Jonathan Wakely * libsupc++/exception_ptr.h (exception_ptr::swap(exception_ptr&&)): diff --git a/libstdc++-v3/python/hook.in b/libstdc++-v3/python/hook.in index f7bf1af..120e187 100644 --- a/libstdc++-v3/python/hook.in +++ b/libstdc++-v3/python/hook.in @@ -22,33 +22,38 @@ import os.path pythondir = '@pythondir@' libdir = '@toolexeclibdir@' -# Update module path. We want to find the relative path from libdir -# to pythondir, and then we want to apply that relative path to the -# directory holding the objfile with which this file is associated. -# This preserves relocatability of the gcc tree. - -# Do a simple normalization that removes duplicate separators. -pythondir = os.path.join (*['/'] + pythondir.split (os.sep)) -libdir = os.path.join (*['/'] + libdir.split (os.sep)) - -prefix = os.path.commonprefix ([libdir, pythondir]) -# In some bizarre configuration we might have found a match in the -# middle of a directory name. -if prefix[-1] != '/': - prefix = os.path.dirname (prefix) - -# Strip off the prefix. -pythondir = pythondir[len (prefix):] -libdir = libdir[len (prefix):] - -# Compute the ".."s needed to get from libdir to the prefix. -dotdots = ('..' + os.sep) * len (libdir.split (os.sep)) - -objfile = gdb.current_objfile ().filename -dir = os.path.join (os.path.dirname (objfile), dotdots, pythondir) - -if not dir in sys.path: - sys.path.insert(0, dir) +# This file might be loaded when there is no current objfile. This +# can happen if the user loads it manually. In this case we don't +# update sys.path; instead we just hope the user managed to do that +# beforehand. +if gdb.current_objfile () is not None: + # Update module path. We want to find the relative path from libdir + # to pythondir, and then we want to apply that relative path to the + # directory holding the objfile with which this file is associated. + # This preserves relocatability of the gcc tree. + + # Do a simple normalization that removes duplicate separators. + pythondir = os.path.normpath (pythondir) + libdir = os.path.normpath (libdir) + + prefix = os.path.commonprefix ([libdir, pythondir]) + # In some bizarre configuration we might have found a match in the + # middle of a directory name. + if prefix[-1] != '/': + prefix = os.path.dirname (prefix) + + # Strip off the prefix. + pythondir = pythondir[len (prefix):] + libdir = libdir[len (prefix):] + + # Compute the ".."s needed to get from libdir to the prefix. + dotdots = ('..' + os.sep) * len (libdir.split (os.sep)) + + objfile = gdb.current_objfile ().filename + dir = os.path.join (os.path.dirname (objfile), dotdots, pythondir) + + if not dir in sys.path: + sys.path.insert(0, dir) # Load the pretty-printers. from libstdcxx.v6.printers import register_libstdcxx_printers -- 2.7.4