Qt5QmqttConfig.cmake 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. if (CMAKE_VERSION VERSION_LESS 3.1.0)
  2. message(FATAL_ERROR "Qt 5 Qmqtt module requires at least CMake version 3.1.0")
  3. endif()
  4. get_filename_component(_qt5Qmqtt_install_prefix "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
  5. # For backwards compatibility only. Use Qt5Qmqtt_VERSION instead.
  6. set(Qt5Qmqtt_VERSION_STRING 1.0.3)
  7. set(Qt5Qmqtt_LIBRARIES Qt5::Qmqtt)
  8. macro(_qt5_Qmqtt_check_file_exists file)
  9. if(NOT EXISTS "${file}" )
  10. message(FATAL_ERROR "The imported target \"Qt5::Qmqtt\" references the file
  11. \"${file}\"
  12. but this file does not exist. Possible reasons include:
  13. * The file was deleted, renamed, or moved to another location.
  14. * An install or uninstall procedure did not complete successfully.
  15. * The installation package was faulty and contained
  16. \"${CMAKE_CURRENT_LIST_FILE}\"
  17. but not all the files it references.
  18. ")
  19. endif()
  20. endmacro()
  21. macro(_populate_Qmqtt_target_properties Configuration LIB_LOCATION IMPLIB_LOCATION
  22. IsDebugAndRelease)
  23. set_property(TARGET Qt5::Qmqtt APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
  24. set(imported_location "${_qt5Qmqtt_install_prefix}/bin/${LIB_LOCATION}")
  25. _qt5_Qmqtt_check_file_exists(${imported_location})
  26. set(_deps
  27. ${_Qt5Qmqtt_LIB_DEPENDENCIES}
  28. )
  29. set(_static_deps
  30. )
  31. set_target_properties(Qt5::Qmqtt PROPERTIES
  32. "IMPORTED_LOCATION_${Configuration}" ${imported_location}
  33. # For backward compatibility with CMake < 2.8.12
  34. "IMPORTED_LINK_INTERFACE_LIBRARIES_${Configuration}" "${_deps};${_static_deps}"
  35. )
  36. set_property(TARGET Qt5::Qmqtt APPEND PROPERTY INTERFACE_LINK_LIBRARIES
  37. "${_deps}"
  38. )
  39. set(imported_implib "${_qt5Qmqtt_install_prefix}/lib/${IMPLIB_LOCATION}")
  40. _qt5_Qmqtt_check_file_exists(${imported_implib})
  41. if(NOT "${IMPLIB_LOCATION}" STREQUAL "")
  42. set_target_properties(Qt5::Qmqtt PROPERTIES
  43. "IMPORTED_IMPLIB_${Configuration}" ${imported_implib}
  44. )
  45. endif()
  46. endmacro()
  47. if (NOT TARGET Qt5::Qmqtt)
  48. set(_Qt5Qmqtt_OWN_INCLUDE_DIRS "${_qt5Qmqtt_install_prefix}/include/" "${_qt5Qmqtt_install_prefix}/include/QtQmqtt")
  49. set(Qt5Qmqtt_PRIVATE_INCLUDE_DIRS "")
  50. include("${CMAKE_CURRENT_LIST_DIR}/ExtraSourceIncludes.cmake" OPTIONAL)
  51. foreach(_dir ${_Qt5Qmqtt_OWN_INCLUDE_DIRS})
  52. _qt5_Qmqtt_check_file_exists(${_dir})
  53. endforeach()
  54. # Only check existence of private includes if the Private component is
  55. # specified.
  56. list(FIND Qt5Qmqtt_FIND_COMPONENTS Private _check_private)
  57. if (NOT _check_private STREQUAL -1)
  58. foreach(_dir ${Qt5Qmqtt_PRIVATE_INCLUDE_DIRS})
  59. _qt5_Qmqtt_check_file_exists(${_dir})
  60. endforeach()
  61. endif()
  62. set(Qt5Qmqtt_INCLUDE_DIRS ${_Qt5Qmqtt_OWN_INCLUDE_DIRS})
  63. set(Qt5Qmqtt_DEFINITIONS -DQT_QMQTT_LIB)
  64. set(Qt5Qmqtt_COMPILE_DEFINITIONS QT_QMQTT_LIB)
  65. set(_Qt5Qmqtt_MODULE_DEPENDENCIES "Network;Core")
  66. set(Qt5Qmqtt_OWN_PRIVATE_INCLUDE_DIRS ${Qt5Qmqtt_PRIVATE_INCLUDE_DIRS})
  67. set(_Qt5Qmqtt_FIND_DEPENDENCIES_REQUIRED)
  68. if (Qt5Qmqtt_FIND_REQUIRED)
  69. set(_Qt5Qmqtt_FIND_DEPENDENCIES_REQUIRED REQUIRED)
  70. endif()
  71. set(_Qt5Qmqtt_FIND_DEPENDENCIES_QUIET)
  72. if (Qt5Qmqtt_FIND_QUIETLY)
  73. set(_Qt5Qmqtt_DEPENDENCIES_FIND_QUIET QUIET)
  74. endif()
  75. set(_Qt5Qmqtt_FIND_VERSION_EXACT)
  76. if (Qt5Qmqtt_FIND_VERSION_EXACT)
  77. set(_Qt5Qmqtt_FIND_VERSION_EXACT EXACT)
  78. endif()
  79. set(Qt5Qmqtt_EXECUTABLE_COMPILE_FLAGS "")
  80. foreach(_module_dep ${_Qt5Qmqtt_MODULE_DEPENDENCIES})
  81. if (NOT Qt5${_module_dep}_FOUND)
  82. find_package(Qt5${_module_dep}
  83. 1.0.3 ${_Qt5Qmqtt_FIND_VERSION_EXACT}
  84. ${_Qt5Qmqtt_DEPENDENCIES_FIND_QUIET}
  85. ${_Qt5Qmqtt_FIND_DEPENDENCIES_REQUIRED}
  86. PATHS "${CMAKE_CURRENT_LIST_DIR}/.." NO_DEFAULT_PATH
  87. )
  88. endif()
  89. if (NOT Qt5${_module_dep}_FOUND)
  90. set(Qt5Qmqtt_FOUND False)
  91. return()
  92. endif()
  93. list(APPEND Qt5Qmqtt_INCLUDE_DIRS "${Qt5${_module_dep}_INCLUDE_DIRS}")
  94. list(APPEND Qt5Qmqtt_PRIVATE_INCLUDE_DIRS "${Qt5${_module_dep}_PRIVATE_INCLUDE_DIRS}")
  95. list(APPEND Qt5Qmqtt_DEFINITIONS ${Qt5${_module_dep}_DEFINITIONS})
  96. list(APPEND Qt5Qmqtt_COMPILE_DEFINITIONS ${Qt5${_module_dep}_COMPILE_DEFINITIONS})
  97. list(APPEND Qt5Qmqtt_EXECUTABLE_COMPILE_FLAGS ${Qt5${_module_dep}_EXECUTABLE_COMPILE_FLAGS})
  98. endforeach()
  99. list(REMOVE_DUPLICATES Qt5Qmqtt_INCLUDE_DIRS)
  100. list(REMOVE_DUPLICATES Qt5Qmqtt_PRIVATE_INCLUDE_DIRS)
  101. list(REMOVE_DUPLICATES Qt5Qmqtt_DEFINITIONS)
  102. list(REMOVE_DUPLICATES Qt5Qmqtt_COMPILE_DEFINITIONS)
  103. list(REMOVE_DUPLICATES Qt5Qmqtt_EXECUTABLE_COMPILE_FLAGS)
  104. # It can happen that the same FooConfig.cmake file is included when calling find_package()
  105. # on some Qt component. An example of that is when using a Qt static build with auto inclusion
  106. # of plugins:
  107. #
  108. # Qt5WidgetsConfig.cmake -> Qt5GuiConfig.cmake -> Qt5Gui_QSvgIconPlugin.cmake ->
  109. # Qt5SvgConfig.cmake -> Qt5WidgetsConfig.cmake ->
  110. # finish processing of second Qt5WidgetsConfig.cmake ->
  111. # return to first Qt5WidgetsConfig.cmake ->
  112. # add_library cannot create imported target Qt5::Widgets.
  113. #
  114. # Make sure to return early in the original Config inclusion, because the target has already
  115. # been defined as part of the second inclusion.
  116. if(TARGET Qt5::Qmqtt)
  117. return()
  118. endif()
  119. set(_Qt5Qmqtt_LIB_DEPENDENCIES "Qt5::Network;Qt5::Core")
  120. add_library(Qt5::Qmqtt SHARED IMPORTED)
  121. set_property(TARGET Qt5::Qmqtt PROPERTY
  122. INTERFACE_INCLUDE_DIRECTORIES ${_Qt5Qmqtt_OWN_INCLUDE_DIRS})
  123. set_property(TARGET Qt5::Qmqtt PROPERTY
  124. INTERFACE_COMPILE_DEFINITIONS QT_QMQTT_LIB)
  125. set_property(TARGET Qt5::Qmqtt PROPERTY INTERFACE_QT_ENABLED_FEATURES )
  126. set_property(TARGET Qt5::Qmqtt PROPERTY INTERFACE_QT_DISABLED_FEATURES )
  127. # Qt 6 forward compatible properties.
  128. set_property(TARGET Qt5::Qmqtt
  129. PROPERTY QT_ENABLED_PUBLIC_FEATURES
  130. )
  131. set_property(TARGET Qt5::Qmqtt
  132. PROPERTY QT_DISABLED_PUBLIC_FEATURES
  133. )
  134. set_property(TARGET Qt5::Qmqtt
  135. PROPERTY QT_ENABLED_PRIVATE_FEATURES
  136. )
  137. set_property(TARGET Qt5::Qmqtt
  138. PROPERTY QT_DISABLED_PRIVATE_FEATURES
  139. )
  140. set_property(TARGET Qt5::Qmqtt PROPERTY INTERFACE_QT_PLUGIN_TYPES "")
  141. set(_Qt5Qmqtt_PRIVATE_DIRS_EXIST TRUE)
  142. foreach (_Qt5Qmqtt_PRIVATE_DIR ${Qt5Qmqtt_OWN_PRIVATE_INCLUDE_DIRS})
  143. if (NOT EXISTS ${_Qt5Qmqtt_PRIVATE_DIR})
  144. set(_Qt5Qmqtt_PRIVATE_DIRS_EXIST FALSE)
  145. endif()
  146. endforeach()
  147. if (_Qt5Qmqtt_PRIVATE_DIRS_EXIST)
  148. add_library(Qt5::QmqttPrivate INTERFACE IMPORTED)
  149. set_property(TARGET Qt5::QmqttPrivate PROPERTY
  150. INTERFACE_INCLUDE_DIRECTORIES ${Qt5Qmqtt_OWN_PRIVATE_INCLUDE_DIRS}
  151. )
  152. set(_Qt5Qmqtt_PRIVATEDEPS)
  153. foreach(dep ${_Qt5Qmqtt_LIB_DEPENDENCIES})
  154. if (TARGET ${dep}Private)
  155. list(APPEND _Qt5Qmqtt_PRIVATEDEPS ${dep}Private)
  156. endif()
  157. endforeach()
  158. set_property(TARGET Qt5::QmqttPrivate PROPERTY
  159. INTERFACE_LINK_LIBRARIES Qt5::Qmqtt ${_Qt5Qmqtt_PRIVATEDEPS}
  160. )
  161. # Add a versionless target, for compatibility with Qt6.
  162. if(NOT "${QT_NO_CREATE_VERSIONLESS_TARGETS}" AND NOT TARGET Qt::QmqttPrivate)
  163. add_library(Qt::QmqttPrivate INTERFACE IMPORTED)
  164. set_target_properties(Qt::QmqttPrivate PROPERTIES
  165. INTERFACE_LINK_LIBRARIES "Qt5::QmqttPrivate"
  166. )
  167. endif()
  168. endif()
  169. _populate_Qmqtt_target_properties(RELEASE "Qt5Qmqtt.dll" "Qt5Qmqtt.lib" TRUE)
  170. _populate_Qmqtt_target_properties(DEBUG "Qt5Qmqttd.dll" "Qt5Qmqttd.lib" TRUE)
  171. # In Qt 5.15 the glob pattern was relaxed to also catch plugins not literally named Plugin.
  172. # Define QT5_STRICT_PLUGIN_GLOB or ModuleName_STRICT_PLUGIN_GLOB to revert to old behavior.
  173. if (QT5_STRICT_PLUGIN_GLOB OR Qt5Qmqtt_STRICT_PLUGIN_GLOB)
  174. file(GLOB pluginTargets "${CMAKE_CURRENT_LIST_DIR}/Qt5Qmqtt_*Plugin.cmake")
  175. else()
  176. file(GLOB pluginTargets "${CMAKE_CURRENT_LIST_DIR}/Qt5Qmqtt_*.cmake")
  177. endif()
  178. macro(_populate_Qmqtt_plugin_properties Plugin Configuration PLUGIN_LOCATION
  179. IsDebugAndRelease)
  180. set_property(TARGET Qt5::${Plugin} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
  181. set(imported_location "${_qt5Qmqtt_install_prefix}/plugins/${PLUGIN_LOCATION}")
  182. _qt5_Qmqtt_check_file_exists(${imported_location})
  183. set_target_properties(Qt5::${Plugin} PROPERTIES
  184. "IMPORTED_LOCATION_${Configuration}" ${imported_location}
  185. )
  186. endmacro()
  187. if (pluginTargets)
  188. foreach(pluginTarget ${pluginTargets})
  189. include(${pluginTarget})
  190. endforeach()
  191. endif()
  192. _qt5_Qmqtt_check_file_exists("${CMAKE_CURRENT_LIST_DIR}/Qt5QmqttConfigVersion.cmake")
  193. endif()
  194. # Add a versionless target, for compatibility with Qt6.
  195. if(NOT "${QT_NO_CREATE_VERSIONLESS_TARGETS}" AND TARGET Qt5::Qmqtt AND NOT TARGET Qt::Qmqtt)
  196. add_library(Qt::Qmqtt INTERFACE IMPORTED)
  197. set_target_properties(Qt::Qmqtt PROPERTIES
  198. INTERFACE_LINK_LIBRARIES "Qt5::Qmqtt"
  199. )
  200. endif()