From fccb088a98015860f8a8dc97bb7476b665c0b6a5 Mon Sep 17 00:00:00 2001 From: Fabio Date: Wed, 13 Apr 2016 23:20:37 +0200 Subject: [PATCH 1/8] Changes to make it compile with Qt4 --- .gitmodules | 6 ++++++ src/mimetypes | 1 + src/qjson-backport | 1 + 3 files changed, 8 insertions(+) create mode 100644 .gitmodules create mode 160000 src/mimetypes create mode 160000 src/qjson-backport diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..ac21b97 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "src/qjson-backport"] + path = src/qjson-backport + url = https://github.com/5in4/qjson-backport.git +[submodule "src/mimetypes"] + path = src/mimetypes + url = http://code.qt.io/cgit/playground/mimetypes.git/ diff --git a/src/mimetypes b/src/mimetypes new file mode 160000 index 0000000..1ab65d1 --- /dev/null +++ b/src/mimetypes @@ -0,0 +1 @@ +Subproject commit 1ab65d163d9fe77b181c24f4e01e060df725a6bf diff --git a/src/qjson-backport b/src/qjson-backport new file mode 160000 index 0000000..d2596fc --- /dev/null +++ b/src/qjson-backport @@ -0,0 +1 @@ +Subproject commit d2596fc6c4d2df0cb2c44cf9614a63f66f7f299b From db494309ab4891f6d77abae93629598bf6d43704 Mon Sep 17 00:00:00 2001 From: Fabio Date: Wed, 13 Apr 2016 23:23:01 +0200 Subject: [PATCH 2/8] Changes to make it compile with Qt4 --- CMakeLists.txt | 2 +- examples/chatserver/CMakeLists.txt | 2 +- examples/chatserver/main.cpp | 8 ++++++++ examples/fileserver/main.cpp | 9 +++++++++ src/CMakeLists.txt | 23 ++++++++++++++++++++++- src/qfilesystemhandler.cpp | 11 +++++++++-- src/qhttphandler.cpp | 2 ++ src/qobjecthandler.cpp | 10 +++++++--- 8 files changed, 59 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ec32cd8..35d9da1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ set(CMAKECONFIG_INSTALL_DIR "${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME}" CACHE STR set(DOC_INSTALL_DIR share/doc/${PROJECT_NAME} CACHE STRING "Documentation installation directory relative to the install prefix") set(EXAMPLES_INSTALL_DIR "${LIB_INSTALL_DIR}/${PROJECT_NAME}/examples" CACHE STRING "Examples installation directory relative to the install prefix") -find_package(Qt5Network 5.1 REQUIRED) +find_package(Qt4 4.8 REQUIRED QtCore QtNetwork) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) diff --git a/examples/chatserver/CMakeLists.txt b/examples/chatserver/CMakeLists.txt index 5fdc805..2851478 100644 --- a/examples/chatserver/CMakeLists.txt +++ b/examples/chatserver/CMakeLists.txt @@ -3,7 +3,7 @@ set(SRC main.cpp ) -qt5_add_resources(QRC resources.qrc) +QT4_ADD_RESOURCES(QRC resources.qrc) add_executable(chatserver ${SRC} ${QRC}) target_link_libraries(chatserver QHttpEngine) diff --git a/examples/chatserver/main.cpp b/examples/chatserver/main.cpp index d8a26da..205760b 100644 --- a/examples/chatserver/main.cpp +++ b/examples/chatserver/main.cpp @@ -20,8 +20,11 @@ * IN THE SOFTWARE. */ +#if QT_VERSION >= 0x050000 #include #include +#endif + #include #include #include @@ -37,6 +40,7 @@ int main(int argc, char * argv[]) { QCoreApplication a(argc, argv); +#if QT_VERSION >= 0x050000 // Build the command-line options QCommandLineParser parser; QCommandLineOption addressOption( @@ -61,6 +65,10 @@ int main(int argc, char * argv[]) // Obtain the values QHostAddress address = QHostAddress(parser.value(addressOption)); quint16 port = parser.value(portOption).toInt(); +#else + QHostAddress address("127.0.0.1"); + quint16 port = 8000; +#endif // Build the hierarchy of handlers QFilesystemHandler handler(":/static"); diff --git a/examples/fileserver/main.cpp b/examples/fileserver/main.cpp index f6cb8bb..5b2dec1 100644 --- a/examples/fileserver/main.cpp +++ b/examples/fileserver/main.cpp @@ -20,8 +20,11 @@ * IN THE SOFTWARE. */ +#if QT_VERSION >= 0x050000 #include #include +#endif + #include #include #include @@ -34,6 +37,7 @@ int main(int argc, char * argv[]) { QCoreApplication a(argc, argv); +#if QT_VERSION >= 0x050000 // Build the command-line options QCommandLineParser parser; QCommandLineOption addressOption( @@ -66,6 +70,11 @@ int main(int argc, char * argv[]) QHostAddress address = QHostAddress(parser.value(addressOption)); quint16 port = parser.value(portOption).toInt(); QString dir = parser.value(dirOption); +#else + QHostAddress address("127.0.0.1"); + quint16 port = 8000; + QString dir = QDir::homePath(); +#endif // Create the filesystem handler and server QFilesystemHandler handler(dir); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 83f9a4c..6be9185 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,6 +13,24 @@ set(SRC qiodevicecopier.cpp qlocalfile.cpp qobjecthandler.cpp + + qjson-backport/qjsonarray.cpp + qjson-backport/qjson.cpp + qjson-backport/qjsondocument.cpp + qjson-backport/qjsonobject.cpp + qjson-backport/qjsonparser.cpp + qjson-backport/qjsonvalue.cpp + qjson-backport/qjsonwriter.cpp + + mimetypes/src/mimetypes/qmimedatabase.cpp + mimetypes/src/mimetypes/qmimeglobpattern.cpp + mimetypes/src/mimetypes/qmimemagicrule.cpp + mimetypes/src/mimetypes/qmimemagicrulematcher.cpp + mimetypes/src/mimetypes/qmimeprovider.cpp + mimetypes/src/mimetypes/qmimetype.cpp + mimetypes/src/mimetypes/qmimetypeparser.cpp + mimetypes/src/mimetypes/inqt5/qstandardpaths.cpp + mimetypes/src/mimetypes/inqt5/qstandardpaths_unix.cpp ) if(WIN32) @@ -26,11 +44,14 @@ else() add_library(QHttpEngine SHARED ${HEADERS} ${SRC}) endif() -qt5_use_modules(QHttpEngine Network) +target_link_libraries(QHttpEngine Qt4::QtCore Qt4::QtNetwork Qt4::QtGui) target_include_directories(QHttpEngine PUBLIC "$" "$" + "$" + "$" + "$" "$" ) diff --git a/src/qfilesystemhandler.cpp b/src/qfilesystemhandler.cpp index 2f8e172..8bb4cef 100644 --- a/src/qfilesystemhandler.cpp +++ b/src/qfilesystemhandler.cpp @@ -93,19 +93,26 @@ void QFilesystemHandlerPrivate::processFile(QHttpSocket *socket, const QString & copier->start(); } +#if QT_VERSION >= 0x050000 +# define HTMLESCAPE(x) ((x).toHtmlEscaped()) +#else +# include +# define HTMLESCAPE(x) (Qt::escape(x)) +#endif + void QFilesystemHandlerPrivate::processDirectory(QHttpSocket *socket, const QString &path, const QString &absolutePath) { // Add entries for each of the files QString listing; foreach(QFileInfo info, QDir(absolutePath).entryInfoList()) { listing.append(QString("
  • %1%2
  • ") - .arg(info.fileName().toHtmlEscaped()) + .arg(HTMLESCAPE(info.fileName())) .arg(info.isDir() ? "/" : "")); } // Build the response and convert the string to UTF-8 QByteArray data = ListTemplate - .arg("/" + path.toHtmlEscaped()) + .arg("/" + HTMLESCAPE(path)) .arg(listing) .arg(QHTTPENGINE_VERSION) .toUtf8(); diff --git a/src/qhttphandler.cpp b/src/qhttphandler.cpp index c5e933f..475ac21 100644 --- a/src/qhttphandler.cpp +++ b/src/qhttphandler.cpp @@ -46,6 +46,8 @@ void QHttpHandler::addSubHandler(const QRegExp &pattern, QHttpHandler *handler) d->subHandlers.append(SubHandler(pattern, handler)); } +#include + void QHttpHandler::route(QHttpSocket *socket, const QString &path) { // Check each of the redirects for a match diff --git a/src/qobjecthandler.cpp b/src/qobjecthandler.cpp index 298d3f9..90c4579 100644 --- a/src/qobjecthandler.cpp +++ b/src/qobjecthandler.cpp @@ -20,9 +20,8 @@ * IN THE SOFTWARE. */ -#include -#include -#include +#include +#include #include #include #include @@ -107,7 +106,12 @@ void QObjectHandler::process(QHttpSocket *socket, const QString &path) // Ensure that the return type of the slot is QVariantMap QMetaMethod method = metaObject()->method(index); + +#if QT_VERSION >= 0x050000 if(method.returnType() != QMetaType::QVariantMap) { +#else + if(!method.typeName() || strcmp(method.typeName(), "QVariantMap") != 0) { +#endif socket->writeError(QHttpSocket::InternalServerError); return; } From fdb20c52b7ad85a5922b10eeb0abe82c5fa5a70a Mon Sep 17 00:00:00 2001 From: Fabio Date: Thu, 14 Apr 2016 01:03:11 +0200 Subject: [PATCH 3/8] First try to compile with Qt5.1. If not available, try to compile with Qt4.8. Else, fail. Tests don't compile yet, examples do. --- CMakeLists.txt | 12 +++++++++- src/CMakeLists.txt | 58 ++++++++++++++++++++++++++++------------------ 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 35d9da1..4849c45 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,17 @@ set(CMAKECONFIG_INSTALL_DIR "${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME}" CACHE STR set(DOC_INSTALL_DIR share/doc/${PROJECT_NAME} CACHE STRING "Documentation installation directory relative to the install prefix") set(EXAMPLES_INSTALL_DIR "${LIB_INSTALL_DIR}/${PROJECT_NAME}/examples" CACHE STRING "Examples installation directory relative to the install prefix") -find_package(Qt4 4.8 REQUIRED QtCore QtNetwork) +find_package(Qt5Network 5.1 QUIET) +if (NOT Qt5Network_FOUND) + find_package(Qt4 4.8 QUIET COMPONENTS QtGui QtCore QtNetwork) + if (NOT Qt4_FOUND) + message(FATAL_ERROR "One of Qt5 or Qt4 is required") + endif() + + find_package(Git REQUIRED) + message("-- Updating git submodules for QT4 compilation --") + execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive) +endif() set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6be9185..45590ea 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,25 +13,28 @@ set(SRC qiodevicecopier.cpp qlocalfile.cpp qobjecthandler.cpp - - qjson-backport/qjsonarray.cpp - qjson-backport/qjson.cpp - qjson-backport/qjsondocument.cpp - qjson-backport/qjsonobject.cpp - qjson-backport/qjsonparser.cpp - qjson-backport/qjsonvalue.cpp - qjson-backport/qjsonwriter.cpp - - mimetypes/src/mimetypes/qmimedatabase.cpp - mimetypes/src/mimetypes/qmimeglobpattern.cpp - mimetypes/src/mimetypes/qmimemagicrule.cpp - mimetypes/src/mimetypes/qmimemagicrulematcher.cpp - mimetypes/src/mimetypes/qmimeprovider.cpp - mimetypes/src/mimetypes/qmimetype.cpp - mimetypes/src/mimetypes/qmimetypeparser.cpp - mimetypes/src/mimetypes/inqt5/qstandardpaths.cpp - mimetypes/src/mimetypes/inqt5/qstandardpaths_unix.cpp ) +if (Qt4_FOUND) + set(SRC "${SRC}" + qjson-backport/qjsonarray.cpp + qjson-backport/qjson.cpp + qjson-backport/qjsondocument.cpp + qjson-backport/qjsonobject.cpp + qjson-backport/qjsonparser.cpp + qjson-backport/qjsonvalue.cpp + qjson-backport/qjsonwriter.cpp + + mimetypes/src/mimetypes/qmimedatabase.cpp + mimetypes/src/mimetypes/qmimeglobpattern.cpp + mimetypes/src/mimetypes/qmimemagicrule.cpp + mimetypes/src/mimetypes/qmimemagicrulematcher.cpp + mimetypes/src/mimetypes/qmimeprovider.cpp + mimetypes/src/mimetypes/qmimetype.cpp + mimetypes/src/mimetypes/qmimetypeparser.cpp + mimetypes/src/mimetypes/inqt5/qstandardpaths.cpp + mimetypes/src/mimetypes/inqt5/qstandardpaths_unix.cpp + ) +endif() if(WIN32) configure_file(resource.rc.in "${CMAKE_CURRENT_BINARY_DIR}/resource.rc") @@ -44,17 +47,24 @@ else() add_library(QHttpEngine SHARED ${HEADERS} ${SRC}) endif() -target_link_libraries(QHttpEngine Qt4::QtCore Qt4::QtNetwork Qt4::QtGui) - target_include_directories(QHttpEngine PUBLIC "$" "$" - "$" - "$" - "$" "$" ) +if (Qt4_FOUND) + target_include_directories(QHttpEngine PRIVATE + "$" + "$" + "$" + ) + + target_link_libraries(QHttpEngine Qt4::QtCore Qt4::QtNetwork Qt4::QtGui) +else() + qt5_use_modules(QHttpEngine Network) +endif() + set_target_properties(QHttpEngine PROPERTIES DEFINE_SYMBOL QT_NO_SIGNALS_SLOTS_KEYWORDS DEFINE_SYMBOL QHTTPENGINE_LIBRARY @@ -89,3 +99,5 @@ configure_file(${PROJECT_NAME}.pc.in "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" DESTINATION "${LIB_INSTALL_DIR}/pkgconfig" ) + + From ad5e6e4e2d27a18fedaa6102feb18d8d85c47efb Mon Sep 17 00:00:00 2001 From: Fabio Date: Thu, 14 Apr 2016 01:18:00 +0200 Subject: [PATCH 4/8] Polished QT checks and messages. --- CMakeLists.txt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4849c45..6151df3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,13 +30,21 @@ set(EXAMPLES_INSTALL_DIR "${LIB_INSTALL_DIR}/${PROJECT_NAME}/examples" CACHE STR find_package(Qt5Network 5.1 QUIET) if (NOT Qt5Network_FOUND) + message("-- QT minimum version 5.1 not found, trying with minimum version 4.8") + find_package(Qt4 4.8 QUIET COMPONENTS QtGui QtCore QtNetwork) if (NOT Qt4_FOUND) - message(FATAL_ERROR "One of Qt5 or Qt4 is required") + message("-- QT minimum version 4.8 not found") + + message(FATAL_ERROR "Qt minimum versio 4.8 is required") endif() +endif() + +message("-- Using QT version ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}") +if (Qt4_FOUND) find_package(Git REQUIRED) - message("-- Updating git submodules for QT4 compilation --") + message("-- Updating git submodules for QT4 compilation ${Qt4_VERSION}") execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive) endif() From d18ec54a401c3f00ad0868c1d9db37c8afe52063 Mon Sep 17 00:00:00 2001 From: Fabio Date: Thu, 14 Apr 2016 01:52:46 +0200 Subject: [PATCH 5/8] Fixed compilation with Qt5. --- examples/chatserver/CMakeLists.txt | 6 +++++- examples/chatserver/main.cpp | 2 ++ examples/fileserver/main.cpp | 2 ++ tests/CMakeLists.txt | 4 ++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/examples/chatserver/CMakeLists.txt b/examples/chatserver/CMakeLists.txt index 2851478..e6f82d9 100644 --- a/examples/chatserver/CMakeLists.txt +++ b/examples/chatserver/CMakeLists.txt @@ -3,7 +3,11 @@ set(SRC main.cpp ) -QT4_ADD_RESOURCES(QRC resources.qrc) +if (Qt4_FOUND) + QT4_ADD_RESOURCES(QRC resources.qrc) +else() + qt5_add_resources(QRC resources.qrc) +endif() add_executable(chatserver ${SRC} ${QRC}) target_link_libraries(chatserver QHttpEngine) diff --git a/examples/chatserver/main.cpp b/examples/chatserver/main.cpp index 205760b..bd8ae6c 100644 --- a/examples/chatserver/main.cpp +++ b/examples/chatserver/main.cpp @@ -20,6 +20,8 @@ * IN THE SOFTWARE. */ +#include + #if QT_VERSION >= 0x050000 #include #include diff --git a/examples/fileserver/main.cpp b/examples/fileserver/main.cpp index 5b2dec1..82f3f66 100644 --- a/examples/fileserver/main.cpp +++ b/examples/fileserver/main.cpp @@ -20,6 +20,8 @@ * IN THE SOFTWARE. */ +#include + #if QT_VERSION >= 0x050000 #include #include diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7e90506..3d4e3d4 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,3 +1,7 @@ +if (Qt4_FOUND) +find_package(Qt4Test 4.8 REQUIRED) +endif() + find_package(Qt5Test 5.1 REQUIRED) add_subdirectory(common) From 46995436e8ab92ea2469f25824ed8d9a00cb30f9 Mon Sep 17 00:00:00 2001 From: Fabio Date: Thu, 14 Apr 2016 02:49:08 +0200 Subject: [PATCH 6/8] Made some tests compile with Qt4. Others are disabled for lack of functionalities in library. --- tests/CMakeLists.txt | 37 +++++++++++++++++++++++++++--------- tests/TestQHttpParser.cpp | 1 + tests/TestQObjectHandler.cpp | 4 ++-- tests/common/CMakeLists.txt | 6 +++++- 4 files changed, 36 insertions(+), 12 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 3d4e3d4..b35b7ac 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,27 +1,46 @@ if (Qt4_FOUND) -find_package(Qt4Test 4.8 REQUIRED) + find_package(Qt4 4.8 REQUIRED QtTest) +else() + find_package(Qt5Test 5.1 REQUIRED) endif() -find_package(Qt5Test 5.1 REQUIRED) - add_subdirectory(common) set(TESTS - TestQFilesystemHandler - TestQHttpHandler TestQHttpParser - TestQHttpServer - TestQHttpSocket TestQIByteArray - TestQIODeviceCopier TestQLocalFile - TestQObjectHandler ) +# These don't work with Qt4 +if (NOT Qt4_FOUND) + set(TESTS ${TESTS} + TestQFilesystemHandler + TestQHttpHandler + TestQHttpServer + TestQHttpSocket + TestQIODeviceCopier + TestQObjectHandler + ) +endif() + foreach(TEST ${TESTS}) add_executable(${TEST} ${TEST}.cpp) + +if (Qt4_FOUND) + target_link_libraries(${TEST} Qt4::QtTest) + + target_include_directories(${TEST} PRIVATE + "$" + "$" + "$" + ) +else() qt5_use_modules(${TEST} Test) +endif() + target_link_libraries(${TEST} QHttpEngine common) + add_test(NAME ${TEST} COMMAND ${TEST} ) diff --git a/tests/TestQHttpParser.cpp b/tests/TestQHttpParser.cpp index e50ceb2..35d7460 100644 --- a/tests/TestQHttpParser.cpp +++ b/tests/TestQHttpParser.cpp @@ -30,6 +30,7 @@ typedef QList QByteArrayList; Q_DECLARE_METATYPE(QHttpHeaderMap) +Q_DECLARE_METATYPE(QList) const QIByteArray Key1 = "a"; const QByteArray Value1 = "b"; diff --git a/tests/TestQObjectHandler.cpp b/tests/TestQObjectHandler.cpp index 8b5fc3d..05fd2f7 100644 --- a/tests/TestQObjectHandler.cpp +++ b/tests/TestQObjectHandler.cpp @@ -20,8 +20,8 @@ * IN THE SOFTWARE. */ -#include -#include +#include +#include #include #include #include diff --git a/tests/common/CMakeLists.txt b/tests/common/CMakeLists.txt index 5e58d40..c0c5b89 100644 --- a/tests/common/CMakeLists.txt +++ b/tests/common/CMakeLists.txt @@ -6,4 +6,8 @@ set(SRC add_library(common STATIC ${SRC}) target_link_libraries(common QHttpEngine) -qt5_use_modules(common Network) +if (Qt4_FOUND) + target_link_libraries(common Qt4::QtNetwork) +else() + qt5_use_modules(common Network) +endif() From d7d7d855d3566e9da78660a17bd3c1e50bd8dfb1 Mon Sep 17 00:00:00 2001 From: Fabio Date: Thu, 14 Apr 2016 02:49:35 +0200 Subject: [PATCH 7/8] Fixed Qt4 compatibility issue for QIByteArray class. --- src/QHttpEngine/qibytearray.h | 12 ++++++++++++ src/qibytearray.cpp | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/src/QHttpEngine/qibytearray.h b/src/QHttpEngine/qibytearray.h index 4f5fcc4..c771f54 100644 --- a/src/QHttpEngine/qibytearray.h +++ b/src/QHttpEngine/qibytearray.h @@ -48,10 +48,22 @@ class QHTTPENGINE_EXPORT QIByteArray : public QByteArray */ QIByteArray(const QByteArray &other); +#if QT_VERSION >= 0x050000 /** * @brief Create a QIByteArray from a const char * */ QIByteArray(const char *data, int size = -1); +#else + /** + * @brief Create a QIByteArray from a const char * + */ + QIByteArray(const char *data); + + /** + * @brief Create a QIByteArray from a const char * + */ + QIByteArray(const char *data, int size); +#endif }; QHTTPENGINE_EXPORT bool operator==(const QIByteArray &a1, const QIByteArray &a2); diff --git a/src/qibytearray.cpp b/src/qibytearray.cpp index 1e12a0e..49cad57 100644 --- a/src/qibytearray.cpp +++ b/src/qibytearray.cpp @@ -31,6 +31,12 @@ QIByteArray::QIByteArray(const QByteArray &other) : QByteArray(other) {} +#if QT_VERSION < 0x050000 +QIByteArray::QIByteArray(const char *data) + : QByteArray(data) +{} +#endif + QIByteArray::QIByteArray(const char *data, int size) : QByteArray(data, size) {} From 4d1ec292793372e67e070e0b61480936ab5ed1ba Mon Sep 17 00:00:00 2001 From: Fabio Date: Thu, 14 Apr 2016 02:51:59 +0200 Subject: [PATCH 8/8] Updated Readme. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 904703a..66d5607 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ QHttpEngine requires a modern C++ compiler supported by the Qt framework. Some e - GCC (including MinGW-w64) - Clang -CMake 2.8.11+ and Qt 5.1+ are required to build the library. +CMake 2.8.11+ and Qt 4.8+ are required to build the library. If Qt 5.1+ is not available, then two external projects are used as submodules, which provide missing Qt5 functionalities: qjson-backport and mimetypes. ### Build Instructions