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