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