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