Download raw body.
unbreak math/py-scipy on powerpc, drop -latomic
On September 10, 2025 10:56:34 PM CDT, George Koehler <kernigh@gmail.com> wrote:
>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)
the normal way to build scipy on clang platforms is to use gfortran and clang/clang++ for the rest.
Why would one want to do ports-gcc & clang++? Looks like a bug to me
Dima
>
>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<uint64_t> 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'
>
unbreak math/py-scipy on powerpc, drop -latomic