cmake: add detection of threadsafe feature
Avoids failing test 1014 by replicating configure checks for HAVE_ATOMIC and _WIN32_WINNT with custom CMake tests. Reviewed-by: Marcel Raad Follow up to #8680 Closes #9312
This commit is contained in:
parent
8c98d14b88
commit
109e9730ee
@ -516,3 +516,50 @@ main() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_ATOMIC
|
||||||
|
/* includes start */
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
# include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_STDATOMIC_H
|
||||||
|
# include <stdatomic.h>
|
||||||
|
#endif
|
||||||
|
/* includes end */
|
||||||
|
|
||||||
|
int
|
||||||
|
main() {
|
||||||
|
_Atomic int i = 1;
|
||||||
|
i = 0; // Force an atomic-write operation.
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_WIN32_WINNT
|
||||||
|
/* includes start */
|
||||||
|
#ifdef WIN32
|
||||||
|
/*
|
||||||
|
* Don't include unneeded stuff in Windows headers to avoid compiler
|
||||||
|
* warnings and macro clashes.
|
||||||
|
* Make sure to define this macro before including any Windows headers.
|
||||||
|
*/
|
||||||
|
# ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# endif
|
||||||
|
# ifndef NOGDI
|
||||||
|
# define NOGDI
|
||||||
|
# endif
|
||||||
|
# include "../lib/setup-win32.h"
|
||||||
|
#endif
|
||||||
|
/* includes end */
|
||||||
|
|
||||||
|
#define enquote(x) #x
|
||||||
|
#define expand(x) enquote(x)
|
||||||
|
#pragma message("_WIN32_WINNT=" expand(_WIN32_WINNT))
|
||||||
|
|
||||||
|
int
|
||||||
|
main() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@ -982,6 +982,7 @@ check_include_file_concat("pwd.h" HAVE_PWD_H)
|
|||||||
check_include_file_concat("setjmp.h" HAVE_SETJMP_H)
|
check_include_file_concat("setjmp.h" HAVE_SETJMP_H)
|
||||||
check_include_file_concat("signal.h" HAVE_SIGNAL_H)
|
check_include_file_concat("signal.h" HAVE_SIGNAL_H)
|
||||||
check_include_file_concat("ssl.h" HAVE_SSL_H)
|
check_include_file_concat("ssl.h" HAVE_SSL_H)
|
||||||
|
check_include_file_concat("stdatomic.h" HAVE_STDATOMIC_H)
|
||||||
check_include_file_concat("stdbool.h" HAVE_STDBOOL_H)
|
check_include_file_concat("stdbool.h" HAVE_STDBOOL_H)
|
||||||
check_include_file_concat("stdint.h" HAVE_STDINT_H)
|
check_include_file_concat("stdint.h" HAVE_STDINT_H)
|
||||||
check_include_file_concat("stdlib.h" HAVE_STDLIB_H)
|
check_include_file_concat("stdlib.h" HAVE_STDLIB_H)
|
||||||
@ -1143,6 +1144,7 @@ foreach(CURL_TEST
|
|||||||
HAVE_FILE_OFFSET_BITS
|
HAVE_FILE_OFFSET_BITS
|
||||||
HAVE_VARIADIC_MACROS_C99
|
HAVE_VARIADIC_MACROS_C99
|
||||||
HAVE_VARIADIC_MACROS_GCC
|
HAVE_VARIADIC_MACROS_GCC
|
||||||
|
HAVE_ATOMIC
|
||||||
)
|
)
|
||||||
curl_internal_test(${CURL_TEST})
|
curl_internal_test(${CURL_TEST})
|
||||||
endforeach()
|
endforeach()
|
||||||
@ -1159,6 +1161,19 @@ set(CMAKE_EXTRA_INCLUDE_FILES "curl/system.h")
|
|||||||
check_type_size("curl_off_t" SIZEOF_CURL_OFF_T)
|
check_type_size("curl_off_t" SIZEOF_CURL_OFF_T)
|
||||||
set(CMAKE_EXTRA_INCLUDE_FILES "")
|
set(CMAKE_EXTRA_INCLUDE_FILES "")
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
# detect actual value of _WIN32_WINNT and store as HAVE_WIN32_WINNT
|
||||||
|
curl_internal_test(HAVE_WIN32_WINNT)
|
||||||
|
if(HAVE_WIN32_WINNT)
|
||||||
|
string(REGEX MATCH ".*_WIN32_WINNT=0x[0-9a-fA-F]+" OUTPUT "${OUTPUT}")
|
||||||
|
string(REGEX REPLACE ".*_WIN32_WINNT=" "" OUTPUT "${OUTPUT}")
|
||||||
|
math(EXPR HAVE_WIN32_WINNT "${OUTPUT}" OUTPUT_FORMAT DECIMAL)
|
||||||
|
message(STATUS "Found _WIN32_WINNT=${OUTPUT} (${HAVE_WIN32_WINNT})")
|
||||||
|
endif()
|
||||||
|
# avoid storing HAVE_WIN32_WINNT in CMake cache
|
||||||
|
unset(HAVE_WIN32_WINNT CACHE)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_REQUIRED_FLAGS)
|
set(CMAKE_REQUIRED_FLAGS)
|
||||||
|
|
||||||
foreach(CURL_TEST
|
foreach(CURL_TEST
|
||||||
@ -1417,6 +1432,8 @@ _add_if("HTTP3" USE_NGTCP2 OR USE_QUICHE)
|
|||||||
_add_if("MultiSSL" CURL_WITH_MULTI_SSL)
|
_add_if("MultiSSL" CURL_WITH_MULTI_SSL)
|
||||||
_add_if("HTTPS-proxy" SSL_ENABLED AND (USE_OPENSSL OR USE_GNUTLS OR USE_NSS))
|
_add_if("HTTPS-proxy" SSL_ENABLED AND (USE_OPENSSL OR USE_GNUTLS OR USE_NSS))
|
||||||
_add_if("unicode" ENABLE_UNICODE)
|
_add_if("unicode" ENABLE_UNICODE)
|
||||||
|
_add_if("threadsafe" HAVE_ATOMIC OR (WIN32 AND
|
||||||
|
HAVE_WIN32_WINNT GREATER_EQUAL 0x600))
|
||||||
string(REPLACE ";" " " SUPPORT_FEATURES "${_items}")
|
string(REPLACE ";" " " SUPPORT_FEATURES "${_items}")
|
||||||
message(STATUS "Enabled features: ${SUPPORT_FEATURES}")
|
message(STATUS "Enabled features: ${SUPPORT_FEATURES}")
|
||||||
|
|
||||||
|
|||||||
@ -156,6 +156,9 @@
|
|||||||
/* Define to 1 if you have the <assert.h> header file. */
|
/* Define to 1 if you have the <assert.h> header file. */
|
||||||
#cmakedefine HAVE_ASSERT_H 1
|
#cmakedefine HAVE_ASSERT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have _Atomic support. */
|
||||||
|
#cmakedefine HAVE_ATOMIC 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `fchmod' function. */
|
/* Define to 1 if you have the `fchmod' function. */
|
||||||
#cmakedefine HAVE_FCHMOD 1
|
#cmakedefine HAVE_FCHMOD 1
|
||||||
|
|
||||||
@ -472,6 +475,9 @@
|
|||||||
/* Define to 1 if you have the <ssl.h> header file. */
|
/* Define to 1 if you have the <ssl.h> header file. */
|
||||||
#cmakedefine HAVE_SSL_H 1
|
#cmakedefine HAVE_SSL_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdatomic.h> header file. */
|
||||||
|
#cmakedefine HAVE_STDATOMIC_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdbool.h> header file. */
|
/* Define to 1 if you have the <stdbool.h> header file. */
|
||||||
#cmakedefine HAVE_STDBOOL_H 1
|
#cmakedefine HAVE_STDBOOL_H 1
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user