gentoo-ebuilds/media-libs/libsoundtouch/libsoundtouch-2.3.3.ebuild
Z. Liu 7f9ace99e7
media-libs/libsoundtouch: fix undefined symbol: __kmpc_xxx
when called with "-fopenmp" and "-nostdlib", clang won't add "-lomp"
automatically, while gcc always add "-lgomp". See below:

For gcc, "-lgomp" is added always:

  # echo 'int main() { return 0; }' | gcc -fopenmp -v -x c - 2>&1 | grep -- "-lgomp"
   /usr/libexec/gcc/x86_64-pc-linux-gnu/14/collect2 -plugin ... -lgomp -lgcc ...
  # echo 'int main() { return 0; }' | gcc -fopenmp -nostdlib -v -x c - 2>&1 | grep -- "-lgomp"
   /usr/libexec/gcc/x86_64-pc-linux-gnu/14/collect2 -plugin ... -lgomp

For clang, "-lomp" is not added when both "-fopenmp" and "-nostdlib" exist:

  # echo 'int main() { return 0; }' | clang -fopenmp -v -x c - 2>&1 | grep -- "-lomp"
   "/usr/bin/x86_64-pc-linux-gnu-ld.bfd" --hash-style=gnu ... -lomp -L/usr/lib/llvm/19/lib64 ...
  # echo 'int main() { return 0; }' | clang -fopenmp -nostdlib -v -x c - 2>&1 | grep -- "-lomp"

In case of libsoundtouch, command to build .so is:

  clang++ -fPIC -DPIC -shared -nostdlib ... -Wl,-soname -Wl,libSoundTouchDll.so.1 -o .libs/libSoundTouchDll.so.1.0.0

So LDFLAGS "-lomp" is needed if compiler is clang and openmp is enabled.

Otherwise, libomp.so won't be defined in Dynamic Section as show bellow:

  # LC_ALL=C objdump -x /usr/lib64/libSoundTouch.so
  ...
  Dynamic Section:
    NEEDED               libomp.so

  ...

cause package depend on libsoundtouch either failed to build or failed
to start (if libsoundtouch is reemerged with openmp).

Closes: https://bugs.gentoo.org/740310
Signed-off-by: Z. Liu <zhixu.liu@gmail.com>
Closes: https://github.com/gentoo/gentoo/pull/40424
Signed-off-by: Sam James <sam@gentoo.org>
2025-02-07 17:49:20 +00:00

63 lines
1.5 KiB
Bash

# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit autotools flag-o-matic multilib-minimal toolchain-funcs
MY_PN=${PN/lib}
MY_P=${MY_PN}-${PV}
DESCRIPTION="Audio processing library for changing tempo, pitch and playback rates"
HOMEPAGE="https://www.surina.net/soundtouch/ https://codeberg.org/soundtouch/soundtouch"
SRC_URI="https://www.surina.net/${MY_PN}/${MY_P}.tar.gz"
S="${WORKDIR}/${MY_PN}"
LICENSE="LGPL-2.1"
# subslot = libSoundTouch.so soname
SLOT="0/1"
KEYWORDS="amd64 ~arm ~arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv x86 ~amd64-linux ~x86-linux ~ppc-macos"
IUSE="cpu_flags_x86_sse openmp static-libs"
BDEPEND="virtual/pkgconfig"
pkg_pretend() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
pkg_setup() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
src_prepare() {
default
sed -i "s:^\(dist_doc_DATA=\)COPYING.TXT :\1:" Makefile.am || die
if tc-is-clang && use openmp ; then
append-libs omp
fi
eautoreconf
}
multilib_src_configure() {
local myeconfargs=(
--enable-shared
--disable-integer-samples
$(use_enable cpu_flags_x86_sse x86-optimizations)
$(use_enable openmp)
$(use_enable static-libs static)
)
ECONF_SOURCE="${S}" econf "${myeconfargs[@]}"
}
multilib_src_compile() {
emake CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}"
}
multilib_src_install() {
emake DESTDIR="${D}" pkgdocdir="${EPREFIX}"/usr/share/doc/${PF}/html install
}
multilib_src_install_all() {
find "${ED}" -name '*.la' -delete || die
}