FindCEF.cmake 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. #[=======================================================================[.rst
  2. FindCEF
  3. ----------
  4. FindModule for CEF and associated libraries
  5. .. versionchanged:: 3.0
  6. Updated FindModule to CMake standards
  7. Imported Targets
  8. ^^^^^^^^^^^^^^^^
  9. .. versionadded:: 2.0
  10. This module defines the :prop_tgt:`IMPORTED` targets:
  11. ``CEF::Wrapper``
  12. Static library loading wrapper
  13. ``CEF::Library``
  14. Chromium Embedded Library
  15. Result Variables
  16. ^^^^^^^^^^^^^^^^
  17. This module sets the following variables:
  18. ``CEF_FOUND``
  19. True, if all required components and the core library were found.
  20. ``CEF_VERSION``
  21. Detected version of found CEF libraries.
  22. Cache variables
  23. ^^^^^^^^^^^^^^^
  24. The following cache variables may also be set:
  25. ``CEF_LIBRARY_WRAPPER_RELEASE``
  26. Path to the optimized wrapper component of CEF.
  27. ``CEF_LIBRARY_WRAPPER_DEBUG``
  28. Path to the debug wrapper component of CEF.
  29. ``CEF_LIBRARY_RELEASE``
  30. Path to the library component of CEF.
  31. ``CEF_LIBRARY_DEBUG``
  32. Path to the debug library component of CEF.
  33. ``CEF_INCLUDE_DIR``
  34. Directory containing ``cef_version.h``.
  35. #]=======================================================================]
  36. include(FindPackageHandleStandardArgs)
  37. set(CEF_ROOT_DIR "" CACHE PATH "Alternative path to Chromium Embedded Framework")
  38. if(NOT DEFINED CEF_ROOT_DIR OR CEF_ROOT_DIR STREQUAL "")
  39. message(
  40. FATAL_ERROR
  41. "CEF_ROOT_DIR is not set - if ENABLE_BROWSER is enabled, "
  42. "a CEF distribution with compiled wrapper library is required.\n"
  43. "Please download a CEF distribution for your appropriate architecture "
  44. "and specify CEF_ROOT_DIR to its location"
  45. )
  46. endif()
  47. find_path(
  48. CEF_INCLUDE_DIR
  49. "cef_version.h"
  50. HINTS "${CEF_ROOT_DIR}/include"
  51. DOC "Chromium Embedded Framework include directory."
  52. )
  53. if(CEF_INCLUDE_DIR)
  54. file(
  55. STRINGS
  56. "${CEF_INCLUDE_DIR}/cef_version.h"
  57. _VERSION_STRING
  58. REGEX "^.*CEF_VERSION_(MAJOR|MINOR|PATCH)[ \t]+[0-9]+[ \t]*$"
  59. )
  60. string(REGEX REPLACE ".*CEF_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" VERSION_MAJOR "${_VERSION_STRING}")
  61. string(REGEX REPLACE ".*CEF_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" VERSION_MINOR "${_VERSION_STRING}")
  62. string(REGEX REPLACE ".*CEF_VERSION_PATCH[ \t]+([0-9]+).*" "\\1" VERSION_PATCH "${_VERSION_STRING}")
  63. set(CEF_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
  64. else()
  65. if(NOT CEF_FIND_QUIETLY)
  66. message(AUTHOR_WARNING "Failed to find Chromium Embedded Framework version.")
  67. endif()
  68. set(CEF_VERSION 0.0.0)
  69. endif()
  70. if(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows)
  71. find_library(
  72. CEF_IMPLIB_RELEASE
  73. NAMES cef.lib libcef.lib
  74. NO_DEFAULT_PATH
  75. PATHS "${CEF_ROOT_DIR}" "${CEF_ROOT_DIR}/Release"
  76. DOC "Chromium Embedded Framework import library location"
  77. )
  78. find_program(
  79. CEF_LIBRARY_RELEASE
  80. NAMES cef.dll libcef.dll
  81. NO_DEFAULT_PATH
  82. PATHS "${CEF_ROOT_DIR}" "${CEF_ROOT_DIR}/Release"
  83. DOC "Chromium Embedded Framework library location"
  84. )
  85. if(NOT CEF_LIBRARY_RELEASE)
  86. set(CEF_LIBRARY_RELEASE "${CEF_IMPLIB_RELEASE}")
  87. endif()
  88. find_library(
  89. CEF_LIBRARY_WRAPPER_RELEASE
  90. NAMES cef_dll_wrapper libcef_dll_wrapper
  91. NO_DEFAULT_PATH
  92. PATHS
  93. "${CEF_ROOT_DIR}/build/libcef_dll/Release"
  94. "${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Release"
  95. "${CEF_ROOT_DIR}/build/libcef_dll"
  96. "${CEF_ROOT_DIR}/build/libcef_dll_wrapper"
  97. DOC "Chromium Embedded Framework static library wrapper."
  98. )
  99. find_library(
  100. CEF_LIBRARY_WRAPPER_DEBUG
  101. NAMES cef_dll_wrapper libcef_dll_wrapper
  102. NO_DEFAULT_PATH
  103. PATHS "${CEF_ROOT_DIR}/build/libcef_dll/Debug" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Debug"
  104. DOC "Chromium Embedded Framework static library wrapper (debug)."
  105. )
  106. elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
  107. find_library(
  108. CEF_LIBRARY_RELEASE
  109. NAMES "Chromium Embedded Framework"
  110. NO_DEFAULT_PATH
  111. PATHS "${CEF_ROOT_DIR}" "${CEF_ROOT_DIR}/Release"
  112. DOC "Chromium Embedded Framework"
  113. )
  114. find_library(
  115. CEF_LIBRARY_WRAPPER_RELEASE
  116. NAMES cef_dll_wrapper libcef_dll_wrapper
  117. NO_DEFAULT_PATH
  118. PATHS
  119. "${CEF_ROOT_DIR}/build/libcef_dll/Release"
  120. "${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Release"
  121. "${CEF_ROOT_DIR}/build/libcef_dll"
  122. "${CEF_ROOT_DIR}/build/libcef_dll_wrapper"
  123. DOC "Chromium Embedded Framework static library wrapper."
  124. )
  125. find_library(
  126. CEF_LIBRARY_WRAPPER_DEBUG
  127. NAMES cef_dll_wrapper libcef_dll_wrapper
  128. NO_DEFAULT_PATH
  129. PATHS "${CEF_ROOT_DIR}/build/libcef_dll/Debug" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Debug"
  130. DOC "Chromium Embedded Framework static library wrapper (debug)."
  131. )
  132. elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux)
  133. find_library(
  134. CEF_LIBRARY_RELEASE
  135. NAMES libcef.so
  136. NO_DEFAULT_PATH
  137. PATHS "${CEF_ROOT_DIR}" "${CEF_ROOT_DIR}/Release"
  138. DOC "Chromium Embedded Framework"
  139. )
  140. find_library(
  141. CEF_LIBRARY_WRAPPER_RELEASE
  142. NAMES cef_dll_wrapper.a libcef_dll_wrapper.a
  143. NO_DEFAULT_PATH
  144. PATHS
  145. "${CEF_ROOT_DIR}/libcef_dll_wrapper"
  146. "${CEF_ROOT_DIR}/build/libcef_dll"
  147. "${CEF_ROOT_DIR}/build/libcef_dll_wrapper"
  148. DOC "Chromium Embedded Framework static library wrapper."
  149. )
  150. endif()
  151. include(SelectLibraryConfigurations)
  152. select_library_configurations(CEF)
  153. find_package_handle_standard_args(
  154. CEF
  155. REQUIRED_VARS CEF_LIBRARY_RELEASE CEF_LIBRARY_WRAPPER_RELEASE CEF_INCLUDE_DIR
  156. VERSION_VAR CEF_VERSION
  157. REASON_FAILURE_MESSAGE "Ensure that location of pre-compiled Chromium Embedded Framework is set as CEF_ROOT_DIR."
  158. )
  159. mark_as_advanced(CEF_LIBRARY CEF_LIBRARY_WRAPPER_RELEASE CEF_LIBRARY_WRAPPER_DEBUG CEF_INCLUDE_DIR)
  160. if(NOT TARGET CEF::Wrapper)
  161. if(IS_ABSOLUTE "${CEF_LIBRARY_WRAPPER_RELEASE}")
  162. add_library(CEF::Wrapper STATIC IMPORTED)
  163. set_property(TARGET CEF::Wrapper PROPERTY IMPORTED_LOCATION_RELEASE "${CEF_LIBRARY_WRAPPER_RELEASE}")
  164. else()
  165. add_library(CEF::Wrapper INTERFACE IMPORTED)
  166. set_property(TARGET CEF::Wrapper PROPERTY IMPORTED_LIBNAME_RELEASE "${CEF_LIBRARY_WRAPPER_RELEASE}")
  167. endif()
  168. set_property(TARGET CEF::Wrapper APPEND PROPERTY IMPORTED_CONFIGURATIONS "Release")
  169. if(CEF_LIBRARY_WRAPPER_DEBUG)
  170. if(IS_ABSOLUTE "${CEF_LIBRARY_WRAPPER_DEBUG}")
  171. set_property(TARGET CEF::Wrapper PROPERTY IMPORTED_LOCATION_DEBUG "${CEF_LIBRARY_WRAPPER_DEBUG}")
  172. else()
  173. set_property(TARGET CEF::Wrapper PROPERTY IMPORTED_LIBNAME_DEBUG "${CEF_LIBRARY_WRAPPER_DEBUG}")
  174. endif()
  175. set_property(TARGET CEF::Wrapper APPEND PROPERTY IMPORTED_CONFIGURATIONS "Debug")
  176. endif()
  177. set_property(TARGET CEF::Wrapper APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CEF_INCLUDE_DIR}" "${CEF_ROOT_DIR}")
  178. endif()
  179. if(NOT TARGET CEF::Library)
  180. if(IS_ABSOLUTE "${CEF_LIBRARY_RELEASE}")
  181. if(DEFINED CEF_IMPLIB_RELEASE)
  182. if(CEF_IMPLIB_RELEASE STREQUAL CEF_LIBRARY_RELEASE)
  183. add_library(CEF::Library STATIC IMPORTED)
  184. else()
  185. add_library(CEF::Library SHARED IMPORTED)
  186. set_property(TARGET CEF::Library PROPERTY IMPORTED_IMPLIB_RELEASE "${CEF_IMPLIB_RELEASE}")
  187. endif()
  188. else()
  189. add_library(CEF::Library UNKNOWN IMPORTED)
  190. endif()
  191. set_property(TARGET CEF::Library PROPERTY IMPORTED_LOCATION_RELEASE "${CEF_LIBRARY_RELEASE}")
  192. else()
  193. add_library(CEF::Library INTERFACE IMPORTED)
  194. set_property(TARGET CEF::Library PROPERTY IMPORTED_LIBNAME_RELEASE "${CEF_LIBRARY_RELEASE}")
  195. endif()
  196. set_property(TARGET CEF::Library APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CEF_INCLUDE_DIR}" "${CEF_ROOT_DIR}")
  197. set_property(TARGET CEF::Library PROPERTY IMPORTED_CONFIGURATIONS "Release")
  198. endif()
  199. include(FeatureSummary)
  200. set_package_properties(
  201. CEF
  202. PROPERTIES
  203. URL "https://bitbucket.org/chromiumembedded/cef/"
  204. DESCRIPTION
  205. "Chromium Embedded Framework (CEF). A simple framework for embedding Chromium-based browsers in other applications."
  206. )