dsdb-acl: add acl_check_access_on_objectclass() helper
[Samba/gbeck.git] / source3 / configure.in
blobb17a37ec9e2d72ca73b39b4a587b02f78961dd2e
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/autoconf/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
26 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
28 m4_include(../lib/tevent/libtevent.m4)
29 m4_include(../lib/ccan/libccan.m4)
31 LIBTEVENT_OBJ0=""
32 for obj in ${TEVENT_OBJ}; do
33         LIBTEVENT_OBJ0="${LIBTEVENT_OBJ0} ${teventdir}/${obj}"
34 done
35 AC_SUBST(LIBTEVENT_OBJ0)
36 LIBS="${LIBS} ${TEVENT_LIBS}"
38 SAMBA_CPPFLAGS="-Iinclude/autoconf -Iautoconf -Iautoconf/source3"
39 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
40 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/replace"
41 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TEVENT_CFLAGS}"
42 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CCAN_CFLAGS}"
43 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
44 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/.."
45 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/tdb_compat"
47 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/popt"
49 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
50 if test "x${srcdir-.}" != "x."; then
51         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
54 dnl Unique-to-Samba variables we'll be playing with.
55 AC_SUBST(SAMBA_CPPFLAGS)
56 AC_SUBST(SHELL)
57 AC_SUBST(LDSHFLAGS)
58 AC_SUBST(SONAMEFLAG)
59 AC_SUBST(SHLD)
60 AC_SUBST(MODULE_EXPORTS)
61 AC_SUBST(DSO_EXPORTS)
62 AC_SUBST(HOST_OS)
63 AC_SUBST(PICFLAG)
64 AC_SUBST(PIE_CFLAGS)
65 AC_SUBST(PIE_LDFLAGS)
66 AC_SUBST(RELRO_LDFLAGS)
67 AC_SUBST(SHLIBEXT)
68 AC_SUBST(INSTALLLIBCMD_SH)
69 AC_SUBST(INSTALLLIBCMD_A)
70 AC_SUBST(UNINSTALLLIBCMD_SH)
71 AC_SUBST(UNINSTALLLIBCMD_A)
73 AC_SUBST(INSTALL_LIBWBCLIENT)
74 AC_SUBST(UNINSTALL_LIBWBCLIENT)
75 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
76 AC_SUBST(LIBWBCLIENT_SHARED_TARGET_SOVER)
77 AC_SUBST(LIBWBCLIENT_SHARED_TARGET_FULLVER)
78 AC_SUBST(LIBWBCLIENT_SHARED)
79 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
80 AC_SUBST(LIBWBCLIENT_STATIC)
81 AC_SUBST(LIBWBCLIENT_SOVER)
82 AC_SUBST(LIBWBCLIENT_FULLVER)
83 AC_SUBST(LIBWBCLIENT)
84 AC_SUBST(LIBWBCLIENT_LIBS)
86 AC_SUBST(LIBSAMBAUTIL_SHARED)
88 AC_SUBST(PRINT_LIBS)
89 AC_SUBST(AUTH_LIBS)
90 AC_SUBST(ACL_LIBS)
91 AC_SUBST(PASSDB_LIBS)
92 AC_SUBST(IDMAP_LIBS)
93 AC_SUBST(KRB5_LIBS)
94 AC_SUBST(LDAP_LIBS)
95 AC_SUBST(GPEXT_LIBS)
96 AC_SUBST(PAM_MODULES)
97 AC_SUBST(INSTALL_PAM_MODULES)
98 AC_SUBST(UNINSTALL_PAM_MODULES)
99 AC_SUBST(NSS_MODULES)
100 AC_SUBST(EXTRA_BIN_PROGS)
101 AC_SUBST(CIFSMOUNT_PROGS)
102 AC_SUBST(INSTALL_CIFSMOUNT)
103 AC_SUBST(UNINSTALL_CIFSMOUNT)
104 AC_SUBST(CIFSUMOUNT_PROGS)
105 AC_SUBST(INSTALL_CIFSUMOUNT)
106 AC_SUBST(UNINSTALL_CIFSUMOUNT)
107 AC_SUBST(CIFSUPCALL_PROGS)
108 AC_SUBST(INSTALL_CIFSUPCALL)
109 AC_SUBST(UNINSTALL_CIFSUPCALL)
110 AC_SUBST(EXTRA_SBIN_PROGS)
111 AC_SUBST(EXTRA_ALL_TARGETS)
112 AC_SUBST(CONFIG_LIBS)
113 AC_SUBST(NSCD_LIBS)
115 # compile with optimization and without debugging by default, but
116 # allow people to set their own preference.
117 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
118 # if it has no value.  This prevent *very* large debug binaries from occurring
119 # by default.
120 if test "x$debug" = "xyes" ; then
121         CFLAGS="${CFLAGS} -g"
123 if test "x$CFLAGS" = x; then
124   CFLAGS="-O"
127 m4_include(../lib/socket_wrapper/config.m4)
128 m4_include(../lib/nss_wrapper/config.m4)
129 m4_include(../lib/uid_wrapper/config.m4)
131 m4_include(m4/swat.m4)
133 DEVELOPER_CFLAGS="-DDEBUG_PASSWORD -DDEVELOPER"
135 # Probe the gcc version for extra CFLAGS. We always stash these in
136 # DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
137 # Makefile edit, avoiding the need to re-run configure.
138 if test x"$ac_cv_prog_gcc" = x"yes" ; then
139         DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings"
140         # Add -Wdeclaration-after-statement if compiler supports it
141         AC_CACHE_CHECK(
142           [that the C compiler understands -Wdeclaration-after-statement],
143           samba_cv_HAVE_Wdeclaration_after_statement, [
144           AC_TRY_RUN_STRICT([
145             int main(void)
146             {
147                 return 0;
148             }],[$CFLAGS -Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
149             samba_cv_HAVE_Wdeclaration_after_statement=yes,
150             samba_cv_HAVE_Wdeclaration_after_statement=no,
151             samba_cv_HAVE_Wdeclaration_after_statement=cross)
152        ])
154         if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
155             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
156         fi
158         #-Werror-implicit-function-declaration
159         AC_CACHE_CHECK(
160           [that the C compiler understands -Werror-implicit-function-declaration],
161           samba_cv_HAVE_Werror_implicit_function_declaration, [
162           AC_TRY_RUN_STRICT([
163             int main(void)
164             {
165                 return 0;
166             }],[$CFLAGS -Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
167             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
168             samba_cv_HAVE_Werror_implicit_function_declaration=no,
169             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
170        ])
171        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
172             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
173        fi
175         # krb5developer is like developer, except we don't get
176         # -Wstrict-prototypes.
177        if test x"$krb5_developer" != x"$yes" ; then
178             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
179        fi
181        if test x"$picky_developer" = x"yes"; then
182             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Werror"
183        fi
186 #################################################
187 # check for a shared memory profiling support
188 AC_MSG_CHECKING(whether to use profiling)
189 AC_ARG_WITH(profiling-data,
190 [AS_HELP_STRING([--with-profiling-data], [Include gathering source code profile information (default=no)])],
191 [ case "$withval" in
192   yes)
193     AC_MSG_RESULT(yes)
194     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
195     samba_cv_WITH_PROFILE=yes
196     ;;
197   *)
198     AC_MSG_RESULT(no)
199     samba_cv_WITH_PROFILE=no
200     ;;
201   esac ],
202   AC_MSG_RESULT(no)
205 AC_PROG_INSTALL
206 AC_PROG_AWK
207 # Check for GNU make
208 m4_include(../m4/check_make.m4)
209 AC_SAMBA_GNU_MAKE([true], [true])
211 selftest_possible="yes"
213 # Check for perl
214 m4_include(../m4/check_perl.m4)
215 AC_SAMBA_PERL([true], [selftest_possible=no])
217 # Check for python
218 m4_include(../m4/check_python.m4)
219 AC_SAMBA_PYTHON_DEVEL([true], [selftest_possible=no])
221 AC_CHECK_TOOL(AR, ar)
223 dnl Check if we (actually our C compiler!) use GNU ld
224 AC_PROG_LD_GNU
226 dnl Certain versions of GNU ld the default is not to have the
227 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
228 dnl warnings when building modules.
229 if test "$ac_cv_prog_gnu_ld" = "yes"; then
230         ac_cv_gnu_ld_version=`$CC -Wl,-v /dev/null 2>&1 < /dev/null | grep "GNU ld"`
231         AC_MSG_CHECKING(GNU ld release date)
232         changequote(,)dnl
233         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'`
234         changequote([,])dnl
235         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
236         if test -n "$ac_cv_gnu_ld_date"; then
237         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
238                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
239         fi
240         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
241                 ac_cv_gnu_ld_version_script=yes
242         fi
243         else
244            AC_MSG_CHECKING(GNU ld release version)
245            changequote(,)dnl
246            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | awk '{print $NF}' | sed -n 's,\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
247            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
248            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
249            changequote([,])dnl
250            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
251            AC_MSG_CHECKING(GNU ld release version major)
252            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
253            AC_MSG_CHECKING(GNU ld release version minor)
254            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
255            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
256              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
257            fi
258            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
259              ac_cv_gnu_ld_version_script=yes
260            fi
261         fi
264 dnl Check if C compiler understands -c and -o at the same time
265 AC_PROG_CC_C_O
266 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
267       BROKEN_CC=
268 else
269       BROKEN_CC=#
271 AC_SUBST(BROKEN_CC)
273 dnl Check if the C compiler understands -Werror (GNU)
274 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
275  AC_TRY_RUN_STRICT([
276   int main(void)
277   {
278         return 0;
279   }],[$CFLAGS -Werror],[$CPPFLAGS],[$LDFLAGS],
280   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
281 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
282    Werror_FLAGS="-Werror"
283 else
284 dnl Check if the C compiler understands -w2
285 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
286  AC_TRY_RUN_STRICT([
287   int main(void)
288   {
289         return 0;
290   }],[$CFLAGS -w2],[$CPPFLAGS],[$LDFLAGS],
291   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
292 if test x"$samba_cv_HAVE_w2" = x"yes"; then
293    Werror_FLAGS="-w2"
294 else
295 dnl Check if the C compiler understands -errwarn (Sun)
296 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
297   AC_TRY_RUN_STRICT([
298    int main(void)
299    {
300         return 0;
301    }],[$CFLAGS -errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
302    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
303 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
304    Werror_FLAGS="-errwarn=%all"
305 else
306 dnl Check if the C compiler understands -qhalt (IBM)
307 AC_CACHE_CHECK([that the C compiler understands -qhalt],samba_cv_HAVE_qhalt, [
308   AC_TRY_RUN_STRICT([
309    int main(void)
310    {
311         return 0;
312    }],[$CFLAGS -qhalt=w],[$CPPFLAGS],[$LDFLAGS],
313    samba_cv_HAVE_qhalt=yes,samba_cv_HAVE_qhalt=no,samba_cv_HAVE_qhalt=cross)])
314 if test x"$samba_cv_HAVE_qhalt" = x"yes"; then
315    Werror_FLAGS="-qhalt=w"
321 ############################################
322 # check if the compiler can handle negative enum values
323 # and don't truncate the values to INT_MAX
324 # a runtime test is needed here
325 AC_SUBST(PIDL_ARGS)
326 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
327     AC_TRY_RUN(
329         #include <stdio.h>
330         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
331         int main(void) {
332                 enum negative_values v1 = NEGATIVE_VALUE;
333                 unsigned v2 = NEGATIVE_VALUE;
335                 if (v1 != 0xFFFFFFFF) {
336                         printf("%u != 0xFFFFFFFF\n", v1);
337                         return 1;
338                 }
339                 if (v2 != 0xFFFFFFFF) {
340                         printf("%u != 0xFFFFFFFF\n", v2);
341                         return 1;
342                 }
344                 return 0;
345         }
347         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv_CC_NEGATIVE_ENUM_VALUES=no)])
348 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
349         AC_MSG_WARN([using --uint-enums for pidl])
350         PIDL_ARGS="$PIDL_ARGS --uint-enums"
353 dnl Figure out the flags to support named structure initializers
355 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
357 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
358 AC_MSG_CHECKING(uname -s)
359 AC_MSG_RESULT(${UNAME_S})
361 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
362 AC_MSG_CHECKING(uname -r)
363 AC_MSG_RESULT(${UNAME_R})
365 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
366 AC_MSG_CHECKING(uname -m)
367 AC_MSG_RESULT(${UNAME_M})
369 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
370 AC_MSG_CHECKING(uname -p)
371 AC_MSG_RESULT(${UNAME_P})
373 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
374 AC_MSG_CHECKING(uname -i)
375 AC_MSG_RESULT(${UNAME_I})
377 dnl Add #include for broken IRIX header files
378   case "$host_os" in
379         *irix6*)
380                 #TODO add to libreplace
381                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
382                         dnl Fix sensible defaults for MIPSPro compilers. The
383                         dnl error numbers are valid for the 7.3 compilers,
384                         dnl hopefully also valid for the 7.4 series.
385                         dnl
386                         dnl Bugzilla 3801. Force an error on warning 1035
387                         dnl so we don't incorrectly detect stdint.h. This
388                         dnl warning is emitted for #error directives.
389                         CFLAGS="$CFLAGS -diag_error 1035"
390                         dnl 1209: Controlling expression is constant
391                         dnl 1174: Function foo declared but never referenced
392                         dnl 3201: Parameter foo was never referenced
393                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
394                 fi
395         ;;
396 esac
398 DYNEXP=
399 AC_SUBST(DYNEXP)
400 LDSHFLAGS_Z_DEFS=
401 AC_SUBST(LDSHFLAGS_Z_DEFS)
402 LDSHFLAGS_Z_NODEFS=
403 AC_SUBST(LDSHFLAGS_Z_NODEFS)
405 dnl Add modules that have to be built by default here
406 dnl These have to be built static:
407 default_static_modules=""
408 default_static_modules="$default_static_modules pdb_smbpasswd"
409 default_static_modules="$default_static_modules pdb_tdbsam"
410 default_static_modules="$default_static_modules pdb_wbc_sam"
411 default_static_modules="$default_static_modules rpc_lsarpc"
412 default_static_modules="$default_static_modules rpc_samr"
413 default_static_modules="$default_static_modules rpc_winreg"
414 default_static_modules="$default_static_modules rpc_initshutdown"
415 default_static_modules="$default_static_modules rpc_dssetup"
416 default_static_modules="$default_static_modules rpc_wkssvc"
417 default_static_modules="$default_static_modules rpc_svcctl"
418 default_static_modules="$default_static_modules rpc_ntsvcs"
419 default_static_modules="$default_static_modules rpc_netlogon"
420 default_static_modules="$default_static_modules rpc_netdfs"
421 default_static_modules="$default_static_modules rpc_srvsvc"
422 default_static_modules="$default_static_modules rpc_spoolss"
423 default_static_modules="$default_static_modules rpc_eventlog"
424 default_static_modules="$default_static_modules auth_sam"
425 default_static_modules="$default_static_modules auth_unix"
426 default_static_modules="$default_static_modules auth_winbind"
427 default_static_modules="$default_static_modules auth_wbc"
428 default_static_modules="$default_static_modules auth_domain"
429 default_static_modules="$default_static_modules auth_builtin"
430 default_static_modules="$default_static_modules vfs_default"
431 default_static_modules="$default_static_modules nss_info_template"
433 dnl These are preferably build shared, and static if dlopen() is not available
434 default_shared_modules=""
435 default_shared_modules="$default_shared_modules vfs_recycle"
436 default_shared_modules="$default_shared_modules vfs_audit"
437 default_shared_modules="$default_shared_modules vfs_extd_audit"
438 default_shared_modules="$default_shared_modules vfs_full_audit"
439 default_shared_modules="$default_shared_modules vfs_netatalk"
440 default_shared_modules="$default_shared_modules vfs_fake_perms"
441 default_shared_modules="$default_shared_modules vfs_default_quota"
442 default_shared_modules="$default_shared_modules vfs_readonly"
443 default_shared_modules="$default_shared_modules vfs_cap"
444 default_shared_modules="$default_shared_modules vfs_expand_msdfs"
445 default_shared_modules="$default_shared_modules vfs_shadow_copy"
446 default_shared_modules="$default_shared_modules vfs_shadow_copy2"
447 default_shared_modules="$default_shared_modules auth_script"
448 default_shared_modules="$default_shared_modules vfs_readahead"
449 default_shared_modules="$default_shared_modules vfs_xattr_tdb"
450 default_shared_modules="$default_shared_modules vfs_streams_xattr"
451 default_shared_modules="$default_shared_modules vfs_streams_depot"
452 default_shared_modules="$default_shared_modules vfs_acl_xattr"
453 default_shared_modules="$default_shared_modules vfs_acl_tdb"
454 default_shared_modules="$default_shared_modules vfs_smb_traffic_analyzer"
455 default_shared_modules="$default_shared_modules vfs_preopen"
456 default_shared_modules="$default_shared_modules vfs_catia"
457 default_shared_modules="$default_shared_modules vfs_scannedonly"
458 default_shared_modules="$default_shared_modules vfs_crossrename"
459 default_shared_modules="$default_shared_modules vfs_linux_xfs_sgid"
460 default_shared_modules="$default_shared_modules vfs_time_audit"
461 default_shared_modules="$default_shared_modules vfs_media_harmony"
462 default_shared_modules="$default_shared_modules vfs_commit"
463 default_shared_modules="$default_shared_modules idmap_autorid"
464 default_shared_modules="$default_shared_modules idmap_tdb2"
465 default_shared_modules="$default_shared_modules idmap_rid"
466 default_shared_modules="$default_shared_modules idmap_hash"
468 if test "x$developer" = xyes; then
469    default_shared_modules="$default_shared_modules perfcount_test"
472 if test x"$selftest" = x"yes" -o "x$developer" = xyes; then
473    default_shared_modules="$default_shared_modules vfs_fake_acls"
477 # Config CPPFLAG settings for strange OS's that must be set
478 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
479 # case statement; its first reference must be unconditional.
481 case "$host_os" in
482     *hpux*)
484 # Defines needed for HPUX support.
485 # HPUX has bigcrypt but (sometimes?) doesn't use it for
486 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
488       case `uname -r` in
489                 *9*|*10*|*11)
490                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
491                 ;;
492       esac
493       ;;
496 # AIX4.x doesn't even admit to having large
497 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
499     *aix4*)
500           AC_MSG_RESULT([enabling large file support])
501           CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
502           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
503       ;;
505 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
506 # to the existance of large files..
508 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
510         *solaris*)
511                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
512                 LDFLAGS="$LDFLAGS -lthread"
513                 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
514                 ;;
516 # IRIX uses SYSV printing.  Make sure to set that here
518         *irix*)
519                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
520                 ;;
521         *freebsd*|*dragonfly*)
522                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
523                 ;;
525 # VOS may need to have POSIX support and System V compatibility enabled.
527     *vos*)
528     case "$CPPFLAGS" in
529           *-D_POSIX_C_SOURCE*)
530                 ;;
531           *)
532                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
533                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
534                 ;;
535     esac
536     case "$CPPFLAGS" in
537           *-D_SYSV*|*-D_SVID_SOURCE*)
538                 ;;
539           *)
540                 CPPFLAGS="$CPPFLAGS -D_SYSV"
541                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
542     esac
543     ;;
544 # GNU systems
546     *linux* | *hurd* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
547         CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
548         AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
549         ;;
552 # MacOS X is the *only* system that uses compose character in utf8. This
553 # is so horribly broken....
555     *darwin*)
556         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
558 # Add a system specific charset module.
559         default_shared_modules="$default_shared_modules"
561         ;;
562     *qnx*)
563         ;;
565 esac
567 SAVE_CPPFLAGS="${CPPFLAGS}"
568 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
570 AC_LIBREPLACE_BROKEN_CHECKS
571 AC_CHECK_FUNCS([syslog],[],[AC_MSG_ERROR([Required function not found])])
572 AC_LIBREPLACE_NETWORK_CHECKS
574 CPPFLAGS="${SAVE_CPPFLAGS}"
576 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
578 LIBREPLACE_OBJS="${LIBREPLACEOBJ}"
579 AC_SUBST(LIBREPLACE_OBJS)
581 LIBREPLACE_LIBS="${LIBREPLACE_NETWORK_LIBS} ${LIBREPLACE_FILESYS_LIBS}"
582 AC_SUBST(LIBREPLACE_LIBS)
585 # add -ldl to the global LIBS
586 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
587 AUTH_LIBS="${AUTH_LIBS} ${CRYPT_LIBS}"
590 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
591 AC_CHECK_HEADERS(unistd.h grp.h sys/id.h memory.h alloca.h)
592 AC_CHECK_HEADERS(limits.h float.h libintl.h)
593 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
594 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)
595 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
596 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
597 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
598 AC_CHECK_HEADERS(sys/sysmacros.h)
599 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
600 AC_CHECK_HEADERS(langinfo.h locale.h)
601 AC_CHECK_HEADERS(xfs/libxfs.h)
602 AC_CHECK_HEADERS(netgroup.h)
603 AC_CHECK_HEADERS(linux/falloc.h)
604 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
606 dnl check for OS implementation of md5 conformant to rfc1321
607 samba_cv_md5lib=none
609 AC_CHECK_LIB(c, MD5Update, [samba_cv_md5lib=""])
611 if test x"$samba_cv_md5lib" = x"none" ; then
612         AC_CHECK_LIB(md, MD5Update, [samba_cv_md5lib=md])
615 if test x"$samba_cv_md5lib" = x"none" ; then
616         AC_CHECK_LIB(md5, MD5Update, [samba_cv_md5lib=md5])
619 if test x"$samba_cv_md5lib" != x"none" ; then
620         AC_CHECK_HEADERS(md5.h)
623 CRYPTO_MD5_OBJ="../lib/crypto/md5.o"
624 if test x"$ac_cv_header_md5_h" = x"yes" -a \
625         x"$samba_cv_md5lib" != x"none" ; then
626         if test x"$samba_cv_md5lib" != x ; then
627                 LIBS="${LIBS} -l${samba_cv_md5lib}"
628                 AC_DEFINE(HAVE_LIBMD5, 1,
629                                   [Whether libmd5 conformant to rfc1321 is available.])
630         fi
631         CRYPTO_MD5_OBJ=
634 if test "x$ac_cv_header_CommonCrypto_CommonDigest_h" == "xyes"; then
635         CRYPTO_MD5_OBJ=
638 AC_SUBST(CRYPTO_MD5_OBJ)
640 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
641 #if HAVE_RPC_RPC_H
642 #include <rpc/rpc.h>
643 #endif
645 ## These fail to compile on IRIX so just check for their presence
646 AC_CHECK_HEADERS(sys/mode.h,,,)
648 # Look for Darwin headers
649 old_CPPFLAGS="$CPPFLAGS"
650 CPPFLAGS="-Iinclude $CPPFLAGS"
651 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
652 CPPFLAGS="$old_CPPFLAGS"
654 # To link lib/util/charset/charset_macosxfs.c, we need to tell the linker
655 # about CoreFoundation, at least on os X 10.4..10.7 resp. darwin8..12
656 case "$host_os" in
657     *darwin*)
658                 LDFLAGS="$LDFLAGS -framework CoreFoundation"
659         ;;
660 esac
662 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
663 # subdirectory of headers.
664 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
666 if test x"$enable_developer" = x"yes" ; then
667    if test x"$ac_cv_header_valgrind_h" = xyes -o \
668            x"$ac_cv_header_valgrind_valgrind_h" = xyes ; then
669       AC_DEFINE(VALGRIND,1,[Whether we have valgrind headers])
670    fi
674 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
675 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
677 case "$host_os" in
678     *hpux*)
679                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
680                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
681                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
682                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
683                 fi
684         ;;
685 esac
686 AC_CHECK_HEADERS(shadow.h)
687 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
688 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
690 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
692 # For experimental utmp support (lastlog on some BSD-like systems)
693 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
695 AC_CHECK_SIZEOF(int,cross)
696 AC_CHECK_SIZEOF(long,cross)
697 AC_CHECK_SIZEOF(long long,cross)
698 AC_CHECK_SIZEOF(short,cross)
700 AC_C_CONST
701 AC_C_INLINE
702 AC_C_BIGENDIAN
703 AC_C_CHAR_UNSIGNED
705 AC_TYPE_SIGNAL
706 AC_TYPE_UID_T
707 AC_TYPE_MODE_T
708 AC_TYPE_OFF_T
709 AC_TYPE_SIZE_T
710 AC_TYPE_PID_T
711 AC_STRUCT_ST_RDEV
712 AC_DIRENT_D_OFF
713 AC_CHECK_TYPE(ssize_t, int)
714 AC_CHECK_TYPE(wchar_t, unsigned short)
716 ############################################
717 # for cups support we need libcups, and a handful of header files
719 AC_ARG_ENABLE(cups,
720 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
722 if test x$enable_cups != xno; then
723         AC_PATH_PROG(CUPS_CONFIG, cups-config)
725         if test "x$CUPS_CONFIG" != x; then
727                 ac_save_LDFLAGS=$LDFLAGS
728                 ac_save_PRINT_LIBS=$PRINT_LIBS
729                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
731                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
732                         x"$ac_cv_header_cups_language_h" = xyes; then
733                         # try linking with -lcups alone first. That should work unless libcups is
734                         # underlinked. With cups-config --libs we pull in unwanted and unneeded
735                         # dendencies including thread libraries - use cups-config only if really
736                         # required. 
737                         AC_CHECK_LIB_EXT(cups, ac_save_PRINT_LIBS , httpConnect,
738                                 [PRINT_LIBS="$ac_save_PRINT_LIBS -lcups"],
739                                 [AC_MSG_WARN([your cups library doesn't link with -lcups alone, it might be underlinked.]) ;
740                                  PRINT_LIBS="$ac_save_PRINT_LIBS `$CUPS_CONFIG --libs`"])
742                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
743                         samba_cv_HAVE_CUPS=yes
744                         AC_CHECK_LIB_EXT(cups, PRINT_LIBS, httpConnectEncrypt)
745                 else
746                         AC_MSG_WARN([cups-config around but cups-devel not installed])
747                         CFLAGS=$ac_save_CFLAGS
748                         LDFLAGS=$ac_save_LDFLAGS
749                         PRINT_LIBS=$ac_save_PRINT_LIBS
750                 fi
752         elif test x"$enable_cups" = x"yes"; then
753                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
754         fi
757 AC_ARG_ENABLE(iprint,
758 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
760 if test x$enable_iprint != xno; then
761         if test x"$samba_cv_HAVE_CUPS" = xyes; then
762                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
763         elif test x"$enable_iprint" = x"yes"; then
764                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
765         fi
768 ############################################
769 # check if the compiler will optimize out function calls
770 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
771     AC_TRY_LINK([
772 #include <stdio.h>],
774                 if (0) {
775                    this_function_does_not_exist();
776                 } else {
777                   return 1;
778                 }
781         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
782 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
783    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
786 #############################################
787 # check for fd passing struct via msg_control
788 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
789     AC_TRY_COMPILE([
790 #include <sys/types.h>
791 #include <stdlib.h>
792 #include <stddef.h>
793 #include <sys/socket.h>
794 #include <sys/un.h>],
796         struct msghdr msg;
797         union {
798               struct cmsghdr cm;
799               char control[CMSG_SPACE(sizeof(int))];
800         } control_un;
801         msg.msg_control = control_un.control;
802         msg.msg_controllen = sizeof(control_un.control);
804         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
805 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
806    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
807              [If we can use msg_control for passing file descriptors])
810 #############################################
811 # check for fd passing struct via msg_acctrights
812 AC_CACHE_CHECK([for fd passing via msg_acctrights],
813                 samba_cv_msghdr_msg_acctrights, [
814     AC_TRY_COMPILE([
815 #include <sys/types.h>
816 #include <stdlib.h>
817 #include <stddef.h>
818 #include <sys/socket.h>
819 #include <sys/un.h>],
821         struct msghdr msg;
822         int fd;
823         msg.msg_acctrights = (caddr_t) &fd;
824         msg.msg_acctrightslen = sizeof(fd);
826         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
827 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
828    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
829              [If we can use msg_acctrights for passing file descriptors])
832 AC_CHECK_FUNCS(dirfd)
833 if test x"$ac_cv_func_dirfd" = x"yes"; then
834         default_shared_modules="$default_shared_modules vfs_syncops vfs_dirsort"
837 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
838     AC_TRY_COMPILE([
839 #include <sys/types.h>
840 #if STDC_HEADERS
841 #include <stdlib.h>
842 #include <stddef.h>
843 #endif
844 #include <signal.h>],[struct sigevent s;],
845         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
846 if test x"$samba_cv_struct_sigevent" = x"yes"; then
847    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
848    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
849         [#include <signal.h>])
852 # and glibc has setresuid under linux but the function does
853 # nothing until kernel 2.1.44! very dumb.
854 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
855     AC_TRY_RUN([#include <errno.h>
856 main() { setresuid(1,1,1); setresuid(2,2,2); return(errno==EPERM?0:1);}],
857         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
858 if test x"$samba_cv_have_setresuid" = x"yes"; then
859     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
862 # Do the same check for setresguid...
864 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
865     AC_TRY_RUN([#include <unistd.h>
866 #include <errno.h>
867 main() { errno = 0; setresgid(1,1,1); return(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
868         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
869 if test x"$samba_cv_have_setresgid" = x"yes"; then
870     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
873 AC_FUNC_MEMCMP
875 ###############################################
876 # Readline included by default unless explicitly asked not to
877 test "${with_readline+set}" != "set" && with_readline=yes
879 # test for where we get readline() from
880 AC_MSG_CHECKING(whether to use readline)
881 AC_ARG_WITH(readline,
882 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
883 [  case "$with_readline" in
884   yes)
885     AC_MSG_RESULT(yes)
887     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
888     AC_CHECK_HEADERS(readline/history.h)
890     AC_CHECK_HEADERS(readline.h readline/readline.h,[
891       for termlib in ncurses curses termcap terminfo termlib tinfo; do
892        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
893       done
894       AC_CHECK_LIB(readline, rl_callback_handler_install,
895        [TERMLIBS="-lreadline $TERMLIBS"
896        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
897        break], [TERMLIBS=], $TERMLIBS)])
898     ;;
899   no)
900     AC_MSG_RESULT(no)
901     ;;
902   *)
903     AC_MSG_RESULT(yes)
905     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
906     # alternate readline path
907     _ldflags=${LDFLAGS}
908     _cppflags=${CPPFLAGS}
910     # Add additional search path
911     LDFLAGS="-L$with_readline/lib $LDFLAGS"
912     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
914     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
915     AC_CHECK_HEADERS(readline/history.h)
917     AC_CHECK_HEADERS(readline.h readline/readline.h,[
918       for termlib in ncurses curses termcap terminfo termlib; do
919        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
920       done
921       AC_CHECK_LIB(readline, rl_callback_handler_install,
922        [TERMLDFLAGS="-L$with_readline/lib"
923        TERMCPPFLAGS="-I$with_readline/include"
924        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
925        TERMLIBS="-lreadline $TERMLIBS"
926        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
927        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
929     LDFLAGS=$_ldflags
930     ;;
931   esac],
932   AC_MSG_RESULT(no)
934 AC_SUBST(TERMLIBS)
935 AC_SUBST(TERMLDFLAGS)
937 # The readline API changed slightly from readline3 to readline4, so
938 # code will generate warnings on one of them unless we have a few
939 # special cases.
940 AC_CHECK_LIB(readline, rl_completion_matches,
941              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
942                         [Do we have rl_completion_matches?])],
943              [],
944              [$TERMLIBS])
946 # not all readline libs have rl_event_hook or history_list
947 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
948 AC_CHECK_LIB(readline, history_list,
949              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
950              [],
951              [$TERMLIBS])
953 ###############################################
954 # test for where we get yp_get_default_domain() from
955 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
956 AC_CHECK_FUNCS(yp_get_default_domain)
958 # Check if we have execl, if not we need to compile smbrun.
959 AC_CHECK_FUNCS(execl)
960 if test x"$ac_cv_func_execl" = x"no"; then
961     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun"
964 AC_CHECK_FUNCS(getcwd fchown chmod fchmod mknod mknod64)
965 AC_CHECK_FUNCS(strtol)
966 AC_CHECK_FUNCS(strchr chflags)
967 AC_CHECK_FUNCS(getrlimit fsync setpgid)
968 AC_CHECK_FUNCS(fdatasync,,[AC_CHECK_LIB_EXT(rt, LIBS, fdatasync)])
969 AC_CHECK_FUNCS(setsid glob strpbrk crypt16 getauthuid)
970 AC_CHECK_FUNCS(sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
971 AC_CHECK_FUNCS(initgroups select rdchk getgrnam getgrent pathconf)
972 AC_CHECK_FUNCS(getgrset)
973 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups syscall sysconf)
974 AC_CHECK_FUNCS(atexit grantpt posix_openpt posix_fallocate)
975 AC_CHECK_FUNCS(fallocate)
976 AC_CHECK_FUNCS(fseeko setluid getpwanam)
977 AC_CHECK_FUNCS(fdopendir)
978 AC_CHECK_FUNCS(getpwent_r)
979 AC_CHECK_FUNCS(setenv strcasecmp fcvt fcvtl)
980 AC_CHECK_FUNCS(syslog vsyslog timegm)
981 AC_CHECK_FUNCS(setlocale)
982 AC_CHECK_FUNCS(nanosleep,,[AC_CHECK_LIB_EXT(rt, LIBS, nanosleep)])
983 AC_CHECK_FUNCS(lutimes futimes utimensat futimens)
984 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
985 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
986 AC_CHECK_HEADERS(sys/mman.h)
987 # setbuffer, shmget, shm_open are needed for smbtorture
988 AC_CHECK_FUNCS(shmget shm_open)
989 AC_CHECK_FUNCS(gettext dgettext)
990 AC_CHECK_FUNCS(bindtextdomain textdomain bind_textdomain_codeset)
991 AC_CHECK_FUNCS(strupr)
993 # Find a method of generating a stack trace
994 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
995 # libexecinfo provides backtrace_symbols on FreeBSD
996 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
997 AC_CHECK_FUNCS(backtrace_symbols)
998 AC_CHECK_LIB(exc, trace_back_stack)
1000 # check for sysctlbyname and sysctl for BSD systems
1001 AC_CHECK_FUNCS(sysctlbyname)
1002 AC_CHECK_FUNCS(sysctl)
1004 #################################################
1005 # Check to see if core dump directory is defined in linux
1006 # with /proc/sys/kernel/core_pattern
1008 AC_CHECK_FILE([/proc/sys/kernel/core_pattern],
1009         AC_DEFINE(HAVE_SYS_KERNEL_PROC_CORE_PATTERN, 1,
1010         [Whether Linux kernel uses core_pattern for core files]),
1011          [])
1013 #############################
1014 # check if building with gpfs
1015 AC_CHECK_HEADERS(gpfs_gpl.h)
1016 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
1017     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL headers are available])
1018     default_shared_modules="$default_shared_modules vfs_gpfs"
1021 # Note that all the libunwind symbols in the API are defined to internal
1022 # platform-specific version, so we must include libunwind.h before checking
1023 # any of them.
1024 AC_MSG_CHECKING([for libunwind])
1025 save_LIBS=$LIBS
1027 UNWIND_ARCH="unknown"
1028 if test x"$UNAME_I" != x"unknown"; then
1029         UNWIND_ARCH="$UNAME_I"
1030 elif test x"$UNAME_M" != x"unknown"; then
1031         UNWIND_ARCH="$UNAME_M"
1032 elif test x"$UNAME_P" != x"unknown"; then
1033         UNWIND_ARCH="$UNAME_P"
1036 case "$UNWIND_ARCH" in
1037         unknown)
1038                 # This probably won't link without
1039                 # the platform-specific libunwind.
1040                 LIBS="$LIBS -lunwind"
1041                 ;;
1042         i386|i586|i686)
1043                 # Add the platform-specific libunwind module.
1044                 LIBS="$LIBS -lunwind -lunwind-x86"
1045                 ;;
1046         *)
1047                 # Add the platform-specific libunwind module.
1048                 # based on uname -i, uname -m or uname -p
1049                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1050                 ;;
1051 esac
1053 AC_TRY_LINK(
1054     [
1055 #ifdef HAVE_LIBUNWIND_H
1056 #include <libunwind.h>
1057 #endif
1058     ],
1059     [
1060         unw_context_t ctx; unw_cursor_t cur;
1061         char buf[256]; unw_word_t off;
1062         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1063         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1064     ],
1065     [
1066         AC_MSG_RESULT(yes)
1067         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1069         # If we have libunwind, test whether we also have libunwind-ptrace
1070         # which would let us unwind arbitrary processes.
1071         save_LIBS=$LIBS
1072         AC_CHECK_HEADERS(libunwind-ptrace.h)
1073         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1074             [
1075                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1076                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1077                     [Whether libunwind-ptrace.a is available.])
1078             ],
1079             [ LIBUNWIND_PTRACE="" ])
1081         LIBS=$save_LIBS
1082     ],
1083     [
1084         AC_MSG_RESULT(no)
1085         LIBS=$save_LIBS
1086     ])
1088 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1089 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1090     AC_CHECK_HEADERS(sys/ptrace.h)
1091     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1092     AC_TRY_LINK(
1093             [
1094 #if HAVE_SYS_TYPES_H
1095 #include <sys/types.h>
1096 #endif
1097 #if HAVE_SYS_PTRACE_H
1098 #include <sys/ptrace.h>
1099 #endif
1100             ],
1101             [
1102                 pid_t me = (pid_t)-1;
1103                 ptrace(PTRACE_ATTACH, me, 0, 0);
1104                 ptrace(PTRACE_DETACH, me, 0, 0);
1105                 return 0;
1106             ],
1107             [
1108                 AC_MSG_RESULT(yes)
1109                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1110                     [Whether the Linux ptrace(2) interface is available.])
1111             ],
1112             [
1113                 AC_MSG_RESULT(no)
1114                 LIBUNWIND_PTRACE=""
1115             ])
1118 AC_SUBST(LIBUNWIND_PTRACE)
1120 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1121 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1122 AC_CHECK_FUNCS(__getcwd _getcwd)
1123 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1124 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1125 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1126 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1127 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1128 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1129 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek)
1130 AC_CHECK_FUNCS(pread _pread __pread)
1131 AC_CHECK_FUNCS(pwrite _pwrite __pwrite)
1132 AC_CHECK_FUNCS(prctl)
1134 AC_TRY_COMPILE([
1135 #ifdef HAVE_SYS_PRCTL_H
1136 #include <sys/prctl.h>
1137 #endif
1139 [int i; i = prtcl(0); ],
1140 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1145 case "$host_os" in
1146     *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1147        # glibc <= 2.3.2 has a broken getgrouplist
1148        AC_CACHE_CHECK([for good getgrouplist],samba_cv_linux_getgrouplist_ok,[AC_TRY_RUN([
1149 #include <unistd.h>
1150 #include <sys/utsname.h>
1151 main() {
1152        /* glibc up to 2.3 has a broken getgrouplist */
1153 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1154        int libc_major = __GLIBC__;
1155        int libc_minor = __GLIBC_MINOR__;
1157        if (libc_major < 2)
1158               return(1);
1159        if ((libc_major == 2) && (libc_minor <= 3))
1160               return(1);
1161 #endif
1162        return(0);
1164 ], [samba_cv_linux_getgrouplist_ok=yes],
1165    [samba_cv_linux_getgrouplist_ok=no],
1166    [samba_cv_linux_getgrouplist_ok=cross])])
1167        if test x"$samba_cv_linux_getgrouplist_ok" = x"yes"; then
1168           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1169        fi
1170        ;;
1171     *)
1172        AC_CHECK_FUNCS(getgrouplist)
1173        ;;
1174 esac
1176 #################################################
1177 # Check whether struct stat has timestamps with sub-second resolution.
1180 samba_cv_stat_hires=no
1181 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec], # Linux, Solaris
1182         [samba_cv_stat_hires=yes])
1183 AC_CHECK_MEMBERS([struct stat.st_mtimensec], # BSD, if defined _POSIX_SOURCE
1184         [samba_cv_stat_hires=yes])
1185 AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec], # BSD, if not defined _POSIX_SOURCE
1186         [samba_cv_stat_hires=yes])
1187 AC_CHECK_MEMBERS([struct stat.st_mtime_n], # AIX
1188         [samba_cv_stat_hires=yes])
1189 AC_CHECK_MEMBERS([struct stat.st_umtime], # Tru64
1190         [samba_cv_stat_hires=yes])
1192 if test x"$samba_cv_stat_hires" = x"yes" ; then
1193     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1194             [whether struct stat has sub-second timestamps])
1197 # recent FreeBSD, NetBSD have creation timestamps called birthtime:
1198 AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec])
1199 AC_CHECK_MEMBERS([struct stat.st_birthtime], AC_CHECK_MEMBERS([struct stat.st_birthtimensec]))
1202 AC_CACHE_CHECK([whether there is DOS flags support in the stat struct], samba_cv_stat_dos_flags,
1203     [
1204         AC_TRY_COMPILE(
1205             [#include <sys/stat.h>],
1206             [
1207                 int a = UF_DOS_ARCHIVE;
1208                 int h = UF_DOS_HIDDEN;
1209                 int r = UF_DOS_RO;
1210                 int s = UF_DOS_SYSTEM;
1211                 int i = UF_DOS_NOINDEX;
1212                 int f = UF_DOS_FLAGS;
1213             ],
1214             samba_cv_stat_dos_flags=yes, samba_cv_stat_dos_flags=no)
1215     ])
1217 if test x"$samba_cv_stat_dos_flags" = x"yes" ; then
1218     AC_DEFINE(HAVE_STAT_DOS_FLAGS, 1, [whether there is DOS flags support in the stat struct])
1221 AC_CACHE_CHECK([whether we can compile with __attribute__((destructor))],
1222                samba_cv_function_attribute_destructor,
1223                [
1224                  AC_COMPILE_IFELSE([AC_LANG_SOURCE(
1225                         [
1226                                 __attribute__((destructor))
1227                                 static void cleanup(void) { }
1228                         ])],
1229                         samba_cv_function_attribute_destructor=yes)
1230                 ])
1232 if test x"$samba_cv_function_attribute_destructor" = xyes ; then
1233    AC_DEFINE(HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR, 1,
1234              [whether we can compile with __attribute__((destructor))])
1237 #####################################
1238 # needed for SRV lookups
1239 AC_CHECK_LIB(resolv, dn_expand)
1240 AC_CHECK_LIB(resolv, _dn_expand)
1241 AC_CHECK_LIB(resolv, __dn_expand)
1242 AC_CHECK_LIB(inet, dn_expand)
1245 # Check for the functions putprpwnam, set_auth_parameters,
1246 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1247 # Needed for OSF1 and HPUX.
1250 AC_LIBTESTFUNC(security, putprpwnam)
1251 AC_LIBTESTFUNC(sec, putprpwnam)
1253 AC_LIBTESTFUNC(security, set_auth_parameters)
1254 AC_LIBTESTFUNC(sec, set_auth_parameters)
1256 # UnixWare 7.x has its getspnam in -lgen
1257 AC_LIBTESTFUNC(gen, getspnam)
1259 AC_LIBTESTFUNC(security, getspnam)
1260 AC_LIBTESTFUNC(sec, getspnam)
1262 AC_LIBTESTFUNC(security, bigcrypt)
1263 AC_LIBTESTFUNC(sec, bigcrypt)
1265 AC_LIBTESTFUNC(security, getprpwnam)
1266 AC_LIBTESTFUNC(sec, getprpwnam)
1268 AC_CHECK_FUNCS(strsignal)
1270 AC_DISABLE_STATIC
1271 AC_ENABLE_SHARED
1273 # Set defaults
1274 PIE_CFLAGS=""
1275 PIE_LDFLAGS=""
1276 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1278 if test "x$enable_pie" != xno
1279 then
1280         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1281         [
1282                 cat > conftest.c <<EOF
1283 int foo;
1284 int main () { return 0;}
1286                 if AC_TRY_COMMAND_NO_STDERR([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c])
1287                 then
1288                         samba_cv_fpie=yes
1289                 else
1290                         samba_cv_fpie=no
1291                 fi
1292                 rm -f conftest*
1293         ])
1294         if test x"${samba_cv_fpie}" = x"yes"
1295         then
1296                 PIE_CFLAGS="-fPIE"
1297                 PIE_LDFLAGS="-pie"
1298         fi
1301 # Set defaults
1302 RELRO_LDFLAGS=""
1303 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1305 if test "x$enable_relro" != xno
1306 then
1307         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1308         [
1309                 cat > conftest.c <<EOF
1310 int foo;
1311 main () { return 0;}
1313                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1314                 then
1315                         samba_cv_relro=yes
1316                 else
1317                         samba_cv_relro=no
1318                 fi
1319                 rm -f conftest*
1320         ])
1321         if test x"${samba_cv_relro}" = x"yes"
1322         then
1323                 RELRO_LDFLAGS="-Wl,-z,relro"
1324         fi
1327 # Set defaults
1328 SYMSEXT="syms"
1329 AC_SUBST(SYMSEXT)
1331 # Assume non-shared by default and override below
1332 BLDSHARED="false"
1334 # these are the defaults, good for lots of systems
1335 HOST_OS="$host_os"
1336 LDSHFLAGS="-shared"
1337 MODULE_EXPORTS=""
1338 SONAMEFLAG="#"
1339 SHLD="\${CC} \${CFLAGS}"
1340 PICFLAG="${PIE_CFLAGS}"
1341 SHLIBEXT="so"
1342 DSO_EXPORTS=""
1344 # this bit needs to be modified for each OS that supports share libs
1345 # You need to specify how to create a shared library and
1346   # how to compile C code to produce PIC object files
1348   AC_MSG_CHECKING([ability to build shared libraries])
1350   # and these are for particular systems
1351   case "$host_os" in
1352                 *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu | *qnx*)
1353                         case "$host_os" in
1354                                 *linux*) AC_DEFINE(LINUX,1,[Whether the host os is linux]) ;;
1355                                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx]) ;;
1356                         esac
1357                         BLDSHARED="true"
1358                         LDSHFLAGS="-shared -Wl,-Bsymbolic"
1359                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1360                                 LDSHFLAGS_Z_NODEFS="-Wl,--allow-shlib-undefined"
1361                         fi
1362                         DYNEXP="-Wl,--export-dynamic"
1363                         PICFLAG="-fPIC"
1364                         SONAMEFLAG="-Wl,-soname="
1365                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1366                         ;;
1367                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1368                         BLDSHARED="true"
1369                         if test "${GCC}" = "yes"; then
1370                                 PICFLAG="-fPIC"
1371                                 SONAMEFLAG="-Wl,-soname="
1372                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1373                                         DYNEXP="-Wl,-E"
1374                                 fi
1375                                 LDSHFLAGS="-shared"
1376                         else
1377                                 PICFLAG="-KPIC"
1378                                 LDSHFLAGS="-G"
1379                         fi
1380                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1381                                 SONAMEFLAG="-Wl,-soname="
1382                         else
1383                                 SONAMEFLAG="-Wl,-h,"
1384                         fi
1385                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1386                         ;;
1387                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1388                         BLDSHARED="true"
1389                         LDSHFLAGS="-G"
1390                         SONAMEFLAG="-Wl,-h,"
1391                         PICFLAG="-KPIC"   # Is this correct for SunOS
1392                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1393                         ;;
1394                 *netbsd* | *freebsd* | *dragonfly* )
1395                         BLDSHARED="true"
1396                         LDSHFLAGS="-shared"
1397                         DYNEXP="-Wl,--export-dynamic"
1398                         SONAMEFLAG="-Wl,-soname,"
1399                         PICFLAG="-fPIC -DPIC"
1400                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1401                         ;;
1402                 *openbsd*)  BLDSHARED="true"
1403                         LDSHFLAGS="-shared"
1404                         DYNEXP="-Wl,-Bdynamic"
1405                         SONAMEFLAG="-Wl,-soname,"
1406                         PICFLAG="-fPIC"
1407                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1408                         ;;
1409                 *irix*) BLDSHARED="true"
1410                         LDSHFLAGS="-Wl,-set_version,sgi1.0 -shared"
1411                         SONAMEFLAG="-Wl,-soname,"
1412                         if test "${GCC}" = "yes"; then
1413                                 PICFLAG="-fPIC"
1414                         else
1415                                 PICFLAG="-KPIC"
1416                         fi
1417                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1418                         ;;
1419                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1420                         BLDSHARED="true"
1421                         # use expfull to export underscored symbols
1422                         # add rtl to remove /lib/crt0.o warning
1423                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1424                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1425                         PICFLAG="-O2"
1426                         # as AIX code is always position independent...
1427                         # .po will just create compile warnings, use po.o:
1428                         if test "${GCC}" != "yes"; then
1429                                 ## for funky AIX compiler using strncpy()
1430                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000 -qhalt=e"
1431                         fi
1433                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1434                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1435                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1436                         ;;
1437                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1438                         # ia64: 64bit build using gcc with CFLAGS="-mpl64"
1439                         #       64bit build using HP's cc with CFLAGS="+DD64"
1440                         # hppa: 64bit build unsupported by gcc
1441                         #       64bit build using HP's cc with CFLAGS="+DA2.0w"
1442                         # HP-UX 11.00 ld needs PHSS_33034
1443                         BLDSHARED="true"
1444                         if test "${GCC}" = "yes"; then
1445                                 PICFLAG="-fPIC"
1446                                 LDSHFLAGS="-shared"
1447                         else
1448                                 PICFLAG="+z"
1449                                 LDSHFLAGS="-b"
1450                                 # "Uses depth-first symbol resolution"
1451                                 LDSHFLAGS="$LDSHFLAGS -Wl,-B,symbolic,-b"
1452                                 if test "$host_cpu" != "ia64"; then
1453                                         # "don't store literals in read-only memory" (?):
1454                                         PICFLAG="$PICFLAG +ESnolit"
1455                                 fi
1456                         fi
1457                         if test "$host_cpu" = "ia64"; then
1458                                 SHLIBEXT="so"
1459                                 # TODO: does the linker find the right 32/64 bit version of the libs? :
1460                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32:/usr/local/lib/hpux64:/usr/lib/hpux64"
1461                         else
1462                                 SHLIBEXT="sl"
1463                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1464                         fi
1465                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1466                                 SONAMEFLAG="-Wl,-soname="
1467                         else
1468                                 SONAMEFLAG="-Wl,+h,"
1469                         fi
1470                         # PIE/PIC flags at link time are required on HP-UX because
1471                         # linking requires a temporary source file, which is being
1472                         # compiled with the indicated flags - which need to contain
1473                         # PIC flags when we don't support PIE flags:
1474                         if test "$PIE_LDFLAGS" = "" ; then
1475                                 PIE_LDFLAGS=\${PICFLAG}
1476                         fi
1477                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1478                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1479                         ;;
1480                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1481                         BLDSHARED="true"
1482                         LDSHFLAGS="-shared"
1483                         SONAMEFLAG="-Wl,-soname,"
1484                         if test "${GCC}" = "yes"; then
1485                                 PICFLAG="-fPIC"
1486                         fi
1487                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1488                         for flags in "-expect_unresolved '*'" "-Wl,-expect_unresolved,'*'" ; do
1489                                 saved_ldflags="$LDFLAGS"
1490                                 AC_MSG_CHECKING([if $flags works])
1491                                 LDFLAGS="$flags $saved_ldflags"
1492                                 AC_TRY_LINK([],[],
1493                                         [AC_MSG_RESULT([yes])
1494                                         LDSHFLAGS_Z_NODEFS=$flags],
1495                                         AC_MSG_RESULT([no]))
1496                                 LDFLAGS="$saved_ldflags"
1497                                 test x"$LDSHFLAGS_Z_NODEFS" != x && break
1498                         done
1499                         ;;
1500                 *sco*) AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1501                         ;;
1502                 *unixware*) BLDSHARED="true"
1503                         LDSHFLAGS="-shared"
1504                         SONAMEFLAG="-Wl,-soname,"
1505                         PICFLAG="-KPIC"
1506                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1507                         ;;
1508                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1509                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1510                         ;;
1511                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1512                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1513                         ;;
1514                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1515                         case "$host" in
1516                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1517                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1518                                         fi
1519                                         LDSHFLAGS="-G"
1520                                         DYNEXP="-Bexport"
1521                                 ;;
1522                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1523                         esac
1524                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1525                         ;;
1527                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1528                         if [ test "$GCC" != yes ]; then
1529                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1530                         fi
1531                         LDSHFLAGS="-G"
1532                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1533                         ;;
1534                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1535                         BLDSHARED="false"
1536                         LDSHFLAGS=""
1537                         ;;
1539                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1540                         BLDSHARED="true"
1541                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1542                         CFLAGS="$CFLAGS -fno-common"
1543                         SHLD="\${CC}"
1544                         SHLIBEXT="dylib"
1545                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1546                         SHLIBEXT="dylib"
1547                         # Since gcc doesn't fail on unrecognised options, the
1548                         # PIE test incorrectly succeeds. Darwin gcc does not
1549                         # actually support the PIE stuff.
1550                         PIE_LDFLAGS=
1551                         PIE_CFLAGS=
1552                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1553                         ;;
1555                 *)
1556                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1557                         ;;
1558   esac
1560 if test "$enable_shared" != "yes"; then
1561         BLDSHARED=false
1564 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1565         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1568 if test x"$BLDSHARED" = x"true" ; then
1569         LDFLAGS="$LDFLAGS -L./bin"
1572 AC_MSG_RESULT($BLDSHARED)
1574 if test x"$enable_developer" = x"yes" ; then
1575         default_as_needed=auto
1576 else
1577         default_as_needed=no
1579 AC_ARG_ENABLE(as-needed,
1580         AS_HELP_STRING([--enable-as-needed],
1581         [Turn on as-needed support if available (default=no)]),
1582         [enable_as_needed=$enableval],
1583         [enable_as_needed=$default_as_needed])
1584 if test "x$enable_as_needed" != xno; then
1585     saved_before_as_needed_ldflags="$LDFLAGS"
1586     for flags in "-Wl,--as-needed" "-Wl,-z,ignore" "-z ignore" ; do
1587         saved_ldflags="$LDFLAGS"
1588         AC_MSG_CHECKING([if $flags works])
1589         LDFLAGS="$flags $saved_ldflags"
1590         AC_TRY_LINK([],[],
1591                 [AC_MSG_RESULT([yes])
1592                 LD_AS_NEEDED_FLAG=$flags
1593                 ld_as_needed_flag_found=yes],
1594                 AC_MSG_RESULT([no]))
1595         LDFLAGS="$LD_AS_NEEDED_FLAG $saved_ldflags"
1596         test x"$ld_as_needed_flag_found" = xyes && break
1597     done
1600 if test x$ld_as_needed_flag_found = xyes -a x$enable_as_needed = xauto ; then
1601 # check if ld has bug described in https://bugzilla.samba.org/show_bug.cgi?id=7209#c17
1602         AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG has explicit external libs bug])
1603 cat > conftest_shb.c <<END
1604 void b() {}
1606 cat > conftest_sha.c <<END
1607 extern void b();
1608 void a() {
1609         b();
1612 cat > conftest.c <<END
1613 extern void a();
1614 int main() {
1615         a();
1616         return 0;
1620         rm -fr conftest
1621         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_sha.o conftest_sha.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1622         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_shb.o conftest_shb.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1623         TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1624         AC_TRY_COMMAND([$TESTCMD -o libconftest_shb.$SHLIBEXT conftest_shb.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1625         AC_TRY_COMMAND([$TESTCMD -o libconftest_sha.$SHLIBEXT conftest_sha.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1626         AC_TRY_COMMAND([$CC -o conftest conftest.c $LDFLAGS -L. -lconftest_sha -lconftest_shb 1>&AS_MESSAGE_LOG_FD 2>&1])
1627         if AC_TRY_COMMAND([eval "$LIB_PATH_VAR=. ./conftest 1>&AS_MESSAGE_LOG_FD 2>&1"])
1628         then
1629                 AC_MSG_RESULT([no])
1630         else
1631                 ld_as_needed_flag_found=no
1632                 LDFLAGS="$saved_before_as_needed_ldflags"
1633                 AC_MSG_RESULT([yes])
1634         fi
1635         rm conftest* libconftest*
1638 # check if we have to disable LD_AS_NEEDED_FLAG:
1639 # On some systems for a veriety of reasons linking with
1640 # -Wl,--as-needed -lreadline -lncurses fails
1641 # we have to retest, if these combination is detected before.
1642 # Bugzilla #7209
1644 if test x$ac_cv_lib_readline_rl_callback_handler_install = xyes ; then
1645         if test x$ld_as_needed_flag_found = xyes ; then
1646                 AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG works with readline])
1647                 # try if check no fails
1648                 save_LIBS=$LIBS
1649                 LIBS="$LIBS $TERMLIBS"
1650                 AC_TRY_LINK([], [rl_callback_handler_install();], [AC_MSG_RESULT([yes])],[ AC_MSG_RESULT([no]); LDFLAGS="$saved_before_as_needed_ldflags"])
1651                 LIBS="$save_LIBS"
1652         fi
1657 # for historical reasons almost all linkers don't complain about unresolved
1658 # symbols in shared libs. Except for the internal samba modules we want to get
1659 # errors when we produce a shared lib with unresolved symbols. On some
1660 # platforms unresolved symbols might be intended, so we might have to add
1661 # platform specific exceptions here.
1663 for flags in "-Wl,-z,defs" "-error_unresolved" "-Wl,-error_unresolved" ; do
1664         saved_ldflags="$LDFLAGS"
1665         AC_MSG_CHECKING([if $flags works])
1666         LDFLAGS="$flags $saved_ldflags"
1667         AC_TRY_LINK([],[],
1668         [AC_MSG_RESULT([yes])
1669         LDSHFLAGS_Z_DEFS=$flags
1670         ldshflags_z_defs_found=yes],
1671         AC_MSG_RESULT([no]))
1672         LDFLAGS=$saved_ldflags
1673         test x"$ldshflags_z_defs_found" = xyes && break
1674 done
1676 AC_MSG_CHECKING([LDSHFLAGS_Z_DEFS])
1677 AC_MSG_RESULT([$LDSHFLAGS_Z_DEFS])
1678 AC_MSG_CHECKING([LDFLAGS])
1679 AC_MSG_RESULT([$LDFLAGS])
1680 AC_MSG_CHECKING([DYNEXP])
1681 AC_MSG_RESULT([$DYNEXP])
1683 #######################################################
1684 # test whether building a shared library actually works
1685 if test $BLDSHARED = true; then
1687 AC_MSG_CHECKING([SHLD])
1688 AC_MSG_RESULT([$SHLD])
1689 AC_MSG_CHECKING([LDSHFLAGS])
1690 AC_MSG_RESULT([$LDSHFLAGS])
1692 AC_MSG_CHECKING([SHLIBEXT])
1693 AC_MSG_RESULT([$SHLIBEXT])
1694 AC_MSG_CHECKING([SONAMEFLAG])
1695 AC_MSG_RESULT([$SONAMEFLAG])
1697 AC_MSG_CHECKING([PICFLAG])
1698 AC_MSG_RESULT([$PICFLAG])
1700 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1701 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1703 AC_CACHE_CHECK([whether building shared libraries actually works],
1704                [ac_cv_shlib_works],[
1705    # try building a trivial shared library
1706    ac_cv_shlib_works=no
1707    # The $SHLD and $LDSHFLAGS variables may contain references to other
1708    # variables so they need to be eval'ed.
1709    if AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.o ${srcdir-.}/../tests/shlib.c 1>&AS_MESSAGE_LOG_FD])
1710    then
1711      TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1712      TESTCMD="$TESTCMD -o \"shlib.$SHLIBEXT\" shlib.o"
1713      if AC_TRY_COMMAND([eval $TESTCMD 1>&AS_MESSAGE_LOG_FD 2>&1])
1714      then
1715        ac_cv_shlib_works=yes
1716      fi
1717    fi
1718    rm -f "shlib.$SHLIBEXT" shlib.o
1721 if test $ac_cv_shlib_works = no; then
1722    BLDSHARED=false
1726 if test x"$BLDSHARED" != x"true"; then
1727         LDSHFLAGS="shared-libraries-disabled"
1728         SONAMEFLAG="shared-libraries-disabled"
1729         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1730         SHLD="shared-libraries-disabled"
1731         PICFLAG="${PIE_CFLAGS}"
1732         SHLIBEXT="shared_libraries_disabled"
1733         smbtorture_possible=no
1736 AC_MSG_CHECKING([used PICFLAG])
1737 AC_MSG_RESULT([$PICFLAG])
1739 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1743 ###########################################################
1745 # Configuration of subsystems / libraries
1747 ###########################################################
1749 INSTALLLIBCMD_SH=:
1750 INSTALLLIBCMD_A=:
1751 UNINSTALLLIBCMD_SH=:
1752 UNINSTALLLIBCMD_A=:
1754 if test $BLDSHARED = true; then
1755         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
1756         UNINSTALLLIBCMD_SH="rm -f"
1758 if test $enable_static = yes; then
1759         INSTALLLIBCMD_A="\$(INSTALLCMD)"
1760         UNINSTALLLIBCMD_A="rm -f"
1763 #################################################
1764 # --disable-shared-libs
1765 # can be used to disable the internal use of shared libs altogether
1766 # (this only has an effect when building shared libs is enabled)
1768 USESHARED=false
1769 AC_SUBST(USESHARED)
1771 AC_MSG_CHECKING(whether to use shared libraries internally)
1772 AC_ARG_ENABLE([shared-libs],
1773         AS_HELP_STRING([--enable-shared-libs],
1774                 [Use shared libraries internally (default=yes)]),
1775         [enable_shared_libs=$enableval],
1776         [enable_shared_libs=yes])
1778 if test x"$enable_shared_libs" != x"no" ; then
1779         USESHARED=$BLDSHARED
1782 AC_MSG_RESULT([$USESHARED])
1784 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
1785         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
1788 #################################################
1789 # --with-static-libs=LIBS:
1790 #   link (internal) libs dynamically or statically?
1792 # If a subsystem is built as a library then this controls whether they are
1793 # linked into Samba targets statically or dynamically:
1795 # * If we build the shared library at all, we link dynamically by default.
1797 # * We only link statically if we don't build shared or if the library
1798 #   appears in the --with-static-libs configure option.
1800 # Example:
1801 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
1802 #   of linking the dynamic variant with -ltalloc.
1804 # NOTE: This option only affects libraries that we do not only build
1805 # but that samba also links against as libraries (as opposed to linking
1806 # the plain object files. - This has to be configured in Makefile.in.
1807 # So in particular it does not harm to give invalid or unknown names here.
1810 AC_ARG_WITH([static-libs],
1811         [AS_HELP_STRING([--with-static-libs=LIBS],
1812                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
1813         [AS_IF([test $withval],
1814                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
1815                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
1816                         eval LINK_$lib=STATIC
1817                 done], [])],
1818         [])
1821 # WORKAROUND:
1822 #   until we have organized other internal subsystems (as util, registry
1823 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
1824 #   dynamically to samba programs.
1826 LINK_LIBNETAPI=STATIC
1828 LINK_LIBSMBCLIENT=STATIC
1831 #  The library versions are hardcoded here
1832 #  and filled into the LIBFOO_SOVER variable.
1834 #  TODO: for talloc and tdb (at least), these should
1835 #  be extracted from their respective source directories
1837 AC_ARG_ENABLE(external_libtalloc,
1838         [AS_HELP_STRING([--enable-external-libtalloc],
1839                 [Enable external talloc [default=auto]])],
1840         [ enable_external_libtalloc=$enableval ],
1841         [ enable_external_libtalloc=auto ])
1843 if test "x$enable_external_libtalloc" != xno
1844 then
1845         PKG_CHECK_MODULES(LIBTALLOC, talloc >= 2.0.1,
1846                 [ enable_external_libtalloc=yes ],
1847                 [ if test x$enable_external_libtalloc = xyes; then
1848                         AC_MSG_ERROR([Unable to find libtalloc])
1849                   else
1850                         enable_external_libtalloc=no
1851                   fi
1852                 ])
1855 if test "x$enable_external_libtalloc" = xno
1856 then
1857         m4_include(../lib/talloc/libtalloc.m4)
1858         LINK_LIBTALLOC=STATIC
1859         LIBTALLOCVERSION=`grep ^VERSION ${tallocdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
1860         SMB_LIBRARY(talloc, 2, ${LIBTALLOCVERSION})
1861         LIBTALLOC_OBJ0=""
1862         for obj in ${TALLOC_OBJ}; do
1863                 LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
1864         done
1865         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
1866         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TALLOC_CFLAGS}"
1867         AC_SUBST(LIBTALLOC_OBJ0)
1869         TALLOCTORT="bin/talloctort"
1870         AC_SUBST(TALLOCTORT)
1874 AC_ARG_ENABLE(external_libtdb,
1875         [AS_HELP_STRING([--enable-external-libtdb],
1876                 [Enable external tdb [default=auto]])],
1877                 [ enable_external_libtdb=$enableval ],
1878                 [ enable_external_libtdb=auto ])
1880 if test "x$enable_external_libtdb" != xno
1881 then
1882         PKG_CHECK_MODULES(LIBTDB, tdb >= 1.2.6,
1883                 [ enable_external_libtdb=yes ],
1884                 [
1885                 if test x$enable_external_libtdb = xyes; then
1886                         AC_MSG_ERROR([Unable to find libtdb])
1887                 else
1888                         enable_external_libtdb=no
1889                 fi
1890                 ])
1893 AC_SUBST(LIBTDB_OBJ0)
1894 if test "x$enable_external_libtdb" = xno
1895 then
1896         m4_include(../lib/tdb/libtdb.m4)
1897         LINK_LIBTDB=STATIC
1898         LIBTDBVERSION=`grep ^VERSION ${tdbdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
1899         SMB_LIBRARY(tdb, 1, ${LIBTDBVERSION})
1900         LIBTDB_OBJ0=""
1901         LIBTDB_LIBS="$LIBTDB_LIBS $TDB_DEPS"
1902         for obj in ${TDB_OBJ}; do
1903                 LIBTDB_OBJ0="${LIBTDB_OBJ0} ${tdbdir}/${obj}"
1904         done
1905         AC_SUBST(LIBTDB_OBJ0)
1906         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
1907         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TDB_CFLAGS}"
1909         TDBBACKUP="bin/tdbbackup"
1910         AC_SUBST(TDBBACKUP)
1911         TDBDUMP="bin/tdbdump"
1912         AC_SUBST(TDBDUMP)
1913         TDBRESTORE="bin/tdbrestore"
1914         AC_SUBST(TDBRESTORE)
1915         TDBTOOL="bin/tdbtool"
1916         AC_SUBST(TDBTOOL)
1917         TDBTORTURE="bin/tdbtorture"
1918         AC_SUBST(TDBTORTURE)
1921 AC_ARG_ENABLE(external_libntdb,
1922         [AS_HELP_STRING([--enable-external-libntdb],
1923                 [Enable external ntdb [default=auto]])],
1924                 [ enable_external_libntdb=$enableval ],
1925                 [ enable_external_libntdb=auto ])
1927 if test "x$enable_external_libntdb" != xno
1928 then
1929         PKG_CHECK_MODULES(LIBNTDB, ntdb >= 1.0,
1930                 [ enable_external_libntdb=yes ],
1931                 [
1932                 if test x$enable_external_libntdb = xyes; then
1933                         AC_MSG_ERROR([Unable to find libntdb])
1934                 else
1935                         enable_external_libntdb=no
1936                 fi
1937                 ])
1940 AC_SUBST(LIBNTDB_OBJ0)
1941 if test "x$enable_external_libntdb" = xno
1942 then
1943         m4_include(../lib/ntdb/libntdb.m4)
1944         LINK_LIBNTDB=STATIC
1945         LIBNTDBVERSION=`grep ^VERSION ${ntdbdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
1946         SMB_LIBRARY(ntdb, 1, ${LIBNTDBVERSION})
1947         LIBNTDB_OBJ0=""
1948         LIBNTDB_LIBS="$LIBNTDB_LIBS $NTDB_DEPS"
1949         for obj in ${NTDB_OBJ}; do
1950                 LIBNTDB_OBJ0="${LIBNTDB_OBJ0} ${ntdbdir}/${obj}"
1951         done
1952         AC_SUBST(LIBNTDB_OBJ0)
1953         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${NTDB_CFLAGS}"
1954         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${NTDB_CFLAGS}"
1956         NTDBBACKUP="bin/ntdbbackup"
1957         AC_SUBST(NTDBBACKUP)
1958         NTDBDUMP="bin/ntdbdump"
1959         AC_SUBST(NTDBDUMP)
1960         NTDBRESTORE="bin/ntdbrestore"
1961         AC_SUBST(NTDBRESTORE)
1962         NTDBTOOL="bin/ntdbtool"
1963         AC_SUBST(NTDBTOOL)
1964         NTDBTORTURE="bin/ntdbtorture"
1965         AC_SUBST(NTDBTORTURE)
1968 SMB_LIBRARY(netapi, 0)
1969 SMB_LIBRARY(smbclient, 0)
1970 SMB_LIBRARY(smbsharemodes, 0)
1973 ################
1975 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1976 AC_TRY_RUN([#include <stdio.h>
1977 main() { long long x = 1000000; x *= x; return(((x/1000000) == 1000000)? 0: 1); }],
1978 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1979 if test x"$samba_cv_have_longlong" = x"yes"; then
1980     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1981     AC_CHECK_TYPE(intptr_t, unsigned long long)
1982 else
1983     AC_CHECK_TYPE(intptr_t, unsigned long)
1987 # Check if the compiler supports the LL prefix on long long integers.
1988 # AIX needs this.
1990 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1991     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1992         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1993 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1994    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1998 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
1999 AC_TRY_RUN([#include <time.h>
2000 main() { return((sizeof(time_t) == 8) ? 0 : 1); }],
2001 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
2002 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
2003     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
2006 AC_CACHE_CHECK([for TIME_T_MAX],samba_cv_TIME_T_MAX,[
2007 AC_TRY_RUN([#include <time.h>
2008 main() {
2009         struct tm *tm;
2010         if (sizeof(time_t) == 8) {
2011                 time_t max_time = 0x7fffffffffffffffll;
2012                 tm = gmtime(&max_time);
2013                 /* This should fail with 32-bit tm_year. */
2014                 if (tm == NULL) {
2015                         /* Max time_t that works with 32-bit int tm_year in struct tm. */
2016                         max_time = 67768036191676799ll;
2017                         tm = gmtime(&max_time);
2018                         if (tm) {
2019                                 return(0);
2020                         }
2021                 }
2022         }
2023         return(1);
2025 samba_cv_TIME_T_MAX=yes,samba_cv_TIME_T_MAX=no,samba_cv_TIME_T_MAX=cross)])
2026 if test x"$samba_cv_TIME_T_MAX" = x"yes"; then
2027     AC_DEFINE(TIME_T_MAX,67768036191676799ll,[The maximum value of the 'time_t' type])
2032 # As a gating factor for large file support, in order to
2033 # use >4GB files we must have the following minimal support
2034 # available: a 64 bit off_t
2035 # If we don't have all of these then fail the build
2038 AC_MSG_CHECKING([if large file support can be enabled])
2039 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2040 AC_TRY_RUN([#include <stdio.h>
2041 #include <sys/stat.h>
2042 main() { return((sizeof(off_t) == 8) ? 0 : 1); }],
2043 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2044 if test x"$samba_cv_SIZEOF_OFF_T" = x"no"; then
2045     AC_MSG_ERROR(["large file support support not available: sizeof(off_t) != 8"])
2048 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2049 AC_TRY_RUN([
2050 #if defined(HAVE_UNISTD_H)
2051 #include <unistd.h>
2052 #endif
2053 #include <stdio.h>
2054 #include <sys/stat.h>
2055 main() { return((sizeof(ino_t) == 8) ? 0 : 1); }],
2056 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2057 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2058     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2061 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2062 AC_TRY_RUN([
2063 #if defined(HAVE_UNISTD_H)
2064 #include <unistd.h>
2065 #endif
2066 #include <stdio.h>
2067 #include <sys/stat.h>
2068 main() { return((sizeof(dev_t) == 8) ? 0 : 1); }],
2069 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2070 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2071     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2074 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2075 AC_TRY_RUN([
2076 #if defined(HAVE_UNISTD_H)
2077 #include <unistd.h>
2078 #endif
2079 #include <sys/types.h>
2080 main() { dev_t dev; int i = major(dev); return 0; }],
2081 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2082 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2083     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2086 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2087 AC_TRY_RUN([
2088 #if defined(HAVE_UNISTD_H)
2089 #include <unistd.h>
2090 #endif
2091 #include <sys/types.h>
2092 main() { dev_t dev; int i = minor(dev); return 0; }],
2093 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2094 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2095     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2098 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2099 AC_TRY_RUN([
2100 #if defined(HAVE_UNISTD_H)
2101 #include <unistd.h>
2102 #endif
2103 #include <sys/types.h>
2104 main() { dev_t dev = makedev(1,2); return 0; }],
2105 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2106 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2107     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2110 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2111 AC_TRY_COMPILE([#include <sys/types.h>
2112 #include <dirent.h>
2113 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2114 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2115 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2116     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2119 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2120 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2121 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2122 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2123     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2126 if test x"$libreplace_cv_HAVE_CLOCK_GETTIME_IN_LIBRT" = xyes ; then
2127         LIBS="$LIBS -lrt"
2130 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2131 AC_TRY_RUN([#include <sys/types.h>
2132 #include <dirent.h>
2133 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2134 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2135 di->d_name[0] == 0) return(0); return(1);} ],
2136 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2137 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2138     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2141 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2142 AC_TRY_COMPILE([#include <sys/types.h>
2143 #include <utime.h>],
2144 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; return(utime("foo.c",&tbuf));],
2145 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2146 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2147     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2150 ##############
2151 # Check utmp details, but only if our OS offers utmp.h
2152 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2153 dnl  utmp and utmpx come in many flavours
2154 dnl  We need to check for many of them
2155 dnl  But we don't need to do each and every one, because our code uses
2156 dnl  mostly just the utmp (not utmpx) fields.
2158 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx getutxent)
2160 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2161 AC_TRY_COMPILE([#include <sys/types.h>
2162 #include <utmp.h>],
2163 [struct utmp ut;  ut.ut_name[0] = 'a';],
2164 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2165 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2166     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2169 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2170 AC_TRY_COMPILE([#include <sys/types.h>
2171 #include <utmp.h>],
2172 [struct utmp ut;  ut.ut_user[0] = 'a';],
2173 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2174 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2175     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2178 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2179 AC_TRY_COMPILE([#include <sys/types.h>
2180 #include <utmp.h>],
2181 [struct utmp ut;  ut.ut_id[0] = 'a';],
2182 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2183 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2184     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2187 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2188 AC_TRY_COMPILE([#include <sys/types.h>
2189 #include <utmp.h>],
2190 [struct utmp ut;  ut.ut_host[0] = 'a';],
2191 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2192 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2193     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2196 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2197 AC_TRY_COMPILE([#include <sys/types.h>
2198 #include <utmp.h>],
2199 [struct utmp ut;  time_t t; ut.ut_time = t;],
2200 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2201 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2202     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2205 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2206 AC_TRY_COMPILE([#include <sys/types.h>
2207 #include <utmp.h>],
2208 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2209 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2210 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2211     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2214 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2215 AC_TRY_COMPILE([#include <sys/types.h>
2216 #include <utmp.h>],
2217 [struct utmp ut;  ut.ut_type = 0;],
2218 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2219 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2220     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2223 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2224 AC_TRY_COMPILE([#include <sys/types.h>
2225 #include <utmp.h>],
2226 [struct utmp ut;  ut.ut_pid = 0;],
2227 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2228 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2229     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2232 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2233 AC_TRY_COMPILE([#include <sys/types.h>
2234 #include <utmp.h>],
2235 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2236 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2237 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2238     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2241 if test x$ac_cv_func_pututline = xyes ; then
2242   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2243   AC_TRY_COMPILE([#include <sys/types.h>
2244 #include <utmp.h>],
2245   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2246   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2247   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2248       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2249   fi
2252 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2253 AC_TRY_COMPILE([#include <sys/types.h>
2254 #include <utmpx.h>],
2255 [struct utmpx ux;  ux.ut_syslen = 0;],
2256 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2257 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2258     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2261 AC_CACHE_CHECK([whether sizeof ut_line in utmp is ok],samba_cv_HAVE_UX_UT_LINE,[
2262 AC_TRY_RUN([#include <stdio.h>
2263 #include <sys/types.h>
2264 #include <utmp.h>
2265 int main(void) {
2266  if (sizeof(((struct utmp *)NULL)->ut_line) < 15) {
2267      return 1;
2269  return 0;
2272 samba_cv_HAVE_UX_UT_LINE=yes,samba_cv_HAVE_UX_UT_LINE=no,samba_cv_HAVE_UX_UT_LINE=cross)])
2275 # end utmp details
2277 AC_CACHE_CHECK([for linux fallocate],samba_cv_HAVE_LINUX_FALLOCATE,[
2278 AC_TRY_COMPILE([
2279 #if defined(HAVE_UNISTD_H)
2280 #include <unistd.h>
2281 #endif
2282 #include <sys/types.h>
2283 #define _GNU_SOURCE
2284 #include <fcntl.h>
2285 #if defined(HAVE_LINUX_FALLOC_H)
2286 #include <linux/falloc.h>
2287 #endif],
2288 [int ret = fallocate(0, FALLOC_FL_KEEP_SIZE, 0, 10);],
2289 samba_cv_HAVE_LINUX_FALLOCATE=yes,samba_cv_HAVE_LINUX_FALLOCATE=no)])
2290 if test x"$samba_cv_HAVE_LINUX_FALLOCATE" = x"yes" && test x"$ac_cv_func_fallocate" = x"yes"; then
2291     AC_DEFINE(HAVE_LINUX_FALLOCATE,1,[Whether the Linux 'fallocate' function is available])
2294 AC_CACHE_CHECK([for getcwd takes NULL],samba_cv_GETCWD_TAKES_NULL,[
2295 AC_TRY_RUN([
2296 #if defined(HAVE_UNISTD_H)
2297 #include <unistd.h>
2298 #endif
2299 main() { char *s = getcwd(NULL,0); if (s) return(0); return(1); }],
2300 samba_cv_GETCWD_TAKES_NULL=yes,samba_cv_GETCWD_TAKES_NULL=no,samba_cv_GETCWD_TAKES_NULL=cross)])
2301 if test x"$samba_cv_GETCWD_TAKES_NULL" = x"yes"; then
2302     AC_DEFINE(GETCWD_TAKES_NULL,1,[Whether the getcwd function takes NULL as an argument])
2305 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2306 AC_ARG_WITH(libiconv,
2307 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2309   if test "$withval" = "no" ; then
2310     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2311   else
2312      if test "$withval" != "yes" ; then
2313         ICONV_PATH_SPEC=yes
2314         ICONV_LOOK_DIRS="$withval"
2315      fi
2316   fi
2319 for i in $ICONV_LOOK_DIRS ; do
2321     save_LIBS="$LIBS"
2322     save_LDFLAGS="$LDFLAGS"
2323     save_CPPFLAGS="$CPPFLAGS"
2325     iconv_current_LIBS=""
2326     iconv_current_LDFLAGS=""
2327     iconv_current_CPPFLAGS=""
2329     ICONV_FOUND="no"
2330     unset libext
2332     #  This is here to handle -withval stuff for --with-libiconv
2333     #  Perhaps we should always add a -L
2334     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2336     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2337     # installation paths. This gets a little tricky since we might have iconv
2338     # in both libiconv and in libc. In this case the jm_ICONV test will always
2339     # succeed when the header is found. To counter this, make sure the
2340     # library directory is there and check the ABI directory first (which
2341     # should be harmless on other systems, but causes tons of linker warnings on
2342     # 64bit Ubuntu systems).
2343     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2344     # installed, I've decided to fix the linker warnings.
2345     # -- Kai
2346     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2347     for l in "lib" "lib32" "lib/hpux32"; do
2348         if test -d "$i/$l" ; then
2349                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2350                 LIBS=
2351                 export LDFLAGS LIBS CPPFLAGS
2352                 # Try to find iconv(3)
2353                 jm_ICONV($i/$l)
2354                 if test x"$ICONV_FOUND" = "xyes" ; then
2355                     libext="$l"
2356                     break
2357                 fi
2358         fi
2359     done
2361     if test x"$ICONV_FOUND" = "xyes" ; then
2362         iconv_current_LDFLAGS="-L$i/$libext"
2363         iconv_current_CPPFLAGS="-I$i/include"
2365         if test x"$jm_cv_lib_iconv" != x; then
2366             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2367         else
2368             # We found iconv in libc.
2369             iconv_current_LIBS=""
2370         fi
2372     fi
2374     if test x"$ICONV_FOUND" = "xyes" ; then
2376         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2377         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2378         LIBS="$save_LIBS $iconv_current_LIBS"
2379         export LDFLAGS LIBS CPPFLAGS
2381         default_dos_charset=no
2382         default_unix_charset=no
2384         # check for default dos charset name
2385         for j in CP850 IBM850 ; do
2386             rjs_CHARSET($j)
2387             default_dos_charset="$ICONV_CHARSET"
2388             if test x"$default_dos_charset" = x"$j"; then
2389                 break
2390             fi
2391         done
2393         # check for default unix charset name
2394         for j in UTF-8 UTF8 ; do
2395             rjs_CHARSET($j)
2396             default_unix_charset="$ICONV_CHARSET"
2397             if test x"$default_unix_charset" = x"$j"; then
2398                 break
2399             fi
2400         done
2402         if test "$default_dos_charset" != "no" -a \
2403                 "$default_dos_charset" != "cross" -a \
2404                 "$default_unix_charset" != "no" -a \
2405                 "$default_unix_charset" != "cross"
2406         then
2407                 samba_cv_HAVE_NATIVE_ICONV=yes
2408         else
2409             if test "$default_dos_charset" = "cross" -o \
2410                      "$default_unix_charset" = "cross"
2411             then
2412                     samba_cv_HAVE_NATIVE_ICONV=cross
2413             else
2414                     samba_cv_HAVE_NATIVE_ICONV=no
2415             fi
2416         fi
2418         # At this point, we have a libiconv candidate. We know that
2419         # we have the right headers and libraries, but we don't know
2420         # whether it does the conversions we want. We can't test this
2421         # because we are cross-compiling. This is not necessarily a big
2422         # deal, since we can't guarantee that the results we get now will
2423         # match the results we get at runtime anyway.
2424         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2425             default_dos_charset="CP850"
2426             default_unix_charset="UTF-8"
2427             samba_cv_HAVE_NATIVE_ICONV=yes
2428             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2429             AC_MSG_WARN([$default_dos_charset and $default_unix_charset to UCS-16LE])
2430         fi
2432         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2434             CPPFLAGS=$save_CPPFLAGS
2435             LDFLAGS=$save_LDFLAGS
2436             LIBS=$save_LIBS
2438             if test x"$iconv_current_LIBS" != x; then
2439                 LIBS="$LIBS $iconv_current_LIBS"
2440             fi
2442             # Add the flags we need to CPPFLAGS and LDFLAGS
2443             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2444             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2446             # Turn the #defines into string literals
2447             default_dos_charset="\"$default_dos_charset\""
2448             default_unix_charset="\"$default_unix_charset\""
2450             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2451             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2452             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2454            break
2455         fi
2457     # We didn't find a working iconv, so keep going
2458     fi
2460     #  We only need to clean these up here for the next pass through the loop
2461     CPPFLAGS=$save_CPPFLAGS
2462     LDFLAGS=$save_LDFLAGS
2463     LIBS=$save_LIBS
2464     export LDFLAGS LIBS CPPFLAGS
2465 done
2466 unset libext
2469 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2470     AC_MSG_WARN([Sufficient support for iconv function was not found.
2471     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2472    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2473    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2477 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2478 AC_TRY_RUN([
2479 #include <sys/types.h>
2480 #include <fcntl.h>
2481 #ifndef F_GETLEASE
2482 #define F_GETLEASE      1025
2483 #endif
2484 main() {
2485        int fd = open("/dev/null", O_RDONLY);
2486        return fcntl(fd, F_GETLEASE, 0) == -1;
2489 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2490 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2491     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2494 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2495 AC_TRY_RUN([
2496 #include <sys/types.h>
2497 #include <fcntl.h>
2498 #include <signal.h>
2499 #ifndef F_NOTIFY
2500 #define F_NOTIFY 1026
2501 #endif
2502 main() {
2503         return(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2506 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2507 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2508     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2511 AC_CHECK_HEADER(sys/inotify.h)
2513 if test x"$ac_cv_header_sys_inotify_h" = x"yes"; then
2514     AC_DEFINE(HAVE_INOTIFY,1,[For inotify support])
2517 #################################################
2518 # Check if FAM notifications are available. For FAM info, see
2519 #       http://oss.sgi.com/projects/fam/
2520 #       http://savannah.nongnu.org/projects/fam/
2521 AC_ARG_ENABLE(fam,
2522 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2524 if test x$enable_fam != xno; then
2525     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2526     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2527         # On IRIX, libfam requires libC, but other FAM implementations
2528         # might not need it.
2529         AC_CHECK_LIB(fam, FAMOpen2,
2530             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam";
2531             AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2532             [samba_cv_HAVE_LIBFAM=no])
2534         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2535             samba_fam_xtra=-lC
2536             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2537                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC";
2538                 AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2539                 [samba_cv_HAVE_LIBFAM=no])
2540             unset samba_fam_xtra
2541         fi
2542     fi
2543     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2544         default_shared_modules="$default_shared_modules vfs_notify_fam"
2545         AC_TRY_COMPILE([#include <fam.h>],
2546                     [enum FAMCodes code = FAMChanged;],
2547                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2548                         [Whether fam.h contains a typedef for enum FAMCodes]),
2549                     [])
2550     fi
2552     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2553         AC_CHECK_LIB(fam, FAMNoExists,
2554             [AC_DEFINE(HAVE_FAMNOEXISTS, 1, Define to 1 if there is support for FAMNoExists)])
2555     fi
2557     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2558         AC_MSG_ERROR(FAM support requested but FAM library not available )
2559     fi
2562 AC_SUBST(SMB_FAM_LIBS)
2564 #################################################
2565 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2568 with_dmapi_support=auto
2569 AC_MSG_CHECKING(whether to use DMAPI support)
2570 AC_ARG_WITH(dmapi,
2571 [AS_HELP_STRING([--with-dmapi], [Include DMAPI/XDSM support (default=auto)])],
2572 [ case "$withval" in
2573   yes|no)
2574     with_dmapi_support=$withval
2575     ;;
2576   esac ]
2578 AC_MSG_RESULT([$with_dmapi_support])
2580 if test x"$with_dmapi_support" != xno ; then
2581         SMB_CHECK_DMAPI([], [
2582                 AC_MSG_NOTICE(DMAPI support not present)
2583                 if test x"$with_dmapi_support" = xyes ; then
2584                         AC_MSG_ERROR(no DMAPI support found but requested!)
2585                 fi
2586                 ]
2587         )
2590 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2591 # Theoretically it should work with AIX JFS2 too but this needs testing
2592 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2593     default_shared_modules="$default_shared_modules vfs_tsmsm"
2596 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2597 AC_TRY_RUN([
2598 #include <sys/types.h>
2599 #include <fcntl.h>
2600 #include <signal.h>
2601 #include <sys/file.h>
2602 #ifndef LOCK_MAND
2603 #define LOCK_MAND       32
2604 #define LOCK_READ       64
2605 #endif
2606 main() {
2607         return(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2610 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2611 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2612     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2616 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2617 AC_TRY_COMPILE([#include <sys/types.h>
2618 #include <fcntl.h>],
2619 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2620 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2621 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2622     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2625 #################################################
2626 # Check for POSIX capability support
2628 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2629     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2630     [], [])
2632 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2634     ac_save_LIBS=$LIBS
2635     AC_LIBTESTFUNC(cap, cap_get_proc)
2637     AC_CACHE_CHECK([for POSIX capabilities],
2638             samba_cv_HAVE_POSIX_CAPABILITIES,
2639             [
2640                 AC_TRY_RUN([
2641 #include <sys/types.h>
2642 #include <sys/capability.h>
2643 main() {
2644  cap_t cap;
2645  cap_value_t vals[1];
2646  if (!(cap = cap_get_proc()))
2647    return(1);
2648  vals[0] = CAP_CHOWN;
2649  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2650  cap_set_proc(cap);
2651  return(0);
2653                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2654                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2655                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2656             ])
2658 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2659     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2660             [Whether POSIX capabilities are available])
2661 else
2662     LIBS=$ac_save_LIBS
2668 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2669 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2672 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2673 AC_TRY_COMPILE([#include <sys/types.h>
2674 #if defined(HAVE_RPC_RPC_H)
2675 #include <rpc/rpc.h>
2676 #endif],
2677 [int16 testvar;],
2678 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2679 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2680     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2683 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2684 AC_TRY_COMPILE([#include <sys/types.h>
2685 #if defined(HAVE_RPC_RPC_H)
2686 #include <rpc/rpc.h>
2687 #endif],
2688 [uint16 testvar;],
2689 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2690 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2691     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2694 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2695 AC_TRY_COMPILE([#include <sys/types.h>
2696 #if defined(HAVE_RPC_RPC_H)
2697 #include <rpc/rpc.h>
2698 #endif],
2699 [int32 testvar;],
2700 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2701 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2702     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2705 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_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 [uint32 testvar;],
2711 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2712 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2713     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2717 dnl Some systems (SCO) have a problem including
2718 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2719 dnl as a #define in <prot.h> and as part of an enum
2720 dnl in <rpc/rpc.h>.
2723 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2724 AC_TRY_COMPILE([#include <sys/types.h>
2725 #ifdef HAVE_SYS_SECURITY_H
2726 #include <sys/security.h>
2727 #include <prot.h>
2728 #endif  /* HAVE_SYS_SECURITY_H */
2729 #if defined(HAVE_RPC_RPC_H)
2730 #include <rpc/rpc.h>
2731 #endif],
2732 [int testvar;],
2733 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2734 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2735     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2738 AC_MSG_CHECKING([for test routines])
2739 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
2740            AC_MSG_RESULT(yes),
2741            AC_MSG_ERROR([cant find test code. Aborting config]),
2742            AC_MSG_WARN([cannot run when cross-compiling]))
2744 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2745 AC_TRY_RUN([#include "${srcdir-.}/../tests/ftruncate.c"],
2746            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2747 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2748     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2751 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2752 AC_TRY_RUN([#include "${srcdir-.}/../tests/getgroups.c"],
2753            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2754 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2755     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2758 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2759 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2760 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2761 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2762 AC_CHECK_FUNCS(getpagesize)
2764 ################################################
2765 # look for a method of setting the effective uid
2766 seteuid=no;
2768 ################################################
2769 # Start by checking for 32-bit system call definitions on Linux.
2771 case "$host_os" in
2772 *linux*)
2773 AC_CACHE_CHECK([for Linux 32-bit system calls],samba_cv_USE_LINUX_32BIT_SYSCALLS,[
2774 AC_TRY_COMPILE([
2775 #if defined(HAVE_UNISTD_H)
2776 #include <unistd.h>
2777 #endif
2778 #include <stdlib.h>
2779 #include <stdio.h>
2780 #include <sys/types.h>
2781 #include <errno.h>
2783 #ifdef HAVE_SYS_PRIV_H
2784 #include <sys/priv.h>
2785 #endif
2786 #ifdef HAVE_SYS_ID_H
2787 #include <sys/id.h>
2788 #endif
2790 #if defined(HAVE_SYSCALL_H)
2791 #include <syscall.h>
2792 #endif
2794 #if defined(HAVE_SYS_SYSCALL_H)
2795 #include <sys/syscall.h>
2796 #endif
2799 syscall(SYS_setresuid32, -1, -1, -1);
2800 syscall(SYS_setresgid32, -1, -1, -1);
2801 syscall(SYS_setreuid32, -1, -1);
2802 syscall(SYS_setregid32, -1, -1);
2803 syscall(SYS_setuid32, -1);
2804 syscall(SYS_setgid32, -1);
2805 syscall(SYS_setgroups32, 0, NULL);
2806 ], samba_cv_USE_LINUX_32BIT_SYSCALLS=yes,samba_cv_USE_LINUX_32BIT_SYSCALLS=no,samba_cv_USE_LINUX_32BIT_SYSCALLS=cross)])
2808 if test x"$samba_cv_USE_LINUX_32BIT_SYSCALLS" = x"yes"; then
2809     AC_DEFINE(USE_LINUX_32BIT_SYSCALLS,1,[Use Linux 32-bit system calls])
2810     AC_CACHE_CHECK([for Linux thread-specific credentials with 32-bit system calls],samba_cv_USE_LINUX_THREAD_CREDENTIALS,[
2811     AC_TRY_RUN([
2812 #define AUTOCONF_TEST 1
2813 #define USE_LINUX_THREAD_CREDENTIALS 1
2814 #define USE_LINUX_32BIT_SYSCALLS 1
2815 #include "${srcdir-.}/../lib/util/setid.c"
2816 #include "${srcdir-.}/lib/util_sec.c"],
2817            samba_cv_USE_LINUX_THREAD_CREDENTIALS=yes,samba_cv_USE_LINUX_THREAD_CREDENTIALS=no,samba_cv_USE_LINUX_THREAD_CREDENTIALS=cross)])
2818 if test x"$samba_cv_USE_LINUX_THREAD_CREDENTIALS" = x"yes"; then
2819     seteuid=yes;
2820     AC_DEFINE(USE_LINUX_THREAD_CREDENTIALS,1,[Whether we can use Linux thread-specific credentials with 32-bit system calls])
2824 if test $seteuid = no; then
2825 AC_CACHE_CHECK([for Linux thread-specific credentials],samba_cv_USE_LINUX_THREAD_CREDENTIALS,[
2826 AC_TRY_RUN([
2827 #define AUTOCONF_TEST 1
2828 #define USE_LINUX_THREAD_CREDENTIALS 1
2829 #include "${srcdir-.}/../lib/util/setid.c"
2830 #include "${srcdir-.}/lib/util_sec.c"],
2831            samba_cv_USE_LINUX_THREAD_CREDENTIALS=yes,samba_cv_USE_LINUX_THREAD_CREDENTIALS=no,samba_cv_USE_LINUX_THREAD_CREDENTIALS=cross)])
2832 if test x"$samba_cv_USE_LINUX_THREAD_CREDENTIALS" = x"yes"; then
2833     seteuid=yes;AC_DEFINE(USE_LINUX_THREAD_CREDENTIALS,1,[Whether we can use Linux thread-specific credentials])
2838 esac
2840 if test $seteuid = no; then
2841 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2842 AC_TRY_RUN([
2843 #define AUTOCONF_TEST 1
2844 #define USE_SETREUID 1
2845 #include "confdefs.h"
2846 #include "${srcdir-.}/../lib/util/setid.c"
2847 #include "${srcdir-.}/lib/util_sec.c"],
2848            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2849 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2850     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2854 # we check for setresuid second as it conflicts with AIO on Linux. 
2855 # see http://samba.org/~tridge/junkcode/aio_uid.c
2856 if test $seteuid = no; then
2857 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2858 AC_TRY_RUN([
2859 #define AUTOCONF_TEST 1
2860 #define USE_SETRESUID 1
2861 #include "confdefs.h"
2862 #include "${srcdir-.}/../lib/util/setid.c"
2863 #include "${srcdir-.}/lib/util_sec.c"],
2864            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2865 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2866     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2870 if test $seteuid = no; then
2871 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2872 AC_TRY_RUN([
2873 #define AUTOCONF_TEST 1
2874 #define USE_SETEUID 1
2875 #include "confdefs.h"
2876 #include "${srcdir-.}/../lib/util/setid.c"
2877 #include "${srcdir-.}/lib/util_sec.c"],
2878            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2879 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2880     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2884 if test $seteuid = no; then
2885 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2886 AC_TRY_RUN([
2887 #define AUTOCONF_TEST 1
2888 #define USE_SETUIDX 1
2889 #include "confdefs.h"
2890 #include "${srcdir-.}/../lib/util/setid.c"
2891 #include "${srcdir-.}/lib/util_sec.c"],
2892            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2893 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2894     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2898 AC_CACHE_CHECK([for the Darwin initgroups system call],
2899         samba_cv_DARWIN_INITGROUPS,
2900         AC_TRY_LINK([
2901 #include <sys/syscall.h>
2902 #include <unistd.h>
2903         ],
2904         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2905         samba_cv_DARWIN_INITGROUPS=yes,
2906         samba_cv_DARWIN_INITGROUPS=no)
2909 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2910     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2911         [Whether to use the Darwin-specific initgroups system call])
2914 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2915 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock.c"],
2916            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2917 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2918     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2921 # glibc up to 2.3.6 had dangerously broken posix_fallocate(). DON'T USE IT.
2922 AC_CACHE_CHECK([for broken posix_fallocate],samba_cv_HAVE_BROKEN_POSIX_FALLOCATE,[
2923 AC_TRY_COMPILE([
2924   #define _XOPEN_SOURCE 600
2925   #include <stdlib.h>
2926   #if defined(__GLIBC__) && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4))
2927   #error probably broken posix_fallocate
2928   #endif
2929 ], [
2930 ], 
2931 samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=no,samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=yes)])
2932 if test x"$samba_cv_HAVE_BROKEN_POSIX_FALLOCATE" = xyes; then
2933         AC_DEFINE(HAVE_BROKEN_POSIX_FALLOCATE, 1, Whether we have a broken posix_fallocate)
2937 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2938 AC_TRY_COMPILE([#include <sys/types.h>
2939 #include <sys/stat.h>
2940 #include <unistd.h>],
2941 [struct stat st;  st.st_blocks = 0;],
2942 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2943 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2944     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2947 AC_CACHE_CHECK([for 32 bit blkcnt_t],samba_cv_SIZEOF_BLKCNT_T_4,[
2948 AC_TRY_RUN([
2949 #if defined(HAVE_UNISTD_H)
2950 #include <unistd.h>
2951 #endif
2952 #include <stdio.h>
2953 #include <sys/types.h>
2954 #include <sys/stat.h>
2955 main() { return((sizeof(blkcnt_t) == 4) ? 0 : 1); }],
2956 samba_cv_SIZEOF_BLKCNT_T_4=yes,samba_cv_SIZEOF_BLKCNT_T_4=no,samba_cv_SIZEOF_BLKCNT_T_4=cross)])
2957 if test x"$samba_cv_SIZEOF_BLKCNT_T_4" = x"yes"; then
2958     AC_DEFINE(SIZEOF_BLKCNT_T_4,1,[The size of the 'blkcnt_t' type])
2961 AC_CACHE_CHECK([for 64 bit blkcnt_t],samba_cv_SIZEOF_BLKCNT_T_8,[
2962 AC_TRY_RUN([
2963 #if defined(HAVE_UNISTD_H)
2964 #include <unistd.h>
2965 #endif
2966 #include <stdio.h>
2967 #include <sys/types.h>
2968 #include <sys/stat.h>
2969 main() { return((sizeof(blkcnt_t) == 8) ? 0 : 1); }],
2970 samba_cv_SIZEOF_BLKCNT_T_8=yes,samba_cv_SIZEOF_BLKCNT_T_8=no,samba_cv_SIZEOF_BLKCNT_T_8=cross)])
2971 if test x"$samba_cv_SIZEOF_BLKCNT_T_8" = x"yes"; then
2972     AC_DEFINE(SIZEOF_BLKCNT_T_8,1,[The size of the 'blkcnt_t' type])
2975 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2976 AC_TRY_COMPILE([#include <sys/types.h>
2977 #include <sys/stat.h>
2978 #include <unistd.h>],
2979 [struct stat st;  st.st_blksize = 0;],
2980 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2981 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2982     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2985 AC_CACHE_CHECK([for st_flags in struct stat],
2986         samba_cv_HAVE_STAT_ST_FLAGS,
2987         [
2988             AC_TRY_COMPILE([#include <sys/types.h>
2989 #include <sys/stat.h>
2990 #include <unistd.h>],
2991             [struct stat st;  st.st_flags = 0;],
2992             samba_cv_HAVE_STAT_ST_FLAGS=yes,
2993             samba_cv_HAVE_STAT_ST_FLAGS=no,
2994             samba_cv_HAVE_STAT_ST_FLAGS=cross)
2995         ])
2997 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
2998     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
2999                 [Whether the stat struct has a st_flags member])
3002 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3003 AC_TRY_COMPILE([
3004 #include <sys/types.h>
3005 #include <sys/acl.h>
3006 #if defined(HAVE_RPCSVC_NIS_H)
3007 #include <rpcsvc/nis.h>
3008 #endif],
3009 [int i;],
3010 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3011 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3012         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3015 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3016 AC_TRY_RUN([
3017 #include <stdio.h>
3018 #include <limits.h>
3019 #include <signal.h>
3021 void exit_on_core(int ignored) {
3022         exit(1);
3025 main() {
3026         char *newpath;
3027         signal(SIGSEGV, exit_on_core);
3028         newpath = realpath("/tmp", NULL);
3029         return((newpath != NULL) ? 0 : 1);
3032 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3033 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3034     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3037 #################################################
3038 # check for AFS clear-text auth support
3039 samba_cv_WITH_AFS=no
3040 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3041 AC_ARG_WITH(afs,
3042 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
3043 [ case "$withval" in
3044   yes|auto)
3045     AC_MSG_RESULT($withval)
3046     samba_cv_WITH_AFS=$withval
3047     ;;
3048   *)
3049     AC_MSG_RESULT(no)
3050     ;;
3051   esac ],
3052   AC_MSG_RESULT(no)
3055 ####################################################
3056 # check for Linux-specific AFS fake-kaserver support
3057 samba_cv_WITH_FAKE_KASERVER=no
3058 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3059 AC_ARG_WITH(fake-kaserver,
3060 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
3061 [ case "$withval" in
3062   yes|auto)
3063     AC_MSG_RESULT($withval)
3064     samba_cv_WITH_FAKE_KASERVER=$withval
3065     ;;
3066   *)
3067     AC_MSG_RESULT(no)
3068     ;;
3069   esac ],
3070   AC_MSG_RESULT(no)
3073 #################################################
3074 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3075 if test x"$samba_cv_WITH_AFS" != x"no" ||
3076    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3078     # see if this box has the OpenSSL DES libraries
3079     AC_CHECK_LIB( crypto, DES_pcbc_encrypt, LIBS="$LIBS -lcrypto" , [AC_ERROR(OpenSSL library: libcrypto ot found!)] )
3081     # see if this box has the afs-headers in /usr/include/afs
3082     AC_MSG_CHECKING(for /usr/include/afs)
3083     if test -d /usr/include/afs; then
3084           AC_MSG_RESULT(yes)
3085     else
3086       AC_MSG_RESULT(no)
3087     fi
3089     # check for afs.h
3090     have_afs_headers=no
3091     AC_CHECK_HEADERS(afs.h afs/afs.h)
3092     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3093         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3094            test x"$samba_cv_WITH_AFS" = x"auto"; then
3095                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3096         else
3097                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3098         fi
3099     else
3100         have_afs_headers=yes
3101     fi
3104 FAKE_KASERVER_OBJ=""
3105 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3106     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3107     FAKE_KASERVER_OBJ="utils/net_afs.o"
3109 AC_SUBST(FAKE_KASERVER_OBJ)
3111 #################################################
3112 # check whether to compile AFS/NT ACL mapping module
3113 samba_cv_WITH_VFS_AFSACL=no
3114 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3115 AC_ARG_WITH(vfs-afsacl,
3116 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
3117 [ case "$withval" in
3118   yes|auto)
3119     AC_MSG_RESULT($withval)
3120     samba_cv_WITH_VFS_AFSACL=yes
3121     ;;
3122   *)
3123     AC_MSG_RESULT(no)
3124     ;;
3125   esac ],
3126   AC_MSG_RESULT(no)
3129 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3130    default_shared_modules="$default_shared_modules vfs_afsacl"
3132         
3133 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3134     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3137 #################################################
3138 # check for the DFS clear-text auth system
3139 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3140 AC_ARG_WITH(dfs,
3141 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3142 [ case "$withval" in
3143   yes)
3144     AC_MSG_RESULT(yes)
3145     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3146     ;;
3147   *)
3148     AC_MSG_RESULT(no)
3149     ;;
3150   esac ],
3151   AC_MSG_RESULT(no)
3154 ########################################################
3155 # Compile with LDAP support?
3157 with_ldap_support=auto
3158 AC_MSG_CHECKING([for LDAP support])
3160 AC_ARG_WITH(ldap,
3161 [AS_HELP_STRING([--with-ldap], [LDAP support (default=auto)])],
3162 [ case "$withval" in
3163     yes|no)
3164         with_ldap_support=$withval
3165         ;;
3166   esac ])
3168 AC_MSG_RESULT($with_ldap_support)
3170 SMBLDAP=""
3171 AC_SUBST(SMBLDAP)
3173 if test x"$with_ldap_support" != x"no"; then
3175   ##################################################################
3176   # first test for ldap.h and lber.h
3177   # (ldap.h is required for this test)
3178   AC_CHECK_HEADERS(ldap.h lber.h)
3180   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3181         if test x"$with_ldap_support" = x"yes"; then
3182          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3183         else
3184          AC_MSG_WARN(ldap.h is needed for LDAP support)
3185         fi
3186         
3187         with_ldap_support=no
3188   fi
3190   ##################################################################
3191   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3192   # unsigned int in include/includes.h
3193   case $host_os in
3194         *hpux*)
3195          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3196          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3197         with_ldap_support=yes
3198         ;;
3199         *)
3200         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3201         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3202                 if test x"$with_ldap_support" = x"yes"; then
3203                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3204                 else
3205                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3206                 fi
3207                 with_ldap_support=no
3208         fi
3209         ;;
3210   esac
3213 if test x"$with_ldap_support" != x"no"; then
3214   ac_save_LIBS=$LIBS
3216   ##################################################################
3217   # we might need the lber lib on some systems. To avoid link errors
3218   # this test must be before the libldap test
3219   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3221   ########################################################
3222   # If ber_sockbuf_add_io() is available we can add
3223   # SASL wrapping hooks
3224   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3226   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3227                  AC_TRY_COMPILE([#include <ldap.h>],
3228                                 [int val = LDAP_OPT_SOCKBUF;],
3229                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3230                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3232   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3233           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3234         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3235   fi
3237   #######################################################
3238   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3239   # ldap logging and print it out in the samba logs
3240   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3241                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3242                  [AC_TRY_COMPILE([#include <lber.h>],
3243                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3244                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3245                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3247   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3248         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3249                   [Support for LDAP/LBER logging interception])
3250   fi
3252   ########################################################
3253   # now see if we can find the ldap libs in standard paths
3254   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3256   ########################################################
3257   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3258   # Check found in pam_ldap 145.
3259   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3261   LIBS="$LIBS $LDAP_LIBS"
3262   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3263     AC_TRY_COMPILE([
3264         #include <lber.h>
3265         #include <ldap.h>],
3266         [ldap_set_rebind_proc(0, 0, 0);],
3267         [smb_ldap_cv_ldap_set_rebind_proc=3],
3268         [smb_ldap_cv_ldap_set_rebind_proc=2]
3269     )
3270   ])
3272   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3274   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3276   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3277     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3278     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3279     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3280     default_shared_modules="$default_shared_modules";
3281     SMBLDAP="lib/smbldap.o"
3282     with_ldap_support=yes
3283     AC_MSG_CHECKING(whether LDAP support is used)
3284     AC_MSG_RESULT(yes)
3285   else
3286     if test x"$with_ldap_support" = x"yes"; then
3287         AC_MSG_ERROR(libldap is needed for LDAP support)
3288     else
3289         AC_MSG_WARN(libldap is needed for LDAP support)
3290     fi
3292     LDAP_LIBS=""
3293     with_ldap_support=no
3294   fi
3295   LIBS=$ac_save_LIBS
3299 #################################################
3300 # active directory support
3302 with_ads_support=auto
3303 AC_MSG_CHECKING([for Active Directory and krb5 support])
3305 AC_ARG_WITH(ads,
3306 [AS_HELP_STRING([--with-ads], [Active Directory support (default=auto)])],
3307 [ case "$withval" in
3308     yes|no)
3309         with_ads_support="$withval"
3310         ;;
3311   esac ])
3313 AC_MSG_RESULT($with_ads_support)
3315 FOUND_KRB5=no
3316 KRB5_LIBS=""
3318 if test x"$with_ldap_support" != x"yes"; then
3320     if test x"$with_ads_support" = x"yes"; then
3321         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3322     elif test x"$with_ads_support" = x"auto"; then
3323         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3324         with_ads_support=no
3325     fi
3327 else
3329     # Check to see whether there is enough LDAP functionality to be able
3330     # to build AD support.
3332 # HPUX and Solaris only has ldap_init; ok, we take care of this in smbldap.c
3333 case "$host_os" in
3334         *hpux* | *solaris*)
3335     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3337     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3338         if test x"$with_ads_support" = x"yes"; then
3339             AC_MSG_ERROR(Active Directory support on HPUX or Solaris requires ldap_init)
3340         elif test x"$with_ads_support" = x"auto"; then
3341             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX or Solaris))
3342             with_ads_support=no
3343         fi
3344     fi
3345     ;;
3346         *)
3347     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3349     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3350         if test x"$with_ads_support" = x"yes"; then
3351             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3352         elif test x"$with_ads_support" = x"auto"; then
3353             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3354             with_ads_support=no
3355         fi
3356     fi
3357     ;;
3358 esac
3361     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3363     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3364         if test x"$with_ads_support" = x"yes"; then
3365             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3366         elif test x"$with_ads_support" = x"auto"; then
3367             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3368             with_ads_support=no
3369         fi
3370     fi
3374 if test x"$with_ads_support" != x"no"; then
3376   # Do no harm to the values of CFLAGS and LIBS while testing for
3377   # Kerberos support.
3379   if test x$FOUND_KRB5 = x"no"; then
3380     #################################################
3381     # check for location of Kerberos 5 install
3382     AC_MSG_CHECKING(for kerberos 5 install path)
3383     AC_ARG_WITH(krb5,
3384     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3385     [ case "$withval" in
3386       no)
3387         AC_MSG_RESULT(no krb5-path given)
3388         ;;
3389       yes)
3390         AC_MSG_RESULT(/usr)
3391         ;;
3392       *)
3393         AC_MSG_RESULT($withval)
3394         KRB5_CFLAGS="-I$withval/include"
3395         KRB5_CPPFLAGS="-I$withval/include"
3396         KRB5_LDFLAGS="-L$withval/lib"
3397         FOUND_KRB5=yes
3398         if test -x "$withval/bin/krb5-config"; then
3399                 KRB5CONFIG=$withval/bin/krb5-config
3400         fi
3401         ;;
3402       esac ],
3403       AC_MSG_RESULT(no krb5-path given)
3404     )
3405   fi
3407   #################################################
3408   # check for krb5-config from recent MIT and Heimdal kerberos 5
3409   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3410   AC_MSG_CHECKING(for working krb5-config)
3411   if test -x "$KRB5CONFIG" && $KRB5CONFIG --libs gssapi > /dev/null ; then
3412     ac_save_CFLAGS=$CFLAGS
3413     CFLAGS="";export CFLAGS
3414     ac_save_LDFLAGS=$LDFLAGS
3415     LDFLAGS="";export LDFLAGS
3416     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3417     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3418     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3419     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3420     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3421     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3422     FOUND_KRB5=yes
3423     AC_MSG_RESULT(yes)
3424   else
3425     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3426   fi
3428   if test x$FOUND_KRB5 = x"no"; then
3429     #################################################
3430     # see if this box has the SuSE location for the heimdal krb implementation
3431     AC_MSG_CHECKING(for /usr/include/heimdal)
3432     if test -d /usr/include/heimdal; then
3433       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3434           KRB5_CFLAGS="-I/usr/include/heimdal"
3435           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3436           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3437           FOUND_KRB5=yes
3438           AC_MSG_RESULT(yes)
3439       else
3440           KRB5_CFLAGS="-I/usr/include/heimdal"
3441           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3442           FOUND_KRB5=yes
3443           AC_MSG_RESULT(yes)
3444       fi
3445     else
3446       AC_MSG_RESULT(no)
3447     fi
3448   fi
3450   if test x$FOUND_KRB5 = x"no"; then
3451     #################################################
3452     # see if this box has the RedHat location for kerberos
3453     AC_MSG_CHECKING(for /usr/kerberos)
3454     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3455       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3456       KRB5_CFLAGS="-I/usr/kerberos/include"
3457       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3458       FOUND_KRB5=yes
3459       AC_MSG_RESULT(yes)
3460     else
3461       AC_MSG_RESULT(no)
3462     fi
3463   fi
3465   if test x$FOUND_KRB5 = x"no"; then
3466     #################################################
3467     # see if this box has the OpenBSD location for heimdal krb5
3468     AC_MSG_CHECKING(for /usr/include/kerberosV)
3469     if test -d /usr/include/kerberosV; then
3470       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3471       KRB5_LIBS="-lcrypto"
3472       FOUND_KRB5=yes
3473       AC_MSG_RESULT(yes)
3474     else
3475       AC_MSG_RESULT(no)
3476     fi
3477   fi
3479   if test x$FOUND_KRB5 = x"no"; then
3480     #################################################
3481     # see if this box has Solaris MIT kerberos implementation
3482     AC_MSG_CHECKING(for Solaris MIT kerberos)
3483     if test -x "$KRB5CONFIG" && $KRB5CONFIG --version | grep -s Solaris | grep -s MIT > /dev/null ; then
3484        FOUND_KRB5=yes
3485        KRB5_LIBS="-lgss -lkrb5"
3486        KRB5_CFLAGS="`$KRB5CONFIG --cflags`"
3487        KRB5_CPPFLAGS="`$KRB5CONFIG --cflags`"
3488        AC_MSG_RESULT(yes)
3489     else
3490       AC_MSG_RESULT(no)
3491     fi
3492   fi
3494   ac_save_CFLAGS=$CFLAGS
3495   ac_save_CPPFLAGS=$CPPFLAGS
3496   ac_save_LDFLAGS=$LDFLAGS
3498   # remove needless evil rpath stuff as early as possible:
3499   LIB_REMOVE_USR_LIB(KRB5_LIBS)
3500   LIB_REMOVE_USR_LIB(KRB5_LDFLAGS)
3501   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3502   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3503   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3505   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3507   # now check for krb5.h. Some systems have the libraries without the headers!
3508   # note that this check is done here to allow for different kerberos
3509   # include paths
3510   AC_CHECK_HEADERS(krb5.h)
3512   if test x"$ac_cv_header_krb5_h" = x"no"; then
3514     # Give a warning if AD support was not explicitly requested,
3515     # i.e with_ads_support = auto, otherwise die with an error.
3517     if test x"$with_ads_support" = x"yes"; then
3518       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3519     else
3520       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3521     fi
3523     # Turn off AD support and restore CFLAGS and LIBS variables
3525     with_ads_support="no"
3527     CFLAGS=$ac_save_CFLAGS
3528     CPPFLAGS=$ac_save_CPPFLAGS
3529     LDFLAGS=$ac_save_LDFLAGS
3530   fi
3532   # check for new heimdal KRB5_DEPRECATED handling
3534   AC_CACHE_CHECK([for KRB5_DEPRECATED define taking an identifier],
3535                 samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER,[
3536     AC_TRY_COMPILE(
3537       [#define KRB5_DEPRECATED 1
3538       #include <krb5.h>],
3539       [],
3540       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=yes,
3541       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=no)])
3543   if test x"$samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER" = x"yes"; then
3544     AC_DEFINE(HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER, 1,
3545                [Whether to use deprecated krb5 interfaces])
3546   fi
3549 # Now we have determined whether we really want ADS support
3550 use_ads=no
3551 if test x"$with_ads_support" != x"no"; then
3552   use_ads=yes
3553   have_gssapi=no
3554   ac_save_LIBS=$LIBS
3556   # now check for gssapi headers.  This is also done here to allow for
3557   # different kerberos include paths
3558   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h gssapi/gssapi_ext.h gssapi/gssapi_krb5.h com_err.h)
3560   ##################################################################
3561   # we might need the k5crypto and com_err libraries on some systems
3562   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3563   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3565   # Heimdal checks.
3566   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3567   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3568   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3570   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3571   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3573   ########################################################
3574   # now see if we can find the krb5 libs in standard paths
3575   # or as specified above
3576   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3577   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3579   ########################################################
3580   # now see if we can find the gssapi libs in standard paths
3581   if test x"$have_gssapi" != x"yes"; then
3582      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3583      AC_CHECK_LIB_EXT(gss, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3584   fi
3585   ################################################################
3586   # test for AD / GSSAPI support being enabled
3587   if test x"$have_gssapi" != xyes ; then
3588         AC_MSG_WARN([Samba cannot be supported without GSSAPI])
3589         use_ads=no
3590   else
3591         AC_DEFINE(HAVE_GSSAPI, , [Whether the platform has GSSAPI support])
3592   fi
3594   # This is for FreeBSD (and possibly others). gss_mech_krb5 is a
3595   # #define to GSS_KRB5_MECHANISM, which is defined in -lgssapi_krb5
3596   # Also, gsskrb5_extract_authz_data_from_sec_context is in -lgssapi_krb5
3597   AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS, GSS_KRB5_MECHANISM,
3598                    [KRB5_LIBS="$KRB5_LIBS -lgssapi_krb5"])
3600   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3601   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3602   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3603   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3604   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3605   AC_CHECK_FUNC_EXT(krb5_c_string_to_key, $KRB5_LIBS)
3606   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3607   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3608   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3609   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3610   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3611   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3612   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3613   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3614   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3615   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3616   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3617   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3618   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3619   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3620   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3621   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3622   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3623   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3624   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3625   AC_CHECK_FUNC_EXT(krb5_make_principal, $KRB5_LIBS)
3626   AC_CHECK_FUNC_EXT(krb5_principal_get_num_comp, $KRB5_LIBS)
3627   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3628   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3629   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3630   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3631   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3632   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3633   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3634   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3635   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3636   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3637   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_alloc, $KRB5_LIBS)
3638   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_set_impersonate, $KRB5_LIBS)
3639   AC_CHECK_FUNC_EXT(krb5_get_creds, $KRB5_LIBS)
3640   AC_CHECK_FUNC_EXT(krb5_get_credentials_for_user, $KRB5_LIBS)
3641   AC_CHECK_FUNC_EXT(krb5_get_host_realm, $KRB5_LIBS)
3642   AC_CHECK_FUNC_EXT(krb5_free_host_realm, $KRB5_LIBS)
3643   AC_CHECK_FUNC_EXT(krb5_get_init_creds_keytab, $KRB5_LIBS)
3644   AC_CHECK_FUNC_EXT(krb5_build_principal_alloc_va, $KRB5_LIBS)
3645   AC_CHECK_FUNC_EXT(krb5_cc_get_lifetime, $KRB5_LIBS)
3646   AC_CHECK_FUNC_EXT(krb5_cc_retrieve_cred, $KRB5_LIBS)
3647   AC_CHECK_FUNC_EXT(krb5_free_checksum_contents, $KRB5_LIBS)
3648   AC_CHECK_FUNC_EXT(krb5_create_checksum, $KRB5_LIBS)
3649   AC_CHECK_FUNC_EXT(krb5_c_make_checksum, $KRB5_LIBS)
3650   AC_CHECK_FUNC_EXT(gss_krb5_import_cred, $KRB5_LIBS)
3651   AC_CHECK_FUNC_EXT(gss_get_name_attribute, $KRB5_LIBS)
3652   AC_CHECK_FUNC_EXT(gsskrb5_extract_authz_data_from_sec_context, $KRB5_LIBS)
3653   AC_CHECK_FUNC_EXT(gss_mech_krb5, $KRB5_LIBS)
3654   AC_CHECK_FUNC_EXT(gss_oid_equal, $KRB5_LIBS)
3655   AC_CHECK_FUNC_EXT(gss_inquire_sec_context_by_oid, $KRB5_LIBS)
3656   AC_CHECK_FUNC_EXT(gss_wrap_iov, $KRB5_LIBS)
3658   # MIT krb5 1.8 does not expose this call (yet)
3659   AC_CHECK_DECLS(krb5_get_credentials_for_user, [], [], [#include <krb5.h>])
3661   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3662   # but does have the symbol
3663   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3665   LIBS="$KRB5_LIBS $LIBS"
3667   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3668           smb_krb5_cv_creds_opt_free_context,
3669           [
3670                 AC_TRY_COMPILE([
3671                     #include <krb5.h>],
3672                     [
3673                         krb5_context ctx;
3674                         krb5_get_init_creds_opt *opt = NULL;
3675                         krb5_get_init_creds_opt_free(ctx, opt);
3676                     ],
3677                     [smb_krb5_cv_creds_opt_free_context=yes],
3678                     [smb_krb5_cv_creds_opt_free_context=no]
3679                 )
3680           ])
3682   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3683         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3684             [Whether krb5_get_init_creds_opt_free takes a context argument])
3685   fi
3687   AC_CACHE_CHECK([for checksum in krb5_checksum],
3688                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3689     AC_TRY_COMPILE([#include <krb5.h>],
3690       [krb5_checksum cksum; cksum.checksum.length = 0;],
3691       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3692       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3694   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3695     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3696                [Whether the krb5_checksum struct has a checksum property])
3697   fi
3699   AC_CACHE_CHECK([for etype in EncryptedData],
3700                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3701     AC_TRY_COMPILE([#include <krb5.h>],
3702       [EncryptedData edata; edata.etype = 0;],
3703       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3704       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3706   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3707     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3708                [Whether the EncryptedData struct has a etype property])
3709   fi
3711   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3712                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3713     AC_TRY_COMPILE([#include <krb5.h>],
3714       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3715       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3716       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3718   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3719     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3720                [Whether the krb5_ap_req struct has a ticket pointer])
3721   fi
3723   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3724                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3725     AC_TRY_COMPILE([#include <krb5.h>],
3726       [krb5_error err; err.e_data = NULL;],
3727       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3728       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3730   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3731     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3732                [Whether the krb5_error struct has a e_data pointer])
3733   fi
3735   AC_CACHE_CHECK([for krb5_crypto type],
3736                 samba_cv_HAVE_KRB5_CRYPTO,[
3737     AC_TRY_COMPILE([#include <krb5.h>],
3738       [krb5_crypto crypto;],
3739       samba_cv_HAVE_KRB5_CRYPTO=yes,
3740       samba_cv_HAVE_KRB5_CRYPTO=no)])
3742   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3743     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3744                [Whether the type krb5_crypto exists])
3745   fi
3747   AC_CACHE_CHECK([for addrtype in krb5_address],
3748                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3749     AC_TRY_COMPILE([#include <krb5.h>],
3750       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3751       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3752       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3754   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3755     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3756                [Whether the krb5_address struct has a addrtype property])
3757   fi
3759   AC_CACHE_CHECK([for addr_type in krb5_address],
3760                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3761     AC_TRY_COMPILE([#include <krb5.h>],
3762       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3763       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3764       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3766   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3767     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3768               [Whether the krb5_address struct has a addr_type property])
3769   fi
3771   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3772                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3773     AC_TRY_COMPILE([#include <krb5.h>],
3774       [krb5_keyblock key; key.keyvalue.data = NULL;],
3775       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3776       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3778   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3779     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3780               [Whether the krb5_keyblock struct has a keyvalue property])
3781   fi
3783   found_arcfour_hmac=no
3784   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3785                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3786     AC_TRY_COMPILE([#include <krb5.h>],
3787       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3788       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3789       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3790   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3791                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3792     AC_TRY_COMPILE([#include <krb5.h>],
3793       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3794       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3795       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3796 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3797 # w.r.t. arcfour and windows, so we must not enable it here
3798   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3799           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3800     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3801               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type definition is available])
3802     found_arcfour_hmac=yes
3803   fi
3804   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC],
3805                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC,[
3806     AC_TRY_COMPILE([#include <krb5.h>],
3807       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC;],
3808       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=yes,
3809       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=no)])
3810   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC" = x"yes"; then
3811     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC,1,
3812               [Whether the ENCTYPE_ARCFOUR_HMAC key type definition is available])
3813     found_arcfour_hmac=yes
3814   fi
3816   AC_CACHE_CHECK([for ENCTYPE_AES128_CTS_HMAC_SHA1_96],
3817                  samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96,[
3818     AC_TRY_COMPILE([#include <krb5.h>],
3819       [krb5_enctype enctype; enctype = ENCTYPE_AES128_CTS_HMAC_SHA1_96;],
3820       samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96=yes,
3821       samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96=no)])
3822   if test x"$samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96" = x"yes"; then
3823     AC_DEFINE(HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96,1,
3824               [Whether the ENCTYPE_AES128_CTS_HMAC_SHA1_96 key type definition is available])
3825   fi
3826   AC_CACHE_CHECK([for ENCTYPE_AES256_CTS_HMAC_SHA1_96],
3827                  samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96,[
3828     AC_TRY_COMPILE([#include <krb5.h>],
3829       [krb5_enctype enctype; enctype = ENCTYPE_AES256_CTS_HMAC_SHA1_96;],
3830       samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96=yes,
3831       samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96=no)])
3832   if test x"$samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96" = x"yes"; then
3833     AC_DEFINE(HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96,1,
3834               [Whether the ENCTYPE_AES256_CTS_HMAC_SHA1_96 key type definition is available])
3835   fi
3837   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3838                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3839     AC_TRY_COMPILE([#include <krb5.h>],
3840       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3841       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3842       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3844   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3845     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3846               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3847   fi
3849   AC_CACHE_CHECK([for KV5M_KEYTAB],
3850                  samba_cv_HAVE_KV5M_KEYTAB,[
3851     AC_TRY_COMPILE([#include <krb5.h>],
3852       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3853       samba_cv_HAVE_KV5M_KEYTAB=yes,
3854       samba_cv_HAVE_KV5M_KEYTAB=no)])
3856   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3857       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3858              [Whether the KV5M_KEYTAB option is available])
3859   fi
3861   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3862                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3863     AC_TRY_COMPILE([#include <krb5.h>],
3864       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3865       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3866       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3868   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3869     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3870               [Whether KRB5_KU_OTHER_CKSUM is available])
3871   fi
3873   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3874                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3875     AC_TRY_COMPILE([#include <krb5.h>],
3876       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3877       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3878       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3880   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3881     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3882               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3883   fi
3885   AC_CACHE_CHECK([for the krb5_princ_component macro],
3886                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3887     AC_TRY_LINK([#include <krb5.h>],
3888       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3889       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3890       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3892   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3893     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3894                [Whether krb5_princ_component is available])
3895   fi
3897   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3898                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3899     AC_TRY_COMPILE([#include <krb5.h>],
3900       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3901       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3902       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3904   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3905     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3906               [Whether krb5_keytab_entry has key member])
3907   fi
3909   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3910                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3911     AC_TRY_COMPILE([#include <krb5.h>],
3912       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3913       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3914       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3916   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3917     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3918               [Whether krb5_keytab_entry has keyblock member])
3919   fi
3921   AC_CACHE_CHECK([for magic in krb5_address],
3922                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3923     AC_TRY_COMPILE([#include <krb5.h>],
3924       [krb5_address addr; addr.magic = 0;],
3925       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3926       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3928   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3929     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3930               [Whether the krb5_address struct has a magic property])
3931   fi
3933   AC_CACHE_CHECK([for WRFILE: keytab support],
3934                 samba_cv_HAVE_WRFILE_KEYTAB,[
3935     AC_TRY_RUN([
3936 #include<krb5.h>
3937   main()
3938   {
3939     krb5_context context;
3940     krb5_keytab keytab;
3942     krb5_init_context(&context);
3943     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3944   }],
3945   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3946   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3948   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3949       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3950                [Whether the WRFILE:-keytab is supported])
3951   fi
3953   AC_CACHE_CHECK([for krb5_realm type],
3954                 samba_cv_HAVE_KRB5_REALM_TYPE,[
3955     AC_TRY_COMPILE([#include <krb5.h>],
3956       [krb5_realm realm;],
3957       samba_cv_HAVE_KRB5_REALM_TYPE=yes,
3958       samba_cv_HAVE_KRB5_REALM_TYPE=no)])
3960   if test x"$samba_cv_HAVE_KRB5_REALM_TYPE" = x"yes"; then
3961     AC_DEFINE(HAVE_KRB5_REALM_TYPE,1,
3962                [Whether the type krb5_realm exists])
3963   fi
3965   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3966                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3967     AC_TRY_COMPILE([#include <krb5.h>],
3968     [
3969     krb5_context context;
3970     krb5_principal principal;
3971     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3972     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3973     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3975   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3976     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3977               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3978   fi
3980   AC_CACHE_CHECK([for krb5_addresses type],
3981                 samba_cv_HAVE_KRB5_ADDRESSES,[
3982     AC_TRY_COMPILE([#include <krb5.h>],
3983       [krb5_addresses addr;],
3984       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3985       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3987   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3988     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3989                [Whether the type krb5_addresses type exists])
3990   fi
3992   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
3993     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
3994         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
3995         AC_TRY_RUN_STRICT([
3996                 #include <stdlib.h>
3997                 #include <krb5.h>
3998                 int main(void) {
3999                         krb5_context context = NULL;
4000                         char *str = NULL;
4001                         krb5_enctype_to_string(context, 1, &str);
4002                         if (str) free (str); 
4003                         return 0;
4004                 }
4005                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4006                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
4007                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
4009     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4010       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4011                 [whether krb5_enctype_to_string takes krb5_context argument])
4012     fi
4014     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4015         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
4016         AC_TRY_RUN_STRICT([
4017                 #include <krb5.h>
4018                 int main(void) {
4019                         char buf[256];
4020                         krb5_enctype_to_string(1, buf, 256);
4021                         return 0;
4022                 }
4023                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4024                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
4025                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
4027     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
4028       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4029                 [whether krb5_enctype_to_string takes size_t argument])
4030     fi
4031   fi
4033   AC_CACHE_CHECK([for krb5_principal_get_realm],
4034                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4035     AC_TRY_LINK([#include <krb5.h>],
4036       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4037       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4038       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4040   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4041     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4042                [Whether the function krb5_principal_get_realm is defined])
4043   fi
4045   AC_CACHE_CHECK([for krb5_princ_realm],
4046                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4047     AC_TRY_LINK([#include <krb5.h>],
4048       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
4049       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
4050       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
4052   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
4053     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
4054                [Whether the macro krb5_princ_realm is defined])
4055   fi
4057   AC_HAVE_DECL(KRB5_PDU_NONE,[#include <krb5.h>])
4059   AC_CACHE_CHECK([for flags in krb5_creds],
4060                 samba_cv_HAVE_FLAGS_IN_KRB5_CREDS,[
4061     AC_TRY_COMPILE([#include <krb5.h>],
4062       [krb5_creds creds; creds.flags.b.initial = 0;],
4063       samba_cv_HAVE_FLAGS_IN_KRB5_CREDS=yes,
4064       samba_cv_HAVE_FLAGS_IN_KRB5_CREDS=no)])
4066   if test x"$samba_cv_HAVE_FLAGS_IN_KRB5_CREDS" = x"yes"; then
4067     AC_DEFINE(HAVE_FLAGS_IN_KRB5_CREDS,1,
4068                [Whether the krb5_creds struct has a flags property])
4069   fi
4070   #
4071   #
4072   # Now the decisions whether we can support krb5
4073   #
4074   # NOTE: all tests should be done before this block!
4075   #
4076   #
4077   if test x"$found_arcfour_hmac" != x"yes"; then
4078     AC_MSG_WARN(arcfour-hmac-md5 encryption type not found in -lkrb5)
4079     use_ads=no
4080   fi
4082   if test x"$ac_cv_func_ext_krb5_set_real_time" != x"yes"; then
4083     AC_MSG_WARN(krb5_set_real_time encryption type not found in -lkrb5)
4084     use_ads=no
4085   fi
4087   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4088     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4089     use_ads=no
4090   fi
4092   if test x"$ac_cv_func_ext_krb5_get_host_realm" != x"yes"
4093   then
4094     AC_MSG_WARN(krb5_get_host_realm not found in -lkrb5)
4095     use_ads=no
4096   fi
4098   if test x"$ac_cv_func_ext_krb5_free_host_realm" != x"yes"
4099   then
4100     AC_MSG_WARN(krb5_free_host_realm not found in -lkrb5)
4101     use_ads=no
4102   fi
4104   if test x"$ac_cv_func_ext_krb5_fwd_tgt_creds" != x"yes"
4105   then
4106     AC_MSG_WARN(krb5_fwd_tgt_creds not found in -lkrb5)
4107     use_ads=no
4108   fi
4110   if test x"$ac_cv_func_ext_krb5_get_init_creds_opt_alloc" != x"yes"
4111   then
4112     AC_MSG_WARN(krb5_get_init_creds_opt_alloc found in -lkrb5)
4113     use_ads=no
4114   fi
4116   if test x"$smb_krb5_cv_creds_opt_free_context" != x"yes"
4117   then
4118     AC_MSG_WARN(krb5_get_init_creds_opt_free not found or was too old in -lkrb5)
4119     use_ads=no
4120   fi
4122   if test x"$ac_cv_func_ext_krb5_get_renewed_creds" != x"yes"
4123   then
4124     AC_MSG_WARN(krb5_get_renewed_creds not found in -lkrb5)
4125     use_ads=no
4126   fi
4128   if test x"$ac_cv_func_ext_krb5_principal_compare_any_realm" != x"yes"
4129   then
4130     AC_MSG_WARN(krb5_principal_compare_any_realm not found in -lkrb5)
4131     use_ads=no
4132   fi
4134   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -o \
4135           x"$ac_cv_func_ext_krb5_c_string_to_key" != x"yes"
4136   then
4137         if test x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes" -o \
4138              x"$ac_cv_func_ext_krb5_string_to_key_salt" != x"yes"
4139         then
4140               AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4141               use_ads=no
4142         fi
4143   fi
4145   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4146           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4147   then
4148     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4149     use_ads=no
4150   fi
4152   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4153           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4154   then
4155     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4156     use_ads=no
4157   fi
4159   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes"
4160   then
4161     AC_MSG_WARN(krb5_c_verify_checksum not found in -lkrb5)
4162     use_ads=no
4163   fi
4165   if test x"$ac_cv_func_ext_gss_wrap_iov" != x"yes" ; then
4166     AC_MSG_WARN(gss_wrap_iov not found in -lgssapi)
4167     use_ads=no
4168   fi
4170   if test x"$ac_cv_func_ext_gss_get_name_attribute" != x"yes" ; then
4171     if test x"$ac_cv_func_ext_gsskrb5_extract_authz_data_from_sec_context" != x"yes" -o \
4172             x"$ac_cv_func_ext_gss_inquire_sec_context_by_oid" != x"yes"
4173     then
4174       AC_MSG_WARN(need either gss_get_name_attribute or gsskrb5_extract_authz_data_from_sec_context and gss_inquire_sec_context_by_oid in -lgssapi for PAC support)
4175       use_ads=no
4176     fi
4177   fi
4179   if test x"$use_ads" = x"yes"; then
4180     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4181     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4182   else
4183     if test x"$with_ads_support" = x"yes"; then
4184         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4185     else
4186         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4187     fi
4188     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4189     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4190     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4191     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4192     AC_REMOVE_DEFINE(HAVE_GSSAPI)
4193     KRB5_LIBS=""
4194     with_ads_support=no
4195   fi
4196   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4197   AC_MSG_RESULT([$use_ads])
4199 LIBS="$ac_save_LIBS"
4202 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4203 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4206 ########################################################
4207 # Compile with DNS Updates support?
4209 with_dnsupdate_support=auto
4210 AC_MSG_CHECKING([whether to enable DNS Updates support])
4212 AC_ARG_WITH(dnsupdate,
4213 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default=auto)])],
4214 [ case "$withval" in
4215     yes|no)
4216         with_dnsupdate_support=$withval
4217         ;;
4218   esac ])
4220 AC_MSG_RESULT($with_dnsupdate_support)
4222 if test x"$with_dnsupdate_support" != x"no"; then
4224   ################################################################
4225   # first test for AD / GSSAPI support being enabled
4226         if test x"$have_gssapi" != xyes -o x"$use_ads" != xyes ; then
4227                 if test x"$with_dnsupdate_support" = x"yes" ; then
4228                         AC_MSG_ERROR(DNS Updates support only possible with AD and GSSAPI support)
4229                 else
4230                         AC_MSG_NOTICE(DNS Updates support only possible with AD and GSSAPI support)
4231                         with_dnsupdate_support=no
4232                 fi
4233         fi
4236 if test x"$with_dnsupdate_support" != x"no"; then
4237       AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4240   # finally print out the result:
4241 AC_MSG_CHECKING(whether DNS Updates support is used)
4242 AC_MSG_RESULT([$with_dnsupdate_support])
4245 #################################################
4246 # check for automount support
4247 AC_MSG_CHECKING(whether to use automount)
4248 AC_ARG_WITH(automount,
4249 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4250 [ case "$withval" in
4251   yes)
4252     AC_MSG_RESULT(yes)
4253     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4254     ;;
4255   *)
4256     AC_MSG_RESULT(no)
4257     ;;
4258   esac ],
4259   AC_MSG_RESULT(no)
4262 #################################################
4263 # Check for a PAM clear-text auth, accounts, password
4264 # and session support. Most PAM implementations keep their
4265 # headers in /usr/include/security. Darwin keeps its in
4266 # /usr/include/pam.
4268 with_pam_for_crypt=no
4269 try_pam=auto
4270 AC_MSG_CHECKING(whether to try PAM support)
4271 AC_ARG_WITH(pam,
4272 [AS_HELP_STRING([--with-pam], [Include PAM support (default=auto)])],
4273 [ case "$withval" in
4274   yes|no|auto)
4275     try_pam=$withval
4276     ;;
4277   esac
4279 AC_MSG_RESULT([$try_pam])
4281 use_pam=no
4282 create_pam_modules=no
4283 if test x"${try_pam}" != x"no";then
4284         use_pam=yes
4285         create_pam_modules=yes
4287         # Most systems have PAM headers in /usr/include/security, but Darwin
4288         # has them in /usr/include/pam.
4289         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4290         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4291                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4292                 if test x"${try_pam}" = x"yes";then
4293                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4294                 fi
4295                 use_pam=no
4296                 create_pam_modules=no
4297         fi
4299         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4300         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4301                 if test x"${try_pam}" = x"yes";then
4302                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4303                 fi
4304                 use_pam=no
4305                 create_pam_modules=no
4306         fi
4308         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4309                 #if HAVE_SECURITY_PAM_APPL_H
4310                 #include <security/pam_appl.h>
4311                 #endif
4312                 #if HAVE_PAM_PAM_APPL_H
4313                 #include <pam/pam_appl.h>
4314                 #endif
4315         ]])
4316         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4317                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4318                 if test x"${try_pam}" = x"yes";then
4319                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4320        fi
4321                 create_pam_modules=no
4322     fi
4324         if test x"$use_pam" = x"yes"; then
4325     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4326                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4327                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4328     with_pam_for_crypt=yes
4330                 if test x"$create_pam_modules" = x"yes"; then
4331                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4332                         # this checks are optional,
4333                         # we don't care about the results here
4334                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4335                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4336                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4337                 else
4338                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4339                 fi
4340         fi
4341         AC_MSG_CHECKING(whether to use PAM support)
4342         AC_MSG_RESULT([$use_pam])
4344         AC_MSG_CHECKING(whether to have PAM MODULES support)
4345         AC_MSG_RESULT([$create_pam_modules])
4347         AC_TRY_COMPILE([
4348                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4349                 #include <security/pam_appl.h>
4350                 #elif defined(HAVE_PAM_PAM_APPL_H)
4351                 #include <pam/pam_appl.h>
4352                 #endif],[
4353                 pam_set_item(0, PAM_RHOST, 0);
4354                 ],
4355                 AC_DEFINE(HAVE_PAM_RHOST, 1,
4356                           [Define to 1 if PAM_RHOST is available]),[])
4358         AC_TRY_COMPILE([
4359                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4360                 #include <security/pam_appl.h>
4361                 #elif defined(HAVE_PAM_PAM_APPL_H)
4362                 #include <pam/pam_appl.h>
4363                 #endif],[
4364                 pam_set_item(0, PAM_TTY, 0);
4365                 ],
4366                 AC_DEFINE(HAVE_PAM_TTY, 1,
4367                           [Define to 1 if PAM_TTY is available]),[])
4369 fi # try_pam != no
4371 #################################################
4372 # check for PAM_RADIO_TYPE
4373 AC_TRY_COMPILE([
4374 #if (!defined(LINUX))
4376 #define PAM_EXTERN extern
4377 #if defined(HAVE_SECURITY_PAM_APPL_H)
4378 #include <security/pam_appl.h>
4379 #elif defined(HAVE_PAM_PAM_APPL_H)
4380 #include <pam/pam_appl.h>
4381 #endif
4383 #endif
4385 #if defined(HAVE_SECURITY_PAM_MODULES_H)
4386 #include <security/pam_modules.h>
4387 #elif defined(HAVE_PAM_PAM_MODULES_H)
4388 #include <pam/pam_modules.h>
4389 #endif
4391 #if defined(HAVE_SECURITY__PAM_MACROS_H)
4392 #include <security/_pam_macros.h>
4393 #elif defined(HAVE_PAM__PAM_MACROS_H)
4394 #include <pam/_pam_macros.h>
4395 #endif
4397 #ifdef HAVE_SECURITY_PAM_EXT_H
4398 #include <security/pam_ext.h>
4399 #endif
4401 [int i; i = PAM_RADIO_TYPE; ],
4402 AC_DEFINE(HAVE_PAM_RADIO_TYPE, 1, [Define to 1 if PAM_RADIO_TYPE is available]),[])
4404 #################################################
4405 # check for pam_smbpass support
4406 PAM_MODULES=""
4407 INSTALL_PAM_MODULES=""
4408 UNINSTALL_PAM_MODULES=""
4410 try_pam_smbpass=auto
4411 AC_MSG_CHECKING(whether to use pam_smbpass)
4412 AC_ARG_WITH(pam_smbpass,
4413 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=auto)])],
4414 [ case "$withval" in
4415   yes|no|auto)
4416     try_pam_smbpass=$withval
4417   ;;
4418   *)
4419     AC_MSG_ERROR([valid options are yes,no,auto])
4420   ;;
4421   esac
4424 if test x"${try_pam_smbpass}" = xno ; then
4425         use_pam_smbpass=no
4426 else
4427         use_pam_smbpass=yes
4428         # Conditions under which pam_smbpass can't be built.
4429         if test x"$BLDSHARED" != xtrue ; then
4430                 if test x"${try_pam_smbpass}" = xyes ; then
4431                         AC_MSG_ERROR([No support for shared modules])
4432                 fi
4433                 use_pam_smbpass=no
4434         elif test x"$create_pam_modules" != xyes ; then
4435                 if test x"${try_pam_smbpass}" = xyes ; then
4436                         AC_MSG_ERROR([No support for PAM MODULES])
4437                 fi
4438                 use_pam_smbpass=no
4439         fi
4441         if test x"${use_pam_smbpass}" = xyes ; then 
4442                 PAM_MODULES="pam_smbpass"
4443                 INSTALL_PAM_MODULES="installpammodules"
4444                 UNINSTALL_PAM_MODULES="uninstallpammodules"
4445         fi
4447 AC_MSG_RESULT([$use_pam_smbpass])
4451 ## moved after the check for -lcrypt in order to
4452 ## ensure that the necessary libraries are included
4453 ## check checking for truncated salt.  Wrapped by the
4454 ## $with_pam_for_crypt variable as above   --jerry
4456 if test $with_pam_for_crypt = no; then
4457 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4458 crypt_LIBS="$LIBS"
4459 LIBS="$AUTH_LIBS $LIBS"
4460 AC_TRY_RUN([#include "${srcdir-.}/../tests/crypttest.c"],
4461         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4462 LIBS="$crypt_LIBS"])
4463 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4464         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4468 #################################################
4469 # check for a NISPLUS_HOME support
4470 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4471 AC_ARG_WITH(nisplus-home,
4472 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4473 [ case "$withval" in
4474   yes)
4475     AC_MSG_RESULT(yes)
4476     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4477     ;;
4478   *)
4479     AC_MSG_RESULT(no)
4480     ;;
4481   esac ],
4482   AC_MSG_RESULT(no)
4485 #################################################
4486 # check for syslog logging
4487 AC_MSG_CHECKING(whether to use syslog logging)
4488 AC_ARG_WITH(syslog,
4489 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4490 [ case "$withval" in
4491   yes)
4492     AC_MSG_RESULT(yes)
4493     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4494     ;;
4495   *)
4496     AC_MSG_RESULT(no)
4497     ;;
4498   esac ],
4499   AC_MSG_RESULT(no)
4502 #################################################
4503 # check for custom syslog facility
4504 AC_MSG_CHECKING(whether to use a custom syslog facility)
4505 AC_ARG_WITH(syslog-facility,
4506 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4508   if test "$withval" = "no" ; then
4509     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4510   else
4511      if test "$withval" != "yes" ; then
4512         syslog_facility="$withval"
4513         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4514      fi
4515   fi
4518 #################################################
4519 # check for experimental disk-quotas support
4521 samba_cv_WITH_QUOTAS=auto
4522 samba_cv_SYSQUOTA_FOUND=no
4524 AC_MSG_CHECKING(whether to try disk-quotas support)
4525 AC_ARG_WITH(quotas,
4526 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4527 [ case "$withval" in
4528   yes)
4529     AC_MSG_RESULT(yes)
4530     samba_cv_WITH_QUOTAS=yes
4531     ;;
4532   auto)
4533     AC_MSG_RESULT(auto)
4534     samba_cv_WITH_QUOTAS=auto
4535     ;;
4536   no)
4537     AC_MSG_RESULT(no)
4538     samba_cv_WITH_QUOTAS=no
4539     ;;
4540   *)
4541     AC_MSG_RESULT(${samba_cv_WITH_QUOTAS})
4542     ;;
4543   esac ],
4544   AC_MSG_RESULT(${samba_cv_WITH_QUOTAS})
4547 #############################################
4548 # only check for quota stuff if --with-quotas
4549 if test x"$samba_cv_WITH_QUOTAS" != x"no"; then
4551 case "$host_os" in
4552         # on linux we didn't need to test we have builtin support
4553         *linux*)
4554             samba_cv_SYSQUOTA_FOUND=yes
4555             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4556             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4557             AC_MSG_RESULT(yes)
4559             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4560             AC_MSG_RESULT(yes)
4561             ;;
4562         *solaris*)
4563             # need to set this define when using static linking (BUG 1473)
4564             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4565             ;;
4566         *)
4567             ;;
4568 esac
4570 # some broken header files need this
4571 AC_CHECK_HEADER(asm/types.h,[
4572             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4573             AC_ADD_INCLUDE(<asm/types.h>)
4574             ])
4576 # For quotas on Veritas VxFS filesystems
4577 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4579 # For quotas on XFS filesystems, Linux style
4580 AC_CHECK_HEADERS(xfs/xqm.h,[
4581             AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4582         ])
4584 # For sys/quota.h and linux/quota.h
4585 AC_CHECK_HEADERS(sys/quota.h)
4587 # For quotas on BSD systems
4588 AC_CHECK_HEADERS(ufs/ufs/quota.h)
4591 if test x"$ac_cv_header_xfs_xqm_h" != x"yes"; then
4592 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4593 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4594 AC_TRY_COMPILE([
4595 #include "confdefs.h"
4596 #ifdef HAVE_SYS_TYPES_H
4597 #include <sys/types.h>
4598 #endif
4599 #ifdef HAVE_ASM_TYPES_H
4600 #include <asm/types.h>
4601 #endif
4602 #include <sys/quota.h>
4603 ],[int i = Q_XGETQUOTA;],
4604 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4605 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4606         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4610 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4611 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4612 AC_TRY_COMPILE([
4613 #include "confdefs.h"
4614 #ifdef HAVE_SYS_QUOTA_H
4615 #include <sys/quota.h>
4616 #endif
4618 struct dqblk D;
4619 D.dqb_fsoftlimit = 0;],
4620 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4621 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4622         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4625 ##################
4626 # look for a working quota system
4628 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4629 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4630 AC_TRY_RUN_STRICT([
4631 #define HAVE_QUOTACTL_4A 1
4632 #define AUTOCONF_TEST 1
4633 #include "confdefs.h"
4634 #include "${srcdir-.}/../../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4635            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4636 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4637     samba_cv_SYSQUOTA_FOUND=yes;
4638     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4642 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4643 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4644 AC_TRY_RUN_STRICT([
4645 #define HAVE_QUOTACTL_4B 1
4646 #define AUTOCONF_TEST 1
4647 #include "confdefs.h"
4648 #include "${srcdir-.}/../../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4649            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4650 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4651     samba_cv_SYSQUOTA_FOUND=yes;
4652     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4653     AC_CHECK_MEMBERS([struct dqblk.dqb_curbytes], # Darwin bytecount style
4654         [ AC_DEFINE([HAVE_STRUCT_DQBLK_DQB_CURBYTES],[1],[darwin style quota bytecount])],,
4655         [#include <sys/types.h>
4656         #include <sys/quota.h>])
4661 AC_CACHE_CHECK([for NFS QUOTAS],samba_cv_HAVE_NFS_QUOTAS,[
4662 AC_TRY_COMPILE([
4663 #include <rpc/rpc.h>
4664 #include <rpc/types.h>
4665 #include <rpcsvc/rquota.h>
4666 #ifdef HAVE_RPC_NETTYPE_H
4667 #include <rpc/nettype.h>
4668 #endif
4669 #include <rpc/xdr.h>
4670 ],[clnt_create("", RQUOTAPROG, RQUOTAVERS, "udp");],
4671                    samba_cv_HAVE_NFS_QUOTAS=yes, samba_cv_HAVE_NFS_QUOTAS=no)])
4673 if test x"$samba_cv_HAVE_NFS_QUOTAS" = x"yes"; then
4674     AC_DEFINE(HAVE_NFS_QUOTAS,1,[NFS quota support is available])
4675     AC_CHECK_MEMBER(struct getquota_rslt.getquota_rslt_u,
4676                 AC_DEFINE(HAVE_GETQUOTA_RSLT_GETQUOTA_RSLT_U, 1, [Defined if struct getquota_rslt has getquota_rslt_u]),,
4677                 [#include <rpcsvc/rquota.h>])
4680 #################################################
4681 # check for mntent.h and struct mntent
4682 AC_CHECK_HEADERS(mntent.h)
4683 #################################################
4684 # check for setmntent,getmntent,endmntent
4685 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4687 #################################################
4688 # check for devnm.h and struct mntent
4689 AC_CHECK_HEADERS(devnm.h)
4690 #################################################
4691 # check for devnm
4692 AC_CHECK_FUNCS(devnm)
4694 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4695 if test x"$samba_cv_SYSQUOTA_FOUND" = x"yes"; then
4696         AC_MSG_RESULT(yes)
4697         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4698         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4699 else
4700     AC_MSG_RESULT(no)
4701     AC_MSG_CHECKING(whether to use the old quota support)
4702     if test x"$samba_cv_WITH_QUOTAS" = x"yes"; then
4703         AC_DEFINE(WITH_QUOTAS,1,[Whether to use old quota support])
4704         AC_MSG_RESULT(yes)
4705     else
4706         AC_MSG_RESULT(no)
4707     fi
4710 ####################
4711 # End of quota check samba_cv_WITH_QUOTAS
4714 #################################################
4715 # check for experimental utmp accounting
4717 AC_MSG_CHECKING(whether to support utmp accounting)
4718 WITH_UTMP=yes
4719 AC_ARG_WITH(utmp,
4720 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
4721 [ case "$withval" in
4722   no)
4723                 WITH_UTMP=no
4724                 ;;
4725   *)
4726                 WITH_UTMP=yes
4727                 ;;
4728   esac ],
4731 # utmp requires utmp.h
4732 # Note similar check earlier, when checking utmp details.
4734 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4735         utmp_no_reason=", no utmp.h on $host_os"
4736         WITH_UTMP=no
4739 if test x"$WITH_UTMP" = x"yes" -a x"$samba_cv_HAVE_UX_UT_LINE" != x"yes"; then
4740         utmp_no_reason=", sizeof ut_line not ok"
4741         WITH_UTMP=no
4744 # Display test results
4746 if test x"$WITH_UTMP" = x"yes"; then
4747         AC_MSG_RESULT(yes)
4748         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4749 else
4750         AC_MSG_RESULT(no$utmp_no_reason)
4754 #################################################
4755 # these tests are taken from the GNU fileutils package
4756 AC_CHECKING(how to get filesystem space usage)
4757 space=no
4759 # Perform only the link test since it seems there are no variants of the
4760 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4761 # because that got a false positive on SCO OSR5.  Adding the declaration
4762 # of a `struct statvfs' causes this test to fail (as it should) on such
4763 # systems.  That system is reported to work fine with STAT_STATFS4 which
4764 # is what it gets when this test fails.
4765 if test $space = no; then
4766   # SVR4
4767   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
4768                  [AC_TRY_LINK([#include <sys/types.h>
4769 #include <sys/statvfs.h>],
4770                               [struct statvfs fsd; statvfs (0, &fsd);],
4771                               fu_cv_sys_stat_statvfs=yes,
4772                               fu_cv_sys_stat_statvfs=no)])
4773   if test $fu_cv_sys_stat_statvfs = yes; then
4774     space=yes
4775     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
4776   fi
4779 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
4780 # This is not the case on ancient Linux systems.
4782 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
4783     AC_TRY_COMPILE([#include <sys/types.h>
4784 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
4785         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
4786 if test x"$samba_cv_fsid_int" = x"yes"; then
4787     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
4790 # fsusage.c assumes that statvfs has an f_frsize entry. Some weird
4791 # systems use f_bsize.
4792 AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [
4793     AC_TRY_COMPILE([#include <sys/types.h>
4794 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0],
4795         samba_cv_frsize=yes,samba_cv_frsize=no)])
4796 if test x"$samba_cv_frsize" = x"yes"; then
4797     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
4800 # Some systems use f_flag in struct statvfs while others use f_flags
4801 AC_CACHE_CHECK([that statvfs.statvfs_f_flag works],samba_cv_statvfs_f_flag, [
4802     AC_TRY_COMPILE([#include <sys/types.h>
4803 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flag = 0],
4804         samba_cv_statvfs_f_flag=yes,samba_cv_statvfs_f_flag=no)])
4805 if test x"$samba_cv_statvfs_f_flag" = x"yes"; then
4806     AC_DEFINE(HAVE_STATVFS_F_FLAG, 1, [Whether statvfs.f_flag exists])
4809 AC_CACHE_CHECK([that statvfs.statvfs_f_flags works],samba_cv_statvfs_f_flags, [
4810     AC_TRY_COMPILE([#include <sys/types.h>
4811 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flags = 0],
4812         samba_cv_statvfs_f_flags=yes,samba_cv_statvfs_f_flags=no)])
4813 if test x"$samba_cv_statvfs_f_flags" = x"yes"; then
4814     AC_DEFINE(HAVE_STATVFS_F_FLAGS, 1, [Whether statvfs.f_flags exists])
4817 if test $space = no; then
4818   # DEC Alpha running OSF/1
4819   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
4820   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
4821   [AC_TRY_RUN([
4822 #include <sys/param.h>
4823 #include <sys/types.h>
4824 #include <sys/mount.h>
4825   main ()
4826   {
4827     struct statfs fsd;
4828     fsd.f_fsize = 0;
4829     return (statfs (".", &fsd, sizeof (struct statfs)));
4830   }],
4831   fu_cv_sys_stat_statfs3_osf1=yes,
4832   fu_cv_sys_stat_statfs3_osf1=no,
4833   fu_cv_sys_stat_statfs3_osf1=no)])
4834   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
4835   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
4836     space=yes
4837     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
4838   fi
4841 if test $space = no; then
4842 # AIX
4843   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
4844 member (AIX, 4.3BSD)])
4845   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
4846   [AC_TRY_RUN([
4847 #ifdef HAVE_SYS_PARAM_H
4848 #include <sys/param.h>
4849 #endif
4850 #ifdef HAVE_SYS_MOUNT_H
4851 #include <sys/mount.h>
4852 #endif
4853 #ifdef HAVE_SYS_VFS_H
4854 #include <sys/vfs.h>
4855 #endif
4856   main ()
4857   {
4858   struct statfs fsd;
4859   fsd.f_bsize = 0;
4860   return (statfs (".", &fsd));
4861   }],
4862   fu_cv_sys_stat_statfs2_bsize=yes,
4863   fu_cv_sys_stat_statfs2_bsize=no,
4864   fu_cv_sys_stat_statfs2_bsize=no)])
4865   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
4866   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
4867     space=yes
4868     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
4869   fi
4872 if test $space = no; then
4873 # SVR3
4874   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
4875   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
4876   [AC_TRY_RUN([#include <sys/types.h>
4877 #include <sys/statfs.h>
4878   main ()
4879   {
4880   struct statfs fsd;
4881   return (statfs (".", &fsd, sizeof fsd, 0));
4882   }],
4883     fu_cv_sys_stat_statfs4=yes,
4884     fu_cv_sys_stat_statfs4=no,
4885     fu_cv_sys_stat_statfs4=no)])
4886   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
4887   if test $fu_cv_sys_stat_statfs4 = yes; then
4888     space=yes
4889     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
4890   fi
4893 if test $space = no; then
4894 # 4.4BSD and NetBSD
4895   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
4896 member (4.4BSD and NetBSD)])
4897   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
4898   [AC_TRY_RUN([#include <sys/types.h>
4899 #ifdef HAVE_SYS_PARAM_H
4900 #include <sys/param.h>
4901 #endif
4902 #ifdef HAVE_SYS_MOUNT_H
4903 #include <sys/mount.h>
4904 #endif
4905   main ()
4906   {
4907   struct statfs fsd;
4908   fsd.f_fsize = 0;
4909   return (statfs (".", &fsd));
4910   }],
4911   fu_cv_sys_stat_statfs2_fsize=yes,
4912   fu_cv_sys_stat_statfs2_fsize=no,
4913   fu_cv_sys_stat_statfs2_fsize=no)])
4914   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
4915   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
4916     space=yes
4917         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
4918   fi
4921 if test $space = no; then
4922   # Ultrix
4923   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
4924   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
4925   [AC_TRY_RUN([#include <sys/types.h>
4926 #ifdef HAVE_SYS_PARAM_H
4927 #include <sys/param.h>
4928 #endif
4929 #ifdef HAVE_SYS_MOUNT_H
4930 #include <sys/mount.h>
4931 #endif
4932 #ifdef HAVE_SYS_FS_TYPES_H
4933 #include <sys/fs_types.h>
4934 #endif
4935   main ()
4936   {
4937   struct fs_data fsd;
4938   /* Ultrix's statfs returns 1 for success,
4939      0 for not mounted, -1 for failure.  */
4940   return (statfs (".", &fsd) != 1);
4941   }],
4942   fu_cv_sys_stat_fs_data=yes,
4943   fu_cv_sys_stat_fs_data=no,
4944   fu_cv_sys_stat_fs_data=no)])
4945   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
4946   if test $fu_cv_sys_stat_fs_data = yes; then
4947     space=yes
4948     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
4949   fi
4952 #################################################
4953 # check for cluster extensions
4955 AC_MSG_CHECKING(cluster support)
4956 AC_ARG_WITH(cluster-support,
4957 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
4959 if test x"$with_cluster_support" = x ; then
4960         with_cluster_support="auto"
4963 AC_MSG_RESULT($with_cluster_support)
4965 AC_ARG_WITH(ctdb,
4966 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
4967 [ case "$withval" in
4968   yes|no)
4969     AC_MSG_WARN([--with-ctdb called without argument])
4970     ;;
4971   *)
4972     CTDB_CPPFLAGS="-I$withval/include"
4973     ;;
4974   esac])
4976 AC_ARG_ENABLE(old-ctdb,
4977         [AS_HELP_STRING([--enable-old-ctdb],
4978                 [Enable build against (too) old ctdb version (default=no)])],,
4979                 [enable_old_ctdb=no])
4982 if test "$with_cluster_support" != "no" ; then
4984 AC_MSG_NOTICE(checking whether cluster support is available)
4986 have_cluster_support="yes"
4987 ctdb_broken="no"
4989 SAVED_CPPFLAGS="$CPPFLAGS"
4990 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS} $CTDB_CPPFLAGS"
4992 AC_CHECK_HEADERS(ctdb.h ctdb_private.h ctdb_protocol.h ,,,[
4993 #include "confdefs.h"
4994 #define NO_CONFIG_H
4995 #include "replace.h"
4996 #include "system/wait.h"
4997 #include "system/network.h"
4998 #define private #error __USED_RESERVED_WORD_private__
4999 #include <talloc.h>
5000 #include <tdb.h>
5001 #include <ctdb.h>
5004 if test "x$have_cluster_support" = "xyes" -a \
5005         "x$ac_cv_header_ctdb_h" != "xyes"
5006 then
5007         have_cluster_support=no
5008         ctdb_broken="ctdb.h is required for cluster support"
5011 if test "x$have_cluster_support" = "xyes" -a \
5012         "x$ac_cv_header_ctdb_private_h" != "xyes"
5013 then
5014         have_cluster_support=no
5015         ctdb_broken="ctdb_private.h is required for cluster support"
5019 if test "x$have_cluster_support" = "xyes" ; then
5020         AC_HAVE_DECL(CTDB_CONTROL_TRANS3_COMMIT,[
5021         #include "confdefs.h"
5022         #define NO_CONFIG_H
5023         #include "replace.h"
5024         #include "system/wait.h"
5025         #include "system/network.h"
5026         #include <talloc.h>
5027         #include <tdb.h>
5028         #include <ctdb.h>
5029         #include <ctdb_private.h>
5030         ])
5031         if test x"$ac_cv_have_CTDB_CONTROL_TRANS3_COMMIT_decl" != x"yes"; then
5032                 ctdb_broken="ctdb transaction support missing or too old"
5033                 have_cluster_support=no
5034         fi
5037 if test "x$have_cluster_support" = "xyes" ; then
5038         AC_HAVE_DECL(CTDB_CONTROL_SCHEDULE_FOR_DELETION,[
5039         #include "confdefs.h"
5040         #define NO_CONFIG_H
5041         #include "replace.h"
5042         #include "system/wait.h"
5043         #include "system/network.h"
5044         #include <talloc.h>
5045         #include <tdb.h>
5046         #include <ctdb.h>
5047         #include <ctdb_private.h>
5048         ])
5049         if test x"$ac_cv_have_CTDB_CONTROL_SCHEDULE_FOR_DELETION_decl" != x"yes"
5050         then
5051                 if test "x$enable_old_ctdb" = "xyes" ; then
5052                         AC_MSG_WARN([ignoring missing SCHEDULE_FOR_DELETION (--enable-old-ctdb)])
5053                 else
5054                         ctdb_broken="support for SCHEDULE_FOR_DELETION control missing"
5055                         have_cluster_support=no
5056                 fi
5057         fi
5060 if test "x$have_cluster_support" = "xyes" ; then
5061         AC_HAVE_DECL(CTDB_CONTROL_CHECK_SRVIDS,[
5062         #include "confdefs.h"
5063         #define NO_CONFIG_H
5064         #include "replace.h"
5065         #include "system/wait.h"
5066         #include "system/network.h"
5067         #include <talloc.h>
5068         #include <tdb.h>
5069         #include <ctdb.h>
5070         #include <ctdb_private.h>
5071         ])
5072         if test x"$ac_cv_have_CTDB_CONTROL_CHECK_SRVIDS_decl" != x"yes"
5073         then
5074                 if test "x$enable_old_ctdb" = "xyes" ; then
5075                         AC_MSG_WARN([ignoring missing CHECK_SRVIDS (--enable-old-ctdb)])
5076                 else
5077                         ctdb_broken="support for CHECK_SRVIDS control missing"
5078                         have_cluster_support=no
5079                 fi
5080         fi
5083 AC_ARG_ENABLE([ctdb-readonly-records],
5084         AS_HELP_STRING([--enable-ctdb-readonly-records],
5085                 [Turn on CTDB readonly records support (default=yes)]),
5086         [want_ctdb_readonly=$enableval],
5087         [want_ctdb_readonly=yes])
5089 if test "x$have_cluster_support" = "xyes" -a "x$want_ctdb_readonly" = "xyes" ; then
5090         AC_HAVE_DECL(CTDB_WANT_READONLY,[
5091         #include "confdefs.h"
5092         #define NO_CONFIG_H
5093         #include "replace.h"
5094         #include "system/wait.h"
5095         #include "system/network.h"
5096         #include <talloc.h>
5097         #include <tdb.h>
5098         #include <ctdb.h>
5099         ])
5101         if test "x$ac_cv_have_CTDB_WANT_READONLY_decl" != "xyes" ; then
5102                 if test "x$enable_old_ctdb" = "xyes" ; then
5103                         AC_MSG_WARN([ignoring missing READONLY support (--enable-old-ctdb)])
5104                 else
5105                         ctdb_broken="support for CTDB readonly records missing"
5106                         have_cluster_support=no
5107                 fi
5108         fi
5111 if test "x$have_cluster_support" = "xyes" ; then
5112         # In ctdb 1.0.57, ctdb_control_tcp was temporarily renamed
5113         # to ctdb_tcp_client.
5114         AC_CHECK_TYPE(struct ctdb_tcp_client,[
5115                 AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
5116         ],,[
5117         #include "confdefs.h"
5118         #define NO_CONFIG_H
5119         #include "replace.h"
5120         #include "system/wait.h"
5121         #include "system/network.h"
5122         #include <talloc.h>
5123         #include <tdb.h>
5124         #include <ctdb.h>
5125         #include <ctdb_private.h>
5126         ])
5129 if test "x$have_cluster_support" = "xyes" ; then
5130         AC_CHECK_TYPE(struct ctdb_control_tcp,[
5131                 AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5132         ],[
5133                 ctdb_broken="missing struct ctdb_control_tcp"
5134                 have_cluster_support=no
5135         ],[
5136         #include "confdefs.h"
5137         #define NO_CONFIG_H
5138         #include "replace.h"
5139         #include "system/wait.h"
5140         #include "system/network.h"
5141         #include <talloc.h>
5142         #include <tdb.h>
5143         #include <ctdb.h>
5144         #include <ctdb_private.h>
5145         ])
5148 # test for optional ipv6 support in ctdb:
5149 if test "x$have_cluster_support" = "xyes" ; then
5150         AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5151                 AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5152         ],,[
5153         #include "confdefs.h"
5154         #define NO_CONFIG_H
5155         #include "replace.h"
5156         #include "system/wait.h"
5157         #include "system/network.h"
5158         #include <talloc.h>
5159         #include <tdb.h>
5160         #include <ctdb.h>
5161         #include <ctdb_private.h>
5162         ])
5165 CPPFLAGS="$SAVED_CPPFLAGS"
5167 fi # (if test "$with_cluster_support" != "no")
5169 if test x"$have_cluster_support" = "xno" ; then
5170         case "$with_cluster_support" in
5171         yes)
5172                 AC_MSG_ERROR(["cluster support not available: $ctdb_broken"])
5173                 ;;
5174         auto)
5175                 AC_MSG_WARN(["cluster support not available: $ctdb_broken"])
5176                 ;;
5177         esac
5178         with_cluster_support=no
5181 if test "x$with_cluster_support" != "xno"; then
5182     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5183     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5184     AC_MSG_NOTICE(Building with cluster support)
5185 else
5186     AC_MSG_NOTICE(Building without cluster support)
5190 #################################################
5191 # check for rtnetlink
5193 AC_CHECK_HEADERS([linux/netlink.h],
5194   AC_CHECK_HEADERS([linux/rtnetlink.h],[],[],
5195                    [#include <bits/sockaddr.h>
5196                     #include <linux/netlink.h>]),
5197   [],[#include <bits/sockaddr.h>])
5199 #################################################
5200 # check for ACL support
5202 AC_MSG_CHECKING(whether to support ACLs)
5203 AC_ARG_WITH(acl-support,
5204 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5205 [ case "$withval" in
5206         yes|no)
5207                 with_acl_support="$withval"
5208                 ;;
5209   esac ])
5211 if test x"$with_acl_support" = x ; then
5212         with_acl_support="auto"
5215 AC_MSG_RESULT($with_acl_support)
5217 if test x"$with_acl_support" = x"no"; then
5218         AC_MSG_RESULT(Disabling ACL support)
5219 else
5220         AC_MSG_NOTICE(checking whether ACL support is available:)
5221         case "$host_os" in
5222         *sysv5*)
5223                 AC_MSG_NOTICE(Using UnixWare ACLs)
5224                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5225                 default_static_modules="$default_static_modules vfs_solarisacl"
5226                 ;;
5227         *solaris*)
5228                 AC_MSG_NOTICE(Using solaris ACLs)
5229                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5230                 ACL_LIBS="$ACL_LIBS -lsec"
5231                 default_static_modules="$default_static_modules vfs_solarisacl"
5232                 ;;
5233         *hpux*)
5234                 AC_MSG_NOTICE(Using HPUX ACLs)
5235                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5236                 default_static_modules="$default_static_modules vfs_hpuxacl"
5237                 ;;
5238         *aix*)
5239                 AC_MSG_NOTICE(Using AIX ACLs)
5240                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5241                 default_static_modules="$default_static_modules vfs_aixacl"
5242                 ;;
5243         *osf*)
5244                 AC_MSG_NOTICE(Using Tru64 ACLs)
5245                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5246                 ACL_LIBS="$ACL_LIBS -lpacl"
5247                 default_static_modules="$default_static_modules vfs_tru64acl"
5248                 ;;
5249         *darwin*)
5250                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5251                 ;;
5252         *)
5253                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5254                 case "$host_os" in
5255                 *linux*)
5256                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5257                         ;;
5258                 esac
5259                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5260                         acl_LIBS=$LIBS
5261                         LIBS="$LIBS $ACL_LIBS"
5262                         AC_TRY_LINK([
5263                                 #include <sys/types.h>
5264                                 #include <sys/acl.h>
5265                         ],[
5266                                 acl_t acl;
5267                                 int entry_id;
5268                                 acl_entry_t *entry_p;
5269                                 return acl_get_entry(acl, entry_id, entry_p);
5270                         ],
5271                         [samba_cv_HAVE_POSIX_ACLS=yes],
5272                         [samba_cv_HAVE_POSIX_ACLS=no])
5273                         LIBS=$acl_LIBS
5274                 ])
5275                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5276                         AC_MSG_NOTICE(Using posix ACLs)
5277                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5278                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5279                                 acl_LIBS=$LIBS
5280                                 LIBS="$LIBS $ACL_LIBS"
5281                                 AC_TRY_LINK([
5282                                         #include <sys/types.h>
5283                                         #include <sys/acl.h>
5284                                 ],[
5285                                         acl_permset_t permset_d;
5286                                         acl_perm_t perm;
5287                                         return acl_get_perm_np(permset_d, perm);
5288                                 ],
5289                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5290                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5291                                 LIBS=$acl_LIBS
5292                         ])
5293                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5294                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5295                         fi
5296                         default_static_modules="$default_static_modules vfs_posixacl"
5297                 else
5298                         AC_MSG_NOTICE(ACL support is not avaliable)
5299                 fi
5300                 ;;
5301         esac
5302 fi # with_acl_support
5304 #################################################
5305 # check if we have FreeBSD sunacl
5306 case "$host_os" in
5307 *freebsd*)
5308     AC_CHECK_HEADER(sunacl.h)
5309     if test x"$ac_cv_header_sunacl_h" = xyes ; then
5310        AC_DEFINE(HAVE_FREEBSD_SUNACL_H,1,[Whether we have FreeBSD sunacl around])
5311        ZFSACL_LIBS=-lsunacl
5312        AC_SUBST(ZFSACL_LIBS)
5313        default_shared_modules="$default_shared_modules vfs_zfsacl"
5314     fi
5315     ;;
5316 esac
5318 #################################################
5319 # check for AIO support
5321 with_aio=auto
5322 AC_MSG_CHECKING(whether to support asynchronous io)
5323 AC_ARG_WITH(aio-support,
5324 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=auto)])],
5325 [  case "$withval" in
5326     yes|no)
5327         with_aio=$withval
5328         ;;
5329    esac ])
5331 AC_MSG_RESULT($with_aio)
5333 if test x"$with_aio" = x"no"; then
5334     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5335 else
5336                 AIO_LIBS=$LIBS
5337                 no_rt_LIBS=$LIBS
5338                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5339                 LIBS=$no_rt_LIBS
5340                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5341                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5342                 aio_LIBS=$LIBS
5343                 LIBS=$AIO_LIBS
5344                 AC_TRY_LINK([#include <sys/types.h>
5345 #include <aio.h>],
5346 [ struct aiocb a; return aio_read(&a);],
5347 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5348                 LIBS=$aio_LIBS])
5349                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5350                         AC_DEFINE(HAVE_AIO, 1, [Using asynchronous io])
5351                         LIBS=$AIO_LIBS
5352                         AC_MSG_CHECKING(for aio_read)
5353                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5354 int main() { struct aiocb a; return aio_read(&a); }])],
5355 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5356 [AC_MSG_RESULT(no)])
5358                         AC_MSG_CHECKING(for aio_write)
5359                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5360 int main() { struct aiocb a; return aio_write(&a); }])],
5361 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5362 [AC_MSG_RESULT(no)])
5364                         AC_MSG_CHECKING(for aio_fsync)
5365                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5366 int main() { struct aiocb a; return aio_fsync(1, &a); }])],
5367 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5368 [AC_MSG_RESULT(no)])
5370                         AC_MSG_CHECKING(for aio_return)
5371                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5372 int main() { struct aiocb a; return aio_return(&a); }])],
5373 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5374 [AC_MSG_RESULT(no)])
5376                         AC_MSG_CHECKING(for aio_error)
5377                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5378 int main() { struct aiocb a; return aio_error(&a); }])],
5379 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5380 [AC_MSG_RESULT(no)])
5382                         AC_MSG_CHECKING(for aio_cancel)
5383                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5384 int main() { struct aiocb a; return aio_cancel(1, &a); }])],
5385 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5386 [AC_MSG_RESULT(no)])
5388                         AC_MSG_CHECKING(for aio_suspend)
5389                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5390 int main() { struct aiocb a; struct timespec t; return aio_suspend(&a, 1, &t); }])],
5391 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5392 [AC_MSG_RESULT(no)])
5393                 else
5394                         AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5395                         AC_MSG_RESULT(no)
5396                 fi
5399 if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5400         x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5401         default_shared_modules="$default_shared_modules vfs_aio_fork"
5404 # Check for Linux kernel aio support.
5405 case "$host_os" in
5406 *linux*)
5407     AC_CHECK_LIB(aio,io_submit,[AIO_LIBS="$LIBS -laio"])
5408     AC_CACHE_CHECK([for Linux kernel asynchronous io support],samba_cv_HAVE_LINUX_KERNEL_AIO,[
5409     aio_LIBS=$LIBS
5410     LIBS=$AIO_LIBS
5411     AC_TRY_LINK([#include <unistd.h>
5412 #include <stdlib.h>
5413 #include <sys/types.h>
5414 #include <fcntl.h>
5415 #include <sys/eventfd.h>
5416 #include <libaio.h>],
5417 [ struct io_event ioev;
5418 struct iocb *ioc;
5419 io_context_t ctx;
5420 struct timespec ts;
5421 int fd;
5422 char *buf;
5423 fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
5424 io_queue_init(128,&ctx);
5425 io_prep_pwrite(ioc, 1, buf, 1, 0);
5426 io_prep_pread(ioc, 1, buf, 1, 0);
5427 io_set_eventfd(ioc, fd);
5428 io_set_callback(ioc, (io_callback_t)(0));
5429 io_submit(ctx, 1, &ioc);
5430 io_getevents(ctx, 1, 1, &ioev, &ts);],
5431 samba_cv_HAVE_LINUX_KERNEL_AIO=yes,samba_cv_HAVE_LINUX_KERNEL_AIO=no)
5432                 LIBS=$aio_LIBS])
5433     if test x"$samba_cv_HAVE_LINUX_KERNEL_AIO" = x"yes"; then
5434         default_shared_modules="$default_shared_modules vfs_aio_linux"
5435     fi
5436     ;;
5437 esac
5439 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5440   default_shared_modules="$default_shared_modules vfs_aio_posix"
5443 #################################################
5444 # check for sendfile support
5446 AC_MSG_CHECKING(whether sendfile support should be built in)
5447 AC_ARG_WITH(sendfile-support,
5448 [AS_HELP_STRING([--with-sendfile-support], [Whether sendfile support should be built in (default=auto)])],
5449 [ case "$withval" in
5450   yes|no)
5451         AC_MSG_RESULT($withval);
5452         with_sendfile_support=$withval
5453         ;;
5454   *)
5455         AC_MSG_RESULT(yes)
5456         with_sendfile_support=auto
5457         ;;
5458   esac ],
5461 if test x$with_sendfile_support != xno ; then
5462     case "$host_os" in
5463         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5464                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5465                 AC_TRY_LINK([#include <sys/sendfile.h>],
5467 int tofd, fromfd;
5468 off_t offset;
5469 size_t total;
5470 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5472 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5474         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5475                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5476                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5477                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5478         else
5479                 AC_MSG_RESULT(no);
5480         fi
5482         ;;
5483         *freebsd* | *dragonfly* )
5484                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5485                 AC_TRY_LINK([\
5486 #include <sys/types.h>
5487 #include <unistd.h>
5488 #include <sys/socket.h>
5489 #include <sys/uio.h>],
5491         int fromfd, tofd, ret, total=0;
5492         off_t offset, nwritten;
5493         struct sf_hdtr hdr;
5494         struct iovec hdtrl;
5495         hdr.headers = &hdtrl;
5496         hdr.hdr_cnt = 1;
5497         hdr.trailers = NULL;
5498         hdr.trl_cnt = 0;
5499         hdtrl.iov_base = NULL;
5500         hdtrl.iov_len = 0;
5501         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5503 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5505         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5506                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5507                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5508                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5509         else
5510                 AC_MSG_RESULT(no);
5511         fi
5512         ;;
5513         *darwin*)
5514                 AC_CACHE_CHECK([for Darwin sendfile support],
5515                         samba_cv_HAVE_SENDFILE,
5516                         [
5517                         AC_TRY_LINK([
5518 #include <sys/types.h>
5519 #include <sys/socket.h>
5520 #include <sys/uio.h>
5521                         ],
5522                         [
5523         int fromfd, tofd, ret;
5524         off_t offset, nwritten;
5525         struct sf_hdtr hdr;
5526         struct iovec hdtrl;
5527         hdr.headers = &hdtrl;
5528         hdr.hdr_cnt = 1;
5529         hdr.trailers = (void *)0;
5530         hdr.trl_cnt = 0;
5531         hdtrl.iov_base = (void *)0;
5532         hdtrl.iov_len = 0;
5533         ret = sendfile(fromfd, tofd, offset, &nwritten, &hdr, 0);
5534                         ],
5535                         samba_cv_HAVE_SENDFILE=yes,
5536                         samba_cv_HAVE_SENDFILE=no)])
5538         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5539                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5540                 AC_DEFINE(DARWIN_SENDFILE_API,1,[Whether the Darwin sendfile() API is available])
5541                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5542         else
5543                 AC_MSG_RESULT(no);
5544         fi
5545         ;;
5546         *hpux*|*osf*)
5547                 AC_CACHE_CHECK([for osf/hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5548                 AC_TRY_LINK([\
5549 #include <sys/socket.h>
5550 #include <sys/uio.h>],
5552         int fromfd, tofd;
5553         size_t total=0;
5554         struct iovec hdtrl[2];
5555         ssize_t nwritten;
5556         off_t offset;
5558         hdtrl[0].iov_base = 0;
5559         hdtrl[0].iov_len = 0;
5561         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5563 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5564         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5565                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5566                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the osf/hpux sendfile() API is available])
5567                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5568         else
5569                 AC_MSG_RESULT(no);
5570         fi
5571         ;;
5573         *solaris*)
5574                 AC_CHECK_LIB(sendfile,sendfilev)
5575                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5576                 AC_TRY_LINK([\
5577 #include <sys/sendfile.h>],
5579         int sfvcnt;
5580         size_t xferred;
5581         struct sendfilevec vec[2];
5582         ssize_t nwritten;
5583         int tofd;
5585         sfvcnt = 2;
5587         vec[0].sfv_fd = SFV_FD_SELF;
5588         vec[0].sfv_flag = 0;
5589         vec[0].sfv_off = 0;
5590         vec[0].sfv_len = 0;
5592         vec[1].sfv_fd = 0;
5593         vec[1].sfv_flag = 0;
5594         vec[1].sfv_off = 0;
5595         vec[1].sfv_len = 0;
5596         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5598 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5600         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5601                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5602                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5603                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5604         else
5605                 AC_MSG_RESULT(no);
5606         fi
5607         ;;
5608         *aix*)
5609                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5610                 AC_TRY_LINK([\
5611 #include <sys/socket.h>],
5613         int fromfd, tofd;
5614         size_t total=0;
5615         struct sf_parms hdtrl;
5616         ssize_t nwritten;
5618         hdtrl.header_data = 0;
5619         hdtrl.header_length = 0;
5620         hdtrl.file_descriptor = fromfd;
5621         hdtrl.file_offset = 0;
5622         hdtrl.file_bytes = 0;
5623         hdtrl.trailer_data = 0;
5624         hdtrl.trailer_length = 0;
5626         nwritten = send_file(&tofd, &hdtrl, 0);
5628 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5629         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5630                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5631                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5632                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5633         else
5634                 AC_MSG_RESULT(no);
5635         fi
5636         ;;
5637         *)
5638         ;;
5639     esac
5642 if test x$with_sendfile_support = xyes -a x"$samba_cv_HAVE_SENDFILE" != xyes ; then
5643         AC_MSG_ERROR(sendfile support requested but sendfile not available )
5646 ############################################
5647 # See if we have the Linux readahead syscall.
5649 AC_CACHE_CHECK([for Linux readahead],
5650                 samba_cv_HAVE_LINUX_READAHEAD,[
5651     AC_TRY_LINK([
5652 #if defined(HAVE_UNISTD_H)
5653 #include <unistd.h>
5654 #endif
5655 #include <fcntl.h>],
5656     [ssize_t err = readahead(0,0,0x80000);],
5657     samba_cv_HAVE_LINUX_READAHEAD=yes,
5658     samba_cv_HAVE_LINUX_READAHEAD=no)])
5660 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5661   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5662              [Whether Linux readahead is available])
5665 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
5667 ############################################
5668 # See if we have the posix_fadvise syscall.
5670 AC_CACHE_CHECK([for posix_fadvise],
5671                 samba_cv_HAVE_POSIX_FADVISE,[
5672     AC_TRY_LINK([
5673 #if defined(HAVE_UNISTD_H)
5674 #include <unistd.h>
5675 #endif
5676 #include <fcntl.h>],
5677     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5678     samba_cv_HAVE_POSIX_FADVISE=yes,
5679     samba_cv_HAVE_POSIX_FADVISE=no)])
5681 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5682   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5683              [Whether posix_fadvise is available])
5686 ############################################
5687 # See if we have the openat syscall.
5689 AC_CACHE_CHECK([for openat],
5690                 samba_cv_HAVE_OPENAT,[
5691     AC_TRY_LINK([
5692 #if defined(HAVE_UNISTD_H)
5693 #include <unistd.h>
5694 #endif
5695 #include <fcntl.h>],
5696     [int fd = openat(AT_FDCWD, ".", O_RDONLY);],
5697     samba_cv_HAVE_OPENAT=yes,
5698     samba_cv_HAVE_OPENAT=no)])
5700 if test x"$samba_cv_HAVE_OPENAT" = x"yes"; then
5701     AC_DEFINE(HAVE_OPENAT,1, [Whether openat is available])
5704 ############################################
5705 # See if we have the Linux splice syscall.
5707 case "$host_os" in
5708 *linux*)
5709 AC_CACHE_CHECK([for Linux splice],
5710                 samba_cv_HAVE_LINUX_SPLICE,[
5711     AC_TRY_LINK([
5712 #if defined(HAVE_UNISTD_H)
5713 #include <unistd.h>
5714 #endif
5715 #include <fcntl.h>],
5716     [long ret = splice(0,0,1,0,400,SPLICE_F_MOVE);],
5717     samba_cv_HAVE_LINUX_SPLICE=yes,
5718     samba_cv_HAVE_LINUX_SPLICE=no)])
5721 samba_cv_HAVE_LINUX_SPLICE=no
5723 esac
5725 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
5726   AC_DEFINE(HAVE_LINUX_SPLICE,1,
5727              [Whether Linux splice is available])
5730 AC_HAVE_DECL(splice, [#include <fcntl.h>])
5732 ############################################
5733 # See if we have the a broken readlink syscall.
5735 AC_CACHE_CHECK([for a broken readlink syscall],samba_cv_HAVE_BROKEN_READLINK,[
5736 AC_TRY_RUN([#include "${srcdir-.}/../tests/readlink.c"],
5737         samba_cv_HAVE_BROKEN_READLINK=no,samba_cv_HAVE_BROKEN_READLINK=yes,samba_cv_HAVE_BROKEN_READLINK=cross)
5739 if test x"$samba_cv_HAVE_BROKEN_READLINK" = x"yes"; then
5740         AC_DEFINE(HAVE_BROKEN_READLINK,1,[Whether the readlink syscall is broken])
5743 #################################################
5744 # Check whether winbind is supported on this platform.  If so we need to
5745 # build and install client programs, sbin programs and shared libraries
5747 AC_MSG_CHECKING(whether to build winbind)
5749 # Initially, the value of $host_os decides whether winbind is supported
5751 HAVE_WINBIND=yes
5752 HAVE_WBCLIENT=no
5754 # Define external wbclient library to link against.  This disables winbind.
5755 # We define this here so --with-winbind can override it.
5756 AC_ARG_WITH(wbclient,
5757 [AS_HELP_STRING([--with-wbclient], [Use external wbclient (optional)])],
5759   case "$withval" in
5760         no)
5761                 HAVE_WBCLIENT=no
5762                 ;;
5763         yes)
5764                 HAVE_WBCLIENT=yes
5765                 HAVE_WINBIND=no
5766                 ;;
5767         *)
5768                 HAVE_WBCLIENT=yes
5769                 HAVE_WINBIND=no
5770                 WBCLIENT_INCLUDES="-I$withval/include"
5771                 WBCLIENT_LDFLAGS="-L$withval/lib"
5772                 ;;
5773   esac ],
5776 AC_SUBST(WBCLIENT_INCLUDES)
5777 AC_SUBST(WBCLIENT_LDFLAGS)
5778 AC_SUBST(WBCLIENT_LIBS)
5781 # Define the winbind shared library name and any specific linker flags
5782 # it needs to be built with.
5784 WINBIND_NSS="../nsswitch/libnss_winbind.$SHLIBEXT"
5785 WINBIND_WINS_NSS="../nsswitch/libnss_wins.$SHLIBEXT"
5786 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5787 NSSSONAMEVERSIONSUFFIX=""
5789 case "$host_os" in
5790         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5791                 NSSSONAMEVERSIONSUFFIX=".2"
5792                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_linux.o"
5793                 ;;
5794         *freebsd[[5-9]]* | *freebsd1[[0-9]]*)
5795                 # FreeBSD winbind client is implemented as a wrapper around
5796                 # the Linux version.
5797                 NSSSONAMEVERSIONSUFFIX=".1"
5798                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_freebsd.o \
5799                     ../nsswitch/winbind_nss_linux.o"
5800                 WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
5801                 WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
5802                 ;;
5804         *netbsd*[[3-9]]* | *netbsd1[[0-9]]*)
5805                 # NetBSD winbind client is implemented as a wrapper
5806                 # around the Linux version. It needs getpwent_r() to
5807                 # indicate libc's use of the correct nsdispatch API.
5808                 #
5809                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5810                         WINBIND_NSS_EXTRA_OBJS="\
5811                             ../nsswitch/winbind_nss_netbsd.o \
5812                             ../nsswitch/winbind_nss_linux.o"
5813                         WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
5814                         WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
5815                 else
5816                         HAVE_WINBIND=no
5817                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5818                 fi
5819                 ;;
5820         *irix*)
5821                 # IRIX has differently named shared libraries
5822                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_irix.o"
5823                 WINBIND_NSS="../nsswitch/libns_winbind.$SHLIBEXT"
5824                 WINBIND_WINS_NSS="../nsswitch/libns_wins.$SHLIBEXT"
5825                 ;;
5826         *solaris*)
5827                 # Solaris winbind client is implemented as a wrapper around
5828                 # the Linux version.
5829                 NSSSONAMEVERSIONSUFFIX=".1"
5830                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o \
5831                     ../nsswitch/winbind_nss_linux.o"
5832                 ;;
5833         *hpux11*)
5834                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o"
5835                 ;;
5836         *aix*)
5837                 # AIX has even differently named shared libraries.  No
5838                 # WINS support has been implemented yet.
5839                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_aix.o"
5840                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5841                 WINBIND_NSS="../nsswitch/WINBIND"
5842                 WINBIND_WINS_NSS=""
5843                 ;;
5844         *darwin*)
5845                 ;;
5846         *)
5847                 HAVE_WINBIND=no
5848                 winbind_no_reason=", unsupported on $host_os"
5849                 ;;
5850 esac
5852 # Check the setting of --with-winbind
5854 AC_ARG_WITH(winbind,
5855 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
5857   case "$withval" in
5858         yes)
5859                 HAVE_WINBIND=yes
5860                 HAVE_WBCLIENT=no
5861                 ;;
5862         no)
5863                 HAVE_WINBIND=no
5864                 winbind_reason=""
5865                 ;;
5866   esac ],
5869 # We need unix domain sockets for winbind
5871 if test x"$HAVE_WINBIND" = x"yes"; then
5872         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
5873                 winbind_no_reason=", no unix domain socket support on $host_os"
5874                 HAVE_WINBIND=no
5875         fi
5878 # Display test results
5880 if test x"$HAVE_WINBIND" = x"no"; then
5881         WINBIND_NSS=""
5882         WINBIND_WINS_NSS=""
5884 if test x"$HAVE_WBCLIENT" = x"yes"; then
5885         AC_CHECK_LIB(wbclient, wbcInterfaceDetails,
5886                      [LIBWBCLIENT_LIBS="-lwbclient"], AC_MSG_ERROR([Could not find wbclient]), [$WBCLIENT_LDFLAGS])
5887         LIBWBCLIENT_LIBS="$LIBWBCLIENT_LIBS $WBCLIENT_LDFLAGS"
5888         AC_MSG_RESULT(yes)
5889         AC_DEFINE(WITH_WINBIND,1,[Whether to link to wbclient])
5890         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo"
5891 else
5892         if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
5893                 BUILD_LIBWBCLIENT_SHARED=no
5894         else
5895                 BUILD_LIBWBCLIENT_SHARED=yes
5896         fi
5898         LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
5899         LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
5900         LIBWBCLIENT_SOVER=0
5901         LIBWBCLIENT_FULLVER=0
5902         LIBWBCLIENT_SHARED_TARGET_SOVER=$LIBWBCLIENT_SHARED_TARGET.$LIBWBCLIENT_SOVER
5903         LIBWBCLIENT_SHARED_TARGET_FULLVER=$LIBWBCLIENT_SHARED_TARGET.$LIBWBCLIENT_FULLVER
5904         if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
5905                 NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
5906                 ## Only worry about libwbclient if we have shared
5907                 # library support
5908                 LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
5909                 LIBWBCLIENT=libwbclient
5910                 INSTALL_LIBWBCLIENT=installlibwbclient
5911                 UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
5912                 LIBWBCLIENT_LIBS="-lwbclient"
5913         else
5914                 LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
5915                 LIBWBCLIENT_LIBS=$LIBWBCLIENT_STATIC_TARGET
5916         fi
5919 if test x"$HAVE_WINBIND" = x"yes"; then
5920         AC_MSG_RESULT(yes)
5921         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
5923         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo"
5924         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd"
5925         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
5926                 PAM_MODULES="$PAM_MODULES pam_winbind"
5927                 INSTALL_PAM_MODULES="installpammodules"
5928                 UNINSTALL_PAM_MODULES="uninstallpammodules"
5929         fi
5931         # we use winbind, check for krb5 locate_plugin support:
5932         AC_CHECK_HEADERS([krb5/locate_plugin.h], [], [],
5933                 [[#ifdef HAVE_KRB5_H
5934                  #include <krb5.h>
5935                  #endif
5936         ]])
5937         if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
5938                 WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
5939                 if test x"$BLDSHARED" = x"true" ; then
5940                         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
5941                 fi
5942         fi
5943         # end of krb5 locate_plugin check
5944 else
5945         AC_MSG_RESULT(no$winbind_no_reason)
5948 AC_SUBST(WINBIND_NSS)
5949 AC_SUBST(WINBIND_WINS_NSS)
5950 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
5951 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
5952 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
5954 AC_SUBST(WINBIND_KRB5_LOCATOR)
5956 # Solaris 10 does have new member in nss_XbyY_key
5957 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
5958                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
5959                 [#include <nss_dbdefs.h>])
5961 # Solaris has some extra fields in struct passwd that need to be
5962 # initialised otherwise nscd crashes.
5964 AC_CHECK_MEMBER(struct passwd.pw_comment,
5965                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
5966                 [#include <pwd.h>])
5968 AC_CHECK_MEMBER(struct passwd.pw_age,
5969                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
5970                 [#include <pwd.h>])
5972 # AIX 4.3.x and 5.1 do not have as many members in
5973 # struct secmethod_table as AIX 5.2
5974 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
5975        [#include <usersec.h>])
5976 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
5977        [#include <usersec.h>])
5979 #################################################
5980 # Check to see if we should use the included popt
5982 AC_ARG_WITH(included-popt,
5983 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
5985   case "$withval" in
5986         yes)
5987                 INCLUDED_POPT=yes
5988                 ;;
5989         no)
5990                 INCLUDED_POPT=no
5991                 ;;
5992   esac ],
5994 if test x"$INCLUDED_POPT" != x"yes"; then
5995     AC_CHECK_LIB(popt, poptGetContext,
5996                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
5999 AC_MSG_CHECKING(whether to use included popt)
6000 if test x"$INCLUDED_POPT" = x"yes"; then
6001     AC_MSG_RESULT(yes)
6002     BUILD_POPT='$(POPT_OBJ)'
6003     POPTLIBS='$(POPT_OBJ)'
6004     FLAGS1="-I\$(srcdir)/../lib/popt"
6005 else
6006     AC_MSG_RESULT(no)
6007         BUILD_POPT=""
6008     POPTLIBS="-lpopt"
6010 AC_SUBST(BUILD_POPT)
6011 AC_SUBST(POPTLIBS)
6012 AC_SUBST(FLAGS1)
6014 #################################################
6015 # Check if user wants DNS service discovery support
6017 AC_ARG_ENABLE(dnssd,
6018 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=no)])])
6020 AC_SUBST(DNSSD_LIBS)
6021 if test x"$enable_dnssd" = x"yes"; then
6022     have_dnssd_support=yes
6024     AC_CHECK_HEADERS(dns_sd.h)
6025     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6026         have_dnssd_support=no
6027     fi
6029     # On Darwin the DNSSD API is in libc, but on other platforms it's
6030     # probably in -ldns_sd
6031     AC_CHECK_FUNCS(DNSServiceRegister)
6032     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6033     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6034             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6035         have_dnssd_support=no
6036     fi
6038     if test x"$have_dnssd_support" = x"yes"; then
6039         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6040                 [Whether to enable DNS service discovery support])
6041     else
6042         if test x"$enable_dnssd" = x"yes"; then
6043             AC_MSG_ERROR(DNS service discovery support not available)
6044         fi
6045     fi
6049 #################################################
6050 # Check if user wants avahi support
6052 AC_ARG_ENABLE(avahi,
6053 [AS_HELP_STRING([--enable-avahi], [Enable Avahi support (default=auto)])])
6055 if test x"$enable_avahi" != x"no"; then
6056     have_avahi_support=yes
6058     AC_CHECK_HEADERS(avahi-common/watch.h)
6059     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6060         have_avahi_support=no
6061     fi
6063     AC_CHECK_HEADERS(avahi-client/client.h)
6064     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6065         have_avahi_support=no
6066     fi
6068     save_LIBS="$LIBS"
6069     AC_CHECK_LIB(avahi-client, avahi_client_new,[have_avahi_client_new=yes])
6070     AC_CHECK_LIB(avahi-common, avahi_strerror,[have_avahi_strerror=yes])
6071     LIBS="$save_LIBS"
6073     if test x"$have_avahi_client_new" != x"yes" -o \
6074        x"$have_avahi_strerror" != x"yes" ; then
6075         have_avahi_support=no
6076     fi
6078     if test x"$have_avahi_support" = x"yes"; then
6079         AC_SUBST(AVAHI_LIBS, "-lavahi-client -lavahi-common")
6080         AC_DEFINE(WITH_AVAHI_SUPPORT, 1,
6081                 [Whether to enable avahi support])
6082         AC_SUBST(AVAHI_OBJ, "lib/avahi.o smbd/avahi_register.o")
6083     else
6084         if test x"$enable_avahi" = x"yes"; then
6085             AC_MSG_ERROR(avahi support not available)
6086         fi
6087     fi
6091 #################################################
6092 # Set pthread stuff
6094 PTHREAD_CFLAGS=error
6095 PTHREAD_LDFLAGS=error
6097 # If it's error, then the user didn't 
6098 # define it.
6099 if test "x$PTHREAD_LDFLAGS" = xerror; then
6100   AC_CHECK_LIB(pthread, pthread_attr_init, [
6101              PTHREAD_CFLAGS="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
6102              PTHREAD_LDFLAGS="-lpthread" ])
6105 if test "x$PTHREAD_LDFLAGS" = xerror; then
6106   AC_CHECK_LIB(pthreads, pthread_attr_init, [
6107              PTHREAD_CFLAGS="-D_THREAD_SAFE"
6108              PTHREAD_LDFLAGS="-lpthreads" ])
6111 if test "x$PTHREAD_LDFLAGS" = xerror; then
6112    AC_CHECK_LIB(c_r, pthread_attr_init, [
6113                 PTHREAD_CFLAGS="-D_THREAD_SAFE -pthread"
6114                 PTHREAD_LDFLAGS="-pthread" ])
6117 if test "x$PTHREAD_LDFLAGS" = xerror; then
6118    AC_CHECK_FUNC(pthread_attr_init, [
6119                  PTHREAD_CFLAGS="-D_REENTRANT"
6120                  PTHREAD_LDFLAGS="-lpthread" ])
6123 # especially for HP-UX, where the AC_CHECK_FUNC macro fails to test for
6124 # pthread_attr_init. On pthread_mutex_lock it works there...
6125 if test "x$PTHREAD_LDFLAGS" = xerror; then
6126    AC_CHECK_LIB(pthread, pthread_mutex_lock, [
6127                 PTHREAD_CFLAGS="-D_REENTRANT"
6128                 PTHREAD_LDFLAGS="-lpthread" ])
6131 AC_SUBST(PTHREAD_CFLAGS)
6132 AC_SUBST(PTHREAD_LDFLAGS)
6134 samba_cv_HAVE_PTHREAD=no
6135 if test x"$PTHREAD_CFLAGS" != xerror -a x"$PTHREAD_LDFLAGS" != xerror; then
6136         samba_cv_HAVE_PTHREAD=yes
6137         # now check for pthread.h with pthread-correct CFLAGS and LDFLAGS:
6138         ac_save_CFLAGS=$CFLAGS
6139         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6140         ac_save_LDFLAGS=$LDFLAGS
6141         LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
6142         AC_CHECK_HEADERS(pthread.h)
6143         CFLAGS=$ac_save_CFLAGS
6144         LDFLAGS=$ac_save_LDFLAGS
6145         AC_DEFINE(HAVE_PTHREAD, 1, [Do we have pthreads around?])
6148 #################################################
6149 # Check if user wants pthreadpool support
6151 AC_ARG_ENABLE(pthreadpool,
6152 [AS_HELP_STRING([--enable-pthreadpool], [Enable pthreads pool helper support (default=yes)])])
6154 if test x"$enable_pthreadpool" = xyes -a x"$samba_cv_HAVE_PTHREAD" != x"yes"; then
6155         AC_MSG_ERROR([pthreadpool support cannot be enabled when pthread support was not found])
6158 if test x"$enable_pthreadpool" != x"no" -a x"$samba_cv_HAVE_PTHREAD" = x"yes"; then
6159     LIBS="$LIBS $PTHREAD_LDFLAGS"
6160     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6161     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool/pthreadpool.o")
6162     default_shared_modules="$default_shared_modules vfs_aio_pthread"
6163 else
6164     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool/pthreadpool_sync.o")
6167 PTHREADPOOLTEST="bin/pthreadpooltest"
6168 AC_SUBST(PTHREADPOOLTEST)
6171 #################################################
6172 # Check to see if we should use the included iniparser
6174 AC_ARG_WITH(included-iniparser,
6175 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6177   case "$withval" in
6178         yes)
6179                 INCLUDED_INIPARSER=yes
6180                 ;;
6181         no)
6182                 INCLUDED_INIPARSER=no
6183                 ;;
6184   esac ],
6186 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6187     AC_CHECK_LIB(iniparser, iniparser_load,
6188                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6191 AC_MSG_CHECKING(whether to use included iniparser)
6192 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6193     AC_MSG_RESULT(yes)
6194     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6195         INIPARSERLIBS=""
6196     FLAGS1="$FLAGS1 -I\$(srcdir)/../lib/iniparser/src"
6197 else
6198     AC_MSG_RESULT(no)
6199         BUILD_INIPARSER=""
6200     INIPARSERLIBS="-liniparser"
6202 AC_SUBST(BUILD_INIPARSER)
6203 AC_SUBST(INIPARSERLIBS)
6204 AC_SUBST(FLAGS1)
6206 AC_ARG_ENABLE(fault-handler,[AS_HELP_STRING([--disable-fault-handler], [Disable the default handler])])
6208 if test x"$enable_fault_handler" = x"no"; then
6209         AC_DEFINE(HAVE_DISABLE_FAULT_HANDLER, 1, [Disable the default signal handler])
6212 ###################################################
6213 # Check for different/missing (set|get|end)netgrent prototypes
6214 CFLAGS_SAVE=$CFLAGS
6215 if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
6216         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6218 AC_CACHE_CHECK([for setnetgrent prototype],samba_cv_setnetgrent_prototype, [
6219     AC_TRY_COMPILE([#include<netdb.h>
6220                     #ifdef HAVE_NETGROUP_H
6221                     #include<netgroup.h>
6222                     #endif],[setnetgrent("foo")],
6223                     samba_cv_setnetgrent_prototype=yes, samba_cv_setnetgrent_prototype=no)])
6224 if test x"$samba_cv_setnetgrent_prototype" = x"yes"; then
6225     AC_DEFINE(HAVE_SETNETGRENT_PROTOTYPE, 1, [If setnetgrent prototype is defined])
6227 AC_CACHE_CHECK([for getnetgrent prototype],samba_cv_getnetgrent_prototype, [
6228     AC_TRY_COMPILE([#include<netdb.h>
6229                     #ifdef HAVE_NETGROUP_H
6230                     #include<netgroup.h>
6231                     #endif],[char *dom, *user,*host; getnetgrent(&dom,&user,&host)],
6232                     samba_cv_getnetgrent_prototype=yes, samba_cv_getnetgrent_prototype=no)])
6233 if test x"$samba_cv_getnetgrent_prototype" = x"yes"; then
6234     AC_DEFINE(HAVE_GETNETGRENT_PROTOTYPE, 1, [If getnetgrent prototype is defined])
6236 AC_CACHE_CHECK([for endnetgrent prototype],samba_cv_endnetgrent_prototype, [
6237     AC_TRY_COMPILE([#include<netdb.h>
6238                     #ifdef HAVE_NETGROUP_H
6239                     #include<netgroup.h>
6240                     #endif],[endnetgrent()],
6241                     samba_cv_endnetgrent_prototype=yes, samba_cv_endnetgrent_prototype=no)])
6242 if test x"$samba_cv_endnetgrent_prototype" = x"yes"; then
6243     AC_DEFINE(HAVE_ENDNETGRENT_PROTOTYPE, 1, [If endnetgrent prototype is defined])
6246 CFLAGS=$CFLAGS_SAVE
6248 # Checks for POSIX ignorant BSD style statvfs() function
6249 # Start
6250 AC_CHECK_HEADERS(sys/param.h sys/mount.h)
6252 AC_MSG_CHECKING([checking for posix ignorant *bsd style statfs struct])
6253 AC_CACHE_VAL(bsdstatvfs_cv_statfs,[
6254              AC_TRY_RUN([
6255                 #ifdef HAVE_SYS_PARAM_H
6256                 #include <sys/param.h>
6257                 #endif
6258                 #ifdef HAVE_SYS_MOUNT_H
6259                 #include <sys/mount.h>
6260                 #endif
6261                 int main (void)
6262                 {
6263                         struct statfs fsd;
6264                         fsd.f_bsize = 0;
6265                         fsd.f_iosize = 0;
6266                         return (statfs (".", &fsd));
6267                 }],
6268                 bsdstatvfs_cv_statfs=yes,
6269                 bsdstatvfs_cv_statfs=no,
6270                 bsdstatvfs_cv_statfs=no)])
6271 AC_MSG_RESULT($bsdstatvfs_cv_statfs)
6273 if test $bsdstatvfs_cv_statfs = yes; then
6274   AC_DEFINE(BSD_STYLE_STATVFS,1,[Whether statfs struct is *bsd style])
6276 # End of checks POSIX ignorant BSD style statvfs() function
6278 # Checks for the vfs_fileid module
6279 # Start
6280 AC_CHECK_FUNC(getmntent)
6282 AC_CHECK_HEADERS(sys/statfs.h)
6284 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid])
6285 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6286              AC_TRY_RUN([
6287                 #include <sys/types.h>
6288                 #include <sys/statfs.h>
6289                 int main(void)
6290                 {
6291                         struct statfs fsd;
6292                         fsid_t fsid = fsd.f_fsid;
6293                         return statfs (".", &fsd);
6294                 }],
6295                 vfsfileid_cv_statfs=yes,
6296                 vfsfileid_cv_statfs=no,
6297                 vfsfileid_cv_statfs=cross)
6299 AC_MSG_RESULT($vfsfileid_cv_statfs)
6301 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6302         x"$vfsfileid_cv_statfs" = x"yes"; then
6303         default_shared_modules="$default_shared_modules vfs_fileid"
6305 # End
6306 # Checks for the vfs_fileid module
6309 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6311         eval MODULE_DEFAULT_$i=STATIC
6312 done
6314 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6316         dnl Fall back to static if we cannot build shared libraries
6317         eval MODULE_DEFAULT_$i=STATIC
6319         if test $BLDSHARED = true; then
6320                 eval MODULE_DEFAULT_$i=SHARED
6321         fi
6322 done
6324 dnl Always build these modules static
6325 MODULE_rpc_spoolss=STATIC
6326 MODULE_rpc_srvsvc=STATIC
6327 MODULE_idmap_tdb=STATIC
6328 MODULE_idmap_passdb=STATIC
6329 MODULE_idmap_nss=STATIC
6331 MODULE_nss_info_template=STATIC
6333 AC_ARG_WITH(static-modules,
6334 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6335 [ if test $withval; then
6336         for i in `echo $withval | sed -e 's/,/ /g'`
6337         do
6338                 eval MODULE_$i=STATIC
6339         done
6340 fi ])
6342 AC_ARG_WITH(shared-modules,
6343 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6344 [ if test $withval; then
6345         for i in `echo $withval | sed -e 's/,/ /g'`
6346         do
6347                         eval MODULE_$i=SHARED
6348         done
6349 fi ])
6351 if test x"$MODULE_DEFAULT_vfs_notify_fam" = xSTATIC -o \
6352                 x"$MODULE_vfs_notify_fam" = xSTATIC ; then
6353         SMBD_FAM_LIBS="$SMB_FAM_LIBS"
6354         AC_SUBST(SMBD_FAM_LIBS)
6357 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o passdb/pdb_ipa.o passdb/pdb_ldap_util.o,
6358                    "bin/ldapsam.$SHLIBEXT", PDB,
6359                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6360 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6361 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6362 SMB_MODULE(pdb_wbc_sam, passdb/pdb_wbc_sam.o, "bin/wbc_sam.$SHLIBEXT", PDB)
6363 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6365 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6366 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6367 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6368 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6369 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6370 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6371 SMB_MODULE(idmap_autorid, winbindd/idmap_autorid.o, "bin/autorid.$SHLIBEXT", IDMAP)
6372 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6373 SMB_MODULE(idmap_hash, \$(IDMAP_HASH_OBJ), "bin/hash.$SHLIBEXT", IDMAP)
6374 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6376 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6377 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6379 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6380 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6381 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6382 SMB_MODULE(auth_wbc, \$(AUTH_WBC_OBJ), "bin/wbc.$SHLIBEXT", AUTH)
6383 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6384 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6385 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6386 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6388 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6389 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6390 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6391 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6392 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6393 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6394 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6395 SMB_MODULE(vfs_fake_acls, \$(VFS_FAKE_ACLS_OBJ), "bin/fake_acls.$SHLIBEXT", VFS)
6396 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6397 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6398 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6399 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6400 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6401 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6402 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6403 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6404 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6405 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6406 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6407 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6408 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6409 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6410 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6411 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6412 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6413 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6414 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6415 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6416 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6417 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6418 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6419 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6420 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6421 SMB_MODULE(vfs_aio_pthread, \$(VFS_AIO_PTHREAD_OBJ), "bin/aio_pthread.$SHLIBEXT", VFS)
6422 SMB_MODULE(vfs_aio_posix, \$(VFS_AIO_POSIX_OBJ), "bin/aio_posix.$SHLIBEXT", VFS)
6423 SMB_MODULE(vfs_aio_linux, \$(VFS_AIO_LINUX_OBJ), "bin/aio_linux.$SHLIBEXT", VFS)
6424 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6425 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6426 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6427 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6428 SMB_MODULE(vfs_acl_xattr, \$(VFS_ACL_XATTR_OBJ), "bin/acl_xattr.$SHLIBEXT", VFS)
6429 SMB_MODULE(vfs_acl_tdb, \$(VFS_ACL_TDB_OBJ), "bin/acl_tdb.$SHLIBEXT", VFS)
6430 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6431 SMB_MODULE(vfs_dirsort, \$(VFS_DIRSORT_OBJ), "bin/dirsort.$SHLIBEXT", VFS)
6432 SMB_MODULE(vfs_scannedonly, \$(VFS_SCANNEDONLY_OBJ), "bin/scannedonly.$SHLIBEXT", VFS)
6433 SMB_MODULE(vfs_crossrename, \$(VFS_CROSSRENAME_OBJ), "bin/crossrename.$SHLIBEXT", VFS)
6434 SMB_MODULE(vfs_linux_xfs_sgid, \$(VFS_LINUX_XFS_SGID_OBJ), "bin/linux_xfs_sgid.$SHLIBEXT", VFS)
6435 SMB_MODULE(vfs_time_audit, \$(VFS_TIME_AUDIT_OBJ), "bin/time_audit.$SHLIBEXT", VFS)
6436 SMB_MODULE(vfs_media_harmony, \$(VFS_MEDIA_HARMONY_OBJ), "bin/media_harmony.$SHLIBEXT", VFS)
6438 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6440 SMB_MODULE(perfcount_test, \$(PERFCOUNT_TEST), "bin/pc_test.$SHLIBEXT", PERFCOUNT)
6441 SMB_SUBSYSTEM(PERFCOUNT,smbd/perfcount.o)
6443 SMB_MODULE(gpext_registry, libgpo/gpext/registry.o, "bin/registry.$SHLIBEXT", GPEXT)
6444 SMB_MODULE(gpext_scripts, libgpo/gpext/scripts.o, "bin/scripts.$SHLIBEXT", GPEXT)
6445 SMB_MODULE(gpext_security, libgpo/gpext/security.o, "bin/security.$SHLIBEXT", GPEXT)
6446 SMB_SUBSYSTEM(GPEXT, libgpo/gpext/gpext.o)
6448 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6450 #################################################
6451 # do extra things if we are running insure
6453 if test "${ac_cv_prog_CC}" = "insure"; then
6454         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6457 #################################################
6458 # If run from the build farm, enable NASTY hacks
6459 #################################################
6460 AC_MSG_CHECKING(whether to enable features for selftest)
6461 if test x"$selftest" = x"yes"; then
6462         AC_MSG_RESULT(yes)
6463         AC_DEFINE(ENABLE_SELFTEST, 1, [Support features needed for selftest])
6464         if test x"$selftest_possible" != xyes; then
6465                 AC_MSG_ERROR(selftest support only possible with python, including development headers, and perl installed)
6466         fi
6467 else
6468         AC_MSG_RESULT(no)
6471 #################################################
6472 # check for bad librt/libpthread interactions
6474 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6475     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6476     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6477     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6479 SMB_IF_RTSIGNAL_BUG(
6480         [
6481             # Have RT_SIGNAL bug, need to check whether the problem will
6482             # affect anything we have configured.
6484             rt_do_error=no
6485             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6486                 if test x"$rt_signal_lease_ok" = x"no" ; then
6487                     rt_do_error=yes
6488                 fi
6489             fi
6491             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6492                 if test x"$rt_signal_notify_ok" = x"no" ; then
6493                     rt_do_error=yes
6494                 fi
6495             fi
6497             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6498                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6499                 if test x"$rt_signal_aio_ok" = x"no" ; then
6500                     rt_do_error=yes
6501                 fi
6502             fi
6504             if test x"$rt_do_error" = x"yes" ; then
6505                 SMB_IS_LIBPTHREAD_LINKED(
6506                     [
6507                         cat<<MSG
6509 *** On this platforms, linking Samba against pthreads causes problems
6510 *** with the oplock and change notification mechanisms. You may be
6511 *** using pthreads as a side-effect of using the --with-aio-support
6512 *** or --with-profiling-data options. Please remove these and try again.
6515                     ],
6516                     [
6517                         cat<<MSG
6519 *** On this platform, the oplock and change notification mechanisms do not
6520 *** appear to work. Please report this problem to samba-technical@samba.org
6521 *** and attach the config.log file from this directory.
6524                     ])
6525                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6526             fi
6527         ],
6528         [
6529             # no RT_SIGNAL bug, we are golden
6530             SMB_IS_LIBPTHREAD_LINKED(
6531                 [
6532                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6533                 ])
6535         ],
6536         [
6537             # cross compiling, I hope you know what you are doing
6538             true
6539         ])
6543 m4_include(../lib/zlib/zlib.m4)
6545 AC_SUBST(ZLIB_LIBS)
6546 AC_SUBST(ZLIB_OBJS)
6547 AC_ZLIB([ZLIB_OBJS=""], [
6548         ZLIB_LIBS=""
6549         for o in adler32.o compress.o crc32.o gzio.o uncompr.o \
6550                      deflate.o trees.o zutil.o inflate.o infback.o \
6551                          inftrees.o inffast.o
6552         do
6553                 ZLIB_OBJS="$ZLIB_OBJS ../lib/zlib/$o"
6554         done
6555         CFLAGS="-I../lib/zlib $CFLAGS"
6558 AC_DEFINE(STATIC_gensec_MODULES, [gensec_spnego_init,gensec_ntlmssp_init,NULL],[gensec modules])
6559 AC_DEFINE(STATIC_gensec_MODULES_PROTO, [_MODULE_PROTO(gensec_spnego_init)_MODULE_PROTO(gensec_ntlmssp_init)],[gensec protos])
6561 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
6563 if test "x$enable_dmalloc" = xyes
6564 then
6565         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
6566         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
6567                   [Define to check invariants around some common functions])
6568         LIBS="$LIBS -ldmalloc"
6571 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6572 LIB_REMOVE_USR_LIB(LDFLAGS)
6573 LIB_REMOVE_USR_LIB(LIBS)
6575 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6576 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6577 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6579 #################################################
6580 # Display summary of libraries detected
6582 AC_MSG_RESULT([Using libraries:])
6583 AC_MSG_RESULT([    LIBS = $LIBS])
6584 if test x"$with_ads_support" != x"no"; then
6585     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6587 if test x"$with_ldap_support" != x"no"; then
6588     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6590 if test x"$have_dnssd_support" != x"no"; then
6591     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6593 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6595 #################################################
6596 # final configure stuff
6598 AC_MSG_CHECKING([configure summary])
6599 AC_TRY_RUN([#include "${srcdir-.}/../tests/summary.c"],
6600            AC_MSG_RESULT(yes),
6601            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6602            AC_MSG_WARN([cannot run when cross-compiling]))
6604 dnl Merge in developer cflags from now on
6605 AC_SUBST(DEVELOPER_CFLAGS)
6606 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes" -o x"$picky_developer" = x"yes"; then
6607     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS) ${CFLAGS_APPEND}"
6610 # Stuff the smbd-only libraries at the end of the smbd link
6611 # path (if we have them).
6612 SMBD_LIBS="$samba_dmapi_libs"
6613 AC_SUBST(SMBD_LIBS)
6615 CFLAGS="${CFLAGS} \$(FLAGS)"
6616 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
6618 # If we had to expand the includes, make tsure the output file is moved back
6619 AC_OUTPUT_COMMANDS([
6620 if test -f Makefile-noincludes -a ! -f Makefile -a ! -h Makefile ; then
6621         ln -s Makefile-noincludes Makefile
6625 AC_OUTPUT(Makefile
6626           script/findsmb smbadduser script/installbin.sh script/uninstallbin.sh
6627           lib/netapi/examples/Makefile
6628           lib/netapi/tests/Makefile
6629           pkgconfig/smbclient.pc
6630           pkgconfig/wbclient.pc
6631           pkgconfig/netapi.pc
6632           pkgconfig/smbsharemodes.pc
6633           ../examples/libsmbclient/Makefile.internal
6634           )
6636 #################################################
6637 # Print very concise instructions on building/use
6638 if test "x$enable_dmalloc" = xyes
6639 then
6640         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6641         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])