FindAsio.cmake 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. include(FindPackageHandleStandardArgs)
  23. find_package(PkgConfig QUIET)
  24. if(PKG_CONFIG_FOUND)
  25. pkg_search_module(PC_Asio QUIET asio)
  26. endif()
  27. find_path(
  28. Asio_INCLUDE_DIR
  29. NAMES asio.hpp
  30. HINTS ${PC_Asio_INCLUDE_DIRS}
  31. PATHS /usr/include /usr/local/include
  32. DOC "Asio include directory"
  33. )
  34. if(PC_Asio_VERSION VERSION_GREATER 0)
  35. set(Asio_VERSION ${PC_Asio_VERSION})
  36. elseif(EXISTS "${Asio_INCLUDE_DIR}/asio/version.hpp")
  37. file(
  38. STRINGS
  39. "${Asio_INCLUDE_DIR}/asio/version.hpp"
  40. _version_string
  41. REGEX "#define[ \t]+ASIO_VERSION[ \t]+[0-9]+[ \t]+\\/\\/[ \t][0-9]+\\.[0-9]+\\.[0-9]+"
  42. )
  43. string(
  44. REGEX REPLACE
  45. "#define[ \t]+ASIO_VERSION[ \t]+[0-9]+[ \t]+\\/\\/[ \t]([0-9]+\\.[0-9]+\\.[0-9]+)"
  46. "\\1"
  47. Asio_VERSION
  48. "${_version_string}"
  49. )
  50. else()
  51. if(NOT Asio_FIND_QUIETLY)
  52. message(AUTHOR_WARNING "Failed to find Asio version.")
  53. endif()
  54. set(Asio_VERSION 0.0.0)
  55. endif()
  56. if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows")
  57. set(Asio_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.")
  58. elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
  59. set(Asio_ERROR_REASON "Ensure Asio library is available in local include paths.")
  60. endif()
  61. find_package_handle_standard_args(
  62. Asio
  63. REQUIRED_VARS Asio_INCLUDE_DIR
  64. VERSION_VAR Asio_VERSION
  65. REASON_FAILURE_MESSAGE "${Asio_ERROR_REASON}"
  66. )
  67. mark_as_advanced(Asio_INCLUDE_DIR)
  68. unset(Asio_ERROR_REASON)
  69. if(Asio_FOUND)
  70. if(NOT TARGET Asio::Asio)
  71. add_library(Asio::Asio INTERFACE IMPORTED)
  72. set_target_properties(Asio::Asio PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${Asio_INCLUDE_DIR}")
  73. endif()
  74. endif()
  75. include(FeatureSummary)
  76. set_package_properties(
  77. Asio
  78. PROPERTIES
  79. URL "http://think-async.com/Asio"
  80. DESCRIPTION
  81. "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."
  82. )