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