From 659310bc8f30427c62ca0ec8ff51414f0a371365 Mon Sep 17 00:00:00 2001 From: Baruch Siach Date: Thu, 21 Jul 2022 19:10:08 +0300 Subject: [PATCH] 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 Signed-off-by: Baruch Siach Signed-off-by: Arnout Vandecappelle (Essensium/Mind) (cherry picked from commit f81454db59a19a276ae458acd78610c9ac6c2586) Signed-off-by: Peter Korsgaard --- ...for-the-stdatomic.h-header-in-config.patch | 70 +++++++++++++++++++ package/libcurl/libcurl.mk | 8 +++ 2 files changed, 78 insertions(+) create mode 100644 package/libcurl/0002-configure-check-for-the-stdatomic.h-header-in-config.patch diff --git a/package/libcurl/0002-configure-check-for-the-stdatomic.h-header-in-config.patch b/package/libcurl/0002-configure-check-for-the-stdatomic.h-header-in-config.patch new file mode 100644 index 0000000000..083238819b --- /dev/null +++ b/package/libcurl/0002-configure-check-for-the-stdatomic.h-header-in-config.patch @@ -0,0 +1,70 @@ +From a68074b5db2a1fb637853b808e5b263c2ce9cbdd Mon Sep 17 00:00:00 2001 +From: Daniel Stenberg +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 +--- +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 + diff --git a/package/libcurl/libcurl.mk b/package/libcurl/libcurl.mk index 5dc4eebefa..dc0f1230f1 100644 --- a/package/libcurl/libcurl.mk +++ b/package/libcurl/libcurl.mk @@ -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