diff options
author | Tom Tromey <tromey@redhat.com> | 2009-06-10 22:58:22 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2009-06-10 22:58:22 +0000 |
commit | 35204bbe768b28492d9d36978291779ed18d0ed7 (patch) | |
tree | 700389077d760887c668dca195c3a7ee1960fd8b /libstdc++-v3/python | |
parent | a567fa6a3d2847584d38c4cee35e2273c8315013 (diff) | |
download | gcc-35204bbe768b28492d9d36978291779ed18d0ed7.zip gcc-35204bbe768b28492d9d36978291779ed18d0ed7.tar.gz gcc-35204bbe768b28492d9d36978291779ed18d0ed7.tar.bz2 |
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
Diffstat (limited to 'libstdc++-v3/python')
-rw-r--r-- | libstdc++-v3/python/Makefile.am | 23 | ||||
-rw-r--r-- | libstdc++-v3/python/Makefile.in | 18 | ||||
-rw-r--r-- | libstdc++-v3/python/hook.in | 32 |
3 files changed, 65 insertions, 8 deletions
diff --git a/libstdc++-v3/python/Makefile.am b/libstdc++-v3/python/Makefile.am index bcc8afe..50cc6d9 100644 --- a/libstdc++-v3/python/Makefile.am +++ b/libstdc++-v3/python/Makefile.am @@ -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 diff --git a/libstdc++-v3/python/Makefile.in b/libstdc++-v3/python/Makefile.in index 879f040..88cc7ea 100644 --- a/libstdc++-v3/python/Makefile.in +++ b/libstdc++-v3/python/Makefile.in @@ -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. diff --git a/libstdc++-v3/python/hook.in b/libstdc++-v3/python/hook.in index fe7c072..f7bf1af 100644 --- a/libstdc++-v3/python/hook.in +++ b/libstdc++-v3/python/hook.in @@ -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) |