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