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