s3: Remove close_fn from idmap_methods
[Samba.git] / source3 / configure.in
blob8d32a1baca3b78999b7f4ec55b74d97b245fd37f
1 dnl Process this file with autoconf to produce a configure script.
3 dnl We must use autotools 2.54 or above
4 AC_PREREQ(2.54)
6 AC_INIT([Samba],[3],[samba-technical@samba.org])
8 AC_CONFIG_SRCDIR([include/includes.h])
9 AC_CONFIG_HEADER(include/config.h)
10 AC_DEFINE(CONFIG_H_IS_FROM_SAMBA,1,[Marker for samba's config.h])
12 case "$PATH" in
13     */usr/ucb*)
14         AC_MSG_WARN([\$PATH contains /usr/ucb - build errors may follow])
15         ;;
16 esac 
18 builddir=`pwd`
19 AC_SUBST(builddir)
21 m4_include(m4/samba_version.m4)
22 m4_include(m4/check_path.m4)
23 m4_include(pkg.m4)
25 AC_LIBREPLACE_CC_CHECKS
26 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
28 m4_include(../lib/tevent/libtevent.m4)
30 LIBTEVENT_OBJ0=""
31 for obj in ${TEVENT_OBJ}; do
32         LIBTEVENT_OBJ0="${LIBTEVENT_OBJ0} ${teventdir}/${obj}"
33 done
34 AC_SUBST(LIBTEVENT_OBJ0)
35 LIBS="${LIBS} ${TEVENT_LIBS}"
37 SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
38 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/replace"
39 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TEVENT_CFLAGS}"
40 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/addns"
41 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
42 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/.."
44 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/popt"
46 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
47 if test "x${srcdir-.}" != "x."; then
48         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
51 dnl Unique-to-Samba variables we'll be playing with.
52 AC_SUBST(SAMBA_CPPFLAGS)
53 AC_SUBST(SHELL)
54 AC_SUBST(LDSHFLAGS)
55 AC_SUBST(SONAMEFLAG)
56 AC_SUBST(SHLD)
57 AC_SUBST(MODULE_EXPORTS)
58 AC_SUBST(DSO_EXPORTS)
59 AC_SUBST(HOST_OS)
60 AC_SUBST(PICFLAG)
61 AC_SUBST(PIE_CFLAGS)
62 AC_SUBST(PIE_LDFLAGS)
63 AC_SUBST(RELRO_LDFLAGS)
64 AC_SUBST(SHLIBEXT)
65 AC_SUBST(INSTALLLIBCMD_SH)
66 AC_SUBST(INSTALLLIBCMD_A)
67 AC_SUBST(UNINSTALLLIBCMD_SH)
68 AC_SUBST(UNINSTALLLIBCMD_A)
70 AC_SUBST(INSTALL_LIBWBCLIENT)
71 AC_SUBST(UNINSTALL_LIBWBCLIENT)
72 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
73 AC_SUBST(LIBWBCLIENT_SHARED)
74 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
75 AC_SUBST(LIBWBCLIENT_STATIC)
76 AC_SUBST(LIBWBCLIENT_SOVER)
77 AC_SUBST(LIBWBCLIENT)
78 AC_SUBST(LIBWBCLIENT_LIBS)
80 AC_SUBST(LIBSAMBAUTIL_SHARED)
82 AC_SUBST(PRINT_LIBS)
83 AC_SUBST(AUTH_LIBS)
84 AC_SUBST(ACL_LIBS)
85 AC_SUBST(PASSDB_LIBS)
86 AC_SUBST(IDMAP_LIBS)
87 AC_SUBST(KRB5_LIBS)
88 AC_SUBST(UUID_LIBS)
89 AC_SUBST(LDAP_LIBS)
90 AC_SUBST(GPEXT_LIBS)
91 AC_SUBST(PAM_MODULES)
92 AC_SUBST(INSTALL_PAM_MODULES)
93 AC_SUBST(UNINSTALL_PAM_MODULES)
94 AC_SUBST(NSS_MODULES)
95 AC_SUBST(EXTRA_BIN_PROGS)
96 AC_SUBST(CIFSMOUNT_PROGS)
97 AC_SUBST(INSTALL_CIFSMOUNT)
98 AC_SUBST(UNINSTALL_CIFSMOUNT)
99 AC_SUBST(CIFSUMOUNT_PROGS)
100 AC_SUBST(INSTALL_CIFSUMOUNT)
101 AC_SUBST(UNINSTALL_CIFSUMOUNT)
102 AC_SUBST(CIFSUPCALL_PROGS)
103 AC_SUBST(INSTALL_CIFSUPCALL)
104 AC_SUBST(UNINSTALL_CIFSUPCALL)
105 AC_SUBST(EXTRA_SBIN_PROGS)
106 AC_SUBST(EXTRA_ALL_TARGETS)
107 AC_SUBST(CONFIG_LIBS)
108 AC_SUBST(NSCD_LIBS)
110 # compile with optimization and without debugging by default, but
111 # allow people to set their own preference.
112 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
113 # if it has no value.  This prevent *very* large debug binaries from occurring
114 # by default.
115 if test "x$debug" = "xyes" ; then
116         CFLAGS="${CFLAGS} -g"
118 if test "x$CFLAGS" = x; then
119   CFLAGS="-O"
122 m4_include(../lib/socket_wrapper/config.m4)
123 m4_include(../lib/nss_wrapper/config.m4)
125 m4_include(m4/swat.m4)
127 DEVELOPER_CFLAGS="-DDEBUG_PASSWORD -DDEVELOPER"
129 # Probe the gcc version for extra CFLAGS. We always stash these in
130 # DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
131 # Makefile edit, avoiding the need to re-run configure.
132 if test x"$ac_cv_prog_gcc" = x"yes" ; then
133         DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings"
134         # Add -Wdeclaration-after-statement if compiler supports it
135         AC_CACHE_CHECK(
136           [that the C compiler understands -Wdeclaration-after-statement],
137           samba_cv_HAVE_Wdeclaration_after_statement, [
138           AC_TRY_RUN_STRICT([
139             int main(void)
140             {
141                 return 0;
142             }],[$CFLAGS -Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
143             samba_cv_HAVE_Wdeclaration_after_statement=yes,
144             samba_cv_HAVE_Wdeclaration_after_statement=no,
145             samba_cv_HAVE_Wdeclaration_after_statement=cross)
146        ])
148         if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
149             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
150         fi
152         #-Werror-implicit-function-declaration
153         AC_CACHE_CHECK(
154           [that the C compiler understands -Werror-implicit-function-declaration],
155           samba_cv_HAVE_Werror_implicit_function_declaration, [
156           AC_TRY_RUN_STRICT([
157             int main(void)
158             {
159                 return 0;
160             }],[$CFLAGS -Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
161             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
162             samba_cv_HAVE_Werror_implicit_function_declaration=no,
163             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
164        ])
165        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
166             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
167        fi
169         # krb5developer is like developer, except we don't get
170         # -Wstrict-prototypes.
171        if test x"$krb5_developer" != x"$yes" ; then
172             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
173        fi
175        if test x"$picky_developer" = x"yes"; then
176             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Werror"
177        fi
180 #################################################
181 # check for a shared memory profiling support
182 AC_MSG_CHECKING(whether to use profiling)
183 AC_ARG_WITH(profiling-data,
184 [AS_HELP_STRING([--with-profiling-data], [Include gathering source code profile information (default=no)])],
185 [ case "$withval" in
186   yes)
187     AC_MSG_RESULT(yes)
188     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
189     samba_cv_WITH_PROFILE=yes
190     ;;
191   *)
192     AC_MSG_RESULT(no)
193     samba_cv_WITH_PROFILE=no
194     ;;
195   esac ],
196   AC_MSG_RESULT(no)
199 dnl Checks for programs.
200 smbtorture4_possible=yes
202 AC_PROG_INSTALL
203 AC_PROG_AWK
204 # Check for GNU make
205 m4_include(../m4/check_make.m4)
206 AC_SAMBA_GNU_MAKE([true], [true])
208 # Check for perl
209 m4_include(../m4/check_perl.m4)
210 AC_SAMBA_PERL([true], [smbtorture4_possible=no])
212 # Check for python
213 m4_include(../m4/check_python.m4)
214 AC_SAMBA_PYTHON_DEVEL([true], [smbtorture4_possible=no])
216 AC_CHECK_TOOL(AR, ar)
218 dnl Check if we (actually our C compiler!) use GNU ld
219 AC_PROG_LD_GNU
221 dnl Certain versions of GNU ld the default is not to have the
222 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
223 dnl warnings when building modules.
224 if test "$ac_cv_prog_gnu_ld" = "yes"; then
225         ac_cv_gnu_ld_version=`$CC -Wl,-v /dev/null 2>&1 < /dev/null | grep "GNU ld"`
226         AC_MSG_CHECKING(GNU ld release date)
227         changequote(,)dnl
228         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'`
229         changequote([,])dnl
230         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
231         if test -n "$ac_cv_gnu_ld_date"; then
232         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
233                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
234         fi
235         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
236                 ac_cv_gnu_ld_version_script=yes
237         fi
238         else
239            AC_MSG_CHECKING(GNU ld release version)
240            changequote(,)dnl
241            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'`
242            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
243            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
244            changequote([,])dnl
245            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
246            AC_MSG_CHECKING(GNU ld release version major)
247            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
248            AC_MSG_CHECKING(GNU ld release version minor)
249            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
250            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
251              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
252            fi
253            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
254              ac_cv_gnu_ld_version_script=yes
255            fi
256         fi
259 dnl look for executable suffix
260 AC_EXEEXT
262 dnl Check if C compiler understands -c and -o at the same time
263 AC_PROG_CC_C_O
264 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
265       BROKEN_CC=
266 else
267       BROKEN_CC=#
269 AC_SUBST(BROKEN_CC)
271 dnl Check if the C compiler understands -Werror (GNU)
272 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
273  AC_TRY_RUN_STRICT([
274   int main(void)
275   {
276         return 0;
277   }],[$CFLAGS -Werror],[$CPPFLAGS],[$LDFLAGS],
278   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
279 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
280    Werror_FLAGS="-Werror"
281 else
282 dnl Check if the C compiler understands -w2
283 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
284  AC_TRY_RUN_STRICT([
285   int main(void)
286   {
287         return 0;
288   }],[$CFLAGS -w2],[$CPPFLAGS],[$LDFLAGS],
289   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
290 if test x"$samba_cv_HAVE_w2" = x"yes"; then
291    Werror_FLAGS="-w2"
292 else
293 dnl Check if the C compiler understands -errwarn (Sun)
294 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
295   AC_TRY_RUN_STRICT([
296    int main(void)
297    {
298         return 0;
299    }],[$CFLAGS -errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
300    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
301 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
302    Werror_FLAGS="-errwarn=%all"
303 else
304 dnl Check if the C compiler understands -qhalt (IBM)
305 AC_CACHE_CHECK([that the C compiler understands -qhalt],samba_cv_HAVE_qhalt, [
306   AC_TRY_RUN_STRICT([
307    int main(void)
308    {
309         return 0;
310    }],[$CFLAGS -qhalt=w],[$CPPFLAGS],[$LDFLAGS],
311    samba_cv_HAVE_qhalt=yes,samba_cv_HAVE_qhalt=no,samba_cv_HAVE_qhalt=cross)])
312 if test x"$samba_cv_HAVE_qhalt" = x"yes"; then
313    Werror_FLAGS="-qhalt=w"
319 ############################################
320 # check if the compiler can handle negative enum values
321 # and don't truncate the values to INT_MAX
322 # a runtime test is needed here
323 AC_SUBST(PIDL_ARGS)
324 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
325     AC_TRY_RUN(
327         #include <stdio.h>
328         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
329         int main(void) {
330                 enum negative_values v1 = NEGATIVE_VALUE;
331                 unsigned v2 = NEGATIVE_VALUE;
333                 if (v1 != 0xFFFFFFFF) {
334                         printf("%u != 0xFFFFFFFF\n", v1);
335                         return 1;
336                 }
337                 if (v2 != 0xFFFFFFFF) {
338                         printf("%u != 0xFFFFFFFF\n", v2);
339                         return 1;
340                 }
342                 return 0;
343         }
345         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv_CC_NEGATIVE_ENUM_VALUES=no)])
346 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
347         AC_MSG_WARN([using --uint-enums for pidl])
348         PIDL_ARGS="$PIDL_ARGS --uint-enums"
351 dnl Figure out the flags to support named structure initializers
353 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
355 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
356 AC_MSG_CHECKING(uname -s)
357 AC_MSG_RESULT(${UNAME_S})
359 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
360 AC_MSG_CHECKING(uname -r)
361 AC_MSG_RESULT(${UNAME_R})
363 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
364 AC_MSG_CHECKING(uname -m)
365 AC_MSG_RESULT(${UNAME_M})
367 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
368 AC_MSG_CHECKING(uname -p)
369 AC_MSG_RESULT(${UNAME_P})
371 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
372 AC_MSG_CHECKING(uname -i)
373 AC_MSG_RESULT(${UNAME_I})
375 dnl Add #include for broken IRIX header files
376   case "$host_os" in
377         *irix6*)
378                 #TODO add to libreplace
379                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
380                         dnl Fix sensible defaults for MIPSPro compilers. The
381                         dnl error numbers are valid for the 7.3 compilers,
382                         dnl hopefully also valid for the 7.4 series.
383                         dnl
384                         dnl Bugzilla 3801. Force an error on warning 1035
385                         dnl so we don't incorrectly detect stdint.h. This
386                         dnl warning is emitted for #error directives.
387                         CFLAGS="$CFLAGS -diag_error 1035"
388                         dnl 1209: Controlling expression is constant
389                         dnl 1174: Function foo declared but never referenced
390                         dnl 3201: Parameter foo was never referenced
391                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
392                 fi
393         ;;
394 esac
396 DYNEXP=
397 AC_SUBST(DYNEXP)
398 LDSHFLAGS_Z_DEFS=
399 AC_SUBST(LDSHFLAGS_Z_DEFS)
400 LDSHFLAGS_Z_NODEFS=
401 AC_SUBST(LDSHFLAGS_Z_NODEFS)
403 dnl Add modules that have to be built by default here
404 dnl These have to be built static:
405 default_static_modules=""
406 default_static_modules="$default_static_modules pdb_smbpasswd"
407 default_static_modules="$default_static_modules pdb_tdbsam"
408 default_static_modules="$default_static_modules pdb_wbc_sam"
409 default_static_modules="$default_static_modules rpc_lsarpc"
410 default_static_modules="$default_static_modules rpc_samr"
411 default_static_modules="$default_static_modules rpc_winreg"
412 default_static_modules="$default_static_modules rpc_initshutdown"
413 default_static_modules="$default_static_modules rpc_dssetup"
414 default_static_modules="$default_static_modules rpc_wkssvc"
415 default_static_modules="$default_static_modules rpc_svcctl"
416 default_static_modules="$default_static_modules rpc_ntsvcs"
417 default_static_modules="$default_static_modules rpc_netlogon"
418 default_static_modules="$default_static_modules rpc_netdfs"
419 default_static_modules="$default_static_modules rpc_srvsvc"
420 default_static_modules="$default_static_modules rpc_spoolss"
421 default_static_modules="$default_static_modules rpc_eventlog"
422 default_static_modules="$default_static_modules auth_sam"
423 default_static_modules="$default_static_modules auth_unix"
424 default_static_modules="$default_static_modules auth_winbind"
425 default_static_modules="$default_static_modules auth_wbc"
426 default_static_modules="$default_static_modules auth_server"
427 default_static_modules="$default_static_modules auth_domain"
428 default_static_modules="$default_static_modules auth_builtin"
429 default_static_modules="$default_static_modules vfs_default"
430 default_static_modules="$default_static_modules nss_info_template"
432 dnl These are preferably build shared, and static if dlopen() is not available
433 default_shared_modules=""
434 default_shared_modules="$default_shared_modules vfs_recycle"
435 default_shared_modules="$default_shared_modules vfs_audit"
436 default_shared_modules="$default_shared_modules vfs_extd_audit"
437 default_shared_modules="$default_shared_modules vfs_full_audit"
438 default_shared_modules="$default_shared_modules vfs_netatalk"
439 default_shared_modules="$default_shared_modules vfs_fake_perms"
440 default_shared_modules="$default_shared_modules vfs_default_quota"
441 default_shared_modules="$default_shared_modules vfs_readonly"
442 default_shared_modules="$default_shared_modules vfs_cap"
443 default_shared_modules="$default_shared_modules vfs_expand_msdfs"
444 default_shared_modules="$default_shared_modules vfs_shadow_copy"
445 default_shared_modules="$default_shared_modules vfs_shadow_copy2"
446 default_shared_modules="$default_shared_modules charset_CP850"
447 default_shared_modules="$default_shared_modules charset_CP437"
448 default_shared_modules="$default_shared_modules auth_script"
449 default_shared_modules="$default_shared_modules vfs_readahead"
450 default_shared_modules="$default_shared_modules vfs_xattr_tdb"
451 default_shared_modules="$default_shared_modules vfs_streams_xattr"
452 default_shared_modules="$default_shared_modules vfs_streams_depot"
453 default_shared_modules="$default_shared_modules vfs_acl_xattr"
454 default_shared_modules="$default_shared_modules vfs_acl_tdb"
455 default_shared_modules="$default_shared_modules vfs_smb_traffic_analyzer"
456 default_shared_modules="$default_shared_modules vfs_preopen"
457 default_shared_modules="$default_shared_modules vfs_catia"
458 default_shared_modules="$default_shared_modules vfs_scannedonly"
459 default_shared_modules="$default_shared_modules vfs_crossrename"
460 default_shared_modules="$default_shared_modules vfs_linux_xfs_sgid"
461 default_shared_modules="$default_shared_modules vfs_time_audit"
462 default_shared_modules="$default_shared_modules idmap_autorid"
464 if test "x$developer" = xyes; then
465    default_static_modules="$default_static_modules rpc_rpcecho pdb_ads"
466    default_static_modules="$default_static_modules auth_netlogond"
467    default_shared_modules="$default_shared_modules charset_weird perfcount_test"
471 # Config CPPFLAG settings for strange OS's that must be set
472 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
473 # case statement; its first reference must be unconditional.
475 case "$host_os" in
476     *hpux*)
478 # Defines needed for HPUX support.
479 # HPUX has bigcrypt but (sometimes?) doesn't use it for
480 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
482       case `uname -r` in
483                 *9*|*10*|*11)
484                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
485                 ;;
486       esac
487       ;;
490 # CRAY Unicos has broken const handling
491        *unicos*)
492           AC_MSG_RESULT([disabling const])
493           CPPFLAGS="$CPPFLAGS -Dconst="
494           ;;
495         
497 # AIX4.x doesn't even admit to having large
498 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
500     *aix4*)
501           AC_MSG_RESULT([enabling large file support])
502       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
503           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
504       ;;
506 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
507 # to the existance of large files..
508 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
509 # recommendations on large file support, however it makes the
510 # compile work using gcc 2.7 and 2.8, whereas using the Sun
511 # recommendation makes the compile fail on gcc2.7. JRA.
513 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
515         *solaris*)
516                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
517                 case `uname -r` in
518                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
519                                 AC_MSG_RESULT([no large file support])
520                                 ;;
521                         5.*)
522                         AC_MSG_RESULT([enabling large file support])
523                         if test "$ac_cv_prog_gcc" = yes; then
524                                 ${CC-cc} -v >conftest.c 2>&1
525                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
526                                 rm -fr conftest.c
527                                 case "$ac_cv_gcc_compiler_version_number" in
528                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
529                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
530                                                 LDFLAGS="$LDFLAGS -lthread"
531                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
532                                                 ;;
533                                         *)
534                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
535                                                 LDFLAGS="$LDFLAGS -lthread"
536                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
537                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
538                                                 ;;
539                                 esac
540                         else
541                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
542                                 LDFLAGS="$LDFLAGS -lthread"
543                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
544                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
545                         fi
546                         ;;
547                 esac
548                 ;;
550 # IRIX uses SYSV printing.  Make sure to set that here
552         *irix*)
553                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
554                 ;;
555         *freebsd*|*dragonfly*)
556                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
557                 ;;
559 # VOS may need to have POSIX support and System V compatibility enabled.
561     *vos*)
562     case "$CPPFLAGS" in
563           *-D_POSIX_C_SOURCE*)
564                 ;;
565           *)
566                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
567                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
568                 ;;
569     esac
570     case "$CPPFLAGS" in
571           *-D_SYSV*|*-D_SVID_SOURCE*)
572                 ;;
573           *)
574                 CPPFLAGS="$CPPFLAGS -D_SYSV"
575                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
576     esac
577     ;;
579 # Tests needed for SINIX large file support.
581     *sysv4*)
582       if test $host = mips-sni-sysv4 ; then
583         AC_MSG_CHECKING([for LFS support])
584         old_CPPFLAGS="$CPPFLAGS"
585         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
586         AC_TRY_RUN([
587 #include <unistd.h>
588 main () {
589 #if _LFS64_LARGEFILE == 1
590 exit(0);
591 #else
592 exit(1);
593 #endif
594 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
595         CPPFLAGS="$old_CPPFLAGS"
596         if test x$SINIX_LFS_SUPPORT = xyes ; then
597           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
598                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
599           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
600           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
601           LIBS="`getconf LFS64_LIBS` $LIBS"
602         fi
603       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
604       fi
605     ;;
607 # Systems with LFS support.
609     gnu* | k*bsd*-gnu | kopensolaris*-gnu)
610         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
611         AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
612         AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
613         AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
614         ;;
616 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
618     *linux*)
619         AC_MSG_CHECKING([for LFS support])
620         old_CPPFLAGS="$CPPFLAGS"
621         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
622        AC_TRY_RUN([
623 #include <unistd.h>
624 #include <sys/utsname.h>
625 #include <string.h>
626 #include <stdlib.h>
627 main() {
628 #if _LFS64_LARGEFILE == 1
629        struct utsname uts;
630        char *release;
631        int major, minor;
633        /* Ensure this is glibc 2.2 or higher */
634 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
635        int libc_major = __GLIBC__;
636        int libc_minor = __GLIBC_MINOR__;
638        if (libc_major < 2)
639               exit(1);
640        if (libc_minor < 2)
641               exit(1);
642 #endif
644        /* Ensure this is kernel 2.4 or higher */
646        uname(&uts);
647        release = strdup(uts.release);
648        major = atoi(strsep(&release, "."));
649        minor = atoi(strsep(&release, "."));
651        if (major > 2 || (major == 2 && minor > 3))
652                exit(0);
653        exit(1);
654 #else
655        exit(1);
656 #endif
658 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
659         CPPFLAGS="$old_CPPFLAGS"
660         if test x$LINUX_LFS_SUPPORT = xyes ; then
661                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
662                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
663                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
664                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
665         fi
666         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
667         ;;
670 # MacOS X is the *only* system that uses compose character in utf8. This
671 # is so horribly broken....
673     *darwin*)
674         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
676 # Add a system specific charset module.
677         default_shared_modules="$default_shared_modules charset_macosxfs"
679         ;;
680     *hurd*)
681         AC_MSG_CHECKING([for LFS support])
682         old_CPPFLAGS="$CPPFLAGS"
683         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
684         AC_TRY_RUN([
685 #include <unistd.h>
686 main () {
687 #if _LFS64_LARGEFILE == 1
688 exit(0);
689 #else
690 exit(1);
691 #endif
692 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
693         CPPFLAGS="$old_CPPFLAGS"
694         if test x$GLIBC_LFS_SUPPORT = xyes ; then
695           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
696                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
697           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
698         fi
699       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
700     ;;
701     *qnx*)
702         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
703         AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
704         ;;
706 esac
708 SAVE_CPPFLAGS="${CPPFLAGS}"
709 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
711 AC_LIBREPLACE_BROKEN_CHECKS
712 AC_CHECK_FUNCS([syslog],[],[AC_MSG_ERROR([Required function not found])])
713 AC_LIBREPLACE_NETWORK_CHECKS
715 CPPFLAGS="${SAVE_CPPFLAGS}"
717 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
719 LIBREPLACE_OBJS="${LIBREPLACEOBJ}"
720 AC_SUBST(LIBREPLACE_OBJS)
722 LIBREPLACE_LIBS="${LIBREPLACE_NETWORK_LIBS}"
723 AC_SUBST(LIBREPLACE_LIBS)
726 # add -ldl to the global LIBS
727 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
728 AUTH_LIBS="${AUTH_LIBS} ${CRYPT_LIBS}"
731 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
732 AC_CHECK_HEADERS(unistd.h grp.h sys/id.h memory.h alloca.h)
733 AC_CHECK_HEADERS(limits.h float.h libintl.h)
734 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
735 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)
736 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
737 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
738 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
739 AC_CHECK_HEADERS(sys/sysmacros.h)
740 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
741 AC_CHECK_HEADERS(langinfo.h locale.h)
742 AC_CHECK_HEADERS(xfs/libxfs.h)
743 AC_CHECK_HEADERS(netgroup.h)
744 AC_CHECK_HEADERS(linux/falloc.h)
746 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
747 #if HAVE_RPC_RPC_H
748 #include <rpc/rpc.h>
749 #endif
752 ## These fail to compile on IRIX so just check for their presence
753 AC_CHECK_HEADERS(sys/mode.h,,,)
755 # Look for Darwin headers
756 old_CPPFLAGS="$CPPFLAGS"
757 CPPFLAGS="-Iinclude $CPPFLAGS"
758 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
759 CPPFLAGS="$old_CPPFLAGS"
761 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
762 # subdirectory of headers.
763 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
765 if test x"$enable_developer" = x"yes" ; then
766    if test x"$ac_cv_header_valgrind_h" = xyes -o \
767            x"$ac_cv_header_valgrind_valgrind_h" = xyes ; then
768       AC_DEFINE(VALGRIND,1,[Whether we have valgrind headers])
769    fi
773 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
774 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
776 case "$host_os" in
777     *hpux*)
778                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
779                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
780                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
781                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
782                 fi
783         ;;
784 esac
785 AC_CHECK_HEADERS(shadow.h)
786 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
787 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
789 AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
790 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
792 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
794 # For experimental utmp support (lastlog on some BSD-like systems)
795 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
797 AC_CHECK_SIZEOF(int,cross)
798 AC_CHECK_SIZEOF(long,cross)
799 AC_CHECK_SIZEOF(long long,cross)
800 AC_CHECK_SIZEOF(short,cross)
802 AC_C_CONST
803 AC_C_INLINE
804 AC_C_BIGENDIAN
805 AC_C_CHAR_UNSIGNED
807 AC_TYPE_SIGNAL
808 AC_TYPE_UID_T
809 AC_TYPE_MODE_T
810 AC_TYPE_OFF_T
811 AC_TYPE_SIZE_T
812 AC_TYPE_PID_T
813 AC_STRUCT_ST_RDEV
814 AC_DIRENT_D_OFF
815 AC_CHECK_TYPE(ssize_t, int)
816 AC_CHECK_TYPE(wchar_t, unsigned short)
818 ############################################
819 # for cups support we need libcups, and a handful of header files
821 AC_ARG_ENABLE(cups,
822 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
824 if test x$enable_cups != xno; then
825         AC_PATH_PROG(CUPS_CONFIG, cups-config)
827         if test "x$CUPS_CONFIG" != x; then
829                 ac_save_LDFLAGS=$LDFLAGS
830                 ac_save_PRINT_LIBS=$PRINT_LIBS
831                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
833                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
834                         x"$ac_cv_header_cups_language_h" = xyes; then
835                         # try linking with -lcups alone first. That should work unless libcups is
836                         # underlinked. With cups-config --libs we pull in unwanted and unneeded
837                         # dendencies including thread libraries - use cups-config only if really
838                         # required. 
839                         AC_CHECK_LIB_EXT(cups, ac_save_PRINT_LIBS , httpConnect,
840                                 [PRINT_LIBS="$ac_save_PRINT_LIBS -lcups"],
841                                 [AC_MSG_WARN([your cups library doesn't link with -lcups alone, it might be underlinked.]) ;
842                                  PRINT_LIBS="$ac_save_PRINT_LIBS `$CUPS_CONFIG --libs`"])
844                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
845                         samba_cv_HAVE_CUPS=yes
846                         AC_CHECK_LIB_EXT(cups, PRINT_LIBS, httpConnectEncrypt)
847                 else
848                         AC_MSG_WARN([cups-config around but cups-devel not installed])
849                         CFLAGS=$ac_save_CFLAGS
850                         LDFLAGS=$ac_save_LDFLAGS
851                         PRINT_LIBS=$ac_save_PRINT_LIBS
852                 fi
854         elif test x"$enable_cups" = x"yes"; then
855                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
856         fi
859 AC_ARG_ENABLE(iprint,
860 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
862 if test x$enable_iprint != xno; then
863         if test x"$samba_cv_HAVE_CUPS" = xyes; then
864                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
865         elif test x"$enable_iprint" = x"yes"; then
866                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
867         fi
870 ############################################
871 # check if the compiler will optimize out function calls
872 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
873     AC_TRY_LINK([
874 #include <stdio.h>],
876                 if (0) {
877                    this_function_does_not_exist();
878                 } else {
879                   return 1;
880                 }
883         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
884 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
885    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
888 #############################################
889 # check for fd passing struct via msg_control
890 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
891     AC_TRY_COMPILE([
892 #include <sys/types.h>
893 #include <stdlib.h>
894 #include <stddef.h>
895 #include <sys/socket.h>
896 #include <sys/un.h>],
898         struct msghdr msg;
899         union {
900               struct cmsghdr cm;
901               char control[CMSG_SPACE(sizeof(int))];
902         } control_un;
903         msg.msg_control = control_un.control;
904         msg.msg_controllen = sizeof(control_un.control);
906         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
907 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
908    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
909              [If we can use msg_control for passing file descriptors])
912 #############################################
913 # check for fd passing struct via msg_acctrights
914 AC_CACHE_CHECK([for fd passing via msg_acctrights],
915                 samba_cv_msghdr_msg_acctrights, [
916     AC_TRY_COMPILE([
917 #include <sys/types.h>
918 #include <stdlib.h>
919 #include <stddef.h>
920 #include <sys/socket.h>
921 #include <sys/un.h>],
923         struct msghdr msg;
924         int fd;
925         msg.msg_acctrights = (caddr_t) &fd;
926         msg.msg_acctrightslen = sizeof(fd);
928         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
929 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
930    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
931              [If we can use msg_acctrights for passing file descriptors])
934 AC_CHECK_FUNCS(dirfd)
935 if test x"$ac_cv_func_dirfd" = x"yes"; then
936         default_shared_modules="$default_shared_modules vfs_syncops vfs_dirsort"
939 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
940     AC_TRY_COMPILE([
941 #include <sys/types.h>
942 #if STDC_HEADERS
943 #include <stdlib.h>
944 #include <stddef.h>
945 #endif
946 #include <signal.h>],[struct sigevent s;],
947         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
948 if test x"$samba_cv_struct_sigevent" = x"yes"; then
949    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
950    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
951         [#include <signal.h>])
954 # and glibc has setresuid under linux but the function does
955 # nothing until kernel 2.1.44! very dumb.
956 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
957     AC_TRY_RUN([#include <errno.h>
958 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
959         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
960 if test x"$samba_cv_have_setresuid" = x"yes"; then
961     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
964 # Do the same check for setresguid...
966 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
967     AC_TRY_RUN([#include <unistd.h>
968 #include <errno.h>
969 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
970         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
971 if test x"$samba_cv_have_setresgid" = x"yes"; then
972     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
975 AC_FUNC_MEMCMP
977 ###############################################
978 # Readline included by default unless explicitly asked not to
979 test "${with_readline+set}" != "set" && with_readline=yes
981 # test for where we get readline() from
982 AC_MSG_CHECKING(whether to use readline)
983 AC_ARG_WITH(readline,
984 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
985 [  case "$with_readline" in
986   yes)
987     AC_MSG_RESULT(yes)
989     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
990     AC_CHECK_HEADERS(readline/history.h)
992     AC_CHECK_HEADERS(readline.h readline/readline.h,[
993       for termlib in ncurses curses termcap terminfo termlib tinfo; do
994        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
995       done
996       AC_CHECK_LIB(readline, rl_callback_handler_install,
997        [TERMLIBS="-lreadline $TERMLIBS"
998        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
999        break], [TERMLIBS=], $TERMLIBS)])
1000     ;;
1001   no)
1002     AC_MSG_RESULT(no)
1003     ;;
1004   *)
1005     AC_MSG_RESULT(yes)
1007     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
1008     # alternate readline path
1009     _ldflags=${LDFLAGS}
1010     _cppflags=${CPPFLAGS}
1012     # Add additional search path
1013     LDFLAGS="-L$with_readline/lib $LDFLAGS"
1014     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1016     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1017     AC_CHECK_HEADERS(readline/history.h)
1019     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1020       for termlib in ncurses curses termcap terminfo termlib; do
1021        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1022       done
1023       AC_CHECK_LIB(readline, rl_callback_handler_install,
1024        [TERMLDFLAGS="-L$with_readline/lib"
1025        TERMCPPFLAGS="-I$with_readline/include"
1026        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1027        TERMLIBS="-lreadline $TERMLIBS"
1028        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1029        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
1031     LDFLAGS=$_ldflags
1032     ;;
1033   esac],
1034   AC_MSG_RESULT(no)
1036 AC_SUBST(TERMLIBS)
1037 AC_SUBST(TERMLDFLAGS)
1039 # The readline API changed slightly from readline3 to readline4, so
1040 # code will generate warnings on one of them unless we have a few
1041 # special cases.
1042 AC_CHECK_LIB(readline, rl_completion_matches,
1043              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
1044                         [Do we have rl_completion_matches?])],
1045              [],
1046              [$TERMLIBS])
1048 # not all readline libs have rl_event_hook or history_list
1049 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1050 AC_CHECK_LIB(readline, history_list,
1051              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1052              [],
1053              [$TERMLIBS])
1055 ###############################################
1056 # test for where we get yp_get_default_domain() from
1057 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1058 AC_CHECK_FUNCS(yp_get_default_domain)
1060 # Check if we have execl, if not we need to compile smbrun.
1061 AC_CHECK_FUNCS(execl)
1062 if test x"$ac_cv_func_execl" = x"no"; then
1063     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1066 AC_CHECK_FUNCS(getcwd fchown chmod fchmod mknod mknod64)
1067 AC_CHECK_FUNCS(strtol)
1068 AC_CHECK_FUNCS(strchr chflags)
1069 AC_CHECK_FUNCS(getrlimit fsync setpgid)
1070 AC_CHECK_FUNCS(fdatasync,,[AC_CHECK_LIB_EXT(rt, LIBS, fdatasync)])
1071 AC_CHECK_FUNCS(setsid glob strpbrk crypt16 getauthuid)
1072 AC_CHECK_FUNCS(sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1073 AC_CHECK_FUNCS(initgroups select rdchk getgrnam getgrent pathconf)
1074 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf stat64 fstat64)
1075 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt lseek64 ftruncate64 posix_fallocate posix_fallocate64)
1076 AC_CHECK_FUNCS(fallocate fallocate64)
1077 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam)
1078 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1079 AC_CHECK_FUNCS(fdopendir fdopendir64)
1080 AC_CHECK_FUNCS(getpwent_r)
1081 AC_CHECK_FUNCS(getdents64)
1082 AC_CHECK_FUNCS(setenv strcasecmp fcvt fcvtl)
1083 AC_CHECK_FUNCS(syslog vsyslog timegm)
1084 AC_CHECK_FUNCS(setlocale nl_langinfo)
1085 AC_CHECK_FUNCS(nanosleep,,[AC_CHECK_LIB_EXT(rt, LIBS, nanosleep)])
1086 AC_CHECK_FUNCS(lutimes futimes utimensat futimens)
1087 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1088 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1089 AC_CHECK_HEADERS(sys/mman.h)
1090 # setbuffer, shmget, shm_open are needed for smbtorture
1091 AC_CHECK_FUNCS(shmget shm_open)
1092 AC_CHECK_FUNCS(gettext dgettext)
1093 AC_CHECK_FUNCS(bindtextdomain textdomain)
1094 AC_CHECK_FUNCS(strupr)
1096 # Find a method of generating a stack trace
1097 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1098 # libexecinfo provides backtrace_symbols on FreeBSD
1099 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
1100 AC_CHECK_FUNCS(backtrace_symbols)
1101 AC_CHECK_LIB(exc, trace_back_stack)
1103 # check for sysctlbyname for BSD systems
1104 AC_CHECK_FUNCS(sysctlbyname)
1106 #################################################
1107 # Check to see if core dump directory is defined in linux
1108 # with /proc/sys/kernel/core_pattern
1110 AC_CHECK_FILE([/proc/sys/kernel/core_pattern],
1111         AC_DEFINE(HAVE_SYS_KERNEL_PROC_CORE_PATTERN, 1,
1112         [Whether Linux kernel uses core_pattern for core files]),
1113          [])
1115 #############################
1116 # check if building with gpfs
1117 AC_CHECK_HEADERS(gpfs_gpl.h)
1118 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
1119     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL headers are available])
1120     default_shared_modules="$default_shared_modules vfs_gpfs"
1123 #############################################
1124 # check if building on Isilon OneFS
1125 printf "%s" "checking for Isilon OneFS... "
1126 save_LIBS="$LIBS"
1127 LIBS="$LIBS -lisi_version"
1128 AC_TRY_LINK([#include <isi_version/isi_version.h>],
1129           [get_isilon_copyright()],
1130           samba_cv_HAVE_ONEFS=yes,
1131           samba_cv_HAVE_ONEFS=no)
1132 echo $samba_cv_HAVE_ONEFS
1133 if test x"$samba_cv_HAVE_ONEFS" = x"yes"; then
1134     AC_DEFINE(HAVE_ONEFS,1,[Whether building on Isilon OneFS])
1135     default_shared_modules="$default_shared_modules vfs_onefs vfs_onefs_shadow_copy perfcount_onefs"
1136     default_static_modules="$default_static_modules"
1137     ONEFS_LIBS="-lisi_acl -lisi_ecs -lisi_event -lisi_util"
1138     # Need to also add general libs for oplocks support
1139     save_LIBS="$save_LIBS -lisi_ecs -lisi_event -lisi_util -ldevstat"
1141 AC_SUBST(ONEFS_LIBS)
1142 LIBS="$save_LIBS"
1144 # Note that all the libunwind symbols in the API are defined to internal
1145 # platform-specific version, so we must include libunwind.h before checking
1146 # any of them.
1147 AC_MSG_CHECKING([for libunwind])
1148 save_LIBS=$LIBS
1150 UNWIND_ARCH="unknown"
1151 if test x"$UNAME_I" != x"unknown"; then
1152         UNWIND_ARCH="$UNAME_I"
1153 elif test x"$UNAME_M" != x"unknown"; then
1154         UNWIND_ARCH="$UNAME_M"
1155 elif test x"$UNAME_P" != x"unknown"; then
1156         UNWIND_ARCH="$UNAME_P"
1159 case "$UNWIND_ARCH" in
1160         unknown)
1161                 # This probably won't link without
1162                 # the platform-specific libunwind.
1163                 LIBS="$LIBS -lunwind"
1164                 ;;
1165         i386|i586|i686)
1166                 # Add the platform-specific libunwind module.
1167                 LIBS="$LIBS -lunwind -lunwind-x86"
1168                 ;;
1169         *)
1170                 # Add the platform-specific libunwind module.
1171                 # based on uname -i, uname -m or uname -p
1172                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1173                 ;;
1174 esac
1176 AC_TRY_LINK(
1177     [
1178 #ifdef HAVE_LIBUNWIND_H
1179 #include <libunwind.h>
1180 #endif
1181     ],
1182     [
1183         unw_context_t ctx; unw_cursor_t cur;
1184         char buf[256]; unw_word_t off;
1185         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1186         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1187     ],
1188     [
1189         AC_MSG_RESULT(yes)
1190         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1192         # If we have libunwind, test whether we also have libunwind-ptrace
1193         # which would let us unwind arbitrary processes.
1194         save_LIBS=$LIBS
1195         AC_CHECK_HEADERS(libunwind-ptrace.h)
1196         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1197             [
1198                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1199                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1200                     [Whether libunwind-ptrace.a is available.])
1201             ],
1202             [ LIBUNWIND_PTRACE="" ])
1204         LIBS=$save_LIBS
1205     ],
1206     [
1207         AC_MSG_RESULT(no)
1208         LIBS=$save_LIBS
1209     ])
1211 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1212 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1213     AC_CHECK_HEADERS(sys/ptrace.h)
1214     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1215     AC_TRY_LINK(
1216             [
1217 #if HAVE_SYS_TYPES_H
1218 #include <sys/types.h>
1219 #endif
1220 #if HAVE_SYS_PTRACE_H
1221 #include <sys/ptrace.h>
1222 #endif
1223             ],
1224             [
1225                 pid_t me = (pid_t)-1;
1226                 ptrace(PTRACE_ATTACH, me, 0, 0);
1227                 ptrace(PTRACE_DETACH, me, 0, 0);
1228                 return 0;
1229             ],
1230             [
1231                 AC_MSG_RESULT(yes)
1232                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1233                     [Whether the Linux ptrace(2) interface is available.])
1234             ],
1235             [
1236                 AC_MSG_RESULT(no)
1237                 LIBUNWIND_PTRACE=""
1238             ])
1241 AC_SUBST(LIBUNWIND_PTRACE)
1243 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1244 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1245 AC_CHECK_FUNCS(__getcwd _getcwd)
1246 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1247 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1248 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1249 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1250 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1251 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1252 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1253 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1254 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1255 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1256 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1257 AC_CHECK_FUNCS(prctl)
1259 AC_TRY_COMPILE([
1260 #ifdef HAVE_SYS_PRCTL_H
1261 #include <sys/prctl.h>
1262 #endif
1264 [int i; i = prtcl(0); ],
1265 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1270 case "$host_os" in
1271     *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1272        # glibc <= 2.3.2 has a broken getgrouplist
1273        AC_CACHE_CHECK([for good getgrouplist],samba_cv_linux_getgrouplist_ok,[AC_TRY_RUN([
1274 #include <unistd.h>
1275 #include <sys/utsname.h>
1276 main() {
1277        /* glibc up to 2.3 has a broken getgrouplist */
1278 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1279        int libc_major = __GLIBC__;
1280        int libc_minor = __GLIBC_MINOR__;
1282        if (libc_major < 2)
1283               exit(1);
1284        if ((libc_major == 2) && (libc_minor <= 3))
1285               exit(1);
1286 #endif
1287        exit(0);
1289 ], [samba_cv_linux_getgrouplist_ok=yes],
1290    [samba_cv_linux_getgrouplist_ok=no],
1291    [samba_cv_linux_getgrouplist_ok=cross])])
1292        if test x"$samba_cv_linux_getgrouplist_ok" = x"yes"; then
1293           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1294        fi
1295        ;;
1296     *)
1297        AC_CHECK_FUNCS(getgrouplist)
1298        ;;
1299 esac
1302 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1305 if test x$ac_cv_func_stat64 = xno ; then
1306   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1307   AC_TRY_LINK([
1308 #if defined(HAVE_UNISTD_H)
1309 #include <unistd.h>
1310 #endif
1311 #include <sys/stat.h>
1312 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1313   AC_MSG_RESULT([$ac_cv_func_stat64])
1314   if test x$ac_cv_func_stat64 = xyes ; then
1315     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1316   fi
1319 if test x$ac_cv_func_lstat64 = xno ; then
1320   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1321   AC_TRY_LINK([
1322 #if defined(HAVE_UNISTD_H)
1323 #include <unistd.h>
1324 #endif
1325 #include <sys/stat.h>
1326 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1327   AC_MSG_RESULT([$ac_cv_func_lstat64])
1328   if test x$ac_cv_func_lstat64 = xyes ; then
1329     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1330   fi
1333 if test x$ac_cv_func_fstat64 = xno ; then
1334   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1335   AC_TRY_LINK([
1336 #if defined(HAVE_UNISTD_H)
1337 #include <unistd.h>
1338 #endif
1339 #include <sys/stat.h>
1340 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1341   AC_MSG_RESULT([$ac_cv_func_fstat64])
1342   if test x$ac_cv_func_fstat64 = xyes ; then
1343     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1344   fi
1347 #################################################
1348 # Check whether struct stat has timestamps with sub-second resolution.
1351 samba_cv_stat_hires=no
1352 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec], # Linux, Solaris
1353         [samba_cv_stat_hires=yes])
1354 AC_CHECK_MEMBERS([struct stat.st_mtimensec], # BSD, if defined _POSIX_SOURCE
1355         [samba_cv_stat_hires=yes])
1356 AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec], # BSD, if not defined _POSIX_SOURCE
1357         [samba_cv_stat_hires=yes])
1358 AC_CHECK_MEMBERS([struct stat.st_mtime_n], # AIX
1359         [samba_cv_stat_hires=yes])
1360 AC_CHECK_MEMBERS([struct stat.st_umtime], # Tru64
1361         [samba_cv_stat_hires=yes])
1363 if test x"$samba_cv_stat_hires" = x"yes" ; then
1364     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1365             [whether struct stat has sub-second timestamps])
1368 # recent FreeBSD, NetBSD have creation timestamps called birthtime:
1369 AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec])
1370 AC_CHECK_MEMBERS([struct stat.st_birthtime], AC_CHECK_MEMBERS([struct stat.st_birthtimensec]))
1373 AC_CACHE_CHECK([whether there is DOS flags support in the stat struct], samba_cv_stat_dos_flags,
1374     [
1375         AC_TRY_COMPILE(
1376             [#include <sys/stat.h>],
1377             [
1378                 int a = UF_DOS_ARCHIVE;
1379                 int h = UF_DOS_HIDDEN;
1380                 int r = UF_DOS_RO;
1381                 int s = UF_DOS_SYSTEM;
1382                 int i = UF_DOS_NOINDEX;
1383                 int f = UF_DOS_FLAGS;
1384             ],
1385             samba_cv_stat_dos_flags=yes, samba_cv_stat_dos_flags=no)
1386     ])
1388 if test x"$samba_cv_stat_dos_flags" = x"yes" ; then
1389     AC_DEFINE(HAVE_STAT_DOS_FLAGS, 1, [whether there is DOS flags support in the stat struct])
1392 AC_CACHE_CHECK([whether we can compile with __attribute__((destructor))],
1393                samba_cv_function_attribute_destructor,
1394                [
1395                  AC_COMPILE_IFELSE(
1396                         [
1397                                 __attribute__((destructor))
1398                                 static void cleanup(void) { }
1399                         ],
1400                         samba_cv_function_attribute_destructor=yes)
1401                 ])
1403 if test x"$samba_cv_function_attribute_destructor" = xyes ; then
1404    AC_DEFINE(HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR, 1,
1405              [whether we can compile with __attribute__((destructor))])
1408 #####################################
1409 # needed for SRV lookups
1410 AC_CHECK_LIB(resolv, dn_expand)
1411 AC_CHECK_LIB(resolv, _dn_expand)
1412 AC_CHECK_LIB(resolv, __dn_expand)
1415 # Check for the functions putprpwnam, set_auth_parameters,
1416 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1417 # Needed for OSF1 and HPUX.
1420 AC_LIBTESTFUNC(security, putprpwnam)
1421 AC_LIBTESTFUNC(sec, putprpwnam)
1423 AC_LIBTESTFUNC(security, set_auth_parameters)
1424 AC_LIBTESTFUNC(sec, set_auth_parameters)
1426 # UnixWare 7.x has its getspnam in -lgen
1427 AC_LIBTESTFUNC(gen, getspnam)
1429 AC_LIBTESTFUNC(security, getspnam)
1430 AC_LIBTESTFUNC(sec, getspnam)
1432 AC_LIBTESTFUNC(security, bigcrypt)
1433 AC_LIBTESTFUNC(sec, bigcrypt)
1435 AC_LIBTESTFUNC(security, getprpwnam)
1436 AC_LIBTESTFUNC(sec, getprpwnam)
1438 AC_CHECK_FUNCS(strsignal)
1440 ############################################
1441 # Check for EA implementations
1442 case "$host_os" in
1443   *osf*)
1444         AC_SEARCH_LIBS(getproplist, [proplist])
1445         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1446         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1447         AC_CHECK_FUNCS(sizeof_proplist_entry)
1448   ;;
1449   *freebsd4* | *dragonfly* )
1450         AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1451   ;;
1452   *solaris*)
1453         AC_CHECK_FUNCS(attropen)
1454   ;;
1455   *)
1456         AC_SEARCH_LIBS(getxattr, [attr])
1457         AC_CHECK_FUNCS(getxattr,[
1458                 AC_CHECK_FUNCS(lgetxattr fgetxattr listxattr llistxattr flistxattr removexattr lremovexattr fremovexattr setxattr lsetxattr fsetxattr)
1459                 ])
1460         AC_CHECK_FUNCS(getea,[
1461                 AC_CHECK_FUNCS(fgetea lgetea listea flistea llistea removeea fremoveea lremoveea setea fsetea lsetea)
1462                 ])
1463         AC_CHECK_FUNCS(attr_get,[
1464                 AC_CHECK_FUNCS(attr_list attr_set attr_remove attr_getf attr_listf attr_setf attr_removef)
1465                 ])
1466         AC_CHECK_FUNCS(extattr_delete_file,[
1467                 AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_link extattr_get_fd extattr_get_file extattr_get_link extattr_list_fd extattr_list_file extattr_list_link extattr_set_fd extattr_set_file extattr_set_link)
1468                 ])
1469   ;;
1470 esac
1472 ########################################################
1473 # Do xattr functions take additional options like on Darwin?
1474 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1475         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1476                 old_LIBS=$LIBS
1477                 LIBS="$LIBS $ACL_LIBS"
1478                 AC_TRY_COMPILE([
1479                         #include <sys/types.h>
1480                         #if HAVE_ATTR_XATTR_H
1481                         #include <attr/xattr.h>
1482                         #elif HAVE_SYS_XATTR_H
1483                         #include <sys/xattr.h>
1484                         #endif
1485                 ],[
1486                         getxattr(0, 0, 0, 0, 0, 0);
1487                 ],
1488                 [smb_attr_cv_xattr_add_opt=yes],
1489                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1490         ])
1491         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1492                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1493         fi
1496 AC_DISABLE_STATIC
1497 AC_ENABLE_SHARED
1499 # Set defaults
1500 PIE_CFLAGS=""
1501 PIE_LDFLAGS=""
1502 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1504 if test "x$enable_pie" != xno
1505 then
1506         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1507         [
1508                 cat > conftest.c <<EOF
1509 int foo;
1510 int main () { return 0;}
1512                 if AC_TRY_COMMAND_NO_STDERR([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c])
1513                 then
1514                         samba_cv_fpie=yes
1515                 else
1516                         samba_cv_fpie=no
1517                 fi
1518                 rm -f conftest*
1519         ])
1520         if test x"${samba_cv_fpie}" = x"yes"
1521         then
1522                 PIE_CFLAGS="-fPIE"
1523                 PIE_LDFLAGS="-pie"
1524         fi
1527 # Set defaults
1528 RELRO_LDFLAGS=""
1529 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1531 if test "x$enable_relro" != xno
1532 then
1533         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1534         [
1535                 cat > conftest.c <<EOF
1536 int foo;
1537 main () { return 0;}
1539                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1540                 then
1541                         samba_cv_relro=yes
1542                 else
1543                         samba_cv_relro=no
1544                 fi
1545                 rm -f conftest*
1546         ])
1547         if test x"${samba_cv_relro}" = x"yes"
1548         then
1549                 RELRO_LDFLAGS="-Wl,-z,relro"
1550         fi
1553 # Set defaults
1554 SYMSEXT="syms"
1555 AC_SUBST(SYMSEXT)
1557 # Assume non-shared by default and override below
1558 BLDSHARED="false"
1560 # these are the defaults, good for lots of systems
1561 HOST_OS="$host_os"
1562 LDSHFLAGS="-shared"
1563 MODULE_EXPORTS=""
1564 SONAMEFLAG="#"
1565 SHLD="\${CC} \${CFLAGS}"
1566 PICFLAG="${PIE_CFLAGS}"
1567 SHLIBEXT="so"
1568 DSO_EXPORTS=""
1570 # this bit needs to be modified for each OS that supports share libs
1571 # You need to specify how to create a shared library and
1572   # how to compile C code to produce PIC object files
1574   AC_MSG_CHECKING([ability to build shared libraries])
1576   # and these are for particular systems
1577   case "$host_os" in
1578                 *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu | *qnx*)
1579                         case "$host_os" in
1580                                 *linux*) AC_DEFINE(LINUX,1,[Whether the host os is linux]) ;;
1581                                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx]) ;;
1582                         esac
1583                         BLDSHARED="true"
1584                         LDSHFLAGS="-shared -Wl,-Bsymbolic"
1585                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1586                                 LDSHFLAGS_Z_NODEFS="-Wl,--allow-shlib-undefined"
1587                         fi
1588                         DYNEXP="-Wl,--export-dynamic"
1589                         PICFLAG="-fPIC"
1590                         SONAMEFLAG="-Wl,-soname="
1591                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1592                         ;;
1593                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1594                         BLDSHARED="true"
1595                         if test "${GCC}" = "yes"; then
1596                                 PICFLAG="-fPIC"
1597                                 SONAMEFLAG="-Wl,-soname="
1598                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1599                                         DYNEXP="-Wl,-E"
1600                                 fi
1601                                 LDSHFLAGS="-shared"
1602                         else
1603                                 PICFLAG="-KPIC"
1604                                 LDSHFLAGS="-G"
1605                         fi
1606                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1607                                 SONAMEFLAG="-Wl,-soname="
1608                         else
1609                                 SONAMEFLAG="-Wl,-h,"
1610                         fi
1611                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1612                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1613                         ;;
1614                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1615                         BLDSHARED="true"
1616                         LDSHFLAGS="-G"
1617                         SONAMEFLAG="-Wl,-h,"
1618                         PICFLAG="-KPIC"   # Is this correct for SunOS
1619                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1620                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1621                         ;;
1622                 *netbsd* | *freebsd* | *dragonfly* )
1623                         BLDSHARED="true"
1624                         LDSHFLAGS="-shared"
1625                         DYNEXP="-Wl,--export-dynamic"
1626                         SONAMEFLAG="-Wl,-soname,"
1627                         PICFLAG="-fPIC -DPIC"
1628                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1629                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1630                         ;;
1631                 *openbsd*)  BLDSHARED="true"
1632                         LDSHFLAGS="-shared"
1633                         DYNEXP="-Wl,-Bdynamic"
1634                         SONAMEFLAG="-Wl,-soname,"
1635                         PICFLAG="-fPIC"
1636                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1637                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1638                         ;;
1639                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1640                         case "$host_os" in
1641                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1642                         ;;
1643                         esac
1644                         BLDSHARED="true"
1645                         LDSHFLAGS="-Wl,-set_version,sgi1.0 -shared"
1646                         SONAMEFLAG="-Wl,-soname,"
1647                         if test "${GCC}" = "yes"; then
1648                                 PICFLAG="-fPIC"
1649                         else
1650                                 PICFLAG="-KPIC"
1651                         fi
1652                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1653                         ;;
1654                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1655                         BLDSHARED="true"
1656                         # use expfull to export underscored symbols
1657                         # add rtl to remove /lib/crt0.o warning
1658                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1659                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1660                         PICFLAG="-O2"
1661                         # as AIX code is always position independent...
1662                         # .po will just create compile warnings, use po.o:
1663                         if test "${GCC}" != "yes"; then
1664                                 ## for funky AIX compiler using strncpy()
1665                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000 -qhalt=e"
1666                         fi
1668                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1669                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1670                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1671                         ;;
1672                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1673                         # ia64: 64bit build using gcc with CFLAGS="-mpl64"
1674                         #       64bit build using HP's cc with CFLAGS="+DD64"
1675                         # hppa: 64bit build unsupported by gcc
1676                         #       64bit build using HP's cc with CFLAGS="+DA2.0w"
1677                         # HP-UX 11.00 ld needs PHSS_33034
1678                         BLDSHARED="true"
1679                         if test "${GCC}" = "yes"; then
1680                                 PICFLAG="-fPIC"
1681                                 LDSHFLAGS="-shared"
1682                         else
1683                                 PICFLAG="+z"
1684                                 LDSHFLAGS="-b"
1685                                 # "Uses depth-first symbol resolution"
1686                                 LDSHFLAGS="$LDSHFLAGS -Wl,-B,symbolic,-b"
1687                                 if test "$host_cpu" != "ia64"; then
1688                                         # "don't store literals in read-only memory" (?):
1689                                         PICFLAG="$PICFLAG +ESnolit"
1690                                 fi
1691                         fi
1692                         if test "$host_cpu" = "ia64"; then
1693                                 SHLIBEXT="so"
1694                                 # TODO: does the linker find the right 32/64 bit version of the libs? :
1695                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32:/usr/local/lib/hpux64:/usr/lib/hpux64"
1696                         else
1697                                 SHLIBEXT="sl"
1698                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1699                         fi
1700                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1701                                 SONAMEFLAG="-Wl,-soname="
1702                         else
1703                                 SONAMEFLAG="-Wl,+h,"
1704                         fi
1705                         # PIE/PIC flags at link time are required on HP-UX because
1706                         # linking requires a temporary source file, which is being
1707                         # compiled with the indicated flags - which need to contain
1708                         # PIC flags when we don't support PIE flags:
1709                         if test "$PIE_LDFLAGS" = "" ; then
1710                                 PIE_LDFLAGS=\${PICFLAG}
1711                         fi
1712                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1713                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1714                         ;;
1715                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1716                         BLDSHARED="true"
1717                         LDSHFLAGS="-shared"
1718                         SONAMEFLAG="-Wl,-soname,"
1719                         if test "${GCC}" = "yes"; then
1720                                 PICFLAG="-fPIC"
1721                         fi
1722                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1723                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1724                         for flags in "-expect_unresolved '*'" "-Wl,-expect_unresolved,'*'" ; do
1725                                 saved_ldflags="$LDFLAGS"
1726                                 AC_MSG_CHECKING([if $flags works])
1727                                 LDFLAGS="$flags $saved_ldflags"
1728                                 AC_TRY_LINK([],[],
1729                                         [AC_MSG_RESULT([yes])
1730                                         LDSHFLAGS_Z_NODEFS=$flags],
1731                                         AC_MSG_RESULT([no]))
1732                                 LDFLAGS="$saved_ldflags"
1733                                 test x"$LDSHFLAGS_Z_NODEFS" != x && break
1734                         done
1735                         ;;
1736                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1737                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1738                         ;;
1739                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1740                         BLDSHARED="true"
1741                         LDSHFLAGS="-shared"
1742                         SONAMEFLAG="-Wl,-soname,"
1743                         PICFLAG="-KPIC"
1744                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1745                         ;;
1746                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1747                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1748                         ;;
1749                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1750                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1751                         ;;
1752                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1753                         case "$host" in
1754                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1755                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1756                                         fi
1757                                         LDSHFLAGS="-G"
1758                                         DYNEXP="-Bexport"
1759                                 ;;
1760                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1761                         esac
1762                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1763                         ;;
1765                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1766                         if [ test "$GCC" != yes ]; then
1767                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1768                         fi
1769                         LDSHFLAGS="-G"
1770                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1771                         ;;
1772                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1773                         BLDSHARED="false"
1774                         LDSHFLAGS=""
1775                         ;;
1777                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1778                         BLDSHARED="true"
1779                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1780                         CFLAGS="$CFLAGS -fno-common"
1781                         SHLD="\${CC}"
1782                         SHLIBEXT="dylib"
1783                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1784                         SHLIBEXT="dylib"
1785                         # Since gcc doesn't fail on unrecognised options, the
1786                         # PIE test incorrectly succeeds. Darwin gcc does not
1787                         # actually support the PIE stuff.
1788                         PIE_LDFLAGS=
1789                         PIE_CFLAGS=
1790                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1791                         ;;
1793                 *)
1794                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1795                         ;;
1796   esac
1798 if test "$enable_shared" != "yes"; then
1799         BLDSHARED=false
1802 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1803         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1806 if test x"$BLDSHARED" = x"true" ; then
1807         LDFLAGS="$LDFLAGS -L./bin"
1810 AC_MSG_RESULT($BLDSHARED)
1812 if test x"$enable_developer" = x"yes" ; then
1813         default_as_needed=auto
1814 else
1815         default_as_needed=no
1817 AC_ARG_ENABLE(as-needed,
1818         AS_HELP_STRING([--enable-as-needed],
1819         [Turn on as-needed support if available (default=no)]),
1820         [enable_as_needed=$enableval],
1821         [enable_as_needed=$default_as_needed])
1822 if test "x$enable_as_needed" != xno; then
1823     saved_before_as_needed_ldflags="$LDFLAGS"
1824     for flags in "-Wl,--as-needed" "-Wl,-z,ignore" "-z ignore" ; do
1825         saved_ldflags="$LDFLAGS"
1826         AC_MSG_CHECKING([if $flags works])
1827         LDFLAGS="$flags $saved_ldflags"
1828         AC_TRY_LINK([],[],
1829                 [AC_MSG_RESULT([yes])
1830                 LD_AS_NEEDED_FLAG=$flags
1831                 ld_as_needed_flag_found=yes],
1832                 AC_MSG_RESULT([no]))
1833         LDFLAGS="$LD_AS_NEEDED_FLAG $saved_ldflags"
1834         test x"$ld_as_needed_flag_found" = xyes && break
1835     done
1838 if test x$ld_as_needed_flag_found = xyes -a x$enable_as_needed = xauto ; then
1839 # check if ld has bug described in https://bugzilla.samba.org/show_bug.cgi?id=7209#c17
1840         AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG has explicit external libs bug])
1841 cat > conftest_shb.c <<END
1842 void b() {}
1844 cat > conftest_sha.c <<END
1845 extern void b();
1846 void a() {
1847         b();
1850 cat > conftest.c <<END
1851 extern void a();
1852 int main() {
1853         a();
1854         return 0;
1858         rm -fr conftest
1859         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_sha.o conftest_sha.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1860         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_shb.o conftest_shb.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1861         TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1862         AC_TRY_COMMAND([$TESTCMD -o libconftest_shb.$SHLIBEXT conftest_shb.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1863         AC_TRY_COMMAND([$TESTCMD -o libconftest_sha.$SHLIBEXT conftest_sha.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1864         AC_TRY_COMMAND([$CC -o conftest conftest.c $LDFLAGS -L. -lconftest_sha -lconftest_shb 1>&AS_MESSAGE_LOG_FD 2>&1])
1865         if AC_TRY_COMMAND([eval "$LIB_PATH_VAR=. ./conftest 1>&AS_MESSAGE_LOG_FD 2>&1"])
1866         then
1867                 AC_MSG_RESULT([no])
1868         else
1869                 ld_as_needed_flag_found=no
1870                 LDFLAGS="$saved_before_as_needed_ldflags"
1871                 AC_MSG_RESULT([yes])
1872         fi
1873         rm conftest* libconftest*
1876 # check if we have to disable LD_AS_NEEDED_FLAG:
1877 # On some systems for a veriety of reasons linking with
1878 # -Wl,--as-needed -lreadline -lncurses fails
1879 # we have to retest, if these combination is detected before.
1880 # Bugzilla #7209
1882 if test x$ac_cv_lib_readline_rl_callback_handler_install = xyes ; then
1883         if test x$ld_as_needed_flag_found = xyes ; then
1884                 AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG works with readline])
1885                 # try if check no fails
1886                 save_LIBS=$LIBS
1887                 LIBS="$LIBS $TERMLIBS"
1888                 AC_TRY_LINK([], [rl_callback_handler_install();], [AC_MSG_RESULT([yes])],[ AC_MSG_RESULT([no]); LDFLAGS="$saved_before_as_needed_ldflags"])
1889                 LIBS="$save_LIBS"
1890         fi
1895 # for historical reasons almost all linkers don't complain about unresolved
1896 # symbols in shared libs. Except for the internal samba modules we want to get
1897 # errors when we produce a shared lib with unresolved symbols. On some
1898 # platforms unresolved symbols might be intended, so we might have to add
1899 # platform specific exceptions here.
1901 for flags in "-Wl,-z,defs" "-error_unresolved" "-Wl,-error_unresolved" ; do
1902         saved_ldflags="$LDFLAGS"
1903         AC_MSG_CHECKING([if $flags works])
1904         LDFLAGS="$flags $saved_ldflags"
1905         AC_TRY_LINK([],[],
1906         [AC_MSG_RESULT([yes])
1907         LDSHFLAGS_Z_DEFS=$flags
1908         ldshflags_z_defs_found=yes],
1909         AC_MSG_RESULT([no]))
1910         LDFLAGS=$saved_ldflags
1911         test x"$ldshflags_z_defs_found" = xyes && break
1912 done
1914 AC_MSG_CHECKING([LDSHFLAGS_Z_DEFS])
1915 AC_MSG_RESULT([$LDSHFLAGS_Z_DEFS])
1916 AC_MSG_CHECKING([LDFLAGS])
1917 AC_MSG_RESULT([$LDFLAGS])
1918 AC_MSG_CHECKING([DYNEXP])
1919 AC_MSG_RESULT([$DYNEXP])
1921 #######################################################
1922 # test whether building a shared library actually works
1923 if test $BLDSHARED = true; then
1925 AC_MSG_CHECKING([SHLD])
1926 AC_MSG_RESULT([$SHLD])
1927 AC_MSG_CHECKING([LDSHFLAGS])
1928 AC_MSG_RESULT([$LDSHFLAGS])
1930 AC_MSG_CHECKING([SHLIBEXT])
1931 AC_MSG_RESULT([$SHLIBEXT])
1932 AC_MSG_CHECKING([SONAMEFLAG])
1933 AC_MSG_RESULT([$SONAMEFLAG])
1935 AC_MSG_CHECKING([PICFLAG])
1936 AC_MSG_RESULT([$PICFLAG])
1938 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1939 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1941 AC_CACHE_CHECK([whether building shared libraries actually works],
1942                [ac_cv_shlib_works],[
1943    # try building a trivial shared library
1944    ac_cv_shlib_works=no
1945    # The $SHLD and $LDSHFLAGS variables may contain references to other
1946    # variables so they need to be eval'ed.
1947    if AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.o ${srcdir-.}/../tests/shlib.c 1>&AS_MESSAGE_LOG_FD])
1948    then
1949      TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1950      TESTCMD="$TESTCMD -o \"shlib.$SHLIBEXT\" shlib.o"
1951      if AC_TRY_COMMAND([eval $TESTCMD 1>&AS_MESSAGE_LOG_FD 2>&1])
1952      then
1953        ac_cv_shlib_works=yes
1954      fi
1955    fi
1956    rm -f "shlib.$SHLIBEXT" shlib.o
1959 if test $ac_cv_shlib_works = no; then
1960    BLDSHARED=false
1964 if test x"$BLDSHARED" != x"true"; then
1965         LDSHFLAGS="shared-libraries-disabled"
1966         SONAMEFLAG="shared-libraries-disabled"
1967         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1968         SHLD="shared-libraries-disabled"
1969         PICFLAG="${PIE_CFLAGS}"
1970         SHLIBEXT="shared_libraries_disabled"
1971         smbtorture4_possible=no
1974 AC_MSG_CHECKING([used PICFLAG])
1975 AC_MSG_RESULT([$PICFLAG])
1977 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1981 ###########################################################
1983 # Configuration of subsystems / libraries
1985 ###########################################################
1987 INSTALLLIBCMD_SH=:
1988 INSTALLLIBCMD_A=:
1989 UNINSTALLLIBCMD_SH=:
1990 UNINSTALLLIBCMD_A=:
1992 if test $BLDSHARED = true; then
1993         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
1994         UNINSTALLLIBCMD_SH="rm -f"
1996 if test $enable_static = yes; then
1997         INSTALLLIBCMD_A="\$(INSTALLCMD)"
1998         UNINSTALLLIBCMD_A="rm -f"
2001 #################################################
2002 # --disable-shared-libs
2003 # can be used to disable the internal use of shared libs altogether
2004 # (this only has an effect when building shared libs is enabled)
2006 USESHARED=false
2007 AC_SUBST(USESHARED)
2009 AC_MSG_CHECKING(whether to use shared libraries internally)
2010 AC_ARG_ENABLE([shared-libs],
2011         AS_HELP_STRING([--enable-shared-libs],
2012                 [Use shared libraries internally (default=yes)]),
2013         [enable_shared_libs=$enableval],
2014         [enable_shared_libs=yes])
2016 if test x"$enable_shared_libs" != x"no" ; then
2017         USESHARED=$BLDSHARED
2020 AC_MSG_RESULT([$USESHARED])
2022 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
2023         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
2026 #################################################
2027 # --with-static-libs=LIBS:
2028 #   link (internal) libs dynamically or statically?
2030 # If a subsystem is built as a library then this controls whether they are
2031 # linked into Samba targets statically or dynamically:
2033 # * If we build the shared library at all, we link dynamically by default.
2035 # * We only link statically if we don't build shared or if the library
2036 #   appears in the --with-static-libs configure option.
2038 # Example:
2039 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
2040 #   of linking the dynamic variant with -ltalloc.
2042 # NOTE: This option only affects libraries that we do not only build
2043 # but that samba also links against as libraries (as opposed to linking
2044 # the plain object files. - This has to be configured in Makefile.in.
2045 # So in particular it does not harm to give invalid or unknown names here.
2048 AC_ARG_WITH([static-libs],
2049         [AS_HELP_STRING([--with-static-libs=LIBS],
2050                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
2051         [AS_IF([test $withval],
2052                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
2053                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
2054                         eval LINK_$lib=STATIC
2055                 done], [])],
2056         [])
2059 # WORKAROUND:
2060 #   until we have organized other internal subsystems (as util, registry
2061 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
2062 #   dynamically to samba programs.
2064 LINK_LIBNETAPI=STATIC
2066 LINK_LIBSMBCLIENT=STATIC
2069 #  The library versions are hardcoded here
2070 #  and filled into the LIBFOO_SOVER variable.
2072 #  TODO: for talloc and tdb (at least), these should
2073 #  be extracted from their respective source directories
2075 AC_ARG_ENABLE(external_libtalloc, [AS_HELP_STRING([--enable-external-libtalloc], [Enable external talloc [default=auto]])],
2076 [ enable_external_libtalloc=$enableval ], [ enable_external_libtalloc=auto ])
2078 if test "x$enable_external_libtalloc" != xno
2079 then
2080         PKG_CHECK_MODULES(LIBTALLOC, talloc >= 2.0.1,
2081                 [ enable_external_libtalloc=yes ],
2082                 [ if test x$enable_external_libtalloc = xyes; then
2083                         AC_MSG_ERROR([Unable to find libtalloc])
2084                   else
2085                         enable_external_libtalloc=no
2086                   fi
2087                 ])
2090 if test "x$enable_external_libtalloc" = xno
2091 then
2092         m4_include(../lib/talloc/libtalloc.m4)
2093         LINK_LIBTALLOC=STATIC
2094         SMB_LIBRARY(talloc, 2)
2095         LIBTALLOC_OBJ0=""
2096         for obj in ${TALLOC_OBJ}; do
2097                 LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
2098         done
2099         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
2100         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TALLOC_CFLAGS}"
2101         AC_SUBST(LIBTALLOC_OBJ0)
2103         TALLOCTORT="bin/talloctort\$(EXEEXT)"
2104         AC_SUBST(TALLOCTORT)
2108 AC_ARG_ENABLE(external_libtdb,
2109         [AS_HELP_STRING([--enable-external-libtdb],
2110                 [Enable external tdb [default=auto]])],
2111                 [ enable_external_libtalloc=$enableval ],
2112                 [ enable_external_libtalloc=auto ])
2114 if test "x$enable_external_libtdb" != xno
2115 then
2116         PKG_CHECK_MODULES(LIBTDB, tdb >= 1.2.6,
2117                 [ enable_external_libtdb=yes ],
2118                 [
2119                 if test x$enable_external_libtdb = xyes; then
2120                         AC_MSG_ERROR([Unable to find libtdb])
2121                 else
2122                         enable_external_libtdb=no
2123                 fi
2124                 ])
2127 AC_SUBST(LIBTDB_OBJ0)
2128 if test "x$enable_external_libtdb" = xno
2129 then
2130         m4_include(../lib/tdb/libtdb.m4)
2131         LINK_LIBTDB=STATIC
2132         SMB_LIBRARY(tdb, 1)
2133         LIBTDB_OBJ0=""
2134         LIBTDB_LIBS="$LIBTDB_LIBS $TDB_DEPS"
2135         for obj in ${TDB_OBJ}; do
2136                 LIBTDB_OBJ0="${LIBTDB_OBJ0} ${tdbdir}/${obj}"
2137         done
2138         AC_SUBST(LIBTDB_OBJ0)
2139         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
2140         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TDB_CFLAGS}"
2142         TDBBACKUP="bin/tdbbackup\$(EXEEXT)"
2143         AC_SUBST(TDBBACKUP)
2144         TDBDUMP="bin/tdbdump\$(EXEEXT)"
2145         AC_SUBST(TDBDUMP)
2146         TDBRESTORE="bin/tdbrestore\$(EXEEXT)"
2147         AC_SUBST(TDBRESTORE)
2148         TDBTOOL="bin/tdbtool\$(EXEEXT)"
2149         AC_SUBST(TDBTOOL)
2150         TDBTORTURE="bin/tdbtorture\$(EXEEXT)"
2151         AC_SUBST(TDBTORTURE)
2152         ac_cv_have_tdb_err_nesting=yes
2153 else
2154         AC_TRY_COMPILE([#include "tdb.h"],
2155                        [enum TDB_ERROR err = TDB_ERR_NESTING],
2156                        ac_cv_have_tdb_err_nesting=yes,
2157                        ac_cv_have_tdb_err_nesting=no)
2160 if test x"$ac_cv_have_tdb_err_nesting" = xyes; then
2161    AC_DEFINE(HAVE_TDB_ERR_NESTING, 1, [Whether we have TDB_ERR_NESTING])
2164 SMB_LIBRARY(netapi, 0)
2165 SMB_LIBRARY(smbclient, 0)
2166 SMB_LIBRARY(smbsharemodes, 0)
2167 SMB_LIBRARY(addns, 0, no, [undefined API])
2171 ################
2173 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
2174 AC_TRY_RUN([#include <stdio.h>
2175 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
2176 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
2177 if test x"$samba_cv_have_longlong" = x"yes"; then
2178     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
2179     AC_CHECK_TYPE(intptr_t, unsigned long long)
2180 else
2181     AC_CHECK_TYPE(intptr_t, unsigned long)
2185 # Check if the compiler supports the LL prefix on long long integers.
2186 # AIX needs this.
2188 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
2189     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
2190         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
2191 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
2192    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
2196 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
2197 AC_TRY_RUN([#include <time.h>
2198 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
2199 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
2200 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
2201     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
2204 AC_CACHE_CHECK([for TIME_T_MAX],samba_cv_TIME_T_MAX,[
2205 AC_TRY_RUN([#include <time.h>
2206 main() {
2207         struct tm *tm;
2208         if (sizeof(time_t) == 8) {
2209                 time_t max_time = 0x7fffffffffffffffll;
2210                 tm = gmtime(&max_time);
2211                 /* This should fail with 32-bit tm_year. */
2212                 if (tm == NULL) {
2213                         /* Max time_t that works with 32-bit int tm_year in struct tm. */
2214                         max_time = 67768036191676799ll;
2215                         tm = gmtime(&max_time);
2216                         if (tm) {
2217                                 exit(0);
2218                         }
2219                 }
2220         }
2221         exit(1);
2223 samba_cv_TIME_T_MAX=yes,samba_cv_TIME_T_MAX=no,samba_cv_TIME_T_MAX=cross)])
2224 if test x"$samba_cv_TIME_T_MAX" = x"yes"; then
2225     AC_DEFINE(TIME_T_MAX,67768036191676799ll,[The maximum value of the 'time_t' type])
2229 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2230 AC_TRY_RUN([#include <stdio.h>
2231 #include <sys/stat.h>
2232 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
2233 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2234 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
2235     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
2238 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
2239 AC_TRY_RUN([
2240 #if defined(HAVE_UNISTD_H)
2241 #include <unistd.h>
2242 #endif
2243 #include <stdio.h>
2244 #include <sys/stat.h>
2245 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2246 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
2247 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
2248     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
2251 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2252 AC_TRY_RUN([
2253 #if defined(HAVE_UNISTD_H)
2254 #include <unistd.h>
2255 #endif
2256 #include <stdio.h>
2257 #include <sys/stat.h>
2258 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
2259 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2260 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2261     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2264 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
2265 AC_TRY_RUN([
2266 #if defined(HAVE_UNISTD_H)
2267 #include <unistd.h>
2268 #endif
2269 #include <stdio.h>
2270 #include <sys/stat.h>
2271 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2272 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
2273 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
2274     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
2277 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2278 AC_TRY_RUN([
2279 #if defined(HAVE_UNISTD_H)
2280 #include <unistd.h>
2281 #endif
2282 #include <stdio.h>
2283 #include <sys/stat.h>
2284 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2285 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2286 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2287     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2290 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2291 AC_TRY_RUN([
2292 #if defined(HAVE_UNISTD_H)
2293 #include <unistd.h>
2294 #endif
2295 #include <stdio.h>
2296 #include <sys/stat.h>
2297 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2298 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2299 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2300     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2303 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2304 AC_TRY_COMPILE([
2305 #if defined(HAVE_UNISTD_H)
2306 #include <unistd.h>
2307 #endif
2308 #include <sys/types.h>
2309 #include <dirent.h>],
2310 [DIR64 de;],
2311 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2312 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2313     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2316 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2317 AC_TRY_COMPILE([
2318 #if defined(HAVE_UNISTD_H)
2319 #include <unistd.h>
2320 #endif
2321 #include <sys/types.h>
2322 #include <dirent.h>],
2323 [struct dirent64 de;],
2324 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2325 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2326     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2329 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2330 AC_TRY_RUN([
2331 #if defined(HAVE_UNISTD_H)
2332 #include <unistd.h>
2333 #endif
2334 #include <sys/types.h>
2335 main() { dev_t dev; int i = major(dev); return 0; }],
2336 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2337 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2338     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2341 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2342 AC_TRY_RUN([
2343 #if defined(HAVE_UNISTD_H)
2344 #include <unistd.h>
2345 #endif
2346 #include <sys/types.h>
2347 main() { dev_t dev; int i = minor(dev); return 0; }],
2348 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2349 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2350     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2353 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2354 AC_TRY_RUN([
2355 #if defined(HAVE_UNISTD_H)
2356 #include <unistd.h>
2357 #endif
2358 #include <sys/types.h>
2359 main() { dev_t dev = makedev(1,2); return 0; }],
2360 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2361 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2362     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2365 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2366 AC_TRY_RUN([#include <stdio.h>
2367 main() { char c; c=250; exit((c > 0)?0:1); }],
2368 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2369 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2370     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2373 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2374 AC_TRY_COMPILE([#include <sys/types.h>
2375 #include <dirent.h>
2376 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2377 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2378 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2379     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2382 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2383 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2384 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2385 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2386     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2389 if test x"$libreplace_cv_HAVE_CLOCK_GETTIME_IN_LIBRT" = xyes ; then
2390         LIBS="$LIBS -lrt"
2393 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2394 AC_TRY_RUN([#include <sys/types.h>
2395 #include <dirent.h>
2396 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2397 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2398 di->d_name[0] == 0) exit(0); exit(1);} ],
2399 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2400 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2401     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2404 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2405 AC_TRY_COMPILE([#include <sys/types.h>
2406 #include <utime.h>],
2407 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2408 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2409 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2410     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2413 ##############
2414 # Check utmp details, but only if our OS offers utmp.h
2415 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2416 dnl  utmp and utmpx come in many flavours
2417 dnl  We need to check for many of them
2418 dnl  But we don't need to do each and every one, because our code uses
2419 dnl  mostly just the utmp (not utmpx) fields.
2421 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx getutxent)
2423 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2424 AC_TRY_COMPILE([#include <sys/types.h>
2425 #include <utmp.h>],
2426 [struct utmp ut;  ut.ut_name[0] = 'a';],
2427 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2428 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2429     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2432 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2433 AC_TRY_COMPILE([#include <sys/types.h>
2434 #include <utmp.h>],
2435 [struct utmp ut;  ut.ut_user[0] = 'a';],
2436 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2437 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2438     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2441 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2442 AC_TRY_COMPILE([#include <sys/types.h>
2443 #include <utmp.h>],
2444 [struct utmp ut;  ut.ut_id[0] = 'a';],
2445 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2446 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2447     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2450 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2451 AC_TRY_COMPILE([#include <sys/types.h>
2452 #include <utmp.h>],
2453 [struct utmp ut;  ut.ut_host[0] = 'a';],
2454 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2455 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2456     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2459 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2460 AC_TRY_COMPILE([#include <sys/types.h>
2461 #include <utmp.h>],
2462 [struct utmp ut;  time_t t; ut.ut_time = t;],
2463 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2464 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2465     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2468 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2469 AC_TRY_COMPILE([#include <sys/types.h>
2470 #include <utmp.h>],
2471 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2472 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2473 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2474     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2477 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2478 AC_TRY_COMPILE([#include <sys/types.h>
2479 #include <utmp.h>],
2480 [struct utmp ut;  ut.ut_type = 0;],
2481 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2482 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2483     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2486 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2487 AC_TRY_COMPILE([#include <sys/types.h>
2488 #include <utmp.h>],
2489 [struct utmp ut;  ut.ut_pid = 0;],
2490 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2491 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2492     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2495 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2496 AC_TRY_COMPILE([#include <sys/types.h>
2497 #include <utmp.h>],
2498 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2499 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2500 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2501     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2504 dnl Look for the IPv6 varient by preference. Many systems have both.
2505 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2506 AC_TRY_COMPILE([#include <sys/types.h>
2507 #include <utmp.h>],
2508 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2509 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2510 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2511     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2514 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2515 AC_TRY_COMPILE([#include <sys/types.h>
2516 #include <utmp.h>],
2517 [struct utmp ut;  ut.ut_addr = 0;],
2518 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2519 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2520     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2523 if test x$ac_cv_func_pututline = xyes ; then
2524   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2525   AC_TRY_COMPILE([#include <sys/types.h>
2526 #include <utmp.h>],
2527   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2528   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2529   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2530       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2531   fi
2534 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2535 AC_TRY_COMPILE([#include <sys/types.h>
2536 #include <utmpx.h>],
2537 [struct utmpx ux;  ux.ut_syslen = 0;],
2538 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2539 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2540     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2544 # end utmp details
2546 AC_CACHE_CHECK([for linux fallocate],samba_cv_HAVE_LINUX_FALLOCATE,[
2547 AC_TRY_COMPILE([
2548 #if defined(HAVE_UNISTD_H)
2549 #include <unistd.h>
2550 #endif
2551 #include <sys/types.h>
2552 #define _GNU_SOURCE
2553 #include <fcntl.h>
2554 #if defined(HAVE_LINUX_FALLOC_H)
2555 #include <linux/falloc.h>
2556 #endif],
2557 [int ret = fallocate(0, FALLOC_FL_KEEP_SIZE, 0, 10);],
2558 samba_cv_HAVE_LINUX_FALLOCATE=yes,samba_cv_HAVE_LINUX_FALLOCATE=no)])
2559 if test x"$samba_cv_HAVE_LINUX_FALLOCATE" = x"yes" && test x"$ac_cv_func_fallocate" = x"yes"; then
2560     AC_DEFINE(HAVE_LINUX_FALLOCATE,1,[Whether the Linux 'fallocate' function is available])
2563 AC_CACHE_CHECK([for linux fallocate64],samba_cv_HAVE_LINUX_FALLOCATE64,[
2564 AC_TRY_COMPILE([
2565 #if defined(HAVE_UNISTD_H)
2566 #include <unistd.h>
2567 #endif
2568 #include <sys/types.h>
2569 #define _GNU_SOURCE
2570 #include <fcntl.h>
2571 #if defined(HAVE_LINUX_FALLOC_H)
2572 #include <linux/falloc.h>
2573 #endif],
2574 [int ret = fallocate64(0, FALLOC_FL_KEEP_SIZE, 0, 10);],
2575 samba_cv_HAVE_LINUX_FALLOCATE64=yes,samba_cv_HAVE_LINUX_FALLOCATE64=no)])
2576 if test x"$samba_cv_HAVE_LINUX_FALLOCATE64" = x"yes" && test x"$ac_cv_func_fallocate64" = x"yes"; then
2577     AC_DEFINE(HAVE_LINUX_FALLOCATE64,1,[Whether the Linux 'fallocate64' function is available])
2580 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2581 AC_ARG_WITH(libiconv,
2582 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2584   if test "$withval" = "no" ; then
2585     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2586   else
2587      if test "$withval" != "yes" ; then
2588         ICONV_PATH_SPEC=yes
2589         ICONV_LOOK_DIRS="$withval"
2590      fi
2591   fi
2594 for i in $ICONV_LOOK_DIRS ; do
2596     save_LIBS="$LIBS"
2597     save_LDFLAGS="$LDFLAGS"
2598     save_CPPFLAGS="$CPPFLAGS"
2600     iconv_current_LIBS=""
2601     iconv_current_LDFLAGS=""
2602     iconv_current_CPPFLAGS=""
2604     ICONV_FOUND="no"
2605     unset libext
2607     #  This is here to handle -withval stuff for --with-libiconv
2608     #  Perhaps we should always add a -L
2609     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2611     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2612     # installation paths. This gets a little tricky since we might have iconv
2613     # in both libiconv and in libc. In this case the jm_ICONV test will always
2614     # succeed when the header is found. To counter this, make sure the
2615     # library directory is there and check the ABI directory first (which
2616     # should be harmless on other systems, but causes tons of linker warnings on
2617     # 64bit Ubuntu systems).
2618     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2619     # installed, I've decided to fix the linker warnings.
2620     # -- Kai
2621     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2622     for l in "lib" "lib32" "lib/hpux32"; do
2623         if test -d "$i/$l" ; then
2624                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2625                 LIBS=
2626                 export LDFLAGS LIBS CPPFLAGS
2627                 # Try to find iconv(3)
2628                 jm_ICONV($i/$l)
2629                 if test x"$ICONV_FOUND" = "xyes" ; then
2630                     libext="$l"
2631                     break
2632                 fi
2633         fi
2634     done
2636     if test x"$ICONV_FOUND" = "xyes" ; then
2637         iconv_current_LDFLAGS="-L$i/$libext"
2638         iconv_current_CPPFLAGS="-I$i/include"
2640         if test x"$jm_cv_lib_iconv" != x; then
2641             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2642         else
2643             # We found iconv in libc.
2644             iconv_current_LIBS=""
2645         fi
2647     fi
2649     if test x"$ICONV_FOUND" = "xyes" ; then
2651         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2652         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2653         LIBS="$save_LIBS $iconv_current_LIBS"
2654         export LDFLAGS LIBS CPPFLAGS
2656         default_dos_charset=no
2657         default_display_charset=no
2658         default_unix_charset=no
2660         # check for default dos charset name
2661         for j in CP850 IBM850 ; do
2662             rjs_CHARSET($j)
2663             default_dos_charset="$ICONV_CHARSET"
2664             if test x"$default_dos_charset" = x"$j"; then
2665                 break
2666             fi
2667         done
2669         # check for default display charset name
2670         for j in ASCII 646 ; do
2671             rjs_CHARSET($j)
2672             default_display_charset="$ICONV_CHARSET"
2673             if test x"$default_display_charset" = x"$j"; then
2674                 break
2675             fi
2676         done
2678         # check for default unix charset name
2679         for j in UTF-8 UTF8 ; do
2680             rjs_CHARSET($j)
2681             default_unix_charset="$ICONV_CHARSET"
2682             if test x"$default_unix_charset" = x"$j"; then
2683                 break
2684             fi
2685         done
2687         if test "$default_dos_charset" != "no" -a \
2688                 "$default_dos_charset" != "cross" -a \
2689                 "$default_display_charset" != "no" -a \
2690                 "$default_display_charset" != "cross" -a \
2691                 "$default_unix_charset" != "no" -a \
2692                 "$default_unix_charset" != "cross"
2693         then
2694                 samba_cv_HAVE_NATIVE_ICONV=yes
2695         else
2696             if test "$default_dos_charset" = "cross" -o \
2697                      "$default_display_charset" = "cross" -o \
2698                      "$default_unix_charset" = "cross"
2699             then
2700                     samba_cv_HAVE_NATIVE_ICONV=cross
2701             else
2702                     samba_cv_HAVE_NATIVE_ICONV=no
2703             fi
2704         fi
2706         # At this point, we have a libiconv candidate. We know that
2707         # we have the right headers and libraries, but we don't know
2708         # whether it does the conversions we want. We can't test this
2709         # because we are cross-compiling. This is not necessarily a big
2710         # deal, since we can't guarantee that the results we get now will
2711         # match the results we get at runtime anyway.
2712         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2713             default_dos_charset="CP850"
2714             default_display_charset="ASCII"
2715             default_unix_charset="UTF-8"
2716             samba_cv_HAVE_NATIVE_ICONV=yes
2717             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2718             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2719         fi
2721         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2723             CPPFLAGS=$save_CPPFLAGS
2724             LDFLAGS=$save_LDFLAGS
2725             LIBS=$save_LIBS
2727             if test x"$iconv_current_LIBS" != x; then
2728                 LIBS="$LIBS $iconv_current_LIBS"
2729             fi
2731             # Add the flags we need to CPPFLAGS and LDFLAGS
2732             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2733             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2735             # Turn the #defines into string literals
2736             default_dos_charset="\"$default_dos_charset\""
2737             default_display_charset="\"$default_display_charset\""
2738             default_unix_charset="\"$default_unix_charset\""
2740             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2741             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2742             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2743             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2745            break
2746         fi
2748     # We didn't find a working iconv, so keep going
2749     fi
2751     #  We only need to clean these up here for the next pass through the loop
2752     CPPFLAGS=$save_CPPFLAGS
2753     LDFLAGS=$save_LDFLAGS
2754     LIBS=$save_LIBS
2755     export LDFLAGS LIBS CPPFLAGS
2756 done
2757 unset libext
2760 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2761     AC_MSG_WARN([Sufficient support for iconv function was not found.
2762     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2763    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2764    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2765    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2769 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2770 AC_TRY_RUN([
2771 #include <sys/types.h>
2772 #include <fcntl.h>
2773 #ifndef F_GETLEASE
2774 #define F_GETLEASE      1025
2775 #endif
2776 main() {
2777        int fd = open("/dev/null", O_RDONLY);
2778        return fcntl(fd, F_GETLEASE, 0) == -1;
2781 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2782 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2783     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2786 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2787 AC_TRY_RUN([
2788 #include <sys/types.h>
2789 #include <fcntl.h>
2790 #include <signal.h>
2791 #ifndef F_NOTIFY
2792 #define F_NOTIFY 1026
2793 #endif
2794 main() {
2795         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2798 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2799 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2800     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2803 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2804 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h sys/inotify.h)
2805 AC_CHECK_FUNCS(inotify_init)
2806 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2808 samba_cv_HAVE_INOTIFY=yes,
2809 samba_cv_HAVE_INOTIFY=no,
2810 samba_cv_HAVE_INOTIFY=cross)
2812 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2813     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2816 #################################################
2817 # Check if FAM notifications are available. For FAM info, see
2818 #       http://oss.sgi.com/projects/fam/
2819 #       http://savannah.nongnu.org/projects/fam/
2820 AC_ARG_ENABLE(fam,
2821 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2823 if test x$enable_fam != xno; then
2824     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2825     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2826         # On IRIX, libfam requires libC, but other FAM implementations
2827         # might not need it.
2828         AC_CHECK_LIB(fam, FAMOpen2,
2829             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam";
2830             AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2831             [samba_cv_HAVE_LIBFAM=no])
2833         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2834             samba_fam_xtra=-lC
2835             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2836                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC";
2837                 AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2838                 [samba_cv_HAVE_LIBFAM=no])
2839             unset samba_fam_xtra
2840         fi
2841     fi
2842     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2843         default_shared_modules="$default_shared_modules vfs_notify_fam"
2844         AC_TRY_COMPILE([#include <fam.h>],
2845                     [enum FAMCodes code = FAMChanged;],
2846                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2847                         [Whether fam.h contains a typedef for enum FAMCodes]),
2848                     [])
2849     fi
2851     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2852         AC_CHECK_LIB(fam, FAMNoExists,
2853             [AC_DEFINE(HAVE_FAMNOEXISTS, 1, Define to 1 if there is support for FAMNoExists)])
2854     fi
2856     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2857         AC_MSG_ERROR(FAM support requested but FAM library not available )
2858     fi
2861 AC_SUBST(SMB_FAM_LIBS)
2863 #################################################
2864 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2867 with_dmapi_support=auto
2868 AC_MSG_CHECKING(whether to use DMAPI support)
2869 AC_ARG_WITH(dmapi,
2870 [AS_HELP_STRING([--with-dmapi], [Include DMAPI/XDSM support (default=auto)])],
2871 [ case "$withval" in
2872   yes|no)
2873     with_dmapi_support=$withval
2874     ;;
2875   esac ]
2877 AC_MSG_RESULT([$with_dmapi_support])
2879 if test x"$with_dmapi_support" != xno ; then
2880         SMB_CHECK_DMAPI([], [
2881                 AC_MSG_NOTICE(DMAPI support not present)
2882                 if test x"$with_dmapi_support" = xyes ; then
2883                         AC_MSG_ERROR(no DMAPI support found but requested!)
2884                 fi
2885                 ]
2886         )
2889 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2890 # Theoretically it should work with AIX JFS2 too but this needs testing
2891 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2892     default_shared_modules="$default_shared_modules vfs_tsmsm"
2895 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2896 AC_TRY_RUN([
2897 #include <sys/types.h>
2898 #include <fcntl.h>
2899 #include <signal.h>
2900 #include <sys/file.h>
2901 #ifndef LOCK_MAND
2902 #define LOCK_MAND       32
2903 #define LOCK_READ       64
2904 #endif
2905 main() {
2906         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2909 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2910 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2911     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2915 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2916 AC_TRY_COMPILE([#include <sys/types.h>
2917 #include <fcntl.h>],
2918 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2919 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2920 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2921     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2924 #################################################
2925 # Check for POSIX capability support
2927 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2928     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2929     [], [])
2931 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2933     ac_save_LIBS=$LIBS
2934     AC_LIBTESTFUNC(cap, cap_get_proc)
2936     AC_CACHE_CHECK([for POSIX capabilities],
2937             samba_cv_HAVE_POSIX_CAPABILITIES,
2938             [
2939                 AC_TRY_RUN([
2940 #include <sys/types.h>
2941 #include <sys/capability.h>
2942 main() {
2943  cap_t cap;
2944  cap_value_t vals[1];
2945  if (!(cap = cap_get_proc()))
2946    exit(1);
2947  vals[0] = CAP_CHOWN;
2948  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2949  cap_set_proc(cap);
2950  exit(0);
2952                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2953                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2954                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2955             ])
2957 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2958     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2959             [Whether POSIX capabilities are available])
2960 else
2961     LIBS=$ac_save_LIBS
2967 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2968 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2971 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2972 AC_TRY_COMPILE([#include <sys/types.h>
2973 #if defined(HAVE_RPC_RPC_H)
2974 #include <rpc/rpc.h>
2975 #endif],
2976 [int16 testvar;],
2977 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2978 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2979     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2982 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2983 AC_TRY_COMPILE([#include <sys/types.h>
2984 #if defined(HAVE_RPC_RPC_H)
2985 #include <rpc/rpc.h>
2986 #endif],
2987 [uint16 testvar;],
2988 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2989 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2990     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2993 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2994 AC_TRY_COMPILE([#include <sys/types.h>
2995 #if defined(HAVE_RPC_RPC_H)
2996 #include <rpc/rpc.h>
2997 #endif],
2998 [int32 testvar;],
2999 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
3000 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
3001     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
3004 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
3005 AC_TRY_COMPILE([#include <sys/types.h>
3006 #if defined(HAVE_RPC_RPC_H)
3007 #include <rpc/rpc.h>
3008 #endif],
3009 [uint32 testvar;],
3010 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
3011 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
3012     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
3016 dnl Some systems (SCO) have a problem including
3017 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
3018 dnl as a #define in <prot.h> and as part of an enum
3019 dnl in <rpc/rpc.h>.
3022 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
3023 AC_TRY_COMPILE([#include <sys/types.h>
3024 #ifdef HAVE_SYS_SECURITY_H
3025 #include <sys/security.h>
3026 #include <prot.h>
3027 #endif  /* HAVE_SYS_SECURITY_H */
3028 #if defined(HAVE_RPC_RPC_H)
3029 #include <rpc/rpc.h>
3030 #endif],
3031 [int testvar;],
3032 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
3033 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
3034     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
3037 AC_MSG_CHECKING([for test routines])
3038 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
3039            AC_MSG_RESULT(yes),
3040            AC_MSG_ERROR([cant find test code. Aborting config]),
3041            AC_MSG_WARN([cannot run when cross-compiling]))
3043 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
3044 AC_TRY_RUN([#include "${srcdir-.}/../tests/ftruncate.c"],
3045            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
3046 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
3047     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
3050 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
3051 AC_TRY_RUN([#include "${srcdir-.}/../tests/getgroups.c"],
3052            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
3053 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
3054     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
3057 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
3058 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
3059 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
3060 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
3061 AC_CHECK_FUNCS(getpagesize)
3063 ################################################
3064 # look for a method of setting the effective uid
3065 seteuid=no;
3067 if test $seteuid = no; then
3068 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
3069 AC_TRY_RUN([
3070 #define AUTOCONF_TEST 1
3071 #define USE_SETREUID 1
3072 #include "confdefs.h"
3073 #include "${srcdir-.}/lib/util_sec.c"],
3074            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
3075 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
3076     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
3080 # we check for setresuid second as it conflicts with AIO on Linux. 
3081 # see http://samba.org/~tridge/junkcode/aio_uid.c
3082 if test $seteuid = no; then
3083 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
3084 AC_TRY_RUN([
3085 #define AUTOCONF_TEST 1
3086 #define USE_SETRESUID 1
3087 #include "confdefs.h"
3088 #include "${srcdir-.}/lib/util_sec.c"],
3089            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
3090 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
3091     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
3095 if test $seteuid = no; then
3096 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
3097 AC_TRY_RUN([
3098 #define AUTOCONF_TEST 1
3099 #define USE_SETEUID 1
3100 #include "confdefs.h"
3101 #include "${srcdir-.}/lib/util_sec.c"],
3102            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
3103 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
3104     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
3108 if test $seteuid = no; then
3109 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
3110 AC_TRY_RUN([
3111 #define AUTOCONF_TEST 1
3112 #define USE_SETUIDX 1
3113 #include "confdefs.h"
3114 #include "${srcdir-.}/lib/util_sec.c"],
3115            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
3116 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
3117     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
3121 AC_CACHE_CHECK([for the Darwin initgroups system call],
3122         samba_cv_DARWIN_INITGROUPS,
3123         AC_TRY_LINK([
3124 #include <sys/syscall.h>
3125 #include <unistd.h>
3126         ],
3127         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
3128         samba_cv_DARWIN_INITGROUPS=yes,
3129         samba_cv_DARWIN_INITGROUPS=no)
3132 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
3133     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
3134         [Whether to use the Darwin-specific initgroups system call])
3137 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
3138 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock.c"],
3139            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
3140 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
3141     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
3144 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
3145 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock64.c"],
3146            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
3147 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
3148     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
3150 else
3153 dnl Don't check for 64 bit fcntl locking if we know that the
3154 dnl glibc2.1 broken check has succeeded.
3157   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
3158   AC_TRY_RUN([
3159 #if defined(HAVE_UNISTD_H)
3160 #include <unistd.h>
3161 #endif
3162 #include <stdio.h>
3163 #include <stdlib.h>
3165 #ifdef HAVE_FCNTL_H
3166 #include <fcntl.h>
3167 #endif
3169 #ifdef HAVE_SYS_FCNTL_H
3170 #include <sys/fcntl.h>
3171 #endif
3172 main() { struct flock64 fl64;
3173 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
3174 exit(0);
3175 #else
3176 exit(1);
3177 #endif
3179        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
3181   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
3182       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
3183   fi
3186 # glibc up to 2.3.6 had dangerously broken posix_fallocate(). DON'T USE IT.
3187 AC_CACHE_CHECK([for broken posix_fallocate],samba_cv_HAVE_BROKEN_POSIX_FALLOCATE,[
3188 AC_TRY_COMPILE([
3189   #define _XOPEN_SOURCE 600
3190   #include <stdlib.h>
3191   #if defined(__GLIBC__) && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4))
3192     probably broken posix_fallocate
3193   #endif
3194 ], [
3195 ], 
3196 samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=no,samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=yes)])
3197 if test x"$samba_cv_HAVE_BROKEN_POSIX_FALLOCATE" = xyes; then
3198         AC_DEFINE(HAVE_BROKEN_POSIX_FALLOCATE,, Whether we have a broken posix_fallocate)
3202 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
3203 AC_TRY_COMPILE([#include <sys/types.h>
3204 #include <sys/stat.h>
3205 #include <unistd.h>],
3206 [struct stat st;  st.st_blocks = 0;],
3207 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
3208 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
3209     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
3212 AC_CHECK_TYPES([blksize_t, blkcnt_t], [], [], [[#include <sys/stat.h>]])
3214 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
3215 AC_TRY_COMPILE([#include <sys/types.h>
3216 #include <sys/stat.h>
3217 #include <unistd.h>],
3218 [struct stat st;  st.st_blksize = 0;],
3219 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
3220 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
3221     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
3224 AC_CACHE_CHECK([for st_flags in struct stat],
3225         samba_cv_HAVE_STAT_ST_FLAGS,
3226         [
3227             AC_TRY_COMPILE([#include <sys/types.h>
3228 #include <sys/stat.h>
3229 #include <unistd.h>],
3230             [struct stat st;  st.st_flags = 0;],
3231             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3232             samba_cv_HAVE_STAT_ST_FLAGS=no,
3233             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3234         ])
3236 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3237     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3238                 [Whether the stat struct has a st_flags member])
3241 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3242 AC_TRY_COMPILE([
3243 #include <sys/types.h>
3244 #include <sys/acl.h>
3245 #if defined(HAVE_RPCSVC_NIS_H)
3246 #include <rpcsvc/nis.h>
3247 #endif],
3248 [int i;],
3249 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3250 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3251         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3254 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3255 AC_TRY_RUN([
3256 #include <stdio.h>
3257 #include <limits.h>
3258 #include <signal.h>
3260 void exit_on_core(int ignored) {
3261         exit(1);
3264 main() {
3265         char *newpath;
3266         signal(SIGSEGV, exit_on_core);
3267         newpath = realpath("/tmp", NULL);
3268         exit((newpath != NULL) ? 0 : 1);
3271 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3272 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3273     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3276 #################################################
3277 # check for AFS clear-text auth support
3278 samba_cv_WITH_AFS=no
3279 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3280 AC_ARG_WITH(afs,
3281 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
3282 [ case "$withval" in
3283   yes|auto)
3284     AC_MSG_RESULT($withval)
3285     samba_cv_WITH_AFS=$withval
3286     ;;
3287   *)
3288     AC_MSG_RESULT(no)
3289     ;;
3290   esac ],
3291   AC_MSG_RESULT(no)
3294 ####################################################
3295 # check for Linux-specific AFS fake-kaserver support
3296 samba_cv_WITH_FAKE_KASERVER=no
3297 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3298 AC_ARG_WITH(fake-kaserver,
3299 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
3300 [ case "$withval" in
3301   yes|auto)
3302     AC_MSG_RESULT($withval)
3303     samba_cv_WITH_FAKE_KASERVER=$withval
3304     ;;
3305   *)
3306     AC_MSG_RESULT(no)
3307     ;;
3308   esac ],
3309   AC_MSG_RESULT(no)
3312 #################################################
3313 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3314 if test x"$samba_cv_WITH_AFS" != x"no" ||
3315    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3317     # see if this box has the OpenSSL DES libraries
3318     AC_CHECK_LIB( crypto, DES_pcbc_encrypt, LIBS="$LIBS -lcrypto" , [AC_ERROR(OpenSSL library: libcrypto ot found!)] )
3320     # see if this box has the afs-headers in /usr/include/afs
3321     AC_MSG_CHECKING(for /usr/include/afs)
3322     if test -d /usr/include/afs; then
3323           AC_MSG_RESULT(yes)
3324     else
3325       AC_MSG_RESULT(no)
3326     fi
3328     # check for afs.h
3329     have_afs_headers=no
3330     AC_CHECK_HEADERS(afs.h afs/afs.h)
3331     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3332         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3333            test x"$samba_cv_WITH_AFS" = x"auto"; then
3334                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3335         else
3336                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3337         fi
3338     else
3339         have_afs_headers=yes
3340     fi
3343 FAKE_KASERVER_OBJ=""
3344 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3345     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3346     FAKE_KASERVER_OBJ="utils/net_afs.o"
3348 AC_SUBST(FAKE_KASERVER_OBJ)
3350 #################################################
3351 # check whether to compile AFS/NT ACL mapping module
3352 samba_cv_WITH_VFS_AFSACL=no
3353 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3354 AC_ARG_WITH(vfs-afsacl,
3355 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
3356 [ case "$withval" in
3357   yes|auto)
3358     AC_MSG_RESULT($withval)
3359     samba_cv_WITH_VFS_AFSACL=yes
3360     ;;
3361   *)
3362     AC_MSG_RESULT(no)
3363     ;;
3364   esac ],
3365   AC_MSG_RESULT(no)
3368 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3369    default_shared_modules="$default_shared_modules vfs_afsacl"
3371         
3372 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3373     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3376 #################################################
3377 # check for the DFS clear-text auth system
3378 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3379 AC_ARG_WITH(dfs,
3380 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3381 [ case "$withval" in
3382   yes)
3383     AC_MSG_RESULT(yes)
3384     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3385     ;;
3386   *)
3387     AC_MSG_RESULT(no)
3388     ;;
3389   esac ],
3390   AC_MSG_RESULT(no)
3393 ########################################################
3394 # Compile with LDAP support?
3396 with_ldap_support=auto
3397 AC_MSG_CHECKING([for LDAP support])
3399 AC_ARG_WITH(ldap,
3400 [AS_HELP_STRING([--with-ldap], [LDAP support (default=auto)])],
3401 [ case "$withval" in
3402     yes|no)
3403         with_ldap_support=$withval
3404         ;;
3405   esac ])
3407 AC_MSG_RESULT($with_ldap_support)
3409 SMBLDAP=""
3410 AC_SUBST(SMBLDAP)
3411 SMBLDAPUTIL=""
3412 AC_SUBST(SMBLDAPUTIL)
3414 if test x"$with_ldap_support" != x"no"; then
3416   ##################################################################
3417   # first test for ldap.h and lber.h
3418   # (ldap.h is required for this test)
3419   AC_CHECK_HEADERS(ldap.h lber.h)
3421   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3422         if test x"$with_ldap_support" = x"yes"; then
3423          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3424         else
3425          AC_MSG_WARN(ldap.h is needed for LDAP support)
3426         fi
3427         
3428         with_ldap_support=no
3429   fi
3431   ##################################################################
3432   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3433   # unsigned int in include/includes.h
3434   case $host_os in
3435         *hpux*)
3436          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3437          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3438         with_ldap_support=yes
3439         ;;
3440         *)
3441         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3442         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3443                 if test x"$with_ldap_support" = x"yes"; then
3444                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3445                 else
3446                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3447                 fi
3448                 with_ldap_support=no
3449         fi
3450         ;;
3451   esac
3454 if test x"$with_ldap_support" != x"no"; then
3455   ac_save_LIBS=$LIBS
3457   ##################################################################
3458   # we might need the lber lib on some systems. To avoid link errors
3459   # this test must be before the libldap test
3460   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3462   ########################################################
3463   # If ber_sockbuf_add_io() is available we can add
3464   # SASL wrapping hooks
3465   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3467   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3468                  AC_TRY_COMPILE([#include <ldap.h>],
3469                                 [int val = LDAP_OPT_SOCKBUF;],
3470                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3471                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3473   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3474           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3475         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3476   fi
3478   #######################################################
3479   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3480   # ldap logging and print it out in the samba logs
3481   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3482                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3483                  [AC_TRY_COMPILE([#include <lber.h>],
3484                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3485                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3486                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3488   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3489         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3490                   [Support for LDAP/LBER logging interception])
3491   fi
3493   ########################################################
3494   # now see if we can find the ldap libs in standard paths
3495   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3497   ########################################################
3498   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3499   # Check found in pam_ldap 145.
3500   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3502   LIBS="$LIBS $LDAP_LIBS"
3503   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3504     AC_TRY_COMPILE([
3505         #include <lber.h>
3506         #include <ldap.h>],
3507         [ldap_set_rebind_proc(0, 0, 0);],
3508         [smb_ldap_cv_ldap_set_rebind_proc=3],
3509         [smb_ldap_cv_ldap_set_rebind_proc=2]
3510     )
3511   ])
3513   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3515   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3517   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3518     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3519     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3520     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3521     default_shared_modules="$default_shared_modules";
3522     SMBLDAP="lib/smbldap.o"
3523     SMBLDAPUTIL="lib/smbldap_util.o"
3524     with_ldap_support=yes
3525     AC_MSG_CHECKING(whether LDAP support is used)
3526     AC_MSG_RESULT(yes)
3527   else
3528     if test x"$with_ldap_support" = x"yes"; then
3529         AC_MSG_ERROR(libldap is needed for LDAP support)
3530     else
3531         AC_MSG_WARN(libldap is needed for LDAP support)
3532     fi
3534     LDAP_LIBS=""
3535     with_ldap_support=no
3536   fi
3537   LIBS=$ac_save_LIBS
3541 #################################################
3542 # active directory support
3544 with_ads_support=auto
3545 AC_MSG_CHECKING([for Active Directory and krb5 support])
3547 AC_ARG_WITH(ads,
3548 [AS_HELP_STRING([--with-ads], [Active Directory support (default=auto)])],
3549 [ case "$withval" in
3550     yes|no)
3551         with_ads_support="$withval"
3552         ;;
3553   esac ])
3555 AC_MSG_RESULT($with_ads_support)
3557 FOUND_KRB5=no
3558 KRB5_LIBS=""
3560 if test x"$with_ldap_support" != x"yes"; then
3562     if test x"$with_ads_support" = x"yes"; then
3563         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3564     elif test x"$with_ads_support" = x"auto"; then
3565         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3566         with_ads_support=no
3567     fi
3569 else
3571     # Check to see whether there is enough LDAP functionality to be able
3572     # to build AD support.
3574 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3575 case "$host_os" in
3576         *hpux*)
3577     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3579     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3580         if test x"$with_ads_support" = x"yes"; then
3581             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3582         elif test x"$with_ads_support" = x"auto"; then
3583             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3584             with_ads_support=no
3585         fi
3586     fi
3587     ;;
3588         *)
3589     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3591     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3592         if test x"$with_ads_support" = x"yes"; then
3593             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3594         elif test x"$with_ads_support" = x"auto"; then
3595             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3596             with_ads_support=no
3597         fi
3598     fi
3599     ;;
3600 esac
3603     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3605     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3606         if test x"$with_ads_support" = x"yes"; then
3607             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3608         elif test x"$with_ads_support" = x"auto"; then
3609             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3610             with_ads_support=no
3611         fi
3612     fi
3616 if test x"$with_ads_support" != x"no"; then
3618   # Do no harm to the values of CFLAGS and LIBS while testing for
3619   # Kerberos support.
3621   if test x$FOUND_KRB5 = x"no"; then
3622     #################################################
3623     # check for location of Kerberos 5 install
3624     AC_MSG_CHECKING(for kerberos 5 install path)
3625     AC_ARG_WITH(krb5,
3626     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3627     [ case "$withval" in
3628       no)
3629         AC_MSG_RESULT(no krb5-path given)
3630         ;;
3631       yes)
3632         AC_MSG_RESULT(/usr)
3633         FOUND_KRB5=yes
3634         ;;
3635       *)
3636         AC_MSG_RESULT($withval)
3637         KRB5_CFLAGS="-I$withval/include"
3638         KRB5_CPPFLAGS="-I$withval/include"
3639         KRB5_LDFLAGS="-L$withval/lib"
3640         FOUND_KRB5=yes
3641         if test -x "$withval/bin/krb5-config"; then
3642                 KRB5CONFIG=$withval/bin/krb5-config
3643         fi
3644         ;;
3645       esac ],
3646       AC_MSG_RESULT(no krb5-path given)
3647     )
3648   fi
3650   #################################################
3651   # check for krb5-config from recent MIT and Heimdal kerberos 5
3652   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3653   AC_MSG_CHECKING(for working krb5-config)
3654   if test -x "$KRB5CONFIG" && $KRB5CONFIG --libs gssapi > /dev/null ; then
3655     ac_save_CFLAGS=$CFLAGS
3656     CFLAGS="";export CFLAGS
3657     ac_save_LDFLAGS=$LDFLAGS
3658     LDFLAGS="";export LDFLAGS
3659     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3660     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3661     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3662     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3663     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3664     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3665     FOUND_KRB5=yes
3666     AC_MSG_RESULT(yes)
3667   else
3668     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3669   fi
3671   if test x$FOUND_KRB5 = x"no"; then
3672     #################################################
3673     # see if this box has the SuSE location for the heimdal krb implementation
3674     AC_MSG_CHECKING(for /usr/include/heimdal)
3675     if test -d /usr/include/heimdal; then
3676       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3677           KRB5_CFLAGS="-I/usr/include/heimdal"
3678           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3679           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3680           FOUND_KRB5=yes
3681           AC_MSG_RESULT(yes)
3682       else
3683           KRB5_CFLAGS="-I/usr/include/heimdal"
3684           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3685           FOUND_KRB5=yes
3686           AC_MSG_RESULT(yes)
3687       fi
3688     else
3689       AC_MSG_RESULT(no)
3690     fi
3691   fi
3693   if test x$FOUND_KRB5 = x"no"; then
3694     #################################################
3695     # see if this box has the RedHat location for kerberos
3696     AC_MSG_CHECKING(for /usr/kerberos)
3697     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3698       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3699       KRB5_CFLAGS="-I/usr/kerberos/include"
3700       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3701       FOUND_KRB5=yes
3702       AC_MSG_RESULT(yes)
3703     else
3704       AC_MSG_RESULT(no)
3705     fi
3706   fi
3708   if test x$FOUND_KRB5 = x"no"; then
3709     #################################################
3710     # see if this box has the OpenBSD location for heimdal krb5
3711     AC_MSG_CHECKING(for /usr/include/kerberosV)
3712     if test -d /usr/include/kerberosV; then
3713       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3714       KRB5_LIBS="-lcrypto"
3715       FOUND_KRB5=yes
3716       AC_MSG_RESULT(yes)
3717     else
3718       AC_MSG_RESULT(no)
3719     fi
3720   fi
3722   ac_save_CFLAGS=$CFLAGS
3723   ac_save_CPPFLAGS=$CPPFLAGS
3724   ac_save_LDFLAGS=$LDFLAGS
3726   # remove needless evil rpath stuff as early as possible:
3727   LIB_REMOVE_USR_LIB(KRB5_LIBS)
3728   LIB_REMOVE_USR_LIB(KRB5_LDFLAGS)
3729   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3730   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3731   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3733   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3735   # now check for krb5.h. Some systems have the libraries without the headers!
3736   # note that this check is done here to allow for different kerberos
3737   # include paths
3738   AC_CHECK_HEADERS(krb5.h)
3740   if test x"$ac_cv_header_krb5_h" = x"no"; then
3742     # Give a warning if AD support was not explicitly requested,
3743     # i.e with_ads_support = auto, otherwise die with an error.
3745     if test x"$with_ads_support" = x"yes"; then
3746       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3747     else
3748       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3749     fi
3751     # Turn off AD support and restore CFLAGS and LIBS variables
3753     with_ads_support="no"
3755     CFLAGS=$ac_save_CFLAGS
3756     CPPFLAGS=$ac_save_CPPFLAGS
3757     LDFLAGS=$ac_save_LDFLAGS
3758   fi
3760   # check for new heimdal KRB5_DEPRECATED handling
3762   AC_CACHE_CHECK([for KRB5_DEPRECATED define taking an identifier],
3763                 samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER,[
3764     AC_TRY_COMPILE(
3765       [#define KRB5_DEPRECATED 1
3766       #include <krb5.h>],
3767       [],
3768       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=yes,
3769       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=no)])
3771   if test x"$samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER" = x"yes"; then
3772     AC_DEFINE(HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER, 1,
3773                [Whether to use deprecated krb5 interfaces])
3774   fi
3777 # Now we have determined whether we really want ADS support
3778 use_ads=no
3779 if test x"$with_ads_support" != x"no"; then
3780   use_ads=yes
3781   have_gssapi=no
3782   ac_save_LIBS=$LIBS
3784   # now check for gssapi headers.  This is also done here to allow for
3785   # different kerberos include paths
3786   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h gssapi/gssapi_ext.h com_err.h)
3788   ##################################################################
3789   # we might need the k5crypto and com_err libraries on some systems
3790   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3791   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3793   # Heimdal checks.
3794   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3795   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3796   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3798   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3799   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3801   ########################################################
3802   # now see if we can find the krb5 libs in standard paths
3803   # or as specified above
3804   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3805   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3807   ########################################################
3808   # now see if we can find the gssapi libs in standard paths
3809   if test x"$have_gssapi" != x"yes"; then
3810      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3811      AC_CHECK_FUNC_EXT(gss_wrap_iov, $KRB5_LIBS)
3812   fi
3814   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3815   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3816   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3817   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3818   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3819   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3820   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3821   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3822   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3823   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3824   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3825   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3826   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3827   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3828   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3829   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3830   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3831   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3832   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3833   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3834   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3835   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3836   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3837   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3838   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3839   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3840   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3841   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3842   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3843   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3844   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3845   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3846   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3847   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3848   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3849   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3850   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3851   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3852   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3853   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3854   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3855   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3856   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3857   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_alloc, $KRB5_LIBS)
3858   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_set_impersonate, $KRB5_LIBS)
3859   AC_CHECK_FUNC_EXT(krb5_get_creds, $KRB5_LIBS)
3860   AC_CHECK_FUNC_EXT(krb5_get_credentials_for_user, $KRB5_LIBS)
3861   AC_CHECK_FUNC_EXT(krb5_get_host_realm, $KRB5_LIBS)
3862   AC_CHECK_FUNC_EXT(krb5_free_host_realm, $KRB5_LIBS)
3864   # MIT krb5 1.8 does not expose this call (yet)
3865   AC_CHECK_DECLS(krb5_get_credentials_for_user, [], [], [#include <krb5.h>])
3867   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3868   # but does have the symbol
3869   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3871   LIBS="$KRB5_LIBS $LIBS"
3873   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3874         smb_krb5_cv_ticket_has_keyinfo,
3875         [
3876             AC_TRY_COMPILE(
3877             [
3878                 #include <krb5.h>
3879             ],
3880             [
3881                 krb5_ticket ticket;
3882                 krb5_kvno kvno;
3883                 krb5_enctype enctype;
3885                 enctype = ticket.enc_part.enctype;
3886                 kvno = ticket.enc_part.kvno;
3887             ],
3888             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3889             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3890         ])
3892   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3893         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3894             [Whether the krb5_ticket structure contains the kvno and enctype])
3895   fi
3897   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3898           smb_krb5_cv_creds_opt_free_context,
3899           [
3900                 AC_TRY_COMPILE([
3901                     #include <krb5.h>],
3902                     [
3903                         krb5_context ctx;
3904                         krb5_get_init_creds_opt *opt = NULL;
3905                         krb5_get_init_creds_opt_free(ctx, opt);
3906                     ],
3907                     [smb_krb5_cv_creds_opt_free_context=yes],
3908                     [smb_krb5_cv_creds_opt_free_context=no]
3909                 )
3910           ])
3912   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3913         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3914             [Whether krb5_get_init_creds_opt_free takes a context argument])
3915   fi
3917   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3918     AC_TRY_COMPILE([
3919         #include <krb5.h>],
3920         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3921         [smb_krb5_cv_verify_checksum=7],
3922         [smb_krb5_cv_verify_checksum=6],
3923     )
3924   ])
3925   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3927   AC_CACHE_CHECK([for checksum in krb5_checksum],
3928                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3929     AC_TRY_COMPILE([#include <krb5.h>],
3930       [krb5_checksum cksum; cksum.checksum.length = 0;],
3931       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3932       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3934   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3935     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3936                [Whether the krb5_checksum struct has a checksum property])
3937   fi
3939   AC_CACHE_CHECK([for etype in EncryptedData],
3940                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3941     AC_TRY_COMPILE([#include <krb5.h>],
3942       [EncryptedData edata; edata.etype = 0;],
3943       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3944       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3946   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3947     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3948                [Whether the EncryptedData struct has a etype property])
3949   fi
3951   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3952                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3953     AC_TRY_COMPILE([#include <krb5.h>],
3954       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3955       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3956       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3958   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3959     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3960                [Whether the krb5_ap_req struct has a ticket pointer])
3961   fi
3963   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3964                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3965     AC_TRY_COMPILE([#include <krb5.h>],
3966       [krb5_error err; err.e_data = NULL;],
3967       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3968       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3970   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3971     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3972                [Whether the krb5_error struct has a e_data pointer])
3973   fi
3975   AC_CACHE_CHECK([for krb5_crypto type],
3976                 samba_cv_HAVE_KRB5_CRYPTO,[
3977     AC_TRY_COMPILE([#include <krb5.h>],
3978       [krb5_crypto crypto;],
3979       samba_cv_HAVE_KRB5_CRYPTO=yes,
3980       samba_cv_HAVE_KRB5_CRYPTO=no)])
3982   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3983     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3984                [Whether the type krb5_crypto exists])
3985   fi
3987   AC_CACHE_CHECK([for krb5_encrypt_block type],
3988                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3989     AC_TRY_COMPILE([#include <krb5.h>],
3990       [krb5_encrypt_block block;],
3991       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3992       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3994   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3995     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3996                [Whether the type krb5_encrypt_block exists])
3997   fi
3999   AC_CACHE_CHECK([for addrtype in krb5_address],
4000                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
4001     AC_TRY_COMPILE([#include <krb5.h>],
4002       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
4003       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
4004       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
4006   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
4007     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
4008                [Whether the krb5_address struct has a addrtype property])
4009   fi
4011   AC_CACHE_CHECK([for addr_type in krb5_address],
4012                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
4013     AC_TRY_COMPILE([#include <krb5.h>],
4014       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
4015       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
4016       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
4018   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
4019     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
4020               [Whether the krb5_address struct has a addr_type property])
4021   fi
4023   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
4024                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
4025                  [AC_TRY_COMPILE([#include <krb5.h>],
4026     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
4027     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
4029   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
4030     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
4031               [Whether the krb5_ticket struct has a enc_part2 property])
4032   fi
4034   AC_CACHE_CHECK([for keyblock in krb5_creds],
4035                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
4036     AC_TRY_COMPILE([#include <krb5.h>],
4037       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
4038       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
4039       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
4041   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
4042     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
4043               [Whether the krb5_creds struct has a keyblock property])
4044   fi
4046   AC_CACHE_CHECK([for session in krb5_creds],
4047                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
4048     AC_TRY_COMPILE([#include <krb5.h>],
4049       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
4050       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
4051       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
4053   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
4054     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
4055               [Whether the krb5_creds struct has a session property])
4056   fi
4058   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
4059                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
4060     AC_TRY_COMPILE([#include <krb5.h>],
4061       [krb5_keyblock key; key.keyvalue.data = NULL;],
4062       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
4063       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
4065   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
4066     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
4067               [Whether the krb5_keyblock struct has a keyvalue property])
4068   fi
4070   found_arcfour_hmac=no
4071   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
4072                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
4073     AC_TRY_COMPILE([#include <krb5.h>],
4074       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
4075       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
4076       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
4077   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
4078                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
4079     AC_TRY_COMPILE([#include <krb5.h>],
4080       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
4081       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
4082       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
4083 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
4084 # w.r.t. arcfour and windows, so we must not enable it here
4085   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
4086           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
4087     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
4088               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type definition is available])
4089     found_arcfour_hmac=yes
4090   fi
4091   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC],
4092                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC,[
4093     AC_TRY_COMPILE([#include <krb5.h>],
4094       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC;],
4095       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=yes,
4096       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=no)])
4097   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC" = x"yes"; then
4098     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC,1,
4099               [Whether the ENCTYPE_ARCFOUR_HMAC key type definition is available])
4100     found_arcfour_hmac=yes
4101   fi
4103   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
4104                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
4105     AC_TRY_COMPILE([#include <krb5.h>],
4106       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
4107       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
4108       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
4110   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
4111     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
4112               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
4113   fi
4115   AC_CACHE_CHECK([for KV5M_KEYTAB],
4116                  samba_cv_HAVE_KV5M_KEYTAB,[
4117     AC_TRY_COMPILE([#include <krb5.h>],
4118       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
4119       samba_cv_HAVE_KV5M_KEYTAB=yes,
4120       samba_cv_HAVE_KV5M_KEYTAB=no)])
4122   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
4123       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
4124              [Whether the KV5M_KEYTAB option is available])
4125   fi
4127   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
4128                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
4129     AC_TRY_COMPILE([#include <krb5.h>],
4130       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
4131       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
4132       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
4134   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
4135     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
4136               [Whether KRB5_KU_OTHER_CKSUM is available])
4137   fi
4139   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
4140                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
4141     AC_TRY_COMPILE([#include <krb5.h>],
4142       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
4143       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
4144       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
4146   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
4147     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
4148               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
4149   fi
4151   AC_CACHE_CHECK([for the krb5_princ_component macro],
4152                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
4153     AC_TRY_LINK([#include <krb5.h>],
4154       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
4155       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
4156       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
4158   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
4159     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
4160                [Whether krb5_princ_component is available])
4161   fi
4163   AC_CACHE_CHECK([for key in krb5_keytab_entry],
4164                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
4165     AC_TRY_COMPILE([#include <krb5.h>],
4166       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
4167       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
4168       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
4170   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
4171     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
4172               [Whether krb5_keytab_entry has key member])
4173   fi
4175   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
4176                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
4177     AC_TRY_COMPILE([#include <krb5.h>],
4178       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
4179       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
4180       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
4182   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
4183     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
4184               [Whether krb5_keytab_entry has keyblock member])
4185   fi
4187   AC_CACHE_CHECK([for magic in krb5_address],
4188                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
4189     AC_TRY_COMPILE([#include <krb5.h>],
4190       [krb5_address addr; addr.magic = 0;],
4191       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
4192       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
4194   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
4195     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
4196               [Whether the krb5_address struct has a magic property])
4197   fi
4199   AC_CACHE_CHECK([for WRFILE: keytab support],
4200                 samba_cv_HAVE_WRFILE_KEYTAB,[
4201     AC_TRY_RUN([
4202 #include<krb5.h>
4203   main()
4204   {
4205     krb5_context context;
4206     krb5_keytab keytab;
4208     krb5_init_context(&context);
4209     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
4210   }],
4211   samba_cv_HAVE_WRFILE_KEYTAB=yes,
4212   samba_cv_HAVE_WRFILE_KEYTAB=no)])
4214   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
4215       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
4216                [Whether the WRFILE:-keytab is supported])
4217   fi
4219   AC_CACHE_CHECK([for krb5_realm type],
4220                 samba_cv_HAVE_KRB5_REALM_TYPE,[
4221     AC_TRY_COMPILE([#include <krb5.h>],
4222       [krb5_realm realm;],
4223       samba_cv_HAVE_KRB5_REALM_TYPE=yes,
4224       samba_cv_HAVE_KRB5_REALM_TYPE=no)])
4226   if test x"$samba_cv_HAVE_KRB5_REALM_TYPE" = x"yes"; then
4227     AC_DEFINE(HAVE_KRB5_REALM_TYPE,1,
4228                [Whether the type krb5_realm exists])
4229   fi
4231   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
4232                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
4233     AC_TRY_COMPILE([#include <krb5.h>],
4234     [
4235     krb5_context context;
4236     krb5_principal principal;
4237     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
4238     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
4239     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
4241   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
4242     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
4243               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
4244   fi
4246   AC_CACHE_CHECK([for krb5_addresses type],
4247                 samba_cv_HAVE_KRB5_ADDRESSES,[
4248     AC_TRY_COMPILE([#include <krb5.h>],
4249       [krb5_addresses addr;],
4250       samba_cv_HAVE_KRB5_ADDRESSES=yes,
4251       samba_cv_HAVE_KRB5_ADDRESSES=no)])
4253   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
4254     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
4255                [Whether the type krb5_addresses type exists])
4256   fi
4258   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
4259                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
4260     AC_TRY_COMPILE([#include <krb5.h>],
4261     [
4262     krb5_mk_error(0,0,0);],
4263     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
4264     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
4266   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
4267     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
4268               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
4269   fi
4271   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
4272     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
4273         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
4274         AC_TRY_RUN_STRICT([
4275                 #include <stdlib.h>
4276                 #include <krb5.h>
4277                 int main(void) {
4278                         krb5_context context = NULL;
4279                         char *str = NULL;
4280                         krb5_enctype_to_string(context, 1, &str);
4281                         if (str) free (str); 
4282                         return 0;
4283                 }
4284                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4285                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
4286                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
4288     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4289       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4290                 [whether krb5_enctype_to_string takes krb5_context argument])
4291     fi
4293     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4294         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
4295         AC_TRY_RUN_STRICT([
4296                 #include <krb5.h>
4297                 int main(void) {
4298                         char buf[256];
4299                         krb5_enctype_to_string(1, buf, 256);
4300                         return 0;
4301                 }
4302                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4303                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
4304                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
4306     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
4307       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4308                 [whether krb5_enctype_to_string takes size_t argument])
4309     fi
4310   fi
4312   AC_CACHE_CHECK([for krb5_principal_get_realm],
4313                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4314     AC_TRY_LINK([#include <krb5.h>],
4315       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4316       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4317       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4319   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4320     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4321                [Whether the function krb5_principal_get_realm is defined])
4322   fi
4324   AC_CACHE_CHECK([for krb5_princ_realm],
4325                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4326     AC_TRY_LINK([#include <krb5.h>],
4327       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
4328       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
4329       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
4331   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
4332     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
4333                [Whether the macro krb5_princ_realm is defined])
4334   fi
4336   #
4337   #
4338   # Now the decisions whether we can support krb5
4339   #
4340   # NOTE: all tests should be done before this block!
4341   #
4342   #
4343   if test x"$found_arcfour_hmac" != x"yes"; then
4344     AC_MSG_WARN(arcfour-hmac-md5 encryption type not found in -lkrb5)
4345     use_ads=no
4346   fi
4348   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4349     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4350     use_ads=no
4351   fi
4353   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
4354           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
4355   then
4356     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4357     use_ads=no
4358   fi
4360   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4361           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4362   then
4363     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4364     use_ads=no
4365   fi
4367   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4368           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4369   then
4370     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4371     use_ads=no
4372   fi
4374   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
4375           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
4376   then
4377     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
4378     use_ads=no
4379   fi
4381   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
4383       # We only need the following functions if we can't get the enctype
4384       # and kvno out of the ticket directly (ie. on Heimdal).
4386       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
4387       then
4388         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
4389         use_ads=no
4390       fi
4392       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
4393       then
4394         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
4395         use_ads=no
4396       fi
4398   fi
4400   if test x"$use_ads" = x"yes"; then
4401     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4402     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4403     if test x"$have_gssapi" = x"yes"; then
4404       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
4405     fi
4406   else
4407     if test x"$with_ads_support" = x"yes"; then
4408         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4409     else
4410         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4411     fi
4412     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4413     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4414     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4415     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4416     KRB5_LIBS=""
4417     with_ads_support=no
4418   fi
4419   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4420   AC_MSG_RESULT([$use_ads])
4422 LIBS="$ac_save_LIBS"
4425 if test x"$use_ads" != xyes; then
4426         smbtorture4_possible=no
4429 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4430 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4433 ########################################################
4434 # Compile with DNS Updates support?
4436 with_dnsupdate_support=auto
4437 AC_MSG_CHECKING([whether to enable DNS Updates support])
4439 AC_ARG_WITH(dnsupdate,
4440 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default=auto)])],
4441 [ case "$withval" in
4442     yes|no)
4443         with_dnsupdate_support=$withval
4444         ;;
4445   esac ])
4447 AC_MSG_RESULT($with_dnsupdate_support)
4449 if test x"$with_dnsupdate_support" != x"no"; then
4451   ################################################################
4452   # first test for AD / GSSAPI support being enabled
4453         if test x"$have_gssapi" != xyes ; then
4454                 if test x"$with_dnsupdate_support" = x"yes" ; then
4455                         AC_MSG_ERROR(DNS Updates support only possible with AD and GSSAPI support)
4456                 else
4457                         AC_MSG_NOTICE(DNS Updates support only possible with AD and GSSAPI support)
4458                         with_dnsupdate_support=no
4459                 fi
4460         fi
4461   ##################################################################
4462   # then test for uuid.h (necessary to generate unique DNS keynames
4463   # (uuid.h is required for this test)
4464         AC_CHECK_HEADERS(uuid/uuid.h)
4466         
4467         if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4468                 if test x"$with_dnsupdate_support" = x"yes"; then
4469                         AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4470                 else
4471                         AC_MSG_NOTICE(uuid.h is needed to enable DNS Updates support)
4472                 fi
4473                 with_dnsupdate_support=no
4474         fi
4477 if test x"$with_dnsupdate_support" != x"no"; then
4479   ########################################################
4480   # Now see if we can find the uuid libs in standard paths
4481   # On some systems, the uuid API is in libc, so we have to
4482   # be careful not to insert a spurious -luuid.
4484   UUID_LIBS=""
4485   AC_LIBTESTFUNC(uuid, uuid_generate,
4486           [
4487             case " $LIBS " in
4488                 *\ -luuid\ *)
4489                 UUID_LIBS="-luuid"
4490                 SMB_REMOVE_LIB(uuid)
4491                 ;;
4492             esac
4494             with_dnsupdate_support=yes
4495             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4496         ],
4497         [
4498             if test x"$with_dnsupdate_support" = x"yes"; then
4499                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4500             else
4501                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4502             fi
4503             with_dnsupdate_support=no
4504         ])
4506   # finally print out the result:
4507 AC_MSG_CHECKING(whether DNS Updates support is used)
4508 AC_MSG_RESULT([$with_dnsupdate_support])
4511 #################################################
4512 # check for automount support
4513 AC_MSG_CHECKING(whether to use automount)
4514 AC_ARG_WITH(automount,
4515 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4516 [ case "$withval" in
4517   yes)
4518     AC_MSG_RESULT(yes)
4519     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4520     ;;
4521   *)
4522     AC_MSG_RESULT(no)
4523     ;;
4524   esac ],
4525   AC_MSG_RESULT(no)
4528 #################################################
4529 # Check for a PAM clear-text auth, accounts, password
4530 # and session support. Most PAM implementations keep their
4531 # headers in /usr/include/security. Darwin keeps its in
4532 # /usr/include/pam.
4534 with_pam_for_crypt=no
4535 try_pam=auto
4536 AC_MSG_CHECKING(whether to try PAM support)
4537 AC_ARG_WITH(pam,
4538 [AS_HELP_STRING([--with-pam], [Include PAM support (default=auto)])],
4539 [ case "$withval" in
4540   yes|no|auto)
4541     try_pam=$withval
4542     ;;
4543   esac
4545 AC_MSG_RESULT([$try_pam])
4547 use_pam=no
4548 create_pam_modules=no
4549 if test x"${try_pam}" != x"no";then
4550         use_pam=yes
4551         create_pam_modules=yes
4553         # Most systems have PAM headers in /usr/include/security, but Darwin
4554         # has them in /usr/include/pam.
4555         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4556         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4557                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4558                 if test x"${try_pam}" = x"yes";then
4559                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4560                 fi
4561                 use_pam=no
4562                 create_pam_modules=no
4563         fi
4565         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4566         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4567                 if test x"${try_pam}" = x"yes";then
4568                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4569                 fi
4570                 use_pam=no
4571                 create_pam_modules=no
4572         fi
4574         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4575                 #if HAVE_SECURITY_PAM_APPL_H
4576                 #include <security/pam_appl.h>
4577                 #endif
4578                 #if HAVE_PAM_PAM_APPL_H
4579                 #include <pam/pam_appl.h>
4580                 #endif
4581         ]])
4582         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4583                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4584                 if test x"${try_pam}" = x"yes";then
4585                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4586        fi
4587                 create_pam_modules=no
4588     fi
4590         if test x"$use_pam" = x"yes"; then
4591     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4592                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4593                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4594     with_pam_for_crypt=yes
4596                 if test x"$create_pam_modules" = x"yes"; then
4597                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4598                         # this checks are optional,
4599                         # we don't care about the results here
4600                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4601                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4602                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4603                 else
4604                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4605                 fi
4606         fi
4607         AC_MSG_CHECKING(whether to use PAM support)
4608         AC_MSG_RESULT([$use_pam])
4610         AC_MSG_CHECKING(whether to have PAM MODULES support)
4611         AC_MSG_RESULT([$create_pam_modules])
4613         AC_TRY_COMPILE([
4614                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4615                 #include <security/pam_appl.h>
4616                 #elif defined(HAVE_PAM_PAM_APPL_H)
4617                 #include <pam/pam_appl.h>
4618                 #endif],[
4619                 pam_set_item(0, PAM_RHOST, 0);
4620                 ],
4621                 AC_DEFINE(HAVE_PAM_RHOST, 1,
4622                           [Define to 1 if PAM_RHOST is available]),[])
4624         AC_TRY_COMPILE([
4625                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4626                 #include <security/pam_appl.h>
4627                 #elif defined(HAVE_PAM_PAM_APPL_H)
4628                 #include <pam/pam_appl.h>
4629                 #endif],[
4630                 pam_set_item(0, PAM_TTY, 0);
4631                 ],
4632                 AC_DEFINE(HAVE_PAM_TTY, 1,
4633                           [Define to 1 if PAM_TTY is available]),[])
4635 fi # try_pam != no
4637 #################################################
4638 # check for PAM_RADIO_TYPE
4639 AC_TRY_COMPILE([
4640 #if (!defined(LINUX))
4642 #define PAM_EXTERN extern
4643 #if defined(HAVE_SECURITY_PAM_APPL_H)
4644 #include <security/pam_appl.h>
4645 #elif defined(HAVE_PAM_PAM_APPL_H)
4646 #include <pam/pam_appl.h>
4647 #endif
4649 #endif
4651 #if defined(HAVE_SECURITY_PAM_MODULES_H)
4652 #include <security/pam_modules.h>
4653 #elif defined(HAVE_PAM_PAM_MODULES_H)
4654 #include <pam/pam_modules.h>
4655 #endif
4657 #if defined(HAVE_SECURITY__PAM_MACROS_H)
4658 #include <security/_pam_macros.h>
4659 #elif defined(HAVE_PAM__PAM_MACROS_H)
4660 #include <pam/_pam_macros.h>
4661 #endif
4663 #ifdef HAVE_SECURITY_PAM_EXT_H
4664 #include <security/pam_ext.h>
4665 #endif
4667 [int i; i = PAM_RADIO_TYPE; ],
4668 AC_DEFINE(HAVE_PAM_RADIO_TYPE, 1, [Define to 1 if PAM_RADIO_TYPE is available]),[])
4670 #################################################
4671 # check for pam_smbpass support
4672 PAM_MODULES=""
4673 INSTALL_PAM_MODULES=""
4674 UNINSTALL_PAM_MODULES=""
4676 try_pam_smbpass=auto
4677 AC_MSG_CHECKING(whether to use pam_smbpass)
4678 AC_ARG_WITH(pam_smbpass,
4679 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=auto)])],
4680 [ case "$withval" in
4681   yes|no|auto)
4682     try_pam_smbpass=$withval
4683   ;;
4684   *)
4685     AC_MSG_ERROR([valid options are yes,no,auto])
4686   ;;
4687   esac
4690 if test x"${try_pam_smbpass}" = xno ; then
4691         use_pam_smbpass=no
4692 else
4693         use_pam_smbpass=yes
4694         # Conditions under which pam_smbpass can't be built.
4695         if test x"$BLDSHARED" != xtrue ; then
4696                 if test x"${try_pam_smbpass}" = xyes ; then
4697                         AC_MSG_ERROR([No support for shared modules])
4698                 fi
4699                 use_pam_smbpass=no
4700         elif test x"$create_pam_modules" != xyes ; then
4701                 if test x"${try_pam_smbpass}" = xyes ; then
4702                         AC_MSG_ERROR([No support for PAM MODULES])
4703                 fi
4704                 use_pam_smbpass=no
4705         fi
4707         if test x"${use_pam_smbpass}" = xyes ; then 
4708                 PAM_MODULES="pam_smbpass"
4709                 INSTALL_PAM_MODULES="installpammodules"
4710                 UNINSTALL_PAM_MODULES="uninstallpammodules"
4711         fi
4713 AC_MSG_RESULT([$use_pam_smbpass])
4717 ## moved after the check for -lcrypt in order to
4718 ## ensure that the necessary libraries are included
4719 ## check checking for truncated salt.  Wrapped by the
4720 ## $with_pam_for_crypt variable as above   --jerry
4722 if test $with_pam_for_crypt = no; then
4723 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4724 crypt_LIBS="$LIBS"
4725 LIBS="$AUTH_LIBS $LIBS"
4726 AC_TRY_RUN([#include "${srcdir-.}/../tests/crypttest.c"],
4727         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4728 LIBS="$crypt_LIBS"])
4729 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4730         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4734 #################################################
4735 # check for a NISPLUS_HOME support
4736 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4737 AC_ARG_WITH(nisplus-home,
4738 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4739 [ case "$withval" in
4740   yes)
4741     AC_MSG_RESULT(yes)
4742     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4743     ;;
4744   *)
4745     AC_MSG_RESULT(no)
4746     ;;
4747   esac ],
4748   AC_MSG_RESULT(no)
4751 #################################################
4752 # check for syslog logging
4753 AC_MSG_CHECKING(whether to use syslog logging)
4754 AC_ARG_WITH(syslog,
4755 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4756 [ case "$withval" in
4757   yes)
4758     AC_MSG_RESULT(yes)
4759     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4760     ;;
4761   *)
4762     AC_MSG_RESULT(no)
4763     ;;
4764   esac ],
4765   AC_MSG_RESULT(no)
4768 #################################################
4769 # check for custom syslog facility
4770 AC_MSG_CHECKING(whether to use a custom syslog facility)
4771 AC_ARG_WITH(syslog-facility,
4772 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4774   if test "$withval" = "no" ; then
4775     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4776   else
4777      if test "$withval" != "yes" ; then
4778         syslog_facility="$withval"
4779         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4780      fi
4781   fi
4784 #################################################
4785 # check for experimental disk-quotas support
4787 samba_cv_WITH_QUOTAS=auto
4788 samba_cv_TRY_QUOTAS=no
4789 samba_cv_RUN_QUOTA_TESTS=auto
4790 samba_cv_WITH_SYS_QUOTAS=auto
4791 samba_cv_TRY_SYS_QUOTAS=auto
4792 samba_cv_SYSQUOTA_FOUND=no
4794 AC_MSG_CHECKING(whether to try disk-quotas support)
4795 AC_ARG_WITH(quotas,
4796 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4797 [ case "$withval" in
4798   yes)
4799     AC_MSG_RESULT(yes)
4800     samba_cv_WITH_QUOTAS=yes
4801     samba_cv_TRY_QUOTAS=yes
4802     samba_cv_RUN_QUOTA_TESTS=yes
4803     #set sys quotas to auto in this case
4804     samba_cv_TRY_SYS_QUOTAS=auto
4805     ;;
4806   auto)
4807     AC_MSG_RESULT(auto)
4808     samba_cv_WITH_QUOTAS=auto
4809     samba_cv_TRY_QUOTAS=auto
4810     samba_cv_RUN_QUOTA_TESTS=auto
4811     #set sys quotas to auto in this case
4812     samba_cv_TRY_SYS_QUOTAS=auto
4813     ;;
4814   no)
4815     AC_MSG_RESULT(no)
4816     samba_cv_WITH_QUOTAS=no
4817     samba_cv_TRY_QUOTAS=no
4818     samba_cv_RUN_QUOTA_TESTS=no
4819     ;;
4820   *)
4821     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4822     ;;
4823   esac ],
4824   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4827 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4828 AC_ARG_WITH(sys-quotas,
4829 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4830 [ case "$withval" in
4831   yes)
4832     AC_MSG_RESULT(yes)
4833     samba_cv_WITH_SYS_QUOTAS=yes
4834     samba_cv_TRY_SYS_QUOTAS=yes
4835     samba_cv_RUN_QUOTA_TESTS=yes
4836     ;;
4837   auto)
4838     AC_MSG_RESULT(auto)
4839     samba_cv_WITH_SYS_QUOTAS=auto
4840     samba_cv_TRY_SYS_QUOTAS=auto
4841     samba_cv_RUN_QUOTA_TESTS=auto
4842     ;;
4843   no)
4844     AC_MSG_RESULT(no)
4845     samba_cv_WITH_SYS_QUOTAS=no
4846     samba_cv_TRY_SYS_QUOTAS=no
4847     ;;
4848   *)
4849     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4850     ;;
4851   esac ],
4852   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4855 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4856 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4857   case "$host_os" in
4858         *linux*)
4859             AC_MSG_RESULT(yes)
4860             samba_cv_TRY_SYS_QUOTAS=yes
4861             samba_cv_RUN_QUOTA_TESTS=yes
4862             ;;
4863         *)
4864             AC_MSG_RESULT(no)
4865             samba_cv_TRY_SYS_QUOTAS=no
4866             ;;
4867   esac
4870 #############################################
4871 # only check for quota stuff if --with-quotas
4872 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4874 case "$host_os" in
4875         # on linux we didn't need to test we have builtin support
4876         *linux*)
4877             samba_cv_SYSQUOTA_FOUND=yes
4878             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4879             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4880             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4881             AC_MSG_RESULT(yes)
4883             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4884             samba_cv_found_xfs_header=yes
4885             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4886             AC_MSG_RESULT(yes)
4887             ;;
4888         *solaris*)
4889             # need to set this define when using static linking (BUG 1473)
4890             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4891             ;;
4892         *)
4893             ;;
4894 esac
4896 # some broken header files need this
4897 AC_CHECK_HEADER(asm/types.h,[
4898             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4899             AC_ADD_INCLUDE(<asm/types.h>)
4900             ])
4902 # For quotas on Veritas VxFS filesystems
4903 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4905 # For quotas on Linux XFS filesystems
4906 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4908 # For sys/quota.h and linux/quota.h
4909 AC_CHECK_HEADERS(sys/quota.h)
4911 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4912 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4913 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4914 AC_TRY_COMPILE([
4915 #include "confdefs.h"
4916 #ifdef HAVE_SYS_TYPES_H
4917 #include <sys/types.h>
4918 #endif
4919 #ifdef HAVE_ASM_TYPES_H
4920 #include <asm/types.h>
4921 #endif
4922 #include <sys/quota.h>
4923 ],[int i = Q_XGETQUOTA;],
4924 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4925 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4926         samba_cv_found_xfs_header=yes
4930 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4931 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4932 AC_TRY_COMPILE([
4933 #include "confdefs.h"
4934 #ifdef HAVE_SYS_QUOTA_H
4935 #include <sys/quota.h>
4936 #endif
4938 struct dqblk D;
4939 D.dqb_fsoftlimit = 0;],
4940 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4941 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4942         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4945 ##################
4946 # look for a working quota system
4948 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4949 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4950 AC_TRY_RUN_STRICT([
4951 #define HAVE_QUOTACTL_4A 1
4952 #define AUTOCONF_TEST 1
4953 #include "confdefs.h"
4954 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4955            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4956 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4957     samba_cv_SYSQUOTA_FOUND=yes;
4958     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4959     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4963 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4964 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4965 AC_TRY_RUN_STRICT([
4966 #define HAVE_QUOTACTL_4B 1
4967 #define AUTOCONF_TEST 1
4968 #include "confdefs.h"
4969 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4970            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4971 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4972     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4973     samba_cv_SYSQUOTA_FOUND=yes;
4974     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4975     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4979 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4980 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4981 AC_TRY_RUN_STRICT([
4982 #define HAVE_QUOTACTL_3 1
4983 #define AUTOCONF_TEST 1
4984 #include "confdefs.h"
4985 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4986            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4987 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4988     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4989     samba_cv_SYSQUOTA_FOUND=yes;
4990     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4991     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4995 #################################################
4996 # check for mntent.h and struct mntent
4997 AC_CHECK_HEADERS(mntent.h)
4998 #################################################
4999 # check for setmntent,getmntent,endmntent
5000 AC_CHECK_FUNCS(setmntent getmntent endmntent)
5002 #################################################
5003 # check for devnm.h and struct mntent
5004 AC_CHECK_HEADERS(devnm.h)
5005 #################################################
5006 # check for devnm
5007 AC_CHECK_FUNCS(devnm)
5009 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
5010     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
5011         # if --with-sys-quotas=yes then build it
5012         # you have can use the get/set quota command smb.conf
5013         # options then
5014         samba_cv_SYSQUOTA_FOUND=auto
5015     fi
5016     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
5017         # if --with-sys-quotas=yes then build it
5018         # you have can use the get/set quota command smb.conf
5019         # options then
5020         samba_cv_TRY_SYS_QUOTAS=auto
5021     fi
5024 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
5025 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
5026 SAVE_CPPFLAGS="$CPPFLAGS"
5027 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5028 AC_TRY_COMPILE([
5029 #include "confdefs.h"
5030 #define NO_PROTO_H 1
5031 #define NO_CONFIG_H 1
5032 #define HAVE_SYS_QUOTAS 1
5033 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
5034 #include "${srcdir-.}/lib/sysquotas.c"
5035 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
5036 CPPFLAGS="$SAVE_CPPFLAGS"
5038 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
5039 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
5040     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
5041         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
5042         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
5043         samba_cv_WE_USE_SYS_QUOTAS=yes
5044         AC_MSG_RESULT(yes)
5045     else
5046         AC_MSG_RESULT(no)
5047     fi
5051 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
5052 AC_CACHE_CHECK([whether the sys_quota interface works with NFS],samba_cv_SYSQUOTA_WORKS_NFS,[
5053 SAVE_CPPFLAGS="$CPPFLAGS"
5054 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5055 AC_TRY_COMPILE([
5056 #include "confdefs.h"
5057 #define NO_PROTO_H 1
5058 #define NO_CONFIG_H 1
5059 #define HAVE_SYS_QUOTAS 1
5060 #define HAVE_NFS_QUOTAS 1
5061 #include "${srcdir-.}/lib/sysquotas_nfs.c"
5062 ],[],samba_cv_SYSQUOTA_WORKS_NFS=yes,samba_cv_SYSQUOTA_WORKS_NFS=no)
5063 CPPFLAGS="$SAVE_CPPFLAGS"
5065 if test x"$samba_cv_SYSQUOTA_WORKS_NFS" = x"yes"; then
5066     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
5067         AC_DEFINE(HAVE_NFS_QUOTAS,1,[Whether nfs quota support is available])
5068     fi
5072 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
5073 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
5074 SAVE_CPPFLAGS="$CPPFLAGS"
5075 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5076 AC_TRY_COMPILE([
5077 #include "confdefs.h"
5078 #define NO_PROTO_H 1
5079 #define NO_CONFIG_H 1
5080 #define HAVE_SYS_QUOTAS 1
5081 #define HAVE_XFS_QUOTAS 1
5082 #include "${srcdir-.}/lib/sysquotas_xfs.c"
5083 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
5084 CPPFLAGS="$SAVE_CPPFLAGS"
5086 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
5087     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
5088         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
5089     fi
5093 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
5094 SAVE_CPPFLAGS="$CPPFLAGS"
5095 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5096 AC_TRY_COMPILE([
5097 #include "confdefs.h"
5098 #define NO_PROTO_H 1
5099 #define NO_CONFIG_H 1
5100 #include "${srcdir-.}/smbd/quotas.c"
5101 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
5102 CPPFLAGS="$SAVE_CPPFLAGS"
5104 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
5105 AC_MSG_CHECKING(whether to use the old quota support)
5106     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
5107       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
5108         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
5109         AC_MSG_RESULT(yes)
5110       else
5111         AC_MSG_RESULT(no)
5112       fi
5113     else
5114       AC_MSG_RESULT(no)
5115     fi
5118 ####################
5119 # End of quota check samba_cv_RUN_QUOTA_TESTS
5122 #################################################
5123 # check for experimental utmp accounting
5125 AC_MSG_CHECKING(whether to support utmp accounting)
5126 WITH_UTMP=yes
5127 AC_ARG_WITH(utmp,
5128 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
5129 [ case "$withval" in
5130   no)
5131                 WITH_UTMP=no
5132                 ;;
5133   *)
5134                 WITH_UTMP=yes
5135                 ;;
5136   esac ],
5139 # utmp requires utmp.h
5140 # Note similar check earlier, when checking utmp details.
5142 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
5143         utmp_no_reason=", no utmp.h on $host_os"
5144         WITH_UTMP=no
5147 # Display test results
5149 if test x"$WITH_UTMP" = x"yes"; then
5150         AC_MSG_RESULT(yes)
5151         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
5152 else
5153         AC_MSG_RESULT(no$utmp_no_reason)
5157 #################################################
5158 # these tests are taken from the GNU fileutils package
5159 AC_CHECKING(how to get filesystem space usage)
5160 space=no
5162 # Test for statvfs64.
5163 if test $space = no; then
5164   # SVR4
5165   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
5166   [AC_TRY_RUN([
5167 #if defined(HAVE_UNISTD_H)
5168 #include <unistd.h>
5169 #endif
5170 #include <sys/types.h>
5171 #include <sys/statvfs.h>
5172   main ()
5173   {
5174     struct statvfs64 fsd;
5175     exit (statvfs64 (".", &fsd));
5176   }],
5177   fu_cv_sys_stat_statvfs64=yes,
5178   fu_cv_sys_stat_statvfs64=no,
5179   fu_cv_sys_stat_statvfs64=cross)])
5180   if test $fu_cv_sys_stat_statvfs64 = yes; then
5181     space=yes
5182     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
5183   fi
5186 # Perform only the link test since it seems there are no variants of the
5187 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
5188 # because that got a false positive on SCO OSR5.  Adding the declaration
5189 # of a `struct statvfs' causes this test to fail (as it should) on such
5190 # systems.  That system is reported to work fine with STAT_STATFS4 which
5191 # is what it gets when this test fails.
5192 if test $space = no; then
5193   # SVR4
5194   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
5195                  [AC_TRY_LINK([#include <sys/types.h>
5196 #include <sys/statvfs.h>],
5197                               [struct statvfs fsd; statvfs (0, &fsd);],
5198                               fu_cv_sys_stat_statvfs=yes,
5199                               fu_cv_sys_stat_statvfs=no)])
5200   if test $fu_cv_sys_stat_statvfs = yes; then
5201     space=yes
5202     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
5203   fi
5206 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
5207 # This is not the case on ancient Linux systems.
5209 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
5210     AC_TRY_COMPILE([#include <sys/types.h>
5211 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
5212         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
5213 if test x"$samba_cv_fsid_int" = x"yes"; then
5214     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
5217 # fsusage.c assumes that statvfs has an f_frsize entry. Some weird
5218 # systems use f_bsize.
5219 AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [
5220     AC_TRY_COMPILE([#include <sys/types.h>
5221 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0],
5222         samba_cv_frsize=yes,samba_cv_frsize=no)])
5223 if test x"$samba_cv_frsize" = x"yes"; then
5224     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
5227 # Some systems use f_flag in struct statvfs while others use f_flags
5228 AC_CACHE_CHECK([that statvfs.statvfs_f_flag works],samba_cv_statvfs_f_flag, [
5229     AC_TRY_COMPILE([#include <sys/types.h>
5230 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flag = 0],
5231         samba_cv_statvfs_f_flag=yes,samba_cv_statvfs_f_flag=no)])
5232 if test x"$samba_cv_statvfs_f_flag" = x"yes"; then
5233     AC_DEFINE(HAVE_STATVFS_F_FLAG, 1, [Whether statvfs.f_flag exists])
5236 AC_CACHE_CHECK([that statvfs.statvfs_f_flags works],samba_cv_statvfs_f_flags, [
5237     AC_TRY_COMPILE([#include <sys/types.h>
5238 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flags = 0],
5239         samba_cv_statvfs_f_flags=yes,samba_cv_statvfs_f_flags=no)])
5240 if test x"$samba_cv_statvfs_f_flags" = x"yes"; then
5241     AC_DEFINE(HAVE_STATVFS_F_FLAGS, 1, [Whether statvfs.f_flags exists])
5244 if test $space = no; then
5245   # DEC Alpha running OSF/1
5246   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
5247   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
5248   [AC_TRY_RUN([
5249 #include <sys/param.h>
5250 #include <sys/types.h>
5251 #include <sys/mount.h>
5252   main ()
5253   {
5254     struct statfs fsd;
5255     fsd.f_fsize = 0;
5256     exit (statfs (".", &fsd, sizeof (struct statfs)));
5257   }],
5258   fu_cv_sys_stat_statfs3_osf1=yes,
5259   fu_cv_sys_stat_statfs3_osf1=no,
5260   fu_cv_sys_stat_statfs3_osf1=no)])
5261   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5262   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5263     space=yes
5264     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5265   fi
5268 if test $space = no; then
5269 # AIX
5270   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5271 member (AIX, 4.3BSD)])
5272   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5273   [AC_TRY_RUN([
5274 #ifdef HAVE_SYS_PARAM_H
5275 #include <sys/param.h>
5276 #endif
5277 #ifdef HAVE_SYS_MOUNT_H
5278 #include <sys/mount.h>
5279 #endif
5280 #ifdef HAVE_SYS_VFS_H
5281 #include <sys/vfs.h>
5282 #endif
5283   main ()
5284   {
5285   struct statfs fsd;
5286   fsd.f_bsize = 0;
5287   exit (statfs (".", &fsd));
5288   }],
5289   fu_cv_sys_stat_statfs2_bsize=yes,
5290   fu_cv_sys_stat_statfs2_bsize=no,
5291   fu_cv_sys_stat_statfs2_bsize=no)])
5292   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5293   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5294     space=yes
5295     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5296   fi
5299 if test $space = no; then
5300 # SVR3
5301   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5302   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5303   [AC_TRY_RUN([#include <sys/types.h>
5304 #include <sys/statfs.h>
5305   main ()
5306   {
5307   struct statfs fsd;
5308   exit (statfs (".", &fsd, sizeof fsd, 0));
5309   }],
5310     fu_cv_sys_stat_statfs4=yes,
5311     fu_cv_sys_stat_statfs4=no,
5312     fu_cv_sys_stat_statfs4=no)])
5313   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5314   if test $fu_cv_sys_stat_statfs4 = yes; then
5315     space=yes
5316     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5317   fi
5320 if test $space = no; then
5321 # 4.4BSD and NetBSD
5322   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5323 member (4.4BSD and NetBSD)])
5324   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5325   [AC_TRY_RUN([#include <sys/types.h>
5326 #ifdef HAVE_SYS_PARAM_H
5327 #include <sys/param.h>
5328 #endif
5329 #ifdef HAVE_SYS_MOUNT_H
5330 #include <sys/mount.h>
5331 #endif
5332   main ()
5333   {
5334   struct statfs fsd;
5335   fsd.f_fsize = 0;
5336   exit (statfs (".", &fsd));
5337   }],
5338   fu_cv_sys_stat_statfs2_fsize=yes,
5339   fu_cv_sys_stat_statfs2_fsize=no,
5340   fu_cv_sys_stat_statfs2_fsize=no)])
5341   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5342   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5343     space=yes
5344         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5345   fi
5348 if test $space = no; then
5349   # Ultrix
5350   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5351   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5352   [AC_TRY_RUN([#include <sys/types.h>
5353 #ifdef HAVE_SYS_PARAM_H
5354 #include <sys/param.h>
5355 #endif
5356 #ifdef HAVE_SYS_MOUNT_H
5357 #include <sys/mount.h>
5358 #endif
5359 #ifdef HAVE_SYS_FS_TYPES_H
5360 #include <sys/fs_types.h>
5361 #endif
5362   main ()
5363   {
5364   struct fs_data fsd;
5365   /* Ultrix's statfs returns 1 for success,
5366      0 for not mounted, -1 for failure.  */
5367   exit (statfs (".", &fsd) != 1);
5368   }],
5369   fu_cv_sys_stat_fs_data=yes,
5370   fu_cv_sys_stat_fs_data=no,
5371   fu_cv_sys_stat_fs_data=no)])
5372   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5373   if test $fu_cv_sys_stat_fs_data = yes; then
5374     space=yes
5375     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5376   fi
5380 # As a gating factor for large file support, in order to
5381 # use <4GB files we must have the following minimal support
5382 # available.
5383 # long long, and a 64 bit off_t or off64_t.
5384 # If we don't have all of these then disable large
5385 # file support.
5387 AC_MSG_CHECKING([if large file support can be enabled])
5388 AC_TRY_COMPILE([
5389 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5390 #include <sys/types.h>
5391 #else
5392 __COMPILE_ERROR_
5393 #endif
5395 [int i],
5396 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5397 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5398         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5400 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5402 #################################################
5403 # check for cluster extensions
5405 CTDB_CFLAGS=""
5406 AC_SUBST(CTDB_CFLAGS)
5407 AC_ARG_WITH(ctdb,
5408 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
5409 [ case "$withval" in
5410   yes|no)
5411     AC_MSG_WARN([--with-ctdb called without argument])
5412     ;;
5413   *)
5414     CTDB_CPPFLAGS="-I$withval/include"
5415     ;;
5416   esac])
5418 SAVED_CPPFLAGS="$CPPFLAGS"
5419 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS} $CTDB_CPPFLAGS"
5420 ctdb_broken="missing or broken headers"
5422 AC_CHECK_HEADERS(ctdb.h ctdb_private.h,,,[
5423 #include "confdefs.h"
5424 #define NO_CONFIG_H
5425 #include "replace.h"
5426 #include "system/wait.h"
5427 #include "system/network.h"
5428 #define private #error __USED_RESERVED_WORD_private__
5429 #include <talloc.h>
5430 #include <tdb.h>
5431 #include <ctdb.h>
5434 AC_HAVE_DECL(CTDB_CONTROL_TRANS3_COMMIT,[
5435 #include "confdefs.h"
5436 #define NO_CONFIG_H
5437 #include "replace.h"
5438 #include "system/wait.h"
5439 #include "system/network.h"
5440 #include <talloc.h>
5441 #include <tdb.h>
5442 #include <ctdb.h>
5443 #include <ctdb_private.h>
5445 if test x"$ac_cv_have_CTDB_CONTROL_TRANS3_COMMIT_decl" = x"yes"; then
5446         ctdb_broken=no
5447 else
5448         ctdb_broken="ctdb transaction support missing or too old"
5451 # in ctdb 1.0.57 ctdb_control_tcp was temparary renamed to ctdb_tcp_client
5452 AC_CHECK_TYPE(struct ctdb_tcp_client,[
5453         AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
5454 ],,[
5455 #include "confdefs.h"
5456 #define NO_CONFIG_H
5457 #include "replace.h"
5458 #include "system/wait.h"
5459 #include "system/network.h"
5460 #include <talloc.h>
5461 #include <tdb.h>
5462 #include <ctdb.h>
5463 #include <ctdb_private.h>
5466 AC_CHECK_TYPE(struct ctdb_control_tcp,[
5467         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5469         ctdb_broken="missing struct ctdb_control_tcp"
5471 #include "confdefs.h"
5472 #define NO_CONFIG_H
5473 #include "replace.h"
5474 #include "system/wait.h"
5475 #include "system/network.h"
5476 #include <talloc.h>
5477 #include <tdb.h>
5478 #include <ctdb.h>
5479 #include <ctdb_private.h>
5482 AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5483         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5484 ],,[
5485 #include "confdefs.h"
5486 #define NO_CONFIG_H
5487 #include "replace.h"
5488 #include "system/wait.h"
5489 #include "system/network.h"
5490 #include <talloc.h>
5491 #include <tdb.h>
5492 #include <ctdb.h>
5493 #include <ctdb_private.h>
5495 CPPFLAGS="$SAVED_CPPFLAGS"
5497 AC_MSG_CHECKING(cluster support)
5498 AC_ARG_WITH(cluster-support,
5499 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
5501 if test x"$with_cluster_support" = x ; then
5502         with_cluster_support="auto"
5505 if test x"$ac_cv_header_ctdb_private_h" != x"yes"; then
5506         if test "x$with_cluster_support" = "xyes"; then
5507                 AC_MSG_ERROR("ctdb_private.h is required for cluster support")
5508         fi
5509         with_cluster_support=no
5512 if test x"$ctdb_broken" != x"no"; then
5513         if test "x$with_cluster_support" = "xyes"; then
5514                 AC_MSG_ERROR(["cluster support: $ctdb_broken"])
5515         fi
5516         with_cluster_support=no
5519 if test "x$with_cluster_support" != "xno"; then
5520     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5521     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5522     AC_MSG_RESULT(yes)
5523 else
5524     AC_MSG_RESULT(no)
5527 #################################################
5528 # check for rtnetlink
5530 AC_CHECK_HEADERS([linux/netlink.h],
5531   AC_CHECK_HEADERS([linux/rtnetlink.h],[],[],
5532                    [#include <bits/sockaddr.h>
5533                     #include <linux/netlink.h>]),
5534   [],[#include <bits/sockaddr.h>])
5536 #################################################
5537 # check for ACL support
5539 AC_MSG_CHECKING(whether to support ACLs)
5540 AC_ARG_WITH(acl-support,
5541 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5542 [ case "$withval" in
5543         yes|no)
5544                 with_acl_support="$withval"
5545                 ;;
5546   esac ])
5548 if test x"$with_acl_support" = x ; then
5549         with_acl_support="auto"
5552 AC_MSG_RESULT($with_acl_support)
5554 if test x"$with_acl_support" = x"no"; then
5555         AC_MSG_RESULT(Disabling ACL support)
5556         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5557 else
5558         AC_MSG_NOTICE(checking whether ACL support is available:)
5559         case "$host_os" in
5560         *sysv5*)
5561                 AC_MSG_NOTICE(Using UnixWare ACLs)
5562                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5563                 default_static_modules="$default_static_modules vfs_solarisacl"
5564                 ;;
5565         *solaris*)
5566                 AC_MSG_NOTICE(Using solaris ACLs)
5567                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5568                 ACL_LIBS="$ACL_LIBS -lsec"
5569                 default_static_modules="$default_static_modules vfs_solarisacl"
5570                 ;;
5571         *hpux*)
5572                 AC_MSG_NOTICE(Using HPUX ACLs)
5573                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5574                 default_static_modules="$default_static_modules vfs_hpuxacl"
5575                 ;;
5576         *irix*)
5577                 AC_MSG_NOTICE(Using IRIX ACLs)
5578                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5579                 default_static_modules="$default_static_modules vfs_irixacl"
5580                 ;;
5581         *aix*)
5582                 AC_MSG_NOTICE(Using AIX ACLs)
5583                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5584                 default_static_modules="$default_static_modules vfs_aixacl"
5585                 ;;
5586         *osf*)
5587                 AC_MSG_NOTICE(Using Tru64 ACLs)
5588                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5589                 ACL_LIBS="$ACL_LIBS -lpacl"
5590                 default_static_modules="$default_static_modules vfs_tru64acl"
5591                 ;;
5592         *darwin*)
5593                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5594                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5595                 ;;
5596         *)
5597                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5598                 case "$host_os" in
5599                 *linux*)
5600                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5601                         ;;
5602                 esac
5603                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5604                         acl_LIBS=$LIBS
5605                         LIBS="$LIBS $ACL_LIBS"
5606                         AC_TRY_LINK([
5607                                 #include <sys/types.h>
5608                                 #include <sys/acl.h>
5609                         ],[
5610                                 acl_t acl;
5611                                 int entry_id;
5612                                 acl_entry_t *entry_p;
5613                                 return acl_get_entry(acl, entry_id, entry_p);
5614                         ],
5615                         [samba_cv_HAVE_POSIX_ACLS=yes],
5616                         [samba_cv_HAVE_POSIX_ACLS=no])
5617                         LIBS=$acl_LIBS
5618                 ])
5619                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5620                         AC_MSG_NOTICE(Using posix ACLs)
5621                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5622                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5623                                 acl_LIBS=$LIBS
5624                                 LIBS="$LIBS $ACL_LIBS"
5625                                 AC_TRY_LINK([
5626                                         #include <sys/types.h>
5627                                         #include <sys/acl.h>
5628                                 ],[
5629                                         acl_permset_t permset_d;
5630                                         acl_perm_t perm;
5631                                         return acl_get_perm_np(permset_d, perm);
5632                                 ],
5633                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5634                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5635                                 LIBS=$acl_LIBS
5636                         ])
5637                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5638                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5639                         fi
5640                         default_static_modules="$default_static_modules vfs_posixacl"
5641                 else
5642                         AC_MSG_NOTICE(ACL support is not avaliable)
5643                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5644                 fi
5645                 ;;
5646         esac
5647 fi # with_acl_support
5649 #################################################
5650 # check if we have FreeBSD sunacl
5651 case "$host_os" in
5652 *freebsd*)
5653     AC_CHECK_HEADER(sunacl.h)
5654     if test x"$ac_cv_header_sunacl_h" = xyes ; then
5655        AC_DEFINE(HAVE_FREEBSD_SUNACL_H,1,[Whether we have FreeBSD sunacl around])
5656        ZFSACL_LIBS=-lsunacl
5657        AC_SUBST(ZFSACL_LIBS)
5658        default_shared_modules="$default_shared_modules vfs_zfsacl"
5659     fi
5660     ;;
5661 esac
5663 #################################################
5664 # check for AIO support
5666 AC_MSG_CHECKING(whether to support asynchronous io)
5667 AC_ARG_WITH(aio-support,
5668 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5669 [ case "$withval" in
5670   yes)
5672         AC_MSG_RESULT(yes)
5673         case "$host_os" in
5674         *)
5675                 AIO_LIBS=$LIBS
5676                 no_rt_LIBS=$LIBS
5677                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5678                 LIBS=$no_rt_LIBS
5679                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5680                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5681                 aio_LIBS=$LIBS
5682                 LIBS=$AIO_LIBS
5683                 AC_TRY_LINK([#include <sys/types.h>
5684 #include <aio.h>],
5685 [ struct aiocb a; return aio_read(&a);],
5686 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5687                 LIBS=$aio_LIBS])
5688                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5689                 aio_LIBS=$LIBS
5690                 LIBS=$AIO_LIBS
5691                 AC_TRY_LINK([#include <sys/types.h>
5692 #include <aio.h>],
5693 [ struct aiocb64 a; return aio_read64(&a);],
5694 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5695                 LIBS=$aio_LIBS])
5696                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5697                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5698                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5699                         LIBS=$AIO_LIBS
5700                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5701                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5702                         LIBS=$AIO_LIBS
5703                 fi
5705                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5706                         AC_MSG_CHECKING(for aio_read)
5707                         AC_LINK_IFELSE([#include <aio.h>
5708 int main() { struct aiocb a; return aio_read(&a); }],
5709 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5710 [AC_MSG_RESULT(no)])
5712                         AC_MSG_CHECKING(for aio_write)
5713                         AC_LINK_IFELSE([#include <aio.h>
5714 int main() { struct aiocb a; return aio_write(&a); }],
5715 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5716 [AC_MSG_RESULT(no)])
5718                         AC_MSG_CHECKING(for aio_fsync)
5719                         AC_LINK_IFELSE([#include <aio.h>
5720 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5721 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5722 [AC_MSG_RESULT(no)])
5724                         AC_MSG_CHECKING(for aio_return)
5725                         AC_LINK_IFELSE([#include <aio.h>
5726 int main() { struct aiocb a; return aio_return(&a); }],
5727 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5728 [AC_MSG_RESULT(no)])
5730                         AC_MSG_CHECKING(for aio_error)
5731                         AC_LINK_IFELSE([#include <aio.h>
5732 int main() { struct aiocb a; return aio_error(&a); }],
5733 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5734 [AC_MSG_RESULT(no)])
5736                         AC_MSG_CHECKING(for aio_cancel)
5737                         AC_LINK_IFELSE([#include <aio.h>
5738 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5739 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5740 [AC_MSG_RESULT(no)])
5742                         AC_MSG_CHECKING(for aio_suspend)
5743                         AC_LINK_IFELSE([#include <aio.h>
5744 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5745 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5746 [AC_MSG_RESULT(no)])
5747                 fi
5749                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5750                         AC_MSG_CHECKING(for aio_read64)
5751                         AC_LINK_IFELSE([#include <aio.h>
5752 int main() { struct aiocb a; return aio_read64(&a); }],
5753 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5754 [AC_MSG_RESULT(no)])
5756                         AC_MSG_CHECKING(for aio_write64)
5757                         AC_LINK_IFELSE([#include <aio.h>
5758 int main() { struct aiocb a; return aio_write64(&a); }],
5759 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5760 [AC_MSG_RESULT(no)])
5762                         AC_MSG_CHECKING(for aio_fsync64)
5763                         AC_LINK_IFELSE([#include <aio.h>
5764 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5765 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5766 [AC_MSG_RESULT(no)])
5768                         AC_MSG_CHECKING(for aio_return64)
5769                         AC_LINK_IFELSE([#include <aio.h>
5770 int main() { struct aiocb a; return aio_return64(&a); }],
5771 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5772 [AC_MSG_RESULT(no)])
5774                         AC_MSG_CHECKING(for aio_error64)
5775                         AC_LINK_IFELSE([#include <aio.h>
5776 int main() { struct aiocb a; return aio_error64(&a); }],
5777 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5778 [AC_MSG_RESULT(no)])
5780                         AC_MSG_CHECKING(for aio_cancel64)
5781                         AC_LINK_IFELSE([#include <aio.h>
5782 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5783 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5784 [AC_MSG_RESULT(no)])
5786                         AC_MSG_CHECKING(for aio_suspend64)
5787                         AC_LINK_IFELSE([#include <aio.h>
5788 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5789 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5790 [AC_MSG_RESULT(no)])
5791                 fi
5792             ;;
5793         esac
5794         ;;
5795   *)
5796     AC_MSG_RESULT(no)
5797     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5798     ;;
5799   esac ],
5800   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5801   AC_MSG_RESULT(no)
5804 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5805         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5806                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5807                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5808         fi
5811 #################################################
5812 # check for sendfile support
5814 with_sendfile_support=yes
5815 AC_MSG_CHECKING(whether to check to support sendfile)
5816 AC_ARG_WITH(sendfile-support,
5817 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5818 [ case "$withval" in
5819   yes)
5821         AC_MSG_RESULT(yes);
5823         case "$host_os" in
5824         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5825                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5826                 AC_TRY_LINK([#include <sys/sendfile.h>],
5828 int tofd, fromfd;
5829 off64_t offset;
5830 size_t total;
5831 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5833 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5835                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5836                 AC_TRY_LINK([#include <sys/sendfile.h>],
5838 int tofd, fromfd;
5839 off_t offset;
5840 size_t total;
5841 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5843 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5845 # Try and cope with broken Linux sendfile....
5846                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5847                 AC_TRY_LINK([\
5848 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5849 #undef _FILE_OFFSET_BITS
5850 #endif
5851 #include <sys/sendfile.h>],
5853 int tofd, fromfd;
5854 off_t offset;
5855 size_t total;
5856 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5858 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5860         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5861                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5862                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5863                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5864         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5865                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5866                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5867                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5868         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5869                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5870                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5871         else
5872                 AC_MSG_RESULT(no);
5873         fi
5875         ;;
5876         *freebsd* | *dragonfly* )
5877                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5878                 AC_TRY_LINK([\
5879 #include <sys/types.h>
5880 #include <unistd.h>
5881 #include <sys/socket.h>
5882 #include <sys/uio.h>],
5884         int fromfd, tofd, ret, total=0;
5885         off_t offset, nwritten;
5886         struct sf_hdtr hdr;
5887         struct iovec hdtrl;
5888         hdr.headers = &hdtrl;
5889         hdr.hdr_cnt = 1;
5890         hdr.trailers = NULL;
5891         hdr.trl_cnt = 0;
5892         hdtrl.iov_base = NULL;
5893         hdtrl.iov_len = 0;
5894         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5896 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5898         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5899                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5900                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5901                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5902         else
5903                 AC_MSG_RESULT(no);
5904         fi
5905         ;;
5907         *hpux*)
5908                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5909                 AC_TRY_LINK([\
5910 #include <sys/socket.h>
5911 #include <sys/uio.h>],
5913         int fromfd, tofd;
5914         size_t total=0;
5915         struct iovec hdtrl[2];
5916         ssize_t nwritten;
5917         off64_t offset;
5919         hdtrl[0].iov_base = 0;
5920         hdtrl[0].iov_len = 0;
5922         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5924 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5925         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5926                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5927                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5928                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5929         else
5930                 AC_MSG_RESULT(no);
5931         fi
5933                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5934                 AC_TRY_LINK([\
5935 #include <sys/socket.h>
5936 #include <sys/uio.h>],
5938         int fromfd, tofd;
5939         size_t total=0;
5940         struct iovec hdtrl[2];
5941         ssize_t nwritten;
5942         off_t offset;
5944         hdtrl[0].iov_base = 0;
5945         hdtrl[0].iov_len = 0;
5947         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5949 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5950         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5951                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5952                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5953                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5954         else
5955                 AC_MSG_RESULT(no);
5956         fi
5957         ;;
5959         *solaris*)
5960                 AC_CHECK_LIB(sendfile,sendfilev)
5961                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5962                 AC_TRY_LINK([\
5963 #include <sys/sendfile.h>],
5965         int sfvcnt;
5966         size_t xferred;
5967         struct sendfilevec vec[2];
5968         ssize_t nwritten;
5969         int tofd;
5971         sfvcnt = 2;
5973         vec[0].sfv_fd = SFV_FD_SELF;
5974         vec[0].sfv_flag = 0;
5975         vec[0].sfv_off = 0;
5976         vec[0].sfv_len = 0;
5978         vec[1].sfv_fd = 0;
5979         vec[1].sfv_flag = 0;
5980         vec[1].sfv_off = 0;
5981         vec[1].sfv_len = 0;
5982         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5984 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5986         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5987                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5988                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5989                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5990         else
5991                 AC_MSG_RESULT(no);
5992         fi
5994                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5995                 AC_TRY_LINK([\
5996 #include <sys/sendfile.h>],
5998         int sfvcnt;
5999         size_t xferred;
6000         struct sendfilevec vec[2];
6001         ssize_t nwritten;
6002         int tofd;
6004         sfvcnt = 2;
6006         vec[0].sfv_fd = SFV_FD_SELF;
6007         vec[0].sfv_flag = 0;
6008         vec[0].sfv_off = 0;
6009         vec[0].sfv_len = 0;
6011         vec[1].sfv_fd = 0;
6012         vec[1].sfv_flag = 0;
6013         vec[1].sfv_off = 0;
6014         vec[1].sfv_len = 0;
6015         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
6017 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
6019         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
6020                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
6021                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
6022                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
6023         else
6024                 AC_MSG_RESULT(no);
6025         fi
6026         ;;
6027         *aix*)
6028                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
6029                 AC_TRY_LINK([\
6030 #include <sys/socket.h>],
6032         int fromfd, tofd;
6033         size_t total=0;
6034         struct sf_parms hdtrl;
6035         ssize_t nwritten;
6036         off64_t offset;
6038         hdtrl.header_data = 0;
6039         hdtrl.header_length = 0;
6040         hdtrl.file_descriptor = fromfd;
6041         hdtrl.file_offset = 0;
6042         hdtrl.file_bytes = 0;
6043         hdtrl.trailer_data = 0;
6044         hdtrl.trailer_length = 0;
6046         nwritten = send_file(&tofd, &hdtrl, 0);
6048 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
6049         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
6050                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
6051                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
6052                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
6053         else
6054                 AC_MSG_RESULT(no);
6055         fi
6056         ;;
6057         *)
6058         ;;
6059         esac
6060         ;;
6061   *)
6062     AC_MSG_RESULT(no)
6063     ;;
6064   esac ],
6065   AC_MSG_RESULT(yes)
6068 ############################################
6069 # See if we have the Linux readahead syscall.
6071 AC_CACHE_CHECK([for Linux readahead],
6072                 samba_cv_HAVE_LINUX_READAHEAD,[
6073     AC_TRY_LINK([
6074 #if defined(HAVE_UNISTD_H)
6075 #include <unistd.h>
6076 #endif
6077 #include <fcntl.h>],
6078     [ssize_t err = readahead(0,0,0x80000);],
6079     samba_cv_HAVE_LINUX_READAHEAD=yes,
6080     samba_cv_HAVE_LINUX_READAHEAD=no)])
6082 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
6083   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
6084              [Whether Linux readahead is available])
6087 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
6089 ############################################
6090 # See if we have the posix_fadvise syscall.
6092 AC_CACHE_CHECK([for posix_fadvise],
6093                 samba_cv_HAVE_POSIX_FADVISE,[
6094     AC_TRY_LINK([
6095 #if defined(HAVE_UNISTD_H)
6096 #include <unistd.h>
6097 #endif
6098 #include <fcntl.h>],
6099     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
6100     samba_cv_HAVE_POSIX_FADVISE=yes,
6101     samba_cv_HAVE_POSIX_FADVISE=no)])
6103 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
6104   AC_DEFINE(HAVE_POSIX_FADVISE,1,
6105              [Whether posix_fadvise is available])
6108 ############################################
6109 # See if we have the Linux splice syscall.
6111 case "$host_os" in
6112 *linux*)
6113 AC_CACHE_CHECK([for Linux splice],
6114                 samba_cv_HAVE_LINUX_SPLICE,[
6115     AC_TRY_LINK([
6116 #if defined(HAVE_UNISTD_H)
6117 #include <unistd.h>
6118 #endif
6119 #include <fcntl.h>],
6120     [long ret = splice(0,0,1,0,400,0);],
6121     samba_cv_HAVE_LINUX_SPLICE=yes,
6122     samba_cv_HAVE_LINUX_SPLICE=no)])
6125 samba_cv_HAVE_LINUX_SPLICE=no
6127 esac
6129 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
6130   AC_DEFINE(HAVE_LINUX_SPLICE,1,
6131              [Whether Linux splice is available])
6134 AC_HAVE_DECL(splice, [#include <fcntl.h>])
6136 ############################################
6137 # See if we have the a broken readlink syscall.
6139 AC_CACHE_CHECK([for a broken readlink syscall],samba_cv_HAVE_BROKEN_READLINK,[
6140 AC_TRY_RUN([#include "${srcdir-.}/../tests/readlink.c"],
6141         samba_cv_HAVE_BROKEN_READLINK=no,samba_cv_HAVE_BROKEN_READLINK=yes,samba_cv_HAVE_BROKEN_READLINK=cross)
6143 if test x"$samba_cv_HAVE_BROKEN_READLINK" = x"yes"; then
6144         AC_DEFINE(HAVE_BROKEN_READLINK,1,[Whether the readlink syscall is broken])
6147 #################################################
6148 # Check whether winbind is supported on this platform.  If so we need to
6149 # build and install client programs, sbin programs and shared libraries
6151 AC_MSG_CHECKING(whether to build winbind)
6153 # Initially, the value of $host_os decides whether winbind is supported
6155 HAVE_WINBIND=yes
6156 HAVE_WBCLIENT=no
6158 # Define external wbclient library to link against.  This disables winbind.
6159 # We define this here so --with-winbind can override it.
6160 AC_ARG_WITH(wbclient,
6161 [AS_HELP_STRING([--with-wbclient], [Use external wbclient (optional)])],
6163   case "$withval" in
6164         no)
6165                 HAVE_WBCLIENT=no
6166                 ;;
6167         yes)
6168                 HAVE_WBCLIENT=yes
6169                 HAVE_WINBIND=no
6170                 ;;
6171         *)
6172                 HAVE_WBCLIENT=yes
6173                 HAVE_WINBIND=no
6174                 WBCLIENT_INCLUDES="-I$withval/include"
6175                 WBCLIENT_LDFLAGS="-L$withval/lib"
6176                 ;;
6177   esac ],
6180 AC_SUBST(WBCLIENT_INCLUDES)
6181 AC_SUBST(WBCLIENT_LDFLAGS)
6182 AC_SUBST(WBCLIENT_LIBS)
6185 # Define the winbind shared library name and any specific linker flags
6186 # it needs to be built with.
6188 WINBIND_NSS="../nsswitch/libnss_winbind.$SHLIBEXT"
6189 WINBIND_WINS_NSS="../nsswitch/libnss_wins.$SHLIBEXT"
6190 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
6191 NSSSONAMEVERSIONSUFFIX=""
6193 case "$host_os" in
6194         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
6195                 NSSSONAMEVERSIONSUFFIX=".2"
6196                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_linux.o"
6197                 ;;
6198         *freebsd[[5-9]]*)
6199                 # FreeBSD winbind client is implemented as a wrapper around
6200                 # the Linux version.
6201                 NSSSONAMEVERSIONSUFFIX=".1"
6202                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_freebsd.o \
6203                     ../nsswitch/winbind_nss_linux.o"
6204                 WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
6205                 WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
6206                 ;;
6208         *netbsd*[[3-9]]*)
6209                 # NetBSD winbind client is implemented as a wrapper
6210                 # around the Linux version. It needs getpwent_r() to
6211                 # indicate libc's use of the correct nsdispatch API.
6212                 #
6213                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
6214                         WINBIND_NSS_EXTRA_OBJS="\
6215                             ../nsswitch/winbind_nss_netbsd.o \
6216                             ../nsswitch/winbind_nss_linux.o"
6217                         WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
6218                         WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
6219                 else
6220                         HAVE_WINBIND=no
6221                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
6222                 fi
6223                 ;;
6224         *irix*)
6225                 # IRIX has differently named shared libraries
6226                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_irix.o"
6227                 WINBIND_NSS="../nsswitch/libns_winbind.$SHLIBEXT"
6228                 WINBIND_WINS_NSS="../nsswitch/libns_wins.$SHLIBEXT"
6229                 ;;
6230         *solaris*)
6231                 # Solaris winbind client is implemented as a wrapper around
6232                 # the Linux version.
6233                 NSSSONAMEVERSIONSUFFIX=".1"
6234                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o \
6235                     ../nsswitch/winbind_nss_linux.o"
6236                 ;;
6237         *hpux11*)
6238                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o"
6239                 ;;
6240         *aix*)
6241                 # AIX has even differently named shared libraries.  No
6242                 # WINS support has been implemented yet.
6243                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_aix.o"
6244                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
6245                 WINBIND_NSS="../nsswitch/WINBIND"
6246                 WINBIND_WINS_NSS=""
6247                 ;;
6248         *)
6249                 HAVE_WINBIND=no
6250                 winbind_no_reason=", unsupported on $host_os"
6251                 ;;
6252 esac
6254 # Check the setting of --with-winbind
6256 AC_ARG_WITH(winbind,
6257 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
6259   case "$withval" in
6260         yes)
6261                 HAVE_WINBIND=yes
6262                 HAVE_WBCLIENT=no
6263                 ;;
6264         no)
6265                 HAVE_WINBIND=no
6266                 winbind_reason=""
6267                 ;;
6268   esac ],
6271 # We need unix domain sockets for winbind
6273 if test x"$HAVE_WINBIND" = x"yes"; then
6274         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
6275                 winbind_no_reason=", no unix domain socket support on $host_os"
6276                 HAVE_WINBIND=no
6277         fi
6280 # Display test results
6282 if test x"$HAVE_WINBIND" = x"no"; then
6283         WINBIND_NSS=""
6284         WINBIND_WINS_NSS=""
6286 if test x"$HAVE_WBCLIENT" = x"yes"; then
6287         AC_CHECK_LIB(wbclient, wbcInterfaceDetails,
6288                      [LIBWBCLIENT_LIBS="-lwbclient"], AC_MSG_ERROR([Could not find wbclient]), [$WBCLIENT_LDFLAGS])
6289         LIBWBCLIENT_LIBS="$LIBWBCLIENT_LIBS $WBCLIENT_LDFLAGS"
6290         AC_MSG_RESULT(yes)
6291         AC_DEFINE(WITH_WINBIND,1,[Whether to link to wbclient])
6292         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6293 else
6294         if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
6295                 BUILD_LIBWBCLIENT_SHARED=no
6296         else
6297                 BUILD_LIBWBCLIENT_SHARED=yes
6298         fi
6300         LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
6301         LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
6302         LIBWBCLIENT_SOVER=0
6303         if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
6304                 NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6305                 ## Only worry about libwbclient if we have shared
6306                 # library support
6307                 LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
6308                 LIBWBCLIENT=libwbclient
6309                 INSTALL_LIBWBCLIENT=installlibwbclient
6310                 UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
6311                 LIBWBCLIENT_LIBS="-lwbclient"
6312         else
6313                 LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
6314                 LIBWBCLIENT_LIBS=$LIBWBCLIENT_STATIC_TARGET
6315         fi
6318 if test x"$HAVE_WINBIND" = x"yes"; then
6319         AC_MSG_RESULT(yes)
6320         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6322         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6323         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6324         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6325                 PAM_MODULES="$PAM_MODULES pam_winbind"
6326                 INSTALL_PAM_MODULES="installpammodules"
6327                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6328         fi
6330         # we use winbind, check for krb5 locate_plugin support:
6331         AC_CHECK_HEADERS([krb5/locate_plugin.h], [], [],
6332                 [[#ifdef HAVE_KRB5_H
6333                  #include <krb5.h>
6334                  #endif
6335         ]])
6336         if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
6337                 WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
6338                 if test x"$BLDSHARED" = x"true" ; then
6339                         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
6340                 fi
6341         fi
6342         # end of krb5 locate_plugin check
6343 else
6344         AC_MSG_RESULT(no$winbind_no_reason)
6347 AC_SUBST(WINBIND_NSS)
6348 AC_SUBST(WINBIND_WINS_NSS)
6349 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
6350 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
6351 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
6353 AC_SUBST(WINBIND_KRB5_LOCATOR)
6355 # Solaris 10 does have new member in nss_XbyY_key
6356 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6357                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6358                 [#include <nss_dbdefs.h>])
6360 # Solaris has some extra fields in struct passwd that need to be
6361 # initialised otherwise nscd crashes.
6363 AC_CHECK_MEMBER(struct passwd.pw_comment,
6364                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6365                 [#include <pwd.h>])
6367 AC_CHECK_MEMBER(struct passwd.pw_age,
6368                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6369                 [#include <pwd.h>])
6371 # AIX 4.3.x and 5.1 do not have as many members in
6372 # struct secmethod_table as AIX 5.2
6373 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6374        [#include <usersec.h>])
6375 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6376        [#include <usersec.h>])
6378 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6379 AC_TRY_COMPILE([#include <sys/types.h>
6380 #include <sys/socket.h>],
6381 [struct ucred cred;
6382  socklen_t cred_len;
6383  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6385 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6386 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6387     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6390 AC_CACHE_CHECK([for getpeereid],samba_cv_HAVE_GETPEEREID,[
6391 AC_TRY_LINK([#include <sys/types.h>
6392 #include <unistd.h>],
6393 [uid_t uid; gid_t gid; int ret;
6394  ret = getpeereid(0, &uid, &gid);
6396 samba_cv_HAVE_GETPEEREID=yes,samba_cv_HAVE_GETPEEREID=no)])
6397 if test x"$samba_cv_HAVE_GETPEEREID" = xyes; then
6398    AC_DEFINE(HAVE_GETPEEREID,1,
6399              [Whether we have getpeereid to get socket credentials])
6403 #################################################
6404 # Check to see if we should use the included popt
6406 AC_ARG_WITH(included-popt,
6407 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
6409   case "$withval" in
6410         yes)
6411                 INCLUDED_POPT=yes
6412                 ;;
6413         no)
6414                 INCLUDED_POPT=no
6415                 ;;
6416   esac ],
6418 if test x"$INCLUDED_POPT" != x"yes"; then
6419     AC_CHECK_LIB(popt, poptGetContext,
6420                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6423 AC_MSG_CHECKING(whether to use included popt)
6424 if test x"$INCLUDED_POPT" = x"yes"; then
6425     AC_MSG_RESULT(yes)
6426     BUILD_POPT='$(POPT_OBJ)'
6427     POPTLIBS='$(POPT_OBJ)'
6428     FLAGS1="-I\$(srcdir)/../lib/popt"
6429 else
6430     AC_MSG_RESULT(no)
6431         BUILD_POPT=""
6432     POPTLIBS="-lpopt"
6434 AC_SUBST(BUILD_POPT)
6435 AC_SUBST(POPTLIBS)
6436 AC_SUBST(FLAGS1)
6438 #################################################
6439 # Check if user wants DNS service discovery support
6441 AC_ARG_ENABLE(dnssd,
6442 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=no)])])
6444 AC_SUBST(DNSSD_LIBS)
6445 if test x"$enable_dnssd" = x"yes"; then
6446     have_dnssd_support=yes
6448     AC_CHECK_HEADERS(dns_sd.h)
6449     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6450         have_dnssd_support=no
6451     fi
6453     # On Darwin the DNSSD API is in libc, but on other platforms it's
6454     # probably in -ldns_sd
6455     AC_CHECK_FUNCS(DNSServiceRegister)
6456     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6457     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6458             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6459         have_dnssd_support=no
6460     fi
6462     if test x"$have_dnssd_support" = x"yes"; then
6463         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6464                 [Whether to enable DNS service discovery support])
6465     else
6466         if test x"$enable_dnssd" = x"yes"; then
6467             AC_MSG_ERROR(DNS service discovery support not available)
6468         fi
6469     fi
6473 #################################################
6474 # Check if user wants avahi support
6476 AC_ARG_ENABLE(avahi,
6477 [AS_HELP_STRING([--enable-avahi], [Enable Avahi support (default=auto)])])
6479 if test x"$enable_avahi" != x"no"; then
6480     have_avahi_support=yes
6482     AC_CHECK_HEADERS(avahi-common/watch.h)
6483     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6484         have_avahi_support=no
6485     fi
6487     AC_CHECK_HEADERS(avahi-client/client.h)
6488     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6489         have_avahi_support=no
6490     fi
6492     save_LIBS="$LIBS"
6493     AC_CHECK_LIB(avahi-client, avahi_client_new,[have_avahi_client_new=yes])
6494     AC_CHECK_LIB(avahi-common, avahi_strerror,[have_avahi_strerror=yes])
6495     LIBS="$save_LIBS"
6497     if test x"$have_avahi_client_new" != x"yes" -o \
6498        x"$have_avahi_strerror" != x"yes" ; then
6499         have_avahi_support=no
6500     fi
6502     if test x"$have_avahi_support" = x"yes"; then
6503         AC_SUBST(AVAHI_LIBS, "-lavahi-client -lavahi-common")
6504         AC_DEFINE(WITH_AVAHI_SUPPORT, 1,
6505                 [Whether to enable avahi support])
6506         AC_SUBST(AVAHI_OBJ, "lib/avahi.o smbd/avahi_register.o")
6507     else
6508         if test x"$enable_avahi" = x"yes"; then
6509             AC_MSG_ERROR(avahi support not available)
6510         fi
6511     fi
6515 #################################################
6516 # Set pthread stuff
6518 PTHREAD_CFLAGS=error
6519 PTHREAD_LDFLAGS=error
6521 # If it's error, then the user didn't 
6522 # define it.
6523 if test "x$PTHREAD_LDFLAGS" = xerror; then
6524   AC_CHECK_LIB(pthread, pthread_attr_init, [
6525              PTHREAD_CFLAGS="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
6526              PTHREAD_LDFLAGS="-lpthread" ])
6529 if test "x$PTHREAD_LDFLAGS" = xerror; then
6530   AC_CHECK_LIB(pthreads, pthread_attr_init, [
6531              PTHREAD_CFLAGS="-D_THREAD_SAFE"
6532              PTHREAD_LDFLAGS="-lpthreads" ])
6535 if test "x$PTHREAD_LDFLAGS" = xerror; then
6536    AC_CHECK_LIB(c_r, pthread_attr_init, [
6537                 PTHREAD_CFLAGS="-D_THREAD_SAFE -pthread"
6538                 PTHREAD_LDFLAGS="-pthread" ])
6541 if test "x$PTHREAD_LDFLAGS" = xerror; then
6542    AC_CHECK_FUNC(pthread_attr_init, [
6543                  PTHREAD_CFLAGS="-D_REENTRANT"
6544                  PTHREAD_LDFLAGS="-lpthread" ])
6547 # especially for HP-UX, where the AC_CHECK_FUNC macro fails to test for
6548 # pthread_attr_init. On pthread_mutex_lock it works there...
6549 if test "x$PTHREAD_LDFLAGS" = xerror; then
6550    AC_CHECK_LIB(pthread, pthread_mutex_lock, [
6551                 PTHREAD_CFLAGS="-D_REENTRANT"
6552                 PTHREAD_LDFLAGS="-lpthread" ])
6555 AC_SUBST(PTHREAD_CFLAGS)
6556 AC_SUBST(PTHREAD_LDFLAGS)
6558 samba_cv_HAVE_PTHREAD=no
6559 if test x"$PTHREAD_CFLAGS" != xerror -a x"$PTHREAD_LDFLAGS" != xerror; then
6560         samba_cv_HAVE_PTHREAD=yes
6561         # now check for pthread.h with pthread-correct CFLAGS and LDFLAGS:
6562         ac_save_CFLAGS=$CFLAGS
6563         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6564         ac_save_LDFLAGS=$LDFLAGS
6565         LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
6566         AC_CHECK_HEADERS(pthread.h)
6567         CFLAGS=$ac_save_CFLAGS
6568         LDFLAGS=$ac_save_LDFLAGS
6569         AC_DEFINE(HAVE_PTHREAD, 1, [Do we have pthreads around?])
6572 #################################################
6573 # Check if user wants pthreadpool support
6575 AC_ARG_ENABLE(pthreadpool,
6576 [AS_HELP_STRING([--enable-pthreadpool], [Enable pthreads pool helper support (default=no)])])
6578 if test x"$enable_pthreadpool" = xyes -a x"$samba_cv_HAVE_PTHREAD" != x"yes"; then
6579         AC_MSG_ERROR([pthreadpool support cannot be enabled when pthread support was not found])
6582 if test x"$enable_pthreadpool" = x"yes" -a x"$samba_cv_HAVE_PTHREAD" = x"yes"; then
6583     LIBS="$LIBS $PTHREAD_LDFLAGS"
6584     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6585     AC_DEFINE(WITH_PTHREADPOOL, 1, [Whether to include pthreadpool helpers])
6586     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool.o")
6589 #################################################
6590 # Check to see if we should use the included iniparser
6592 AC_ARG_WITH(included-iniparser,
6593 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6595   case "$withval" in
6596         yes)
6597                 INCLUDED_INIPARSER=yes
6598                 ;;
6599         no)
6600                 INCLUDED_INIPARSER=no
6601                 ;;
6602   esac ],
6604 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6605     AC_CHECK_LIB(iniparser, iniparser_load,
6606                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6609 AC_MSG_CHECKING(whether to use included iniparser)
6610 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6611     AC_MSG_RESULT(yes)
6612     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6613         INIPARSERLIBS=""
6614     FLAGS1="$FLAGS1 -I\$(srcdir)/../lib/iniparser/src"
6615 else
6616     AC_MSG_RESULT(no)
6617         BUILD_INIPARSER=""
6618     INIPARSERLIBS="-liniparser"
6620 AC_SUBST(BUILD_INIPARSER)
6621 AC_SUBST(INIPARSERLIBS)
6622 AC_SUBST(FLAGS1)
6624 ###################################################
6625 # Check for different/missing (set|get|end)netgrent prototypes
6626 CFLAGS_SAVE=$CFLAGS
6627 if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
6628         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6630 AC_CACHE_CHECK([for setnetgrent prototype],samba_cv_setnetgrent_prototype, [
6631     AC_TRY_COMPILE([#include<netdb.h>
6632                     #ifdef HAVE_NETGROUP_H
6633                     #include<netgroup.h>
6634                     #endif],[setnetgrent("foo")],
6635                     samba_cv_setnetgrent_prototype=yes, samba_cv_setnetgrent_prototype=no)])
6636 if test x"$samba_cv_setnetgrent_prototype" = x"yes"; then
6637     AC_DEFINE(HAVE_SETNETGRENT_PROTOTYPE, 1, [If setnetgrent prototype is defined])
6639 AC_CACHE_CHECK([for getnetgrent prototype],samba_cv_getnetgrent_prototype, [
6640     AC_TRY_COMPILE([#include<netdb.h>
6641                     #ifdef HAVE_NETGROUP_H
6642                     #include<netgroup.h>
6643                     #endif],[char *dom, *user,*host; getnetgrent(&dom,&user,&host)],
6644                     samba_cv_getnetgrent_prototype=yes, samba_cv_getnetgrent_prototype=no)])
6645 if test x"$samba_cv_getnetgrent_prototype" = x"yes"; then
6646     AC_DEFINE(HAVE_GETNETGRENT_PROTOTYPE, 1, [If getnetgrent prototype is defined])
6648 AC_CACHE_CHECK([for endnetgrent prototype],samba_cv_endnetgrent_prototype, [
6649     AC_TRY_COMPILE([#include<netdb.h>
6650                     #ifdef HAVE_NETGROUP_H
6651                     #include<netgroup.h>
6652                     #endif],[endnetgrent()],
6653                     samba_cv_endnetgrent_prototype=yes, samba_cv_endnetgrent_prototype=no)])
6654 if test x"$samba_cv_endnetgrent_prototype" = x"yes"; then
6655     AC_DEFINE(HAVE_ENDNETGRENT_PROTOTYPE, 1, [If endnetgrent prototype is defined])
6658 CFLAGS=$CFLAGS_SAVE
6660 # Checks for the vfs_fileid module
6661 # Start
6662 AC_CHECK_FUNC(getmntent)
6664 AC_CHECK_HEADERS(sys/statfs.h)
6666 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
6667 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6668              AC_TRY_RUN([
6669                 #include <sys/types.h>
6670                 #include <sys/statfs.h>
6671                 int main(void)
6672                 {
6673                         struct statfs fsd;
6674                         fsid_t fsid = fsd.f_fsid;
6675                         return statfs (".", &fsd);
6676                 }],
6677                 vfsfileid_cv_statfs=yes,
6678                 vfsfileid_cv_statfs=no,
6679                 vfsfileid_cv_statfs=cross)
6681 AC_MSG_RESULT($vfsfileid_cv_statfs)
6683 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6684         x"$vfsfileid_cv_statfs" = x"yes"; then
6685         default_shared_modules="$default_shared_modules vfs_fileid"
6687 # End
6688 # Checks for the vfs_fileid module
6691 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6693         eval MODULE_DEFAULT_$i=STATIC
6694 done
6696 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6698         dnl Fall back to static if we cannot build shared libraries
6699         eval MODULE_DEFAULT_$i=STATIC
6701         if test $BLDSHARED = true; then
6702                 eval MODULE_DEFAULT_$i=SHARED
6703         fi
6704 done
6706 dnl Always build these modules static
6707 MODULE_rpc_spoolss=STATIC
6708 MODULE_rpc_srvsvc=STATIC
6709 MODULE_idmap_tdb=STATIC
6710 MODULE_idmap_passdb=STATIC
6711 MODULE_idmap_nss=STATIC
6713 MODULE_nss_info_template=STATIC
6715 AC_ARG_WITH(static-modules,
6716 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6717 [ if test $withval; then
6718         for i in `echo $withval | sed -e 's/,/ /g'`
6719         do
6720                 eval MODULE_$i=STATIC
6721         done
6722 fi ])
6724 AC_ARG_WITH(shared-modules,
6725 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6726 [ if test $withval; then
6727         for i in `echo $withval | sed -e 's/,/ /g'`
6728         do
6729                         eval MODULE_$i=SHARED
6730         done
6731 fi ])
6733 if test x"$MODULE_DEFAULT_vfs_notify_fam" = xSTATIC -o \
6734                 x"$MODULE_vfs_notify_fam" = xSTATIC ; then
6735         SMBD_FAM_LIBS="$SMB_FAM_LIBS"
6736         AC_SUBST(SMBD_FAM_LIBS)
6739 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o passdb/pdb_ipa.o,
6740                    "bin/ldapsam.$SHLIBEXT", PDB,
6741                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6742 SMB_MODULE(pdb_ads, passdb/pdb_ads.o \$(TLDAP_OBJ), "bin/ads.$SHLIBEXT", PDB)
6743 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6744 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6745 SMB_MODULE(pdb_wbc_sam, passdb/pdb_wbc_sam.o, "bin/wbc_sam.$SHLIBEXT", PDB)
6746 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6748 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6749 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6750 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6751 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6752 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6753 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6754 SMB_MODULE(idmap_autorid, winbindd/idmap_autorid.o, "bin/autorid.$SHLIBEXT", IDMAP)
6755 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6756 SMB_MODULE(idmap_hash, \$(IDMAP_HASH_OBJ), "bin/hash.$SHLIBEXT", IDMAP)
6757 SMB_MODULE(idmap_adex, \$(IDMAP_ADEX_OBJ), "bin/adex.$SHLIBEXT", IDMAP)
6758 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6760 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6761 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6763 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6764 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6765 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6766 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6767 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6769 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6770 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6771 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6772 SMB_MODULE(auth_wbc, \$(AUTH_WBC_OBJ), "bin/wbc.$SHLIBEXT", AUTH)
6773 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6774 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6775 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6776 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6777 SMB_MODULE(auth_netlogond, \$(AUTH_NETLOGOND_OBJ), "bin/netlogond.$SHLIBEXT", AUTH)
6778 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6780 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6781 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6782 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6783 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6784 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6785 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6786 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6787 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6788 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6789 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6790 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6791 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6792 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6793 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6794 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6795 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6796 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6797 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6798 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6799 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6800 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6801 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6802 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6803 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6804 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6805 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6806 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6807 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6808 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6809 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6810 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6811 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6812 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6813 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6814 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6815 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6816 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6817 SMB_MODULE(vfs_acl_xattr, \$(VFS_ACL_XATTR_OBJ), "bin/acl_xattr.$SHLIBEXT", VFS)
6818 SMB_MODULE(vfs_acl_tdb, \$(VFS_ACL_TDB_OBJ), "bin/acl_tdb.$SHLIBEXT", VFS)
6819 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6820 SMB_MODULE(vfs_onefs, \$(VFS_ONEFS), "bin/onefs.$SHLIBEXT", VFS)
6821 SMB_MODULE(vfs_onefs_shadow_copy, \$(VFS_ONEFS_SHADOW_COPY), "bin/onefs_shadow_copy.$SHLIBEXT", VFS)
6822 SMB_MODULE(vfs_dirsort, \$(VFS_DIRSORT_OBJ), "bin/dirsort.$SHLIBEXT", VFS)
6823 SMB_MODULE(vfs_scannedonly, \$(VFS_SCANNEDONLY_OBJ), "bin/scannedonly.$SHLIBEXT", VFS)
6824 SMB_MODULE(vfs_crossrename, \$(VFS_CROSSRENAME_OBJ), "bin/crossrename.$SHLIBEXT", VFS)
6825 SMB_MODULE(vfs_linux_xfs_sgid, \$(VFS_LINUX_XFS_SGID_OBJ), "bin/linux_xfs_sgid.$SHLIBEXT", VFS)
6826 SMB_MODULE(vfs_time_audit, \$(VFS_TIME_AUDIT_OBJ), "bin/time_audit.$SHLIBEXT", VFS)
6828 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6830 SMB_MODULE(perfcount_onefs, \$(PERFCOUNT_ONEFS), "bin/pc_onefs.$SHLIBEXT", PERFCOUNT)
6831 SMB_MODULE(perfcount_test, \$(PERFCOUNT_TEST), "bin/pc_test.$SHLIBEXT", PERFCOUNT)
6832 SMB_SUBSYSTEM(PERFCOUNT,smbd/perfcount.o)
6834 SMB_MODULE(gpext_registry, libgpo/gpext/registry.o, "bin/registry.$SHLIBEXT", GPEXT)
6835 SMB_MODULE(gpext_scripts, libgpo/gpext/scripts.o, "bin/scripts.$SHLIBEXT", GPEXT)
6836 SMB_MODULE(gpext_security, libgpo/gpext/security.o, "bin/security.$SHLIBEXT", GPEXT)
6837 SMB_SUBSYSTEM(GPEXT, libgpo/gpext/gpext.o)
6839 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6841 #################################################
6842 # do extra things if we are running insure
6844 if test "${ac_cv_prog_CC}" = "insure"; then
6845         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6848 #################################################
6849 # If run from the build farm, enable NASTY hacks
6850 #################################################
6851 AC_MSG_CHECKING(whether to enable build farm hacks)
6852 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6853         AC_MSG_RESULT(yes)
6854         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6855 else
6856         AC_MSG_RESULT(no)
6859 #################################################
6860 # check for bad librt/libpthread interactions
6862 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6863     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6864     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6865     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6867 SMB_IF_RTSIGNAL_BUG(
6868         [
6869             # Have RT_SIGNAL bug, need to check whether the problem will
6870             # affect anything we have configured.
6872             rt_do_error=no
6873             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6874                 if test x"$rt_signal_lease_ok" = x"no" ; then
6875                     rt_do_error=yes
6876                 fi
6877             fi
6879             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6880                 if test x"$rt_signal_notify_ok" = x"no" ; then
6881                     rt_do_error=yes
6882                 fi
6883             fi
6885             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6886                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6887                 if test x"$rt_signal_aio_ok" = x"no" ; then
6888                     rt_do_error=yes
6889                 fi
6890             fi
6892             if test x"$rt_do_error" = x"yes" ; then
6893                 SMB_IS_LIBPTHREAD_LINKED(
6894                     [
6895                         cat<<MSG
6897 *** On this platforms, linking Samba against pthreads causes problems
6898 *** with the oplock and change notification mechanisms. You may be
6899 *** using pthreads as a side-effect of using the --with-aio-support
6900 *** or --with-profiling-data options. Please remove these and try again.
6903                     ],
6904                     [
6905                         cat<<MSG
6907 *** On this platform, the oplock and change notification mechanisms do not
6908 *** appear to work. Please report this problem to samba-technical@samba.org
6909 *** and attach the config.log file from this directory.
6912                     ])
6913                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6914             fi
6915         ],
6916         [
6917             # no RT_SIGNAL bug, we are golden
6918             SMB_IS_LIBPTHREAD_LINKED(
6919                 [
6920                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6921                 ])
6923         ],
6924         [
6925             # cross compiling, I hope you know what you are doing
6926             true
6927         ])
6931 m4_include(../lib/zlib/zlib.m4)
6933 if test x$smbtorture4_possible = xyes; then
6934         saved_USESHARED="$USESHARED"
6935         USESHARED="false"
6936         smbtorture4_path="bin/smbtorture4"
6937         smbtorture4_option="-t bin/smbtorture4"
6938         AC_SUBST(smbtorture4_path)
6939         AC_SUBST(smbtorture4_option)
6940         USESHARED="$saved_USESHARED"
6941         SMBTORTURE4="bin/smbtorture4"
6942         AC_SUBST(SMBTORTURE4)
6945 AC_SUBST(ZLIB_LIBS)
6946 AC_SUBST(ZLIB_OBJS)
6947 AC_ZLIB([ZLIB_OBJS=""], [
6948         ZLIB_LIBS=""
6949         for o in adler32.o compress.o crc32.o gzio.o uncompr.o \
6950                      deflate.o trees.o zutil.o inflate.o infback.o \
6951                          inftrees.o inffast.o
6952         do
6953                 ZLIB_OBJS="$ZLIB_OBJS ../lib/zlib/$o"
6954         done
6955         CFLAGS="-I../lib/zlib $CFLAGS"
6958 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
6960 if test "x$enable_dmalloc" = xyes
6961 then
6962         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
6963         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
6964                   [Define to check invariants around some common functions])
6965         LIBS="$LIBS -ldmalloc"
6968 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6969 LIB_REMOVE_USR_LIB(LDFLAGS)
6970 LIB_REMOVE_USR_LIB(LIBS)
6972 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6973 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6974 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6976 #################################################
6977 # Display summary of libraries detected
6979 AC_MSG_RESULT([Using libraries:])
6980 AC_MSG_RESULT([    LIBS = $LIBS])
6981 if test x"$with_ads_support" != x"no"; then
6982     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6984 if test x"$with_ldap_support" != x"no"; then
6985     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6987 if test x"$with_dnsupdate_support" != x"no"; then
6988     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6990 if test x"$have_dnssd_support" != x"no"; then
6991     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6993 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6995 #################################################
6996 # final configure stuff
6998 AC_MSG_CHECKING([configure summary])
6999 AC_TRY_RUN([#include "${srcdir-.}/../tests/summary.c"],
7000            AC_MSG_RESULT(yes),
7001            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
7002            AC_MSG_WARN([cannot run when cross-compiling]))
7004 dnl Merge in developer cflags from now on
7005 AC_SUBST(DEVELOPER_CFLAGS)
7006 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes" -o x"$picky_developer" = x"yes"; then
7007     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
7010 # Stuff the smbd-only libraries at the end of the smbd link
7011 # path (if we have them).
7012 SMBD_LIBS="$samba_dmapi_libs"
7013 AC_SUBST(SMBD_LIBS)
7015 CFLAGS="${CFLAGS} \$(FLAGS)"
7016 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
7018 # If we had to expand the includes, make tsure the output file is moved back
7019 AC_OUTPUT_COMMANDS([
7020 if test -f Makefile-noincludes -a ! -f Makefile -a ! -h Makefile ; then
7021         ln -s Makefile-noincludes Makefile
7025 AC_OUTPUT(Makefile
7026           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
7027           lib/netapi/examples/Makefile
7028           lib/netapi/tests/Makefile
7029           pkgconfig/smbclient.pc
7030           pkgconfig/wbclient.pc
7031           pkgconfig/netapi.pc
7032           pkgconfig/smbsharemodes.pc
7033           ../examples/libsmbclient/Makefile.internal
7034           )
7036 #################################################
7037 # Print very concise instructions on building/use
7038 if test "x$enable_dmalloc" = xyes
7039 then
7040         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
7041         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])