From 6d54be2cc078351b4ce1e469bedc4a976f4e3636 Mon Sep 17 00:00:00 2001 From: yuangongji Date: Sat, 14 Mar 2020 11:13:38 +0800 Subject: [PATCH] autoconf: fix getaddrinfo checking errors on mingw `AC_CHECK_FUNCS` can not properly check `getaddrinfo` because this function requires some special headers on mingw. Using `AC_CHECK_DECL` can effectively solve this issue. Same for - getnameinfo - getprotobynumber - getservbyname - inet_ntop - inet_pton --- configure.ac | 40 ++++++++++++++++++++++++++++++---------- m4/ax_check_funcs_ex.m4 | 22 ++++++++++++++++++++++ 2 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 m4/ax_check_funcs_ex.m4 diff --git a/configure.ac b/configure.ac index 31a6614d..3504d182 100644 --- a/configure.ac +++ b/configure.ac @@ -251,6 +251,7 @@ AC_CHECK_HEADERS([ \ sys/wait.h \ sys/random.h \ errno.h \ + afunix.h \ ]) case "${host_os}" in @@ -347,7 +348,7 @@ AM_CONDITIONAL(BUILD_MIDIPIX, test x$midipix = xtrue) AM_CONDITIONAL(BUILD_WITH_NO_UNDEFINED, test x$bwin32 = xtrue || test x$cygwin = xtrue || test x$midipix = xtrue) if test x$bwin32 = xtrue; then - AC_SEARCH_LIBS([getservbyname],[ws2_32]) + AC_HAVE_LIBRARY([ws2_32]) fi dnl Checks for typedefs, structures, and compiler characteristics. @@ -367,11 +368,7 @@ AC_CHECK_FUNCS([ \ getegid \ geteuid \ getifaddrs \ - getnameinfo \ - getprotobynumber \ gettimeofday \ - inet_ntop \ - inet_pton \ issetugid \ mach_absolute_time \ mmap \ @@ -396,17 +393,36 @@ AC_CHECK_FUNCS([ \ unsetenv \ usleep \ vasprintf \ - getservbyname \ getrandom \ ]) -AC_CHECK_FUNCS(_gmtime64_s, [have__gmtime64_s=yes], ) -if test "x$have__gmtime64_s" != "xyes"; then - AC_CHECK_FUNCS(_gmtime64) -fi +AS_IF([test x$bwin32 = xtrue], + AC_CHECK_FUNCS(_gmtime64_s, , [AC_CHECK_FUNCS(_gmtime64)]) +) AM_CONDITIONAL(STRLCPY_IMPL, [test x"$ac_cv_func_strlcpy" = xno]) +m4_define([funcstochk], + [getnameinfo + getprotobynumber + getservbyname + inet_ntop + inet_pton] +) + +AS_IF([test x$bwin32 = xtrue], + [AX_CHECK_DECLS_EX([funcstochk getaddrinfo], + [#ifdef _WIN32 + #include + #include + #endif])], + [AC_CHECK_FUNCS(m4_normalize(funcstochk))] +) + +m4_undefine([funcstochk]) + +dnl check getaddrinfo and gethostbyname_r for non-windows +AS_IF([test x$bwin32 = xfalse], [ AC_CACHE_CHECK( [for getaddrinfo], [libevent_cv_getaddrinfo], @@ -486,6 +502,7 @@ AC_CHECK_FUNC(gethostbyname_r, [ ]) fi +]) dnl end of checking getaddrinfo and gethostbyname_r AC_MSG_CHECKING(for F_SETFD in fcntl.h) AC_EGREP_CPP(yes, @@ -739,6 +756,9 @@ AC_CHECK_TYPES([struct linger],,, #ifdef HAVE_SYS_SOCKET_H #include #endif +#ifdef _WIN32 +#include +#endif ]) AC_MSG_CHECKING([for socklen_t]) diff --git a/m4/ax_check_funcs_ex.m4 b/m4/ax_check_funcs_ex.m4 new file mode 100644 index 00000000..7aaa58b0 --- /dev/null +++ b/m4/ax_check_funcs_ex.m4 @@ -0,0 +1,22 @@ +# Check if the function is available. +# HAVE_XXX will be defined if yes. + +# $1: the name of function +# $2: the headers in where the function declared +AC_DEFUN([AX_CHECK_DECL_EX], [dnl + AS_IF([test "x$2" = "x"], [AC_MSG_ERROR([header not privided])]) + AS_VAR_PUSHDEF([have_func_var], [HAVE_[]m4_toupper($1)]) + AC_CHECK_DECL([$1],dnl + [AC_DEFINE([have_func_var], [1], [Define to 1 if you have the `$1' function.])],,dnl + [$2]dnl + ) + AS_VAR_POPDEF([have_func_var])dnl +]) + +AC_DEFUN([AX_CHECK_DECLS_EX], [dnl + AS_IF([test "x$2" = "x"], [AC_MSG_ERROR([header not privided])]) + m4_foreach([decl],dnl + m4_split(m4_normalize($1)),dnl + [AX_CHECK_DECL_EX([decl], [$2])]dnl + ) +]) -- 2.40.0