obs-studio/cmake/finders/FindCEF.cmake

235 lines
7.8 KiB
CMake

#[=======================================================================[.rst
FindCEF
----------
FindModule for CEF and associated libraries
.. versionchanged:: 3.0
Updated FindModule to CMake standards
Imported Targets
^^^^^^^^^^^^^^^^
.. versionadded:: 2.0
This module defines the :prop_tgt:`IMPORTED` targets:
``CEF::Wrapper``
Static library loading wrapper
``CEF::Library``
Chromium Embedded Library
Result Variables
^^^^^^^^^^^^^^^^
This module sets the following variables:
``CEF_FOUND``
True, if all required components and the core library were found.
``CEF_VERSION``
Detected version of found CEF libraries.
Cache variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``CEF_LIBRARY_WRAPPER_RELEASE``
Path to the optimized wrapper component of CEF.
``CEF_LIBRARY_WRAPPER_DEBUG``
Path to the debug wrapper component of CEF.
``CEF_LIBRARY_RELEASE``
Path to the library component of CEF.
``CEF_LIBRARY_DEBUG``
Path to the debug library component of CEF.
``CEF_INCLUDE_DIR``
Directory containing ``cef_version.h``.
#]=======================================================================]
# cmake-format: off
# cmake-lint: disable=C0301
# cmake-lint: disable=C0307
# cmake-format: on
include(FindPackageHandleStandardArgs)
set(CEF_ROOT_DIR
""
CACHE PATH "Alternative path to Chromium Embedded Framework")
if(NOT DEFINED CEF_ROOT_DIR OR CEF_ROOT_DIR STREQUAL "")
message(
FATAL_ERROR
"CEF_ROOT_DIR is not set - if ENABLE_BROWSER is enabled, "
"a CEF distribution with compiled wrapper library is required.\n"
"Please download a CEF distribution for your appropriate architecture "
"and specify CEF_ROOT_DIR to its location")
endif()
find_path(
CEF_INCLUDE_DIR "cef_version.h"
HINTS "${CEF_ROOT_DIR}/include"
DOC "Chromium Embedded Framework include directory.")
if(CEF_INCLUDE_DIR)
file(STRINGS "${CEF_INCLUDE_DIR}/cef_version.h" _VERSION_STRING
REGEX "^.*CEF_VERSION_(MAJOR|MINOR|PATCH)[ \t]+[0-9]+[ \t]*$")
string(REGEX REPLACE ".*CEF_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" VERSION_MAJOR "${_VERSION_STRING}")
string(REGEX REPLACE ".*CEF_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" VERSION_MINOR "${_VERSION_STRING}")
string(REGEX REPLACE ".*CEF_VERSION_PATCH[ \t]+([0-9]+).*" "\\1" VERSION_PATCH "${_VERSION_STRING}")
set(CEF_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
else()
if(NOT CEF_FIND_QUIETLY)
message(AUTHOR_WARNING "Failed to find Chromium Embedded Framework version.")
endif()
set(CEF_VERSION 0.0.0)
endif()
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows)
find_library(
CEF_IMPLIB_RELEASE
NAMES cef.lib libcef.lib
NO_DEFAULT_PATH
PATHS "${CEF_ROOT_DIR}" "${CEF_ROOT_DIR}/Release"
DOC "Chromium Embedded Framework import library location")
find_program(
CEF_LIBRARY_RELEASE
NAMES cef.dll libcef.dll
NO_DEFAULT_PATH
PATHS "${CEF_ROOT_DIR}" "${CEF_ROOT_DIR}/Release"
DOC "Chromium Embedded Framework library location")
if(NOT CEF_LIBRARY_RELEASE)
set(CEF_LIBRARY_RELEASE "${CEF_IMPLIB_RELEASE}")
endif()
find_library(
CEF_LIBRARY_WRAPPER_RELEASE
NAMES cef_dll_wrapper libcef_dll_wrapper
NO_DEFAULT_PATH
PATHS "${CEF_ROOT_DIR}/build/libcef_dll/Release" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Release"
"${CEF_ROOT_DIR}/build/libcef_dll" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper"
DOC "Chromium Embedded Framework static library wrapper.")
find_library(
CEF_LIBRARY_WRAPPER_DEBUG
NAMES cef_dll_wrapper libcef_dll_wrapper
NO_DEFAULT_PATH
PATHS "${CEF_ROOT_DIR}/build/libcef_dll/Debug" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Debug"
DOC "Chromium Embedded Framework static library wrapper (debug).")
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
find_library(
CEF_LIBRARY_RELEASE
NAMES "Chromium Embedded Framework"
NO_DEFAULT_PATH
PATHS "${CEF_ROOT_DIR}" "${CEF_ROOT_DIR}/Release"
DOC "Chromium Embedded Framework")
find_library(
CEF_LIBRARY_WRAPPER_RELEASE
NAMES cef_dll_wrapper libcef_dll_wrapper
NO_DEFAULT_PATH
PATHS "${CEF_ROOT_DIR}/build/libcef_dll/Release" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Release"
"${CEF_ROOT_DIR}/build/libcef_dll" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper"
DOC "Chromium Embedded Framework static library wrapper.")
find_library(
CEF_LIBRARY_WRAPPER_DEBUG
NAMES cef_dll_wrapper libcef_dll_wrapper
NO_DEFAULT_PATH
PATHS "${CEF_ROOT_DIR}/build/libcef_dll/Debug" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Debug"
DOC "Chromium Embedded Framework static library wrapper (debug).")
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux)
find_library(
CEF_LIBRARY_RELEASE
NAMES libcef.so
NO_DEFAULT_PATH
PATHS "${CEF_ROOT_DIR}" "${CEF_ROOT_DIR}/Release"
DOC "Chromium Embedded Framework")
find_library(
CEF_LIBRARY_WRAPPER_RELEASE
NAMES cef_dll_wrapper.a libcef_dll_wrapper.a
NO_DEFAULT_PATH
PATHS "${CEF_ROOT_DIR}/libcef_dll_wrapper" "${CEF_ROOT_DIR}/build/libcef_dll"
"${CEF_ROOT_DIR}/build/libcef_dll_wrapper"
DOC "Chromium Embedded Framework static library wrapper.")
endif()
include(SelectLibraryConfigurations)
select_library_configurations(CEF)
find_package_handle_standard_args(
CEF
REQUIRED_VARS CEF_LIBRARY_RELEASE CEF_LIBRARY_WRAPPER_RELEASE CEF_INCLUDE_DIR
VERSION_VAR CEF_VERSION REASON_FAILURE_MESSAGE
"Ensure that location of pre-compiled Chromium Embedded Framework is set as CEF_ROOT_DIR.")
mark_as_advanced(CEF_LIBRARY CEF_LIBRARY_WRAPPER_RELEASE CEF_LIBRARY_WRAPPER_DEBUG CEF_INCLUDE_DIR)
if(NOT TARGET CEF::Wrapper)
if(IS_ABSOLUTE "${CEF_LIBRARY_WRAPPER_RELEASE}")
add_library(CEF::Wrapper STATIC IMPORTED)
set_property(TARGET CEF::Wrapper PROPERTY IMPORTED_LOCATION_RELEASE "${CEF_LIBRARY_WRAPPER_RELEASE}")
else()
add_library(CEF::Wrapper INTERFACE IMPORTED)
set_property(TARGET CEF::Wrapper PROPERTY IMPORTED_LIBNAME_RELEASE "${CEF_LIBRARY_WRAPPER_RELEASE}")
endif()
set_property(
TARGET CEF::Wrapper
APPEND
PROPERTY IMPORTED_CONFIGURATIONS "Release")
if(CEF_LIBRARY_WRAPPER_DEBUG)
if(IS_ABSOLUTE "${CEF_LIBRARY_WRAPPER_DEBUG}")
set_property(TARGET CEF::Wrapper PROPERTY IMPORTED_LOCATION_DEBUG "${CEF_LIBRARY_WRAPPER_DEBUG}")
else()
set_property(TARGET CEF::Wrapper PROPERTY IMPORTED_LIBNAME_DEBUG "${CEF_LIBRARY_WRAPPER_DEBUG}")
endif()
set_property(
TARGET CEF::Wrapper
APPEND
PROPERTY IMPORTED_CONFIGURATIONS "Debug")
endif()
set_property(
TARGET CEF::Wrapper
APPEND
PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CEF_INCLUDE_DIR}" "${CEF_ROOT_DIR}")
endif()
if(NOT TARGET CEF::Library)
if(IS_ABSOLUTE "${CEF_LIBRARY_RELEASE}")
if(DEFINED CEF_IMPLIB_RELEASE)
if(CEF_IMPLIB_RELEASE STREQUAL CEF_LIBRARY_RELEASE)
add_library(CEF::Library STATIC IMPORTED)
else()
add_library(CEF::Library SHARED IMPORTED)
set_property(TARGET CEF::Library PROPERTY IMPORTED_IMPLIB_RELEASE "${CEF_IMPLIB_RELEASE}")
endif()
else()
add_library(CEF::Library UNKNOWN IMPORTED)
endif()
set_property(TARGET CEF::Library PROPERTY IMPORTED_LOCATION_RELEASE "${CEF_LIBRARY_RELEASE}")
else()
add_library(CEF::Library INTERFACE IMPORTED)
set_property(TARGET CEF::Library PROPERTY IMPORTED_LIBNAME_RELEASE "${CEF_LIBRARY_RELEASE}")
endif()
set_property(
TARGET CEF::Library
APPEND
PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CEF_INCLUDE_DIR}" "${CEF_ROOT_DIR}")
set_property(TARGET CEF::Library PROPERTY IMPORTED_CONFIGURATIONS "Release")
endif()
include(FeatureSummary)
set_package_properties(
CEF PROPERTIES
URL "https://bitbucket.org/chromiumembedded/cef/"
DESCRIPTION
"Chromium Embedded Framework (CEF). A simple framework for embedding Chromium-based browsers in other applications."
)