Revert commit "0551284dc08eb93ef7b2b2227a45e5ec21d482fb" - simplify
[Samba/fernandojvsilva.git] / source3 / configure.in
blob715f1598ef0deba8d04e3b5f248731e7363e8a46
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 m4_include(../lib/tevent/libtevent.m4)
29 LIBTEVENT_OBJ0=""
30 for obj in ${TEVENT_OBJ}; do
31         LIBTEVENT_OBJ0="${LIBTEVENT_OBJ0} ${teventdir}/${obj}"
32 done
33 AC_SUBST(LIBTEVENT_OBJ0)
34 LIBS="${LIBS} ${TEVENT_LIBS}"
36 SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
37 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/replace"
38 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TEVENT_CFLAGS}"
39 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
40 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
41 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/.."
43 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/popt"
45 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
46 if test "x${srcdir-.}" != "x."; then
47         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
50 dnl Unique-to-Samba variables we'll be playing with.
51 AC_SUBST(SAMBA_CPPFLAGS)
52 AC_SUBST(SHELL)
53 AC_SUBST(LDSHFLAGS)
54 AC_SUBST(SONAMEFLAG)
55 AC_SUBST(SHLD)
56 AC_SUBST(MODULE_EXPORTS)
57 AC_SUBST(DSO_EXPORTS)
58 AC_SUBST(HOST_OS)
59 AC_SUBST(PICFLAG)
60 AC_SUBST(PIE_CFLAGS)
61 AC_SUBST(PIE_LDFLAGS)
62 AC_SUBST(RELRO_LDFLAGS)
63 AC_SUBST(SHLIBEXT)
64 AC_SUBST(INSTALLLIBCMD_SH)
65 AC_SUBST(INSTALLLIBCMD_A)
66 AC_SUBST(UNINSTALLLIBCMD_SH)
67 AC_SUBST(UNINSTALLLIBCMD_A)
69 AC_SUBST(INSTALL_LIBWBCLIENT)
70 AC_SUBST(UNINSTALL_LIBWBCLIENT)
71 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
72 AC_SUBST(LIBWBCLIENT_SHARED)
73 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
74 AC_SUBST(LIBWBCLIENT_STATIC)
75 AC_SUBST(LIBWBCLIENT_SOVER)
76 AC_SUBST(LIBWBCLIENT)
77 AC_SUBST(LIBWBCLIENT_LIBS)
79 AC_SUBST(LIBSAMBAUTIL_SHARED)
81 AC_SUBST(PRINT_LIBS)
82 AC_SUBST(AUTH_LIBS)
83 AC_SUBST(ACL_LIBS)
84 AC_SUBST(PASSDB_LIBS)
85 AC_SUBST(IDMAP_LIBS)
86 AC_SUBST(KRB5_LIBS)
87 AC_SUBST(UUID_LIBS)
88 AC_SUBST(LDAP_LIBS)
89 AC_SUBST(GPEXT_LIBS)
90 AC_SUBST(PAM_MODULES)
91 AC_SUBST(INSTALL_PAM_MODULES)
92 AC_SUBST(UNINSTALL_PAM_MODULES)
93 AC_SUBST(NSS_MODULES)
94 AC_SUBST(EXTRA_BIN_PROGS)
95 AC_SUBST(CIFSMOUNT_PROGS)
96 AC_SUBST(INSTALL_CIFSMOUNT)
97 AC_SUBST(UNINSTALL_CIFSMOUNT)
98 AC_SUBST(CIFSUMOUNT_PROGS)
99 AC_SUBST(INSTALL_CIFSUMOUNT)
100 AC_SUBST(UNINSTALL_CIFSUMOUNT)
101 AC_SUBST(CIFSUPCALL_PROGS)
102 AC_SUBST(INSTALL_CIFSUPCALL)
103 AC_SUBST(UNINSTALL_CIFSUPCALL)
104 AC_SUBST(EXTRA_SBIN_PROGS)
105 AC_SUBST(EXTRA_ALL_TARGETS)
106 AC_SUBST(CONFIG_LIBS)
107 AC_SUBST(NSCD_LIBS)
109 # compile with optimization and without debugging by default, but
110 # allow people to set their own preference.
111 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
112 # if it has no value.  This prevent *very* large debug binaries from occurring
113 # by default.
114 if test "x$debug" = "xyes" ; then
115         CFLAGS="${CFLAGS} -g"
117 if test "x$CFLAGS" = x; then
118   CFLAGS="-O"
121 m4_include(../lib/socket_wrapper/config.m4)
122 m4_include(../lib/nss_wrapper/config.m4)
124 m4_include(m4/swat.m4)
126 # Probe the gcc version for extra CFLAGS. We always stash these in
127 # DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
128 # Makefile edit, avoiding the need to re-run configure.
129 if test x"$ac_cv_prog_gcc" = x"yes" ; then
130         DEVELOPER_CFLAGS="-g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
131         # Add -Wdeclaration-after-statement if compiler supports it
132         AC_CACHE_CHECK(
133           [that the C compiler understands -Wdeclaration-after-statement],
134           samba_cv_HAVE_Wdeclaration_after_statement, [
135           AC_TRY_RUN_STRICT([
136             int main(void)
137             {
138                 return 0;
139             }],[$CFLAGS -Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
140             samba_cv_HAVE_Wdeclaration_after_statement=yes,
141             samba_cv_HAVE_Wdeclaration_after_statement=no,
142             samba_cv_HAVE_Wdeclaration_after_statement=cross)
143        ])
145         if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
146             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
147         fi
149         #-Werror-implicit-function-declaration
150         AC_CACHE_CHECK(
151           [that the C compiler understands -Werror-implicit-function-declaration],
152           samba_cv_HAVE_Werror_implicit_function_declaration, [
153           AC_TRY_RUN_STRICT([
154             int main(void)
155             {
156                 return 0;
157             }],[$CFLAGS -Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
158             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
159             samba_cv_HAVE_Werror_implicit_function_declaration=no,
160             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
161        ])
162        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
163             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
164        fi
166         # krb5developer is like developer, except we don't get
167         # -Wstrict-prototypes.
168        if test x"$krb5_developer" != x"$yes" ; then
169             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
170        fi
172        if test x"$picky_developer" = x"yes"; then
173             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Werror"
174        fi
177 #################################################
178 # check for a shared memory profiling support
179 AC_MSG_CHECKING(whether to use profiling)
180 AC_ARG_WITH(profiling-data,
181 [AS_HELP_STRING([--with-profiling-data], [Include gathering source code profile information (default=no)])],
182 [ case "$withval" in
183   yes)
184     AC_MSG_RESULT(yes)
185     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
186     samba_cv_WITH_PROFILE=yes
187     ;;
188   *)
189     AC_MSG_RESULT(no)
190     samba_cv_WITH_PROFILE=no
191     ;;
192   esac ],
193   AC_MSG_RESULT(no)
196 dnl Checks for programs.
197 merged_build_possible=yes
199 AC_PROG_INSTALL
200 AC_PROG_AWK
201 # Check for GNU make
202 m4_include(../m4/check_make.m4)
203 AC_SAMBA_GNU_MAKE([true], [merged_build_possible=no])
205 # Check for perl
206 m4_include(../m4/check_perl.m4)
207 AC_SAMBA_PERL([true], [merged_build_possible=no])
209 AC_CHECK_TOOL(AR, ar)
211 dnl Check if we use GNU ld
212 LD=ld
213 AC_PROG_LD_GNU
215 dnl Certain versions of GNU ld the default is not to have the
216 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
217 dnl warnings when building modules.
218 if test "$ac_cv_prog_gnu_ld" = "yes"; then
219         ac_cv_gnu_ld_version=`$LD -v 2>/dev/null | head -1`
220         AC_MSG_CHECKING(GNU ld release date)
221         changequote(,)dnl
222         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'`
223         changequote([,])dnl
224         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
225         if test -n "$ac_cv_gnu_ld_date"; then
226         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
227                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
228         fi
229         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
230                 ac_cv_gnu_ld_version_script=yes
231         fi
232         else
233            AC_MSG_CHECKING(GNU ld release version)
234            changequote(,)dnl
235            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'`
236            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
237            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
238            changequote([,])dnl
239            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
240            AC_MSG_CHECKING(GNU ld release version major)
241            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
242            AC_MSG_CHECKING(GNU ld release version minor)
243            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
244            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
245              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
246            fi
247            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
248              ac_cv_gnu_ld_version_script=yes
249            fi
250         fi
253 dnl look for executable suffix
254 AC_EXEEXT
256 dnl Check if C compiler understands -c and -o at the same time
257 AC_PROG_CC_C_O
258 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
259       BROKEN_CC=
260 else
261       BROKEN_CC=#
263 AC_SUBST(BROKEN_CC)
265 dnl Check if the C compiler understands -Werror
266 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
267  AC_TRY_RUN_STRICT([
268   int main(void)
269   {
270         return 0;
271   }],[$CFLAGS -Werror],[$CPPFLAGS],[$LDFLAGS],
272   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
273 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
274    Werror_FLAGS="-Werror"
275 else
276 dnl Check if the C compiler understands -w2
277 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
278  AC_TRY_RUN_STRICT([
279   int main(void)
280   {
281         return 0;
282   }],[$CFLAGS -w2],[$CPPFLAGS],[$LDFLAGS],
283   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
284 if test x"$samba_cv_HAVE_w2" = x"yes"; then
285    Werror_FLAGS="-w2"
286 else
287 dnl Check if the C compiler understands -errwarn
288 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
289   AC_TRY_RUN_STRICT([
290    int main(void)
291    {
292         return 0;
293    }],[$CFLAGS -errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
294    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
295 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
296    Werror_FLAGS="-errwarn=%all"
301 ############################################
302 # check if the compiler can handle negative enum values
303 # and don't truncate the values to INT_MAX
304 # a runtime test is needed here
305 AC_SUBST(PIDL_ARGS)
306 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
307     AC_TRY_RUN(
309         #include <stdio.h>
310         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
311         int main(void) {
312                 enum negative_values v1 = NEGATIVE_VALUE;
313                 unsigned v2 = NEGATIVE_VALUE;
315                 if (v1 != 0xFFFFFFFF) {
316                         printf("%u != 0xFFFFFFFF\n", v1);
317                         return 1;
318                 }
319                 if (v2 != 0xFFFFFFFF) {
320                         printf("%u != 0xFFFFFFFF\n", v2);
321                         return 1;
322                 }
324                 return 0;
325         }
327         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv__CC_NEGATIVE_ENUM_VALUES=no)])
328 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
329         AC_MSG_WARN([using --uint-enums for pidl])
330         PIDL_ARGS="$PIDL_ARGS --uint-enums"
333 dnl Figure out the flags to support named structure initializers
335 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
337 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
338 AC_MSG_CHECKING(uname -s)
339 AC_MSG_RESULT(${UNAME_S})
341 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
342 AC_MSG_CHECKING(uname -r)
343 AC_MSG_RESULT(${UNAME_R})
345 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
346 AC_MSG_CHECKING(uname -m)
347 AC_MSG_RESULT(${UNAME_M})
349 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
350 AC_MSG_CHECKING(uname -p)
351 AC_MSG_RESULT(${UNAME_P})
353 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
354 AC_MSG_CHECKING(uname -i)
355 AC_MSG_RESULT(${UNAME_I})
357 dnl Add #include for broken IRIX header files
358   case "$host_os" in
359         *irix6*)
360                 #TODO add to libreplace
361                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
362                         dnl Fix sensible defaults for MIPSPro compilers. The
363                         dnl error numbers are valid for the 7.3 compilers,
364                         dnl hopefully also valid for the 7.4 series.
365                         dnl
366                         dnl Bugzilla 3801. Force an error on warning 1035
367                         dnl so we don't incorrectly detect stdint.h. This
368                         dnl warning is emitted for #error directives.
369                         CFLAGS="$CFLAGS -diag_error 1035"
370                         dnl 1209: Controlling expression is constant
371                         dnl 1174: Function foo declared but never referenced
372                         dnl 3201: Parameter foo was never referenced
373                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
374                 fi
375         ;;
376 esac
378 DYNEXP=
379 AC_SUBST(DYNEXP)
380 LDSHFLAGS_Z_DEFS=
381 AC_SUBST(LDSHFLAGS_Z_DEFS)
382 LDSHFLAGS_Z_NODEFS=
383 AC_SUBST(LDSHFLAGS_Z_NODEFS)
385 dnl Add modules that have to be built by default here
386 dnl These have to be built static:
387 default_static_modules=""
388 default_static_modules="$default_static_modules pdb_smbpasswd"
389 default_static_modules="$default_static_modules pdb_tdbsam"
390 default_static_modules="$default_static_modules pdb_wbc_sam"
391 default_static_modules="$default_static_modules rpc_lsarpc"
392 default_static_modules="$default_static_modules rpc_samr"
393 default_static_modules="$default_static_modules rpc_winreg"
394 default_static_modules="$default_static_modules rpc_initshutdown"
395 default_static_modules="$default_static_modules rpc_dssetup"
396 default_static_modules="$default_static_modules rpc_wkssvc"
397 default_static_modules="$default_static_modules rpc_svcctl"
398 default_static_modules="$default_static_modules rpc_ntsvcs"
399 default_static_modules="$default_static_modules rpc_netlogon"
400 default_static_modules="$default_static_modules rpc_netdfs"
401 default_static_modules="$default_static_modules rpc_srvsvc"
402 default_static_modules="$default_static_modules rpc_spoolss"
403 default_static_modules="$default_static_modules rpc_eventlog"
404 default_static_modules="$default_static_modules auth_sam"
405 default_static_modules="$default_static_modules auth_unix"
406 default_static_modules="$default_static_modules auth_winbind"
407 default_static_modules="$default_static_modules auth_wbc"
408 default_static_modules="$default_static_modules auth_server"
409 default_static_modules="$default_static_modules auth_domain"
410 default_static_modules="$default_static_modules auth_builtin"
411 default_static_modules="$default_static_modules auth_netlogond"
412 default_static_modules="$default_static_modules vfs_default"
413 default_static_modules="$default_static_modules nss_info_template"
415 dnl These are preferably build shared, and static if dlopen() is not available
416 default_shared_modules=""
417 default_shared_modules="$default_shared_modules vfs_recycle"
418 default_shared_modules="$default_shared_modules vfs_audit"
419 default_shared_modules="$default_shared_modules vfs_extd_audit"
420 default_shared_modules="$default_shared_modules vfs_full_audit"
421 default_shared_modules="$default_shared_modules vfs_netatalk"
422 default_shared_modules="$default_shared_modules vfs_fake_perms"
423 default_shared_modules="$default_shared_modules vfs_default_quota"
424 default_shared_modules="$default_shared_modules vfs_readonly"
425 default_shared_modules="$default_shared_modules vfs_cap"
426 default_shared_modules="$default_shared_modules vfs_expand_msdfs"
427 default_shared_modules="$default_shared_modules vfs_shadow_copy"
428 default_shared_modules="$default_shared_modules vfs_shadow_copy2"
429 default_shared_modules="$default_shared_modules charset_CP850"
430 default_shared_modules="$default_shared_modules charset_CP437"
431 default_shared_modules="$default_shared_modules auth_script"
432 default_shared_modules="$default_shared_modules vfs_readahead"
433 default_shared_modules="$default_shared_modules vfs_xattr_tdb"
434 default_shared_modules="$default_shared_modules vfs_streams_xattr"
435 default_shared_modules="$default_shared_modules vfs_streams_depot"
436 default_shared_modules="$default_shared_modules vfs_acl_xattr"
437 default_shared_modules="$default_shared_modules vfs_acl_tdb"
438 default_shared_modules="$default_shared_modules vfs_smb_traffic_analyzer"
439 default_shared_modules="$default_shared_modules vfs_preopen"
440 default_shared_modules="$default_shared_modules vfs_catia"
442 if test "x$developer" = xyes; then
443    default_static_modules="$default_static_modules rpc_rpcecho pdb_ads"
444    default_shared_modules="$default_shared_modules charset_weird perfcount_test"
448 # Config CPPFLAG settings for strange OS's that must be set
449 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
450 # case statement; its first reference must be unconditional.
452 case "$host_os" in
453     *hpux*)
455 # Defines needed for HPUX support.
456 # HPUX has bigcrypt but (sometimes?) doesn't use it for
457 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
459       case `uname -r` in
460                 *9*|*10*|*11)
461                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
462                 ;;
463       esac
464       ;;
467 # CRAY Unicos has broken const handling
468        *unicos*)
469           AC_MSG_RESULT([disabling const])
470           CPPFLAGS="$CPPFLAGS -Dconst="
471           ;;
472         
474 # AIX4.x doesn't even admit to having large
475 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
477     *aix4*)
478           AC_MSG_RESULT([enabling large file support])
479       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
480           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
481       ;;
483 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
484 # to the existance of large files..
485 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
486 # recommendations on large file support, however it makes the
487 # compile work using gcc 2.7 and 2.8, whereas using the Sun
488 # recommendation makes the compile fail on gcc2.7. JRA.
490 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
492         *solaris*)
493                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
494                 case `uname -r` in
495                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
496                                 AC_MSG_RESULT([no large file support])
497                                 ;;
498                         5.*)
499                         AC_MSG_RESULT([enabling large file support])
500                         if test "$ac_cv_prog_gcc" = yes; then
501                                 ${CC-cc} -v >conftest.c 2>&1
502                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
503                                 rm -fr conftest.c
504                                 case "$ac_cv_gcc_compiler_version_number" in
505                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
506                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
507                                                 LDFLAGS="$LDFLAGS -lthread"
508                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
509                                                 ;;
510                                         *)
511                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
512                                                 LDFLAGS="$LDFLAGS -lthread"
513                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
514                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
515                                                 ;;
516                                 esac
517                         else
518                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
519                                 LDFLAGS="$LDFLAGS -lthread"
520                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
521                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
522                         fi
523                         ;;
524                 esac
525                 ;;
527 # IRIX uses SYSV printing.  Make sure to set that here
529         *irix*)
530                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
531                 ;;
532         *freebsd*|*dragonfly*)
533                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
534                 ;;
536 # VOS may need to have POSIX support and System V compatibility enabled.
538     *vos*)
539     case "$CPPFLAGS" in
540           *-D_POSIX_C_SOURCE*)
541                 ;;
542           *)
543                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
544                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
545                 ;;
546     esac
547     case "$CPPFLAGS" in
548           *-D_SYSV*|*-D_SVID_SOURCE*)
549                 ;;
550           *)
551                 CPPFLAGS="$CPPFLAGS -D_SYSV"
552                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
553     esac
554     ;;
556 # Tests needed for SINIX large file support.
558     *sysv4*)
559       if test $host = mips-sni-sysv4 ; then
560         AC_MSG_CHECKING([for LFS support])
561         old_CPPFLAGS="$CPPFLAGS"
562         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
563         AC_TRY_RUN([
564 #include <unistd.h>
565 main () {
566 #if _LFS64_LARGEFILE == 1
567 exit(0);
568 #else
569 exit(1);
570 #endif
571 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
572         CPPFLAGS="$old_CPPFLAGS"
573         if test x$SINIX_LFS_SUPPORT = xyes ; then
574           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
575                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
576           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
577           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
578           LIBS="`getconf LFS64_LIBS` $LIBS"
579         fi
580       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
581       fi
582     ;;
584 # Systems with LFS support.
586     gnu* | k*bsd*-gnu | kopensolaris*-gnu)
587         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
588         AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
589         AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
590         AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
591         ;;
593 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
595     *linux*)
596         AC_MSG_CHECKING([for LFS support])
597         old_CPPFLAGS="$CPPFLAGS"
598         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
599        AC_TRY_RUN([
600 #include <unistd.h>
601 #include <sys/utsname.h>
602 #include <string.h>
603 #include <stdlib.h>
604 main() {
605 #if _LFS64_LARGEFILE == 1
606        struct utsname uts;
607        char *release;
608        int major, minor;
610        /* Ensure this is glibc 2.2 or higher */
611 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
612        int libc_major = __GLIBC__;
613        int libc_minor = __GLIBC_MINOR__;
615        if (libc_major < 2)
616               exit(1);
617        if (libc_minor < 2)
618               exit(1);
619 #endif
621        /* Ensure this is kernel 2.4 or higher */
623        uname(&uts);
624        release = strdup(uts.release);
625        major = atoi(strsep(&release, "."));
626        minor = atoi(strsep(&release, "."));
628        if (major > 2 || (major == 2 && minor > 3))
629                exit(0);
630        exit(1);
631 #else
632        exit(1);
633 #endif
635 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
636         CPPFLAGS="$old_CPPFLAGS"
637         if test x$LINUX_LFS_SUPPORT = xyes ; then
638                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
639                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
640                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
641                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
642         fi
643         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
644         ;;
647 # MacOS X is the *only* system that uses compose character in utf8. This
648 # is so horribly broken....
650     *darwin*)
651         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
653 # Add a system specific charset module.
654         default_shared_modules="$default_shared_modules charset_macosxfs"
656         ;;
657     *hurd*)
658         AC_MSG_CHECKING([for LFS support])
659         old_CPPFLAGS="$CPPFLAGS"
660         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
661         AC_TRY_RUN([
662 #include <unistd.h>
663 main () {
664 #if _LFS64_LARGEFILE == 1
665 exit(0);
666 #else
667 exit(1);
668 #endif
669 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
670         CPPFLAGS="$old_CPPFLAGS"
671         if test x$GLIBC_LFS_SUPPORT = xyes ; then
672           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
673                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
674           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
675         fi
676       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
677     ;;
678     *qnx*)
679         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
680         AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
681         ;;
683 esac
685 SAVE_CPPFLAGS="${CPPFLAGS}"
686 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
688 AC_LIBREPLACE_BROKEN_CHECKS
689 AC_CHECK_FUNCS([syslog],[],[AC_MSG_ERROR([Required function not found])])
690 AC_LIBREPLACE_NETWORK_CHECKS
692 CPPFLAGS="${SAVE_CPPFLAGS}"
694 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
696 LIBREPLACE_OBJS="${LIBREPLACEOBJ}"
697 AC_SUBST(LIBREPLACE_OBJS)
699 LIBREPLACE_LIBS="${LIBREPLACE_NETWORK_LIBS}"
700 AC_SUBST(LIBREPLACE_LIBS)
703 # add -ldl to the global LIBS
704 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
705 AUTH_LIBS="${AUTH_LIBS} ${CRYPT_LIBS}"
708 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
709 AC_CHECK_HEADERS(unistd.h grp.h sys/id.h memory.h alloca.h)
710 AC_CHECK_HEADERS(limits.h float.h pthread.h libintl.h)
711 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
712 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h sys/sysctl.h)
713 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
714 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
715 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
716 AC_CHECK_HEADERS(sys/sysmacros.h)
717 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
718 AC_CHECK_HEADERS(langinfo.h locale.h)
719 AC_CHECK_HEADERS(xfs/libxfs.h)
720 AC_CHECK_HEADERS(netgroup.h)
722 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
723 #if HAVE_RPC_RPC_H
724 #include <rpc/rpc.h>
725 #endif
728 ## These fail to compile on IRIX so just check for their presence
729 AC_CHECK_HEADERS(sys/mode.h,,,)
731 # Look for Darwin headers
732 old_CPPFLAGS="$CPPFLAGS"
733 CPPFLAGS="-Iinclude $CPPFLAGS"
734 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
735 CPPFLAGS="$old_CPPFLAGS"
737 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
738 # subdirectory of headers.
739 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
742 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
743 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
745 case "$host_os" in
746     *hpux*)
747                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
748                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
749                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
750                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
751                 fi
752         ;;
753 esac
754 AC_CHECK_HEADERS(shadow.h)
755 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
756 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
758 AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
759 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
761 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
763 # For experimental utmp support (lastlog on some BSD-like systems)
764 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
766 AC_CHECK_SIZEOF(int,cross)
767 AC_CHECK_SIZEOF(long,cross)
768 AC_CHECK_SIZEOF(long long,cross)
769 AC_CHECK_SIZEOF(short,cross)
771 AC_C_CONST
772 AC_C_INLINE
773 AC_C_BIGENDIAN
774 AC_C_CHAR_UNSIGNED
776 AC_TYPE_SIGNAL
777 AC_TYPE_UID_T
778 AC_TYPE_MODE_T
779 AC_TYPE_OFF_T
780 AC_TYPE_SIZE_T
781 AC_TYPE_PID_T
782 AC_STRUCT_ST_RDEV
783 AC_DIRENT_D_OFF
784 AC_CHECK_TYPE(ssize_t, int)
785 AC_CHECK_TYPE(wchar_t, unsigned short)
787 ############################################
788 # for cups support we need libcups, and a handful of header files
790 AC_ARG_ENABLE(cups,
791 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
793 if test x$enable_cups != xno; then
794         AC_PATH_PROG(CUPS_CONFIG, cups-config)
796         if test "x$CUPS_CONFIG" != x; then
798                 ac_save_CFLAGS=$CFLAGS
799                 ac_save_LDFLAGS=$LDFLAGS
800                 ac_save_PRINT_LIBS=$PRINT_LIBS
801                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
802                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
803                 PRINT_LIBS="$PRINT_LIBS -lcups"
804                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
805                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
806                         x"$ac_cv_header_cups_language_h" = xyes; then
807                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
808                         samba_cv_HAVE_CUPS=yes
809                         AC_CHECK_LIB_EXT(cups, PRINT_LIBS, httpConnectEncrypt)
810                 else
811                         AC_MSG_WARN([cups-config around but cups-devel not installed])
812                         CFLAGS=$ac_save_CFLAGS
813                         LDFLAGS=$ac_save_LDFLAGS
814                         PRINT_LIBS=$ac_save_PRINT_LIBS
815                 fi
817         elif test x"$enable_cups" = x"yes"; then
818                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
819         fi
822 AC_ARG_ENABLE(iprint,
823 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
825 if test x$enable_iprint != xno; then
826         if test x"$samba_cv_HAVE_CUPS" = xyes; then
827                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
828         elif test x"$enable_iprint" = x"yes"; then
829                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
830         fi
833 ############################################
834 # check if the compiler will optimize out function calls
835 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
836     AC_TRY_LINK([
837 #include <stdio.h>],
839                 if (0) {
840                    this_function_does_not_exist();
841                 } else {
842                   return 1;
843                 }
846         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
847 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
848    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
851 #############################################
852 # check for fd passing struct via msg_control
853 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
854     AC_TRY_COMPILE([
855 #include <sys/types.h>
856 #include <stdlib.h>
857 #include <stddef.h>
858 #include <sys/socket.h>
859 #include <sys/un.h>],
861         struct msghdr msg;
862         union {
863               struct cmsghdr cm;
864               char control[CMSG_SPACE(sizeof(int))];
865         } control_un;
866         msg.msg_control = control_un.control;
867         msg.msg_controllen = sizeof(control_un.control);
869         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
870 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
871    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
872              [If we can use msg_control for passing file descriptors])
875 #############################################
876 # check for fd passing struct via msg_acctrights
877 AC_CACHE_CHECK([for fd passing via msg_acctrights],
878                 samba_cv_msghdr_msg_acctrights, [
879     AC_TRY_COMPILE([
880 #include <sys/types.h>
881 #include <stdlib.h>
882 #include <stddef.h>
883 #include <sys/socket.h>
884 #include <sys/un.h>],
886         struct msghdr msg;
887         int fd;
888         msg.msg_acctrights = (caddr_t) &fd;
889         msg.msg_acctrightslen = sizeof(fd);
891         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
892 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
893    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
894              [If we can use msg_acctrights for passing file descriptors])
897 AC_CHECK_FUNCS(dirfd)
898 if test x"$ac_cv_func_dirfd" = x"yes"; then
899         default_shared_modules="$default_shared_modules vfs_syncops vfs_dirsort"
902 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
903     AC_TRY_COMPILE([
904 #include <sys/types.h>
905 #if STDC_HEADERS
906 #include <stdlib.h>
907 #include <stddef.h>
908 #endif
909 #include <signal.h>],[struct sigevent s;],
910         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
911 if test x"$samba_cv_struct_sigevent" = x"yes"; then
912    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
913    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
914         [#include <signal.h>])
917 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
918     AC_TRY_COMPILE([
919 #include <sys/types.h>
920 #if STDC_HEADERS
921 #include <stdlib.h>
922 #include <stddef.h>
923 #endif
924 #if TIME_WITH_SYS_TIME
925 # include <sys/time.h>
926 # include <time.h>
927 #else
928 # if HAVE_SYS_TIME_H
929 #  include <sys/time.h>
930 # else
931 #  include <time.h>
932 # endif
933 #endif
934 ],[struct timespec ts;],
935         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
936 if test x"$samba_cv_struct_timespec" = x"yes"; then
937    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
940 # and glibc has setresuid under linux but the function does
941 # nothing until kernel 2.1.44! very dumb.
942 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
943     AC_TRY_RUN([#include <errno.h>
944 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
945         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
946 if test x"$samba_cv_have_setresuid" = x"yes"; then
947     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
950 # Do the same check for setresguid...
952 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
953     AC_TRY_RUN([#include <unistd.h>
954 #include <errno.h>
955 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
956         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
957 if test x"$samba_cv_have_setresgid" = x"yes"; then
958     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
961 AC_FUNC_MEMCMP
963 ###############################################
964 # Readline included by default unless explicitly asked not to
965 test "${with_readline+set}" != "set" && with_readline=yes
967 # test for where we get readline() from
968 AC_MSG_CHECKING(whether to use readline)
969 AC_ARG_WITH(readline,
970 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
971 [  case "$with_readline" in
972   yes)
973     AC_MSG_RESULT(yes)
975     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
976     AC_CHECK_HEADERS(readline/history.h)
978     AC_CHECK_HEADERS(readline.h readline/readline.h,[
979       for termlib in ncurses curses termcap terminfo termlib tinfo; do
980        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
981       done
982       AC_CHECK_LIB(readline, rl_callback_handler_install,
983        [TERMLIBS="-lreadline $TERMLIBS"
984        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
985        break], [TERMLIBS=], $TERMLIBS)])
986     ;;
987   no)
988     AC_MSG_RESULT(no)
989     ;;
990   *)
991     AC_MSG_RESULT(yes)
993     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
994     # alternate readline path
995     _ldflags=${LDFLAGS}
996     _cppflags=${CPPFLAGS}
998     # Add additional search path
999     LDFLAGS="-L$with_readline/lib $LDFLAGS"
1000     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1002     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1003     AC_CHECK_HEADERS(readline/history.h)
1005     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1006       for termlib in ncurses curses termcap terminfo termlib; do
1007        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1008       done
1009       AC_CHECK_LIB(readline, rl_callback_handler_install,
1010        [TERMLDFLAGS="-L$with_readline/lib"
1011        TERMCPPFLAGS="-I$with_readline/include"
1012        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1013        TERMLIBS="-lreadline $TERMLIBS"
1014        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1015        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
1017     LDFLAGS=$_ldflags
1018     ;;
1019   esac],
1020   AC_MSG_RESULT(no)
1022 AC_SUBST(TERMLIBS)
1023 AC_SUBST(TERMLDFLAGS)
1025 # The readline API changed slightly from readline3 to readline4, so
1026 # code will generate warnings on one of them unless we have a few
1027 # special cases.
1028 AC_CHECK_LIB(readline, rl_completion_matches,
1029              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
1030                         [Do we have rl_completion_matches?])],
1031              [],
1032              [$TERMLIBS])
1034 # not all readline libs have rl_event_hook or history_list
1035 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1036 AC_CHECK_LIB(readline, history_list,
1037              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1038              [],
1039              [$TERMLIBS])
1041 ###############################################
1042 # test for where we get yp_get_default_domain() from
1043 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1044 AC_CHECK_FUNCS(yp_get_default_domain)
1046 # Check if we have execl, if not we need to compile smbrun.
1047 AC_CHECK_FUNCS(execl)
1048 if test x"$ac_cv_func_execl" = x"no"; then
1049     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1052 AC_CHECK_FUNCS(getcwd fchown chmod fchmod mknod mknod64)
1053 AC_CHECK_FUNCS(strtol)
1054 AC_CHECK_FUNCS(strchr chflags)
1055 AC_CHECK_FUNCS(getrlimit fsync fdatasync setpgid)
1056 AC_CHECK_FUNCS(setsid glob strpbrk crypt16 getauthuid)
1057 AC_CHECK_FUNCS(sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1058 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf)
1059 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf stat64 fstat64)
1060 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt lseek64 ftruncate64)
1061 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam)
1062 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1063 AC_CHECK_FUNCS(getpwent_r)
1064 AC_CHECK_FUNCS(getdents64)
1065 AC_CHECK_FUNCS(setenv strcasecmp fcvt fcvtl)
1066 AC_CHECK_FUNCS(syslog vsyslog timegm)
1067 AC_CHECK_FUNCS(setlocale nl_langinfo)
1068 AC_CHECK_FUNCS(nanosleep,,[AC_CHECK_LIB_EXT(rt, LIBS, nanosleep)])
1069 AC_CHECK_FUNCS(utimensat)
1070 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1071 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1072 AC_CHECK_HEADERS(sys/mman.h)
1073 # setbuffer, shmget, shm_open are needed for smbtorture
1074 AC_CHECK_FUNCS(shmget shm_open)
1075 AC_CHECK_FUNCS(gettext dgettext)
1076 AC_CHECK_FUNCS(bindtextdomain textdomain)
1077 AC_CHECK_FUNCS(strupr)
1079 # Find a method of generating a stack trace
1080 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1081 # libexecinfo provides backtrace_symbols on FreeBSD
1082 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
1083 AC_CHECK_FUNCS(backtrace_symbols)
1084 AC_CHECK_LIB(exc, trace_back_stack)
1086 # check for sysctlbyname for BSD systems
1087 AC_CHECK_FUNCS(sysctlbyname)
1089 #############################
1090 # check if building with gpfs
1091 AC_CHECK_HEADERS(gpfs_gpl.h)
1092 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
1093     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL headers are available])
1094     default_shared_modules="$default_shared_modules vfs_gpfs"
1097 #############################################
1098 # check if building on Isilon OneFS
1099 printf "%s" "checking for Isilon OneFS... "
1100 save_LIBS="$LIBS"
1101 LIBS="$LIBS -lisi_version"
1102 AC_TRY_LINK([#include <isi_version/isi_version.h>],
1103           [get_isilon_copyright()],
1104           samba_cv_HAVE_ONEFS=yes,
1105           samba_cv_HAVE_ONEFS=no)
1106 echo $samba_cv_HAVE_ONEFS
1107 if test x"$samba_cv_HAVE_ONEFS" = x"yes"; then
1108     AC_DEFINE(HAVE_ONEFS,1,[Whether building on Isilon OneFS])
1109     default_shared_modules="$default_shared_modules vfs_onefs vfs_onefs_shadow_copy perfcount_onefs"
1110     default_static_modules="$default_static_modules"
1111     ONEFS_LIBS="-lisi_acl -lisi_ecs -lisi_event -lisi_util"
1112     # Need to also add general libs for oplocks support
1113     save_LIBS="$save_LIBS -lisi_ecs -lisi_event -lisi_util -ldevstat"
1115 AC_SUBST(ONEFS_LIBS)
1116 LIBS="$save_LIBS"
1118 # Note that all the libunwind symbols in the API are defined to internal
1119 # platform-specific version, so we must include libunwind.h before checking
1120 # any of them.
1121 AC_MSG_CHECKING([for libunwind])
1122 save_LIBS=$LIBS
1124 UNWIND_ARCH="unknown"
1125 if test x"$UNAME_I" != x"unknown"; then
1126         UNWIND_ARCH="$UNAME_I"
1127 elif test x"$UNAME_M" != x"unknown"; then
1128         UNWIND_ARCH="$UNAME_M"
1129 elif test x"$UNAME_P" != x"unknown"; then
1130         UNWIND_ARCH="$UNAME_P"
1133 case "$UNWIND_ARCH" in
1134         unknown)
1135                 # This probably won't link without
1136                 # the platform-specific libunwind.
1137                 LIBS="$LIBS -lunwind"
1138                 ;;
1139         i386|i586|i686)
1140                 # Add the platform-specific libunwind module.
1141                 LIBS="$LIBS -lunwind -lunwind-x86"
1142                 ;;
1143         *)
1144                 # Add the platform-specific libunwind module.
1145                 # based on uname -i, uname -m or uname -p
1146                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1147                 ;;
1148 esac
1150 AC_TRY_LINK(
1151     [
1152 #ifdef HAVE_LIBUNWIND_H
1153 #include <libunwind.h>
1154 #endif
1155     ],
1156     [
1157         unw_context_t ctx; unw_cursor_t cur;
1158         char buf[256]; unw_word_t off;
1159         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1160         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1161     ],
1162     [
1163         AC_MSG_RESULT(yes)
1164         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1166         # If we have libunwind, test whether we also have libunwind-ptrace
1167         # which would let us unwind arbitrary processes.
1168         save_LIBS=$LIBS
1169         AC_CHECK_HEADERS(libunwind-ptrace.h)
1170         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1171             [
1172                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1173                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1174                     [Whether libunwind-ptrace.a is available.])
1175             ],
1176             [ LIBUNWIND_PTRACE="" ])
1178         LIBS=$save_LIBS
1179     ],
1180     [
1181         AC_MSG_RESULT(no)
1182         LIBS=$save_LIBS
1183     ])
1185 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1186 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1187     AC_CHECK_HEADERS(sys/ptrace.h)
1188     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1189     AC_TRY_LINK(
1190             [
1191 #if HAVE_SYS_TYPES_H
1192 #include <sys/types.h>
1193 #endif
1194 #if HAVE_SYS_PTRACE_H
1195 #include <sys/ptrace.h>
1196 #endif
1197             ],
1198             [
1199                 pid_t me = (pid_t)-1;
1200                 ptrace(PTRACE_ATTACH, me, 0, 0);
1201                 ptrace(PTRACE_DETACH, me, 0, 0);
1202                 return 0;
1203             ],
1204             [
1205                 AC_MSG_RESULT(yes)
1206                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1207                     [Whether the Linux ptrace(2) interface is available.])
1208             ],
1209             [
1210                 AC_MSG_RESULT(no)
1211                 LIBUNWIND_PTRACE=""
1212             ])
1215 AC_SUBST(LIBUNWIND_PTRACE)
1217 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1218 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1219 AC_CHECK_FUNCS(__getcwd _getcwd)
1220 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1221 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1222 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1223 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1224 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1225 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1226 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1227 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1228 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1229 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1230 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1231 AC_CHECK_FUNCS(prctl)
1233 AC_TRY_COMPILE([
1234 #ifdef HAVE_SYS_PRCTL_H
1235 #include <sys/prctl.h>
1236 #endif
1238 [int i; i = prtcl(0); ],
1239 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1244 case "$host_os" in
1245     *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1246        # glibc <= 2.3.2 has a broken getgrouplist
1247        AC_TRY_RUN([
1248 #include <unistd.h>
1249 #include <sys/utsname.h>
1250 main() {
1251        /* glibc up to 2.3 has a broken getgrouplist */
1252 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1253        int libc_major = __GLIBC__;
1254        int libc_minor = __GLIBC_MINOR__;
1256        if (libc_major < 2)
1257               exit(1);
1258        if ((libc_major == 2) && (libc_minor <= 3))
1259               exit(1);
1260 #endif
1261        exit(0);
1263 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1264        if test x"$linux_getgrouplist_ok" = x"yes"; then
1265           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1266        fi
1267        ;;
1268     *)
1269        AC_CHECK_FUNCS(getgrouplist)
1270        ;;
1271 esac
1274 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1277 if test x$ac_cv_func_stat64 = xno ; then
1278   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1279   AC_TRY_LINK([
1280 #if defined(HAVE_UNISTD_H)
1281 #include <unistd.h>
1282 #endif
1283 #include <sys/stat.h>
1284 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1285   AC_MSG_RESULT([$ac_cv_func_stat64])
1286   if test x$ac_cv_func_stat64 = xyes ; then
1287     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1288   fi
1291 if test x$ac_cv_func_lstat64 = xno ; then
1292   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1293   AC_TRY_LINK([
1294 #if defined(HAVE_UNISTD_H)
1295 #include <unistd.h>
1296 #endif
1297 #include <sys/stat.h>
1298 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1299   AC_MSG_RESULT([$ac_cv_func_lstat64])
1300   if test x$ac_cv_func_lstat64 = xyes ; then
1301     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1302   fi
1305 if test x$ac_cv_func_fstat64 = xno ; then
1306   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1307   AC_TRY_LINK([
1308 #if defined(HAVE_UNISTD_H)
1309 #include <unistd.h>
1310 #endif
1311 #include <sys/stat.h>
1312 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1313   AC_MSG_RESULT([$ac_cv_func_fstat64])
1314   if test x$ac_cv_func_fstat64 = xyes ; then
1315     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1316   fi
1319 #################################################
1320 # Check whether struct stat has timestamps with sub-second resolution.
1323 samba_cv_stat_hires=no
1324 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec], # Linux, Solaris
1325         [samba_cv_stat_hires=yes])
1326 AC_CHECK_MEMBERS([struct stat.st_mtimensec], # BSD, if defined _POSIX_SOURCE
1327         [samba_cv_stat_hires=yes])
1328 AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec], # BSD, if not defined _POSIX_SOURCE
1329         [samba_cv_stat_hires=yes])
1330 AC_CHECK_MEMBERS([struct stat.st_mtime_n], # AIX
1331         [samba_cv_stat_hires=yes])
1332 AC_CHECK_MEMBERS([struct stat.st_umtime], # Tru64
1333         [samba_cv_stat_hires=yes])
1335 if test x"$samba_cv_stat_hires" = x"yes" ; then
1336     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1337             [whether struct stat has sub-second timestamps])
1340 # recent FreeBSD, NetBSD have creation timestamps called birthtime:
1341 AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec])
1342 AC_CHECK_MEMBERS([struct stat.st_birthtime], AC_CHECK_MEMBERS([struct stat.st_birthtimensec]))
1345 AC_CACHE_CHECK([whether there is DOS flags support in the stat struct], samba_cv_stat_dos_flags,
1346     [
1347         AC_TRY_COMPILE(
1348             [#include <sys/stat.h>],
1349             [
1350                 int a = UF_DOS_ARCHIVE;
1351                 int h = UF_DOS_HIDDEN;
1352                 int r = UF_DOS_RO;
1353                 int s = UF_DOS_SYSTEM;
1354                 int i = UF_DOS_NOINDEX;
1355                 int f = UF_DOS_FLAGS;
1356             ],
1357             samba_cv_stat_dos_flags=yes, samba_cv_stat_dos_flags=no)
1358     ])
1360 if test x"$samba_cv_stat_dos_flags" = x"yes" ; then
1361     AC_DEFINE(HAVE_STAT_DOS_FLAGS, 1, [whether there is DOS flags support in the stat struct])
1364 #####################################
1365 # needed for SRV lookups
1366 AC_CHECK_LIB(resolv, dn_expand)
1367 AC_CHECK_LIB(resolv, _dn_expand)
1368 AC_CHECK_LIB(resolv, __dn_expand)
1371 # Check for the functions putprpwnam, set_auth_parameters,
1372 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1373 # Needed for OSF1 and HPUX.
1376 AC_LIBTESTFUNC(security, putprpwnam)
1377 AC_LIBTESTFUNC(sec, putprpwnam)
1379 AC_LIBTESTFUNC(security, set_auth_parameters)
1380 AC_LIBTESTFUNC(sec, set_auth_parameters)
1382 # UnixWare 7.x has its getspnam in -lgen
1383 AC_LIBTESTFUNC(gen, getspnam)
1385 AC_LIBTESTFUNC(security, getspnam)
1386 AC_LIBTESTFUNC(sec, getspnam)
1388 AC_LIBTESTFUNC(security, bigcrypt)
1389 AC_LIBTESTFUNC(sec, bigcrypt)
1391 AC_LIBTESTFUNC(security, getprpwnam)
1392 AC_LIBTESTFUNC(sec, getprpwnam)
1394 AC_CHECK_FUNCS(strsignal)
1396 ############################################
1397 # Check if we have libattr
1398 case "$host_os" in
1399   *osf*)
1400         AC_SEARCH_LIBS(getproplist, [proplist])
1401         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1402         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1403         AC_CHECK_FUNCS(sizeof_proplist_entry)
1404   ;;
1405   *)
1406         AC_SEARCH_LIBS(getxattr, [attr])
1407         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1408         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1409         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1410         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1411         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1412         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1413         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1414   ;;
1415 esac
1417 ########################################################
1418 # Check if attropen() is present if this is Solaris
1419 case "$host_os" in
1420   *solaris*)
1421         AC_CHECK_FUNCS(attropen)
1422   ;;
1423 esac
1425 ########################################################
1426 # Do xattr functions take additional options like on Darwin?
1427 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1428         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1429                 old_LIBS=$LIBS
1430                 LIBS="$LIBS $ACL_LIBS"
1431                 AC_TRY_COMPILE([
1432                         #include <sys/types.h>
1433                         #if HAVE_ATTR_XATTR_H
1434                         #include <attr/xattr.h>
1435                         #elif HAVE_SYS_XATTR_H
1436                         #include <sys/xattr.h>
1437                         #endif
1438                 ],[
1439                         getxattr(0, 0, 0, 0, 0, 0);
1440                 ],
1441                 [smb_attr_cv_xattr_add_opt=yes],
1442                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1443         ])
1444         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1445                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1446         fi
1449 # Check if we have extattr
1450 case "$host_os" in
1451   *freebsd4* | *dragonfly* )
1452     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1453     ;;
1454   *)
1455     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1456     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1457     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1458     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1459     ;;
1460 esac
1462 AC_DISABLE_STATIC
1463 AC_ENABLE_SHARED
1465 # Set defaults
1466 PIE_CFLAGS=""
1467 PIE_LDFLAGS=""
1468 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1470 if test "x$enable_pie" != xno
1471 then
1472         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1473         [
1474                 cat > conftest.c <<EOF
1475 int foo;
1476 main () { return 0;}
1478                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1479                 then
1480                         samba_cv_fpie=yes
1481                 else
1482                         samba_cv_fpie=no
1483                 fi
1484                 rm -f conftest*
1485         ])
1486         if test x"${samba_cv_fpie}" = x"yes"
1487         then
1488                 PIE_CFLAGS="-fPIE"
1489                 PIE_LDFLAGS="-pie"
1490         fi
1493 # Set defaults
1494 RELRO_LDFLAGS=""
1495 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1497 if test "x$enable_relro" != xno
1498 then
1499         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1500         [
1501                 cat > conftest.c <<EOF
1502 int foo;
1503 main () { return 0;}
1505                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1506                 then
1507                         samba_cv_relro=yes
1508                 else
1509                         samba_cv_relro=no
1510                 fi
1511                 rm -f conftest*
1512         ])
1513         if test x"${samba_cv_relro}" = x"yes"
1514         then
1515                 RELRO_LDFLAGS="-Wl,-z,relro"
1516         fi
1519 # Set defaults
1520 SYMSEXT="syms"
1521 AC_SUBST(SYMSEXT)
1523 # Assume non-shared by default and override below
1524 BLDSHARED="false"
1526 # these are the defaults, good for lots of systems
1527 HOST_OS="$host_os"
1528 LDSHFLAGS="-shared"
1529 MODULE_EXPORTS=""
1530 SONAMEFLAG="#"
1531 SHLD="\${CC} \${CFLAGS}"
1532 PICFLAG="${PIE_CFLAGS}"
1533 SHLIBEXT="so"
1534 DSO_EXPORTS=""
1536 # this bit needs to be modified for each OS that supports share libs
1537 # You need to specify how to create a shared library and
1538   # how to compile C code to produce PIC object files
1540   AC_MSG_CHECKING([ability to build shared libraries])
1542   # and these are for particular systems
1543   case "$host_os" in
1544                 *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1545                         case "$host_os" in *linux*)
1546                                 AC_DEFINE(LINUX,1,[Whether the host os is linux]) ;;
1547                         esac
1548                         BLDSHARED="true"
1549                         LDSHFLAGS="-shared -Wl,-Bsymbolic"
1550                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1551                                 LDSHFLAGS_Z_NODEFS="-Wl,--allow-shlib-undefined"
1552                         fi
1553                         DYNEXP="-Wl,--export-dynamic"
1554                         PICFLAG="-fPIC"
1555                         SONAMEFLAG="-Wl,-soname="
1556                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1557                         ;;
1558                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1559                         BLDSHARED="true"
1560                         LDSHFLAGS="-G"
1561                         SONAMEFLAG="-h "
1562                         if test "${GCC}" = "yes"; then
1563                                 PICFLAG="-fPIC"
1564                                 SONAMEFLAG="-Wl,-soname="
1565                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1566                                         DYNEXP="-Wl,-E"
1567                                 fi
1568                         else
1569                                 PICFLAG="-KPIC"
1570                                 ## ${CFLAGS} added for building 64-bit shared
1571                                 ## libs using Sun's Compiler
1572                                 LDSHFLAGS="-G \${CFLAGS}"
1573                         fi
1574                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1575                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1576                         ;;
1577                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1578                         BLDSHARED="true"
1579                         LDSHFLAGS="-G"
1580                         SONAMEFLAG="-Wl,-h,"
1581                         PICFLAG="-KPIC"   # Is this correct for SunOS
1582                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1583                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1584                         ;;
1585                 *netbsd* | *freebsd* | *dragonfly* )
1586                         BLDSHARED="true"
1587                         LDSHFLAGS="-shared"
1588                         DYNEXP="-Wl,--export-dynamic"
1589                         SONAMEFLAG="-Wl,-soname,"
1590                         PICFLAG="-fPIC -DPIC"
1591                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1592                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1593                         ;;
1594                 *openbsd*)  BLDSHARED="true"
1595                         LDSHFLAGS="-shared"
1596                         DYNEXP="-Wl,-Bdynamic"
1597                         SONAMEFLAG="-Wl,-soname,"
1598                         PICFLAG="-fPIC"
1599                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1600                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1601                         ;;
1602                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1603                         case "$host_os" in
1604                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1605                         ;;
1606                         esac
1607                         BLDSHARED="true"
1608                         LDSHFLAGS="-set_version sgi1.0 -shared"
1609                         SONAMEFLAG="-soname "
1610                         SHLD="\${LD}"
1611                         if test "${GCC}" = "yes"; then
1612                                 PICFLAG="-fPIC"
1613                         else
1614                                 PICFLAG="-KPIC"
1615                         fi
1616                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1617                         ;;
1618                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1619                         BLDSHARED="true"
1620                         # use expfull to export underscored symbols
1621                         # add rtl to remove /lib/crt0.o warning
1622                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1623                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1624                         PICFLAG="-O2"
1625                         # as AIX code is always position independent...
1626                         # .po will just create compile warnings, use po.o:
1627                         if test "${GCC}" != "yes"; then
1628                                 ## for funky AIX compiler using strncpy()
1629                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1630                         fi
1632                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1633                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1634                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1635                         ;;
1636                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1637                         # Use special PIC flags for the native HP-UX compiler.
1638                                 BLDSHARED="true"
1639                                 SHLD="cc"
1640                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1641                                 SONAMEFLAG="-Wl,+h "
1642                                 PICFLAG="+z"
1643                         if test "${GCC}" = "yes"; then
1644                                 PICFLAG="-fPIC"
1645                         else
1646                                 PICFLAG="+z +ESnolit"
1647                         fi
1648                         if test "$host_cpu" = "ia64"; then
1649                                 SHLIBEXT="so"
1650                               PICFLAG="+z"
1651                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1652                         else
1653                                 SHLIBEXT="sl"
1654                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1655                         fi
1656                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1657                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1658                         ;;
1659                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1660                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1661                         ;;
1662                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1663                         BLDSHARED="true"
1664                         LDSHFLAGS="-shared"
1665                         SONAMEFLAG="-Wl,-soname,"
1666                         PICFLAG="-fPIC"
1667                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1668                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1669                         ;;
1670                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1671                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1672                         ;;
1673                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1674                         BLDSHARED="true"
1675                         LDSHFLAGS="-shared"
1676                         SONAMEFLAG="-Wl,-soname,"
1677                         PICFLAG="-KPIC"
1678                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1679                         ;;
1680                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1681                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1682                         ;;
1683                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1684                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1685                         ;;
1686                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1687                         case "$host" in
1688                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1689                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1690                                         fi
1691                                         LDSHFLAGS="-G"
1692                                         DYNEXP="-Bexport"
1693                                 ;;
1694                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1695                         esac
1696                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1697                         ;;
1699                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1700                         if [ test "$GCC" != yes ]; then
1701                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1702                         fi
1703                         LDSHFLAGS="-G"
1704                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1705                         ;;
1706                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1707                         BLDSHARED="false"
1708                         LDSHFLAGS=""
1709                         ;;
1711                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1712                         BLDSHARED="true"
1713                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1714                         CFLAGS="$CFLAGS -fno-common"
1715                         SHLD="\${CC}"
1716                         SHLIBEXT="dylib"
1717                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1718                         SHLIBEXT="dylib"
1719                         # Since gcc doesn't fail on unrecognised options, the
1720                         # PIE test incorrectly succeeds. Darwin gcc does not
1721                         # actually support the PIE stuff.
1722                         PIE_LDFLAGS=
1723                         PIE_CFLAGS=
1724                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1725                         ;;
1727                 *)
1728                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1729                         ;;
1730   esac
1732 if test "$enable_shared" != "yes"; then
1733         BLDSHARED=false
1736 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1737         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1740 if test x"$BLDSHARED" = x"true" ; then
1741         LDFLAGS="$LDFLAGS -L./bin"
1744 AC_MSG_RESULT($BLDSHARED)
1746 for flags in "-Wl,--as-needed" "-Wl,-z,ignore" "-z ignore" ; do
1747         saved_ldflags="$LDFLAGS"
1748         AC_MSG_CHECKING([if $flags works])
1749         LDFLAGS="$flags $saved_ldflags"
1750         AC_TRY_LINK([],[],
1751                 [AC_MSG_RESULT([yes])
1752                 LD_AS_NEEDED_FLAG=$flags
1753                 ld_as_needed_flag_found=yes],
1754                 AC_MSG_RESULT([no]))
1755         LDFLAGS="$LD_AS_NEEDED_FLAG $saved_ldflags"
1756         test x"$ld_as_needed_flag_found" = xyes && break
1757 done
1759 # for historical reasons almost all linkers don't complain about unresolved
1760 # symbols in shared libs. Except for the internal samba modules we want to get
1761 # errors when we produce a shared lib with unresolved symbols. On some
1762 # platforms unresolved symbols might be intended, so we might have to add
1763 # platform specific exceptions here.
1765 for flags in "-Wl,-z,defs" "-error_unresolved" "-Wl,-error_unresolved" ; do
1766         saved_ldflags="$LDFLAGS"
1767         AC_MSG_CHECKING([if $flags works])
1768         LDFLAGS="$flags $saved_ldflags"
1769         AC_TRY_LINK([],[],
1770         [AC_MSG_RESULT([yes])
1771         LDSHFLAGS_Z_DEFS=$flags
1772         ldshflags_z_defs_found=yes],
1773         AC_MSG_RESULT([no]))
1774         LDFLAGS=$saved_ldflags
1775         test x"$ldshflags_z_defs_found" = xyes && break
1776 done
1778 AC_MSG_CHECKING([LDSHFLAGS_Z_DEFS])
1779 AC_MSG_RESULT([$LDSHFLAGS_Z_DEFS])
1780 AC_MSG_CHECKING([LDFLAGS])
1781 AC_MSG_RESULT([$LDFLAGS])
1782 AC_MSG_CHECKING([DYNEXP])
1783 AC_MSG_RESULT([$DYNEXP])
1785 #######################################################
1786 # test whether building a shared library actually works
1787 if test $BLDSHARED = true; then
1789 AC_MSG_CHECKING([SHLD])
1790 AC_MSG_RESULT([$SHLD])
1791 AC_MSG_CHECKING([LDSHFLAGS])
1792 AC_MSG_RESULT([$LDSHFLAGS])
1794 AC_MSG_CHECKING([SHLIBEXT])
1795 AC_MSG_RESULT([$SHLIBEXT])
1796 AC_MSG_CHECKING([SONAMEFLAG])
1797 AC_MSG_RESULT([$SONAMEFLAG])
1799 AC_MSG_CHECKING([PICFLAG])
1800 AC_MSG_RESULT([$PICFLAG])
1802 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1803 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1805 AC_CACHE_CHECK([whether building shared libraries actually works],
1806                [ac_cv_shlib_works],[
1807    # try building a trivial shared library
1808    ac_cv_shlib_works=no
1809    # The $SHLD and $LDSHFLAGS variables may contain references to other
1810    # variables so they need to be eval'ed.
1811    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1812         shlib.o ${srcdir-.}/../tests/shlib.c && \
1813    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1814         shlib.o && ac_cv_shlib_works=yes
1815    rm -f "shlib.$SHLIBEXT" shlib.o
1818 if test $ac_cv_shlib_works = no; then
1819    BLDSHARED=false
1823 if test x"$BLDSHARED" != x"true"; then
1824         LDSHFLAGS="shared-libraries-disabled"
1825         SONAMEFLAG="shared-libraries-disabled"
1826         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1827         SHLD="shared-libraries-disabled"
1828         PICFLAG="${PIE_CFLAGS}"
1829         SHLIBEXT="shared_libraries_disabled"
1830         merged_build_possible=no
1833 AC_MSG_CHECKING([used PICFLAG])
1834 AC_MSG_RESULT([$PICFLAG])
1836 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1838 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
1840 ################
1842 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1843 AC_TRY_RUN([#include <stdio.h>
1844 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1845 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1846 if test x"$samba_cv_have_longlong" = x"yes"; then
1847     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1848     AC_CHECK_TYPE(intptr_t, unsigned long long)
1849 else
1850     AC_CHECK_TYPE(intptr_t, unsigned long)
1854 # Check if the compiler supports the LL prefix on long long integers.
1855 # AIX needs this.
1857 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1858     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1859         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1860 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1861    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1865 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
1866 AC_TRY_RUN([#include <time.h>
1867 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
1868 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
1869 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
1870     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
1873 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1874 AC_TRY_RUN([#include <stdio.h>
1875 #include <sys/stat.h>
1876 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1877 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1878 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1879     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1882 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_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; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1890 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1891 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1892     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1895 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_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(ino_t) == 8) ? 0 : 1); }],
1903 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1904 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1905     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1908 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_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; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1916 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1917 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1918     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1921 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
1922 AC_TRY_RUN([
1923 #if defined(HAVE_UNISTD_H)
1924 #include <unistd.h>
1925 #endif
1926 #include <stdio.h>
1927 #include <sys/stat.h>
1928 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
1929 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
1930 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
1931     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
1934 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
1935 AC_TRY_RUN([
1936 #if defined(HAVE_UNISTD_H)
1937 #include <unistd.h>
1938 #endif
1939 #include <stdio.h>
1940 #include <sys/stat.h>
1941 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1942 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
1943 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
1944     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
1947 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
1948 AC_TRY_COMPILE([
1949 #if defined(HAVE_UNISTD_H)
1950 #include <unistd.h>
1951 #endif
1952 #include <sys/types.h>
1953 #include <dirent.h>],
1954 [DIR64 de;],
1955 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
1956 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1957     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
1960 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
1961 AC_TRY_COMPILE([
1962 #if defined(HAVE_UNISTD_H)
1963 #include <unistd.h>
1964 #endif
1965 #include <sys/types.h>
1966 #include <dirent.h>],
1967 [struct dirent64 de;],
1968 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
1969 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1970     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
1973 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
1974 AC_TRY_RUN([
1975 #if defined(HAVE_UNISTD_H)
1976 #include <unistd.h>
1977 #endif
1978 #include <sys/types.h>
1979 main() { dev_t dev; int i = major(dev); return 0; }],
1980 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
1981 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
1982     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
1985 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
1986 AC_TRY_RUN([
1987 #if defined(HAVE_UNISTD_H)
1988 #include <unistd.h>
1989 #endif
1990 #include <sys/types.h>
1991 main() { dev_t dev; int i = minor(dev); return 0; }],
1992 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
1993 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
1994     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
1997 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
1998 AC_TRY_RUN([
1999 #if defined(HAVE_UNISTD_H)
2000 #include <unistd.h>
2001 #endif
2002 #include <sys/types.h>
2003 main() { dev_t dev = makedev(1,2); return 0; }],
2004 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2005 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2006     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2009 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2010 AC_TRY_RUN([#include <stdio.h>
2011 main() { char c; c=250; exit((c > 0)?0:1); }],
2012 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2013 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2014     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2017 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2018 AC_TRY_COMPILE([#include <sys/types.h>
2019 #include <dirent.h>
2020 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2021 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2022 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2023     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2026 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2027 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2028 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2029 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2030     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2033 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2034 AC_TRY_LINK([
2035 #include <sys/time.h>
2036 #include <unistd.h>], [struct timeval tv; return gettimeofday(&tv, NULL);],
2037            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,
2038            samba_cv_HAVE_GETTIMEOFDAY_TZ=no)])
2039 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2040     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday takes a tz argument])
2043 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2045     # On some systems (eg. Linux) librt can pull in libpthread. We
2046     # don't want this to happen because libpthreads changes signal delivery
2047     # semantics in ways we are not prepared for. This breaks Linux oplocks
2048     # which rely on signals.
2050     AC_LIBTESTFUNC(rt, clock_gettime,
2051             [
2052                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2053                                 [Whether clock_gettime is available])
2054                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2055                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2056                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2057                         ])
2061 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2062 AC_TRY_RUN([#include <sys/types.h>
2063 #include <dirent.h>
2064 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2065 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2066 di->d_name[0] == 0) exit(0); exit(1);} ],
2067 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2068 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2069     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2072 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2073 AC_TRY_COMPILE([#include <sys/types.h>
2074 #include <utime.h>],
2075 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2076 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2077 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2078     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2081 ##############
2082 # Check utmp details, but only if our OS offers utmp.h
2083 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2084 dnl  utmp and utmpx come in many flavours
2085 dnl  We need to check for many of them
2086 dnl  But we don't need to do each and every one, because our code uses
2087 dnl  mostly just the utmp (not utmpx) fields.
2089 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2091 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2092 AC_TRY_COMPILE([#include <sys/types.h>
2093 #include <utmp.h>],
2094 [struct utmp ut;  ut.ut_name[0] = 'a';],
2095 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2096 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2097     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2100 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2101 AC_TRY_COMPILE([#include <sys/types.h>
2102 #include <utmp.h>],
2103 [struct utmp ut;  ut.ut_user[0] = 'a';],
2104 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2105 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2106     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2109 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2110 AC_TRY_COMPILE([#include <sys/types.h>
2111 #include <utmp.h>],
2112 [struct utmp ut;  ut.ut_id[0] = 'a';],
2113 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2114 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2115     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2118 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2119 AC_TRY_COMPILE([#include <sys/types.h>
2120 #include <utmp.h>],
2121 [struct utmp ut;  ut.ut_host[0] = 'a';],
2122 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2123 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2124     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2127 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2128 AC_TRY_COMPILE([#include <sys/types.h>
2129 #include <utmp.h>],
2130 [struct utmp ut;  time_t t; ut.ut_time = t;],
2131 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2132 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2133     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2136 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2137 AC_TRY_COMPILE([#include <sys/types.h>
2138 #include <utmp.h>],
2139 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2140 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2141 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2142     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2145 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2146 AC_TRY_COMPILE([#include <sys/types.h>
2147 #include <utmp.h>],
2148 [struct utmp ut;  ut.ut_type = 0;],
2149 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2150 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2151     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2154 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2155 AC_TRY_COMPILE([#include <sys/types.h>
2156 #include <utmp.h>],
2157 [struct utmp ut;  ut.ut_pid = 0;],
2158 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2159 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2160     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2163 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2164 AC_TRY_COMPILE([#include <sys/types.h>
2165 #include <utmp.h>],
2166 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2167 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2168 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2169     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2172 dnl Look for the IPv6 varient by preference. Many systems have both.
2173 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2174 AC_TRY_COMPILE([#include <sys/types.h>
2175 #include <utmp.h>],
2176 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2177 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2178 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2179     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2182 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2183 AC_TRY_COMPILE([#include <sys/types.h>
2184 #include <utmp.h>],
2185 [struct utmp ut;  ut.ut_addr = 0;],
2186 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2187 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2188     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2191 if test x$ac_cv_func_pututline = xyes ; then
2192   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2193   AC_TRY_COMPILE([#include <sys/types.h>
2194 #include <utmp.h>],
2195   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2196   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2197   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2198       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2199   fi
2202 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2203 AC_TRY_COMPILE([#include <sys/types.h>
2204 #include <utmpx.h>],
2205 [struct utmpx ux;  ux.ut_syslen = 0;],
2206 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2207 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2208     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2212 # end utmp details
2215 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2216 AC_ARG_WITH(libiconv,
2217 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2219   if test "$withval" = "no" ; then
2220     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2221   else
2222      if test "$withval" != "yes" ; then
2223         ICONV_PATH_SPEC=yes
2224         ICONV_LOOK_DIRS="$withval"
2225      fi
2226   fi
2229 for i in $ICONV_LOOK_DIRS ; do
2231     save_LIBS="$LIBS"
2232     save_LDFLAGS="$LDFLAGS"
2233     save_CPPFLAGS="$CPPFLAGS"
2235     iconv_current_LIBS=""
2236     iconv_current_LDFLAGS=""
2237     iconv_current_CPPFLAGS=""
2239     ICONV_FOUND="no"
2240     unset libext
2242     #  This is here to handle -withval stuff for --with-libiconv
2243     #  Perhaps we should always add a -L
2244     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2246     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2247     # installation paths. This gets a little tricky since we might have iconv
2248     # in both libiconv and in libc. In this case the jm_ICONV test will always
2249     # succeed when the header is found. To counter this, make sure the
2250     # library directory is there and check the ABI directory first (which
2251     # should be harmless on other systems, but causes tons of linker warnings on
2252     # 64bit Ubuntu systems).
2253     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2254     # installed, I've decided to fix the linker warnings.
2255     # -- Kai
2256     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2257     for l in "lib" "lib32" "lib/hpux32"; do
2258         if test -d "$i/$l" ; then
2259                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2260                 LIBS=
2261                 export LDFLAGS LIBS CPPFLAGS
2262                 # Try to find iconv(3)
2263                 jm_ICONV($i/$l)
2264                 if test x"$ICONV_FOUND" = "xyes" ; then
2265                     libext="$l"
2266                     break
2267                 fi
2268         fi
2269     done
2271     if test x"$ICONV_FOUND" = "xyes" ; then
2272         iconv_current_LDFLAGS="-L$i/$libext"
2273         iconv_current_CPPFLAGS="-I$i/include"
2275         if test x"$jm_cv_lib_iconv" != x; then
2276             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2277         else
2278             # We found iconv in libc.
2279             iconv_current_LIBS=""
2280         fi
2282     fi
2284     if test x"$ICONV_FOUND" = "xyes" ; then
2286         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2287         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2288         LIBS="$save_LIBS $iconv_current_LIBS"
2289         export LDFLAGS LIBS CPPFLAGS
2291         default_dos_charset=no
2292         default_display_charset=no
2293         default_unix_charset=no
2295         # check for default dos charset name
2296         for j in CP850 IBM850 ; do
2297             rjs_CHARSET($j)
2298             default_dos_charset="$ICONV_CHARSET"
2299             if test x"$default_dos_charset" = x"$j"; then
2300                 break
2301             fi
2302         done
2304         # check for default display charset name
2305         for j in ASCII 646 ; do
2306             rjs_CHARSET($j)
2307             default_display_charset="$ICONV_CHARSET"
2308             if test x"$default_display_charset" = x"$j"; then
2309                 break
2310             fi
2311         done
2313         # check for default unix charset name
2314         for j in UTF-8 UTF8 ; do
2315             rjs_CHARSET($j)
2316             default_unix_charset="$ICONV_CHARSET"
2317             if test x"$default_unix_charset" = x"$j"; then
2318                 break
2319             fi
2320         done
2322         if test "$default_dos_charset" != "no" -a \
2323                 "$default_dos_charset" != "cross" -a \
2324                 "$default_display_charset" != "no" -a \
2325                 "$default_display_charset" != "cross" -a \
2326                 "$default_unix_charset" != "no" -a \
2327                 "$default_unix_charset" != "cross"
2328         then
2329                 samba_cv_HAVE_NATIVE_ICONV=yes
2330         else
2331             if test "$default_dos_charset" = "cross" -o \
2332                      "$default_display_charset" = "cross" -o \
2333                      "$default_unix_charset" = "cross"
2334             then
2335                     samba_cv_HAVE_NATIVE_ICONV=cross
2336             else
2337                     samba_cv_HAVE_NATIVE_ICONV=no
2338             fi
2339         fi
2341         # At this point, we have a libiconv candidate. We know that
2342         # we have the right headers and libraries, but we don't know
2343         # whether it does the conversions we want. We can't test this
2344         # because we are cross-compiling. This is not necessarily a big
2345         # deal, since we can't guarantee that the results we get now will
2346         # match the results we get at runtime anyway.
2347         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2348             default_dos_charset="CP850"
2349             default_display_charset="ASCII"
2350             default_unix_charset="UTF-8"
2351             samba_cv_HAVE_NATIVE_ICONV=yes
2352             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2353             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2354         fi
2356         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2358             CPPFLAGS=$save_CPPFLAGS
2359             LDFLAGS=$save_LDFLAGS
2360             LIBS=$save_LIBS
2362             if test x"$iconv_current_LIBS" != x; then
2363                 LIBS="$LIBS $iconv_current_LIBS"
2364             fi
2366             # Add the flags we need to CPPFLAGS and LDFLAGS
2367             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2368             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2370             # Turn the #defines into string literals
2371             default_dos_charset="\"$default_dos_charset\""
2372             default_display_charset="\"$default_display_charset\""
2373             default_unix_charset="\"$default_unix_charset\""
2375             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2376             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2377             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2378             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2380            break
2381         fi
2383     # We didn't find a working iconv, so keep going
2384     fi
2386     #  We only need to clean these up here for the next pass through the loop
2387     CPPFLAGS=$save_CPPFLAGS
2388     LDFLAGS=$save_LDFLAGS
2389     LIBS=$save_LIBS
2390     export LDFLAGS LIBS CPPFLAGS
2391 done
2392 unset libext
2395 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2396     AC_MSG_WARN([Sufficient support for iconv function was not found.
2397     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2398    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2399    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2400    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2404 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2405 AC_TRY_RUN([
2406 #include <sys/types.h>
2407 #include <fcntl.h>
2408 #ifndef F_GETLEASE
2409 #define F_GETLEASE      1025
2410 #endif
2411 main() {
2412        int fd = open("/dev/null", O_RDONLY);
2413        return fcntl(fd, F_GETLEASE, 0) == -1;
2416 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2417 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2418     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2421 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2422 AC_TRY_RUN([
2423 #include <sys/types.h>
2424 #include <fcntl.h>
2425 #include <signal.h>
2426 #ifndef F_NOTIFY
2427 #define F_NOTIFY 1026
2428 #endif
2429 main() {
2430         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2433 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2434 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2435     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2438 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2439 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h sys/inotify.h)
2440 AC_CHECK_FUNCS(inotify_init)
2441 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2443 samba_cv_HAVE_INOTIFY=yes,
2444 samba_cv_HAVE_INOTIFY=no,
2445 samba_cv_HAVE_INOTIFY=cross)
2447 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2448     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2451 #################################################
2452 # Check if FAM notifications are available. For FAM info, see
2453 #       http://oss.sgi.com/projects/fam/
2454 #       http://savannah.nongnu.org/projects/fam/
2455 AC_ARG_ENABLE(fam,
2456 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2458 if test x$enable_fam != xno; then
2459     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2460     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2461         # On IRIX, libfam requires libC, but other FAM implementations
2462         # might not need it.
2463         AC_CHECK_LIB(fam, FAMOpen2,
2464             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"],
2465             [samba_cv_HAVE_LIBFAM=no])
2467         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2468             samba_fam_xtra=-lC
2469             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2470                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"],
2471                 [samba_cv_HAVE_LIBFAM=no])
2472             unset samba_fam_xtra
2473         fi
2474     fi
2476     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2477         default_shared_modules="$default_shared_modules vfs_notify_fam"
2478         AC_TRY_COMPILE([#include <fam.h>],
2479                     [enum FAMCodes code = FAMChanged;],
2480                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2481                         [Whether fam.h contains a typedef for enum FAMCodes]),
2482                     [])
2483     fi
2485     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2486         AC_MSG_ERROR(FAM support requested but FAM library not available )
2487     fi
2490 AC_SUBST(SMB_FAM_LIBS)
2492 #################################################
2493 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2495 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2497 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2498 # Theoretically it should work with AIX JFS2 too but this needs testing
2499 if test x"$samba_cv_HAVE_GPFS" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2500     default_shared_modules="$default_shared_modules vfs_tsmsm"
2503 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2504 AC_TRY_RUN([
2505 #include <sys/types.h>
2506 #include <fcntl.h>
2507 #include <signal.h>
2508 #include <sys/file.h>
2509 #ifndef LOCK_MAND
2510 #define LOCK_MAND       32
2511 #define LOCK_READ       64
2512 #endif
2513 main() {
2514         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2517 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2518 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2519     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2523 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2524 AC_TRY_COMPILE([#include <sys/types.h>
2525 #include <fcntl.h>],
2526 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2527 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2528 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2529     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2532 #################################################
2533 # Check for POSIX capability support
2535 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2536     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2537     [], [])
2539 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2541     ac_save_LIBS=$LIBS
2542     AC_LIBTESTFUNC(cap, cap_get_proc)
2544     AC_CACHE_CHECK([for POSIX capabilities],
2545             samba_cv_HAVE_POSIX_CAPABILITIES,
2546             [
2547                 AC_TRY_RUN([
2548 #include <sys/types.h>
2549 #include <sys/capability.h>
2550 main() {
2551  cap_t cap;
2552  cap_value_t vals[1];
2553  if (!(cap = cap_get_proc()))
2554    exit(1);
2555  vals[0] = CAP_CHOWN;
2556  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2557  cap_set_proc(cap);
2558  exit(0);
2560                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2561                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2562                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2563             ])
2565 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2566     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2567             [Whether POSIX capabilities are available])
2568 else
2569     LIBS=$ac_save_LIBS
2575 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2576 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2579 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2580 AC_TRY_COMPILE([#include <sys/types.h>
2581 #if defined(HAVE_RPC_RPC_H)
2582 #include <rpc/rpc.h>
2583 #endif],
2584 [int16 testvar;],
2585 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2586 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2587     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2590 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2591 AC_TRY_COMPILE([#include <sys/types.h>
2592 #if defined(HAVE_RPC_RPC_H)
2593 #include <rpc/rpc.h>
2594 #endif],
2595 [uint16 testvar;],
2596 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2597 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2598     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2601 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2602 AC_TRY_COMPILE([#include <sys/types.h>
2603 #if defined(HAVE_RPC_RPC_H)
2604 #include <rpc/rpc.h>
2605 #endif],
2606 [int32 testvar;],
2607 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2608 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2609     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2612 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2613 AC_TRY_COMPILE([#include <sys/types.h>
2614 #if defined(HAVE_RPC_RPC_H)
2615 #include <rpc/rpc.h>
2616 #endif],
2617 [uint32 testvar;],
2618 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2619 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2620     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2624 dnl Some systems (SCO) have a problem including
2625 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2626 dnl as a #define in <prot.h> and as part of an enum
2627 dnl in <rpc/rpc.h>.
2630 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2631 AC_TRY_COMPILE([#include <sys/types.h>
2632 #ifdef HAVE_SYS_SECURITY_H
2633 #include <sys/security.h>
2634 #include <prot.h>
2635 #endif  /* HAVE_SYS_SECURITY_H */
2636 #if defined(HAVE_RPC_RPC_H)
2637 #include <rpc/rpc.h>
2638 #endif],
2639 [int testvar;],
2640 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2641 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2642     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2645 AC_MSG_CHECKING([for test routines])
2646 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
2647            AC_MSG_RESULT(yes),
2648            AC_MSG_ERROR([cant find test code. Aborting config]),
2649            AC_MSG_WARN([cannot run when cross-compiling]))
2651 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2652 AC_TRY_RUN([#include "${srcdir-.}/../tests/ftruncate.c"],
2653            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2654 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2655     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2658 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2659 AC_TRY_RUN([#include "${srcdir-.}/../tests/getgroups.c"],
2660            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2661 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2662     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2665 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2666 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2667 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2668 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2669 AC_CHECK_FUNCS(getpagesize)
2671 ################################################
2672 # look for a method of setting the effective uid
2673 seteuid=no;
2675 if test $seteuid = no; then
2676 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2677 AC_TRY_RUN([
2678 #define AUTOCONF_TEST 1
2679 #define USE_SETREUID 1
2680 #include "confdefs.h"
2681 #include "${srcdir-.}/lib/util_sec.c"],
2682            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2683 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2684     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2688 # we check for setresuid second as it conflicts with AIO on Linux. 
2689 # see http://samba.org/~tridge/junkcode/aio_uid.c
2690 if test $seteuid = no; then
2691 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2692 AC_TRY_RUN([
2693 #define AUTOCONF_TEST 1
2694 #define USE_SETRESUID 1
2695 #include "confdefs.h"
2696 #include "${srcdir-.}/lib/util_sec.c"],
2697            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2698 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2699     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2703 if test $seteuid = no; then
2704 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2705 AC_TRY_RUN([
2706 #define AUTOCONF_TEST 1
2707 #define USE_SETEUID 1
2708 #include "confdefs.h"
2709 #include "${srcdir-.}/lib/util_sec.c"],
2710            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2711 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2712     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2716 if test $seteuid = no; then
2717 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2718 AC_TRY_RUN([
2719 #define AUTOCONF_TEST 1
2720 #define USE_SETUIDX 1
2721 #include "confdefs.h"
2722 #include "${srcdir-.}/lib/util_sec.c"],
2723            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2724 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2725     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2729 AC_CACHE_CHECK([for the Darwin initgroups system call],
2730         samba_cv_DARWIN_INITGROUPS,
2731         AC_TRY_LINK([
2732 #include <sys/syscall.h>
2733 #include <unistd.h>
2734         ],
2735         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2736         samba_cv_DARWIN_INITGROUPS=yes,
2737         samba_cv_DARWIN_INITGROUPS=no)
2740 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2741     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2742         [Whether to use the Darwin-specific initgroups system call])
2745 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2746 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock.c"],
2747            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2748 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2749     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2752 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2753 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock64.c"],
2754            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2755 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2756     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2758 else
2761 dnl Don't check for 64 bit fcntl locking if we know that the
2762 dnl glibc2.1 broken check has succeeded.
2765   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2766   AC_TRY_RUN([
2767 #if defined(HAVE_UNISTD_H)
2768 #include <unistd.h>
2769 #endif
2770 #include <stdio.h>
2771 #include <stdlib.h>
2773 #ifdef HAVE_FCNTL_H
2774 #include <fcntl.h>
2775 #endif
2777 #ifdef HAVE_SYS_FCNTL_H
2778 #include <sys/fcntl.h>
2779 #endif
2780 main() { struct flock64 fl64;
2781 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2782 exit(0);
2783 #else
2784 exit(1);
2785 #endif
2787        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2789   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2790       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2791   fi
2794 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2795 AC_TRY_COMPILE([#include <sys/types.h>
2796 #include <sys/stat.h>
2797 #include <unistd.h>],
2798 [struct stat st;  st.st_blocks = 0;],
2799 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2800 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2801     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2804 AC_CHECK_TYPES([blksize_t, blkcnt_t], [], [], [[#include <sys/stat.h>]])
2806 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2807 AC_TRY_COMPILE([#include <sys/types.h>
2808 #include <sys/stat.h>
2809 #include <unistd.h>],
2810 [struct stat st;  st.st_blksize = 0;],
2811 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2812 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2813     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2816 AC_CACHE_CHECK([for st_flags in struct stat],
2817         samba_cv_HAVE_STAT_ST_FLAGS,
2818         [
2819             AC_TRY_COMPILE([#include <sys/types.h>
2820 #include <sys/stat.h>
2821 #include <unistd.h>],
2822             [struct stat st;  st.st_flags = 0;],
2823             samba_cv_HAVE_STAT_ST_FLAGS=yes,
2824             samba_cv_HAVE_STAT_ST_FLAGS=no,
2825             samba_cv_HAVE_STAT_ST_FLAGS=cross)
2826         ])
2828 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
2829     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
2830                 [Whether the stat struct has a st_flags member])
2833 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2834 AC_TRY_COMPILE([
2835 #include <sys/types.h>
2836 #include <sys/acl.h>
2837 #if defined(HAVE_RPCSVC_NIS_H)
2838 #include <rpcsvc/nis.h>
2839 #endif],
2840 [int i;],
2841 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2842 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2843         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2846 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
2847 AC_TRY_RUN([
2848 #include <stdio.h>
2849 #include <limits.h>
2850 #include <signal.h>
2852 void exit_on_core(int ignored) {
2853         exit(1);
2856 main() {
2857         char *newpath;
2858         signal(SIGSEGV, exit_on_core);
2859         newpath = realpath("/tmp", NULL);
2860         exit((newpath != NULL) ? 0 : 1);
2863 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
2864 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
2865     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
2868 #################################################
2869 # check for AFS clear-text auth support
2870 samba_cv_WITH_AFS=no
2871 AC_MSG_CHECKING(whether to use AFS clear-text auth)
2872 AC_ARG_WITH(afs,
2873 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
2874 [ case "$withval" in
2875   yes|auto)
2876     AC_MSG_RESULT($withval)
2877     samba_cv_WITH_AFS=$withval
2878     ;;
2879   *)
2880     AC_MSG_RESULT(no)
2881     ;;
2882   esac ],
2883   AC_MSG_RESULT(no)
2886 ####################################################
2887 # check for Linux-specific AFS fake-kaserver support
2888 samba_cv_WITH_FAKE_KASERVER=no
2889 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2890 AC_ARG_WITH(fake-kaserver,
2891 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
2892 [ case "$withval" in
2893   yes|auto)
2894     AC_MSG_RESULT($withval)
2895     samba_cv_WITH_FAKE_KASERVER=$withval
2896     ;;
2897   *)
2898     AC_MSG_RESULT(no)
2899     ;;
2900   esac ],
2901   AC_MSG_RESULT(no)
2904 #################################################
2905 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
2906 if test x"$samba_cv_WITH_AFS" != x"no" ||
2907    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
2909     # see if this box has the OpenSSL DES libraries
2910     AC_CHECK_LIB( crypto, DES_pcbc_encrypt, LIBS="$LIBS -lcrypto" , [AC_ERROR(OpenSSL library: libcrypto ot found!)] )
2912     # see if this box has the afs-headers in /usr/include/afs
2913     AC_MSG_CHECKING(for /usr/include/afs)
2914     if test -d /usr/include/afs; then
2915           AC_MSG_RESULT(yes)
2916     else
2917       AC_MSG_RESULT(no)
2918     fi
2920     # check for afs.h
2921     have_afs_headers=no
2922     AC_CHECK_HEADERS(afs.h afs/afs.h)
2923     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
2924         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
2925            test x"$samba_cv_WITH_AFS" = x"auto"; then
2926                 AC_MSG_WARN([AFS cannot be supported without afs.h])
2927         else
2928                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
2929         fi
2930     else
2931         have_afs_headers=yes
2932     fi
2935 FAKE_KASERVER_OBJ=""
2936 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
2937     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
2938     FAKE_KASERVER_OBJ="utils/net_afs.o"
2940 AC_SUBST(FAKE_KASERVER_OBJ)
2942 #################################################
2943 # check whether to compile AFS/NT ACL mapping module
2944 samba_cv_WITH_VFS_AFSACL=no
2945 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
2946 AC_ARG_WITH(vfs-afsacl,
2947 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
2948 [ case "$withval" in
2949   yes|auto)
2950     AC_MSG_RESULT($withval)
2951     samba_cv_WITH_VFS_AFSACL=yes
2952     ;;
2953   *)
2954     AC_MSG_RESULT(no)
2955     ;;
2956   esac ],
2957   AC_MSG_RESULT(no)
2960 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
2961    default_shared_modules="$default_shared_modules vfs_afsacl"
2963         
2964 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
2965     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
2968 #################################################
2969 # check for the DFS clear-text auth system
2970 AC_MSG_CHECKING(whether to use DFS clear-text auth)
2971 AC_ARG_WITH(dfs,
2972 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
2973 [ case "$withval" in
2974   yes)
2975     AC_MSG_RESULT(yes)
2976     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
2977     ;;
2978   *)
2979     AC_MSG_RESULT(no)
2980     ;;
2981   esac ],
2982   AC_MSG_RESULT(no)
2985 ########################################################
2986 # Compile with LDAP support?
2988 with_ldap_support=auto
2989 AC_MSG_CHECKING([for LDAP support])
2991 AC_ARG_WITH(ldap,
2992 [AS_HELP_STRING([--with-ldap], [LDAP support (default yes)])],
2993 [ case "$withval" in
2994     yes|no)
2995         with_ldap_support=$withval
2996         ;;
2997   esac ])
2999 AC_MSG_RESULT($with_ldap_support)
3001 SMBLDAP=""
3002 AC_SUBST(SMBLDAP)
3003 SMBLDAPUTIL=""
3004 AC_SUBST(SMBLDAPUTIL)
3005 LDBLDAP=""
3006 AC_SUBST(LDBLDAP)
3008 if test x"$with_ldap_support" != x"no"; then
3010   ##################################################################
3011   # first test for ldap.h and lber.h
3012   # (ldap.h is required for this test)
3013   AC_CHECK_HEADERS(ldap.h lber.h)
3015   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3016         if test x"$with_ldap_support" = x"yes"; then
3017          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3018         else
3019          AC_MSG_WARN(ldap.h is needed for LDAP support)
3020         fi
3021         
3022         with_ldap_support=no
3023   fi
3025   ##################################################################
3026   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3027   # unsigned int in include/includes.h
3028   case $host_os in
3029         *hpux*)
3030          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3031          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3032         with_ldap_support=yes
3033         ;;
3034         *)
3035         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3036         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3037                 if test x"$with_ldap_support" = x"yes"; then
3038                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3039                 else
3040                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3041                 fi
3042                 with_ldap_support=no
3043         fi
3044         ;;
3045   esac
3048 if test x"$with_ldap_support" != x"no"; then
3049   ac_save_LIBS=$LIBS
3051   ##################################################################
3052   # we might need the lber lib on some systems. To avoid link errors
3053   # this test must be before the libldap test
3054   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3056   ########################################################
3057   # If ber_sockbuf_add_io() is available we can add
3058   # SASL wrapping hooks
3059   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3061   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3062                  AC_TRY_COMPILE([#include <ldap.h>],
3063                                 [int val = LDAP_OPT_SOCKBUF;],
3064                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3065                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3067   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3068           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3069         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3070   fi
3072   #######################################################
3073   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3074   # ldap logging and print it out in the samba logs
3075   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3076                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3077                  [AC_TRY_COMPILE([#include <lber.h>],
3078                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3079                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3080                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3082   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3083         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3084                   [Support for LDAP/LBER logging interception])
3085   fi
3087   ########################################################
3088   # now see if we can find the ldap libs in standard paths
3089   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3091   ########################################################
3092   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3093   # Check found in pam_ldap 145.
3094   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3096   LIBS="$LIBS $LDAP_LIBS"
3097   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3098     AC_TRY_COMPILE([
3099         #include <lber.h>
3100         #include <ldap.h>],
3101         [ldap_set_rebind_proc(0, 0, 0);],
3102         [smb_ldap_cv_ldap_set_rebind_proc=3],
3103         [smb_ldap_cv_ldap_set_rebind_proc=2]
3104     )
3105   ])
3107   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3109   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3111   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3112     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3113     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3114     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3115     default_shared_modules="$default_shared_modules";
3116     SMBLDAP="lib/smbldap.o"
3117     SMBLDAPUTIL="lib/smbldap_util.o"
3118     with_ldap_support=yes
3119     AC_MSG_CHECKING(whether LDAP support is used)
3120     AC_MSG_RESULT(yes)
3121   else
3122     if test x"$with_ldap_support" = x"yes"; then
3123         AC_MSG_ERROR(libldap is needed for LDAP support)
3124     else
3125         AC_MSG_WARN(libldap is needed for LDAP support)
3126     fi
3128     LDAP_LIBS=""
3129     with_ldap_support=no
3130   fi
3131   LIBS=$ac_save_LIBS
3135 #################################################
3136 # active directory support
3138 with_ads_support=auto
3139 AC_MSG_CHECKING([for Active Directory and krb5 support])
3141 AC_ARG_WITH(ads,
3142 [AS_HELP_STRING([--with-ads], [Active Directory support (default auto)])],
3143 [ case "$withval" in
3144     yes|no)
3145         with_ads_support="$withval"
3146         ;;
3147   esac ])
3149 AC_MSG_RESULT($with_ads_support)
3151 FOUND_KRB5=no
3152 KRB5_LIBS=""
3154 if test x"$with_ldap_support" != x"yes"; then
3156     if test x"$with_ads_support" = x"yes"; then
3157         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3158     elif test x"$with_ads_support" = x"auto"; then
3159         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3160         with_ads_support=no
3161     fi
3163 else
3165     # Check to see whether there is enough LDAP functionality to be able
3166     # to build AD support.
3168 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3169 case "$host_os" in
3170         *hpux*)
3171     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3173     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3174         if test x"$with_ads_support" = x"yes"; then
3175             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3176         elif test x"$with_ads_support" = x"auto"; then
3177             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3178             with_ads_support=no
3179         fi
3180     fi
3181     ;;
3182         *)
3183     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3185     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3186         if test x"$with_ads_support" = x"yes"; then
3187             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3188         elif test x"$with_ads_support" = x"auto"; then
3189             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3190             with_ads_support=no
3191         fi
3192     fi
3193     ;;
3194 esac
3197     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3199     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3200         if test x"$with_ads_support" = x"yes"; then
3201             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3202         elif test x"$with_ads_support" = x"auto"; then
3203             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3204             with_ads_support=no
3205         fi
3206     fi
3210 if test x"$with_ads_support" != x"no"; then
3212   # Do no harm to the values of CFLAGS and LIBS while testing for
3213   # Kerberos support.
3215   if test x$FOUND_KRB5 = x"no"; then
3216     #################################################
3217     # check for location of Kerberos 5 install
3218     AC_MSG_CHECKING(for kerberos 5 install path)
3219     AC_ARG_WITH(krb5,
3220     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3221     [ case "$withval" in
3222       no)
3223         AC_MSG_RESULT(no krb5-path given)
3224         ;;
3225       yes)
3226         AC_MSG_RESULT(/usr)
3227         FOUND_KRB5=yes
3228         ;;
3229       *)
3230         AC_MSG_RESULT($withval)
3231         KRB5_CFLAGS="-I$withval/include"
3232         KRB5_CPPFLAGS="-I$withval/include"
3233         KRB5_LDFLAGS="-L$withval/lib"
3234         FOUND_KRB5=yes
3235         if test -x "$withval/bin/krb5-config"; then
3236                 KRB5CONFIG=$withval/bin/krb5-config
3237         fi
3238         ;;
3239       esac ],
3240       AC_MSG_RESULT(no krb5-path given)
3241     )
3242   fi
3244   #################################################
3245   # check for krb5-config from recent MIT and Heimdal kerberos 5
3246   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3247   AC_MSG_CHECKING(for working krb5-config)
3248   if test -x "$KRB5CONFIG" && $KRB5CONFIG --libs gssapi > /dev/null ; then
3249     ac_save_CFLAGS=$CFLAGS
3250     CFLAGS="";export CFLAGS
3251     ac_save_LDFLAGS=$LDFLAGS
3252     LDFLAGS="";export LDFLAGS
3253     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3254     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3255     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3256     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3257     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3258     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3259     FOUND_KRB5=yes
3260     AC_MSG_RESULT(yes)
3261   else
3262     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3263   fi
3265   if test x$FOUND_KRB5 = x"no"; then
3266     #################################################
3267     # see if this box has the SuSE location for the heimdal krb implementation
3268     AC_MSG_CHECKING(for /usr/include/heimdal)
3269     if test -d /usr/include/heimdal; then
3270       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3271           KRB5_CFLAGS="-I/usr/include/heimdal"
3272           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3273           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3274           FOUND_KRB5=yes
3275           AC_MSG_RESULT(yes)
3276       else
3277           KRB5_CFLAGS="-I/usr/include/heimdal"
3278           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3279           FOUND_KRB5=yes
3280           AC_MSG_RESULT(yes)
3281       fi
3282     else
3283       AC_MSG_RESULT(no)
3284     fi
3285   fi
3287   if test x$FOUND_KRB5 = x"no"; then
3288     #################################################
3289     # see if this box has the RedHat location for kerberos
3290     AC_MSG_CHECKING(for /usr/kerberos)
3291     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3292       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3293       KRB5_CFLAGS="-I/usr/kerberos/include"
3294       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3295       FOUND_KRB5=yes
3296       AC_MSG_RESULT(yes)
3297     else
3298       AC_MSG_RESULT(no)
3299     fi
3300   fi
3302   if test x$FOUND_KRB5 = x"no"; then
3303     #################################################
3304     # see if this box has the OpenBSD location for heimdal krb5
3305     AC_MSG_CHECKING(for /usr/include/kerberosV)
3306     if test -d /usr/include/kerberosV; then
3307       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3308       KRB5_LIBS="-lcrypto"
3309       FOUND_KRB5=yes
3310       AC_MSG_RESULT(yes)
3311     else
3312       AC_MSG_RESULT(no)
3313     fi
3314   fi
3316   ac_save_CFLAGS=$CFLAGS
3317   ac_save_CPPFLAGS=$CPPFLAGS
3318   ac_save_LDFLAGS=$LDFLAGS
3320   # remove needless evil rpath stuff as early as possible:
3321   LIB_REMOVE_USR_LIB(KRB5_LIBS)
3322   LIB_REMOVE_USR_LIB(KRB5_LDFLAGS)
3323   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3324   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3325   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3327   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3329   # now check for krb5.h. Some systems have the libraries without the headers!
3330   # note that this check is done here to allow for different kerberos
3331   # include paths
3332   AC_CHECK_HEADERS(krb5.h)
3334   if test x"$ac_cv_header_krb5_h" = x"no"; then
3336     # Give a warning if AD support was not explicitly requested,
3337     # i.e with_ads_support = auto, otherwise die with an error.
3339     if test x"$with_ads_support" = x"yes"; then
3340       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3341     else
3342       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3343     fi
3345     # Turn off AD support and restore CFLAGS and LIBS variables
3347     with_ads_support="no"
3349     CFLAGS=$ac_save_CFLAGS
3350     CPPFLAGS=$ac_save_CPPFLAGS
3351     LDFLAGS=$ac_save_LDFLAGS
3352   fi
3353   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3354   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
3355         WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
3356         if test x"$BLDSHARED" = x"true" ; then
3357                 EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
3358         fi
3359   fi
3362 # Now we have determined whether we really want ADS support
3363 use_ads=no
3364 if test x"$with_ads_support" != x"no"; then
3365   use_ads=yes
3366   have_gssapi=no
3367   ac_save_LIBS=$LIBS
3369   # now check for gssapi headers.  This is also done here to allow for
3370   # different kerberos include paths
3371   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3373   ##################################################################
3374   # we might need the k5crypto and com_err libraries on some systems
3375   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3376   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3378   # Heimdal checks.
3379   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3380   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3381   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3383   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3384   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3386   ########################################################
3387   # now see if we can find the krb5 libs in standard paths
3388   # or as specified above
3389   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3390   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3392   ########################################################
3393   # now see if we can find the gssapi libs in standard paths
3394   if test x"$have_gssapi" != x"yes"; then
3395      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3396   fi
3398   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3399   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3400   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3401   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3402   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3403   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3404   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3405   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3406   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3407   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3408   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3409   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3410   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3411   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3412   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3413   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3414   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3415   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3416   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3417   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3418   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3419   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3420   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3421   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3422   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3423   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3424   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3425   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3426   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3427   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3428   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3429   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3430   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3431   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3432   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3433   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3434   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3435   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3436   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3437   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3438   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3439   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3440   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3442   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3443   # but does have the symbol
3444   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3446   LIBS="$KRB5_LIBS $LIBS"
3448   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3449         smb_krb5_cv_ticket_has_keyinfo,
3450         [
3451             AC_TRY_COMPILE(
3452             [
3453                 #include <krb5.h>
3454             ],
3455             [
3456                 krb5_ticket ticket;
3457                 krb5_kvno kvno;
3458                 krb5_enctype enctype;
3460                 enctype = ticket.enc_part.enctype;
3461                 kvno = ticket.enc_part.kvno;
3462             ],
3463             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3464             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3465         ])
3467   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3468         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3469             [Whether the krb5_ticket structure contains the kvno and enctype])
3470   fi
3472   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3473           smb_krb5_cv_creds_opt_free_context,
3474           [
3475                 AC_TRY_COMPILE([
3476                     #include <krb5.h>],
3477                     [
3478                         krb5_context ctx;
3479                         krb5_get_init_creds_opt *opt = NULL;
3480                         krb5_get_init_creds_opt_free(ctx, opt);
3481                     ],
3482                     [smb_krb5_cv_creds_opt_free_context=yes],
3483                     [smb_krb5_cv_creds_opt_free_context=no]
3484                 )
3485           ])
3487   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3488         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3489             [Whether krb5_get_init_creds_opt_free takes a context argument])
3490   fi
3492   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3493     AC_TRY_COMPILE([
3494         #include <krb5.h>],
3495         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3496         [smb_krb5_cv_verify_checksum=7],
3497         [smb_krb5_cv_verify_checksum=6],
3498     )
3499   ])
3500   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3502   AC_CACHE_CHECK([for checksum in krb5_checksum],
3503                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3504     AC_TRY_COMPILE([#include <krb5.h>],
3505       [krb5_checksum cksum; cksum.checksum.length = 0;],
3506       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3507       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3509   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3510     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3511                [Whether the krb5_checksum struct has a checksum property])
3512   fi
3514   AC_CACHE_CHECK([for etype in EncryptedData],
3515                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3516     AC_TRY_COMPILE([#include <krb5.h>],
3517       [EncryptedData edata; edata.etype = 0;],
3518       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3519       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3521   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3522     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3523                [Whether the EncryptedData struct has a etype property])
3524   fi
3526   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3527                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3528     AC_TRY_COMPILE([#include <krb5.h>],
3529       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3530       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3531       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3533   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3534     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3535                [Whether the krb5_ap_req struct has a ticket pointer])
3536   fi
3538   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3539                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3540     AC_TRY_COMPILE([#include <krb5.h>],
3541       [krb5_error err; err.e_data = NULL;],
3542       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3543       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3545   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3546     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3547                [Whether the krb5_error struct has a e_data pointer])
3548   fi
3550   AC_CACHE_CHECK([for krb5_crypto type],
3551                 samba_cv_HAVE_KRB5_CRYPTO,[
3552     AC_TRY_COMPILE([#include <krb5.h>],
3553       [krb5_crypto crypto;],
3554       samba_cv_HAVE_KRB5_CRYPTO=yes,
3555       samba_cv_HAVE_KRB5_CRYPTO=no)])
3557   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3558     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3559                [Whether the type krb5_crypto exists])
3560   fi
3562   AC_CACHE_CHECK([for krb5_encrypt_block type],
3563                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3564     AC_TRY_COMPILE([#include <krb5.h>],
3565       [krb5_encrypt_block block;],
3566       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3567       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3569   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3570     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3571                [Whether the type krb5_encrypt_block exists])
3572   fi
3574   AC_CACHE_CHECK([for addrtype in krb5_address],
3575                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3576     AC_TRY_COMPILE([#include <krb5.h>],
3577       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3578       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3579       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3581   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3582     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3583                [Whether the krb5_address struct has a addrtype property])
3584   fi
3586   AC_CACHE_CHECK([for addr_type in krb5_address],
3587                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3588     AC_TRY_COMPILE([#include <krb5.h>],
3589       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3590       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3591       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3593   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3594     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3595               [Whether the krb5_address struct has a addr_type property])
3596   fi
3598   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3599                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3600                  [AC_TRY_COMPILE([#include <krb5.h>],
3601     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3602     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3604   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3605     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3606               [Whether the krb5_ticket struct has a enc_part2 property])
3607   fi
3609   AC_CACHE_CHECK([for keyblock in krb5_creds],
3610                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3611     AC_TRY_COMPILE([#include <krb5.h>],
3612       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3613       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3614       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3616   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3617     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3618               [Whether the krb5_creds struct has a keyblock property])
3619   fi
3621   AC_CACHE_CHECK([for session in krb5_creds],
3622                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3623     AC_TRY_COMPILE([#include <krb5.h>],
3624       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3625       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3626       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3628   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3629     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3630               [Whether the krb5_creds struct has a session property])
3631   fi
3633   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3634                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3635     AC_TRY_COMPILE([#include <krb5.h>],
3636       [krb5_keyblock key; key.keyvalue.data = NULL;],
3637       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3638       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3640   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3641     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3642               [Whether the krb5_keyblock struct has a keyvalue property])
3643   fi
3645   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3646                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3647     AC_TRY_COMPILE([#include <krb5.h>],
3648       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3649       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3650       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3651   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3652                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3653     AC_TRY_COMPILE([#include <krb5.h>],
3654       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3655       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3656       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3657 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3658 # w.r.t. arcfour and windows, so we must not enable it here
3659   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3660           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3661     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3662               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3663   fi
3665   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3666                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3667     AC_TRY_COMPILE([#include <krb5.h>],
3668       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3669       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3670       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3672   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3673     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3674               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3675   fi
3677   AC_CACHE_CHECK([for KV5M_KEYTAB],
3678                  samba_cv_HAVE_KV5M_KEYTAB,[
3679     AC_TRY_COMPILE([#include <krb5.h>],
3680       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3681       samba_cv_HAVE_KV5M_KEYTAB=yes,
3682       samba_cv_HAVE_KV5M_KEYTAB=no)])
3684   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3685       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3686              [Whether the KV5M_KEYTAB option is available])
3687   fi
3689   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3690                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3691     AC_TRY_COMPILE([#include <krb5.h>],
3692       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3693       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3694       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3696   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3697     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3698               [Whether KRB5_KU_OTHER_CKSUM is available])
3699   fi
3701   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3702                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3703     AC_TRY_COMPILE([#include <krb5.h>],
3704       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3705       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3706       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3708   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3709     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3710               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3711   fi
3713   AC_CACHE_CHECK([for the krb5_princ_component macro],
3714                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3715     AC_TRY_LINK([#include <krb5.h>],
3716       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3717       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3718       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3720   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3721     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3722                [Whether krb5_princ_component is available])
3723   fi
3725   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3726                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3727     AC_TRY_COMPILE([#include <krb5.h>],
3728       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3729       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3730       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3732   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3733     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3734               [Whether krb5_keytab_entry has key member])
3735   fi
3737   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3738                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3739     AC_TRY_COMPILE([#include <krb5.h>],
3740       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3741       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3742       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3744   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3745     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3746               [Whether krb5_keytab_entry has keyblock member])
3747   fi
3749   AC_CACHE_CHECK([for magic in krb5_address],
3750                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3751     AC_TRY_COMPILE([#include <krb5.h>],
3752       [krb5_address addr; addr.magic = 0;],
3753       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3754       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3756   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3757     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3758               [Whether the krb5_address struct has a magic property])
3759   fi
3761   AC_CACHE_CHECK([for WRFILE: keytab support],
3762                 samba_cv_HAVE_WRFILE_KEYTAB,[
3763     AC_TRY_RUN([
3764 #include<krb5.h>
3765   main()
3766   {
3767     krb5_context context;
3768     krb5_keytab keytab;
3770     krb5_init_context(&context);
3771     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3772   }],
3773   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3774   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3776   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3777       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3778                [Whether the WRFILE:-keytab is supported])
3779   fi
3781   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3782                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3783     AC_TRY_COMPILE([#include <krb5.h>],
3784     [
3785     krb5_context context;
3786     krb5_principal principal;
3787     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3788     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3789     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3791   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3792     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3793               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3794   fi
3796   AC_CACHE_CHECK([for krb5_addresses type],
3797                 samba_cv_HAVE_KRB5_ADDRESSES,[
3798     AC_TRY_COMPILE([#include <krb5.h>],
3799       [krb5_addresses addr;],
3800       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3801       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3803   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3804     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3805                [Whether the type krb5_addresses type exists])
3806   fi
3808   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
3809                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
3810     AC_TRY_COMPILE([#include <krb5.h>],
3811     [
3812     krb5_mk_error(0,0,0);],
3813     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
3814     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
3816   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
3817     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
3818               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
3819   fi
3821   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
3822     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
3823         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
3824         AC_TRY_RUN_STRICT([
3825                 #include <stdlib.h>
3826                 #include <krb5.h>
3827                 int main(void) {
3828                         krb5_context context = NULL;
3829                         char *str = NULL;
3830                         krb5_enctype_to_string(context, 1, &str);
3831                         if (str) free (str); 
3832                         return 0;
3833                 }
3834                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3835                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
3836                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
3838     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
3839       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
3840                 [whether krb5_enctype_to_string takes krb5_context argument])
3841     fi
3843     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
3844         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
3845         AC_TRY_RUN_STRICT([
3846                 #include <krb5.h>
3847                 int main(void) {
3848                         char buf[256];
3849                         krb5_enctype_to_string(1, buf, 256);
3850                         return 0;
3851                 }
3852                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3853                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
3854                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
3856     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
3857       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
3858                 [whether krb5_enctype_to_string takes size_t argument])
3859     fi
3860   fi
3862   AC_CACHE_CHECK([for krb5_principal_get_realm],
3863                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
3864     AC_TRY_LINK([#include <krb5.h>],
3865       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
3866       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
3867       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
3869   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
3870     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
3871                [Whether the function krb5_principal_get_realm is defined])
3872   fi
3874   AC_CACHE_CHECK([for krb5_princ_realm],
3875                 samba_cv_HAVE_KRB5_PRINC_REALM,[
3876     AC_TRY_LINK([#include <krb5.h>],
3877       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
3878       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
3879       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
3881   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
3882     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
3883                [Whether the macro krb5_princ_realm is defined])
3884   fi
3886   #
3887   #
3888   # Now the decisions whether we can support krb5
3889   #
3890   # NOTE: all tests should be done before this block!
3891   #
3892   #
3893   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3894     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3895     use_ads=no
3896   fi
3898   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
3899           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
3900   then
3901     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
3902     use_ads=no
3903   fi
3905   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
3906           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
3907   then
3908     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
3909     use_ads=no
3910   fi
3912   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
3913           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
3914   then
3915     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
3916     use_ads=no
3917   fi
3919   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
3920           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
3921   then
3922     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
3923     use_ads=no
3924   fi
3926   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
3928       # We only need the following functions if we can't get the enctype
3929       # and kvno out of the ticket directly (ie. on Heimdal).
3931       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
3932       then
3933         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
3934         use_ads=no
3935       fi
3937       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
3938       then
3939         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
3940         use_ads=no
3941       fi
3943   fi
3945   if test x"$use_ads" = x"yes"; then
3946     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3947     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3948     if test x"$have_gssapi" = x"yes"; then
3949       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
3950     fi
3951   else
3952     if test x"$with_ads_support" = x"yes"; then
3953         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
3954     else
3955         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
3956     fi
3957     AC_REMOVE_DEFINE(HAVE_KRB5_H)
3958     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
3959     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
3960     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
3961     KRB5_LIBS=""
3962     with_ads_support=no
3963   fi
3964   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
3965   AC_MSG_RESULT([$use_ads])
3967 LIBS="$ac_save_LIBS"
3970 if test x"$use_ads" != xyes; then
3971         merged_build_possible=no
3974 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
3975 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
3978 ########################################################
3979 # Compile with DNS Updates support?
3981 with_dnsupdate_support=no
3982 AC_MSG_CHECKING([whether to enable DNS Updates support])
3984 AC_ARG_WITH(dnsupdate,
3985 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default no)])],
3986 [ case "$withval" in
3987     yes|no)
3988         with_dnsupdate_support=$withval
3989         ;;
3990   esac ])
3992 AC_MSG_RESULT($with_dnsupdate_support)
3994 if test x"$with_dnsupdate_support" != x"no"; then
3996   ################################################################
3997   # first test for Active Directory support being enabled
3998   #if test x"$with_ads_support" = x"no"; then
3999   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
4000   #             with_dnsupdate_support=no
4001   #fi           
4002   ##################################################################
4003   # then test for uuid.h (necessary to generate unique DNS keynames
4004   # (uuid.h is required for this test)
4005   AC_CHECK_HEADERS(uuid/uuid.h)
4007   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4008         if test x"$with_dnsupdate_support" = x"yes"; then
4009          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4010         else
4011          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4012         fi
4013         with_dnsupdate_support=no
4014   fi
4017 if test x"$with_dnsupdate_support" != x"no"; then
4019   ########################################################
4020   # Now see if we can find the uuid libs in standard paths
4021   # On some systems, the uuid API is in libc, so we have to
4022   # be careful not to insert a spurious -luuid.
4024   UUID_LIBS=""
4025   AC_LIBTESTFUNC(uuid, uuid_generate,
4026           [
4027             case " $LIBS " in
4028                 *\ -luuid\ *)
4029                 UUID_LIBS="-luuid"
4030                 SMB_REMOVE_LIB(uuid)
4031                 ;;
4032             esac
4034             with_dnsupdate_support=yes
4035             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4036         ],
4037         [
4038             if test x"$with_dnsupdate_support" = x"yes"; then
4039                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4040             else
4041                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4042             fi
4043             with_dnsupdate_support=no
4044         ])
4047 #################################################
4048 # check for automount support
4049 AC_MSG_CHECKING(whether to use automount)
4050 AC_ARG_WITH(automount,
4051 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4052 [ case "$withval" in
4053   yes)
4054     AC_MSG_RESULT(yes)
4055     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4056     ;;
4057   *)
4058     AC_MSG_RESULT(no)
4059     ;;
4060   esac ],
4061   AC_MSG_RESULT(no)
4064 #################################################
4065 # check for mount- and umount.cifs support
4066 CIFSMOUNT_PROGS=""
4067 INSTALL_CIFSMOUNT=""
4068 UNINSTALL_CIFSMOUNT=""
4069 AC_MSG_CHECKING(whether to build mount.cifs)
4070 AC_ARG_WITH(cifsmount,
4071 [AS_HELP_STRING([--with-cifsmount], [Include mount.cifs (Linux only) support (default=yes)])],
4072 [ case "$withval" in
4073   no)
4074         AC_MSG_RESULT(no)
4075         ;;
4076   *)
4077         case "$host_os" in
4078         *linux*)
4079                 AC_MSG_RESULT(yes)
4080                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs])
4081                 CIFSMOUNT_PROGS="bin/mount.cifs"
4082                 INSTALL_CIFSMOUNT="installcifsmount"
4083                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4084                 ;;
4085         *)
4086                 AC_MSG_ERROR(not on a linux system!)
4087                 ;;
4088         esac
4089     ;;
4090   esac ],
4091 [ case "$host_os" in
4092   *linux*)
4093         AC_MSG_RESULT(yes)
4094         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs])
4095         CIFSMOUNT_PROGS="bin/mount.cifs"
4096         INSTALL_CIFSMOUNT="installcifsmount"
4097         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4098         ;;
4099   *)
4100         AC_MSG_RESULT(no)
4101         ;;
4102   esac ]
4105 CIFSUMOUNT_PROGS=""
4106 INSTALL_CIFSUMOUNT=""
4107 UNINSTALL_CIFSUMOUNT=""
4108 AC_MSG_CHECKING(whether to build umount.cifs)
4109 AC_ARG_WITH(cifsumount,
4110 [AS_HELP_STRING([--with-cifsumount], [Include umount.cifs (Linux only) support (default=no)])],
4111 [ case "$withval" in
4112   yes)
4113         case "$host_os" in
4114         *linux*)
4115                 AC_MSG_RESULT(yes)
4116                 AC_DEFINE(WITH_CIFSUMOUNT,1,[Whether to build umount.cifs])
4117                 CIFSUMOUNT_PROGS="bin/umount.cifs"
4118                 INSTALL_CIFSUMOUNT="installcifsumount"
4119                 UNINSTALL_CIFSUMOUNT="uninstallcifsumount"
4120                 ;;
4121         *)
4122                 AC_MSG_ERROR(not on a linux system!)
4123                 ;;
4124         esac
4125         ;;
4126   *)
4127         AC_MSG_RESULT(no)
4128         ;;
4129   esac ],
4130   AC_MSG_RESULT(no)
4133 #################################################
4134 # check for cifs.upcall support
4135 AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
4136 CIFSUPCALL_PROGS=""
4137 INSTALL_CIFSUPCALL=""
4138 UNINSTALL_CIFSUPCALL=""
4139 AC_MSG_CHECKING(whether to build cifs.upcall)
4140 AC_ARG_WITH(cifsupcall,
4141 [AS_HELP_STRING([--with-cifsupcall], [Include cifs.upcall (Linux only) support (default=yes)])],
4142 [ case "$withval" in
4143   no)
4144         AC_MSG_RESULT(no)
4145         ;;
4146   *)
4147         case "$host_os" in
4148         *linux*)
4149                 if test x"$use_ads" != x"yes"; then
4150                         AC_MSG_ERROR(ADS support should be enabled for building cifs.upcall)
4151                 elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4152                         AC_MSG_ERROR(keyutils package is required for cifs.upcall)
4153                 else
4154                         AC_MSG_RESULT(yes)
4155                         AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4156                         CIFSUPCALL_PROGS="bin/cifs.upcall"
4157                         INSTALL_CIFSUPCALL="installcifsupcall"
4158                         UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4159                 fi
4160                 ;;
4161         *)
4162                 AC_MSG_ERROR(not on a linux system!)
4163                 ;;
4164         esac
4165     ;;
4166   esac ],
4167 [ case "$host_os" in
4168   *linux*)
4169         if test x"$use_ads" != x"yes"; then
4170                 AC_MSG_WARN(ADS support should be enabled for building cifs.upcall)
4171         elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4172                 AC_MSG_WARN(keyutils package is required for cifs.upcall)
4173         else
4174                 AC_MSG_RESULT(yes)
4175                 AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4176                 CIFSUPCALL_PROGS="bin/cifs.upcall"
4177                 INSTALL_CIFSUPCALL="installcifsupcall"
4178                 UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4179         fi
4180         ;;
4181   *)
4182         AC_MSG_RESULT(no)
4183         ;;
4184   esac ]
4188 #################################################
4189 # Check for a PAM clear-text auth, accounts, password
4190 # and session support. Most PAM implementations keep their
4191 # headers in /usr/include/security. Darwin keeps its in
4192 # /usr/include/pam.
4194 with_pam_for_crypt=no
4195 try_pam=auto
4196 AC_MSG_CHECKING(whether to try PAM support)
4197 AC_ARG_WITH(pam,
4198 [AS_HELP_STRING([--with-pam], [Include PAM support (default=auto)])],
4199 [ case "$withval" in
4200   yes|no|auto)
4201     try_pam=$withval
4202     ;;
4203   esac
4205 AC_MSG_RESULT([$try_pam])
4207 use_pam=no
4208 create_pam_modules=no
4209 if test x"${try_pam}" != x"no";then
4210         use_pam=yes
4211         create_pam_modules=yes
4213         # Most systems have PAM headers in /usr/include/security, but Darwin
4214         # has them in /usr/include/pam.
4215         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4216         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4217                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4218                 if test x"${try_pam}" = x"yes";then
4219                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4220                 fi
4221                 use_pam=no
4222                 create_pam_modules=no
4223         fi
4225         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4226         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4227                 if test x"${try_pam}" = x"yes";then
4228                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4229                 fi
4230                 use_pam=no
4231                 create_pam_modules=no
4232         fi
4234         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4235                 #if HAVE_SECURITY_PAM_APPL_H
4236                 #include <security/pam_appl.h>
4237                 #endif
4238                 #if HAVE_PAM_PAM_APPL_H
4239                 #include <pam/pam_appl.h>
4240                 #endif
4241         ]])
4242         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4243                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4244                 if test x"${try_pam}" = x"yes";then
4245                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4246        fi
4247                 create_pam_modules=no
4248     fi
4250         if test x"$use_pam" = x"yes"; then
4251     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4252                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4253                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4254     with_pam_for_crypt=yes
4256                 if test x"$create_pam_modules" = x"yes"; then
4257                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4258                         # this checks are optional,
4259                         # we don't care about the results here
4260                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4261                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4262                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4263                 else
4264                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4265                 fi
4266         fi
4267         AC_MSG_CHECKING(whether to use PAM support)
4268         AC_MSG_RESULT([$use_pam])
4270         AC_MSG_CHECKING(whether to have PAM MODULES support)
4271         AC_MSG_RESULT([$create_pam_modules])
4272 fi # try_pam != no
4274 #################################################
4275 # check for pam_smbpass support
4276 PAM_MODULES=""
4277 INSTALL_PAM_MODULES=""
4278 UNINSTALL_PAM_MODULES=""
4280 try_pam_smbpass=auto
4281 AC_MSG_CHECKING(whether to use pam_smbpass)
4282 AC_ARG_WITH(pam_smbpass,
4283 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=auto)])],
4284 [ case "$withval" in
4285   yes|no|auto)
4286     try_pam_smbpass=$withval
4287   ;;
4288   *)
4289     AC_MSG_ERROR([valid options are yes,no,auto])
4290   ;;
4291   esac
4294 if test x"${try_pam_smbpass}" = xno ; then
4295         use_pam_smbpass=no
4296 else
4297         use_pam_smbpass=yes
4298         # Conditions under which pam_smbpass can't be built.
4299         if test x"$BLDSHARED" != xtrue ; then
4300                 if test x"${try_pam_smbpass}" = xyes ; then
4301                         AC_MSG_ERROR([No support for shared modules])
4302                 fi
4303                 use_pam_smbpass=no
4304         elif test x"$create_pam_modules" != xyes ; then
4305                 if test x"${try_pam_smbpass}" = xyes ; then
4306                         AC_MSG_ERROR([No support for PAM MODULES])
4307                 fi
4308                 use_pam_smbpass=no
4309         fi
4311         if test x"${use_pam_smbpass}" = xyes ; then 
4312                 PAM_MODULES="pam_smbpass"
4313                 INSTALL_PAM_MODULES="installpammodules"
4314                 UNINSTALL_PAM_MODULES="uninstallpammodules"
4315         fi
4317 AC_MSG_RESULT([$use_pam_smbpass])
4321 ## moved after the check for -lcrypt in order to
4322 ## ensure that the necessary libraries are included
4323 ## check checking for truncated salt.  Wrapped by the
4324 ## $with_pam_for_crypt variable as above   --jerry
4326 if test $with_pam_for_crypt = no; then
4327 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4328 crypt_LIBS="$LIBS"
4329 LIBS="$AUTH_LIBS $LIBS"
4330 AC_TRY_RUN([#include "${srcdir-.}/../tests/crypttest.c"],
4331         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4332 LIBS="$crypt_LIBS"])
4333 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4334         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4338 #################################################
4339 # check for a NISPLUS_HOME support
4340 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4341 AC_ARG_WITH(nisplus-home,
4342 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4343 [ case "$withval" in
4344   yes)
4345     AC_MSG_RESULT(yes)
4346     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4347     ;;
4348   *)
4349     AC_MSG_RESULT(no)
4350     ;;
4351   esac ],
4352   AC_MSG_RESULT(no)
4355 #################################################
4356 # check for syslog logging
4357 AC_MSG_CHECKING(whether to use syslog logging)
4358 AC_ARG_WITH(syslog,
4359 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4360 [ case "$withval" in
4361   yes)
4362     AC_MSG_RESULT(yes)
4363     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4364     ;;
4365   *)
4366     AC_MSG_RESULT(no)
4367     ;;
4368   esac ],
4369   AC_MSG_RESULT(no)
4372 #################################################
4373 # check for custom syslog facility
4374 AC_MSG_CHECKING(whether to use a custom syslog facility)
4375 AC_ARG_WITH(syslog-facility,
4376 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4378   if test "$withval" = "no" ; then
4379     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4380   else
4381      if test "$withval" != "yes" ; then
4382         syslog_facility="$withval"
4383         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4384      fi
4385   fi
4388 #################################################
4389 # check for experimental disk-quotas support
4391 samba_cv_WITH_QUOTAS=auto
4392 samba_cv_TRY_QUOTAS=no
4393 samba_cv_RUN_QUOTA_TESTS=auto
4394 samba_cv_WITH_SYS_QUOTAS=auto
4395 samba_cv_TRY_SYS_QUOTAS=auto
4396 samba_cv_SYSQUOTA_FOUND=no
4398 AC_MSG_CHECKING(whether to try disk-quotas support)
4399 AC_ARG_WITH(quotas,
4400 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4401 [ case "$withval" in
4402   yes)
4403     AC_MSG_RESULT(yes)
4404     samba_cv_WITH_QUOTAS=yes
4405     samba_cv_TRY_QUOTAS=yes
4406     samba_cv_RUN_QUOTA_TESTS=yes
4407     #set sys quotas to auto in this case
4408     samba_cv_TRY_SYS_QUOTAS=auto
4409     ;;
4410   auto)
4411     AC_MSG_RESULT(auto)
4412     samba_cv_WITH_QUOTAS=auto
4413     samba_cv_TRY_QUOTAS=auto
4414     samba_cv_RUN_QUOTA_TESTS=auto
4415     #set sys quotas to auto in this case
4416     samba_cv_TRY_SYS_QUOTAS=auto
4417     ;;
4418   no)
4419     AC_MSG_RESULT(no)
4420     samba_cv_WITH_QUOTAS=no
4421     samba_cv_TRY_QUOTAS=no
4422     samba_cv_RUN_QUOTA_TESTS=no
4423     ;;
4424   *)
4425     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4426     ;;
4427   esac ],
4428   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4431 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4432 AC_ARG_WITH(sys-quotas,
4433 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4434 [ case "$withval" in
4435   yes)
4436     AC_MSG_RESULT(yes)
4437     samba_cv_WITH_SYS_QUOTAS=yes
4438     samba_cv_TRY_SYS_QUOTAS=yes
4439     samba_cv_RUN_QUOTA_TESTS=yes
4440     ;;
4441   auto)
4442     AC_MSG_RESULT(auto)
4443     samba_cv_WITH_SYS_QUOTAS=auto
4444     samba_cv_TRY_SYS_QUOTAS=auto
4445     samba_cv_RUN_QUOTA_TESTS=auto
4446     ;;
4447   no)
4448     AC_MSG_RESULT(no)
4449     samba_cv_WITH_SYS_QUOTAS=no
4450     samba_cv_TRY_SYS_QUOTAS=no
4451     ;;
4452   *)
4453     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4454     ;;
4455   esac ],
4456   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4459 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4460 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4461   case "$host_os" in
4462         *linux*)
4463             AC_MSG_RESULT(yes)
4464             samba_cv_TRY_SYS_QUOTAS=yes
4465             samba_cv_RUN_QUOTA_TESTS=yes
4466             ;;
4467         *)
4468             AC_MSG_RESULT(no)
4469             samba_cv_TRY_SYS_QUOTAS=no
4470             ;;
4471   esac
4474 #############################################
4475 # only check for quota stuff if --with-quotas
4476 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4478 case "$host_os" in
4479         # on linux we didn't need to test we have builtin support
4480         *linux*)
4481             samba_cv_SYSQUOTA_FOUND=yes
4482             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4483             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4484             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4485             AC_MSG_RESULT(yes)
4487             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4488             samba_cv_found_xfs_header=yes
4489             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4490             AC_MSG_RESULT(yes)
4491             ;;
4492         *solaris*)
4493             # need to set this define when using static linking (BUG 1473)
4494             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4495             ;;
4496         *)
4497             ;;
4498 esac
4500 # some broken header files need this
4501 AC_CHECK_HEADER(asm/types.h,[
4502             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4503             AC_ADD_INCLUDE(<asm/types.h>)
4504             ])
4506 # For quotas on Veritas VxFS filesystems
4507 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4509 # For quotas on Linux XFS filesystems
4510 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4512 # For sys/quota.h and linux/quota.h
4513 AC_CHECK_HEADERS(sys/quota.h)
4515 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4516 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4517 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4518 AC_TRY_COMPILE([
4519 #include "confdefs.h"
4520 #ifdef HAVE_SYS_TYPES_H
4521 #include <sys/types.h>
4522 #endif
4523 #ifdef HAVE_ASM_TYPES_H
4524 #include <asm/types.h>
4525 #endif
4526 #include <sys/quota.h>
4527 ],[int i = Q_XGETQUOTA;],
4528 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4529 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4530         samba_cv_found_xfs_header=yes
4534 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4535 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4536 AC_TRY_COMPILE([
4537 #include "confdefs.h"
4538 #ifdef HAVE_SYS_QUOTA_H
4539 #include <sys/quota.h>
4540 #endif
4542 struct dqblk D;
4543 D.dqb_fsoftlimit = 0;],
4544 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4545 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4546         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4549 ##################
4550 # look for a working quota system
4552 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4553 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4554 AC_TRY_RUN_STRICT([
4555 #define HAVE_QUOTACTL_4A 1
4556 #define AUTOCONF_TEST 1
4557 #include "confdefs.h"
4558 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4559            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4560 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4561     samba_cv_SYSQUOTA_FOUND=yes;
4562     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4563     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4567 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4568 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4569 AC_TRY_RUN_STRICT([
4570 #define HAVE_QUOTACTL_4B 1
4571 #define AUTOCONF_TEST 1
4572 #include "confdefs.h"
4573 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4574            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4575 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4576     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4577     samba_cv_SYSQUOTA_FOUND=yes;
4578     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4579     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4583 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4584 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4585 AC_TRY_RUN_STRICT([
4586 #define HAVE_QUOTACTL_3 1
4587 #define AUTOCONF_TEST 1
4588 #include "confdefs.h"
4589 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4590            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4591 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4592     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4593     samba_cv_SYSQUOTA_FOUND=yes;
4594     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4595     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4599 #################################################
4600 # check for mntent.h and struct mntent
4601 AC_CHECK_HEADERS(mntent.h)
4602 #################################################
4603 # check for setmntent,getmntent,endmntent
4604 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4606 #################################################
4607 # check for devnm.h and struct mntent
4608 AC_CHECK_HEADERS(devnm.h)
4609 #################################################
4610 # check for devnm
4611 AC_CHECK_FUNCS(devnm)
4613 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4614     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4615         # if --with-sys-quotas=yes then build it
4616         # you have can use the get/set quota command smb.conf
4617         # options then
4618         samba_cv_SYSQUOTA_FOUND=auto
4619     fi
4620     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4621         # if --with-sys-quotas=yes then build it
4622         # you have can use the get/set quota command smb.conf
4623         # options then
4624         samba_cv_TRY_SYS_QUOTAS=auto
4625     fi
4628 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4629 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4630 SAVE_CPPFLAGS="$CPPFLAGS"
4631 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4632 AC_TRY_COMPILE([
4633 #include "confdefs.h"
4634 #define NO_PROTO_H 1
4635 #define NO_CONFIG_H 1
4636 #define HAVE_SYS_QUOTAS 1
4637 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4638 #include "${srcdir-.}/lib/sysquotas.c"
4639 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4640 CPPFLAGS="$SAVE_CPPFLAGS"
4642 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4643 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4644     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4645         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4646         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4647         samba_cv_WE_USE_SYS_QUOTAS=yes
4648         AC_MSG_RESULT(yes)
4649     else
4650         AC_MSG_RESULT(no)
4651     fi
4655 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4656 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4657 SAVE_CPPFLAGS="$CPPFLAGS"
4658 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4659 AC_TRY_COMPILE([
4660 #include "confdefs.h"
4661 #define NO_PROTO_H 1
4662 #define NO_CONFIG_H 1
4663 #define HAVE_SYS_QUOTAS 1
4664 #define HAVE_XFS_QUOTAS 1
4665 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4666 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4667 CPPFLAGS="$SAVE_CPPFLAGS"
4669 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4670     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4671         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4672     fi
4676 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4677 SAVE_CPPFLAGS="$CPPFLAGS"
4678 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4679 AC_TRY_COMPILE([
4680 #include "confdefs.h"
4681 #define NO_PROTO_H 1
4682 #define NO_CONFIG_H 1
4683 #include "${srcdir-.}/smbd/quotas.c"
4684 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4685 CPPFLAGS="$SAVE_CPPFLAGS"
4687 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4688 AC_MSG_CHECKING(whether to use the old quota support)
4689     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4690       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4691         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4692         AC_MSG_RESULT(yes)
4693       else
4694         AC_MSG_RESULT(no)
4695       fi
4696     else
4697       AC_MSG_RESULT(no)
4698     fi
4701 ####################
4702 # End of quota check samba_cv_RUN_QUOTA_TESTS
4705 #################################################
4706 # check for experimental utmp accounting
4708 AC_MSG_CHECKING(whether to support utmp accounting)
4709 WITH_UTMP=yes
4710 AC_ARG_WITH(utmp,
4711 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
4712 [ case "$withval" in
4713   no)
4714                 WITH_UTMP=no
4715                 ;;
4716   *)
4717                 WITH_UTMP=yes
4718                 ;;
4719   esac ],
4722 # utmp requires utmp.h
4723 # Note similar check earlier, when checking utmp details.
4725 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4726         utmp_no_reason=", no utmp.h on $host_os"
4727         WITH_UTMP=no
4730 # Display test results
4732 if test x"$WITH_UTMP" = x"yes"; then
4733         AC_MSG_RESULT(yes)
4734         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4735 else
4736         AC_MSG_RESULT(no$utmp_no_reason)
4739 INSTALLLIBCMD_SH=:
4740 INSTALLLIBCMD_A=:
4741 UNINSTALLLIBCMD_SH=:
4742 UNINSTALLLIBCMD_A=:
4744 if test $BLDSHARED = true; then
4745         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
4746         UNINSTALLLIBCMD_SH="rm -f"
4748 if test $enable_static = yes; then
4749         INSTALLLIBCMD_A="\$(INSTALLCMD)"
4750         UNINSTALLLIBCMD_A="rm -f"
4753 #################################################
4754 # --disable-shared-libs
4755 # can be used to disable the internal use of shared libs altogether
4756 # (this only has an effect when building shared libs is enabled)
4758 USESHARED=false
4759 AC_SUBST(USESHARED)
4761 AC_MSG_CHECKING(whether to use shared libraries internally)
4762 AC_ARG_ENABLE([shared-libs],
4763         AS_HELP_STRING([--enable-shared-libs],
4764                 [Use shared libraries internally (default=yes)]),
4765         [enable_shared_libs=$enableval],
4766         [enable_shared_libs=yes])
4768 if test x"$enable_shared_libs" != x"no" ; then
4769         USESHARED=$BLDSHARED
4772 AC_MSG_RESULT([$USESHARED])
4774 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
4775         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
4778 #################################################
4779 # --with-static-libs=LIBS:
4780 #   link (internal) libs dynamically or statically?
4782 # If a subsystem is built as a library then this controls whether they are
4783 # linked into Samba targets statically or dynamically:
4785 # * If we build the shared library at all, we link dynamically by default.
4787 # * We only link statically if we don't build shared or if the library
4788 #   appears in the --with-static-libs configure option.
4790 # Example:
4791 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
4792 #   of linking the dynamic variant with -ltalloc.
4794 # NOTE: This option only affects libraries that we do not only build
4795 # but that samba also links against as libraries (as opposed to linking
4796 # the plain object files. - This has to be configured in Makefile.in.
4797 # So in particular it does not harm to give invalid or unknown names here.
4800 AC_ARG_WITH([static-libs],
4801         [AS_HELP_STRING([--with-static-libs=LIBS],
4802                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
4803         [AS_IF([test $withval],
4804                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
4805                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
4806                         eval LINK_$lib=STATIC
4807                 done], [])],
4808         [])
4811 # WORKAROUND:
4812 #   until we have organized other internal subsystems (as util, registry
4813 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
4814 #   dynamically to samba programs.
4816 LINK_LIBNETAPI=STATIC
4818 LINK_LIBSMBCLIENT=STATIC
4821 #  The library versions are hardcoded here
4822 #  and filled into the LIBFOO_SOVER variable.
4824 #  TODO: for talloc and tdb (at least), these should
4825 #  be extracted from their respective source directories
4827 AC_ARG_ENABLE(external_libtalloc, [AS_HELP_STRING([--enable-external-libtalloc], [Enable external talloc [default=auto]])], 
4828 [ enable_external_libtalloc=$enableval ], [ enable_external_libtalloc=auto ])
4830 if test "x$enable_external_libtalloc" != xno
4831 then
4832         PKG_CHECK_MODULES(LIBTALLOC, talloc >= 2.0.1,
4833                 [ enable_external_libtalloc=yes ],
4834                 [ if test x$enable_external_libtalloc = xyes; then
4835                         AC_MSG_ERROR([Unable to find libtalloc])
4836               else 
4837                         enable_external_libtalloc=no
4838                   fi
4839                 ])
4842 if test "x$enable_external_libtalloc" = xno
4843 then
4844         m4_include(../lib/talloc/libtalloc.m4)
4845         LINK_LIBTALLOC=STATIC
4846         SMB_LIBRARY(talloc, 2)
4847         LIBTALLOC_OBJ0=""
4848         for obj in ${TALLOC_OBJ}; do
4849                 LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
4850         done
4851         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
4852         AC_SUBST(LIBTALLOC_OBJ0)
4854         TALLOCTORT="bin/talloctort\$(EXEEXT)"
4855         AC_SUBST(TALLOCTORT)
4859 AC_ARG_ENABLE(external_libtdb,
4860         [AS_HELP_STRING([--enable-external-libtdb],
4861                 [Enable external tdb [default=auto]])],
4862                 [ enable_external_libtalloc=$enableval ],
4863                 [ enable_external_libtalloc=auto ])
4865 if test "x$enable_external_libtdb" != xno
4866 then
4867         PKG_CHECK_MODULES(LIBTDB, tdb >= 1.1.4,
4868                 [ enable_external_libtdb=yes ],
4869                 [
4870                 if test x$enable_external_libtdb = xyes; then
4871                         AC_MSG_ERROR([Unable to find libtdb])
4872                 else
4873                         enable_external_libtdb=no
4874                 fi
4875                 ])
4878 AC_SUBST(LIBTDB_OBJ0)
4879 if test "x$enable_external_libtdb" = xno
4880 then
4881         m4_include(../lib/tdb/libtdb.m4)
4882         LINK_LIBTDB=STATIC
4883         SMB_LIBRARY(tdb, 1)
4884         LIBTDB_OBJ0=""
4885         for obj in ${TDB_OBJ}; do
4886                 LIBTDB_OBJ0="${LIBTDB_OBJ0} ${tdbdir}/${obj}"
4887         done
4888         AC_SUBST(LIBTDB_OBJ0)
4889         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
4891         TDBBACKUP="bin/tdbbackup\$(EXEEXT)"
4892         AC_SUBST(TDBBACKUP)
4893         TDBDUMP="bin/tdbdump\$(EXEEXT)"
4894         AC_SUBST(TDBDUMP)
4895         TDBTOOL="bin/tdbtool\$(EXEEXT)"
4896         AC_SUBST(TDBTOOL)
4897         TDBTORTURE="bin/tdbtorture\$(EXEEXT)"
4898         AC_SUBST(TDBTORTURE)
4901 SMB_LIBRARY(netapi, 0)
4902 SMB_LIBRARY(smbclient, 0)
4903 SMB_LIBRARY(smbsharemodes, 0)
4904 SMB_LIBRARY(addns, 0, no, [undefined API])
4907 #################################################
4908 # these tests are taken from the GNU fileutils package
4909 AC_CHECKING(how to get filesystem space usage)
4910 space=no
4912 # Test for statvfs64.
4913 if test $space = no; then
4914   # SVR4
4915   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
4916   [AC_TRY_RUN([
4917 #if defined(HAVE_UNISTD_H)
4918 #include <unistd.h>
4919 #endif
4920 #include <sys/types.h>
4921 #include <sys/statvfs.h>
4922   main ()
4923   {
4924     struct statvfs64 fsd;
4925     exit (statvfs64 (".", &fsd));
4926   }],
4927   fu_cv_sys_stat_statvfs64=yes,
4928   fu_cv_sys_stat_statvfs64=no,
4929   fu_cv_sys_stat_statvfs64=cross)])
4930   if test $fu_cv_sys_stat_statvfs64 = yes; then
4931     space=yes
4932     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
4933   fi
4936 # Perform only the link test since it seems there are no variants of the
4937 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4938 # because that got a false positive on SCO OSR5.  Adding the declaration
4939 # of a `struct statvfs' causes this test to fail (as it should) on such
4940 # systems.  That system is reported to work fine with STAT_STATFS4 which
4941 # is what it gets when this test fails.
4942 if test $space = no; then
4943   # SVR4
4944   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
4945                  [AC_TRY_LINK([#include <sys/types.h>
4946 #include <sys/statvfs.h>],
4947                               [struct statvfs fsd; statvfs (0, &fsd);],
4948                               fu_cv_sys_stat_statvfs=yes,
4949                               fu_cv_sys_stat_statvfs=no)])
4950   if test $fu_cv_sys_stat_statvfs = yes; then
4951     space=yes
4952     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
4953   fi
4956 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
4957 # This is not the case on ancient Linux systems.
4959 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
4960     AC_TRY_COMPILE([#include <sys/types.h>
4961 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
4962         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
4963 if test x"$samba_cv_fsid_int" = x"yes"; then
4964     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
4967 # fsusage.c assumes that statvfs has an f_frsize entry. Some weird
4968 # systems use f_bsize.
4969 AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [
4970     AC_TRY_COMPILE([#include <sys/types.h>
4971 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0],
4972         samba_cv_frsize=yes,samba_cv_frsize=no)])
4973 if test x"$samba_cv_frsize" = x"yes"; then
4974     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
4977 # Some systems use f_flag in struct statvfs while others use f_flags
4978 AC_CACHE_CHECK([that statvfs.statvfs_f_flag works],samba_cv_statvfs_f_flag, [
4979     AC_TRY_COMPILE([#include <sys/types.h>
4980 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flag = 0],
4981         samba_cv_statvfs_f_flag=yes,samba_cv_statvfs_f_flag=no)])
4982 if test x"$samba_cv_statvfs_f_flag" = x"yes"; then
4983     AC_DEFINE(HAVE_STATVFS_F_FLAG, 1, [Whether statvfs.f_flag exists])
4986 AC_CACHE_CHECK([that statvfs.statvfs_f_flags works],samba_cv_statvfs_f_flags, [
4987     AC_TRY_COMPILE([#include <sys/types.h>
4988 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flags = 0],
4989         samba_cv_statvfs_f_flags=yes,samba_cv_statvfs_f_flags=no)])
4990 if test x"$samba_cv_statvfs_f_flags" = x"yes"; then
4991     AC_DEFINE(HAVE_STATVFS_F_FLAGS, 1, [Whether statvfs.f_flags exists])
4994 if test $space = no; then
4995   # DEC Alpha running OSF/1
4996   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
4997   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
4998   [AC_TRY_RUN([
4999 #include <sys/param.h>
5000 #include <sys/types.h>
5001 #include <sys/mount.h>
5002   main ()
5003   {
5004     struct statfs fsd;
5005     fsd.f_fsize = 0;
5006     exit (statfs (".", &fsd, sizeof (struct statfs)));
5007   }],
5008   fu_cv_sys_stat_statfs3_osf1=yes,
5009   fu_cv_sys_stat_statfs3_osf1=no,
5010   fu_cv_sys_stat_statfs3_osf1=no)])
5011   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5012   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5013     space=yes
5014     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5015   fi
5018 if test $space = no; then
5019 # AIX
5020   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5021 member (AIX, 4.3BSD)])
5022   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5023   [AC_TRY_RUN([
5024 #ifdef HAVE_SYS_PARAM_H
5025 #include <sys/param.h>
5026 #endif
5027 #ifdef HAVE_SYS_MOUNT_H
5028 #include <sys/mount.h>
5029 #endif
5030 #ifdef HAVE_SYS_VFS_H
5031 #include <sys/vfs.h>
5032 #endif
5033   main ()
5034   {
5035   struct statfs fsd;
5036   fsd.f_bsize = 0;
5037   exit (statfs (".", &fsd));
5038   }],
5039   fu_cv_sys_stat_statfs2_bsize=yes,
5040   fu_cv_sys_stat_statfs2_bsize=no,
5041   fu_cv_sys_stat_statfs2_bsize=no)])
5042   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5043   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5044     space=yes
5045     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5046   fi
5049 if test $space = no; then
5050 # SVR3
5051   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5052   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5053   [AC_TRY_RUN([#include <sys/types.h>
5054 #include <sys/statfs.h>
5055   main ()
5056   {
5057   struct statfs fsd;
5058   exit (statfs (".", &fsd, sizeof fsd, 0));
5059   }],
5060     fu_cv_sys_stat_statfs4=yes,
5061     fu_cv_sys_stat_statfs4=no,
5062     fu_cv_sys_stat_statfs4=no)])
5063   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5064   if test $fu_cv_sys_stat_statfs4 = yes; then
5065     space=yes
5066     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5067   fi
5070 if test $space = no; then
5071 # 4.4BSD and NetBSD
5072   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5073 member (4.4BSD and NetBSD)])
5074   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5075   [AC_TRY_RUN([#include <sys/types.h>
5076 #ifdef HAVE_SYS_PARAM_H
5077 #include <sys/param.h>
5078 #endif
5079 #ifdef HAVE_SYS_MOUNT_H
5080 #include <sys/mount.h>
5081 #endif
5082   main ()
5083   {
5084   struct statfs fsd;
5085   fsd.f_fsize = 0;
5086   exit (statfs (".", &fsd));
5087   }],
5088   fu_cv_sys_stat_statfs2_fsize=yes,
5089   fu_cv_sys_stat_statfs2_fsize=no,
5090   fu_cv_sys_stat_statfs2_fsize=no)])
5091   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5092   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5093     space=yes
5094         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5095   fi
5098 if test $space = no; then
5099   # Ultrix
5100   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5101   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5102   [AC_TRY_RUN([#include <sys/types.h>
5103 #ifdef HAVE_SYS_PARAM_H
5104 #include <sys/param.h>
5105 #endif
5106 #ifdef HAVE_SYS_MOUNT_H
5107 #include <sys/mount.h>
5108 #endif
5109 #ifdef HAVE_SYS_FS_TYPES_H
5110 #include <sys/fs_types.h>
5111 #endif
5112   main ()
5113   {
5114   struct fs_data fsd;
5115   /* Ultrix's statfs returns 1 for success,
5116      0 for not mounted, -1 for failure.  */
5117   exit (statfs (".", &fsd) != 1);
5118   }],
5119   fu_cv_sys_stat_fs_data=yes,
5120   fu_cv_sys_stat_fs_data=no,
5121   fu_cv_sys_stat_fs_data=no)])
5122   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5123   if test $fu_cv_sys_stat_fs_data = yes; then
5124     space=yes
5125     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5126   fi
5130 # As a gating factor for large file support, in order to
5131 # use <4GB files we must have the following minimal support
5132 # available.
5133 # long long, and a 64 bit off_t or off64_t.
5134 # If we don't have all of these then disable large
5135 # file support.
5137 AC_MSG_CHECKING([if large file support can be enabled])
5138 AC_TRY_COMPILE([
5139 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5140 #include <sys/types.h>
5141 #else
5142 __COMPILE_ERROR_
5143 #endif
5145 [int i],
5146 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5147 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5148         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5150 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5152 #################################################
5153 # check for cluster extensions
5155 CTDB_CFLAGS=""
5156 AC_SUBST(CTDB_CFLAGS)
5157 AC_ARG_WITH(ctdb,
5158 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
5159 [ case "$withval" in
5160   yes|no)
5161     AC_MSG_WARN([--with-ctdb called without argument])
5162     ;;
5163   *)
5164     CTDB_CPPFLAGS="-I$withval/include"
5165     ;;
5166   esac])
5168 SAVED_CPPFLAGS="$CPPFLAGS"
5169 CPPFLAGS="$CPPFLAGS $CTDB_CPPFLAGS"
5170 ctdb_broken="missing or broken headers"
5172 AC_CHECK_HEADERS(ctdb.h ctdb_private.h,,,[
5173 #include "confdefs.h"
5174 #define NO_CONFIG_H
5175 #include "replace.h"
5176 #include "system/wait.h"
5177 #include "system/network.h"
5178 #define private #error __USED_RESERVED_WORD_private__
5179 #include <talloc.h>
5180 #include <tdb.h>
5181 #include <ctdb.h>
5184 AC_HAVE_DECL(CTDB_CONTROL_TRANS2_COMMIT_RETRY,[
5185 #include "confdefs.h"
5186 #define NO_CONFIG_H
5187 #include "replace.h"
5188 #include "system/wait.h"
5189 #include "system/network.h"
5190 #include <talloc.h>
5191 #include <tdb.h>
5192 #include <ctdb.h>
5193 #include <ctdb_private.h>
5195 if test x"$ac_cv_have_CTDB_CONTROL_TRANS2_COMMIT_RETRY_decl" = x"yes"; then
5196         ctdb_broken=no
5197 else
5198         ctdb_broken="missing transaction support"
5201 AC_HAVE_DECL(CTDB_CONTROL_TRANS2_ACTIVE,[
5202 #include "confdefs.h"
5203 #define NO_CONFIG_H
5204 #include "replace.h"
5205 #include "system/wait.h"
5206 #include "system/network.h"
5207 #include <talloc.h>
5208 #include <tdb.h>
5209 #include <ctdb.h>
5210 #include <ctdb_private.h>
5212 if test x"$ac_cv_have_CTDB_CONTROL_TRANS2_ACTIVE_decl" = x"yes"; then
5213         ctdb_broken=no
5214 else
5215         ctdb_broken="transaction support too old"
5218 # in ctdb 1.0.57 ctdb_control_tcp was temparary renamed to ctdb_tcp_client
5219 AC_CHECK_TYPE(struct ctdb_tcp_client,[
5220         AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
5221 ],,[
5222 #include "confdefs.h"
5223 #define NO_CONFIG_H
5224 #include "replace.h"
5225 #include "system/wait.h"
5226 #include "system/network.h"
5227 #include <talloc.h>
5228 #include <tdb.h>
5229 #include <ctdb.h>
5230 #include <ctdb_private.h>
5233 AC_CHECK_TYPE(struct ctdb_control_tcp,[
5234         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5236         ctdb_broken="missing struct ctdb_control_tcp"
5238 #include "confdefs.h"
5239 #define NO_CONFIG_H
5240 #include "replace.h"
5241 #include "system/wait.h"
5242 #include "system/network.h"
5243 #include <talloc.h>
5244 #include <tdb.h>
5245 #include <ctdb.h>
5246 #include <ctdb_private.h>
5249 AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5250         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5251 ],,[
5252 #include "confdefs.h"
5253 #define NO_CONFIG_H
5254 #include "replace.h"
5255 #include "system/wait.h"
5256 #include "system/network.h"
5257 #include <talloc.h>
5258 #include <tdb.h>
5259 #include <ctdb.h>
5260 #include <ctdb_private.h>
5262 CPPFLAGS="$SAVED_CPPFLAGS"
5264 AC_MSG_CHECKING(cluster support)
5265 AC_ARG_WITH(cluster-support,
5266 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
5268 if test x"$with_cluster_support" = x ; then
5269         with_cluster_support="auto"
5272 if test x"$ac_cv_header_ctdb_private_h" != x"yes"; then
5273         if test "x$with_cluster_support" = "xyes"; then
5274                 AC_MSG_ERROR("ctdb_private.h is required for cluster support")
5275         fi
5276         with_cluster_support=no
5279 if test x"$ctdb_broken" != x"no"; then
5280         if test "x$with_cluster_support" = "xyes"; then
5281                 AC_MSG_ERROR(["cluster support: $ctdb_broken"])
5282         fi
5283         with_cluster_support=no
5286 if test "x$with_cluster_support" != "xno"; then
5287     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5288     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5289     AC_MSG_RESULT(yes)
5290 else
5291     AC_MSG_RESULT(no)
5294 #################################################
5295 # check for ACL support
5297 AC_MSG_CHECKING(whether to support ACLs)
5298 AC_ARG_WITH(acl-support,
5299 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5300 [ case "$withval" in
5301         yes|no)
5302                 with_acl_support="$withval"
5303                 ;;
5304   esac ])
5306 if test x"$with_acl_support" = x ; then
5307         with_acl_support="auto"
5310 AC_MSG_RESULT($with_acl_support)
5312 if test x"$with_acl_support" = x"no"; then
5313         AC_MSG_RESULT(Disabling ACL support)
5314         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5315 else
5316         AC_MSG_NOTICE(checking whether ACL support is available:)
5317         case "$host_os" in
5318         *sysv5*)
5319                 AC_MSG_NOTICE(Using UnixWare ACLs)
5320                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5321                 default_static_modules="$default_static_modules vfs_solarisacl"
5322                 ;;
5323         *solaris*)
5324                 AC_MSG_NOTICE(Using solaris ACLs)
5325                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5326                 ACL_LIBS="$ACL_LIBS -lsec"
5327                 default_static_modules="$default_static_modules vfs_solarisacl"
5328                 ;;
5329         *hpux*)
5330                 AC_MSG_NOTICE(Using HPUX ACLs)
5331                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5332                 default_static_modules="$default_static_modules vfs_hpuxacl"
5333                 ;;
5334         *irix*)
5335                 AC_MSG_NOTICE(Using IRIX ACLs)
5336                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5337                 default_static_modules="$default_static_modules vfs_irixacl"
5338                 ;;
5339         *aix*)
5340                 AC_MSG_NOTICE(Using AIX ACLs)
5341                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5342                 default_static_modules="$default_static_modules vfs_aixacl"
5343                 ;;
5344         *osf*)
5345                 AC_MSG_NOTICE(Using Tru64 ACLs)
5346                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5347                 ACL_LIBS="$ACL_LIBS -lpacl"
5348                 default_static_modules="$default_static_modules vfs_tru64acl"
5349                 ;;
5350         *darwin*)
5351                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5352                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5353                 ;;
5354         *)
5355                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5356                 case "$host_os" in
5357                 *linux*)
5358                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5359                         ;;
5360                 esac
5361                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5362                         acl_LIBS=$LIBS
5363                         LIBS="$LIBS $ACL_LIBS"
5364                         AC_TRY_LINK([
5365                                 #include <sys/types.h>
5366                                 #include <sys/acl.h>
5367                         ],[
5368                                 acl_t acl;
5369                                 int entry_id;
5370                                 acl_entry_t *entry_p;
5371                                 return acl_get_entry(acl, entry_id, entry_p);
5372                         ],
5373                         [samba_cv_HAVE_POSIX_ACLS=yes],
5374                         [samba_cv_HAVE_POSIX_ACLS=no])
5375                         LIBS=$acl_LIBS
5376                 ])
5377                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5378                         AC_MSG_NOTICE(Using posix ACLs)
5379                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5380                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5381                                 acl_LIBS=$LIBS
5382                                 LIBS="$LIBS $ACL_LIBS"
5383                                 AC_TRY_LINK([
5384                                         #include <sys/types.h>
5385                                         #include <sys/acl.h>
5386                                 ],[
5387                                         acl_permset_t permset_d;
5388                                         acl_perm_t perm;
5389                                         return acl_get_perm_np(permset_d, perm);
5390                                 ],
5391                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5392                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5393                                 LIBS=$acl_LIBS
5394                         ])
5395                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5396                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5397                         fi
5398                         default_static_modules="$default_static_modules vfs_posixacl"
5399                 else
5400                         AC_MSG_NOTICE(ACL support is not avaliable)
5401                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5402                 fi
5403                 ;;
5404         esac
5405 fi # with_acl_support
5409 #################################################
5410 # check for AIO support
5412 AC_MSG_CHECKING(whether to support asynchronous io)
5413 AC_ARG_WITH(aio-support,
5414 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5415 [ case "$withval" in
5416   yes)
5418         AC_MSG_RESULT(yes)
5419         case "$host_os" in
5420         *)
5421                 AIO_LIBS=$LIBS
5422                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5423                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5424                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5425                 aio_LIBS=$LIBS
5426                 LIBS=$AIO_LIBS
5427                 AC_TRY_LINK([#include <sys/types.h>
5428 #include <aio.h>],
5429 [ struct aiocb a; return aio_read(&a);],
5430 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5431                 LIBS=$aio_LIBS])
5432                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5433                 aio_LIBS=$LIBS
5434                 LIBS=$AIO_LIBS
5435                 AC_TRY_LINK([#include <sys/types.h>
5436 #include <aio.h>],
5437 [ struct aiocb64 a; return aio_read64(&a);],
5438 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5439                 LIBS=$aio_LIBS])
5440                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5441                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5442                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5443                         LIBS=$AIO_LIBS
5444                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5445                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5446                         LIBS=$AIO_LIBS
5447                 fi
5449                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5450                         AC_MSG_CHECKING(for aio_read)
5451                         AC_LINK_IFELSE([#include <aio.h>
5452 int main() { struct aiocb a; return aio_read(&a); }],
5453 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5454 [AC_MSG_RESULT(no)])
5456                         AC_MSG_CHECKING(for aio_write)
5457                         AC_LINK_IFELSE([#include <aio.h>
5458 int main() { struct aiocb a; return aio_write(&a); }],
5459 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5460 [AC_MSG_RESULT(no)])
5462                         AC_MSG_CHECKING(for aio_fsync)
5463                         AC_LINK_IFELSE([#include <aio.h>
5464 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5465 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5466 [AC_MSG_RESULT(no)])
5468                         AC_MSG_CHECKING(for aio_return)
5469                         AC_LINK_IFELSE([#include <aio.h>
5470 int main() { struct aiocb a; return aio_return(&a); }],
5471 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5472 [AC_MSG_RESULT(no)])
5474                         AC_MSG_CHECKING(for aio_error)
5475                         AC_LINK_IFELSE([#include <aio.h>
5476 int main() { struct aiocb a; return aio_error(&a); }],
5477 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5478 [AC_MSG_RESULT(no)])
5480                         AC_MSG_CHECKING(for aio_cancel)
5481                         AC_LINK_IFELSE([#include <aio.h>
5482 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5483 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5484 [AC_MSG_RESULT(no)])
5486                         AC_MSG_CHECKING(for aio_suspend)
5487                         AC_LINK_IFELSE([#include <aio.h>
5488 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5489 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5490 [AC_MSG_RESULT(no)])
5491                 fi
5493                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5494                         AC_MSG_CHECKING(for aio_read64)
5495                         AC_LINK_IFELSE([#include <aio.h>
5496 int main() { struct aiocb a; return aio_read64(&a); }],
5497 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5498 [AC_MSG_RESULT(no)])
5500                         AC_MSG_CHECKING(for aio_write64)
5501                         AC_LINK_IFELSE([#include <aio.h>
5502 int main() { struct aiocb a; return aio_write64(&a); }],
5503 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5504 [AC_MSG_RESULT(no)])
5506                         AC_MSG_CHECKING(for aio_fsync64)
5507                         AC_LINK_IFELSE([#include <aio.h>
5508 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5509 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5510 [AC_MSG_RESULT(no)])
5512                         AC_MSG_CHECKING(for aio_return64)
5513                         AC_LINK_IFELSE([#include <aio.h>
5514 int main() { struct aiocb a; return aio_return64(&a); }],
5515 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5516 [AC_MSG_RESULT(no)])
5518                         AC_MSG_CHECKING(for aio_error64)
5519                         AC_LINK_IFELSE([#include <aio.h>
5520 int main() { struct aiocb a; return aio_error64(&a); }],
5521 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5522 [AC_MSG_RESULT(no)])
5524                         AC_MSG_CHECKING(for aio_cancel64)
5525                         AC_LINK_IFELSE([#include <aio.h>
5526 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5527 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5528 [AC_MSG_RESULT(no)])
5530                         AC_MSG_CHECKING(for aio_suspend64)
5531                         AC_LINK_IFELSE([#include <aio.h>
5532 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5533 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5534 [AC_MSG_RESULT(no)])
5535                 fi
5536             ;;
5537         esac
5538         ;;
5539   *)
5540     AC_MSG_RESULT(no)
5541     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5542     ;;
5543   esac ],
5544   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5545   AC_MSG_RESULT(no)
5548 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5549         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5550                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5551                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5552         fi
5555 #################################################
5556 # check for sendfile support
5558 with_sendfile_support=yes
5559 AC_MSG_CHECKING(whether to check to support sendfile)
5560 AC_ARG_WITH(sendfile-support,
5561 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5562 [ case "$withval" in
5563   yes)
5565         AC_MSG_RESULT(yes);
5567         case "$host_os" in
5568         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5569                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5570                 AC_TRY_LINK([#include <sys/sendfile.h>],
5572 int tofd, fromfd;
5573 off64_t offset;
5574 size_t total;
5575 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5577 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5579                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5580                 AC_TRY_LINK([#include <sys/sendfile.h>],
5582 int tofd, fromfd;
5583 off_t offset;
5584 size_t total;
5585 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5587 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5589 # Try and cope with broken Linux sendfile....
5590                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5591                 AC_TRY_LINK([\
5592 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5593 #undef _FILE_OFFSET_BITS
5594 #endif
5595 #include <sys/sendfile.h>],
5597 int tofd, fromfd;
5598 off_t offset;
5599 size_t total;
5600 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5602 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5604         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5605                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5606                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5607                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5608         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5609                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5610                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5611                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5612         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5613                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5614                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5615         else
5616                 AC_MSG_RESULT(no);
5617         fi
5619         ;;
5620         *freebsd* | *dragonfly* )
5621                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5622                 AC_TRY_LINK([\
5623 #include <sys/types.h>
5624 #include <unistd.h>
5625 #include <sys/socket.h>
5626 #include <sys/uio.h>],
5628         int fromfd, tofd, ret, total=0;
5629         off_t offset, nwritten;
5630         struct sf_hdtr hdr;
5631         struct iovec hdtrl;
5632         hdr.headers = &hdtrl;
5633         hdr.hdr_cnt = 1;
5634         hdr.trailers = NULL;
5635         hdr.trl_cnt = 0;
5636         hdtrl.iov_base = NULL;
5637         hdtrl.iov_len = 0;
5638         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5640 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5642         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5643                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5644                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5645                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5646         else
5647                 AC_MSG_RESULT(no);
5648         fi
5649         ;;
5651         *hpux*)
5652                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5653                 AC_TRY_LINK([\
5654 #include <sys/socket.h>
5655 #include <sys/uio.h>],
5657         int fromfd, tofd;
5658         size_t total=0;
5659         struct iovec hdtrl[2];
5660         ssize_t nwritten;
5661         off64_t offset;
5663         hdtrl[0].iov_base = 0;
5664         hdtrl[0].iov_len = 0;
5666         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5668 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5669         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5670                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5671                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5672                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5673         else
5674                 AC_MSG_RESULT(no);
5675         fi
5677                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5678                 AC_TRY_LINK([\
5679 #include <sys/socket.h>
5680 #include <sys/uio.h>],
5682         int fromfd, tofd;
5683         size_t total=0;
5684         struct iovec hdtrl[2];
5685         ssize_t nwritten;
5686         off_t offset;
5688         hdtrl[0].iov_base = 0;
5689         hdtrl[0].iov_len = 0;
5691         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5693 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5694         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5695                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5696                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5697                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5698         else
5699                 AC_MSG_RESULT(no);
5700         fi
5701         ;;
5703         *solaris*)
5704                 AC_CHECK_LIB(sendfile,sendfilev)
5705                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5706                 AC_TRY_LINK([\
5707 #include <sys/sendfile.h>],
5709         int sfvcnt;
5710         size_t xferred;
5711         struct sendfilevec vec[2];
5712         ssize_t nwritten;
5713         int tofd;
5715         sfvcnt = 2;
5717         vec[0].sfv_fd = SFV_FD_SELF;
5718         vec[0].sfv_flag = 0;
5719         vec[0].sfv_off = 0;
5720         vec[0].sfv_len = 0;
5722         vec[1].sfv_fd = 0;
5723         vec[1].sfv_flag = 0;
5724         vec[1].sfv_off = 0;
5725         vec[1].sfv_len = 0;
5726         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5728 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5730         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5731                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5732                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5733                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5734         else
5735                 AC_MSG_RESULT(no);
5736         fi
5738                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5739                 AC_TRY_LINK([\
5740 #include <sys/sendfile.h>],
5742         int sfvcnt;
5743         size_t xferred;
5744         struct sendfilevec vec[2];
5745         ssize_t nwritten;
5746         int tofd;
5748         sfvcnt = 2;
5750         vec[0].sfv_fd = SFV_FD_SELF;
5751         vec[0].sfv_flag = 0;
5752         vec[0].sfv_off = 0;
5753         vec[0].sfv_len = 0;
5755         vec[1].sfv_fd = 0;
5756         vec[1].sfv_flag = 0;
5757         vec[1].sfv_off = 0;
5758         vec[1].sfv_len = 0;
5759         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5761 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5763         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5764                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5765                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5766                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5767         else
5768                 AC_MSG_RESULT(no);
5769         fi
5770         ;;
5771         *aix*)
5772                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5773                 AC_TRY_LINK([\
5774 #include <sys/socket.h>],
5776         int fromfd, tofd;
5777         size_t total=0;
5778         struct sf_parms hdtrl;
5779         ssize_t nwritten;
5780         off64_t offset;
5782         hdtrl.header_data = 0;
5783         hdtrl.header_length = 0;
5784         hdtrl.file_descriptor = fromfd;
5785         hdtrl.file_offset = 0;
5786         hdtrl.file_bytes = 0;
5787         hdtrl.trailer_data = 0;
5788         hdtrl.trailer_length = 0;
5790         nwritten = send_file(&tofd, &hdtrl, 0);
5792 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5793         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5794                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5795                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5796                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5797         else
5798                 AC_MSG_RESULT(no);
5799         fi
5800         ;;
5801         *)
5802         ;;
5803         esac
5804         ;;
5805   *)
5806     AC_MSG_RESULT(no)
5807     ;;
5808   esac ],
5809   AC_MSG_RESULT(yes)
5812 ############################################
5813 # See if we have the Linux readahead syscall.
5815 AC_CACHE_CHECK([for Linux readahead],
5816                 samba_cv_HAVE_LINUX_READAHEAD,[
5817     AC_TRY_LINK([
5818 #if defined(HAVE_UNISTD_H)
5819 #include <unistd.h>
5820 #endif
5821 #include <fcntl.h>],
5822     [ssize_t err = readahead(0,0,0x80000);],
5823     samba_cv_HAVE_LINUX_READAHEAD=yes,
5824     samba_cv_HAVE_LINUX_READAHEAD=no)])
5826 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5827   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5828              [Whether Linux readahead is available])
5831 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
5833 ############################################
5834 # See if we have the posix_fadvise syscall.
5836 AC_CACHE_CHECK([for posix_fadvise],
5837                 samba_cv_HAVE_POSIX_FADVISE,[
5838     AC_TRY_LINK([
5839 #if defined(HAVE_UNISTD_H)
5840 #include <unistd.h>
5841 #endif
5842 #include <fcntl.h>],
5843     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5844     samba_cv_HAVE_POSIX_FADVISE=yes,
5845     samba_cv_HAVE_POSIX_FADVISE=no)])
5847 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5848   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5849              [Whether posix_fadvise is available])
5852 ############################################
5853 # See if we have the Linux splice syscall.
5855 case "$host_os" in
5856 *linux*)
5857 AC_CACHE_CHECK([for Linux splice],
5858                 samba_cv_HAVE_LINUX_SPLICE,[
5859     AC_TRY_LINK([
5860 #if defined(HAVE_UNISTD_H)
5861 #include <unistd.h>
5862 #endif
5863 #include <fcntl.h>],
5864     [long ret = splice(0,0,1,0,400,0);],
5865     samba_cv_HAVE_LINUX_SPLICE=yes,
5866     samba_cv_HAVE_LINUX_SPLICE=no)])
5869 samba_cv_HAVE_LINUX_SPLICE=no
5871 esac
5873 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
5874   AC_DEFINE(HAVE_LINUX_SPLICE,1,
5875              [Whether Linux splice is available])
5878 AC_HAVE_DECL(splice, [#include <fcntl.h>])
5880 ############################################
5881 # See if we have the a broken readlink syscall.
5883 AC_CACHE_CHECK([for a broken readlink syscall],samba_cv_HAVE_BROKEN_READLINK,[
5884 AC_TRY_RUN([#include "${srcdir-.}/../tests/readlink.c"],
5885         samba_cv_HAVE_BROKEN_READLINK=no,samba_cv_HAVE_BROKEN_READLINK=yes,samba_cv_HAVE_BROKEN_READLINK=cross)
5887 if test x"$samba_cv_HAVE_BROKEN_READLINK" = x"yes"; then
5888         AC_DEFINE(HAVE_BROKEN_READLINK,1,[Whether the readlink syscall is broken])
5891 #################################################
5892 # Check whether winbind is supported on this platform.  If so we need to
5893 # build and install client programs, sbin programs and shared libraries
5895 AC_MSG_CHECKING(whether to build winbind)
5897 # Initially, the value of $host_os decides whether winbind is supported
5899 HAVE_WINBIND=yes
5900 HAVE_WBCLIENT=no
5902 # Define external wbclient library to link against.  This disables winbind.
5903 # We define this here so --with-winbind can override it.
5904 AC_ARG_WITH(wbclient,
5905 [AS_HELP_STRING([--with-wbclient], [Use external wbclient (optional)])],
5907   case "$withval" in
5908         no)
5909                 HAVE_WBCLIENT=no
5910                 ;;
5911         yes)
5912                 HAVE_WBCLIENT=yes
5913                 HAVE_WINBIND=no
5914                 ;;
5915         *)
5916                 HAVE_WBCLIENT=yes
5917                 HAVE_WINBIND=no
5918                 WBCLIENT_INCLUDES="-I$withval/include"
5919                 WBCLIENT_LDFLAGS="-L$withval/lib"
5920                 ;;
5921   esac ],
5924 AC_SUBST(WBCLIENT_INCLUDES)
5925 AC_SUBST(WBCLIENT_LDFLAGS)
5926 AC_SUBST(WBCLIENT_LIBS)
5929 # Define the winbind shared library name and any specific linker flags
5930 # it needs to be built with.
5932 WINBIND_NSS="../nsswitch/libnss_winbind.$SHLIBEXT"
5933 WINBIND_WINS_NSS="../nsswitch/libnss_wins.$SHLIBEXT"
5934 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5935 NSSSONAMEVERSIONSUFFIX=""
5936 WINBIND_NSS_PTHREAD=""
5938 case "$host_os" in
5939         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5940                 NSSSONAMEVERSIONSUFFIX=".2"
5941                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_linux.o"
5942                 ;;
5943         *freebsd[[5-9]]*)
5944                 # FreeBSD winbind client is implemented as a wrapper around
5945                 # the Linux version.
5946                 NSSSONAMEVERSIONSUFFIX=".1"
5947                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_freebsd.o \
5948                     ../nsswitch/winbind_nss_linux.o"
5949                 WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
5950                 WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
5951                 ;;
5953         *netbsd*[[3-9]]*)
5954                 # NetBSD winbind client is implemented as a wrapper
5955                 # around the Linux version. It needs getpwent_r() to
5956                 # indicate libc's use of the correct nsdispatch API.
5957                 #
5958                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5959                         WINBIND_NSS_EXTRA_OBJS="\
5960                             ../nsswitch/winbind_nss_netbsd.o \
5961                             ../nsswitch/winbind_nss_linux.o"
5962                         WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
5963                         WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
5964                 else
5965                         HAVE_WINBIND=no
5966                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5967                 fi
5968                 ;;
5969         *irix*)
5970                 # IRIX has differently named shared libraries
5971                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_irix.o"
5972                 WINBIND_NSS="../nsswitch/libns_winbind.$SHLIBEXT"
5973                 WINBIND_WINS_NSS="../nsswitch/libns_wins.$SHLIBEXT"
5974                 ;;
5975         *solaris*)
5976                 # Solaris winbind client is implemented as a wrapper around
5977                 # the Linux version.
5978                 NSSSONAMEVERSIONSUFFIX=".1"
5979                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o \
5980                     ../nsswitch/winbind_nss_linux.o"
5981                 ;;
5982         *hpux11*)
5983                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o"
5984                 ;;
5985         *aix*)
5986                 # AIX has even differently named shared libraries.  No
5987                 # WINS support has been implemented yet.
5988                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_aix.o"
5989                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5990                 WINBIND_NSS="../nsswitch/WINBIND"
5991                 WINBIND_WINS_NSS=""
5992                 ;;
5993         *)
5994                 HAVE_WINBIND=no
5995                 winbind_no_reason=", unsupported on $host_os"
5996                 ;;
5997 esac
5999 # Check the setting of --with-winbind
6001 AC_ARG_WITH(winbind,
6002 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
6004   case "$withval" in
6005         yes)
6006                 HAVE_WINBIND=yes
6007                 HAVE_WBCLIENT=no
6008                 ;;
6009         no)
6010                 HAVE_WINBIND=no
6011                 winbind_reason=""
6012                 ;;
6013   esac ],
6016 # We need unix domain sockets for winbind
6018 if test x"$HAVE_WINBIND" = x"yes"; then
6019         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
6020                 winbind_no_reason=", no unix domain socket support on $host_os"
6021                 HAVE_WINBIND=no
6022         fi
6025 # Display test results
6027 if test x"$HAVE_WINBIND" = x"no"; then
6028         WINBIND_NSS=""
6029         WINBIND_WINS_NSS=""
6031 if test x"$HAVE_WBCLIENT" = x"yes"; then
6032         AC_CHECK_LIB(wbclient, wbcInterfaceDetails,
6033                      [LIBWBCLIENT_LIBS="-lwbclient"], AC_MSG_ERROR([Could not find wbclient]), [$WBCLIENT_LDFLAGS])
6034         LIBWBCLIENT_LIBS="$LIBWBCLIENT_LIBS $WBCLIENT_LDFLAGS"
6035         AC_MSG_RESULT(yes)
6036         AC_DEFINE(WITH_WINBIND,1,[Whether to link to wbclient])
6037         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6038 else
6039         if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
6040                 BUILD_LIBWBCLIENT_SHARED=no
6041         else
6042                 BUILD_LIBWBCLIENT_SHARED=yes
6043         fi
6045         LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
6046         LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
6047         LIBWBCLIENT_SOVER=0
6048         if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
6049                 NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6050                 ## Only worry about libwbclient if we have shared
6051                 # library support
6052                 LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
6053                 LIBWBCLIENT=libwbclient
6054                 INSTALL_LIBWBCLIENT=installlibwbclient
6055                 UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
6056                 LIBWBCLIENT_LIBS="-lwbclient"
6057         else
6058                 LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
6059                 LIBWBCLIENT_LIBS=$LIBWBCLIENT_STATIC_TARGET
6060         fi
6063 if test x"$HAVE_WINBIND" = x"yes"; then
6064         AC_MSG_RESULT(yes)
6065         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6067         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6068         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6069         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6070                 PAM_MODULES="$PAM_MODULES pam_winbind"
6071                 INSTALL_PAM_MODULES="installpammodules"
6072                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6073         fi
6074 else
6075         AC_MSG_RESULT(no$winbind_no_reason)
6078 AC_CHECK_LIB(pthread, pthread_mutex_lock, [WINBIND_NSS_PTHREAD="-lpthread"
6079                         AC_DEFINE(HAVE_PTHREAD, 1, [whether pthread exists])
6080                         samba_cv_HAVE_PTHREAD=yes],
6081                         samba_cv_HAVE_PTHREAD=no)
6083 AC_SUBST(WINBIND_NSS_PTHREAD)
6084 AC_SUBST(WINBIND_NSS)
6085 AC_SUBST(WINBIND_WINS_NSS)
6086 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
6087 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
6088 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
6090 AC_SUBST(WINBIND_KRB5_LOCATOR)
6092 # Solaris 10 does have new member in nss_XbyY_key
6093 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6094                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6095                 [#include <nss_dbdefs.h>])
6097 # Solaris has some extra fields in struct passwd that need to be
6098 # initialised otherwise nscd crashes.
6100 AC_CHECK_MEMBER(struct passwd.pw_comment,
6101                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6102                 [#include <pwd.h>])
6104 AC_CHECK_MEMBER(struct passwd.pw_age,
6105                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6106                 [#include <pwd.h>])
6108 # AIX 4.3.x and 5.1 do not have as many members in
6109 # struct secmethod_table as AIX 5.2
6110 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6111        [#include <usersec.h>])
6112 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6113        [#include <usersec.h>])
6115 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6116 AC_TRY_COMPILE([#include <sys/types.h>
6117 #include <sys/socket.h>],
6118 [struct ucred cred;
6119  socklen_t cred_len;
6120  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6122 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6123 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6124     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6128 #################################################
6129 # Check to see if we should use the included popt
6131 AC_ARG_WITH(included-popt,
6132 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
6134   case "$withval" in
6135         yes)
6136                 INCLUDED_POPT=yes
6137                 ;;
6138         no)
6139                 INCLUDED_POPT=no
6140                 ;;
6141   esac ],
6143 if test x"$INCLUDED_POPT" != x"yes"; then
6144     AC_CHECK_LIB(popt, poptGetContext,
6145                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6148 AC_MSG_CHECKING(whether to use included popt)
6149 if test x"$INCLUDED_POPT" = x"yes"; then
6150     AC_MSG_RESULT(yes)
6151     BUILD_POPT='$(POPT_OBJ)'
6152     POPTLIBS='$(POPT_OBJ)'
6153     FLAGS1="-I\$(srcdir)/../lib/popt"
6154 else
6155     AC_MSG_RESULT(no)
6156         BUILD_POPT=""
6157     POPTLIBS="-lpopt"
6159 AC_SUBST(BUILD_POPT)
6160 AC_SUBST(POPTLIBS)
6161 AC_SUBST(FLAGS1)
6163 #################################################
6164 # Check if user wants DNS service discovery support
6166 AC_ARG_ENABLE(dnssd,
6167 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=no)])])
6169 AC_SUBST(DNSSD_LIBS)
6170 if test x"$enable_dnssd" = x"yes"; then
6171     have_dnssd_support=yes
6173     AC_CHECK_HEADERS(dns_sd.h)
6174     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6175         have_dnssd_support=no
6176     fi
6178     # On Darwin the DNSSD API is in libc, but on other platforms it's
6179     # probably in -ldns_sd
6180     AC_CHECK_FUNCS(DNSServiceRegister)
6181     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6182     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6183             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6184         have_dnssd_support=no
6185     fi
6187     if test x"$have_dnssd_support" = x"yes"; then
6188         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6189                 [Whether to enable DNS service discovery support])
6190     else
6191         if test x"$enable_dnssd" = x"yes"; then
6192             AC_MSG_ERROR(DNS service discovery support not available)
6193         fi
6194     fi
6198 #################################################
6199 # Check if user wants avahi support
6201 AC_ARG_ENABLE(avahi,
6202 [AS_HELP_STRING([--enable-avahi], [Enable Avahi support (default=auto)])])
6204 if test x"$enable_avahi" != x"no"; then
6205     have_avahi_support=yes
6207     AC_CHECK_HEADERS(avahi-common/watch.h)
6208     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6209         have_avahi_support=no
6210     fi
6212     AC_CHECK_HEADERS(avahi-client/client.h)
6213     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6214         have_avahi_support=no
6215     fi
6217     save_LIBS="$LIBS"
6218     AC_CHECK_LIB(avahi-client, avahi_client_new,[have_avahi_client_new=yes])
6219     AC_CHECK_LIB(avahi-common, avahi_strerror,[have_avahi_strerror=yes])
6220     LIBS="$save_LIBS"
6222     if test x"$have_avahi_client_new" != x"yes" -o \
6223        x"$have_avahi_strerror" != x"yes" ; then
6224         have_avahi_support=no
6225     fi
6227     if test x"$have_avahi_support" = x"yes"; then
6228         AC_SUBST(AVAHI_LIBS, "-lavahi-client -lavahi-common")
6229         AC_DEFINE(WITH_AVAHI_SUPPORT, 1,
6230                 [Whether to enable avahi support])
6231         AC_SUBST(AVAHI_OBJ, "lib/avahi.o smbd/avahi_register.o")
6232     else
6233         if test x"$enable_avahi" = x"yes"; then
6234             AC_MSG_ERROR(avahi support not available)
6235         fi
6236     fi
6239 #################################################
6240 # Check if user wants pthreadpool support
6242 AC_ARG_ENABLE(pthreadpool,
6243 [AS_HELP_STRING([--enable-pthreadpool], [Enable pthreads pool helper support (default=auto)])])
6245 if test x"$enable_pthreadpool" != x"no" -a x"$samba_cv_HAVE_PTHREAD" = x"yes"; then
6246     AC_TRY_LINK([#include "pthread.h"],
6247     [pthread_create(NULL, NULL, NULL, NULL)],
6248                     ,LIBS="$LIBS -lpthread")
6249     AC_DEFINE(WITH_PTHREADPOOL, 1, [Whether to include pthreadpool helpers])
6250     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool.o")
6253 #################################################
6254 # Check to see if we should use the included iniparser
6256 AC_ARG_WITH(included-iniparser,
6257 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6259   case "$withval" in
6260         yes)
6261                 INCLUDED_INIPARSER=yes
6262                 ;;
6263         no)
6264                 INCLUDED_INIPARSER=no
6265                 ;;
6266   esac ],
6268 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6269     AC_CHECK_LIB(iniparser, iniparser_load,
6270                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6273 AC_MSG_CHECKING(whether to use included iniparser)
6274 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6275     AC_MSG_RESULT(yes)
6276     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6277         INIPARSERLIBS=""
6278     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
6279 else
6280     AC_MSG_RESULT(no)
6281         BUILD_INIPARSER=""
6282     INIPARSERLIBS="-liniparser"
6284 AC_SUBST(BUILD_INIPARSER)
6285 AC_SUBST(INIPARSERLIBS)
6286 AC_SUBST(FLAGS1)
6290 # Checks for the vfs_fileid module
6291 # Start
6292 AC_CHECK_FUNC(getmntent)
6294 AC_CHECK_HEADERS(sys/statfs.h)
6296 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
6297 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6298              AC_TRY_RUN([
6299                 #include <sys/types.h>
6300                 #include <sys/statfs.h>
6301                 int main(void)
6302                 {
6303                         struct statfs fsd;
6304                         fsid_t fsid = fsd.f_fsid;
6305                         return statfs (".", &fsd);
6306                 }],
6307                 vfsfileid_cv_statfs=yes,
6308                 vfsfileid_cv_statfs=no,
6309                 vfsfileid_cv_statfs=cross)
6311 AC_MSG_RESULT($vfsfileid_cv_statfs)
6313 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6314         x"$vfsfileid_cv_statfs" = x"yes"; then
6315         default_shared_modules="$default_shared_modules vfs_fileid"
6317 # End
6318 # Checks for the vfs_fileid module
6321 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6323         eval MODULE_DEFAULT_$i=STATIC
6324 done
6326 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6328         dnl Fall back to static if we cannot build shared libraries
6329         eval MODULE_DEFAULT_$i=STATIC
6331         if test $BLDSHARED = true; then
6332                 eval MODULE_DEFAULT_$i=SHARED
6333         fi
6334 done
6336 dnl Always build these modules static
6337 MODULE_rpc_spoolss=STATIC
6338 MODULE_rpc_srvsvc=STATIC
6339 MODULE_idmap_tdb=STATIC
6340 MODULE_idmap_passdb=STATIC
6341 MODULE_idmap_nss=STATIC
6343 MODULE_nss_info_template=STATIC
6345 AC_ARG_WITH(static-modules,
6346 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6347 [ if test $withval; then
6348         for i in `echo $withval | sed -e 's/,/ /g'`
6349         do
6350                 eval MODULE_$i=STATIC
6351         done
6352 fi ])
6354 AC_ARG_WITH(shared-modules,
6355 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6356 [ if test $withval; then
6357         for i in `echo $withval | sed -e 's/,/ /g'`
6358         do
6359                         eval MODULE_$i=SHARED
6360         done
6361 fi ])
6363 if test x"$MODULE_DEFAULT_vfs_notify_fam" = xSTATIC -o \
6364                 x"$MODULE_vfs_notify_fam" = xSTATIC ; then
6365         SMBD_FAM_LIBS="$SMB_FAM_LIBS"
6366         AC_SUBST(SMBD_FAM_LIBS)
6369 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
6370                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6371 SMB_MODULE(pdb_ads, passdb/pdb_ads.o \$(TLDAP_OBJ), "bin/ads.$SHLIBEXT", PDB)
6372 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6373 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6374 SMB_MODULE(pdb_wbc_sam, passdb/pdb_wbc_sam.o, "bin/wbc_sam.$SHLIBEXT", PDB)
6375 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6378 SMB_MODULE(rpc_lsarpc, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
6379 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
6380 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
6381 SMB_MODULE(rpc_dssetup, \$(RPC_DSSETUP_OBJ), "bin/librpc_dssetup.$SHLIBEXT", RPC)
6382 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6383 SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC)
6384 SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC)
6385 SMB_MODULE(rpc_netlogon, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6386 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6387 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc.$SHLIBEXT", RPC)
6388 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6389 SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC)
6390 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6391 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
6392 SMB_SUBSYSTEM(RPC,smbd/process.o)
6394 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6395 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6396 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6397 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6398 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6399 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6400 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6401 SMB_MODULE(idmap_hash, \$(IDMAP_HASH_OBJ), "bin/hash.$SHLIBEXT", IDMAP)
6402 SMB_MODULE(idmap_adex, \$(IDMAP_ADEX_OBJ), "bin/adex.$SHLIBEXT", IDMAP)
6403 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6405 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6406 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6408 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6409 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6410 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6411 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6412 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6414 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6415 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6416 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6417 SMB_MODULE(auth_wbc, \$(AUTH_WBC_OBJ), "bin/wbc.$SHLIBEXT", AUTH)
6418 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6419 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6420 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6421 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6422 SMB_MODULE(auth_netlogond, \$(AUTH_NETLOGOND_OBJ), "bin/netlogond.$SHLIBEXT", AUTH)
6423 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6425 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6426 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6427 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6428 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6429 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6430 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6431 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6432 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6433 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6434 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6435 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6436 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6437 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6438 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6439 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6440 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6441 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6442 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6443 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6444 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6445 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6446 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6447 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6448 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6449 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6450 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6451 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6452 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6453 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6454 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6455 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6456 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6457 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6458 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6459 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6460 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6461 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6462 SMB_MODULE(vfs_acl_xattr, \$(VFS_ACL_XATTR_OBJ), "bin/acl_xattr.$SHLIBEXT", VFS)
6463 SMB_MODULE(vfs_acl_tdb, \$(VFS_ACL_TDB_OBJ), "bin/acl_tdb.$SHLIBEXT", VFS)
6464 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6465 SMB_MODULE(vfs_onefs, \$(VFS_ONEFS), "bin/onefs.$SHLIBEXT", VFS)
6466 SMB_MODULE(vfs_onefs_shadow_copy, \$(VFS_ONEFS_SHADOW_COPY), "bin/onefs_shadow_copy.$SHLIBEXT", VFS)
6467 SMB_MODULE(vfs_dirsort, \$(VFS_DIRSORT_OBJ), "bin/dirsort.$SHLIBEXT", VFS)
6469 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6471 SMB_MODULE(perfcount_onefs, \$(PERFCOUNT_ONEFS), "bin/pc_onefs.$SHLIBEXT", PERFCOUNT)
6472 SMB_MODULE(perfcount_test, \$(PERFCOUNT_TEST), "bin/pc_test.$SHLIBEXT", PERFCOUNT)
6473 SMB_SUBSYSTEM(PERFCOUNT,smbd/perfcount.o)
6475 SMB_MODULE(gpext_registry, libgpo/gpext/registry.o, "bin/registry.$SHLIBEXT", GPEXT)
6476 SMB_MODULE(gpext_scripts, libgpo/gpext/scripts.o, "bin/scripts.$SHLIBEXT", GPEXT)
6477 SMB_MODULE(gpext_security, libgpo/gpext/security.o, "bin/security.$SHLIBEXT", GPEXT)
6478 SMB_SUBSYSTEM(GPEXT, libgpo/gpext/gpext.o)
6480 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6482 #################################################
6483 # do extra things if we are running insure
6485 if test "${ac_cv_prog_CC}" = "insure"; then
6486         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6489 #################################################
6490 # If run from the build farm, enable NASTY hacks
6491 #################################################
6492 AC_MSG_CHECKING(whether to enable build farm hacks)
6493 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6494         AC_MSG_RESULT(yes)
6495         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6496 else
6497         AC_MSG_RESULT(no)
6500 #################################################
6501 # check for bad librt/libpthread interactions
6503 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6504     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6505     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6506     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6508 SMB_IF_RTSIGNAL_BUG(
6509         [
6510             # Have RT_SIGNAL bug, need to check whether the problem will
6511             # affect anything we have configured.
6513             rt_do_error=no
6514             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6515                 if test x"$rt_signal_lease_ok" = x"no" ; then
6516                     rt_do_error=yes
6517                 fi
6518             fi
6520             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6521                 if test x"$rt_signal_notify_ok" = x"no" ; then
6522                     rt_do_error=yes
6523                 fi
6524             fi
6526             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6527                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6528                 if test x"$rt_signal_aio_ok" = x"no" ; then
6529                     rt_do_error=yes
6530                 fi
6531             fi
6533             if test x"$rt_do_error" = x"yes" ; then
6534                 SMB_IS_LIBPTHREAD_LINKED(
6535                     [
6536                         cat<<MSG
6538 *** On this platforms, linking Samba against pthreads causes problems
6539 *** with the oplock and change notification mechanisms. You may be
6540 *** using pthreads as a side-effect of using the --with-aio-support
6541 *** or --with-profiling-data options. Please remove these and try again.
6544                     ],
6545                     [
6546                         cat<<MSG
6548 *** On this platform, the oplock and change notification mechanisms do not
6549 *** appear to work. Please report this problem to samba-technical@samba.org
6550 *** and attach the config.log file from this directory.
6553                     ])
6554                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6555             fi
6556         ],
6557         [
6558             # no RT_SIGNAL bug, we are golden
6559             SMB_IS_LIBPTHREAD_LINKED(
6560                 [
6561                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6562                 ])
6564         ],
6565         [
6566             # cross compiling, I hope you know what you are doing
6567             true
6568         ])
6572 AC_ARG_ENABLE(merged-build, 
6573 [AS_HELP_STRING([--enable-merged-build], [Build Samba 4 as well])], 
6574 [ enable_merged_build=$enableval ], [ enable_merged_build=auto ])
6576 if test x"$enable_merged_build" = x"yes" -a \
6577         x"$merged_build_possible" = x"no" ; then
6578         AC_MSG_ERROR(Merged build required but not possible)
6581 m4_include(../lib/zlib/zlib.m4)
6583 if test x$enable_merged_build = xauto; then
6584         # Check for python
6585         m4_include(../m4/check_python.m4)
6586         AC_SAMBA_PYTHON_DEVEL([true], [merged_build_possible=no])
6588         AC_MSG_CHECKING([whether it would be possible to do a merged build])
6589         AC_MSG_RESULT([$merged_build_possible])
6591         # Enable merged build automatically if possible, when in developer mode
6592         if test "x$developer" = xyes; then
6593                 enable_merged_build=$merged_build_possible
6594         fi
6597 if test x$enable_merged_build = xyes; then
6598         MERGED_BUILD=1
6599         saved_USESHARED="$USESHARED"
6600         USESHARED="false"
6601         m4_include(samba4.m4)
6602         USESHARED="$saved_USESHARED"
6605 AC_SUBST(ZLIB_LIBS)
6606 AC_SUBST(ZLIB_OBJS)
6607 AC_ZLIB([ZLIB_OBJS=""], [
6608         ZLIB_LIBS=""
6609         for o in adler32.o compress.o crc32.o gzio.o uncompr.o \
6610                      deflate.o trees.o zutil.o inflate.o infback.o \
6611                          inftrees.o inffast.o
6612         do
6613                 ZLIB_OBJS="$ZLIB_OBJS ../lib/zlib/$o"
6614         done
6615         CFLAGS="-I../lib/zlib $CFLAGS"
6618 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
6620 if test "x$enable_dmalloc" = xyes
6621 then
6622         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
6623         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
6624                   [Define to check invariants around some common functions])
6625         LIBS="$LIBS -ldmalloc"
6628 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6629 LIB_REMOVE_USR_LIB(LDFLAGS)
6630 LIB_REMOVE_USR_LIB(LIBS)
6632 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6633 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6634 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6636 #################################################
6637 # Display summary of libraries detected
6639 AC_MSG_RESULT([Using libraries:])
6640 AC_MSG_RESULT([    LIBS = $LIBS])
6641 if test x"$with_ads_support" != x"no"; then
6642     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6644 if test x"$with_ldap_support" != x"no"; then
6645     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6647 if test x"$with_dnsupdate_support" != x"no"; then
6648     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6650 if test x"$have_dnssd_support" != x"no"; then
6651     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6653 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6655 #################################################
6656 # final configure stuff
6658 AC_MSG_CHECKING([configure summary])
6659 AC_TRY_RUN([#include "${srcdir-.}/../tests/summary.c"],
6660            AC_MSG_RESULT(yes),
6661            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6662            AC_MSG_WARN([cannot run when cross-compiling]))
6664 dnl Merge in developer cflags from now on
6665 AC_SUBST(DEVELOPER_CFLAGS)
6666 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes" -o x"$picky_developer" = x"yes"; then
6667     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
6670 # Stuff the smbd-only libraries at the end of the smbd link
6671 # path (if we have them).
6672 SMBD_LIBS="$samba_dmapi_libs"
6673 AC_SUBST(SMBD_LIBS)
6675 CFLAGS="${CFLAGS} \$(FLAGS)"
6677 if test x$MERGED_BUILD != x1; then
6678         CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
6679 else
6680         if test x"$BLDSHARED" = x"true" ; then
6681                 LDFLAGS="$LDFLAGS -L./bin"
6682         fi
6685 AC_SUBST(MAKEFILE)
6686 if test x$samba_cv_gnu_make = xyes; then
6687         MAKEFILE=Makefile
6688 else
6689         # When we don't have GNU Make, generate a copy of Makefile.in 
6690         # that doesn't have the "include " statements but just includes 
6691         # the files verbatim.
6692         MAKEFILE=Makefile-noincludes
6693         $PERL ./script/expand-includes.pl Makefile.in > $MAKEFILE.in
6695 AC_OUTPUT($MAKEFILE
6696           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
6697           lib/netapi/examples/Makefile
6698           lib/netapi/tests/Makefile
6699           pkgconfig/smbclient.pc
6700           pkgconfig/wbclient.pc
6701           pkgconfig/netapi.pc
6702           pkgconfig/smbsharemodes.pc
6703           ../examples/libsmbclient/Makefile.internal
6704           )
6705 dnl If we had to expand the includes, make tsure the output file is moved back
6706 AC_OUTPUT_COMMANDS([
6707 if test x$MAKEFILE != Makefile; then
6708         mv $MAKEFILE Makefile
6712 #################################################
6713 # Print very concise instructions on building/use
6714 if test "x$enable_dmalloc" = xyes
6715 then
6716         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6717         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])