ctkMacroBuildQtDesignerPlugin.cmake 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #
  2. # Depends on:
  3. # CTK/CMake/ctkMacroParseArguments.cmake
  4. #
  5. MACRO(ctkMacroBuildQtDesignerPlugin)
  6. CtkMacroParseArguments(MY
  7. "NAME;EXPORT_DIRECTIVE;SRCS;MOC_SRCS;UI_FORMS;INCLUDE_DIRECTORIES;TARGET_LIBRARIES;RESOURCES;LIBRARY_TYPE"
  8. ""
  9. ${ARGN}
  10. )
  11. # Sanity checks
  12. IF(NOT DEFINED MY_NAME)
  13. MESSAGE(SEND_ERROR "NAME is mandatory")
  14. ENDIF()
  15. IF(NOT DEFINED MY_EXPORT_DIRECTIVE)
  16. MESSAGE(SEND_ERROR "EXPORT_DIRECTIVE is mandatory")
  17. ENDIF()
  18. IF(NOT DEFINED MY_LIBRARY_TYPE)
  19. SET(MY_LIBRARY_TYPE "SHARED")
  20. ENDIF()
  21. # Define library name
  22. SET(lib_name ${MY_NAME})
  23. # --------------------------------------------------------------------------
  24. # Include dirs
  25. SET(my_includes
  26. ${CTK_BASE_INCLUDE_DIRS}
  27. ${QT_QTDESIGNER_INCLUDE_DIR}
  28. ${CMAKE_CURRENT_SOURCE_DIR}
  29. ${CMAKE_CURRENT_BINARY_DIR}
  30. ${MY_INCLUDE_DIRECTORIES}
  31. )
  32. INCLUDE_DIRECTORIES(
  33. ${my_includes}
  34. )
  35. SET(MY_LIBRARY_EXPORT_DIRECTIVE ${MY_EXPORT_DIRECTIVE})
  36. SET(MY_EXPORT_HEADER_PREFIX ${MY_NAME})
  37. SET(MY_LIBNAME ${lib_name})
  38. CONFIGURE_FILE(
  39. ${CTK_SOURCE_DIR}/Libs/CTKExport.h.in
  40. ${CMAKE_CURRENT_BINARY_DIR}/${MY_EXPORT_HEADER_PREFIX}Export.h
  41. )
  42. SET(dynamicHeaders
  43. "${dynamicHeaders};${CMAKE_CURRENT_BINARY_DIR}/${MY_EXPORT_HEADER_PREFIX}Export.h")
  44. # Make sure variable are cleared
  45. SET(MY_SRCS)
  46. SET(MY_UI_CXX)
  47. SET(MY_QRC_SRCS)
  48. # Wrap
  49. QT4_WRAP_CPP(MY_SRCS ${MY_MOC_SRCS})
  50. QT4_WRAP_UI(MY_UI_CXX ${MY_UI_FORMS})
  51. SET(MY_QRC_SRCS "")
  52. IF(DEFINED MY_RESOURCES)
  53. QT4_ADD_RESOURCES(MY_QRC_SRCS ${MY_RESOURCES})
  54. ENDIF()
  55. SOURCE_GROUP("Resources" FILES
  56. ${MY_RESOURCES}
  57. ${MY_UI_FORMS}
  58. )
  59. SOURCE_GROUP("Generated" FILES
  60. ${MY_MOC_SRCS}
  61. ${MY_QRC_SRCS}
  62. ${MY_UI_CXX}
  63. )
  64. ADD_LIBRARY(${lib_name} ${MY_LIBRARY_TYPE}
  65. ${MY_SRCS}
  66. ${MY_UI_CXX}
  67. ${MY_QRC_SRCS}
  68. )
  69. # Apply properties to the library target.
  70. SET_TARGET_PROPERTIES(${lib_name} PROPERTIES
  71. COMPILE_FLAGS "-DQT_PLUGIN"
  72. LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/designer"
  73. )
  74. SET(my_libs
  75. ${MY_TARGET_LIBRARIES}
  76. ${QT_QTDESIGNER_LIBRARY}
  77. )
  78. TARGET_LINK_LIBRARIES(${lib_name} ${my_libs})
  79. # Install the library
  80. INSTALL(TARGETS ${lib_name}
  81. RUNTIME DESTINATION ${CTK_INSTALL_BIN_DIR}/designer COMPONENT Runtime
  82. LIBRARY DESTINATION ${CTK_INSTALL_LIB_DIR}/designer COMPONENT Runtime
  83. ARCHIVE DESTINATION ${CTK_INSTALL_LIB_DIR}/designer COMPONENT Development)
  84. # Install headers - Are headers required ?
  85. #FILE(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
  86. #INSTALL(FILES
  87. # ${headers}
  88. # DESTINATION ${CTK_INSTALL_INCLUDE_DIR} COMPONENT Development
  89. # )
  90. # Since QtDesigner expects plugin to be directly located under the
  91. # directory 'designer', let's copy them.
  92. IF(NOT CMAKE_CFG_INTDIR STREQUAL ".")
  93. GET_TARGET_PROPERTY(FILE_PATH ${lib_name} LOCATION)
  94. GET_TARGET_PROPERTY(DIR_PATH ${lib_name} LIBRARY_OUTPUT_DIRECTORY)
  95. ADD_CUSTOM_COMMAND(
  96. TARGET ${lib_name}
  97. POST_BUILD
  98. COMMAND ${CMAKE_COMMAND} -E copy ${FILE_PATH} ${DIR_PATH}/../designer/${CMAKE_SHARED_LIBRARY_PREFIX}${lib_name}${CMAKE_BUILD_TYPE}${CMAKE_SHARED_LIBRARY_SUFFIX}
  99. )
  100. ENDIF()
  101. ENDMACRO()