Introduce a configure-time check for C++17 filesystem

Various compilers have various fun ways of failing to compile when it
is used so let's check if they will work properly during configure
rather than much later.

Change-Id: Ia93d4b91b3d269b4cab2a5f677c3c89e06b44ce3
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
This commit is contained in:
Mårten Nordheim 2020-02-07 14:01:18 +01:00
parent f64694647a
commit 3568ad58f5
4 changed files with 24 additions and 7 deletions

View File

@ -366,6 +366,15 @@
"main": "std::mt19937 mt(0);"
}
},
"cxx17_filesystem": {
"label": "C++17 <filesystem>",
"type": "compile",
"test": {
"include": "filesystem",
"main": "std::filesystem::path p(\"./file\");",
"qmake": "CONFIG += c++17"
}
},
"eventfd": {
"label": "eventfd",
"type": "compile",
@ -613,6 +622,13 @@
"condition": "tests.cxx11_future",
"output": [ "publicFeature" ]
},
"cxx17_filesystem": {
"label": "C++17 <filesystem>",
"condition": "tests.cxx17_filesystem",
"output": [
"publicFeature"
]
},
"eventfd": {
"label": "eventfd",
"condition": "!config.wasm && tests.eventfd",

View File

@ -79,6 +79,7 @@
#define QT_FEATURE_cborstreamwriter 1
#define QT_CRYPTOGRAPHICHASH_ONLY_SHA1
#define QT_FEATURE_cxx11_random (__has_include(<random>) ? 1 : -1)
#define QT_FEATURE_cxx17_filesystem -1
#define QT_NO_DATASTREAM
#define QT_FEATURE_datestring 1
#define QT_FEATURE_datetimeparser -1

View File

@ -44,11 +44,7 @@
#include "qfilesystemiterator.h"
#if QT_HAS_INCLUDE(<filesystem>) && defined(__cpp_lib_filesystem) && __cpp_lib_filesystem >= 201703L
#define HAS_STD_FILESYSTEM
#endif
#ifdef HAS_STD_FILESYSTEM
#if QT_CONFIG(cxx17_filesystem)
#include <filesystem>
#endif
@ -248,7 +244,7 @@ void tst_qdiriterator::fsiterator()
void tst_qdiriterator::stdRecursiveDirectoryIterator()
{
#ifdef HAS_STD_FILESYSTEM
#if QT_CONFIG(cxx17_filesystem)
QFETCH(QByteArray, dirpath);
int count = 0;

View File

@ -4,7 +4,11 @@ QT = core testlib
CONFIG += release
# Enable c++17 support for std::filesystem
qtConfig(c++1z): CONFIG += c++17
qtConfig(cxx17_filesystem) {
CONFIG += c++17
gcc:lessThan(QMAKE_GCC_MAJOR_VERSION, 9): \
QMAKE_LFLAGS += -lstdc++fs
}
SOURCES += main.cpp qfilesystemiterator.cpp
HEADERS += qfilesystemiterator.h