diff options
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | acinclude.m4 | 31 | ||||
-rw-r--r-- | cmake/modules/FindCARES.cmake | 12 |
3 files changed, 41 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ffabea549..77e41d49fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -878,6 +878,8 @@ endif() # C Asynchronous resolver if(ENABLE_CARES) set(PACKAGELIST ${PACKAGELIST} CARES) + # Minimum version needed. + set(CARES_OPTIONS "1.5.0" REQUIRED) endif() # Zlib compression diff --git a/acinclude.m4 b/acinclude.m4 index 4ab5bcbdfb..2235c4d889 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -823,9 +823,34 @@ AC_DEFUN([AC_WIRESHARK_C_ARES_CHECK], if test "x$want_c_ares" = "xyes"; then AC_CHECK_LIB(cares, ares_init, [ - C_ARES_LIBS=-lcares - AC_DEFINE(HAVE_C_ARES, 1, [Define to use c-ares library]) - have_good_c_ares=yes + # + # Make sure we have c-ares 1.5 or later; we don't + # support the older API. + # + AC_MSG_CHECKING([whether we have c-ares 1.5 or later]) + AC_TRY_COMPILE( + [ +#include <ares.h> +#include <ares_version.h> + ], + [ +#if ((ARES_VERSION_MAJOR < 1) || \ + (1 == ARES_VERSION_MAJOR == 1 && ARES_VERSION_MINOR < 5)) +#error You lose +#else + return 0; +#endif + ], + [ + AC_MSG_RESULT([yes]) + C_ARES_LIBS=-lcares + AC_DEFINE(HAVE_C_ARES, 1, [Define to use c-ares library]) + have_good_c_ares=yes + ], + [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Pre-1.5 versions of c-ares aren't supported]) + ]) ]) else AC_MSG_RESULT(not required) diff --git a/cmake/modules/FindCARES.cmake b/cmake/modules/FindCARES.cmake index 11719a601a..2725a61d44 100644 --- a/cmake/modules/FindCARES.cmake +++ b/cmake/modules/FindCARES.cmake @@ -22,10 +22,20 @@ FIND_PATH(CARES_INCLUDE_DIR ares.h HINTS "${CARES_HINTS}/include" ) SET(CARES_NAMES cares libcares-2) FIND_LIBRARY(CARES_LIBRARY NAMES ${CARES_NAMES} HINTS "${CARES_HINTS}/lib" ) +# Try to retrieve version from header if found +if(CARES_INCLUDE_DIR) + set(_version_regex "^#define[ \t]+ARES_VERSION_STR[ \t]+\"([^\"]+)\".*") + file(STRINGS "${CARES_INCLUDE_DIR}/ares_version.h" CARES_VERSION REGEX "${_version_regex}") + string(REGEX REPLACE "${_version_regex}" "\\1" CARES_VERSION "${CARES_VERSION}") + unset(_version_regex) +endif() + # handle the QUIETLY and REQUIRED arguments and set CARES_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(CARES DEFAULT_MSG CARES_LIBRARY CARES_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(CARES + REQUIRED_VARS CARES_LIBRARY CARES_INCLUDE_DIR + VERSION_VAR CARES_VERSION) IF(CARES_FOUND) SET( CARES_LIBRARIES ${CARES_LIBRARY} ) |