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