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