]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/ntp/sntp/m4/ntp_ipv6.m4
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / ntp / sntp / m4 / ntp_ipv6.m4
1 dnl ######################################################################
2 dnl Common IPv6 detection for NTP configure.ac files
3 AC_DEFUN([NTP_IPV6], [
4
5 AC_CACHE_CHECK(
6     [for struct sockaddr_storage],
7     [ntp_cv_sockaddr_storage],
8     [AC_COMPILE_IFELSE(
9         [AC_LANG_PROGRAM(
10             [[
11                 #ifdef HAVE_SYS_TYPES_H
12                 # include <sys/types.h>
13                 #endif
14                 #ifdef HAVE_SYS_SOCKET_H
15                 # include <sys/socket.h>
16                 #endif
17                 #ifdef HAVE_NETINET_IN_H
18                 # include <netinet/in.h>
19                 #endif
20             ]],
21             [[
22                 struct sockaddr_storage n;
23             ]]
24         )],
25         [ntp_cv_sockaddr_storage=yes],
26         [ntp_cv_sockaddr_storage=no]
27     )]
28 )
29 case "$ntp_cv_sockaddr_storage" in
30  yes)
31     AC_DEFINE([HAVE_STRUCT_SOCKADDR_STORAGE], [1],
32         [Does a system header define struct sockaddr_storage?])
33     AC_CACHE_CHECK(
34         [for sockaddr_storage.__ss_family],
35         [ntp_cv_have___ss_family],
36         [AC_COMPILE_IFELSE(
37             [AC_LANG_PROGRAM(
38                 [[
39                     #ifdef HAVE_SYS_TYPES_H
40                     # include <sys/types.h>
41                     #endif
42                     #ifdef HAVE_SYS_SOCKET_H
43                     # include <sys/socket.h>
44                     #endif
45                     #ifdef HAVE_NETINET_IN_H
46                     # include <netinet/in.h>
47                     #endif
48                 ]],
49                 [[
50                     struct sockaddr_storage s;
51                     s.__ss_family = 1;
52                 ]]
53             )],
54             [ntp_cv_have___ss_family=yes],
55             [ntp_cv_have___ss_family=no]
56         )]
57     )
58     case "$ntp_cv_have___ss_family" in
59      yes)
60         AC_DEFINE([HAVE___SS_FAMILY_IN_SS], [1],
61                   [Does struct sockaddr_storage have __ss_family?])
62     esac
63     AH_VERBATIM(
64         [HAVE___SS_FAMILY_IN_SS_VERBATIM],
65         [
66             /* Handle sockaddr_storage.__ss_family */
67             #ifdef HAVE___SS_FAMILY_IN_SS
68             # define ss_family __ss_family
69             #endif /* HAVE___SS_FAMILY_IN_SS */
70         ]
71     )
72 esac
73
74
75 #
76 # Look for in_port_t.
77 #
78 AC_CACHE_CHECK(
79     [for in_port_t],
80     [isc_cv_have_in_port_t],
81     [AC_COMPILE_IFELSE(
82         [AC_LANG_PROGRAM(
83             [[
84                 #include <sys/types.h>
85                 #include <netinet/in.h>
86             ]],
87             [[
88                 in_port_t port = 25; 
89                 return (0);
90             ]]
91         )],
92         [isc_cv_have_in_port_t=yes],
93         [isc_cv_have_in_port_t=no]
94     )]
95 )
96 case "$isc_cv_have_in_port_t" in
97  no)
98         AC_DEFINE([ISC_PLATFORM_NEEDPORTT], [1],
99             [Declare in_port_t?])
100 esac
101
102 AC_CACHE_CHECK(
103     [type of socklen arg for getsockname()],
104     [ntp_cv_getsockname_socklen_type],
105     [
106     getsockname_socklen_type_found=no
107     for getsockname_arg2 in 'struct sockaddr *' 'void *'; do
108         for ntp_cv_getsockname_socklen_type in 'socklen_t' 'size_t' 'unsigned int' 'int'; do
109             AC_COMPILE_IFELSE(
110                 [AC_LANG_PROGRAM(
111                     [[
112                         #ifdef HAVE_SYS_TYPES_H
113                         # include <sys/types.h>
114                         #endif
115                         #ifdef HAVE_SYS_SOCKET_H
116                         # include <sys/socket.h>
117                         #endif
118                     ]], [[
119                         extern
120                         getsockname(int, $getsockname_arg2, 
121                                 $ntp_cv_getsockname_socklen_type *);
122                     ]]
123                 )],
124                 [getsockname_socklen_type_found=yes ; break 2],
125                 []
126             )
127         done
128     done
129     case "$getsockname_socklen_type_found" in
130      no)
131         ntp_cv_getsockname_socklen_type='socklen_t'
132     esac
133     AS_UNSET([getsockname_arg2])
134     AS_UNSET([getsockname_socklen_type_found])
135     ]
136 )
137 AC_DEFINE_UNQUOTED([GETSOCKNAME_SOCKLEN_TYPE],
138                    [$ntp_cv_getsockname_socklen_type],
139                    [What is getsockname()'s socklen type?])
140
141 AC_CACHE_CHECK(
142     [struct sockaddr for sa_len],
143     [isc_cv_platform_havesalen],
144     [AC_COMPILE_IFELSE(
145         [AC_LANG_PROGRAM(
146             [[
147                 #include <sys/types.h>
148                 #include <sys/socket.h>
149             ]],
150             [[
151                 extern struct sockaddr *ps;
152                 return ps->sa_len;
153             ]]
154         )],
155         [isc_cv_platform_havesalen=yes],
156         [isc_cv_platform_havesalen=no]
157     )]
158 )
159 case "$isc_cv_platform_havesalen" in
160  yes)
161     AC_DEFINE([ISC_PLATFORM_HAVESALEN], [1],
162          [struct sockaddr has sa_len?])
163 esac
164
165 AC_ARG_ENABLE(
166     [ipv6],
167     [AS_HELP_STRING(
168         [--enable-ipv6],
169         [s use IPv6?]
170     )]
171 )
172
173 case "$enable_ipv6" in
174  yes|''|autodetect)
175     case "$host" in
176      powerpc-ibm-aix4*)
177         ;;
178      *)
179         AC_DEFINE([WANT_IPV6], [1], [configure --enable-ipv6])
180         ;;
181     esac
182     ;;
183  no)
184     ;;
185 esac
186
187
188 dnl [Bug 1984] ntp/libisc fails to compile on OS X 10.7 (Lion)
189 case "$host" in
190  *-*-darwin*)
191     AC_DEFINE([__APPLE_USE_RFC_3542], [1], [Are we _special_?])
192 esac
193
194
195 AC_CACHE_CHECK(
196     [for IPv6 structures],
197     [isc_cv_found_ipv6],
198     [AC_COMPILE_IFELSE(
199         [AC_LANG_PROGRAM(
200             [[
201                 #include <sys/types.h>
202                 #include <sys/socket.h>
203                 #include <netinet/in.h>
204             ]],
205             [[
206                 struct sockaddr_in6 sin6;
207             ]]
208         )],
209         [isc_cv_found_ipv6=yes],
210         [isc_cv_found_ipv6=no]
211     )]
212 )
213
214 #
215 # See whether IPv6 support is provided via a Kame add-on.
216 # This is done before other IPv6 linking tests so LIBS is properly set.
217 #
218 AC_MSG_CHECKING([for Kame IPv6 support])
219 AC_ARG_WITH(
220     [kame],
221     [AS_HELP_STRING(
222         [--with-kame],
223         [- =/usr/local/v6]
224     )],
225     [use_kame="$withval"],
226     [use_kame="no"]
227 )
228 case "$use_kame" in
229  no)
230     ;;
231  yes)
232     kame_path=/usr/local/v6
233     ;;
234  *)
235     kame_path="$use_kame"
236     ;;
237 esac
238 case "$use_kame" in
239  no)
240     AC_MSG_RESULT([no])
241     ;;
242  *)
243     if test -f $kame_path/lib/libinet6.a; then
244         AC_MSG_RESULT([$kame_path/lib/libinet6.a])
245         LIBS="-L$kame_path/lib -linet6 $LIBS"
246     else
247         AC_MSG_ERROR([$kame_path/lib/libinet6.a not found.
248
249 Please choose the proper path with the following command:
250
251     configure --with-kame=PATH
252 ])
253     fi
254     ;;
255 esac
256
257 #
258 # Whether netinet6/in6.h is needed has to be defined in isc/platform.h.
259 # Including it on Kame-using platforms is very bad, though, because
260 # Kame uses #error against direct inclusion.   So include it on only
261 # the platform that is otherwise broken without it -- BSD/OS 4.0 through 4.1.
262 # This is done before the in6_pktinfo check because that's what
263 # netinet6/in6.h is needed for.
264 #
265 case "$host" in
266  *-bsdi4.[[01]]*)
267     AC_DEFINE([ISC_PLATFORM_NEEDNETINET6IN6H], [1],
268         [Do we need netinet6/in6.h?])
269     isc_netinet6in6_hack="#include <netinet6/in6.h>"
270     ;;
271  *)
272     isc_netinet6in6_hack=""
273     ;;
274 esac
275
276 #
277 # This is similar to the netinet6/in6.h issue.
278 #
279 case "$host" in
280  *-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
281     AC_DEFINE([ISC_PLATFORM_FIXIN6ISADDR], [1],
282         [Do we need to fix in6isaddr?])
283     isc_netinetin6_hack="#include <netinet/in6.h>"
284     ;;
285  *)
286     isc_netinetin6_hack=""
287     ;;
288 esac
289
290
291 case "$isc_cv_found_ipv6" in
292  yes)
293     AC_DEFINE([ISC_PLATFORM_HAVEIPV6], [1], [have IPv6?])
294     AC_CACHE_CHECK(
295         [for in6_pktinfo],
296         [isc_cv_have_in6_pktinfo],
297         [AC_COMPILE_IFELSE(
298             [AC_LANG_PROGRAM(
299                 [[
300                     #include <sys/types.h>
301                     #include <sys/socket.h>
302                     #include <netinet/in.h>
303                     $isc_netinetin6_hack
304                     $isc_netinet6in6_hack
305                 ]],
306                 [[
307                     struct in6_pktinfo xyzzy;
308                 ]]
309             )],
310             [isc_cv_have_in6_pktinfo=yes],
311             [isc_cv_have_in6_pktinfo=no]
312         )]
313     )
314     case "$isc_cv_have_in6_pktinfo" in
315      yes)
316         AC_DEFINE([ISC_PLATFORM_HAVEIN6PKTINFO], [1],
317                 [have struct in6_pktinfo?])
318     esac
319
320
321     # HMS: Use HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID instead?
322     AC_CACHE_CHECK(
323         [for sockaddr_in6.sin6_scope_id],
324         [isc_cv_have_sin6_scope_id],
325         [AC_COMPILE_IFELSE(
326             [AC_LANG_PROGRAM(
327                 [[
328                     #include <sys/types.h>
329                     #include <sys/socket.h>
330                     #include <netinet/in.h>
331                     $isc_netinetin6_hack
332                     $isc_netinet6in6_hack
333                 ]],
334                 [[
335                     struct sockaddr_in6 xyzzy;
336                     xyzzy.sin6_scope_id = 0;
337                 ]]
338             )],
339             [isc_cv_have_sin6_scope_id=yes],
340             [isc_cv_have_sin6_scope_id=no]
341         )]
342     )
343
344     case "$isc_cv_have_sin6_scope_id" in
345      yes)
346         AC_DEFINE([ISC_PLATFORM_HAVESCOPEID], [1], [sin6_scope_id?])
347     esac
348 esac
349
350
351 # We need this check run even without isc_cv_found_ipv6=yes
352
353 AC_CACHE_CHECK(
354     [for in6addr_any],
355     [isc_cv_in6addr_any_links],
356     [
357         SAVED_LIBS="$LIBS"
358         LIBS="$LDADD_LIBNTP $LIBS"
359         AC_LINK_IFELSE(
360             [AC_LANG_PROGRAM(
361                 AC_INCLUDES_DEFAULT [[
362                     #include <sys/socket.h>
363                     #include <netinet/in.h>
364                     $isc_netinetin6_hack
365                     $isc_netinet6in6_hack
366                 ]],
367                 [[
368                     printf("%x", in6addr_any.s6_addr[15]);
369                 ]]
370             )],
371             [isc_cv_in6addr_any_links=yes],
372             [isc_cv_in6addr_any_links=no]
373         )
374         LIBS="$SAVED_LIBS"
375         AS_UNSET([SAVED_LIBS])
376     ]
377 )
378
379 case "$isc_cv_in6addr_any_links" in
380  no)
381     AC_DEFINE([ISC_PLATFORM_NEEDIN6ADDRANY], [1], [missing in6addr_any?])
382 esac
383
384
385 AC_CACHE_CHECK(
386     [for struct if_laddrconf],
387     [isc_cv_struct_if_laddrconf],
388     [AC_COMPILE_IFELSE(
389         [AC_LANG_PROGRAM(
390             [[
391                 #include <sys/types.h>
392                 #include <net/if6.h>
393             ]],
394             [[
395                 struct if_laddrconf a;
396             ]]
397         )],
398         [isc_cv_struct_if_laddrconf=yes],
399         [isc_cv_struct_if_laddrconf=no]
400     )]
401 )
402
403 case "$isc_cv_struct_if_laddrconf" in
404  yes)
405     AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
406         [have struct if_laddrconf?])
407 esac
408
409 AC_CACHE_CHECK(
410     [for struct if_laddrreq],
411     isc_cv_struct_if_laddrreq,
412     [AC_COMPILE_IFELSE(
413         [AC_LANG_PROGRAM(
414             [[
415                 #include <sys/types.h>
416                 #include <net/if6.h>
417             ]],
418             [[
419                 struct if_laddrreq a;
420             ]]
421         )],
422         [isc_cv_struct_if_laddrreq=yes],
423         [isc_cv_struct_if_laddrreq=no]
424     )]
425 )
426
427 case "$isc_cv_struct_if_laddrreq" in
428  yes)
429     AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
430         [have struct if_laddrreq?])
431 esac
432
433 AC_CACHE_CHECK(
434     [for multicast IP support],
435     [ntp_cv_multicast],
436     [
437         ntp_cv_multicast=no
438         case "$host" in
439          i386-sequent-sysv4)
440             ;;
441          *)
442             AC_COMPILE_IFELSE(
443                 [AC_LANG_PROGRAM(
444                     [[
445                         #ifdef HAVE_NETINET_IN_H
446                         # include <netinet/in.h>
447                         #endif
448                     ]],
449                     [[
450                         struct ip_mreq ipmr;
451                         ipmr.imr_interface.s_addr = 0;
452                     ]]
453                 )],
454                 [ntp_cv_multicast=yes],
455                 []
456             )
457             ;;
458         esac
459     ]
460 )
461 case "$ntp_cv_multicast" in
462  yes)
463     AC_DEFINE([MCAST], [1], [Does the target support multicast IP?])
464     AC_CACHE_CHECK(
465         [arg type needed for setsockopt() IP*_MULTICAST_LOOP],
466         [ntp_cv_typeof_ip_multicast_loop],
467         [
468             case "$host" in
469              *-*-netbsd*|*-*-*linux*)
470                 ntp_cv_typeof_ip_multicast_loop=u_int
471                 ;;
472              *)
473                 ntp_cv_typeof_ip_multicast_loop=u_char
474                 ;;
475             esac
476         ]
477     )
478     AC_DEFINE_UNQUOTED([TYPEOF_IP_MULTICAST_LOOP],
479         [$ntp_cv_typeof_ip_multicast_loop],
480         [What type to use for setsockopt])
481 esac
482
483 AC_ARG_ENABLE(
484     [getifaddrs],
485     [AS_HELP_STRING(
486         [--enable-getifaddrs],
487         [+ Enable the use of getifaddrs() [[yes|no]].]
488     )],
489     [want_getifaddrs="$enableval"],
490     [want_getifaddrs="yes"]
491 )
492
493 case $want_getifaddrs in
494  glibc)
495     AC_MSG_WARN([--enable-getifaddrs=glibc is no longer required])
496 esac
497 case $want_getifaddrs in
498  no)
499     ;;
500  *)
501     SAVED_LIBS="$LIBS"
502     LIBS="$LDADD_LIBNTP $LIBS"
503     AC_CHECK_FUNCS([getifaddrs])
504     LIBS="$SAVED_LIBS"
505     AS_UNSET([SAVED_LIBS])
506     ;;
507 esac
508
509 #
510 # Check for if_nametoindex() for IPv6 scoped addresses support
511 #
512 case "$host" in
513  *-hp-hpux*)
514     AC_SEARCH_LIBS([if_nametoindex], [ipv6])
515 esac
516 SAVED_LIBS="$LIBS"
517 LIBS="$LDADD_LIBNTP $LIBS"
518 AC_CHECK_FUNCS([if_nametoindex])
519 LIBS="$SAVED_LIBS"
520 AS_UNSET([SAVED_LIBS])
521 case "$ac_cv_func_if_nametoindex" in
522  yes)
523         AC_DEFINE([ISC_PLATFORM_HAVEIFNAMETOINDEX], [1],
524             [ISC: do we have if_nametoindex()?])
525 esac
526
527 ])dnl
528 dnl ======================================================================