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