summaryrefslogtreecommitdiff
path: root/sntp/m4/ntp_libntp.m4
diff options
context:
space:
mode:
Diffstat (limited to 'sntp/m4/ntp_libntp.m4')
-rw-r--r--sntp/m4/ntp_libntp.m41137
1 files changed, 1137 insertions, 0 deletions
diff --git a/sntp/m4/ntp_libntp.m4 b/sntp/m4/ntp_libntp.m4
new file mode 100644
index 0000000..13a621d
--- /dev/null
+++ b/sntp/m4/ntp_libntp.m4
@@ -0,0 +1,1137 @@
+dnl ######################################################################
+dnl Common m4sh code for libntp and clients
+dnl
+dnl Any configure tests which libntp or libisc code depends upon should
+dnl be here or in another m4 macro used by the top-level and sntp
+dnl configure.ac files, so that libntp can be moved into the sntp
+dnl subpackage while retaining access to such test results.
+dnl
+AC_DEFUN([NTP_LIBNTP], [
+
+AC_REQUIRE([NTP_CROSSCOMPILE])
+
+# HMS: Save $LIBS and empty it.
+# any LIBS we add here should go in to LDADD_LIBNTP
+AC_SUBST([LDADD_LIBNTP])
+__LIBS=$LIBS
+LIBS=
+
+dnl The contents of NTP_PROG_CC used to be here...
+
+AC_PROG_INSTALL
+# [Bug 2332] because we need to know if we are using GNU ld...
+LT_PATH_LD
+
+NTP_DIR_SEP
+NTP_LINEEDITLIBS
+NTP_LIB_M
+
+AC_FUNC_FORK
+AC_FUNC_ALLOCA
+AC_FUNC_STRERROR_R
+
+ac_busted_vpath_in_make=no
+case "$build" in
+ *-*-irix6.1*) # 64 bit only
+ # busted vpath?
+ ;;
+ *-*-irix6*) # 6.2 (and later?)
+ ac_busted_vpath_in_make=yes
+ ;;
+ *-*-solaris2.5.1)
+ ac_busted_vpath_in_make=yes
+ ;;
+ *-*-unicosmp*)
+ ac_busted_vpath_in_make=yes
+ ;;
+esac
+
+case "$ac_busted_vpath_in_make$srcdir" in
+ yes.|no*)
+ ;;
+ *) case "`${MAKE-make} -v -f /dev/null 2>/dev/null | grep 'GNU Make'`" in
+ '')
+ AC_MSG_ERROR([building outside of the main directory requires GNU make])
+ esac
+ ;;
+esac
+
+case "$host" in
+ *-*-aix4*)
+ # Bug 2516:
+ # Was *-*-aix[[4-9]]*
+ # XXX only verified thru AIX6. But...
+ # Ken Link says this is fine for AIX 5.3 and 7.1, and sees no reason
+ # that this support would be in 5.3, removed in 6, and added back.
+ #
+ # (prr) aix 4.1 doesn't have clock_settime, but in aix 4.3 it's a stub
+ # (returning ENOSYS). I didn't check 4.2. If, in the future,
+ # IBM pulls its thumbs out long enough to implement clock_settime,
+ # this conditional will need to change. Maybe use AC_TRY_RUN
+ # instead to try to set the time to itself and check errno.
+ ;;
+ *)
+ HMS_SEARCH_LIBS([LDADD_LIBNTP], [clock_gettime], [rt])
+ AC_CHECK_FUNCS([clock_getres clock_gettime clock_settime])
+ ;;
+esac
+
+AC_CHECK_FUNCS([getclock stime timegm strlcpy strlcat])
+
+dnl HP-UX 11.31 on HPPA has a net/if.h that can't be compiled with gcc4
+dnl due to an incomplete type (a union) mpinfou used in an array. gcc3
+dnl compiles it without complaint. The mpinfou union is defined later
+dnl in the resulting preprocessed source than the spu_info array in
+dnl /usr/include/machine/sys/getppdp.h:
+dnl extern union mpinfou spu_info[];
+dnl triggering the error. Our strategy is on HP-UX only, test compile
+dnl net/if.h. If that fails, try adding a duplicate definition of
+dnl mpinfou, and if that helps add it to confdefs.h (used for further
+dnl configure tests) and config.h.
+#
+AC_CHECK_HEADERS([errno.h sys/socket.h sys/types.h time.h])
+AC_CHECK_HEADERS([net/if.h], [], [], [
+ #ifdef HAVE_SYS_SOCKET_H
+ # include <sys/socket.h>
+ #endif
+])
+case "$host" in
+ *-hp-hpux*)
+ AC_CACHE_CHECK(
+ [if net/if.h requires mpinfou predeclaration],
+ [ntp_cv_predecl_mpinfou],
+ [
+ np_cv_predecl_mpinfou=no
+ case "$ac_cv_header_net_if_h" in
+ no)
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ typedef union mpinfou {
+ struct pdk_mpinfo *pdkptr;
+ struct mpinfo *pikptr;
+ } mpinfou_t;
+ #ifdef HAVE_SYS_SOCKET_H
+ # include <sys/socket.h>
+ #endif
+ #include <net/if.h>
+ ]],
+ [[
+ ]]
+ )],
+ [
+ ntp_cv_predecl_mpinfou=yes
+ ac_cv_header_net_if_h=yes
+ ]
+ )
+ esac
+ ]
+ )
+ case "$ntp_cv_predecl_mpinfou" in
+ yes)
+ cat >>confdefs.h <<_ACEOF
+#ifndef MPINFOU_PREDECLARED
+# define MPINFOU_PREDECLARED
+typedef union mpinfou {
+ struct pdk_mpinfo *pdkptr;
+ struct mpinfo *pikptr;
+} mpinfou_t;
+#endif
+_ACEOF
+ AH_BOTTOM([
+#ifndef MPINFOU_PREDECLARED
+# define MPINFOU_PREDECLARED
+typedef union mpinfou {
+ struct pdk_mpinfo *pdkptr;
+ struct mpinfo *pikptr;
+} mpinfou_t;
+#endif
+])
+ esac
+esac
+
+case "$host" in
+ *-linux*)
+ AC_CHECK_HEADERS([linux/if_addr.h], [], [], [
+ #ifdef HAVE_SYS_SOCKET_H
+ # include <sys/socket.h>
+ #endif
+ ])
+esac
+
+AC_CHECK_HEADERS([arpa/nameser.h sys/param.h sys/time.h sys/timers.h])
+# sys/sysctl.h depends on sys/param.h on OpenBSD - Bug 1576
+AC_CHECK_HEADERS([sys/sysctl.h], [], [], [
+ #if defined HAVE_SYS_PARAM_H
+ # include <sys/param.h>
+ #endif
+])
+AC_CHECK_HEADERS([netinet/in_system.h netinet/in_systm.h netinet/in.h])
+
+AC_CHECK_HEADERS([resolv.h], [], [], [
+ #ifdef HAVE_SYS_TYPES_H
+ # include <sys/types.h>
+ #endif
+ #ifdef HAVE_NETINET_IN_H
+ # include <netinet/in.h>
+ #endif
+ #ifdef HAVE_ARPA_NAMESER_H
+ # include <arpa/nameser.h>
+ #endif
+])
+
+AC_CHECK_HEADERS([net/if_var.h], [], [], [
+ #if 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
+ #ifdef HAVE_NET_IF_H
+ # include <net/if.h>
+ #endif
+])
+
+AC_CHECK_HEADERS([netinet/ip.h netinet/in_var.h], [], [], [
+ #ifdef HAVE_SYS_TYPES_H
+ # include <sys/types.h>
+ #endif
+ #ifdef HAVE_SYS_SOCKET_H
+ # include <sys/socket.h>
+ #endif
+ #ifdef HAVE_NET_IF_H
+ # include <net/if.h>
+ #endif
+ #ifdef HAVE_NETINET_IN_H
+ # include <netinet/in.h>
+ #endif
+ #ifdef HAVE_NET_IF_VAR_H
+ # include <net/if_var.h>
+ #endif
+ #ifdef HAVE_NETINET_IN_SYSTM_H
+ # include <netinet/in_systm.h>
+ #endif
+])
+
+# HMS: Do we need to check for -lsocket before or after these tests?
+HMS_SEARCH_LIBS([LDADD_LIBNTP], [inet_pton], [nsl])
+HMS_SEARCH_LIBS([LDADD_LIBNTP], [inet_ntop], [resolv], , , [-lnsl])
+
+# [Bug 1628] On Solaris, we need -lxnet -lsocket. Generalize this to
+# avoid keying on the OS name: If we find socket functions in
+# libsocket, next try for them in libxnet without libsocket, if found,
+# list both. If we simply tested libxnet first, we would find the
+# functions there and never add libsocket. See also [Bug 660]
+# http://bugs.ntp.org/show_bug.cgi?id=660#c9
+saved_LIBS=$LIBS
+HMS_SEARCH_LIBS([LDADD_LIBNTP], [setsockopt], [socket])
+case "$ac_cv_search_setsockopt" in
+ -lsocket)
+ LIBS="$saved_LIBS"
+ HMS_SEARCH_LIBS([LDADD_LIBNTP], [getsockopt], [xnet])
+ # XXX Possible trouble here - reading the comments above and looking at the
+ # code below I wonder if we'll add -lxnet when we don't need it.
+ # Also, do we need to add -lxnet to LDADD_LIBNTP, or perhaps see if it's
+ # there when it is not needed?
+ case "$ac_cv_search_getsockopt" in
+ -lxnet)
+ LIBS="-lxnet -lsocket $saved_LIBS"
+ ;;
+ *) LIBS="-lsocket $saved_LIBS"
+ ;;
+ esac
+ ;;
+esac
+AS_UNSET([saved_LIBS])
+
+# Bug 2427 - look for recvmsg here.
+AC_CHECK_FUNCS([recvmsg])
+
+AC_C_INLINE
+
+case "$ac_cv_c_inline" in
+ '')
+ ;;
+ *)
+ AC_DEFINE([HAVE_INLINE], [1], [inline keyword or macro available])
+ AC_SUBST([HAVE_INLINE])
+esac
+
+AC_HEADER_TIME
+AC_CHECK_SIZEOF([time_t])
+AC_C_CHAR_UNSIGNED dnl CROSS_COMPILE?
+AC_CHECK_SIZEOF([signed char])
+AC_CHECK_TYPES([s_char, long long])
+AC_CHECK_SIZEOF([short])
+AC_CHECK_SIZEOF([int])
+AC_CHECK_SIZEOF([long])
+
+case "$ac_cv_type_long_long" in
+ no)
+ ;;
+ *)
+ AC_CHECK_SIZEOF([long long])
+ ;;
+esac
+
+case "$ac_cv_c_char_unsigned$ac_cv_sizeof_signed_char$ac_cv_type_s_char" in
+ *yes)
+ # We have a typedef for s_char. Might as well believe it...
+ ;;
+ no0no)
+ # We have signed chars, can't say 'signed char', no s_char typedef.
+ AC_DEFINE([NEED_S_CHAR_TYPEDEF], [1],
+ [Do we need an s_char typedef?])
+ ;;
+ no1no)
+ # We have signed chars, can say 'signed char', no s_char typedef.
+ AC_DEFINE([NEED_S_CHAR_TYPEDEF], [1],
+ [Do we need an s_char typedef?])
+ ;;
+ yes0no)
+ # We have unsigned chars, can't say 'signed char', no s_char typedef.
+ AC_MSG_ERROR([No way to specify a signed character!])
+ ;;
+ yes1no)
+ # We have unsigned chars, can say 'signed char', no s_char typedef.
+ AC_DEFINE([NEED_S_CHAR_TYPEDEF], [1],
+ [Do we need an s_char typedef?])
+ ;;
+esac
+
+AC_TYPE_UID_T
+
+m4_divert_text([HELP_ENABLE],
+[AS_HELP_STRING([defaults:],
+ [+ yes, - no, s system-specific])])
+
+NTP_DEBUG
+
+# check if we can compile with pthreads
+AC_CHECK_HEADERS([semaphore.h])
+AC_CHECK_FUNCS([socketpair])
+AC_ARG_ENABLE(
+ [thread-support],
+ [AS_HELP_STRING([--enable-thread-support],
+ [s use threads (+ if available)])],
+ [],
+ [enable_thread_support=yes]
+ )
+have_pthreads=no
+case "$enable_thread_support" in
+ yes)
+ ol_found_pthreads=no
+ OL_THREAD_CHECK([ol_found_pthreads=yes])
+ case "$ol_found_pthreads" in
+ yes)
+ saved_LIBS="$LIBS"
+ LIBS="$LTHREAD_LIBS $LIBS"
+ saved_CFLAGS="$CFLAGS"
+ CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
+ AC_CHECK_FUNCS([sem_timedwait])
+ LIBS="$saved_LIBS"
+ AS_UNSET([saved_LIBS])
+ CFLAGS="$saved_CFLAGS"
+ AS_UNSET([saved_CFLAGS])
+ case "$ac_cv_func_sem_timedwait" in
+ yes)
+ PTHREAD_LIBS="$LTHREAD_LIBS"
+ have_pthreads=yes
+ # Bug 2332: With GCC we need to force a reference to libgcc_s
+ # (if libgcc_s exists) or the combination of
+ # threads + setuid + mlockall does not work on linux because
+ # thread cancellation fails to load libgcc_s with dlopen().
+ # We have to pass this all as linker options to avoid argument
+ # reordering by libtool.
+ case "$GCC$with_gnu_ld" in
+ yesyes)
+ AC_CHECK_LIB([gcc_s], [exit],
+ [PTHREAD_LIBS="$LTHREAD_LIBS -Wl,--no-as-needed,-lgcc_s,--as-needed"])
+ ;;
+ esac
+ esac
+ esac
+esac
+AC_SUBST([PTHREAD_LIBS])
+case "$have_pthreads" in
+ yes)
+ CFLAGS_NTP="$CFLAGS_NTP $PTHREAD_CFLAGS"
+ saved_LIBS="$LIBS"
+ LIBS="$LTHREAD_LIBS $LIBS"
+ saved_CFLAGS="$CFLAGS"
+ CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
+ AC_CHECK_SIZEOF(
+ [pthread_t],
+ ,
+ [
+ AC_INCLUDES_DEFAULT()
+ #include <pthread.h>
+ ]
+ )
+ LIBISC_PTHREADS_NOTHREADS=pthreads
+ AC_DEFINE([ISC_PLATFORM_USETHREADS], [1],
+ [enable libisc thread support?])
+ #
+ # We'd like to use sigwait() too
+ #
+ AC_CHECK_FUNC(
+ [sigwait],
+ [have_sigwait=yes],
+ [AC_CHECK_LIB(
+ [c],
+ [sigwait],
+ [have_sigwait=yes],
+ [AC_CHECK_LIB(
+ [pthread],
+ [sigwait],
+ [have_sigwait=yes],
+ [AC_CHECK_LIB(
+ [pthread],
+ [_Psigwait],
+ [have_sigwait=yes],
+ [have_sigwait=no]
+ )]
+ )]
+ )]
+ )
+ case "$host:$have_sigwait" in
+ *-freebsd*:no)
+ AC_CHECK_LIB(
+ [c_r],
+ [sigwait],
+ [have_sigwait=yes]
+ )
+ esac
+ case "$have_sigwait" in
+ yes)
+ ac_cv_func_sigwait=yes
+ AC_DEFINE([HAVE_SIGWAIT], [1], [sigwait() available?])
+ esac
+
+ AC_CHECK_FUNCS([pthread_attr_getstacksize])
+ AC_CHECK_FUNCS([pthread_attr_setstacksize sysconf])
+
+ case "$host" in
+ *-freebsd5.[[012]]|*-freebsd5.[[012]].*)
+ ;;
+ *-freebsd5.[[3456789]]|*-freebsd5.[[3456789]].*|*-freebsd6.*)
+ AC_DEFINE([NEED_PTHREAD_SCOPE_SYSTEM], [1],
+ [use PTHREAD_SCOPE_SYSTEM?])
+ ;;
+ *-bsdi3.*|*-bsdi4.0*)
+ AC_DEFINE([NEED_PTHREAD_INIT], [1], [pthread_init() required?])
+ ;;
+ *-linux*)
+ AC_DEFINE([HAVE_LINUXTHREADS], [1], [using Linux pthread?])
+ ;;
+ *-solaris*)
+ AC_DEFINE([_POSIX_PTHREAD_SEMANTICS], [1])
+ AC_CHECK_FUNCS([pthread_setconcurrency])
+ case "$ac_cv_func_pthread_setconcurrency" in
+ yes)
+ AC_DEFINE([CALL_PTHREAD_SETCONCURRENCY], [1],
+ [why not HAVE_P_S?])
+ esac
+ ;;
+ *-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
+ AC_DEFINE([HAVE_UNIXWARE_SIGWAIT], [1], [deviant sigwait?])
+ ;;
+ esac
+ hack_shutup_pthreadonceinit=no
+ case "$host" in
+ *-aix5.[[123]].*)
+ hack_shutup_pthreadonceinit=yes
+ ;;
+ *-solaris2.[[89]])
+ hack_shutup_pthreadonceinit=yes
+ ;;
+ *-solaris2.1[[0-9]])
+ AC_CACHE_CHECK(
+ [if extra braces are needed for PTHREAD_ONCE_INIT],
+ [ntp_cv_braces_around_pthread_once_init],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #include <pthread.h>
+ ]],
+ [[
+ static pthread_once_t once_test =
+ PTHREAD_ONCE_INIT;
+ ]]
+ )],
+ [ntp_cv_braces_around_pthread_once_init=no],
+ [ntp_cv_braces_around_pthread_once_init=yes]
+ )]
+ )
+ case "$ntp_cv_braces_around_pthread_once_init" in
+ yes)
+ hack_shutup_pthreadonceinit=yes
+ esac
+ ;;
+ esac
+ case "$hack_shutup_pthreadonceinit" in
+ yes)
+ AC_DEFINE([ISC_PLATFORM_BRACEPTHREADONCEINIT], [1],
+ [Enclose PTHREAD_ONCE_INIT in extra braces?])
+ esac
+ LIBS="$saved_LIBS"
+ AS_UNSET([saved_LIBS])
+ CFLAGS="$saved_CFLAGS"
+ AS_UNSET([saved_CFLAGS])
+ ;;
+ *)
+ LIBISC_PTHREADS_NOTHREADS=nothreads
+ ;;
+esac
+AC_SUBST([LIBISC_PTHREADS_NOTHREADS])
+AM_CONDITIONAL([PTHREADS], [test "$have_pthreads" != "no"])
+
+AC_DEFUN([NTP_BEFORE_HW_FUNC_VSNPRINTF], [
+ AC_BEFORE([$0], [HW_FUNC_VSNPRINTF])dnl
+ AC_BEFORE([$0], [HW_FUNC_SNPRINTF])dnl
+ AC_ARG_ENABLE(
+ [c99-snprintf],
+ [AS_HELP_STRING([--enable-c99-snprintf], [s force replacement])],
+ [force_c99_snprintf=$enableval],
+ [force_c99_snprintf=no]
+ )
+ case "$force_c99_snprintf" in
+ yes)
+ hw_force_rpl_snprintf=yes
+ hw_force_rpl_vsnprintf=yes
+ esac
+ AH_VERBATIM(
+ [snprinte],dnl sorted in config.h just before #define snprintf
+ [
+ #if !defined(_KERNEL) && !defined(PARSESTREAM)
+ /*
+ * stdio.h must be included after _GNU_SOURCE is defined
+ * but before #define snprintf rpl_snprintf
+ */
+ # include <stdio.h>
+ #endif
+ ])
+ AH_BOTTOM([
+ #if !defined(_KERNEL) && !defined(PARSESTREAM)
+ # if defined(HW_WANT_RPL_VSNPRINTF)
+ # if defined(__cplusplus)
+ extern "C" {
+ # endif
+ # include <stdarg.h>
+ int rpl_vsnprintf(char *, size_t, const char *, va_list);
+ # if defined(__cplusplus)
+ }
+ # endif
+ # endif
+ # if defined(HW_WANT_RPL_SNPRINTF)
+ # if defined(__cplusplus)
+ extern "C" {
+ # endif
+ int rpl_snprintf(char *, size_t, const char *, ...);
+ # if defined(__cplusplus)
+ }
+ # endif
+ # endif
+ #endif /* !defined(_KERNEL) && !defined(PARSESTREAM) */
+ ])
+]) dnl end of AC_DEFUN of NTP_BEFORE_HW_FUNC_VSNPRINTF
+
+AC_DEFUN([NTP_C99_SNPRINTF], [
+ AC_REQUIRE([NTP_BEFORE_HW_FUNC_VSNPRINTF])dnl
+ AC_REQUIRE([HW_FUNC_VSNPRINTF])dnl
+ AC_REQUIRE([HW_FUNC_SNPRINTF])dnl
+]) dnl end of DEFUN of NTP_C99_SNPRINTF
+
+NTP_C99_SNPRINTF
+
+dnl C99-snprintf does not handle %m
+case "$hw_use_rpl_vsnprintf:$hw_cv_func_vsnprintf" in
+ no:yes)
+ AC_CACHE_CHECK(
+ [if vsnprintf expands "%m" to strerror(errno)],
+ [ntp_cv_vsnprintf_percent_m],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #include <stdarg.h>
+ #include <errno.h>
+ #include <stdio.h>
+ #include <string.h>
+
+ int call_vsnprintf(
+ char * dst,
+ size_t sz,
+ const char *fmt,
+ ...
+ );
+
+ int call_vsnprintf(
+ char * dst,
+ size_t sz,
+ const char *fmt,
+ ...
+ )
+ {
+ va_list ap;
+ int rc;
+
+ va_start(ap, fmt);
+ rc = vsnprintf(dst, sz, fmt, ap);
+ va_end(ap);
+
+ return rc;
+ }
+ ]],
+ [[
+ char sbuf[512];
+ char pbuf[512];
+ int slen;
+
+ strcpy(sbuf, strerror(ENOENT));
+ errno = ENOENT;
+ slen = call_vsnprintf(pbuf, sizeof(pbuf), "%m",
+ "wrong");
+ return strcmp(sbuf, pbuf);
+ ]]
+ )],
+ [ntp_cv_vsnprintf_percent_m=yes],
+ [ntp_cv_vsnprintf_percent_m=no],
+ [ntp_cv_vsnprintf_percent_m=no]
+ )]
+ )
+ case "$ntp_cv_vsnprintf_percent_m" in
+ yes)
+ AC_DEFINE([VSNPRINTF_PERCENT_M], [1],
+ [vsnprintf expands "%m" to strerror(errno)])
+ esac
+esac
+
+AC_CHECK_HEADERS([sys/clockctl.h])
+
+AC_ARG_ENABLE(
+ [clockctl],
+ [AS_HELP_STRING(
+ [--enable-clockctl],
+ [s Use /dev/clockctl for non-root clock control]
+ )],
+ [ntp_use_dev_clockctl=$enableval],
+ [ntp_use_dev_clockctl=$ac_cv_header_sys_clockctl_h]
+)
+
+AC_MSG_CHECKING([if we should use /dev/clockctl])
+AC_MSG_RESULT([$ntp_use_dev_clockctl])
+
+
+AC_CHECK_HEADERS([sys/capability.h sys/prctl.h])
+
+AC_MSG_CHECKING([if we have linux capabilities (libcap)])
+
+case "$ac_cv_header_sys_capability_h$ac_cv_header_sys_prctl_h" in
+ yesyes)
+ case "$host" in
+ mips-sgi-irix*)
+ ntp_have_linuxcaps=no
+ ;;
+ *) ntp_have_linuxcaps=yes
+ ;;
+ esac
+ ;;
+ *)
+ ntp_have_linuxcaps=no
+ ;;
+esac
+
+AC_ARG_ENABLE(
+ [linuxcaps],
+ [AS_HELP_STRING(
+ [--enable-linuxcaps],
+ [+ Use Linux capabilities for non-root clock control]
+ )],
+ [ntp_have_linuxcaps=$enableval]
+)
+
+AC_MSG_RESULT([$ntp_have_linuxcaps])
+
+case "$ntp_have_linuxcaps" in
+ yes)
+ AC_DEFINE([HAVE_LINUX_CAPABILITIES], [1],
+ [Do we have Linux capabilities?])
+ LIBS="$LIBS -lcap"
+ ;;
+esac
+
+
+AC_CHECK_HEADERS([priv.h])
+
+AC_MSG_CHECKING([if we have solaris privileges])
+
+case "$ac_cv_header_priv_h" in
+ yes)
+ case "$host" in
+ *-solaris*)
+ AC_CHECK_FUNC(
+ [setppriv],
+ [ntp_have_solarisprivs=yes],
+ [ntp_have_solarisprivs=no]
+ )
+ ;;
+ esac
+esac
+
+AC_ARG_ENABLE(
+ [solarisprivs],
+ [AS_HELP_STRING(
+ [--enable-solarisprivs],
+ [+ Use Solaris privileges for non-root clock control]
+ )],
+ [ntp_have_solarisprivs=$enableval]
+)
+
+
+case "$ntp_have_solarisprivs" in
+ yes)
+ AC_DEFINE([HAVE_SOLARIS_PRIVS], [1],
+ [Are Solaris privileges available?])
+esac
+
+AC_MSG_RESULT([$ntp_have_solarisprivs])
+
+case "$ntp_use_dev_clockctl$ntp_have_linuxcaps$ntp_have_solarisprivs" in
+ *yes*)
+ AC_DEFINE([HAVE_DROPROOT], [1],
+ [Can we drop root privileges?])
+esac
+
+case "$host" in
+ *-*-darwin*)
+ AC_SEARCH_LIBS([res_9_init], [resolv])
+ ;;
+ *) AC_SEARCH_LIBS([res_init], [resolv])
+ ;;
+esac
+AC_HEADER_RESOLV
+#HMS: Why do we do this check so "early"?
+AC_CHECK_FUNCS([res_init], , [AC_CHECK_FUNCS([__res_init])])
+
+# We also need -lsocket, but we have tested for that already.
+AC_CHECK_FUNC([inet_ntop], [],
+ [AC_DEFINE([ISC_PLATFORM_NEEDNTOP], [1], [ISC: provide inet_ntop()])])
+AC_CHECK_FUNC([inet_pton], [],
+ [AC_DEFINE([ISC_PLATFORM_NEEDPTON], [1], [ISC: provide inet_pton()])])
+
+AC_CHECK_TYPES([uintptr_t, int32, u_int32])
+
+AH_VERBATIM([TYPEDEF_UINTPTR_T],
+[/* Provide a typedef for uintptr_t? */
+#ifndef HAVE_UINTPTR_T
+typedef unsigned int uintptr_t;
+#define HAVE_UINTPTR_T 1
+#endif])
+
+case "$ac_cv_type_int32::$ac_cv_header_resolv_h" in
+ no::yes)
+ AC_CACHE_CHECK(
+ [for int32 with DNS headers included],
+ [ntp_cv_type_int32_with_dns],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #ifdef HAVE_ARPA_NAMESER_H
+ # include <arpa/nameser.h>
+ #endif
+ #include <resolv.h>
+ ]],
+ [[
+ size_t cb = sizeof(int32);
+ ]]
+ )],
+ [ntp_cv_type_int32_with_dns=yes],
+ [ntp_cv_type_int32_with_dns=no]
+ )]
+ )
+ case "$ntp_cv_type_int32_with_dns" in
+ yes)
+ AC_DEFINE([HAVE_INT32_ONLY_WITH_DNS], [1],
+ [int32 type in DNS headers, not others.])
+ esac
+esac
+
+case "$ac_cv_type_u_int32::$ac_cv_header_resolv_h" in
+ no::yes)
+ AC_CACHE_CHECK(
+ [for u_int32 with DNS headers included],
+ [ntp_cv_type_u_int32_with_dns],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #ifdef HAVE_ARPA_NAMESER_H
+ # include <arpa/nameser.h>
+ #endif
+ #include <resolv.h>
+ ]],
+ [[
+ size_t cb = sizeof(u_int32);
+ ]]
+ )],
+ [ntp_cv_type_u_int32_with_dns=yes],
+ [ntp_cv_type_u_int32_with_dns=no]
+ )]
+ )
+ case "$ntp_cv_type_u_int32_with_dns" in
+ yes)
+ AC_DEFINE([HAVE_U_INT32_ONLY_WITH_DNS], [1],
+ [u_int32 type in DNS headers, not others.])
+ esac
+esac
+
+AC_CHECK_HEADERS(
+ [sys/timepps.h],
+ [],
+ [],
+ [
+ #ifdef HAVE_SYS_TIME_H
+ # include <sys/time.h>
+ #endif
+ #ifdef HAVE_ERRNO_H
+ # include <errno.h>
+ #endif
+ ]
+)
+
+AC_CACHE_CHECK(
+ [for struct timespec],
+ [ntp_cv_struct_timespec],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #include <sys/time.h>
+ /* Under SunOS, timespec is in sys/timepps.h,
+ which needs errno.h and FRAC */
+ #ifdef HAVE_ERRNO_H
+ # include <errno.h>
+ #endif
+ #ifdef HAVE_SYS_TIMEPPS_H
+ # define FRAC 4294967296
+ # include <sys/timepps.h>
+ #endif
+ ]],
+ [[
+ struct timespec n;
+ ]]
+ )],
+ [ntp_cv_struct_timespec=yes],
+ [ntp_cv_struct_timespec=no]
+ )]
+)
+case "$ntp_cv_struct_timespec" in
+ yes)
+ AC_DEFINE([HAVE_STRUCT_TIMESPEC], [1], [struct timespec declared?])
+esac
+
+AC_CACHE_CHECK(
+ [for struct ntptimeval],
+ [ntp_cv_struct_ntptimeval],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #include <sys/time.h>
+ #include <sys/timex.h>
+ ]],
+ [[
+ struct ntptimeval n;
+ ]]
+ )],
+ [ntp_cv_struct_ntptimeval=yes],
+ [ntp_cv_struct_ntptimeval=no]
+ )]
+)
+case "$ntp_cv_struct_ntptimeval" in
+ yes)
+ AC_DEFINE([HAVE_STRUCT_NTPTIMEVAL], [1],
+ [Do we have struct ntptimeval?])
+esac
+
+AC_CHECK_HEADERS(
+ [md5.h],
+ [],
+ [],
+ [
+ #ifdef HAVE_SYS_TYPES_H
+ # include <sys/types.h>
+ #endif
+ ]
+)
+
+AC_SEARCH_LIBS([MD5Init], [md5 md])
+AC_CHECK_FUNCS([MD5Init sysconf getdtablesize sigaction sigset sigvec])
+
+AC_CACHE_CHECK(
+ [for SIGIO],
+ [ntp_cv_hdr_def_sigio],
+ [AC_PREPROC_IFELSE(
+ [
+ #include <signal.h>
+
+ #ifndef SIGIO
+ # error
+ #endif
+ ],
+ [ntp_cv_hdr_def_sigio=yes],
+ [ntp_cv_hdr_def_sigio=no]
+ )]
+ )
+
+dnl Override those system that have a losing SIGIO
+AC_MSG_CHECKING([if we want to use SIGIO])
+ans=no
+case "$ntp_cv_hdr_def_sigio" in
+ yes)
+ ans=yes
+ case "$host" in
+ alpha*-dec-osf4*|alpha*-dec-osf5*)
+ ans=no
+ ;;
+ *-convex-*)
+ ans=no
+ ;;
+ *-dec-*)
+ ans=no
+ ;;
+ *-pc-cygwin*)
+ ans=no
+ ;;
+ *-sni-sysv*)
+ ans=no
+ ;;
+ *-univel-sysv*)
+ ans=no
+ ;;
+ *-*-irix6*)
+ ans=no
+ ;;
+ *-*-freebsd*)
+ ans=no
+ ;;
+ *-*-*linux*)
+ ans=no
+ ;;
+ *-*-unicosmp*)
+ ans=no
+ ;;
+ *-*-kfreebsd*)
+ ans=no
+ ;;
+ m68k-*-mint*)
+ ans=no
+ ;;
+ esac
+ ;;
+esac
+case "$ans" in
+ yes)
+ AC_DEFINE([HAVE_SIGNALED_IO], [1],
+ [Can we use SIGIO for tcp and udp IO?])
+esac
+AC_MSG_RESULT([$ans])
+
+AC_CACHE_CHECK(
+ [for SIGPOLL],
+ [ntp_cv_hdr_def_sigpoll],
+ [AC_PREPROC_IFELSE(
+ [
+ #include <signal.h>
+
+ #ifndef SIGPOLL
+ # error
+ #endif
+ ],
+ [ntp_cv_hdr_def_sigpoll=yes],
+ [ntp_cv_hdr_def_sigpoll=no]
+ )]
+)
+
+AC_MSG_CHECKING([if we can use SIGPOLL for UDP I/O])
+ans=no
+case "$ntp_cv_hdr_def_sigpoll" in
+ yes)
+ case "$host" in
+ mips-sgi-irix*)
+ ans=no
+ ;;
+ vax-dec-bsd)
+ ans=no
+ ;;
+ *-pc-cygwin*)
+ ans=no
+ ;;
+ *-sni-sysv*)
+ ans=no
+ ;;
+ *-*-aix[[4-9]]*)
+ # XXX Only verified thru AIX6
+ ans=no
+ ;;
+ *-*-hpux*)
+ ans=no
+ ;;
+ *-*-*linux*)
+ ans=no
+ ;;
+ *-*-osf*)
+ ans=no
+ ;;
+ *-*-qnx*)
+ ans=no
+ ;;
+ *-*-sunos*)
+ ans=no
+ ;;
+ *-*-solaris*)
+ ans=no
+ ;;
+ *-*-ultrix*)
+ ans=no
+ ;;
+ *-*-unicosmp*)
+ ans=no
+ ;;
+ *-*-kfreebsd*)
+ ans=no
+ ;;
+ *) ans=yes
+ ;;
+ esac
+ ;;
+esac
+case "$ans" in
+ yes)
+ AC_DEFINE([USE_UDP_SIGPOLL], [1], [Can we use SIGPOLL for UDP?])
+esac
+AC_MSG_RESULT([$ans])
+
+AC_MSG_CHECKING([if we can use SIGPOLL for TTY I/O])
+ans=no
+case "$ntp_cv_hdr_def_sigpoll" in
+ yes)
+ case "$host" in
+ mips-sgi-irix*)
+ ans=no
+ ;;
+ vax-dec-bsd)
+ ans=no
+ ;;
+ *-pc-cygwin*)
+ ans=no
+ ;;
+ *-sni-sysv*)
+ ans=no
+ ;;
+ *-*-aix[[4-9]]*)
+ # XXX Only verified thru AIX6
+ ans=no
+ ;;
+ *-*-hpux*)
+ ans=no
+ ;;
+ *-*-*linux*)
+ ans=no
+ ;;
+ *-*-osf*)
+ ans=no
+ ;;
+ *-*-sunos*)
+ ans=no
+ ;;
+ *-*-ultrix*)
+ ans=no
+ ;;
+ *-*-qnx*)
+ ans=no
+ ;;
+ *-*-unicosmp*)
+ ans=no
+ ;;
+ *-*-kfreebsd*)
+ ans=no
+ ;;
+ *) ans=yes
+ ;;
+ esac
+ ;;
+esac
+case "$ans" in
+ yes)
+ AC_DEFINE([USE_TTY_SIGPOLL], [1], [Can we use SIGPOLL for tty IO?])
+esac
+AC_MSG_RESULT([$ans])
+
+AC_CACHE_CHECK(
+ [number of arguments to gettimeofday()],
+ [ntp_cv_func_Xettimeofday_nargs],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #include <sys/time.h>
+ ]],
+ [[
+ gettimeofday(0, 0);
+ settimeofday(0, 0);
+ ]]
+ )],
+ [ntp_cv_func_Xettimeofday_nargs=2],
+ [ntp_cv_func_Xettimeofday_nargs=1]
+ )]
+)
+case "$ntp_cv_func_Xettimeofday_nargs" in
+ 1)
+ AC_DEFINE([SYSV_TIMEOFDAY], [1], [Does Xettimeofday take 1 arg?])
+esac
+
+AC_CHECK_FUNCS([settimeofday], ,[
+ case "$host" in
+ *-*-mpeix*) ac_cv_func_settimeofday=yes
+ esac
+])
+
+AC_MSG_CHECKING([if we'll use clock_settime or settimeofday or stime])
+ntp_warning='GRONK'
+ans=none
+case "$ac_cv_func_clock_settime$ac_cv_func_settimeofday$ac_cv_func_stime" in
+ yes*)
+ ntp_warning=''
+ ans='clock_settime()'
+ ;;
+ noyes*)
+ ntp_warning='But clock_settime() would be better (if we had it)'
+ ans='settimeofday()'
+ ;;
+ nonoyes)
+ ntp_warning='Which is the worst of the three'
+ ans='stime()'
+ ;;
+ *)
+ case "$build" in
+ $host)
+ ntp_warning='Which leaves us with nothing to use!'
+ esac
+esac
+AC_MSG_RESULT([$ans])
+case "$ntp_warning" in
+ '')
+ ;;
+ *)
+ AC_MSG_WARN([*** $ntp_warning ***])
+ ;;
+esac
+
+
+dnl add to LDADD_LIBNTP set by ntp_compiler.m4
+LDADD_LIBNTP="$LDADD_LIBNTP $LIBS"
+LIBS=$__LIBS
+AS_UNSET([__LIBS])
+
+])dnl
+dnl ======================================================================