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