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