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