summaryrefslogtreecommitdiffstats
path: root/src/corelib/configure.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/configure.cmake')
-rw-r--r--src/corelib/configure.cmake288
1 files changed, 119 insertions, 169 deletions
diff --git a/src/corelib/configure.cmake b/src/corelib/configure.cmake
index b4a040fb29..b34086c8ad 100644
--- a/src/corelib/configure.cmake
+++ b/src/corelib/configure.cmake
@@ -98,6 +98,18 @@ clock_gettime(CLOCK_MONOTONIC, &ts);
}
")
+# close_range
+qt_config_compile_test(close_range
+ LABEL "close_range()"
+ CODE
+"#include <unistd.h>
+
+int main()
+{
+ return close_range(3, 1024, 0) != 0;
+}
+")
+
# cloexec
qt_config_compile_test(cloexec
LABEL "O_CLOEXEC"
@@ -125,44 +137,6 @@ int pipes[2];
}
")
-# special case begin
-# cxx11_future
-if (UNIX AND NOT ANDROID AND NOT QNX AND NOT INTEGRITY)
- set(cxx11_future_TEST_LIBRARIES pthread)
-endif()
-qt_config_compile_test(cxx11_future
- LABEL "C++11 <future>"
- LIBRARIES
- "${cxx11_future_TEST_LIBRARIES}"
- CODE
-"#include <future>
-
-int main(void)
-{
- /* BEGIN TEST: */
-std::future<int> f = std::async([]() { return 42; });
-(void)f.get();
- /* END TEST: */
- return 0;
-}
-")
-# special case end
-
-# cxx11_random
-qt_config_compile_test(cxx11_random
- LABEL "C++11 <random>"
- CODE
-"#include <random>
-
-int main(void)
-{
- /* BEGIN TEST: */
-std::mt19937 mt(0);
- /* END TEST: */
- return 0;
-}
-")
-
# cxx17_filesystem
qt_config_compile_test(cxx17_filesystem
LABEL "C++17 <filesystem>"
@@ -198,24 +172,6 @@ int main(void)
}"
)
-# eventfd
-qt_config_compile_test(eventfd
- LABEL "eventfd"
- CODE
-"#include <sys/eventfd.h>
-
-int main(void)
-{
- /* BEGIN TEST: */
-eventfd_t value;
-int fd = eventfd(0, EFD_CLOEXEC);
-eventfd_read(fd, &value);
-eventfd_write(fd, value);
- /* END TEST: */
- return 0;
-}
-")
-
# futimens
qt_config_compile_test(futimens
LABEL "futimens()"
@@ -265,21 +221,6 @@ char buf[32];
}
")
-# glibc
-qt_config_compile_test(glibc
- LABEL "GNU libc"
- CODE
-"#include <stdlib.h>
-
-int main(void)
-{
- /* BEGIN TEST: */
-return __GLIBC__;
- /* END TEST: */
- return 0;
-}
-")
-
# inotify
qt_config_compile_test(inotify
LABEL "inotify"
@@ -331,7 +272,7 @@ int main(void)
")
if (LINUX)
- set(ipc_posix_TEST_LIBRARIES pthread rt)
+ set(ipc_posix_TEST_LIBRARIES pthread WrapRt::WrapRt)
endif()
qt_config_compile_test(posix_shm
LABEL "POSIX shared memory"
@@ -383,6 +324,37 @@ linkat(AT_FDCWD, \"foo\", AT_FDCWD, \"bar\", AT_SYMLINK_FOLLOW);
}
")
+# memmem
+qt_config_compile_test(memmem
+ LABEL "memmem()"
+ CODE
+#define _APPLE_SAUCE 1 /* Apple doesn't require anything */
+"#define _BSD_SOURCE 1 /* For FreeBSD */
+#define _GNU_SOURCE 1 /* For glibc, Bionic */
+#include <string.h>
+
+int main(void)
+{
+ const void *r = memmem(\"abc\", 3, \"bc\", 2);
+ (void)r;
+ return 0;
+}")
+
+# memrchr
+qt_config_compile_test(memrchr
+ LABEL "memrchr()"
+ CODE
+"#define _BSD_SOURCE 1 /* For FreeBSD */
+#define _GNU_SOURCE 1 /* For glibc, Bionic */
+#include <string.h>
+
+int main(void)
+{
+ const void *r = memrchr(\"abc\", 'a', 3);
+ (void)r;
+ return 0;
+}")
+
# ppoll
qt_config_compile_test(ppoll
LABEL "ppoll()"
@@ -455,44 +427,6 @@ renameat2(AT_FDCWD, argv[1], AT_FDCWD, argv[2], RENAME_NOREPLACE | RENAME_WHITEO
}
")
-# statx
-qt_config_compile_test(statx
- LABEL "statx() in libc"
- CODE
-"#define _ATFILE_SOURCE 1
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-int main(void)
-{
- /* BEGIN TEST: */
-struct statx statxbuf;
-unsigned int mask = STATX_BASIC_STATS;
-return statx(AT_FDCWD, \"\", AT_STATX_SYNC_AS_STAT, mask, &statxbuf);
- /* END TEST: */
- return 0;
-}
-")
-
-# syslog
-qt_config_compile_test(syslog
- LABEL "syslog"
- CODE
-"#include <syslog.h>
-
-int main(void)
-{
- /* BEGIN TEST: */
-openlog(\"qt\", 0, LOG_USER);
-syslog(LOG_INFO, \"configure\");
-closelog();
- /* END TEST: */
- return 0;
-}
-")
-
# cpp_winrt
qt_config_compile_test(cpp_winrt
LABEL "cpp/winrt"
@@ -508,39 +442,52 @@ int main(void)
}
")
-# xlocalescanprint
-qt_config_compile_test(xlocalescanprint
- LABEL "xlocale.h (or equivalents)"
+# <stacktrace>
+qt_config_compile_test(cxx23_stacktrace
+ LABEL "C++23 <stacktrace> support"
CODE
-"#define QT_BEGIN_NAMESPACE
-#define QT_END_NAMESPACE
-
-#ifdef _MSVC_VER
-#define Q_CC_MSVC _MSVC_VER
+"#include <stacktrace>
+#if !defined(__cpp_lib_stacktrace)
+#error
#endif
-#define QT_NO_DOUBLECONVERSION
-
-#include QDSP_P_H
-
int main(void)
{
/* BEGIN TEST: */
-#ifdef _MSVC_VER
-_locale_t invalidLocale = NULL;
-#else
-locale_t invalidLocale = NULL;
-#endif
-double a = 3.4;
-qDoubleSnprintf(argv[0], 1, invalidLocale, \"invalid format\", a);
-qDoubleSscanf(argv[0], invalidLocale, \"invalid format\", &a, &argc);
+const auto backtrace = std::stacktrace::current();
/* END TEST: */
- return 0;
}
-"# FIXME: qmake: DEFINES += QDSP_P_H=$$shell_quote(\"@PWD@/text/qdoublescanprint_p.h\")
+"
+ CXX_STANDARD 23
)
-
+# <future>
+qt_config_compile_test(cxx_std_async_noncopyable
+ LABEL "std::async() NonCopyable"
+ CODE
+"// Calling std::async with lambda which takes non-copyable argument causes compilation error on
+// some platforms (VxWorks 24.03 and older with C++17-compatibility for example)
+#include <future>
+
+class NonCopyable {
+public:
+ NonCopyable(const NonCopyable&) = delete;
+ NonCopyable(NonCopyable&&) = default;
+
+ NonCopyable(int value)
+ :value (value)
+ {}
+
+ int value;
+};
+
+int main(int argc, char** argv) {
+ return std::async(
+ std::launch::deferred,
+ [](NonCopyable value) { return value.value; },
+ NonCopyable(argc - 1)).get();
+}
+")
#### Features
@@ -553,6 +500,11 @@ qt_feature("clock-monotonic" PUBLIC
CONDITION QT_FEATURE_clock_gettime AND TEST_clock_monotonic
)
qt_feature_definition("clock-monotonic" "QT_NO_CLOCK_MONOTONIC" NEGATE VALUE "1")
+qt_feature("close_range" PRIVATE
+ LABEL "close_range()"
+ CONDITION QT_FEATURE_process AND TEST_close_range
+ AUTODETECT UNIX
+)
qt_feature("doubleconversion" PRIVATE
LABEL "DoubleConversion"
)
@@ -565,7 +517,7 @@ qt_feature("system-doubleconversion" PRIVATE
)
qt_feature("cxx11_future" PUBLIC
LABEL "C++11 <future>"
- CONDITION TEST_cxx11_future
+ CONDITION TEST_cxx_std_async_noncopyable
)
qt_feature("cxx17_filesystem" PUBLIC
LABEL "C++17 <filesystem>"
@@ -575,11 +527,6 @@ qt_feature("dladdr" PRIVATE
LABEL "dladdr"
CONDITION QT_FEATURE_dlopen AND TEST_dladdr
)
-qt_feature("eventfd" PUBLIC
- LABEL "eventfd"
- CONDITION NOT WASM AND TEST_eventfd
-)
-qt_feature_definition("eventfd" "QT_NO_EVENTFD" NEGATE VALUE "1")
qt_feature("futimens" PRIVATE
LABEL "futimens()"
CONDITION NOT WIN32 AND TEST_futimens
@@ -598,11 +545,6 @@ qt_feature("glib" PUBLIC PRIVATE
CONDITION GLIB2_FOUND
)
qt_feature_definition("glib" "QT_NO_GLIB" NEGATE VALUE "1")
-qt_feature("glibc" PRIVATE
- LABEL "GNU libc"
- AUTODETECT ( LINUX OR HURD )
- CONDITION TEST_glibc
-)
qt_feature("icu" PRIVATE
LABEL "ICU"
AUTODETECT NOT WIN32
@@ -617,7 +559,7 @@ qt_feature("ipc_posix"
LABEL "Defaulting legacy IPC to POSIX"
CONDITION TEST_posix_shm AND TEST_posix_sem AND (
FEATURE_ipc_posix OR (APPLE AND QT_FEATURE_appstore_compliant)
- OR NOT (TEST_sysv_shm AND TEST_sysv_sem)
+ OR NOT TEST_sysv_shm OR NOT TEST_sysv_sem
)
)
qt_feature_definition("ipc_posix" "QT_POSIX_IPC")
@@ -643,6 +585,14 @@ qt_feature("std-atomic64" PUBLIC
LABEL "64 bit atomic operations"
CONDITION WrapAtomic_FOUND
)
+qt_feature("memmem" PRIVATE
+ LABEL "C library function memmem()"
+ CONDITION TEST_memmem
+)
+qt_feature("memrchr" PRIVATE
+ LABEL "C library function memrchr()"
+ CONDITION TEST_memrchr
+)
qt_feature("mimetype" PUBLIC
SECTION "Utilities"
LABEL "Mimetype handling"
@@ -688,11 +638,11 @@ qt_feature("poll_select" PRIVATE
qt_feature_definition("poll_select" "QT_NO_NATIVE_POLL")
qt_feature("posix_sem" PRIVATE
LABEL "POSIX semaphores"
- CONDITION TEST_posix_sem
+ CONDITION TEST_posix_sem AND QT_FEATURE_systemsemaphore
)
qt_feature("posix_shm" PRIVATE
LABEL "POSIX shared memory"
- CONDITION TEST_posix_shm
+ CONDITION TEST_posix_shm AND UNIX
)
qt_feature("qqnx_pps" PRIVATE
LABEL "PPS"
@@ -707,18 +657,13 @@ qt_feature("slog2" PRIVATE
LABEL "slog2"
CONDITION Slog2_FOUND
)
-qt_feature("statx" PRIVATE
- LABEL "statx() in libc"
- CONDITION ( LINUX OR HURD ) AND TEST_statx
-)
qt_feature("syslog" PRIVATE
LABEL "syslog"
AUTODETECT OFF
- CONDITION TEST_syslog
)
qt_feature("sysv_sem" PRIVATE
LABEL "System V / XSI semaphores"
- CONDITION TEST_sysv_sem
+ CONDITION TEST_sysv_sem AND QT_FEATURE_systemsemaphore
)
qt_feature("sysv_shm" PRIVATE
LABEL "System V / XSI shared memory"
@@ -741,6 +686,10 @@ qt_feature("backtrace" PRIVATE
LABEL "backtrace"
CONDITION UNIX AND QT_FEATURE_regularexpression AND WrapBacktrace_FOUND
)
+qt_feature("cxx23_stacktrace" PRIVATE
+ LABEL "C++23 <stacktrace>"
+ CONDITION TEST_cxx23_stacktrace AND QT_FEATURE_cxx2b
+)
qt_feature("sharedmemory" PUBLIC
SECTION "Kernel"
LABEL "QSharedMemory"
@@ -772,21 +721,18 @@ qt_feature("cpp-winrt" PRIVATE PUBLIC
AUTODETECT WIN32
CONDITION WIN32 AND TEST_cpp_winrt
)
-qt_feature_definition("xmlstream" "QT_NO_XMLSTREAM" NEGATE VALUE "1")
qt_feature("xmlstreamreader" PUBLIC
SECTION "Kernel"
LABEL "QXmlStreamReader"
PURPOSE "Provides a well-formed XML parser with a simple streaming API."
CONDITION QT_FEATURE_xmlstream
)
-qt_feature_definition("xmlstreamreader" "QT_NO_XMLSTREAMREADER" NEGATE VALUE "1")
qt_feature("xmlstreamwriter" PUBLIC
SECTION "Kernel"
LABEL "QXmlStreamWriter"
PURPOSE "Provides a XML writer with a simple streaming API."
CONDITION QT_FEATURE_xmlstream
)
-qt_feature_definition("xmlstreamwriter" "QT_NO_XMLSTREAMWRITER" NEGATE VALUE "1")
qt_feature("textdate" PUBLIC
SECTION "Data structures"
LABEL "Text Date"
@@ -829,7 +775,7 @@ qt_feature("library" PUBLIC
SECTION "File I/O"
LABEL "QLibrary"
PURPOSE "Provides a wrapper for dynamically loaded libraries."
- CONDITION WIN32 OR HPUX OR ( NOT NACL AND QT_FEATURE_dlopen )
+ CONDITION WIN32 OR HPUX OR QT_FEATURE_dlopen
)
qt_feature_definition("library" "QT_NO_LIBRARY" NEGATE VALUE "1")
qt_feature("settings" PUBLIC
@@ -947,7 +893,14 @@ qt_feature("timezone" PUBLIC
SECTION "Utilities"
LABEL "QTimeZone"
PURPOSE "Provides support for time-zone handling."
- CONDITION NOT WASM
+ CONDITION NOT WASM AND NOT VXWORKS
+)
+qt_feature("timezone_locale" PRIVATE
+ SECTION "Utilities"
+ LABEL "QTimeZone"
+ PURPOSE "Provides support for localized time-zone display names."
+ CONDITION
+ QT_FEATURE_timezone AND ( ( UNIX AND NOT APPLE AND NOT ANDROID ) OR QT_FEATURE_icu )
)
qt_feature("datetimeparser" PRIVATE
SECTION "Utilities"
@@ -1004,11 +957,17 @@ qt_feature("permissions" PUBLIC
SECTION "Utilities"
LABEL "Application permissions"
PURPOSE "Provides support for requesting user permission to access restricted data or APIs"
- CONDITION APPLE OR ANDROID OR WASM
+)
+qt_feature("openssl-hash" PRIVATE
+ LABEL "OpenSSL based cryptographic hash"
+ AUTODETECT OFF
+ CONDITION QT_FEATURE_openssl_linked AND QT_FEATURE_opensslv30
+ PURPOSE "Uses OpenSSL based implementation of cryptographic hash algorithms."
)
qt_configure_add_summary_section(NAME "Qt Core")
qt_configure_add_summary_entry(ARGS "backtrace")
+qt_configure_add_summary_entry(ARGS "cxx23_stacktrace")
qt_configure_add_summary_entry(ARGS "doubleconversion")
qt_configure_add_summary_entry(ARGS "system-doubleconversion")
qt_configure_add_summary_entry(ARGS "forkfd_pidfd" CONDITION LINUX)
@@ -1023,6 +982,7 @@ qt_configure_add_summary_entry(
ARGS "etw lttng ctf"
MESSAGE "Tracing backend"
)
+qt_configure_add_summary_entry(ARGS "openssl-hash")
qt_configure_add_summary_section(NAME "Logging backends")
qt_configure_add_summary_entry(ARGS "journald")
qt_configure_add_summary_entry(ARGS "syslog")
@@ -1042,16 +1002,6 @@ qt_configure_add_report_entry(
)
qt_configure_add_report_entry(
TYPE ERROR
- MESSAGE "C++11 <random> is required and is missing or failed to compile."
- CONDITION NOT TEST_cxx11_random
-)
-qt_configure_add_report_entry(
- TYPE ERROR
- MESSAGE "Your C library does not provide sscanf_l or snprintf_l. You need to use libdouble-conversion for double/string conversion."
- CONDITION INPUT_doubleconversion STREQUAL 'no' AND NOT TEST_xlocalescanprint
-)
-qt_configure_add_report_entry(
- TYPE ERROR
MESSAGE "detected a std::atomic implementation that fails for function pointers. Please apply the patch corresponding to your Standard Library vendor, found in qtbase/config.tests/atomicfptr"
CONDITION NOT TEST_atomicfptr
)