libwbclient: Re-Fix a bug that was fixed with e5741e27c4c
[obnox/samba-ctdb.git] / source / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.54 or above
4 AC_PREREQ(2.54)
5
6 AC_INIT([Samba],[3],[samba-technical@samba.org])
7
8 AC_CONFIG_SRCDIR([include/includes.h])
9 AC_CONFIG_HEADER(include/config.h)
10 AC_DEFINE(CONFIG_H_IS_FROM_SAMBA,1,[Marker for samba's config.h])
11
12 case "$PATH" in
13     */usr/ucb*)
14         AC_MSG_WARN([\$PATH contains /usr/ucb - build errors may follow])
15         ;;
16 esac 
17
18 builddir=`pwd`
19 AC_SUBST(builddir)
20
21 m4_include(m4/samba_version.m4)
22 m4_include(m4/check_path.m4)
23
24 AC_LIBREPLACE_CC_CHECKS
25
26 m4_include(lib/talloc/libtalloc.m4)
27
28 TALLOC_OBJS=""
29 for obj in ${TALLOC_OBJ}; do
30         TALLOC_OBJS="${TALLOC_OBJS} ${tallocdir}/${obj}"
31 done
32 AC_SUBST(TALLOC_OBJS)
33
34 # TODO: These should come from m4_include(lib/tdb/libtdb.m4)
35 # but currently this fails: things have to get merged from s4.
36 tdbdir="lib/tdb"
37 AC_SUBST(tdbdir)
38 TDB_CFLAGS="-I${srcdir-.}/$tdbdir/include"
39 AC_SUBST(TDB_CFLAGS)
40 TDB_OBJ="common/tdb.o common/dump.o common/transaction.o common/error.o common/traverse.o"
41 TDB_OBJ="$TDB_OBJ common/freelist.o common/freelistcheck.o common/io.o common/lock.o common/open.o"
42 AC_SUBST(TDB_OBJ)
43
44 TDB_OBJS=""
45 for obj in ${TDB_OBJ}; do
46         TDB_OBJS="${TDB_OBJS} ${tdbdir}/${obj}"
47 done
48 AC_SUBST(TDB_OBJS)
49
50 SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
51 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/replace"
52 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
53 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
54 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
55 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
56
57 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/popt"
58
59 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
60 if test "x${srcdir-.}" != "x."; then
61         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
62 fi
63
64 dnl Unique-to-Samba variables we'll be playing with.
65 AC_SUBST(SAMBA_CPPFLAGS)
66 AC_SUBST(SHELL)
67 AC_SUBST(LDSHFLAGS)
68 AC_SUBST(SONAMEFLAG)
69 AC_SUBST(SHLD)
70 AC_SUBST(MODULE_EXPORTS)
71 AC_SUBST(DSO_EXPORTS)
72 AC_SUBST(HOST_OS)
73 AC_SUBST(PICFLAG)
74 AC_SUBST(PIE_CFLAGS)
75 AC_SUBST(PIE_LDFLAGS)
76 AC_SUBST(RELRO_LDFLAGS)
77 AC_SUBST(SHLIBEXT)
78 AC_SUBST(INSTALLLIBCMD_SH)
79 AC_SUBST(INSTALLLIBCMD_A)
80 AC_SUBST(UNINSTALLLIBCMD_SH)
81 AC_SUBST(UNINSTALLLIBCMD_A)
82
83 AC_SUBST(INSTALL_LIBWBCLIENT)
84 AC_SUBST(UNINSTALL_LIBWBCLIENT)
85 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
86 AC_SUBST(LIBWBCLIENT_SHARED)
87 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
88 AC_SUBST(LIBWBCLIENT_STATIC)
89 AC_SUBST(LIBWBCLIENT_SOVER)
90 AC_SUBST(LIBWBCLIENT)
91 AC_SUBST(WINBIND_LIBS)
92
93 AC_SUBST(LIBSAMBAUTIL_SHARED)
94
95 AC_SUBST(PRINT_LIBS)
96 AC_SUBST(AUTH_LIBS)
97 AC_SUBST(ACL_LIBS)
98 AC_SUBST(PASSDB_LIBS)
99 AC_SUBST(IDMAP_LIBS)
100 AC_SUBST(KRB5_LIBS)
101 AC_SUBST(UUID_LIBS)
102 AC_SUBST(LDAP_LIBS)
103 AC_SUBST(PAM_MODULES)
104 AC_SUBST(INSTALL_PAM_MODULES)
105 AC_SUBST(UNINSTALL_PAM_MODULES)
106 AC_SUBST(NSS_MODULES)
107 AC_SUBST(EXTRA_BIN_PROGS)
108 AC_SUBST(CIFSMOUNT_PROGS)
109 AC_SUBST(INSTALL_CIFSMOUNT)
110 AC_SUBST(UNINSTALL_CIFSMOUNT)
111 AC_SUBST(CIFSUPCALL_PROGS)
112 AC_SUBST(INSTALL_CIFSUPCALL)
113 AC_SUBST(UNINSTALL_CIFSUPCALL)
114 AC_SUBST(EXTRA_SBIN_PROGS)
115 AC_SUBST(EXTRA_ALL_TARGETS)
116 AC_SUBST(CONFIG_LIBS)
117 AC_SUBST(NSCD_LIBS)
118
119 # compile with optimization and without debugging by default, but
120 # allow people to set their own preference.
121 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
122 # if it has no value.  This prevent *very* large debug binaries from occurring
123 # by default.
124 if test "x$CFLAGS" = x; then
125   CFLAGS="-O"
126 fi
127 if test "x$debug" = "xyes" ; then
128         CFLAGS="${CFLAGS} -g"
129 else
130         CFLAGS="-O"
131 fi
132
133 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
134
135 m4_include(lib/socket_wrapper/config.m4)
136 m4_include(lib/nss_wrapper/config.m4)
137
138 m4_include(m4/swat.m4)
139
140 # Probe the gcc version for extra CFLAGS. We always stash these in
141 # DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
142 # Makefile edit, avoiding the need to re-run configure.
143 if test x"$ac_cv_prog_gcc" = x"yes" ; then
144         DEVELOPER_CFLAGS="-g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
145         # Add -Wdeclaration-after-statement if compiler supports it
146         AC_CACHE_CHECK(
147           [that the C compiler understands -Wdeclaration-after-statement],
148           samba_cv_HAVE_Wdeclaration_after_statement, [
149           AC_TRY_RUN_STRICT([
150             int main(void)
151             {
152                 return 0;
153             }],[-Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
154             samba_cv_HAVE_Wdeclaration_after_statement=yes,
155             samba_cv_HAVE_Wdeclaration_after_statement=no,
156             samba_cv_HAVE_Wdeclaration_after_statement=cross)
157        ])
158
159         if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
160             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
161         fi
162
163         #-Werror-implicit-function-declaration
164         AC_CACHE_CHECK(
165           [that the C compiler understands -Werror-implicit-function-declaration],
166           samba_cv_HAVE_Werror_implicit_function_declaration, [
167           AC_TRY_RUN_STRICT([
168             int main(void)
169             {
170                 return 0;
171             }],[-Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
172             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
173             samba_cv_HAVE_Werror_implicit_function_declaration=no,
174             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
175        ])
176        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
177             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
178        fi
179
180         # krb5developer is like developer, except we don't get
181         # -Wstrict-prototypes.
182        if test x"$krb5_developer" != x"$yes" ; then
183             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
184        fi
185 fi
186
187 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
188
189 if test "x$enable_dmalloc" = xyes
190 then
191         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
192         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
193                   [Define to check invariants around some common functions])
194         LIBS="$LIBS -ldmalloc"  
195 fi
196
197 #################################################
198 # check for a shared memory profiling support
199 AC_MSG_CHECKING(whether to use profiling)
200 AC_ARG_WITH(profiling-data,
201 [AS_HELP_STRING([--with-profiling-data], [Include gathering source code profile information (default=no)])],
202 [ case "$withval" in
203   yes)
204     AC_MSG_RESULT(yes)
205     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
206     samba_cv_WITH_PROFILE=yes
207     ;;
208   *)
209     AC_MSG_RESULT(no)
210     samba_cv_WITH_PROFILE=no
211     ;;
212   esac ],
213   AC_MSG_RESULT(no)
214 )
215
216 dnl Checks for programs.
217
218 AC_PROG_INSTALL
219 AC_PROG_AWK
220 AC_PATH_PROG(PERL, perl)
221
222 AC_CHECK_TOOL(AR, ar)
223
224 dnl Check if we use GNU ld
225 LD=ld
226 AC_PROG_LD_GNU
227
228 dnl Certain versions of GNU ld the default is not to have the
229 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
230 dnl warnings when building modules.
231 if test "$ac_cv_prog_gnu_ld" = "yes"; then
232         ac_cv_gnu_ld_version=`$LD -v 2>/dev/null | head -1`
233         AC_MSG_CHECKING(GNU ld release date)
234         changequote(,)dnl
235         ac_cv_gnu_ld_date=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)[-]*\([01][0-9]\)[-]*\([0-3][0-9]\).*$,\1\2\3,p'`
236         changequote([,])dnl
237         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
238         if test -n "$ac_cv_gnu_ld_date"; then
239         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
240                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
241         fi
242         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
243                 ac_cv_gnu_ld_version_script=yes
244         fi
245         else
246            AC_MSG_CHECKING(GNU ld release version)
247            changequote(,)dnl
248            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
249            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
250            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
251            changequote([,])dnl
252            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
253            AC_MSG_CHECKING(GNU ld release version major)
254            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
255            AC_MSG_CHECKING(GNU ld release version minor)
256            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
257            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
258              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
259            fi
260            if test "$ac_cv_gnu_ld_vernr_major" -gt 2 || test "$ac_cv_gnu_ld_vernr_major"=2 && test "$ac_cv_gnu_ld_vernr_minor" -ge 12; then
261              ac_cv_gnu_ld_version_script=yes
262            fi
263         fi
264 fi
265
266 dnl look for executable suffix
267 AC_EXEEXT
268
269 dnl Check if C compiler understands -c and -o at the same time
270 AC_PROG_CC_C_O
271 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
272       BROKEN_CC=
273 else
274       BROKEN_CC=#
275 fi
276 AC_SUBST(BROKEN_CC)
277
278 dnl Check if the C compiler understands -Werror
279 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
280  AC_TRY_RUN_STRICT([
281   int main(void)
282   {
283         return 0;
284   }],[-Werror],[$CPPFLAGS],[$LDFLAGS],
285   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
286 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
287    Werror_FLAGS="-Werror"
288 else
289 dnl Check if the C compiler understands -w2
290 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
291  AC_TRY_RUN_STRICT([
292   int main(void)
293   {
294         return 0;
295   }],[-w2],[$CPPFLAGS],[$LDFLAGS],
296   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
297 if test x"$samba_cv_HAVE_w2" = x"yes"; then
298    Werror_FLAGS="-w2"
299 else
300 dnl Check if the C compiler understands -errwarn
301 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
302   AC_TRY_RUN_STRICT([
303    int main(void)
304    {
305         return 0;
306    }],[-errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
307    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
308 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
309    Werror_FLAGS="-errwarn=%all"
310 fi
311 fi
312 fi
313
314 dnl Check if the C compiler understands volatile (it should, being ANSI).
315 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
316     AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
317         samba_cv_volatile=yes,samba_cv_volatile=no)])
318 if test x"$samba_cv_volatile" = x"yes"; then
319    AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
320 fi
321
322 ############################################
323 # check if the compiler can handle negative enum values
324 # and don't truncate the values to INT_MAX
325 # a runtime test is needed here
326 AC_SUBST(PIDL_ARGS)
327 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
328     AC_TRY_RUN(
329 [
330         #include <stdio.h>
331         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
332         int main(void) {
333                 enum negative_values v1 = NEGATIVE_VALUE;
334                 unsigned v2 = NEGATIVE_VALUE;
335
336                 if (v1 != 0xFFFFFFFF) {
337                         printf("%u != 0xFFFFFFFF\n", v1);
338                         return 1;
339                 }
340                 if (v2 != 0xFFFFFFFF) {
341                         printf("%u != 0xFFFFFFFF\n", v2);
342                         return 1;
343                 }
344
345                 return 0;
346         }
347 ],
348         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv__CC_NEGATIVE_ENUM_VALUES=no)])
349 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
350         AC_MSG_WARN([using --unit-enums for pidl])
351         PIDL_ARGS="$PIDL_ARGS --uint-enums"
352 fi
353
354 dnl Figure out the flags to support named structure initializers
355
356 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
357
358 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
359 AC_MSG_CHECKING(uname -s)
360 AC_MSG_RESULT(${UNAME_S})
361
362 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
363 AC_MSG_CHECKING(uname -r)
364 AC_MSG_RESULT(${UNAME_R})
365
366 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
367 AC_MSG_CHECKING(uname -m)
368 AC_MSG_RESULT(${UNAME_M})
369
370 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
371 AC_MSG_CHECKING(uname -p)
372 AC_MSG_RESULT(${UNAME_P})
373
374 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
375 AC_MSG_CHECKING(uname -i)
376 AC_MSG_RESULT(${UNAME_I})
377
378 dnl Add #include for broken IRIX header files
379   case "$host_os" in
380         *irix6*)
381                 #TODO add to libreplace
382                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
383                         dnl Fix sensible defaults for MIPSPro compilers. The
384                         dnl error numbers are valid for the 7.3 compilers,
385                         dnl hopefully also valid for the 7.4 series.
386                         dnl
387                         dnl Bugzilla 3801. Force an error on warning 1035
388                         dnl so we don't incorrectly detect stdint.h. This
389                         dnl warning is emitted for #error directives.
390                         CFLAGS="$CFLAGS -diag_error 1035"
391                         dnl 1209: Controlling expression is constant
392                         dnl 1174: Function foo declared but never referenced
393                         dnl 3201: Parameter foo was never referenced
394                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
395                 fi
396         ;;
397 esac
398
399 DYNEXP=
400 AC_SUBST(DYNEXP)
401
402 dnl Add modules that have to be built by default here
403 dnl These have to be built static:
404 default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsarpc rpc_samr rpc_winreg rpc_initshutdown rpc_dssetup rpc_wkssvc rpc_svcctl2 rpc_ntsvcs2 rpc_netlogon rpc_netdfs rpc_srvsvc rpc_spoolss rpc_eventlog2 auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default nss_info_template"
405
406 dnl These are preferably build shared, and static if dlopen() is not available
407 default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs vfs_shadow_copy vfs_shadow_copy2 charset_CP850 charset_CP437 auth_script vfs_readahead vfs_xattr_tdb vfs_streams_xattr vfs_streams_depot vfs_smb_traffic_analyzer vfs_preopen"
408
409 if test "x$developer" = xyes; then
410    default_static_modules="$default_static_modules rpc_rpcecho"
411    default_shared_modules="$default_shared_modules charset_weird"
412 fi
413
414 #
415 # Config CPPFLAG settings for strange OS's that must be set
416 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
417 # case statement; its first reference must be unconditional.
418 #
419 case "$host_os" in
420     *hpux*)
421 #
422 # Defines needed for HPUX support.
423 # HPUX has bigcrypt but (sometimes?) doesn't use it for
424 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
425 #
426       case `uname -r` in
427                 *9*|*10*|*11)
428                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
429                 ;;
430       esac
431       ;;
432
433 #
434 # CRAY Unicos has broken const handling
435        *unicos*)
436           AC_MSG_RESULT([disabling const])
437           CPPFLAGS="$CPPFLAGS -Dconst="
438           ;;
439         
440 #
441 # AIX4.x doesn't even admit to having large
442 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
443 #
444     *aix4*)
445           AC_MSG_RESULT([enabling large file support])
446       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
447           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
448       ;;
449 #
450 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
451 # to the existance of large files..
452 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
453 # recommendations on large file support, however it makes the
454 # compile work using gcc 2.7 and 2.8, whereas using the Sun
455 # recommendation makes the compile fail on gcc2.7. JRA.
456 #
457 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
458 #
459         *solaris*)
460                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
461                 case `uname -r` in
462                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
463                                 AC_MSG_RESULT([no large file support])
464                                 ;;
465                         5.*)
466                         AC_MSG_RESULT([enabling large file support])
467                         if test "$ac_cv_prog_gcc" = yes; then
468                                 ${CC-cc} -v >conftest.c 2>&1
469                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
470                                 rm -fr conftest.c
471                                 case "$ac_cv_gcc_compiler_version_number" in
472                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
473                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
474                                                 LDFLAGS="$LDFLAGS -lthread"
475                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
476                                                 ;;
477                                         *)
478                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
479                                                 LDFLAGS="$LDFLAGS -lthread"
480                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
481                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
482                                                 ;;
483                                 esac
484                         else
485                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
486                                 LDFLAGS="$LDFLAGS -lthread"
487                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
488                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
489                         fi
490                         ;;
491                 esac
492                 ;;
493 #
494 # IRIX uses SYSV printing.  Make sure to set that here
495 #
496         *irix*)
497                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
498                 ;;
499         *freebsd*|*dragonfly*)
500                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
501                 ;;
502 #
503 # VOS may need to have POSIX support and System V compatibility enabled.
504 #
505     *vos*)
506     case "$CPPFLAGS" in
507           *-D_POSIX_C_SOURCE*)
508                 ;;
509           *)
510                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
511                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
512                 ;;
513     esac
514     case "$CPPFLAGS" in
515           *-D_SYSV*|*-D_SVID_SOURCE*)
516                 ;;
517           *)
518                 CPPFLAGS="$CPPFLAGS -D_SYSV"
519                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
520     esac
521     ;;
522 #
523 # Tests needed for SINIX large file support.
524 #
525     *sysv4*)
526       if test $host = mips-sni-sysv4 ; then
527         AC_MSG_CHECKING([for LFS support])
528         old_CPPFLAGS="$CPPFLAGS"
529         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
530         AC_TRY_RUN([
531 #include <unistd.h>
532 main () {
533 #if _LFS64_LARGEFILE == 1
534 exit(0);
535 #else
536 exit(1);
537 #endif
538 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
539         CPPFLAGS="$old_CPPFLAGS"
540         if test x$SINIX_LFS_SUPPORT = xyes ; then
541           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
542                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
543           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
544           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
545           LIBS="`getconf LFS64_LIBS` $LIBS"
546         fi
547       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
548       fi
549     ;;
550
551 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
552 #
553     *linux*)
554         AC_MSG_CHECKING([for LFS support])
555         old_CPPFLAGS="$CPPFLAGS"
556         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
557        AC_TRY_RUN([
558 #include <unistd.h>
559 #include <sys/utsname.h>
560 #include <string.h>
561 #include <stdlib.h>
562 main() {
563 #if _LFS64_LARGEFILE == 1
564        struct utsname uts;
565        char *release;
566        int major, minor;
567
568        /* Ensure this is glibc 2.2 or higher */
569 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
570        int libc_major = __GLIBC__;
571        int libc_minor = __GLIBC_MINOR__;
572
573        if (libc_major < 2)
574               exit(1);
575        if (libc_minor < 2)
576               exit(1);
577 #endif
578
579        /* Ensure this is kernel 2.4 or higher */
580
581        uname(&uts);
582        release = strdup(uts.release);
583        major = atoi(strsep(&release, "."));
584        minor = atoi(strsep(&release, "."));
585
586        if (major > 2 || (major == 2 && minor > 3))
587                exit(0);
588        exit(1);
589 #else
590        exit(1);
591 #endif
592 }
593 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
594         CPPFLAGS="$old_CPPFLAGS"
595         if test x$LINUX_LFS_SUPPORT = xyes ; then
596                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
597                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
598                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
599                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
600         fi
601         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
602         ;;
603
604 #
605 # MacOS X is the *only* system that uses compose character in utf8. This
606 # is so horribly broken....
607 #
608     *darwin*)
609         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
610
611 # Add a system specific charset module.
612         default_shared_modules="$default_shared_modules charset_macosxfs"
613
614         ;;
615     *hurd*)
616         AC_MSG_CHECKING([for LFS support])
617         old_CPPFLAGS="$CPPFLAGS"
618         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
619         AC_TRY_RUN([
620 #include <unistd.h>
621 main () {
622 #if _LFS64_LARGEFILE == 1
623 exit(0);
624 #else
625 exit(1);
626 #endif
627 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
628         CPPFLAGS="$old_CPPFLAGS"
629         if test x$GLIBC_LFS_SUPPORT = xyes ; then
630           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
631                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
632           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
633         fi
634       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
635     ;;
636
637 esac
638
639 SAVE_CPPFLAGS="${CPPFLAGS}"
640 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
641
642 AC_LIBREPLACE_BROKEN_CHECKS
643 AC_LIBREPLACE_NETWORK_CHECKS
644
645 CPPFLAGS="${SAVE_CPPFLAGS}"
646
647 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
648
649 LIBREPLACE_OBJS=""
650 for obj in ${LIBREPLACEOBJ}; do
651         LIBREPLACE_OBJS="${LIBREPLACE_OBJS} ${LIBREPLACE_DIR}/${obj}"
652 done
653 AC_SUBST(LIBREPLACE_OBJS)
654
655 # add -ldl to the global LIBS
656 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
657
658 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
659 AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h memory.h alloca.h)
660 AC_CHECK_HEADERS(limits.h float.h pthread.h)
661 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
662 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h)
663 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
664 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
665 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
666 AC_CHECK_HEADERS(sys/sysmacros.h)
667 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
668 AC_CHECK_HEADERS(langinfo.h locale.h)
669 AC_CHECK_HEADERS(xfs/libxfs.h)
670 AC_CHECK_HEADERS(netgroup.h)
671
672 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
673 #if HAVE_RPC_RPC_H
674 #include <rpc/rpc.h>
675 #endif
676 ]])
677
678 ## These fail to compile on IRIX so just check for their presence
679 AC_CHECK_HEADERS(sys/mode.h,,,)
680
681 # Look for Darwin headers
682 old_CPPFLAGS="$CPPFLAGS"
683 CPPFLAGS="-Iinclude $CPPFLAGS"
684 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
685 CPPFLAGS="$old_CPPFLAGS"
686
687 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
688 # subdirectory of headers.
689 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
690
691 # check for linux on amd64 since valgrind is not quite there yet
692 case "$host_os" in
693         *linux*)
694                 case "$UNAME_P" in
695                         *x86_64*)
696                                 AC_DEFINE(HAVE_64BIT_LINUX,1,[Whether we are running on 64bit linux])
697                                 ;;
698                 esac
699                 ;;
700 esac
701
702
703 #
704 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
705 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
706 #
707 case "$host_os" in
708     *hpux*)
709                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
710                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
711                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
712                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
713                 fi
714         ;;
715 esac
716 AC_CHECK_HEADERS(shadow.h)
717 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
718 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
719
720 AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
721 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
722
723 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
724
725 # For experimental utmp support (lastlog on some BSD-like systems)
726 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
727
728 AC_CHECK_SIZEOF(int,cross)
729 AC_CHECK_SIZEOF(long,cross)
730 AC_CHECK_SIZEOF(long long,cross)
731 AC_CHECK_SIZEOF(short,cross)
732
733 AC_C_CONST
734 AC_C_INLINE
735 AC_C_BIGENDIAN
736 AC_C_CHAR_UNSIGNED
737
738 AC_TYPE_SIGNAL
739 AC_TYPE_UID_T
740 AC_TYPE_MODE_T
741 AC_TYPE_OFF_T
742 AC_TYPE_SIZE_T
743 AC_TYPE_PID_T
744 AC_STRUCT_ST_RDEV
745 AC_DIRENT_D_OFF
746 AC_CHECK_TYPE(ssize_t, int)
747 AC_CHECK_TYPE(wchar_t, unsigned short)
748
749 ############################################
750 # for cups support we need libcups, and a handful of header files
751
752 AC_ARG_ENABLE(cups,
753 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
754
755 if test x$enable_cups != xno; then
756         AC_PATH_PROG(CUPS_CONFIG, cups-config)
757
758         if test "x$CUPS_CONFIG" != x; then
759
760                 ac_save_CFLAGS=$CFLAGS
761                 ac_save_LDFLAGS=$LDFLAGS
762                 ac_save_PRINT_LIBS=$PRINT_LIBS
763                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
764                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
765                 PRINT_LIBS="$PRINT_LIBS `$CUPS_CONFIG --libs`"
766                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
767                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
768                         x"$ac_cv_header_cups_language_h" = xyes; then
769                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
770                         samba_cv_HAVE_CUPS=yes
771                 else
772                         AC_MSG_WARN([cups-config around but cups-devel not installed])
773                         CFLAGS=$ac_save_CFLAGS
774                         LDFLAGS=$ac_save_LDFLAGS
775                         PRINT_LIBS=$ac_save_PRINT_LIBS
776                 fi
777
778         elif test x"$enable_cups" = x"yes"; then
779                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
780         fi
781 fi
782
783 AC_ARG_ENABLE(iprint,
784 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
785
786 if test x$enable_iprint != xno; then
787         if test x"$samba_cv_HAVE_CUPS" = xyes; then
788                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
789         elif test x"$enable_iprint" = x"yes"; then
790                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
791         fi
792 fi
793
794 ############################################
795 # check if the compiler will optimize out function calls
796 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
797     AC_TRY_LINK([
798 #include <stdio.h>],
799 [
800                 if (0) {
801                    this_function_does_not_exist();
802                 } else {
803                   return 1;
804                 }
805
806 ],
807         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
808 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
809    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
810 fi
811
812 #############################################
813 # check for fd passing struct via msg_control
814 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
815     AC_TRY_COMPILE([
816 #include <sys/types.h>
817 #include <stdlib.h>
818 #include <stddef.h>
819 #include <sys/socket.h>
820 #include <sys/un.h>],
821 [
822         struct msghdr msg;
823         union {
824               struct cmsghdr cm;
825               char control[CMSG_SPACE(sizeof(int))];
826         } control_un;
827         msg.msg_control = control_un.control;
828         msg.msg_controllen = sizeof(control_un.control);
829 ],
830         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
831 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
832    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
833              [If we can use msg_control for passing file descriptors])
834 fi
835
836 #############################################
837 # check for fd passing struct via msg_acctrights
838 AC_CACHE_CHECK([for fd passing via msg_acctrights],
839                 samba_cv_msghdr_msg_acctrights, [
840     AC_TRY_COMPILE([
841 #include <sys/types.h>
842 #include <stdlib.h>
843 #include <stddef.h>
844 #include <sys/socket.h>
845 #include <sys/un.h>],
846 [
847         struct msghdr msg;
848         int fd;
849         msg.msg_acctrights = (caddr_t) &fd;
850         msg.msg_acctrightslen = sizeof(fd);
851 ],
852         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
853 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
854    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
855              [If we can use msg_acctrights for passing file descriptors])
856 fi
857
858 AC_CHECK_FUNCS(dirfd)
859 if test x"$ac_cv_func_dirfd" = x"yes"; then
860         default_shared_modules="$default_shared_modules vfs_syncops"
861 fi
862
863 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
864     AC_TRY_COMPILE([
865 #include <sys/types.h>
866 #if STDC_HEADERS
867 #include <stdlib.h>
868 #include <stddef.h>
869 #endif
870 #include <signal.h>],[sig_atomic_t i = 0],
871         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
872 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
873    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
874 fi
875
876 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
877     AC_TRY_COMPILE([
878 #include <sys/types.h>
879 #if STDC_HEADERS
880 #include <stdlib.h>
881 #include <stddef.h>
882 #endif
883 #include <signal.h>],[struct sigevent s;],
884         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
885 if test x"$samba_cv_struct_sigevent" = x"yes"; then
886    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
887    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
888         [#include <signal.h>])
889 fi
890
891 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
892     AC_TRY_COMPILE([
893 #include <sys/types.h>
894 #if STDC_HEADERS
895 #include <stdlib.h>
896 #include <stddef.h>
897 #endif
898 #if TIME_WITH_SYS_TIME
899 # include <sys/time.h>
900 # include <time.h>
901 #else
902 # if HAVE_SYS_TIME_H
903 #  include <sys/time.h>
904 # else
905 #  include <time.h>
906 # endif
907 #endif
908 ],[struct timespec ts;],
909         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
910 if test x"$samba_cv_struct_timespec" = x"yes"; then
911    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
912 fi
913
914 # stupid headers have the functions but no declaration. grrrr.
915 AC_HAVE_DECL(errno, [#include <errno.h>])
916 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
917 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
918
919 # and glibc has setresuid under linux but the function does
920 # nothing until kernel 2.1.44! very dumb.
921 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
922     AC_TRY_RUN([#include <errno.h>
923 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
924         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
925 if test x"$samba_cv_have_setresuid" = x"yes"; then
926     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
927 fi
928
929 # Do the same check for setresguid...
930 #
931 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
932     AC_TRY_RUN([#include <unistd.h>
933 #include <errno.h>
934 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
935         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
936 if test x"$samba_cv_have_setresgid" = x"yes"; then
937     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
938 fi
939
940 AC_FUNC_MEMCMP
941
942 ###############################################
943 # Readline included by default unless explicitly asked not to
944 test "${with_readline+set}" != "set" && with_readline=yes
945
946 # test for where we get readline() from
947 AC_MSG_CHECKING(whether to use readline)
948 AC_ARG_WITH(readline,
949 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
950 [  case "$with_readline" in
951   yes)
952     AC_MSG_RESULT(yes)
953
954     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
955     AC_CHECK_HEADERS(readline/history.h)
956
957     AC_CHECK_HEADERS(readline.h readline/readline.h,[
958       for termlib in ncurses curses termcap terminfo termlib tinfo; do
959        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
960       done
961       AC_CHECK_LIB(readline, rl_callback_handler_install,
962        [TERMLIBS="-lreadline $TERMLIBS"
963        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
964        break], [TERMLIBS=], $TERMLIBS)])
965     ;;
966   no)
967     AC_MSG_RESULT(no)
968     ;;
969   *)
970     AC_MSG_RESULT(yes)
971
972     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
973     # alternate readline path
974     _ldflags=${LDFLAGS}
975     _cppflags=${CPPFLAGS}
976
977     # Add additional search path
978     LDFLAGS="-L$with_readline/lib $LDFLAGS"
979     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
980
981     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
982     AC_CHECK_HEADERS(readline/history.h)
983
984     AC_CHECK_HEADERS(readline.h readline/readline.h,[
985       for termlib in ncurses curses termcap terminfo termlib; do
986        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
987       done
988       AC_CHECK_LIB(readline, rl_callback_handler_install,
989        [TERMLDFLAGS="-L$with_readline/lib"
990        TERMCPPFLAGS="-I$with_readline/include"
991        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
992        TERMLIBS="-lreadline $TERMLIBS"
993        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
994        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
995
996     LDFLAGS=$_ldflags
997     ;;
998   esac],
999   AC_MSG_RESULT(no)
1000 )
1001 AC_SUBST(TERMLIBS)
1002 AC_SUBST(TERMLDFLAGS)
1003
1004 # The readline API changed slightly from readline3 to readline4, so
1005 # code will generate warnings on one of them unless we have a few
1006 # special cases.
1007 AC_CHECK_LIB(readline, rl_completion_matches,
1008              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
1009                         [Do we have rl_completion_matches?])],
1010              [],
1011              [$TERMLIBS])
1012
1013 # not all readline libs have rl_event_hook or history_list
1014 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1015 AC_CHECK_LIB(readline, history_list,
1016              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1017              [],
1018              [$TERMLIBS])
1019
1020 ###############################################
1021 # test for where we get yp_get_default_domain() from
1022 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1023 AC_CHECK_FUNCS(yp_get_default_domain)
1024
1025 # Check if we have execl, if not we need to compile smbrun.
1026 AC_CHECK_FUNCS(execl)
1027 if test x"$ac_cv_func_execl" = x"no"; then
1028     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1029 fi
1030
1031 AC_CHECK_FUNCS(waitpid getcwd strdup strndup strnlen strerror chown fchown lchown chmod fchmod chroot link mknod mknod64)
1032 AC_CHECK_FUNCS(strtol strtoll strtoul strtoull strtouq __strtoull)
1033 AC_CHECK_FUNCS(fstat strchr utime utimes chflags)
1034 AC_CHECK_FUNCS(getrlimit fsync fdatasync memset strlcpy strlcat setpgid)
1035 AC_CHECK_FUNCS(memmove setsid glob strpbrk pipe crypt16 getauthuid)
1036 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1037 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
1038 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate chsize stat64 fstat64)
1039 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64)
1040 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
1041 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1042 AC_CHECK_FUNCS(getpwent_r)
1043 AC_CHECK_FUNCS(getdents getdents64)
1044 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
1045 AC_CHECK_FUNCS(syslog vsyslog timegm)
1046 AC_CHECK_FUNCS(setlocale nl_langinfo)
1047 AC_CHECK_FUNCS(nanosleep)
1048 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1049 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1050 AC_CHECK_HEADERS(sys/mman.h)
1051 # setbuffer, shmget, shm_open are needed for smbtorture
1052 AC_CHECK_FUNCS(setbuffer shmget shm_open)
1053
1054 # Find a method of generating a stack trace
1055 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1056 # libexecinfo provides backtrace_symbols on FreeBSD
1057 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
1058 AC_CHECK_FUNCS(backtrace_symbols)
1059 AC_CHECK_LIB(exc, trace_back_stack)
1060
1061 printf "%s" "checking for GPFS GPL libs... "
1062 save_LIBS="$LIBS"
1063 LIBS="$LIBS -lgpfs_gpl"
1064 AC_TRY_LINK([#include <gpfs_gpl.h>],
1065           [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
1066           samba_cv_HAVE_GPFS=yes,
1067           samba_cv_HAVE_GPFS=no)
1068 echo $samba_cv_HAVE_GPFS
1069 if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
1070     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
1071     default_shared_modules="$default_shared_modules vfs_gpfs"
1072 fi
1073 LIBS="$save_LIBS"
1074
1075 printf "%s" "checking for GPFS libs (with 3.2.1 PTF8 available as GPL)... "
1076 save_LIBS="$LIBS"
1077 LIBS="$LIBS -lgpfs"
1078 AC_TRY_LINK([#include <gpfs.h>],
1079           [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
1080           samba_cv_HAVE_GPFS=yes,
1081           samba_cv_HAVE_GPFS=no)
1082 echo $samba_cv_HAVE_GPFS
1083 if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
1084     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
1085     default_shared_modules="$default_shared_modules vfs_gpfs"
1086 fi
1087 LIBS="$save_LIBS"
1088
1089 # Note that all the libunwind symbols in the API are defined to internal
1090 # platform-specific version, so we must include libunwind.h before checking
1091 # any of them.
1092 AC_MSG_CHECKING([for libunwind])
1093 save_LIBS=$LIBS
1094
1095 UNWIND_ARCH="unknown"
1096 if test x"$UNAME_I" != x"unknown"; then
1097         UNWIND_ARCH="$UNAME_I"
1098 elif test x"$UNAME_M" != x"unknown"; then
1099         UNWIND_ARCH="$UNAME_M"
1100 elif test x"$UNAME_P" != x"unknown"; then
1101         UNWIND_ARCH="$UNAME_P"
1102 fi
1103
1104 case "$UNWIND_ARCH" in
1105         unknown)
1106                 # This probably won't link without
1107                 # the platform-specific libunwind.
1108                 LIBS="$LIBS -lunwind"
1109                 ;;
1110         i386|i586|i686)
1111                 # Add the platform-specific libunwind module.
1112                 LIBS="$LIBS -lunwind -lunwind-x86"
1113                 ;;
1114         *)
1115                 # Add the platform-specific libunwind module.
1116                 # based on uname -i, uname -m or uname -p
1117                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1118                 ;;
1119 esac
1120
1121 AC_TRY_LINK(
1122     [
1123 #ifdef HAVE_LIBUNWIND_H
1124 #include <libunwind.h>
1125 #endif
1126     ],
1127     [
1128         unw_context_t ctx; unw_cursor_t cur;
1129         char buf[256]; unw_word_t off;
1130         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1131         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1132     ],
1133     [
1134         AC_MSG_RESULT(yes)
1135         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1136
1137         # If we have libunwind, test whether we also have libunwind-ptrace
1138         # which would let us unwind arbitrary processes.
1139         save_LIBS=$LIBS
1140         AC_CHECK_HEADERS(libunwind-ptrace.h)
1141         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1142             [
1143                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1144                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1145                     [Whether libunwind-ptrace.a is available.])
1146             ],
1147             [ LIBUNWIND_PTRACE="" ])
1148
1149         LIBS=$save_LIBS
1150     ],
1151     [
1152         AC_MSG_RESULT(no)
1153         LIBS=$save_LIBS
1154     ])
1155
1156 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1157 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1158     AC_CHECK_HEADERS(sys/ptrace.h)
1159     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1160     AC_TRY_LINK(
1161             [
1162 #if HAVE_SYS_TYPES_H
1163 #include <sys/types.h>
1164 #endif
1165 #if HAVE_SYS_PTRACE_H
1166 #include <sys/ptrace.h>
1167 #endif
1168             ],
1169             [
1170                 int main(int argc, const char ** argv)
1171                 {
1172                         pid_t me = (pid_t)-1;
1173                         ptrace(PTRACE_ATTACH, me, 0, 0);
1174                         ptrace(PTRACE_DETACH, me, 0, 0);
1175                         return 0;
1176                 }
1177             ],
1178             [
1179                 AC_MSG_RESULT(yes)
1180                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1181                     [Whether the Linux ptrace(2) interface is available.])
1182             ],
1183             [
1184                 AC_MSG_RESULT(no)
1185                 LIBUNWIND_PTRACE=""
1186             ])
1187 fi
1188
1189 AC_SUBST(LIBUNWIND_PTRACE)
1190
1191 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1192 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1193 AC_CHECK_FUNCS(__getcwd _getcwd)
1194 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1195 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1196 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1197 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1198 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1199 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1200 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1201 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1202 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1203 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1204 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1205 AC_CHECK_FUNCS(prctl)
1206
1207 AC_TRY_COMPILE([
1208 #ifdef HAVE_SYS_PRCTL_H
1209 #include <sys/prctl.h>
1210 #endif
1211 ],
1212 [int i; i = prtcl(0); ],
1213 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1214
1215 #
1216 #
1217 #
1218 case "$host_os" in
1219     *linux*)
1220        # glibc <= 2.3.2 has a broken getgrouplist
1221        AC_TRY_RUN([
1222 #include <unistd.h>
1223 #include <sys/utsname.h>
1224 main() {
1225        /* glibc up to 2.3 has a broken getgrouplist */
1226 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1227        int libc_major = __GLIBC__;
1228        int libc_minor = __GLIBC_MINOR__;
1229
1230        if (libc_major < 2)
1231               exit(1);
1232        if ((libc_major == 2) && (libc_minor <= 3))
1233               exit(1);
1234 #endif
1235        exit(0);
1236 }
1237 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1238        if test x"$linux_getgrouplist_ok" = x"yes"; then
1239           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1240        fi
1241        ;;
1242     *)
1243        AC_CHECK_FUNCS(getgrouplist)
1244        ;;
1245 esac
1246
1247 #
1248 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1249 #
1250
1251 if test x$ac_cv_func_stat64 = xno ; then
1252   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1253   AC_TRY_LINK([
1254 #if defined(HAVE_UNISTD_H)
1255 #include <unistd.h>
1256 #endif
1257 #include <sys/stat.h>
1258 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1259   AC_MSG_RESULT([$ac_cv_func_stat64])
1260   if test x$ac_cv_func_stat64 = xyes ; then
1261     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1262   fi
1263 fi
1264
1265 if test x$ac_cv_func_lstat64 = xno ; then
1266   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1267   AC_TRY_LINK([
1268 #if defined(HAVE_UNISTD_H)
1269 #include <unistd.h>
1270 #endif
1271 #include <sys/stat.h>
1272 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1273   AC_MSG_RESULT([$ac_cv_func_lstat64])
1274   if test x$ac_cv_func_lstat64 = xyes ; then
1275     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1276   fi
1277 fi
1278
1279 if test x$ac_cv_func_fstat64 = xno ; then
1280   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1281   AC_TRY_LINK([
1282 #if defined(HAVE_UNISTD_H)
1283 #include <unistd.h>
1284 #endif
1285 #include <sys/stat.h>
1286 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1287   AC_MSG_RESULT([$ac_cv_func_fstat64])
1288   if test x$ac_cv_func_fstat64 = xyes ; then
1289     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1290   fi
1291 fi
1292
1293 #################################################
1294 # Check whether struct stat has timestamps with sub-second resolution.
1295 # At least IRIX and Solaris have these.  FREEBSD does as well,
1296 # but with different members
1297 #
1298 # We check that
1299 #       all of st_mtim, st_atim and st_ctim exist
1300 #       all of the members are in fact of type struct timespec
1301 #
1302 # There is some conflicting standards weirdness about whether we should use
1303 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1304 # prefer struct timespec.
1305 AC_CACHE_CHECK([whether struct stat has timespec timestamps],
1306     samba_cv_stat_timespec_hires,
1307       [
1308       AC_TRY_COMPILE(
1309           [
1310 #if TIME_WITH_SYS_TIME
1311 # include <sys/time.h>
1312 # include <time.h>
1313 #else
1314 # if HAVE_SYS_TIME_H
1315 #  include <sys/time.h>
1316 # else
1317 #  include <time.h>
1318 # endif
1319 #endif
1320 #ifdef HAVE_SYS_STAT_H
1321 #include <sys/stat.h>
1322 #endif
1323           ],
1324           [
1325           struct timespec t;
1326           struct stat s = {0};
1327           t = s.st_mtimespec;
1328           t = s.st_ctimespec;
1329           t = s.st_atimespec;
1330         ],
1331       samba_cv_stat_timespec_hires=yes, samba_cv_stat_timespec_hires=no)
1332       ])
1333
1334 if test x"$samba_cv_stat_timespec_hires" = x"yes" ; then
1335     AC_DEFINE(HAVE_STAT_ST_MTIMESPEC, 1, [whether struct stat contains st_mtimepec])
1336     AC_DEFINE(HAVE_STAT_ST_ATIMESPEC, 1, [whether struct stat contains st_atimespec])
1337     AC_DEFINE(HAVE_STAT_ST_CTIMESPEC, 1, [whether struct stat contains st_ctimespec])
1338     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1, [whether struct stat has sub-second timestamps])
1339 fi
1340
1341
1342
1343 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_cv_stat_hires,
1344     [
1345         AC_TRY_COMPILE(
1346             [
1347 #if TIME_WITH_SYS_TIME
1348 # include <sys/time.h>
1349 # include <time.h>
1350 #else
1351 # if HAVE_SYS_TIME_H
1352 #  include <sys/time.h>
1353 # else
1354 #  include <time.h>
1355 # endif
1356 #endif
1357 #ifdef HAVE_SYS_STAT_H
1358 #include <sys/stat.h>
1359 #endif
1360             ],
1361             [
1362                 struct timespec t;
1363                 struct stat s = {0};
1364                 t.tv_sec = s.st_mtim.tv_sec;
1365                 t.tv_nsec = s.st_mtim.tv_nsec;
1366                 t.tv_sec = s.st_ctim.tv_sec;
1367                 t.tv_nsec = s.st_ctim.tv_nsec;
1368                 t.tv_sec = s.st_atim.tv_sec;
1369                 t.tv_nsec = s.st_atim.tv_nsec;
1370             ],
1371             samba_cv_stat_hires=yes, samba_cv_stat_hires=no)
1372     ])
1373
1374 if test x"$samba_cv_stat_hires" = x"yes" ; then
1375     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1376     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1377     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1378     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1379             [whether struct stat has sub-second timestamps])
1380 fi
1381
1382 AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec suffixed nsec], samba_cv_stat_hires_notimespec,
1383     [
1384         AC_TRY_COMPILE(
1385             [
1386 #if TIME_WITH_SYS_TIME
1387 # include <sys/time.h>
1388 # include <time.h>
1389 #else
1390 # if HAVE_SYS_TIME_H
1391 #  include <sys/time.h>
1392 # else
1393 #  include <time.h>
1394 # endif
1395 #endif
1396 #ifdef HAVE_SYS_STAT_H
1397 #include <sys/stat.h>
1398 #endif
1399             ],
1400             [
1401                 struct timespec t;
1402                 struct stat s = {0};
1403                 t.tv_sec = s.st_mtime;
1404                 t.tv_nsec = s.st_mtimensec;
1405                 t.tv_sec = s.st_ctime;
1406                 t.tv_nsec = s.st_ctimensec;
1407                 t.tv_sec = s.st_atime;
1408                 t.tv_nsec = s.st_atimensec;
1409             ],
1410             samba_cv_stat_hires_notimespec=yes, samba_cv_stat_hires_notimespec=no)
1411     ])
1412
1413 if test x"$samba_cv_stat_hires_notimespec" = x"yes" ; then
1414     AC_DEFINE(HAVE_STAT_ST_MTIMENSEC, 1, [whether struct stat contains st_mtimensec])
1415     AC_DEFINE(HAVE_STAT_ST_ATIMENSEC, 1, [whether struct stat contains st_atimensec])
1416     AC_DEFINE(HAVE_STAT_ST_CTIMENSEC, 1, [whether struct stat contains st_ctimensec])
1417     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1418             [whether struct stat has sub-second timestamps without struct timespec suffixed nsec])
1419 fi
1420
1421 dnl AIX stype sub-second timestamps:
1422 AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec suffixed _n], samba_cv_stat_hires_notimespec_n,
1423     [
1424         AC_TRY_COMPILE(
1425             [
1426 #if TIME_WITH_SYS_TIME
1427 # include <sys/time.h>
1428 # include <time.h>
1429 #else
1430 # if HAVE_SYS_TIME_H
1431 #  include <sys/time.h>
1432 # else
1433 #  include <time.h>
1434 # endif
1435 #endif
1436 #ifdef HAVE_SYS_STAT_H
1437 #include <sys/stat.h>
1438 #endif
1439             ],
1440             [
1441                 struct timespec t;
1442                 struct stat s = {0};
1443                 t.tv_sec = s.st_mtime;
1444                 t.tv_nsec = s.st_mtime_n;
1445                 t.tv_sec = s.st_ctime;
1446                 t.tv_nsec = s.st_ctime_n;
1447                 t.tv_sec = s.st_atime;
1448                 t.tv_nsec = s.st_atime_n;
1449             ],
1450             samba_cv_stat_hires_notimespec_n=yes, samba_cv_stat_hires_notimespec_n=no)
1451     ])
1452
1453 if test x"$samba_cv_stat_hires_notimespec_n" = x"yes" ; then
1454     AC_DEFINE(HAVE_STAT_ST_MTIME_N, 1, [whether struct stat contains st_mtime_n])
1455     AC_DEFINE(HAVE_STAT_ST_ATIME_N, 1, [whether struct stat contains st_atime_n])
1456     AC_DEFINE(HAVE_STAT_ST_CTIME_N, 1, [whether struct stat contains st_ctime_n])
1457     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1458             [whether struct stat has sub-second timestamps without struct timespec suffixed _n])
1459 fi
1460
1461 dnl Tru64 has _micro_second_ resolution:
1462 AC_CACHE_CHECK([whether struct stat has sub-second timestamps in st_uXtime], samba_cv_stat_hires_uxtime,
1463     [
1464         AC_TRY_COMPILE(
1465             [
1466 #if TIME_WITH_SYS_TIME
1467 # include <sys/time.h>
1468 # include <time.h>
1469 #else
1470 # if HAVE_SYS_TIME_H
1471 #  include <sys/time.h>
1472 # else
1473 #  include <time.h>
1474 # endif
1475 #endif
1476 #ifdef HAVE_SYS_STAT_H
1477 #include <sys/stat.h>
1478 #endif
1479             ],
1480             [
1481                 struct timespec t;
1482                 struct stat s = {0};
1483                 t.tv_sec = s.st_mtime;
1484                 t.tv_nsec = s.st_umtime * 1000;
1485                 t.tv_sec = s.st_ctime;
1486                 t.tv_nsec = s.st_uctime * 1000;
1487                 t.tv_sec = s.st_atime;
1488                 t.tv_nsec = s.st_uatime * 1000;
1489             ],
1490             samba_cv_stat_hires_uxtime=yes, samba_cv_stat_hires_uxtime=no)
1491     ])
1492
1493 if test x"$samba_cv_stat_hires_uxtime" = x"yes" ; then
1494     AC_DEFINE(HAVE_STAT_ST_UMTIME, 1, [whether struct stat contains st_umtime])
1495     AC_DEFINE(HAVE_STAT_ST_UATIME, 1, [whether struct stat contains st_uatime])
1496     AC_DEFINE(HAVE_STAT_ST_UCTIME, 1, [whether struct stat contains st_uctime])
1497     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1498             [whether struct stat has sub-second timestamps in st_uXtime])
1499 fi
1500
1501 AC_CACHE_CHECK([whether struct stat has st_birthtimespec], samba_cv_stat_st_birthtimespec,
1502     [
1503         AC_TRY_COMPILE(
1504             [
1505 #if TIME_WITH_SYS_TIME
1506 # include <sys/time.h>
1507 # include <time.h>
1508 #else
1509 # if HAVE_SYS_TIME_H
1510 #  include <sys/time.h>
1511 # else
1512 #  include <time.h>
1513 # endif
1514 #endif
1515 #ifdef HAVE_SYS_STAT_H
1516 #include <sys/stat.h>
1517 #endif
1518             ],
1519             [
1520                 struct timespec t;
1521                 struct stat s = {0};
1522                 t = s.st_birthtimespec;
1523             ],
1524             samba_cv_stat_st_birthtimespec=yes, samba_cv_stat_st_birthtimespec=no)
1525     ])
1526
1527 if test x"$samba_cv_stat_st_birthtimespec" = x"yes" ; then
1528     AC_DEFINE(HAVE_STAT_ST_BIRTHTIMESPEC, 1, [whether struct stat contains st_birthtimespec])
1529 fi
1530
1531 AC_CACHE_CHECK([whether struct stat has st_birthtimensec], samba_cv_stat_st_birthtimensec,
1532     [
1533         AC_TRY_COMPILE(
1534             [
1535 #if TIME_WITH_SYS_TIME
1536 # include <sys/time.h>
1537 # include <time.h>
1538 #else
1539 # if HAVE_SYS_TIME_H
1540 #  include <sys/time.h>
1541 # else
1542 #  include <time.h>
1543 # endif
1544 #endif
1545 #ifdef HAVE_SYS_STAT_H
1546 #include <sys/stat.h>
1547 #endif
1548             ],
1549             [
1550                 struct timespec t;
1551                 struct stat s = {0};
1552                 t.tv_nsec = s.st_birthtimensec;
1553             ],
1554             samba_cv_stat_st_birthtimensec=yes, samba_cv_stat_st_birthtimensec=no)
1555     ])
1556
1557 if test x"$samba_cv_stat_st_birthtimensec" = x"yes" ; then
1558     AC_DEFINE(HAVE_STAT_ST_BIRTHTIMENSEC, 1, [whether struct stat contains st_birthtimensec])
1559 fi
1560
1561 AC_CACHE_CHECK([whether struct stat has st_birthtime], samba_cv_stat_st_birthtime,
1562     [
1563         AC_TRY_COMPILE(
1564             [
1565 #if TIME_WITH_SYS_TIME
1566 # include <sys/time.h>
1567 # include <time.h>
1568 #else
1569 # if HAVE_SYS_TIME_H
1570 #  include <sys/time.h>
1571 # else
1572 #  include <time.h>
1573 # endif
1574 #endif
1575 #ifdef HAVE_SYS_STAT_H
1576 #include <sys/stat.h>
1577 #endif
1578             ],
1579             [
1580                 struct time_t t;
1581                 struct stat s = {0};
1582                 t = s.st_birthtime;
1583             ],
1584             samba_cv_stat_st_birthtime=yes, samba_cv_stat_st_birthtime=no)
1585     ])
1586
1587 if test x"$samba_cv_stat_st_birthtime" = x"yes" ; then
1588     AC_DEFINE(HAVE_STAT_ST_BIRTHTIME, 1, [whether struct stat contains st_birthtime])
1589 fi
1590
1591 #####################################
1592 # needed for SRV lookups
1593 AC_CHECK_LIB(resolv, dn_expand)
1594 AC_CHECK_LIB(resolv, _dn_expand)
1595 AC_CHECK_LIB(resolv, __dn_expand)
1596
1597 #
1598 # Check for the functions putprpwnam, set_auth_parameters,
1599 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1600 # Needed for OSF1 and HPUX.
1601 #
1602
1603 AC_LIBTESTFUNC(security, putprpwnam)
1604 AC_LIBTESTFUNC(sec, putprpwnam)
1605
1606 AC_LIBTESTFUNC(security, set_auth_parameters)
1607 AC_LIBTESTFUNC(sec, set_auth_parameters)
1608
1609 # UnixWare 7.x has its getspnam in -lgen
1610 AC_LIBTESTFUNC(gen, getspnam)
1611
1612 AC_LIBTESTFUNC(security, getspnam)
1613 AC_LIBTESTFUNC(sec, getspnam)
1614
1615 AC_LIBTESTFUNC(security, bigcrypt)
1616 AC_LIBTESTFUNC(sec, bigcrypt)
1617
1618 AC_LIBTESTFUNC(security, getprpwnam)
1619 AC_LIBTESTFUNC(sec, getprpwnam)
1620
1621 AC_CHECK_FUNCS(strsignal)
1622
1623 ############################################
1624 # Check if we have libattr
1625 case "$host_os" in
1626   *osf*)
1627         AC_SEARCH_LIBS(getproplist, [proplist])
1628         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1629         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1630         AC_CHECK_FUNCS(sizeof_proplist_entry)
1631   ;;
1632   *)
1633         AC_SEARCH_LIBS(getxattr, [attr])
1634         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1635         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1636         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1637         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1638         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1639         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1640         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1641   ;;
1642 esac
1643
1644 ########################################################
1645 # Check if attropen() is present if this is Solaris
1646 case "$host_os" in
1647   *solaris*)
1648         AC_CHECK_FUNCS(attropen)
1649   ;;
1650 esac
1651
1652 ########################################################
1653 # Do xattr functions take additional options like on Darwin?
1654 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1655         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1656                 old_LIBS=$LIBS
1657                 LIBS="$LIBS $ACL_LIBS"
1658                 AC_TRY_COMPILE([
1659                         #include <sys/types.h>
1660                         #if HAVE_ATTR_XATTR_H
1661                         #include <attr/xattr.h>
1662                         #elif HAVE_SYS_XATTR_H
1663                         #include <sys/xattr.h>
1664                         #endif
1665                 ],[
1666                         getxattr(0, 0, 0, 0, 0, 0);
1667                 ],
1668                 [smb_attr_cv_xattr_add_opt=yes],
1669                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1670         ])
1671         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1672                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1673         fi
1674 fi
1675
1676 # Check if we have extattr
1677 case "$host_os" in
1678   *freebsd4* | *dragonfly* )
1679     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1680     ;;
1681   *)
1682     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1683     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1684     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1685     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1686     ;;
1687 esac
1688
1689 AC_DISABLE_STATIC
1690 AC_ENABLE_SHARED
1691
1692 # Set defaults
1693 PIE_CFLAGS=""
1694 PIE_LDFLAGS=""
1695 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1696
1697 if test "x$enable_pie" != xno
1698 then
1699         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1700         [
1701                 cat > conftest.c <<EOF
1702 int foo;
1703 main () { return 0;}
1704 EOF
1705                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1706                 then
1707                         samba_cv_fpie=yes
1708                 else
1709                         samba_cv_fpie=no
1710                 fi
1711                 rm -f conftest*
1712         ])
1713         if test x"${samba_cv_fpie}" = x"yes"
1714         then
1715                 PIE_CFLAGS="-fPIE"
1716                 PIE_LDFLAGS="-pie"
1717         fi
1718 fi
1719
1720 # Set defaults
1721 RELRO_LDFLAGS=""
1722 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1723
1724 if test "x$enable_relro" != xno
1725 then
1726         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1727         [
1728                 cat > conftest.c <<EOF
1729 int foo;
1730 main () { return 0;}
1731 EOF
1732                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1733                 then
1734                         samba_cv_relro=yes
1735                 else
1736                         samba_cv_relro=no
1737                 fi
1738                 rm -f conftest*
1739         ])
1740         if test x"${samba_cv_relro}" = x"yes"
1741         then
1742                 RELRO_LDFLAGS="-Wl,-z,relro"
1743         fi
1744 fi
1745
1746 # Set defaults
1747 SYMSEXT="syms"
1748 AC_SUBST(SYMSEXT)
1749
1750 # Assume non-shared by default and override below
1751 BLDSHARED="false"
1752
1753 # these are the defaults, good for lots of systems
1754 HOST_OS="$host_os"
1755 LDSHFLAGS="-shared"
1756 MODULE_EXPORTS=""
1757 SONAMEFLAG="#"
1758 SHLD="\${CC} \${CFLAGS}"
1759 PICFLAG="${PIE_CFLAGS}"
1760 SHLIBEXT="so"
1761 DSO_EXPORTS=""
1762
1763 # this bit needs to be modified for each OS that supports share libs
1764 # You need to specify how to create a shared library and
1765   # how to compile C code to produce PIC object files
1766
1767   AC_MSG_CHECKING([ability to build shared libraries])
1768
1769   # and these are for particular systems
1770   case "$host_os" in
1771                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1772                         BLDSHARED="true"
1773                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1774                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined"
1775                         else
1776                                 LDSHFLAGS="-shared -Wl,-Bsymbolic"
1777                         fi
1778                         DYNEXP="-Wl,--export-dynamic"
1779                         PICFLAG="-fPIC"
1780                         SONAMEFLAG="-Wl,-soname="
1781                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1782                         ;;
1783                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1784                         BLDSHARED="true"
1785                         LDSHFLAGS="-G"
1786                         SONAMEFLAG="-h "
1787                         if test "${GCC}" = "yes"; then
1788                                 PICFLAG="-fPIC"
1789                                 SONAMEFLAG="-Wl,-soname="
1790                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1791                                         DYNEXP="-Wl,-E"
1792                                 fi
1793                         else
1794                                 PICFLAG="-KPIC"
1795                                 ## ${CFLAGS} added for building 64-bit shared
1796                                 ## libs using Sun's Compiler
1797                                 LDSHFLAGS="-G \${CFLAGS}"
1798                         fi
1799                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1800                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1801                         ;;
1802                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1803                         BLDSHARED="true"
1804                         LDSHFLAGS="-G"
1805                         SONAMEFLAG="-Wl,-h,"
1806                         PICFLAG="-KPIC"   # Is this correct for SunOS
1807                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1808                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1809                         ;;
1810                 *netbsd* | *freebsd* | *dragonfly* )
1811                         BLDSHARED="true"
1812                         LDSHFLAGS="-shared"
1813                         DYNEXP="-Wl,--export-dynamic"
1814                         SONAMEFLAG="-Wl,-soname,"
1815                         PICFLAG="-fPIC -DPIC"
1816                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1817                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1818                         ;;
1819                 *openbsd*)  BLDSHARED="true"
1820                         LDSHFLAGS="-shared"
1821                         DYNEXP="-Wl,-Bdynamic"
1822                         SONAMEFLAG="-Wl,-soname,"
1823                         PICFLAG="-fPIC"
1824                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1825                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1826                         ;;
1827                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1828                         case "$host_os" in
1829                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1830                         ;;
1831                         esac
1832                         BLDSHARED="true"
1833                         LDSHFLAGS="-set_version sgi1.0 -shared"
1834                         SONAMEFLAG="-soname "
1835                         SHLD="\${LD}"
1836                         if test "${GCC}" = "yes"; then
1837                                 PICFLAG="-fPIC"
1838                         else
1839                                 PICFLAG="-KPIC"
1840                         fi
1841                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1842                         ;;
1843                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1844                         BLDSHARED="true"
1845                         # use expfull to export underscored symbols
1846                         # add rtl to remove /lib/crt0.o warning
1847                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1848                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1849                         PICFLAG="-O2"
1850                         # as AIX code is always position independent...
1851                         # .po will just create compile warnings, use po.o:
1852                         if test "${GCC}" != "yes"; then
1853                                 ## for funky AIX compiler using strncpy()
1854                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1855                         fi
1856
1857                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1858                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1859                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1860                         ;;
1861                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1862                         # Use special PIC flags for the native HP-UX compiler.
1863                                 BLDSHARED="true"
1864                                 SHLD="cc"
1865                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1866                                 SONAMEFLAG="-Wl,+h "
1867                                 PICFLAG="+z"
1868                         if test "${GCC}" = "yes"; then
1869                                 PICFLAG="-fPIC"
1870                         else
1871                                 PICFLAG="+z +ESnolit"
1872                         fi
1873                         if test "$host_cpu" = "ia64"; then
1874                                 SHLIBEXT="so"
1875                               PICFLAG="+z"
1876                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1877                         else
1878                                 SHLIBEXT="sl"
1879                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1880                         fi
1881                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1882                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1883                         ;;
1884                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1885                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1886                         ;;
1887                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1888                         BLDSHARED="true"
1889                         LDSHFLAGS="-shared"
1890                         SONAMEFLAG="-Wl,-soname,"
1891                         PICFLAG="-fPIC"
1892                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1893                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1894                         ;;
1895                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1896                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1897                         ;;
1898                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1899                         BLDSHARED="true"
1900                         LDSHFLAGS="-shared"
1901                         SONAMEFLAG="-Wl,-soname,"
1902                         PICFLAG="-KPIC"
1903                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1904                         ;;
1905                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1906                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1907                         ;;
1908                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1909                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1910                         ;;
1911                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1912                         case "$host" in
1913                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1914                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1915                                         fi
1916                                         LDSHFLAGS="-G"
1917                                         DYNEXP="-Bexport"
1918                                 ;;
1919                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1920                         esac
1921                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1922                         ;;
1923
1924                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1925                         if [ test "$GCC" != yes ]; then
1926                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1927                         fi
1928                         LDSHFLAGS="-G"
1929                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1930                         ;;
1931                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1932                         BLDSHARED="false"
1933                         LDSHFLAGS=""
1934                         ;;
1935
1936                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1937                         BLDSHARED="true"
1938                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1939                         CFLAGS="$CFLAGS -fno-common"
1940                         SHLD="\${CC}"
1941                         SHLIBEXT="dylib"
1942                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1943                         SHLIBEXT="dylib"
1944                         # Since gcc doesn't fail on unrecognised options, the
1945                         # PIE test incorrectly succeeds. Darwin gcc does not
1946                         # actually support the PIE stuff.
1947                         PIE_LDFLAGS=
1948                         PIE_CFLAGS=
1949                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1950                         ;;
1951
1952                 *)
1953                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1954                         ;;
1955   esac
1956
1957 if test "$enable_shared" != "yes"; then
1958         BLDSHARED=false
1959 fi
1960
1961 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1962         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1963 fi
1964
1965 if test x"$BLDSHARED" = x"true" ; then
1966         LDFLAGS="$LDFLAGS -L./bin"
1967 fi
1968
1969 AC_MSG_RESULT($BLDSHARED)
1970
1971 AC_MSG_CHECKING([LDFLAGS])
1972 AC_MSG_RESULT([$LDFLAGS])
1973 AC_MSG_CHECKING([DYNEXP])
1974 AC_MSG_RESULT([$DYNEXP])
1975
1976 #######################################################
1977 # test whether building a shared library actually works
1978 if test $BLDSHARED = true; then
1979
1980 AC_MSG_CHECKING([SHLD])
1981 AC_MSG_RESULT([$SHLD])
1982 AC_MSG_CHECKING([LDSHFLAGS])
1983 AC_MSG_RESULT([$LDSHFLAGS])
1984
1985 AC_MSG_CHECKING([SHLIBEXT])
1986 AC_MSG_RESULT([$SHLIBEXT])
1987 AC_MSG_CHECKING([SONAMEFLAG])
1988 AC_MSG_RESULT([$SONAMEFLAG])
1989
1990 AC_MSG_CHECKING([PICFLAG])
1991 AC_MSG_RESULT([$PICFLAG])
1992
1993 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1994 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1995
1996 AC_CACHE_CHECK([whether building shared libraries actually works],
1997                [ac_cv_shlib_works],[
1998    # try building a trivial shared library
1999    ac_cv_shlib_works=no
2000    # The $SHLD and $LDSHFLAGS variables may contain references to other
2001    # variables so they need to be eval'ed.
2002    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
2003         shlib.o ${srcdir-.}/tests/shlib.c && \
2004    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
2005         shlib.o && ac_cv_shlib_works=yes
2006    rm -f "shlib.$SHLIBEXT" shlib.o
2007
2008 ])
2009 if test $ac_cv_shlib_works = no; then
2010    BLDSHARED=false
2011 fi
2012 fi
2013
2014 if test x"$BLDSHARED" != x"true"; then
2015         LDSHFLAGS="shared-libraries-disabled"
2016         SONAMEFLAG="shared-libraries-disabled"
2017         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
2018         SHLD="shared-libraries-disabled"
2019         PICFLAG="${PIE_CFLAGS}"
2020         SHLIBEXT="shared_libraries_disabled"
2021 fi
2022
2023 AC_MSG_CHECKING([used PICFLAG])
2024 AC_MSG_RESULT([$PICFLAG])
2025
2026 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
2027
2028 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
2029
2030 ################
2031
2032 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
2033 AC_TRY_RUN([#include <stdio.h>
2034 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
2035 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
2036 if test x"$samba_cv_have_longlong" = x"yes"; then
2037     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
2038     AC_CHECK_TYPE(intptr_t, unsigned long long)
2039 else
2040     AC_CHECK_TYPE(intptr_t, unsigned long)
2041 fi
2042
2043 #
2044 # Check if the compiler supports the LL prefix on long long integers.
2045 # AIX needs this.
2046
2047 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
2048     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
2049         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
2050 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
2051    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
2052 fi
2053
2054
2055 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
2056 AC_TRY_RUN([#include <time.h>
2057 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
2058 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
2059 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
2060     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
2061 fi
2062
2063 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2064 AC_TRY_RUN([#include <stdio.h>
2065 #include <sys/stat.h>
2066 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
2067 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2068 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
2069     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
2070 fi
2071
2072 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
2073 AC_TRY_RUN([
2074 #if defined(HAVE_UNISTD_H)
2075 #include <unistd.h>
2076 #endif
2077 #include <stdio.h>
2078 #include <sys/stat.h>
2079 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2080 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
2081 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
2082     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
2083 fi
2084
2085 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2086 AC_TRY_RUN([
2087 #if defined(HAVE_UNISTD_H)
2088 #include <unistd.h>
2089 #endif
2090 #include <stdio.h>
2091 #include <sys/stat.h>
2092 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
2093 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2094 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2095     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2096 fi
2097
2098 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
2099 AC_TRY_RUN([
2100 #if defined(HAVE_UNISTD_H)
2101 #include <unistd.h>
2102 #endif
2103 #include <stdio.h>
2104 #include <sys/stat.h>
2105 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2106 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
2107 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
2108     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
2109 fi
2110
2111 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2112 AC_TRY_RUN([
2113 #if defined(HAVE_UNISTD_H)
2114 #include <unistd.h>
2115 #endif
2116 #include <stdio.h>
2117 #include <sys/stat.h>
2118 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2119 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2120 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2121     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2122 fi
2123
2124 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2125 AC_TRY_RUN([
2126 #if defined(HAVE_UNISTD_H)
2127 #include <unistd.h>
2128 #endif
2129 #include <stdio.h>
2130 #include <sys/stat.h>
2131 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2132 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2133 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2134     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2135 fi
2136
2137 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2138 AC_TRY_COMPILE([
2139 #if defined(HAVE_UNISTD_H)
2140 #include <unistd.h>
2141 #endif
2142 #include <sys/types.h>
2143 #include <dirent.h>],
2144 [DIR64 de;],
2145 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2146 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2147     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2148 fi
2149
2150 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2151 AC_TRY_COMPILE([
2152 #if defined(HAVE_UNISTD_H)
2153 #include <unistd.h>
2154 #endif
2155 #include <sys/types.h>
2156 #include <dirent.h>],
2157 [struct dirent64 de;],
2158 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2159 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2160     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2161 fi
2162
2163 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2164 AC_TRY_RUN([
2165 #if defined(HAVE_UNISTD_H)
2166 #include <unistd.h>
2167 #endif
2168 #include <sys/types.h>
2169 main() { dev_t dev; int i = major(dev); return 0; }],
2170 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2171 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2172     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2173 fi
2174
2175 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2176 AC_TRY_RUN([
2177 #if defined(HAVE_UNISTD_H)
2178 #include <unistd.h>
2179 #endif
2180 #include <sys/types.h>
2181 main() { dev_t dev; int i = minor(dev); return 0; }],
2182 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2183 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2184     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2185 fi
2186
2187 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2188 AC_TRY_RUN([
2189 #if defined(HAVE_UNISTD_H)
2190 #include <unistd.h>
2191 #endif
2192 #include <sys/types.h>
2193 main() { dev_t dev = makedev(1,2); return 0; }],
2194 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2195 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2196     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2197 fi
2198
2199 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2200 AC_TRY_RUN([#include <stdio.h>
2201 main() { char c; c=250; exit((c > 0)?0:1); }],
2202 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2203 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2204     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2205 fi
2206
2207 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2208 AC_TRY_COMPILE([#include <sys/types.h>
2209 #include <dirent.h>
2210 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2211 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2212 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2213     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2214 fi
2215
2216 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2217 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2218 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2219 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2220     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2221 fi
2222
2223 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2224 AC_TRY_LINK([
2225 #include <sys/time.h>
2226 #include <unistd.h>], [struct timeval tv; return gettimeofday(&tv, NULL);],
2227            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,
2228            samba_cv_HAVE_GETTIMEOFDAY_TZ=no)])
2229 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2230     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday takes a tz argument])
2231 fi
2232
2233 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2234
2235     # On some systems (eg. Linux) librt can pull in libpthread. We
2236     # don't want this to happen because libpthreads changes signal delivery
2237     # semantics in ways we are not prepared for. This breaks Linux oplocks
2238     # which rely on signals.
2239
2240     AC_LIBTESTFUNC(rt, clock_gettime,
2241             [
2242                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2243                                 [Whether clock_gettime is available])
2244                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2245                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2246                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2247                         ])
2248
2249 fi
2250
2251 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2252 AC_TRY_RUN([#include <sys/types.h>
2253 #include <dirent.h>
2254 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2255 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2256 di->d_name[0] == 0) exit(0); exit(1);} ],
2257 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2258 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2259     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2260 fi
2261
2262 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2263 AC_TRY_COMPILE([#include <sys/types.h>
2264 #include <utime.h>],
2265 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2266 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2267 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2268     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2269 fi
2270
2271 ##############
2272 # Check utmp details, but only if our OS offers utmp.h
2273 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2274 dnl  utmp and utmpx come in many flavours
2275 dnl  We need to check for many of them
2276 dnl  But we don't need to do each and every one, because our code uses
2277 dnl  mostly just the utmp (not utmpx) fields.
2278
2279 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2280
2281 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2282 AC_TRY_COMPILE([#include <sys/types.h>
2283 #include <utmp.h>],
2284 [struct utmp ut;  ut.ut_name[0] = 'a';],
2285 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2286 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2287     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2288 fi
2289
2290 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2291 AC_TRY_COMPILE([#include <sys/types.h>
2292 #include <utmp.h>],
2293 [struct utmp ut;  ut.ut_user[0] = 'a';],
2294 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2295 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2296     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2297 fi
2298
2299 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2300 AC_TRY_COMPILE([#include <sys/types.h>
2301 #include <utmp.h>],
2302 [struct utmp ut;  ut.ut_id[0] = 'a';],
2303 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2304 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2305     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2306 fi
2307
2308 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2309 AC_TRY_COMPILE([#include <sys/types.h>
2310 #include <utmp.h>],
2311 [struct utmp ut;  ut.ut_host[0] = 'a';],
2312 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2313 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2314     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2315 fi
2316
2317 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2318 AC_TRY_COMPILE([#include <sys/types.h>
2319 #include <utmp.h>],
2320 [struct utmp ut;  time_t t; ut.ut_time = t;],
2321 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2322 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2323     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2324 fi
2325
2326 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2327 AC_TRY_COMPILE([#include <sys/types.h>
2328 #include <utmp.h>],
2329 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2330 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2331 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2332     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2333 fi
2334
2335 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2336 AC_TRY_COMPILE([#include <sys/types.h>
2337 #include <utmp.h>],
2338 [struct utmp ut;  ut.ut_type = 0;],
2339 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2340 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2341     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2342 fi
2343
2344 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2345 AC_TRY_COMPILE([#include <sys/types.h>
2346 #include <utmp.h>],
2347 [struct utmp ut;  ut.ut_pid = 0;],
2348 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2349 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2350     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2351 fi
2352
2353 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2354 AC_TRY_COMPILE([#include <sys/types.h>
2355 #include <utmp.h>],
2356 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2357 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2358 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2359     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2360 fi
2361
2362 dnl Look for the IPv6 varient by preference. Many systems have both.
2363 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2364 AC_TRY_COMPILE([#include <sys/types.h>
2365 #include <utmp.h>],
2366 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2367 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2368 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2369     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2370 fi
2371
2372 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2373 AC_TRY_COMPILE([#include <sys/types.h>
2374 #include <utmp.h>],
2375 [struct utmp ut;  ut.ut_addr = 0;],
2376 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2377 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2378     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2379 fi
2380
2381 if test x$ac_cv_func_pututline = xyes ; then
2382   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2383   AC_TRY_COMPILE([#include <sys/types.h>
2384 #include <utmp.h>],
2385   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2386   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2387   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2388       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2389   fi
2390 fi
2391
2392 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2393 AC_TRY_COMPILE([#include <sys/types.h>
2394 #include <utmpx.h>],
2395 [struct utmpx ux;  ux.ut_syslen = 0;],
2396 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2397 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2398     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2399 fi
2400
2401 fi
2402 # end utmp details
2403
2404
2405 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2406 AC_ARG_WITH(libiconv,
2407 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2408 [
2409   if test "$withval" = "no" ; then
2410     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2411   else
2412      if test "$withval" != "yes" ; then
2413         ICONV_PATH_SPEC=yes
2414         ICONV_LOOK_DIRS="$withval"
2415      fi
2416   fi
2417 ])
2418
2419 for i in $ICONV_LOOK_DIRS ; do
2420
2421     save_LIBS="$LIBS"
2422     save_LDFLAGS="$LDFLAGS"
2423     save_CPPFLAGS="$CPPFLAGS"
2424
2425     iconv_current_LIBS=""
2426     iconv_current_LDFLAGS=""
2427     iconv_current_CPPFLAGS=""
2428
2429     ICONV_FOUND="no"
2430     unset libext
2431
2432     #  This is here to handle -withval stuff for --with-libiconv
2433     #  Perhaps we should always add a -L
2434     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2435
2436     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2437     # installation paths. This gets a little tricky since we might have iconv
2438     # in both libiconv and in libc. In this case the jm_ICONV test will always
2439     # succeed when the header is found. To counter this, make sure the
2440     # library directory is there and check the ABI directory first (which
2441     # should be harmless on other systems.
2442     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2443     for l in "lib" "lib32" "lib/hpux32"; do
2444         if test -d "$i/$l" ; then
2445                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2446                 LIBS=
2447                 export LDFLAGS LIBS CPPFLAGS
2448                 # Try to find iconv(3)
2449                 jm_ICONV($i/$l)
2450                 if test x"$ICONV_FOUND" = "xyes" ; then
2451                     libext="$l"
2452                     break
2453                 fi
2454         fi
2455     done
2456
2457     if test x"$ICONV_FOUND" = "xyes" ; then
2458         iconv_current_LDFLAGS="-L$i/$libext"
2459         iconv_current_CPPFLAGS="-I$i/include"
2460
2461         if test x"$jm_cv_lib_iconv" != x; then
2462             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2463         else
2464             # We found iconv in libc.
2465             iconv_current_LIBS=""
2466         fi
2467
2468     fi
2469
2470     if test x"$ICONV_FOUND" = "xyes" ; then
2471
2472         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2473         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2474         LIBS="$save_LIBS $iconv_current_LIBS"
2475         export LDFLAGS LIBS CPPFLAGS
2476
2477         default_dos_charset=no
2478         default_display_charset=no
2479         default_unix_charset=no
2480
2481         # check for default dos charset name
2482         for j in CP850 IBM850 ; do
2483             rjs_CHARSET($j)
2484             default_dos_charset="$ICONV_CHARSET"
2485             if test x"$default_dos_charset" = x"$j"; then
2486                 break
2487             fi
2488         done
2489
2490         # check for default display charset name
2491         for j in ASCII 646 ; do
2492             rjs_CHARSET($j)
2493             default_display_charset="$ICONV_CHARSET"
2494             if test x"$default_display_charset" = x"$j"; then
2495                 break
2496             fi
2497         done
2498
2499         # check for default unix charset name
2500         for j in UTF-8 UTF8 ; do
2501             rjs_CHARSET($j)
2502             default_unix_charset="$ICONV_CHARSET"
2503             if test x"$default_unix_charset" = x"$j"; then
2504                 break
2505             fi
2506         done
2507
2508         if test "$default_dos_charset" != "no" -a \
2509                 "$default_dos_charset" != "cross" -a \
2510                 "$default_display_charset" != "no" -a \
2511                 "$default_display_charset" != "cross" -a \
2512                 "$default_unix_charset" != "no" -a \
2513                 "$default_unix_charset" != "cross"
2514         then
2515                 samba_cv_HAVE_NATIVE_ICONV=yes
2516         else
2517             if test "$default_dos_charset" = "cross" -o \
2518                      "$default_display_charset" = "cross" -o \
2519                      "$default_unix_charset" = "cross"
2520             then
2521                     samba_cv_HAVE_NATIVE_ICONV=cross
2522             else
2523                     samba_cv_HAVE_NATIVE_ICONV=no
2524             fi
2525         fi
2526
2527         # At this point, we have a libiconv candidate. We know that
2528         # we have the right headers and libraries, but we don't know
2529         # whether it does the conversions we want. We can't test this
2530         # because we are cross-compiling. This is not necessarily a big
2531         # deal, since we can't guarantee that the results we get now will
2532         # match the results we get at runtime anyway.
2533         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2534             default_dos_charset="CP850"
2535             default_display_charset="ASCII"
2536             default_unix_charset="UTF-8"
2537             samba_cv_HAVE_NATIVE_ICONV=yes
2538             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2539             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2540         fi
2541
2542         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2543
2544             CPPFLAGS=$save_CPPFLAGS
2545             LDFLAGS=$save_LDFLAGS
2546             LIBS=$save_LIBS
2547
2548             if test x"$iconv_current_LIBS" != x; then
2549                 LIBS="$LIBS $iconv_current_LIBS"
2550             fi
2551
2552             # Add the flags we need to CPPFLAGS and LDFLAGS
2553             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2554             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2555
2556             # Turn the #defines into string literals
2557             default_dos_charset="\"$default_dos_charset\""
2558             default_display_charset="\"$default_display_charset\""
2559             default_unix_charset="\"$default_unix_charset\""
2560
2561             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2562             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2563             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2564             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2565
2566            break
2567         fi
2568
2569     # We didn't find a working iconv, so keep going
2570     fi
2571
2572     #  We only need to clean these up here for the next pass through the loop
2573     CPPFLAGS=$save_CPPFLAGS
2574     LDFLAGS=$save_LDFLAGS
2575     LIBS=$save_LIBS
2576     export LDFLAGS LIBS CPPFLAGS
2577 done
2578 unset libext
2579
2580
2581 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2582     AC_MSG_WARN([Sufficient support for iconv function was not found.
2583     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2584    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2585    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2586    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2587 fi
2588
2589
2590 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2591 AC_TRY_RUN([
2592 #include <sys/types.h>
2593 #include <fcntl.h>
2594 #ifndef F_GETLEASE
2595 #define F_GETLEASE      1025
2596 #endif
2597 main() {
2598        int fd = open("/dev/null", O_RDONLY);
2599        return fcntl(fd, F_GETLEASE, 0) == -1;
2600 }
2601 ],
2602 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2603 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2604     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2605 fi
2606
2607 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2608 AC_TRY_RUN([
2609 #include <sys/types.h>
2610 #include <fcntl.h>
2611 #include <signal.h>
2612 #ifndef F_NOTIFY
2613 #define F_NOTIFY 1026
2614 #endif
2615 main() {
2616         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2617 }
2618 ],
2619 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2620 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2621     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2622 fi
2623
2624 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2625 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h sys/inotify.h)
2626 AC_CHECK_FUNCS(inotify_init)
2627 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2628 ],
2629 samba_cv_HAVE_INOTIFY=yes,
2630 samba_cv_HAVE_INOTIFY=no,
2631 samba_cv_HAVE_INOTIFY=cross)
2632
2633 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2634     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2635 fi
2636
2637 #################################################
2638 # Check if FAM notifications are available. For FAM info, see
2639 #       http://oss.sgi.com/projects/fam/
2640 #       http://savannah.nongnu.org/projects/fam/
2641 AC_ARG_ENABLE(fam,
2642 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2643
2644 if test x$enable_fam != xno; then
2645     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2646     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2647         # On IRIX, libfam requires libC, but other FAM implementations
2648         # might not need it.
2649         AC_CHECK_LIB(fam, FAMOpen2,
2650             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"],
2651             [samba_cv_HAVE_LIBFAM=no])
2652
2653         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2654             samba_fam_xtra=-lC
2655             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2656                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"],
2657                 [samba_cv_HAVE_LIBFAM=no])
2658             unset samba_fam_xtra
2659         fi
2660     fi
2661
2662     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2663         default_shared_modules="$default_shared_modules vfs_notify_fam"
2664         AC_TRY_COMPILE([#include <fam.h>],
2665                     [FAMCodes code = FAMChanged;],
2666                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2667                         [Whether fam.h contains a typedef for enum FAMCodes]),
2668                     [])
2669     fi
2670
2671     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2672         AC_MSG_ERROR(FAM support requested but FAM library not available )
2673     fi
2674 fi
2675
2676 AC_SUBST(SMB_FAM_LIBS)
2677
2678 #################################################
2679 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2680
2681 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2682
2683 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2684 # Theoretically it should work with AIX JFS2 too but this needs testing
2685 if test x"$samba_cv_HAVE_GPFS" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2686     default_shared_modules="$default_shared_modules vfs_tsmsm"
2687 fi
2688
2689 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2690 AC_TRY_RUN([
2691 #include <sys/types.h>
2692 #include <fcntl.h>
2693 #include <signal.h>
2694 #include <sys/file.h>
2695 #ifndef LOCK_MAND
2696 #define LOCK_MAND       32
2697 #define LOCK_READ       64
2698 #endif
2699 main() {
2700         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2701 }
2702 ],
2703 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2704 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2705     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2706 fi
2707
2708
2709 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2710 AC_TRY_COMPILE([#include <sys/types.h>
2711 #include <fcntl.h>],
2712 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2713 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2714 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2715     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2716 fi
2717
2718 #################################################
2719 # Check for POSIX capability support
2720
2721 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2722     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2723     [], [])
2724
2725 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2726
2727     ac_save_LIBS=$LIBS
2728     AC_LIBTESTFUNC(cap, cap_get_proc)
2729
2730     AC_CACHE_CHECK([for POSIX capabilities],
2731             samba_cv_HAVE_POSIX_CAPABILITIES,
2732             [
2733                 AC_TRY_RUN([
2734 #include <sys/types.h>
2735 #include <sys/capability.h>
2736 main() {
2737  cap_t cap;
2738  cap_value_t vals[1];
2739  if (!(cap = cap_get_proc()))
2740    exit(1);
2741  vals[0] = CAP_CHOWN;
2742  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2743  cap_set_proc(cap);
2744  exit(0);
2745 }],
2746                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2747                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2748                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2749             ])
2750
2751 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2752     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2753             [Whether POSIX capabilities are available])
2754 else
2755     LIBS=$ac_save_LIBS
2756 fi
2757
2758 fi
2759
2760 #
2761 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2762 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2763 #
2764
2765 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2766 AC_TRY_COMPILE([#include <sys/types.h>
2767 #if defined(HAVE_RPC_RPC_H)
2768 #include <rpc/rpc.h>
2769 #endif],
2770 [int16 testvar;],
2771 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2772 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2773     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2774 fi
2775
2776 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2777 AC_TRY_COMPILE([#include <sys/types.h>
2778 #if defined(HAVE_RPC_RPC_H)
2779 #include <rpc/rpc.h>
2780 #endif],
2781 [uint16 testvar;],
2782 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2783 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2784     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2785 fi
2786
2787 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2788 AC_TRY_COMPILE([#include <sys/types.h>
2789 #if defined(HAVE_RPC_RPC_H)
2790 #include <rpc/rpc.h>
2791 #endif],
2792 [int32 testvar;],
2793 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2794 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2795     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2796 fi
2797
2798 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2799 AC_TRY_COMPILE([#include <sys/types.h>
2800 #if defined(HAVE_RPC_RPC_H)
2801 #include <rpc/rpc.h>
2802 #endif],
2803 [uint32 testvar;],
2804 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2805 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2806     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2807 fi
2808
2809 dnl
2810 dnl Some systems (SCO) have a problem including
2811 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2812 dnl as a #define in <prot.h> and as part of an enum
2813 dnl in <rpc/rpc.h>.
2814 dnl
2815
2816 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2817 AC_TRY_COMPILE([#include <sys/types.h>
2818 #ifdef HAVE_SYS_SECURITY_H
2819 #include <sys/security.h>
2820 #include <prot.h>
2821 #endif  /* HAVE_SYS_SECURITY_H */
2822 #if defined(HAVE_RPC_RPC_H)
2823 #include <rpc/rpc.h>
2824 #endif],
2825 [int testvar;],
2826 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2827 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2828     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2829 fi
2830
2831 AC_MSG_CHECKING([for test routines])
2832 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2833            AC_MSG_RESULT(yes),
2834            AC_MSG_ERROR([cant find test code. Aborting config]),
2835            AC_MSG_WARN([cannot run when cross-compiling]))
2836
2837 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2838 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2839            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2840 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2841     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2842 fi
2843
2844 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2845 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2846            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2847 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2848     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2849 fi
2850
2851 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2852 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2853 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2854 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2855 AC_CHECK_FUNCS(getpagesize)
2856
2857 ################################################
2858 # look for a method of setting the effective uid
2859 seteuid=no;
2860
2861 if test $seteuid = no; then
2862 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2863 AC_TRY_RUN([
2864 #define AUTOCONF_TEST 1
2865 #define USE_SETREUID 1
2866 #include "confdefs.h"
2867 #include "${srcdir-.}/lib/util_sec.c"],
2868            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2869 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2870     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2871 fi
2872 fi
2873
2874 # we check for setresuid second as it conflicts with AIO on Linux. 
2875 # see http://samba.org/~tridge/junkcode/aio_uid.c
2876 if test $seteuid = no; then
2877 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2878 AC_TRY_RUN([
2879 #define AUTOCONF_TEST 1
2880 #define USE_SETRESUID 1
2881 #include "confdefs.h"
2882 #include "${srcdir-.}/lib/util_sec.c"],
2883            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2884 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2885     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2886 fi
2887 fi
2888
2889 if test $seteuid = no; then
2890 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2891 AC_TRY_RUN([
2892 #define AUTOCONF_TEST 1
2893 #define USE_SETEUID 1
2894 #include "confdefs.h"
2895 #include "${srcdir-.}/lib/util_sec.c"],
2896            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2897 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2898     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2899 fi
2900 fi
2901
2902 if test $seteuid = no; then
2903 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2904 AC_TRY_RUN([
2905 #define AUTOCONF_TEST 1
2906 #define USE_SETUIDX 1
2907 #include "confdefs.h"
2908 #include "${srcdir-.}/lib/util_sec.c"],
2909            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2910 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2911     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2912 fi
2913 fi
2914
2915 AC_CACHE_CHECK([for the Darwin initgroups system call],
2916         samba_cv_DARWIN_INITGROUPS,
2917         AC_TRY_LINK([
2918 #include <sys/syscall.h>
2919 #include <unistd.h>
2920         ],
2921         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2922         samba_cv_DARWIN_INITGROUPS=yes,
2923         samba_cv_DARWIN_INITGROUPS=no)
2924 )
2925
2926 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2927     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2928         [Whether to use the Darwin-specific initgroups system call])
2929 fi
2930
2931 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2932 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2933            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2934 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2935     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2936 fi
2937
2938 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2939 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2940            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2941 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2942     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2943
2944 else
2945
2946 dnl
2947 dnl Don't check for 64 bit fcntl locking if we know that the
2948 dnl glibc2.1 broken check has succeeded.
2949 dnl
2950
2951   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2952   AC_TRY_RUN([
2953 #if defined(HAVE_UNISTD_H)
2954 #include <unistd.h>
2955 #endif
2956 #include <stdio.h>
2957 #include <stdlib.h>
2958
2959 #ifdef HAVE_FCNTL_H
2960 #include <fcntl.h>
2961 #endif
2962
2963 #ifdef HAVE_SYS_FCNTL_H
2964 #include <sys/fcntl.h>
2965 #endif
2966 main() { struct flock64 fl64;
2967 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2968 exit(0);
2969 #else
2970 exit(1);
2971 #endif
2972 }],
2973        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2974
2975   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2976       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2977   fi
2978 fi
2979
2980 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2981 AC_TRY_COMPILE([#include <sys/types.h>
2982 #include <sys/stat.h>
2983 #include <unistd.h>],
2984 [struct stat st;  st.st_blocks = 0;],
2985 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2986 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2987     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2988 fi
2989
2990 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2991 AC_TRY_COMPILE([#include <sys/types.h>
2992 #include <sys/stat.h>
2993 #include <unistd.h>],
2994 [struct stat st;  st.st_blksize = 0;],
2995 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2996 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2997     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2998 fi
2999
3000 AC_CACHE_CHECK([for st_flags in struct stat],
3001         samba_cv_HAVE_STAT_ST_FLAGS,
3002         [
3003             AC_TRY_COMPILE([#include <sys/types.h>
3004 #include <sys/stat.h>
3005 #include <unistd.h>],
3006             [struct stat st;  st.st_flags = 0;],
3007             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3008             samba_cv_HAVE_STAT_ST_FLAGS=no,
3009             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3010         ])
3011
3012 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3013     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3014                 [Whether the stat struct has a st_flags member])
3015 fi
3016
3017 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3018 AC_TRY_COMPILE([
3019 #include <sys/types.h>
3020 #include <sys/acl.h>
3021 #if defined(HAVE_RPCSVC_NIS_H)
3022 #include <rpcsvc/nis.h>
3023 #endif],
3024 [int i;],
3025 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3026 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3027         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3028 fi
3029
3030 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3031 AC_TRY_RUN([
3032 #include <stdio.h>
3033 #include <limits.h>
3034 #include <signal.h>
3035
3036 void exit_on_core(int ignored) {
3037         exit(1);
3038 }
3039
3040 main() {
3041         char *newpath;
3042         signal(SIGSEGV, exit_on_core);
3043         newpath = realpath("/tmp", NULL);
3044         exit((newpath != NULL) ? 0 : 1);
3045 }
3046 ],
3047 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3048 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3049     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3050 fi
3051
3052 #################################################
3053 # check for AFS clear-text auth support
3054 samba_cv_WITH_AFS=no
3055 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3056 AC_ARG_WITH(afs,
3057 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
3058 [ case "$withval" in
3059   yes|auto)
3060     AC_MSG_RESULT($withval)
3061     samba_cv_WITH_AFS=$withval
3062     ;;
3063   *)
3064     AC_MSG_RESULT(no)
3065     ;;
3066   esac ],
3067   AC_MSG_RESULT(no)
3068 )
3069
3070 ####################################################
3071 # check for Linux-specific AFS fake-kaserver support
3072 samba_cv_WITH_FAKE_KASERVER=no
3073 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3074 AC_ARG_WITH(fake-kaserver,
3075 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
3076 [ case "$withval" in
3077   yes|auto)
3078     AC_MSG_RESULT($withval)
3079     samba_cv_WITH_FAKE_KASERVER=$withval
3080     ;;
3081   *)
3082     AC_MSG_RESULT(no)
3083     ;;
3084   esac ],
3085   AC_MSG_RESULT(no)
3086 )
3087
3088 #################################################
3089 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3090 if test x"$samba_cv_WITH_AFS" != x"no" ||
3091    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3092
3093     # see if this box has the afs-headers in /usr/include/afs
3094     AC_MSG_CHECKING(for /usr/include/afs)
3095     if test -d /usr/include/afs; then
3096           CFLAGS="$CFLAGS -I/usr/include/afs"
3097           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
3098           AC_MSG_RESULT(yes)
3099     else
3100       AC_MSG_RESULT(no)
3101     fi
3102
3103     # check for afs.h
3104     have_afs_headers=no
3105     AC_CHECK_HEADERS(afs.h afs/afs.h)
3106     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3107         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3108            test x"$samba_cv_WITH_AFS" = x"auto"; then
3109                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3110         else
3111                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3112         fi
3113     else
3114         have_afs_headers=yes
3115     fi
3116 fi
3117
3118 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3119     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3120 fi
3121
3122 #################################################
3123 # check whether to compile AFS/NT ACL mapping module
3124 samba_cv_WITH_VFS_AFSACL=no
3125 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3126 AC_ARG_WITH(vfs-afsacl,
3127 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
3128 [ case "$withval" in
3129   yes|auto)
3130     AC_MSG_RESULT($withval)
3131     samba_cv_WITH_VFS_AFSACL=yes
3132     ;;
3133   *)
3134     AC_MSG_RESULT(no)
3135     ;;
3136   esac ],
3137   AC_MSG_RESULT(no)
3138 )
3139
3140 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3141    default_shared_modules="$default_shared_modules vfs_afsacl"
3142 fi
3143         
3144 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3145     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3146 fi
3147
3148 #################################################
3149 # check for the DFS clear-text auth system
3150 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3151 AC_ARG_WITH(dfs,
3152 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3153 [ case "$withval" in
3154   yes)
3155     AC_MSG_RESULT(yes)
3156     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3157     ;;
3158   *)
3159     AC_MSG_RESULT(no)
3160     ;;
3161   esac ],
3162   AC_MSG_RESULT(no)
3163 )
3164
3165 ########################################################
3166 # Compile with LDAP support?
3167
3168 with_ldap_support=auto
3169 AC_MSG_CHECKING([for LDAP support])
3170
3171 AC_ARG_WITH(ldap,
3172 [AS_HELP_STRING([--with-ldap], [LDAP support (default yes)])],
3173 [ case "$withval" in
3174     yes|no)
3175         with_ldap_support=$withval
3176         ;;
3177   esac ])
3178
3179 AC_MSG_RESULT($with_ldap_support)
3180
3181 SMBLDAP=""
3182 AC_SUBST(SMBLDAP)
3183 SMBLDAPUTIL=""
3184 AC_SUBST(SMBLDAPUTIL)
3185 LDBLDAP=""
3186 AC_SUBST(LDBLDAP)
3187
3188 if test x"$with_ldap_support" != x"no"; then
3189
3190   ##################################################################
3191   # first test for ldap.h and lber.h
3192   # (ldap.h is required for this test)
3193   AC_CHECK_HEADERS(ldap.h lber.h)
3194
3195   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3196         if test x"$with_ldap_support" = x"yes"; then
3197          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3198         else
3199          AC_MSG_WARN(ldap.h is needed for LDAP support)
3200         fi
3201         
3202         with_ldap_support=no
3203   fi
3204
3205   ##################################################################
3206   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3207   # unsigned int in include/includes.h
3208   case $host_os in
3209         *hpux*)
3210          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3211          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3212         with_ldap_support=yes
3213         ;;
3214         *)
3215         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3216         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3217                 if test x"$with_ldap_support" = x"yes"; then
3218                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3219                 else
3220                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3221                 fi
3222                 with_ldap_support=no
3223         fi
3224         ;;
3225   esac
3226 fi
3227
3228 if test x"$with_ldap_support" != x"no"; then
3229   ac_save_LIBS=$LIBS
3230
3231   ##################################################################
3232   # we might need the lber lib on some systems. To avoid link errors
3233   # this test must be before the libldap test
3234   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3235
3236   ########################################################
3237   # If ber_sockbuf_add_io() is available we can add
3238   # SASL wrapping hooks
3239   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3240
3241   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3242                  AC_TRY_COMPILE([#include <ldap.h>],
3243                                 [int val = LDAP_OPT_SOCKBUF;],
3244                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3245                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3246
3247   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3248           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3249         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3250   fi
3251
3252   #######################################################
3253   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3254   # ldap logging and print it out in the samba logs
3255   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3256                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3257                  [AC_TRY_COMPILE([#include <lber.h>],
3258                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3259                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3260                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3261
3262   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3263         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3264                   [Support for LDAP/LBER logging interception])
3265   fi
3266
3267   ########################################################
3268   # now see if we can find the ldap libs in standard paths
3269   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3270
3271   ########################################################
3272   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3273   # Check found in pam_ldap 145.
3274   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3275
3276   LIBS="$LIBS $LDAP_LIBS"
3277   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3278     AC_TRY_COMPILE([
3279         #include <lber.h>
3280         #include <ldap.h>],
3281         [ldap_set_rebind_proc(0, 0, 0);],
3282         [smb_ldap_cv_ldap_set_rebind_proc=3],
3283         [smb_ldap_cv_ldap_set_rebind_proc=2]
3284     )
3285   ])
3286
3287   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3288
3289   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3290
3291   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3292     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3293     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3294     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3295     default_shared_modules="$default_shared_modules";
3296     SMBLDAP="lib/smbldap.o"
3297     SMBLDAPUTIL="lib/smbldap_util.o"
3298     with_ldap_support=yes
3299     AC_MSG_CHECKING(whether LDAP support is used)
3300     AC_MSG_RESULT(yes)
3301   else
3302     if test x"$with_ldap_support" = x"yes"; then
3303         AC_MSG_ERROR(libldap is needed for LDAP support)
3304     else
3305         AC_MSG_WARN(libldap is needed for LDAP support)
3306     fi
3307
3308     LDAP_LIBS=""
3309     with_ldap_support=no
3310   fi
3311   LIBS=$ac_save_LIBS
3312 fi
3313
3314
3315 #################################################
3316 # active directory support
3317
3318 with_ads_support=auto
3319 AC_MSG_CHECKING([for Active Directory and krb5 support])
3320
3321 AC_ARG_WITH(ads,
3322 [AS_HELP_STRING([--with-ads], [Active Directory support (default auto)])],
3323 [ case "$withval" in
3324     yes|no)
3325         with_ads_support="$withval"
3326         ;;
3327   esac ])
3328
3329 AC_MSG_RESULT($with_ads_support)
3330
3331 FOUND_KRB5=no
3332 KRB5_LIBS=""
3333
3334 if test x"$with_ldap_support" != x"yes"; then
3335
3336     if test x"$with_ads_support" = x"yes"; then
3337         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3338     elif test x"$with_ads_support" = x"auto"; then
3339         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3340         with_ads_support=no
3341     fi
3342
3343 else
3344
3345     # Check to see whether there is enough LDAP functionality to be able
3346     # to build AD support.
3347
3348 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3349 case "$host_os" in
3350         *hpux*)
3351     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3352
3353     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3354         if test x"$with_ads_support" = x"yes"; then
3355             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3356         elif test x"$with_ads_support" = x"auto"; then
3357             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3358             with_ads_support=no
3359         fi
3360     fi
3361     ;;
3362         *)
3363     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3364
3365     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3366         if test x"$with_ads_support" = x"yes"; then
3367             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3368         elif test x"$with_ads_support" = x"auto"; then
3369             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3370             with_ads_support=no
3371         fi
3372     fi
3373     ;;
3374 esac
3375
3376
3377     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3378
3379     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3380         if test x"$with_ads_support" = x"yes"; then
3381             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3382         elif test x"$with_ads_support" = x"auto"; then
3383             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3384             with_ads_support=no
3385         fi
3386     fi
3387
3388 fi
3389
3390 if test x"$with_ads_support" != x"no"; then
3391
3392   # Do no harm to the values of CFLAGS and LIBS while testing for
3393   # Kerberos support.
3394
3395   if test x$FOUND_KRB5 = x"no"; then
3396     #################################################
3397     # check for location of Kerberos 5 install
3398     AC_MSG_CHECKING(for kerberos 5 install path)
3399     AC_ARG_WITH(krb5,
3400     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3401     [ case "$withval" in
3402       no)
3403         AC_MSG_RESULT(no krb5-path given)
3404         ;;
3405       yes)
3406         AC_MSG_RESULT(/usr)
3407         FOUND_KRB5=yes
3408         ;;
3409       *)
3410         AC_MSG_RESULT($withval)
3411         KRB5_CFLAGS="-I$withval/include"
3412         KRB5_CPPFLAGS="-I$withval/include"
3413         KRB5_LDFLAGS="-L$withval/lib"
3414         FOUND_KRB5=yes
3415         if test -x "$withval/bin/krb5-config"; then
3416                 KRB5CONFIG=$withval/bin/krb5-config
3417         fi
3418         ;;
3419       esac ],
3420       AC_MSG_RESULT(no krb5-path given)
3421     )
3422   fi
3423
3424   #################################################
3425   # check for krb5-config from recent MIT and Heimdal kerberos 5
3426   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3427   AC_MSG_CHECKING(for working krb5-config)
3428   if test -x "$KRB5CONFIG"; then
3429     ac_save_CFLAGS=$CFLAGS
3430     CFLAGS="";export CFLAGS
3431     ac_save_LDFLAGS=$LDFLAGS
3432     LDFLAGS="";export LDFLAGS
3433     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3434     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3435     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3436     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3437     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3438     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3439     FOUND_KRB5=yes
3440     AC_MSG_RESULT(yes)
3441   else
3442     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3443   fi
3444
3445   if test x$FOUND_KRB5 = x"no"; then
3446     #################################################
3447     # see if this box has the SuSE location for the heimdal krb implementation
3448     AC_MSG_CHECKING(for /usr/include/heimdal)
3449     if test -d /usr/include/heimdal; then
3450       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3451           KRB5_CFLAGS="-I/usr/include/heimdal"
3452           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3453           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3454           FOUND_KRB5=yes
3455           AC_MSG_RESULT(yes)
3456       else
3457           KRB5_CFLAGS="-I/usr/include/heimdal"
3458           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3459           FOUND_KRB5=yes
3460           AC_MSG_RESULT(yes)
3461       fi
3462     else
3463       AC_MSG_RESULT(no)
3464     fi
3465   fi
3466
3467   if test x$FOUND_KRB5 = x"no"; then
3468     #################################################
3469     # see if this box has the RedHat location for kerberos
3470     AC_MSG_CHECKING(for /usr/kerberos)
3471     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3472       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3473       KRB5_CFLAGS="-I/usr/kerberos/include"
3474       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3475       FOUND_KRB5=yes
3476       AC_MSG_RESULT(yes)
3477     else
3478       AC_MSG_RESULT(no)
3479     fi
3480   fi
3481
3482   if test x$FOUND_KRB5 = x"no"; then
3483     #################################################
3484     # see if this box has the OpenBSD location for heimdal krb5
3485     AC_MSG_CHECKING(for /usr/include/kerberosV)
3486     if test -d /usr/include/kerberosV; then
3487       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3488       KRB5_LIBS="-lcrypto"
3489       FOUND_KRB5=yes
3490       AC_MSG_RESULT(yes)
3491     else
3492       AC_MSG_RESULT(no)
3493     fi
3494   fi
3495
3496   ac_save_CFLAGS=$CFLAGS
3497   ac_save_CPPFLAGS=$CPPFLAGS
3498   ac_save_LDFLAGS=$LDFLAGS
3499
3500   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3501   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3502   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3503
3504   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3505
3506   # now check for krb5.h. Some systems have the libraries without the headers!
3507   # note that this check is done here to allow for different kerberos
3508   # include paths
3509   AC_CHECK_HEADERS(krb5.h)
3510
3511   if test x"$ac_cv_header_krb5_h" = x"no"; then
3512
3513     # Give a warning if AD support was not explicitly requested,
3514     # i.e with_ads_support = auto, otherwise die with an error.
3515
3516     if test x"$with_ads_support" = x"yes"; then
3517       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3518     else
3519       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3520     fi
3521
3522     # Turn off AD support and restore CFLAGS and LIBS variables
3523
3524     with_ads_support="no"
3525
3526     CFLAGS=$ac_save_CFLAGS
3527     CPPFLAGS=$ac_save_CPPFLAGS
3528     LDFLAGS=$ac_save_LDFLAGS
3529   fi
3530   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3531   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
3532         WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
3533         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
3534   fi
3535 fi
3536
3537 # Now we have determined whether we really want ADS support
3538 use_ads=no
3539 if test x"$with_ads_support" != x"no"; then
3540   use_ads=yes
3541   have_gssapi=no
3542   ac_save_LIBS=$LIBS
3543
3544   # now check for gssapi headers.  This is also done here to allow for
3545   # different kerberos include paths
3546   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3547
3548   ##################################################################
3549   # we might need the k5crypto and com_err libraries on some systems
3550   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3551   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3552
3553   # Heimdal checks.
3554   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3555   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3556   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3557
3558   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3559   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3560
3561   ########################################################
3562   # now see if we can find the krb5 libs in standard paths
3563   # or as specified above
3564   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3565   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3566
3567   ########################################################
3568   # now see if we can find the gssapi libs in standard paths
3569   if test x"$have_gssapi" != x"yes"; then
3570      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3571   fi
3572
3573   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3574   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3575   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3576   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3577   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3578   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3579   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3580   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3581   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3582   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3583   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3584   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3585   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3586   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3587   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3588   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3589   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3590   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3591   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3592   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3593   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3594   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3595   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3596   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3597   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3598   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3599   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3600   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3601   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3602   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3603   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3604   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3605   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3606   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3607   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3608   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3609   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3610   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3611   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3612   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3613   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3614   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3615   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3616
3617   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3618   # but does have the symbol
3619   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3620
3621   LIBS="$KRB5_LIBS $LIBS"
3622
3623   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3624         smb_krb5_cv_ticket_has_keyinfo,
3625         [
3626             AC_TRY_COMPILE(
3627             [
3628                 #include <krb5.h>
3629             ],
3630             [
3631                 krb5_ticket ticket;
3632                 krb5_kvno kvno;
3633                 krb5_enctype enctype;
3634
3635                 enctype = ticket.enc_part.enctype;
3636                 kvno = ticket.enc_part.kvno;
3637             ],
3638             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3639             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3640         ])
3641
3642   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3643         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3644             [Whether the krb5_ticket structure contains the kvno and enctype])
3645   fi
3646
3647   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3648           smb_krb5_cv_creds_opt_free_context,
3649           [
3650                 AC_TRY_COMPILE([
3651                     #include <krb5.h>],
3652                     [
3653                         krb5_context ctx;
3654                         krb5_get_init_creds_opt *opt = NULL;
3655                         krb5_get_init_creds_opt_free(ctx, opt);
3656                     ],
3657                     [smb_krb5_cv_creds_opt_free_context=yes],
3658                     [smb_krb5_cv_creds_opt_free_context=no]
3659                 )
3660           ])
3661
3662   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3663         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3664             [Whether krb5_get_init_creds_opt_free takes a context argument])
3665   fi
3666
3667   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3668     AC_TRY_COMPILE([
3669         #include <krb5.h>],
3670         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3671         [smb_krb5_cv_verify_checksum=7],
3672         [smb_krb5_cv_verify_checksum=6],
3673     )
3674   ])
3675   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3676
3677   AC_CACHE_CHECK([for checksum in krb5_checksum],
3678                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3679     AC_TRY_COMPILE([#include <krb5.h>],
3680       [krb5_checksum cksum; cksum.checksum.length = 0;],
3681       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3682       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3683
3684   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3685     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3686                [Whether the krb5_checksum struct has a checksum property])
3687   fi
3688
3689   AC_CACHE_CHECK([for etype in EncryptedData],
3690                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3691     AC_TRY_COMPILE([#include <krb5.h>],
3692       [EncryptedData edata; edata.etype = 0;],
3693       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3694       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3695
3696   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3697     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3698                [Whether the EncryptedData struct has a etype property])
3699   fi
3700
3701   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3702                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3703     AC_TRY_COMPILE([#include <krb5.h>],
3704       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3705       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3706       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3707
3708   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3709     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3710                [Whether the krb5_ap_req struct has a ticket pointer])
3711   fi
3712
3713   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3714                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3715     AC_TRY_COMPILE([#include <krb5.h>],
3716       [krb5_error err; err.e_data = NULL;],
3717       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3718       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3719
3720   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3721     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3722                [Whether the krb5_error struct has a e_data pointer])
3723   fi
3724
3725   AC_CACHE_CHECK([for krb5_crypto type],
3726                 samba_cv_HAVE_KRB5_CRYPTO,[
3727     AC_TRY_COMPILE([#include <krb5.h>],
3728       [krb5_crypto crypto;],
3729       samba_cv_HAVE_KRB5_CRYPTO=yes,
3730       samba_cv_HAVE_KRB5_CRYPTO=no)])
3731
3732   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3733     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3734                [Whether the type krb5_crypto exists])
3735   fi
3736
3737   AC_CACHE_CHECK([for krb5_encrypt_block type],
3738                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3739     AC_TRY_COMPILE([#include <krb5.h>],
3740       [krb5_encrypt_block block;],
3741       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3742       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3743
3744   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3745     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3746                [Whether the type krb5_encrypt_block exists])
3747   fi
3748
3749   AC_CACHE_CHECK([for addrtype in krb5_address],
3750                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3751     AC_TRY_COMPILE([#include <krb5.h>],
3752       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3753       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3754       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3755
3756   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3757     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3758                [Whether the krb5_address struct has a addrtype property])
3759   fi
3760
3761   AC_CACHE_CHECK([for addr_type in krb5_address],
3762                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3763     AC_TRY_COMPILE([#include <krb5.h>],
3764       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3765       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3766       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3767
3768   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3769     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3770               [Whether the krb5_address struct has a addr_type property])
3771   fi
3772
3773   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3774                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3775                  [AC_TRY_COMPILE([#include <krb5.h>],
3776     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3777     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3778
3779   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3780     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3781               [Whether the krb5_ticket struct has a enc_part2 property])
3782   fi
3783
3784   AC_CACHE_CHECK([for keyblock in krb5_creds],
3785                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3786     AC_TRY_COMPILE([#include <krb5.h>],
3787       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3788       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3789       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3790
3791   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3792     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3793               [Whether the krb5_creds struct has a keyblock property])
3794   fi
3795
3796   AC_CACHE_CHECK([for session in krb5_creds],
3797                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3798     AC_TRY_COMPILE([#include <krb5.h>],
3799       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3800       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3801       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3802
3803   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3804     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3805               [Whether the krb5_creds struct has a session property])
3806   fi
3807
3808   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3809                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3810     AC_TRY_COMPILE([#include <krb5.h>],
3811       [krb5_keyblock key; key.keyvalue.data = NULL;],
3812       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3813       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3814
3815   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3816     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3817               [Whether the krb5_keyblock struct has a keyvalue property])
3818   fi
3819
3820   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3821                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3822     AC_TRY_COMPILE([#include <krb5.h>],
3823       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3824       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3825       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3826   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3827                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3828     AC_TRY_COMPILE([#include <krb5.h>],
3829       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3830       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3831       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3832 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3833 # w.r.t. arcfour and windows, so we must not enable it here
3834   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3835           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3836     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3837               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3838   fi
3839
3840   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3841                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3842     AC_TRY_COMPILE([#include <krb5.h>],
3843       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3844       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3845       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3846
3847   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3848     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3849               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3850   fi
3851
3852   AC_CACHE_CHECK([for KV5M_KEYTAB],
3853                  samba_cv_HAVE_KV5M_KEYTAB,[
3854     AC_TRY_COMPILE([#include <krb5.h>],
3855       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3856       samba_cv_HAVE_KV5M_KEYTAB=yes,
3857       samba_cv_HAVE_KV5M_KEYTAB=no)])
3858
3859   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3860       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3861              [Whether the KV5M_KEYTAB option is available])
3862   fi
3863
3864   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3865                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3866     AC_TRY_COMPILE([#include <krb5.h>],
3867       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3868       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3869       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3870
3871   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3872     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3873               [Whether KRB5_KU_OTHER_CKSUM is available])
3874   fi
3875
3876   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3877                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3878     AC_TRY_COMPILE([#include <krb5.h>],
3879       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3880       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3881       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3882
3883   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3884     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3885               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3886   fi
3887
3888   AC_CACHE_CHECK([for the krb5_princ_component macro],
3889                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3890     AC_TRY_LINK([#include <krb5.h>],
3891       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3892       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3893       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3894
3895   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3896     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3897                [Whether krb5_princ_component is available])
3898   fi
3899
3900   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3901                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3902     AC_TRY_COMPILE([#include <krb5.h>],
3903       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3904       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3905       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3906
3907   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3908     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3909               [Whether krb5_keytab_entry has key member])
3910   fi
3911
3912   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3913                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3914     AC_TRY_COMPILE([#include <krb5.h>],
3915       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3916       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3917       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3918
3919   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3920     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3921               [Whether krb5_keytab_entry has keyblock member])
3922   fi
3923
3924   AC_CACHE_CHECK([for magic in krb5_address],
3925                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3926     AC_TRY_COMPILE([#include <krb5.h>],
3927       [krb5_address addr; addr.magic = 0;],
3928       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3929       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3930
3931   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3932     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3933               [Whether the krb5_address struct has a magic property])
3934   fi
3935
3936   AC_CACHE_CHECK([for WRFILE: keytab support],
3937                 samba_cv_HAVE_WRFILE_KEYTAB,[
3938     AC_TRY_RUN([
3939 #include<krb5.h>
3940   main()
3941   {
3942     krb5_context context;
3943     krb5_keytab keytab;
3944
3945     krb5_init_context(&context);
3946     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3947   }],
3948   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3949   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3950
3951   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3952       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3953                [Whether the WRFILE:-keytab is supported])
3954   fi
3955
3956   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3957                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3958     AC_TRY_COMPILE([#include <krb5.h>],
3959     [
3960     krb5_context context;
3961     krb5_principal principal;
3962     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3963     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3964     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3965
3966   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3967     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3968               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3969   fi
3970
3971   AC_CACHE_CHECK([for krb5_addresses type],
3972                 samba_cv_HAVE_KRB5_ADDRESSES,[
3973     AC_TRY_COMPILE([#include <krb5.h>],
3974       [krb5_addresses addr;],
3975       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3976       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3977
3978   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3979     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3980                [Whether the type krb5_addresses type exists])
3981   fi
3982
3983   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
3984                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
3985     AC_TRY_COMPILE([#include <krb5.h>],
3986     [
3987     krb5_mk_error(0,0,0);],
3988     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
3989     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
3990
3991   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
3992     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
3993               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
3994   fi
3995
3996   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
3997     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
3998         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
3999         AC_TRY_RUN_STRICT([
4000                 #include <stdlib.h>
4001                 #include <krb5.h>
4002                 int main(void) {
4003                         krb5_context context = NULL;
4004                         char *str = NULL;
4005                         krb5_enctype_to_string(context, 1, &str);
4006                         if (str) free (str); 
4007                         return 0;
4008                 }
4009                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4010                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
4011                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
4012
4013     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4014       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4015                 [whether krb5_enctype_to_string takes krb5_context argument])
4016     fi
4017
4018     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4019         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
4020         AC_TRY_RUN_STRICT([
4021                 #include <krb5.h>
4022                 int main(void) {
4023                         char buf[256];
4024                         krb5_enctype_to_string(1, buf, 256);
4025                         return 0;
4026                 }
4027                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4028                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
4029                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
4030
4031     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
4032       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4033                 [whether krb5_enctype_to_string takes size_t argument])
4034     fi
4035   fi
4036
4037   AC_CACHE_CHECK([for krb5_principal_get_realm],
4038                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4039     AC_TRY_LINK([#include <krb5.h>],
4040       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4041       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4042       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4043
4044   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4045     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4046                [Whether the function krb5_principal_get_realm is defined])
4047   fi
4048
4049   AC_CACHE_CHECK([for krb5_princ_realm],
4050                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4051     AC_TRY_LINK([#include <krb5.h>],
4052       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
4053       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
4054       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
4055
4056   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
4057     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
4058                [Whether the macro krb5_princ_realm is defined])
4059   fi
4060
4061   #
4062   #
4063   # Now the decisions whether we can support krb5
4064   #
4065   # NOTE: all tests should be done before this block!
4066   #
4067   #
4068   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4069     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4070     use_ads=no
4071   fi
4072
4073   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
4074           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
4075   then
4076     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4077     use_ads=no
4078   fi
4079
4080   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4081           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4082   then
4083     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4084     use_ads=no
4085   fi
4086
4087   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4088           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4089   then
4090     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4091     use_ads=no
4092   fi
4093
4094   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
4095           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
4096   then
4097     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
4098     use_ads=no
4099   fi
4100
4101   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
4102
4103       # We only need the following functions if we can't get the enctype
4104       # and kvno out of the ticket directly (ie. on Heimdal).
4105
4106       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
4107       then
4108         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
4109         use_ads=no
4110       fi
4111
4112       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
4113       then
4114         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
4115         use_ads=no
4116       fi
4117
4118   fi
4119
4120   if test x"$use_ads" = x"yes"; then
4121     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4122     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4123     if test x"$have_gssapi" = x"yes"; then
4124       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
4125     fi
4126   else
4127     if test x"$with_ads_support" = x"yes"; then
4128         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4129     else
4130         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4131     fi
4132     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4133     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4134     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4135     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4136     KRB5_LIBS=""
4137     with_ads_support=no
4138   fi
4139   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4140   AC_MSG_RESULT([$use_ads])
4141
4142 LIBS="$ac_save_LIBS"
4143 fi
4144
4145 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4146 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4147
4148
4149 ########################################################
4150 # Compile with DNS Updates support?
4151
4152 with_dnsupdate_support=no
4153 AC_MSG_CHECKING([whether to enable DNS Updates support])
4154
4155 AC_ARG_WITH(dnsupdate,
4156 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default no)])],
4157 [ case "$withval" in
4158     yes|no)
4159         with_dnsupdate_support=$withval
4160         ;;
4161   esac ])
4162
4163 AC_MSG_RESULT($with_dnsupdate_support)
4164
4165 if test x"$with_dnsupdate_support" != x"no"; then
4166
4167   ################################################################
4168   # first test for Active Directory support being enabled
4169   #if test x"$with_ads_support" = x"no"; then
4170   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
4171   #             with_dnsupdate_support=no
4172   #fi           
4173   ##################################################################
4174   # then test for uuid.h (necessary to generate unique DNS keynames
4175   # (uuid.h is required for this test)
4176   AC_CHECK_HEADERS(uuid/uuid.h)
4177
4178   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4179         if test x"$with_dnsupdate_support" = x"yes"; then
4180          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4181         else
4182          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4183         fi
4184         with_dnsupdate_support=no
4185   fi
4186 fi
4187
4188 if test x"$with_dnsupdate_support" != x"no"; then
4189
4190   ########################################################
4191   # Now see if we can find the uuid libs in standard paths
4192   # On some systems, the uuid API is in libc, so we have to
4193   # be careful not to insert a spurious -luuid.
4194
4195   UUID_LIBS=""
4196   AC_LIBTESTFUNC(uuid, uuid_generate,
4197           [
4198             case " $LIBS " in
4199                 *\ -luuid\ *)
4200                 UUID_LIBS="-luuid"
4201                 SMB_REMOVE_LIB(uuid)
4202                 ;;
4203             esac
4204
4205             with_dnsupdate_support=yes
4206             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4207         ],
4208         [
4209             if test x"$with_dnsupdate_support" = x"yes"; then
4210                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4211             else
4212                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4213             fi
4214             with_dnsupdate_support=no
4215         ])
4216 fi
4217
4218 #################################################
4219 # check for automount support
4220 AC_MSG_CHECKING(whether to use automount)
4221 AC_ARG_WITH(automount,
4222 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4223 [ case "$withval" in
4224   yes)
4225     AC_MSG_RESULT(yes)
4226     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4227     ;;
4228   *)
4229     AC_MSG_RESULT(no)
4230     ;;
4231   esac ],
4232   AC_MSG_RESULT(no)
4233 )
4234
4235 #################################################
4236 # check for mount- and umount.cifs support
4237 CIFSMOUNT_PROGS=""
4238 INSTALL_CIFSMOUNT=""
4239 UNINSTALL_CIFSMOUNT=""
4240 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4241 AC_ARG_WITH(cifsmount,
4242 [AS_HELP_STRING([--with-cifsmount], [Include mount.cifs and umount.cifs (Linux only) support (default=yes)])],
4243 [ case "$withval" in
4244   no)
4245         AC_MSG_RESULT(no)
4246         ;;
4247   *)
4248         case "$host_os" in
4249         *linux*)
4250                 AC_MSG_RESULT(yes)
4251                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4252                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4253                 INSTALL_CIFSMOUNT="installcifsmount"
4254                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4255                 ;;
4256         *)
4257                 AC_MSG_ERROR(not on a linux system!)
4258                 ;;
4259         esac
4260     ;;
4261   esac ],
4262 [ case "$host_os" in
4263   *linux*)
4264         AC_MSG_RESULT(yes)
4265         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4266         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4267         INSTALL_CIFSMOUNT="installcifsmount"
4268         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4269         ;;
4270   *)
4271         AC_MSG_RESULT(no)
4272         ;;
4273   esac ]
4274 )
4275
4276 #################################################
4277 # check for cifs.upcall support
4278 AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
4279 CIFSUPCALL_PROGS=""
4280 INSTALL_CIFSUPCALL=""
4281 UNINSTALL_CIFSUPCALL=""
4282 AC_MSG_CHECKING(whether to build cifs.upcall)
4283 AC_ARG_WITH(cifsupcall,
4284 [AS_HELP_STRING([--with-cifsupcall], [Include cifs.upcall (Linux only) support (default=yes)])],
4285 [ case "$withval" in
4286   no)
4287         AC_MSG_RESULT(no)
4288         ;;
4289   *)
4290         case "$host_os" in
4291         *linux*)
4292                 if test x"$use_ads" != x"yes"; then
4293                         AC_MSG_ERROR(ADS support should be enabled for building cifs.upcall)
4294                 elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4295                         AC_MSG_ERROR(keyutils package is required for cifs.upcall)
4296                 else
4297                         AC_MSG_RESULT(yes)
4298                         AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4299                         CIFSUPCALL_PROGS="bin/cifs.upcall"
4300                         INSTALL_CIFSUPCALL="installcifsupcall"
4301                         UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4302                 fi
4303                 ;;
4304         *)
4305                 AC_MSG_ERROR(not on a linux system!)
4306                 ;;
4307         esac
4308     ;;
4309   esac ],
4310 [ case "$host_os" in
4311   *linux*)
4312         if test x"$use_ads" != x"yes"; then
4313                 AC_MSG_WARN(ADS support should be enabled for building cifs.upcall)
4314         elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4315                 AC_MSG_WARN(keyutils package is required for cifs.upcall)
4316         else
4317                 AC_MSG_RESULT(yes)
4318                 AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4319                 CIFSUPCALL_PROGS="bin/cifs.upcall"
4320                 INSTALL_CIFSUPCALL="installcifsupcall"
4321                 UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4322         fi
4323         ;;
4324   *)
4325         AC_MSG_RESULT(no)
4326         ;;
4327   esac ]
4328 )
4329
4330
4331 #################################################
4332 # Check for a PAM clear-text auth, accounts, password
4333 # and session support. Most PAM implementations keep their
4334 # headers in /usr/include/security. Darwin keeps its in
4335 # /usr/include/pam.
4336
4337 with_pam_for_crypt=no
4338 try_pam=no
4339 AC_MSG_CHECKING(whether to try PAM support)
4340 AC_ARG_WITH(pam,
4341 [AS_HELP_STRING([--with-pam], [Include PAM support (default=no)])],
4342 [ case "$withval" in
4343   yes|no)
4344     try_pam=$withval
4345     ;;
4346   esac
4347 ])
4348 AC_MSG_RESULT([$try_pam])
4349
4350 use_pam=no
4351 create_pam_modules=no
4352 if test x"${try_pam}" != x"no";then
4353         use_pam=yes
4354         create_pam_modules=yes
4355
4356         # Most systems have PAM headers in /usr/include/security, but Darwin
4357         # has them in /usr/include/pam.
4358         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4359         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4360                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4361                 if test x"${try_pam}" = x"yes";then
4362                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4363                 fi
4364                 use_pam=no
4365                 create_pam_modules=no
4366         fi
4367
4368         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4369         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4370                 if test x"${try_pam}" = x"yes";then
4371                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4372                 fi
4373                 use_pam=no
4374                 create_pam_modules=no
4375         fi
4376
4377         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4378                 #if HAVE_SECURITY_PAM_APPL_H
4379                 #include <security/pam_appl.h>
4380                 #endif
4381                 #if HAVE_PAM_PAM_APPL_H
4382                 #include <pam/pam_appl.h>
4383                 #endif
4384         ]])
4385         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4386                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4387                 if test x"${try_pam}" = x"yes";then
4388                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4389        fi
4390                 create_pam_modules=no
4391     fi
4392
4393         if test x"$use_pam" = x"yes"; then
4394     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4395                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4396                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4397     with_pam_for_crypt=yes
4398
4399                 if test x"$create_pam_modules" = x"yes"; then
4400                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4401                         # this checks are optional,
4402                         # we don't care about the results here
4403                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4404                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4405                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4406                 else
4407                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4408                 fi
4409         fi
4410         AC_MSG_CHECKING(whether to use PAM support)
4411         AC_MSG_RESULT([$use_pam])
4412
4413         AC_MSG_CHECKING(whether to have PAM MODULES support)
4414         AC_MSG_RESULT([$create_pam_modules])
4415 fi # try_pam != no
4416
4417 #################################################
4418 # check for pam_smbpass support
4419 PAM_MODULES=""
4420 INSTALL_PAM_MODULES=""
4421 UNINSTALL_PAM_MODULES=""
4422 AC_MSG_CHECKING(whether to use pam_smbpass)
4423 AC_ARG_WITH(pam_smbpass,
4424 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=no)])],
4425 [ case "$withval" in
4426   yes)
4427     AC_MSG_RESULT(yes)
4428
4429        # Conditions under which pam_smbpass should not be built.
4430
4431        if test x"$BLDSHARED" != x"true"; then
4432           AC_MSG_ERROR([No support for shared modules])
4433        elif test x"$create_pam_modules" != x"yes"; then
4434           AC_MSG_ERROR([No support for PAM MODULES])
4435        else
4436           PAM_MODULES="pam_smbpass"
4437           INSTALL_PAM_MODULES="installpammodules"
4438           UNINSTALL_PAM_MODULES="uninstallpammodules"
4439        fi
4440     ;;
4441   *)
4442     AC_MSG_RESULT(no)
4443     ;;
4444   esac ],
4445   AC_MSG_RESULT(no)
4446 )
4447
4448
4449 ###############################################
4450 # test for where we get crypt() from
4451 AC_SEARCH_LIBS(crypt, [crypt],
4452   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
4453   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
4454
4455 ##
4456 ## moved after the check for -lcrypt in order to
4457 ## ensure that the necessary libraries are included
4458 ## check checking for truncated salt.  Wrapped by the
4459 ## $with_pam_for_crypt variable as above   --jerry
4460 ##
4461 if test $with_pam_for_crypt = no; then
4462 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4463 crypt_LIBS="$LIBS"
4464 LIBS="$AUTH_LIBS $LIBS"
4465 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
4466         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4467 LIBS="$crypt_LIBS"])
4468 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4469         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4470 fi
4471 fi
4472
4473 #################################################
4474 # check for a NISPLUS_HOME support
4475 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4476 AC_ARG_WITH(nisplus-home,
4477 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4478 [ case "$withval" in
4479   yes)
4480     AC_MSG_RESULT(yes)
4481     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4482     ;;
4483   *)
4484     AC_MSG_RESULT(no)
4485     ;;
4486   esac ],
4487   AC_MSG_RESULT(no)
4488 )
4489
4490 #################################################
4491 # check for syslog logging
4492 AC_MSG_CHECKING(whether to use syslog logging)
4493 AC_ARG_WITH(syslog,
4494 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4495 [ case "$withval" in
4496   yes)
4497     AC_MSG_RESULT(yes)
4498     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4499     ;;
4500   *)
4501     AC_MSG_RESULT(no)
4502     ;;
4503   esac ],
4504   AC_MSG_RESULT(no)
4505 )
4506
4507 #################################################
4508 # check for custom syslog facility
4509 AC_MSG_CHECKING(whether to use a custom syslog facility)
4510 AC_ARG_WITH(syslog-facility,
4511 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4512 [
4513   if test "$withval" = "no" ; then
4514     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4515   else
4516      if test "$withval" != "yes" ; then
4517         syslog_facility="$withval"
4518         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4519      fi
4520   fi
4521 ])
4522
4523 #################################################
4524 # check for experimental disk-quotas support
4525
4526 samba_cv_WITH_QUOTAS=auto
4527 samba_cv_TRY_QUOTAS=no
4528 samba_cv_RUN_QUOTA_TESTS=auto
4529 samba_cv_WITH_SYS_QUOTAS=auto
4530 samba_cv_TRY_SYS_QUOTAS=auto
4531 samba_cv_SYSQUOTA_FOUND=no
4532
4533 AC_MSG_CHECKING(whether to try disk-quotas support)
4534 AC_ARG_WITH(quotas,
4535 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4536 [ case "$withval" in
4537   yes)
4538     AC_MSG_RESULT(yes)
4539     samba_cv_WITH_QUOTAS=yes
4540     samba_cv_TRY_QUOTAS=yes
4541     samba_cv_RUN_QUOTA_TESTS=yes
4542     #set sys quotas to auto in this case
4543     samba_cv_TRY_SYS_QUOTAS=auto
4544     ;;
4545   auto)
4546     AC_MSG_RESULT(auto)
4547     samba_cv_WITH_QUOTAS=auto
4548     samba_cv_TRY_QUOTAS=auto
4549     samba_cv_RUN_QUOTA_TESTS=auto
4550     #set sys quotas to auto in this case
4551     samba_cv_TRY_SYS_QUOTAS=auto
4552     ;;
4553   no)
4554     AC_MSG_RESULT(no)
4555     samba_cv_WITH_QUOTAS=no
4556     samba_cv_TRY_QUOTAS=no
4557     samba_cv_RUN_QUOTA_TESTS=no
4558     ;;
4559   *)
4560     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4561     ;;
4562   esac ],
4563   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4564 )
4565
4566 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4567 AC_ARG_WITH(sys-quotas,
4568 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4569 [ case "$withval" in
4570   yes)
4571     AC_MSG_RESULT(yes)
4572     samba_cv_WITH_SYS_QUOTAS=yes
4573     samba_cv_TRY_SYS_QUOTAS=yes
4574     samba_cv_RUN_QUOTA_TESTS=yes
4575     ;;
4576   auto)
4577     AC_MSG_RESULT(auto)
4578     samba_cv_WITH_SYS_QUOTAS=auto
4579     samba_cv_TRY_SYS_QUOTAS=auto
4580     samba_cv_RUN_QUOTA_TESTS=auto
4581     ;;
4582   no)
4583     AC_MSG_RESULT(no)
4584     samba_cv_WITH_SYS_QUOTAS=no
4585     samba_cv_TRY_SYS_QUOTAS=no
4586     ;;
4587   *)
4588     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4589     ;;
4590   esac ],
4591   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4592 )
4593
4594 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4595 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4596   case "$host_os" in
4597         *linux*)
4598             AC_MSG_RESULT(yes)
4599             samba_cv_TRY_SYS_QUOTAS=yes
4600             samba_cv_RUN_QUOTA_TESTS=yes
4601             ;;
4602         *)
4603             AC_MSG_RESULT(no)
4604             samba_cv_TRY_SYS_QUOTAS=no
4605             ;;
4606   esac
4607 fi
4608
4609 #############################################
4610 # only check for quota stuff if --with-quotas
4611 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4612
4613 case "$host_os" in
4614         # on linux we didn't need to test we have builtin support
4615         *linux*)
4616             samba_cv_SYSQUOTA_FOUND=yes
4617             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4618             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4619             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4620             AC_MSG_RESULT(yes)
4621
4622             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4623             samba_cv_found_xfs_header=yes
4624             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4625             AC_MSG_RESULT(yes)
4626             ;;
4627         *solaris*)
4628             # need to set this define when using static linking (BUG 1473)
4629             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4630             ;;
4631         *)
4632             ;;
4633 esac
4634
4635 # some broken header files need this
4636 AC_CHECK_HEADER(asm/types.h,[
4637             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4638             AC_ADD_INCLUDE(<asm/types.h>)
4639             ])
4640
4641 # For quotas on Veritas VxFS filesystems
4642 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4643
4644 # For quotas on Linux XFS filesystems
4645 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4646
4647 # For sys/quota.h and linux/quota.h
4648 AC_CHECK_HEADERS(sys/quota.h)
4649
4650 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4651 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4652 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4653 AC_TRY_COMPILE([
4654 #include "confdefs.h"
4655 #ifdef HAVE_SYS_TYPES_H
4656 #include <sys/types.h>
4657 #endif
4658 #ifdef HAVE_ASM_TYPES_H
4659 #include <asm/types.h>
4660 #endif
4661 #include <sys/quota.h>
4662 ],[int i = Q_XGETQUOTA;],
4663 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4664 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4665         samba_cv_found_xfs_header=yes
4666 fi
4667 fi
4668
4669 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4670 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4671 AC_TRY_COMPILE([
4672 #include "confdefs.h"
4673 #ifdef HAVE_SYS_QUOTA_H
4674 #include <sys/quota.h>
4675 #endif
4676 ],[
4677 struct dqblk D;
4678 D.dqb_fsoftlimit = 0;],
4679 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4680 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4681         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4682 fi
4683
4684 ##################
4685 # look for a working quota system
4686
4687 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4688 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4689 AC_TRY_RUN_STRICT([
4690 #define HAVE_QUOTACTL_4A 1
4691 #define AUTOCONF_TEST 1
4692 #include "confdefs.h"
4693 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4694            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4695 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4696     samba_cv_SYSQUOTA_FOUND=yes;
4697     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4698     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4699 fi
4700 fi
4701
4702 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4703 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4704 AC_TRY_RUN_STRICT([
4705 #define HAVE_QUOTACTL_4B 1
4706 #define AUTOCONF_TEST 1
4707 #include "confdefs.h"
4708 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4709            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4710 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4711     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4712     samba_cv_SYSQUOTA_FOUND=yes;
4713     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4714     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4715 fi
4716 fi
4717
4718 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4719 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4720 AC_TRY_RUN_STRICT([
4721 #define HAVE_QUOTACTL_3 1
4722 #define AUTOCONF_TEST 1
4723 #include "confdefs.h"
4724 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4725            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4726 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4727     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4728     samba_cv_SYSQUOTA_FOUND=yes;
4729     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4730     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4731 fi
4732 fi
4733
4734 #################################################
4735 # check for mntent.h and struct mntent
4736 AC_CHECK_HEADERS(mntent.h)
4737 #################################################
4738 # check for setmntent,getmntent,endmntent
4739 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4740
4741 #################################################
4742 # check for devnm.h and struct mntent
4743 AC_CHECK_HEADERS(devnm.h)
4744 #################################################
4745 # check for devnm
4746 AC_CHECK_FUNCS(devnm)
4747
4748 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4749     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4750         # if --with-sys-quotas=yes then build it
4751         # you have can use the get/set quota command smb.conf
4752         # options then
4753         samba_cv_SYSQUOTA_FOUND=auto
4754     fi
4755     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4756         # if --with-sys-quotas=yes then build it
4757         # you have can use the get/set quota command smb.conf
4758         # options then
4759         samba_cv_TRY_SYS_QUOTAS=auto
4760     fi
4761 fi
4762
4763 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4764 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4765 SAVE_CPPFLAGS="$CPPFLAGS"
4766 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4767 AC_TRY_COMPILE([
4768 #include "confdefs.h"
4769 #define NO_PROTO_H 1
4770 #define NO_CONFIG_H 1
4771 #define HAVE_SYS_QUOTAS 1
4772 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4773 #include "${srcdir-.}/lib/sysquotas.c"
4774 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4775 CPPFLAGS="$SAVE_CPPFLAGS"
4776 ])
4777 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4778 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4779     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4780         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4781         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4782         samba_cv_WE_USE_SYS_QUOTAS=yes
4783         AC_MSG_RESULT(yes)
4784     else
4785         AC_MSG_RESULT(no)
4786     fi
4787 fi
4788 fi
4789
4790 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4791 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4792 SAVE_CPPFLAGS="$CPPFLAGS"
4793 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4794 AC_TRY_COMPILE([
4795 #include "confdefs.h"
4796 #define NO_PROTO_H 1
4797 #define NO_CONFIG_H 1
4798 #define HAVE_SYS_QUOTAS 1
4799 #define HAVE_XFS_QUOTAS 1
4800 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4801 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4802 CPPFLAGS="$SAVE_CPPFLAGS"
4803 ])
4804 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4805     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4806         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4807     fi
4808 fi
4809 fi
4810
4811 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4812 SAVE_CPPFLAGS="$CPPFLAGS"
4813 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4814 AC_TRY_COMPILE([
4815 #include "confdefs.h"
4816 #define NO_PROTO_H 1
4817 #define NO_CONFIG_H 1
4818 #include "${srcdir-.}/smbd/quotas.c"
4819 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4820 CPPFLAGS="$SAVE_CPPFLAGS"
4821 ])
4822 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4823 AC_MSG_CHECKING(whether to use the old quota support)
4824     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4825       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4826         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4827         AC_MSG_RESULT(yes)
4828       else
4829         AC_MSG_RESULT(no)
4830       fi
4831     else
4832       AC_MSG_RESULT(no)
4833     fi
4834 fi
4835
4836 ####################
4837 # End of quota check samba_cv_RUN_QUOTA_TESTS
4838 fi
4839
4840 #################################################
4841 # check for experimental utmp accounting
4842
4843 AC_MSG_CHECKING(whether to support utmp accounting)
4844 WITH_UTMP=yes
4845 AC_ARG_WITH(utmp,
4846 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
4847 [ case "$withval" in
4848   no)
4849                 WITH_UTMP=no
4850                 ;;
4851   *)
4852                 WITH_UTMP=yes
4853                 ;;
4854   esac ],
4855 )
4856
4857 # utmp requires utmp.h
4858 # Note similar check earlier, when checking utmp details.
4859
4860 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4861         utmp_no_reason=", no utmp.h on $host_os"
4862         WITH_UTMP=no
4863 fi
4864
4865 # Display test results
4866
4867 if test x"$WITH_UTMP" = x"yes"; then
4868         AC_MSG_RESULT(yes)
4869         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4870 else
4871         AC_MSG_RESULT(no$utmp_no_reason)
4872 fi
4873
4874 INSTALLLIBCMD_SH=:
4875 INSTALLLIBCMD_A=:
4876 UNINSTALLLIBCMD_SH=:
4877 UNINSTALLLIBCMD_A=:
4878
4879 if test $BLDSHARED = true; then
4880         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
4881         UNINSTALLLIBCMD_SH="rm -f"
4882 fi
4883 if test $enable_static = yes; then
4884         INSTALLLIBCMD_A="\$(INSTALLCMD)"
4885         UNINSTALLLIBCMD_A="rm -f"
4886 fi
4887
4888 #################################################
4889 # --disable-shared-libs
4890 # can be used to disable the internal use of shared libs altogether
4891 # (this only has an effect when building shared libs is enabled)
4892 #
4893 USESHARED=false
4894 AC_SUBST(USESHARED)
4895
4896 AC_MSG_CHECKING(whether to use shared libraries internally)
4897 AC_ARG_ENABLE([shared-libs],
4898         AS_HELP_STRING([--enable-shared-libs],
4899                 [Use shared libraries internally (default=yes)]),
4900         [enable_shared_libs=$enableval],
4901         [enable_shared_libs=yes])
4902
4903 if test x"$enable_shared_libs" != x"no" ; then
4904         USESHARED=$BLDSHARED
4905 fi
4906
4907 AC_MSG_RESULT([$USESHARED])
4908
4909 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
4910         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
4911 fi
4912
4913 #################################################
4914 # --with-static-libs=LIBS:
4915 #   link (internal) libs dynamically or statically?
4916 #
4917 # If a subsystem is built as a library then this controls whether they are
4918 # linked into Samba targets statically or dynamically:
4919 #
4920 # * If we build the shared library at all, we link dynamically by default.
4921 #
4922 # * We only link statically if we don't build shared or if the library
4923 #   appears in the --with-static-libs configure option.
4924 #
4925 # Example:
4926 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
4927 #   of linking the dynamic variant with -ltalloc.
4928 #
4929 # NOTE: This option only affects libraries that we do not only build
4930 # but that samba also links against as libraries (as opposed to linking
4931 # the plain object files. - This has to be configured in Makefile.in.
4932 # So in particular it does not harm to give invalid or unknown names here.
4933 #
4934
4935 AC_ARG_WITH([static-libs],
4936         [AS_HELP_STRING([--with-static-libs=LIBS],
4937                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
4938         [AS_IF([test $withval],
4939                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
4940                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
4941                         eval LINK_$lib=STATIC
4942                 done], [])],
4943         [])
4944
4945 #
4946 # WORKAROUND:
4947 #   until we have organized other internal subsystems (as util, registry
4948 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
4949 #   dynamically to samba programs.
4950 #
4951 LINK_LIBNETAPI=STATIC
4952
4953 LINK_LIBSMBCLIENT=STATIC
4954
4955 #
4956 #  The library versions are hardcoded here
4957 #  and filled into the LIBFOO_SOVER variable.
4958 #
4959 #  TODO: for talloc and tdb (at least), these should
4960 #  be extracted from their respective source directories
4961 #
4962 SMB_LIBRARY(talloc, 1)
4963 SMB_LIBRARY(tdb, 1)
4964 SMB_LIBRARY(netapi, 0)
4965 SMB_LIBRARY(smbclient, 0)
4966 SMB_LIBRARY(smbsharemodes, 0)
4967 SMB_LIBRARY(addns, 0, no, [undefined API])
4968
4969
4970
4971 #################################################
4972 # these tests are taken from the GNU fileutils package
4973 AC_CHECKING(how to get filesystem space usage)
4974 space=no
4975
4976 # Test for statvfs64.
4977 if test $space = no; then
4978   # SVR4
4979   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
4980   [AC_TRY_RUN([
4981 #if defined(HAVE_UNISTD_H)
4982 #include <unistd.h>
4983 #endif
4984 #include <sys/types.h>
4985 #include <sys/statvfs.h>
4986   main ()
4987   {
4988     struct statvfs64 fsd;
4989     exit (statvfs64 (".", &fsd));
4990   }],
4991   fu_cv_sys_stat_statvfs64=yes,
4992   fu_cv_sys_stat_statvfs64=no,
4993   fu_cv_sys_stat_statvfs64=cross)])
4994   if test $fu_cv_sys_stat_statvfs64 = yes; then
4995     space=yes
4996     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
4997   fi
4998 fi
4999
5000 # Perform only the link test since it seems there are no variants of the
5001 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
5002 # because that got a false positive on SCO OSR5.  Adding the declaration
5003 # of a `struct statvfs' causes this test to fail (as it should) on such
5004 # systems.  That system is reported to work fine with STAT_STATFS4 which
5005 # is what it gets when this test fails.
5006 if test $space = no; then
5007   # SVR4
5008   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
5009                  [AC_TRY_LINK([#include <sys/types.h>
5010 #include <sys/statvfs.h>],
5011                               [struct statvfs fsd; statvfs (0, &fsd);],
5012                               fu_cv_sys_stat_statvfs=yes,
5013                               fu_cv_sys_stat_statvfs=no)])
5014   if test $fu_cv_sys_stat_statvfs = yes; then
5015     space=yes
5016     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
5017   fi
5018 fi
5019
5020 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
5021 # This is not the case on ancient Linux systems.
5022
5023 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
5024     AC_TRY_COMPILE([#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
5025         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
5026 if test x"$samba_cv_fsid_int" = x"yes"; then
5027     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
5028 fi
5029
5030 if test $space = no; then
5031   # DEC Alpha running OSF/1
5032   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
5033   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
5034   [AC_TRY_RUN([
5035 #include <sys/param.h>
5036 #include <sys/types.h>
5037 #include <sys/mount.h>
5038   main ()
5039   {
5040     struct statfs fsd;
5041     fsd.f_fsize = 0;
5042     exit (statfs (".", &fsd, sizeof (struct statfs)));
5043   }],
5044   fu_cv_sys_stat_statfs3_osf1=yes,
5045   fu_cv_sys_stat_statfs3_osf1=no,
5046   fu_cv_sys_stat_statfs3_osf1=no)])
5047   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5048   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5049     space=yes
5050     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5051   fi
5052 fi
5053
5054 if test $space = no; then
5055 # AIX
5056   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5057 member (AIX, 4.3BSD)])
5058   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5059   [AC_TRY_RUN([
5060 #ifdef HAVE_SYS_PARAM_H
5061 #include <sys/param.h>
5062 #endif
5063 #ifdef HAVE_SYS_MOUNT_H
5064 #include <sys/mount.h>
5065 #endif
5066 #ifdef HAVE_SYS_VFS_H
5067 #include <sys/vfs.h>
5068 #endif
5069   main ()
5070   {
5071   struct statfs fsd;
5072   fsd.f_bsize = 0;
5073   exit (statfs (".", &fsd));
5074   }],
5075   fu_cv_sys_stat_statfs2_bsize=yes,
5076   fu_cv_sys_stat_statfs2_bsize=no,
5077   fu_cv_sys_stat_statfs2_bsize=no)])
5078   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5079   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5080     space=yes
5081     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5082   fi
5083 fi
5084
5085 if test $space = no; then
5086 # SVR3
5087   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5088   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5089   [AC_TRY_RUN([#include <sys/types.h>
5090 #include <sys/statfs.h>
5091   main ()
5092   {
5093   struct statfs fsd;
5094   exit (statfs (".", &fsd, sizeof fsd, 0));
5095   }],
5096     fu_cv_sys_stat_statfs4=yes,
5097     fu_cv_sys_stat_statfs4=no,
5098     fu_cv_sys_stat_statfs4=no)])
5099   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5100   if test $fu_cv_sys_stat_statfs4 = yes; then
5101     space=yes
5102     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5103   fi
5104 fi
5105
5106 if test $space = no; then
5107 # 4.4BSD and NetBSD
5108   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5109 member (4.4BSD and NetBSD)])
5110   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5111   [AC_TRY_RUN([#include <sys/types.h>
5112 #ifdef HAVE_SYS_PARAM_H
5113 #include <sys/param.h>
5114 #endif
5115 #ifdef HAVE_SYS_MOUNT_H
5116 #include <sys/mount.h>
5117 #endif
5118   main ()
5119   {
5120   struct statfs fsd;
5121   fsd.f_fsize = 0;
5122   exit (statfs (".", &fsd));
5123   }],
5124   fu_cv_sys_stat_statfs2_fsize=yes,
5125   fu_cv_sys_stat_statfs2_fsize=no,
5126   fu_cv_sys_stat_statfs2_fsize=no)])
5127   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5128   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5129     space=yes
5130         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5131   fi
5132 fi
5133
5134 if test $space = no; then
5135   # Ultrix
5136   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5137   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5138   [AC_TRY_RUN([#include <sys/types.h>
5139 #ifdef HAVE_SYS_PARAM_H
5140 #include <sys/param.h>
5141 #endif
5142 #ifdef HAVE_SYS_MOUNT_H
5143 #include <sys/mount.h>
5144 #endif
5145 #ifdef HAVE_SYS_FS_TYPES_H
5146 #include <sys/fs_types.h>
5147 #endif
5148   main ()
5149   {
5150   struct fs_data fsd;
5151   /* Ultrix's statfs returns 1 for success,
5152      0 for not mounted, -1 for failure.  */
5153   exit (statfs (".", &fsd) != 1);
5154   }],
5155   fu_cv_sys_stat_fs_data=yes,
5156   fu_cv_sys_stat_fs_data=no,
5157   fu_cv_sys_stat_fs_data=no)])
5158   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5159   if test $fu_cv_sys_stat_fs_data = yes; then
5160     space=yes
5161     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5162   fi
5163 fi
5164
5165 #
5166 # As a gating factor for large file support, in order to
5167 # use <4GB files we must have the following minimal support
5168 # available.
5169 # long long, and a 64 bit off_t or off64_t.
5170 # If we don't have all of these then disable large
5171 # file support.
5172 #
5173 AC_MSG_CHECKING([if large file support can be enabled])
5174 AC_TRY_COMPILE([
5175 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5176 #include <sys/types.h>
5177 #else
5178 __COMPILE_ERROR_
5179 #endif
5180 ],
5181 [int i],
5182 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5183 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5184         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5185 fi
5186 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5187
5188 #################################################
5189 # check for cluster extensions
5190
5191 CTDB_CFLAGS=""
5192 AC_SUBST(CTDB_CFLAGS)
5193 AC_ARG_WITH(ctdb,
5194 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
5195 [ case "$withval" in
5196   yes|no)
5197     AC_MSG_WARN([--with-ctdb called without argument])
5198     ;;
5199   *)
5200     CTDB_CPPFLAGS="-I$withval/include"
5201     ;;
5202   esac])
5203
5204 SAVED_CPPFLAGS="$CPPFLAGS"
5205 CPPFLAGS="$CPPFLAGS $CTDB_CPPFLAGS"
5206 ctdb_broken="missing or broken headers"
5207
5208 AC_CHECK_HEADERS(ctdb.h ctdb_private.h,,,[
5209 #include "confdefs.h"
5210 #define NO_CONFIG_H
5211 #include "replace.h"
5212 #include "system/wait.h"
5213 #include "system/network.h"
5214 #define private #error __USED_RESERVED_WORD_private__
5215 #include <talloc.h>
5216 #include <tdb.h>
5217 #include <ctdb.h>
5218 ])
5219
5220 AC_HAVE_DECL(CTDB_CONTROL_TRANS2_COMMIT_RETRY,[
5221 #include "confdefs.h"
5222 #define NO_CONFIG_H
5223 #include "replace.h"
5224 #include "system/wait.h"
5225 #include "system/network.h"
5226 #include <talloc.h>
5227 #include <tdb.h>
5228 #include <ctdb.h>
5229 #include <ctdb_private.h>
5230 ])
5231 if test x"$ac_cv_have_CTDB_CONTROL_TRANS2_COMMIT_RETRY_decl" = x"yes"; then
5232         ctdb_broken=no
5233 else
5234         ctdb_broken="missing transaction support"
5235 fi
5236
5237 # in ctdb 1.0.57 ctdb_control_tcp was temparary renamed to ctdb_tcp_client
5238 AC_CHECK_TYPE(struct ctdb_tcp_client,[
5239         AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
5240 ],,[
5241 #include "confdefs.h"
5242 #define NO_CONFIG_H
5243 #include "replace.h"
5244 #include "system/wait.h"
5245 #include "system/network.h"
5246 #include <talloc.h>
5247 #include <tdb.h>
5248 #include <ctdb.h>
5249 #include <ctdb_private.h>
5250 ])
5251
5252 AC_CHECK_TYPE(struct ctdb_control_tcp,[
5253         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5254 ],[
5255         ctdb_broken="missing struct ctdb_control_tcp"
5256 ],[
5257 #include "confdefs.h"
5258 #define NO_CONFIG_H
5259 #include "replace.h"
5260 #include "system/wait.h"
5261 #include "system/network.h"
5262 #include <talloc.h>
5263 #include <tdb.h>
5264 #include <ctdb.h>
5265 #include <ctdb_private.h>
5266 ])
5267
5268 AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5269         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5270 ],,[
5271 #include "confdefs.h"
5272 #define NO_CONFIG_H
5273 #include "replace.h"
5274 #include "system/wait.h"
5275 #include "system/network.h"
5276 #include <talloc.h>
5277 #include <tdb.h>
5278 #include <ctdb.h>
5279 #include <ctdb_private.h>
5280 ])
5281 CPPFLAGS="$SAVED_CPPFLAGS"
5282
5283 AC_MSG_CHECKING(cluster support)
5284 AC_ARG_WITH(cluster-support,
5285 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
5286
5287 if test x"$with_cluster_support" = x ; then
5288         with_cluster_support="auto"
5289 fi
5290
5291 if test x"$ac_cv_header_ctdb_private_h" != x"yes"; then
5292         if test "x$with_cluster_support" = "xyes"; then
5293                 AC_MSG_ERROR("ctdb_private.h is required for cluster support")
5294         fi
5295         with_cluster_support=no
5296 fi
5297
5298 if test x"$ctdb_broken" != x"no"; then
5299         if test "x$with_cluster_support" = "xyes"; then
5300                 AC_MSG_ERROR(["cluster support: $ctdb_broken"])
5301         fi
5302         with_cluster_support=no
5303 fi
5304
5305 if test "x$with_cluster_support" != "xno"; then
5306     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5307     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5308     AC_MSG_RESULT(yes)
5309 else
5310     AC_MSG_RESULT(no)
5311 fi
5312
5313 #################################################
5314 # check for ACL support
5315
5316 AC_MSG_CHECKING(whether to support ACLs)
5317 AC_ARG_WITH(acl-support,
5318 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5319 [ case "$withval" in
5320         yes|no)
5321                 with_acl_support="$withval"
5322                 ;;
5323   esac ])
5324
5325 if test x"$with_acl_support" = x ; then
5326         with_acl_support="auto"
5327 fi
5328
5329 AC_MSG_RESULT($with_acl_support)
5330
5331 if test x"$with_acl_support" = x"no"; then
5332         AC_MSG_RESULT(Disabling ACL support)
5333         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5334 else
5335         AC_MSG_NOTICE(checking whether ACL support is available:)
5336         case "$host_os" in
5337         *sysv5*)
5338                 AC_MSG_NOTICE(Using UnixWare ACLs)
5339                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5340                 default_static_modules="$default_static_modules vfs_solarisacl"
5341                 ;;
5342         *solaris*)
5343                 AC_MSG_NOTICE(Using solaris ACLs)
5344                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5345                 ACL_LIBS="$ACL_LIBS -lsec"
5346                 default_static_modules="$default_static_modules vfs_solarisacl"
5347                 ;;
5348         *hpux*)
5349                 AC_MSG_NOTICE(Using HPUX ACLs)
5350                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5351                 default_static_modules="$default_static_modules vfs_hpuxacl"
5352                 ;;
5353         *irix*)
5354                 AC_MSG_NOTICE(Using IRIX ACLs)
5355                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5356                 default_static_modules="$default_static_modules vfs_irixacl"
5357                 ;;
5358         *aix*)
5359                 AC_MSG_NOTICE(Using AIX ACLs)
5360                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5361                 default_static_modules="$default_static_modules vfs_aixacl"
5362                 ;;
5363         *osf*)
5364                 AC_MSG_NOTICE(Using Tru64 ACLs)
5365                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5366                 ACL_LIBS="$ACL_LIBS -lpacl"
5367                 default_static_modules="$default_static_modules vfs_tru64acl"
5368                 ;;
5369         *darwin*)
5370                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5371                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5372                 ;;
5373         *)
5374                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5375                 case "$host_os" in
5376                 *linux*)
5377                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5378                         ;;
5379                 esac
5380                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5381                         acl_LIBS=$LIBS
5382                         LIBS="$LIBS $ACL_LIBS"
5383                         AC_TRY_LINK([
5384                                 #include <sys/types.h>
5385                                 #include <sys/acl.h>
5386                         ],[
5387                                 acl_t acl;
5388                                 int entry_id;
5389                                 acl_entry_t *entry_p;
5390                                 return acl_get_entry(acl, entry_id, entry_p);
5391                         ],
5392                         [samba_cv_HAVE_POSIX_ACLS=yes],
5393                         [samba_cv_HAVE_POSIX_ACLS=no])
5394                         LIBS=$acl_LIBS
5395                 ])
5396                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5397                         AC_MSG_NOTICE(Using posix ACLs)
5398                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5399                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5400                                 acl_LIBS=$LIBS
5401                                 LIBS="$LIBS $ACL_LIBS"
5402                                 AC_TRY_LINK([
5403                                         #include <sys/types.h>
5404                                         #include <sys/acl.h>
5405                                 ],[
5406                                         acl_permset_t permset_d;
5407                                         acl_perm_t perm;
5408                                         return acl_get_perm_np(permset_d, perm);
5409                                 ],
5410                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5411                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5412                                 LIBS=$acl_LIBS
5413                         ])
5414                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5415                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5416                         fi
5417                         default_static_modules="$default_static_modules vfs_posixacl"
5418                 else
5419                         AC_MSG_NOTICE(ACL support is not avaliable)
5420                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5421                 fi
5422                 ;;
5423         esac
5424 fi # with_acl_support
5425
5426
5427
5428 #################################################
5429 # check for AIO support
5430
5431 AC_MSG_CHECKING(whether to support asynchronous io)
5432 AC_ARG_WITH(aio-support,
5433 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5434 [ case "$withval" in
5435   yes)
5436
5437         AC_MSG_RESULT(yes)
5438         case "$host_os" in
5439         *)
5440                 AIO_LIBS=$LIBS
5441                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5442                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5443                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5444                 aio_LIBS=$LIBS
5445                 LIBS=$AIO_LIBS
5446                 AC_TRY_LINK([#include <sys/types.h>
5447 #include <aio.h>],
5448 [ struct aiocb a; return aio_read(&a);],
5449 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5450                 LIBS=$aio_LIBS])
5451                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5452                 aio_LIBS=$LIBS
5453                 LIBS=$AIO_LIBS
5454                 AC_TRY_LINK([#include <sys/types.h>
5455 #include <aio.h>],
5456 [ struct aiocb64 a; return aio_read64(&a);],
5457 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5458                 LIBS=$aio_LIBS])
5459                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5460                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5461                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5462                         LIBS=$AIO_LIBS
5463                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5464                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5465                         LIBS=$AIO_LIBS
5466                 fi
5467
5468                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5469                         AC_MSG_CHECKING(for aio_read)
5470                         AC_LINK_IFELSE([#include <aio.h>
5471 int main() { struct aiocb a; return aio_read(&a); }],
5472 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5473 [AC_MSG_RESULT(no)])
5474
5475                         AC_MSG_CHECKING(for aio_write)
5476                         AC_LINK_IFELSE([#include <aio.h>
5477 int main() { struct aiocb a; return aio_write(&a); }],
5478 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5479 [AC_MSG_RESULT(no)])
5480
5481                         AC_MSG_CHECKING(for aio_fsync)
5482                         AC_LINK_IFELSE([#include <aio.h>
5483 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5484 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5485 [AC_MSG_RESULT(no)])
5486
5487                         AC_MSG_CHECKING(for aio_return)
5488                         AC_LINK_IFELSE([#include <aio.h>
5489 int main() { struct aiocb a; return aio_return(&a); }],
5490 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5491 [AC_MSG_RESULT(no)])
5492
5493                         AC_MSG_CHECKING(for aio_error)
5494                         AC_LINK_IFELSE([#include <aio.h>
5495 int main() { struct aiocb a; return aio_error(&a); }],
5496 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5497 [AC_MSG_RESULT(no)])
5498
5499                         AC_MSG_CHECKING(for aio_cancel)
5500                         AC_LINK_IFELSE([#include <aio.h>
5501 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5502 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5503 [AC_MSG_RESULT(no)])
5504
5505                         AC_MSG_CHECKING(for aio_suspend)
5506                         AC_LINK_IFELSE([#include <aio.h>
5507 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5508 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5509 [AC_MSG_RESULT(no)])
5510                 fi
5511
5512                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5513                         AC_MSG_CHECKING(for aio_read64)
5514                         AC_LINK_IFELSE([#include <aio.h>
5515 int main() { struct aiocb a; return aio_read64(&a); }],
5516 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5517 [AC_MSG_RESULT(no)])
5518
5519                         AC_MSG_CHECKING(for aio_write64)
5520                         AC_LINK_IFELSE([#include <aio.h>
5521 int main() { struct aiocb a; return aio_write64(&a); }],
5522 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5523 [AC_MSG_RESULT(no)])
5524
5525                         AC_MSG_CHECKING(for aio_fsync64)
5526                         AC_LINK_IFELSE([#include <aio.h>
5527 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5528 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5529 [AC_MSG_RESULT(no)])
5530
5531                         AC_MSG_CHECKING(for aio_return64)
5532                         AC_LINK_IFELSE([#include <aio.h>
5533 int main() { struct aiocb a; return aio_return64(&a); }],
5534 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5535 [AC_MSG_RESULT(no)])
5536
5537                         AC_MSG_CHECKING(for aio_error64)
5538                         AC_LINK_IFELSE([#include <aio.h>
5539 int main() { struct aiocb a; return aio_error64(&a); }],
5540 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5541 [AC_MSG_RESULT(no)])
5542
5543                         AC_MSG_CHECKING(for aio_cancel64)
5544                         AC_LINK_IFELSE([#include <aio.h>
5545 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5546 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5547 [AC_MSG_RESULT(no)])
5548
5549                         AC_MSG_CHECKING(for aio_suspend64)
5550                         AC_LINK_IFELSE([#include <aio.h>
5551 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5552 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5553 [AC_MSG_RESULT(no)])
5554                 fi
5555             ;;
5556         esac
5557         ;;
5558   *)
5559     AC_MSG_RESULT(no)
5560     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5561     ;;
5562   esac ],
5563   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5564   AC_MSG_RESULT(no)
5565 )
5566
5567 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5568         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5569                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5570                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5571         fi
5572 fi
5573
5574 #################################################
5575 # check for sendfile support
5576
5577 with_sendfile_support=yes
5578 AC_MSG_CHECKING(whether to check to support sendfile)
5579 AC_ARG_WITH(sendfile-support,
5580 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5581 [ case "$withval" in
5582   yes)
5583
5584         AC_MSG_RESULT(yes);
5585
5586         case "$host_os" in
5587         *linux*)
5588                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5589                 AC_TRY_LINK([#include <sys/sendfile.h>],
5590 [\
5591 int tofd, fromfd;
5592 off64_t offset;
5593 size_t total;
5594 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5595 ],
5596 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5597
5598                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5599                 AC_TRY_LINK([#include <sys/sendfile.h>],
5600 [\
5601 int tofd, fromfd;
5602 off_t offset;
5603 size_t total;
5604 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5605 ],
5606 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5607
5608 # Try and cope with broken Linux sendfile....
5609                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5610                 AC_TRY_LINK([\
5611 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5612 #undef _FILE_OFFSET_BITS
5613 #endif
5614 #include <sys/sendfile.h>],
5615 [\
5616 int tofd, fromfd;
5617 off_t offset;
5618 size_t total;
5619 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5620 ],
5621 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5622
5623         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5624                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5625                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5626                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5627         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5628                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5629                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5630                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5631         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5632                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5633                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5634         else
5635                 AC_MSG_RESULT(no);
5636         fi
5637
5638         ;;
5639         *freebsd* | *dragonfly* )
5640                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5641                 AC_TRY_LINK([\
5642 #include <sys/types.h>
5643 #include <unistd.h>
5644 #include <sys/socket.h>
5645 #include <sys/uio.h>],
5646 [\
5647         int fromfd, tofd, ret, total=0;
5648         off_t offset, nwritten;
5649         struct sf_hdtr hdr;
5650         struct iovec hdtrl;
5651         hdr.headers = &hdtrl;
5652         hdr.hdr_cnt = 1;
5653         hdr.trailers = NULL;
5654         hdr.trl_cnt = 0;
5655         hdtrl.iov_base = NULL;
5656         hdtrl.iov_len = 0;
5657         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5658 ],
5659 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5660
5661         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5662                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5663                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5664                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5665         else
5666                 AC_MSG_RESULT(no);
5667         fi
5668         ;;
5669
5670         *hpux*)
5671                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5672                 AC_TRY_LINK([\
5673 #include <sys/socket.h>
5674 #include <sys/uio.h>],
5675 [\
5676         int fromfd, tofd;
5677         size_t total=0;
5678         struct iovec hdtrl[2];
5679         ssize_t nwritten;
5680         off64_t offset;
5681
5682         hdtrl[0].iov_base = 0;
5683         hdtrl[0].iov_len = 0;
5684
5685         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5686 ],
5687 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5688         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5689                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5690                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5691                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5692         else
5693                 AC_MSG_RESULT(no);
5694         fi
5695
5696                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5697                 AC_TRY_LINK([\
5698 #include <sys/socket.h>
5699 #include <sys/uio.h>],
5700 [\
5701         int fromfd, tofd;
5702         size_t total=0;
5703         struct iovec hdtrl[2];
5704         ssize_t nwritten;
5705         off_t offset;
5706
5707         hdtrl[0].iov_base = 0;
5708         hdtrl[0].iov_len = 0;
5709
5710         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5711 ],
5712 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5713         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5714                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5715                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5716                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5717         else
5718                 AC_MSG_RESULT(no);
5719         fi
5720         ;;
5721
5722         *solaris*)
5723                 AC_CHECK_LIB(sendfile,sendfilev)
5724                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5725                 AC_TRY_LINK([\
5726 #include <sys/sendfile.h>],
5727 [\
5728         int sfvcnt;
5729         size_t xferred;
5730         struct sendfilevec vec[2];
5731         ssize_t nwritten;
5732         int tofd;
5733
5734         sfvcnt = 2;
5735
5736         vec[0].sfv_fd = SFV_FD_SELF;
5737         vec[0].sfv_flag = 0;
5738         vec[0].sfv_off = 0;
5739         vec[0].sfv_len = 0;
5740
5741         vec[1].sfv_fd = 0;
5742         vec[1].sfv_flag = 0;
5743         vec[1].sfv_off = 0;
5744         vec[1].sfv_len = 0;
5745         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5746 ],
5747 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5748
5749         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5750                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5751                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5752                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5753         else
5754                 AC_MSG_RESULT(no);
5755         fi
5756
5757                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5758                 AC_TRY_LINK([\
5759 #include <sys/sendfile.h>],
5760 [\
5761         int sfvcnt;
5762         size_t xferred;
5763         struct sendfilevec vec[2];
5764         ssize_t nwritten;
5765         int tofd;
5766
5767         sfvcnt = 2;
5768
5769         vec[0].sfv_fd = SFV_FD_SELF;
5770         vec[0].sfv_flag = 0;
5771         vec[0].sfv_off = 0;
5772         vec[0].sfv_len = 0;
5773
5774         vec[1].sfv_fd = 0;
5775         vec[1].sfv_flag = 0;
5776         vec[1].sfv_off = 0;
5777         vec[1].sfv_len = 0;
5778         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5779 ],
5780 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5781
5782         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5783                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5784                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5785                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5786         else
5787                 AC_MSG_RESULT(no);
5788         fi
5789         ;;
5790         *aix*)
5791                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5792                 AC_TRY_LINK([\
5793 #include <sys/socket.h>],
5794 [\
5795         int fromfd, tofd;
5796         size_t total=0;
5797         struct sf_parms hdtrl;
5798         ssize_t nwritten;
5799         off64_t offset;
5800
5801         hdtrl.header_data = 0;
5802         hdtrl.header_length = 0;
5803         hdtrl.file_descriptor = fromfd;
5804         hdtrl.file_offset = 0;
5805         hdtrl.file_bytes = 0;
5806         hdtrl.trailer_data = 0;
5807         hdtrl.trailer_length = 0;
5808
5809         nwritten = send_file(&tofd, &hdtrl, 0);
5810 ],
5811 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5812         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5813                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5814                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5815                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5816         else
5817                 AC_MSG_RESULT(no);
5818         fi
5819         ;;
5820         *)
5821         ;;
5822         esac
5823         ;;
5824   *)
5825     AC_MSG_RESULT(no)
5826     ;;
5827   esac ],
5828   AC_MSG_RESULT(yes)
5829 )
5830
5831 ############################################
5832 # See if we have the Linux readahead syscall.
5833
5834 AC_CACHE_CHECK([for Linux readahead],
5835                 samba_cv_HAVE_LINUX_READAHEAD,[
5836     AC_TRY_LINK([
5837 #if defined(HAVE_UNISTD_H)
5838 #include <unistd.h>
5839 #endif
5840 #include <fcntl.h>],
5841     [ssize_t err = readahead(0,0,0x80000);],
5842     samba_cv_HAVE_LINUX_READAHEAD=yes,
5843     samba_cv_HAVE_LINUX_READAHEAD=no)])
5844
5845 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5846   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5847              [Whether Linux readahead is available])
5848 fi
5849
5850 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
5851
5852 ############################################
5853 # See if we have the posix_fadvise syscall.
5854
5855 AC_CACHE_CHECK([for posix_fadvise],
5856                 samba_cv_HAVE_POSIX_FADVISE,[
5857     AC_TRY_LINK([
5858 #if defined(HAVE_UNISTD_H)
5859 #include <unistd.h>
5860 #endif
5861 #include <fcntl.h>],
5862     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5863     samba_cv_HAVE_POSIX_FADVISE=yes,
5864     samba_cv_HAVE_POSIX_FADVISE=no)])
5865
5866 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5867   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5868              [Whether posix_fadvise is available])
5869 fi
5870
5871 ############################################
5872 # See if we have the Linux splice syscall.
5873
5874 AC_CACHE_CHECK([for Linux splice],
5875                 samba_cv_HAVE_LINUX_SPLICE,[
5876     AC_TRY_LINK([
5877 #if defined(HAVE_UNISTD_H)
5878 #include <unistd.h>
5879 #endif
5880 #include <fcntl.h>],
5881     [long ret = splice(0,0,1,0,400,0);],
5882     samba_cv_HAVE_LINUX_SPLICE=yes,
5883     samba_cv_HAVE_LINUX_SPLICE=no)])
5884
5885 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
5886   AC_DEFINE(HAVE_LINUX_SPLICE,1,
5887              [Whether Linux splice is available])
5888 fi
5889
5890 AC_HAVE_DECL(splice, [#include <fcntl.h>])
5891
5892
5893 #################################################
5894 # Check whether winbind is supported on this platform.  If so we need to
5895 # build and install client programs, sbin programs and shared libraries
5896
5897 AC_MSG_CHECKING(whether to build winbind)
5898
5899 # Initially, the value of $host_os decides whether winbind is supported
5900
5901 HAVE_WINBIND=yes
5902
5903 # Define the winbind shared library name and any specific linker flags
5904 # it needs to be built with.
5905
5906 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
5907 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
5908 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5909 NSSSONAMEVERSIONSUFFIX=""
5910 WINBIND_NSS_PTHREAD=""
5911
5912 case "$host_os" in
5913         *linux*)
5914                 NSSSONAMEVERSIONSUFFIX=".2"
5915                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
5916                 ;;
5917         *freebsd[[5-9]]*)
5918                 # FreeBSD winbind client is implemented as a wrapper around
5919                 # the Linux version.
5920                 NSSSONAMEVERSIONSUFFIX=".1"
5921                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
5922                     nsswitch/winbind_nss_linux.o"
5923                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5924                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5925                 ;;
5926
5927         *netbsd*[[3-9]]*)
5928                 # NetBSD winbind client is implemented as a wrapper
5929                 # around the Linux version. It needs getpwent_r() to
5930                 # indicate libc's use of the correct nsdispatch API.
5931                 #
5932                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5933                         WINBIND_NSS_EXTRA_OBJS="\
5934                             nsswitch/winbind_nss_netbsd.o \
5935                             nsswitch/winbind_nss_linux.o"
5936                         WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5937                         WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5938                 else
5939                         HAVE_WINBIND=no
5940                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5941                 fi
5942                 ;;
5943         *irix*)
5944                 # IRIX has differently named shared libraries
5945                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
5946                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
5947                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
5948                 ;;
5949         *solaris*)
5950                 # Solaris winbind client is implemented as a wrapper around
5951                 # the Linux version.
5952                 NSSSONAMEVERSIONSUFFIX=".1"
5953                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
5954                     nsswitch/winbind_nss_linux.o"
5955                 WINBIND_NSS_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
5956                 PAM_WINBIND_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
5957                 ;;
5958         *hpux11*)
5959                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
5960                 ;;
5961         *aix*)
5962                 # AIX has even differently named shared libraries.  No
5963                 # WINS support has been implemented yet.
5964                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
5965                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5966                 WINBIND_NSS="nsswitch/WINBIND"
5967                 WINBIND_WINS_NSS=""
5968                 ;;
5969         *)
5970                 HAVE_WINBIND=no
5971                 winbind_no_reason=", unsupported on $host_os"
5972                 ;;
5973 esac
5974
5975 # Check the setting of --with-winbind
5976
5977 AC_ARG_WITH(winbind,
5978 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
5979 [
5980   case "$withval" in
5981         yes)
5982                 HAVE_WINBIND=yes
5983                 ;;
5984         no)
5985                 HAVE_WINBIND=no
5986                 winbind_reason=""
5987                 ;;
5988   esac ],
5989 )
5990
5991 # We need unix domain sockets for winbind
5992
5993 if test x"$HAVE_WINBIND" = x"yes"; then
5994         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
5995                 winbind_no_reason=", no unix domain socket support on $host_os"
5996                 HAVE_WINBIND=no
5997         fi
5998 fi
5999
6000 # Display test results
6001
6002 if test x"$HAVE_WINBIND" = x"no"; then
6003         WINBIND_NSS=""
6004         WINBIND_WINS_NSS=""
6005 fi
6006
6007 if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
6008         BUILD_LIBWBCLIENT_SHARED=no
6009 else
6010         BUILD_LIBWBCLIENT_SHARED=yes
6011 fi
6012
6013 LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
6014 LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
6015 LIBWBCLIENT_SOVER=0
6016 if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
6017         NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6018         ## Only worry about libwbclient if we have shared library support
6019         ## and winbindd
6020         LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
6021         LIBWBCLIENT=libwbclient
6022         INSTALL_LIBWBCLIENT=installlibwbclient
6023         UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
6024         WINBIND_LIBS="-lwbclient"
6025 else
6026         LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
6027 fi
6028
6029 if test x"$HAVE_WINBIND" = x"yes"; then
6030         AC_MSG_RESULT(yes)
6031         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6032
6033         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6034         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6035         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6036                 PAM_MODULES="$PAM_MODULES pam_winbind"
6037                 INSTALL_PAM_MODULES="installpammodules"
6038                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6039         fi
6040 else
6041         AC_MSG_RESULT(no$winbind_no_reason)
6042 fi
6043
6044 AC_CHECK_LIB(pthread, pthread_mutex_lock, [WINBIND_NSS_PTHREAD="-lpthread"
6045                         AC_DEFINE(HAVE_PTHREAD, 1, [whether pthread exists])])
6046
6047 AC_SUBST(WINBIND_NSS_PTHREAD)
6048 AC_SUBST(WINBIND_NSS)
6049 AC_SUBST(WINBIND_WINS_NSS)
6050 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
6051 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
6052 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
6053 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
6054 AC_SUBST(PAM_WINBIND_EXTRA_LIBS)
6055
6056 AC_SUBST(WINBIND_KRB5_LOCATOR)
6057
6058 # Solaris 10 does have new member in nss_XbyY_key
6059 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6060                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6061                 [#include <nss_dbdefs.h>])
6062
6063 # Solaris has some extra fields in struct passwd that need to be
6064 # initialised otherwise nscd crashes.
6065
6066 AC_CHECK_MEMBER(struct passwd.pw_comment,
6067                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6068                 [#include <pwd.h>])
6069
6070 AC_CHECK_MEMBER(struct passwd.pw_age,
6071                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6072                 [#include <pwd.h>])
6073
6074 # AIX 4.3.x and 5.1 do not have as many members in
6075 # struct secmethod_table as AIX 5.2
6076 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6077        [#include <usersec.h>])
6078 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6079        [#include <usersec.h>])
6080
6081 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6082 AC_TRY_COMPILE([#include <sys/types.h>
6083 #include <sys/socket.h>],
6084 [struct ucred cred;
6085  socklen_t cred_len;
6086  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6087 ],
6088 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6089 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6090     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6091 fi
6092
6093
6094 #################################################
6095 # Check to see if we should use the included popt
6096
6097 AC_ARG_WITH(included-popt,
6098 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
6099 [
6100   case "$withval" in
6101         yes)
6102                 INCLUDED_POPT=yes
6103                 ;;
6104         no)
6105                 INCLUDED_POPT=no
6106                 ;;
6107   esac ],
6108 )
6109 if test x"$INCLUDED_POPT" != x"yes"; then
6110     AC_CHECK_LIB(popt, poptGetContext,
6111                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6112 fi
6113
6114 AC_MSG_CHECKING(whether to use included popt)
6115 if test x"$INCLUDED_POPT" = x"yes"; then
6116     AC_MSG_RESULT(yes)
6117     BUILD_POPT='$(POPT_OBJ)'
6118     POPTLIBS='$(POPT_OBJ)'
6119     FLAGS1="-I\$(srcdir)/popt"
6120 else
6121     AC_MSG_RESULT(no)
6122         BUILD_POPT=""
6123     POPTLIBS="-lpopt"
6124 fi
6125 AC_SUBST(BUILD_POPT)
6126 AC_SUBST(POPTLIBS)
6127 AC_SUBST(FLAGS1)
6128
6129 #################################################
6130 # Check if user wants DNS service discovery support
6131
6132 AC_ARG_ENABLE(dnssd,
6133 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=auto)])])
6134
6135 AC_SUBST(DNSSD_LIBS)
6136 if test x"$enable_dnssd" != x"no"; then
6137     have_dnssd_support=yes
6138
6139     AC_CHECK_HEADERS(dns_sd.h)
6140     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6141         have_dnssd_support=no
6142     fi
6143
6144     # On Darwin the DNSSD API is in libc, but on other platforms it's
6145     # probably in -ldns_sd
6146     AC_CHECK_FUNCS(DNSServiceRegister)
6147     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6148     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6149             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6150         have_dnssd_support=no
6151     fi
6152
6153     if test x"$have_dnssd_support" = x"yes"; then
6154         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6155                 [Whether to enable DNS service discovery support])
6156     else
6157         if test x"$enable_dnssd" = x"yes"; then
6158             AC_MSG_ERROR(DNS service discovery support not available)
6159         fi
6160     fi
6161
6162 fi
6163
6164 #################################################
6165 # Check to see if we should use the included iniparser
6166
6167 AC_ARG_WITH(included-iniparser,
6168 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6169 [
6170   case "$withval" in
6171         yes)
6172                 INCLUDED_INIPARSER=yes
6173                 ;;
6174         no)
6175                 INCLUDED_INIPARSER=no
6176                 ;;
6177   esac ],
6178 )
6179 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6180     AC_CHECK_LIB(iniparser, iniparser_load,
6181                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6182 fi
6183
6184 AC_MSG_CHECKING(whether to use included iniparser)
6185 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6186     AC_MSG_RESULT(yes)
6187     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6188         INIPARSERLIBS=""
6189     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
6190 else
6191     AC_MSG_RESULT(no)
6192         BUILD_INIPARSER=""
6193     INIPARSERLIBS="-liniparser"
6194 fi
6195 AC_SUBST(BUILD_INIPARSER)
6196 AC_SUBST(INIPARSERLIBS)
6197 AC_SUBST(FLAGS1)
6198
6199
6200
6201 # Checks for the vfs_fileid module
6202 # Start
6203 AC_CHECK_FUNC(getmntent)
6204
6205 AC_CHECK_HEADERS(sys/statfs.h)
6206
6207 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
6208 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6209              AC_TRY_RUN([
6210                 #include <sys/types.h>
6211                 #include <sys/statfs.h>
6212                 int main(void)
6213                 {
6214                         struct statfs fsd;
6215                         fsid_t fsid = fsd.f_fsid;
6216                         return statfs (".", &fsd);
6217                 }],
6218                 vfsfileid_cv_statfs=yes,
6219                 vfsfileid_cv_statfs=no,
6220                 vfsfileid_cv_statfs=cross)
6221 ])
6222 AC_MSG_RESULT($vfsfileid_cv_statfs)
6223
6224 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6225         x"$vfsfileid_cv_statfs" = x"yes"; then
6226         default_shared_modules="$default_shared_modules vfs_fileid"
6227 fi
6228 # End
6229 # Checks for the vfs_fileid module
6230
6231
6232 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6233 do
6234         eval MODULE_DEFAULT_$i=STATIC
6235 done
6236
6237 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6238 do
6239         dnl Fall back to static if we cannot build shared libraries
6240         eval MODULE_DEFAULT_$i=STATIC
6241
6242         if test $BLDSHARED = true; then
6243                 eval MODULE_DEFAULT_$i=SHARED
6244         fi
6245 done
6246
6247 dnl Always build these modules static
6248 MODULE_rpc_spoolss=STATIC
6249 MODULE_rpc_srvsvc=STATIC
6250 MODULE_idmap_tdb=STATIC
6251 MODULE_idmap_passdb=STATIC
6252 MODULE_idmap_nss=STATIC
6253
6254 MODULE_nss_info_template=STATIC
6255
6256 AC_ARG_WITH(static-modules,
6257 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6258 [ if test $withval; then
6259         for i in `echo $withval | sed -e 's/,/ /g'`
6260         do
6261                 eval MODULE_$i=STATIC
6262         done
6263 fi ])
6264
6265 AC_ARG_WITH(shared-modules,
6266 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6267 [ if test $withval; then
6268         for i in `echo $withval | sed -e 's/,/ /g'`
6269         do
6270                         eval MODULE_$i=SHARED
6271         done
6272 fi ])
6273
6274 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
6275                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6276 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6277 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6278 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6279
6280
6281 SMB_MODULE(rpc_lsarpc, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
6282 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
6283 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
6284 SMB_MODULE(rpc_dssetup, \$(RPC_DSSETUP_OBJ), "bin/librpc_dssetup.$SHLIBEXT", RPC)
6285 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6286 SMB_MODULE(rpc_svcctl2, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl2.$SHLIBEXT", RPC)
6287 SMB_MODULE(rpc_ntsvcs2, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs2.$SHLIBEXT", RPC)
6288 SMB_MODULE(rpc_netlogon, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6289 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6290 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc.$SHLIBEXT", RPC)
6291 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6292 SMB_MODULE(rpc_eventlog2, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog2.$SHLIBEXT", RPC)
6293 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6294 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
6295 SMB_SUBSYSTEM(RPC,smbd/server.o)
6296
6297 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6298 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6299 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6300 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6301 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6302 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6303 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6304 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6305
6306 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6307 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6308
6309 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6310 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6311 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6312 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6313 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6314
6315 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6316 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6317 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6318 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6319 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6320 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6321 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6322 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6323
6324 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6325 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6326 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6327 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6328 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6329 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6330 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6331 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6332 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6333 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6334 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6335 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6336 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6337 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6338 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6339 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6340 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6341 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6342 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6343 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6344 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6345 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6346 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6347 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6348 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6349 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6350 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6351 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6352 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6353 SMB_MODULE(vfs_gpfs_prefetch, \$(VFS_GPFS_PREFETCH_OBJ), "bin/gpfs_prefetch.$SHLIBEXT", VFS)
6354 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6355 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6356 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6357 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6358 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6359 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6360 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6361 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6362 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6363
6364
6365 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6366
6367 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6368
6369 #################################################
6370 # do extra things if we are running insure
6371
6372 if test "${ac_cv_prog_CC}" = "insure"; then
6373         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6374 fi
6375
6376 #################################################
6377 # If run from the build farm, enable NASTY hacks
6378 #################################################
6379 AC_MSG_CHECKING(whether to enable build farm hacks)
6380 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6381         AC_MSG_RESULT(yes)
6382         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6383 else
6384         AC_MSG_RESULT(no)
6385 fi
6386
6387 #################################################
6388 # check for bad librt/libpthread interactions
6389
6390 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6391     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6392     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6393     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6394
6395 SMB_IF_RTSIGNAL_BUG(
6396         [
6397             # Have RT_SIGNAL bug, need to check whether the problem will
6398             # affect anything we have configured.
6399
6400             rt_do_error=no
6401             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6402                 if test x"$rt_signal_lease_ok" = x"no" ; then
6403                     rt_do_error=yes
6404                 fi
6405             fi
6406
6407             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6408                 if test x"$rt_signal_notify_ok" = x"no" ; then
6409                     rt_do_error=yes
6410                 fi
6411             fi
6412
6413             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6414                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6415                 if test x"$rt_signal_aio_ok" = x"no" ; then
6416                     rt_do_error=yes
6417                 fi
6418             fi
6419
6420             if test x"$rt_do_error" = x"yes" ; then
6421                 SMB_IS_LIBPTHREAD_LINKED(
6422                     [
6423                         cat<<MSG
6424
6425 *** On this platforms, linking Samba against pthreads causes problems
6426 *** with the oplock and change notification mechanisms. You may be
6427 *** using pthreads as a side-effect of using the --with-aio-support
6428 *** or --with-profiling-data options. Please remove these and try again.
6429
6430 MSG
6431                     ],
6432                     [
6433                         cat<<MSG
6434
6435 *** On this platform, the oplock and change notification mechanisms do not
6436 *** appear to work. Please report this problem to samba-technical@samba.org
6437 *** and attach the config.log file from this directory.
6438
6439 MSG
6440                     ])
6441                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6442             fi
6443         ],
6444         [
6445             # no RT_SIGNAL bug, we are golden
6446             SMB_IS_LIBPTHREAD_LINKED(
6447                 [
6448                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6449                 ])
6450
6451         ],
6452         [
6453             # cross compiling, I hope you know what you are doing
6454             true
6455         ])
6456
6457 fi
6458
6459 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6460 LIB_REMOVE_USR_LIB(LDFLAGS)
6461 LIB_REMOVE_USR_LIB(LIBS)
6462 LIB_REMOVE_USR_LIB(KRB5_LIBS)
6463
6464 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6465 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6466 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6467
6468 #################################################
6469 # Display summary of libraries detected
6470
6471 AC_MSG_RESULT([Using libraries:])
6472 AC_MSG_RESULT([    LIBS = $LIBS])
6473 if test x"$with_ads_support" != x"no"; then
6474     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6475 fi
6476 if test x"$with_ldap_support" != x"no"; then
6477     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6478 fi
6479 if test x"$with_dnsupdate_support" != x"no"; then
6480     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6481 fi
6482 if test x"$have_dnssd_support" != x"no"; then
6483     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6484 fi
6485 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6486
6487 #################################################
6488 # final configure stuff
6489
6490 AC_MSG_CHECKING([configure summary])
6491 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
6492            AC_MSG_RESULT(yes),
6493            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6494            AC_MSG_WARN([cannot run when cross-compiling]))
6495
6496 dnl Merge in developer cflags from now on
6497 AC_SUBST(DEVELOPER_CFLAGS)
6498 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes"; then
6499     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
6500 fi
6501
6502 # Stuff the smbd-only libraries at the end of the smbd link
6503 # path (if we have them).
6504 SMBD_LIBS="$samba_dmapi_libs"
6505 AC_SUBST(SMBD_LIBS)
6506
6507 AC_OUTPUT(Makefile
6508           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
6509           lib/netapi/examples/Makefile
6510           pkgconfig/smbclient.pc
6511           pkgconfig/wbclient.pc
6512           pkgconfig/netapi.pc
6513           pkgconfig/smbsharemodes.pc
6514           )
6515
6516 #################################################
6517 # Print very concise instructions on building/use
6518 if test "x$enable_dmalloc" = xyes
6519 then
6520         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6521         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
6522 fi