build: fix build on systems with picky make and without shared libwbclient
[Samba.git] / source / configure.in
blob9a230dece6ef0d1a5a5218e799350cc8626ec311
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                         # use expfull to export underscored symbols
1604                         # add rtl to remove /lib/crt0.o warning
1605                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1606                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1607                         PICFLAG="-O2"
1608                         # as AIX code is always position independent...
1609                         # .po will just create compile warnings, use po.o:
1610                         if test "${GCC}" != "yes"; then
1611                                 ## for funky AIX compiler using strncpy()
1612                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1613                         fi
1615                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1616                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1617                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1618                         ;;
1619                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1620                         # Use special PIC flags for the native HP-UX compiler.
1621                                 BLDSHARED="true"
1622                                 SHLD="cc"
1623                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1624                                 SONAMEFLAG="-Wl,+h "
1625                                 PICFLAG="+z"
1626                         if test "${GCC}" = "yes"; then
1627                                 PICFLAG="-fPIC"
1628                         else
1629                                 PICFLAG="+z +ESnolit"
1630                         fi
1631                         if test "$host_cpu" = "ia64"; then
1632                                 SHLIBEXT="so"
1633                               PICFLAG="+z"
1634                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1635                         else
1636                                 SHLIBEXT="sl"
1637                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1638                         fi
1639                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1640                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1641                         ;;
1642                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1643                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1644                         ;;
1645                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1646                         BLDSHARED="true"
1647                         LDSHFLAGS="-shared"
1648                         SONAMEFLAG="-Wl,-soname,"
1649                         PICFLAG="-fPIC"
1650                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1651                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1652                         ;;
1653                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1654                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1655                         ;;
1656                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1657                         BLDSHARED="true"
1658                         LDSHFLAGS="-shared"
1659                         SONAMEFLAG="-Wl,-soname,"
1660                         PICFLAG="-KPIC"
1661                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1662                         ;;
1663                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1664                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1665                         ;;
1666                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1667                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1668                         ;;
1669                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1670                         case "$host" in
1671                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1672                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1673                                         fi
1674                                         LDSHFLAGS="-G"
1675                                         DYNEXP="-Bexport"
1676                                 ;;
1677                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1678                         esac
1679                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1680                         ;;
1682                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1683                         if [ test "$GCC" != yes ]; then
1684                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1685                         fi
1686                         LDSHFLAGS="-G"
1687                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1688                         ;;
1689                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1690                         BLDSHARED="false"
1691                         LDSHFLAGS=""
1692                         ;;
1694                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1695                         BLDSHARED="true"
1696                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1697                         CFLAGS="$CFLAGS -fno-common"
1698                         SHLD="\${CC}"
1699                         SHLIBEXT="dylib"
1700                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1701                         SHLIBEXT="dylib"
1702                         # Since gcc doesn't fail on unrecognised options, the
1703                         # PIE test incorrectly succeeds. Darwin gcc does not
1704                         # actually support the PIE stuff.
1705                         PIE_LDFLAGS=
1706                         PIE_CFLAGS=
1707                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1708                         ;;
1710                 *)
1711                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1712                         ;;
1713   esac
1715 if test "$enable_shared" != "yes"; then
1716         BLDSHARED=false
1719 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1720         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1723 if test x"$BLDSHARED" = x"true" ; then
1724         LDFLAGS="$LDFLAGS -L./bin"
1727 AC_MSG_RESULT($BLDSHARED)
1729 AC_MSG_CHECKING([LDFLAGS])
1730 AC_MSG_RESULT([$LDFLAGS])
1731 AC_MSG_CHECKING([DYNEXP])
1732 AC_MSG_RESULT([$DYNEXP])
1734 #######################################################
1735 # test whether building a shared library actually works
1736 if test $BLDSHARED = true; then
1738 AC_MSG_CHECKING([SHLD])
1739 AC_MSG_RESULT([$SHLD])
1740 AC_MSG_CHECKING([LDSHFLAGS])
1741 AC_MSG_RESULT([$LDSHFLAGS])
1743 AC_MSG_CHECKING([SHLIBEXT])
1744 AC_MSG_RESULT([$SHLIBEXT])
1745 AC_MSG_CHECKING([SONAMEFLAG])
1746 AC_MSG_RESULT([$SONAMEFLAG])
1748 AC_MSG_CHECKING([PICFLAG])
1749 AC_MSG_RESULT([$PICFLAG])
1751 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1752 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1754 AC_CACHE_CHECK([whether building shared libraries actually works],
1755                [ac_cv_shlib_works],[
1756    # try building a trivial shared library
1757    ac_cv_shlib_works=no
1758    # The $SHLD and $LDSHFLAGS variables may contain references to other
1759    # variables so they need to be eval'ed.
1760    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1761         shlib.o ${srcdir-.}/tests/shlib.c && \
1762    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1763         shlib.o && ac_cv_shlib_works=yes
1764    rm -f "shlib.$SHLIBEXT" shlib.o
1767 if test $ac_cv_shlib_works = no; then
1768    BLDSHARED=false
1772 if test x"$BLDSHARED" != x"true"; then
1773         LDSHFLAGS="shared-libraries-disabled"
1774         SONAMEFLAG="shared-libraries-disabled"
1775         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1776         SHLD="shared-libraries-disabled"
1777         PICFLAG="${PIE_CFLAGS}"
1778         SHLIBEXT="shared_libraries_disabled"
1781 AC_MSG_CHECKING([used PICFLAG])
1782 AC_MSG_RESULT([$PICFLAG])
1784 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1786 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
1788 ################
1790 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1791 AC_TRY_RUN([#include <stdio.h>
1792 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1793 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1794 if test x"$samba_cv_have_longlong" = x"yes"; then
1795     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1796     AC_CHECK_TYPE(intptr_t, unsigned long long)
1797 else
1798     AC_CHECK_TYPE(intptr_t, unsigned long)
1802 # Check if the compiler supports the LL prefix on long long integers.
1803 # AIX needs this.
1805 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1806     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1807         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1808 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1809    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1813 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
1814 AC_TRY_RUN([#include <time.h>
1815 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
1816 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
1817 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
1818     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
1821 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1822 AC_TRY_RUN([#include <stdio.h>
1823 #include <sys/stat.h>
1824 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1825 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1826 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1827     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1830 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1831 AC_TRY_RUN([
1832 #if defined(HAVE_UNISTD_H)
1833 #include <unistd.h>
1834 #endif
1835 #include <stdio.h>
1836 #include <sys/stat.h>
1837 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1838 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1839 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1840     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1843 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1844 AC_TRY_RUN([
1845 #if defined(HAVE_UNISTD_H)
1846 #include <unistd.h>
1847 #endif
1848 #include <stdio.h>
1849 #include <sys/stat.h>
1850 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1851 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1852 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1853     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1856 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1857 AC_TRY_RUN([
1858 #if defined(HAVE_UNISTD_H)
1859 #include <unistd.h>
1860 #endif
1861 #include <stdio.h>
1862 #include <sys/stat.h>
1863 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1864 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1865 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1866     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1869 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
1870 AC_TRY_RUN([
1871 #if defined(HAVE_UNISTD_H)
1872 #include <unistd.h>
1873 #endif
1874 #include <stdio.h>
1875 #include <sys/stat.h>
1876 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
1877 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
1878 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
1879     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
1882 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
1883 AC_TRY_RUN([
1884 #if defined(HAVE_UNISTD_H)
1885 #include <unistd.h>
1886 #endif
1887 #include <stdio.h>
1888 #include <sys/stat.h>
1889 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1890 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
1891 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
1892     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
1895 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
1896 AC_TRY_COMPILE([
1897 #if defined(HAVE_UNISTD_H)
1898 #include <unistd.h>
1899 #endif
1900 #include <sys/types.h>
1901 #include <dirent.h>],
1902 [DIR64 de;],
1903 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
1904 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1905     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
1908 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
1909 AC_TRY_COMPILE([
1910 #if defined(HAVE_UNISTD_H)
1911 #include <unistd.h>
1912 #endif
1913 #include <sys/types.h>
1914 #include <dirent.h>],
1915 [struct dirent64 de;],
1916 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
1917 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1918     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
1921 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
1922 AC_TRY_RUN([
1923 #if defined(HAVE_UNISTD_H)
1924 #include <unistd.h>
1925 #endif
1926 #include <sys/types.h>
1927 main() { dev_t dev; int i = major(dev); return 0; }],
1928 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
1929 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
1930     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
1933 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
1934 AC_TRY_RUN([
1935 #if defined(HAVE_UNISTD_H)
1936 #include <unistd.h>
1937 #endif
1938 #include <sys/types.h>
1939 main() { dev_t dev; int i = minor(dev); return 0; }],
1940 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
1941 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
1942     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
1945 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
1946 AC_TRY_RUN([
1947 #if defined(HAVE_UNISTD_H)
1948 #include <unistd.h>
1949 #endif
1950 #include <sys/types.h>
1951 main() { dev_t dev = makedev(1,2); return 0; }],
1952 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
1953 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
1954     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
1957 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
1958 AC_TRY_RUN([#include <stdio.h>
1959 main() { char c; c=250; exit((c > 0)?0:1); }],
1960 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
1961 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
1962     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
1965 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
1966 AC_TRY_COMPILE([#include <sys/types.h>
1967 #include <dirent.h>
1968 void seekdir(DIR *d, long loc) { return; }],[return 0;],
1969 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
1970 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
1971     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
1974 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
1975 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
1976 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
1977 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
1978     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
1981 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
1982 AC_TRY_LINK([
1983 #include <sys/time.h>
1984 #include <unistd.h>], [struct timeval tv; return gettimeofday(&tv, NULL);],
1985            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,
1986            samba_cv_HAVE_GETTIMEOFDAY_TZ=no)])
1987 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
1988     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday takes a tz argument])
1991 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
1993     # On some systems (eg. Linux) librt can pull in libpthread. We
1994     # don't want this to happen because libpthreads changes signal delivery
1995     # semantics in ways we are not prepared for. This breaks Linux oplocks
1996     # which rely on signals.
1998     AC_LIBTESTFUNC(rt, clock_gettime,
1999             [
2000                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2001                                 [Whether clock_gettime is available])
2002                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2003                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2004                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2005                         ])
2009 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2010 AC_TRY_RUN([#include <sys/types.h>
2011 #include <dirent.h>
2012 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2013 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2014 di->d_name[0] == 0) exit(0); exit(1);} ],
2015 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2016 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2017     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2020 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2021 AC_TRY_COMPILE([#include <sys/types.h>
2022 #include <utime.h>],
2023 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2024 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2025 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2026     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2029 ##############
2030 # Check utmp details, but only if our OS offers utmp.h
2031 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2032 dnl  utmp and utmpx come in many flavours
2033 dnl  We need to check for many of them
2034 dnl  But we don't need to do each and every one, because our code uses
2035 dnl  mostly just the utmp (not utmpx) fields.
2037 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2039 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2040 AC_TRY_COMPILE([#include <sys/types.h>
2041 #include <utmp.h>],
2042 [struct utmp ut;  ut.ut_name[0] = 'a';],
2043 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2044 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2045     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2048 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2049 AC_TRY_COMPILE([#include <sys/types.h>
2050 #include <utmp.h>],
2051 [struct utmp ut;  ut.ut_user[0] = 'a';],
2052 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2053 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2054     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2057 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2058 AC_TRY_COMPILE([#include <sys/types.h>
2059 #include <utmp.h>],
2060 [struct utmp ut;  ut.ut_id[0] = 'a';],
2061 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2062 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2063     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2066 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2067 AC_TRY_COMPILE([#include <sys/types.h>
2068 #include <utmp.h>],
2069 [struct utmp ut;  ut.ut_host[0] = 'a';],
2070 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2071 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2072     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2075 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2076 AC_TRY_COMPILE([#include <sys/types.h>
2077 #include <utmp.h>],
2078 [struct utmp ut;  time_t t; ut.ut_time = t;],
2079 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2080 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2081     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2084 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2085 AC_TRY_COMPILE([#include <sys/types.h>
2086 #include <utmp.h>],
2087 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2088 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2089 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2090     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2093 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2094 AC_TRY_COMPILE([#include <sys/types.h>
2095 #include <utmp.h>],
2096 [struct utmp ut;  ut.ut_type = 0;],
2097 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2098 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2099     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2102 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2103 AC_TRY_COMPILE([#include <sys/types.h>
2104 #include <utmp.h>],
2105 [struct utmp ut;  ut.ut_pid = 0;],
2106 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2107 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2108     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2111 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2112 AC_TRY_COMPILE([#include <sys/types.h>
2113 #include <utmp.h>],
2114 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2115 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2116 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2117     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2120 dnl Look for the IPv6 varient by preference. Many systems have both.
2121 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2122 AC_TRY_COMPILE([#include <sys/types.h>
2123 #include <utmp.h>],
2124 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2125 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2126 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2127     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2130 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2131 AC_TRY_COMPILE([#include <sys/types.h>
2132 #include <utmp.h>],
2133 [struct utmp ut;  ut.ut_addr = 0;],
2134 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2135 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2136     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2139 if test x$ac_cv_func_pututline = xyes ; then
2140   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2141   AC_TRY_COMPILE([#include <sys/types.h>
2142 #include <utmp.h>],
2143   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2144   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2145   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2146       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2147   fi
2150 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2151 AC_TRY_COMPILE([#include <sys/types.h>
2152 #include <utmpx.h>],
2153 [struct utmpx ux;  ux.ut_syslen = 0;],
2154 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2155 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2156     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2160 # end utmp details
2163 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2164 AC_ARG_WITH(libiconv,
2165 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2167   if test "$withval" = "no" ; then
2168     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2169   else
2170      if test "$withval" != "yes" ; then
2171         ICONV_PATH_SPEC=yes
2172         ICONV_LOOK_DIRS="$withval"
2173      fi
2174   fi
2177 for i in $ICONV_LOOK_DIRS ; do
2179     save_LIBS="$LIBS"
2180     save_LDFLAGS="$LDFLAGS"
2181     save_CPPFLAGS="$CPPFLAGS"
2183     iconv_current_LIBS=""
2184     iconv_current_LDFLAGS=""
2185     iconv_current_CPPFLAGS=""
2187     ICONV_FOUND="no"
2188     unset libext
2190     #  This is here to handle -withval stuff for --with-libiconv
2191     #  Perhaps we should always add a -L
2192     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2194     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2195     # installation paths. This gets a little tricky since we might have iconv
2196     # in both libiconv and in libc. In this case the jm_ICONV test will always
2197     # succeed when the header is found. To counter this, make sure the
2198     # library directory is there and check the ABI directory first (which
2199     # should be harmless on other systems.
2200     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2201     for l in "lib32" "lib" "lib/hpux32"; do
2202         if test -d "$i/$l" ; then
2203                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2204                 LIBS=
2205                 export LDFLAGS LIBS CPPFLAGS
2206                 # Try to find iconv(3)
2207                 jm_ICONV($i/$l)
2208                 if test x"$ICONV_FOUND" = "xyes" ; then
2209                     libext="$l"
2210                     break
2211                 fi
2212         fi
2213     done
2215     if test x"$ICONV_FOUND" = "xyes" ; then
2216         iconv_current_LDFLAGS="-L$i/$libext"
2217         iconv_current_CPPFLAGS="-I$i/include"
2219         if test x"$jm_cv_lib_iconv" != x; then
2220             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2221         else
2222             # We found iconv in libc.
2223             iconv_current_LIBS=""
2224         fi
2226     fi
2228     if test x"$ICONV_FOUND" = "xyes" ; then
2230         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2231         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2232         LIBS="$save_LIBS $iconv_current_LIBS"
2233         export LDFLAGS LIBS CPPFLAGS
2235         default_dos_charset=no
2236         default_display_charset=no
2237         default_unix_charset=no
2239         # check for default dos charset name
2240         for j in CP850 IBM850 ; do
2241             rjs_CHARSET($j)
2242             default_dos_charset="$ICONV_CHARSET"
2243             if test x"$default_dos_charset" = x"$j"; then
2244                 break
2245             fi
2246         done
2248         # check for default display charset name
2249         for j in ASCII 646 ; do
2250             rjs_CHARSET($j)
2251             default_display_charset="$ICONV_CHARSET"
2252             if test x"$default_display_charset" = x"$j"; then
2253                 break
2254             fi
2255         done
2257         # check for default unix charset name
2258         for j in UTF-8 UTF8 ; do
2259             rjs_CHARSET($j)
2260             default_unix_charset="$ICONV_CHARSET"
2261             if test x"$default_unix_charset" = x"$j"; then
2262                 break
2263             fi
2264         done
2266         if test "$default_dos_charset" != "no" -a \
2267                 "$default_dos_charset" != "cross" -a \
2268                 "$default_display_charset" != "no" -a \
2269                 "$default_display_charset" != "cross" -a \
2270                 "$default_unix_charset" != "no" -a \
2271                 "$default_unix_charset" != "cross"
2272         then
2273                 samba_cv_HAVE_NATIVE_ICONV=yes
2274         else
2275             if test "$default_dos_charset" = "cross" -o \
2276                      "$default_display_charset" = "cross" -o \
2277                      "$default_unix_charset" = "cross"
2278             then
2279                     samba_cv_HAVE_NATIVE_ICONV=cross
2280             else
2281                     samba_cv_HAVE_NATIVE_ICONV=no
2282             fi
2283         fi
2285         # At this point, we have a libiconv candidate. We know that
2286         # we have the right headers and libraries, but we don't know
2287         # whether it does the conversions we want. We can't test this
2288         # because we are cross-compiling. This is not necessarily a big
2289         # deal, since we can't guarantee that the results we get now will
2290         # match the results we get at runtime anyway.
2291         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2292             default_dos_charset="CP850"
2293             default_display_charset="ASCII"
2294             default_unix_charset="UTF-8"
2295             samba_cv_HAVE_NATIVE_ICONV=yes
2296             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2297             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2298         fi
2300         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2302             CPPFLAGS=$save_CPPFLAGS
2303             LDFLAGS=$save_LDFLAGS
2304             LIBS=$save_LIBS
2306             if test x"$iconv_current_LIBS" != x; then
2307                 LIBS="$LIBS $iconv_current_LIBS"
2308             fi
2310             # Add the flags we need to CPPFLAGS and LDFLAGS
2311             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2312             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2314             # Turn the #defines into string literals
2315             default_dos_charset="\"$default_dos_charset\""
2316             default_display_charset="\"$default_display_charset\""
2317             default_unix_charset="\"$default_unix_charset\""
2319             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2320             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2321             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2322             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2324            break
2325         fi
2327     # We didn't find a working iconv, so keep going
2328     fi
2330     #  We only need to clean these up here for the next pass through the loop
2331     CPPFLAGS=$save_CPPFLAGS
2332     LDFLAGS=$save_LDFLAGS
2333     LIBS=$save_LIBS
2334     export LDFLAGS LIBS CPPFLAGS
2335 done
2336 unset libext
2339 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2340     AC_MSG_WARN([Sufficient support for iconv function was not found.
2341     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2342    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2343    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2344    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2348 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2349 AC_TRY_RUN([
2350 #include <sys/types.h>
2351 #include <fcntl.h>
2352 #ifndef F_GETLEASE
2353 #define F_GETLEASE      1025
2354 #endif
2355 main() {
2356        int fd = open("/dev/null", O_RDONLY);
2357        return fcntl(fd, F_GETLEASE, 0) == -1;
2360 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2361 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2362     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2365 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2366 AC_TRY_RUN([
2367 #include <sys/types.h>
2368 #include <fcntl.h>
2369 #include <signal.h>
2370 #ifndef F_NOTIFY
2371 #define F_NOTIFY 1026
2372 #endif
2373 main() {
2374         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2377 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2378 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2379     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2382 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2383 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h)
2384 AC_CHECK_FUNCS(inotify_init)
2385 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2387 samba_cv_HAVE_INOTIFY=yes,
2388 samba_cv_HAVE_INOTIFY=no,
2389 samba_cv_HAVE_INOTIFY=cross)
2391 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2392     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2395 #################################################
2396 # Check if FAM notifications are available. For FAM info, see
2397 #       http://oss.sgi.com/projects/fam/
2398 #       http://savannah.nongnu.org/projects/fam/
2399 AC_ARG_ENABLE(fam,
2400 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2402 if test x$enable_fam != xno; then
2403     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2404     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2405         # On IRIX, libfam requires libC, but other FAM implementations
2406         # might not need it.
2407         AC_CHECK_LIB(fam, FAMOpen2,
2408             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"],
2409             [samba_cv_HAVE_LIBFAM=no])
2411         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2412             samba_fam_xtra=-lC
2413             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2414                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"],
2415                 [samba_cv_HAVE_LIBFAM=no])
2416             unset samba_fam_xtra
2417         fi
2418     fi
2420     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2421         default_shared_modules="$default_shared_modules vfs_notify_fam"
2422         AC_TRY_COMPILE([#include <fam.h>],
2423                     [FAMCodes code = FAMChanged;],
2424                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2425                         [Whether fam.h contains a typedef for enum FAMCodes]),
2426                     [])
2427     fi
2429     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2430         AC_MSG_ERROR(FAM support requested but FAM library not available )
2431     fi
2434 AC_SUBST(SMB_FAM_LIBS)
2436 #################################################
2437 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2439 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2441 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2442 # Theoretically it should work with AIX JFS2 too but this needs testing
2443 if test x"$samba_cv_HAVE_GPFS" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2444     default_shared_modules="$default_shared_modules vfs_tsmsm"
2447 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2448 AC_TRY_RUN([
2449 #include <sys/types.h>
2450 #include <fcntl.h>
2451 #include <signal.h>
2452 #include <sys/file.h>
2453 #ifndef LOCK_MAND
2454 #define LOCK_MAND       32
2455 #define LOCK_READ       64
2456 #endif
2457 main() {
2458         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2461 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2462 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2463     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2467 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2468 AC_TRY_COMPILE([#include <sys/types.h>
2469 #include <fcntl.h>],
2470 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2471 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2472 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2473     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2476 #################################################
2477 # Check for POSIX capability support
2479 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2480     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2481     [], [])
2483 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2485     ac_save_LIBS=$LIBS
2486     AC_LIBTESTFUNC(cap, cap_get_proc)
2488     AC_CACHE_CHECK([for POSIX capabilities],
2489             samba_cv_HAVE_POSIX_CAPABILITIES,
2490             [
2491                 AC_TRY_RUN([
2492 #include <sys/types.h>
2493 #include <sys/capability.h>
2494 main() {
2495  cap_t cap;
2496  cap_value_t vals[1];
2497  if (!(cap = cap_get_proc()))
2498    exit(1);
2499  vals[0] = CAP_CHOWN;
2500  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2501  cap_set_proc(cap);
2502  exit(0);
2504                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2505                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2506                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2507             ])
2509 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2510     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2511             [Whether POSIX capabilities are available])
2512 else
2513     LIBS=$ac_save_LIBS
2519 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2520 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2523 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2524 AC_TRY_COMPILE([#include <sys/types.h>
2525 #if defined(HAVE_RPC_RPC_H)
2526 #include <rpc/rpc.h>
2527 #endif],
2528 [int16 testvar;],
2529 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2530 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2531     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2534 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2535 AC_TRY_COMPILE([#include <sys/types.h>
2536 #if defined(HAVE_RPC_RPC_H)
2537 #include <rpc/rpc.h>
2538 #endif],
2539 [uint16 testvar;],
2540 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2541 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2542     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2545 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2546 AC_TRY_COMPILE([#include <sys/types.h>
2547 #if defined(HAVE_RPC_RPC_H)
2548 #include <rpc/rpc.h>
2549 #endif],
2550 [int32 testvar;],
2551 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2552 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2553     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2556 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2557 AC_TRY_COMPILE([#include <sys/types.h>
2558 #if defined(HAVE_RPC_RPC_H)
2559 #include <rpc/rpc.h>
2560 #endif],
2561 [uint32 testvar;],
2562 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2563 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2564     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2568 dnl Some systems (SCO) have a problem including
2569 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2570 dnl as a #define in <prot.h> and as part of an enum
2571 dnl in <rpc/rpc.h>.
2574 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2575 AC_TRY_COMPILE([#include <sys/types.h>
2576 #ifdef HAVE_SYS_SECURITY_H
2577 #include <sys/security.h>
2578 #include <prot.h>
2579 #endif  /* HAVE_SYS_SECURITY_H */
2580 #if defined(HAVE_RPC_RPC_H)
2581 #include <rpc/rpc.h>
2582 #endif],
2583 [int testvar;],
2584 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2585 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2586     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2589 AC_MSG_CHECKING([for test routines])
2590 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2591            AC_MSG_RESULT(yes),
2592            AC_MSG_ERROR([cant find test code. Aborting config]),
2593            AC_MSG_WARN([cannot run when cross-compiling]))
2595 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2596 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2597            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2598 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2599     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2602 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2603 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2604            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2605 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2606     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2609 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2610 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2611 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2612 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2613 AC_CHECK_FUNCS(getpagesize)
2615 ################################################
2616 # look for a method of setting the effective uid
2617 seteuid=no;
2618 if test $seteuid = no; then
2619 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2620 AC_TRY_RUN([
2621 #define AUTOCONF_TEST 1
2622 #define USE_SETRESUID 1
2623 #include "confdefs.h"
2624 #include "${srcdir-.}/lib/util_sec.c"],
2625            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2626 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2627     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2632 if test $seteuid = no; then
2633 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2634 AC_TRY_RUN([
2635 #define AUTOCONF_TEST 1
2636 #define USE_SETREUID 1
2637 #include "confdefs.h"
2638 #include "${srcdir-.}/lib/util_sec.c"],
2639            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2640 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2641     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2645 if test $seteuid = no; then
2646 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2647 AC_TRY_RUN([
2648 #define AUTOCONF_TEST 1
2649 #define USE_SETEUID 1
2650 #include "confdefs.h"
2651 #include "${srcdir-.}/lib/util_sec.c"],
2652            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2653 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2654     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2658 if test $seteuid = no; then
2659 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2660 AC_TRY_RUN([
2661 #define AUTOCONF_TEST 1
2662 #define USE_SETUIDX 1
2663 #include "confdefs.h"
2664 #include "${srcdir-.}/lib/util_sec.c"],
2665            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2666 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2667     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2671 AC_CACHE_CHECK([for the Darwin initgroups system call],
2672         samba_cv_DARWIN_INITGROUPS,
2673         AC_TRY_LINK([
2674 #include <sys/syscall.h>
2675 #include <unistd.h>
2676         ],
2677         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2678         samba_cv_DARWIN_INITGROUPS=yes,
2679         samba_cv_DARWIN_INITGROUPS=no)
2682 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2683     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2684         [Whether to use the Darwin-specific initgroups system call])
2687 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2688 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2689            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2690 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2691     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2694 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2695 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2696            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2697 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2698     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2700 else
2703 dnl Don't check for 64 bit fcntl locking if we know that the
2704 dnl glibc2.1 broken check has succeeded.
2707   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2708   AC_TRY_RUN([
2709 #if defined(HAVE_UNISTD_H)
2710 #include <unistd.h>
2711 #endif
2712 #include <stdio.h>
2713 #include <stdlib.h>
2715 #ifdef HAVE_FCNTL_H
2716 #include <fcntl.h>
2717 #endif
2719 #ifdef HAVE_SYS_FCNTL_H
2720 #include <sys/fcntl.h>
2721 #endif
2722 main() { struct flock64 fl64;
2723 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2724 exit(0);
2725 #else
2726 exit(1);
2727 #endif
2729        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2731   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2732       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2733   fi
2736 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2737 AC_TRY_COMPILE([#include <sys/types.h>
2738 #include <sys/stat.h>
2739 #include <unistd.h>],
2740 [struct stat st;  st.st_blocks = 0;],
2741 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2742 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2743     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2746 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2747 AC_TRY_COMPILE([#include <sys/types.h>
2748 #include <sys/stat.h>
2749 #include <unistd.h>],
2750 [struct stat st;  st.st_blksize = 0;],
2751 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2752 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2753     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2756 AC_CACHE_CHECK([for st_flags in struct stat],
2757         samba_cv_HAVE_STAT_ST_FLAGS,
2758         [
2759             AC_TRY_COMPILE([#include <sys/types.h>
2760 #include <sys/stat.h>
2761 #include <unistd.h>],
2762             [struct stat st;  st.st_flags = 0;],
2763             samba_cv_HAVE_STAT_ST_FLAGS=yes,
2764             samba_cv_HAVE_STAT_ST_FLAGS=no,
2765             samba_cv_HAVE_STAT_ST_FLAGS=cross)
2766         ])
2768 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
2769     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
2770                 [Whether the stat struct has a st_flags member])
2773 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2774 AC_TRY_COMPILE([
2775 #include <sys/types.h>
2776 #include <sys/acl.h>
2777 #if defined(HAVE_RPCSVC_NIS_H)
2778 #include <rpcsvc/nis.h>
2779 #endif],
2780 [int i;],
2781 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2782 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2783         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2786 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
2787 AC_TRY_RUN([
2788 #include <stdio.h>
2789 #include <limits.h>
2790 #include <signal.h>
2792 void exit_on_core(int ignored) {
2793         exit(1);
2796 main() {
2797         char *newpath;
2798         signal(SIGSEGV, exit_on_core);
2799         newpath = realpath("/tmp", NULL);
2800         exit((newpath != NULL) ? 0 : 1);
2803 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
2804 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
2805     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
2808 #################################################
2809 # check for AFS clear-text auth support
2810 samba_cv_WITH_AFS=no
2811 AC_MSG_CHECKING(whether to use AFS clear-text auth)
2812 AC_ARG_WITH(afs,
2813 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
2814 [ case "$withval" in
2815   yes|auto)
2816     AC_MSG_RESULT($withval)
2817     samba_cv_WITH_AFS=$withval
2818     ;;
2819   *)
2820     AC_MSG_RESULT(no)
2821     ;;
2822   esac ],
2823   AC_MSG_RESULT(no)
2826 ####################################################
2827 # check for Linux-specific AFS fake-kaserver support
2828 samba_cv_WITH_FAKE_KASERVER=no
2829 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2830 AC_ARG_WITH(fake-kaserver,
2831 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
2832 [ case "$withval" in
2833   yes|auto)
2834     AC_MSG_RESULT($withval)
2835     samba_cv_WITH_FAKE_KASERVER=$withval
2836     ;;
2837   *)
2838     AC_MSG_RESULT(no)
2839     ;;
2840   esac ],
2841   AC_MSG_RESULT(no)
2844 #################################################
2845 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
2846 if test x"$samba_cv_WITH_AFS" != x"no" ||
2847    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
2849     # see if this box has the afs-headers in /usr/include/afs
2850     AC_MSG_CHECKING(for /usr/include/afs)
2851     if test -d /usr/include/afs; then
2852           CFLAGS="$CFLAGS -I/usr/include/afs"
2853           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
2854           AC_MSG_RESULT(yes)
2855     else
2856       AC_MSG_RESULT(no)
2857     fi
2859     # check for afs.h
2860     have_afs_headers=no
2861     AC_CHECK_HEADERS(afs.h afs/afs.h)
2862     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
2863         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
2864            test x"$samba_cv_WITH_AFS" = x"auto"; then
2865                 AC_MSG_WARN([AFS cannot be supported without afs.h])
2866         else
2867                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
2868         fi
2869     else
2870         have_afs_headers=yes
2871     fi
2874 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
2875     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
2878 #################################################
2879 # check whether to compile AFS/NT ACL mapping module
2880 samba_cv_WITH_VFS_AFSACL=no
2881 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
2882 AC_ARG_WITH(vfs-afsacl,
2883 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
2884 [ case "$withval" in
2885   yes|auto)
2886     AC_MSG_RESULT($withval)
2887     samba_cv_WITH_VFS_AFSACL=yes
2888     ;;
2889   *)
2890     AC_MSG_RESULT(no)
2891     ;;
2892   esac ],
2893   AC_MSG_RESULT(no)
2896 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
2897    default_shared_modules="$default_shared_modules vfs_afsacl"
2899         
2900 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
2901     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
2904 #################################################
2905 # check for the DFS clear-text auth system
2906 AC_MSG_CHECKING(whether to use DFS clear-text auth)
2907 AC_ARG_WITH(dfs,
2908 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
2909 [ case "$withval" in
2910   yes)
2911     AC_MSG_RESULT(yes)
2912     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
2913     ;;
2914   *)
2915     AC_MSG_RESULT(no)
2916     ;;
2917   esac ],
2918   AC_MSG_RESULT(no)
2921 ########################################################
2922 # Compile with LDAP support?
2924 with_ldap_support=auto
2925 AC_MSG_CHECKING([for LDAP support])
2927 AC_ARG_WITH(ldap,
2928 [AS_HELP_STRING([--with-ldap], [LDAP support (default yes)])],
2929 [ case "$withval" in
2930     yes|no)
2931         with_ldap_support=$withval
2932         ;;
2933   esac ])
2935 AC_MSG_RESULT($with_ldap_support)
2937 SMBLDAP=""
2938 AC_SUBST(SMBLDAP)
2939 SMBLDAPUTIL=""
2940 AC_SUBST(SMBLDAPUTIL)
2941 LDBLDAP=""
2942 AC_SUBST(LDBLDAP)
2944 if test x"$with_ldap_support" != x"no"; then
2946   ##################################################################
2947   # first test for ldap.h and lber.h
2948   # (ldap.h is required for this test)
2949   AC_CHECK_HEADERS(ldap.h lber.h)
2951   if test x"$ac_cv_header_ldap_h" != x"yes"; then
2952         if test x"$with_ldap_support" = x"yes"; then
2953          AC_MSG_ERROR(ldap.h is needed for LDAP support)
2954         else
2955          AC_MSG_WARN(ldap.h is needed for LDAP support)
2956         fi
2957         
2958         with_ldap_support=no
2959   fi
2961   ##################################################################
2962   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
2963   # unsigned int in include/includes.h
2964   case $host_os in
2965         *hpux*)
2966          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
2967          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
2968         with_ldap_support=yes
2969         ;;
2970         *)
2971         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
2972         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
2973                 if test x"$with_ldap_support" = x"yes"; then
2974                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
2975                 else
2976                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
2977                 fi
2978                 with_ldap_support=no
2979         fi
2980         ;;
2981   esac
2984 if test x"$with_ldap_support" != x"no"; then
2985   ac_save_LIBS=$LIBS
2987   ##################################################################
2988   # we might need the lber lib on some systems. To avoid link errors
2989   # this test must be before the libldap test
2990   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
2992   ########################################################
2993   # If ber_sockbuf_add_io() is available we can add
2994   # SASL wrapping hooks
2995   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
2997   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
2998                  AC_TRY_COMPILE([#include <ldap.h>],
2999                                 [int val = LDAP_OPT_SOCKBUF;],
3000                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3001                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3003   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3004           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3005         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3006   fi
3008   #######################################################
3009   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3010   # ldap logging and print it out in the samba logs
3011   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3012                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3013                  [AC_TRY_COMPILE([#include <lber.h>],
3014                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3015                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3016                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3018   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3019         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3020                   [Support for LDAP/LBER logging interception])
3021   fi
3023   ########################################################
3024   # now see if we can find the ldap libs in standard paths
3025   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3027   ########################################################
3028   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3029   # Check found in pam_ldap 145.
3030   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3032   LIBS="$LIBS $LDAP_LIBS"
3033   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3034     AC_TRY_COMPILE([
3035         #include <lber.h>
3036         #include <ldap.h>],
3037         [ldap_set_rebind_proc(0, 0, 0);],
3038         [smb_ldap_cv_ldap_set_rebind_proc=3],
3039         [smb_ldap_cv_ldap_set_rebind_proc=2]
3040     )
3041   ])
3043   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3045   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3047   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3048     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3049     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3050     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3051     default_shared_modules="$default_shared_modules";
3052     SMBLDAP="lib/smbldap.o"
3053     SMBLDAPUTIL="lib/smbldap_util.o"
3054     with_ldap_support=yes
3055     AC_MSG_CHECKING(whether LDAP support is used)
3056     AC_MSG_RESULT(yes)
3057   else
3058     if test x"$with_ldap_support" = x"yes"; then
3059         AC_MSG_ERROR(libldap is needed for LDAP support)
3060     else
3061         AC_MSG_WARN(libldap is needed for LDAP support)
3062     fi
3064     LDAP_LIBS=""
3065     with_ldap_support=no
3066   fi
3067   LIBS=$ac_save_LIBS
3071 #################################################
3072 # active directory support
3074 with_ads_support=auto
3075 AC_MSG_CHECKING([for Active Directory and krb5 support])
3077 AC_ARG_WITH(ads,
3078 [AS_HELP_STRING([--with-ads], [Active Directory support (default auto)])],
3079 [ case "$withval" in
3080     yes|no)
3081         with_ads_support="$withval"
3082         ;;
3083   esac ])
3085 AC_MSG_RESULT($with_ads_support)
3087 FOUND_KRB5=no
3088 KRB5_LIBS=""
3090 if test x"$with_ldap_support" != x"yes"; then
3092     if test x"$with_ads_support" = x"yes"; then
3093         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3094     elif test x"$with_ads_support" = x"auto"; then
3095         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3096         with_ads_support=no
3097     fi
3099 else
3101     # Check to see whether there is enough LDAP functionality to be able
3102     # to build AD support.
3104 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3105 case "$host_os" in
3106         *hpux*)
3107     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3109     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3110         if test x"$with_ads_support" = x"yes"; then
3111             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3112         elif test x"$with_ads_support" = x"auto"; then
3113             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3114             with_ads_support=no
3115         fi
3116     fi
3117     ;;
3118         *)
3119     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3121     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3122         if test x"$with_ads_support" = x"yes"; then
3123             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3124         elif test x"$with_ads_support" = x"auto"; then
3125             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3126             with_ads_support=no
3127         fi
3128     fi
3129     ;;
3130 esac
3133     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3135     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3136         if test x"$with_ads_support" = x"yes"; then
3137             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3138         elif test x"$with_ads_support" = x"auto"; then
3139             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3140             with_ads_support=no
3141         fi
3142     fi
3146 if test x"$with_ads_support" != x"no"; then
3148   # Do no harm to the values of CFLAGS and LIBS while testing for
3149   # Kerberos support.
3151   if test x$FOUND_KRB5 = x"no"; then
3152     #################################################
3153     # check for location of Kerberos 5 install
3154     AC_MSG_CHECKING(for kerberos 5 install path)
3155     AC_ARG_WITH(krb5,
3156     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3157     [ case "$withval" in
3158       no)
3159         AC_MSG_RESULT(no krb5-path given)
3160         ;;
3161       yes)
3162         AC_MSG_RESULT(/usr)
3163         FOUND_KRB5=yes
3164         ;;
3165       *)
3166         AC_MSG_RESULT($withval)
3167         KRB5_CFLAGS="-I$withval/include"
3168         KRB5_CPPFLAGS="-I$withval/include"
3169         KRB5_LDFLAGS="-L$withval/lib"
3170         FOUND_KRB5=yes
3171         if test -x "$withval/bin/krb5-config"; then
3172                 KRB5CONFIG=$withval/bin/krb5-config
3173         fi
3174         ;;
3175       esac ],
3176       AC_MSG_RESULT(no krb5-path given)
3177     )
3178   fi
3180   #################################################
3181   # check for krb5-config from recent MIT and Heimdal kerberos 5
3182   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3183   AC_MSG_CHECKING(for working krb5-config)
3184   if test -x "$KRB5CONFIG"; then
3185     ac_save_CFLAGS=$CFLAGS
3186     CFLAGS="";export CFLAGS
3187     ac_save_LDFLAGS=$LDFLAGS
3188     LDFLAGS="";export LDFLAGS
3189     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3190     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3191     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3192     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3193     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3194     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3195     FOUND_KRB5=yes
3196     AC_MSG_RESULT(yes)
3197   else
3198     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3199   fi
3201   if test x$FOUND_KRB5 = x"no"; then
3202     #################################################
3203     # see if this box has the SuSE location for the heimdal krb implementation
3204     AC_MSG_CHECKING(for /usr/include/heimdal)
3205     if test -d /usr/include/heimdal; then
3206       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3207           KRB5_CFLAGS="-I/usr/include/heimdal"
3208           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3209           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3210           FOUND_KRB5=yes
3211           AC_MSG_RESULT(yes)
3212       else
3213           KRB5_CFLAGS="-I/usr/include/heimdal"
3214           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3215           FOUND_KRB5=yes
3216           AC_MSG_RESULT(yes)
3217       fi
3218     else
3219       AC_MSG_RESULT(no)
3220     fi
3221   fi
3223   if test x$FOUND_KRB5 = x"no"; then
3224     #################################################
3225     # see if this box has the RedHat location for kerberos
3226     AC_MSG_CHECKING(for /usr/kerberos)
3227     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3228       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3229       KRB5_CFLAGS="-I/usr/kerberos/include"
3230       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3231       FOUND_KRB5=yes
3232       AC_MSG_RESULT(yes)
3233     else
3234       AC_MSG_RESULT(no)
3235     fi
3236   fi
3238   if test x$FOUND_KRB5 = x"no"; then
3239     #################################################
3240     # see if this box has the OpenBSD location for heimdal krb5
3241     AC_MSG_CHECKING(for /usr/include/kerberosV)
3242     if test -d /usr/include/kerberosV; then
3243       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3244       KRB5_LIBS="-lcrypto"
3245       FOUND_KRB5=yes
3246       AC_MSG_RESULT(yes)
3247     else
3248       AC_MSG_RESULT(no)
3249     fi
3250   fi
3252   ac_save_CFLAGS=$CFLAGS
3253   ac_save_CPPFLAGS=$CPPFLAGS
3254   ac_save_LDFLAGS=$LDFLAGS
3256   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3257   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3258   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3260   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3262   # now check for krb5.h. Some systems have the libraries without the headers!
3263   # note that this check is done here to allow for different kerberos
3264   # include paths
3265   AC_CHECK_HEADERS(krb5.h)
3267   if test x"$ac_cv_header_krb5_h" = x"no"; then
3269     # Give a warning if AD support was not explicitly requested,
3270     # i.e with_ads_support = auto, otherwise die with an error.
3272     if test x"$with_ads_support" = x"yes"; then
3273       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3274     else
3275       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3276     fi
3278     # Turn off AD support and restore CFLAGS and LIBS variables
3280     with_ads_support="no"
3282     CFLAGS=$ac_save_CFLAGS
3283     CPPFLAGS=$ac_save_CPPFLAGS
3284     LDFLAGS=$ac_save_LDFLAGS
3285   fi
3286   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3287   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
3288         WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
3289         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
3290   fi
3293 # Now we have determined whether we really want ADS support
3294 use_ads=no
3295 if test x"$with_ads_support" != x"no"; then
3296   use_ads=yes
3297   have_gssapi=no
3298   ac_save_LIBS=$LIBS
3300   # now check for gssapi headers.  This is also done here to allow for
3301   # different kerberos include paths
3302   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3304   ##################################################################
3305   # we might need the k5crypto and com_err libraries on some systems
3306   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3307   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3309   # Heimdal checks.
3310   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3311   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3312   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3314   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3315   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3317   ########################################################
3318   # now see if we can find the krb5 libs in standard paths
3319   # or as specified above
3320   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3321   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3323   ########################################################
3324   # now see if we can find the gssapi libs in standard paths
3325   if test x"$have_gssapi" != x"yes"; then
3326      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3327   fi
3329   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3330   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3331   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3332   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3333   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3334   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3335   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3336   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3337   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3338   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3339   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3340   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3341   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3342   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3343   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3344   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3345   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3346   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3347   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3348   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3349   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3350   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3351   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3352   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3353   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3354   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3355   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3356   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3357   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3358   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3359   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3360   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3361   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3362   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3363   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3364   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3365   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3366   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3367   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3368   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3369   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3371   LIBS="$KRB5_LIBS $LIBS"
3373   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3374         smb_krb5_cv_ticket_has_keyinfo,
3375         [
3376             AC_TRY_COMPILE(
3377             [
3378                 #include <krb5.h>
3379             ],
3380             [
3381                 krb5_ticket ticket;
3382                 krb5_kvno kvno;
3383                 krb5_enctype enctype;
3385                 enctype = ticket.enc_part.enctype;
3386                 kvno = ticket.enc_part.kvno;
3387             ],
3388             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3389             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3390         ])
3392   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3393         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3394             [Whether the krb5_ticket structure contains the kvno and enctype])
3395   fi
3397   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3398           smb_krb5_cv_creds_opt_free_context,
3399           [
3400                 AC_TRY_COMPILE([
3401                     #include <krb5.h>],
3402                     [
3403                         krb5_context ctx;
3404                         krb5_get_init_creds_opt *opt = NULL;
3405                         krb5_get_init_creds_opt_free(ctx, opt);
3406                     ],
3407                     [smb_krb5_cv_creds_opt_free_context=yes],
3408                     [smb_krb5_cv_creds_opt_free_context=no]
3409                 )
3410           ])
3412   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3413         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3414             [Whether krb5_get_init_creds_opt_free takes a context argument])
3415   fi
3417   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3418     AC_TRY_COMPILE([
3419         #include <krb5.h>],
3420         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3421         [smb_krb5_cv_verify_checksum=7],
3422         [smb_krb5_cv_verify_checksum=6],
3423     )
3424   ])
3425   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3427   AC_CACHE_CHECK([for checksum in krb5_checksum],
3428                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3429     AC_TRY_COMPILE([#include <krb5.h>],
3430       [krb5_checksum cksum; cksum.checksum.length = 0;],
3431       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3432       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3434   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3435     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3436                [Whether the krb5_checksum struct has a checksum property])
3437   fi
3439   AC_CACHE_CHECK([for etype in EncryptedData],
3440                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3441     AC_TRY_COMPILE([#include <krb5.h>],
3442       [EncryptedData edata; edata.etype = 0;],
3443       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3444       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3446   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3447     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3448                [Whether the EncryptedData struct has a etype property])
3449   fi
3451   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3452                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3453     AC_TRY_COMPILE([#include <krb5.h>],
3454       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3455       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3456       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3458   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3459     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3460                [Whether the krb5_ap_req struct has a ticket pointer])
3461   fi
3463   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3464                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3465     AC_TRY_COMPILE([#include <krb5.h>],
3466       [krb5_error err; err.e_data = NULL;],
3467       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3468       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3470   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3471     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3472                [Whether the krb5_error struct has a e_data pointer])
3473   fi
3475   AC_CACHE_CHECK([for krb5_crypto type],
3476                 samba_cv_HAVE_KRB5_CRYPTO,[
3477     AC_TRY_COMPILE([#include <krb5.h>],
3478       [krb5_crypto crypto;],
3479       samba_cv_HAVE_KRB5_CRYPTO=yes,
3480       samba_cv_HAVE_KRB5_CRYPTO=no)])
3482   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3483     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3484                [Whether the type krb5_crypto exists])
3485   fi
3487   AC_CACHE_CHECK([for krb5_encrypt_block type],
3488                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3489     AC_TRY_COMPILE([#include <krb5.h>],
3490       [krb5_encrypt_block block;],
3491       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3492       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3494   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3495     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3496                [Whether the type krb5_encrypt_block exists])
3497   fi
3499   AC_CACHE_CHECK([for addrtype in krb5_address],
3500                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3501     AC_TRY_COMPILE([#include <krb5.h>],
3502       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3503       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3504       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3506   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3507     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3508                [Whether the krb5_address struct has a addrtype property])
3509   fi
3511   AC_CACHE_CHECK([for addr_type in krb5_address],
3512                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3513     AC_TRY_COMPILE([#include <krb5.h>],
3514       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3515       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3516       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3518   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3519     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3520               [Whether the krb5_address struct has a addr_type property])
3521   fi
3523   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3524                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3525                  [AC_TRY_COMPILE([#include <krb5.h>],
3526     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3527     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3529   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3530     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3531               [Whether the krb5_ticket struct has a enc_part2 property])
3532   fi
3534   AC_CACHE_CHECK([for keyblock in krb5_creds],
3535                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3536     AC_TRY_COMPILE([#include <krb5.h>],
3537       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3538       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3539       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3541   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3542     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3543               [Whether the krb5_creds struct has a keyblock property])
3544   fi
3546   AC_CACHE_CHECK([for session in krb5_creds],
3547                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3548     AC_TRY_COMPILE([#include <krb5.h>],
3549       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3550       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3551       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3553   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3554     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3555               [Whether the krb5_creds struct has a session property])
3556   fi
3558   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3559                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3560     AC_TRY_COMPILE([#include <krb5.h>],
3561       [krb5_keyblock key; key.keyvalue.data = NULL;],
3562       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3563       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3565   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3566     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3567               [Whether the krb5_keyblock struct has a keyvalue property])
3568   fi
3570   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3571                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3572     AC_TRY_COMPILE([#include <krb5.h>],
3573       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3574       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3575       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3576   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3577                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3578     AC_TRY_COMPILE([#include <krb5.h>],
3579       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3580       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3581       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3582 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3583 # w.r.t. arcfour and windows, so we must not enable it here
3584   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3585           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3586     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3587               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3588   fi
3590   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3591                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3592     AC_TRY_COMPILE([#include <krb5.h>],
3593       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3594       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3595       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3597   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3598     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3599               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3600   fi
3602   AC_CACHE_CHECK([for KV5M_KEYTAB],
3603                  samba_cv_HAVE_KV5M_KEYTAB,[
3604     AC_TRY_COMPILE([#include <krb5.h>],
3605       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3606       samba_cv_HAVE_KV5M_KEYTAB=yes,
3607       samba_cv_HAVE_KV5M_KEYTAB=no)])
3609   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3610       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3611              [Whether the KV5M_KEYTAB option is available])
3612   fi
3614   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3615                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3616     AC_TRY_COMPILE([#include <krb5.h>],
3617       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3618       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3619       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3621   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3622     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3623               [Whether KRB5_KU_OTHER_CKSUM is available])
3624   fi
3626   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3627                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3628     AC_TRY_COMPILE([#include <krb5.h>],
3629       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3630       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3631       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3633   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3634     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3635               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3636   fi
3638   AC_CACHE_CHECK([for the krb5_princ_component macro],
3639                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3640     AC_TRY_LINK([#include <krb5.h>],
3641       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3642       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3643       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3645   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3646     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3647                [Whether krb5_princ_component is available])
3648   fi
3650   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3651                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3652     AC_TRY_COMPILE([#include <krb5.h>],
3653       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3654       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3655       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3657   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3658     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3659               [Whether krb5_keytab_entry has key member])
3660   fi
3662   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3663                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3664     AC_TRY_COMPILE([#include <krb5.h>],
3665       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3666       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3667       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3669   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3670     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3671               [Whether krb5_keytab_entry has keyblock member])
3672   fi
3674   AC_CACHE_CHECK([for magic in krb5_address],
3675                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3676     AC_TRY_COMPILE([#include <krb5.h>],
3677       [krb5_address addr; addr.magic = 0;],
3678       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3679       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3681   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3682     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3683               [Whether the krb5_address struct has a magic property])
3684   fi
3686   AC_CACHE_CHECK([for WRFILE: keytab support],
3687                 samba_cv_HAVE_WRFILE_KEYTAB,[
3688     AC_TRY_RUN([
3689 #include<krb5.h>
3690   main()
3691   {
3692     krb5_context context;
3693     krb5_keytab keytab;
3695     krb5_init_context(&context);
3696     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3697   }],
3698   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3699   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3701   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3702       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3703                [Whether the WRFILE:-keytab is supported])
3704   fi
3706   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3707                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3708     AC_TRY_COMPILE([#include <krb5.h>],
3709     [
3710     krb5_context context;
3711     krb5_principal principal;
3712     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3713     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3714     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3716   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3717     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3718               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3719   fi
3721   AC_CACHE_CHECK([for krb5_addresses type],
3722                 samba_cv_HAVE_KRB5_ADDRESSES,[
3723     AC_TRY_COMPILE([#include <krb5.h>],
3724       [krb5_addresses addr;],
3725       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3726       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3728   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3729     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3730                [Whether the type krb5_addresses type exists])
3731   fi
3733   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
3734                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
3735     AC_TRY_COMPILE([#include <krb5.h>],
3736     [
3737     krb5_mk_error(0,0,0);],
3738     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
3739     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
3741   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
3742     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
3743               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
3744   fi
3746   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
3747     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
3748         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
3749         AC_TRY_RUN_STRICT([
3750                 #include <krb5.h>
3751                 int main(void) {
3752                         krb5_context context = NULL;
3753                         char *str = NULL;
3754                         krb5_enctype_to_string(context, 1, &str);
3755                         if (str) free (str); 
3756                         return 0;
3757                 }
3758                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3759                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
3760                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
3762     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
3763       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
3764                 [whether krb5_enctype_to_string takes krb5_context argument])
3765     fi
3767     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
3768         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
3769         AC_TRY_RUN_STRICT([
3770                 #include <krb5.h>
3771                 int main(void) {
3772                         char buf[256];
3773                         krb5_enctype_to_string(1, buf, 256);
3774                         return 0;
3775                 }
3776                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3777                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
3778                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
3780     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
3781       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
3782                 [whether krb5_enctype_to_string takes size_t argument])
3783     fi
3784   fi
3786   AC_CACHE_CHECK([for krb5_principal_get_realm],
3787                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
3788     AC_TRY_LINK([#include <krb5.h>],
3789       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
3790       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
3791       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
3793   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
3794     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
3795                [Whether the function krb5_principal_get_realm is defined])
3796   fi
3798   AC_CACHE_CHECK([for krb5_princ_realm],
3799                 samba_cv_HAVE_KRB5_PRINC_REALM,[
3800     AC_TRY_LINK([#include <krb5.h>],
3801       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
3802       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
3803       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
3805   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
3806     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
3807                [Whether the macro krb5_princ_realm is defined])
3808   fi
3810   #
3811   #
3812   # Now the decisions whether we can support krb5
3813   #
3814   # NOTE: all tests should be done before this block!
3815   #
3816   #
3817   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3818     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3819     use_ads=no
3820   fi
3822   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
3823           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
3824   then
3825     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
3826     use_ads=no
3827   fi
3829   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
3830           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
3831   then
3832     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
3833     use_ads=no
3834   fi
3836   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
3837           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
3838   then
3839     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
3840     use_ads=no
3841   fi
3843   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
3844           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
3845   then
3846     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
3847     use_ads=no
3848   fi
3850   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
3852       # We only need the following functions if we can't get the enctype
3853       # and kvno out of the ticket directly (ie. on Heimdal).
3855       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
3856       then
3857         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
3858         use_ads=no
3859       fi
3861       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
3862       then
3863         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
3864         use_ads=no
3865       fi
3867   fi
3869   if test x"$use_ads" = x"yes"; then
3870     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3871     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3872     if test x"$have_gssapi" = x"yes"; then
3873       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
3874     fi
3875   else
3876     if test x"$with_ads_support" = x"yes"; then
3877         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
3878     else
3879         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
3880     fi
3881     AC_REMOVE_DEFINE(HAVE_KRB5_H)
3882     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
3883     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
3884     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
3885     KRB5_LIBS=""
3886     with_ads_support=no
3887   fi
3888   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
3889   AC_MSG_RESULT([$use_ads])
3891 LIBS="$ac_save_LIBS"
3894 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
3895 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
3898 ########################################################
3899 # Compile with DNS Updates support?
3901 with_dnsupdate_support=no
3902 AC_MSG_CHECKING([whether to enable DNS Updates support])
3904 AC_ARG_WITH(dnsupdate,
3905 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default no)])],
3906 [ case "$withval" in
3907     yes|no)
3908         with_dnsupdate_support=$withval
3909         ;;
3910   esac ])
3912 AC_MSG_RESULT($with_dnsupdate_support)
3914 if test x"$with_dnsupdate_support" != x"no"; then
3916   ################################################################
3917   # first test for Active Directory support being enabled
3918   #if test x"$with_ads_support" = x"no"; then
3919   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
3920   #             with_dnsupdate_support=no
3921   #fi           
3922   ##################################################################
3923   # then test for uuid.h (necessary to generate unique DNS keynames
3924   # (uuid.h is required for this test)
3925   AC_CHECK_HEADERS(uuid/uuid.h)
3927   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
3928         if test x"$with_dnsupdate_support" = x"yes"; then
3929          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
3930         else
3931          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
3932         fi
3933         with_dnsupdate_support=no
3934   fi
3937 if test x"$with_dnsupdate_support" != x"no"; then
3939   ########################################################
3940   # Now see if we can find the uuid libs in standard paths
3941   # On some systems, the uuid API is in libc, so we have to
3942   # be careful not to insert a spurious -luuid.
3944   UUID_LIBS=""
3945   AC_LIBTESTFUNC(uuid, uuid_generate,
3946           [
3947             case " $LIBS " in
3948                 *\ -luuid\ *)
3949                 UUID_LIBS="-luuid"
3950                 SMB_REMOVE_LIB(uuid)
3951                 ;;
3952             esac
3954             with_dnsupdate_support=yes
3955             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
3956         ],
3957         [
3958             if test x"$with_dnsupdate_support" = x"yes"; then
3959                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
3960             else
3961                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
3962             fi
3963             with_dnsupdate_support=no
3964         ])
3967 #################################################
3968 # check for automount support
3969 AC_MSG_CHECKING(whether to use automount)
3970 AC_ARG_WITH(automount,
3971 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
3972 [ case "$withval" in
3973   yes)
3974     AC_MSG_RESULT(yes)
3975     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
3976     ;;
3977   *)
3978     AC_MSG_RESULT(no)
3979     ;;
3980   esac ],
3981   AC_MSG_RESULT(no)
3984 #################################################
3985 # check for mount- and umount.cifs support
3986 CIFSMOUNT_PROGS=""
3987 INSTALL_CIFSMOUNT=""
3988 UNINSTALL_CIFSMOUNT=""
3989 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
3990 AC_ARG_WITH(cifsmount,
3991 [AS_HELP_STRING([--with-cifsmount], [Include mount.cifs and umount.cifs (Linux only) support (default=yes)])],
3992 [ case "$withval" in
3993   no)
3994         AC_MSG_RESULT(no)
3995         ;;
3996   *)
3997         case "$host_os" in
3998         *linux*)
3999                 AC_MSG_RESULT(yes)
4000                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4001                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4002                 INSTALL_CIFSMOUNT="installcifsmount"
4003                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4004                 ;;
4005         *)
4006                 AC_MSG_ERROR(not on a linux system!)
4007                 ;;
4008         esac
4009     ;;
4010   esac ],
4011 [ case "$host_os" in
4012   *linux*)
4013         AC_MSG_RESULT(yes)
4014         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4015         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4016         INSTALL_CIFSMOUNT="installcifsmount"
4017         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4018         ;;
4019   *)
4020         AC_MSG_RESULT(no)
4021         ;;
4022   esac ]
4025 #################################################
4026 # check for cifs.spnego support
4027 AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
4028 CIFSSPNEGO_PROGS=""
4029 INSTALL_CIFSSPNEGO=""
4030 UNINSTALL_CIFSSPNEGO=""
4031 AC_MSG_CHECKING(whether to build cifs.spnego)
4032 AC_ARG_WITH(cifsspnego,
4033 [AS_HELP_STRING([--with-cifsspnego], [Include cifs.spnego (Linux only) support (default=no)])],
4034 [ case "$withval" in
4035   no)
4036         AC_MSG_RESULT(no)
4037         ;;
4038   *)
4039         case "$host_os" in
4040         *linux*)
4041                 if test x"$use_ads" != x"yes"; then
4042                         AC_MSG_ERROR(ADS support should be enabled for building cifs.spnego)
4043                 elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4044                         AC_MSG_ERROR(keyutils package is required for cifs.spnego)
4045                 else
4046                         AC_MSG_RESULT(yes)
4047                         AC_DEFINE(WITH_CIFSSPNEGO,1,[whether to build cifs.spnego])
4048                         CIFSSPNEGO_PROGS="bin/cifs.spnego"
4049                         INSTALL_CIFSSPNEGO="installcifsspnego"
4050                         UNINSTALL_CIFSSPNEGO="uninstallcifsspnego"
4051                 fi
4052                 ;;
4053         *)
4054                 AC_MSG_ERROR(not on a linux system!)
4055                 ;;
4056         esac
4057     ;;
4058   esac ],
4060   AC_MSG_RESULT(no)
4061   ]
4065 #################################################
4066 # Check for a PAM clear-text auth, accounts, password
4067 # and session support. Most PAM implementations keep their
4068 # headers in /usr/include/security. Darwin keeps its in
4069 # /usr/include/pam.
4071 with_pam_for_crypt=no
4072 try_pam=no
4073 AC_MSG_CHECKING(whether to try PAM support)
4074 AC_ARG_WITH(pam,
4075 [AS_HELP_STRING([--with-pam], [Include PAM support (default=no)])],
4076 [ case "$withval" in
4077   yes|no)
4078     try_pam=$withval
4079     ;;
4080   esac
4082 AC_MSG_RESULT([$try_pam])
4084 use_pam=no
4085 create_pam_modules=no
4086 if test x"${try_pam}" != x"no";then
4087         use_pam=yes
4088         create_pam_modules=yes
4090         # Most systems have PAM headers in /usr/include/security, but Darwin
4091         # has them in /usr/include/pam.
4092         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4093         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4094                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4095                 if test x"${try_pam}" = x"yes";then
4096                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4097                 fi
4098                 use_pam=no
4099                 create_pam_modules=no
4100         fi
4102         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4103         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4104                 if test x"${try_pam}" = x"yes";then
4105                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4106                 fi
4107                 use_pam=no
4108                 create_pam_modules=no
4109         fi
4111         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4112                 #if HAVE_SECURITY_PAM_APPL_H
4113                 #include <security/pam_appl.h>
4114                 #endif
4115                 #if HAVE_PAM_PAM_APPL_H
4116                 #include <pam/pam_appl.h>
4117                 #endif
4118         ]])
4119         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4120                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4121                 if test x"${try_pam}" = x"yes";then
4122                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4123        fi
4124                 create_pam_modules=no
4125     fi
4127         if test x"$use_pam" = x"yes"; then
4128     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4129                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4130                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4131     with_pam_for_crypt=yes
4133                 if test x"$create_pam_modules" = x"yes"; then
4134                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4135                         # this checks are optional,
4136                         # we don't care about the results here
4137                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4138                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4139                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4140                 else
4141                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4142                 fi
4143         fi
4144         AC_MSG_CHECKING(whether to use PAM support)
4145         AC_MSG_RESULT([$use_pam])
4147         AC_MSG_CHECKING(whether to have PAM MODULES support)
4148         AC_MSG_RESULT([$create_pam_modules])
4149 fi # try_pam != no
4151 #################################################
4152 # check for pam_smbpass support
4153 PAM_MODULES=""
4154 INSTALL_PAM_MODULES=""
4155 UNINSTALL_PAM_MODULES=""
4156 AC_MSG_CHECKING(whether to use pam_smbpass)
4157 AC_ARG_WITH(pam_smbpass,
4158 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=no)])],
4159 [ case "$withval" in
4160   yes)
4161     AC_MSG_RESULT(yes)
4163        # Conditions under which pam_smbpass should not be built.
4165        if test x"$BLDSHARED" != x"true"; then
4166           AC_MSG_ERROR([No support for shared modules])
4167        elif test x"$create_pam_modules" != x"yes"; then
4168           AC_MSG_ERROR([No support for PAM MODULES])
4169        else
4170           PAM_MODULES="pam_smbpass"
4171           INSTALL_PAM_MODULES="installpammodules"
4172           UNINSTALL_PAM_MODULES="uninstallpammodules"
4173        fi
4174     ;;
4175   *)
4176     AC_MSG_RESULT(no)
4177     ;;
4178   esac ],
4179   AC_MSG_RESULT(no)
4183 ###############################################
4184 # test for where we get crypt() from
4185 AC_SEARCH_LIBS(crypt, [crypt],
4186   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
4187   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
4190 ## moved after the check for -lcrypt in order to
4191 ## ensure that the necessary libraries are included
4192 ## check checking for truncated salt.  Wrapped by the
4193 ## $with_pam_for_crypt variable as above   --jerry
4195 if test $with_pam_for_crypt = no; then
4196 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4197 crypt_LIBS="$LIBS"
4198 LIBS="$AUTH_LIBS $LIBS"
4199 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
4200         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4201 LIBS="$crypt_LIBS"])
4202 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4203         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4207 #################################################
4208 # check for a NISPLUS_HOME support
4209 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4210 AC_ARG_WITH(nisplus-home,
4211 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4212 [ case "$withval" in
4213   yes)
4214     AC_MSG_RESULT(yes)
4215     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4216     ;;
4217   *)
4218     AC_MSG_RESULT(no)
4219     ;;
4220   esac ],
4221   AC_MSG_RESULT(no)
4224 #################################################
4225 # check for syslog logging
4226 AC_MSG_CHECKING(whether to use syslog logging)
4227 AC_ARG_WITH(syslog,
4228 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4229 [ case "$withval" in
4230   yes)
4231     AC_MSG_RESULT(yes)
4232     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4233     ;;
4234   *)
4235     AC_MSG_RESULT(no)
4236     ;;
4237   esac ],
4238   AC_MSG_RESULT(no)
4241 #################################################
4242 # check for experimental disk-quotas support
4244 samba_cv_WITH_QUOTAS=auto
4245 samba_cv_TRY_QUOTAS=no
4246 samba_cv_RUN_QUOTA_TESTS=auto
4247 samba_cv_WITH_SYS_QUOTAS=auto
4248 samba_cv_TRY_SYS_QUOTAS=auto
4249 samba_cv_SYSQUOTA_FOUND=no
4251 AC_MSG_CHECKING(whether to try disk-quotas support)
4252 AC_ARG_WITH(quotas,
4253 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4254 [ case "$withval" in
4255   yes)
4256     AC_MSG_RESULT(yes)
4257     samba_cv_WITH_QUOTAS=yes
4258     samba_cv_TRY_QUOTAS=yes
4259     samba_cv_RUN_QUOTA_TESTS=yes
4260     #set sys quotas to auto in this case
4261     samba_cv_TRY_SYS_QUOTAS=auto
4262     ;;
4263   auto)
4264     AC_MSG_RESULT(auto)
4265     samba_cv_WITH_QUOTAS=auto
4266     samba_cv_TRY_QUOTAS=auto
4267     samba_cv_RUN_QUOTA_TESTS=auto
4268     #set sys quotas to auto in this case
4269     samba_cv_TRY_SYS_QUOTAS=auto
4270     ;;
4271   no)
4272     AC_MSG_RESULT(no)
4273     samba_cv_WITH_QUOTAS=no
4274     samba_cv_TRY_QUOTAS=no
4275     samba_cv_RUN_QUOTA_TESTS=no
4276     ;;
4277   *)
4278     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4279     ;;
4280   esac ],
4281   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4284 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4285 AC_ARG_WITH(sys-quotas,
4286 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4287 [ case "$withval" in
4288   yes)
4289     AC_MSG_RESULT(yes)
4290     samba_cv_WITH_SYS_QUOTAS=yes
4291     samba_cv_TRY_SYS_QUOTAS=yes
4292     samba_cv_RUN_QUOTA_TESTS=yes
4293     ;;
4294   auto)
4295     AC_MSG_RESULT(auto)
4296     samba_cv_WITH_SYS_QUOTAS=auto
4297     samba_cv_TRY_SYS_QUOTAS=auto
4298     samba_cv_RUN_QUOTA_TESTS=auto
4299     ;;
4300   no)
4301     AC_MSG_RESULT(no)
4302     samba_cv_WITH_SYS_QUOTAS=no
4303     samba_cv_TRY_SYS_QUOTAS=no
4304     ;;
4305   *)
4306     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4307     ;;
4308   esac ],
4309   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4312 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4313 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4314   case "$host_os" in
4315         *linux*)
4316             AC_MSG_RESULT(yes)
4317             samba_cv_TRY_SYS_QUOTAS=yes
4318             samba_cv_RUN_QUOTA_TESTS=yes
4319             ;;
4320         *)
4321             AC_MSG_RESULT(no)
4322             samba_cv_TRY_SYS_QUOTAS=no
4323             ;;
4324   esac
4327 #############################################
4328 # only check for quota stuff if --with-quotas
4329 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4331 case "$host_os" in
4332         # on linux we didn't need to test we have builtin support
4333         *linux*)
4334             samba_cv_SYSQUOTA_FOUND=yes
4335             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4336             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4337             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4338             AC_MSG_RESULT(yes)
4340             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4341             samba_cv_found_xfs_header=yes
4342             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4343             AC_MSG_RESULT(yes)
4344             ;;
4345         *solaris*)
4346             # need to set this define when using static linking (BUG 1473)
4347             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4348             ;;
4349         *)
4350             ;;
4351 esac
4353 # some broken header files need this
4354 AC_CHECK_HEADER(asm/types.h,[
4355             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4356             AC_ADD_INCLUDE(<asm/types.h>)
4357             ])
4359 # For quotas on Veritas VxFS filesystems
4360 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4362 # For quotas on Linux XFS filesystems
4363 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4365 # For sys/quota.h and linux/quota.h
4366 AC_CHECK_HEADERS(sys/quota.h)
4368 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4369 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4370 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4371 AC_TRY_COMPILE([
4372 #include "confdefs.h"
4373 #ifdef HAVE_SYS_TYPES_H
4374 #include <sys/types.h>
4375 #endif
4376 #ifdef HAVE_ASM_TYPES_H
4377 #include <asm/types.h>
4378 #endif
4379 #include <sys/quota.h>
4380 ],[int i = Q_XGETQUOTA;],
4381 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4382 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4383         samba_cv_found_xfs_header=yes
4387 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4388 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4389 AC_TRY_COMPILE([
4390 #include "confdefs.h"
4391 #ifdef HAVE_SYS_QUOTA_H
4392 #include <sys/quota.h>
4393 #endif
4395 struct dqblk D;
4396 D.dqb_fsoftlimit = 0;],
4397 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4398 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4399         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4402 ##################
4403 # look for a working quota system
4405 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4406 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4407 AC_TRY_RUN_STRICT([
4408 #define HAVE_QUOTACTL_4A 1
4409 #define AUTOCONF_TEST 1
4410 #include "confdefs.h"
4411 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4412            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4413 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4414     samba_cv_SYSQUOTA_FOUND=yes;
4415     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4416     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4420 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4421 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4422 AC_TRY_RUN_STRICT([
4423 #define HAVE_QUOTACTL_4B 1
4424 #define AUTOCONF_TEST 1
4425 #include "confdefs.h"
4426 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4427            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4428 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4429     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4430     samba_cv_SYSQUOTA_FOUND=yes;
4431     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4432     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4436 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4437 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4438 AC_TRY_RUN_STRICT([
4439 #define HAVE_QUOTACTL_3 1
4440 #define AUTOCONF_TEST 1
4441 #include "confdefs.h"
4442 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4443            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4444 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4445     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4446     samba_cv_SYSQUOTA_FOUND=yes;
4447     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4448     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4452 #################################################
4453 # check for mntent.h and struct mntent
4454 AC_CHECK_HEADERS(mntent.h)
4455 #################################################
4456 # check for setmntent,getmntent,endmntent
4457 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4459 #################################################
4460 # check for devnm.h and struct mntent
4461 AC_CHECK_HEADERS(devnm.h)
4462 #################################################
4463 # check for devnm
4464 AC_CHECK_FUNCS(devnm)
4466 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4467     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4468         # if --with-sys-quotas=yes then build it
4469         # you have can use the get/set quota command smb.conf
4470         # options then
4471         samba_cv_SYSQUOTA_FOUND=auto
4472     fi
4473     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4474         # if --with-sys-quotas=yes then build it
4475         # you have can use the get/set quota command smb.conf
4476         # options then
4477         samba_cv_TRY_SYS_QUOTAS=auto
4478     fi
4481 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4482 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4483 SAVE_CPPFLAGS="$CPPFLAGS"
4484 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4485 AC_TRY_COMPILE([
4486 #include "confdefs.h"
4487 #define NO_PROTO_H 1
4488 #define NO_CONFIG_H 1
4489 #define HAVE_SYS_QUOTAS 1
4490 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4491 #include "${srcdir-.}/lib/sysquotas.c"
4492 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4493 CPPFLAGS="$SAVE_CPPFLAGS"
4495 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4496 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4497     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4498         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4499         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4500         samba_cv_WE_USE_SYS_QUOTAS=yes
4501         AC_MSG_RESULT(yes)
4502     else
4503         AC_MSG_RESULT(no)
4504     fi
4508 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4509 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4510 SAVE_CPPFLAGS="$CPPFLAGS"
4511 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4512 AC_TRY_COMPILE([
4513 #include "confdefs.h"
4514 #define NO_PROTO_H 1
4515 #define NO_CONFIG_H 1
4516 #define HAVE_SYS_QUOTAS 1
4517 #define HAVE_XFS_QUOTAS 1
4518 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4519 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4520 CPPFLAGS="$SAVE_CPPFLAGS"
4522 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4523     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4524         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4525     fi
4529 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4530 SAVE_CPPFLAGS="$CPPFLAGS"
4531 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4532 AC_TRY_COMPILE([
4533 #include "confdefs.h"
4534 #define NO_PROTO_H 1
4535 #define NO_CONFIG_H 1
4536 #include "${srcdir-.}/smbd/quotas.c"
4537 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4538 CPPFLAGS="$SAVE_CPPFLAGS"
4540 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4541 AC_MSG_CHECKING(whether to use the old quota support)
4542     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4543       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4544         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4545         AC_MSG_RESULT(yes)
4546       else
4547         AC_MSG_RESULT(no)
4548       fi
4549     else
4550       AC_MSG_RESULT(no)
4551     fi
4554 ####################
4555 # End of quota check samba_cv_RUN_QUOTA_TESTS
4558 #################################################
4559 # check for experimental utmp accounting
4561 AC_MSG_CHECKING(whether to support utmp accounting)
4562 WITH_UTMP=yes
4563 AC_ARG_WITH(utmp,
4564 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
4565 [ case "$withval" in
4566   no)
4567                 WITH_UTMP=no
4568                 ;;
4569   *)
4570                 WITH_UTMP=yes
4571                 ;;
4572   esac ],
4575 # utmp requires utmp.h
4576 # Note similar check earlier, when checking utmp details.
4578 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4579         utmp_no_reason=", no utmp.h on $host_os"
4580         WITH_UTMP=no
4583 # Display test results
4585 if test x"$WITH_UTMP" = x"yes"; then
4586         AC_MSG_RESULT(yes)
4587         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4588 else
4589         AC_MSG_RESULT(no$utmp_no_reason)
4592 INSTALLLIBCMD_SH=:
4593 INSTALLLIBCMD_A=:
4594 UNINSTALLLIBCMD_SH=:
4595 UNINSTALLLIBCMD_A=:
4597 if test $BLDSHARED = true; then
4598         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
4599         UNINSTALLLIBCMD_SH="rm -f"
4601 if test $enable_static = yes; then
4602         INSTALLLIBCMD_A="\$(INSTALLCMD)"
4603         UNINSTALLLIBCMD_A="rm -f"
4606 #################################################
4607 # --disable-shared-libs
4608 # can be used to disable the internal use of shared libs altogether
4609 # (this only has an effect when building shared libs is enabled)
4611 USESHARED=false
4612 AC_SUBST(USESHARED)
4614 AC_MSG_CHECKING(whether to use shared libraries internally)
4615 AC_ARG_ENABLE([shared-libs],
4616         AS_HELP_STRING([--enable-shared-libs],
4617                 [Use shared libraries internally (default=yes)]),
4618         [enable_shared_libs=$enableval],
4619         [enable_shared_libs=yes])
4621 if test x"$enable_shared_libs" != x"no" ; then
4622         USESHARED=$BLDSHARED
4625 AC_MSG_RESULT([$USESHARED])
4627 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
4628         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
4631 #################################################
4632 # --with-static-libs=LIBS:
4633 #   link (internal) libs dynamically or statically?
4635 # If a subsystem is built as a library then this controls whether they are
4636 # linked into Samba targets statically or dynamically:
4638 # * If we build the shared library at all, we link dynamically by default.
4640 # * We only link statically if we don't build shared or if the library
4641 #   appears in the --with-static-libs configure option.
4643 # Example:
4644 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
4645 #   of linking the dynamic variant with -ltalloc.
4647 # NOTE: This option only affects libraries that we do not only build
4648 # but that samba also links against as libraries (as opposed to linking
4649 # the plain object files. - This has to be configured in Makefile.in.
4650 # So in particular it does not harm to give invalid or unknown names here.
4653 AC_ARG_WITH([static-libs],
4654         [AS_HELP_STRING([--with-static-libs=LIBS],
4655                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
4656         [AS_IF([test $withval],
4657                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
4658                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
4659                         eval LINK_$lib=STATIC
4660                 done], [])],
4661         [])
4664 # WORKAROUND:
4665 #   until we have organized other internal subsystems (as util, registry
4666 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
4667 #   dynamically to samba programs.
4669 LINK_LIBNETAPI=STATIC
4671 SMB_LIBRARY(talloc)
4672 SMB_LIBRARY(tdb)
4673 SMB_LIBRARY(netapi)
4676 #################################################
4677 # should we build libaddns?
4678 INSTALL_LIBADDNS=
4679 UNINSTALL_LIBADDNS=
4680 LIBADDNS_SHARED=
4681 LIBADDNS=
4682 AC_MSG_CHECKING(whether to build the libaddns shared library)
4683 AC_ARG_WITH(libaddns,
4684 [AS_HELP_STRING([--with-libaddns], [Build the libaddns shared library (default=no undefined API)])],
4685 [ case "$withval" in
4686   *)
4687      AC_MSG_RESULT(no)
4688      ;;
4689   yes)
4690      if test $BLDSHARED = true; then
4691         LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
4692         LIBADDNS=libaddns
4693         AC_MSG_RESULT(yes)
4694      else
4695         enable_static=yes
4696         AC_MSG_RESULT(no shared library support -- will supply static library)
4697      fi
4698      if test $enable_static = yes; then
4699         LIBADDNS=libaddns
4700      fi
4701      INSTALL_LIBADDNS=installlibaddns
4702      UNINSTALL_LIBADDNS=uninstalllibaddns
4703      ;;
4704   esac ],
4705 [AC_MSG_RESULT(no)]
4708 #################################################
4709 # should we build libsmbclient?
4711 INSTALL_LIBSMBCLIENT=
4712 UNINSTALL_LIBSMBCLIENT=
4713 LIBSMBCLIENT_SHARED=
4714 LIBSMBCLIENT=
4715 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
4716 AC_ARG_WITH(libsmbclient,
4717 [AS_HELP_STRING([--with-libsmbclient], [Build the libsmbclient shared library (default=yes if shared libs supported)])],
4718 [ case "$withval" in
4719   no)
4720      AC_MSG_RESULT(no)
4721      ;;
4722   *)
4723      if test $BLDSHARED = true; then
4724         LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
4725         LIBSMBCLIENT=libsmbclient
4726         AC_MSG_RESULT(yes)
4727      else
4728         enable_static=yes
4729         AC_MSG_RESULT(no shared library support -- will supply static library)
4730      fi
4731      if test $enable_static = yes; then
4732         LIBSMBCLIENT=libsmbclient
4733      fi
4734      INSTALL_LIBSMBCLIENT=installclientlib
4735      UNINSTALL_LIBSMBCLIENT=uninstallclientlib
4736      ;;
4737   esac ],
4739 # if unspecified, default is to build it if possible.
4740   if test $BLDSHARED = true; then
4741      LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
4742      LIBSMBCLIENT=libsmbclient
4743      AC_MSG_RESULT(yes)
4744    else
4745      enable_static=yes
4746      AC_MSG_RESULT(no shared library support -- will supply static library)
4747    fi
4748    if test $enable_static = yes; then
4749      LIBSMBCLIENT=libsmbclient
4750   fi]
4751   INSTALL_LIBSMBCLIENT=installclientlib
4752   UNINSTALL_LIBSMBCLIENT=uninstallclientlib
4755 INSTALL_LIBSMBSHAREMODES=
4756 LIBSMBSHAREMODES_SHARED=
4757 LIBSMBSHAREMODES=
4758 AC_MSG_CHECKING(whether to build the libsmbsharemodes shared library)
4759 AC_ARG_WITH(libsmbsharemodes,
4760 [AS_HELP_STRING([--with-libsmbsharemodes], [Build the libsmbsharemodes shared library (default=yes if shared libs supported)])],
4761 [ case "$withval" in
4762   no)
4763      AC_MSG_RESULT(no)
4764      ;;
4765   *)
4766      if test $BLDSHARED = true; then
4767         LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
4768         LIBSMBSHAREMODES=libsmbsharemodes
4769         AC_MSG_RESULT(yes)
4770      else
4771         enable_static=yes
4772         AC_MSG_RESULT(no shared library support -- will supply static library)
4773      fi
4774      if test $enable_static = yes; then
4775         LIBSMBSHAREMODES=libsmbsharemodes
4776      fi
4777      INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
4778      UNINSTALL_LIBSMBSHAREMODES=uninstalllibsmbsharemodes
4779      ;;
4780   esac ],
4782 # if unspecified, default is to build it if possible.
4783   if test $BLDSHARED = true; then
4784      LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
4785      LIBSMBSHAREMODES=libsmbsharemodes
4786      AC_MSG_RESULT(yes)
4787    else
4788      enable_static=yes
4789      AC_MSG_RESULT(no shared library support -- will supply static library)
4790    fi
4791    if test $enable_static = yes; then
4792      LIBSMBSHAREMODES=libsmbsharemodes
4793   fi]
4794   INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
4798 #################################################
4799 # these tests are taken from the GNU fileutils package
4800 AC_CHECKING(how to get filesystem space usage)
4801 space=no
4803 # Test for statvfs64.
4804 if test $space = no; then
4805   # SVR4
4806   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
4807   [AC_TRY_RUN([
4808 #if defined(HAVE_UNISTD_H)
4809 #include <unistd.h>
4810 #endif
4811 #include <sys/types.h>
4812 #include <sys/statvfs.h>
4813   main ()
4814   {
4815     struct statvfs64 fsd;
4816     exit (statvfs64 (".", &fsd));
4817   }],
4818   fu_cv_sys_stat_statvfs64=yes,
4819   fu_cv_sys_stat_statvfs64=no,
4820   fu_cv_sys_stat_statvfs64=cross)])
4821   if test $fu_cv_sys_stat_statvfs64 = yes; then
4822     space=yes
4823     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
4824   fi
4827 # Perform only the link test since it seems there are no variants of the
4828 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4829 # because that got a false positive on SCO OSR5.  Adding the declaration
4830 # of a `struct statvfs' causes this test to fail (as it should) on such
4831 # systems.  That system is reported to work fine with STAT_STATFS4 which
4832 # is what it gets when this test fails.
4833 if test $space = no; then
4834   # SVR4
4835   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
4836                  [AC_TRY_LINK([#include <sys/types.h>
4837 #include <sys/statvfs.h>],
4838                               [struct statvfs fsd; statvfs (0, &fsd);],
4839                               fu_cv_sys_stat_statvfs=yes,
4840                               fu_cv_sys_stat_statvfs=no)])
4841   if test $fu_cv_sys_stat_statvfs = yes; then
4842     space=yes
4843     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
4844   fi
4847 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
4848 # This is not the case on ancient Linux systems.
4850 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
4851     AC_TRY_COMPILE([#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
4852         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
4853 if test x"$samba_cv_fsid_int" = x"yes"; then
4854     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
4857 if test $space = no; then
4858   # DEC Alpha running OSF/1
4859   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
4860   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
4861   [AC_TRY_RUN([
4862 #include <sys/param.h>
4863 #include <sys/types.h>
4864 #include <sys/mount.h>
4865   main ()
4866   {
4867     struct statfs fsd;
4868     fsd.f_fsize = 0;
4869     exit (statfs (".", &fsd, sizeof (struct statfs)));
4870   }],
4871   fu_cv_sys_stat_statfs3_osf1=yes,
4872   fu_cv_sys_stat_statfs3_osf1=no,
4873   fu_cv_sys_stat_statfs3_osf1=no)])
4874   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
4875   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
4876     space=yes
4877     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
4878   fi
4881 if test $space = no; then
4882 # AIX
4883   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
4884 member (AIX, 4.3BSD)])
4885   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
4886   [AC_TRY_RUN([
4887 #ifdef HAVE_SYS_PARAM_H
4888 #include <sys/param.h>
4889 #endif
4890 #ifdef HAVE_SYS_MOUNT_H
4891 #include <sys/mount.h>
4892 #endif
4893 #ifdef HAVE_SYS_VFS_H
4894 #include <sys/vfs.h>
4895 #endif
4896   main ()
4897   {
4898   struct statfs fsd;
4899   fsd.f_bsize = 0;
4900   exit (statfs (".", &fsd));
4901   }],
4902   fu_cv_sys_stat_statfs2_bsize=yes,
4903   fu_cv_sys_stat_statfs2_bsize=no,
4904   fu_cv_sys_stat_statfs2_bsize=no)])
4905   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
4906   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
4907     space=yes
4908     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
4909   fi
4912 if test $space = no; then
4913 # SVR3
4914   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
4915   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
4916   [AC_TRY_RUN([#include <sys/types.h>
4917 #include <sys/statfs.h>
4918   main ()
4919   {
4920   struct statfs fsd;
4921   exit (statfs (".", &fsd, sizeof fsd, 0));
4922   }],
4923     fu_cv_sys_stat_statfs4=yes,
4924     fu_cv_sys_stat_statfs4=no,
4925     fu_cv_sys_stat_statfs4=no)])
4926   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
4927   if test $fu_cv_sys_stat_statfs4 = yes; then
4928     space=yes
4929     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
4930   fi
4933 if test $space = no; then
4934 # 4.4BSD and NetBSD
4935   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
4936 member (4.4BSD and NetBSD)])
4937   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
4938   [AC_TRY_RUN([#include <sys/types.h>
4939 #ifdef HAVE_SYS_PARAM_H
4940 #include <sys/param.h>
4941 #endif
4942 #ifdef HAVE_SYS_MOUNT_H
4943 #include <sys/mount.h>
4944 #endif
4945   main ()
4946   {
4947   struct statfs fsd;
4948   fsd.f_fsize = 0;
4949   exit (statfs (".", &fsd));
4950   }],
4951   fu_cv_sys_stat_statfs2_fsize=yes,
4952   fu_cv_sys_stat_statfs2_fsize=no,
4953   fu_cv_sys_stat_statfs2_fsize=no)])
4954   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
4955   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
4956     space=yes
4957         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
4958   fi
4961 if test $space = no; then
4962   # Ultrix
4963   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
4964   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
4965   [AC_TRY_RUN([#include <sys/types.h>
4966 #ifdef HAVE_SYS_PARAM_H
4967 #include <sys/param.h>
4968 #endif
4969 #ifdef HAVE_SYS_MOUNT_H
4970 #include <sys/mount.h>
4971 #endif
4972 #ifdef HAVE_SYS_FS_TYPES_H
4973 #include <sys/fs_types.h>
4974 #endif
4975   main ()
4976   {
4977   struct fs_data fsd;
4978   /* Ultrix's statfs returns 1 for success,
4979      0 for not mounted, -1 for failure.  */
4980   exit (statfs (".", &fsd) != 1);
4981   }],
4982   fu_cv_sys_stat_fs_data=yes,
4983   fu_cv_sys_stat_fs_data=no,
4984   fu_cv_sys_stat_fs_data=no)])
4985   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
4986   if test $fu_cv_sys_stat_fs_data = yes; then
4987     space=yes
4988     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
4989   fi
4993 # As a gating factor for large file support, in order to
4994 # use <4GB files we must have the following minimal support
4995 # available.
4996 # long long, and a 64 bit off_t or off64_t.
4997 # If we don't have all of these then disable large
4998 # file support.
5000 AC_MSG_CHECKING([if large file support can be enabled])
5001 AC_TRY_COMPILE([
5002 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5003 #include <sys/types.h>
5004 #else
5005 __COMPILE_ERROR_
5006 #endif
5008 [int i],
5009 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5010 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5011         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5013 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5015 #################################################
5016 # check for cluster extensions
5018 AC_MSG_CHECKING(whether to include cluster support)
5019 AC_ARG_WITH(cluster-support,
5020 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=no)])])
5021 if test "x$with_cluster_support" = "xyes"; then
5022     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5023     AC_MSG_RESULT(yes)
5024 else
5025     AC_MSG_RESULT(no)
5029 #################################################
5030 # check for ACL support
5032 AC_MSG_CHECKING(whether to support ACLs)
5033 AC_ARG_WITH(acl-support,
5034 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5035 [ case "$withval" in
5036         yes|no)
5037                 with_acl_support="$withval"
5038                 ;;
5039   esac ])
5041 if test x"$with_acl_support" = x ; then
5042         with_acl_support="auto"
5045 AC_MSG_RESULT($with_acl_support)
5047 if test x"$with_acl_support" = x"no"; then
5048         AC_MSG_RESULT(Disabling ACL support)
5049         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5050 else
5051         AC_MSG_NOTICE(checking whether ACL support is available:)
5052         case "$host_os" in
5053         *sysv5*)
5054                 AC_MSG_NOTICE(Using UnixWare ACLs)
5055                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5056                 default_static_modules="$default_static_modules vfs_solarisacl"
5057                 ;;
5058         *solaris*)
5059                 AC_MSG_NOTICE(Using solaris ACLs)
5060                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5061                 ACL_LIBS="$ACL_LIBS -lsec"
5062                 default_static_modules="$default_static_modules vfs_solarisacl"
5063                 ;;
5064         *hpux*)
5065                 AC_MSG_NOTICE(Using HPUX ACLs)
5066                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5067                 default_static_modules="$default_static_modules vfs_hpuxacl"
5068                 ;;
5069         *irix*)
5070                 AC_MSG_NOTICE(Using IRIX ACLs)
5071                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5072                 default_static_modules="$default_static_modules vfs_irixacl"
5073                 ;;
5074         *aix*)
5075                 AC_MSG_NOTICE(Using AIX ACLs)
5076                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5077                 default_static_modules="$default_static_modules vfs_aixacl"
5078                 ;;
5079         *osf*)
5080                 AC_MSG_NOTICE(Using Tru64 ACLs)
5081                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5082                 ACL_LIBS="$ACL_LIBS -lpacl"
5083                 default_static_modules="$default_static_modules vfs_tru64acl"
5084                 ;;
5085         *darwin*)
5086                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5087                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5088                 ;;
5089         *)
5090                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5091                 case "$host_os" in
5092                 *linux*)
5093                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5094                         ;;
5095                 esac
5096                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5097                         acl_LIBS=$LIBS
5098                         LIBS="$LIBS $ACL_LIBS"
5099                         AC_TRY_LINK([
5100                                 #include <sys/types.h>
5101                                 #include <sys/acl.h>
5102                         ],[
5103                                 acl_t acl;
5104                                 int entry_id;
5105                                 acl_entry_t *entry_p;
5106                                 return acl_get_entry(acl, entry_id, entry_p);
5107                         ],
5108                         [samba_cv_HAVE_POSIX_ACLS=yes],
5109                         [samba_cv_HAVE_POSIX_ACLS=no])
5110                         LIBS=$acl_LIBS
5111                 ])
5112                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5113                         AC_MSG_NOTICE(Using posix ACLs)
5114                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5115                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5116                                 acl_LIBS=$LIBS
5117                                 LIBS="$LIBS $ACL_LIBS"
5118                                 AC_TRY_LINK([
5119                                         #include <sys/types.h>
5120                                         #include <sys/acl.h>
5121                                 ],[
5122                                         acl_permset_t permset_d;
5123                                         acl_perm_t perm;
5124                                         return acl_get_perm_np(permset_d, perm);
5125                                 ],
5126                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5127                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5128                                 LIBS=$acl_LIBS
5129                         ])
5130                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5131                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5132                         fi
5133                         default_static_modules="$default_static_modules vfs_posixacl"
5134                 else
5135                         AC_MSG_NOTICE(ACL support is not avaliable)
5136                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5137                 fi
5138                 ;;
5139         esac
5140 fi # with_acl_support
5144 #################################################
5145 # check for AIO support
5147 AC_MSG_CHECKING(whether to support asynchronous io)
5148 AC_ARG_WITH(aio-support,
5149 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5150 [ case "$withval" in
5151   yes)
5153         AC_MSG_RESULT(yes)
5154         case "$host_os" in
5155         *)
5156                 AIO_LIBS=$LIBS
5157                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5158                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5159                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5160                 aio_LIBS=$LIBS
5161                 LIBS=$AIO_LIBS
5162                 AC_TRY_LINK([#include <sys/types.h>
5163 #include <aio.h>],
5164 [ struct aiocb a; return aio_read(&a);],
5165 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5166                 LIBS=$aio_LIBS])
5167                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5168                 aio_LIBS=$LIBS
5169                 LIBS=$AIO_LIBS
5170                 AC_TRY_LINK([#include <sys/types.h>
5171 #include <aio.h>],
5172 [ struct aiocb64 a; return aio_read64(&a);],
5173 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5174                 LIBS=$aio_LIBS])
5175                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5176                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5177                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5178                         LIBS=$AIO_LIBS
5179                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5180                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5181                         LIBS=$AIO_LIBS
5182                 fi
5184                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5185                         AC_MSG_CHECKING(for aio_read)
5186                         AC_LINK_IFELSE([#include <aio.h>
5187 int main() { struct aiocb a; return aio_read(&a); }],
5188 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5189 [AC_MSG_RESULT(no)])
5191                         AC_MSG_CHECKING(for aio_write)
5192                         AC_LINK_IFELSE([#include <aio.h>
5193 int main() { struct aiocb a; return aio_write(&a); }],
5194 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5195 [AC_MSG_RESULT(no)])
5197                         AC_MSG_CHECKING(for aio_fsync)
5198                         AC_LINK_IFELSE([#include <aio.h>
5199 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5200 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5201 [AC_MSG_RESULT(no)])
5203                         AC_MSG_CHECKING(for aio_return)
5204                         AC_LINK_IFELSE([#include <aio.h>
5205 int main() { struct aiocb a; return aio_return(&a); }],
5206 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5207 [AC_MSG_RESULT(no)])
5209                         AC_MSG_CHECKING(for aio_error)
5210                         AC_LINK_IFELSE([#include <aio.h>
5211 int main() { struct aiocb a; return aio_error(&a); }],
5212 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5213 [AC_MSG_RESULT(no)])
5215                         AC_MSG_CHECKING(for aio_cancel)
5216                         AC_LINK_IFELSE([#include <aio.h>
5217 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5218 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5219 [AC_MSG_RESULT(no)])
5221                         AC_MSG_CHECKING(for aio_suspend)
5222                         AC_LINK_IFELSE([#include <aio.h>
5223 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5224 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5225 [AC_MSG_RESULT(no)])
5226                 fi
5228                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5229                         AC_MSG_CHECKING(for aio_read64)
5230                         AC_LINK_IFELSE([#include <aio.h>
5231 int main() { struct aiocb a; return aio_read64(&a); }],
5232 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5233 [AC_MSG_RESULT(no)])
5235                         AC_MSG_CHECKING(for aio_write64)
5236                         AC_LINK_IFELSE([#include <aio.h>
5237 int main() { struct aiocb a; return aio_write64(&a); }],
5238 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5239 [AC_MSG_RESULT(no)])
5241                         AC_MSG_CHECKING(for aio_fsync64)
5242                         AC_LINK_IFELSE([#include <aio.h>
5243 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5244 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5245 [AC_MSG_RESULT(no)])
5247                         AC_MSG_CHECKING(for aio_return64)
5248                         AC_LINK_IFELSE([#include <aio.h>
5249 int main() { struct aiocb a; return aio_return64(&a); }],
5250 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5251 [AC_MSG_RESULT(no)])
5253                         AC_MSG_CHECKING(for aio_error64)
5254                         AC_LINK_IFELSE([#include <aio.h>
5255 int main() { struct aiocb a; return aio_error64(&a); }],
5256 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5257 [AC_MSG_RESULT(no)])
5259                         AC_MSG_CHECKING(for aio_cancel64)
5260                         AC_LINK_IFELSE([#include <aio.h>
5261 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5262 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5263 [AC_MSG_RESULT(no)])
5265                         AC_MSG_CHECKING(for aio_suspend64)
5266                         AC_LINK_IFELSE([#include <aio.h>
5267 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5268 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5269 [AC_MSG_RESULT(no)])
5270                 fi
5271             ;;
5272         esac
5273         ;;
5274   *)
5275     AC_MSG_RESULT(no)
5276     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5277     ;;
5278   esac ],
5279   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5280   AC_MSG_RESULT(no)
5283 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5284         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5285                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5286                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5287         fi
5290 #################################################
5291 # check for sendfile support
5293 with_sendfile_support=yes
5294 AC_MSG_CHECKING(whether to check to support sendfile)
5295 AC_ARG_WITH(sendfile-support,
5296 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5297 [ case "$withval" in
5298   yes)
5300         AC_MSG_RESULT(yes);
5302         case "$host_os" in
5303         *linux*)
5304                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5305                 AC_TRY_LINK([#include <sys/sendfile.h>],
5307 int tofd, fromfd;
5308 off64_t offset;
5309 size_t total;
5310 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5312 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5314                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5315                 AC_TRY_LINK([#include <sys/sendfile.h>],
5317 int tofd, fromfd;
5318 off_t offset;
5319 size_t total;
5320 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5322 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5324 # Try and cope with broken Linux sendfile....
5325                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5326                 AC_TRY_LINK([\
5327 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5328 #undef _FILE_OFFSET_BITS
5329 #endif
5330 #include <sys/sendfile.h>],
5332 int tofd, fromfd;
5333 off_t offset;
5334 size_t total;
5335 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5337 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5339         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5340                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5341                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5342                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5343         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5344                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5345                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5346                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5347         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5348                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5349                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5350         else
5351                 AC_MSG_RESULT(no);
5352         fi
5354         ;;
5355         *freebsd* | *dragonfly* )
5356                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5357                 AC_TRY_LINK([\
5358 #include <sys/types.h>
5359 #include <unistd.h>
5360 #include <sys/socket.h>
5361 #include <sys/uio.h>],
5363         int fromfd, tofd, ret, total=0;
5364         off_t offset, nwritten;
5365         struct sf_hdtr hdr;
5366         struct iovec hdtrl;
5367         hdr.headers = &hdtrl;
5368         hdr.hdr_cnt = 1;
5369         hdr.trailers = NULL;
5370         hdr.trl_cnt = 0;
5371         hdtrl.iov_base = NULL;
5372         hdtrl.iov_len = 0;
5373         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5375 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5377         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5378                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5379                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5380                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5381         else
5382                 AC_MSG_RESULT(no);
5383         fi
5384         ;;
5386         *hpux*)
5387                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5388                 AC_TRY_LINK([\
5389 #include <sys/socket.h>
5390 #include <sys/uio.h>],
5392         int fromfd, tofd;
5393         size_t total=0;
5394         struct iovec hdtrl[2];
5395         ssize_t nwritten;
5396         off64_t offset;
5398         hdtrl[0].iov_base = 0;
5399         hdtrl[0].iov_len = 0;
5401         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5403 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5404         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5405                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5406                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5407                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5408         else
5409                 AC_MSG_RESULT(no);
5410         fi
5412                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5413                 AC_TRY_LINK([\
5414 #include <sys/socket.h>
5415 #include <sys/uio.h>],
5417         int fromfd, tofd;
5418         size_t total=0;
5419         struct iovec hdtrl[2];
5420         ssize_t nwritten;
5421         off_t offset;
5423         hdtrl[0].iov_base = 0;
5424         hdtrl[0].iov_len = 0;
5426         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5428 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5429         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5430                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5431                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5432                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5433         else
5434                 AC_MSG_RESULT(no);
5435         fi
5436         ;;
5438         *solaris*)
5439                 AC_CHECK_LIB(sendfile,sendfilev)
5440                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5441                 AC_TRY_LINK([\
5442 #include <sys/sendfile.h>],
5444         int sfvcnt;
5445         size_t xferred;
5446         struct sendfilevec vec[2];
5447         ssize_t nwritten;
5448         int tofd;
5450         sfvcnt = 2;
5452         vec[0].sfv_fd = SFV_FD_SELF;
5453         vec[0].sfv_flag = 0;
5454         vec[0].sfv_off = 0;
5455         vec[0].sfv_len = 0;
5457         vec[1].sfv_fd = 0;
5458         vec[1].sfv_flag = 0;
5459         vec[1].sfv_off = 0;
5460         vec[1].sfv_len = 0;
5461         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5463 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5465         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5466                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5467                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5468                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5469         else
5470                 AC_MSG_RESULT(no);
5471         fi
5473                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5474                 AC_TRY_LINK([\
5475 #include <sys/sendfile.h>],
5477         int sfvcnt;
5478         size_t xferred;
5479         struct sendfilevec vec[2];
5480         ssize_t nwritten;
5481         int tofd;
5483         sfvcnt = 2;
5485         vec[0].sfv_fd = SFV_FD_SELF;
5486         vec[0].sfv_flag = 0;
5487         vec[0].sfv_off = 0;
5488         vec[0].sfv_len = 0;
5490         vec[1].sfv_fd = 0;
5491         vec[1].sfv_flag = 0;
5492         vec[1].sfv_off = 0;
5493         vec[1].sfv_len = 0;
5494         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5496 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5498         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5499                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5500                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5501                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5502         else
5503                 AC_MSG_RESULT(no);
5504         fi
5505         ;;
5506         *aix*)
5507                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5508                 AC_TRY_LINK([\
5509 #include <sys/socket.h>],
5511         int fromfd, tofd;
5512         size_t total=0;
5513         struct sf_parms hdtrl;
5514         ssize_t nwritten;
5515         off64_t offset;
5517         hdtrl.header_data = 0;
5518         hdtrl.header_length = 0;
5519         hdtrl.file_descriptor = fromfd;
5520         hdtrl.file_offset = 0;
5521         hdtrl.file_bytes = 0;
5522         hdtrl.trailer_data = 0;
5523         hdtrl.trailer_length = 0;
5525         nwritten = send_file(&tofd, &hdtrl, 0);
5527 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5528         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5529                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5530                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5531                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5532         else
5533                 AC_MSG_RESULT(no);
5534         fi
5535         ;;
5536         *)
5537         ;;
5538         esac
5539         ;;
5540   *)
5541     AC_MSG_RESULT(no)
5542     ;;
5543   esac ],
5544   AC_MSG_RESULT(yes)
5547 ############################################
5548 # See if we have the Linux readahead syscall.
5550 AC_CACHE_CHECK([for Linux readahead],
5551                 samba_cv_HAVE_LINUX_READAHEAD,[
5552     AC_TRY_LINK([
5553 #if defined(HAVE_UNISTD_H)
5554 #include <unistd.h>
5555 #endif
5556 #include <fcntl.h>],
5557     [ssize_t err = readahead(0,0,0x80000);],
5558     samba_cv_HAVE_LINUX_READAHEAD=yes,
5559     samba_cv_HAVE_LINUX_READAHEAD=no)])
5561 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5562   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5563              [Whether Linux readahead is available])
5566 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
5568 ############################################
5569 # See if we have the posix_fadvise syscall.
5571 AC_CACHE_CHECK([for posix_fadvise],
5572                 samba_cv_HAVE_POSIX_FADVISE,[
5573     AC_TRY_LINK([
5574 #if defined(HAVE_UNISTD_H)
5575 #include <unistd.h>
5576 #endif
5577 #include <fcntl.h>],
5578     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5579     samba_cv_HAVE_POSIX_FADVISE=yes,
5580     samba_cv_HAVE_POSIX_FADVISE=no)])
5582 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5583   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5584              [Whether posix_fadvise is available])
5587 ############################################
5588 # See if we have the Linux splice syscall.
5590 AC_CACHE_CHECK([for Linux splice],
5591                 samba_cv_HAVE_LINUX_SPLICE,[
5592     AC_TRY_LINK([
5593 #if defined(HAVE_UNISTD_H)
5594 #include <unistd.h>
5595 #endif
5596 #include <fcntl.h>],
5597     [long ret = splice(0,0,1,0,400,0);],
5598     samba_cv_HAVE_LINUX_SPLICE=yes,
5599     samba_cv_HAVE_LINUX_SPLICE=no)])
5601 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
5602   AC_DEFINE(HAVE_LINUX_SPLICE,1,
5603              [Whether Linux splice is available])
5606 AC_HAVE_DECL(splice, [#include <fcntl.h>])
5609 #################################################
5610 # Check whether winbind is supported on this platform.  If so we need to
5611 # build and install client programs, sbin programs and shared libraries
5613 AC_MSG_CHECKING(whether to build winbind)
5615 # Initially, the value of $host_os decides whether winbind is supported
5617 HAVE_WINBIND=yes
5619 # Define the winbind shared library name and any specific linker flags
5620 # it needs to be built with.
5622 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
5623 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
5624 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5625 NSSSONAMEVERSIONSUFFIX=""
5626 WINBIND_NSS_PTHREAD=""
5628 case "$host_os" in
5629         *linux*)
5630                 NSSSONAMEVERSIONSUFFIX=".2"
5631                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
5632                 ;;
5633         *freebsd[[5-9]]*)
5634                 # FreeBSD winbind client is implemented as a wrapper around
5635                 # the Linux version.
5636                 NSSSONAMEVERSIONSUFFIX=".1"
5637                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
5638                     nsswitch/winbind_nss_linux.o"
5639                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5640                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5641                 ;;
5643         *netbsd*[[3-9]]*)
5644                 # NetBSD winbind client is implemented as a wrapper
5645                 # around the Linux version. It needs getpwent_r() to
5646                 # indicate libc's use of the correct nsdispatch API.
5647                 #
5648                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5649                         WINBIND_NSS_EXTRA_OBJS="\
5650                             nsswitch/winbind_nss_netbsd.o \
5651                             nsswitch/winbind_nss_linux.o"
5652                         WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5653                         WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5654                 else
5655                         HAVE_WINBIND=no
5656                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5657                 fi
5658                 ;;
5659         *irix*)
5660                 # IRIX has differently named shared libraries
5661                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
5662                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
5663                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
5664                 ;;
5665         *solaris*)
5666                 # Solaris winbind client is implemented as a wrapper around
5667                 # the Linux version.
5668                 NSSSONAMEVERSIONSUFFIX=".1"
5669                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
5670                     nsswitch/winbind_nss_linux.o"
5671                 WINBIND_NSS_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
5672                 PAM_WINBIND_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
5673                 ;;
5674         *hpux11*)
5675                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
5676                 ;;
5677         *aix*)
5678                 # AIX has even differently named shared libraries.  No
5679                 # WINS support has been implemented yet.
5680                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
5681                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5682                 WINBIND_NSS="nsswitch/WINBIND"
5683                 WINBIND_WINS_NSS=""
5684                 ;;
5685         *)
5686                 HAVE_WINBIND=no
5687                 winbind_no_reason=", unsupported on $host_os"
5688                 ;;
5689 esac
5691 # Check the setting of --with-winbind
5693 AC_ARG_WITH(winbind,
5694 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
5696   case "$withval" in
5697         yes)
5698                 HAVE_WINBIND=yes
5699                 ;;
5700         no)
5701                 HAVE_WINBIND=no
5702                 winbind_reason=""
5703                 ;;
5704   esac ],
5707 # We need unix domain sockets for winbind
5709 if test x"$HAVE_WINBIND" = x"yes"; then
5710         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
5711                 winbind_no_reason=", no unix domain socket support on $host_os"
5712                 HAVE_WINBIND=no
5713         fi
5716 # Display test results
5718 if test x"$HAVE_WINBIND" = x"no"; then
5719         WINBIND_NSS=""
5720         WINBIND_WINS_NSS=""
5723 if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
5724         BUILD_LIBWBCLIENT_SHARED=no
5725 else
5726         BUILD_LIBWBCLIENT_SHARED=yes
5729 LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
5730 LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
5731 if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
5732         NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
5733         ## Only worry about libwbclient if we have shared library support
5734         ## and winbindd
5735         LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
5736         LIBWBCLIENT=libwbclient
5737         INSTALL_LIBWBCLIENT=installlibwbclient
5738         UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
5739         WINBIND_LIBS="-lwbclient"
5740 else
5741         LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
5744 if test x"$HAVE_WINBIND" = x"yes"; then
5745         AC_MSG_RESULT(yes)
5746         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
5748         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
5749         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
5750         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
5751                 PAM_MODULES="$PAM_MODULES pam_winbind"
5752                 INSTALL_PAM_MODULES="installpammodules"
5753                 UNINSTALL_PAM_MODULES="uninstallpammodules"
5754         fi
5755 else
5756         AC_MSG_RESULT(no$winbind_no_reason)
5759 AC_CHECK_LIB(pthread, pthread_mutex_lock, [WINBIND_NSS_PTHREAD="-lpthread"
5760                         AC_DEFINE(HAVE_PTHREAD, 1, [whether pthread exists])])
5762 AC_SUBST(WINBIND_NSS_PTHREAD)
5763 AC_SUBST(WINBIND_NSS)
5764 AC_SUBST(WINBIND_WINS_NSS)
5765 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
5766 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
5767 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
5768 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
5769 AC_SUBST(PAM_WINBIND_EXTRA_LIBS)
5771 AC_SUBST(WINBIND_KRB5_LOCATOR)
5773 # Solaris 10 does have new member in nss_XbyY_key
5774 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
5775                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
5776                 [#include <nss_dbdefs.h>])
5778 # Solaris has some extra fields in struct passwd that need to be
5779 # initialised otherwise nscd crashes.
5781 AC_CHECK_MEMBER(struct passwd.pw_comment,
5782                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
5783                 [#include <pwd.h>])
5785 AC_CHECK_MEMBER(struct passwd.pw_age,
5786                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
5787                 [#include <pwd.h>])
5789 # AIX 4.3.x and 5.1 do not have as many members in
5790 # struct secmethod_table as AIX 5.2
5791 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
5792        [#include <usersec.h>])
5793 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
5794        [#include <usersec.h>])
5796 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
5797 AC_TRY_COMPILE([#include <sys/types.h>
5798 #include <sys/socket.h>],
5799 [struct ucred cred;
5800  socklen_t cred_len;
5801  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
5803 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
5804 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
5805     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
5809 #################################################
5810 # Check to see if we should use the included popt
5812 AC_ARG_WITH(included-popt,
5813 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
5815   case "$withval" in
5816         yes)
5817                 INCLUDED_POPT=yes
5818                 ;;
5819         no)
5820                 INCLUDED_POPT=no
5821                 ;;
5822   esac ],
5824 if test x"$INCLUDED_POPT" != x"yes"; then
5825     AC_CHECK_LIB(popt, poptGetContext,
5826                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
5829 AC_MSG_CHECKING(whether to use included popt)
5830 if test x"$INCLUDED_POPT" = x"yes"; then
5831     AC_MSG_RESULT(yes)
5832     BUILD_POPT='$(POPT_OBJ)'
5833     POPTLIBS='$(POPT_OBJ)'
5834     FLAGS1="-I\$(srcdir)/popt"
5835 else
5836     AC_MSG_RESULT(no)
5837         BUILD_POPT=""
5838     POPTLIBS="-lpopt"
5840 AC_SUBST(BUILD_POPT)
5841 AC_SUBST(POPTLIBS)
5842 AC_SUBST(FLAGS1)
5844 #################################################
5845 # Check if user wants DNS service discovery support
5847 AC_ARG_ENABLE(dnssd,
5848 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=auto)])])
5850 AC_SUBST(DNSSD_LIBS)
5851 if test x"$enable_dnssd" != x"no"; then
5852     have_dnssd_support=yes
5854     AC_CHECK_HEADERS(dns_sd.h)
5855     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
5856         have_dnssd_support=no
5857     fi
5859     # On Darwin the DNSSD API is in libc, but on other platforms it's
5860     # probably in -ldns_sd
5861     AC_CHECK_FUNCS(DNSServiceRegister)
5862     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
5863     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
5864             x"$ac_cv_lib_ext_DNSServiceRegister" != x"yes"; then
5865         have_dnssd_support=no
5866     fi
5868     if test x"$have_dnssd_support" = x"yes"; then
5869         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
5870                 [Whether to enable DNS service discovery support])
5871     else
5872         if test x"$enable_dnssd" = x"yes"; then
5873             AC_MSG_ERROR(DNS service discovery support not available)
5874         fi
5875     fi
5879 #################################################
5880 # Check to see if we should use the included iniparser
5882 AC_ARG_WITH(included-iniparser,
5883 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
5885   case "$withval" in
5886         yes)
5887                 INCLUDED_INIPARSER=yes
5888                 ;;
5889         no)
5890                 INCLUDED_INIPARSER=no
5891                 ;;
5892   esac ],
5894 if test x"$INCLUDED_INIPARSER" != x"yes"; then
5895     AC_CHECK_LIB(iniparser, iniparser_load,
5896                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
5899 AC_MSG_CHECKING(whether to use included iniparser)
5900 if test x"$INCLUDED_INIPARSER" = x"yes"; then
5901     AC_MSG_RESULT(yes)
5902     BUILD_INIPARSER='$(INIPARSER_OBJ)'
5903         INIPARSERLIBS=""
5904     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
5905 else
5906     AC_MSG_RESULT(no)
5907         BUILD_INIPARSER=""
5908     INIPARSERLIBS="-liniparser"
5910 AC_SUBST(BUILD_INIPARSER)
5911 AC_SUBST(INIPARSERLIBS)
5912 AC_SUBST(FLAGS1)
5916 # Checks for the vfs_fileid module
5917 # Start
5918 AC_CHECK_FUNC(getmntent)
5920 AC_CHECK_HEADERS(sys/statfs.h)
5922 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
5923 AC_CACHE_VAL(vfsfileid_cv_statfs,[
5924              AC_TRY_RUN([
5925                 #include <sys/types.h>
5926                 #include <sys/statfs.h>
5927                 int main(void)
5928                 {
5929                         struct statfs fsd;
5930                         fsid_t fsid = fsd.f_fsid;
5931                         return statfs (".", &fsd);
5932                 }],
5933                 vfsfileid_cv_statfs=yes,
5934                 vfsfileid_cv_statfs=no,
5935                 vfsfileid_cv_statfs=cross)
5937 AC_MSG_RESULT($vfsfileid_cv_statfs)
5939 if test x"$ac_cv_func_getmntent" = x"yes" -a \
5940         x"$vfsfileid_cv_statfs" = x"yes"; then
5941         default_shared_modules="$default_shared_modules vfs_fileid"
5943 # End
5944 # Checks for the vfs_fileid module
5947 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
5949         eval MODULE_DEFAULT_$i=STATIC
5950 done
5952 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
5954         dnl Fall back to static if we cannot build shared libraries
5955         eval MODULE_DEFAULT_$i=STATIC
5957         if test $BLDSHARED = true; then
5958                 eval MODULE_DEFAULT_$i=SHARED
5959         fi
5960 done
5962 dnl Always build these modules static
5963 MODULE_rpc_spoolss=STATIC
5964 MODULE_rpc_srvsvc=STATIC
5965 MODULE_idmap_tdb=STATIC
5966 MODULE_idmap_passdb=STATIC
5967 MODULE_idmap_nss=STATIC
5969 MODULE_nss_info_template=STATIC
5971 AC_ARG_WITH(static-modules,
5972 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
5973 [ if test $withval; then
5974         for i in `echo $withval | sed -e 's/,/ /g'`
5975         do
5976                 eval MODULE_$i=STATIC
5977         done
5978 fi ])
5980 AC_ARG_WITH(shared-modules,
5981 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
5982 [ if test $withval; then
5983         for i in `echo $withval | sed -e 's/,/ /g'`
5984         do
5985                         eval MODULE_$i=SHARED
5986         done
5987 fi ])
5989 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
5990                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
5991 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
5992 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
5993 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
5996 SMB_MODULE(rpc_lsarpc, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
5997 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
5998 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
5999 SMB_MODULE(rpc_dssetup, \$(RPC_DSSETUP_OBJ), "bin/librpc_dssetup.$SHLIBEXT", RPC)
6000 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6001 SMB_MODULE(rpc_svcctl2, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl2.$SHLIBEXT", RPC)
6002 SMB_MODULE(rpc_ntsvcs2, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs2.$SHLIBEXT", RPC)
6003 SMB_MODULE(rpc_netlogon, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6004 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6005 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc.$SHLIBEXT", RPC)
6006 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6007 SMB_MODULE(rpc_eventlog2, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog2.$SHLIBEXT", RPC)
6008 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6009 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
6010 SMB_SUBSYSTEM(RPC,smbd/server.o)
6012 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6013 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6014 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6015 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6016 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6017 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6018 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6019 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6021 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6022 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6024 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6025 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6026 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6027 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6028 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6030 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6031 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6032 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6033 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6034 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6035 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6036 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6037 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6039 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6040 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6041 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6042 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6043 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6044 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6045 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6046 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6047 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6048 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6049 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6050 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6051 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6052 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6053 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6054 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6055 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6056 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6057 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6058 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6059 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6060 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6061 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6062 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6063 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6064 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6065 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6066 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6067 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6068 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6069 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6070 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6071 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6072 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6073 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6074 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6077 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6079 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6081 #################################################
6082 # do extra things if we are running insure
6084 if test "${ac_cv_prog_CC}" = "insure"; then
6085         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6088 #################################################
6089 # If run from the build farm, enable NASTY hacks
6090 #################################################
6091 AC_MSG_CHECKING(whether to enable build farm hacks)
6092 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6093         AC_MSG_RESULT(yes)
6094         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6095 else
6096         AC_MSG_RESULT(no)
6099 #################################################
6100 # check for bad librt/libpthread interactions
6102 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6103     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6104     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6105     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6107 SMB_IF_RTSIGNAL_BUG(
6108         [
6109             # Have RT_SIGNAL bug, need to check whether the problem will
6110             # affect anything we have configured.
6112             rt_do_error=no
6113             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6114                 if test x"$rt_signal_lease_ok" = x"no" ; then
6115                     rt_do_error=yes
6116                 fi
6117             fi
6119             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6120                 if test x"$rt_signal_notify_ok" = x"no" ; then
6121                     rt_do_error=yes
6122                 fi
6123             fi
6125             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6126                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6127                 if test x"$rt_signal_aio_ok" = x"no" ; then
6128                     rt_do_error=yes
6129                 fi
6130             fi
6132             if test x"$rt_do_error" = x"yes" ; then
6133                 SMB_IS_LIBPTHREAD_LINKED(
6134                     [
6135                         cat<<MSG
6137 *** On this platforms, linking Samba against pthreads causes problems
6138 *** with the oplock and change notification mechanisms. You may be
6139 *** using pthreads as a side-effect of using the --with-aio-support
6140 *** or --with-profiling-data options. Please remove these and try again.
6143                     ],
6144                     [
6145                         cat<<MSG
6147 *** On this platform, the oplock and change notification mechanisms do not
6148 *** appear to work. Please report this problem to samba-technical@samba.org
6149 *** and attach the config.log file from this directory.
6152                     ])
6153                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6154             fi
6155         ],
6156         [
6157             # no RT_SIGNAL bug, we are golden
6158             SMB_IS_LIBPTHREAD_LINKED(
6159                 [
6160                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6161                 ])
6163         ],
6164         [
6165             # cross compiling, I hope you know what you are doing
6166             true
6167         ])
6171 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6172 LIB_REMOVE_USR_LIB(LDFLAGS)
6173 LIB_REMOVE_USR_LIB(LIBS)
6174 LIB_REMOVE_USR_LIB(KRB5_LIBS)
6176 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6177 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6178 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6180 #################################################
6181 # Display summary of libraries detected
6183 AC_MSG_RESULT([Using libraries:])
6184 AC_MSG_RESULT([    LIBS = $LIBS])
6185 if test x"$with_ads_support" != x"no"; then
6186     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6188 if test x"$with_ldap_support" != x"no"; then
6189     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6191 if test x"$with_dnsupdate_support" != x"no"; then
6192     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6194 if test x"$have_dnssd_support" != x"no"; then
6195     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6197 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6199 #################################################
6200 # final configure stuff
6202 AC_MSG_CHECKING([configure summary])
6203 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
6204            AC_MSG_RESULT(yes),
6205            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6206            AC_MSG_WARN([cannot run when cross-compiling]))
6208 dnl Merge in developer cflags from now on
6209 AC_SUBST(DEVELOPER_CFLAGS)
6210 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes"; then
6211     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
6214 # Stuff the smbd-only libraries at the end of the smbd link
6215 # path (if we have them).
6216 SMBD_LIBS="$samba_dmapi_libs"
6217 AC_SUBST(SMBD_LIBS)
6219 AC_OUTPUT(Makefile library-versions
6220           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
6221           lib/netapi/examples/Makefile
6222           pkgconfig/smbclient.pc
6223           pkgconfig/wbclient.pc
6224           pkgconfig/netapi.pc
6225           pkgconfig/smbsharemodes.pc
6226           )
6228 #################################################
6229 # Print very concise instructions on building/use
6230 if test "x$enable_dmalloc" = xyes
6231 then
6232         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6233         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])