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