mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-28 23:21:16 +08:00
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:
parent
a567fa6a3d
commit
35204bbe76
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user