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