Fix bug 5691: SIGBUS on Solaris
[Samba.git] / source / configure.in
blobf28da357dbe4df2c647b20d1276d622c29c829c8
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
759                 AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
760                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
761                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
762                 PRINT_LIBS="$PRINT_LIBS `$CUPS_CONFIG --libs`"
763         elif test x"$enable_cups" = x"yes"; then
764                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
765         fi
768 AC_ARG_ENABLE(iprint,
769 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
771 if test x$enable_iprint != xno; then
772         if test "x$CUPS_CONFIG" != x; then
773                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
774         elif test x"$enable_iprint" = x"yes"; then
775                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
776         fi
779 ############################################
780 # check if the compiler will optimize out function calls
781 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
782     AC_TRY_LINK([
783 #include <stdio.h>],
785                 if (0) {
786                    this_function_does_not_exist();
787                 } else {
788                   return 1;
789                 }
792         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
793 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
794    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
797 #############################################
798 # check for fd passing struct via msg_control
799 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
800     AC_TRY_COMPILE([
801 #include <sys/types.h>
802 #include <stdlib.h>
803 #include <stddef.h>
804 #include <sys/socket.h>
805 #include <sys/un.h>],
807         struct msghdr msg;
808         union {
809               struct cmsghdr cm;
810               char control[CMSG_SPACE(sizeof(int))];
811         } control_un;
812         msg.msg_control = control_un.control;
813         msg.msg_controllen = sizeof(control_un.control);
815         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
816 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
817    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
818              [If we can use msg_control for passing file descriptors])
821 #############################################
822 # check for fd passing struct via msg_acctrights
823 AC_CACHE_CHECK([for fd passing via msg_acctrights],
824                 samba_cv_msghdr_msg_acctrights, [
825     AC_TRY_COMPILE([
826 #include <sys/types.h>
827 #include <stdlib.h>
828 #include <stddef.h>
829 #include <sys/socket.h>
830 #include <sys/un.h>],
832         struct msghdr msg;
833         int fd;
834         msg.msg_acctrights = (caddr_t) &fd;
835         msg.msg_acctrightslen = sizeof(fd);
837         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
838 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
839    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
840              [If we can use msg_acctrights for passing file descriptors])
843 AC_CHECK_FUNCS(dirfd)
844 if test x"$ac_cv_func_dirfd" = x"yes"; then
845         default_shared_modules="$default_shared_modules vfs_syncops"
848 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
849     AC_TRY_COMPILE([
850 #include <sys/types.h>
851 #if STDC_HEADERS
852 #include <stdlib.h>
853 #include <stddef.h>
854 #endif
855 #include <signal.h>],[sig_atomic_t i = 0],
856         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
857 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
858    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
861 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
862     AC_TRY_COMPILE([
863 #include <sys/types.h>
864 #if STDC_HEADERS
865 #include <stdlib.h>
866 #include <stddef.h>
867 #endif
868 #include <signal.h>],[struct sigevent s;],
869         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
870 if test x"$samba_cv_struct_sigevent" = x"yes"; then
871    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
872    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
873         [#include <signal.h>])
876 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
877     AC_TRY_COMPILE([
878 #include <sys/types.h>
879 #if STDC_HEADERS
880 #include <stdlib.h>
881 #include <stddef.h>
882 #endif
883 #if TIME_WITH_SYS_TIME
884 # include <sys/time.h>
885 # include <time.h>
886 #else
887 # if HAVE_SYS_TIME_H
888 #  include <sys/time.h>
889 # else
890 #  include <time.h>
891 # endif
892 #endif
893 ],[struct timespec ts;],
894         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
895 if test x"$samba_cv_struct_timespec" = x"yes"; then
896    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
899 # stupid headers have the functions but no declaration. grrrr.
900 AC_HAVE_DECL(errno, [#include <errno.h>])
901 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
902 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
904 # and glibc has setresuid under linux but the function does
905 # nothing until kernel 2.1.44! very dumb.
906 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
907     AC_TRY_RUN([#include <errno.h>
908 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
909         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
910 if test x"$samba_cv_have_setresuid" = x"yes"; then
911     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
914 # Do the same check for setresguid...
916 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
917     AC_TRY_RUN([#include <unistd.h>
918 #include <errno.h>
919 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
920         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
921 if test x"$samba_cv_have_setresgid" = x"yes"; then
922     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
925 AC_FUNC_MEMCMP
927 ###############################################
928 # Readline included by default unless explicitly asked not to
929 test "${with_readline+set}" != "set" && with_readline=yes
931 # test for where we get readline() from
932 AC_MSG_CHECKING(whether to use readline)
933 AC_ARG_WITH(readline,
934 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
935 [  case "$with_readline" in
936   yes)
937     AC_MSG_RESULT(yes)
939     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
940     AC_CHECK_HEADERS(readline/history.h)
942     AC_CHECK_HEADERS(readline.h readline/readline.h,[
943       for termlib in ncurses curses termcap terminfo termlib tinfo; do
944        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
945       done
946       AC_CHECK_LIB(readline, rl_callback_handler_install,
947        [TERMLIBS="-lreadline $TERMLIBS"
948        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
949        break], [TERMLIBS=], $TERMLIBS)])
950     ;;
951   no)
952     AC_MSG_RESULT(no)
953     ;;
954   *)
955     AC_MSG_RESULT(yes)
957     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
958     # alternate readline path
959     _ldflags=${LDFLAGS}
960     _cppflags=${CPPFLAGS}
962     # Add additional search path
963     LDFLAGS="-L$with_readline/lib $LDFLAGS"
964     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
966     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
967     AC_CHECK_HEADERS(readline/history.h)
969     AC_CHECK_HEADERS(readline.h readline/readline.h,[
970       for termlib in ncurses curses termcap terminfo termlib; do
971        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
972       done
973       AC_CHECK_LIB(readline, rl_callback_handler_install,
974        [TERMLDFLAGS="-L$with_readline/lib"
975        TERMCPPFLAGS="-I$with_readline/include"
976        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
977        TERMLIBS="-lreadline $TERMLIBS"
978        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
979        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
981     LDFLAGS=$_ldflags
982     ;;
983   esac],
984   AC_MSG_RESULT(no)
986 AC_SUBST(TERMLIBS)
987 AC_SUBST(TERMLDFLAGS)
989 # The readline API changed slightly from readline3 to readline4, so
990 # code will generate warnings on one of them unless we have a few
991 # special cases.
992 AC_CHECK_LIB(readline, rl_completion_matches,
993              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
994                         [Do we have rl_completion_matches?])],
995              [],
996              [$TERMLIBS])
998 # not all readline libs have rl_event_hook or history_list
999 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1000 AC_CHECK_LIB(readline, history_list,
1001              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1002              [],
1003              [$TERMLIBS])
1005 ###############################################
1006 # test for where we get yp_get_default_domain() from
1007 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1008 AC_CHECK_FUNCS(yp_get_default_domain)
1010 # Check if we have execl, if not we need to compile smbrun.
1011 AC_CHECK_FUNCS(execl)
1012 if test x"$ac_cv_func_execl" = x"no"; then
1013     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1016 AC_CHECK_FUNCS(waitpid getcwd strdup strndup strnlen strerror chown fchown lchown chmod fchmod chroot link mknod mknod64)
1017 AC_CHECK_FUNCS(strtol strtoll strtoul strtoull strtouq __strtoull)
1018 AC_CHECK_FUNCS(fstat strchr utime utimes chflags)
1019 AC_CHECK_FUNCS(getrlimit fsync fdatasync memset strlcpy strlcat setpgid)
1020 AC_CHECK_FUNCS(memmove setsid glob strpbrk pipe crypt16 getauthuid)
1021 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1022 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
1023 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate chsize stat64 fstat64)
1024 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64)
1025 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
1026 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1027 AC_CHECK_FUNCS(getpwent_r)
1028 AC_CHECK_FUNCS(getdents getdents64)
1029 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
1030 AC_CHECK_FUNCS(syslog vsyslog timegm)
1031 AC_CHECK_FUNCS(setlocale nl_langinfo)
1032 AC_CHECK_FUNCS(nanosleep)
1033 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1034 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1035 AC_CHECK_HEADERS(sys/mman.h)
1036 # setbuffer, shmget, shm_open are needed for smbtorture
1037 AC_CHECK_FUNCS(setbuffer shmget shm_open)
1039 # Find a method of generating a stack trace
1040 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1041 AC_CHECK_FUNCS(backtrace_symbols)
1042 AC_CHECK_LIB(exc, trace_back_stack)
1044 printf "%s" "checking for GPFS GPL libs... "
1045 save_LIBS="$LIBS"
1046 LIBS="$LIBS -lgpfs_gpl"
1047 AC_TRY_LINK([#include <gpfs_gpl.h>],
1048           [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
1049           samba_cv_HAVE_GPFS=yes,
1050           samba_cv_HAVE_GPFS=no)
1051 echo $samba_cv_HAVE_GPFS
1052 if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
1053     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
1054     default_shared_modules="$default_shared_modules vfs_gpfs"
1056 LIBS="$save_LIBS"
1058 # Note that all the libunwind symbols in the API are defined to internal
1059 # platform-specific version, so we must include libunwind.h before checking
1060 # any of them.
1061 AC_MSG_CHECKING([for libunwind])
1062 save_LIBS=$LIBS
1064 UNWIND_ARCH="unknown"
1065 if test x"$UNAME_I" != x"unknown"; then
1066         UNWIND_ARCH="$UNAME_I"
1067 elif test x"$UNAME_M" != x"unknown"; then
1068         UNWIND_ARCH="$UNAME_M"
1069 elif test x"$UNAME_P" != x"unknown"; then
1070         UNWIND_ARCH="$UNAME_P"
1073 case "$UNWIND_ARCH" in
1074         unknown)
1075                 # This probably won't link without
1076                 # the platform-specific libunwind.
1077                 LIBS="$LIBS -lunwind"
1078                 ;;
1079         i386|i586|i686)
1080                 # Add the platform-specific libunwind module.
1081                 LIBS="$LIBS -lunwind -lunwind-x86"
1082                 ;;
1083         *)
1084                 # Add the platform-specific libunwind module.
1085                 # based on uname -i, uname -m or uname -p
1086                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1087                 ;;
1088 esac
1090 AC_TRY_LINK(
1091     [
1092 #ifdef HAVE_LIBUNWIND_H
1093 #include <libunwind.h>
1094 #endif
1095     ],
1096     [
1097         unw_context_t ctx; unw_cursor_t cur;
1098         char buf[256]; unw_word_t off;
1099         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1100         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1101     ],
1102     [
1103         AC_MSG_RESULT(yes)
1104         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1106         # If we have libunwind, test whether we also have libunwind-ptrace
1107         # which would let us unwind arbitrary processes.
1108         save_LIBS=$LIBS
1109         AC_CHECK_HEADERS(libunwind-ptrace.h)
1110         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1111             [
1112                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1113                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1114                     [Whether libunwind-ptrace.a is available.])
1115             ],
1116             [ LIBUNWIND_PTRACE="" ])
1118         LIBS=$save_LIBS
1119     ],
1120     [
1121         AC_MSG_RESULT(no)
1122         LIBS=$save_LIBS
1123     ])
1125 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1126 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1127     AC_CHECK_HEADERS(sys/ptrace.h)
1128     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1129     AC_TRY_LINK(
1130             [
1131 #if HAVE_SYS_TYPES_H
1132 #include <sys/types.h>
1133 #endif
1134 #if HAVE_SYS_PTRACE_H
1135 #include <sys/ptrace.h>
1136 #endif
1137             ],
1138             [
1139                 int main(int argc, const char ** argv)
1140                 {
1141                         pid_t me = (pid_t)-1;
1142                         ptrace(PTRACE_ATTACH, me, 0, 0);
1143                         ptrace(PTRACE_DETACH, me, 0, 0);
1144                         return 0;
1145                 }
1146             ],
1147             [
1148                 AC_MSG_RESULT(yes)
1149                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1150                     [Whether the Linux ptrace(2) interface is available.])
1151             ],
1152             [
1153                 AC_MSG_RESULT(no)
1154                 LIBUNWIND_PTRACE=""
1155             ])
1158 AC_SUBST(LIBUNWIND_PTRACE)
1160 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1161 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1162 AC_CHECK_FUNCS(__getcwd _getcwd)
1163 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1164 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1165 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1166 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1167 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1168 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1169 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1170 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1171 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1172 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1173 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1174 AC_CHECK_FUNCS(prctl)
1176 AC_TRY_COMPILE([
1177 #ifdef HAVE_SYS_PRCTL_H
1178 #include <sys/prctl.h>
1179 #endif
1181 [int i; i = prtcl(0); ],
1182 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1187 case "$host_os" in
1188     *linux*)
1189        # glibc <= 2.3.2 has a broken getgrouplist
1190        AC_TRY_RUN([
1191 #include <unistd.h>
1192 #include <sys/utsname.h>
1193 main() {
1194        /* glibc up to 2.3 has a broken getgrouplist */
1195 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1196        int libc_major = __GLIBC__;
1197        int libc_minor = __GLIBC_MINOR__;
1199        if (libc_major < 2)
1200               exit(1);
1201        if ((libc_major == 2) && (libc_minor <= 3))
1202               exit(1);
1203 #endif
1204        exit(0);
1206 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1207        if test x"$linux_getgrouplist_ok" = x"yes"; then
1208           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1209        fi
1210        ;;
1211     *)
1212        AC_CHECK_FUNCS(getgrouplist)
1213        ;;
1214 esac
1217 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1220 if test x$ac_cv_func_stat64 = xno ; then
1221   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1222   AC_TRY_LINK([
1223 #if defined(HAVE_UNISTD_H)
1224 #include <unistd.h>
1225 #endif
1226 #include <sys/stat.h>
1227 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1228   AC_MSG_RESULT([$ac_cv_func_stat64])
1229   if test x$ac_cv_func_stat64 = xyes ; then
1230     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1231   fi
1234 if test x$ac_cv_func_lstat64 = xno ; then
1235   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1236   AC_TRY_LINK([
1237 #if defined(HAVE_UNISTD_H)
1238 #include <unistd.h>
1239 #endif
1240 #include <sys/stat.h>
1241 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1242   AC_MSG_RESULT([$ac_cv_func_lstat64])
1243   if test x$ac_cv_func_lstat64 = xyes ; then
1244     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1245   fi
1248 if test x$ac_cv_func_fstat64 = xno ; then
1249   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1250   AC_TRY_LINK([
1251 #if defined(HAVE_UNISTD_H)
1252 #include <unistd.h>
1253 #endif
1254 #include <sys/stat.h>
1255 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1256   AC_MSG_RESULT([$ac_cv_func_fstat64])
1257   if test x$ac_cv_func_fstat64 = xyes ; then
1258     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1259   fi
1262 #################################################
1263 # Check whether struct stat has timestamps with sub-second resolution.
1264 # At least IRIX and Solaris have these.
1266 # We check that
1267 #       all of st_mtim, st_atim and st_ctim exist
1268 #       all of the members are in fact of type struct timespec
1270 # There is some conflicting standards weirdness about whether we should use
1271 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1272 # prefer struct timespec.
1274 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_cv_stat_hires,
1275     [
1276         AC_TRY_COMPILE(
1277             [
1278 #if TIME_WITH_SYS_TIME
1279 # include <sys/time.h>
1280 # include <time.h>
1281 #else
1282 # if HAVE_SYS_TIME_H
1283 #  include <sys/time.h>
1284 # else
1285 #  include <time.h>
1286 # endif
1287 #endif
1288 #ifdef HAVE_SYS_STAT_H
1289 #include <sys/stat.h>
1290 #endif
1291             ],
1292             [
1293                 struct timespec t;
1294                 struct stat s = {0};
1295                 t.tv_sec = s.st_mtim.tv_sec;
1296                 t.tv_nsec = s.st_mtim.tv_nsec;
1297                 t.tv_sec = s.st_ctim.tv_sec;
1298                 t.tv_nsec = s.st_ctim.tv_nsec;
1299                 t.tv_sec = s.st_atim.tv_sec;
1300                 t.tv_nsec = s.st_atim.tv_nsec;
1301             ],
1302             samba_cv_stat_hires=yes, samba_cv_stat_hires=no)
1303     ])
1305 if test x"$samba_cv_stat_hires" = x"yes" ; then
1306     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1307     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1308     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1309     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1310             [whether struct stat has sub-second timestamps])
1313 AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec], samba_cv_stat_hires_notimespec,
1314     [
1315         AC_TRY_COMPILE(
1316             [
1317 #if TIME_WITH_SYS_TIME
1318 # include <sys/time.h>
1319 # include <time.h>
1320 #else
1321 # if HAVE_SYS_TIME_H
1322 #  include <sys/time.h>
1323 # else
1324 #  include <time.h>
1325 # endif
1326 #endif
1327 #ifdef HAVE_SYS_STAT_H
1328 #include <sys/stat.h>
1329 #endif
1330             ],
1331             [
1332                 struct timespec t;
1333                 struct stat s = {0};
1334                 t.tv_sec = s.st_mtime;
1335                 t.tv_nsec = s.st_mtimensec;
1336                 t.tv_sec = s.st_ctime;
1337                 t.tv_nsec = s.st_ctimensec;
1338                 t.tv_sec = s.st_atime;
1339                 t.tv_nsec = s.st_atimensec;
1340             ],
1341             samba_cv_stat_hires=yes, samba_cv_stat_hires=no)
1342     ])
1344 if test x"$samba_cv_stat_hires_notimespec" = x"yes" ; then
1345     AC_DEFINE(HAVE_STAT_ST_MTIMENSEC, 1, [whether struct stat contains st_mtimensec])
1346     AC_DEFINE(HAVE_STAT_ST_ATIMENSEC, 1, [whether struct stat contains st_atimensec])
1347     AC_DEFINE(HAVE_STAT_ST_CTIMENSEC, 1, [whether struct stat contains st_ctimensec])
1348     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1349             [whether struct stat has sub-second timestamps without struct timespec])
1352 AC_CACHE_CHECK([whether struct stat has st_birthtimespec], samba_cv_stat_st_birthtimespec,
1353     [
1354         AC_TRY_COMPILE(
1355             [
1356 #if TIME_WITH_SYS_TIME
1357 # include <sys/time.h>
1358 # include <time.h>
1359 #else
1360 # if HAVE_SYS_TIME_H
1361 #  include <sys/time.h>
1362 # else
1363 #  include <time.h>
1364 # endif
1365 #endif
1366 #ifdef HAVE_SYS_STAT_H
1367 #include <sys/stat.h>
1368 #endif
1369             ],
1370             [
1371                 struct timespec t;
1372                 struct stat s = {0};
1373                 t = s.st_birthtimespec;
1374             ],
1375             samba_cv_stat_st_birthtimespec=yes, samba_cv_stat_birthtimespec=no)
1376     ])
1378 if test x"$samba_cv_stat_st_birthtimespec" = x"yes" ; then
1379     AC_DEFINE(HAVE_STAT_ST_BIRTHTIMESPEC, 1, [whether struct stat contains st_birthtimespec])
1382 AC_CACHE_CHECK([whether struct stat has st_birthtimensec], samba_cv_stat_st_birthtimensec,
1383     [
1384         AC_TRY_COMPILE(
1385             [
1386 #if TIME_WITH_SYS_TIME
1387 # include <sys/time.h>
1388 # include <time.h>
1389 #else
1390 # if HAVE_SYS_TIME_H
1391 #  include <sys/time.h>
1392 # else
1393 #  include <time.h>
1394 # endif
1395 #endif
1396 #ifdef HAVE_SYS_STAT_H
1397 #include <sys/stat.h>
1398 #endif
1399             ],
1400             [
1401                 struct timespec t;
1402                 struct stat s = {0};
1403                 t.tv_nsec = s.st_birthtimensec;
1404             ],
1405             samba_cv_stat_st_birthtimensec=yes, samba_cv_stat_birthtimensec=no)
1406     ])
1408 if test x"$samba_cv_stat_st_birthtimensec" = x"yes" ; then
1409     AC_DEFINE(HAVE_STAT_ST_BIRTHTIMENSEC, 1, [whether struct stat contains st_birthtimensec])
1412 AC_CACHE_CHECK([whether struct stat has st_birthtime], samba_cv_stat_st_birthtime,
1413     [
1414         AC_TRY_COMPILE(
1415             [
1416 #if TIME_WITH_SYS_TIME
1417 # include <sys/time.h>
1418 # include <time.h>
1419 #else
1420 # if HAVE_SYS_TIME_H
1421 #  include <sys/time.h>
1422 # else
1423 #  include <time.h>
1424 # endif
1425 #endif
1426 #ifdef HAVE_SYS_STAT_H
1427 #include <sys/stat.h>
1428 #endif
1429             ],
1430             [
1431                 struct time_t t;
1432                 struct stat s = {0};
1433                 t = s.st_birthtime;
1434             ],
1435             samba_cv_stat_st_birthtime=yes, samba_cv_stat_birthtime=no)
1436     ])
1438 if test x"$samba_cv_stat_st_birthtime" = x"yes" ; then
1439     AC_DEFINE(HAVE_STAT_ST_BIRTHTIME, 1, [whether struct stat contains st_birthtime])
1442 #####################################
1443 # needed for SRV lookups
1444 AC_CHECK_LIB(resolv, dn_expand)
1445 AC_CHECK_LIB(resolv, _dn_expand)
1446 AC_CHECK_LIB(resolv, __dn_expand)
1449 # Check for the functions putprpwnam, set_auth_parameters,
1450 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1451 # Needed for OSF1 and HPUX.
1454 AC_LIBTESTFUNC(security, putprpwnam)
1455 AC_LIBTESTFUNC(sec, putprpwnam)
1457 AC_LIBTESTFUNC(security, set_auth_parameters)
1458 AC_LIBTESTFUNC(sec, set_auth_parameters)
1460 # UnixWare 7.x has its getspnam in -lgen
1461 AC_LIBTESTFUNC(gen, getspnam)
1463 AC_LIBTESTFUNC(security, getspnam)
1464 AC_LIBTESTFUNC(sec, getspnam)
1466 AC_LIBTESTFUNC(security, bigcrypt)
1467 AC_LIBTESTFUNC(sec, bigcrypt)
1469 AC_LIBTESTFUNC(security, getprpwnam)
1470 AC_LIBTESTFUNC(sec, getprpwnam)
1472 AC_CHECK_FUNCS(strsignal)
1474 ############################################
1475 # Check if we have libattr
1476 case "$host_os" in
1477   *osf*)
1478         AC_SEARCH_LIBS(getproplist, [proplist])
1479         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1480         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1481         AC_CHECK_FUNCS(sizeof_proplist_entry)
1482   ;;
1483   *)
1484         AC_SEARCH_LIBS(getxattr, [attr])
1485         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1486         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1487         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1488         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1489         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1490         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1491         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1492   ;;
1493 esac
1495 ########################################################
1496 # Check if attropen() is present if this is Solaris
1497 case "$host_os" in
1498   *solaris*)
1499         AC_CHECK_FUNCS(attropen)
1500   ;;
1501 esac
1503 ########################################################
1504 # Do xattr functions take additional options like on Darwin?
1505 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1506         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1507                 old_LIBS=$LIBS
1508                 LIBS="$LIBS $ACL_LIBS"
1509                 AC_TRY_COMPILE([
1510                         #include <sys/types.h>
1511                         #if HAVE_ATTR_XATTR_H
1512                         #include <attr/xattr.h>
1513                         #elif HAVE_SYS_XATTR_H
1514                         #include <sys/xattr.h>
1515                         #endif
1516                 ],[
1517                         getxattr(0, 0, 0, 0, 0, 0);
1518                 ],
1519                 [smb_attr_cv_xattr_add_opt=yes],
1520                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1521         ])
1522         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1523                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1524         fi
1527 # Check if we have extattr
1528 case "$host_os" in
1529   *freebsd4* | *dragonfly* )
1530     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1531     ;;
1532   *)
1533     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1534     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1535     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1536     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1537     ;;
1538 esac
1540 AC_DISABLE_STATIC
1541 AC_ENABLE_SHARED
1543 # Set defaults
1544 PIE_CFLAGS=""
1545 PIE_LDFLAGS=""
1546 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1548 if test "x$enable_pie" != xno
1549 then
1550         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1551         [
1552                 cat > conftest.c <<EOF
1553 int foo;
1554 main () { return 0;}
1556                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1557                 then
1558                         samba_cv_fpie=yes
1559                 else
1560                         samba_cv_fpie=no
1561                 fi
1562                 rm -f conftest*
1563         ])
1564         if test x"${samba_cv_fpie}" = x"yes"
1565         then
1566                 PIE_CFLAGS="-fPIE"
1567                 PIE_LDFLAGS="-pie"
1568         fi
1571 # Set defaults
1572 RELRO_LDFLAGS=""
1573 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1575 if test "x$enable_relro" != xno
1576 then
1577         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1578         [
1579                 cat > conftest.c <<EOF
1580 int foo;
1581 main () { return 0;}
1583                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1584                 then
1585                         samba_cv_relro=yes
1586                 else
1587                         samba_cv_relro=no
1588                 fi
1589                 rm -f conftest*
1590         ])
1591         if test x"${samba_cv_relro}" = x"yes"
1592         then
1593                 RELRO_LDFLAGS="-Wl,-z,relro"
1594         fi
1597 # Set defaults
1598 SYMSEXT="syms"
1599 AC_SUBST(SYMSEXT)
1601 # Assume non-shared by default and override below
1602 BLDSHARED="false"
1604 # these are the defaults, good for lots of systems
1605 HOST_OS="$host_os"
1606 LDSHFLAGS="-shared"
1607 MODULE_EXPORTS=""
1608 SONAMEFLAG="#"
1609 SHLD="\${CC} \${CFLAGS}"
1610 PICFLAG="${PIE_CFLAGS}"
1611 SHLIBEXT="so"
1612 DSO_EXPORTS=""
1614 # this bit needs to be modified for each OS that supports share libs
1615 # You need to specify how to create a shared library and
1616   # how to compile C code to produce PIC object files
1618   AC_MSG_CHECKING([ability to build shared libraries])
1620   # and these are for particular systems
1621   case "$host_os" in
1622                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1623                         BLDSHARED="true"
1624                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1625                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined"
1626                         else
1627                                 LDSHFLAGS="-shared -Wl,-Bsymbolic"
1628                         fi
1629                         DYNEXP="-Wl,--export-dynamic"
1630                         PICFLAG="-fPIC"
1631                         SONAMEFLAG="-Wl,-soname="
1632                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1633                         ;;
1634                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1635                         BLDSHARED="true"
1636                         LDSHFLAGS="-G"
1637                         SONAMEFLAG="-h "
1638                         if test "${GCC}" = "yes"; then
1639                                 PICFLAG="-fPIC"
1640                                 SONAMEFLAG="-Wl,-soname="
1641                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1642                                         DYNEXP="-Wl,-E"
1643                                 fi
1644                         else
1645                                 PICFLAG="-KPIC"
1646                                 ## ${CFLAGS} added for building 64-bit shared
1647                                 ## libs using Sun's Compiler
1648                                 LDSHFLAGS="-G \${CFLAGS}"
1649                         fi
1650                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1651                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1652                         ;;
1653                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1654                         BLDSHARED="true"
1655                         LDSHFLAGS="-G"
1656                         SONAMEFLAG="-Wl,-h,"
1657                         PICFLAG="-KPIC"   # Is this correct for SunOS
1658                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1659                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1660                         ;;
1661                 *netbsd* | *freebsd* | *dragonfly* )
1662                         BLDSHARED="true"
1663                         LDSHFLAGS="-shared"
1664                         DYNEXP="-Wl,--export-dynamic"
1665                         SONAMEFLAG="-Wl,-soname,"
1666                         PICFLAG="-fPIC -DPIC"
1667                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1668                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1669                         ;;
1670                 *openbsd*)  BLDSHARED="true"
1671                         LDSHFLAGS="-shared"
1672                         DYNEXP="-Wl,-Bdynamic"
1673                         SONAMEFLAG="-Wl,-soname,"
1674                         PICFLAG="-fPIC"
1675                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1676                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1677                         ;;
1678                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1679                         case "$host_os" in
1680                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1681                         ;;
1682                         esac
1683                         BLDSHARED="true"
1684                         LDSHFLAGS="-set_version sgi1.0 -shared"
1685                         SONAMEFLAG="-soname "
1686                         SHLD="\${LD}"
1687                         if test "${GCC}" = "yes"; then
1688                                 PICFLAG="-fPIC"
1689                         else
1690                                 PICFLAG="-KPIC"
1691                         fi
1692                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1693                         ;;
1694                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1695                         BLDSHARED="true"
1696                         # use expfull to export underscored symbols
1697                         # add rtl to remove /lib/crt0.o warning
1698                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1699                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1700                         PICFLAG="-O2"
1701                         # as AIX code is always position independent...
1702                         # .po will just create compile warnings, use po.o:
1703                         if test "${GCC}" != "yes"; then
1704                                 ## for funky AIX compiler using strncpy()
1705                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1706                         fi
1708                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1709                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1710                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1711                         ;;
1712                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1713                         # Use special PIC flags for the native HP-UX compiler.
1714                                 BLDSHARED="true"
1715                                 SHLD="cc"
1716                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1717                                 SONAMEFLAG="-Wl,+h "
1718                                 PICFLAG="+z"
1719                         if test "${GCC}" = "yes"; then
1720                                 PICFLAG="-fPIC"
1721                         else
1722                                 PICFLAG="+z +ESnolit"
1723                         fi
1724                         if test "$host_cpu" = "ia64"; then
1725                                 SHLIBEXT="so"
1726                               PICFLAG="+z"
1727                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1728                         else
1729                                 SHLIBEXT="sl"
1730                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1731                         fi
1732                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1733                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1734                         ;;
1735                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1736                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1737                         ;;
1738                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1739                         BLDSHARED="true"
1740                         LDSHFLAGS="-shared"
1741                         SONAMEFLAG="-Wl,-soname,"
1742                         PICFLAG="-fPIC"
1743                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1744                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1745                         ;;
1746                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1747                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1748                         ;;
1749                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1750                         BLDSHARED="true"
1751                         LDSHFLAGS="-shared"
1752                         SONAMEFLAG="-Wl,-soname,"
1753                         PICFLAG="-KPIC"
1754                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1755                         ;;
1756                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1757                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1758                         ;;
1759                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1760                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1761                         ;;
1762                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1763                         case "$host" in
1764                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1765                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1766                                         fi
1767                                         LDSHFLAGS="-G"
1768                                         DYNEXP="-Bexport"
1769                                 ;;
1770                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1771                         esac
1772                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1773                         ;;
1775                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1776                         if [ test "$GCC" != yes ]; then
1777                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1778                         fi
1779                         LDSHFLAGS="-G"
1780                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1781                         ;;
1782                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1783                         BLDSHARED="false"
1784                         LDSHFLAGS=""
1785                         ;;
1787                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1788                         BLDSHARED="true"
1789                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1790                         CFLAGS="$CFLAGS -fno-common"
1791                         SHLD="\${CC}"
1792                         SHLIBEXT="dylib"
1793                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1794                         SHLIBEXT="dylib"
1795                         # Since gcc doesn't fail on unrecognised options, the
1796                         # PIE test incorrectly succeeds. Darwin gcc does not
1797                         # actually support the PIE stuff.
1798                         PIE_LDFLAGS=
1799                         PIE_CFLAGS=
1800                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1801                         ;;
1803                 *)
1804                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1805                         ;;
1806   esac
1808 if test "$enable_shared" != "yes"; then
1809         BLDSHARED=false
1812 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1813         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1816 if test x"$BLDSHARED" = x"true" ; then
1817         LDFLAGS="$LDFLAGS -L./bin"
1820 AC_MSG_RESULT($BLDSHARED)
1822 AC_MSG_CHECKING([LDFLAGS])
1823 AC_MSG_RESULT([$LDFLAGS])
1824 AC_MSG_CHECKING([DYNEXP])
1825 AC_MSG_RESULT([$DYNEXP])
1827 #######################################################
1828 # test whether building a shared library actually works
1829 if test $BLDSHARED = true; then
1831 AC_MSG_CHECKING([SHLD])
1832 AC_MSG_RESULT([$SHLD])
1833 AC_MSG_CHECKING([LDSHFLAGS])
1834 AC_MSG_RESULT([$LDSHFLAGS])
1836 AC_MSG_CHECKING([SHLIBEXT])
1837 AC_MSG_RESULT([$SHLIBEXT])
1838 AC_MSG_CHECKING([SONAMEFLAG])
1839 AC_MSG_RESULT([$SONAMEFLAG])
1841 AC_MSG_CHECKING([PICFLAG])
1842 AC_MSG_RESULT([$PICFLAG])
1844 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1845 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1847 AC_CACHE_CHECK([whether building shared libraries actually works],
1848                [ac_cv_shlib_works],[
1849    # try building a trivial shared library
1850    ac_cv_shlib_works=no
1851    # The $SHLD and $LDSHFLAGS variables may contain references to other
1852    # variables so they need to be eval'ed.
1853    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1854         shlib.o ${srcdir-.}/tests/shlib.c && \
1855    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1856         shlib.o && ac_cv_shlib_works=yes
1857    rm -f "shlib.$SHLIBEXT" shlib.o
1860 if test $ac_cv_shlib_works = no; then
1861    BLDSHARED=false
1865 if test x"$BLDSHARED" != x"true"; then
1866         LDSHFLAGS="shared-libraries-disabled"
1867         SONAMEFLAG="shared-libraries-disabled"
1868         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1869         SHLD="shared-libraries-disabled"
1870         PICFLAG="${PIE_CFLAGS}"
1871         SHLIBEXT="shared_libraries_disabled"
1874 AC_MSG_CHECKING([used PICFLAG])
1875 AC_MSG_RESULT([$PICFLAG])
1877 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1879 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
1881 ################
1883 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1884 AC_TRY_RUN([#include <stdio.h>
1885 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1886 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1887 if test x"$samba_cv_have_longlong" = x"yes"; then
1888     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1889     AC_CHECK_TYPE(intptr_t, unsigned long long)
1890 else
1891     AC_CHECK_TYPE(intptr_t, unsigned long)
1895 # Check if the compiler supports the LL prefix on long long integers.
1896 # AIX needs this.
1898 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1899     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1900         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1901 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1902    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1906 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
1907 AC_TRY_RUN([#include <time.h>
1908 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
1909 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
1910 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
1911     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
1914 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1915 AC_TRY_RUN([#include <stdio.h>
1916 #include <sys/stat.h>
1917 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1918 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1919 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1920     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1923 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1924 AC_TRY_RUN([
1925 #if defined(HAVE_UNISTD_H)
1926 #include <unistd.h>
1927 #endif
1928 #include <stdio.h>
1929 #include <sys/stat.h>
1930 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1931 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1932 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1933     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1936 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1937 AC_TRY_RUN([
1938 #if defined(HAVE_UNISTD_H)
1939 #include <unistd.h>
1940 #endif
1941 #include <stdio.h>
1942 #include <sys/stat.h>
1943 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1944 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1945 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1946     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1949 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1950 AC_TRY_RUN([
1951 #if defined(HAVE_UNISTD_H)
1952 #include <unistd.h>
1953 #endif
1954 #include <stdio.h>
1955 #include <sys/stat.h>
1956 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1957 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1958 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1959     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1962 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
1963 AC_TRY_RUN([
1964 #if defined(HAVE_UNISTD_H)
1965 #include <unistd.h>
1966 #endif
1967 #include <stdio.h>
1968 #include <sys/stat.h>
1969 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
1970 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
1971 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
1972     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
1975 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
1976 AC_TRY_RUN([
1977 #if defined(HAVE_UNISTD_H)
1978 #include <unistd.h>
1979 #endif
1980 #include <stdio.h>
1981 #include <sys/stat.h>
1982 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1983 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
1984 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
1985     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
1988 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
1989 AC_TRY_COMPILE([
1990 #if defined(HAVE_UNISTD_H)
1991 #include <unistd.h>
1992 #endif
1993 #include <sys/types.h>
1994 #include <dirent.h>],
1995 [DIR64 de;],
1996 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
1997 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1998     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2001 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2002 AC_TRY_COMPILE([
2003 #if defined(HAVE_UNISTD_H)
2004 #include <unistd.h>
2005 #endif
2006 #include <sys/types.h>
2007 #include <dirent.h>],
2008 [struct dirent64 de;],
2009 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2010 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2011     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2014 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2015 AC_TRY_RUN([
2016 #if defined(HAVE_UNISTD_H)
2017 #include <unistd.h>
2018 #endif
2019 #include <sys/types.h>
2020 main() { dev_t dev; int i = major(dev); return 0; }],
2021 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2022 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2023     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2026 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2027 AC_TRY_RUN([
2028 #if defined(HAVE_UNISTD_H)
2029 #include <unistd.h>
2030 #endif
2031 #include <sys/types.h>
2032 main() { dev_t dev; int i = minor(dev); return 0; }],
2033 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2034 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2035     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2038 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2039 AC_TRY_RUN([
2040 #if defined(HAVE_UNISTD_H)
2041 #include <unistd.h>
2042 #endif
2043 #include <sys/types.h>
2044 main() { dev_t dev = makedev(1,2); return 0; }],
2045 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2046 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2047     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2050 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2051 AC_TRY_RUN([#include <stdio.h>
2052 main() { char c; c=250; exit((c > 0)?0:1); }],
2053 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2054 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2055     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2058 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2059 AC_TRY_COMPILE([#include <sys/types.h>
2060 #include <dirent.h>
2061 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2062 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2063 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2064     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2067 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2068 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2069 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2070 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2071     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2074 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2075 AC_TRY_LINK([
2076 #include <sys/time.h>
2077 #include <unistd.h>], [struct timeval tv; return gettimeofday(&tv, NULL);],
2078            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,
2079            samba_cv_HAVE_GETTIMEOFDAY_TZ=no)])
2080 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2081     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday takes a tz argument])
2084 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2086     # On some systems (eg. Linux) librt can pull in libpthread. We
2087     # don't want this to happen because libpthreads changes signal delivery
2088     # semantics in ways we are not prepared for. This breaks Linux oplocks
2089     # which rely on signals.
2091     AC_LIBTESTFUNC(rt, clock_gettime,
2092             [
2093                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2094                                 [Whether clock_gettime is available])
2095                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2096                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2097                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2098                         ])
2102 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2103 AC_TRY_RUN([#include <sys/types.h>
2104 #include <dirent.h>
2105 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2106 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2107 di->d_name[0] == 0) exit(0); exit(1);} ],
2108 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2109 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2110     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2113 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2114 AC_TRY_COMPILE([#include <sys/types.h>
2115 #include <utime.h>],
2116 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2117 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2118 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2119     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2122 ##############
2123 # Check utmp details, but only if our OS offers utmp.h
2124 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2125 dnl  utmp and utmpx come in many flavours
2126 dnl  We need to check for many of them
2127 dnl  But we don't need to do each and every one, because our code uses
2128 dnl  mostly just the utmp (not utmpx) fields.
2130 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2132 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2133 AC_TRY_COMPILE([#include <sys/types.h>
2134 #include <utmp.h>],
2135 [struct utmp ut;  ut.ut_name[0] = 'a';],
2136 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2137 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2138     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2141 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2142 AC_TRY_COMPILE([#include <sys/types.h>
2143 #include <utmp.h>],
2144 [struct utmp ut;  ut.ut_user[0] = 'a';],
2145 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2146 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2147     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2150 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2151 AC_TRY_COMPILE([#include <sys/types.h>
2152 #include <utmp.h>],
2153 [struct utmp ut;  ut.ut_id[0] = 'a';],
2154 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2155 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2156     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2159 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2160 AC_TRY_COMPILE([#include <sys/types.h>
2161 #include <utmp.h>],
2162 [struct utmp ut;  ut.ut_host[0] = 'a';],
2163 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2164 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2165     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2168 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2169 AC_TRY_COMPILE([#include <sys/types.h>
2170 #include <utmp.h>],
2171 [struct utmp ut;  time_t t; ut.ut_time = t;],
2172 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2173 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2174     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2177 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2178 AC_TRY_COMPILE([#include <sys/types.h>
2179 #include <utmp.h>],
2180 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2181 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2182 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2183     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2186 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2187 AC_TRY_COMPILE([#include <sys/types.h>
2188 #include <utmp.h>],
2189 [struct utmp ut;  ut.ut_type = 0;],
2190 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2191 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2192     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2195 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2196 AC_TRY_COMPILE([#include <sys/types.h>
2197 #include <utmp.h>],
2198 [struct utmp ut;  ut.ut_pid = 0;],
2199 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2200 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2201     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2204 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2205 AC_TRY_COMPILE([#include <sys/types.h>
2206 #include <utmp.h>],
2207 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2208 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2209 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2210     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2213 dnl Look for the IPv6 varient by preference. Many systems have both.
2214 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2215 AC_TRY_COMPILE([#include <sys/types.h>
2216 #include <utmp.h>],
2217 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2218 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2219 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2220     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2223 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2224 AC_TRY_COMPILE([#include <sys/types.h>
2225 #include <utmp.h>],
2226 [struct utmp ut;  ut.ut_addr = 0;],
2227 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2228 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2229     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2232 if test x$ac_cv_func_pututline = xyes ; then
2233   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2234   AC_TRY_COMPILE([#include <sys/types.h>
2235 #include <utmp.h>],
2236   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2237   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2238   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2239       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2240   fi
2243 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2244 AC_TRY_COMPILE([#include <sys/types.h>
2245 #include <utmpx.h>],
2246 [struct utmpx ux;  ux.ut_syslen = 0;],
2247 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2248 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2249     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2253 # end utmp details
2256 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2257 AC_ARG_WITH(libiconv,
2258 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2260   if test "$withval" = "no" ; then
2261     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2262   else
2263      if test "$withval" != "yes" ; then
2264         ICONV_PATH_SPEC=yes
2265         ICONV_LOOK_DIRS="$withval"
2266      fi
2267   fi
2270 for i in $ICONV_LOOK_DIRS ; do
2272     save_LIBS="$LIBS"
2273     save_LDFLAGS="$LDFLAGS"
2274     save_CPPFLAGS="$CPPFLAGS"
2276     iconv_current_LIBS=""
2277     iconv_current_LDFLAGS=""
2278     iconv_current_CPPFLAGS=""
2280     ICONV_FOUND="no"
2281     unset libext
2283     #  This is here to handle -withval stuff for --with-libiconv
2284     #  Perhaps we should always add a -L
2285     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2287     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2288     # installation paths. This gets a little tricky since we might have iconv
2289     # in both libiconv and in libc. In this case the jm_ICONV test will always
2290     # succeed when the header is found. To counter this, make sure the
2291     # library directory is there and check the ABI directory first (which
2292     # should be harmless on other systems.
2293     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2294     for l in "lib32" "lib" "lib/hpux32"; do
2295         if test -d "$i/$l" ; then
2296                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2297                 LIBS=
2298                 export LDFLAGS LIBS CPPFLAGS
2299                 # Try to find iconv(3)
2300                 jm_ICONV($i/$l)
2301                 if test x"$ICONV_FOUND" = "xyes" ; then
2302                     libext="$l"
2303                     break
2304                 fi
2305         fi
2306     done
2308     if test x"$ICONV_FOUND" = "xyes" ; then
2309         iconv_current_LDFLAGS="-L$i/$libext"
2310         iconv_current_CPPFLAGS="-I$i/include"
2312         if test x"$jm_cv_lib_iconv" != x; then
2313             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2314         else
2315             # We found iconv in libc.
2316             iconv_current_LIBS=""
2317         fi
2319     fi
2321     if test x"$ICONV_FOUND" = "xyes" ; then
2323         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2324         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2325         LIBS="$save_LIBS $iconv_current_LIBS"
2326         export LDFLAGS LIBS CPPFLAGS
2328         default_dos_charset=no
2329         default_display_charset=no
2330         default_unix_charset=no
2332         # check for default dos charset name
2333         for j in CP850 IBM850 ; do
2334             rjs_CHARSET($j)
2335             default_dos_charset="$ICONV_CHARSET"
2336             if test x"$default_dos_charset" = x"$j"; then
2337                 break
2338             fi
2339         done
2341         # check for default display charset name
2342         for j in ASCII 646 ; do
2343             rjs_CHARSET($j)
2344             default_display_charset="$ICONV_CHARSET"
2345             if test x"$default_display_charset" = x"$j"; then
2346                 break
2347             fi
2348         done
2350         # check for default unix charset name
2351         for j in UTF-8 UTF8 ; do
2352             rjs_CHARSET($j)
2353             default_unix_charset="$ICONV_CHARSET"
2354             if test x"$default_unix_charset" = x"$j"; then
2355                 break
2356             fi
2357         done
2359         if test "$default_dos_charset" != "no" -a \
2360                 "$default_dos_charset" != "cross" -a \
2361                 "$default_display_charset" != "no" -a \
2362                 "$default_display_charset" != "cross" -a \
2363                 "$default_unix_charset" != "no" -a \
2364                 "$default_unix_charset" != "cross"
2365         then
2366                 samba_cv_HAVE_NATIVE_ICONV=yes
2367         else
2368             if test "$default_dos_charset" = "cross" -o \
2369                      "$default_display_charset" = "cross" -o \
2370                      "$default_unix_charset" = "cross"
2371             then
2372                     samba_cv_HAVE_NATIVE_ICONV=cross
2373             else
2374                     samba_cv_HAVE_NATIVE_ICONV=no
2375             fi
2376         fi
2378         # At this point, we have a libiconv candidate. We know that
2379         # we have the right headers and libraries, but we don't know
2380         # whether it does the conversions we want. We can't test this
2381         # because we are cross-compiling. This is not necessarily a big
2382         # deal, since we can't guarantee that the results we get now will
2383         # match the results we get at runtime anyway.
2384         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2385             default_dos_charset="CP850"
2386             default_display_charset="ASCII"
2387             default_unix_charset="UTF-8"
2388             samba_cv_HAVE_NATIVE_ICONV=yes
2389             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2390             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2391         fi
2393         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2395             CPPFLAGS=$save_CPPFLAGS
2396             LDFLAGS=$save_LDFLAGS
2397             LIBS=$save_LIBS
2399             if test x"$iconv_current_LIBS" != x; then
2400                 LIBS="$LIBS $iconv_current_LIBS"
2401             fi
2403             # Add the flags we need to CPPFLAGS and LDFLAGS
2404             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2405             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2407             # Turn the #defines into string literals
2408             default_dos_charset="\"$default_dos_charset\""
2409             default_display_charset="\"$default_display_charset\""
2410             default_unix_charset="\"$default_unix_charset\""
2412             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2413             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2414             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2415             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2417            break
2418         fi
2420     # We didn't find a working iconv, so keep going
2421     fi
2423     #  We only need to clean these up here for the next pass through the loop
2424     CPPFLAGS=$save_CPPFLAGS
2425     LDFLAGS=$save_LDFLAGS
2426     LIBS=$save_LIBS
2427     export LDFLAGS LIBS CPPFLAGS
2428 done
2429 unset libext
2432 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2433     AC_MSG_WARN([Sufficient support for iconv function was not found.
2434     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2435    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2436    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2437    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2441 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2442 AC_TRY_RUN([
2443 #include <sys/types.h>
2444 #include <fcntl.h>
2445 #ifndef F_GETLEASE
2446 #define F_GETLEASE      1025
2447 #endif
2448 main() {
2449        int fd = open("/dev/null", O_RDONLY);
2450        return fcntl(fd, F_GETLEASE, 0) == -1;
2453 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2454 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2455     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2458 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2459 AC_TRY_RUN([
2460 #include <sys/types.h>
2461 #include <fcntl.h>
2462 #include <signal.h>
2463 #ifndef F_NOTIFY
2464 #define F_NOTIFY 1026
2465 #endif
2466 main() {
2467         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2470 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2471 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2472     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2475 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2476 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h)
2477 AC_CHECK_FUNCS(inotify_init)
2478 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2480 samba_cv_HAVE_INOTIFY=yes,
2481 samba_cv_HAVE_INOTIFY=no,
2482 samba_cv_HAVE_INOTIFY=cross)
2484 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2485     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2488 #################################################
2489 # Check if FAM notifications are available. For FAM info, see
2490 #       http://oss.sgi.com/projects/fam/
2491 #       http://savannah.nongnu.org/projects/fam/
2492 AC_ARG_ENABLE(fam,
2493 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2495 if test x$enable_fam != xno; then
2496     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2497     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2498         # On IRIX, libfam requires libC, but other FAM implementations
2499         # might not need it.
2500         AC_CHECK_LIB(fam, FAMOpen2,
2501             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"],
2502             [samba_cv_HAVE_LIBFAM=no])
2504         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2505             samba_fam_xtra=-lC
2506             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2507                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"],
2508                 [samba_cv_HAVE_LIBFAM=no])
2509             unset samba_fam_xtra
2510         fi
2511     fi
2513     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2514         default_shared_modules="$default_shared_modules vfs_notify_fam"
2515         AC_TRY_COMPILE([#include <fam.h>],
2516                     [FAMCodes code = FAMChanged;],
2517                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2518                         [Whether fam.h contains a typedef for enum FAMCodes]),
2519                     [])
2520     fi
2522     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2523         AC_MSG_ERROR(FAM support requested but FAM library not available )
2524     fi
2527 AC_SUBST(SMB_FAM_LIBS)
2529 #################################################
2530 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2532 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2534 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2535 # Theoretically it should work with AIX JFS2 too but this needs testing
2536 if test x"$samba_cv_HAVE_GPFS" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2537     default_shared_modules="$default_shared_modules vfs_tsmsm"
2540 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2541 AC_TRY_RUN([
2542 #include <sys/types.h>
2543 #include <fcntl.h>
2544 #include <signal.h>
2545 #include <sys/file.h>
2546 #ifndef LOCK_MAND
2547 #define LOCK_MAND       32
2548 #define LOCK_READ       64
2549 #endif
2550 main() {
2551         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2554 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2555 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2556     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2560 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2561 AC_TRY_COMPILE([#include <sys/types.h>
2562 #include <fcntl.h>],
2563 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2564 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2565 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2566     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2569 #################################################
2570 # Check for POSIX capability support
2572 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2573     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2574     [], [])
2576 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2578     ac_save_LIBS=$LIBS
2579     AC_LIBTESTFUNC(cap, cap_get_proc)
2581     AC_CACHE_CHECK([for POSIX capabilities],
2582             samba_cv_HAVE_POSIX_CAPABILITIES,
2583             [
2584                 AC_TRY_RUN([
2585 #include <sys/types.h>
2586 #include <sys/capability.h>
2587 main() {
2588  cap_t cap;
2589  cap_value_t vals[1];
2590  if (!(cap = cap_get_proc()))
2591    exit(1);
2592  vals[0] = CAP_CHOWN;
2593  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2594  cap_set_proc(cap);
2595  exit(0);
2597                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2598                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2599                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2600             ])
2602 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2603     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2604             [Whether POSIX capabilities are available])
2605 else
2606     LIBS=$ac_save_LIBS
2612 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2613 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2616 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2617 AC_TRY_COMPILE([#include <sys/types.h>
2618 #if defined(HAVE_RPC_RPC_H)
2619 #include <rpc/rpc.h>
2620 #endif],
2621 [int16 testvar;],
2622 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2623 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2624     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2627 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2628 AC_TRY_COMPILE([#include <sys/types.h>
2629 #if defined(HAVE_RPC_RPC_H)
2630 #include <rpc/rpc.h>
2631 #endif],
2632 [uint16 testvar;],
2633 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2634 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2635     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2638 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2639 AC_TRY_COMPILE([#include <sys/types.h>
2640 #if defined(HAVE_RPC_RPC_H)
2641 #include <rpc/rpc.h>
2642 #endif],
2643 [int32 testvar;],
2644 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2645 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2646     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2649 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2650 AC_TRY_COMPILE([#include <sys/types.h>
2651 #if defined(HAVE_RPC_RPC_H)
2652 #include <rpc/rpc.h>
2653 #endif],
2654 [uint32 testvar;],
2655 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2656 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2657     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2661 dnl Some systems (SCO) have a problem including
2662 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2663 dnl as a #define in <prot.h> and as part of an enum
2664 dnl in <rpc/rpc.h>.
2667 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2668 AC_TRY_COMPILE([#include <sys/types.h>
2669 #ifdef HAVE_SYS_SECURITY_H
2670 #include <sys/security.h>
2671 #include <prot.h>
2672 #endif  /* HAVE_SYS_SECURITY_H */
2673 #if defined(HAVE_RPC_RPC_H)
2674 #include <rpc/rpc.h>
2675 #endif],
2676 [int testvar;],
2677 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2678 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2679     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2682 AC_MSG_CHECKING([for test routines])
2683 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2684            AC_MSG_RESULT(yes),
2685            AC_MSG_ERROR([cant find test code. Aborting config]),
2686            AC_MSG_WARN([cannot run when cross-compiling]))
2688 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2689 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2690            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2691 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2692     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2695 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2696 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2697            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2698 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2699     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2702 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2703 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2704 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2705 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2706 AC_CHECK_FUNCS(getpagesize)
2708 ################################################
2709 # look for a method of setting the effective uid
2710 seteuid=no;
2712 if test $seteuid = no; then
2713 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2714 AC_TRY_RUN([
2715 #define AUTOCONF_TEST 1
2716 #define USE_SETREUID 1
2717 #include "confdefs.h"
2718 #include "${srcdir-.}/lib/util_sec.c"],
2719            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2720 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2721     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2725 # we check for setresuid second as it conflicts with AIO on Linux. 
2726 # see http://samba.org/~tridge/junkcode/aio_uid.c
2727 if test $seteuid = no; then
2728 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2729 AC_TRY_RUN([
2730 #define AUTOCONF_TEST 1
2731 #define USE_SETRESUID 1
2732 #include "confdefs.h"
2733 #include "${srcdir-.}/lib/util_sec.c"],
2734            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2735 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2736     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2740 if test $seteuid = no; then
2741 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2742 AC_TRY_RUN([
2743 #define AUTOCONF_TEST 1
2744 #define USE_SETEUID 1
2745 #include "confdefs.h"
2746 #include "${srcdir-.}/lib/util_sec.c"],
2747            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2748 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2749     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2753 if test $seteuid = no; then
2754 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2755 AC_TRY_RUN([
2756 #define AUTOCONF_TEST 1
2757 #define USE_SETUIDX 1
2758 #include "confdefs.h"
2759 #include "${srcdir-.}/lib/util_sec.c"],
2760            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2761 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2762     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2766 AC_CACHE_CHECK([for the Darwin initgroups system call],
2767         samba_cv_DARWIN_INITGROUPS,
2768         AC_TRY_LINK([
2769 #include <sys/syscall.h>
2770 #include <unistd.h>
2771         ],
2772         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2773         samba_cv_DARWIN_INITGROUPS=yes,
2774         samba_cv_DARWIN_INITGROUPS=no)
2777 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2778     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2779         [Whether to use the Darwin-specific initgroups system call])
2782 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2783 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2784            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2785 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2786     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2789 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2790 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2791            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2792 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2793     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2795 else
2798 dnl Don't check for 64 bit fcntl locking if we know that the
2799 dnl glibc2.1 broken check has succeeded.
2802   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2803   AC_TRY_RUN([
2804 #if defined(HAVE_UNISTD_H)
2805 #include <unistd.h>
2806 #endif
2807 #include <stdio.h>
2808 #include <stdlib.h>
2810 #ifdef HAVE_FCNTL_H
2811 #include <fcntl.h>
2812 #endif
2814 #ifdef HAVE_SYS_FCNTL_H
2815 #include <sys/fcntl.h>
2816 #endif
2817 main() { struct flock64 fl64;
2818 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2819 exit(0);
2820 #else
2821 exit(1);
2822 #endif
2824        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2826   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2827       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2828   fi
2831 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2832 AC_TRY_COMPILE([#include <sys/types.h>
2833 #include <sys/stat.h>
2834 #include <unistd.h>],
2835 [struct stat st;  st.st_blocks = 0;],
2836 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2837 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2838     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2841 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2842 AC_TRY_COMPILE([#include <sys/types.h>
2843 #include <sys/stat.h>
2844 #include <unistd.h>],
2845 [struct stat st;  st.st_blksize = 0;],
2846 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2847 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2848     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2851 AC_CACHE_CHECK([for st_flags in struct stat],
2852         samba_cv_HAVE_STAT_ST_FLAGS,
2853         [
2854             AC_TRY_COMPILE([#include <sys/types.h>
2855 #include <sys/stat.h>
2856 #include <unistd.h>],
2857             [struct stat st;  st.st_flags = 0;],
2858             samba_cv_HAVE_STAT_ST_FLAGS=yes,
2859             samba_cv_HAVE_STAT_ST_FLAGS=no,
2860             samba_cv_HAVE_STAT_ST_FLAGS=cross)
2861         ])
2863 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
2864     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
2865                 [Whether the stat struct has a st_flags member])
2868 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2869 AC_TRY_COMPILE([
2870 #include <sys/types.h>
2871 #include <sys/acl.h>
2872 #if defined(HAVE_RPCSVC_NIS_H)
2873 #include <rpcsvc/nis.h>
2874 #endif],
2875 [int i;],
2876 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2877 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2878         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2881 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
2882 AC_TRY_RUN([
2883 #include <stdio.h>
2884 #include <limits.h>
2885 #include <signal.h>
2887 void exit_on_core(int ignored) {
2888         exit(1);
2891 main() {
2892         char *newpath;
2893         signal(SIGSEGV, exit_on_core);
2894         newpath = realpath("/tmp", NULL);
2895         exit((newpath != NULL) ? 0 : 1);
2898 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
2899 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
2900     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
2903 #################################################
2904 # check for AFS clear-text auth support
2905 samba_cv_WITH_AFS=no
2906 AC_MSG_CHECKING(whether to use AFS clear-text auth)
2907 AC_ARG_WITH(afs,
2908 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
2909 [ case "$withval" in
2910   yes|auto)
2911     AC_MSG_RESULT($withval)
2912     samba_cv_WITH_AFS=$withval
2913     ;;
2914   *)
2915     AC_MSG_RESULT(no)
2916     ;;
2917   esac ],
2918   AC_MSG_RESULT(no)
2921 ####################################################
2922 # check for Linux-specific AFS fake-kaserver support
2923 samba_cv_WITH_FAKE_KASERVER=no
2924 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2925 AC_ARG_WITH(fake-kaserver,
2926 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
2927 [ case "$withval" in
2928   yes|auto)
2929     AC_MSG_RESULT($withval)
2930     samba_cv_WITH_FAKE_KASERVER=$withval
2931     ;;
2932   *)
2933     AC_MSG_RESULT(no)
2934     ;;
2935   esac ],
2936   AC_MSG_RESULT(no)
2939 #################################################
2940 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
2941 if test x"$samba_cv_WITH_AFS" != x"no" ||
2942    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
2944     # see if this box has the afs-headers in /usr/include/afs
2945     AC_MSG_CHECKING(for /usr/include/afs)
2946     if test -d /usr/include/afs; then
2947           CFLAGS="$CFLAGS -I/usr/include/afs"
2948           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
2949           AC_MSG_RESULT(yes)
2950     else
2951       AC_MSG_RESULT(no)
2952     fi
2954     # check for afs.h
2955     have_afs_headers=no
2956     AC_CHECK_HEADERS(afs.h afs/afs.h)
2957     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
2958         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
2959            test x"$samba_cv_WITH_AFS" = x"auto"; then
2960                 AC_MSG_WARN([AFS cannot be supported without afs.h])
2961         else
2962                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
2963         fi
2964     else
2965         have_afs_headers=yes
2966     fi
2969 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
2970     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
2973 #################################################
2974 # check whether to compile AFS/NT ACL mapping module
2975 samba_cv_WITH_VFS_AFSACL=no
2976 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
2977 AC_ARG_WITH(vfs-afsacl,
2978 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
2979 [ case "$withval" in
2980   yes|auto)
2981     AC_MSG_RESULT($withval)
2982     samba_cv_WITH_VFS_AFSACL=yes
2983     ;;
2984   *)
2985     AC_MSG_RESULT(no)
2986     ;;
2987   esac ],
2988   AC_MSG_RESULT(no)
2991 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
2992    default_shared_modules="$default_shared_modules vfs_afsacl"
2994         
2995 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
2996     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
2999 #################################################
3000 # check for the DFS clear-text auth system
3001 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3002 AC_ARG_WITH(dfs,
3003 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3004 [ case "$withval" in
3005   yes)
3006     AC_MSG_RESULT(yes)
3007     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3008     ;;
3009   *)
3010     AC_MSG_RESULT(no)
3011     ;;
3012   esac ],
3013   AC_MSG_RESULT(no)
3016 ########################################################
3017 # Compile with LDAP support?
3019 with_ldap_support=auto
3020 AC_MSG_CHECKING([for LDAP support])
3022 AC_ARG_WITH(ldap,
3023 [AS_HELP_STRING([--with-ldap], [LDAP support (default yes)])],
3024 [ case "$withval" in
3025     yes|no)
3026         with_ldap_support=$withval
3027         ;;
3028   esac ])
3030 AC_MSG_RESULT($with_ldap_support)
3032 SMBLDAP=""
3033 AC_SUBST(SMBLDAP)
3034 SMBLDAPUTIL=""
3035 AC_SUBST(SMBLDAPUTIL)
3036 LDBLDAP=""
3037 AC_SUBST(LDBLDAP)
3039 if test x"$with_ldap_support" != x"no"; then
3041   ##################################################################
3042   # first test for ldap.h and lber.h
3043   # (ldap.h is required for this test)
3044   AC_CHECK_HEADERS(ldap.h lber.h)
3046   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3047         if test x"$with_ldap_support" = x"yes"; then
3048          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3049         else
3050          AC_MSG_WARN(ldap.h is needed for LDAP support)
3051         fi
3052         
3053         with_ldap_support=no
3054   fi
3056   ##################################################################
3057   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3058   # unsigned int in include/includes.h
3059   case $host_os in
3060         *hpux*)
3061          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3062          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3063         with_ldap_support=yes
3064         ;;
3065         *)
3066         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3067         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3068                 if test x"$with_ldap_support" = x"yes"; then
3069                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3070                 else
3071                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3072                 fi
3073                 with_ldap_support=no
3074         fi
3075         ;;
3076   esac
3079 if test x"$with_ldap_support" != x"no"; then
3080   ac_save_LIBS=$LIBS
3082   ##################################################################
3083   # we might need the lber lib on some systems. To avoid link errors
3084   # this test must be before the libldap test
3085   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3087   ########################################################
3088   # If ber_sockbuf_add_io() is available we can add
3089   # SASL wrapping hooks
3090   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3092   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3093                  AC_TRY_COMPILE([#include <ldap.h>],
3094                                 [int val = LDAP_OPT_SOCKBUF;],
3095                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3096                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3098   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3099           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3100         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3101   fi
3103   #######################################################
3104   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3105   # ldap logging and print it out in the samba logs
3106   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3107                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3108                  [AC_TRY_COMPILE([#include <lber.h>],
3109                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3110                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3111                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3113   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3114         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3115                   [Support for LDAP/LBER logging interception])
3116   fi
3118   ########################################################
3119   # now see if we can find the ldap libs in standard paths
3120   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3122   ########################################################
3123   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3124   # Check found in pam_ldap 145.
3125   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3127   LIBS="$LIBS $LDAP_LIBS"
3128   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3129     AC_TRY_COMPILE([
3130         #include <lber.h>
3131         #include <ldap.h>],
3132         [ldap_set_rebind_proc(0, 0, 0);],
3133         [smb_ldap_cv_ldap_set_rebind_proc=3],
3134         [smb_ldap_cv_ldap_set_rebind_proc=2]
3135     )
3136   ])
3138   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3140   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3142   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3143     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3144     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3145     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3146     default_shared_modules="$default_shared_modules";
3147     SMBLDAP="lib/smbldap.o"
3148     SMBLDAPUTIL="lib/smbldap_util.o"
3149     with_ldap_support=yes
3150     AC_MSG_CHECKING(whether LDAP support is used)
3151     AC_MSG_RESULT(yes)
3152   else
3153     if test x"$with_ldap_support" = x"yes"; then
3154         AC_MSG_ERROR(libldap is needed for LDAP support)
3155     else
3156         AC_MSG_WARN(libldap is needed for LDAP support)
3157     fi
3159     LDAP_LIBS=""
3160     with_ldap_support=no
3161   fi
3162   LIBS=$ac_save_LIBS
3166 #################################################
3167 # active directory support
3169 with_ads_support=auto
3170 AC_MSG_CHECKING([for Active Directory and krb5 support])
3172 AC_ARG_WITH(ads,
3173 [AS_HELP_STRING([--with-ads], [Active Directory support (default auto)])],
3174 [ case "$withval" in
3175     yes|no)
3176         with_ads_support="$withval"
3177         ;;
3178   esac ])
3180 AC_MSG_RESULT($with_ads_support)
3182 FOUND_KRB5=no
3183 KRB5_LIBS=""
3185 if test x"$with_ldap_support" != x"yes"; then
3187     if test x"$with_ads_support" = x"yes"; then
3188         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3189     elif test x"$with_ads_support" = x"auto"; then
3190         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3191         with_ads_support=no
3192     fi
3194 else
3196     # Check to see whether there is enough LDAP functionality to be able
3197     # to build AD support.
3199 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3200 case "$host_os" in
3201         *hpux*)
3202     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3204     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3205         if test x"$with_ads_support" = x"yes"; then
3206             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3207         elif test x"$with_ads_support" = x"auto"; then
3208             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3209             with_ads_support=no
3210         fi
3211     fi
3212     ;;
3213         *)
3214     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3216     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3217         if test x"$with_ads_support" = x"yes"; then
3218             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3219         elif test x"$with_ads_support" = x"auto"; then
3220             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3221             with_ads_support=no
3222         fi
3223     fi
3224     ;;
3225 esac
3228     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3230     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3231         if test x"$with_ads_support" = x"yes"; then
3232             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3233         elif test x"$with_ads_support" = x"auto"; then
3234             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3235             with_ads_support=no
3236         fi
3237     fi
3241 if test x"$with_ads_support" != x"no"; then
3243   # Do no harm to the values of CFLAGS and LIBS while testing for
3244   # Kerberos support.
3246   if test x$FOUND_KRB5 = x"no"; then
3247     #################################################
3248     # check for location of Kerberos 5 install
3249     AC_MSG_CHECKING(for kerberos 5 install path)
3250     AC_ARG_WITH(krb5,
3251     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3252     [ case "$withval" in
3253       no)
3254         AC_MSG_RESULT(no krb5-path given)
3255         ;;
3256       yes)
3257         AC_MSG_RESULT(/usr)
3258         FOUND_KRB5=yes
3259         ;;
3260       *)
3261         AC_MSG_RESULT($withval)
3262         KRB5_CFLAGS="-I$withval/include"
3263         KRB5_CPPFLAGS="-I$withval/include"
3264         KRB5_LDFLAGS="-L$withval/lib"
3265         FOUND_KRB5=yes
3266         if test -x "$withval/bin/krb5-config"; then
3267                 KRB5CONFIG=$withval/bin/krb5-config
3268         fi
3269         ;;
3270       esac ],
3271       AC_MSG_RESULT(no krb5-path given)
3272     )
3273   fi
3275   #################################################
3276   # check for krb5-config from recent MIT and Heimdal kerberos 5
3277   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3278   AC_MSG_CHECKING(for working krb5-config)
3279   if test -x "$KRB5CONFIG"; then
3280     ac_save_CFLAGS=$CFLAGS
3281     CFLAGS="";export CFLAGS
3282     ac_save_LDFLAGS=$LDFLAGS
3283     LDFLAGS="";export LDFLAGS
3284     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3285     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3286     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3287     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3288     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3289     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3290     FOUND_KRB5=yes
3291     AC_MSG_RESULT(yes)
3292   else
3293     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3294   fi
3296   if test x$FOUND_KRB5 = x"no"; then
3297     #################################################
3298     # see if this box has the SuSE location for the heimdal krb implementation
3299     AC_MSG_CHECKING(for /usr/include/heimdal)
3300     if test -d /usr/include/heimdal; then
3301       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3302           KRB5_CFLAGS="-I/usr/include/heimdal"
3303           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3304           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3305           FOUND_KRB5=yes
3306           AC_MSG_RESULT(yes)
3307       else
3308           KRB5_CFLAGS="-I/usr/include/heimdal"
3309           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3310           FOUND_KRB5=yes
3311           AC_MSG_RESULT(yes)
3312       fi
3313     else
3314       AC_MSG_RESULT(no)
3315     fi
3316   fi
3318   if test x$FOUND_KRB5 = x"no"; then
3319     #################################################
3320     # see if this box has the RedHat location for kerberos
3321     AC_MSG_CHECKING(for /usr/kerberos)
3322     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3323       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3324       KRB5_CFLAGS="-I/usr/kerberos/include"
3325       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3326       FOUND_KRB5=yes
3327       AC_MSG_RESULT(yes)
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 OpenBSD location for heimdal krb5
3336     AC_MSG_CHECKING(for /usr/include/kerberosV)
3337     if test -d /usr/include/kerberosV; then
3338       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3339       KRB5_LIBS="-lcrypto"
3340       FOUND_KRB5=yes
3341       AC_MSG_RESULT(yes)
3342     else
3343       AC_MSG_RESULT(no)
3344     fi
3345   fi
3347   ac_save_CFLAGS=$CFLAGS
3348   ac_save_CPPFLAGS=$CPPFLAGS
3349   ac_save_LDFLAGS=$LDFLAGS
3351   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3352   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3353   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3355   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3357   # now check for krb5.h. Some systems have the libraries without the headers!
3358   # note that this check is done here to allow for different kerberos
3359   # include paths
3360   AC_CHECK_HEADERS(krb5.h)
3362   if test x"$ac_cv_header_krb5_h" = x"no"; then
3364     # Give a warning if AD support was not explicitly requested,
3365     # i.e with_ads_support = auto, otherwise die with an error.
3367     if test x"$with_ads_support" = x"yes"; then
3368       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3369     else
3370       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3371     fi
3373     # Turn off AD support and restore CFLAGS and LIBS variables
3375     with_ads_support="no"
3377     CFLAGS=$ac_save_CFLAGS
3378     CPPFLAGS=$ac_save_CPPFLAGS
3379     LDFLAGS=$ac_save_LDFLAGS
3380   fi
3381   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3382   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
3383         WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
3384         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
3385   fi
3388 # Now we have determined whether we really want ADS support
3389 use_ads=no
3390 if test x"$with_ads_support" != x"no"; then
3391   use_ads=yes
3392   have_gssapi=no
3393   ac_save_LIBS=$LIBS
3395   # now check for gssapi headers.  This is also done here to allow for
3396   # different kerberos include paths
3397   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3399   ##################################################################
3400   # we might need the k5crypto and com_err libraries on some systems
3401   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3402   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3404   # Heimdal checks.
3405   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3406   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3407   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3409   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3410   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3412   ########################################################
3413   # now see if we can find the krb5 libs in standard paths
3414   # or as specified above
3415   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3416   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3418   ########################################################
3419   # now see if we can find the gssapi libs in standard paths
3420   if test x"$have_gssapi" != x"yes"; then
3421      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3422   fi
3424   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3425   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3426   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3427   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3428   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3429   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3430   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3431   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3432   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3433   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3434   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3435   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3436   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3437   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3438   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3439   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3440   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3441   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3442   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3443   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3444   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3445   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3446   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3447   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3448   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3449   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3450   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3451   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3452   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3453   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3454   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3455   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3456   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3457   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3458   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3459   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3460   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3461   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3462   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3463   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3464   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3465   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3466   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3468   LIBS="$KRB5_LIBS $LIBS"
3470   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3471         smb_krb5_cv_ticket_has_keyinfo,
3472         [
3473             AC_TRY_COMPILE(
3474             [
3475                 #include <krb5.h>
3476             ],
3477             [
3478                 krb5_ticket ticket;
3479                 krb5_kvno kvno;
3480                 krb5_enctype enctype;
3482                 enctype = ticket.enc_part.enctype;
3483                 kvno = ticket.enc_part.kvno;
3484             ],
3485             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3486             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3487         ])
3489   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3490         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3491             [Whether the krb5_ticket structure contains the kvno and enctype])
3492   fi
3494   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3495           smb_krb5_cv_creds_opt_free_context,
3496           [
3497                 AC_TRY_COMPILE([
3498                     #include <krb5.h>],
3499                     [
3500                         krb5_context ctx;
3501                         krb5_get_init_creds_opt *opt = NULL;
3502                         krb5_get_init_creds_opt_free(ctx, opt);
3503                     ],
3504                     [smb_krb5_cv_creds_opt_free_context=yes],
3505                     [smb_krb5_cv_creds_opt_free_context=no]
3506                 )
3507           ])
3509   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3510         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3511             [Whether krb5_get_init_creds_opt_free takes a context argument])
3512   fi
3514   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3515     AC_TRY_COMPILE([
3516         #include <krb5.h>],
3517         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3518         [smb_krb5_cv_verify_checksum=7],
3519         [smb_krb5_cv_verify_checksum=6],
3520     )
3521   ])
3522   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3524   AC_CACHE_CHECK([for checksum in krb5_checksum],
3525                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3526     AC_TRY_COMPILE([#include <krb5.h>],
3527       [krb5_checksum cksum; cksum.checksum.length = 0;],
3528       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3529       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3531   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3532     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3533                [Whether the krb5_checksum struct has a checksum property])
3534   fi
3536   AC_CACHE_CHECK([for etype in EncryptedData],
3537                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3538     AC_TRY_COMPILE([#include <krb5.h>],
3539       [EncryptedData edata; edata.etype = 0;],
3540       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3541       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3543   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3544     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3545                [Whether the EncryptedData struct has a etype property])
3546   fi
3548   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3549                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3550     AC_TRY_COMPILE([#include <krb5.h>],
3551       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3552       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3553       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3555   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3556     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3557                [Whether the krb5_ap_req struct has a ticket pointer])
3558   fi
3560   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3561                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3562     AC_TRY_COMPILE([#include <krb5.h>],
3563       [krb5_error err; err.e_data = NULL;],
3564       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3565       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3567   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3568     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3569                [Whether the krb5_error struct has a e_data pointer])
3570   fi
3572   AC_CACHE_CHECK([for krb5_crypto type],
3573                 samba_cv_HAVE_KRB5_CRYPTO,[
3574     AC_TRY_COMPILE([#include <krb5.h>],
3575       [krb5_crypto crypto;],
3576       samba_cv_HAVE_KRB5_CRYPTO=yes,
3577       samba_cv_HAVE_KRB5_CRYPTO=no)])
3579   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3580     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3581                [Whether the type krb5_crypto exists])
3582   fi
3584   AC_CACHE_CHECK([for krb5_encrypt_block type],
3585                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3586     AC_TRY_COMPILE([#include <krb5.h>],
3587       [krb5_encrypt_block block;],
3588       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3589       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3591   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3592     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3593                [Whether the type krb5_encrypt_block exists])
3594   fi
3596   AC_CACHE_CHECK([for addrtype in krb5_address],
3597                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3598     AC_TRY_COMPILE([#include <krb5.h>],
3599       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3600       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3601       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3603   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3604     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3605                [Whether the krb5_address struct has a addrtype property])
3606   fi
3608   AC_CACHE_CHECK([for addr_type in krb5_address],
3609                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3610     AC_TRY_COMPILE([#include <krb5.h>],
3611       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3612       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3613       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3615   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3616     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3617               [Whether the krb5_address struct has a addr_type property])
3618   fi
3620   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3621                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3622                  [AC_TRY_COMPILE([#include <krb5.h>],
3623     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3624     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3626   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3627     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3628               [Whether the krb5_ticket struct has a enc_part2 property])
3629   fi
3631   AC_CACHE_CHECK([for keyblock in krb5_creds],
3632                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3633     AC_TRY_COMPILE([#include <krb5.h>],
3634       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3635       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3636       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3638   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3639     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3640               [Whether the krb5_creds struct has a keyblock property])
3641   fi
3643   AC_CACHE_CHECK([for session in krb5_creds],
3644                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3645     AC_TRY_COMPILE([#include <krb5.h>],
3646       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3647       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3648       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3650   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3651     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3652               [Whether the krb5_creds struct has a session property])
3653   fi
3655   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3656                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3657     AC_TRY_COMPILE([#include <krb5.h>],
3658       [krb5_keyblock key; key.keyvalue.data = NULL;],
3659       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3660       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3662   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3663     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3664               [Whether the krb5_keyblock struct has a keyvalue property])
3665   fi
3667   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3668                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3669     AC_TRY_COMPILE([#include <krb5.h>],
3670       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3671       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3672       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3673   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3674                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3675     AC_TRY_COMPILE([#include <krb5.h>],
3676       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3677       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3678       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3679 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3680 # w.r.t. arcfour and windows, so we must not enable it here
3681   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3682           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3683     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3684               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3685   fi
3687   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3688                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3689     AC_TRY_COMPILE([#include <krb5.h>],
3690       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3691       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3692       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3694   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3695     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3696               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3697   fi
3699   AC_CACHE_CHECK([for KV5M_KEYTAB],
3700                  samba_cv_HAVE_KV5M_KEYTAB,[
3701     AC_TRY_COMPILE([#include <krb5.h>],
3702       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3703       samba_cv_HAVE_KV5M_KEYTAB=yes,
3704       samba_cv_HAVE_KV5M_KEYTAB=no)])
3706   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3707       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3708              [Whether the KV5M_KEYTAB option is available])
3709   fi
3711   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3712                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3713     AC_TRY_COMPILE([#include <krb5.h>],
3714       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3715       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3716       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3718   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3719     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3720               [Whether KRB5_KU_OTHER_CKSUM is available])
3721   fi
3723   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3724                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3725     AC_TRY_COMPILE([#include <krb5.h>],
3726       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3727       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3728       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3730   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3731     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3732               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3733   fi
3735   AC_CACHE_CHECK([for the krb5_princ_component macro],
3736                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3737     AC_TRY_LINK([#include <krb5.h>],
3738       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3739       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3740       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3742   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3743     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3744                [Whether krb5_princ_component is available])
3745   fi
3747   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3748                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3749     AC_TRY_COMPILE([#include <krb5.h>],
3750       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3751       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3752       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3754   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3755     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3756               [Whether krb5_keytab_entry has key member])
3757   fi
3759   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3760                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3761     AC_TRY_COMPILE([#include <krb5.h>],
3762       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3763       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3764       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3766   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3767     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3768               [Whether krb5_keytab_entry has keyblock member])
3769   fi
3771   AC_CACHE_CHECK([for magic in krb5_address],
3772                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3773     AC_TRY_COMPILE([#include <krb5.h>],
3774       [krb5_address addr; addr.magic = 0;],
3775       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3776       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3778   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3779     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3780               [Whether the krb5_address struct has a magic property])
3781   fi
3783   AC_CACHE_CHECK([for WRFILE: keytab support],
3784                 samba_cv_HAVE_WRFILE_KEYTAB,[
3785     AC_TRY_RUN([
3786 #include<krb5.h>
3787   main()
3788   {
3789     krb5_context context;
3790     krb5_keytab keytab;
3792     krb5_init_context(&context);
3793     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3794   }],
3795   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3796   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3798   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3799       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3800                [Whether the WRFILE:-keytab is supported])
3801   fi
3803   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3804                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3805     AC_TRY_COMPILE([#include <krb5.h>],
3806     [
3807     krb5_context context;
3808     krb5_principal principal;
3809     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3810     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3811     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3813   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3814     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3815               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3816   fi
3818   AC_CACHE_CHECK([for krb5_addresses type],
3819                 samba_cv_HAVE_KRB5_ADDRESSES,[
3820     AC_TRY_COMPILE([#include <krb5.h>],
3821       [krb5_addresses addr;],
3822       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3823       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3825   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3826     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3827                [Whether the type krb5_addresses type exists])
3828   fi
3830   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
3831                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
3832     AC_TRY_COMPILE([#include <krb5.h>],
3833     [
3834     krb5_mk_error(0,0,0);],
3835     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
3836     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
3838   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
3839     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
3840               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
3841   fi
3843   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
3844     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
3845         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
3846         AC_TRY_RUN_STRICT([
3847                 #include <stdlib.h>
3848                 #include <krb5.h>
3849                 int main(void) {
3850                         krb5_context context = NULL;
3851                         char *str = NULL;
3852                         krb5_enctype_to_string(context, 1, &str);
3853                         if (str) free (str); 
3854                         return 0;
3855                 }
3856                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3857                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
3858                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
3860     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
3861       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
3862                 [whether krb5_enctype_to_string takes krb5_context argument])
3863     fi
3865     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
3866         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
3867         AC_TRY_RUN_STRICT([
3868                 #include <krb5.h>
3869                 int main(void) {
3870                         char buf[256];
3871                         krb5_enctype_to_string(1, buf, 256);
3872                         return 0;
3873                 }
3874                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3875                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
3876                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
3878     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
3879       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
3880                 [whether krb5_enctype_to_string takes size_t argument])
3881     fi
3882   fi
3884   AC_CACHE_CHECK([for krb5_principal_get_realm],
3885                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
3886     AC_TRY_LINK([#include <krb5.h>],
3887       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
3888       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
3889       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
3891   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
3892     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
3893                [Whether the function krb5_principal_get_realm is defined])
3894   fi
3896   AC_CACHE_CHECK([for krb5_princ_realm],
3897                 samba_cv_HAVE_KRB5_PRINC_REALM,[
3898     AC_TRY_LINK([#include <krb5.h>],
3899       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
3900       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
3901       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
3903   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
3904     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
3905                [Whether the macro krb5_princ_realm is defined])
3906   fi
3908   #
3909   #
3910   # Now the decisions whether we can support krb5
3911   #
3912   # NOTE: all tests should be done before this block!
3913   #
3914   #
3915   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3916     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3917     use_ads=no
3918   fi
3920   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
3921           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
3922   then
3923     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
3924     use_ads=no
3925   fi
3927   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
3928           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
3929   then
3930     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
3931     use_ads=no
3932   fi
3934   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
3935           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
3936   then
3937     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
3938     use_ads=no
3939   fi
3941   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
3942           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
3943   then
3944     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
3945     use_ads=no
3946   fi
3948   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
3950       # We only need the following functions if we can't get the enctype
3951       # and kvno out of the ticket directly (ie. on Heimdal).
3953       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
3954       then
3955         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
3956         use_ads=no
3957       fi
3959       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
3960       then
3961         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
3962         use_ads=no
3963       fi
3965   fi
3967   if test x"$use_ads" = x"yes"; then
3968     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3969     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3970     if test x"$have_gssapi" = x"yes"; then
3971       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
3972     fi
3973   else
3974     if test x"$with_ads_support" = x"yes"; then
3975         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
3976     else
3977         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
3978     fi
3979     AC_REMOVE_DEFINE(HAVE_KRB5_H)
3980     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
3981     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
3982     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
3983     KRB5_LIBS=""
3984     with_ads_support=no
3985   fi
3986   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
3987   AC_MSG_RESULT([$use_ads])
3989 LIBS="$ac_save_LIBS"
3992 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
3993 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
3996 ########################################################
3997 # Compile with DNS Updates support?
3999 with_dnsupdate_support=no
4000 AC_MSG_CHECKING([whether to enable DNS Updates support])
4002 AC_ARG_WITH(dnsupdate,
4003 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default no)])],
4004 [ case "$withval" in
4005     yes|no)
4006         with_dnsupdate_support=$withval
4007         ;;
4008   esac ])
4010 AC_MSG_RESULT($with_dnsupdate_support)
4012 if test x"$with_dnsupdate_support" != x"no"; then
4014   ################################################################
4015   # first test for Active Directory support being enabled
4016   #if test x"$with_ads_support" = x"no"; then
4017   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
4018   #             with_dnsupdate_support=no
4019   #fi           
4020   ##################################################################
4021   # then test for uuid.h (necessary to generate unique DNS keynames
4022   # (uuid.h is required for this test)
4023   AC_CHECK_HEADERS(uuid/uuid.h)
4025   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4026         if test x"$with_dnsupdate_support" = x"yes"; then
4027          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4028         else
4029          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4030         fi
4031         with_dnsupdate_support=no
4032   fi
4035 if test x"$with_dnsupdate_support" != x"no"; then
4037   ########################################################
4038   # Now see if we can find the uuid libs in standard paths
4039   # On some systems, the uuid API is in libc, so we have to
4040   # be careful not to insert a spurious -luuid.
4042   UUID_LIBS=""
4043   AC_LIBTESTFUNC(uuid, uuid_generate,
4044           [
4045             case " $LIBS " in
4046                 *\ -luuid\ *)
4047                 UUID_LIBS="-luuid"
4048                 SMB_REMOVE_LIB(uuid)
4049                 ;;
4050             esac
4052             with_dnsupdate_support=yes
4053             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4054         ],
4055         [
4056             if test x"$with_dnsupdate_support" = x"yes"; then
4057                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4058             else
4059                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4060             fi
4061             with_dnsupdate_support=no
4062         ])
4065 #################################################
4066 # check for automount support
4067 AC_MSG_CHECKING(whether to use automount)
4068 AC_ARG_WITH(automount,
4069 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4070 [ case "$withval" in
4071   yes)
4072     AC_MSG_RESULT(yes)
4073     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4074     ;;
4075   *)
4076     AC_MSG_RESULT(no)
4077     ;;
4078   esac ],
4079   AC_MSG_RESULT(no)
4082 #################################################
4083 # check for mount- and umount.cifs support
4084 CIFSMOUNT_PROGS=""
4085 INSTALL_CIFSMOUNT=""
4086 UNINSTALL_CIFSMOUNT=""
4087 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4088 AC_ARG_WITH(cifsmount,
4089 [AS_HELP_STRING([--with-cifsmount], [Include mount.cifs and umount.cifs (Linux only) support (default=yes)])],
4090 [ case "$withval" in
4091   no)
4092         AC_MSG_RESULT(no)
4093         ;;
4094   *)
4095         case "$host_os" in
4096         *linux*)
4097                 AC_MSG_RESULT(yes)
4098                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4099                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4100                 INSTALL_CIFSMOUNT="installcifsmount"
4101                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4102                 ;;
4103         *)
4104                 AC_MSG_ERROR(not on a linux system!)
4105                 ;;
4106         esac
4107     ;;
4108   esac ],
4109 [ case "$host_os" in
4110   *linux*)
4111         AC_MSG_RESULT(yes)
4112         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4113         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4114         INSTALL_CIFSMOUNT="installcifsmount"
4115         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4116         ;;
4117   *)
4118         AC_MSG_RESULT(no)
4119         ;;
4120   esac ]
4123 #################################################
4124 # check for cifs.upcall support
4125 AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
4126 CIFSUPCALL_PROGS=""
4127 INSTALL_CIFSUPCALL=""
4128 UNINSTALL_CIFSUPCALL=""
4129 AC_MSG_CHECKING(whether to build cifs.upcall)
4130 AC_ARG_WITH(cifsupcall,
4131 [AS_HELP_STRING([--with-cifsupcall], [Include cifs.upcall (Linux only) support (default=yes)])],
4132 [ case "$withval" in
4133   no)
4134         AC_MSG_RESULT(no)
4135         ;;
4136   *)
4137         case "$host_os" in
4138         *linux*)
4139                 if test x"$use_ads" != x"yes"; then
4140                         AC_MSG_ERROR(ADS support should be enabled for building cifs.upcall)
4141                 elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4142                         AC_MSG_ERROR(keyutils package is required for cifs.upcall)
4143                 else
4144                         AC_MSG_RESULT(yes)
4145                         AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4146                         CIFSUPCALL_PROGS="bin/cifs.upcall"
4147                         INSTALL_CIFSUPCALL="installcifsupcall"
4148                         UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4149                 fi
4150                 ;;
4151         *)
4152                 AC_MSG_ERROR(not on a linux system!)
4153                 ;;
4154         esac
4155     ;;
4156   esac ],
4157 [ case "$host_os" in
4158   *linux*)
4159         if test x"$use_ads" != x"yes"; then
4160                 AC_MSG_WARN(ADS support should be enabled for building cifs.upcall)
4161         elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4162                 AC_MSG_WARN(keyutils package is required for cifs.upcall)
4163         else
4164                 AC_MSG_RESULT(yes)
4165                 AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4166                 CIFSUPCALL_PROGS="bin/cifs.upcall"
4167                 INSTALL_CIFSUPCALL="installcifsupcall"
4168                 UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4169         fi
4170         ;;
4171   *)
4172         AC_MSG_RESULT(no)
4173         ;;
4174   esac ]
4178 #################################################
4179 # Check for a PAM clear-text auth, accounts, password
4180 # and session support. Most PAM implementations keep their
4181 # headers in /usr/include/security. Darwin keeps its in
4182 # /usr/include/pam.
4184 with_pam_for_crypt=no
4185 try_pam=no
4186 AC_MSG_CHECKING(whether to try PAM support)
4187 AC_ARG_WITH(pam,
4188 [AS_HELP_STRING([--with-pam], [Include PAM support (default=no)])],
4189 [ case "$withval" in
4190   yes|no)
4191     try_pam=$withval
4192     ;;
4193   esac
4195 AC_MSG_RESULT([$try_pam])
4197 use_pam=no
4198 create_pam_modules=no
4199 if test x"${try_pam}" != x"no";then
4200         use_pam=yes
4201         create_pam_modules=yes
4203         # Most systems have PAM headers in /usr/include/security, but Darwin
4204         # has them in /usr/include/pam.
4205         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4206         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4207                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4208                 if test x"${try_pam}" = x"yes";then
4209                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4210                 fi
4211                 use_pam=no
4212                 create_pam_modules=no
4213         fi
4215         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4216         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4217                 if test x"${try_pam}" = x"yes";then
4218                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4219                 fi
4220                 use_pam=no
4221                 create_pam_modules=no
4222         fi
4224         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4225                 #if HAVE_SECURITY_PAM_APPL_H
4226                 #include <security/pam_appl.h>
4227                 #endif
4228                 #if HAVE_PAM_PAM_APPL_H
4229                 #include <pam/pam_appl.h>
4230                 #endif
4231         ]])
4232         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4233                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4234                 if test x"${try_pam}" = x"yes";then
4235                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4236        fi
4237                 create_pam_modules=no
4238     fi
4240         if test x"$use_pam" = x"yes"; then
4241     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4242                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4243                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4244     with_pam_for_crypt=yes
4246                 if test x"$create_pam_modules" = x"yes"; then
4247                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4248                         # this checks are optional,
4249                         # we don't care about the results here
4250                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4251                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4252                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4253                 else
4254                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4255                 fi
4256         fi
4257         AC_MSG_CHECKING(whether to use PAM support)
4258         AC_MSG_RESULT([$use_pam])
4260         AC_MSG_CHECKING(whether to have PAM MODULES support)
4261         AC_MSG_RESULT([$create_pam_modules])
4262 fi # try_pam != no
4264 #################################################
4265 # check for pam_smbpass support
4266 PAM_MODULES=""
4267 INSTALL_PAM_MODULES=""
4268 UNINSTALL_PAM_MODULES=""
4269 AC_MSG_CHECKING(whether to use pam_smbpass)
4270 AC_ARG_WITH(pam_smbpass,
4271 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=no)])],
4272 [ case "$withval" in
4273   yes)
4274     AC_MSG_RESULT(yes)
4276        # Conditions under which pam_smbpass should not be built.
4278        if test x"$BLDSHARED" != x"true"; then
4279           AC_MSG_ERROR([No support for shared modules])
4280        elif test x"$create_pam_modules" != x"yes"; then
4281           AC_MSG_ERROR([No support for PAM MODULES])
4282        else
4283           PAM_MODULES="pam_smbpass"
4284           INSTALL_PAM_MODULES="installpammodules"
4285           UNINSTALL_PAM_MODULES="uninstallpammodules"
4286        fi
4287     ;;
4288   *)
4289     AC_MSG_RESULT(no)
4290     ;;
4291   esac ],
4292   AC_MSG_RESULT(no)
4296 ###############################################
4297 # test for where we get crypt() from
4298 AC_SEARCH_LIBS(crypt, [crypt],
4299   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
4300   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
4303 ## moved after the check for -lcrypt in order to
4304 ## ensure that the necessary libraries are included
4305 ## check checking for truncated salt.  Wrapped by the
4306 ## $with_pam_for_crypt variable as above   --jerry
4308 if test $with_pam_for_crypt = no; then
4309 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4310 crypt_LIBS="$LIBS"
4311 LIBS="$AUTH_LIBS $LIBS"
4312 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
4313         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4314 LIBS="$crypt_LIBS"])
4315 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4316         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4320 #################################################
4321 # check for a NISPLUS_HOME support
4322 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4323 AC_ARG_WITH(nisplus-home,
4324 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4325 [ case "$withval" in
4326   yes)
4327     AC_MSG_RESULT(yes)
4328     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4329     ;;
4330   *)
4331     AC_MSG_RESULT(no)
4332     ;;
4333   esac ],
4334   AC_MSG_RESULT(no)
4337 #################################################
4338 # check for syslog logging
4339 AC_MSG_CHECKING(whether to use syslog logging)
4340 AC_ARG_WITH(syslog,
4341 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4342 [ case "$withval" in
4343   yes)
4344     AC_MSG_RESULT(yes)
4345     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4346     ;;
4347   *)
4348     AC_MSG_RESULT(no)
4349     ;;
4350   esac ],
4351   AC_MSG_RESULT(no)
4354 #################################################
4355 # check for experimental disk-quotas support
4357 samba_cv_WITH_QUOTAS=auto
4358 samba_cv_TRY_QUOTAS=no
4359 samba_cv_RUN_QUOTA_TESTS=auto
4360 samba_cv_WITH_SYS_QUOTAS=auto
4361 samba_cv_TRY_SYS_QUOTAS=auto
4362 samba_cv_SYSQUOTA_FOUND=no
4364 AC_MSG_CHECKING(whether to try disk-quotas support)
4365 AC_ARG_WITH(quotas,
4366 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4367 [ case "$withval" in
4368   yes)
4369     AC_MSG_RESULT(yes)
4370     samba_cv_WITH_QUOTAS=yes
4371     samba_cv_TRY_QUOTAS=yes
4372     samba_cv_RUN_QUOTA_TESTS=yes
4373     #set sys quotas to auto in this case
4374     samba_cv_TRY_SYS_QUOTAS=auto
4375     ;;
4376   auto)
4377     AC_MSG_RESULT(auto)
4378     samba_cv_WITH_QUOTAS=auto
4379     samba_cv_TRY_QUOTAS=auto
4380     samba_cv_RUN_QUOTA_TESTS=auto
4381     #set sys quotas to auto in this case
4382     samba_cv_TRY_SYS_QUOTAS=auto
4383     ;;
4384   no)
4385     AC_MSG_RESULT(no)
4386     samba_cv_WITH_QUOTAS=no
4387     samba_cv_TRY_QUOTAS=no
4388     samba_cv_RUN_QUOTA_TESTS=no
4389     ;;
4390   *)
4391     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4392     ;;
4393   esac ],
4394   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4397 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4398 AC_ARG_WITH(sys-quotas,
4399 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4400 [ case "$withval" in
4401   yes)
4402     AC_MSG_RESULT(yes)
4403     samba_cv_WITH_SYS_QUOTAS=yes
4404     samba_cv_TRY_SYS_QUOTAS=yes
4405     samba_cv_RUN_QUOTA_TESTS=yes
4406     ;;
4407   auto)
4408     AC_MSG_RESULT(auto)
4409     samba_cv_WITH_SYS_QUOTAS=auto
4410     samba_cv_TRY_SYS_QUOTAS=auto
4411     samba_cv_RUN_QUOTA_TESTS=auto
4412     ;;
4413   no)
4414     AC_MSG_RESULT(no)
4415     samba_cv_WITH_SYS_QUOTAS=no
4416     samba_cv_TRY_SYS_QUOTAS=no
4417     ;;
4418   *)
4419     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4420     ;;
4421   esac ],
4422   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4425 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4426 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4427   case "$host_os" in
4428         *linux*)
4429             AC_MSG_RESULT(yes)
4430             samba_cv_TRY_SYS_QUOTAS=yes
4431             samba_cv_RUN_QUOTA_TESTS=yes
4432             ;;
4433         *)
4434             AC_MSG_RESULT(no)
4435             samba_cv_TRY_SYS_QUOTAS=no
4436             ;;
4437   esac
4440 #############################################
4441 # only check for quota stuff if --with-quotas
4442 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4444 case "$host_os" in
4445         # on linux we didn't need to test we have builtin support
4446         *linux*)
4447             samba_cv_SYSQUOTA_FOUND=yes
4448             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4449             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4450             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4451             AC_MSG_RESULT(yes)
4453             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4454             samba_cv_found_xfs_header=yes
4455             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4456             AC_MSG_RESULT(yes)
4457             ;;
4458         *solaris*)
4459             # need to set this define when using static linking (BUG 1473)
4460             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4461             ;;
4462         *)
4463             ;;
4464 esac
4466 # some broken header files need this
4467 AC_CHECK_HEADER(asm/types.h,[
4468             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4469             AC_ADD_INCLUDE(<asm/types.h>)
4470             ])
4472 # For quotas on Veritas VxFS filesystems
4473 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4475 # For quotas on Linux XFS filesystems
4476 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4478 # For sys/quota.h and linux/quota.h
4479 AC_CHECK_HEADERS(sys/quota.h)
4481 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4482 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4483 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4484 AC_TRY_COMPILE([
4485 #include "confdefs.h"
4486 #ifdef HAVE_SYS_TYPES_H
4487 #include <sys/types.h>
4488 #endif
4489 #ifdef HAVE_ASM_TYPES_H
4490 #include <asm/types.h>
4491 #endif
4492 #include <sys/quota.h>
4493 ],[int i = Q_XGETQUOTA;],
4494 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4495 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4496         samba_cv_found_xfs_header=yes
4500 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4501 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4502 AC_TRY_COMPILE([
4503 #include "confdefs.h"
4504 #ifdef HAVE_SYS_QUOTA_H
4505 #include <sys/quota.h>
4506 #endif
4508 struct dqblk D;
4509 D.dqb_fsoftlimit = 0;],
4510 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4511 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4512         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4515 ##################
4516 # look for a working quota system
4518 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4519 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4520 AC_TRY_RUN_STRICT([
4521 #define HAVE_QUOTACTL_4A 1
4522 #define AUTOCONF_TEST 1
4523 #include "confdefs.h"
4524 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4525            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4526 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4527     samba_cv_SYSQUOTA_FOUND=yes;
4528     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4529     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4533 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4534 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4535 AC_TRY_RUN_STRICT([
4536 #define HAVE_QUOTACTL_4B 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_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4541 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4542     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4543     samba_cv_SYSQUOTA_FOUND=yes;
4544     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4545     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4549 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4550 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4551 AC_TRY_RUN_STRICT([
4552 #define HAVE_QUOTACTL_3 1
4553 #define AUTOCONF_TEST 1
4554 #include "confdefs.h"
4555 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4556            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4557 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4558     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4559     samba_cv_SYSQUOTA_FOUND=yes;
4560     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4561     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4565 #################################################
4566 # check for mntent.h and struct mntent
4567 AC_CHECK_HEADERS(mntent.h)
4568 #################################################
4569 # check for setmntent,getmntent,endmntent
4570 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4572 #################################################
4573 # check for devnm.h and struct mntent
4574 AC_CHECK_HEADERS(devnm.h)
4575 #################################################
4576 # check for devnm
4577 AC_CHECK_FUNCS(devnm)
4579 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4580     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4581         # if --with-sys-quotas=yes then build it
4582         # you have can use the get/set quota command smb.conf
4583         # options then
4584         samba_cv_SYSQUOTA_FOUND=auto
4585     fi
4586     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4587         # if --with-sys-quotas=yes then build it
4588         # you have can use the get/set quota command smb.conf
4589         # options then
4590         samba_cv_TRY_SYS_QUOTAS=auto
4591     fi
4594 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4595 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4596 SAVE_CPPFLAGS="$CPPFLAGS"
4597 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4598 AC_TRY_COMPILE([
4599 #include "confdefs.h"
4600 #define NO_PROTO_H 1
4601 #define NO_CONFIG_H 1
4602 #define HAVE_SYS_QUOTAS 1
4603 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4604 #include "${srcdir-.}/lib/sysquotas.c"
4605 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4606 CPPFLAGS="$SAVE_CPPFLAGS"
4608 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4609 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4610     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4611         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4612         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4613         samba_cv_WE_USE_SYS_QUOTAS=yes
4614         AC_MSG_RESULT(yes)
4615     else
4616         AC_MSG_RESULT(no)
4617     fi
4621 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4622 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4623 SAVE_CPPFLAGS="$CPPFLAGS"
4624 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4625 AC_TRY_COMPILE([
4626 #include "confdefs.h"
4627 #define NO_PROTO_H 1
4628 #define NO_CONFIG_H 1
4629 #define HAVE_SYS_QUOTAS 1
4630 #define HAVE_XFS_QUOTAS 1
4631 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4632 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4633 CPPFLAGS="$SAVE_CPPFLAGS"
4635 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4636     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4637         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4638     fi
4642 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4643 SAVE_CPPFLAGS="$CPPFLAGS"
4644 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4645 AC_TRY_COMPILE([
4646 #include "confdefs.h"
4647 #define NO_PROTO_H 1
4648 #define NO_CONFIG_H 1
4649 #include "${srcdir-.}/smbd/quotas.c"
4650 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4651 CPPFLAGS="$SAVE_CPPFLAGS"
4653 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4654 AC_MSG_CHECKING(whether to use the old quota support)
4655     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4656       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4657         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4658         AC_MSG_RESULT(yes)
4659       else
4660         AC_MSG_RESULT(no)
4661       fi
4662     else
4663       AC_MSG_RESULT(no)
4664     fi
4667 ####################
4668 # End of quota check samba_cv_RUN_QUOTA_TESTS
4671 #################################################
4672 # check for experimental utmp accounting
4674 AC_MSG_CHECKING(whether to support utmp accounting)
4675 WITH_UTMP=yes
4676 AC_ARG_WITH(utmp,
4677 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
4678 [ case "$withval" in
4679   no)
4680                 WITH_UTMP=no
4681                 ;;
4682   *)
4683                 WITH_UTMP=yes
4684                 ;;
4685   esac ],
4688 # utmp requires utmp.h
4689 # Note similar check earlier, when checking utmp details.
4691 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4692         utmp_no_reason=", no utmp.h on $host_os"
4693         WITH_UTMP=no
4696 # Display test results
4698 if test x"$WITH_UTMP" = x"yes"; then
4699         AC_MSG_RESULT(yes)
4700         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4701 else
4702         AC_MSG_RESULT(no$utmp_no_reason)
4705 INSTALLLIBCMD_SH=:
4706 INSTALLLIBCMD_A=:
4707 UNINSTALLLIBCMD_SH=:
4708 UNINSTALLLIBCMD_A=:
4710 if test $BLDSHARED = true; then
4711         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
4712         UNINSTALLLIBCMD_SH="rm -f"
4714 if test $enable_static = yes; then
4715         INSTALLLIBCMD_A="\$(INSTALLCMD)"
4716         UNINSTALLLIBCMD_A="rm -f"
4719 #################################################
4720 # --disable-shared-libs
4721 # can be used to disable the internal use of shared libs altogether
4722 # (this only has an effect when building shared libs is enabled)
4724 USESHARED=false
4725 AC_SUBST(USESHARED)
4727 AC_MSG_CHECKING(whether to use shared libraries internally)
4728 AC_ARG_ENABLE([shared-libs],
4729         AS_HELP_STRING([--enable-shared-libs],
4730                 [Use shared libraries internally (default=yes)]),
4731         [enable_shared_libs=$enableval],
4732         [enable_shared_libs=yes])
4734 if test x"$enable_shared_libs" != x"no" ; then
4735         USESHARED=$BLDSHARED
4738 AC_MSG_RESULT([$USESHARED])
4740 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
4741         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
4744 #################################################
4745 # --with-static-libs=LIBS:
4746 #   link (internal) libs dynamically or statically?
4748 # If a subsystem is built as a library then this controls whether they are
4749 # linked into Samba targets statically or dynamically:
4751 # * If we build the shared library at all, we link dynamically by default.
4753 # * We only link statically if we don't build shared or if the library
4754 #   appears in the --with-static-libs configure option.
4756 # Example:
4757 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
4758 #   of linking the dynamic variant with -ltalloc.
4760 # NOTE: This option only affects libraries that we do not only build
4761 # but that samba also links against as libraries (as opposed to linking
4762 # the plain object files. - This has to be configured in Makefile.in.
4763 # So in particular it does not harm to give invalid or unknown names here.
4766 AC_ARG_WITH([static-libs],
4767         [AS_HELP_STRING([--with-static-libs=LIBS],
4768                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
4769         [AS_IF([test $withval],
4770                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
4771                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
4772                         eval LINK_$lib=STATIC
4773                 done], [])],
4774         [])
4777 # WORKAROUND:
4778 #   until we have organized other internal subsystems (as util, registry
4779 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
4780 #   dynamically to samba programs.
4782 LINK_LIBNETAPI=STATIC
4784 LINK_LIBSMBCLIENT=STATIC
4787 #  The library versions are hardcoded here
4788 #  and filled into the LIBFOO_SOVER variable.
4790 #  TODO: for talloc and tdb (at least), these should
4791 #  be extracted from their respective source directories
4793 SMB_LIBRARY(talloc, 1)
4794 SMB_LIBRARY(tdb, 1)
4795 SMB_LIBRARY(netapi, 0)
4796 SMB_LIBRARY(smbclient, 0)
4797 SMB_LIBRARY(smbsharemodes, 0)
4798 SMB_LIBRARY(addns, 0, no, [undefined API])
4802 #################################################
4803 # these tests are taken from the GNU fileutils package
4804 AC_CHECKING(how to get filesystem space usage)
4805 space=no
4807 # Test for statvfs64.
4808 if test $space = no; then
4809   # SVR4
4810   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
4811   [AC_TRY_RUN([
4812 #if defined(HAVE_UNISTD_H)
4813 #include <unistd.h>
4814 #endif
4815 #include <sys/types.h>
4816 #include <sys/statvfs.h>
4817   main ()
4818   {
4819     struct statvfs64 fsd;
4820     exit (statvfs64 (".", &fsd));
4821   }],
4822   fu_cv_sys_stat_statvfs64=yes,
4823   fu_cv_sys_stat_statvfs64=no,
4824   fu_cv_sys_stat_statvfs64=cross)])
4825   if test $fu_cv_sys_stat_statvfs64 = yes; then
4826     space=yes
4827     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
4828   fi
4831 # Perform only the link test since it seems there are no variants of the
4832 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4833 # because that got a false positive on SCO OSR5.  Adding the declaration
4834 # of a `struct statvfs' causes this test to fail (as it should) on such
4835 # systems.  That system is reported to work fine with STAT_STATFS4 which
4836 # is what it gets when this test fails.
4837 if test $space = no; then
4838   # SVR4
4839   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
4840                  [AC_TRY_LINK([#include <sys/types.h>
4841 #include <sys/statvfs.h>],
4842                               [struct statvfs fsd; statvfs (0, &fsd);],
4843                               fu_cv_sys_stat_statvfs=yes,
4844                               fu_cv_sys_stat_statvfs=no)])
4845   if test $fu_cv_sys_stat_statvfs = yes; then
4846     space=yes
4847     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
4848   fi
4851 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
4852 # This is not the case on ancient Linux systems.
4854 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
4855     AC_TRY_COMPILE([#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
4856         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
4857 if test x"$samba_cv_fsid_int" = x"yes"; then
4858     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
4861 if test $space = no; then
4862   # DEC Alpha running OSF/1
4863   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
4864   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
4865   [AC_TRY_RUN([
4866 #include <sys/param.h>
4867 #include <sys/types.h>
4868 #include <sys/mount.h>
4869   main ()
4870   {
4871     struct statfs fsd;
4872     fsd.f_fsize = 0;
4873     exit (statfs (".", &fsd, sizeof (struct statfs)));
4874   }],
4875   fu_cv_sys_stat_statfs3_osf1=yes,
4876   fu_cv_sys_stat_statfs3_osf1=no,
4877   fu_cv_sys_stat_statfs3_osf1=no)])
4878   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
4879   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
4880     space=yes
4881     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
4882   fi
4885 if test $space = no; then
4886 # AIX
4887   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
4888 member (AIX, 4.3BSD)])
4889   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
4890   [AC_TRY_RUN([
4891 #ifdef HAVE_SYS_PARAM_H
4892 #include <sys/param.h>
4893 #endif
4894 #ifdef HAVE_SYS_MOUNT_H
4895 #include <sys/mount.h>
4896 #endif
4897 #ifdef HAVE_SYS_VFS_H
4898 #include <sys/vfs.h>
4899 #endif
4900   main ()
4901   {
4902   struct statfs fsd;
4903   fsd.f_bsize = 0;
4904   exit (statfs (".", &fsd));
4905   }],
4906   fu_cv_sys_stat_statfs2_bsize=yes,
4907   fu_cv_sys_stat_statfs2_bsize=no,
4908   fu_cv_sys_stat_statfs2_bsize=no)])
4909   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
4910   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
4911     space=yes
4912     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
4913   fi
4916 if test $space = no; then
4917 # SVR3
4918   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
4919   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
4920   [AC_TRY_RUN([#include <sys/types.h>
4921 #include <sys/statfs.h>
4922   main ()
4923   {
4924   struct statfs fsd;
4925   exit (statfs (".", &fsd, sizeof fsd, 0));
4926   }],
4927     fu_cv_sys_stat_statfs4=yes,
4928     fu_cv_sys_stat_statfs4=no,
4929     fu_cv_sys_stat_statfs4=no)])
4930   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
4931   if test $fu_cv_sys_stat_statfs4 = yes; then
4932     space=yes
4933     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
4934   fi
4937 if test $space = no; then
4938 # 4.4BSD and NetBSD
4939   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
4940 member (4.4BSD and NetBSD)])
4941   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
4942   [AC_TRY_RUN([#include <sys/types.h>
4943 #ifdef HAVE_SYS_PARAM_H
4944 #include <sys/param.h>
4945 #endif
4946 #ifdef HAVE_SYS_MOUNT_H
4947 #include <sys/mount.h>
4948 #endif
4949   main ()
4950   {
4951   struct statfs fsd;
4952   fsd.f_fsize = 0;
4953   exit (statfs (".", &fsd));
4954   }],
4955   fu_cv_sys_stat_statfs2_fsize=yes,
4956   fu_cv_sys_stat_statfs2_fsize=no,
4957   fu_cv_sys_stat_statfs2_fsize=no)])
4958   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
4959   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
4960     space=yes
4961         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
4962   fi
4965 if test $space = no; then
4966   # Ultrix
4967   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
4968   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
4969   [AC_TRY_RUN([#include <sys/types.h>
4970 #ifdef HAVE_SYS_PARAM_H
4971 #include <sys/param.h>
4972 #endif
4973 #ifdef HAVE_SYS_MOUNT_H
4974 #include <sys/mount.h>
4975 #endif
4976 #ifdef HAVE_SYS_FS_TYPES_H
4977 #include <sys/fs_types.h>
4978 #endif
4979   main ()
4980   {
4981   struct fs_data fsd;
4982   /* Ultrix's statfs returns 1 for success,
4983      0 for not mounted, -1 for failure.  */
4984   exit (statfs (".", &fsd) != 1);
4985   }],
4986   fu_cv_sys_stat_fs_data=yes,
4987   fu_cv_sys_stat_fs_data=no,
4988   fu_cv_sys_stat_fs_data=no)])
4989   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
4990   if test $fu_cv_sys_stat_fs_data = yes; then
4991     space=yes
4992     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
4993   fi
4997 # As a gating factor for large file support, in order to
4998 # use <4GB files we must have the following minimal support
4999 # available.
5000 # long long, and a 64 bit off_t or off64_t.
5001 # If we don't have all of these then disable large
5002 # file support.
5004 AC_MSG_CHECKING([if large file support can be enabled])
5005 AC_TRY_COMPILE([
5006 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5007 #include <sys/types.h>
5008 #else
5009 __COMPILE_ERROR_
5010 #endif
5012 [int i],
5013 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5014 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5015         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5017 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5019 #################################################
5020 # check for cluster extensions
5022 AC_MSG_CHECKING(whether to include cluster support)
5023 AC_ARG_WITH(cluster-support,
5024 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=no)])])
5025 if test "x$with_cluster_support" = "xyes"; then
5026     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5027     AC_MSG_RESULT(yes)
5028 else
5029     AC_MSG_RESULT(no)
5033 #################################################
5034 # check for ACL support
5036 AC_MSG_CHECKING(whether to support ACLs)
5037 AC_ARG_WITH(acl-support,
5038 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5039 [ case "$withval" in
5040         yes|no)
5041                 with_acl_support="$withval"
5042                 ;;
5043   esac ])
5045 if test x"$with_acl_support" = x ; then
5046         with_acl_support="auto"
5049 AC_MSG_RESULT($with_acl_support)
5051 if test x"$with_acl_support" = x"no"; then
5052         AC_MSG_RESULT(Disabling ACL support)
5053         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5054 else
5055         AC_MSG_NOTICE(checking whether ACL support is available:)
5056         case "$host_os" in
5057         *sysv5*)
5058                 AC_MSG_NOTICE(Using UnixWare ACLs)
5059                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5060                 default_static_modules="$default_static_modules vfs_solarisacl"
5061                 ;;
5062         *solaris*)
5063                 AC_MSG_NOTICE(Using solaris ACLs)
5064                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5065                 ACL_LIBS="$ACL_LIBS -lsec"
5066                 default_static_modules="$default_static_modules vfs_solarisacl"
5067                 ;;
5068         *hpux*)
5069                 AC_MSG_NOTICE(Using HPUX ACLs)
5070                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5071                 default_static_modules="$default_static_modules vfs_hpuxacl"
5072                 ;;
5073         *irix*)
5074                 AC_MSG_NOTICE(Using IRIX ACLs)
5075                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5076                 default_static_modules="$default_static_modules vfs_irixacl"
5077                 ;;
5078         *aix*)
5079                 AC_MSG_NOTICE(Using AIX ACLs)
5080                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5081                 default_static_modules="$default_static_modules vfs_aixacl"
5082                 ;;
5083         *osf*)
5084                 AC_MSG_NOTICE(Using Tru64 ACLs)
5085                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5086                 ACL_LIBS="$ACL_LIBS -lpacl"
5087                 default_static_modules="$default_static_modules vfs_tru64acl"
5088                 ;;
5089         *darwin*)
5090                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5091                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5092                 ;;
5093         *)
5094                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5095                 case "$host_os" in
5096                 *linux*)
5097                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5098                         ;;
5099                 esac
5100                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5101                         acl_LIBS=$LIBS
5102                         LIBS="$LIBS $ACL_LIBS"
5103                         AC_TRY_LINK([
5104                                 #include <sys/types.h>
5105                                 #include <sys/acl.h>
5106                         ],[
5107                                 acl_t acl;
5108                                 int entry_id;
5109                                 acl_entry_t *entry_p;
5110                                 return acl_get_entry(acl, entry_id, entry_p);
5111                         ],
5112                         [samba_cv_HAVE_POSIX_ACLS=yes],
5113                         [samba_cv_HAVE_POSIX_ACLS=no])
5114                         LIBS=$acl_LIBS
5115                 ])
5116                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5117                         AC_MSG_NOTICE(Using posix ACLs)
5118                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5119                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5120                                 acl_LIBS=$LIBS
5121                                 LIBS="$LIBS $ACL_LIBS"
5122                                 AC_TRY_LINK([
5123                                         #include <sys/types.h>
5124                                         #include <sys/acl.h>
5125                                 ],[
5126                                         acl_permset_t permset_d;
5127                                         acl_perm_t perm;
5128                                         return acl_get_perm_np(permset_d, perm);
5129                                 ],
5130                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5131                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5132                                 LIBS=$acl_LIBS
5133                         ])
5134                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5135                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5136                         fi
5137                         default_static_modules="$default_static_modules vfs_posixacl"
5138                 else
5139                         AC_MSG_NOTICE(ACL support is not avaliable)
5140                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5141                 fi
5142                 ;;
5143         esac
5144 fi # with_acl_support
5148 #################################################
5149 # check for AIO support
5151 AC_MSG_CHECKING(whether to support asynchronous io)
5152 AC_ARG_WITH(aio-support,
5153 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5154 [ case "$withval" in
5155   yes)
5157         AC_MSG_RESULT(yes)
5158         case "$host_os" in
5159         *)
5160                 AIO_LIBS=$LIBS
5161                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5162                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5163                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5164                 aio_LIBS=$LIBS
5165                 LIBS=$AIO_LIBS
5166                 AC_TRY_LINK([#include <sys/types.h>
5167 #include <aio.h>],
5168 [ struct aiocb a; return aio_read(&a);],
5169 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5170                 LIBS=$aio_LIBS])
5171                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5172                 aio_LIBS=$LIBS
5173                 LIBS=$AIO_LIBS
5174                 AC_TRY_LINK([#include <sys/types.h>
5175 #include <aio.h>],
5176 [ struct aiocb64 a; return aio_read64(&a);],
5177 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5178                 LIBS=$aio_LIBS])
5179                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5180                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5181                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5182                         LIBS=$AIO_LIBS
5183                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5184                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5185                         LIBS=$AIO_LIBS
5186                 fi
5188                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5189                         AC_MSG_CHECKING(for aio_read)
5190                         AC_LINK_IFELSE([#include <aio.h>
5191 int main() { struct aiocb a; return aio_read(&a); }],
5192 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5193 [AC_MSG_RESULT(no)])
5195                         AC_MSG_CHECKING(for aio_write)
5196                         AC_LINK_IFELSE([#include <aio.h>
5197 int main() { struct aiocb a; return aio_write(&a); }],
5198 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5199 [AC_MSG_RESULT(no)])
5201                         AC_MSG_CHECKING(for aio_fsync)
5202                         AC_LINK_IFELSE([#include <aio.h>
5203 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5204 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5205 [AC_MSG_RESULT(no)])
5207                         AC_MSG_CHECKING(for aio_return)
5208                         AC_LINK_IFELSE([#include <aio.h>
5209 int main() { struct aiocb a; return aio_return(&a); }],
5210 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5211 [AC_MSG_RESULT(no)])
5213                         AC_MSG_CHECKING(for aio_error)
5214                         AC_LINK_IFELSE([#include <aio.h>
5215 int main() { struct aiocb a; return aio_error(&a); }],
5216 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5217 [AC_MSG_RESULT(no)])
5219                         AC_MSG_CHECKING(for aio_cancel)
5220                         AC_LINK_IFELSE([#include <aio.h>
5221 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5222 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5223 [AC_MSG_RESULT(no)])
5225                         AC_MSG_CHECKING(for aio_suspend)
5226                         AC_LINK_IFELSE([#include <aio.h>
5227 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5228 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5229 [AC_MSG_RESULT(no)])
5230                 fi
5232                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5233                         AC_MSG_CHECKING(for aio_read64)
5234                         AC_LINK_IFELSE([#include <aio.h>
5235 int main() { struct aiocb a; return aio_read64(&a); }],
5236 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5237 [AC_MSG_RESULT(no)])
5239                         AC_MSG_CHECKING(for aio_write64)
5240                         AC_LINK_IFELSE([#include <aio.h>
5241 int main() { struct aiocb a; return aio_write64(&a); }],
5242 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5243 [AC_MSG_RESULT(no)])
5245                         AC_MSG_CHECKING(for aio_fsync64)
5246                         AC_LINK_IFELSE([#include <aio.h>
5247 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5248 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5249 [AC_MSG_RESULT(no)])
5251                         AC_MSG_CHECKING(for aio_return64)
5252                         AC_LINK_IFELSE([#include <aio.h>
5253 int main() { struct aiocb a; return aio_return64(&a); }],
5254 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5255 [AC_MSG_RESULT(no)])
5257                         AC_MSG_CHECKING(for aio_error64)
5258                         AC_LINK_IFELSE([#include <aio.h>
5259 int main() { struct aiocb a; return aio_error64(&a); }],
5260 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5261 [AC_MSG_RESULT(no)])
5263                         AC_MSG_CHECKING(for aio_cancel64)
5264                         AC_LINK_IFELSE([#include <aio.h>
5265 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5266 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5267 [AC_MSG_RESULT(no)])
5269                         AC_MSG_CHECKING(for aio_suspend64)
5270                         AC_LINK_IFELSE([#include <aio.h>
5271 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5272 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5273 [AC_MSG_RESULT(no)])
5274                 fi
5275             ;;
5276         esac
5277         ;;
5278   *)
5279     AC_MSG_RESULT(no)
5280     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5281     ;;
5282   esac ],
5283   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5284   AC_MSG_RESULT(no)
5287 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5288         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5289                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5290                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5291         fi
5294 #################################################
5295 # check for sendfile support
5297 with_sendfile_support=yes
5298 AC_MSG_CHECKING(whether to check to support sendfile)
5299 AC_ARG_WITH(sendfile-support,
5300 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5301 [ case "$withval" in
5302   yes)
5304         AC_MSG_RESULT(yes);
5306         case "$host_os" in
5307         *linux*)
5308                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5309                 AC_TRY_LINK([#include <sys/sendfile.h>],
5311 int tofd, fromfd;
5312 off64_t offset;
5313 size_t total;
5314 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5316 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5318                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5319                 AC_TRY_LINK([#include <sys/sendfile.h>],
5321 int tofd, fromfd;
5322 off_t offset;
5323 size_t total;
5324 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5326 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5328 # Try and cope with broken Linux sendfile....
5329                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5330                 AC_TRY_LINK([\
5331 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5332 #undef _FILE_OFFSET_BITS
5333 #endif
5334 #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_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5343         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5344                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5345                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5346                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5347         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5348                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5349                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5350                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5351         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5352                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5353                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5354         else
5355                 AC_MSG_RESULT(no);
5356         fi
5358         ;;
5359         *freebsd* | *dragonfly* )
5360                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5361                 AC_TRY_LINK([\
5362 #include <sys/types.h>
5363 #include <unistd.h>
5364 #include <sys/socket.h>
5365 #include <sys/uio.h>],
5367         int fromfd, tofd, ret, total=0;
5368         off_t offset, nwritten;
5369         struct sf_hdtr hdr;
5370         struct iovec hdtrl;
5371         hdr.headers = &hdtrl;
5372         hdr.hdr_cnt = 1;
5373         hdr.trailers = NULL;
5374         hdr.trl_cnt = 0;
5375         hdtrl.iov_base = NULL;
5376         hdtrl.iov_len = 0;
5377         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5379 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5381         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5382                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5383                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5384                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5385         else
5386                 AC_MSG_RESULT(no);
5387         fi
5388         ;;
5390         *hpux*)
5391                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5392                 AC_TRY_LINK([\
5393 #include <sys/socket.h>
5394 #include <sys/uio.h>],
5396         int fromfd, tofd;
5397         size_t total=0;
5398         struct iovec hdtrl[2];
5399         ssize_t nwritten;
5400         off64_t offset;
5402         hdtrl[0].iov_base = 0;
5403         hdtrl[0].iov_len = 0;
5405         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5407 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5408         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5409                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5410                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5411                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5412         else
5413                 AC_MSG_RESULT(no);
5414         fi
5416                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5417                 AC_TRY_LINK([\
5418 #include <sys/socket.h>
5419 #include <sys/uio.h>],
5421         int fromfd, tofd;
5422         size_t total=0;
5423         struct iovec hdtrl[2];
5424         ssize_t nwritten;
5425         off_t offset;
5427         hdtrl[0].iov_base = 0;
5428         hdtrl[0].iov_len = 0;
5430         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5432 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5433         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5434                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5435                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5436                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5437         else
5438                 AC_MSG_RESULT(no);
5439         fi
5440         ;;
5442         *solaris*)
5443                 AC_CHECK_LIB(sendfile,sendfilev)
5444                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5445                 AC_TRY_LINK([\
5446 #include <sys/sendfile.h>],
5448         int sfvcnt;
5449         size_t xferred;
5450         struct sendfilevec vec[2];
5451         ssize_t nwritten;
5452         int tofd;
5454         sfvcnt = 2;
5456         vec[0].sfv_fd = SFV_FD_SELF;
5457         vec[0].sfv_flag = 0;
5458         vec[0].sfv_off = 0;
5459         vec[0].sfv_len = 0;
5461         vec[1].sfv_fd = 0;
5462         vec[1].sfv_flag = 0;
5463         vec[1].sfv_off = 0;
5464         vec[1].sfv_len = 0;
5465         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5467 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5469         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5470                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5471                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5472                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5473         else
5474                 AC_MSG_RESULT(no);
5475         fi
5477                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5478                 AC_TRY_LINK([\
5479 #include <sys/sendfile.h>],
5481         int sfvcnt;
5482         size_t xferred;
5483         struct sendfilevec vec[2];
5484         ssize_t nwritten;
5485         int tofd;
5487         sfvcnt = 2;
5489         vec[0].sfv_fd = SFV_FD_SELF;
5490         vec[0].sfv_flag = 0;
5491         vec[0].sfv_off = 0;
5492         vec[0].sfv_len = 0;
5494         vec[1].sfv_fd = 0;
5495         vec[1].sfv_flag = 0;
5496         vec[1].sfv_off = 0;
5497         vec[1].sfv_len = 0;
5498         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5500 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5502         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5503                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5504                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5505                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5506         else
5507                 AC_MSG_RESULT(no);
5508         fi
5509         ;;
5510         *aix*)
5511                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5512                 AC_TRY_LINK([\
5513 #include <sys/socket.h>],
5515         int fromfd, tofd;
5516         size_t total=0;
5517         struct sf_parms hdtrl;
5518         ssize_t nwritten;
5519         off64_t offset;
5521         hdtrl.header_data = 0;
5522         hdtrl.header_length = 0;
5523         hdtrl.file_descriptor = fromfd;
5524         hdtrl.file_offset = 0;
5525         hdtrl.file_bytes = 0;
5526         hdtrl.trailer_data = 0;
5527         hdtrl.trailer_length = 0;
5529         nwritten = send_file(&tofd, &hdtrl, 0);
5531 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5532         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5533                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5534                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5535                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5536         else
5537                 AC_MSG_RESULT(no);
5538         fi
5539         ;;
5540         *)
5541         ;;
5542         esac
5543         ;;
5544   *)
5545     AC_MSG_RESULT(no)
5546     ;;
5547   esac ],
5548   AC_MSG_RESULT(yes)
5551 ############################################
5552 # See if we have the Linux readahead syscall.
5554 AC_CACHE_CHECK([for Linux readahead],
5555                 samba_cv_HAVE_LINUX_READAHEAD,[
5556     AC_TRY_LINK([
5557 #if defined(HAVE_UNISTD_H)
5558 #include <unistd.h>
5559 #endif
5560 #include <fcntl.h>],
5561     [ssize_t err = readahead(0,0,0x80000);],
5562     samba_cv_HAVE_LINUX_READAHEAD=yes,
5563     samba_cv_HAVE_LINUX_READAHEAD=no)])
5565 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5566   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5567              [Whether Linux readahead is available])
5570 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
5572 ############################################
5573 # See if we have the posix_fadvise syscall.
5575 AC_CACHE_CHECK([for posix_fadvise],
5576                 samba_cv_HAVE_POSIX_FADVISE,[
5577     AC_TRY_LINK([
5578 #if defined(HAVE_UNISTD_H)
5579 #include <unistd.h>
5580 #endif
5581 #include <fcntl.h>],
5582     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5583     samba_cv_HAVE_POSIX_FADVISE=yes,
5584     samba_cv_HAVE_POSIX_FADVISE=no)])
5586 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5587   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5588              [Whether posix_fadvise is available])
5591 ############################################
5592 # See if we have the Linux splice syscall.
5594 AC_CACHE_CHECK([for Linux splice],
5595                 samba_cv_HAVE_LINUX_SPLICE,[
5596     AC_TRY_LINK([
5597 #if defined(HAVE_UNISTD_H)
5598 #include <unistd.h>
5599 #endif
5600 #include <fcntl.h>],
5601     [long ret = splice(0,0,1,0,400,0);],
5602     samba_cv_HAVE_LINUX_SPLICE=yes,
5603     samba_cv_HAVE_LINUX_SPLICE=no)])
5605 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
5606   AC_DEFINE(HAVE_LINUX_SPLICE,1,
5607              [Whether Linux splice is available])
5610 AC_HAVE_DECL(splice, [#include <fcntl.h>])
5613 #################################################
5614 # Check whether winbind is supported on this platform.  If so we need to
5615 # build and install client programs, sbin programs and shared libraries
5617 AC_MSG_CHECKING(whether to build winbind)
5619 # Initially, the value of $host_os decides whether winbind is supported
5621 HAVE_WINBIND=yes
5623 # Define the winbind shared library name and any specific linker flags
5624 # it needs to be built with.
5626 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
5627 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
5628 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5629 NSSSONAMEVERSIONSUFFIX=""
5630 WINBIND_NSS_PTHREAD=""
5632 case "$host_os" in
5633         *linux*)
5634                 NSSSONAMEVERSIONSUFFIX=".2"
5635                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
5636                 ;;
5637         *freebsd[[5-9]]*)
5638                 # FreeBSD winbind client is implemented as a wrapper around
5639                 # the Linux version.
5640                 NSSSONAMEVERSIONSUFFIX=".1"
5641                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
5642                     nsswitch/winbind_nss_linux.o"
5643                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5644                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5645                 ;;
5647         *netbsd*[[3-9]]*)
5648                 # NetBSD winbind client is implemented as a wrapper
5649                 # around the Linux version. It needs getpwent_r() to
5650                 # indicate libc's use of the correct nsdispatch API.
5651                 #
5652                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5653                         WINBIND_NSS_EXTRA_OBJS="\
5654                             nsswitch/winbind_nss_netbsd.o \
5655                             nsswitch/winbind_nss_linux.o"
5656                         WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5657                         WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5658                 else
5659                         HAVE_WINBIND=no
5660                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5661                 fi
5662                 ;;
5663         *irix*)
5664                 # IRIX has differently named shared libraries
5665                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
5666                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
5667                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
5668                 ;;
5669         *solaris*)
5670                 # Solaris winbind client is implemented as a wrapper around
5671                 # the Linux version.
5672                 NSSSONAMEVERSIONSUFFIX=".1"
5673                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
5674                     nsswitch/winbind_nss_linux.o"
5675                 WINBIND_NSS_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
5676                 PAM_WINBIND_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
5677                 ;;
5678         *hpux11*)
5679                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
5680                 ;;
5681         *aix*)
5682                 # AIX has even differently named shared libraries.  No
5683                 # WINS support has been implemented yet.
5684                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
5685                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5686                 WINBIND_NSS="nsswitch/WINBIND"
5687                 WINBIND_WINS_NSS=""
5688                 ;;
5689         *)
5690                 HAVE_WINBIND=no
5691                 winbind_no_reason=", unsupported on $host_os"
5692                 ;;
5693 esac
5695 # Check the setting of --with-winbind
5697 AC_ARG_WITH(winbind,
5698 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
5700   case "$withval" in
5701         yes)
5702                 HAVE_WINBIND=yes
5703                 ;;
5704         no)
5705                 HAVE_WINBIND=no
5706                 winbind_reason=""
5707                 ;;
5708   esac ],
5711 # We need unix domain sockets for winbind
5713 if test x"$HAVE_WINBIND" = x"yes"; then
5714         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
5715                 winbind_no_reason=", no unix domain socket support on $host_os"
5716                 HAVE_WINBIND=no
5717         fi
5720 # Display test results
5722 if test x"$HAVE_WINBIND" = x"no"; then
5723         WINBIND_NSS=""
5724         WINBIND_WINS_NSS=""
5727 if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
5728         BUILD_LIBWBCLIENT_SHARED=no
5729 else
5730         BUILD_LIBWBCLIENT_SHARED=yes
5733 LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
5734 LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
5735 LIBWBCLIENT_SOVER=0
5736 if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
5737         NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
5738         ## Only worry about libwbclient if we have shared library support
5739         ## and winbindd
5740         LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
5741         LIBWBCLIENT=libwbclient
5742         INSTALL_LIBWBCLIENT=installlibwbclient
5743         UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
5744         WINBIND_LIBS="-lwbclient"
5745 else
5746         LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
5749 if test x"$HAVE_WINBIND" = x"yes"; then
5750         AC_MSG_RESULT(yes)
5751         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
5753         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
5754         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
5755         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
5756                 PAM_MODULES="$PAM_MODULES pam_winbind"
5757                 INSTALL_PAM_MODULES="installpammodules"
5758                 UNINSTALL_PAM_MODULES="uninstallpammodules"
5759         fi
5760 else
5761         AC_MSG_RESULT(no$winbind_no_reason)
5764 AC_CHECK_LIB(pthread, pthread_mutex_lock, [WINBIND_NSS_PTHREAD="-lpthread"
5765                         AC_DEFINE(HAVE_PTHREAD, 1, [whether pthread exists])])
5767 AC_SUBST(WINBIND_NSS_PTHREAD)
5768 AC_SUBST(WINBIND_NSS)
5769 AC_SUBST(WINBIND_WINS_NSS)
5770 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
5771 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
5772 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
5773 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
5774 AC_SUBST(PAM_WINBIND_EXTRA_LIBS)
5776 AC_SUBST(WINBIND_KRB5_LOCATOR)
5778 # Solaris 10 does have new member in nss_XbyY_key
5779 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
5780                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
5781                 [#include <nss_dbdefs.h>])
5783 # Solaris has some extra fields in struct passwd that need to be
5784 # initialised otherwise nscd crashes.
5786 AC_CHECK_MEMBER(struct passwd.pw_comment,
5787                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
5788                 [#include <pwd.h>])
5790 AC_CHECK_MEMBER(struct passwd.pw_age,
5791                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
5792                 [#include <pwd.h>])
5794 # AIX 4.3.x and 5.1 do not have as many members in
5795 # struct secmethod_table as AIX 5.2
5796 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
5797        [#include <usersec.h>])
5798 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
5799        [#include <usersec.h>])
5801 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
5802 AC_TRY_COMPILE([#include <sys/types.h>
5803 #include <sys/socket.h>],
5804 [struct ucred cred;
5805  socklen_t cred_len;
5806  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
5808 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
5809 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
5810     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
5814 #################################################
5815 # Check to see if we should use the included popt
5817 AC_ARG_WITH(included-popt,
5818 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
5820   case "$withval" in
5821         yes)
5822                 INCLUDED_POPT=yes
5823                 ;;
5824         no)
5825                 INCLUDED_POPT=no
5826                 ;;
5827   esac ],
5829 if test x"$INCLUDED_POPT" != x"yes"; then
5830     AC_CHECK_LIB(popt, poptGetContext,
5831                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
5834 AC_MSG_CHECKING(whether to use included popt)
5835 if test x"$INCLUDED_POPT" = x"yes"; then
5836     AC_MSG_RESULT(yes)
5837     BUILD_POPT='$(POPT_OBJ)'
5838     POPTLIBS='$(POPT_OBJ)'
5839     FLAGS1="-I\$(srcdir)/popt"
5840 else
5841     AC_MSG_RESULT(no)
5842         BUILD_POPT=""
5843     POPTLIBS="-lpopt"
5845 AC_SUBST(BUILD_POPT)
5846 AC_SUBST(POPTLIBS)
5847 AC_SUBST(FLAGS1)
5849 #################################################
5850 # Check if user wants DNS service discovery support
5852 AC_ARG_ENABLE(dnssd,
5853 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=auto)])])
5855 AC_SUBST(DNSSD_LIBS)
5856 if test x"$enable_dnssd" != x"no"; then
5857     have_dnssd_support=yes
5859     AC_CHECK_HEADERS(dns_sd.h)
5860     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
5861         have_dnssd_support=no
5862     fi
5864     # On Darwin the DNSSD API is in libc, but on other platforms it's
5865     # probably in -ldns_sd
5866     AC_CHECK_FUNCS(DNSServiceRegister)
5867     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
5868     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
5869             x"$ac_cv_lib_ext_DNSServiceRegister" != x"yes"; then
5870         have_dnssd_support=no
5871     fi
5873     if test x"$have_dnssd_support" = x"yes"; then
5874         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
5875                 [Whether to enable DNS service discovery support])
5876     else
5877         if test x"$enable_dnssd" = x"yes"; then
5878             AC_MSG_ERROR(DNS service discovery support not available)
5879         fi
5880     fi
5884 #################################################
5885 # Check to see if we should use the included iniparser
5887 AC_ARG_WITH(included-iniparser,
5888 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
5890   case "$withval" in
5891         yes)
5892                 INCLUDED_INIPARSER=yes
5893                 ;;
5894         no)
5895                 INCLUDED_INIPARSER=no
5896                 ;;
5897   esac ],
5899 if test x"$INCLUDED_INIPARSER" != x"yes"; then
5900     AC_CHECK_LIB(iniparser, iniparser_load,
5901                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
5904 AC_MSG_CHECKING(whether to use included iniparser)
5905 if test x"$INCLUDED_INIPARSER" = x"yes"; then
5906     AC_MSG_RESULT(yes)
5907     BUILD_INIPARSER='$(INIPARSER_OBJ)'
5908         INIPARSERLIBS=""
5909     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
5910 else
5911     AC_MSG_RESULT(no)
5912         BUILD_INIPARSER=""
5913     INIPARSERLIBS="-liniparser"
5915 AC_SUBST(BUILD_INIPARSER)
5916 AC_SUBST(INIPARSERLIBS)
5917 AC_SUBST(FLAGS1)
5921 # Checks for the vfs_fileid module
5922 # Start
5923 AC_CHECK_FUNC(getmntent)
5925 AC_CHECK_HEADERS(sys/statfs.h)
5927 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
5928 AC_CACHE_VAL(vfsfileid_cv_statfs,[
5929              AC_TRY_RUN([
5930                 #include <sys/types.h>
5931                 #include <sys/statfs.h>
5932                 int main(void)
5933                 {
5934                         struct statfs fsd;
5935                         fsid_t fsid = fsd.f_fsid;
5936                         return statfs (".", &fsd);
5937                 }],
5938                 vfsfileid_cv_statfs=yes,
5939                 vfsfileid_cv_statfs=no,
5940                 vfsfileid_cv_statfs=cross)
5942 AC_MSG_RESULT($vfsfileid_cv_statfs)
5944 if test x"$ac_cv_func_getmntent" = x"yes" -a \
5945         x"$vfsfileid_cv_statfs" = x"yes"; then
5946         default_shared_modules="$default_shared_modules vfs_fileid"
5948 # End
5949 # Checks for the vfs_fileid module
5952 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
5954         eval MODULE_DEFAULT_$i=STATIC
5955 done
5957 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
5959         dnl Fall back to static if we cannot build shared libraries
5960         eval MODULE_DEFAULT_$i=STATIC
5962         if test $BLDSHARED = true; then
5963                 eval MODULE_DEFAULT_$i=SHARED
5964         fi
5965 done
5967 dnl Always build these modules static
5968 MODULE_rpc_spoolss=STATIC
5969 MODULE_rpc_srvsvc=STATIC
5970 MODULE_idmap_tdb=STATIC
5971 MODULE_idmap_passdb=STATIC
5972 MODULE_idmap_nss=STATIC
5974 MODULE_nss_info_template=STATIC
5976 AC_ARG_WITH(static-modules,
5977 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
5978 [ if test $withval; then
5979         for i in `echo $withval | sed -e 's/,/ /g'`
5980         do
5981                 eval MODULE_$i=STATIC
5982         done
5983 fi ])
5985 AC_ARG_WITH(shared-modules,
5986 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
5987 [ if test $withval; then
5988         for i in `echo $withval | sed -e 's/,/ /g'`
5989         do
5990                         eval MODULE_$i=SHARED
5991         done
5992 fi ])
5994 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
5995                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
5996 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
5997 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
5998 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6001 SMB_MODULE(rpc_lsarpc, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
6002 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
6003 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
6004 SMB_MODULE(rpc_dssetup, \$(RPC_DSSETUP_OBJ), "bin/librpc_dssetup.$SHLIBEXT", RPC)
6005 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6006 SMB_MODULE(rpc_svcctl2, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl2.$SHLIBEXT", RPC)
6007 SMB_MODULE(rpc_ntsvcs2, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs2.$SHLIBEXT", RPC)
6008 SMB_MODULE(rpc_netlogon, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6009 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6010 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc.$SHLIBEXT", RPC)
6011 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6012 SMB_MODULE(rpc_eventlog2, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog2.$SHLIBEXT", RPC)
6013 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6014 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
6015 SMB_SUBSYSTEM(RPC,smbd/server.o)
6017 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6018 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6019 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6020 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6021 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6022 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6023 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6024 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6026 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6027 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6029 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6030 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6031 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6032 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6033 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6035 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6036 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6037 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6038 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6039 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6040 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6041 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6042 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6044 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6045 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6046 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6047 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6048 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6049 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6050 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6051 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6052 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6053 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6054 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6055 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6056 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6057 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6058 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6059 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6060 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6061 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6062 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6063 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6064 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6065 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6066 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6067 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6068 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6069 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6070 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6071 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6072 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6073 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6074 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6075 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6076 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6077 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6078 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6079 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6080 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6083 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6085 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6087 #################################################
6088 # do extra things if we are running insure
6090 if test "${ac_cv_prog_CC}" = "insure"; then
6091         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6094 #################################################
6095 # If run from the build farm, enable NASTY hacks
6096 #################################################
6097 AC_MSG_CHECKING(whether to enable build farm hacks)
6098 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6099         AC_MSG_RESULT(yes)
6100         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6101 else
6102         AC_MSG_RESULT(no)
6105 #################################################
6106 # check for bad librt/libpthread interactions
6108 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6109     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6110     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6111     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6113 SMB_IF_RTSIGNAL_BUG(
6114         [
6115             # Have RT_SIGNAL bug, need to check whether the problem will
6116             # affect anything we have configured.
6118             rt_do_error=no
6119             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6120                 if test x"$rt_signal_lease_ok" = x"no" ; then
6121                     rt_do_error=yes
6122                 fi
6123             fi
6125             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6126                 if test x"$rt_signal_notify_ok" = x"no" ; then
6127                     rt_do_error=yes
6128                 fi
6129             fi
6131             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6132                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6133                 if test x"$rt_signal_aio_ok" = x"no" ; then
6134                     rt_do_error=yes
6135                 fi
6136             fi
6138             if test x"$rt_do_error" = x"yes" ; then
6139                 SMB_IS_LIBPTHREAD_LINKED(
6140                     [
6141                         cat<<MSG
6143 *** On this platforms, linking Samba against pthreads causes problems
6144 *** with the oplock and change notification mechanisms. You may be
6145 *** using pthreads as a side-effect of using the --with-aio-support
6146 *** or --with-profiling-data options. Please remove these and try again.
6149                     ],
6150                     [
6151                         cat<<MSG
6153 *** On this platform, the oplock and change notification mechanisms do not
6154 *** appear to work. Please report this problem to samba-technical@samba.org
6155 *** and attach the config.log file from this directory.
6158                     ])
6159                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6160             fi
6161         ],
6162         [
6163             # no RT_SIGNAL bug, we are golden
6164             SMB_IS_LIBPTHREAD_LINKED(
6165                 [
6166                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6167                 ])
6169         ],
6170         [
6171             # cross compiling, I hope you know what you are doing
6172             true
6173         ])
6177 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6178 LIB_REMOVE_USR_LIB(LDFLAGS)
6179 LIB_REMOVE_USR_LIB(LIBS)
6180 LIB_REMOVE_USR_LIB(KRB5_LIBS)
6182 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6183 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6184 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6186 #################################################
6187 # Display summary of libraries detected
6189 AC_MSG_RESULT([Using libraries:])
6190 AC_MSG_RESULT([    LIBS = $LIBS])
6191 if test x"$with_ads_support" != x"no"; then
6192     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6194 if test x"$with_ldap_support" != x"no"; then
6195     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6197 if test x"$with_dnsupdate_support" != x"no"; then
6198     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6200 if test x"$have_dnssd_support" != x"no"; then
6201     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6203 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6205 #################################################
6206 # final configure stuff
6208 AC_MSG_CHECKING([configure summary])
6209 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
6210            AC_MSG_RESULT(yes),
6211            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6212            AC_MSG_WARN([cannot run when cross-compiling]))
6214 dnl Merge in developer cflags from now on
6215 AC_SUBST(DEVELOPER_CFLAGS)
6216 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes"; then
6217     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
6220 # Stuff the smbd-only libraries at the end of the smbd link
6221 # path (if we have them).
6222 SMBD_LIBS="$samba_dmapi_libs"
6223 AC_SUBST(SMBD_LIBS)
6225 AC_OUTPUT(Makefile
6226           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
6227           lib/netapi/examples/Makefile
6228           pkgconfig/smbclient.pc
6229           pkgconfig/wbclient.pc
6230           pkgconfig/netapi.pc
6231           pkgconfig/smbsharemodes.pc
6232           )
6234 #################################################
6235 # Print very concise instructions on building/use
6236 if test "x$enable_dmalloc" = xyes
6237 then
6238         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6239         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])