# Copyright 1999-2024 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 # The Valgrind upstream maintainer also maintains it in Fedora and will # backport fixes there which haven't yet made it into a release. Keep an eye # on it for fixes we should cherry-pick too: # https://src.fedoraproject.org/rpms/valgrind/tree/rawhide inherit autotools flag-o-matic toolchain-funcs multilib pax-utils DESCRIPTION="An open-source memory debugger for GNU/Linux" HOMEPAGE="https://www.valgrind.org" SRC_URI="https://sourceware.org/pub/valgrind/${P}.tar.bz2" LICENSE="GPL-2" SLOT="0" KEYWORDS="-* ~amd64 ~arm ~arm64 ~ppc ~ppc64 ~x86 ~amd64-linux ~x86-linux ~x64-macos ~x64-solaris" IUSE="mpi lto" DEPEND="mpi? ( virtual/mpi )" RDEPEND="${DEPEND}" PATCHES=( "${FILESDIR}"/${PN}-3.7.0-respect-flags.patch "${FILESDIR}"/${PN}-3.15.0-Build-ldst_multiple-test-with-fno-pie.patch "${FILESDIR}"/${PN}-3.21.0-glibc-2.34-suppressions.patch "${FILESDIR}"/valgrind-3.23.0-strlen.patch "${FILESDIR}"/valgrind-3.17.0-bextr.patch ) src_prepare() { # Correct hard coded doc location sed -i -e "s:doc/valgrind:doc/${PF}:" docs/Makefile.am || die # Don't force multiarch stuff on OSX, bug #306467 sed -i -e 's:-arch \(i386\|x86_64\)::g' Makefile.all.am || die if [[ ${CHOST} == *-solaris* ]] ; then # upstream doesn't support this, but we don't build with # Sun/Oracle ld, we have a GNU toolchain, so get some things # working the Linux/GNU way find "${S}" -name "Makefile.am" -o -name "Makefile.tool.am" | xargs \ sed -i -e 's:-M,/usr/lib/ld/map.noexstk:-z,noexecstack:' || die cp "${S}"/coregrind/link_tool_exe_{linux,solaris}.in fi default # Regenerate autotools files eautoreconf } src_configure() { local myconf=( $(use_enable lto) ) # Respect ar, bug #468114 tc-export AR # -fomit-frame-pointer "Assembler messages: Error: junk `8' after expression" # while compiling insn_sse.c in none/tests/x86 # -fstack-protector more undefined references to __guard and __stack_smash_handler # because valgrind doesn't link to glibc (bug #114347) # -fstack-protector-all Fails same way as -fstack-protector/-fstack-protector-strong. # Note: -fstack-protector-explicit is a no-op for Valgrind, no need to strip it # -fstack-protector-strong See -fstack-protector (bug #620402) # -m64 -mx32 for multilib-portage, bug #398825 # -ggdb3 segmentation fault on startup filter-flags -fomit-frame-pointer filter-flags -fstack-protector filter-flags -fstack-protector-all filter-flags -fstack-protector-strong filter-flags -m64 -mx32 filter-flags -fsanitize -fsanitize=* replace-flags -ggdb3 -ggdb2 if use amd64 || use ppc64; then ! has_multilib_profile && myconf+=("--enable-only64bit") fi # Force bitness on darwin, bug #306467 use x64-macos && myconf+=("--enable-only64bit") # Don't use mpicc unless the user asked for it (bug #258832) if ! use mpi; then myconf+=("--without-mpicc") fi econf "${myconf[@]}" } src_install() { default dodoc FAQ.txt pax-mark m "${ED}"/usr/$(get_libdir)/valgrind/*-*-linux # See README_PACKAGERS dostrip -x /usr/libexec/valgrind/vgpreload* /usr/$(get_libdir)/valgrind/* if [[ ${CHOST} == *-darwin* ]] ; then # fix install_names on shared libraries, can't turn them into bundles, # as dyld won't load them any more then, bug #306467 local l for l in "${ED}"/usr/lib/valgrind/*.so ; do install_name_tool -id "${EPREFIX}"/usr/lib/valgrind/${l##*/} "${l}" done fi } pkg_postinst() { elog "Valgrind will not work if libc (e.g. glibc) does not have debug symbols." elog "To fix this you can add splitdebug to FEATURES in make.conf" elog "and remerge glibc. See:" elog "https://bugs.gentoo.org/214065" elog "https://bugs.gentoo.org/274771" elog "https://bugs.gentoo.org/388703" }