FindLibAJANTV2.cmake 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. #[=======================================================================[.rst
  2. FindLibAJANTV2
  3. ----------
  4. FindModule for LibAJANTV2 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` target ``LibAJANTV2::LibAJANTV2``.
  11. Result Variables
  12. ^^^^^^^^^^^^^^^^
  13. This module sets the following variables:
  14. ``LibAJANTV2_FOUND``
  15. True, if all required components and the core library were found.
  16. ``LibAJANTV2_VERSION``
  17. Detected version of found LibAJANTV2 libraries.
  18. ``LibAJANTV2_INCLUDE_DIRS``
  19. Include directories needed for LibAJANTV2.
  20. ``LibAJANTV2_LIBRARIES``
  21. Libraries needed to link to LibAJANTV2.
  22. Cache variables
  23. ^^^^^^^^^^^^^^^
  24. The following cache variables may also be set:
  25. ``LibAJANTV2_LIBRARY_RELEASE``
  26. Path to the library component of LibAJANTV2 in non-debug configuration.
  27. ``LibAJANTV2_LIBRARY_DEBUG``
  28. Optional path to the library component of LibAJANTV2 in debug configuration.
  29. ``LibAJANTV2_INCLUDE_DIR``
  30. Directory containing ``LibAJANTV2.h``.
  31. #]=======================================================================]
  32. include(FindPackageHandleStandardArgs)
  33. find_package(PkgConfig QUIET)
  34. if(PKG_CONFIG_FOUND)
  35. pkg_search_module(PC_LibAJANTV2 QUIET ajantv2)
  36. endif()
  37. find_path(
  38. _LIBAJANTV2_NEW_INCLUDE_DIR
  39. NAMES libajantv2
  40. HINTS ${PC_LibAJANTV2_INCLUDE_DIRS}
  41. PATHS /usr/include /usr/local/include
  42. DOC "LibAJANTV2 (new) include directory"
  43. )
  44. if(${_LIBAJANTV2_NEW_INCLUDE_DIR} STREQUAL "_LIBAJANTV2_NEW_INCLUDE_DIR-NOTFOUND")
  45. find_path(
  46. _LIBAJANTV2_OLD_INCLUDE_DIR
  47. NAMES ajalibraries
  48. HINTS ${PC_LibAJANTV2_INCLUDE_DIRS}
  49. PATHS /usr/include /usr/local/include
  50. DOC "LibAJANTV2 (old) include directory"
  51. )
  52. if(NOT ${_LIBAJANTV2_OLD_INCLUDE_DIR} STREQUAL "_LIBAJANTV2_OLD_INCLUDE_DIR-NOTFOUND")
  53. set(LibAJANTV2_INCLUDE_DIR ${_LIBAJANTV2_OLD_INCLUDE_DIR}/ajalibraries)
  54. if(NOT LibAJANTV2_FIND_QUIETLY)
  55. message(DEPRECATION "aja: Using old ntv2 library")
  56. endif()
  57. endif()
  58. else()
  59. set(LibAJANTV2_INCLUDE_DIR ${_LIBAJANTV2_NEW_INCLUDE_DIR}/libajantv2)
  60. if(NOT LibAJANTV2_FIND_QUIETLY)
  61. message(STATUS "aja: Using new libajantv2 library")
  62. endif()
  63. endif()
  64. find_library(
  65. LibAJANTV2_LIBRARY_RELEASE
  66. NAMES ajantv2 libajantv2
  67. HINTS ${PC_LibAJANTV2_LIBRARY_DIRS}
  68. PATHS /usr/lib /usr/local/lib
  69. DOC "LibAJANTV2 location"
  70. )
  71. find_library(
  72. LibAJANTV2_LIBRARY_DEBUG
  73. NAMES ajantv2d libajantv2d
  74. HINTS ${PC_LibAJANTV2_LIBRARY_DIRS}
  75. PATHS /usr/lib /usr/local/lib
  76. DOC "LibAJANTV2 debug location."
  77. )
  78. if(PC_LibAJANTV2_VERSION VERSION_GREATER 0)
  79. set(LibAJANTV2_VERSION ${PC_LibAJANTV2_VERSION})
  80. else()
  81. if(NOT LibAJANTV2_FIND_QUIETLY)
  82. message(AUTHOR_WARNING "Failed to find LibAJANTV2 version.")
  83. endif()
  84. set(LibAJANTV2_VERSION 0.0.0)
  85. endif()
  86. include(SelectLibraryConfigurations)
  87. select_library_configurations(LibAJANTV2)
  88. if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows")
  89. set(LibAJANTV2_ERROR_REASON "Ensure obs-deps is provided as part of CMAKE_PREFIX_PATH.")
  90. elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
  91. set(LibAJANTV2_ERROR_REASON "Ensure ajantv2 static libraries are available in local library paths.")
  92. endif()
  93. find_package_handle_standard_args(
  94. LibAJANTV2
  95. REQUIRED_VARS LibAJANTV2_LIBRARY LibAJANTV2_INCLUDE_DIR
  96. VERSION_VAR LibAJANTV2_VERSION
  97. REASON_FAILURE_MESSAGE ${LibAJANTV2_ERROR_REASON}
  98. )
  99. mark_as_advanced(LibAJANTV2_LIBRARY LibAJANTV2_INCLUDE_DIR)
  100. unset(LibAJANTV2_ERROR_REASON)
  101. if(LibAJANTV2_FOUND)
  102. list(
  103. APPEND
  104. LibAJANTV2_INCLUDE_DIRS
  105. ${LibAJANTV2_INCLUDE_DIR}
  106. ${LibAJANTV2_INCLUDE_DIR}/ajaanc
  107. ${LibAJANTV2_INCLUDE_DIR}/ajabase
  108. ${LibAJANTV2_INCLUDE_DIR}/ajantv2
  109. ${LibAJANTV2_INCLUDE_DIR}/ajantv2/includes
  110. )
  111. if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
  112. list(APPEND LibAJANTV2_INCLUDE_DIRS ${LibAJANTV2_INCLUDE_DIR}/ajantv2/src/win)
  113. elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin")
  114. list(APPEND LibAJANTV2_INCLUDE_DIRS ${LibAJANTV2_INCLUDE_DIR}/ajantv2/src/mac)
  115. elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux")
  116. list(APPEND LibAJANTV2_INCLUDE_DIRS ${LibAJANTV2_INCLUDE_DIR}/ajantv2/src/lin)
  117. endif()
  118. set(LibAJANTV2_LIBRARIES ${LibAJANTV2_LIBRARY})
  119. mark_as_advanced(LibAJANTV2_INCLUDE_DIR LibAJANTV2_LIBRARY)
  120. if(NOT TARGET AJA::LibAJANTV2)
  121. if(IS_ABSOLUTE "${LibAJANTV2_LIBRARY_RELEASE}")
  122. add_library(AJA::LibAJANTV2 STATIC IMPORTED)
  123. set_property(TARGET AJA::LibAJANTV2 PROPERTY IMPORTED_LOCATION "${LibAJANTV2_LIBRARY_RELEASE}")
  124. else()
  125. add_library(AJA::LibAJANTV2 INTERFACE IMPORTED)
  126. set_property(TARGET AJA::LibAJANTV2 PROPERTY IMPORTED_LIBNAME "${LibAJANTV2_LIBRARY_RELEASE}")
  127. endif()
  128. set_target_properties(
  129. AJA::LibAJANTV2
  130. PROPERTIES
  131. INTERFACE_COMPILE_OPTIONS "${PC_LibAJANTV2_CFLAGS_OTHER}"
  132. INTERFACE_INCLUDE_DIRECTORIES "${LibAJANTV2_INCLUDE_DIR}"
  133. VERSION ${LibAJANTV2_VERSION}
  134. IMPORTED_CONFIGURATIONS Release
  135. )
  136. if(LibAJANTV2_LIBRARY_DEBUG)
  137. if(IS_ABSOLUTE "${LibAJANTV2_LIBRARY_DEBUG}")
  138. set_property(TARGET AJA::LibAJANTV2 PROPERTY IMPORTED_LOCATION_DEBUG "${LibAJANTV2_LIBRARY_DEBUG}")
  139. else()
  140. set_property(TARGET AJA::LibAJANTV2 PROPERTY IMPORTED_LIBNAME_DEBUG "${LibAJANTV2_LIBRARY_DEBUG}")
  141. endif()
  142. set_property(TARGET AJA::LibAJANTV2 APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug)
  143. endif()
  144. set_target_properties(AJA::LibAJANTV2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LibAJANTV2_INCLUDE_DIRS}")
  145. set_target_properties(AJA::LibAJANTV2 PROPERTIES INTERFACE_LINK_OPTIONS $<$<PLATFORM_ID:Windows>:/IGNORE:4099>)
  146. set_property(
  147. TARGET AJA::LibAJANTV2
  148. APPEND
  149. PROPERTY
  150. INTERFACE_LINK_LIBRARIES
  151. $<$<PLATFORM_ID:Windows>:netapi32.lib>
  152. $<$<PLATFORM_ID:Windows>:setupapi.lib>
  153. $<$<PLATFORM_ID:Windows>:shlwapi.lib>
  154. $<$<PLATFORM_ID:Windows>:wbemuuid.lib>
  155. $<$<PLATFORM_ID:Windows>:winmm.lib>
  156. $<$<PLATFORM_ID:Windows>:ws2_32.lib>
  157. "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,AppKit.framework>>"
  158. "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,CoreFoundation.framework>>"
  159. "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,IOKit.framework>>"
  160. )
  161. set_property(
  162. TARGET AJA::LibAJANTV2
  163. APPEND
  164. PROPERTY
  165. INTERFACE_COMPILE_DEFINITIONS
  166. "$<$<BOOL:${OS_WINDOWS}>:AJA_WINDOWS;_WINDOWS;WIN32;MSWindows>"
  167. "$<$<AND:$<BOOL:${OS_WINDOWS}>,$<CONFIG:DEBUG>>:_DEBUG;_NDEBUG>"
  168. "$<$<BOOL:${OS_MACOS}>:AJAMac;AJA_MAC>"
  169. "$<$<BOOL:${OS_LINUX}>:AJA_LINUX;AJALinux>"
  170. )
  171. endif()
  172. endif()
  173. include(FeatureSummary)
  174. set_package_properties(
  175. LibAJANTV2
  176. PROPERTIES
  177. URL "https://www.aja.com"
  178. DESCRIPTION
  179. "AJA NTV2 SDK - AJA simplifies professional digital video workflows with a line of award-winning products designed and manufactured in Grass Valley, CA."
  180. )