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