CMakeLists.txt 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. set(testgeneration "test_generation")
  2. set(TESTS_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
  3. file(MAKE_DIRECTORY ${TESTS_OUT_DIR})
  4. file(GLOB PROTO_FILES ABSOLUTE ${CMAKE_CURRENT_SOURCE_DIR}/proto/*.proto)
  5. ## test sources generation
  6. if(WIN32)
  7. #Needs to set path to protobuf libraries
  8. set(PROTOBUF_INSTALATION_PATH "")
  9. set(Protobuf_PROTOC_EXECUTABLE ${PROTOBUF_INSTALATION_PATH}/bin/protoc.exe)
  10. endif()
  11. add_custom_target(${testgeneration})
  12. add_custom_command(TARGET ${testgeneration}
  13. COMMAND ${Protobuf_PROTOC_EXECUTABLE} --${PROJECT_NAME}_opt=out=${TESTS_OUT_DIR} --plugin=protoc-gen-${PROJECT_NAME}=$<TARGET_FILE:${PROJECT_NAME}> --qtprotobuf_out=${TESTS_OUT_DIR} -I=${CMAKE_CURRENT_SOURCE_DIR}/proto/ ${PROTO_FILES}
  14. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/proto/
  15. DEPENDS ${PROTO_FILES}
  16. COMMENT "Generating test headers"
  17. )
  18. add_dependencies(${testgeneration} ${PROJECT_NAME})
  19. find_package(Qt5 COMPONENTS Core Network Qml REQUIRED)
  20. ## test sources build
  21. # policy enables automoc for generated files
  22. if(${CMAKE_VERSION} VERSION_GREATER "3.10.0")
  23. cmake_policy(SET CMP0071 NEW)
  24. endif()
  25. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  26. set(CMAKE_AUTOMOC ON)
  27. set(CMAKE_AUTORCC ON)
  28. if(Qt5_POSITION_INDEPENDENT_CODE)
  29. set(CMAKE_POSITION_INDEPENDENT_CODE ON)
  30. endif()
  31. set(EXPECTED_GENERATED_HEADERS
  32. complexmessage.h
  33. externalcomplexmessage.h
  34. globalenums.h
  35. repeatedbytesmessage.h
  36. repeatedcomplexmessage.h
  37. repeateddoublemessage.h
  38. repeatedexternalcomplexmessage.h
  39. repeatedfixedint64message.h
  40. repeatedfixedintmessage.h
  41. repeatedfloatmessage.h
  42. repeatedint64message.h
  43. repeatedintmessage.h
  44. repeatedsfixedint64message.h
  45. repeatedsfixedintmessage.h
  46. repeatedsint64message.h
  47. repeatedsintmessage.h
  48. repeatedstringmessage.h
  49. repeateduint64message.h
  50. repeateduintmessage.h
  51. simpleboolmessage.h
  52. simplebytesmessage.h
  53. simpledoublemessage.h
  54. simpleenumlistmessage.h
  55. simpleenummessage.h
  56. simpleexternalenummessage.h
  57. simpleexternalmessage.h
  58. simplefileenummessage.h
  59. simplefixed32complexmessagemapmessage.h
  60. simplefixed32int32mapmessage.h
  61. simplefixed32int64mapmessage.h
  62. simplefixed32sint32mapmessage.h
  63. simplefixed32sint64mapmessage.h
  64. simplefixed32stringmapmessage.h
  65. simplefixed32uint32mapmessage.h
  66. simplefixed32uint64mapmessage.h
  67. simplefixed64complexmessagemapmessage.h
  68. simplefixed64int32mapmessage.h
  69. simplefixed64int64mapmessage.h
  70. simplefixed64sint32mapmessage.h
  71. simplefixed64sint64mapmessage.h
  72. simplefixed64stringmapmessage.h
  73. simplefixed64uint32mapmessage.h
  74. simplefixed64uint64mapmessage.h
  75. simplefixedint32message.h
  76. simplefixedint64message.h
  77. simplefloatmessage.h
  78. simpleint32complexmessagemapmessage.h
  79. simpleint32int32mapmessage.h
  80. simpleint32int64mapmessage.h
  81. simpleint32sint32mapmessage.h
  82. simpleint32sint64mapmessage.h
  83. simpleint32stringmapmessage.h
  84. simpleint32uint32mapmessage.h
  85. simpleint32uint64mapmessage.h
  86. simpleint64complexmessagemapmessage.h
  87. simpleint64int32mapmessage.h
  88. simpleint64int64mapmessage.h
  89. simpleint64message.h
  90. simpleint64sint32mapmessage.h
  91. simpleint64sint64mapmessage.h
  92. simpleint64stringmapmessage.h
  93. simpleint64uint32mapmessage.h
  94. simpleint64uint64mapmessage.h
  95. simpleintmessage.h
  96. simplesfixed32complexmessagemapmessage.h
  97. simplesfixed32int32mapmessage.h
  98. simplesfixed32int64mapmessage.h
  99. simplesfixed32sint32mapmessage.h
  100. simplesfixed32sint64mapmessage.h
  101. simplesfixed32stringmapmessage.h
  102. simplesfixed32uint32mapmessage.h
  103. simplesfixed32uint64mapmessage.h
  104. simplesfixed64complexmessagemapmessage.h
  105. simplesfixed64int32mapmessage.h
  106. simplesfixed64int64mapmessage.h
  107. simplesfixed64sint32mapmessage.h
  108. simplesfixed64sint64mapmessage.h
  109. simplesfixed64stringmapmessage.h
  110. simplesfixed64uint32mapmessage.h
  111. simplesfixed64uint64mapmessage.h
  112. simplesfixedint32message.h
  113. simplesfixedint64message.h
  114. simplesint32complexmessagemapmessage.h
  115. simplesint32int32mapmessage.h
  116. simplesint32int64mapmessage.h
  117. simplesint32sint32mapmessage.h
  118. simplesint32sint64mapmessage.h
  119. simplesint32stringmapmessage.h
  120. simplesint32uint32mapmessage.h
  121. simplesint32uint64mapmessage.h
  122. simplesint64complexmessagemapmessage.h
  123. simplesint64int32mapmessage.h
  124. simplesint64int64mapmessage.h
  125. simplesint64message.h
  126. simplesint64sint32mapmessage.h
  127. simplesint64sint64mapmessage.h
  128. simplesint64stringmapmessage.h
  129. simplesint64uint32mapmessage.h
  130. simplesint64uint64mapmessage.h
  131. simplesintmessage.h
  132. simplestringcomplexmessagemapmessage.h
  133. simplestringint32mapmessage.h
  134. simplestringint64mapmessage.h
  135. simplestringmessage.h
  136. simplestringsint32mapmessage.h
  137. simplestringsint64mapmessage.h
  138. simplestringstringmapmessage.h
  139. simplestringuint32mapmessage.h
  140. simplestringuint64mapmessage.h
  141. simpleuint32complexmessagemapmessage.h
  142. simpleuint32int32mapmessage.h
  143. simpleuint32int64mapmessage.h
  144. simpleuint32sint32mapmessage.h
  145. simpleuint32sint64mapmessage.h
  146. simpleuint32stringmapmessage.h
  147. simpleuint32uint32mapmessage.h
  148. simpleuint32uint64mapmessage.h
  149. simpleuint64complexmessagemapmessage.h
  150. simpleuint64int32mapmessage.h
  151. simpleuint64int64mapmessage.h
  152. simpleuint64message.h
  153. simpleuint64sint32mapmessage.h
  154. simpleuint64sint64mapmessage.h
  155. simpleuint64stringmapmessage.h
  156. simpleuint64uint32mapmessage.h
  157. simpleuint64uint64mapmessage.h
  158. simpleuintmessage.h
  159. stepchildenummessage.h
  160. testserviceclient.h
  161. testserviceserver.h
  162. )
  163. foreach(EXPECTED_GENERATED_HEADER ${EXPECTED_GENERATED_HEADERS})
  164. get_filename_component(GENERATED_HEADER_BASENAME ${EXPECTED_GENERATED_HEADER} NAME_WE)
  165. list(APPEND GENERATED_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${GENERATED_HEADER_BASENAME}.cpp)
  166. list(APPEND GENERATED_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/${GENERATED_HEADER_BASENAME}.h)
  167. set_property(SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${GENERATED_HEADER_BASENAME}.cpp PROPERTY SKIP_AUTOMOC ON)
  168. endforeach(EXPECTED_GENERATED_HEADER)
  169. qt5_wrap_cpp(MOC_SOURCES ${GENERATED_HEADERS})
  170. list(APPEND GENERATED_SOURCES ${MOC_SOURCES})
  171. # TODO: so far the following cpp files are not generated
  172. list(REMOVE_ITEM GENERATED_SOURCES
  173. ${CMAKE_CURRENT_BINARY_DIR}/testserviceserver.cpp
  174. ${CMAKE_CURRENT_BINARY_DIR}/globalenums.cpp
  175. )
  176. set_source_files_properties(${GENERATED_SOURCES} PROPERTIES GENERATED TRUE)
  177. # TODO: but their headers should be included in sources for executable to be processed by moc
  178. list(APPEND GENERATED_SOURCES
  179. ${CMAKE_CURRENT_BINARY_DIR}/testserviceserver.h
  180. ${CMAKE_CURRENT_BINARY_DIR}/globalenums.h
  181. )
  182. set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/globalenums.h PROPERTIES GENERATED TRUE)
  183. set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/testserviceserver.h PROPERTIES GENERATED TRUE)
  184. include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src/protobuf ${CMAKE_SOURCE_DIR}/src/grpc)
  185. if(WIN32)
  186. #Set path to GTest build libraries
  187. set(GTEST_BOTH_LIBRARIES "")
  188. #Set path to GTest include directory
  189. include_directories(${GTEST_INCLUDE_PATHS} "/")
  190. endif()
  191. file(GLOB SOURCES main.cpp
  192. simpletest.cpp
  193. serializationtest.cpp
  194. deserializationtest.cpp
  195. servertest.cpp
  196. clienttest.cpp
  197. serializationcomplexmessagemap.cpp)
  198. set(testtarget "qtprotobuf_test")
  199. add_executable(${testtarget} ${SOURCES} ${GENERATED_SOURCES})
  200. if(WIN32)
  201. target_link_libraries(${testtarget} qtgrpc qtprotobufsupport "${GTEST_BOTH_LIBRARIES}/gmock_main.lib" "${GTEST_BOTH_LIBRARIES}/gmock.lib" Qt5::Core Qt5::Qml Qt5::Network)
  202. elseif(UNIX)
  203. target_link_libraries(${testtarget} gtest qtgrpc qtprotobufsupport)
  204. endif()
  205. add_dependencies(${testtarget} ${testgeneration})