CMakeLists.txt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. set(Protobuf_PROTOC_EXECUTABLE ${PROTOBUF_INSTALATION_PATH}/bin/protoc.exe)
  8. endif()
  9. add_custom_target(${testgeneration})
  10. add_custom_command(TARGET ${testgeneration}
  11. COMMAND ${Protobuf_PROTOC_EXECUTABLE} --plugin=protoc-gen-${PROJECT_NAME}=$<TARGET_FILE:${PROJECT_NAME}> --qtprotobuf_out=${TESTS_OUT_DIR} -I=${CMAKE_CURRENT_SOURCE_DIR}/proto/ ${PROTO_FILES}
  12. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/proto/
  13. DEPENDS ${PROJECT_NAME} ${PROTO_FILES}
  14. COMMENT "Generating test headers"
  15. )
  16. add_dependencies(${testgeneration} ${PROJECT_NAME})
  17. ## test sources build
  18. # policy enables automoc for generated files
  19. cmake_policy(SET CMP0071 NEW)
  20. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  21. set(CMAKE_AUTOMOC ON)
  22. set(CMAKE_AUTORCC ON)
  23. if(Qt5_POSITION_INDEPENDENT_CODE)
  24. set(CMAKE_POSITION_INDEPENDENT_CODE ON)
  25. endif()
  26. set(EXPECTED_GENERATED_HEADERS
  27. complexmessage.h
  28. externalcomplexmessage.h
  29. globalenums.h
  30. repeatedbytesmessage.h
  31. repeatedcomplexmessage.h
  32. repeateddoublemessage.h
  33. repeatedexternalcomplexmessage.h
  34. repeatedfixedint64message.h
  35. repeatedfixedintmessage.h
  36. repeatedfloatmessage.h
  37. repeatedint64message.h
  38. repeatedintmessage.h
  39. repeatedsfixedint64message.h
  40. repeatedsfixedintmessage.h
  41. repeatedsint64message.h
  42. repeatedsintmessage.h
  43. repeatedstringmessage.h
  44. repeateduint64message.h
  45. repeateduintmessage.h
  46. simpleboolmessage.h
  47. simplebytesmessage.h
  48. simpledoublemessage.h
  49. simpleenummessage.h
  50. simpleexternalenummessage.h
  51. simpleexternalmessage.h
  52. simplefileenummessage.h
  53. simplefixedint32message.h
  54. simplefixedint64message.h
  55. simplefloatmessage.h
  56. simpleint64message.h
  57. simpleintmessage.h
  58. simplesfixedint32message.h
  59. simplesfixedint64message.h
  60. simplesint64message.h
  61. simplesintmessage.h
  62. simplestringmessage.h
  63. simpleuint64message.h
  64. simpleuintmessage.h
  65. stepchildenummessage.h
  66. testserviceclient.h
  67. testserviceserver.h
  68. )
  69. foreach(EXPECTED_GENERATED_HEADER ${EXPECTED_GENERATED_HEADERS})
  70. get_filename_component(GENERATED_HEADER_BASENAME ${EXPECTED_GENERATED_HEADER} NAME_WE)
  71. list(APPEND GENERATED_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${GENERATED_HEADER_BASENAME}.cpp)
  72. list(APPEND GENERATED_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/${GENERATED_HEADER_BASENAME}.h)
  73. endforeach(EXPECTED_GENERATED_HEADER)
  74. # TODO: so far the following cpp files are not generated
  75. list(REMOVE_ITEM GENERATED_SOURCES
  76. ${CMAKE_CURRENT_BINARY_DIR}/testserviceserver.cpp
  77. ${CMAKE_CURRENT_BINARY_DIR}/globalenums.cpp
  78. )
  79. set_source_files_properties(${GENERATED_SOURCES} PROPERTIES GENERATED TRUE)
  80. # TODO: but their headers should be included in sources for executable to be processed by moc
  81. list(APPEND GENERATED_SOURCES
  82. ${CMAKE_CURRENT_BINARY_DIR}/testserviceserver.h
  83. ${CMAKE_CURRENT_BINARY_DIR}/globalenums.h
  84. )
  85. set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/globalenums.h PROPERTIES GENERATED TRUE)
  86. set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/testserviceserver.h PROPERTIES GENERATED TRUE)
  87. include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src/protobuf ${CMAKE_SOURCE_DIR}/src/grpc)
  88. if(WIN32)
  89. #Set path to GTest build libraries
  90. set(GTEST_BOTH_LIBRARIES "")
  91. #Set path to GTest include directory
  92. include_directories(${GTEST_INCLUDE_PATHS} "/")
  93. endif()
  94. file(GLOB SOURCES main.cpp
  95. simpletest.cpp
  96. serializationtest.cpp
  97. deserializationtest.cpp
  98. servertest.cpp
  99. clienttest.cpp)
  100. set(testtarget "qtprotobuf_test")
  101. add_executable(${testtarget} ${SOURCES} ${GENERATED_SOURCES})
  102. if(WIN32)
  103. target_link_libraries(${testtarget} "${GTEST_BOTH_LIBRARIES}/gmock_main.lib" "${GTEST_BOTH_LIBRARIES}/gmock.lib" qtprotobufsupport qtgrpc Qt5::Core)
  104. elseif(UNIX)
  105. target_link_libraries(${testtarget} gtest qtgrpc)
  106. endif()
  107. add_dependencies(${testtarget} ${testgeneration})