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