commit:     8f5ca4a330e9d05b4a19432f0a57c0255d0fcac0
Author:     Sv. Lockal <lockalsash <AT> gmail <DOT> com>
AuthorDate: Fri Aug 15 16:14:56 2025 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Fri Aug 15 19:13:42 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8f5ca4a3

llvm-runtimes/libcxx: install GDB Pretty printers for libc++

https://github.com/llvm/llvm-project/blob/llvmorg-21.1.0-rc3/libcxx/docs/UserDocumentation.rst#gdb-pretty-printers-for-libc
describes the procedure to set up GDB printers for STL data structures
from libc++.

Since LLVM 21 these pretty printers work quite well, including MI-mode
(enabling visualization in IDEs like vscode).

In a way, similar to python, libgobject, libstdc++ and so on, file like
/usr/share/gdb/auto-load/usr/lib64/libc++.so.1.0-gdb.py enables
autoloading for pretty printers.

Closes: https://bugs.gentoo.org/961530
Signed-off-by: Sv. Lockal <lockalsash <AT> gmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/43455
Closes: https://github.com/gentoo/gentoo/pull/43455
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 llvm-runtimes/libcxx/libcxx-21.1.0.9999.ebuild | 14 ++++++++++++++
 llvm-runtimes/libcxx/libcxx-22.0.0.9999.ebuild | 14 ++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/llvm-runtimes/libcxx/libcxx-21.1.0.9999.ebuild 
b/llvm-runtimes/libcxx/libcxx-21.1.0.9999.ebuild
index aadd7774d65e..cb170c03ff83 100644
--- a/llvm-runtimes/libcxx/libcxx-21.1.0.9999.ebuild
+++ b/llvm-runtimes/libcxx/libcxx-21.1.0.9999.ebuild
@@ -191,6 +191,20 @@ multilib_src_install() {
                dolib.so lib/libc++_shared.so
                use static-libs && dolib.a lib/libc++_static.a
        fi
+
+       local install_prefix=
+       is_crosspkg && install_prefix=/usr/${CTARGET}
+       insinto "${install_prefix}/usr/share/libc++/gdb"
+       doins ../libcxx/utils/gdb/libcxx/printers.py
+
+       local lib_version=$(sed -n -e 's/^LIBCXX_LIBRARY_VERSION:STRING=//p' 
CMakeCache.txt || die)
+       [[ -n ${lib_version} ]] || die "Could not determine 
LIBCXX_LIBRARY_VERSION from CMakeCache.txt"
+
+       insinto "${install_prefix}/usr/share/gdb/auto-load/usr/$(get_libdir)"
+       newins - "libc++.so.${lib_version}-gdb.py" <<-EOF
+               __import__("sys").path.insert(0, 
"${EPREFIX}/usr/share/libc++/gdb")
+               __import__("printers").register_libcxx_printer_loader()
+       EOF
 }
 
 # Usage: deps

diff --git a/llvm-runtimes/libcxx/libcxx-22.0.0.9999.ebuild 
b/llvm-runtimes/libcxx/libcxx-22.0.0.9999.ebuild
index aadd7774d65e..cb170c03ff83 100644
--- a/llvm-runtimes/libcxx/libcxx-22.0.0.9999.ebuild
+++ b/llvm-runtimes/libcxx/libcxx-22.0.0.9999.ebuild
@@ -191,6 +191,20 @@ multilib_src_install() {
                dolib.so lib/libc++_shared.so
                use static-libs && dolib.a lib/libc++_static.a
        fi
+
+       local install_prefix=
+       is_crosspkg && install_prefix=/usr/${CTARGET}
+       insinto "${install_prefix}/usr/share/libc++/gdb"
+       doins ../libcxx/utils/gdb/libcxx/printers.py
+
+       local lib_version=$(sed -n -e 's/^LIBCXX_LIBRARY_VERSION:STRING=//p' 
CMakeCache.txt || die)
+       [[ -n ${lib_version} ]] || die "Could not determine 
LIBCXX_LIBRARY_VERSION from CMakeCache.txt"
+
+       insinto "${install_prefix}/usr/share/gdb/auto-load/usr/$(get_libdir)"
+       newins - "libc++.so.${lib_version}-gdb.py" <<-EOF
+               __import__("sys").path.insert(0, 
"${EPREFIX}/usr/share/libc++/gdb")
+               __import__("printers").register_libcxx_printer_loader()
+       EOF
 }
 
 # Usage: deps

Reply via email to