diff options
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/configure.json | 25 | ||||
-rw-r--r-- | src/corelib/global/qconfig-bootstrapped.h | 2 | ||||
-rw-r--r-- | src/corelib/global/qrandom.cpp | 6 |
3 files changed, 30 insertions, 3 deletions
diff --git a/src/corelib/configure.json b/src/corelib/configure.json index 7fca3137eb..0da3bff713 100644 --- a/src/corelib/configure.json +++ b/src/corelib/configure.json @@ -138,6 +138,11 @@ "type": "compile", "test": "unix/cloexec" }, + "cxx11_random": { + "label": "C++11 <random>", + "type": "compile", + "test": "unix/cxx11_random" + }, "eventfd": { "label": "eventfd", "type": "compile", @@ -208,6 +213,11 @@ "type": "compile", "test": "unix/syslog" }, + "sys_auxv": { + "label": "sys/auxv.h", + "type": "compile", + "test": "unix/sys_auxv" + }, "xlocalescanprint": { "label": "xlocale.h (or equivalents)", "type": "compile", @@ -242,6 +252,11 @@ "condition": "features.doubleconversion && libs.doubleconversion", "output": [ "privateFeature" ] }, + "cxx11_random": { + "label": "C++11 <random>", + "condition": "tests.cxx11_random", + "output": [ "privateFeature" ] + }, "eventfd": { "label": "eventfd", "condition": "tests.eventfd", @@ -394,6 +409,11 @@ "condition": "tests.syslog", "output": [ "privateFeature" ] }, + "sys_auxv": { + "label": "sys/auxv.h", + "condition": "config.linux && tests.sys_auxv", + "output": [ "privateFeature" ] + }, "threadsafe-cloexec": { "label": "Threadsafe pipe creation", "condition": "tests.cloexec", @@ -631,6 +651,11 @@ ensure that the IDEs they use either set QT_LOGGING_TO_CONSOLE to 1 or are able to read the logged output from journald, syslog or slog2." }, { + "type": "warning", + "condition": "!config.win32 && !config.darwin && !config.bsd && !features.cxx11_random", + "message": "No high-quality PRNG available for QRandomGenerator fallback.\nIf the HW or OS RNG fails, Qt will abort execution." + }, + { "type": "error", "condition": "input.doubleconversion == 'no' && !tests.xlocalescanprint", "message": "Your C library does not provide sscanf_l or snprintf_l. diff --git a/src/corelib/global/qconfig-bootstrapped.h b/src/corelib/global/qconfig-bootstrapped.h index 374b53a9b5..a6a56b5d59 100644 --- a/src/corelib/global/qconfig-bootstrapped.h +++ b/src/corelib/global/qconfig-bootstrapped.h @@ -75,6 +75,7 @@ #else # define QT_FEATURE_alloca_malloc_h -1 #endif +#define QT_FEATURE_cxx11_random (QT_HAS_INCLUDE(<random>) ? 1 : -1) #define QT_FEATURE_iconv -1 #define QT_FEATURE_icu -1 #define QT_FEATURE_journald -1 @@ -96,6 +97,7 @@ #define QT_NO_GEOM_VARIANT #define QT_FEATURE_sharedmemory -1 #define QT_FEATURE_systemsemaphore -1 +#define QT_FEATURE_sys_auxv (QT_HAS_INCLUDE(<sys/auxv.h>) ? 1 : -1) #ifdef QT_BUILD_QMAKE #define QT_FEATURE_commandlineparser -1 diff --git a/src/corelib/global/qrandom.cpp b/src/corelib/global/qrandom.cpp index 83a309b143..6a92260c46 100644 --- a/src/corelib/global/qrandom.cpp +++ b/src/corelib/global/qrandom.cpp @@ -46,13 +46,13 @@ #include <qthreadstorage.h> #include <private/qsimd_p.h> -#if QT_HAS_INCLUDE(<random>) +#if QT_CONFIG(cxx11_random) # include <random> # include "qdeadlinetimer.h" # include "qhashfunctions.h" #endif -#if QT_HAS_INCLUDE(<sys/auxv.h>) +#if QT_CONFIG(sys_auxv) # include <sys/auxv.h> #endif @@ -213,7 +213,7 @@ static void fallback_fill(quint32 *ptr, qssize_t left) Q_DECL_NOTHROW // BSDs have arc4random(4) and these work even in chroot(2) arc4random_buf(ptr, left * sizeof(*ptr)); } -#elif QT_HAS_INCLUDE(<chrono>) +#elif QT_CONFIG(cxx11_random) static QBasicAtomicInteger<unsigned> seed = Q_BASIC_ATOMIC_INITIALIZER(0U); static void fallback_update_seed(unsigned value) { |