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