mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-14 23:34:08 +00:00
182410cf6c
Support building AJA plugins with either the new libajantv2 library, or the deprecated ntv2 library. Finder scripts updated to search for libajantv2 and fall back to ntv2 if not found. This allows this PR to be merged without requiring a corresponding update to the pre-built obs-deps packages.
202 lines
7 KiB
CMake
202 lines
7 KiB
CMake
#[=======================================================================[.rst
|
|
FindLibAJANTV2
|
|
----------
|
|
|
|
FindModule for LibAJANTV2 and associated libraries
|
|
|
|
.. versionchanged:: 3.0
|
|
Updated FindModule to CMake standards
|
|
|
|
Imported Targets
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
.. versionadded:: 2.0
|
|
|
|
This module defines the :prop_tgt:`IMPORTED` target ``LibAJANTV2::LibAJANTV2``.
|
|
|
|
Result Variables
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
This module sets the following variables:
|
|
|
|
``LibAJANTV2_FOUND``
|
|
True, if all required components and the core library were found.
|
|
``LibAJANTV2_VERSION``
|
|
Detected version of found LibAJANTV2 libraries.
|
|
``LibAJANTV2_INCLUDE_DIRS``
|
|
Include directories needed for LibAJANTV2.
|
|
``LibAJANTV2_LIBRARIES``
|
|
Libraries needed to link to LibAJANTV2.
|
|
|
|
Cache variables
|
|
^^^^^^^^^^^^^^^
|
|
|
|
The following cache variables may also be set:
|
|
|
|
``LibAJANTV2_LIBRARY_RELEASE``
|
|
Path to the library component of LibAJANTV2 in non-debug configuration.
|
|
``LibAJANTV2_LIBRARY_DEBUG``
|
|
Optional path to the library component of LibAJANTV2 in debug configuration.
|
|
``LibAJANTV2_INCLUDE_DIR``
|
|
Directory containing ``LibAJANTV2.h``.
|
|
|
|
#]=======================================================================]
|
|
|
|
# cmake-format: off
|
|
# cmake-lint: disable=C0103
|
|
# cmake-lint: disable=C0301
|
|
# cmake-lint: disable=C0307
|
|
# cmake-format: on
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
|
|
find_package(PkgConfig QUIET)
|
|
if(PKG_CONFIG_FOUND)
|
|
pkg_search_module(PC_LibAJANTV2 QUIET ajantv2)
|
|
endif()
|
|
|
|
find_path(
|
|
_LIBAJANTV2_NEW_INCLUDE_DIR
|
|
NAMES libajantv2
|
|
HINTS ${PC_LibAJANTV2_INCLUDE_DIRS}
|
|
PATHS /usr/include /usr/local/include
|
|
DOC "LibAJANTV2 (new) include directory")
|
|
if(${_LIBAJANTV2_NEW_INCLUDE_DIR} STREQUAL "_LIBAJANTV2_NEW_INCLUDE_DIR-NOTFOUND")
|
|
find_path(
|
|
_LIBAJANTV2_OLD_INCLUDE_DIR
|
|
NAMES ajalibraries
|
|
HINTS ${PC_LibAJANTV2_INCLUDE_DIRS}
|
|
PATHS /usr/include /usr/local/include
|
|
DOC "LibAJANTV2 (old) include directory")
|
|
if(NOT ${_LIBAJANTV2_OLD_INCLUDE_DIR} STREQUAL "_LIBAJANTV2_OLD_INCLUDE_DIR-NOTFOUND")
|
|
set(LibAJANTV2_INCLUDE_DIR ${_LIBAJANTV2_OLD_INCLUDE_DIR}/ajalibraries)
|
|
if(NOT LibAJANTV2_FIND_QUIETLY)
|
|
message(DEPRECATION "aja: Using old ntv2 library")
|
|
endif()
|
|
endif()
|
|
else()
|
|
set(LibAJANTV2_INCLUDE_DIR ${_LIBAJANTV2_NEW_INCLUDE_DIR}/libajantv2)
|
|
if(NOT LibAJANTV2_FIND_QUIETLY)
|
|
message(STATUS "aja: Using new libajantv2 library")
|
|
endif()
|
|
endif()
|
|
|
|
find_library(
|
|
LibAJANTV2_LIBRARY_RELEASE
|
|
NAMES ajantv2 libajantv2
|
|
HINTS ${PC_LibAJANTV2_LIBRARY_DIRS}
|
|
PATHS /usr/lib /usr/local/lib
|
|
DOC "LibAJANTV2 location")
|
|
|
|
find_library(
|
|
LibAJANTV2_LIBRARY_DEBUG
|
|
NAMES ajantv2d libajantv2d
|
|
HINTS ${PC_LibAJANTV2_LIBRARY_DIRS}
|
|
PATHS /usr/lib /usr/local/lib
|
|
DOC "LibAJANTV2 debug location.")
|
|
|
|
if(PC_LibAJANTV2_VERSION VERSION_GREATER 0)
|
|
set(LibAJANTV2_VERSION ${PC_LibAJANTV2_VERSION})
|
|
else()
|
|
if(NOT LibAJANTV2_FIND_QUIETLY)
|
|
message(AUTHOR_WARNING "Failed to find LibAJANTV2 version.")
|
|
endif()
|
|
set(LibAJANTV2_VERSION 0.0.0)
|
|
endif()
|
|
|
|
include(SelectLibraryConfigurations)
|
|
select_library_configurations(LibAJANTV2)
|
|
|
|
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows")
|
|
set(LibAJANTV2_ERROR_REASON "Ensure obs-deps is provided as part of CMAKE_PREFIX_PATH.")
|
|
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
|
|
set(LibAJANTV2_ERROR_REASON "Ensure ajantv2 static libraries are available in local library paths.")
|
|
endif()
|
|
|
|
find_package_handle_standard_args(
|
|
LibAJANTV2
|
|
REQUIRED_VARS LibAJANTV2_LIBRARY LibAJANTV2_INCLUDE_DIR
|
|
VERSION_VAR LibAJANTV2_VERSION REASON_FAILURE_MESSAGE ${LibAJANTV2_ERROR_REASON})
|
|
mark_as_advanced(LibAJANTV2_LIBRARY LibAJANTV2_INCLUDE_DIR)
|
|
unset(LibAJANTV2_ERROR_REASON)
|
|
|
|
if(LibAJANTV2_FOUND)
|
|
list(
|
|
APPEND
|
|
LibAJANTV2_INCLUDE_DIRS
|
|
${LibAJANTV2_INCLUDE_DIR}
|
|
${LibAJANTV2_INCLUDE_DIR}/ajaanc
|
|
${LibAJANTV2_INCLUDE_DIR}/ajabase
|
|
${LibAJANTV2_INCLUDE_DIR}/ajantv2
|
|
${LibAJANTV2_INCLUDE_DIR}/ajantv2/includes)
|
|
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
|
|
list(APPEND LibAJANTV2_INCLUDE_DIRS ${LibAJANTV2_INCLUDE_DIR}/ajantv2/src/win)
|
|
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin")
|
|
list(APPEND LibAJANTV2_INCLUDE_DIRS ${LibAJANTV2_INCLUDE_DIR}/ajantv2/src/mac)
|
|
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux")
|
|
list(APPEND LibAJANTV2_INCLUDE_DIRS ${LibAJANTV2_INCLUDE_DIR}/ajantv2/src/lin)
|
|
endif()
|
|
|
|
set(LibAJANTV2_LIBRARIES ${LibAJANTV2_LIBRARY})
|
|
mark_as_advanced(LibAJANTV2_INCLUDE_DIR LibAJANTV2_LIBRARY)
|
|
|
|
if(NOT TARGET AJA::LibAJANTV2)
|
|
if(IS_ABSOLUTE "${LibAJANTV2_LIBRARY_RELEASE}")
|
|
add_library(AJA::LibAJANTV2 STATIC IMPORTED)
|
|
set_property(TARGET AJA::LibAJANTV2 PROPERTY IMPORTED_LOCATION "${LibAJANTV2_LIBRARY_RELEASE}")
|
|
else()
|
|
add_library(AJA::LibAJANTV2 INTERFACE IMPORTED)
|
|
set_property(TARGET AJA::LibAJANTV2 PROPERTY IMPORTED_LIBNAME "${LibAJANTV2_LIBRARY_RELEASE}")
|
|
endif()
|
|
|
|
set_target_properties(
|
|
AJA::LibAJANTV2
|
|
PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_LibAJANTV2_CFLAGS_OTHER}"
|
|
INTERFACE_INCLUDE_DIRECTORIES "${LibAJANTV2_INCLUDE_DIR}"
|
|
VERSION ${LibAJANTV2_VERSION}
|
|
IMPORTED_CONFIGURATIONS Release)
|
|
|
|
if(LibAJANTV2_LIBRARY_DEBUG)
|
|
if(IS_ABSOLUTE "${LibAJANTV2_LIBRARY_DEBUG}")
|
|
set_property(TARGET AJA::LibAJANTV2 PROPERTY IMPORTED_LOCATION_DEBUG "${LibAJANTV2_LIBRARY_DEBUG}")
|
|
else()
|
|
set_property(TARGET AJA::LibAJANTV2 PROPERTY IMPORTED_LIBNAME_DEBUG "${LibAJANTV2_LIBRARY_DEBUG}")
|
|
endif()
|
|
set_property(
|
|
TARGET AJA::LibAJANTV2
|
|
APPEND
|
|
PROPERTY IMPORTED_CONFIGURATIONS Debug)
|
|
endif()
|
|
|
|
set_target_properties(AJA::LibAJANTV2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LibAJANTV2_INCLUDE_DIRS}")
|
|
set_target_properties(AJA::LibAJANTV2 PROPERTIES INTERFACE_LINK_OPTIONS $<$<PLATFORM_ID:Windows>:/IGNORE:4099>)
|
|
set_property(
|
|
TARGET AJA::LibAJANTV2
|
|
APPEND
|
|
PROPERTY INTERFACE_LINK_LIBRARIES
|
|
$<$<PLATFORM_ID:Windows>:netapi32.lib>
|
|
$<$<PLATFORM_ID:Windows>:setupapi.lib>
|
|
$<$<PLATFORM_ID:Windows>:shlwapi.lib>
|
|
$<$<PLATFORM_ID:Windows>:wbemuuid.lib>
|
|
$<$<PLATFORM_ID:Windows>:winmm.lib>
|
|
$<$<PLATFORM_ID:Windows>:ws2_32.lib>
|
|
"$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,AppKit.framework>>"
|
|
"$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,CoreFoundation.framework>>"
|
|
"$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,IOKit.framework>>")
|
|
set_property(
|
|
TARGET AJA::LibAJANTV2
|
|
APPEND
|
|
PROPERTY INTERFACE_COMPILE_DEFINITIONS "$<$<BOOL:${OS_WINDOWS}>:AJA_WINDOWS;_WINDOWS;WIN32;MSWindows>"
|
|
"$<$<AND:$<BOOL:${OS_WINDOWS}>,$<CONFIG:DEBUG>>:_DEBUG;_NDEBUG>" "$<$<BOOL:${OS_MACOS}>:AJAMac;AJA_MAC>"
|
|
"$<$<BOOL:${OS_LINUX}>:AJA_LINUX;AJALinux>")
|
|
endif()
|
|
endif()
|
|
|
|
include(FeatureSummary)
|
|
set_package_properties(
|
|
LibAJANTV2 PROPERTIES
|
|
URL "https://www.aja.com"
|
|
DESCRIPTION
|
|
"AJA NTV2 SDK - AJA simplifies professional digital video workflows with a line of award-winning products designed and manufactured in Grass Valley, CA."
|
|
)
|