From: George Koehler Subject: unbreak math/py-scipy on powerpc, drop -latomic To: ports@openbsd.org Date: Wed, 10 Sep 2025 23:56:34 -0400 Hello ports list, I want to commit this fix for an error in math/py-scipy on powerpc: "ld: error: unable to find library -latomic" It moves the configure check for -latomic from the C compiler to the C++ compiler, because OpenBSD is mixing compilers, - base-clang for C++ (from COMPILER) - ports-gcc for C (forced by fortran in MODULES) They find functions like __atomic_fetch_xor_8 in different ways, - ports-gcc needs -latomic - base-clang must not have -latomic, because it is not looking in /usr/local/lib where gcc installed libatomic. std::atomic in C++ calls such functions on powerpc (but not on most other archs). powerpc broke when configure decided to pass -latomic to gcc, but build passed -latomic to clang. This diff drops the -latomic, so my powerpc can package scipy. (I don't know whether this package works at runtime.) --gkoehler Index: Makefile =================================================================== RCS file: /cvs/ports/math/py-scipy/Makefile,v diff -u -p -r1.72 Makefile --- Makefile 20 May 2025 12:10:50 -0000 1.72 +++ Makefile 11 Sep 2025 02:59:17 -0000 @@ -4,7 +4,7 @@ COMMENT= maths, science and engineering MODPY_DISTV= 1.13.1 DISTNAME= scipy-${MODPY_DISTV} PKGNAME= py-${DISTNAME} -REVISION= 6 +REVISION= 7 CATEGORIES= math devel Index: patches/patch-scipy_meson_build =================================================================== RCS file: /cvs/ports/math/py-scipy/patches/patch-scipy_meson_build,v diff -u -p -r1.1 patch-scipy_meson_build --- patches/patch-scipy_meson_build 19 Oct 2024 03:32:48 -0000 1.1 +++ patches/patch-scipy_meson_build 11 Sep 2025 02:59:17 -0000 @@ -1,3 +1,6 @@ +Move the check for -latomic from C to C++. Fixes powerpc, where gcc +must have -latomic but clang++ must not have -latomic. + Index: scipy/meson.build --- scipy/meson.build.orig +++ scipy/meson.build @@ -12,3 +15,26 @@ Index: scipy/meson.build # First try scipy-openblas, and if found don't look for cblas or lapack, we # know what's inside the scipy-openblas wheels already. +@@ -384,18 +384,18 @@ code_non_lockfree = ''' + (int)__atomic_add_fetch(x.v, (uint64_t)1, __ATOMIC_ACQ_REL); + } + ''' +-if cc.get_id() != 'msvc' +- if not cc.links( ++if cpp.get_id() != 'msvc' ++ if not cpp.links( + code_non_lockfree, + name : 'Check atomic builtins without -latomic' + ) +- atomic_dep = cc.find_library('atomic', required: false) ++ atomic_dep = cpp.find_library('atomic', required: false) + if atomic_dep.found() + # We're not sure that with `-latomic` things will work for all compilers, + # so verify and only keep libatomic as a dependency if this works. It is + # possible the build will fail later otherwise - unclear under what + # circumstances (compilers, runtimes, etc.) exactly. +- if not cc.links( ++ if not cpp.links( + code_non_lockfree, + dependencies: atomic_dep, + name : 'Check atomic builtins with -latomic'