diff --git a/config/user-libatomic.m4 b/config/user-libatomic.m4 index 14a60bbea9d0..d15069f9c445 100644 --- a/config/user-libatomic.m4 +++ b/config/user-libatomic.m4 @@ -1,34 +1,28 @@ dnl # -dnl # If -latomic exists, it's needed for __atomic intrinsics. -dnl # -dnl # Some systems (like FreeBSD 13) don't have a libatomic at all because -dnl # their toolchain doesn't ship it – they obviously don't need it. -dnl # -dnl # Others (like sufficiently ancient CentOS) have one, -dnl # but terminally broken or unlinkable (e.g. it's a dangling symlink, -dnl # or a linker script that points to a nonexistent file) – -dnl # most arches affected by this don't actually need -latomic (and if they do, -dnl # then they should have libatomic that actually exists and links, -dnl # so don't fall into this category). -dnl # -dnl # Technically, we could check if the platform *actually* needs -latomic, -dnl # or if it has native support for all the intrinsics we use, -dnl # but it /really/ doesn't matter, and C11 recommends to always link it. +dnl # If -latomic exists and atomic.c doesn't link without it, +dnl # it's needed for __atomic intrinsics. dnl # AC_DEFUN([ZFS_AC_CONFIG_USER_LIBATOMIC], [ - AC_MSG_CHECKING([whether -latomic is present]) + AC_MSG_CHECKING([whether -latomic is required]) saved_libs="$LIBS" LIBS="$LIBS -latomic" + LIBATOMIC_LIBS="" AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [ - LIBATOMIC_LIBS="-latomic" + LIBS="$saved_libs" + saved_cflags="$CFLAGS" + CFLAGS="$CFLAGS -isystem lib/libspl/include" + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include "lib/libspl/atomic.c"], [])], [], [LIBATOMIC_LIBS="-latomic"]) + CFLAGS="$saved_cflags" + ]) + + if test -n "$LIBATOMIC_LIBS"; then AC_MSG_RESULT([yes]) - ], [ - LIBATOMIC_LIBS="" + else AC_MSG_RESULT([no]) - ]) + fi LIBS="$saved_libs" AC_SUBST([LIBATOMIC_LIBS]) ])