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