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