Преглед изворни кода

Update for Qt6

Minor code changes, mostly CMake edits.
Some code is left commented out for further review.
Mårten Nordheim пре 3 година
родитељ
комит
a2bfac942f

+ 2 - 2
CMakeLists.txt

@@ -4,7 +4,7 @@ cmake_policy(VERSION 3.6...3.14)
 set(QT_PROTOBUF_VERSION 0.6.0)
 set(QT_PROTOBUF_NAMESPACE QtProtobuf)
 set(QT_PREFIX Qt)
-set(QT_VERSIONED_PREFIX Qt5)
+set(QT_VERSIONED_PREFIX Qt6)
 
 project(${QT_PROTOBUF_NAMESPACE} VERSION ${QT_PROTOBUF_VERSION} LANGUAGES CXX)
 
@@ -43,7 +43,7 @@ find_package(${QT_VERSIONED_PREFIX} OPTIONAL_COMPONENTS Network Quick Gui CONFIG
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTORCC ON)
 
-set(CMAKE_CXX_STANDARD 14)
+set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 set(CMAKE_POSITION_INDEPENDENT_CODE ${${QT_VERSIONED_PREFIX}_POSITION_INDEPENDENT_CODE})
 if(UNIX)

+ 4 - 4
cmake/QtProtobufGen.cmake

@@ -32,9 +32,9 @@ function(qtprotobuf_generate)
     set(GENERATION_OPTIONS ${GENERATION_TYPE})
 
     if(qtprotobuf_generate_QML)
-        if(NOT TARGET Qt5::Qml)
-            message(FATAL_ERROR "Trying to enable QML support for ${GENERATED_TARGET_NAME}, but Qt5::Qml is not a target."
-                " find_package(Qt5 COMPONENTS Qml) is missing?")
+        if(NOT TARGET Qt6::Qml)
+            message(FATAL_ERROR "Trying to enable QML support for ${GENERATED_TARGET_NAME}, but Qt6::Qml is not a target."
+                " find_package(Qt6 COMPONENTS Qml) is missing?")
         endif()
         message(STATUS "Enabling QML generation for ${GENERATED_TARGET_NAME}")
         set(GENERATION_OPTIONS "${GENERATION_OPTIONS}:QML")
@@ -137,7 +137,7 @@ function(qtprotobuf_generate)
         SKIP_AUTOGEN ON
     )
 
-    qt5_wrap_cpp(MOC_SOURCES ${GENERATED_HEADERS_FULL})
+    qt6_wrap_cpp(MOC_SOURCES ${GENERATED_HEADERS_FULL})
 
     add_custom_command(
             OUTPUT ${GENERATED_SOURCES_FULL} ${GENERATED_HEADERS_FULL}

+ 1 - 1
cmake/QtProtobufInternalHelpers.cmake

@@ -188,7 +188,7 @@ function(qt_protobuf_internal_add_library target)
     )
 
     target_compile_features(${target}
-        PUBLIC cxx_std_14
+        PUBLIC cxx_std_17
             cxx_auto_type
             cxx_decltype
             cxx_final

+ 4 - 4
examples/clienttutorial/CMakeLists.txt

@@ -8,8 +8,8 @@ set(CMAKE_AUTOUIC ON)
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTORCC ON)
 
-find_package(Qt5 COMPONENTS Core Quick REQUIRED)
-set(CMAKE_POSITION_INDEPENDENT_CODE ${Qt5_POSITION_INDEPENDENT_CODE})
+find_package(Qt6 COMPONENTS Core Quick REQUIRED)
+set(CMAKE_POSITION_INDEPENDENT_CODE ${Qt6_POSITION_INDEPENDENT_CODE})
 set(QT_PROTOBUF_NAMESPACE QtProtobuf)
 if(NOT TARGET ${QT_PROTOBUF_NAMESPACE}::qtprotobufgen)
     find_package(${QT_PROTOBUF_NAMESPACE} COMPONENTS ProtobufGenerator CONFIG REQUIRED)
@@ -33,7 +33,7 @@ if(QT_PROTOBUF_STATIC)
    add_definitions(-DQT_PROTOBUF_STATIC)# add_definitions is used because old cmake versions
                                         # compatibility
 endif()
-target_link_libraries(clienttutorial PRIVATE Qt5::Core
-                                             Qt5::Quick
+target_link_libraries(clienttutorial PRIVATE Qt6::Core
+                                             Qt6::Quick
                                              ${QT_PROTOBUF_NAMESPACE}::Grpc
                                              ${QT_PROTOBUF_NAMESPACE}::Protobuf)

+ 2 - 2
examples/examples_common/CMakeLists.txt

@@ -2,7 +2,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTORCC ON)
 
-find_package(Qt5 COMPONENTS Core CONFIG REQUIRED)
+find_package(Qt6 COMPONENTS Core CONFIG REQUIRED)
 
 file(GLOB HEADERS
     universallistmodelbase.h
@@ -21,4 +21,4 @@ add_library(examples_common ${SOURCES} ${HEADERS})
 target_compile_definitions(examples_common PRIVATE EXAMPLES_COMMON_LIB)
 
 target_include_directories(examples_common PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
-target_link_libraries(examples_common Qt5::Core)
+target_link_libraries(examples_common Qt6::Core)

+ 3 - 3
src/grpc/CMakeLists.txt

@@ -27,8 +27,8 @@ qt_protobuf_internal_add_library(Grpc
         qtgrpcglobal.h
     PUBLIC_LIBRARIES
         ${QT_PROTOBUF_NAMESPACE}::Protobuf
-        Qt5::Core
-        Qt5::Network
+        Qt6::Core
+        Qt6::Network
 )
 
 if(QT_PROTOBUF_NATIVE_GRPC_CHANNEL)
@@ -51,6 +51,6 @@ endif()
 
 qt_protobuf_internal_generate_pri(Grpc)
 
-if(TARGET Qt5::Quick)
+if(TARGET Qt6::Quick)
     add_subdirectory("quick")
 endif()

+ 1 - 1
src/grpc/qt_lib_grpc.pri.in

@@ -7,4 +7,4 @@ QT.grpc.libs = @CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@
 QT.grpc.depends = core network protobuf
 QT.grpc.module_config = @QT_PROTOBUF_EXTRA_CONFIG@
 
-CONFIG += c++14
+CONFIG += c++17

+ 1 - 1
src/grpc/quick/CMakeLists.txt

@@ -31,7 +31,7 @@ if(NOT BUILD_SHARED_LIBS)
     target_compile_definitions(${TARGET} PRIVATE QT_PROTOBUF_STATIC QT_STATICPLUGIN PUBLIC QT_GRPC_QUICK_PLUGIN_NAME="QtGrpcQuickPlugin")
 endif()
 
-target_link_libraries(${TARGET} PRIVATE Qt5::Core Qt5::Qml ${QT_PROTOBUF_NAMESPACE}::Grpc)
+target_link_libraries(${TARGET} PRIVATE Qt6::Core Qt6::Qml ${QT_PROTOBUF_NAMESPACE}::Grpc)
 set_target_properties(${TARGET} PROPERTIES
     LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/QtGrpc"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/QtGrpc"

+ 3 - 3
src/protobuf/CMakeLists.txt

@@ -51,8 +51,8 @@ qt_protobuf_internal_add_library(Protobuf
         qprotobufserializationplugininterface.h
         qprotobuflazymessagepointer.h
     PUBLIC_LIBRARIES
-        Qt5::Core
-        Qt5::Qml
+        Qt6::Core
+        Qt6::Qml
     PUBLIC_DEFINES
         QT_PROTOBUF_PLUGIN_PATH="${QT_INSTALL_PLUGINS}/protobuf"
 )
@@ -71,6 +71,6 @@ endif()
 
 qt_protobuf_internal_generate_pri(Protobuf)
 
-if(TARGET Qt5::Quick)
+if(TARGET Qt6::Quick)
     add_subdirectory("quick")
 endif()

+ 8 - 2
src/protobuf/qqmllistpropertyconstructor.h

@@ -38,13 +38,13 @@ static void qmllistpropertyAppend(QQmlListProperty<T> *p, T *v) {
 
 //! \private
 template<typename T>
-static int qmllistpropertyCount(QQmlListProperty<T> *p) {
+static qsizetype qmllistpropertyCount(QQmlListProperty<T> *p) {
     return reinterpret_cast<QList<QSharedPointer<T>> *>(p->data)->count();
 }
 
 //! \private
 template<typename T>
-static T *qmllistpropertyAt(QQmlListProperty<T> *p, int index) {
+static T *qmllistpropertyAt(QQmlListProperty<T> *p, qsizetype index) {
     return reinterpret_cast<QList<QSharedPointer<T>> *>(p->data)->at(index).data();
 }
 
@@ -53,6 +53,12 @@ template<typename T>
 static void qmllistpropertyReset(QQmlListProperty<T> *p) {
     reinterpret_cast<QList<QSharedPointer<T>> *>(p->data)->clear();
 }
+    // using AppendFunction = void (*)(QQmlListProperty<T> *, T *);
+    // using CountFunction = qsizetype (*)(QQmlListProperty<T> *);
+    // using AtFunction = T *(*)(QQmlListProperty<T> *, qsizetype);
+    // using ClearFunction = void (*)(QQmlListProperty<T> *);
+    // using ReplaceFunction = void (*)(QQmlListProperty<T> *, qsizetype, T *);
+    // using RemoveLastFunction = void (*)(QQmlListProperty<T> *);
 
 //! \private
 template<typename T>

+ 1 - 1
src/protobuf/qt_lib_protobuf.pri.in

@@ -7,7 +7,7 @@ QT.protobuf.libs = @CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@
 QT.protobuf.depends = core qml
 QT.protobuf.module_config = @QT_PROTOBUF_EXTRA_CONFIG@
 
-CONFIG += c++14
+CONFIG += c++17
 DEFINES += @QT_PROTOBUF_EXTRA_COMPILE_DIFINITIONS@
 
 defineTest(qtprotobuf_generate) {

+ 0 - 8
src/protobuf/qtprotobuftypes.h

@@ -399,12 +399,4 @@ struct is_signed<QtProtobuf::sfixed32> : public is_signed<decltype(QtProtobuf::s
 template<>
 struct is_signed<QtProtobuf::sfixed64> : public is_signed<decltype(QtProtobuf::sfixed64::_t)> {};
 
-#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
-template<> struct hash<QString> {
-    std::size_t operator()(const QString &s) const {
-        return std::hash<std::string>()(s.toStdString());
-    }
-};
-#endif
-
 }

+ 4 - 4
src/protobuf/quick/CMakeLists.txt

@@ -30,7 +30,7 @@ if(NOT BUILD_SHARED_LIBS)
     target_compile_definitions(${TARGET} PUBLIC QT_PROTOBUF_STATIC QT_STATICPLUGIN QT_PROTOBUF_QUICK_PLUGIN_NAME="QtProtobufQuickPlugin")
 endif()
 
-target_link_libraries(${TARGET} PRIVATE Qt5::Core Qt5::Qml ${QT_PROTOBUF_NAMESPACE}::Protobuf)
+target_link_libraries(${TARGET} PRIVATE Qt6::Core Qt6::Qml ${QT_PROTOBUF_NAMESPACE}::Protobuf)
 set_target_properties(${TARGET} PROPERTIES
     LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/QtProtobuf"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/QtProtobuf"
@@ -39,18 +39,18 @@ set_target_properties(${TARGET} PROPERTIES
 target_compile_definitions(${TARGET} PRIVATE QT_PROTOBUF_QUICK_LIB)
 
 #Check for QML private headers
-if(NOT DEFINED Qt5Qml_PRIVATE_INCLUDE_DIRS OR Qt5Qml_PRIVATE_INCLUDE_DIRS STREQUAL "")
+if(NOT DEFINED Qt6Qml_PRIVATE_INCLUDE_DIRS OR Qt6Qml_PRIVATE_INCLUDE_DIRS STREQUAL "")
     message(FATAL_ERROR "Qt protobuf project requires Qml private headers defined in system")
 endif()
 
-foreach(QML_PRIVATE_HEADER IN LISTS Qt5Qml_PRIVATE_INCLUDE_DIRS)
+foreach(QML_PRIVATE_HEADER IN LISTS Qt6Qml_PRIVATE_INCLUDE_DIRS)
     message(STATUS "Check for QtQml private headers dir: ${QML_PRIVATE_HEADER}")
     if(NOT IS_DIRECTORY ${QML_PRIVATE_HEADER})
         message(FATAL_ERROR "Qt protobuf project requires Qml private headers defined in system ${QML_PRIVATE_HEADER}")
     endif()
 endforeach()
 
-target_include_directories(${TARGET} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../ ${Qt5Qml_PRIVATE_INCLUDE_DIRS})
+target_include_directories(${TARGET} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../ ${Qt6Qml_PRIVATE_INCLUDE_DIRS})
 
 add_library(${QT_PROTOBUF_NAMESPACE}::${TARGET} ALIAS ${TARGET})
 if(NOT BUILD_SHARED_LIBS)

+ 3 - 3
src/protobuf/quick/qtprotobufquickplugin.cpp

@@ -40,7 +40,7 @@ void QtProtobufQuickPlugin::registerTypes(const char *uri)
     // @uri QtProtobuf
     Q_ASSERT(uri == QLatin1String("QtProtobuf"));
     qmlRegisterModule(uri, QT_PROTOBUF_VERSION_MAJOR, QT_PROTOBUF_VERSION_MINOR);
-    QQmlMetaType::registerCustomStringConverter(qMetaTypeId<QtProtobuf::int32>(), coverter<QtProtobuf::int32>);
-    QQmlMetaType::registerCustomStringConverter(qMetaTypeId<QtProtobuf::fixed32>(), coverter<QtProtobuf::fixed32>);
-    QQmlMetaType::registerCustomStringConverter(qMetaTypeId<QtProtobuf::sfixed32>(), coverter<QtProtobuf::sfixed32>);
+    // QQmlMetaType::registerCustomStringConverter(qMetaTypeId<QtProtobuf::int32>(), coverter<QtProtobuf::int32>);
+    // QQmlMetaType::registerCustomStringConverter(qMetaTypeId<QtProtobuf::fixed32>(), coverter<QtProtobuf::fixed32>);
+    // QQmlMetaType::registerCustomStringConverter(qMetaTypeId<QtProtobuf::sfixed32>(), coverter<QtProtobuf::sfixed32>);
 }

+ 4 - 4
src/qttypes/CMakeLists.txt

@@ -11,9 +11,9 @@ qt_protobuf_internal_add_library(ProtobufQtTypes
     PUBLIC_INCLUDE_DIRECTORIES
         "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/generated>"
     PUBLIC_LIBRARIES
-        Qt5::Core
-        Qt5::Gui
-        Qt5::Qml
+        Qt6::Core
+        Qt6::Gui
+        Qt6::Qml
         ${QT_PROTOBUF_NAMESPACE}::Protobuf
 )
 
@@ -21,7 +21,7 @@ qt_protobuf_internal_add_library(ProtobufQtTypes
 file(GLOB PROTO_FILE ${CMAKE_CURRENT_SOURCE_DIR}/QtProtobuf/Qt*.proto)
 
 set(qml_enabled "")
-if(TARGET Qt5::Qml)
+if(TARGET Qt6::Qml)
     set(qml_enabled QML)
 endif()
 

+ 3 - 3
src/wellknowntypes/CMakeLists.txt

@@ -6,8 +6,8 @@ qt_protobuf_internal_add_library(ProtobufWellKnownTypes
     PUBLIC_INCLUDE_DIRECTORIES
         "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/generated>"
     PUBLIC_LIBRARIES
-        Qt5::Core
-        Qt5::Qml
+        Qt6::Core
+        Qt6::Qml
         ${QT_PROTOBUF_NAMESPACE}::Protobuf
 )
 
@@ -17,7 +17,7 @@ function(add_wellknowntype type_name)
     )
 
     set(qml_enabled "")
-    if(TARGET Qt5::Qml)
+    if(TARGET Qt6::Qml)
         set(qml_enabled QML)
     endif()
     foreach(dir ${lookup_dirs})

+ 2 - 2
tests/test_extra_namespace_qml/CMakeLists.txt

@@ -7,10 +7,10 @@ set(CMAKE_AUTOMOC OFF)
 file(GLOB SOURCES main.cpp)
 file(GLOB QML_FILES qml/tst_extra_namespace.qml)
 
-qt5_wrap_cpp(MOC_SOURCES test.h)
+qt6_wrap_cpp(MOC_SOURCES test.h)
 
 add_executable(${TARGET} ${MOC_SOURCES} ${SOURCES} ${QML_FILES})
-target_link_libraries(${TARGET} PRIVATE Qt5::Core Qt5::Qml Qt5::Network Qt5::Quick Qt5::Test Qt5::QuickTest ${QT_PROTOBUF_NAMESPACE}::Protobuf)
+target_link_libraries(${TARGET} PRIVATE Qt6::Core Qt6::Qml Qt6::Network Qt6::Quick Qt6::Test Qt6::QuickTest ${QT_PROTOBUF_NAMESPACE}::Protobuf)
 
 if(QT_PROTOBUF_STATIC)
     target_link_libraries(${TARGET} PRIVATE ${PROTOBUF_QUICK_PLUGIN_NAME})

+ 1 - 1
tests/test_grpc_qml/CMakeLists.txt

@@ -4,7 +4,7 @@ set(CMAKE_AUTOMOC OFF)
 
 file(GLOB QML_FILES qml/tst_grpc.qml)
 
-qt5_wrap_cpp(MOC_SOURCES test.h)
+qt6_wrap_cpp(MOC_SOURCES test.h)
 
 add_executable(qtgrpc_qml_test_http2 ${MOC_SOURCES} http2.cpp ${QML_FILES})
 target_link_libraries(qtgrpc_qml_test_http2

+ 2 - 2
tests/test_qml/CMakeLists.txt

@@ -7,10 +7,10 @@ set(CMAKE_AUTOMOC OFF)
 file(GLOB SOURCES main.cpp)
 file(GLOB QML_FILES qml/tst_simple.qml)
 
-qt5_wrap_cpp(MOC_SOURCES test.h)
+qt6_wrap_cpp(MOC_SOURCES test.h)
 
 add_executable(${TARGET} ${MOC_SOURCES} ${SOURCES} ${QML_FILES})
-target_link_libraries(${TARGET} PRIVATE Qt5::Core Qt5::Qml Qt5::Network Qt5::Quick Qt5::Test Qt5::QuickTest ${QT_PROTOBUF_NAMESPACE}::Protobuf)
+target_link_libraries(${TARGET} PRIVATE Qt6::Core Qt6::Qml Qt6::Network Qt6::Quick Qt6::Test Qt6::QuickTest ${QT_PROTOBUF_NAMESPACE}::Protobuf)
 
 if(TARGET ${QT_PROTOBUF_NAMESPACE}::ProtobufWellKnownTypes)
     target_link_libraries(${TARGET} PRIVATE ${QT_PROTOBUF_NAMESPACE}::ProtobufWellKnownTypes)

+ 4 - 4
tests/test_qprotobuf_serializer_plugin/CMakeLists.txt

@@ -1,7 +1,7 @@
 set(TARGET qtprotobuf_plugin_test)
 
 qt_protobuf_internal_find_dependencies()
-find_package(Qt5 CONFIG COMPONENTS Test REQUIRED)
+find_package(Qt6 CONFIG COMPONENTS Test REQUIRED)
 
 find_package(Threads REQUIRED)
 
@@ -13,9 +13,9 @@ target_link_libraries(${TARGET} PRIVATE gtest_main
                                         gtest
                                         ${QT_PROTOBUF_NAMESPACE}::Protobuf
                                         ${QT_PROTOBUF_NAMESPACE}::Grpc
-                                        Qt5::Core
-                                        Qt5::Test
-                                        Qt5::Network
+                                        Qt6::Core
+                                        Qt6::Test
+                                        Qt6::Network
                                         ${CMAKE_THREAD_LIBS_INIT})
 qt_protobuf_internal_add_target_windeployqt(TARGET ${TARGET}
     QML_DIR ${CMAKE_CURRENT_SOURCE_DIR})

+ 2 - 2
tests/test_qprotobuf_serializer_plugin/serialization/CMakeLists.txt

@@ -8,7 +8,7 @@ set(TARGET_BINDIR ${CMAKE_INSTALL_BINDIR})
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTORCC ON)
 
-find_package(Qt5 COMPONENTS Core REQUIRED)
+find_package(Qt6 COMPONENTS Core REQUIRED)
 
 file(GLOB SOURCES
     qtserializationplugin.cpp
@@ -20,7 +20,7 @@ file(GLOB HEADERS
     qtserialization_global.h)
 
 add_library(${TARGET} SHARED ${SOURCES})
-target_link_libraries(${TARGET} PRIVATE Qt5::Core Qt5::Qml ${QT_PROTOBUF_NAMESPACE}::Protobuf)
+target_link_libraries(${TARGET} PRIVATE Qt6::Core Qt6::Qml ${QT_PROTOBUF_NAMESPACE}::Protobuf)
 target_compile_definitions(${TARGET} PRIVATE SERIALIZATION_LIB)
 
 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/serializeinfo.json" "${CMAKE_CURRENT_BINARY_DIR}/serializeinfo.json" COPYONLY)