package/libcurl: fix build when !BR2_TOOLCHAIN_HAS_SYNC_1

On platform that do not provide __atomic_exchange_1(), and when
libatomic is not available (e.g., threads support disabled) link of
libcurl.so fails. To solve this use an indirect way to make HAVE_ATOMIC
undefined. Add an upstream patch for checking the stdatomic.h header,
and seed the 'no' answer.

Fixes:
http://autobuild.buildroot.net/results/8f695d4dbb91cfde8e93ab38e837b0a0042b986b/
http://autobuild.buildroot.net/results/3b4712b0ace52da1650e88cdaafb6a20be135464/

Cc: Matt Weber <matthew.weber@collins.com>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
This commit is contained in:
Baruch Siach 2022-07-21 19:10:08 +03:00 committed by Arnout Vandecappelle (Essensium/Mind)
parent 96a6b3bf39
commit f81454db59
2 changed files with 78 additions and 0 deletions

View File

@ -0,0 +1,70 @@
From a68074b5db2a1fb637853b808e5b263c2ce9cbdd Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Tue, 28 Jun 2022 08:37:22 +0200
Subject: [PATCH] configure: check for the stdatomic.h header in configure
... and only set HAVE_ATOMIC if that header exists since we use
typedefes set in it.
Reported-by: Ryan Schmidt
Fixes #9059
Closes #9060
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
---
Upstream status: commit a68074b5db2a1fb637853b808e5b263c2ce9cbdd
m4/curl-functions.m4 | 36 +++++++++++++++++++-----------------
1 file changed, 19 insertions(+), 17 deletions(-)
diff --git a/m4/curl-functions.m4 b/m4/curl-functions.m4
index ec406f56aed8..f3e12a53a9fd 100644
--- a/m4/curl-functions.m4
+++ b/m4/curl-functions.m4
@@ -6570,24 +6570,26 @@ AC_DEFUN([CURL_COVERAGE],[
])
dnl CURL_ATOMIC
-dnl --------------------------------------------------
-dnl Check if _Atomic works
+dnl -------------------------------------------------------------
+dnl Check if _Atomic works. But only check if stdatomic.h exists.
dnl
AC_DEFUN([CURL_ATOMIC],[
- AC_MSG_CHECKING([if _Atomic is available])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
- $curl_includes_unistd
- ]],[[
- _Atomic int i = 0;
- ]])
- ],[
- AC_MSG_RESULT([yes])
- AC_DEFINE_UNQUOTED(HAVE_ATOMIC, 1,
- [Define to 1 if you have _Atomic support.])
- tst_atomic="yes"
- ],[
- AC_MSG_RESULT([no])
- tst_atomic="no"
+ AC_CHECK_HEADERS(stdatomic.h, [
+ AC_MSG_CHECKING([if _Atomic is available])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_unistd
+ ]],[[
+ _Atomic int i = 0;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_ATOMIC, 1,
+ [Define to 1 if you have _Atomic support.])
+ tst_atomic="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_atomic="no"
+ ])
])
])
--
2.35.1

View File

@ -15,6 +15,8 @@ LIBCURL_LICENSE_FILES = COPYING
LIBCURL_CPE_ID_VENDOR = haxx
LIBCURL_CPE_ID_PRODUCT = libcurl
LIBCURL_INSTALL_STAGING = YES
# We are patching configure.ac
LIBCURL_AUTORECONF = YES
# We disable NTLM support because it uses fork(), which doesn't work
# on non-MMU platforms. Moreover, this authentication method is
@ -36,6 +38,12 @@ ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
LIBCURL_CONF_OPTS += LIBS=-latomic
endif
ifeq ($(BR2_TOOLCHAIN_HAS_SYNC_1),)
# Even though stdatomic.h does exist, link fails for __atomic_exchange_1
# Work around this by pretending atomics aren't available.
LIBCURL_CONF_ENV += ac_cv_header_stdatomic_h=no
endif
ifeq ($(BR2_PACKAGE_LIBCURL_VERBOSE),y)
LIBCURL_CONF_OPTS += --enable-verbose
else