c2fc1702cb
In order for GDB to auto-load the pretty printers, they must be installed as "libstdc++.$ext-gdb.py", where 'libstdc++.$ext' is the name of the object file that is loaded by GDB [1], i.e. the libstdc++ shared library. The approach taken in libstdc++-v3/python/Makefile.am is to loop over files matching 'libstdc++*' in $(DESTDIR)$(toolexeclibdir) and choose the last file matching that glob that is not a symlink, the Libtool '*.la' file or a Python file. That works fine for ELF targets where the matching names are: libstdc++.a libstdc++.so libstdc++.so.6 libstdc++.so.6.0.29 But not for macOS with: libstdc++.6.dylib libstdc++.a Or MinGW with: libstdc++-6.dll libstdc++.dll.a Try to make a better job at installing the pretty printers with the correct name by copying the approach taken by isl [2], that is, using a sed invocation on the Libtool-generated 'libstdc++.la' to read the correct name for the current platform. [1] https://sourceware.org/gdb/onlinedocs/gdb/objfile_002dgdbdotext-file.html [2] https://repo.or.cz/isl.git/blob/HEAD:/Makefile.am#l611 libstdc++-v3/ChangeLog: PR libstdc++/99453 * python/Makefile.am: Install libstdc++*-gdb.py more robustly. * python/Makefile.in: Regenerate. Co-authored-by: Jonathan Wakely <jwakely@redhat.com>
53 lines
1.9 KiB
Makefile
53 lines
1.9 KiB
Makefile
## Makefile for the python subdirectory of the GNU C++ Standard library.
|
|
##
|
|
## Copyright (C) 2009-2021 Free Software Foundation, Inc.
|
|
##
|
|
## This file is part of the libstdc++ version 3 distribution.
|
|
## Process this file with automake to produce Makefile.in.
|
|
|
|
## This file is part of the GNU ISO C++ Library. This library is free
|
|
## software; you can redistribute it and/or modify it under the
|
|
## terms of the GNU General Public License as published by the
|
|
## Free Software Foundation; either version 3, or (at your option)
|
|
## any later version.
|
|
##
|
|
## This library is distributed in the hope that it will be useful,
|
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
## GNU General Public License for more details.
|
|
##
|
|
## You should have received a copy of the GNU General Public License along
|
|
## with this library; see the file COPYING3. If not see
|
|
## <http://www.gnu.org/licenses/>.
|
|
|
|
include $(top_srcdir)/fragment.am
|
|
|
|
## Where to install the module code.
|
|
if ENABLE_PYTHONDIR
|
|
pythondir = $(prefix)/$(python_mod_dir)
|
|
else
|
|
pythondir = $(datadir)/gcc-$(gcc_version)/python
|
|
endif
|
|
|
|
all-local: gdb.py
|
|
|
|
nobase_python_DATA = \
|
|
libstdcxx/v6/printers.py \
|
|
libstdcxx/v6/xmethods.py \
|
|
libstdcxx/v6/__init__.py \
|
|
libstdcxx/__init__.py
|
|
|
|
gdb.py: hook.in Makefile
|
|
sed -e 's,@pythondir@,$(pythondir),' \
|
|
-e 's,@toolexeclibdir@,$(toolexeclibdir),' < $(srcdir)/hook.in > $@
|
|
|
|
install-data-local: gdb.py
|
|
@$(mkdir_p) $(DESTDIR)$(toolexeclibdir)
|
|
## We want to install gdb.py as SOMETHING-gdb.py. SOMETHING is the
|
|
## full name of the final library. We use the libtool .la file to get
|
|
## the correct name.
|
|
@libname=`sed -ne "/^library_names=/{s/.*='//;s/'$$//;s/ .*//;p;}" \
|
|
$(DESTDIR)$(toolexeclibdir)/libstdc++.la`; \
|
|
echo " $(INSTALL_DATA) gdb.py $(DESTDIR)$(toolexeclibdir)/$$libname-gdb.py"; \
|
|
$(INSTALL_DATA) gdb.py $(DESTDIR)$(toolexeclibdir)/$$libname-gdb.py
|