roken-frag.m4 revision 103423
1dnl $Id: roken-frag.m4,v 1.44 2002/09/04 20:57:30 joda Exp $
2dnl
3dnl some code to get roken working
4dnl
5dnl rk_ROKEN(subdir)
6dnl
7AC_DEFUN(rk_ROKEN, [
8
9AC_REQUIRE([rk_CONFIG_HEADER])
10
11DIR_roken=roken
12LIB_roken='$(top_builddir)/$1/libroken.la'
13INCLUDES_roken='-I$(top_builddir)/$1 -I$(top_srcdir)/$1'
14
15dnl Checks for programs
16AC_REQUIRE([AC_PROG_CC])
17AC_REQUIRE([AC_PROG_AWK])
18AC_REQUIRE([AC_OBJEXT])
19AC_REQUIRE([AC_EXEEXT])
20AC_REQUIRE([AC_PROG_LIBTOOL])
21
22AC_REQUIRE([AC_MIPS_ABI])
23
24dnl C characteristics
25
26AC_REQUIRE([AC_C___ATTRIBUTE__])
27AC_REQUIRE([AC_C_INLINE])
28AC_REQUIRE([AC_C_CONST])
29AC_WFLAGS(-Wall -Wmissing-prototypes -Wpointer-arith -Wbad-function-cast -Wmissing-declarations -Wnested-externs)
30
31AC_REQUIRE([rk_DB])
32
33dnl C types
34
35AC_REQUIRE([AC_TYPE_SIZE_T])
36AC_HAVE_TYPE([ssize_t],[#include <unistd.h>])
37AC_REQUIRE([AC_TYPE_PID_T])
38AC_REQUIRE([AC_TYPE_UID_T])
39AC_HAVE_TYPE([long long])
40
41AC_REQUIRE([rk_RETSIGTYPE])
42
43dnl Checks for header files.
44AC_REQUIRE([AC_HEADER_STDC])
45AC_REQUIRE([AC_HEADER_TIME])
46
47AC_CHECK_HEADERS([\
48	arpa/inet.h				\
49	arpa/nameser.h				\
50	config.h				\
51	crypt.h					\
52	dirent.h				\
53	errno.h					\
54	err.h					\
55	fcntl.h					\
56	grp.h					\
57	ifaddrs.h				\
58	net/if.h				\
59	netdb.h					\
60	netinet/in.h				\
61	netinet/in6.h				\
62	netinet/in_systm.h			\
63	netinet6/in6.h				\
64	netinet6/in6_var.h			\
65	paths.h					\
66	pwd.h					\
67	resolv.h				\
68	rpcsvc/ypclnt.h				\
69	shadow.h				\
70	sys/bswap.h				\
71	sys/ioctl.h				\
72	sys/mman.h				\
73	sys/param.h				\
74	sys/proc.h				\
75	sys/resource.h				\
76	sys/socket.h				\
77	sys/sockio.h				\
78	sys/stat.h				\
79	sys/sysctl.h				\
80	sys/time.h				\
81	sys/tty.h				\
82	sys/types.h				\
83	sys/uio.h				\
84	sys/utsname.h				\
85	sys/wait.h				\
86	syslog.h				\
87	termios.h				\
88	unistd.h				\
89	userconf.h				\
90	usersec.h				\
91	util.h					\
92	vis.h					\
93])
94	
95AC_REQUIRE([CHECK_NETINET_IP_AND_TCP])
96
97AM_CONDITIONAL(have_err_h, test "$ac_cv_header_err_h" = yes)
98AM_CONDITIONAL(have_fnmatch_h, test "$ac_cv_header_fnmatch_h" = yes)
99AM_CONDITIONAL(have_ifaddrs_h, test "$ac_cv_header_ifaddrs_h" = yes)
100AM_CONDITIONAL(have_vis_h, test "$ac_cv_header_vis_h" = yes)
101
102dnl Check for functions and libraries
103
104AC_FIND_FUNC(socket, socket)
105AC_FIND_FUNC(gethostbyname, nsl)
106AC_FIND_FUNC(syslog, syslog)
107
108AC_KRB_IPV6
109
110AC_FIND_FUNC(gethostbyname2, inet6 ip6)
111
112AC_FIND_FUNC(res_search, resolv,
113[
114#include <stdio.h>
115#ifdef HAVE_SYS_TYPES_H
116#include <sys/types.h>
117#endif
118#ifdef HAVE_NETINET_IN_H
119#include <netinet/in.h>
120#endif
121#ifdef HAVE_ARPA_NAMESER_H
122#include <arpa/nameser.h>
123#endif
124#ifdef HAVE_RESOLV_H
125#include <resolv.h>
126#endif
127],
128[0,0,0,0,0])
129
130AC_FIND_FUNC(res_nsearch, resolv,
131[
132#include <stdio.h>
133#ifdef HAVE_SYS_TYPES_H
134#include <sys/types.h>
135#endif
136#ifdef HAVE_NETINET_IN_H
137#include <netinet/in.h>
138#endif
139#ifdef HAVE_ARPA_NAMESER_H
140#include <arpa/nameser.h>
141#endif
142#ifdef HAVE_RESOLV_H
143#include <resolv.h>
144#endif
145],
146[0,0,0,0,0])
147
148AC_FIND_FUNC(dn_expand, resolv,
149[
150#include <stdio.h>
151#ifdef HAVE_SYS_TYPES_H
152#include <sys/types.h>
153#endif
154#ifdef HAVE_NETINET_IN_H
155#include <netinet/in.h>
156#endif
157#ifdef HAVE_ARPA_NAMESER_H
158#include <arpa/nameser.h>
159#endif
160#ifdef HAVE_RESOLV_H
161#include <resolv.h>
162#endif
163],
164[0,0,0,0,0])
165
166rk_CHECK_VAR(_res, 
167[#include <stdio.h>
168#ifdef HAVE_SYS_TYPES_H
169#include <sys/types.h>
170#endif
171#ifdef HAVE_NETINET_IN_H
172#include <netinet/in.h>
173#endif
174#ifdef HAVE_ARPA_NAMESER_H
175#include <arpa/nameser.h>
176#endif
177#ifdef HAVE_RESOLV_H
178#include <resolv.h>
179#endif])
180
181
182AC_BROKEN_SNPRINTF
183AC_BROKEN_VSNPRINTF
184
185AC_BROKEN_GLOB
186if test "$ac_cv_func_glob_working" != yes; then
187	AC_LIBOBJ(glob)
188fi
189AM_CONDITIONAL(have_glob_h, test "$ac_cv_func_glob_working" = yes)
190
191
192AC_CHECK_FUNCS([				\
193	asnprintf				\
194	asprintf				\
195	atexit					\
196	cgetent					\
197	getconfattr				\
198	getprogname				\
199	getrlimit				\
200	getspnam				\
201	initstate				\
202	issetugid				\
203	on_exit					\
204	random					\
205	setprogname				\
206	setstate				\
207	strsvis					\
208	strunvis				\
209	strvis					\
210	strvisx					\
211	svis					\
212	sysconf					\
213	sysctl					\
214	uname					\
215	unvis					\
216	vasnprintf				\
217	vasprintf				\
218	vis					\
219])
220
221if test "$ac_cv_func_cgetent" = no; then
222	AC_LIBOBJ(getcap)
223fi
224
225AC_REQUIRE([AC_FUNC_GETLOGIN])
226
227AC_REQUIRE([AC_FUNC_MMAP])
228
229AC_FIND_FUNC_NO_LIBS(getsockopt,,
230[#ifdef HAVE_SYS_TYPES_H
231#include <sys/types.h>
232#endif
233#ifdef HAVE_SYS_SOCKET_H
234#include <sys/socket.h>
235#endif],
236[0,0,0,0,0])
237AC_FIND_FUNC_NO_LIBS(setsockopt,,
238[#ifdef HAVE_SYS_TYPES_H
239#include <sys/types.h>
240#endif
241#ifdef HAVE_SYS_SOCKET_H
242#include <sys/socket.h>
243#endif],
244[0,0,0,0,0])
245
246AC_FIND_IF_NOT_BROKEN(hstrerror, resolv,
247[#ifdef HAVE_NETDB_H
248#include <netdb.h>
249#endif],
25017)
251AC_NEED_PROTO([
252#ifdef HAVE_NETDB_H
253#include <netdb.h>
254#endif],
255hstrerror)
256
257AC_FOREACH([rk_func], [asprintf vasprintf asnprintf vasnprintf],
258	[AC_NEED_PROTO([
259	#include <stdio.h>
260	#include <string.h>],
261	rk_func)])
262
263AC_FIND_FUNC_NO_LIBS(bswap16,,
264[#ifdef HAVE_SYS_BSWAP_H
265#include <sys/bswap.h>
266#endif],0)
267
268AC_FIND_FUNC_NO_LIBS(bswap32,,
269[#ifdef HAVE_SYS_BSWAP_H
270#include <sys/bswap.h>
271#endif],0)
272
273AC_FIND_FUNC_NO_LIBS(pidfile,util,
274[#ifdef HAVE_UTIL_H
275#include <util.h>
276#endif],0)
277
278AC_FIND_IF_NOT_BROKEN(getaddrinfo,,
279[#ifdef HAVE_NETDB_H
280#include <netdb.h>
281#endif],[0,0,0,0])
282
283AC_FIND_IF_NOT_BROKEN(getnameinfo,,
284[#ifdef HAVE_NETDB_H
285#include <netdb.h>
286#endif],[0,0,0,0,0,0,0])
287
288AC_FIND_IF_NOT_BROKEN(freeaddrinfo,,
289[#ifdef HAVE_NETDB_H
290#include <netdb.h>
291#endif],[0])
292
293AC_FIND_IF_NOT_BROKEN(gai_strerror,,
294[#ifdef HAVE_NETDB_H
295#include <netdb.h>
296#endif],[0])
297
298AC_BROKEN([					\
299	chown					\
300	copyhostent				\
301	daemon					\
302	ecalloc					\
303	emalloc					\
304	erealloc				\
305	estrdup					\
306	err					\
307	errx					\
308	fchown					\
309	flock					\
310	fnmatch					\
311	freehostent				\
312	getcwd					\
313	getdtablesize				\
314	getegid					\
315	geteuid					\
316	getgid					\
317	gethostname				\
318	getifaddrs				\
319	getipnodebyaddr				\
320	getipnodebyname				\
321	getopt					\
322	gettimeofday				\
323	getuid					\
324	getusershell				\
325	initgroups				\
326	innetgr					\
327	iruserok				\
328	localtime_r				\
329	lstat					\
330	memmove					\
331	mkstemp					\
332	putenv					\
333	rcmd					\
334	readv					\
335	recvmsg					\
336	sendmsg					\
337	setegid					\
338	setenv					\
339	seteuid					\
340	strcasecmp				\
341	strdup					\
342	strerror				\
343	strftime				\
344	strlcat					\
345	strlcpy					\
346	strlwr					\
347	strncasecmp				\
348	strndup					\
349	strnlen					\
350	strptime				\
351	strsep					\
352	strsep_copy				\
353	strtok_r				\
354	strupr					\
355	swab					\
356	unsetenv				\
357	verr					\
358	verrx					\
359	vsyslog					\
360	vwarn					\
361	vwarnx					\
362	warn					\
363	warnx					\
364	writev					\
365])
366
367AC_FOREACH([rk_func], [strndup strsep strtok_r],
368	[AC_NEED_PROTO([#include <string.h>], rk_func)])
369
370AC_FOREACH([rk_func], [strsvis strunvis strvis strvisx svis unvis vis],
371[AC_NEED_PROTO([#ifdef HAVE_VIS_H
372#include <vis.h>
373#endif], rk_func)])
374
375AC_BROKEN2(inet_aton,
376[#ifdef HAVE_SYS_TYPES_H
377#include <sys/types.h>
378#endif
379#ifdef HAVE_SYS_SOCKET_H
380#include <sys/socket.h>
381#endif
382#ifdef HAVE_NETINET_IN_H
383#include <netinet/in.h>
384#endif
385#ifdef HAVE_ARPA_INET_H
386#include <arpa/inet.h>
387#endif],
388[0,0])
389
390AC_BROKEN2(inet_ntop,
391[#ifdef HAVE_SYS_TYPES_H
392#include <sys/types.h>
393#endif
394#ifdef HAVE_SYS_SOCKET_H
395#include <sys/socket.h>
396#endif
397#ifdef HAVE_NETINET_IN_H
398#include <netinet/in.h>
399#endif
400#ifdef HAVE_ARPA_INET_H
401#include <arpa/inet.h>
402#endif],
403[0, 0, 0, 0])
404
405AC_BROKEN2(inet_pton,
406[#ifdef HAVE_SYS_TYPES_H
407#include <sys/types.h>
408#endif
409#ifdef HAVE_SYS_SOCKET_H
410#include <sys/socket.h>
411#endif
412#ifdef HAVE_NETINET_IN_H
413#include <netinet/in.h>
414#endif
415#ifdef HAVE_ARPA_INET_H
416#include <arpa/inet.h>
417#endif],
418[0,0,0])
419
420dnl
421dnl Check for sa_len in struct sockaddr, 
422dnl needs to come before the getnameinfo test
423dnl
424AC_HAVE_STRUCT_FIELD(struct sockaddr, sa_len, [#include <sys/types.h>
425#include <sys/socket.h>])
426
427if test "$ac_cv_func_getnameinfo" = "yes"; then
428  rk_BROKEN_GETNAMEINFO
429  if test "$ac_cv_func_getnameinfo_broken" = yes; then
430	AC_LIBOBJ(getnameinfo)
431  fi
432fi
433
434if test "$ac_cv_func_getaddrinfo" = "yes"; then
435  rk_BROKEN_GETADDRINFO
436  if test "$ac_cv_func_getaddrinfo_numserv" = no; then
437	AC_LIBOBJ(getaddrinfo)
438	AC_LIBOBJ(freeaddrinfo)
439  fi
440fi
441
442AC_NEED_PROTO([#include <stdlib.h>], setenv)
443AC_NEED_PROTO([#include <stdlib.h>], unsetenv)
444AC_NEED_PROTO([#include <unistd.h>], gethostname)
445AC_NEED_PROTO([#include <unistd.h>], mkstemp)
446AC_NEED_PROTO([#include <unistd.h>], getusershell)
447
448AC_NEED_PROTO([
449#ifdef HAVE_SYS_TYPES_H
450#include <sys/types.h>
451#endif
452#ifdef HAVE_SYS_SOCKET_H
453#include <sys/socket.h>
454#endif
455#ifdef HAVE_NETINET_IN_H
456#include <netinet/in.h>
457#endif
458#ifdef HAVE_ARPA_INET_H
459#include <arpa/inet.h>
460#endif],
461inet_aton)
462
463AC_FIND_FUNC_NO_LIBS(crypt, crypt)dnl
464
465AC_REQUIRE([rk_BROKEN_REALLOC])dnl
466
467dnl AC_KRB_FUNC_GETCWD_BROKEN
468
469dnl
470dnl Checks for prototypes and declarations
471dnl
472
473AC_PROTO_COMPAT([
474#ifdef HAVE_SYS_TYPES_H
475#include <sys/types.h>
476#endif
477#ifdef HAVE_SYS_SOCKET_H
478#include <sys/socket.h>
479#endif
480#ifdef HAVE_NETINET_IN_H
481#include <netinet/in.h>
482#endif
483#ifdef HAVE_ARPA_INET_H
484#include <arpa/inet.h>
485#endif
486#ifdef HAVE_NETDB_H
487#include <netdb.h>
488#endif
489],
490gethostbyname, struct hostent *gethostbyname(const char *))
491
492AC_PROTO_COMPAT([
493#ifdef HAVE_SYS_TYPES_H
494#include <sys/types.h>
495#endif
496#ifdef HAVE_SYS_SOCKET_H
497#include <sys/socket.h>
498#endif
499#ifdef HAVE_NETINET_IN_H
500#include <netinet/in.h>
501#endif
502#ifdef HAVE_ARPA_INET_H
503#include <arpa/inet.h>
504#endif
505#ifdef HAVE_NETDB_H
506#include <netdb.h>
507#endif
508],
509gethostbyaddr, struct hostent *gethostbyaddr(const void *, size_t, int))
510
511AC_PROTO_COMPAT([
512#ifdef HAVE_SYS_TYPES_H
513#include <sys/types.h>
514#endif
515#ifdef HAVE_SYS_SOCKET_H
516#include <sys/socket.h>
517#endif
518#ifdef HAVE_NETINET_IN_H
519#include <netinet/in.h>
520#endif
521#ifdef HAVE_ARPA_INET_H
522#include <arpa/inet.h>
523#endif
524#ifdef HAVE_NETDB_H
525#include <netdb.h>
526#endif
527],
528getservbyname, struct servent *getservbyname(const char *, const char *))
529
530AC_PROTO_COMPAT([
531#ifdef HAVE_SYS_TYPES_H
532#include <sys/types.h>
533#endif
534#ifdef HAVE_SYS_SOCKET_H
535#include <sys/socket.h>
536#endif
537],
538getsockname, int getsockname(int, struct sockaddr*, socklen_t*))
539
540AC_PROTO_COMPAT([
541#ifdef HAVE_SYSLOG_H
542#include <syslog.h>
543#endif
544],
545openlog, void openlog(const char *, int, int))
546
547AC_NEED_PROTO([
548#ifdef HAVE_CRYPT_H
549#include <crypt.h>
550#endif
551#ifdef HAVE_UNISTD_H
552#include <unistd.h>
553#endif
554],
555crypt)
556
557dnl variables
558
559rk_CHECK_VAR(h_errno, 
560[#ifdef HAVE_SYS_TYPES_H
561#include <sys/types.h>
562#endif
563#ifdef HAVE_NETDB_H
564#include <netdb.h>
565#endif])
566
567rk_CHECK_VAR(h_errlist, 
568[#ifdef HAVE_NETDB_H
569#include <netdb.h>
570#endif])
571
572rk_CHECK_VAR(h_nerr, 
573[#ifdef HAVE_NETDB_H
574#include <netdb.h>
575#endif])
576
577rk_CHECK_VAR([__progname], 
578[#ifdef HAVE_ERR_H
579#include <err.h>
580#endif])
581
582AC_CHECK_DECLARATION([#include <stdlib.h>
583#ifdef HAVE_UNISTD_H
584#include <unistd.h>
585#endif], optarg)
586AC_CHECK_DECLARATION([#include <stdlib.h>
587#ifdef HAVE_UNISTD_H
588#include <unistd.h>
589#endif], optind)
590AC_CHECK_DECLARATION([#include <stdlib.h>
591#ifdef HAVE_UNISTD_H
592#include <unistd.h>
593#endif], opterr)
594AC_CHECK_DECLARATION([#include <stdlib.h>
595#ifdef HAVE_UNISTD_H
596#include <unistd.h>
597#endif], optopt)
598
599AC_CHECK_DECLARATION([#include <stdlib.h>], environ)
600
601dnl
602dnl Check for fields in struct tm
603dnl
604
605AC_HAVE_STRUCT_FIELD(struct tm, tm_gmtoff, [#include <time.h>])
606AC_HAVE_STRUCT_FIELD(struct tm, tm_zone, [#include <time.h>])
607
608dnl
609dnl or do we have a variable `timezone' ?
610dnl
611
612rk_CHECK_VAR(timezone,[#include <time.h>])
613rk_CHECK_VAR(altzone,[#include <time.h>])
614
615AC_HAVE_TYPE([sa_family_t],[#include <sys/socket.h>])
616AC_HAVE_TYPE([socklen_t],[#include <sys/socket.h>])
617AC_HAVE_TYPE([struct sockaddr], [#include <sys/socket.h>])
618AC_HAVE_TYPE([struct sockaddr_storage], [#include <sys/socket.h>])
619AC_HAVE_TYPE([struct addrinfo], [#include <netdb.h>])
620AC_HAVE_TYPE([struct ifaddrs], [#include <ifaddrs.h>])
621AC_HAVE_TYPE([struct iovec],[
622#include <sys/types.h>
623#include <sys/uio.h>
624])
625AC_HAVE_TYPE([struct msghdr],[
626#include <sys/types.h>
627#include <sys/socket.h>
628])
629
630dnl
631dnl Check for struct winsize
632dnl
633
634AC_KRB_STRUCT_WINSIZE
635
636dnl
637dnl Check for struct spwd
638dnl
639
640AC_KRB_STRUCT_SPWD
641
642dnl won't work with automake
643dnl moved to AC_OUTPUT in configure.in
644dnl AC_CONFIG_FILES($1/Makefile)
645
646LIB_roken="${LIB_roken} \$(LIB_crypt) \$(LIB_dbopen)"
647
648AC_SUBST(DIR_roken)dnl
649AC_SUBST(LIB_roken)dnl
650AC_SUBST(INCLUDES_roken)dnl
651])
652