obs-studio/cmake/finders/FindLibrist.cmake
PatTheMav ae6e9c875b cmake: Add OBS CMake build framework 3.0
OBS CMake build framework 3.0 is a minor overhaul of version 2.0. Due
to close proximity of the 2.0 rework, the amount of actual changes to
project files are minimal and mostly concern application generation.

This commit contains the bootstrap elements only and requires
OS-specific implementations to be functional.
2023-03-26 18:20:38 -04:00

143 lines
4.5 KiB
CMake

#[=======================================================================[.rst
FindLibrist
----------
FindModule for Librist and associated libraries
.. versionchanged:: 3.0
Updated FindModule to CMake standards
Imported Targets
^^^^^^^^^^^^^^^^
.. versionadded:: 2.0
This module defines the :prop_tgt:`IMPORTED` target ``Librist::Librist``.
Result Variables
^^^^^^^^^^^^^^^^
This module sets the following variables:
``Librist_FOUND``
True, if all required components and the core library were found.
``Librist_VERSION``
Detected version of found Librist libraries.
Cache variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``Librist_LIBRARY``
Path to the library component of Librist.
``Librist_INCLUDE_DIR``
Directory containing ``librist.h``.
#]=======================================================================]
# cmake-format: off
# cmake-lint: disable=C0103
# cmake-format: on
include(FindPackageHandleStandardArgs)
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
pkg_search_module(PC_Librist QUIET librist)
endif()
# Librist_set_soname: Set SONAME on imported library target
macro(Librist_set_soname)
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin")
execute_process(
COMMAND sh -c "otool -D '${Librist_LIBRARY}' | grep -v '${Librist_LIBRARY}'"
OUTPUT_VARIABLE _output
RESULT_VARIABLE _result)
if(_result EQUAL 0 AND _output MATCHES "^@rpath/")
set_property(TARGET Librist::Librist PROPERTY IMPORTED_SONAME "${_output}")
endif()
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
execute_process(
COMMAND sh -c "objdump -p '${Librist_LIBRARY}' | grep SONAME"
OUTPUT_VARIABLE _output
RESULT_VARIABLE _result)
if(_result EQUAL 0)
string(REGEX REPLACE "[ \t]+SONAME[ \t]+([^ \t]+)" "\\1" _soname "${_output}")
set_property(TARGET Librist::Librist PROPERTY IMPORTED_SONAME "${_soname}")
unset(_soname)
endif()
endif()
unset(_output)
unset(_result)
endmacro()
find_path(
Librist_INCLUDE_DIR
NAMES librist.h librist/librist.h
HINTS ${PC_Librist_INCLUDE_DIRS}
PATHS /usr/include /usr/local/include
DOC "Librist include directory")
if(PC_Librist_VERSION VERSION_GREATER 0)
set(Librist_VERSION ${PC_Librist_VERSION})
elseif(EXISTS "${Librist_INCLUDE_DIR}/version.h")
file(STRINGS "${_VERSION_FILE}" _VERSION_STRING REGEX "^.*VERSION_(MAJOR|MINOR|PATCH)[ \t]+[0-9]+[ \t]*$")
string(REGEX REPLACE ".*VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" _VERSION_MAJOR "${_VERSION_STRING}")
string(REGEX REPLACE ".*VERSION_MINOR[ \t]+([0-9]+).*" "\\1" _VERSION_MINOR "${_VERSION_STRING}")
string(REGEX REPLACE ".*VERSION_PATCH[ \t]+([0-9]+).*" "\\1" _VERSION_PATCH "${_VERSION_STRING}")
set(Librist_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO}")
else()
if(NOT Librist_FIND_QUIETLY)
message(AUTHOR_WARNING "Failed to find Librist version.")
endif()
set(Librist_VERSION 0.0.0)
endif()
find_library(
Librist_LIBRARY
NAMES librist rist
HINTS ${PC_Librist_LIBRARY_DIRS}
PATHS /usr/lib /usr/local/lib
DOC "Librist location")
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows")
set(Librist_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.")
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
set(Librist_ERROR_REASON "Ensure librist libraries are available in local library paths.")
endif()
find_package_handle_standard_args(
Librist
REQUIRED_VARS Librist_LIBRARY Librist_INCLUDE_DIR
VERSION_VAR Librist_VERSION REASON_FAILURE_MESSAGE "${Librist_ERROR_REASON}")
mark_as_advanced(Librist_INCLUDE_DIR Librist_LIBRARY)
unset(Librist_ERROR_REASON)
if(Librist_FOUND)
if(NOT TARGET Librist::Librist)
if(IS_ABSOLUTE "${Librist_LIBRARY}")
add_library(Librist::Librist UNKNOWN IMPORTED)
set_property(TARGET Librist::Librist PROPERTY IMPORTED_LOCATION "${Librist_LIBRARY}")
else()
add_library(Librist::Librist INTERFACE IMPORTED)
set_property(TARGET Librist::Librist PROPERTY IMPORTED_LIBNAME "${Librist_LIBRARY}")
endif()
librist_set_soname()
set_target_properties(
Librist::Librist
PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_Librist_CFLAGS_OTHER}"
INTERFACE_INCLUDE_DIRECTORIES "${Librist_INCLUDE_DIR}"
VERSION ${Librist_VERSION})
endif()
endif()
include(FeatureSummary)
set_package_properties(
Librist PROPERTIES
URL "https://code.videolan.org/rist/librist"
DESCRIPTION "A library that can be used to easily add the RIST protocol to your application.")