re PR libstdc++/40289 (share/libstdc++/python/ pollutes common namespace)

PR libstdc++/40289:
	* python/Makefile.in: Rebuild.
	* python/hook.in: Compute module path relative to objfile.
	* python/Makefile.am (pythondir): Redefine.
	(gdb.py): Subst toolexeclibdir.
	(install-data-local): Rewrite.

From-SVN: r148357
This commit is contained in:
Tom Tromey 2009-06-10 22:58:22 +00:00 committed by Tom Tromey
parent a567fa6a3d
commit 35204bbe76
4 changed files with 74 additions and 8 deletions

View File

@ -1,3 +1,12 @@
2009-06-10 Tom Tromey <tromey@redhat.com>
PR libstdc++/40289:
* python/Makefile.in: Rebuild.
* python/hook.in: Compute module path relative to objfile.
* python/Makefile.am (pythondir): Redefine.
(gdb.py): Subst toolexeclibdir.
(install-data-local): Rewrite.
2009-06-09 Benjamin Kosnik <bkoz@redhat.com>
* include/bits/move.h: Doxygen group fixes.

View File

@ -24,7 +24,7 @@
include $(top_srcdir)/fragment.am
## Where to install the module code.
pythondir = $(pkgdatadir)/python
pythondir = $(datadir)/gcc-$(gcc_version)/python
all-local: gdb.py
@ -34,10 +34,27 @@ nobase_python_DATA = \
libstdcxx/__init__.py
gdb.py: hook.in Makefile
sed -e 's,@dir@,$(pythondir),' < $(srcdir)/hook.in > $@
sed -e 's,@pythondir@,$(pythondir),' \
-e 's,@toolexeclibdir@,$(toolexeclibdir),' < $(srcdir)/hook.in > $@
install-data-local: gdb.py
@$(mkdir_p) $(DESTDIR)$(toolexeclibdir)
@libname=`cd $(toolexeclibdir) && ls -r libstdc++* | fgrep -v gdb.py | sed 1q`; \
## We want to install gdb.py as SOMETHING-gdb.py. SOMETHING is the
## full name of the final library. We want to ignore symlinks, the
## .la file, and any previous -gdb.py file. This is inherently
## fragile, but there does not seem to be a better option, because
## libtool hides the real names from us.
@here=`pwd`; cd $(toolexeclibdir); \
for file in libstdc++*; do \
case $$file in \
*-gdb.py) ;; \
*.la) ;; \
*) if test -h $$file; then \
continue; \
fi; \
libname=$$file;; \
esac; \
done; \
cd $$here; \
echo " $(INSTALL_DATA) gdb.py $(DESTDIR)$(toolexeclibdir)/$$libname-gdb.py"; \
$(INSTALL_DATA) gdb.py $(DESTDIR)$(toolexeclibdir)/$$libname-gdb.py

View File

@ -298,7 +298,7 @@ WARN_CXXFLAGS = \
# -I/-D flags to pass when compiling.
AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
pythondir = $(pkgdatadir)/python
pythondir = $(datadir)/gcc-$(gcc_version)/python
nobase_python_DATA = \
libstdcxx/v6/printers.py \
libstdcxx/v6/__init__.py \
@ -492,11 +492,23 @@ uninstall-am: uninstall-info-am uninstall-nobase_pythonDATA
all-local: gdb.py
gdb.py: hook.in Makefile
sed -e 's,@dir@,$(pythondir),' < $(srcdir)/hook.in > $@
sed -e 's,@pythondir@,$(pythondir),' \
-e 's,@toolexeclibdir@,$(toolexeclibdir),' < $(srcdir)/hook.in > $@
install-data-local: gdb.py
@$(mkdir_p) $(DESTDIR)$(toolexeclibdir)
@libname=`cd $(toolexeclibdir) && ls -r libstdc++* | fgrep -v gdb.py | sed 1q`; \
@here=`pwd`; cd $(toolexeclibdir); \
for file in libstdc++*; do \
case $$file in \
*-gdb.py) ;; \
*.la) ;; \
*) if test -h $$file; then \
continue; \
fi; \
libname=$$file;; \
esac; \
done; \
cd $$here; \
echo " $(INSTALL_DATA) gdb.py $(DESTDIR)$(toolexeclibdir)/$$libname-gdb.py"; \
$(INSTALL_DATA) gdb.py $(DESTDIR)$(toolexeclibdir)/$$libname-gdb.py
# Tell versions [3.59,3.63) of GNU make to not export all variables.

View File

@ -16,9 +16,37 @@
import sys
import gdb
import os
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)
# Update module path.
dir = '@dir@'
if not dir in sys.path:
sys.path.insert(0, dir)