1m4_define([upcase],`echo $1 | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`)dnl
2
3dnl love_FIND_FUNC(func, includes, arguments)
4dnl kind of like AC_CHECK_FUNC, but with headerfiles
5AC_DEFUN([love_FIND_FUNC], [
6
7AC_MSG_CHECKING([for $1])
8AC_CACHE_VAL(ac_cv_love_func_$1,
9[
10AC_LINK_IFELSE([AC_LANG_PROGRAM([[$2]],[[$1($3)]])],
11[eval "ac_cv_love_func_$1=yes"],[eval "ac_cv_love_func_$1=no"])])
12
13eval "ac_res=\$ac_cv_love_func_$1"
14
15if false; then
16	AC_CHECK_FUNCS($1)
17fi
18# $1
19eval "ac_tr_func=HAVE_[]upcase($1)"
20
21case "$ac_res" in
22	yes)
23	AC_DEFINE_UNQUOTED($ac_tr_func)
24	AC_MSG_RESULT([yes])
25	;;
26	no)
27	AC_MSG_RESULT([no])
28	;;
29esac
30
31
32])
33
34
35
36AC_CHECK_HEADERS([				\
37	crypt.h					\
38	curses.h				\
39	err.h					\
40	errno.h					\
41	inttypes.h				\
42	netdb.h					\
43	signal.h				\
44	sys/bswap.h				\
45	sys/file.h				\
46	sys/stropts.h				\
47	sys/timeb.h				\
48	sys/times.h				\
49	sys/uio.h				\
50	sys/un.h				\
51	sys/utsname.h				\
52	term.h					\
53	termcap.h				\
54	time.h					\
55	timezone.h				\
56	ttyname.h				\
57	netinet/in.h				\
58	netinet/in6.h				\
59	netinet6/in6.h
60])
61
62AC_CHECK_FUNCS([				\
63	atexit					\
64	cgetent					\
65	getprogname				\
66	inet_ntop				\
67	inet_aton				\
68	inet_pton				\
69	gethostname				\
70	getnameinfo				\
71	iruserok				\
72	putenv					\
73	rcmd					\
74	readv					\
75	sendmsg					\
76	setitimer				\
77	socket					\
78	strlwr					\
79	strncasecmp				\
80	strptime				\
81	strsep					\
82	strsep_copy				\
83	strtok_r				\
84	strupr					\
85	swab					\
86	umask					\
87	uname					\
88	unsetenv				\
89	closefrom				\
90	hstrerror				\
91	err					\
92	errx					\
93	warnx					\
94	flock					\
95	getaddrinfo				\
96	freeaddrinfo				\
97	getipnodebyname				\
98	getipnodebyaddr				\
99	freehostent				\
100	writev
101])
102
103love_FIND_FUNC(bswap16, [#ifdef HAVE_SYS_BSWAP_H
104#include <sys/bswap.h>
105#endif], 0)
106
107love_FIND_FUNC(bswap32, [#ifdef HAVE_SYS_BSWAP_H
108#include <sys/bswap.h>
109#endif], 0)
110
111
112dnl AC_HAVE_TYPE(TYPE,INCLUDES)
113AC_DEFUN([AC_HAVE_TYPE], [
114AC_REQUIRE([AC_HEADER_STDC])
115cv=`echo "$1" | sed 'y%./+- %__p__%'`
116AC_MSG_CHECKING(for $1)
117AC_CACHE_VAL([ac_cv_type_$cv],
118AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
119AC_INCLUDES_DEFAULT
120$2]],
121[[$1 foo;]])],
122[eval "ac_cv_type_$cv=yes"],
123[eval "ac_cv_type_$cv=no"]))dnl
124ac_foo=`eval echo \\$ac_cv_type_$cv`
125AC_MSG_RESULT($ac_foo)
126if test "$ac_foo" = yes; then
127  ac_tr_hdr=HAVE_`echo $1 | sed 'y%abcdefghijklmnopqrstuvwxyz./- %ABCDEFGHIJKLMNOPQRSTUVWXYZ____%'`
128if false; then
129	AC_CHECK_TYPES($1)
130fi
131  AC_DEFINE_UNQUOTED($ac_tr_hdr, 1, [Define if you have type `$1'])
132fi
133])
134
135AC_HAVE_TYPE([sa_family_t],[#include <sys/socket.h>])
136AC_HAVE_TYPE([struct sockaddr], [#include <sys/socket.h>])
137AC_HAVE_TYPE([struct sockaddr_storage], [#include <sys/socket.h>])
138AC_HAVE_TYPE([struct addrinfo], [#include <netdb.h>])
139AC_HAVE_TYPE([struct ifaddrs], [#include <ifaddrs.h>])
140AC_HAVE_TYPE([socklen_t],[#include <sys/socket.h>])
141
142
143AC_DEFUN([AC_KRB_STRUCT_WINSIZE], [
144AC_MSG_CHECKING(for struct winsize)
145AC_CACHE_VAL(ac_cv_struct_winsize, [
146ac_cv_struct_winsize=no
147for i in sys/termios.h sys/ioctl.h; do
148AC_EGREP_HEADER(
149struct[[ 	]]*winsize,dnl
150$i, ac_cv_struct_winsize=yes; break)dnl
151done
152])
153if test "$ac_cv_struct_winsize" = "yes"; then
154  AC_DEFINE(HAVE_STRUCT_WINSIZE, 1, [define if struct winsize is declared in sys/termios.h])
155fi
156AC_MSG_RESULT($ac_cv_struct_winsize)
157AC_EGREP_HEADER(ws_xpixel, termios.h,
158	AC_DEFINE(HAVE_WS_XPIXEL, 1, [define if struct winsize has ws_xpixel]))
159AC_EGREP_HEADER(ws_ypixel, termios.h,
160	AC_DEFINE(HAVE_WS_YPIXEL, 1, [define if struct winsize has ws_ypixel]))
161])
162
163AC_KRB_STRUCT_WINSIZE
164
165AC_TYPE_SIGNAL
166if test "$ac_cv_type_signal" = "void" ; then
167	AC_DEFINE(VOID_RETSIGTYPE, 1, [Define if signal handlers return void.])
168fi
169AC_SUBST(VOID_RETSIGTYPE)
170
171
172m4_include(heimdal/cf/check-var.m4)
173
174rk_CHECK_VAR(h_errno,
175[#ifdef HAVE_SYS_TYPES_H
176#include <sys/types.h>
177#endif
178#ifdef HAVE_NETDB_H
179#include <netdb.h>
180#endif])
181
182m4_include(heimdal/cf/find-func.m4)
183m4_include(heimdal/cf/find-func-no-libs.m4)
184m4_include(heimdal/cf/find-func-no-libs2.m4)
185m4_include(heimdal/cf/resolv.m4)
186
187smb_save_LIBS=$LIBS
188RESOLV_LIBS=""
189LIBS=""
190
191dnl  This fills in the global LIBS...
192rk_RESOLV
193
194dnl AC_CHECK_LIB_EXT(resolv, RESOLV_LIBS, res_search)
195	SMB_ENABLE(RESOLV,YES)
196
197if test x"$LIBS" != "x"; then
198	RESOLV_LIBS=$LIBS
199fi
200
201LIBS=$smb_save_LIBS
202
203SMB_EXT_LIB(RESOLV,[${RESOLV_LIBS}],[${RESOLV_CFLAGS}],[${RESOLV_CPPFLAGS}],[${RESOLV_LDFLAGS}])
204
205
206# these are disabled unless heimdal is found below
207SMB_ENABLE(KERBEROS_LIB, NO)
208SMB_ENABLE(asn1_compile, NO)
209SMB_ENABLE(compile_et, NO)
210
211AC_PROG_LEX
212AC_PROG_YACC
213
214# Portions of heimdal kerberos are unpacked into source/heimdal
215# of the samba source tree.
216
217# if we ever get to using a host kerberos, we might add conditionals here
218AC_DEFINE(HAVE_KRB5,1,[Whether kerberos is available])
219HAVE_KRB5=YES
220SMB_ENABLE(KERBEROS_LIB, YES)
221SMB_ENABLE(asn1_compile, YES)
222SMB_ENABLE(compile_et, YES)
223
224# only add getaddrinfo and related functions if needed
225SMB_ENABLE(HEIMDAL_ROKEN_ADDRINFO, NO)
226if test t$ac_cv_func_getaddrinfo != tyes; then
227	SMB_ENABLE(HEIMDAL_ROKEN_ADDRINFO, YES)
228fi
229
230# only add inet_aton if needed
231SMB_ENABLE(HEIMDAL_ROKEN_INET_ATON, NO)
232if test t$ac_cv_func_inet_aton != tyes; then
233	SMB_ENABLE(HEIMDAL_ROKEN_INET_ATON, YES)
234fi
235
236if test x"$ac_cv_func_inet_pton" = x"no"; then
237    AC_CHECK_LIB_EXT(nsl_s, NSL_LIBS, inet_pton)
238    AC_CHECK_LIB_EXT(nsl, NSL_LIBS, inet_pton)
239    SMB_ENABLE(NSL,YES)
240    if test x"$ac_cv_lib_ext_nsl_s_inet_pton" != x"yes" &&
241       test x"$ac_cv_lib_ext_nsl_inet_pton" != x"yes"; then
242	AC_MSG_ERROR([no inet_pton() function available!])
243    fi
244fi
245
246SMB_EXT_LIB(NSL,[${NSL_LIBS}],[],[],[])
247
248# only add getprogname if needed
249SMB_ENABLE(HEIMDAL_ROKEN_GETPROGNAME, NO)
250SMB_ENABLE(HEIMDAL_ROKEN_GETPROGNAME_H, NO)
251if test t$ac_cv_func_getprogname != tyes; then
252	SMB_ENABLE(HEIMDAL_ROKEN_GETPROGNAME, YES)
253	SMB_ENABLE(HEIMDAL_ROKEN_GETPROGNAME_H, YES)
254fi
255
256# only add gai_strerror if needed
257SMB_ENABLE(HEIMDAL_ROKEN_GAI_STRERROR, NO)
258AC_CHECK_FUNC(gai_strerror)
259
260if test t$ac_cv_func_gai_strerror != tyes; then
261    AC_CHECK_LIB_EXT(nsl, GAI_LIBS, gai_strerror)
262    AC_CHECK_LIB_EXT(socket, GAI_LIBS, gai_strerror)
263    AC_CHECK_LIB_EXT(xnet, GAI_LIBS, gai_strerror)
264
265    dnl We can't just call AC_CHECK_FUNCS(gai_strerror) here, because the value
266    dnl has been cached.
267    if test x"$ac_cv_lib_ext_nsl_gai_strerror" = x"yes" ||
268       test x"$ac_cv_lib_ext_socket_gai_strerror" = x"yes" ||
269       test x"$ac_cv_lib_ext_xnet_gai_strerror" = x"yes"; then
270        AC_DEFINE(HAVE_GAI_STRERROR,1,[Whether the system has gai_strerror()])
271	SMB_ENABLE(GAI, YES)
272    else
273	SMB_ENABLE(HEIMDAL_ROKEN_GAI_STRERROR, YES)
274    fi
275
276else
277    AC_DEFINE(HAVE_GAI_STRERROR,1,[Whether gai_strerror() is available])
278fi
279
280SMB_EXT_LIB(GAI,[${GAI_LIBS}],[${GAI_CFLAGS}],[${GAI_CPPFLAGS}],[${GAI_LDFLAGS}])
281