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