|
@@ -0,0 +1,109 @@
|
|
|
|
+include(${QT_PROTOBUF_CMAKE_DIR}/QtProtobufCommon.cmake)
|
|
|
|
+
|
|
|
|
+macro(qt_protobuf_internal_find_dependencies)
|
|
|
|
+ find_package(Qt5 COMPONENTS Core Qml Network REQUIRED)
|
|
|
|
+ find_package(Threads REQUIRED)
|
|
|
|
+ if(NOT TARGET ${QT_PROTOBUF_PROJECT}::QtProtobuf)
|
|
|
|
+ find_package(${QT_PROTOBUF_PROJECT} COMPONENTS QtProtobuf REQUIRED)
|
|
|
|
+ endif()
|
|
|
|
+ if(NOT TARGET ${QT_PROTOBUF_PROJECT}::QtGrpc)
|
|
|
|
+ find_package(${QT_PROTOBUF_PROJECT} COMPONENTS QtGrpc REQUIRED)
|
|
|
|
+ endif()
|
|
|
|
+ if(QT_PROTOBUF_STATIC)
|
|
|
|
+ add_definitions(-DQT_PROTOBUF_STATIC)# add_definitions is used because old cmake versions
|
|
|
|
+ # compatibility
|
|
|
|
+ endif()
|
|
|
|
+
|
|
|
|
+ set(CMAKE_POSITION_INDEPENDENT_CODE ${Qt5_POSITION_INDEPENDENT_CODE})
|
|
|
|
+ set(CMAKE_AUTOMOC ON)
|
|
|
|
+ set(CMAKE_AUTORCC ON)
|
|
|
|
+endmacro()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function(qt_protobuf_internal_add_test_target)
|
|
|
|
+ set(options MULTI QML FIELDENUM)
|
|
|
|
+ set(oneValueArgs QML_DIR TARGET)
|
|
|
|
+ set(multiValueArgs SOURCES GENERATED_HEADERS EXCLUDE_HEADERS PROTO_FILES PROTO_INCLUDES)
|
|
|
|
+ cmake_parse_arguments(add_test_target "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
|
|
|
+
|
|
|
|
+ find_package(Qt5 COMPONENTS Test REQUIRED)
|
|
|
|
+
|
|
|
|
+ ## test sources build
|
|
|
|
+ # policy enables automoc for generated files
|
|
|
|
+ if(${CMAKE_VERSION} VERSION_GREATER "3.10.0")
|
|
|
|
+ cmake_policy(SET CMP0071 NEW)
|
|
|
|
+ endif()
|
|
|
|
+
|
|
|
|
+ set(CMAKE_POSITION_INDEPENDENT_CODE ${Qt5_POSITION_INDEPENDENT_CODE})
|
|
|
|
+
|
|
|
|
+ set(GENERATED_SOURCES_DIR ${CMAKE_CURRENT_BINARY_DIR}/${add_test_target_TARGET}_generated)
|
|
|
|
+
|
|
|
|
+ if(DEFINED add_test_target_PROTO_FILES)
|
|
|
|
+ file(GLOB PROTO_FILES ABSOLUTE ${add_test_target_PROTO_FILES})
|
|
|
|
+ else()
|
|
|
|
+ file(GLOB PROTO_FILES ABSOLUTE ${CMAKE_CURRENT_SOURCE_DIR}/proto/*.proto)
|
|
|
|
+ endif()
|
|
|
|
+
|
|
|
|
+ add_executable(${add_test_target_TARGET} ${add_test_target_SOURCES})
|
|
|
|
+
|
|
|
|
+ set(EXTRA_OPTIONS COMMENTS)
|
|
|
|
+ if(add_test_target_MULTI)
|
|
|
|
+ set(EXTRA_OPTIONS ${EXTRA_OPTIONS} MULTI)
|
|
|
|
+ endif()
|
|
|
|
+ if(add_test_target_QML)
|
|
|
|
+ set(EXTRA_OPTIONS ${EXTRA_OPTIONS} QML)
|
|
|
|
+ endif()
|
|
|
|
+ if(add_test_target_FIELDENUM)
|
|
|
|
+ set(EXTRA_OPTIONS ${EXTRA_OPTIONS} FIELDENUM)
|
|
|
|
+ endif()
|
|
|
|
+
|
|
|
|
+ qtprotobuf_generate(TARGET ${add_test_target_TARGET}
|
|
|
|
+ OUT_DIR ${GENERATED_SOURCES_DIR}
|
|
|
|
+ PROTO_FILES ${PROTO_FILES}
|
|
|
|
+ GENERATED_HEADERS ${add_test_target_GENERATED_HEADERS}
|
|
|
|
+ EXCLUDE_HEADERS ${add_test_target_EXCLUDE_HEADERS}
|
|
|
|
+ ${EXTRA_OPTIONS}
|
|
|
|
+ PROTO_INCLUDES ${add_test_target_PROTO_INCLUDES})
|
|
|
|
+
|
|
|
|
+ target_link_libraries(${add_test_target_TARGET} PUBLIC gtest_main
|
|
|
|
+ gtest
|
|
|
|
+ ${QT_PROTOBUF_PROJECT}::QtProtobuf
|
|
|
|
+ ${QT_PROTOBUF_PROJECT}::QtGrpc
|
|
|
|
+ Qt5::Core
|
|
|
|
+ Qt5::Test
|
|
|
|
+ Qt5::Network
|
|
|
|
+ ${CMAKE_THREAD_LIBS_INIT})
|
|
|
|
+ if (${add_test_target_QML})
|
|
|
|
+ target_link_libraries(${add_test_target_TARGET} PUBLIC Qt5::Qml)
|
|
|
|
+ endif()
|
|
|
|
+endfunction()
|
|
|
|
+
|
|
|
|
+function(qt_protobuf_internal_add_example_target)
|
|
|
|
+ set(options)
|
|
|
|
+ set(oneValueArgs TARGET QML_DIR)
|
|
|
|
+ set(multiValueArgs SOURCES PROTO_FILES RESOURCES)
|
|
|
|
+ cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
|
|
|
+
|
|
|
|
+ find_package(Qt5 COMPONENTS Quick REQUIRED)
|
|
|
|
+
|
|
|
|
+ set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
+ set(CMAKE_AUTOMOC ON)
|
|
|
|
+ set(CMAKE_AUTORCC ON)
|
|
|
|
+
|
|
|
|
+ file(GLOB PROTO_FILES ABSOLUTE ${arg_PROTO_FILES})
|
|
|
|
+ file(GLOB SOURCES ${arg_SOURCES})
|
|
|
|
+
|
|
|
|
+ add_executable(${TARGET} ${SOURCES} ${arg_RESOURCES})
|
|
|
|
+ qtprotobuf_generate(TARGET ${TARGET}
|
|
|
|
+ OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated
|
|
|
|
+ PROTO_FILES ${PROTO_FILES}
|
|
|
|
+ QML)
|
|
|
|
+
|
|
|
|
+ add_target_windeployqt(TARGET ${TARGET} QML_DIR ${arg_QML_DIR})
|
|
|
|
+
|
|
|
|
+ target_link_libraries(${TARGET} PRIVATE examples_common
|
|
|
|
+ QtProtobufProject::QtProtobuf
|
|
|
|
+ QtProtobufProject::QtGrpc
|
|
|
|
+ Qt5::Quick
|
|
|
|
+ Qt5::Qml)
|
|
|
|
+endfunction()
|