configure: Kill linker warnings about 32bit libs on 64bit Linux.
[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   LIBS="$KRB5_LIBS $LIBS"
3618
3619   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3620         smb_krb5_cv_ticket_has_keyinfo,
3621         [
3622             AC_TRY_COMPILE(
3623             [
3624                 #include <krb5.h>
3625             ],
3626             [
3627                 krb5_ticket ticket;
3628                 krb5_kvno kvno;
3629                 krb5_enctype enctype;
3630
3631                 enctype = ticket.enc_part.enctype;
3632                 kvno = ticket.enc_part.kvno;
3633             ],
3634             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3635             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3636         ])
3637
3638   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3639         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3640             [Whether the krb5_ticket structure contains the kvno and enctype])
3641   fi
3642
3643   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3644           smb_krb5_cv_creds_opt_free_context,
3645           [
3646                 AC_TRY_COMPILE([
3647                     #include <krb5.h>],
3648                     [
3649                         krb5_context ctx;
3650                         krb5_get_init_creds_opt *opt = NULL;
3651                         krb5_get_init_creds_opt_free(ctx, opt);
3652                     ],
3653                     [smb_krb5_cv_creds_opt_free_context=yes],
3654                     [smb_krb5_cv_creds_opt_free_context=no]
3655                 )
3656           ])
3657
3658   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3659         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3660             [Whether krb5_get_init_creds_opt_free takes a context argument])
3661   fi
3662
3663   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3664     AC_TRY_COMPILE([
3665         #include <krb5.h>],
3666         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3667         [smb_krb5_cv_verify_checksum=7],
3668         [smb_krb5_cv_verify_checksum=6],
3669     )
3670   ])
3671   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3672
3673   AC_CACHE_CHECK([for checksum in krb5_checksum],
3674                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3675     AC_TRY_COMPILE([#include <krb5.h>],
3676       [krb5_checksum cksum; cksum.checksum.length = 0;],
3677       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3678       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3679
3680   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3681     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3682                [Whether the krb5_checksum struct has a checksum property])
3683   fi
3684
3685   AC_CACHE_CHECK([for etype in EncryptedData],
3686                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3687     AC_TRY_COMPILE([#include <krb5.h>],
3688       [EncryptedData edata; edata.etype = 0;],
3689       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3690       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3691
3692   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3693     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3694                [Whether the EncryptedData struct has a etype property])
3695   fi
3696
3697   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3698                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3699     AC_TRY_COMPILE([#include <krb5.h>],
3700       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3701       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3702       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3703
3704   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3705     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3706                [Whether the krb5_ap_req struct has a ticket pointer])
3707   fi
3708
3709   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3710                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3711     AC_TRY_COMPILE([#include <krb5.h>],
3712       [krb5_error err; err.e_data = NULL;],
3713       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3714       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3715
3716   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3717     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3718                [Whether the krb5_error struct has a e_data pointer])
3719   fi
3720
3721   AC_CACHE_CHECK([for krb5_crypto type],
3722                 samba_cv_HAVE_KRB5_CRYPTO,[
3723     AC_TRY_COMPILE([#include <krb5.h>],
3724       [krb5_crypto crypto;],
3725       samba_cv_HAVE_KRB5_CRYPTO=yes,
3726       samba_cv_HAVE_KRB5_CRYPTO=no)])
3727
3728   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3729     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3730                [Whether the type krb5_crypto exists])
3731   fi
3732
3733   AC_CACHE_CHECK([for krb5_encrypt_block type],
3734                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3735     AC_TRY_COMPILE([#include <krb5.h>],
3736       [krb5_encrypt_block block;],
3737       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3738       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3739
3740   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3741     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3742                [Whether the type krb5_encrypt_block exists])
3743   fi
3744
3745   AC_CACHE_CHECK([for addrtype in krb5_address],
3746                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3747     AC_TRY_COMPILE([#include <krb5.h>],
3748       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3749       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3750       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3751
3752   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3753     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3754                [Whether the krb5_address struct has a addrtype property])
3755   fi
3756
3757   AC_CACHE_CHECK([for addr_type in krb5_address],
3758                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3759     AC_TRY_COMPILE([#include <krb5.h>],
3760       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3761       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3762       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3763
3764   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3765     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3766               [Whether the krb5_address struct has a addr_type property])
3767   fi
3768
3769   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3770                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3771                  [AC_TRY_COMPILE([#include <krb5.h>],
3772     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3773     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3774
3775   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3776     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3777               [Whether the krb5_ticket struct has a enc_part2 property])
3778   fi
3779
3780   AC_CACHE_CHECK([for keyblock in krb5_creds],
3781                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3782     AC_TRY_COMPILE([#include <krb5.h>],
3783       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3784       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3785       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3786
3787   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3788     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3789               [Whether the krb5_creds struct has a keyblock property])
3790   fi
3791
3792   AC_CACHE_CHECK([for session in krb5_creds],
3793                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3794     AC_TRY_COMPILE([#include <krb5.h>],
3795       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3796       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3797       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3798
3799   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3800     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3801               [Whether the krb5_creds struct has a session property])
3802   fi
3803
3804   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3805                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3806     AC_TRY_COMPILE([#include <krb5.h>],
3807       [krb5_keyblock key; key.keyvalue.data = NULL;],
3808       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3809       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3810
3811   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3812     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3813               [Whether the krb5_keyblock struct has a keyvalue property])
3814   fi
3815
3816   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3817                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3818     AC_TRY_COMPILE([#include <krb5.h>],
3819       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3820       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3821       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3822   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3823                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3824     AC_TRY_COMPILE([#include <krb5.h>],
3825       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3826       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3827       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3828 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3829 # w.r.t. arcfour and windows, so we must not enable it here
3830   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3831           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3832     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3833               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3834   fi
3835
3836   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3837                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3838     AC_TRY_COMPILE([#include <krb5.h>],
3839       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3840       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3841       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3842
3843   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3844     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3845               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3846   fi
3847
3848   AC_CACHE_CHECK([for KV5M_KEYTAB],
3849                  samba_cv_HAVE_KV5M_KEYTAB,[
3850     AC_TRY_COMPILE([#include <krb5.h>],
3851       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3852       samba_cv_HAVE_KV5M_KEYTAB=yes,
3853       samba_cv_HAVE_KV5M_KEYTAB=no)])
3854
3855   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3856       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3857              [Whether the KV5M_KEYTAB option is available])
3858   fi
3859
3860   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3861                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3862     AC_TRY_COMPILE([#include <krb5.h>],
3863       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3864       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3865       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3866
3867   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3868     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3869               [Whether KRB5_KU_OTHER_CKSUM is available])
3870   fi
3871
3872   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3873                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3874     AC_TRY_COMPILE([#include <krb5.h>],
3875       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3876       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3877       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3878
3879   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3880     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3881               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3882   fi
3883
3884   AC_CACHE_CHECK([for the krb5_princ_component macro],
3885                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3886     AC_TRY_LINK([#include <krb5.h>],
3887       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3888       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3889       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3890
3891   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3892     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3893                [Whether krb5_princ_component is available])
3894   fi
3895
3896   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3897                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3898     AC_TRY_COMPILE([#include <krb5.h>],
3899       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3900       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3901       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3902
3903   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3904     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3905               [Whether krb5_keytab_entry has key member])
3906   fi
3907
3908   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3909                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3910     AC_TRY_COMPILE([#include <krb5.h>],
3911       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3912       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3913       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3914
3915   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3916     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3917               [Whether krb5_keytab_entry has keyblock member])
3918   fi
3919
3920   AC_CACHE_CHECK([for magic in krb5_address],
3921                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3922     AC_TRY_COMPILE([#include <krb5.h>],
3923       [krb5_address addr; addr.magic = 0;],
3924       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3925       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3926
3927   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3928     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3929               [Whether the krb5_address struct has a magic property])
3930   fi
3931
3932   AC_CACHE_CHECK([for WRFILE: keytab support],
3933                 samba_cv_HAVE_WRFILE_KEYTAB,[
3934     AC_TRY_RUN([
3935 #include<krb5.h>
3936   main()
3937   {
3938     krb5_context context;
3939     krb5_keytab keytab;
3940
3941     krb5_init_context(&context);
3942     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3943   }],
3944   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3945   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3946
3947   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3948       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3949                [Whether the WRFILE:-keytab is supported])
3950   fi
3951
3952   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3953                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3954     AC_TRY_COMPILE([#include <krb5.h>],
3955     [
3956     krb5_context context;
3957     krb5_principal principal;
3958     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3959     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3960     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3961
3962   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3963     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3964               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3965   fi
3966
3967   AC_CACHE_CHECK([for krb5_addresses type],
3968                 samba_cv_HAVE_KRB5_ADDRESSES,[
3969     AC_TRY_COMPILE([#include <krb5.h>],
3970       [krb5_addresses addr;],
3971       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3972       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3973
3974   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3975     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3976                [Whether the type krb5_addresses type exists])
3977   fi
3978
3979   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
3980                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
3981     AC_TRY_COMPILE([#include <krb5.h>],
3982     [
3983     krb5_mk_error(0,0,0);],
3984     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
3985     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
3986
3987   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
3988     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
3989               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
3990   fi
3991
3992   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
3993     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
3994         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
3995         AC_TRY_RUN_STRICT([
3996                 #include <stdlib.h>
3997                 #include <krb5.h>
3998                 int main(void) {
3999                         krb5_context context = NULL;
4000                         char *str = NULL;
4001                         krb5_enctype_to_string(context, 1, &str);
4002                         if (str) free (str); 
4003                         return 0;
4004                 }
4005                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4006                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
4007                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
4008
4009     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4010       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4011                 [whether krb5_enctype_to_string takes krb5_context argument])
4012     fi
4013
4014     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4015         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
4016         AC_TRY_RUN_STRICT([
4017                 #include <krb5.h>
4018                 int main(void) {
4019                         char buf[256];
4020                         krb5_enctype_to_string(1, buf, 256);
4021                         return 0;
4022                 }
4023                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4024                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
4025                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
4026
4027     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
4028       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4029                 [whether krb5_enctype_to_string takes size_t argument])
4030     fi
4031   fi
4032
4033   AC_CACHE_CHECK([for krb5_principal_get_realm],
4034                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4035     AC_TRY_LINK([#include <krb5.h>],
4036       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4037       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4038       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4039
4040   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4041     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4042                [Whether the function krb5_principal_get_realm is defined])
4043   fi
4044
4045   AC_CACHE_CHECK([for krb5_princ_realm],
4046                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4047     AC_TRY_LINK([#include <krb5.h>],
4048       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
4049       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
4050       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
4051
4052   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
4053     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
4054                [Whether the macro krb5_princ_realm is defined])
4055   fi
4056
4057   #
4058   #
4059   # Now the decisions whether we can support krb5
4060   #
4061   # NOTE: all tests should be done before this block!
4062   #
4063   #
4064   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4065     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4066     use_ads=no
4067   fi
4068
4069   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
4070           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
4071   then
4072     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4073     use_ads=no
4074   fi
4075
4076   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4077           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4078   then
4079     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4080     use_ads=no
4081   fi
4082
4083   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4084           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4085   then
4086     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4087     use_ads=no
4088   fi
4089
4090   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
4091           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
4092   then
4093     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
4094     use_ads=no
4095   fi
4096
4097   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
4098
4099       # We only need the following functions if we can't get the enctype
4100       # and kvno out of the ticket directly (ie. on Heimdal).
4101
4102       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
4103       then
4104         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
4105         use_ads=no
4106       fi
4107
4108       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
4109       then
4110         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
4111         use_ads=no
4112       fi
4113
4114   fi
4115
4116   if test x"$use_ads" = x"yes"; then
4117     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4118     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4119     if test x"$have_gssapi" = x"yes"; then
4120       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
4121     fi
4122   else
4123     if test x"$with_ads_support" = x"yes"; then
4124         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4125     else
4126         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4127     fi
4128     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4129     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4130     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4131     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4132     KRB5_LIBS=""
4133     with_ads_support=no
4134   fi
4135   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4136   AC_MSG_RESULT([$use_ads])
4137
4138 LIBS="$ac_save_LIBS"
4139 fi
4140
4141 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4142 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4143
4144
4145 ########################################################
4146 # Compile with DNS Updates support?
4147
4148 with_dnsupdate_support=no
4149 AC_MSG_CHECKING([whether to enable DNS Updates support])
4150
4151 AC_ARG_WITH(dnsupdate,
4152 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default no)])],
4153 [ case "$withval" in
4154     yes|no)
4155         with_dnsupdate_support=$withval
4156         ;;
4157   esac ])
4158
4159 AC_MSG_RESULT($with_dnsupdate_support)
4160
4161 if test x"$with_dnsupdate_support" != x"no"; then
4162
4163   ################################################################
4164   # first test for Active Directory support being enabled
4165   #if test x"$with_ads_support" = x"no"; then
4166   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
4167   #             with_dnsupdate_support=no
4168   #fi           
4169   ##################################################################
4170   # then test for uuid.h (necessary to generate unique DNS keynames
4171   # (uuid.h is required for this test)
4172   AC_CHECK_HEADERS(uuid/uuid.h)
4173
4174   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4175         if test x"$with_dnsupdate_support" = x"yes"; then
4176          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4177         else
4178          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4179         fi
4180         with_dnsupdate_support=no
4181   fi
4182 fi
4183
4184 if test x"$with_dnsupdate_support" != x"no"; then
4185
4186   ########################################################
4187   # Now see if we can find the uuid libs in standard paths
4188   # On some systems, the uuid API is in libc, so we have to
4189   # be careful not to insert a spurious -luuid.
4190
4191   UUID_LIBS=""
4192   AC_LIBTESTFUNC(uuid, uuid_generate,
4193           [
4194             case " $LIBS " in
4195                 *\ -luuid\ *)
4196                 UUID_LIBS="-luuid"
4197                 SMB_REMOVE_LIB(uuid)
4198                 ;;
4199             esac
4200
4201             with_dnsupdate_support=yes
4202             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4203         ],
4204         [
4205             if test x"$with_dnsupdate_support" = x"yes"; then
4206                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4207             else
4208                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4209             fi
4210             with_dnsupdate_support=no
4211         ])
4212 fi
4213
4214 #################################################
4215 # check for automount support
4216 AC_MSG_CHECKING(whether to use automount)
4217 AC_ARG_WITH(automount,
4218 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4219 [ case "$withval" in
4220   yes)
4221     AC_MSG_RESULT(yes)
4222     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4223     ;;
4224   *)
4225     AC_MSG_RESULT(no)
4226     ;;
4227   esac ],
4228   AC_MSG_RESULT(no)
4229 )
4230
4231 #################################################
4232 # check for mount- and umount.cifs support
4233 CIFSMOUNT_PROGS=""
4234 INSTALL_CIFSMOUNT=""
4235 UNINSTALL_CIFSMOUNT=""
4236 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4237 AC_ARG_WITH(cifsmount,
4238 [AS_HELP_STRING([--with-cifsmount], [Include mount.cifs and umount.cifs (Linux only) support (default=yes)])],
4239 [ case "$withval" in
4240   no)
4241         AC_MSG_RESULT(no)
4242         ;;
4243   *)
4244         case "$host_os" in
4245         *linux*)
4246                 AC_MSG_RESULT(yes)
4247                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4248                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4249                 INSTALL_CIFSMOUNT="installcifsmount"
4250                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4251                 ;;
4252         *)
4253                 AC_MSG_ERROR(not on a linux system!)
4254                 ;;
4255         esac
4256     ;;
4257   esac ],
4258 [ case "$host_os" in
4259   *linux*)
4260         AC_MSG_RESULT(yes)
4261         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4262         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4263         INSTALL_CIFSMOUNT="installcifsmount"
4264         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4265         ;;
4266   *)
4267         AC_MSG_RESULT(no)
4268         ;;
4269   esac ]
4270 )
4271
4272 #################################################
4273 # check for cifs.upcall support
4274 AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
4275 CIFSUPCALL_PROGS=""
4276 INSTALL_CIFSUPCALL=""
4277 UNINSTALL_CIFSUPCALL=""
4278 AC_MSG_CHECKING(whether to build cifs.upcall)
4279 AC_ARG_WITH(cifsupcall,
4280 [AS_HELP_STRING([--with-cifsupcall], [Include cifs.upcall (Linux only) support (default=yes)])],
4281 [ case "$withval" in
4282   no)
4283         AC_MSG_RESULT(no)
4284         ;;
4285   *)
4286         case "$host_os" in
4287         *linux*)
4288                 if test x"$use_ads" != x"yes"; then
4289                         AC_MSG_ERROR(ADS support should be enabled for building cifs.upcall)
4290                 elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4291                         AC_MSG_ERROR(keyutils package is required for cifs.upcall)
4292                 else
4293                         AC_MSG_RESULT(yes)
4294                         AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4295                         CIFSUPCALL_PROGS="bin/cifs.upcall"
4296                         INSTALL_CIFSUPCALL="installcifsupcall"
4297                         UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4298                 fi
4299                 ;;
4300         *)
4301                 AC_MSG_ERROR(not on a linux system!)
4302                 ;;
4303         esac
4304     ;;
4305   esac ],
4306 [ case "$host_os" in
4307   *linux*)
4308         if test x"$use_ads" != x"yes"; then
4309                 AC_MSG_WARN(ADS support should be enabled for building cifs.upcall)
4310         elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4311                 AC_MSG_WARN(keyutils package is required for cifs.upcall)
4312         else
4313                 AC_MSG_RESULT(yes)
4314                 AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4315                 CIFSUPCALL_PROGS="bin/cifs.upcall"
4316                 INSTALL_CIFSUPCALL="installcifsupcall"
4317                 UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4318         fi
4319         ;;
4320   *)
4321         AC_MSG_RESULT(no)
4322         ;;
4323   esac ]
4324 )
4325
4326
4327 #################################################
4328 # Check for a PAM clear-text auth, accounts, password
4329 # and session support. Most PAM implementations keep their
4330 # headers in /usr/include/security. Darwin keeps its in
4331 # /usr/include/pam.
4332
4333 with_pam_for_crypt=no
4334 try_pam=no
4335 AC_MSG_CHECKING(whether to try PAM support)
4336 AC_ARG_WITH(pam,
4337 [AS_HELP_STRING([--with-pam], [Include PAM support (default=no)])],
4338 [ case "$withval" in
4339   yes|no)
4340     try_pam=$withval
4341     ;;
4342   esac
4343 ])
4344 AC_MSG_RESULT([$try_pam])
4345
4346 use_pam=no
4347 create_pam_modules=no
4348 if test x"${try_pam}" != x"no";then
4349         use_pam=yes
4350         create_pam_modules=yes
4351
4352         # Most systems have PAM headers in /usr/include/security, but Darwin
4353         # has them in /usr/include/pam.
4354         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4355         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4356                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4357                 if test x"${try_pam}" = x"yes";then
4358                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4359                 fi
4360                 use_pam=no
4361                 create_pam_modules=no
4362         fi
4363
4364         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4365         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4366                 if test x"${try_pam}" = x"yes";then
4367                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4368                 fi
4369                 use_pam=no
4370                 create_pam_modules=no
4371         fi
4372
4373         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4374                 #if HAVE_SECURITY_PAM_APPL_H
4375                 #include <security/pam_appl.h>
4376                 #endif
4377                 #if HAVE_PAM_PAM_APPL_H
4378                 #include <pam/pam_appl.h>
4379                 #endif
4380         ]])
4381         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4382                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4383                 if test x"${try_pam}" = x"yes";then
4384                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4385        fi
4386                 create_pam_modules=no
4387     fi
4388
4389         if test x"$use_pam" = x"yes"; then
4390     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4391                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4392                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4393     with_pam_for_crypt=yes
4394
4395                 if test x"$create_pam_modules" = x"yes"; then
4396                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4397                         # this checks are optional,
4398                         # we don't care about the results here
4399                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4400                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4401                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4402                 else
4403                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4404                 fi
4405         fi
4406         AC_MSG_CHECKING(whether to use PAM support)
4407         AC_MSG_RESULT([$use_pam])
4408
4409         AC_MSG_CHECKING(whether to have PAM MODULES support)
4410         AC_MSG_RESULT([$create_pam_modules])
4411 fi # try_pam != no
4412
4413 #################################################
4414 # check for pam_smbpass support
4415 PAM_MODULES=""
4416 INSTALL_PAM_MODULES=""
4417 UNINSTALL_PAM_MODULES=""
4418 AC_MSG_CHECKING(whether to use pam_smbpass)
4419 AC_ARG_WITH(pam_smbpass,
4420 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=no)])],
4421 [ case "$withval" in
4422   yes)
4423     AC_MSG_RESULT(yes)
4424
4425        # Conditions under which pam_smbpass should not be built.
4426
4427        if test x"$BLDSHARED" != x"true"; then
4428           AC_MSG_ERROR([No support for shared modules])
4429        elif test x"$create_pam_modules" != x"yes"; then
4430           AC_MSG_ERROR([No support for PAM MODULES])
4431        else
4432           PAM_MODULES="pam_smbpass"
4433           INSTALL_PAM_MODULES="installpammodules"
4434           UNINSTALL_PAM_MODULES="uninstallpammodules"
4435        fi
4436     ;;
4437   *)
4438     AC_MSG_RESULT(no)
4439     ;;
4440   esac ],
4441   AC_MSG_RESULT(no)
4442 )
4443
4444
4445 ###############################################
4446 # test for where we get crypt() from
4447 AC_SEARCH_LIBS(crypt, [crypt],
4448   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
4449   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
4450
4451 ##
4452 ## moved after the check for -lcrypt in order to
4453 ## ensure that the necessary libraries are included
4454 ## check checking for truncated salt.  Wrapped by the
4455 ## $with_pam_for_crypt variable as above   --jerry
4456 ##
4457 if test $with_pam_for_crypt = no; then
4458 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4459 crypt_LIBS="$LIBS"
4460 LIBS="$AUTH_LIBS $LIBS"
4461 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
4462         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4463 LIBS="$crypt_LIBS"])
4464 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4465         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4466 fi
4467 fi
4468
4469 #################################################
4470 # check for a NISPLUS_HOME support
4471 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4472 AC_ARG_WITH(nisplus-home,
4473 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4474 [ case "$withval" in
4475   yes)
4476     AC_MSG_RESULT(yes)
4477     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4478     ;;
4479   *)
4480     AC_MSG_RESULT(no)
4481     ;;
4482   esac ],
4483   AC_MSG_RESULT(no)
4484 )
4485
4486 #################################################
4487 # check for syslog logging
4488 AC_MSG_CHECKING(whether to use syslog logging)
4489 AC_ARG_WITH(syslog,
4490 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4491 [ case "$withval" in
4492   yes)
4493     AC_MSG_RESULT(yes)
4494     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4495     ;;
4496   *)
4497     AC_MSG_RESULT(no)
4498     ;;
4499   esac ],
4500   AC_MSG_RESULT(no)
4501 )
4502
4503 #################################################
4504 # check for custom syslog facility
4505 AC_MSG_CHECKING(whether to use a custom syslog facility)
4506 AC_ARG_WITH(syslog-facility,
4507 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4508 [
4509   if test "$withval" = "no" ; then
4510     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4511   else
4512      if test "$withval" != "yes" ; then
4513         syslog_facility="$withval"
4514         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4515      fi
4516   fi
4517 ])
4518
4519 #################################################
4520 # check for experimental disk-quotas support
4521
4522 samba_cv_WITH_QUOTAS=auto
4523 samba_cv_TRY_QUOTAS=no
4524 samba_cv_RUN_QUOTA_TESTS=auto
4525 samba_cv_WITH_SYS_QUOTAS=auto
4526 samba_cv_TRY_SYS_QUOTAS=auto
4527 samba_cv_SYSQUOTA_FOUND=no
4528
4529 AC_MSG_CHECKING(whether to try disk-quotas support)
4530 AC_ARG_WITH(quotas,
4531 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4532 [ case "$withval" in
4533   yes)
4534     AC_MSG_RESULT(yes)
4535     samba_cv_WITH_QUOTAS=yes
4536     samba_cv_TRY_QUOTAS=yes
4537     samba_cv_RUN_QUOTA_TESTS=yes
4538     #set sys quotas to auto in this case
4539     samba_cv_TRY_SYS_QUOTAS=auto
4540     ;;
4541   auto)
4542     AC_MSG_RESULT(auto)
4543     samba_cv_WITH_QUOTAS=auto
4544     samba_cv_TRY_QUOTAS=auto
4545     samba_cv_RUN_QUOTA_TESTS=auto
4546     #set sys quotas to auto in this case
4547     samba_cv_TRY_SYS_QUOTAS=auto
4548     ;;
4549   no)
4550     AC_MSG_RESULT(no)
4551     samba_cv_WITH_QUOTAS=no
4552     samba_cv_TRY_QUOTAS=no
4553     samba_cv_RUN_QUOTA_TESTS=no
4554     ;;
4555   *)
4556     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4557     ;;
4558   esac ],
4559   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4560 )
4561
4562 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4563 AC_ARG_WITH(sys-quotas,
4564 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4565 [ case "$withval" in
4566   yes)
4567     AC_MSG_RESULT(yes)
4568     samba_cv_WITH_SYS_QUOTAS=yes
4569     samba_cv_TRY_SYS_QUOTAS=yes
4570     samba_cv_RUN_QUOTA_TESTS=yes
4571     ;;
4572   auto)
4573     AC_MSG_RESULT(auto)
4574     samba_cv_WITH_SYS_QUOTAS=auto
4575     samba_cv_TRY_SYS_QUOTAS=auto
4576     samba_cv_RUN_QUOTA_TESTS=auto
4577     ;;
4578   no)
4579     AC_MSG_RESULT(no)
4580     samba_cv_WITH_SYS_QUOTAS=no
4581     samba_cv_TRY_SYS_QUOTAS=no
4582     ;;
4583   *)
4584     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4585     ;;
4586   esac ],
4587   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4588 )
4589
4590 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4591 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4592   case "$host_os" in
4593         *linux*)
4594             AC_MSG_RESULT(yes)
4595             samba_cv_TRY_SYS_QUOTAS=yes
4596             samba_cv_RUN_QUOTA_TESTS=yes
4597             ;;
4598         *)
4599             AC_MSG_RESULT(no)
4600             samba_cv_TRY_SYS_QUOTAS=no
4601             ;;
4602   esac
4603 fi
4604
4605 #############################################
4606 # only check for quota stuff if --with-quotas
4607 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4608
4609 case "$host_os" in
4610         # on linux we didn't need to test we have builtin support
4611         *linux*)
4612             samba_cv_SYSQUOTA_FOUND=yes
4613             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4614             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4615             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4616             AC_MSG_RESULT(yes)
4617
4618             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4619             samba_cv_found_xfs_header=yes
4620             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4621             AC_MSG_RESULT(yes)
4622             ;;
4623         *solaris*)
4624             # need to set this define when using static linking (BUG 1473)
4625             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4626             ;;
4627         *)
4628             ;;
4629 esac
4630
4631 # some broken header files need this
4632 AC_CHECK_HEADER(asm/types.h,[
4633             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4634             AC_ADD_INCLUDE(<asm/types.h>)
4635             ])
4636
4637 # For quotas on Veritas VxFS filesystems
4638 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4639
4640 # For quotas on Linux XFS filesystems
4641 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4642
4643 # For sys/quota.h and linux/quota.h
4644 AC_CHECK_HEADERS(sys/quota.h)
4645
4646 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4647 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4648 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4649 AC_TRY_COMPILE([
4650 #include "confdefs.h"
4651 #ifdef HAVE_SYS_TYPES_H
4652 #include <sys/types.h>
4653 #endif
4654 #ifdef HAVE_ASM_TYPES_H
4655 #include <asm/types.h>
4656 #endif
4657 #include <sys/quota.h>
4658 ],[int i = Q_XGETQUOTA;],
4659 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4660 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4661         samba_cv_found_xfs_header=yes
4662 fi
4663 fi
4664
4665 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4666 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4667 AC_TRY_COMPILE([
4668 #include "confdefs.h"
4669 #ifdef HAVE_SYS_QUOTA_H
4670 #include <sys/quota.h>
4671 #endif
4672 ],[
4673 struct dqblk D;
4674 D.dqb_fsoftlimit = 0;],
4675 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4676 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4677         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4678 fi
4679
4680 ##################
4681 # look for a working quota system
4682
4683 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4684 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4685 AC_TRY_RUN_STRICT([
4686 #define HAVE_QUOTACTL_4A 1
4687 #define AUTOCONF_TEST 1
4688 #include "confdefs.h"
4689 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4690            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4691 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4692     samba_cv_SYSQUOTA_FOUND=yes;
4693     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4694     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4695 fi
4696 fi
4697
4698 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4699 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4700 AC_TRY_RUN_STRICT([
4701 #define HAVE_QUOTACTL_4B 1
4702 #define AUTOCONF_TEST 1
4703 #include "confdefs.h"
4704 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4705            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4706 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4707     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4708     samba_cv_SYSQUOTA_FOUND=yes;
4709     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4710     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4711 fi
4712 fi
4713
4714 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4715 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4716 AC_TRY_RUN_STRICT([
4717 #define HAVE_QUOTACTL_3 1
4718 #define AUTOCONF_TEST 1
4719 #include "confdefs.h"
4720 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4721            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4722 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4723     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4724     samba_cv_SYSQUOTA_FOUND=yes;
4725     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4726     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4727 fi
4728 fi
4729
4730 #################################################
4731 # check for mntent.h and struct mntent
4732 AC_CHECK_HEADERS(mntent.h)
4733 #################################################
4734 # check for setmntent,getmntent,endmntent
4735 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4736
4737 #################################################
4738 # check for devnm.h and struct mntent
4739 AC_CHECK_HEADERS(devnm.h)
4740 #################################################
4741 # check for devnm
4742 AC_CHECK_FUNCS(devnm)
4743
4744 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4745     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4746         # if --with-sys-quotas=yes then build it
4747         # you have can use the get/set quota command smb.conf
4748         # options then
4749         samba_cv_SYSQUOTA_FOUND=auto
4750     fi
4751     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4752         # if --with-sys-quotas=yes then build it
4753         # you have can use the get/set quota command smb.conf
4754         # options then
4755         samba_cv_TRY_SYS_QUOTAS=auto
4756     fi
4757 fi
4758
4759 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4760 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4761 SAVE_CPPFLAGS="$CPPFLAGS"
4762 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4763 AC_TRY_COMPILE([
4764 #include "confdefs.h"
4765 #define NO_PROTO_H 1
4766 #define NO_CONFIG_H 1
4767 #define HAVE_SYS_QUOTAS 1
4768 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4769 #include "${srcdir-.}/lib/sysquotas.c"
4770 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4771 CPPFLAGS="$SAVE_CPPFLAGS"
4772 ])
4773 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4774 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4775     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4776         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4777         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4778         samba_cv_WE_USE_SYS_QUOTAS=yes
4779         AC_MSG_RESULT(yes)
4780     else
4781         AC_MSG_RESULT(no)
4782     fi
4783 fi
4784 fi
4785
4786 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4787 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4788 SAVE_CPPFLAGS="$CPPFLAGS"
4789 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4790 AC_TRY_COMPILE([
4791 #include "confdefs.h"
4792 #define NO_PROTO_H 1
4793 #define NO_CONFIG_H 1
4794 #define HAVE_SYS_QUOTAS 1
4795 #define HAVE_XFS_QUOTAS 1
4796 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4797 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4798 CPPFLAGS="$SAVE_CPPFLAGS"
4799 ])
4800 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4801     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4802         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4803     fi
4804 fi
4805 fi
4806
4807 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4808 SAVE_CPPFLAGS="$CPPFLAGS"
4809 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4810 AC_TRY_COMPILE([
4811 #include "confdefs.h"
4812 #define NO_PROTO_H 1
4813 #define NO_CONFIG_H 1
4814 #include "${srcdir-.}/smbd/quotas.c"
4815 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4816 CPPFLAGS="$SAVE_CPPFLAGS"
4817 ])
4818 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4819 AC_MSG_CHECKING(whether to use the old quota support)
4820     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4821       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4822         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4823         AC_MSG_RESULT(yes)
4824       else
4825         AC_MSG_RESULT(no)
4826       fi
4827     else
4828       AC_MSG_RESULT(no)
4829     fi
4830 fi
4831
4832 ####################
4833 # End of quota check samba_cv_RUN_QUOTA_TESTS
4834 fi
4835
4836 #################################################
4837 # check for experimental utmp accounting
4838
4839 AC_MSG_CHECKING(whether to support utmp accounting)
4840 WITH_UTMP=yes
4841 AC_ARG_WITH(utmp,
4842 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
4843 [ case "$withval" in
4844   no)
4845                 WITH_UTMP=no
4846                 ;;
4847   *)
4848                 WITH_UTMP=yes
4849                 ;;
4850   esac ],
4851 )
4852
4853 # utmp requires utmp.h
4854 # Note similar check earlier, when checking utmp details.
4855
4856 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4857         utmp_no_reason=", no utmp.h on $host_os"
4858         WITH_UTMP=no
4859 fi
4860
4861 # Display test results
4862
4863 if test x"$WITH_UTMP" = x"yes"; then
4864         AC_MSG_RESULT(yes)
4865         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4866 else
4867         AC_MSG_RESULT(no$utmp_no_reason)
4868 fi
4869
4870 INSTALLLIBCMD_SH=:
4871 INSTALLLIBCMD_A=:
4872 UNINSTALLLIBCMD_SH=:
4873 UNINSTALLLIBCMD_A=:
4874
4875 if test $BLDSHARED = true; then
4876         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
4877         UNINSTALLLIBCMD_SH="rm -f"
4878 fi
4879 if test $enable_static = yes; then
4880         INSTALLLIBCMD_A="\$(INSTALLCMD)"
4881         UNINSTALLLIBCMD_A="rm -f"
4882 fi
4883
4884 #################################################
4885 # --disable-shared-libs
4886 # can be used to disable the internal use of shared libs altogether
4887 # (this only has an effect when building shared libs is enabled)
4888 #
4889 USESHARED=false
4890 AC_SUBST(USESHARED)
4891
4892 AC_MSG_CHECKING(whether to use shared libraries internally)
4893 AC_ARG_ENABLE([shared-libs],
4894         AS_HELP_STRING([--enable-shared-libs],
4895                 [Use shared libraries internally (default=yes)]),
4896         [enable_shared_libs=$enableval],
4897         [enable_shared_libs=yes])
4898
4899 if test x"$enable_shared_libs" != x"no" ; then
4900         USESHARED=$BLDSHARED
4901 fi
4902
4903 AC_MSG_RESULT([$USESHARED])
4904
4905 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
4906         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
4907 fi
4908
4909 #################################################
4910 # --with-static-libs=LIBS:
4911 #   link (internal) libs dynamically or statically?
4912 #
4913 # If a subsystem is built as a library then this controls whether they are
4914 # linked into Samba targets statically or dynamically:
4915 #
4916 # * If we build the shared library at all, we link dynamically by default.
4917 #
4918 # * We only link statically if we don't build shared or if the library
4919 #   appears in the --with-static-libs configure option.
4920 #
4921 # Example:
4922 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
4923 #   of linking the dynamic variant with -ltalloc.
4924 #
4925 # NOTE: This option only affects libraries that we do not only build
4926 # but that samba also links against as libraries (as opposed to linking
4927 # the plain object files. - This has to be configured in Makefile.in.
4928 # So in particular it does not harm to give invalid or unknown names here.
4929 #
4930
4931 AC_ARG_WITH([static-libs],
4932         [AS_HELP_STRING([--with-static-libs=LIBS],
4933                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
4934         [AS_IF([test $withval],
4935                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
4936                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
4937                         eval LINK_$lib=STATIC
4938                 done], [])],
4939         [])
4940
4941 #
4942 # WORKAROUND:
4943 #   until we have organized other internal subsystems (as util, registry
4944 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
4945 #   dynamically to samba programs.
4946 #
4947 LINK_LIBNETAPI=STATIC
4948
4949 LINK_LIBSMBCLIENT=STATIC
4950
4951 #
4952 #  The library versions are hardcoded here
4953 #  and filled into the LIBFOO_SOVER variable.
4954 #
4955 #  TODO: for talloc and tdb (at least), these should
4956 #  be extracted from their respective source directories
4957 #
4958 SMB_LIBRARY(talloc, 1)
4959 SMB_LIBRARY(tdb, 1)
4960 SMB_LIBRARY(netapi, 0)
4961 SMB_LIBRARY(smbclient, 0)
4962 SMB_LIBRARY(smbsharemodes, 0)
4963 SMB_LIBRARY(addns, 0, no, [undefined API])
4964
4965
4966
4967 #################################################
4968 # these tests are taken from the GNU fileutils package
4969 AC_CHECKING(how to get filesystem space usage)
4970 space=no
4971
4972 # Test for statvfs64.
4973 if test $space = no; then
4974   # SVR4
4975   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
4976   [AC_TRY_RUN([
4977 #if defined(HAVE_UNISTD_H)
4978 #include <unistd.h>
4979 #endif
4980 #include <sys/types.h>
4981 #include <sys/statvfs.h>
4982   main ()
4983   {
4984     struct statvfs64 fsd;
4985     exit (statvfs64 (".", &fsd));
4986   }],
4987   fu_cv_sys_stat_statvfs64=yes,
4988   fu_cv_sys_stat_statvfs64=no,
4989   fu_cv_sys_stat_statvfs64=cross)])
4990   if test $fu_cv_sys_stat_statvfs64 = yes; then
4991     space=yes
4992     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
4993   fi
4994 fi
4995
4996 # Perform only the link test since it seems there are no variants of the
4997 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4998 # because that got a false positive on SCO OSR5.  Adding the declaration
4999 # of a `struct statvfs' causes this test to fail (as it should) on such
5000 # systems.  That system is reported to work fine with STAT_STATFS4 which
5001 # is what it gets when this test fails.
5002 if test $space = no; then
5003   # SVR4
5004   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
5005                  [AC_TRY_LINK([#include <sys/types.h>
5006 #include <sys/statvfs.h>],
5007                               [struct statvfs fsd; statvfs (0, &fsd);],
5008                               fu_cv_sys_stat_statvfs=yes,
5009                               fu_cv_sys_stat_statvfs=no)])
5010   if test $fu_cv_sys_stat_statvfs = yes; then
5011     space=yes
5012     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
5013   fi
5014 fi
5015
5016 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
5017 # This is not the case on ancient Linux systems.
5018
5019 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
5020     AC_TRY_COMPILE([#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
5021         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
5022 if test x"$samba_cv_fsid_int" = x"yes"; then
5023     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
5024 fi
5025
5026 if test $space = no; then
5027   # DEC Alpha running OSF/1
5028   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
5029   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
5030   [AC_TRY_RUN([
5031 #include <sys/param.h>
5032 #include <sys/types.h>
5033 #include <sys/mount.h>
5034   main ()
5035   {
5036     struct statfs fsd;
5037     fsd.f_fsize = 0;
5038     exit (statfs (".", &fsd, sizeof (struct statfs)));
5039   }],
5040   fu_cv_sys_stat_statfs3_osf1=yes,
5041   fu_cv_sys_stat_statfs3_osf1=no,
5042   fu_cv_sys_stat_statfs3_osf1=no)])
5043   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5044   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5045     space=yes
5046     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5047   fi
5048 fi
5049
5050 if test $space = no; then
5051 # AIX
5052   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5053 member (AIX, 4.3BSD)])
5054   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5055   [AC_TRY_RUN([
5056 #ifdef HAVE_SYS_PARAM_H
5057 #include <sys/param.h>
5058 #endif
5059 #ifdef HAVE_SYS_MOUNT_H
5060 #include <sys/mount.h>
5061 #endif
5062 #ifdef HAVE_SYS_VFS_H
5063 #include <sys/vfs.h>
5064 #endif
5065   main ()
5066   {
5067   struct statfs fsd;
5068   fsd.f_bsize = 0;
5069   exit (statfs (".", &fsd));
5070   }],
5071   fu_cv_sys_stat_statfs2_bsize=yes,
5072   fu_cv_sys_stat_statfs2_bsize=no,
5073   fu_cv_sys_stat_statfs2_bsize=no)])
5074   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5075   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5076     space=yes
5077     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5078   fi
5079 fi
5080
5081 if test $space = no; then
5082 # SVR3
5083   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5084   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5085   [AC_TRY_RUN([#include <sys/types.h>
5086 #include <sys/statfs.h>
5087   main ()
5088   {
5089   struct statfs fsd;
5090   exit (statfs (".", &fsd, sizeof fsd, 0));
5091   }],
5092     fu_cv_sys_stat_statfs4=yes,
5093     fu_cv_sys_stat_statfs4=no,
5094     fu_cv_sys_stat_statfs4=no)])
5095   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5096   if test $fu_cv_sys_stat_statfs4 = yes; then
5097     space=yes
5098     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5099   fi
5100 fi
5101
5102 if test $space = no; then
5103 # 4.4BSD and NetBSD
5104   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5105 member (4.4BSD and NetBSD)])
5106   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5107   [AC_TRY_RUN([#include <sys/types.h>
5108 #ifdef HAVE_SYS_PARAM_H
5109 #include <sys/param.h>
5110 #endif
5111 #ifdef HAVE_SYS_MOUNT_H
5112 #include <sys/mount.h>
5113 #endif
5114   main ()
5115   {
5116   struct statfs fsd;
5117   fsd.f_fsize = 0;
5118   exit (statfs (".", &fsd));
5119   }],
5120   fu_cv_sys_stat_statfs2_fsize=yes,
5121   fu_cv_sys_stat_statfs2_fsize=no,
5122   fu_cv_sys_stat_statfs2_fsize=no)])
5123   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5124   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5125     space=yes
5126         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5127   fi
5128 fi
5129
5130 if test $space = no; then
5131   # Ultrix
5132   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5133   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5134   [AC_TRY_RUN([#include <sys/types.h>
5135 #ifdef HAVE_SYS_PARAM_H
5136 #include <sys/param.h>
5137 #endif
5138 #ifdef HAVE_SYS_MOUNT_H
5139 #include <sys/mount.h>
5140 #endif
5141 #ifdef HAVE_SYS_FS_TYPES_H
5142 #include <sys/fs_types.h>
5143 #endif
5144   main ()
5145   {
5146   struct fs_data fsd;
5147   /* Ultrix's statfs returns 1 for success,
5148      0 for not mounted, -1 for failure.  */
5149   exit (statfs (".", &fsd) != 1);
5150   }],
5151   fu_cv_sys_stat_fs_data=yes,
5152   fu_cv_sys_stat_fs_data=no,
5153   fu_cv_sys_stat_fs_data=no)])
5154   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5155   if test $fu_cv_sys_stat_fs_data = yes; then
5156     space=yes
5157     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5158   fi
5159 fi
5160
5161 #
5162 # As a gating factor for large file support, in order to
5163 # use <4GB files we must have the following minimal support
5164 # available.
5165 # long long, and a 64 bit off_t or off64_t.
5166 # If we don't have all of these then disable large
5167 # file support.
5168 #
5169 AC_MSG_CHECKING([if large file support can be enabled])
5170 AC_TRY_COMPILE([
5171 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5172 #include <sys/types.h>
5173 #else
5174 __COMPILE_ERROR_
5175 #endif
5176 ],
5177 [int i],
5178 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5179 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5180         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5181 fi
5182 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5183
5184 #################################################
5185 # check for cluster extensions
5186
5187 CTDB_CFLAGS=""
5188 AC_SUBST(CTDB_CFLAGS)
5189 AC_ARG_WITH(ctdb,
5190 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
5191 [ case "$withval" in
5192   yes|no)
5193     AC_MSG_WARN([--with-ctdb called without argument])
5194     ;;
5195   *)
5196     CTDB_CPPFLAGS="-I$withval/include"
5197     ;;
5198   esac])
5199
5200 SAVED_CPPFLAGS="$CPPFLAGS"
5201 CPPFLAGS="$CPPFLAGS $CTDB_CPPFLAGS"
5202 ctdb_broken="missing or broken headers"
5203
5204 AC_CHECK_HEADERS(ctdb.h ctdb_private.h,,,[
5205 #include "confdefs.h"
5206 #define NO_CONFIG_H
5207 #include "replace.h"
5208 #include "system/wait.h"
5209 #include "system/network.h"
5210 #define private #error __USED_RESERVED_WORD_private__
5211 #include <talloc.h>
5212 #include <tdb.h>
5213 #include <ctdb.h>
5214 ])
5215
5216 AC_HAVE_DECL(CTDB_CONTROL_TRANS2_COMMIT_RETRY,[
5217 #include "confdefs.h"
5218 #define NO_CONFIG_H
5219 #include "replace.h"
5220 #include "system/wait.h"
5221 #include "system/network.h"
5222 #include <talloc.h>
5223 #include <tdb.h>
5224 #include <ctdb.h>
5225 #include <ctdb_private.h>
5226 ])
5227 if test x"$ac_cv_have_CTDB_CONTROL_TRANS2_COMMIT_RETRY_decl" = x"yes"; then
5228         ctdb_broken=no
5229 else
5230         ctdb_broken="missing transaction support"
5231 fi
5232
5233 # in ctdb 1.0.57 ctdb_control_tcp was temparary renamed to ctdb_tcp_client
5234 AC_CHECK_TYPE(struct ctdb_tcp_client,[
5235         AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
5236 ],,[
5237 #include "confdefs.h"
5238 #define NO_CONFIG_H
5239 #include "replace.h"
5240 #include "system/wait.h"
5241 #include "system/network.h"
5242 #include <talloc.h>
5243 #include <tdb.h>
5244 #include <ctdb.h>
5245 #include <ctdb_private.h>
5246 ])
5247
5248 AC_CHECK_TYPE(struct ctdb_control_tcp,[
5249         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5250 ],[
5251         ctdb_broken="missing struct ctdb_control_tcp"
5252 ],[
5253 #include "confdefs.h"
5254 #define NO_CONFIG_H
5255 #include "replace.h"
5256 #include "system/wait.h"
5257 #include "system/network.h"
5258 #include <talloc.h>
5259 #include <tdb.h>
5260 #include <ctdb.h>
5261 #include <ctdb_private.h>
5262 ])
5263
5264 AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5265         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5266 ],,[
5267 #include "confdefs.h"
5268 #define NO_CONFIG_H
5269 #include "replace.h"
5270 #include "system/wait.h"
5271 #include "system/network.h"
5272 #include <talloc.h>
5273 #include <tdb.h>
5274 #include <ctdb.h>
5275 #include <ctdb_private.h>
5276 ])
5277 CPPFLAGS="$SAVED_CPPFLAGS"
5278
5279 AC_MSG_CHECKING(cluster support)
5280 AC_ARG_WITH(cluster-support,
5281 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
5282
5283 if test x"$with_cluster_support" = x ; then
5284         with_cluster_support="auto"
5285 fi
5286
5287 if test x"$ac_cv_header_ctdb_private_h" != x"yes"; then
5288         if test "x$with_cluster_support" = "xyes"; then
5289                 AC_MSG_ERROR("ctdb_private.h is required for cluster support")
5290         fi
5291         with_cluster_support=no
5292 fi
5293
5294 if test x"$ctdb_broken" != x"no"; then
5295         if test "x$with_cluster_support" = "xyes"; then
5296                 AC_MSG_ERROR(["cluster support: $ctdb_broken"])
5297         fi
5298         with_cluster_support=no
5299 fi
5300
5301 if test "x$with_cluster_support" != "xno"; then
5302     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5303     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5304     AC_MSG_RESULT(yes)
5305 else
5306     AC_MSG_RESULT(no)
5307 fi
5308
5309 #################################################
5310 # check for ACL support
5311
5312 AC_MSG_CHECKING(whether to support ACLs)
5313 AC_ARG_WITH(acl-support,
5314 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5315 [ case "$withval" in
5316         yes|no)
5317                 with_acl_support="$withval"
5318                 ;;
5319   esac ])
5320
5321 if test x"$with_acl_support" = x ; then
5322         with_acl_support="auto"
5323 fi
5324
5325 AC_MSG_RESULT($with_acl_support)
5326
5327 if test x"$with_acl_support" = x"no"; then
5328         AC_MSG_RESULT(Disabling ACL support)
5329         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5330 else
5331         AC_MSG_NOTICE(checking whether ACL support is available:)
5332         case "$host_os" in
5333         *sysv5*)
5334                 AC_MSG_NOTICE(Using UnixWare ACLs)
5335                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5336                 default_static_modules="$default_static_modules vfs_solarisacl"
5337                 ;;
5338         *solaris*)
5339                 AC_MSG_NOTICE(Using solaris ACLs)
5340                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5341                 ACL_LIBS="$ACL_LIBS -lsec"
5342                 default_static_modules="$default_static_modules vfs_solarisacl"
5343                 ;;
5344         *hpux*)
5345                 AC_MSG_NOTICE(Using HPUX ACLs)
5346                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5347                 default_static_modules="$default_static_modules vfs_hpuxacl"
5348                 ;;
5349         *irix*)
5350                 AC_MSG_NOTICE(Using IRIX ACLs)
5351                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5352                 default_static_modules="$default_static_modules vfs_irixacl"
5353                 ;;
5354         *aix*)
5355                 AC_MSG_NOTICE(Using AIX ACLs)
5356                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5357                 default_static_modules="$default_static_modules vfs_aixacl"
5358                 ;;
5359         *osf*)
5360                 AC_MSG_NOTICE(Using Tru64 ACLs)
5361                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5362                 ACL_LIBS="$ACL_LIBS -lpacl"
5363                 default_static_modules="$default_static_modules vfs_tru64acl"
5364                 ;;
5365         *darwin*)
5366                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5367                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5368                 ;;
5369         *)
5370                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5371                 case "$host_os" in
5372                 *linux*)
5373                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5374                         ;;
5375                 esac
5376                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5377                         acl_LIBS=$LIBS
5378                         LIBS="$LIBS $ACL_LIBS"
5379                         AC_TRY_LINK([
5380                                 #include <sys/types.h>
5381                                 #include <sys/acl.h>
5382                         ],[
5383                                 acl_t acl;
5384                                 int entry_id;
5385                                 acl_entry_t *entry_p;
5386                                 return acl_get_entry(acl, entry_id, entry_p);
5387                         ],
5388                         [samba_cv_HAVE_POSIX_ACLS=yes],
5389                         [samba_cv_HAVE_POSIX_ACLS=no])
5390                         LIBS=$acl_LIBS
5391                 ])
5392                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5393                         AC_MSG_NOTICE(Using posix ACLs)
5394                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5395                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5396                                 acl_LIBS=$LIBS
5397                                 LIBS="$LIBS $ACL_LIBS"
5398                                 AC_TRY_LINK([
5399                                         #include <sys/types.h>
5400                                         #include <sys/acl.h>
5401                                 ],[
5402                                         acl_permset_t permset_d;
5403                                         acl_perm_t perm;
5404                                         return acl_get_perm_np(permset_d, perm);
5405                                 ],
5406                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5407                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5408                                 LIBS=$acl_LIBS
5409                         ])
5410                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5411                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5412                         fi
5413                         default_static_modules="$default_static_modules vfs_posixacl"
5414                 else
5415                         AC_MSG_NOTICE(ACL support is not avaliable)
5416                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5417                 fi
5418                 ;;
5419         esac
5420 fi # with_acl_support
5421
5422
5423
5424 #################################################
5425 # check for AIO support
5426
5427 AC_MSG_CHECKING(whether to support asynchronous io)
5428 AC_ARG_WITH(aio-support,
5429 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5430 [ case "$withval" in
5431   yes)
5432
5433         AC_MSG_RESULT(yes)
5434         case "$host_os" in
5435         *)
5436                 AIO_LIBS=$LIBS
5437                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5438                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5439                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5440                 aio_LIBS=$LIBS
5441                 LIBS=$AIO_LIBS
5442                 AC_TRY_LINK([#include <sys/types.h>
5443 #include <aio.h>],
5444 [ struct aiocb a; return aio_read(&a);],
5445 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5446                 LIBS=$aio_LIBS])
5447                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5448                 aio_LIBS=$LIBS
5449                 LIBS=$AIO_LIBS
5450                 AC_TRY_LINK([#include <sys/types.h>
5451 #include <aio.h>],
5452 [ struct aiocb64 a; return aio_read64(&a);],
5453 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5454                 LIBS=$aio_LIBS])
5455                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5456                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5457                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5458                         LIBS=$AIO_LIBS
5459                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5460                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5461                         LIBS=$AIO_LIBS
5462                 fi
5463
5464                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5465                         AC_MSG_CHECKING(for aio_read)
5466                         AC_LINK_IFELSE([#include <aio.h>
5467 int main() { struct aiocb a; return aio_read(&a); }],
5468 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5469 [AC_MSG_RESULT(no)])
5470
5471                         AC_MSG_CHECKING(for aio_write)
5472                         AC_LINK_IFELSE([#include <aio.h>
5473 int main() { struct aiocb a; return aio_write(&a); }],
5474 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5475 [AC_MSG_RESULT(no)])
5476
5477                         AC_MSG_CHECKING(for aio_fsync)
5478                         AC_LINK_IFELSE([#include <aio.h>
5479 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5480 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5481 [AC_MSG_RESULT(no)])
5482
5483                         AC_MSG_CHECKING(for aio_return)
5484                         AC_LINK_IFELSE([#include <aio.h>
5485 int main() { struct aiocb a; return aio_return(&a); }],
5486 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5487 [AC_MSG_RESULT(no)])
5488
5489                         AC_MSG_CHECKING(for aio_error)
5490                         AC_LINK_IFELSE([#include <aio.h>
5491 int main() { struct aiocb a; return aio_error(&a); }],
5492 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5493 [AC_MSG_RESULT(no)])
5494
5495                         AC_MSG_CHECKING(for aio_cancel)
5496                         AC_LINK_IFELSE([#include <aio.h>
5497 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5498 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5499 [AC_MSG_RESULT(no)])
5500
5501                         AC_MSG_CHECKING(for aio_suspend)
5502                         AC_LINK_IFELSE([#include <aio.h>
5503 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5504 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5505 [AC_MSG_RESULT(no)])
5506                 fi
5507
5508                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5509                         AC_MSG_CHECKING(for aio_read64)
5510                         AC_LINK_IFELSE([#include <aio.h>
5511 int main() { struct aiocb a; return aio_read64(&a); }],
5512 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5513 [AC_MSG_RESULT(no)])
5514
5515                         AC_MSG_CHECKING(for aio_write64)
5516                         AC_LINK_IFELSE([#include <aio.h>
5517 int main() { struct aiocb a; return aio_write64(&a); }],
5518 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5519 [AC_MSG_RESULT(no)])
5520
5521                         AC_MSG_CHECKING(for aio_fsync64)
5522                         AC_LINK_IFELSE([#include <aio.h>
5523 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5524 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5525 [AC_MSG_RESULT(no)])
5526
5527                         AC_MSG_CHECKING(for aio_return64)
5528                         AC_LINK_IFELSE([#include <aio.h>
5529 int main() { struct aiocb a; return aio_return64(&a); }],
5530 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5531 [AC_MSG_RESULT(no)])
5532
5533                         AC_MSG_CHECKING(for aio_error64)
5534                         AC_LINK_IFELSE([#include <aio.h>
5535 int main() { struct aiocb a; return aio_error64(&a); }],
5536 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5537 [AC_MSG_RESULT(no)])
5538
5539                         AC_MSG_CHECKING(for aio_cancel64)
5540                         AC_LINK_IFELSE([#include <aio.h>
5541 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5542 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5543 [AC_MSG_RESULT(no)])
5544
5545                         AC_MSG_CHECKING(for aio_suspend64)
5546                         AC_LINK_IFELSE([#include <aio.h>
5547 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5548 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5549 [AC_MSG_RESULT(no)])
5550                 fi
5551             ;;
5552         esac
5553         ;;
5554   *)
5555     AC_MSG_RESULT(no)
5556     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5557     ;;
5558   esac ],
5559   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5560   AC_MSG_RESULT(no)
5561 )
5562
5563 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5564         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5565                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5566                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5567         fi
5568 fi
5569
5570 #################################################
5571 # check for sendfile support
5572
5573 with_sendfile_support=yes
5574 AC_MSG_CHECKING(whether to check to support sendfile)
5575 AC_ARG_WITH(sendfile-support,
5576 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5577 [ case "$withval" in
5578   yes)
5579
5580         AC_MSG_RESULT(yes);
5581
5582         case "$host_os" in
5583         *linux*)
5584                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5585                 AC_TRY_LINK([#include <sys/sendfile.h>],
5586 [\
5587 int tofd, fromfd;
5588 off64_t offset;
5589 size_t total;
5590 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5591 ],
5592 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5593
5594                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5595                 AC_TRY_LINK([#include <sys/sendfile.h>],
5596 [\
5597 int tofd, fromfd;
5598 off_t offset;
5599 size_t total;
5600 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5601 ],
5602 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5603
5604 # Try and cope with broken Linux sendfile....
5605                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5606                 AC_TRY_LINK([\
5607 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5608 #undef _FILE_OFFSET_BITS
5609 #endif
5610 #include <sys/sendfile.h>],
5611 [\
5612 int tofd, fromfd;
5613 off_t offset;
5614 size_t total;
5615 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5616 ],
5617 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5618
5619         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5620                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5621                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5622                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5623         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5624                 AC_DEFINE(HAVE_SENDFILE,1,[Whether 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_BROKEN_LINUX_SENDFILE" = x"yes"; then
5628                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5629                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5630         else
5631                 AC_MSG_RESULT(no);
5632         fi
5633
5634         ;;
5635         *freebsd* | *dragonfly* )
5636                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5637                 AC_TRY_LINK([\
5638 #include <sys/types.h>
5639 #include <unistd.h>
5640 #include <sys/socket.h>
5641 #include <sys/uio.h>],
5642 [\
5643         int fromfd, tofd, ret, total=0;
5644         off_t offset, nwritten;
5645         struct sf_hdtr hdr;
5646         struct iovec hdtrl;
5647         hdr.headers = &hdtrl;
5648         hdr.hdr_cnt = 1;
5649         hdr.trailers = NULL;
5650         hdr.trl_cnt = 0;
5651         hdtrl.iov_base = NULL;
5652         hdtrl.iov_len = 0;
5653         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5654 ],
5655 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5656
5657         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5658                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5659                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5660                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5661         else
5662                 AC_MSG_RESULT(no);
5663         fi
5664         ;;
5665
5666         *hpux*)
5667                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5668                 AC_TRY_LINK([\
5669 #include <sys/socket.h>
5670 #include <sys/uio.h>],
5671 [\
5672         int fromfd, tofd;
5673         size_t total=0;
5674         struct iovec hdtrl[2];
5675         ssize_t nwritten;
5676         off64_t offset;
5677
5678         hdtrl[0].iov_base = 0;
5679         hdtrl[0].iov_len = 0;
5680
5681         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5682 ],
5683 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5684         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5685                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5686                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5687                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5688         else
5689                 AC_MSG_RESULT(no);
5690         fi
5691
5692                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5693                 AC_TRY_LINK([\
5694 #include <sys/socket.h>
5695 #include <sys/uio.h>],
5696 [\
5697         int fromfd, tofd;
5698         size_t total=0;
5699         struct iovec hdtrl[2];
5700         ssize_t nwritten;
5701         off_t offset;
5702
5703         hdtrl[0].iov_base = 0;
5704         hdtrl[0].iov_len = 0;
5705
5706         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5707 ],
5708 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5709         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5710                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5711                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5712                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5713         else
5714                 AC_MSG_RESULT(no);
5715         fi
5716         ;;
5717
5718         *solaris*)
5719                 AC_CHECK_LIB(sendfile,sendfilev)
5720                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5721                 AC_TRY_LINK([\
5722 #include <sys/sendfile.h>],
5723 [\
5724         int sfvcnt;
5725         size_t xferred;
5726         struct sendfilevec vec[2];
5727         ssize_t nwritten;
5728         int tofd;
5729
5730         sfvcnt = 2;
5731
5732         vec[0].sfv_fd = SFV_FD_SELF;
5733         vec[0].sfv_flag = 0;
5734         vec[0].sfv_off = 0;
5735         vec[0].sfv_len = 0;
5736
5737         vec[1].sfv_fd = 0;
5738         vec[1].sfv_flag = 0;
5739         vec[1].sfv_off = 0;
5740         vec[1].sfv_len = 0;
5741         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5742 ],
5743 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5744
5745         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5746                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5747                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5748                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5749         else
5750                 AC_MSG_RESULT(no);
5751         fi
5752
5753                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5754                 AC_TRY_LINK([\
5755 #include <sys/sendfile.h>],
5756 [\
5757         int sfvcnt;
5758         size_t xferred;
5759         struct sendfilevec vec[2];
5760         ssize_t nwritten;
5761         int tofd;
5762
5763         sfvcnt = 2;
5764
5765         vec[0].sfv_fd = SFV_FD_SELF;
5766         vec[0].sfv_flag = 0;
5767         vec[0].sfv_off = 0;
5768         vec[0].sfv_len = 0;
5769
5770         vec[1].sfv_fd = 0;
5771         vec[1].sfv_flag = 0;
5772         vec[1].sfv_off = 0;
5773         vec[1].sfv_len = 0;
5774         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5775 ],
5776 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5777
5778         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5779                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5780                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5781                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5782         else
5783                 AC_MSG_RESULT(no);
5784         fi
5785         ;;
5786         *aix*)
5787                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5788                 AC_TRY_LINK([\
5789 #include <sys/socket.h>],
5790 [\
5791         int fromfd, tofd;
5792         size_t total=0;
5793         struct sf_parms hdtrl;
5794         ssize_t nwritten;
5795         off64_t offset;
5796
5797         hdtrl.header_data = 0;
5798         hdtrl.header_length = 0;
5799         hdtrl.file_descriptor = fromfd;
5800         hdtrl.file_offset = 0;
5801         hdtrl.file_bytes = 0;
5802         hdtrl.trailer_data = 0;
5803         hdtrl.trailer_length = 0;
5804
5805         nwritten = send_file(&tofd, &hdtrl, 0);
5806 ],
5807 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5808         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5809                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5810                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5811                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5812         else
5813                 AC_MSG_RESULT(no);
5814         fi
5815         ;;
5816         *)
5817         ;;
5818         esac
5819         ;;
5820   *)
5821     AC_MSG_RESULT(no)
5822     ;;
5823   esac ],
5824   AC_MSG_RESULT(yes)
5825 )
5826
5827 ############################################
5828 # See if we have the Linux readahead syscall.
5829
5830 AC_CACHE_CHECK([for Linux readahead],
5831                 samba_cv_HAVE_LINUX_READAHEAD,[
5832     AC_TRY_LINK([
5833 #if defined(HAVE_UNISTD_H)
5834 #include <unistd.h>
5835 #endif
5836 #include <fcntl.h>],
5837     [ssize_t err = readahead(0,0,0x80000);],
5838     samba_cv_HAVE_LINUX_READAHEAD=yes,
5839     samba_cv_HAVE_LINUX_READAHEAD=no)])
5840
5841 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5842   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5843              [Whether Linux readahead is available])
5844 fi
5845
5846 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
5847
5848 ############################################
5849 # See if we have the posix_fadvise syscall.
5850
5851 AC_CACHE_CHECK([for posix_fadvise],
5852                 samba_cv_HAVE_POSIX_FADVISE,[
5853     AC_TRY_LINK([
5854 #if defined(HAVE_UNISTD_H)
5855 #include <unistd.h>
5856 #endif
5857 #include <fcntl.h>],
5858     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5859     samba_cv_HAVE_POSIX_FADVISE=yes,
5860     samba_cv_HAVE_POSIX_FADVISE=no)])
5861
5862 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5863   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5864              [Whether posix_fadvise is available])
5865 fi
5866
5867 ############################################
5868 # See if we have the Linux splice syscall.
5869
5870 AC_CACHE_CHECK([for Linux splice],
5871                 samba_cv_HAVE_LINUX_SPLICE,[
5872     AC_TRY_LINK([
5873 #if defined(HAVE_UNISTD_H)
5874 #include <unistd.h>
5875 #endif
5876 #include <fcntl.h>],
5877     [long ret = splice(0,0,1,0,400,0);],
5878     samba_cv_HAVE_LINUX_SPLICE=yes,
5879     samba_cv_HAVE_LINUX_SPLICE=no)])
5880
5881 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
5882   AC_DEFINE(HAVE_LINUX_SPLICE,1,
5883              [Whether Linux splice is available])
5884 fi
5885
5886 AC_HAVE_DECL(splice, [#include <fcntl.h>])
5887
5888
5889 #################################################
5890 # Check whether winbind is supported on this platform.  If so we need to
5891 # build and install client programs, sbin programs and shared libraries
5892
5893 AC_MSG_CHECKING(whether to build winbind)
5894
5895 # Initially, the value of $host_os decides whether winbind is supported
5896
5897 HAVE_WINBIND=yes
5898
5899 # Define the winbind shared library name and any specific linker flags
5900 # it needs to be built with.
5901
5902 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
5903 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
5904 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5905 NSSSONAMEVERSIONSUFFIX=""
5906 WINBIND_NSS_PTHREAD=""
5907
5908 case "$host_os" in
5909         *linux*)
5910                 NSSSONAMEVERSIONSUFFIX=".2"
5911                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
5912                 ;;
5913         *freebsd[[5-9]]*)
5914                 # FreeBSD winbind client is implemented as a wrapper around
5915                 # the Linux version.
5916                 NSSSONAMEVERSIONSUFFIX=".1"
5917                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
5918                     nsswitch/winbind_nss_linux.o"
5919                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5920                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5921                 ;;
5922
5923         *netbsd*[[3-9]]*)
5924                 # NetBSD winbind client is implemented as a wrapper
5925                 # around the Linux version. It needs getpwent_r() to
5926                 # indicate libc's use of the correct nsdispatch API.
5927                 #
5928                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5929                         WINBIND_NSS_EXTRA_OBJS="\
5930                             nsswitch/winbind_nss_netbsd.o \
5931                             nsswitch/winbind_nss_linux.o"
5932                         WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5933                         WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5934                 else
5935                         HAVE_WINBIND=no
5936                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5937                 fi
5938                 ;;
5939         *irix*)
5940                 # IRIX has differently named shared libraries
5941                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
5942                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
5943                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
5944                 ;;
5945         *solaris*)
5946                 # Solaris winbind client is implemented as a wrapper around
5947                 # the Linux version.
5948                 NSSSONAMEVERSIONSUFFIX=".1"
5949                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
5950                     nsswitch/winbind_nss_linux.o"
5951                 WINBIND_NSS_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
5952                 PAM_WINBIND_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
5953                 ;;
5954         *hpux11*)
5955                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
5956                 ;;
5957         *aix*)
5958                 # AIX has even differently named shared libraries.  No
5959                 # WINS support has been implemented yet.
5960                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
5961                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5962                 WINBIND_NSS="nsswitch/WINBIND"
5963                 WINBIND_WINS_NSS=""
5964                 ;;
5965         *)
5966                 HAVE_WINBIND=no
5967                 winbind_no_reason=", unsupported on $host_os"
5968                 ;;
5969 esac
5970
5971 # Check the setting of --with-winbind
5972
5973 AC_ARG_WITH(winbind,
5974 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
5975 [
5976   case "$withval" in
5977         yes)
5978                 HAVE_WINBIND=yes
5979                 ;;
5980         no)
5981                 HAVE_WINBIND=no
5982                 winbind_reason=""
5983                 ;;
5984   esac ],
5985 )
5986
5987 # We need unix domain sockets for winbind
5988
5989 if test x"$HAVE_WINBIND" = x"yes"; then
5990         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
5991                 winbind_no_reason=", no unix domain socket support on $host_os"
5992                 HAVE_WINBIND=no
5993         fi
5994 fi
5995
5996 # Display test results
5997
5998 if test x"$HAVE_WINBIND" = x"no"; then
5999         WINBIND_NSS=""
6000         WINBIND_WINS_NSS=""
6001 fi
6002
6003 if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
6004         BUILD_LIBWBCLIENT_SHARED=no
6005 else
6006         BUILD_LIBWBCLIENT_SHARED=yes
6007 fi
6008
6009 LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
6010 LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
6011 LIBWBCLIENT_SOVER=0
6012 if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
6013         NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6014         ## Only worry about libwbclient if we have shared library support
6015         ## and winbindd
6016         LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
6017         LIBWBCLIENT=libwbclient
6018         INSTALL_LIBWBCLIENT=installlibwbclient
6019         UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
6020         WINBIND_LIBS="-lwbclient"
6021 else
6022         LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
6023 fi
6024
6025 if test x"$HAVE_WINBIND" = x"yes"; then
6026         AC_MSG_RESULT(yes)
6027         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6028
6029         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6030         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6031         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6032                 PAM_MODULES="$PAM_MODULES pam_winbind"
6033                 INSTALL_PAM_MODULES="installpammodules"
6034                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6035         fi
6036 else
6037         AC_MSG_RESULT(no$winbind_no_reason)
6038 fi
6039
6040 AC_CHECK_LIB(pthread, pthread_mutex_lock, [WINBIND_NSS_PTHREAD="-lpthread"
6041                         AC_DEFINE(HAVE_PTHREAD, 1, [whether pthread exists])])
6042
6043 AC_SUBST(WINBIND_NSS_PTHREAD)
6044 AC_SUBST(WINBIND_NSS)
6045 AC_SUBST(WINBIND_WINS_NSS)
6046 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
6047 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
6048 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
6049 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
6050 AC_SUBST(PAM_WINBIND_EXTRA_LIBS)
6051
6052 AC_SUBST(WINBIND_KRB5_LOCATOR)
6053
6054 # Solaris 10 does have new member in nss_XbyY_key
6055 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6056                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6057                 [#include <nss_dbdefs.h>])
6058
6059 # Solaris has some extra fields in struct passwd that need to be
6060 # initialised otherwise nscd crashes.
6061
6062 AC_CHECK_MEMBER(struct passwd.pw_comment,
6063                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6064                 [#include <pwd.h>])
6065
6066 AC_CHECK_MEMBER(struct passwd.pw_age,
6067                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6068                 [#include <pwd.h>])
6069
6070 # AIX 4.3.x and 5.1 do not have as many members in
6071 # struct secmethod_table as AIX 5.2
6072 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6073        [#include <usersec.h>])
6074 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6075        [#include <usersec.h>])
6076
6077 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6078 AC_TRY_COMPILE([#include <sys/types.h>
6079 #include <sys/socket.h>],
6080 [struct ucred cred;
6081  socklen_t cred_len;
6082  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6083 ],
6084 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6085 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6086     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6087 fi
6088
6089
6090 #################################################
6091 # Check to see if we should use the included popt
6092
6093 AC_ARG_WITH(included-popt,
6094 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
6095 [
6096   case "$withval" in
6097         yes)
6098                 INCLUDED_POPT=yes
6099                 ;;
6100         no)
6101                 INCLUDED_POPT=no
6102                 ;;
6103   esac ],
6104 )
6105 if test x"$INCLUDED_POPT" != x"yes"; then
6106     AC_CHECK_LIB(popt, poptGetContext,
6107                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6108 fi
6109
6110 AC_MSG_CHECKING(whether to use included popt)
6111 if test x"$INCLUDED_POPT" = x"yes"; then
6112     AC_MSG_RESULT(yes)
6113     BUILD_POPT='$(POPT_OBJ)'
6114     POPTLIBS='$(POPT_OBJ)'
6115     FLAGS1="-I\$(srcdir)/popt"
6116 else
6117     AC_MSG_RESULT(no)
6118         BUILD_POPT=""
6119     POPTLIBS="-lpopt"
6120 fi
6121 AC_SUBST(BUILD_POPT)
6122 AC_SUBST(POPTLIBS)
6123 AC_SUBST(FLAGS1)
6124
6125 #################################################
6126 # Check if user wants DNS service discovery support
6127
6128 AC_ARG_ENABLE(dnssd,
6129 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=auto)])])
6130
6131 AC_SUBST(DNSSD_LIBS)
6132 if test x"$enable_dnssd" != x"no"; then
6133     have_dnssd_support=yes
6134
6135     AC_CHECK_HEADERS(dns_sd.h)
6136     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6137         have_dnssd_support=no
6138     fi
6139
6140     # On Darwin the DNSSD API is in libc, but on other platforms it's
6141     # probably in -ldns_sd
6142     AC_CHECK_FUNCS(DNSServiceRegister)
6143     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6144     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6145             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6146         have_dnssd_support=no
6147     fi
6148
6149     if test x"$have_dnssd_support" = x"yes"; then
6150         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6151                 [Whether to enable DNS service discovery support])
6152     else
6153         if test x"$enable_dnssd" = x"yes"; then
6154             AC_MSG_ERROR(DNS service discovery support not available)
6155         fi
6156     fi
6157
6158 fi
6159
6160 #################################################
6161 # Check to see if we should use the included iniparser
6162
6163 AC_ARG_WITH(included-iniparser,
6164 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6165 [
6166   case "$withval" in
6167         yes)
6168                 INCLUDED_INIPARSER=yes
6169                 ;;
6170         no)
6171                 INCLUDED_INIPARSER=no
6172                 ;;
6173   esac ],
6174 )
6175 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6176     AC_CHECK_LIB(iniparser, iniparser_load,
6177                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6178 fi
6179
6180 AC_MSG_CHECKING(whether to use included iniparser)
6181 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6182     AC_MSG_RESULT(yes)
6183     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6184         INIPARSERLIBS=""
6185     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
6186 else
6187     AC_MSG_RESULT(no)
6188         BUILD_INIPARSER=""
6189     INIPARSERLIBS="-liniparser"
6190 fi
6191 AC_SUBST(BUILD_INIPARSER)
6192 AC_SUBST(INIPARSERLIBS)
6193 AC_SUBST(FLAGS1)
6194
6195
6196
6197 # Checks for the vfs_fileid module
6198 # Start
6199 AC_CHECK_FUNC(getmntent)
6200
6201 AC_CHECK_HEADERS(sys/statfs.h)
6202
6203 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
6204 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6205              AC_TRY_RUN([
6206                 #include <sys/types.h>
6207                 #include <sys/statfs.h>
6208                 int main(void)
6209                 {
6210                         struct statfs fsd;
6211                         fsid_t fsid = fsd.f_fsid;
6212                         return statfs (".", &fsd);
6213                 }],
6214                 vfsfileid_cv_statfs=yes,
6215                 vfsfileid_cv_statfs=no,
6216                 vfsfileid_cv_statfs=cross)
6217 ])
6218 AC_MSG_RESULT($vfsfileid_cv_statfs)
6219
6220 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6221         x"$vfsfileid_cv_statfs" = x"yes"; then
6222         default_shared_modules="$default_shared_modules vfs_fileid"
6223 fi
6224 # End
6225 # Checks for the vfs_fileid module
6226
6227
6228 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6229 do
6230         eval MODULE_DEFAULT_$i=STATIC
6231 done
6232
6233 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6234 do
6235         dnl Fall back to static if we cannot build shared libraries
6236         eval MODULE_DEFAULT_$i=STATIC
6237
6238         if test $BLDSHARED = true; then
6239                 eval MODULE_DEFAULT_$i=SHARED
6240         fi
6241 done
6242
6243 dnl Always build these modules static
6244 MODULE_rpc_spoolss=STATIC
6245 MODULE_rpc_srvsvc=STATIC
6246 MODULE_idmap_tdb=STATIC
6247 MODULE_idmap_passdb=STATIC
6248 MODULE_idmap_nss=STATIC
6249
6250 MODULE_nss_info_template=STATIC
6251
6252 AC_ARG_WITH(static-modules,
6253 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6254 [ if test $withval; then
6255         for i in `echo $withval | sed -e 's/,/ /g'`
6256         do
6257                 eval MODULE_$i=STATIC
6258         done
6259 fi ])
6260
6261 AC_ARG_WITH(shared-modules,
6262 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6263 [ if test $withval; then
6264         for i in `echo $withval | sed -e 's/,/ /g'`
6265         do
6266                         eval MODULE_$i=SHARED
6267         done
6268 fi ])
6269
6270 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
6271                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6272 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6273 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6274 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6275
6276
6277 SMB_MODULE(rpc_lsarpc, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
6278 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
6279 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
6280 SMB_MODULE(rpc_dssetup, \$(RPC_DSSETUP_OBJ), "bin/librpc_dssetup.$SHLIBEXT", RPC)
6281 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6282 SMB_MODULE(rpc_svcctl2, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl2.$SHLIBEXT", RPC)
6283 SMB_MODULE(rpc_ntsvcs2, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs2.$SHLIBEXT", RPC)
6284 SMB_MODULE(rpc_netlogon, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6285 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6286 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc.$SHLIBEXT", RPC)
6287 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6288 SMB_MODULE(rpc_eventlog2, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog2.$SHLIBEXT", RPC)
6289 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6290 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
6291 SMB_SUBSYSTEM(RPC,smbd/server.o)
6292
6293 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6294 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6295 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6296 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6297 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6298 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6299 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6300 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6301
6302 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6303 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6304
6305 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6306 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6307 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6308 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6309 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6310
6311 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6312 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6313 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6314 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6315 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6316 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6317 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6318 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6319
6320 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6321 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6322 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6323 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6324 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6325 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6326 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6327 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6328 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6329 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6330 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6331 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6332 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6333 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6334 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6335 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6336 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6337 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6338 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6339 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6340 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6341 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6342 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6343 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6344 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6345 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6346 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6347 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6348 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6349 SMB_MODULE(vfs_gpfs_prefetch, \$(VFS_GPFS_PREFETCH_OBJ), "bin/gpfs_prefetch.$SHLIBEXT", VFS)
6350 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6351 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6352 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6353 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6354 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6355 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6356 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6357 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6358 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6359
6360
6361 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6362
6363 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6364
6365 #################################################
6366 # do extra things if we are running insure
6367
6368 if test "${ac_cv_prog_CC}" = "insure"; then
6369         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6370 fi
6371
6372 #################################################
6373 # If run from the build farm, enable NASTY hacks
6374 #################################################
6375 AC_MSG_CHECKING(whether to enable build farm hacks)
6376 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6377         AC_MSG_RESULT(yes)
6378         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6379 else
6380         AC_MSG_RESULT(no)
6381 fi
6382
6383 #################################################
6384 # check for bad librt/libpthread interactions
6385
6386 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6387     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6388     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6389     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6390
6391 SMB_IF_RTSIGNAL_BUG(
6392         [
6393             # Have RT_SIGNAL bug, need to check whether the problem will
6394             # affect anything we have configured.
6395
6396             rt_do_error=no
6397             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6398                 if test x"$rt_signal_lease_ok" = x"no" ; then
6399                     rt_do_error=yes
6400                 fi
6401             fi
6402
6403             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6404                 if test x"$rt_signal_notify_ok" = x"no" ; then
6405                     rt_do_error=yes
6406                 fi
6407             fi
6408
6409             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6410                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6411                 if test x"$rt_signal_aio_ok" = x"no" ; then
6412                     rt_do_error=yes
6413                 fi
6414             fi
6415
6416             if test x"$rt_do_error" = x"yes" ; then
6417                 SMB_IS_LIBPTHREAD_LINKED(
6418                     [
6419                         cat<<MSG
6420
6421 *** On this platforms, linking Samba against pthreads causes problems
6422 *** with the oplock and change notification mechanisms. You may be
6423 *** using pthreads as a side-effect of using the --with-aio-support
6424 *** or --with-profiling-data options. Please remove these and try again.
6425
6426 MSG
6427                     ],
6428                     [
6429                         cat<<MSG
6430
6431 *** On this platform, the oplock and change notification mechanisms do not
6432 *** appear to work. Please report this problem to samba-technical@samba.org
6433 *** and attach the config.log file from this directory.
6434
6435 MSG
6436                     ])
6437                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6438             fi
6439         ],
6440         [
6441             # no RT_SIGNAL bug, we are golden
6442             SMB_IS_LIBPTHREAD_LINKED(
6443                 [
6444                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6445                 ])
6446
6447         ],
6448         [
6449             # cross compiling, I hope you know what you are doing
6450             true
6451         ])
6452
6453 fi
6454
6455 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6456 LIB_REMOVE_USR_LIB(LDFLAGS)
6457 LIB_REMOVE_USR_LIB(LIBS)
6458 LIB_REMOVE_USR_LIB(KRB5_LIBS)
6459
6460 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6461 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6462 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6463
6464 #################################################
6465 # Display summary of libraries detected
6466
6467 AC_MSG_RESULT([Using libraries:])
6468 AC_MSG_RESULT([    LIBS = $LIBS])
6469 if test x"$with_ads_support" != x"no"; then
6470     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6471 fi
6472 if test x"$with_ldap_support" != x"no"; then
6473     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6474 fi
6475 if test x"$with_dnsupdate_support" != x"no"; then
6476     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6477 fi
6478 if test x"$have_dnssd_support" != x"no"; then
6479     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6480 fi
6481 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6482
6483 #################################################
6484 # final configure stuff
6485
6486 AC_MSG_CHECKING([configure summary])
6487 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
6488            AC_MSG_RESULT(yes),
6489            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6490            AC_MSG_WARN([cannot run when cross-compiling]))
6491
6492 dnl Merge in developer cflags from now on
6493 AC_SUBST(DEVELOPER_CFLAGS)
6494 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes"; then
6495     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
6496 fi
6497
6498 # Stuff the smbd-only libraries at the end of the smbd link
6499 # path (if we have them).
6500 SMBD_LIBS="$samba_dmapi_libs"
6501 AC_SUBST(SMBD_LIBS)
6502
6503 AC_OUTPUT(Makefile
6504           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
6505           lib/netapi/examples/Makefile
6506           pkgconfig/smbclient.pc
6507           pkgconfig/wbclient.pc
6508           pkgconfig/netapi.pc
6509           pkgconfig/smbsharemodes.pc
6510           )
6511
6512 #################################################
6513 # Print very concise instructions on building/use
6514 if test "x$enable_dmalloc" = xyes
6515 then
6516         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6517         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
6518 fi