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