FindAsio.cmake 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #[=======================================================================[.rst
  2. FindAsio
  3. ----------
  4. FindModule for Asio and the associated library
  5. Imported Targets
  6. ^^^^^^^^^^^^^^^^
  7. .. versionadded:: 2.0
  8. This module defines the :prop_tgt:`IMPORTED` target ``Asio::Asio``.
  9. Result Variables
  10. ^^^^^^^^^^^^^^^^
  11. This module sets the following variables:
  12. ``Asio_FOUND``
  13. True, if the library was found.
  14. ``Asio_VERSION``
  15. Detected version of found Asio library.
  16. Cache variables
  17. ^^^^^^^^^^^^^^^
  18. The following cache variables may also be set:
  19. ``Asio_INCLUDE_DIR``
  20. Directory containing ``asio.hpp``.
  21. #]=======================================================================]
  22. # cmake-format: off
  23. # cmake-lint: disable=C0103
  24. # cmake-lint: disable=C0301
  25. # cmake-format: on
  26. include(FindPackageHandleStandardArgs)
  27. find_package(PkgConfig QUIET)
  28. if(PKG_CONFIG_FOUND)
  29. pkg_search_module(PC_Asio QUIET asio)
  30. endif()
  31. find_path(
  32. Asio_INCLUDE_DIR
  33. NAMES asio.hpp
  34. HINTS ${PC_Asio_INCLUDE_DIRS}
  35. PATHS /usr/include /usr/local/include
  36. DOC "Asio include directory")
  37. if(PC_Asio_VERSION VERSION_GREATER 0)
  38. set(Asio_VERSION ${PC_Asio_VERSION})
  39. elseif(EXISTS "${Asio_INCLUDE_DIR}/asio/version.hpp")
  40. file(STRINGS "${Asio_INCLUDE_DIR}/asio/version.hpp" _version_string
  41. REGEX "#define[ \t]+ASIO_VERSION[ \t]+[0-9]+[ \t]+\/\/[ \t][0-9]+\.[0-9]+\.[0-9]+")
  42. string(REGEX REPLACE "#define[ \t]+ASIO_VERSION[ \t]+[0-9]+[ \t]+\/\/[ \t]([0-9]+\.[0-9]+\.[0-9]+)" "\\1"
  43. Asio_VERSION "${_version_string}")
  44. else()
  45. if(NOT Asio_FIND_QUIETLY)
  46. message(AUTHOR_WARNING "Failed to find Asio version.")
  47. endif()
  48. set(Asio_VERSION 0.0.0)
  49. endif()
  50. if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows")
  51. set(Asio_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.")
  52. elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
  53. set(Asio_ERROR_REASON "Ensure Asio library is available in local include paths.")
  54. endif()
  55. find_package_handle_standard_args(
  56. Asio
  57. REQUIRED_VARS Asio_INCLUDE_DIR
  58. VERSION_VAR Asio_VERSION REASON_FAILURE_MESSAGE "${Asio_ERROR_REASON}")
  59. mark_as_advanced(Asio_INCLUDE_DIR)
  60. unset(Asio_ERROR_REASON)
  61. if(Asio_FOUND)
  62. if(NOT TARGET Asio::Asio)
  63. add_library(Asio::Asio INTERFACE IMPORTED)
  64. set_target_properties(Asio::Asio PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${Asio_INCLUDE_DIR}")
  65. endif()
  66. endif()
  67. include(FeatureSummary)
  68. set_package_properties(
  69. Asio PROPERTIES
  70. URL "http://think-async.com/Asio"
  71. DESCRIPTION
  72. "Asio is a cross-platform C++ library for network and low-level I/O programming that provides developers with a consistent asynchronous model using a modern C++ approach."
  73. )