AC_PREREQ(2.57)
-dnl Version not hardcoded here. Fetched later from ares_version.h
-AC_INIT([c-ares], [-],
+AC_INIT([c-ares], [1.17.1],
[c-ares mailing list: http://cool.haxx.se/mailman/listinfo/c-ares])
+CARES_VERSION_INFO="6:2:4"
+dnl This flag accepts an argument of the form current[:revision[:age]]. So,
+dnl passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
+dnl 1.
+dnl
+dnl If either revision or age are omitted, they default to 0. Also note that age
+dnl must be less than or equal to the current interface number.
+dnl
+dnl Here are a set of rules to help you update your library version information:
+dnl
+dnl 1.Start with version information of 0:0:0 for each libtool library.
+dnl
+dnl 2.Update the version information only immediately before a public release of
+dnl your software. More frequent updates are unnecessary, and only guarantee
+dnl that the current interface number gets larger faster.
+dnl
+dnl 3.If the library source code has changed at all since the last update, then
+dnl increment revision (c:r+1:a)
+dnl
+dnl 4.If any interfaces have been added, removed, or changed since the last
+dnl update, increment current, and set revision to 0. (c+1:r=0:a)
+dnl
+dnl 5.If any interfaces have been added since the last public release, then
+dnl increment age. (c:r:a+1)
+dnl
+dnl 6.If any interfaces have been removed since the last public release, then
+dnl set age to 0. (c:r:a=0)
+dnl
+AC_SUBST([CARES_VERSION_INFO])
+
XC_OVR_ZZ50
XC_OVR_ZZ60
CARES_OVERRIDE_AUTOCONF
-AC_CONFIG_SRCDIR([ares_ipv6.h])
-AC_CONFIG_HEADERS([ares_config.h ares_build.h])
+AC_CONFIG_SRCDIR([src/lib/ares_ipv6.h])
+AC_CONFIG_HEADERS([src/lib/ares_config.h include/ares_build.h])
AC_CONFIG_MACRO_DIR([m4])
AM_MAINTAINER_MODE
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
CARES_CHECK_OPTION_DEBUG
CARES_CHECK_OPTION_OPTIMIZE
CARES_CHECK_OPTION_WARNINGS
CARES_CHECK_OPTION_WERROR
-CARES_CHECK_OPTION_CURLDEBUG
CARES_CHECK_OPTION_SYMBOL_HIDING
+CARES_CHECK_OPTION_EXPOSE_STATICS
-CARES_CHECK_PATH_SEPARATOR_REQUIRED
+XC_CHECK_PATH_SEPARATOR
dnl SED is mandatory for configure process and libtool.
dnl Set it now, allowing it to be changed later.
dnl AR is mandatory for configure process and libtool.
dnl This is target dependent, so check it as a tool.
-AC_PATH_TOOL([AR], [ar], [not_found],
- [$PATH:/usr/bin:/usr/local/bin])
-if test -z "$AR" || test "$AR" = "not_found"; then
- AC_MSG_ERROR([ar not found in PATH. Cannot continue without ar.])
+if test -z "$AR"; then
+ dnl allow it to be overridden
+ AC_PATH_TOOL([AR], [ar], [not_found],
+ [$PATH:/usr/bin:/usr/local/bin])
+ if test -z "$AR" || test "$AR" = "not_found"; then
+ AC_MSG_ERROR([ar not found in PATH. Cannot continue without ar.])
+ fi
fi
AC_SUBST([AR])
-dnl Remove non-configure distributed ares_build.h
-if test -f ${srcdir}/ares_build.h; then
- rm -f ${srcdir}/ares_build.h
-fi
+AX_CODE_COVERAGE
-AM_INIT_AUTOMAKE
dnl
dnl Detect the canonical host and target build environment
dnl Get system canonical name
AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS])
-CARES_CHECK_PROG_CC
-AM_PROG_CC_C_O
-AC_PROG_INSTALL
+XC_CHECK_PROG_CC
+AX_CXX_COMPILE_STDCXX_11([noext],[optional])
+
+XC_AUTOMAKE
dnl This defines _ALL_SOURCE for AIX
CARES_CHECK_AIX_ALL_SOURCE
;;
esac
-dnl support building of Windows DLLs
-AC_LIBTOOL_WIN32_DLL
-
-dnl force libtool to build static libraries with PIC on AMD64-Linux & FreeBSD
-AC_MSG_CHECKING([if arch-OS host is AMD64-Linux/FreeBSD (to build static libraries with PIC)])
-case $host in
- x86_64*linux*|amd64*freebsd*|ia64*freebsd*)
- AC_MSG_RESULT([yes])
- with_pic=yes
- ;;
- *)
- AC_MSG_RESULT([no])
- ;;
-esac
-
-AC_MSG_CHECKING([if compiler is icc (to build with PIC)])
-case $CC in
- icc | */icc)
- AC_MSG_RESULT([yes])
- with_pic=yes
- ;;
- *)
- AC_MSG_RESULT([no])
- ;;
-esac
-
-dnl libtool setup
-AC_PROG_LIBTOOL
-
-AC_MSG_CHECKING([if we need CARES_BUILDING_LIBRARY])
-use_cppflag_cares_building_library="no"
-use_cppflag_cares_staticlib="no"
-CPPFLAG_CARES_STATICLIB=""
-case $host in
- *-*-mingw*)
- AC_MSG_RESULT(yes)
- use_cppflag_cares_building_library="yes"
- AC_MSG_CHECKING([if we need CARES_STATICLIB])
- if test "X$enable_shared" = "Xno"
- then
- AC_MSG_RESULT(yes)
- use_cppflag_cares_staticlib="yes"
- CPPFLAG_CARES_STATICLIB="-DCARES_STATICLIB"
- else
- AC_MSG_RESULT(no)
- fi
- ;;
- *)
- AC_MSG_RESULT(no)
- ;;
-esac
-AM_CONDITIONAL(USE_CPPFLAG_CARES_BUILDING_LIBRARY, test x$use_cppflag_cares_building_library = xyes)
-AM_CONDITIONAL(USE_CPPFLAG_CARES_STATICLIB, test x$use_cppflag_cares_staticlib = xyes)
-AC_SUBST(CPPFLAG_CARES_STATICLIB)
+XC_LIBTOOL
+
+
+#
+# Automake conditionals based on libtool related checks
+#
+
+AM_CONDITIONAL([CARES_LT_SHLIB_USE_VERSION_INFO],
+ [test "x$xc_lt_shlib_use_version_info" = 'xyes'])
+AM_CONDITIONAL([CARES_LT_SHLIB_USE_NO_UNDEFINED],
+ [test "x$xc_lt_shlib_use_no_undefined" = 'xyes'])
+AM_CONDITIONAL([CARES_LT_SHLIB_USE_MIMPURE_TEXT],
+ [test "x$xc_lt_shlib_use_mimpure_text" = 'xyes'])
+
+#
+# Due to libtool and automake machinery limitations of not allowing
+# specifying separate CPPFLAGS or CFLAGS when compiling objects for
+# inclusion of these in shared or static libraries, we are forced to
+# build using separate configure runs for shared and static libraries
+# on systems where different CPPFLAGS or CFLAGS are mandatory in order
+# to compile objects for each kind of library. Notice that relying on
+# the '-DPIC' CFLAG that libtool provides is not valid given that the
+# user might for example choose to build static libraries with PIC.
+#
+
+#
+# Make our Makefile.am files use the staticlib CPPFLAG only when strictly
+# targeting a static library and not building its shared counterpart.
+#
+
+AM_CONDITIONAL([USE_CPPFLAG_CARES_STATICLIB],
+ [test "x$xc_lt_build_static_only" = 'xyes'])
+
+#
+# Make staticlib CPPFLAG variable and its definition visible in output
+# files unconditionally, providing an empty definition unless strictly
+# targeting a static library and not building its shared counterpart.
+#
+
+CPPFLAG_CARES_STATICLIB=
+if test "x$xc_lt_build_static_only" = 'xyes'; then
+ CPPFLAG_CARES_STATICLIB='-DCARES_STATICLIB'
+fi
+AC_SUBST([CPPFLAG_CARES_STATICLIB])
dnl **********************************************************************
dnl platform/compiler/architecture specific checks/flags
CARES_CHECK_COMPILER_PROTOTYPE_MISMATCH
CARES_CHECK_COMPILER_SYMBOL_HIDING
-CARES_CHECK_NO_UNDEFINED
-AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
-
-CARES_CHECK_CURLDEBUG
-AM_CONDITIONAL(CURLDEBUG, test x$want_curldebug = xyes)
-
dnl **********************************************************************
dnl Compilation based checks should not be done before this point.
dnl **********************************************************************
dnl **********************************************************************
-dnl Make sure that our checks for headers windows.h winsock.h winsock2.h
-dnl and ws2tcpip.h take precedence over any other further checks which
+dnl Make sure that our checks for headers windows.h winsock.h winsock2.h
+dnl and ws2tcpip.h take precedence over any other further checks which
dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for
dnl this specific header files. And do them before its results are used.
dnl **********************************************************************
CURL_CHECK_HEADER_WINSOCK
CURL_CHECK_HEADER_WINSOCK2
CURL_CHECK_HEADER_WS2TCPIP
+ CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0600"
;;
*)
ac_cv_header_winsock_h="no"
AC_MSG_ERROR([couldn't find libraries for gethostbyname()])
fi
+dnl resolv lib for Apple (MacOS and iOS)
+AS_IF([test "x$host_vendor" = "xapple"], [
+ AC_SEARCH_LIBS([res_servicename], [resolv], [
+ AC_DEFINE([CARES_USE_LIBRESOLV], [1], [Use resolver library to configure cares])
+ ], [
+ AC_MSG_ERROR([Unable to find libresolv which is required for iPhone targets])
+ ])
+])
+
dnl resolve lib?
AC_CHECK_FUNC(strcasecmp, , [ AC_CHECK_LIB(resolve, strcasecmp) ])
CARES_CHECK_LIBS_CONNECT
+dnl iOS 10?
+AS_IF([test "x$host_vendor" = "xapple"], [
+ AC_MSG_CHECKING([for iOS minimum version 10 or later])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <stdio.h>
+#include <TargetConditionals.h>
+ ]], [[
+#if TARGET_OS_IPHONE == 0 || __IPHONE_OS_VERSION_MIN_REQUIRED < 100000
+#error Not iOS 10 or later
+#endif
+return 0;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ ac_cv_ios_10="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+])
+
+dnl macOS 10.12?
+AS_IF([test "x$host_vendor" = "xapple"], [
+ AC_MSG_CHECKING([for macOS minimum version 10.12 or later])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <stdio.h>
+#include <TargetConditionals.h>
+ ]], [[
+#ifndef MAC_OS_X_VERSION_10_12
+# define MAC_OS_X_VERSION_10_12 101200
+#endif
+#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_12
+#error Not macOS 10.12 or later
+#endif
+return 0;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ ac_cv_macos_10_12="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+])
+
dnl **********************************************************************
dnl In case that function clock_gettime with monotonic timer is available,
dnl check for additional required libraries.
dnl **********************************************************************
-CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
+dnl Xcode 8 bug: iOS when targeting less than 10, or macOS when targeting less than 10.12 will
+dnl say clock_gettime exists, it is a weak symbol that only exists in iOS 10 or macOS 10.12 and will
+dnl cause a crash at runtime when running on older versions. Skip finding CLOCK_MONOTONIC on older
+dnl Apple OS's.
+if test "x$host_vendor" != "xapple" || test "x$ac_cv_ios_10" = "xyes" || test "x$ac_cv_macos_10_12" = "xyes"; then
+ CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
+fi
AC_MSG_CHECKING([whether to use libgcc])
AC_ARG_ENABLE(libgcc,
AC_HEADER_TIME
CURL_CHECK_STRUCT_TIMEVAL
-AC_CHECK_SIZEOF(size_t)
-AC_CHECK_SIZEOF(long)
-AC_CHECK_SIZEOF(int)
-AC_CHECK_SIZEOF(short)
-CARES_CONFIGURE_LONG
-AC_CHECK_SIZEOF(time_t)
-
AC_CHECK_TYPE(long long,
[AC_DEFINE(HAVE_LONGLONG, 1,
[Define to 1 if the compiler supports the 'long long' data type.])]
- longlong="yes"
+ longlong="yes"
)
if test "xyes" = "x$longlong"; then
# check for ssize_t
-AC_CHECK_TYPE(ssize_t, ,
- AC_DEFINE(ssize_t, int, [the signed version of size_t]))
+AC_CHECK_TYPE(ssize_t, [ CARES_TYPEOF_ARES_SSIZE_T=ssize_t ],
+ [ CARES_TYPEOF_ARES_SSIZE_T=int ])
+
+AC_DEFINE_UNQUOTED([CARES_TYPEOF_ARES_SSIZE_T], ${CARES_TYPEOF_ARES_SSIZE_T},
+ [the signed version of size_t])
+
# check for bool type
AC_CHECK_TYPE([bool],[
#include <sys/socket.h>
#endif
#endif
- ], [PF_INET6],
+ ], [PF_INET6],
AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.])
)
#include <sys/socket.h>
#endif
#endif
- ], [AF_INET6],
+ ], [AF_INET6],
AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.])
)
#include <netinet/in.h>
#endif
#endif
- ], [in6_addr],
+ ], [in6_addr],
AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.])
)
#include <netinet/in.h>
#endif
#endif
- ], [sockaddr_in6],
+ ], [sockaddr_in6],
AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1,
[Define to 1 if you have struct sockaddr_in6.]) ac_have_sockaddr_in6=yes
)
])
])
-
-AC_CHECK_SIZEOF(struct in6_addr, ,
-[
-#undef inline
-#ifdef HAVE_WINDOWS_H
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN
-#endif
-#include <windows.h>
-#ifdef HAVE_WINSOCK2_H
-#include <winsock2.h>
-#ifdef HAVE_WS2TCPIP_H
-#include <ws2tcpip.h>
-#endif
-#endif
-#else
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#endif
-]
-)
-
-AC_CHECK_SIZEOF(struct in_addr, ,
-[
-#undef inline
-#ifdef HAVE_WINDOWS_H
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN
-#endif
-#include <windows.h>
-#ifdef HAVE_WINSOCK2_H
-#include <winsock2.h>
-#ifdef HAVE_WS2TCPIP_H
-#include <ws2tcpip.h>
-#endif
-#endif
-#else
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#endif
-]
-)
-
+dnl Android. Some variants like arm64 may no longer have __system_property_get
+dnl in libc, but they are defined in the headers. Perform a link check.
+AC_CHECK_FUNC([__system_property_get], [
+ AC_DEFINE([HAVE___SYSTEM_PROPERTY_GET], [1], [Define if __system_property_get exists.])
+])
dnl Check if the getnameinfo function is available
dnl and get the types of five of its arguments.
else
AC_MSG_WARN([cannot check for /dev/urandom while cross compiling; assuming none])
fi
-
+
]
)
if test -n "$RANDOM_FILE" && test X"$RANDOM_FILE" != Xno ; then
squeeze CARES_PRIVATE_LIBS
-AC_CONFIG_FILES([Makefile libcares.pc])
+XC_CHECK_BUILD_FLAGS
+
+AC_MSG_CHECKING([whether to build tests])
+AC_ARG_ENABLE(tests,
+ AC_HELP_STRING([--enable-tests], [build test suite]),
+ [ build_tests="$enableval" ],
+ [ if test "x$HAVE_CXX11" = "x1" && test "x$cross_compiling" = "xno" ; then
+ build_tests="yes"
+ else
+ build_tests="no"
+ fi
+ ]
+)
+
+if test "x$build_tests" = "xyes" ; then
+ if test "x$HAVE_CXX11" = "0" ; then
+ AC_MSG_ERROR([*** Building tests requires a CXX11 compiler])
+ fi
+ if test "x$cross_compiling" = "xyes" ; then
+ AC_MSG_ERROR([*** Tests not supported when cross compiling])
+ fi
+fi
+AC_MSG_RESULT([$build_tests])
+
+
+BUILD_SUBDIRS="include src docs"
+if test "x$build_tests" = "xyes" ; then
+ AC_CONFIG_SUBDIRS([test])
+ BUILD_SUBDIRS="${BUILD_SUBDIRS} test"
+fi
+
+AC_SUBST(BUILD_SUBDIRS)
+
+AC_CONFIG_FILES([Makefile \
+ include/Makefile \
+ src/Makefile \
+ src/lib/Makefile \
+ src/tools/Makefile \
+ docs/Makefile \
+ libcares.pc ])
+
AC_OUTPUT
+XC_AMEND_DISTCLEAN(['.'])