FindALSA.cmake 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. # file LICENSE.rst or https://cmake.org/licensing for details.
  3. #[=======================================================================[.rst:
  4. FindALSA
  5. --------
  6. Finds the Advanced Linux Sound Architecture (ALSA) library (``asound``):
  7. .. code-block:: cmake
  8. find_package(ALSA [<version>] [...])
  9. Imported Targets
  10. ^^^^^^^^^^^^^^^^
  11. This module provides the following :ref:`Imported Targets`:
  12. ``ALSA::ALSA``
  13. .. versionadded:: 3.12
  14. Target encapsulating the ALSA library usage requirements. This target is
  15. available only if ALSA is found.
  16. Result Variables
  17. ^^^^^^^^^^^^^^^^
  18. This module defines the following variables:
  19. ``ALSA_FOUND``
  20. Boolean indicating whether (the requested version of) ALSA library is found.
  21. ``ALSA_VERSION``
  22. .. versionadded:: 4.2
  23. The version of ALSA found.
  24. ``ALSA_LIBRARIES``
  25. List of libraries needed for linking to use ALSA library.
  26. ``ALSA_INCLUDE_DIRS``
  27. Include directories containing headers needed to use ALSA library.
  28. Cache Variables
  29. ^^^^^^^^^^^^^^^
  30. The following cache variables may also be set:
  31. ``ALSA_INCLUDE_DIR``
  32. The ALSA include directory.
  33. ``ALSA_LIBRARY``
  34. The absolute path of the asound library.
  35. Deprecated Variables
  36. ^^^^^^^^^^^^^^^^^^^^
  37. The following variables are provided for backward compatibility:
  38. ``ALSA_VERSION_STRING``
  39. .. deprecated:: 4.2
  40. Superseded by the ``ALSA_VERSION``.
  41. The version of ALSA found.
  42. Examples
  43. ^^^^^^^^
  44. Finding the ALSA library and linking it to a project target:
  45. .. code-block:: cmake
  46. find_package(ALSA)
  47. target_link_libraries(project_target PRIVATE ALSA::ALSA)
  48. #]=======================================================================]
  49. cmake_policy(PUSH)
  50. cmake_policy(SET CMP0159 NEW) # file(STRINGS) with REGEX updates CMAKE_MATCH_<n>
  51. find_path(ALSA_INCLUDE_DIR NAMES alsa/asoundlib.h
  52. DOC "The ALSA (asound) include directory"
  53. )
  54. find_library(ALSA_LIBRARY NAMES asound
  55. DOC "The ALSA (asound) library"
  56. )
  57. if(ALSA_INCLUDE_DIR AND EXISTS "${ALSA_INCLUDE_DIR}/alsa/version.h")
  58. file(STRINGS "${ALSA_INCLUDE_DIR}/alsa/version.h" alsa_version_str REGEX "^#define[\t ]+SND_LIB_VERSION_STR[\t ]+\".*\"")
  59. string(REGEX REPLACE "^.*SND_LIB_VERSION_STR[\t ]+\"([^\"]*)\".*$" "\\1" ALSA_VERSION "${alsa_version_str}")
  60. set(ALSA_VERSION_STRING "${ALSA_VERSION}")
  61. unset(alsa_version_str)
  62. endif()
  63. include(FindPackageHandleStandardArgs)
  64. find_package_handle_standard_args(ALSA
  65. REQUIRED_VARS ALSA_LIBRARY ALSA_INCLUDE_DIR
  66. VERSION_VAR ALSA_VERSION)
  67. if(ALSA_FOUND)
  68. set( ALSA_LIBRARIES ${ALSA_LIBRARY} )
  69. set( ALSA_INCLUDE_DIRS ${ALSA_INCLUDE_DIR} )
  70. if(NOT TARGET ALSA::ALSA)
  71. add_library(ALSA::ALSA UNKNOWN IMPORTED)
  72. set_target_properties(ALSA::ALSA PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${ALSA_INCLUDE_DIRS}")
  73. set_property(TARGET ALSA::ALSA APPEND PROPERTY IMPORTED_LOCATION "${ALSA_LIBRARY}")
  74. endif()
  75. endif()
  76. mark_as_advanced(ALSA_INCLUDE_DIR ALSA_LIBRARY)
  77. cmake_policy(POP)