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