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