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