1include(FindPackageHandleStandardArgs)
2
3function(__cares_get_version)
4  if(c-ares_INCLUDE_DIR AND EXISTS "${c-ares_INCLUDE_DIR}/ares_version.h")
5    file(STRINGS "${c-ares_INCLUDE_DIR}/ares_version.h" _cares_version_str REGEX "^#define ARES_VERSION_STR \"([^\n]*)\"$")
6    if(_cares_version_str MATCHES "#define ARES_VERSION_STR \"([^\n]*)\"")
7      set(c-ares_VERSION "${CMAKE_MATCH_1}" PARENT_SCOPE)
8    endif()
9  endif()
10endfunction()
11
12# We need to disable version checking, since c-ares does not provide it.
13set(_cares_version_var_suffixes "" _MAJOR _MINOR _PATCH _TWEAK _COUNT)
14foreach(_suffix IN LISTS _cares_version_var_suffixes)
15  set(_cares_save_FIND_VERSION${_suffix} ${c-ares_FIND_VERSION${_suffix}})
16  unset(c-ares_FIND_VERSION${_suffix})
17endforeach()
18find_package(c-ares CONFIG)
19foreach(_suffix IN LISTS _cares_version_var_suffixes)
20  set(c-ares_FIND_VERSION${_suffix} ${_cares_save_FIND_VERSION${_suffix}})
21endforeach()
22
23if(c-ares_FOUND)
24  if(NOT DEFINED c-ares_VERSION)
25    __cares_get_version()
26  endif()
27
28  find_package_handle_standard_args(c-ares CONFIG_MODE)
29  return()
30endif()
31
32find_path(c-ares_INCLUDE_DIR NAMES ares.h)
33__cares_get_version()
34
35find_library(c-ares_LIBRARY cares)
36
37find_package_handle_standard_args(c-ares
38  REQUIRED_VARS c-ares_INCLUDE_DIR c-ares_LIBRARY
39  VERSION_VAR c-ares_VERSION
40  )
41
42if(c-ares_FOUND)
43  add_library(c-ares::cares UNKNOWN IMPORTED)
44  set_target_properties(c-ares::cares PROPERTIES
45    IMPORTED_LOCATION "${c-ares_LIBRARY}"
46    INTERFACE_INCLUDE_DIRECTORIES "${c-ares_INCLUDE_DIR}"
47    )
48endif()
49