QtProtobufConfig.cmake.in 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. find_package(Protobuf)
  2. # TODO: replace with target_link_directories once released
  3. link_directories(@TARGET_LIB_DIR@)
  4. set(QtProtobuf_INCLUDE_DIRS @TARGET_INCLUDE_DIR@)
  5. set(QtGrpc_INCLUDE_DIRS @TARGET_INCLUDE_DIR@)
  6. set(QtProtobuf_LIBRARIES @PROTOBUF_LIBRARY_TARGET@)
  7. set(QtGrpc_LIBRARIES @GRPC_LIBRARY_TARGET@)
  8. set(CMAKE_CXX_STANDARD 14)
  9. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  10. function(generate_qtprotobuf)
  11. set(options)
  12. set(oneValueArgs OUT_DIR TARGET)
  13. set(multiValueArgs GENERATED_HEADERS PROTO_FILES)
  14. cmake_parse_arguments(generate_qtprotobuf "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  15. set(QtProtobuf_GENERATED ${generate_qtprotobuf_TARGET}_qtprotobuf_gen PARENT_SCOPE)
  16. set(QtProtobuf_GENERATED ${generate_qtprotobuf_TARGET}_qtprotobuf_gen)
  17. set(GEN_TARGET ${generate_qtprotobuf_TARGET}_qtprotobuf_generate)
  18. add_custom_target(${GEN_TARGET})
  19. if(NOT DEFINED QTPROTOBUF_EXECUTABLE)
  20. set(QTPROTOBUF_EXECUTABLE @TARGET_BIN_DIR@/@GENERATOR_TARGET@)
  21. endif()
  22. foreach(PROTO_FILE IN LISTS generate_qtprotobuf_PROTO_FILES)
  23. get_filename_component(BASE_DIR ${PROTO_FILE} DIRECTORY)
  24. set(PROTO_INCLUDES -I"${BASE_DIR}" ${PROTO_INCUDES})
  25. endforeach()
  26. if(NOT DEFINED generate_qtprotobuf_OUT_DIR)
  27. set(OUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
  28. else()
  29. set(OUT_DIR ${generate_qtprotobuf_OUT_DIR})
  30. endif()
  31. file(MAKE_DIRECTORY ${OUT_DIR})
  32. unset(QTPROTOBUF_GENERATED_SOURCES)
  33. unset(QTPROTOBUF_GENERATED_HEADERS)
  34. foreach(GENERATED_HEADER IN LISTS generate_qtprotobuf_GENERATED_HEADERS)
  35. get_filename_component(GENERATED_BASENAME ${GENERATED_HEADER} NAME_WE)
  36. list(APPEND QTPROTOBUF_GENERATED_SOURCES ${OUT_DIR}/${GENERATED_BASENAME}.cpp)
  37. list(APPEND QTPROTOBUF_GENERATED_HEADERS ${OUT_DIR}/${GENERATED_BASENAME}.h)
  38. set_property(SOURCE ${OUT_DIR}/${GENERATED_BASENAME}.cpp PROPERTY SKIP_AUTOMOC ON)
  39. endforeach()
  40. add_custom_command(TARGET ${GEN_TARGET}
  41. COMMAND ${Protobuf_PROTOC_EXECUTABLE}
  42. --@GENERATOR_TARGET@_opt=out=${OUT_DIR}
  43. --plugin=protoc-gen-@GENERATOR_TARGET@=${QTPROTOBUF_EXECUTABLE}
  44. --@GENERATOR_TARGET@_out=${OUT_DIR}
  45. ${PROTO_INCLUDES}
  46. ${PROTO_FILES}
  47. WORKING_DIRECTORY ${OUT_DIR}
  48. DEPENDS ${PROTO_FILES}
  49. COMMENT "Generating test headers"
  50. )
  51. qt5_wrap_cpp(MOC_SOURCES ${QTPROTOBUF_GENERATED_HEADERS})
  52. list(APPEND GENERATED_SOURCES ${MOC_SOURCES})
  53. set_source_files_properties(${QTPROTOBUF_GENERATED_SOURCES} PROPERTIES GENERATED TRUE)
  54. add_library(${QtProtobuf_GENERATED} ${QTPROTOBUF_GENERATED_SOURCES} ${MOC_SOURCES})
  55. add_dependencies(${QtProtobuf_GENERATED} ${GEN_TARGET})
  56. target_include_directories(${QtProtobuf_GENERATED} PRIVATE ${Qt5Core_INCLUDE_DIRS} ${Qt5Qml_INCLUDE_DIRS} ${QtProtobuf_INCLUDE_DIRS} ${QtGrpc_INCLUDE_DIRS} ${OUT_DIR})
  57. endfunction()