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