ntp_libntp.m4 revision 290001
1dnl ######################################################################
2dnl Common m4sh code for libntp and clients
3dnl
4dnl Any configure tests which libntp or libisc code depends upon should
5dnl be here or in another m4 macro used by the top-level and sntp
6dnl configure.ac files, so that libntp can be moved into the sntp
7dnl subpackage while retaining access to such test results.
8dnl
9AC_DEFUN([NTP_LIBNTP], [
10
11AC_REQUIRE([NTP_CROSSCOMPILE])
12
13# HMS: Save $LIBS and empty it.
14# any LIBS we add here should go in to LDADD_LIBNTP
15AC_SUBST([LDADD_LIBNTP])
16__LIBS=$LIBS
17LIBS=
18
19dnl The contents of NTP_PROG_CC used to be here...
20
21AC_PROG_INSTALL
22# [Bug 2332] because we need to know if we are using GNU ld...
23LT_PATH_LD
24
25NTP_DIR_SEP
26NTP_LINEEDITLIBS
27NTP_LIB_M
28
29AC_FUNC_FORK
30AC_FUNC_ALLOCA
31AC_FUNC_STRERROR_R
32
33ac_busted_vpath_in_make=no
34case "$build" in
35 *-*-irix6.1*)	# 64 bit only
36    # busted vpath?
37    ;;
38 *-*-irix6*)	# 6.2 (and later?)
39    ac_busted_vpath_in_make=yes
40    ;;
41 *-*-solaris2.5.1)
42    ac_busted_vpath_in_make=yes
43    ;;
44 *-*-unicosmp*)
45    ac_busted_vpath_in_make=yes
46    ;;
47esac
48
49case "$ac_busted_vpath_in_make$srcdir" in
50 yes.|no*)
51    ;;
52 *) case "`${MAKE-make} -v -f /dev/null 2>/dev/null | grep 'GNU Make'`" in
53     '')
54	AC_MSG_ERROR([building outside of the main directory requires GNU make])
55    esac
56    ;;
57esac
58
59case "$host" in
60 *-*-aix4*)
61	# Bug 2516:
62	# Was *-*-aix[[4-9]]*
63	# XXX only verified thru AIX6.  But...
64	# Ken Link says this is fine for AIX 5.3 and 7.1, and sees no reason
65	# that this support would be in 5.3, removed in 6, and added back.
66	#
67	# (prr) aix 4.1 doesn't have clock_settime, but in aix 4.3 it's a stub
68	# (returning ENOSYS).  I didn't check 4.2.  If, in the future,
69	# IBM pulls its thumbs out long enough to implement clock_settime,
70	# this conditional will need to change.  Maybe use AC_TRY_RUN
71	# instead to try to set the time to itself and check errno.
72    ;;
73 *)
74    HMS_SEARCH_LIBS([LDADD_LIBNTP], [clock_gettime], [rt])
75    AC_CHECK_FUNCS([clock_getres clock_gettime clock_settime])
76    ;;
77esac
78
79AC_CHECK_FUNCS([getclock stime timegm strlcpy strlcat])
80
81# Bug 2713
82LDADD_LIBUTIL=
83AC_SUBST([LDADD_LIBUTIL])
84HMS_SEARCH_LIBS([LDADD_LIBUTIL], [snprintb], [util],
85		[AC_DEFINE([USE_SNPRINTB], 1, [OK to use snprintb()?])])
86
87dnl  HP-UX 11.31 on HPPA has a net/if.h that can't be compiled with gcc4
88dnl  due to an incomplete type (a union) mpinfou used in an array.  gcc3
89dnl  compiles it without complaint.  The mpinfou union is defined later
90dnl  in the resulting preprocessed source than the spu_info array in
91dnl  /usr/include/machine/sys/getppdp.h:
92dnl	extern union mpinfou spu_info[];
93dnl  triggering the error.  Our strategy is on HP-UX only, test compile
94dnl  net/if.h.  If that fails, try adding a duplicate definition of
95dnl  mpinfou, and if that helps add it to confdefs.h (used for further
96dnl  configure tests) and config.h.
97#
98AC_CHECK_HEADERS([errno.h sys/socket.h sys/types.h time.h])
99AC_CHECK_HEADERS([net/if.h], [], [], [
100    #ifdef HAVE_SYS_SOCKET_H
101    # include <sys/socket.h>
102    #endif
103])
104case "$host" in
105 *-hp-hpux*)
106    AC_CACHE_CHECK(
107	[if net/if.h requires mpinfou predeclaration],
108	[ntp_cv_predecl_mpinfou],
109	[
110	    np_cv_predecl_mpinfou=no
111	    case "$ac_cv_header_net_if_h" in
112	     no)
113		AC_COMPILE_IFELSE(
114		    [AC_LANG_PROGRAM(
115			[[
116			    typedef union mpinfou {
117				    struct pdk_mpinfo *pdkptr;
118				    struct mpinfo *pikptr;
119			    } mpinfou_t;
120			    #ifdef HAVE_SYS_SOCKET_H
121			    # include <sys/socket.h>
122			    #endif
123			    #include <net/if.h>
124			]],
125			[[
126			]]
127		    )],
128		    [
129			ntp_cv_predecl_mpinfou=yes
130			ac_cv_header_net_if_h=yes
131		    ]
132		)
133	    esac
134	]
135    )
136    case "$ntp_cv_predecl_mpinfou" in
137     yes)
138	cat >>confdefs.h <<_ACEOF
139#ifndef MPINFOU_PREDECLARED
140# define MPINFOU_PREDECLARED
141typedef union mpinfou {
142	struct pdk_mpinfo *pdkptr;
143	struct mpinfo *pikptr;
144} mpinfou_t;
145#endif
146_ACEOF
147	AH_BOTTOM([
148#ifndef MPINFOU_PREDECLARED
149# define MPINFOU_PREDECLARED
150typedef union mpinfou {
151	struct pdk_mpinfo *pdkptr;
152	struct mpinfo *pikptr;
153} mpinfou_t;
154#endif
155])
156    esac
157esac
158
159case "$host" in
160 *-linux*)
161    AC_CHECK_HEADERS([linux/if_addr.h], [], [], [
162	#ifdef HAVE_SYS_SOCKET_H
163	# include <sys/socket.h>
164	#endif
165    ])
166esac
167
168AC_CHECK_HEADERS([arpa/nameser.h sys/param.h sys/time.h sys/timers.h])
169# sys/sysctl.h depends on sys/param.h on OpenBSD - Bug 1576
170AC_CHECK_HEADERS([sys/sysctl.h], [], [], [
171    #if defined HAVE_SYS_PARAM_H
172    # include <sys/param.h>
173    #endif
174])
175AC_CHECK_HEADERS([netinet/in_system.h netinet/in_systm.h netinet/in.h])
176
177AC_CHECK_HEADERS([resolv.h], [], [], [
178    #ifdef HAVE_SYS_TYPES_H
179    # include <sys/types.h>
180    #endif
181    #ifdef HAVE_NETINET_IN_H
182    # include <netinet/in.h>
183    #endif
184    #ifdef HAVE_ARPA_NAMESER_H
185    # include <arpa/nameser.h>
186    #endif
187])
188
189AC_CHECK_HEADERS([net/if_var.h], [], [], [
190    #if HAVE_SYS_TYPES_H
191    # include <sys/types.h>
192    #endif
193    #ifdef HAVE_SYS_SOCKET_H
194    # include <sys/socket.h>
195    #endif
196    #ifdef HAVE_NETINET_IN_H
197    # include <netinet/in.h>
198    #endif
199    #ifdef HAVE_NET_IF_H
200    # include <net/if.h>
201    #endif
202])
203
204AC_CHECK_HEADERS([netinet/ip.h netinet/in_var.h], [], [], [
205    #ifdef HAVE_SYS_TYPES_H
206    # include <sys/types.h>
207    #endif
208    #ifdef HAVE_SYS_SOCKET_H
209    # include <sys/socket.h>
210    #endif
211    #ifdef HAVE_NET_IF_H
212    # include <net/if.h>
213    #endif
214    #ifdef HAVE_NETINET_IN_H
215    # include <netinet/in.h>
216    #endif
217    #ifdef HAVE_NET_IF_VAR_H
218    # include <net/if_var.h>
219    #endif
220    #ifdef HAVE_NETINET_IN_SYSTM_H
221    # include <netinet/in_systm.h>
222    #endif
223])
224
225# HMS: Do we need to check for -lsocket before or after these tests?
226HMS_SEARCH_LIBS([LDADD_LIBNTP], [inet_pton], [nsl])
227HMS_SEARCH_LIBS([LDADD_LIBNTP], [inet_ntop], [resolv], , , [-lnsl])
228
229# [Bug 1628] On Solaris, we need -lxnet -lsocket.  Generalize this to
230# avoid keying on the OS name:  If we find socket functions in
231# libsocket, next try for them in libxnet without libsocket, if found,
232# list both.  If we simply tested libxnet first, we would find the
233# functions there and never add libsocket.  See also [Bug 660]
234# http://bugs.ntp.org/show_bug.cgi?id=660#c9
235saved_LIBS=$LIBS
236HMS_SEARCH_LIBS([LDADD_LIBNTP], [setsockopt], [socket])
237case "$ac_cv_search_setsockopt" in
238 -lsocket)
239    LIBS="$saved_LIBS"
240    HMS_SEARCH_LIBS([LDADD_LIBNTP], [getsockopt], [xnet])
241    # XXX Possible trouble here - reading the comments above and looking at the
242    # code below I wonder if we'll add -lxnet when we don't need it.
243    # Also, do we need to add -lxnet to LDADD_LIBNTP, or perhaps see if it's
244    # there when it is not needed?
245    case "$ac_cv_search_getsockopt" in
246     -lxnet)
247	LIBS="-lxnet -lsocket $saved_LIBS"
248	;;
249     *) LIBS="-lsocket $saved_LIBS"
250	;;
251    esac
252    ;;
253esac
254AS_UNSET([saved_LIBS])
255
256# Bug 2427 - look for recvmsg here.
257AC_CHECK_FUNCS([recvmsg])
258
259AC_C_INLINE
260
261case "$ac_cv_c_inline" in
262 '')
263    ;;
264 *)
265    AC_DEFINE([HAVE_INLINE], [1], [inline keyword or macro available])
266    AC_SUBST([HAVE_INLINE])
267esac
268
269AC_HEADER_TIME
270AC_CHECK_SIZEOF([time_t])
271AC_C_CHAR_UNSIGNED		dnl CROSS_COMPILE?
272AC_CHECK_SIZEOF([signed char])
273AC_CHECK_TYPES([s_char, long long])
274AC_CHECK_SIZEOF([short])
275AC_CHECK_SIZEOF([int])
276AC_CHECK_SIZEOF([long])
277
278case "$ac_cv_type_long_long" in
279 no)
280    ;;
281 *)
282    AC_CHECK_SIZEOF([long long])
283    ;;
284esac
285
286case "$ac_cv_c_char_unsigned$ac_cv_sizeof_signed_char$ac_cv_type_s_char" in
287 *yes)
288    # We have a typedef for s_char.  Might as well believe it...
289    ;;
290 no0no)
291    # We have signed chars, can't say 'signed char', no s_char typedef.
292    AC_DEFINE([NEED_S_CHAR_TYPEDEF], [1],
293	[Do we need an s_char typedef?])
294    ;;
295 no1no)
296    # We have signed chars, can say 'signed char', no s_char typedef.
297    AC_DEFINE([NEED_S_CHAR_TYPEDEF], [1],
298	[Do we need an s_char typedef?])
299    ;;
300 yes0no)
301    # We have unsigned chars, can't say 'signed char', no s_char typedef.
302    AC_MSG_ERROR([No way to specify a signed character!])
303    ;;
304 yes1no)
305    # We have unsigned chars, can say 'signed char', no s_char typedef.
306    AC_DEFINE([NEED_S_CHAR_TYPEDEF], [1],
307	[Do we need an s_char typedef?])
308    ;;
309esac
310
311AC_TYPE_UID_T
312
313m4_divert_text([HELP_ENABLE],
314[AS_HELP_STRING([defaults:],
315    [+ yes, - no, s system-specific])])
316
317NTP_DEBUG
318
319# check if we can compile with pthreads
320AC_CHECK_HEADERS([semaphore.h])
321AC_CHECK_FUNCS([socketpair])
322AC_ARG_ENABLE(
323    [thread-support],
324    [AS_HELP_STRING([--enable-thread-support],
325		    [s use threads (+ if available)])],
326    [],
327    [enable_thread_support=yes]
328    )
329have_pthreads=no
330case "$enable_thread_support" in
331 no) ;;
332 *)
333    ol_found_pthreads=no
334    OL_THREAD_CHECK([ol_found_pthreads=yes])
335    case "$ol_found_pthreads" in
336     yes)
337	saved_LIBS="$LIBS"
338	LIBS="$LTHREAD_LIBS $LIBS"
339	saved_CFLAGS="$CFLAGS"
340	CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
341	AC_CHECK_FUNCS([sem_timedwait])
342	LIBS="$saved_LIBS"
343	AS_UNSET([saved_LIBS])
344	CFLAGS="$saved_CFLAGS"
345	AS_UNSET([saved_CFLAGS])
346	case "$ac_cv_func_sem_timedwait" in
347	 yes)
348	    PTHREAD_LIBS="$LTHREAD_LIBS"
349	    have_pthreads=yes
350	esac
351    esac
352esac
353AC_SUBST([PTHREAD_LIBS])
354case "$have_pthreads" in
355 yes)
356    CFLAGS_NTP="$CFLAGS_NTP $PTHREAD_CFLAGS"
357    saved_LIBS="$LIBS"
358    LIBS="$LTHREAD_LIBS $LIBS"
359    saved_CFLAGS="$CFLAGS"
360    CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
361    AC_CHECK_SIZEOF(
362	[pthread_t],
363	,
364	[
365	    AC_INCLUDES_DEFAULT()
366	    #include <pthread.h>
367	]
368    )
369    LIBISC_PTHREADS_NOTHREADS=pthreads
370    AC_DEFINE([ISC_PLATFORM_USETHREADS], [1],
371	      [enable libisc thread support?])
372    #
373    # We'd like to use sigwait() too
374    #
375    AC_CHECK_FUNC(
376	[sigwait],
377	[have_sigwait=yes],
378	[AC_CHECK_LIB(
379	    [c],
380	    [sigwait],
381	    [have_sigwait=yes],
382	    [AC_CHECK_LIB(
383		[pthread],
384		[sigwait],
385		[have_sigwait=yes],
386		[AC_CHECK_LIB(
387		    [pthread],
388		    [_Psigwait],
389		    [have_sigwait=yes],
390		    [have_sigwait=no]
391		)]
392	    )]
393	)]
394    )
395    case "$host:$have_sigwait" in
396     *-freebsd*:no)
397	AC_CHECK_LIB(
398	    [c_r],
399	    [sigwait],
400	    [have_sigwait=yes]
401	)
402    esac
403    case "$have_sigwait" in
404     yes)
405	ac_cv_func_sigwait=yes
406	AC_DEFINE([HAVE_SIGWAIT], [1], [sigwait() available?])
407    esac
408
409    AC_CHECK_FUNCS([pthread_attr_getstacksize])
410    AC_CHECK_FUNCS([pthread_attr_setstacksize sysconf])
411
412    case "$host" in
413     *-freebsd5.[[012]]|*-freebsd5.[[012]].*)
414	;;
415     *-freebsd5.[[3456789]]|*-freebsd5.[[3456789]].*|*-freebsd6.*)
416	AC_DEFINE([NEED_PTHREAD_SCOPE_SYSTEM], [1],
417		  [use PTHREAD_SCOPE_SYSTEM?])
418	;;
419     *-bsdi3.*|*-bsdi4.0*)
420	AC_DEFINE([NEED_PTHREAD_INIT], [1], [pthread_init() required?])
421	;;
422     *-linux*)
423	AC_DEFINE([HAVE_LINUXTHREADS], [1], [using Linux pthread?])
424	;;
425     *-solaris*)
426	AC_DEFINE([_POSIX_PTHREAD_SEMANTICS], [1])
427	AC_CHECK_FUNCS([pthread_setconcurrency])
428	case "$ac_cv_func_pthread_setconcurrency" in
429	 yes)
430	    AC_DEFINE([CALL_PTHREAD_SETCONCURRENCY], [1],
431		      [why not HAVE_P_S?])
432	esac
433	;;
434     *-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
435	AC_DEFINE([HAVE_UNIXWARE_SIGWAIT], [1], [deviant sigwait?])
436	;;
437    esac
438    hack_shutup_pthreadonceinit=no
439    case "$host" in
440     *-aix5.[[123]].*)
441	hack_shutup_pthreadonceinit=yes
442	;;
443     *-solaris2.[[89]])
444	hack_shutup_pthreadonceinit=yes
445	;;
446     *-solaris2.1[[0-9]])
447	AC_CACHE_CHECK(
448	    [if extra braces are needed for PTHREAD_ONCE_INIT],
449	    [ntp_cv_braces_around_pthread_once_init],
450	    [AC_COMPILE_IFELSE(
451		[AC_LANG_PROGRAM(
452		    [[
453			#include <pthread.h>
454		    ]],
455		    [[
456		        static pthread_once_t once_test =
457						PTHREAD_ONCE_INIT;
458		    ]]
459		)],
460		[ntp_cv_braces_around_pthread_once_init=no],
461		[ntp_cv_braces_around_pthread_once_init=yes]
462	    )]
463	)
464	case "$ntp_cv_braces_around_pthread_once_init" in
465	 yes)
466	    hack_shutup_pthreadonceinit=yes
467	esac
468	;;
469    esac
470    case "$hack_shutup_pthreadonceinit" in
471     yes)
472	AC_DEFINE([ISC_PLATFORM_BRACEPTHREADONCEINIT], [1],
473		  [Enclose PTHREAD_ONCE_INIT in extra braces?])
474    esac
475    LIBS="$saved_LIBS"
476    AS_UNSET([saved_LIBS])
477    CFLAGS="$saved_CFLAGS"
478    AS_UNSET([saved_CFLAGS])
479    ;;
480 *)
481    LIBISC_PTHREADS_NOTHREADS=nothreads
482    ;;
483esac
484AC_SUBST([LIBISC_PTHREADS_NOTHREADS])
485AM_CONDITIONAL([PTHREADS], [test "$have_pthreads" != "no"])
486
487AC_DEFUN([NTP_BEFORE_HW_FUNC_VSNPRINTF], [
488    AC_BEFORE([$0], [HW_FUNC_VSNPRINTF])dnl
489    AC_BEFORE([$0], [HW_FUNC_SNPRINTF])dnl
490    AC_ARG_ENABLE(
491	[c99-snprintf],
492	[AS_HELP_STRING([--enable-c99-snprintf], [s force replacement])],
493	[force_c99_snprintf=$enableval],
494	[force_c99_snprintf=no]
495	)
496    case "$force_c99_snprintf" in
497     yes)
498	hw_force_rpl_snprintf=yes
499	hw_force_rpl_vsnprintf=yes
500    esac
501    AH_VERBATIM(
502	[snprinte],dnl	sorted in config.h just before #define snprintf
503	[
504	    #if !defined(_KERNEL) && !defined(PARSESTREAM)
505	    /*
506	     * stdio.h must be included after _GNU_SOURCE is defined
507	     * but before #define snprintf rpl_snprintf
508	     */
509	    # include <stdio.h>	
510	    #endif
511	])
512    AH_BOTTOM([
513	#if !defined(_KERNEL) && !defined(PARSESTREAM)
514	# if defined(HW_WANT_RPL_VSNPRINTF)
515	#  if defined(__cplusplus)
516	extern "C" {
517	# endif
518	# include <stdarg.h>
519	int rpl_vsnprintf(char *, size_t, const char *, va_list);
520	# if defined(__cplusplus)
521	}
522	#  endif
523	# endif
524	# if defined(HW_WANT_RPL_SNPRINTF)
525	#  if defined(__cplusplus)
526	extern "C" {
527	#  endif
528	int rpl_snprintf(char *, size_t, const char *, ...);
529	#  if defined(__cplusplus)
530	}
531	#  endif
532	# endif
533	#endif	/* !defined(_KERNEL) && !defined(PARSESTREAM) */
534	])
535]) dnl end of AC_DEFUN of NTP_BEFORE_HW_FUNC_VSNPRINTF
536
537AC_DEFUN([NTP_C99_SNPRINTF], [
538    AC_REQUIRE([NTP_BEFORE_HW_FUNC_VSNPRINTF])dnl
539    AC_REQUIRE([HW_FUNC_VSNPRINTF])dnl
540    AC_REQUIRE([HW_FUNC_SNPRINTF])dnl
541]) dnl end of DEFUN of NTP_C99_SNPRINTF
542
543NTP_C99_SNPRINTF
544
545dnl C99-snprintf does not handle %m
546case "$hw_use_rpl_vsnprintf:$hw_cv_func_vsnprintf" in
547 no:yes)
548    AC_CACHE_CHECK(
549	[if vsnprintf expands "%m" to strerror(errno)],
550	[ntp_cv_vsnprintf_percent_m],
551	[AC_RUN_IFELSE(
552	    [AC_LANG_PROGRAM(
553		[[
554		    #include <stdarg.h>
555		    #include <errno.h>
556		    #include <stdio.h>
557		    #include <string.h>
558
559		    int call_vsnprintf(
560			    char *	dst,
561			    size_t	sz,
562			    const char *fmt,
563			    ...
564			    );
565
566		    int call_vsnprintf(
567			    char *	dst,
568			    size_t	sz,
569			    const char *fmt,
570			    ...
571			    )
572		    {
573			    va_list	ap;
574			    int		rc;
575
576			    va_start(ap, fmt);
577			    rc = vsnprintf(dst, sz, fmt, ap);
578			    va_end(ap);
579
580			    return rc;
581		    }
582		]],
583		[[
584		    char	sbuf[512];
585		    char	pbuf[512];
586		    int		slen;
587
588		    strcpy(sbuf, strerror(ENOENT));
589		    errno = ENOENT;
590		    slen = call_vsnprintf(pbuf, sizeof(pbuf), "%m",
591					  "wrong");
592		    return strcmp(sbuf, pbuf);
593		]]
594	    )],
595	    [ntp_cv_vsnprintf_percent_m=yes],
596	    [ntp_cv_vsnprintf_percent_m=no],
597	    [ntp_cv_vsnprintf_percent_m=no]
598	)]
599    )
600    case "$ntp_cv_vsnprintf_percent_m" in
601     yes)
602	AC_DEFINE([VSNPRINTF_PERCENT_M], [1],
603		  [vsnprintf expands "%m" to strerror(errno)])
604    esac
605esac
606
607AC_CHECK_HEADERS([sys/clockctl.h])
608
609AC_ARG_ENABLE(
610    [clockctl],
611    [AS_HELP_STRING(
612	[--enable-clockctl],
613	[s Use /dev/clockctl for non-root clock control]
614    )],
615    [ntp_use_dev_clockctl=$enableval],
616    [ntp_use_dev_clockctl=$ac_cv_header_sys_clockctl_h]
617)
618
619AC_MSG_CHECKING([if we should use /dev/clockctl])
620AC_MSG_RESULT([$ntp_use_dev_clockctl])
621
622
623AC_CHECK_HEADERS([sys/capability.h sys/prctl.h])
624
625AC_MSG_CHECKING([if we have linux capabilities (libcap)])
626
627case "$ac_cv_header_sys_capability_h$ac_cv_header_sys_prctl_h" in
628 yesyes)
629    case "$host" in
630     mips-sgi-irix*)
631	ntp_have_linuxcaps=no
632	;;
633     *) ntp_have_linuxcaps=yes
634	;;
635    esac
636    ;;
637 *)
638    ntp_have_linuxcaps=no
639    ;;
640esac
641
642AC_ARG_ENABLE(
643    [linuxcaps],
644    [AS_HELP_STRING(
645	[--enable-linuxcaps],
646	[+ Use Linux capabilities for non-root clock control]
647    )],
648    [ntp_have_linuxcaps=$enableval]
649)
650
651AC_MSG_RESULT([$ntp_have_linuxcaps])
652
653case "$ntp_have_linuxcaps" in
654 yes)
655    AC_DEFINE([HAVE_LINUX_CAPABILITIES], [1],
656	[Do we have Linux capabilities?])
657    LIBS="$LIBS -lcap"
658    ;;
659esac
660
661
662AC_CHECK_HEADERS([priv.h])
663
664AC_MSG_CHECKING([if we have solaris privileges])
665
666case "$ac_cv_header_priv_h" in
667 yes)
668    case "$host" in 
669     *-solaris*)
670	AC_CHECK_FUNC(
671    	    [setppriv],
672    	    [ntp_have_solarisprivs=yes],
673    	    [ntp_have_solarisprivs=no]
674	)
675	;;
676    esac
677esac
678
679AC_ARG_ENABLE(
680    [solarisprivs],
681    [AS_HELP_STRING(
682	[--enable-solarisprivs],
683	[+ Use Solaris privileges for non-root clock control]
684    )],
685    [ntp_have_solarisprivs=$enableval]
686)
687
688
689case "$ntp_have_solarisprivs" in
690 yes)
691    AC_DEFINE([HAVE_SOLARIS_PRIVS], [1],
692	[Are Solaris privileges available?])
693esac
694
695AC_MSG_RESULT([$ntp_have_solarisprivs])
696
697case "$ntp_use_dev_clockctl$ntp_have_linuxcaps$ntp_have_solarisprivs" in
698 *yes*)
699    AC_DEFINE([HAVE_DROPROOT], [1],
700	[Can we drop root privileges?])
701esac
702
703case "$host" in
704 *-*-darwin*)
705    AC_SEARCH_LIBS([res_9_init], [resolv])
706    ;;
707 *) AC_SEARCH_LIBS([res_init], [resolv])
708    ;;
709esac
710AC_HEADER_RESOLV
711#HMS: Why do we do this check so "early"?
712AC_CHECK_FUNCS([res_init], , [AC_CHECK_FUNCS([__res_init])])
713
714# We also need -lsocket, but we have tested for that already.
715AC_CHECK_FUNC([inet_ntop], [], 
716    [AC_DEFINE([ISC_PLATFORM_NEEDNTOP], [1], [ISC: provide inet_ntop()])])
717AC_CHECK_FUNC([inet_pton], [],
718    [AC_DEFINE([ISC_PLATFORM_NEEDPTON], [1], [ISC: provide inet_pton()])])
719
720AC_CHECK_TYPES([uintptr_t, int32, u_int32])
721 
722AH_VERBATIM([TYPEDEF_UINTPTR_T],
723[/* Provide a typedef for uintptr_t? */
724#ifndef HAVE_UINTPTR_T
725typedef unsigned int	uintptr_t;
726#define HAVE_UINTPTR_T	1
727#endif])
728
729case "$ac_cv_type_int32::$ac_cv_header_resolv_h" in
730 no::yes)
731    AC_CACHE_CHECK(
732	[for int32 with DNS headers included],
733	[ntp_cv_type_int32_with_dns],
734	[AC_COMPILE_IFELSE(
735	    [AC_LANG_PROGRAM(
736		[[
737		    #ifdef HAVE_ARPA_NAMESER_H
738		    # include <arpa/nameser.h>
739		    #endif
740		    #include <resolv.h>
741		]],
742		[[
743		    size_t cb = sizeof(int32);
744		]]
745	    )],
746	    [ntp_cv_type_int32_with_dns=yes],
747	    [ntp_cv_type_int32_with_dns=no]
748	)]
749    )
750    case "$ntp_cv_type_int32_with_dns" in
751     yes)
752	AC_DEFINE([HAVE_INT32_ONLY_WITH_DNS], [1],
753	    [int32 type in DNS headers, not others.])
754    esac
755esac
756
757case "$ac_cv_type_u_int32::$ac_cv_header_resolv_h" in
758 no::yes)
759    AC_CACHE_CHECK(
760	[for u_int32 with DNS headers included],
761	[ntp_cv_type_u_int32_with_dns],
762	[AC_COMPILE_IFELSE(
763	    [AC_LANG_PROGRAM(
764		[[
765		    #ifdef HAVE_ARPA_NAMESER_H
766		    # include <arpa/nameser.h>
767		    #endif
768		    #include <resolv.h>
769		]],
770		[[
771		    size_t cb = sizeof(u_int32);
772		]]
773	    )],
774	    [ntp_cv_type_u_int32_with_dns=yes],
775	    [ntp_cv_type_u_int32_with_dns=no]
776	)]
777    )
778    case "$ntp_cv_type_u_int32_with_dns" in
779     yes)
780	AC_DEFINE([HAVE_U_INT32_ONLY_WITH_DNS], [1],
781	    [u_int32 type in DNS headers, not others.])
782    esac
783esac
784
785AC_CHECK_HEADERS(
786    [sys/timepps.h],
787    [],
788    [],
789    [
790	#ifdef HAVE_SYS_TIME_H
791	# include <sys/time.h>
792	#endif
793	#ifdef HAVE_ERRNO_H
794	# include <errno.h>
795	#endif
796    ]
797)
798
799AC_CACHE_CHECK(
800    [for struct timespec],
801    [ntp_cv_struct_timespec],
802    [AC_COMPILE_IFELSE(
803	[AC_LANG_PROGRAM(
804	    [[
805		#include <sys/time.h>
806		/* Under SunOS, timespec is in sys/timepps.h,
807		   which needs errno.h and FRAC */
808		#ifdef HAVE_ERRNO_H
809		# include <errno.h>
810		#endif
811		#ifdef HAVE_SYS_TIMEPPS_H
812		# define FRAC 4294967296
813		# include <sys/timepps.h>
814		#endif
815	    ]],
816	    [[
817		struct timespec n;
818	    ]]
819	)],
820	[ntp_cv_struct_timespec=yes],
821	[ntp_cv_struct_timespec=no]
822    )]
823)
824case "$ntp_cv_struct_timespec" in
825 yes)
826    AC_DEFINE([HAVE_STRUCT_TIMESPEC], [1], [struct timespec declared?])
827esac
828
829AC_CACHE_CHECK(
830    [for struct ntptimeval],
831    [ntp_cv_struct_ntptimeval],
832    [AC_COMPILE_IFELSE(
833	[AC_LANG_PROGRAM(
834	    [[
835		#include <sys/time.h>
836		#include <sys/timex.h>
837	    ]],
838	    [[
839		struct ntptimeval n;
840	    ]]
841	)],
842	[ntp_cv_struct_ntptimeval=yes],
843	[ntp_cv_struct_ntptimeval=no]
844    )]
845)
846case "$ntp_cv_struct_ntptimeval" in
847 yes)
848    AC_DEFINE([HAVE_STRUCT_NTPTIMEVAL], [1],
849	[Do we have struct ntptimeval?])
850esac
851
852AC_CHECK_HEADERS(
853    [md5.h],
854    [],
855    [],
856    [
857	#ifdef HAVE_SYS_TYPES_H
858	# include <sys/types.h>
859	#endif
860    ]
861)
862
863AC_SEARCH_LIBS([MD5Init], [md5 md])
864AC_CHECK_FUNCS([MD5Init sysconf getdtablesize sigaction sigset sigvec])
865
866AC_CACHE_CHECK(
867    [for SIGIO],
868    [ntp_cv_hdr_def_sigio],
869    [AC_PREPROC_IFELSE(
870	[AC_LANG_SOURCE([
871	    #include <signal.h>
872
873	    #ifndef SIGIO
874	    # error
875	    #endif
876	])],
877	[ntp_cv_hdr_def_sigio=yes],
878	[ntp_cv_hdr_def_sigio=no]
879    )]
880 )
881
882dnl Override those system that have a losing SIGIO
883AC_MSG_CHECKING([if we want to use SIGIO])
884ans=no
885case "$ntp_cv_hdr_def_sigio" in
886 yes)
887    ans=yes
888    case "$host" in
889     alpha*-dec-osf4*|alpha*-dec-osf5*)
890	ans=no
891	;;
892     *-convex-*)
893	ans=no
894	;;
895     *-dec-*)
896	ans=no
897	;;
898     *-pc-cygwin*)
899	ans=no
900	;;
901     *-sni-sysv*)
902	ans=no
903	;;
904     *-stratus-vos)
905	ans=no
906	;;
907     *-univel-sysv*)
908	ans=no
909	;;
910     *-*-irix6*)
911	ans=no
912	;;
913     *-*-freebsd*)
914	ans=no
915	;;
916     *-*-*linux*)
917	ans=no
918	;;
919     *-*-unicosmp*)
920	ans=no
921	;;
922     *-*-kfreebsd*)
923	ans=no
924	;;
925     m68k-*-mint*)
926	ans=no
927	;;
928    esac
929    ;;
930esac
931case "$ans" in
932 yes)
933    AC_DEFINE([HAVE_SIGNALED_IO], [1],
934	[Can we use SIGIO for tcp and udp IO?])
935esac
936AC_MSG_RESULT([$ans])
937
938AC_CACHE_CHECK(
939    [for SIGPOLL],
940    [ntp_cv_hdr_def_sigpoll],
941    [AC_PREPROC_IFELSE(
942	[AC_LANG_SOURCE([
943	    #include <signal.h>
944	    
945	    #ifndef SIGPOLL
946	    # error
947	    #endif
948	])],
949	[ntp_cv_hdr_def_sigpoll=yes],
950	[ntp_cv_hdr_def_sigpoll=no]
951    )]
952)
953
954AC_MSG_CHECKING([if we can use SIGPOLL for UDP I/O])
955ans=no
956case "$ntp_cv_hdr_def_sigpoll" in
957 yes)
958    case "$host" in
959     mips-sgi-irix*)
960	ans=no
961	;;
962     vax-dec-bsd)
963	ans=no
964	;;
965     *-pc-cygwin*)
966	ans=no
967	;;
968     *-sni-sysv*)
969	ans=no
970	;;
971     *-stratus-vos)
972	ans=no
973	;;
974     *-*-aix[[4-9]]*)
975	# XXX Only verified thru AIX6
976	ans=no
977	;;
978     *-*-hpux*)
979	ans=no
980	;;
981     *-*-*linux*)
982	ans=no
983	;;
984     *-*-osf*)
985	ans=no
986	;;
987     *-*-qnx*)
988	ans=no
989	;;
990     *-*-sunos*)
991	ans=no
992	;;
993     *-*-solaris*)
994	ans=no
995	;;
996     *-*-ultrix*)
997	ans=no
998	;;
999     *-*-unicosmp*)
1000	ans=no
1001	;;
1002     *-*-kfreebsd*)
1003	ans=no
1004	;;
1005     *) ans=yes
1006	;;
1007    esac
1008    ;;
1009esac
1010case "$ans" in
1011 yes)
1012    AC_DEFINE([USE_UDP_SIGPOLL], [1], [Can we use SIGPOLL for UDP?])
1013esac
1014AC_MSG_RESULT([$ans])
1015
1016AC_MSG_CHECKING([if we can use SIGPOLL for TTY I/O])
1017ans=no
1018case "$ntp_cv_hdr_def_sigpoll" in
1019 yes)
1020    case "$host" in
1021     mips-sgi-irix*)
1022	ans=no
1023	;;
1024     vax-dec-bsd)
1025	ans=no
1026	;;
1027     *-pc-cygwin*)
1028	ans=no
1029	;;
1030     *-sni-sysv*)
1031	ans=no
1032	;;
1033     *-stratus-vos)
1034	ans=no
1035	;;
1036     *-*-aix[[4-9]]*)
1037	# XXX Only verified thru AIX6
1038	ans=no
1039	;;
1040     *-*-hpux*)
1041	ans=no
1042	;;
1043     *-*-*linux*)
1044	ans=no
1045	;;
1046     *-*-osf*)
1047	ans=no
1048	;;
1049     *-*-sunos*)
1050	ans=no
1051	;;
1052     *-*-ultrix*)
1053	ans=no
1054	;;
1055     *-*-qnx*)
1056	ans=no
1057	;;
1058     *-*-unicosmp*)
1059	ans=no
1060	;;
1061     *-*-kfreebsd*)
1062	ans=no
1063	;;
1064     *) ans=yes
1065	;;
1066    esac
1067    ;;
1068esac
1069case "$ans" in
1070 yes)
1071    AC_DEFINE([USE_TTY_SIGPOLL], [1], [Can we use SIGPOLL for tty IO?])
1072esac
1073AC_MSG_RESULT([$ans])
1074
1075AC_CACHE_CHECK(
1076    [number of arguments to gettimeofday()],
1077    [ntp_cv_func_Xettimeofday_nargs],
1078    [AC_COMPILE_IFELSE(
1079	[AC_LANG_PROGRAM(
1080	    [[
1081		#include <sys/time.h>
1082	    ]],
1083	    [[
1084		gettimeofday(0, 0);
1085		settimeofday(0, 0);
1086	    ]]
1087	)],
1088	[ntp_cv_func_Xettimeofday_nargs=2],
1089	[ntp_cv_func_Xettimeofday_nargs=1]
1090    )]
1091)
1092case "$ntp_cv_func_Xettimeofday_nargs" in
1093 1)
1094    AC_DEFINE([SYSV_TIMEOFDAY], [1], [Does Xettimeofday take 1 arg?])
1095esac
1096
1097AC_CHECK_FUNCS([settimeofday], ,[
1098    case "$host" in
1099     *-*-mpeix*) ac_cv_func_settimeofday=yes
1100    esac
1101])
1102
1103AC_MSG_CHECKING([if we'll use clock_settime or settimeofday or stime])
1104ntp_warning='GRONK'
1105ans=none
1106case "$ac_cv_func_clock_settime$ac_cv_func_settimeofday$ac_cv_func_stime" in
1107 yes*)
1108    ntp_warning=''
1109    ans='clock_settime()'
1110    ;;
1111 noyes*)
1112    ntp_warning='But clock_settime() would be better (if we had it)'
1113    ans='settimeofday()'
1114    ;;
1115 nonoyes)
1116    ntp_warning='Which is the worst of the three'
1117    ans='stime()'
1118    ;;
1119 *) 
1120    case "$build" in
1121     $host) 
1122	ntp_warning='Which leaves us with nothing to use!'
1123    esac
1124esac
1125AC_MSG_RESULT([$ans])
1126case "$ntp_warning" in
1127 '')
1128    ;;
1129 *)
1130    AC_MSG_WARN([*** $ntp_warning ***])
1131    ;;
1132esac
1133
1134
1135dnl add to LDADD_LIBNTP set by ntp_compiler.m4
1136LDADD_LIBNTP="$LDADD_LIBNTP $LIBS"
1137LIBS=$__LIBS
1138AS_UNSET([__LIBS])
1139
1140])dnl
1141dnl ======================================================================
1142