obs-studio/cmake/finders/Findjansson.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

141 lines
4.2 KiB
CMake

#[=======================================================================[.rst
Findjansson
----------
FindModule for jansson and associated libraries
.. versionchanged:: 3.0
Updated FindModule to CMake standards
Imported Targets
^^^^^^^^^^^^^^^^
.. versionadded:: 2.0
This module defines the :prop_tgt:`IMPORTED` target ``jansson::jansson``.
Result Variables
^^^^^^^^^^^^^^^^
This module sets the following variables:
``jansson_FOUND``
True, if all required components and the core library were found.
``jansson_VERSION``
Detected version of found jansson libraries.
Cache variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``jansson_LIBRARY``
Path to the library component of jansson.
``jansson_INCLUDE_DIR``
Directory containing ``jansson.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_jansson QUIET jansson)
endif()
# jansson_set_soname: Set SONAME on imported library targets
macro(jansson_set_soname)
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin")
execute_process(
COMMAND sh -c "otool -D '${jansson_LIBRARY}' | grep -v '${jansson_LIBRARY}'"
OUTPUT_VARIABLE _output
RESULT_VARIABLE _result)
if(_result EQUAL 0 AND _output MATCHES "^@rpath/")
set_property(TARGET jansson::jansson PROPERTY IMPORTED_SONAME "${_output}")
endif()
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
execute_process(
COMMAND sh -c "objdump -p '${jansson_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 jansson::jansson PROPERTY IMPORTED_SONAME "${_soname}")
unset(_soname)
endif()
endif()
unset(_output)
unset(_result)
endmacro()
find_path(
jansson_INCLUDE_DIR
NAMES jansson.h
HINTS ${PC_jansson_INCLUDE_DIR}
PATHS /usr/include /usr/local/include
PATH_SUFFIXES jansson-2.1
DOC "jansson include directory")
if(PC_jansson_VERSION VERSION_GREATER 0)
set(jansson_VERSION ${PC_jansson_VERSION})
elseif(EXISTS "${jansson_INCLUDE_DIR}/jansson.h")
file(STRINGS "${jansson_INCLUDE_DIR}/jansson.h" _VERSION_STRING REGEX "#define[ \t]+JANSSON_VERSION[ \t]+.+")
string(REGEX REPLACE ".*#define[ \t]+JANSSON_VERSION[ \t]+\"(.+)\".*" "\\1" jansson_VERSION "${_VERSION_STRING}")
else()
if(NOT jansson_FIND_QUIETLY)
message(AUTHOR_WARNING "Failed to find jansson version.")
endif()
set(jansson_VERSION 0.0.0)
endif()
find_library(
jansson_LIBRARY
NAMES jansson
HINTS ${PC_jansson_LIBRARY_DIRS}
PATHS /usr/lib /usr/local/lib
DOC "jansson location")
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows")
set(jansson_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.")
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
set(jansson_ERROR_REASON "Ensure that jansson is installed on the system.")
endif()
find_package_handle_standard_args(
jansson
REQUIRED_VARS jansson_LIBRARY jansson_INCLUDE_DIR
VERSION_VAR jansson_VERSION REASON_FAILURE_MESSAGE "${jansson_ERROR_REASON}")
mark_as_advanced(jansson_INCLUDE_DIR jansson_LIBRARY)
unset(jansson_ERROR_REASON)
if(jansson_FOUND)
if(NOT TARGET jansson::jansson)
if(IS_ABSOLUTE "${jansson_LIBRARY}")
add_library(jansson::jansson UNKNOWN IMPORTED)
set_property(TARGET jansson::jansson PROPERTY IMPORTED_LOCATION "${jansson_LIBRARY}")
else()
add_library(jansson::jansson INTERFACE IMPORTED)
set_property(TARGET jansson::jansson PROPERTY IMPORTED_LIBNAME "${jansson_LIBRARY}")
endif()
jansson_set_soname()
set_target_properties(
jansson::jansson
PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_jansson_CFLAGS_OTHER}"
INTERFACE_INCLUDE_DIRECTORIES "${jansson_INCLUDE_DIR}"
VERSION ${jansson_VERSION})
endif()
endif()
include(FeatureSummary)
set_package_properties(
jansson PROPERTIES
URL "https://www.digip.org/jansson/"
DESCRIPTION "A C library for encoding, decoding, and manipulating JSON data.")