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