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