CMakeLists.txt 8.1 KB

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