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