CMakeLists.txt 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. qm_import(Preprocess)
  2. set(QWINDOWKIT_GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/../include)
  3. set(QWINDOWKIT_BUILD_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/../etc/include)
  4. set(QWINDOWKIT_ENABLED_TARGETS)
  5. set(QWINDOWKIT_ENABLED_SUBDIRECTORIES)
  6. # ----------------------------------
  7. # Configurations
  8. # ----------------------------------
  9. set(QMSETUP_DEFINITION_SCOPE DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
  10. set(QMSETUP_DEFINITION_NUMERICAL on)
  11. qm_add_definition(QWINDOWKIT_ENABLE_QT_WINDOW_CONTEXT
  12. CONDITION QWINDOWKIT_ENABLE_QT_WINDOW_CONTEXT
  13. )
  14. qm_add_definition(QWINDOWKIT_ENABLE_STYLE_AGENT
  15. CONDITION QWINDOWKIT_ENABLE_STYLE_AGENT
  16. )
  17. qm_add_definition(QWINDOWKIT_ENABLE_WINDOWS_SYSTEM_BORDERS
  18. CONDITION QWINDOWKIT_ENABLE_WINDOWS_SYSTEM_BORDERS
  19. )
  20. qm_generate_config(${QWINDOWKIT_BUILD_INCLUDE_DIR}/QWKCore/qwkconfig.h)
  21. if(QWINDOWKIT_INSTALL)
  22. install(FILES ${QWINDOWKIT_BUILD_INCLUDE_DIR}/QWKCore/qwkconfig.h
  23. DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${QWINDOWKIT_INSTALL_NAME}/QWKCore
  24. )
  25. endif()
  26. # ----------------------------------
  27. # CMake API
  28. # ----------------------------------
  29. macro(qwk_add_library _target)
  30. set(options AUTOGEN NO_SYNC_INCLUDE NO_WIN_RC)
  31. set(oneValueArgs SYNC_INCLUDE_PREFIX PREFIX)
  32. set(multiValueArgs SYNC_INCLUDE_OPTIONS)
  33. cmake_parse_arguments(FUNC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  34. if(FUNC_AUTOGEN)
  35. set(CMAKE_AUTOMOC ON)
  36. set(CMAKE_AUTOUIC ON)
  37. set(CMAKE_AUTORCC ON)
  38. endif()
  39. if(QWINDOWKIT_BUILD_STATIC)
  40. set(_type STATIC)
  41. else()
  42. set(_type SHARED)
  43. endif()
  44. add_library(${_target} ${_type})
  45. if(WIN32 AND NOT FUNC_NO_WIN_RC AND(${_type} STREQUAL "SHARED"))
  46. qm_add_win_rc(${_target}
  47. NAME ${QWINDOWKIT_INSTALL_NAME}
  48. DESCRIPTION ${QWINDOWKIT_DESCRIPTION}
  49. COPYRIGHT ${QACTIONKIT_COPYRIGHT}
  50. )
  51. endif()
  52. if(FUNC_PREFIX)
  53. set(_prefix_option PREFIX ${FUNC_PREFIX})
  54. else()
  55. set(_prefix_option)
  56. endif()
  57. # Set global definitions
  58. qm_export_defines(${_target} ${_prefix_option})
  59. # Configure target
  60. qm_configure_target(${_target} ${FUNC_UNPARSED_ARGUMENTS})
  61. # Add include directories
  62. target_include_directories(${_target} PRIVATE ${QWINDOWKIT_BUILD_INCLUDE_DIR})
  63. target_include_directories(${_target} PRIVATE .)
  64. # Library name
  65. if(${_target} MATCHES "^QWK(.+)")
  66. set(_name ${CMAKE_MATCH_1})
  67. set_target_properties(${_target} PROPERTIES EXPORT_NAME ${_name})
  68. else()
  69. set(_name ${_target})
  70. endif()
  71. add_library(${QWINDOWKIT_INSTALL_NAME}::${_name} ALIAS ${_target})
  72. if(FUNC_SYNC_INCLUDE_PREFIX)
  73. set(_inc_name ${FUNC_SYNC_INCLUDE_PREFIX})
  74. else()
  75. set(_inc_name ${_target})
  76. endif()
  77. set(_install_options)
  78. if(QWINDOWKIT_INSTALL)
  79. install(TARGETS ${_target}
  80. EXPORT ${QWINDOWKIT_INSTALL_NAME}Targets
  81. RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL
  82. LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" OPTIONAL
  83. ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" OPTIONAL
  84. )
  85. target_include_directories(${_target} PUBLIC
  86. "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${QWINDOWKIT_INSTALL_NAME}>"
  87. )
  88. set(_install_options
  89. INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/${QWINDOWKIT_INSTALL_NAME}/${_inc_name}"
  90. )
  91. endif()
  92. if(NOT FUNC_NO_SYNC_INCLUDE)
  93. # Generate a standard include directory in build directory
  94. qm_sync_include(. "${QWINDOWKIT_GENERATED_INCLUDE_DIR}/${_inc_name}" ${_install_options}
  95. ${FUNC_SYNC_INCLUDE_OPTIONS} FORCE
  96. )
  97. target_include_directories(${_target} PUBLIC
  98. "$<BUILD_INTERFACE:${QWINDOWKIT_GENERATED_INCLUDE_DIR}>"
  99. )
  100. endif()
  101. endmacro()
  102. # ----------------------------------
  103. # Main Project
  104. # ----------------------------------
  105. add_subdirectory(core)
  106. if(QWINDOWKIT_BUILD_WIDGETS)
  107. add_subdirectory(widgets)
  108. endif()
  109. if(QWINDOWKIT_BUILD_QUICK)
  110. add_subdirectory(quick)
  111. endif()
  112. # ----------------------------------
  113. # Documentation
  114. # ----------------------------------
  115. if(QWINDOWKIT_BUILD_DOCUMENTATIONS)
  116. if(NOT DOXYGEN_EXECUTABLE)
  117. find_package(Doxygen REQUIRED)
  118. endif()
  119. set(_install_options)
  120. if(QWINDOWKIT_INSTALL)
  121. set(_install_options INSTALL_DIR share/doc/${QWINDOWKIT_INSTALL_NAME})
  122. endif()
  123. set(_doc_targets ${QWINDOWKIT_ENABLED_TARGETS})
  124. set(QWINDOWKIT_DOXYGEN_TAGFILE
  125. ${CMAKE_BUILD_SHARE_DIR}/doc/${QWINDOWKIT_INSTALL_NAME}/${QWINDOWKIT_INSTALL_NAME}_tagfile.xml
  126. CACHE FILEPATH "QWindowKit doxygen tag file path" FORCE
  127. )
  128. qm_import(Doxygen)
  129. qm_setup_doxygen(QWindowKit_RunDoxygen
  130. NAME "QWindowKit"
  131. DESCRIPTION "${QWINDOWKIT_DESCRIPTION}"
  132. MDFILE ../README.md
  133. OUTPUT_DIR ${CMAKE_BUILD_SHARE_DIR}/doc/${QWINDOWKIT_INSTALL_NAME}
  134. INPUT ${QWINDOWKIT_ENABLED_SUBDIRECTORIES}
  135. TARGETS ${_doc_targets}
  136. DEPENDS ${_doc_targets}
  137. NO_EXPAND_MACROS Q_OBJECT Q_GADGET Q_DECLARE_TR_FUNCTIONS
  138. COMPILE_DEFINITIONS Q_SIGNALS=Q_SIGNALS Q_SLOTS=Q_SLOTS
  139. GENERATE_TAGFILE "${QWINDOWKIT_DOXYGEN_TAGFILE}"
  140. ${_install_options}
  141. )
  142. endif()
  143. # ----------------------------------
  144. # Install
  145. # ----------------------------------
  146. if(QWINDOWKIT_INSTALL)
  147. qm_basic_install(
  148. NAME ${QWINDOWKIT_INSTALL_NAME}
  149. VERSION ${QWINDOWKIT_VERSION}
  150. INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${QWINDOWKIT_INSTALL_NAME}
  151. CONFIG_TEMPLATE "${QWINDOWKIT_INSTALL_NAME}Config.cmake.in"
  152. NAMESPACE ${QWINDOWKIT_INSTALL_NAME}::
  153. EXPORT ${QWINDOWKIT_INSTALL_NAME}Targets
  154. WRITE_CONFIG_OPTIONS NO_CHECK_REQUIRED_COMPONENTS_MACRO
  155. )
  156. # Install shared files
  157. include("../share/install.cmake")
  158. endif()