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