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