s3:registry: add an extra check for dsize==0 to regdb_fetch_keys_internal()
[Samba/fernandojvsilva.git] / source3 / configure.in
blob83ea8579e6ae65e3160b034b9ab94dd78a2aa81c
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(mlock munlock mlockall munlockall)
1070 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1071 AC_CHECK_HEADERS(sys/mman.h)
1072 # setbuffer, shmget, shm_open are needed for smbtorture
1073 AC_CHECK_FUNCS(shmget shm_open)
1074 AC_CHECK_FUNCS(gettext dgettext)
1075 AC_CHECK_FUNCS(bindtextdomain textdomain)
1076 AC_CHECK_FUNCS(strupr)
1078 # Find a method of generating a stack trace
1079 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1080 # libexecinfo provides backtrace_symbols on FreeBSD
1081 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
1082 AC_CHECK_FUNCS(backtrace_symbols)
1083 AC_CHECK_LIB(exc, trace_back_stack)
1085 # check for sysctlbyname for BSD systems
1086 AC_CHECK_FUNCS(sysctlbyname)
1088 #############################
1089 # check if building with gpfs
1090 AC_CHECK_HEADERS(gpfs_gpl.h)
1091 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
1092     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL headers are available])
1093     default_shared_modules="$default_shared_modules vfs_gpfs"
1096 #############################################
1097 # check if building on Isilon OneFS
1098 printf "%s" "checking for Isilon OneFS... "
1099 save_LIBS="$LIBS"
1100 LIBS="$LIBS -lisi_version"
1101 AC_TRY_LINK([#include <isi_version/isi_version.h>],
1102           [get_isilon_copyright()],
1103           samba_cv_HAVE_ONEFS=yes,
1104           samba_cv_HAVE_ONEFS=no)
1105 echo $samba_cv_HAVE_ONEFS
1106 if test x"$samba_cv_HAVE_ONEFS" = x"yes"; then
1107     AC_DEFINE(HAVE_ONEFS,1,[Whether building on Isilon OneFS])
1108     default_shared_modules="$default_shared_modules vfs_onefs vfs_onefs_shadow_copy perfcount_onefs"
1109     default_static_modules="$default_static_modules"
1110     ONEFS_LIBS="-lisi_acl -lisi_ecs -lisi_event -lisi_util"
1111     # Need to also add general libs for oplocks support
1112     save_LIBS="$save_LIBS -lisi_ecs -lisi_event -lisi_util -ldevstat"
1114 AC_SUBST(ONEFS_LIBS)
1115 LIBS="$save_LIBS"
1117 # Note that all the libunwind symbols in the API are defined to internal
1118 # platform-specific version, so we must include libunwind.h before checking
1119 # any of them.
1120 AC_MSG_CHECKING([for libunwind])
1121 save_LIBS=$LIBS
1123 UNWIND_ARCH="unknown"
1124 if test x"$UNAME_I" != x"unknown"; then
1125         UNWIND_ARCH="$UNAME_I"
1126 elif test x"$UNAME_M" != x"unknown"; then
1127         UNWIND_ARCH="$UNAME_M"
1128 elif test x"$UNAME_P" != x"unknown"; then
1129         UNWIND_ARCH="$UNAME_P"
1132 case "$UNWIND_ARCH" in
1133         unknown)
1134                 # This probably won't link without
1135                 # the platform-specific libunwind.
1136                 LIBS="$LIBS -lunwind"
1137                 ;;
1138         i386|i586|i686)
1139                 # Add the platform-specific libunwind module.
1140                 LIBS="$LIBS -lunwind -lunwind-x86"
1141                 ;;
1142         *)
1143                 # Add the platform-specific libunwind module.
1144                 # based on uname -i, uname -m or uname -p
1145                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1146                 ;;
1147 esac
1149 AC_TRY_LINK(
1150     [
1151 #ifdef HAVE_LIBUNWIND_H
1152 #include <libunwind.h>
1153 #endif
1154     ],
1155     [
1156         unw_context_t ctx; unw_cursor_t cur;
1157         char buf[256]; unw_word_t off;
1158         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1159         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1160     ],
1161     [
1162         AC_MSG_RESULT(yes)
1163         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1165         # If we have libunwind, test whether we also have libunwind-ptrace
1166         # which would let us unwind arbitrary processes.
1167         save_LIBS=$LIBS
1168         AC_CHECK_HEADERS(libunwind-ptrace.h)
1169         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1170             [
1171                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1172                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1173                     [Whether libunwind-ptrace.a is available.])
1174             ],
1175             [ LIBUNWIND_PTRACE="" ])
1177         LIBS=$save_LIBS
1178     ],
1179     [
1180         AC_MSG_RESULT(no)
1181         LIBS=$save_LIBS
1182     ])
1184 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1185 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1186     AC_CHECK_HEADERS(sys/ptrace.h)
1187     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1188     AC_TRY_LINK(
1189             [
1190 #if HAVE_SYS_TYPES_H
1191 #include <sys/types.h>
1192 #endif
1193 #if HAVE_SYS_PTRACE_H
1194 #include <sys/ptrace.h>
1195 #endif
1196             ],
1197             [
1198                 pid_t me = (pid_t)-1;
1199                 ptrace(PTRACE_ATTACH, me, 0, 0);
1200                 ptrace(PTRACE_DETACH, me, 0, 0);
1201                 return 0;
1202             ],
1203             [
1204                 AC_MSG_RESULT(yes)
1205                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1206                     [Whether the Linux ptrace(2) interface is available.])
1207             ],
1208             [
1209                 AC_MSG_RESULT(no)
1210                 LIBUNWIND_PTRACE=""
1211             ])
1214 AC_SUBST(LIBUNWIND_PTRACE)
1216 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1217 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1218 AC_CHECK_FUNCS(__getcwd _getcwd)
1219 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1220 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1221 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1222 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1223 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1224 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1225 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1226 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1227 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1228 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1229 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1230 AC_CHECK_FUNCS(prctl)
1232 AC_TRY_COMPILE([
1233 #ifdef HAVE_SYS_PRCTL_H
1234 #include <sys/prctl.h>
1235 #endif
1237 [int i; i = prtcl(0); ],
1238 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1243 case "$host_os" in
1244     *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1245        # glibc <= 2.3.2 has a broken getgrouplist
1246        AC_TRY_RUN([
1247 #include <unistd.h>
1248 #include <sys/utsname.h>
1249 main() {
1250        /* glibc up to 2.3 has a broken getgrouplist */
1251 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1252        int libc_major = __GLIBC__;
1253        int libc_minor = __GLIBC_MINOR__;
1255        if (libc_major < 2)
1256               exit(1);
1257        if ((libc_major == 2) && (libc_minor <= 3))
1258               exit(1);
1259 #endif
1260        exit(0);
1262 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1263        if test x"$linux_getgrouplist_ok" = x"yes"; then
1264           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1265        fi
1266        ;;
1267     *)
1268        AC_CHECK_FUNCS(getgrouplist)
1269        ;;
1270 esac
1273 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1276 if test x$ac_cv_func_stat64 = xno ; then
1277   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1278   AC_TRY_LINK([
1279 #if defined(HAVE_UNISTD_H)
1280 #include <unistd.h>
1281 #endif
1282 #include <sys/stat.h>
1283 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1284   AC_MSG_RESULT([$ac_cv_func_stat64])
1285   if test x$ac_cv_func_stat64 = xyes ; then
1286     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1287   fi
1290 if test x$ac_cv_func_lstat64 = xno ; then
1291   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1292   AC_TRY_LINK([
1293 #if defined(HAVE_UNISTD_H)
1294 #include <unistd.h>
1295 #endif
1296 #include <sys/stat.h>
1297 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1298   AC_MSG_RESULT([$ac_cv_func_lstat64])
1299   if test x$ac_cv_func_lstat64 = xyes ; then
1300     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1301   fi
1304 if test x$ac_cv_func_fstat64 = xno ; then
1305   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1306   AC_TRY_LINK([
1307 #if defined(HAVE_UNISTD_H)
1308 #include <unistd.h>
1309 #endif
1310 #include <sys/stat.h>
1311 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1312   AC_MSG_RESULT([$ac_cv_func_fstat64])
1313   if test x$ac_cv_func_fstat64 = xyes ; then
1314     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1315   fi
1318 #################################################
1319 # Check whether struct stat has timestamps with sub-second resolution.
1322 samba_cv_stat_hires=no
1323 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec], # Linux, Solaris
1324         [samba_cv_stat_hires=yes])
1325 AC_CHECK_MEMBERS([struct stat.st_mtimensec], # BSD, if defined _POSIX_SOURCE
1326         [samba_cv_stat_hires=yes])
1327 AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec], # BSD, if not defined _POSIX_SOURCE
1328         [samba_cv_stat_hires=yes])
1329 AC_CHECK_MEMBERS([struct stat.st_mtime_n], # AIX
1330         [samba_cv_stat_hires=yes])
1331 AC_CHECK_MEMBERS([struct stat.st_umtime], # Tru64
1332         [samba_cv_stat_hires=yes])
1334 if test x"$samba_cv_stat_hires" = x"yes" ; then
1335     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1336             [whether struct stat has sub-second timestamps])
1339 # recent FreeBSD, NetBSD have creation timestamps called birthtime:
1340 AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec])
1341 AC_CHECK_MEMBERS([struct stat.st_birthtime], AC_CHECK_MEMBERS([struct stat.st_birthtimensec]))
1344 AC_CACHE_CHECK([whether there is DOS flags support in the stat struct], samba_cv_stat_dos_flags,
1345     [
1346         AC_TRY_COMPILE(
1347             [#include <sys/stat.h>],
1348             [
1349                 int a = UF_DOS_ARCHIVE;
1350                 int h = UF_DOS_HIDDEN;
1351                 int r = UF_DOS_RO;
1352                 int s = UF_DOS_SYSTEM;
1353                 int i = UF_DOS_NOINDEX;
1354                 int f = UF_DOS_FLAGS;
1355             ],
1356             samba_cv_stat_dos_flags=yes, samba_cv_stat_dos_flags=no)
1357     ])
1359 if test x"$samba_cv_stat_dos_flags" = x"yes" ; then
1360     AC_DEFINE(HAVE_STAT_DOS_FLAGS, 1, [whether there is DOS flags support in the stat struct])
1363 #####################################
1364 # needed for SRV lookups
1365 AC_CHECK_LIB(resolv, dn_expand)
1366 AC_CHECK_LIB(resolv, _dn_expand)
1367 AC_CHECK_LIB(resolv, __dn_expand)
1370 # Check for the functions putprpwnam, set_auth_parameters,
1371 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1372 # Needed for OSF1 and HPUX.
1375 AC_LIBTESTFUNC(security, putprpwnam)
1376 AC_LIBTESTFUNC(sec, putprpwnam)
1378 AC_LIBTESTFUNC(security, set_auth_parameters)
1379 AC_LIBTESTFUNC(sec, set_auth_parameters)
1381 # UnixWare 7.x has its getspnam in -lgen
1382 AC_LIBTESTFUNC(gen, getspnam)
1384 AC_LIBTESTFUNC(security, getspnam)
1385 AC_LIBTESTFUNC(sec, getspnam)
1387 AC_LIBTESTFUNC(security, bigcrypt)
1388 AC_LIBTESTFUNC(sec, bigcrypt)
1390 AC_LIBTESTFUNC(security, getprpwnam)
1391 AC_LIBTESTFUNC(sec, getprpwnam)
1393 AC_CHECK_FUNCS(strsignal)
1395 ############################################
1396 # Check if we have libattr
1397 case "$host_os" in
1398   *osf*)
1399         AC_SEARCH_LIBS(getproplist, [proplist])
1400         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1401         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1402         AC_CHECK_FUNCS(sizeof_proplist_entry)
1403   ;;
1404   *)
1405         AC_SEARCH_LIBS(getxattr, [attr])
1406         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1407         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1408         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1409         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1410         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1411         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1412         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1413   ;;
1414 esac
1416 ########################################################
1417 # Check if attropen() is present if this is Solaris
1418 case "$host_os" in
1419   *solaris*)
1420         AC_CHECK_FUNCS(attropen)
1421   ;;
1422 esac
1424 ########################################################
1425 # Do xattr functions take additional options like on Darwin?
1426 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1427         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1428                 old_LIBS=$LIBS
1429                 LIBS="$LIBS $ACL_LIBS"
1430                 AC_TRY_COMPILE([
1431                         #include <sys/types.h>
1432                         #if HAVE_ATTR_XATTR_H
1433                         #include <attr/xattr.h>
1434                         #elif HAVE_SYS_XATTR_H
1435                         #include <sys/xattr.h>
1436                         #endif
1437                 ],[
1438                         getxattr(0, 0, 0, 0, 0, 0);
1439                 ],
1440                 [smb_attr_cv_xattr_add_opt=yes],
1441                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1442         ])
1443         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1444                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1445         fi
1448 # Check if we have extattr
1449 case "$host_os" in
1450   *freebsd4* | *dragonfly* )
1451     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1452     ;;
1453   *)
1454     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1455     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1456     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1457     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1458     ;;
1459 esac
1461 AC_DISABLE_STATIC
1462 AC_ENABLE_SHARED
1464 # Set defaults
1465 PIE_CFLAGS=""
1466 PIE_LDFLAGS=""
1467 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1469 if test "x$enable_pie" != xno
1470 then
1471         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1472         [
1473                 cat > conftest.c <<EOF
1474 int foo;
1475 main () { return 0;}
1477                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1478                 then
1479                         samba_cv_fpie=yes
1480                 else
1481                         samba_cv_fpie=no
1482                 fi
1483                 rm -f conftest*
1484         ])
1485         if test x"${samba_cv_fpie}" = x"yes"
1486         then
1487                 PIE_CFLAGS="-fPIE"
1488                 PIE_LDFLAGS="-pie"
1489         fi
1492 # Set defaults
1493 RELRO_LDFLAGS=""
1494 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1496 if test "x$enable_relro" != xno
1497 then
1498         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1499         [
1500                 cat > conftest.c <<EOF
1501 int foo;
1502 main () { return 0;}
1504                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1505                 then
1506                         samba_cv_relro=yes
1507                 else
1508                         samba_cv_relro=no
1509                 fi
1510                 rm -f conftest*
1511         ])
1512         if test x"${samba_cv_relro}" = x"yes"
1513         then
1514                 RELRO_LDFLAGS="-Wl,-z,relro"
1515         fi
1518 # Set defaults
1519 SYMSEXT="syms"
1520 AC_SUBST(SYMSEXT)
1522 # Assume non-shared by default and override below
1523 BLDSHARED="false"
1525 # these are the defaults, good for lots of systems
1526 HOST_OS="$host_os"
1527 LDSHFLAGS="-shared"
1528 MODULE_EXPORTS=""
1529 SONAMEFLAG="#"
1530 SHLD="\${CC} \${CFLAGS}"
1531 PICFLAG="${PIE_CFLAGS}"
1532 SHLIBEXT="so"
1533 DSO_EXPORTS=""
1535 # this bit needs to be modified for each OS that supports share libs
1536 # You need to specify how to create a shared library and
1537   # how to compile C code to produce PIC object files
1539   AC_MSG_CHECKING([ability to build shared libraries])
1541   # and these are for particular systems
1542   case "$host_os" in
1543                 *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1544                         case "$host_os" in *linux*)
1545                                 AC_DEFINE(LINUX,1,[Whether the host os is linux]) ;;
1546                         esac
1547                         BLDSHARED="true"
1548                         LDSHFLAGS="-shared -Wl,-Bsymbolic"
1549                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1550                                 LDSHFLAGS_Z_NODEFS="-Wl,--allow-shlib-undefined"
1551                         fi
1552                         DYNEXP="-Wl,--export-dynamic"
1553                         PICFLAG="-fPIC"
1554                         SONAMEFLAG="-Wl,-soname="
1555                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1556                         ;;
1557                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1558                         BLDSHARED="true"
1559                         LDSHFLAGS="-G"
1560                         SONAMEFLAG="-h "
1561                         if test "${GCC}" = "yes"; then
1562                                 PICFLAG="-fPIC"
1563                                 SONAMEFLAG="-Wl,-soname="
1564                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1565                                         DYNEXP="-Wl,-E"
1566                                 fi
1567                         else
1568                                 PICFLAG="-KPIC"
1569                                 ## ${CFLAGS} added for building 64-bit shared
1570                                 ## libs using Sun's Compiler
1571                                 LDSHFLAGS="-G \${CFLAGS}"
1572                         fi
1573                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1574                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1575                         ;;
1576                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1577                         BLDSHARED="true"
1578                         LDSHFLAGS="-G"
1579                         SONAMEFLAG="-Wl,-h,"
1580                         PICFLAG="-KPIC"   # Is this correct for SunOS
1581                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1582                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1583                         ;;
1584                 *netbsd* | *freebsd* | *dragonfly* )
1585                         BLDSHARED="true"
1586                         LDSHFLAGS="-shared"
1587                         DYNEXP="-Wl,--export-dynamic"
1588                         SONAMEFLAG="-Wl,-soname,"
1589                         PICFLAG="-fPIC -DPIC"
1590                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1591                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1592                         ;;
1593                 *openbsd*)  BLDSHARED="true"
1594                         LDSHFLAGS="-shared"
1595                         DYNEXP="-Wl,-Bdynamic"
1596                         SONAMEFLAG="-Wl,-soname,"
1597                         PICFLAG="-fPIC"
1598                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1599                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1600                         ;;
1601                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1602                         case "$host_os" in
1603                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1604                         ;;
1605                         esac
1606                         BLDSHARED="true"
1607                         LDSHFLAGS="-set_version sgi1.0 -shared"
1608                         SONAMEFLAG="-soname "
1609                         SHLD="\${LD}"
1610                         if test "${GCC}" = "yes"; then
1611                                 PICFLAG="-fPIC"
1612                         else
1613                                 PICFLAG="-KPIC"
1614                         fi
1615                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1616                         ;;
1617                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1618                         BLDSHARED="true"
1619                         # use expfull to export underscored symbols
1620                         # add rtl to remove /lib/crt0.o warning
1621                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1622                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1623                         PICFLAG="-O2"
1624                         # as AIX code is always position independent...
1625                         # .po will just create compile warnings, use po.o:
1626                         if test "${GCC}" != "yes"; then
1627                                 ## for funky AIX compiler using strncpy()
1628                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1629                         fi
1631                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1632                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1633                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1634                         ;;
1635                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1636                         # Use special PIC flags for the native HP-UX compiler.
1637                                 BLDSHARED="true"
1638                                 SHLD="cc"
1639                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1640                                 SONAMEFLAG="-Wl,+h "
1641                                 PICFLAG="+z"
1642                         if test "${GCC}" = "yes"; then
1643                                 PICFLAG="-fPIC"
1644                         else
1645                                 PICFLAG="+z +ESnolit"
1646                         fi
1647                         if test "$host_cpu" = "ia64"; then
1648                                 SHLIBEXT="so"
1649                               PICFLAG="+z"
1650                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1651                         else
1652                                 SHLIBEXT="sl"
1653                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1654                         fi
1655                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1656                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1657                         ;;
1658                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1659                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1660                         ;;
1661                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1662                         BLDSHARED="true"
1663                         LDSHFLAGS="-shared"
1664                         SONAMEFLAG="-Wl,-soname,"
1665                         PICFLAG="-fPIC"
1666                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1667                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1668                         ;;
1669                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1670                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1671                         ;;
1672                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1673                         BLDSHARED="true"
1674                         LDSHFLAGS="-shared"
1675                         SONAMEFLAG="-Wl,-soname,"
1676                         PICFLAG="-KPIC"
1677                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1678                         ;;
1679                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1680                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1681                         ;;
1682                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1683                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1684                         ;;
1685                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1686                         case "$host" in
1687                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1688                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1689                                         fi
1690                                         LDSHFLAGS="-G"
1691                                         DYNEXP="-Bexport"
1692                                 ;;
1693                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1694                         esac
1695                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1696                         ;;
1698                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1699                         if [ test "$GCC" != yes ]; then
1700                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1701                         fi
1702                         LDSHFLAGS="-G"
1703                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1704                         ;;
1705                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1706                         BLDSHARED="false"
1707                         LDSHFLAGS=""
1708                         ;;
1710                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1711                         BLDSHARED="true"
1712                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1713                         CFLAGS="$CFLAGS -fno-common"
1714                         SHLD="\${CC}"
1715                         SHLIBEXT="dylib"
1716                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1717                         SHLIBEXT="dylib"
1718                         # Since gcc doesn't fail on unrecognised options, the
1719                         # PIE test incorrectly succeeds. Darwin gcc does not
1720                         # actually support the PIE stuff.
1721                         PIE_LDFLAGS=
1722                         PIE_CFLAGS=
1723                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1724                         ;;
1726                 *)
1727                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1728                         ;;
1729   esac
1731 if test "$enable_shared" != "yes"; then
1732         BLDSHARED=false
1735 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1736         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1739 if test x"$BLDSHARED" = x"true" ; then
1740         LDFLAGS="$LDFLAGS -L./bin"
1743 AC_MSG_RESULT($BLDSHARED)
1745 for flags in "-Wl,--as-needed" "-Wl,-z,ignore" "-z ignore" ; do
1746         saved_ldflags="$LDFLAGS"
1747         AC_MSG_CHECKING([if $flags works])
1748         LDFLAGS="$flags $saved_ldflags"
1749         AC_TRY_LINK([],[],
1750                 [AC_MSG_RESULT([yes])
1751                 LD_AS_NEEDED_FLAG=$flags
1752                 ld_as_needed_flag_found=yes],
1753                 AC_MSG_RESULT([no]))
1754         LDFLAGS="$LD_AS_NEEDED_FLAG $saved_ldflags"
1755         test x"$ld_as_needed_flag_found" = xyes && break
1756 done
1758 # for historical reasons almost all linkers don't complain about unresolved
1759 # symbols in shared libs. Except for the internal samba modules we want to get
1760 # errors when we produce a shared lib with unresolved symbols. On some
1761 # platforms unresolved symbols might be intended, so we might have to add
1762 # platform specific exceptions here.
1764 for flags in "-Wl,-z,defs" "-error_unresolved" "-Wl,-error_unresolved" ; do
1765         saved_ldflags="$LDFLAGS"
1766         AC_MSG_CHECKING([if $flags works])
1767         LDFLAGS="$flags $saved_ldflags"
1768         AC_TRY_LINK([],[],
1769         [AC_MSG_RESULT([yes])
1770         LDSHFLAGS_Z_DEFS=$flags
1771         ldshflags_z_defs_found=yes],
1772         AC_MSG_RESULT([no]))
1773         LDFLAGS=$saved_ldflags
1774         test x"$ldshflags_z_defs_found" = xyes && break
1775 done
1777 AC_MSG_CHECKING([LDSHFLAGS_Z_DEFS])
1778 AC_MSG_RESULT([$LDSHFLAGS_Z_DEFS])
1779 AC_MSG_CHECKING([LDFLAGS])
1780 AC_MSG_RESULT([$LDFLAGS])
1781 AC_MSG_CHECKING([DYNEXP])
1782 AC_MSG_RESULT([$DYNEXP])
1784 #######################################################
1785 # test whether building a shared library actually works
1786 if test $BLDSHARED = true; then
1788 AC_MSG_CHECKING([SHLD])
1789 AC_MSG_RESULT([$SHLD])
1790 AC_MSG_CHECKING([LDSHFLAGS])
1791 AC_MSG_RESULT([$LDSHFLAGS])
1793 AC_MSG_CHECKING([SHLIBEXT])
1794 AC_MSG_RESULT([$SHLIBEXT])
1795 AC_MSG_CHECKING([SONAMEFLAG])
1796 AC_MSG_RESULT([$SONAMEFLAG])
1798 AC_MSG_CHECKING([PICFLAG])
1799 AC_MSG_RESULT([$PICFLAG])
1801 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1802 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1804 AC_CACHE_CHECK([whether building shared libraries actually works],
1805                [ac_cv_shlib_works],[
1806    # try building a trivial shared library
1807    ac_cv_shlib_works=no
1808    # The $SHLD and $LDSHFLAGS variables may contain references to other
1809    # variables so they need to be eval'ed.
1810    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1811         shlib.o ${srcdir-.}/../tests/shlib.c && \
1812    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1813         shlib.o && ac_cv_shlib_works=yes
1814    rm -f "shlib.$SHLIBEXT" shlib.o
1817 if test $ac_cv_shlib_works = no; then
1818    BLDSHARED=false
1822 if test x"$BLDSHARED" != x"true"; then
1823         LDSHFLAGS="shared-libraries-disabled"
1824         SONAMEFLAG="shared-libraries-disabled"
1825         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1826         SHLD="shared-libraries-disabled"
1827         PICFLAG="${PIE_CFLAGS}"
1828         SHLIBEXT="shared_libraries_disabled"
1829         merged_build_possible=no
1832 AC_MSG_CHECKING([used PICFLAG])
1833 AC_MSG_RESULT([$PICFLAG])
1835 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1837 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
1839 ################
1841 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1842 AC_TRY_RUN([#include <stdio.h>
1843 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1844 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1845 if test x"$samba_cv_have_longlong" = x"yes"; then
1846     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1847     AC_CHECK_TYPE(intptr_t, unsigned long long)
1848 else
1849     AC_CHECK_TYPE(intptr_t, unsigned long)
1853 # Check if the compiler supports the LL prefix on long long integers.
1854 # AIX needs this.
1856 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1857     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1858         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1859 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1860    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1864 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
1865 AC_TRY_RUN([#include <time.h>
1866 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
1867 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
1868 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
1869     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
1872 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1873 AC_TRY_RUN([#include <stdio.h>
1874 #include <sys/stat.h>
1875 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1876 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1877 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1878     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1881 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1882 AC_TRY_RUN([
1883 #if defined(HAVE_UNISTD_H)
1884 #include <unistd.h>
1885 #endif
1886 #include <stdio.h>
1887 #include <sys/stat.h>
1888 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1889 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1890 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1891     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1894 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1895 AC_TRY_RUN([
1896 #if defined(HAVE_UNISTD_H)
1897 #include <unistd.h>
1898 #endif
1899 #include <stdio.h>
1900 #include <sys/stat.h>
1901 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1902 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1903 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1904     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1907 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1908 AC_TRY_RUN([
1909 #if defined(HAVE_UNISTD_H)
1910 #include <unistd.h>
1911 #endif
1912 #include <stdio.h>
1913 #include <sys/stat.h>
1914 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1915 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1916 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1917     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1920 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
1921 AC_TRY_RUN([
1922 #if defined(HAVE_UNISTD_H)
1923 #include <unistd.h>
1924 #endif
1925 #include <stdio.h>
1926 #include <sys/stat.h>
1927 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
1928 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
1929 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
1930     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
1933 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
1934 AC_TRY_RUN([
1935 #if defined(HAVE_UNISTD_H)
1936 #include <unistd.h>
1937 #endif
1938 #include <stdio.h>
1939 #include <sys/stat.h>
1940 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1941 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
1942 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
1943     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
1946 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
1947 AC_TRY_COMPILE([
1948 #if defined(HAVE_UNISTD_H)
1949 #include <unistd.h>
1950 #endif
1951 #include <sys/types.h>
1952 #include <dirent.h>],
1953 [DIR64 de;],
1954 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
1955 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1956     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
1959 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
1960 AC_TRY_COMPILE([
1961 #if defined(HAVE_UNISTD_H)
1962 #include <unistd.h>
1963 #endif
1964 #include <sys/types.h>
1965 #include <dirent.h>],
1966 [struct dirent64 de;],
1967 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
1968 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1969     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
1972 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
1973 AC_TRY_RUN([
1974 #if defined(HAVE_UNISTD_H)
1975 #include <unistd.h>
1976 #endif
1977 #include <sys/types.h>
1978 main() { dev_t dev; int i = major(dev); return 0; }],
1979 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
1980 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
1981     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
1984 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
1985 AC_TRY_RUN([
1986 #if defined(HAVE_UNISTD_H)
1987 #include <unistd.h>
1988 #endif
1989 #include <sys/types.h>
1990 main() { dev_t dev; int i = minor(dev); return 0; }],
1991 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
1992 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
1993     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
1996 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
1997 AC_TRY_RUN([
1998 #if defined(HAVE_UNISTD_H)
1999 #include <unistd.h>
2000 #endif
2001 #include <sys/types.h>
2002 main() { dev_t dev = makedev(1,2); return 0; }],
2003 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2004 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2005     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2008 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2009 AC_TRY_RUN([#include <stdio.h>
2010 main() { char c; c=250; exit((c > 0)?0:1); }],
2011 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2012 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2013     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2016 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2017 AC_TRY_COMPILE([#include <sys/types.h>
2018 #include <dirent.h>
2019 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2020 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2021 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2022     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2025 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2026 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2027 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2028 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2029     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2032 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2033 AC_TRY_LINK([
2034 #include <sys/time.h>
2035 #include <unistd.h>], [struct timeval tv; return gettimeofday(&tv, NULL);],
2036            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,
2037            samba_cv_HAVE_GETTIMEOFDAY_TZ=no)])
2038 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2039     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday takes a tz argument])
2042 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2044     # On some systems (eg. Linux) librt can pull in libpthread. We
2045     # don't want this to happen because libpthreads changes signal delivery
2046     # semantics in ways we are not prepared for. This breaks Linux oplocks
2047     # which rely on signals.
2049     AC_LIBTESTFUNC(rt, clock_gettime,
2050             [
2051                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2052                                 [Whether clock_gettime is available])
2053                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2054                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2055                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2056                         ])
2060 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2061 AC_TRY_RUN([#include <sys/types.h>
2062 #include <dirent.h>
2063 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2064 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2065 di->d_name[0] == 0) exit(0); exit(1);} ],
2066 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2067 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2068     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2071 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2072 AC_TRY_COMPILE([#include <sys/types.h>
2073 #include <utime.h>],
2074 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2075 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2076 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2077     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2080 ##############
2081 # Check utmp details, but only if our OS offers utmp.h
2082 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2083 dnl  utmp and utmpx come in many flavours
2084 dnl  We need to check for many of them
2085 dnl  But we don't need to do each and every one, because our code uses
2086 dnl  mostly just the utmp (not utmpx) fields.
2088 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2090 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2091 AC_TRY_COMPILE([#include <sys/types.h>
2092 #include <utmp.h>],
2093 [struct utmp ut;  ut.ut_name[0] = 'a';],
2094 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2095 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2096     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2099 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2100 AC_TRY_COMPILE([#include <sys/types.h>
2101 #include <utmp.h>],
2102 [struct utmp ut;  ut.ut_user[0] = 'a';],
2103 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2104 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2105     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2108 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2109 AC_TRY_COMPILE([#include <sys/types.h>
2110 #include <utmp.h>],
2111 [struct utmp ut;  ut.ut_id[0] = 'a';],
2112 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2113 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2114     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2117 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2118 AC_TRY_COMPILE([#include <sys/types.h>
2119 #include <utmp.h>],
2120 [struct utmp ut;  ut.ut_host[0] = 'a';],
2121 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2122 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2123     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2126 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2127 AC_TRY_COMPILE([#include <sys/types.h>
2128 #include <utmp.h>],
2129 [struct utmp ut;  time_t t; ut.ut_time = t;],
2130 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2131 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2132     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2135 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2136 AC_TRY_COMPILE([#include <sys/types.h>
2137 #include <utmp.h>],
2138 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2139 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2140 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2141     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2144 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2145 AC_TRY_COMPILE([#include <sys/types.h>
2146 #include <utmp.h>],
2147 [struct utmp ut;  ut.ut_type = 0;],
2148 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2149 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2150     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2153 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2154 AC_TRY_COMPILE([#include <sys/types.h>
2155 #include <utmp.h>],
2156 [struct utmp ut;  ut.ut_pid = 0;],
2157 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2158 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2159     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2162 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2163 AC_TRY_COMPILE([#include <sys/types.h>
2164 #include <utmp.h>],
2165 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2166 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2167 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2168     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2171 dnl Look for the IPv6 varient by preference. Many systems have both.
2172 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2173 AC_TRY_COMPILE([#include <sys/types.h>
2174 #include <utmp.h>],
2175 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2176 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2177 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2178     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2181 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2182 AC_TRY_COMPILE([#include <sys/types.h>
2183 #include <utmp.h>],
2184 [struct utmp ut;  ut.ut_addr = 0;],
2185 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2186 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2187     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2190 if test x$ac_cv_func_pututline = xyes ; then
2191   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2192   AC_TRY_COMPILE([#include <sys/types.h>
2193 #include <utmp.h>],
2194   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2195   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2196   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2197       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2198   fi
2201 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2202 AC_TRY_COMPILE([#include <sys/types.h>
2203 #include <utmpx.h>],
2204 [struct utmpx ux;  ux.ut_syslen = 0;],
2205 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2206 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2207     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2211 # end utmp details
2214 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2215 AC_ARG_WITH(libiconv,
2216 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2218   if test "$withval" = "no" ; then
2219     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2220   else
2221      if test "$withval" != "yes" ; then
2222         ICONV_PATH_SPEC=yes
2223         ICONV_LOOK_DIRS="$withval"
2224      fi
2225   fi
2228 for i in $ICONV_LOOK_DIRS ; do
2230     save_LIBS="$LIBS"
2231     save_LDFLAGS="$LDFLAGS"
2232     save_CPPFLAGS="$CPPFLAGS"
2234     iconv_current_LIBS=""
2235     iconv_current_LDFLAGS=""
2236     iconv_current_CPPFLAGS=""
2238     ICONV_FOUND="no"
2239     unset libext
2241     #  This is here to handle -withval stuff for --with-libiconv
2242     #  Perhaps we should always add a -L
2243     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2245     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2246     # installation paths. This gets a little tricky since we might have iconv
2247     # in both libiconv and in libc. In this case the jm_ICONV test will always
2248     # succeed when the header is found. To counter this, make sure the
2249     # library directory is there and check the ABI directory first (which
2250     # should be harmless on other systems, but causes tons of linker warnings on
2251     # 64bit Ubuntu systems).
2252     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2253     # installed, I've decided to fix the linker warnings.
2254     # -- Kai
2255     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2256     for l in "lib" "lib32" "lib/hpux32"; do
2257         if test -d "$i/$l" ; then
2258                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2259                 LIBS=
2260                 export LDFLAGS LIBS CPPFLAGS
2261                 # Try to find iconv(3)
2262                 jm_ICONV($i/$l)
2263                 if test x"$ICONV_FOUND" = "xyes" ; then
2264                     libext="$l"
2265                     break
2266                 fi
2267         fi
2268     done
2270     if test x"$ICONV_FOUND" = "xyes" ; then
2271         iconv_current_LDFLAGS="-L$i/$libext"
2272         iconv_current_CPPFLAGS="-I$i/include"
2274         if test x"$jm_cv_lib_iconv" != x; then
2275             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2276         else
2277             # We found iconv in libc.
2278             iconv_current_LIBS=""
2279         fi
2281     fi
2283     if test x"$ICONV_FOUND" = "xyes" ; then
2285         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2286         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2287         LIBS="$save_LIBS $iconv_current_LIBS"
2288         export LDFLAGS LIBS CPPFLAGS
2290         default_dos_charset=no
2291         default_display_charset=no
2292         default_unix_charset=no
2294         # check for default dos charset name
2295         for j in CP850 IBM850 ; do
2296             rjs_CHARSET($j)
2297             default_dos_charset="$ICONV_CHARSET"
2298             if test x"$default_dos_charset" = x"$j"; then
2299                 break
2300             fi
2301         done
2303         # check for default display charset name
2304         for j in ASCII 646 ; do
2305             rjs_CHARSET($j)
2306             default_display_charset="$ICONV_CHARSET"
2307             if test x"$default_display_charset" = x"$j"; then
2308                 break
2309             fi
2310         done
2312         # check for default unix charset name
2313         for j in UTF-8 UTF8 ; do
2314             rjs_CHARSET($j)
2315             default_unix_charset="$ICONV_CHARSET"
2316             if test x"$default_unix_charset" = x"$j"; then
2317                 break
2318             fi
2319         done
2321         if test "$default_dos_charset" != "no" -a \
2322                 "$default_dos_charset" != "cross" -a \
2323                 "$default_display_charset" != "no" -a \
2324                 "$default_display_charset" != "cross" -a \
2325                 "$default_unix_charset" != "no" -a \
2326                 "$default_unix_charset" != "cross"
2327         then
2328                 samba_cv_HAVE_NATIVE_ICONV=yes
2329         else
2330             if test "$default_dos_charset" = "cross" -o \
2331                      "$default_display_charset" = "cross" -o \
2332                      "$default_unix_charset" = "cross"
2333             then
2334                     samba_cv_HAVE_NATIVE_ICONV=cross
2335             else
2336                     samba_cv_HAVE_NATIVE_ICONV=no
2337             fi
2338         fi
2340         # At this point, we have a libiconv candidate. We know that
2341         # we have the right headers and libraries, but we don't know
2342         # whether it does the conversions we want. We can't test this
2343         # because we are cross-compiling. This is not necessarily a big
2344         # deal, since we can't guarantee that the results we get now will
2345         # match the results we get at runtime anyway.
2346         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2347             default_dos_charset="CP850"
2348             default_display_charset="ASCII"
2349             default_unix_charset="UTF-8"
2350             samba_cv_HAVE_NATIVE_ICONV=yes
2351             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2352             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2353         fi
2355         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2357             CPPFLAGS=$save_CPPFLAGS
2358             LDFLAGS=$save_LDFLAGS
2359             LIBS=$save_LIBS
2361             if test x"$iconv_current_LIBS" != x; then
2362                 LIBS="$LIBS $iconv_current_LIBS"
2363             fi
2365             # Add the flags we need to CPPFLAGS and LDFLAGS
2366             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2367             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2369             # Turn the #defines into string literals
2370             default_dos_charset="\"$default_dos_charset\""
2371             default_display_charset="\"$default_display_charset\""
2372             default_unix_charset="\"$default_unix_charset\""
2374             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2375             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2376             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2377             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2379            break
2380         fi
2382     # We didn't find a working iconv, so keep going
2383     fi
2385     #  We only need to clean these up here for the next pass through the loop
2386     CPPFLAGS=$save_CPPFLAGS
2387     LDFLAGS=$save_LDFLAGS
2388     LIBS=$save_LIBS
2389     export LDFLAGS LIBS CPPFLAGS
2390 done
2391 unset libext
2394 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2395     AC_MSG_WARN([Sufficient support for iconv function was not found.
2396     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2397    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2398    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2399    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2403 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2404 AC_TRY_RUN([
2405 #include <sys/types.h>
2406 #include <fcntl.h>
2407 #ifndef F_GETLEASE
2408 #define F_GETLEASE      1025
2409 #endif
2410 main() {
2411        int fd = open("/dev/null", O_RDONLY);
2412        return fcntl(fd, F_GETLEASE, 0) == -1;
2415 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2416 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2417     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2420 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2421 AC_TRY_RUN([
2422 #include <sys/types.h>
2423 #include <fcntl.h>
2424 #include <signal.h>
2425 #ifndef F_NOTIFY
2426 #define F_NOTIFY 1026
2427 #endif
2428 main() {
2429         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2432 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2433 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2434     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2437 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2438 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h sys/inotify.h)
2439 AC_CHECK_FUNCS(inotify_init)
2440 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2442 samba_cv_HAVE_INOTIFY=yes,
2443 samba_cv_HAVE_INOTIFY=no,
2444 samba_cv_HAVE_INOTIFY=cross)
2446 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2447     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2450 #################################################
2451 # Check if FAM notifications are available. For FAM info, see
2452 #       http://oss.sgi.com/projects/fam/
2453 #       http://savannah.nongnu.org/projects/fam/
2454 AC_ARG_ENABLE(fam,
2455 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2457 if test x$enable_fam != xno; then
2458     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2459     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2460         # On IRIX, libfam requires libC, but other FAM implementations
2461         # might not need it.
2462         AC_CHECK_LIB(fam, FAMOpen2,
2463             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"],
2464             [samba_cv_HAVE_LIBFAM=no])
2466         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2467             samba_fam_xtra=-lC
2468             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2469                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"],
2470                 [samba_cv_HAVE_LIBFAM=no])
2471             unset samba_fam_xtra
2472         fi
2473     fi
2475     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2476         default_shared_modules="$default_shared_modules vfs_notify_fam"
2477         AC_TRY_COMPILE([#include <fam.h>],
2478                     [enum FAMCodes code = FAMChanged;],
2479                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2480                         [Whether fam.h contains a typedef for enum FAMCodes]),
2481                     [])
2482     fi
2484     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2485         AC_MSG_ERROR(FAM support requested but FAM library not available )
2486     fi
2489 AC_SUBST(SMB_FAM_LIBS)
2491 #################################################
2492 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2494 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2496 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2497 # Theoretically it should work with AIX JFS2 too but this needs testing
2498 if test x"$samba_cv_HAVE_GPFS" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2499     default_shared_modules="$default_shared_modules vfs_tsmsm"
2502 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2503 AC_TRY_RUN([
2504 #include <sys/types.h>
2505 #include <fcntl.h>
2506 #include <signal.h>
2507 #include <sys/file.h>
2508 #ifndef LOCK_MAND
2509 #define LOCK_MAND       32
2510 #define LOCK_READ       64
2511 #endif
2512 main() {
2513         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2516 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2517 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2518     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2522 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2523 AC_TRY_COMPILE([#include <sys/types.h>
2524 #include <fcntl.h>],
2525 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2526 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2527 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2528     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2531 #################################################
2532 # Check for POSIX capability support
2534 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2535     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2536     [], [])
2538 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2540     ac_save_LIBS=$LIBS
2541     AC_LIBTESTFUNC(cap, cap_get_proc)
2543     AC_CACHE_CHECK([for POSIX capabilities],
2544             samba_cv_HAVE_POSIX_CAPABILITIES,
2545             [
2546                 AC_TRY_RUN([
2547 #include <sys/types.h>
2548 #include <sys/capability.h>
2549 main() {
2550  cap_t cap;
2551  cap_value_t vals[1];
2552  if (!(cap = cap_get_proc()))
2553    exit(1);
2554  vals[0] = CAP_CHOWN;
2555  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2556  cap_set_proc(cap);
2557  exit(0);
2559                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2560                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2561                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2562             ])
2564 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2565     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2566             [Whether POSIX capabilities are available])
2567 else
2568     LIBS=$ac_save_LIBS
2574 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2575 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2578 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2579 AC_TRY_COMPILE([#include <sys/types.h>
2580 #if defined(HAVE_RPC_RPC_H)
2581 #include <rpc/rpc.h>
2582 #endif],
2583 [int16 testvar;],
2584 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2585 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2586     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2589 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2590 AC_TRY_COMPILE([#include <sys/types.h>
2591 #if defined(HAVE_RPC_RPC_H)
2592 #include <rpc/rpc.h>
2593 #endif],
2594 [uint16 testvar;],
2595 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2596 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2597     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2600 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2601 AC_TRY_COMPILE([#include <sys/types.h>
2602 #if defined(HAVE_RPC_RPC_H)
2603 #include <rpc/rpc.h>
2604 #endif],
2605 [int32 testvar;],
2606 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2607 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2608     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2611 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2612 AC_TRY_COMPILE([#include <sys/types.h>
2613 #if defined(HAVE_RPC_RPC_H)
2614 #include <rpc/rpc.h>
2615 #endif],
2616 [uint32 testvar;],
2617 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2618 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2619     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2623 dnl Some systems (SCO) have a problem including
2624 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2625 dnl as a #define in <prot.h> and as part of an enum
2626 dnl in <rpc/rpc.h>.
2629 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2630 AC_TRY_COMPILE([#include <sys/types.h>
2631 #ifdef HAVE_SYS_SECURITY_H
2632 #include <sys/security.h>
2633 #include <prot.h>
2634 #endif  /* HAVE_SYS_SECURITY_H */
2635 #if defined(HAVE_RPC_RPC_H)
2636 #include <rpc/rpc.h>
2637 #endif],
2638 [int testvar;],
2639 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2640 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2641     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2644 AC_MSG_CHECKING([for test routines])
2645 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
2646            AC_MSG_RESULT(yes),
2647            AC_MSG_ERROR([cant find test code. Aborting config]),
2648            AC_MSG_WARN([cannot run when cross-compiling]))
2650 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2651 AC_TRY_RUN([#include "${srcdir-.}/../tests/ftruncate.c"],
2652            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2653 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2654     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2657 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2658 AC_TRY_RUN([#include "${srcdir-.}/../tests/getgroups.c"],
2659            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2660 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2661     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2664 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2665 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2666 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2667 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2668 AC_CHECK_FUNCS(getpagesize)
2670 ################################################
2671 # look for a method of setting the effective uid
2672 seteuid=no;
2674 if test $seteuid = no; then
2675 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2676 AC_TRY_RUN([
2677 #define AUTOCONF_TEST 1
2678 #define USE_SETREUID 1
2679 #include "confdefs.h"
2680 #include "${srcdir-.}/lib/util_sec.c"],
2681            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2682 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2683     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2687 # we check for setresuid second as it conflicts with AIO on Linux. 
2688 # see http://samba.org/~tridge/junkcode/aio_uid.c
2689 if test $seteuid = no; then
2690 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2691 AC_TRY_RUN([
2692 #define AUTOCONF_TEST 1
2693 #define USE_SETRESUID 1
2694 #include "confdefs.h"
2695 #include "${srcdir-.}/lib/util_sec.c"],
2696            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2697 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2698     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2702 if test $seteuid = no; then
2703 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2704 AC_TRY_RUN([
2705 #define AUTOCONF_TEST 1
2706 #define USE_SETEUID 1
2707 #include "confdefs.h"
2708 #include "${srcdir-.}/lib/util_sec.c"],
2709            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2710 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2711     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2715 if test $seteuid = no; then
2716 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2717 AC_TRY_RUN([
2718 #define AUTOCONF_TEST 1
2719 #define USE_SETUIDX 1
2720 #include "confdefs.h"
2721 #include "${srcdir-.}/lib/util_sec.c"],
2722            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2723 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2724     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2728 AC_CACHE_CHECK([for the Darwin initgroups system call],
2729         samba_cv_DARWIN_INITGROUPS,
2730         AC_TRY_LINK([
2731 #include <sys/syscall.h>
2732 #include <unistd.h>
2733         ],
2734         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2735         samba_cv_DARWIN_INITGROUPS=yes,
2736         samba_cv_DARWIN_INITGROUPS=no)
2739 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2740     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2741         [Whether to use the Darwin-specific initgroups system call])
2744 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2745 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock.c"],
2746            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2747 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2748     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2751 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2752 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock64.c"],
2753            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2754 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2755     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2757 else
2760 dnl Don't check for 64 bit fcntl locking if we know that the
2761 dnl glibc2.1 broken check has succeeded.
2764   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2765   AC_TRY_RUN([
2766 #if defined(HAVE_UNISTD_H)
2767 #include <unistd.h>
2768 #endif
2769 #include <stdio.h>
2770 #include <stdlib.h>
2772 #ifdef HAVE_FCNTL_H
2773 #include <fcntl.h>
2774 #endif
2776 #ifdef HAVE_SYS_FCNTL_H
2777 #include <sys/fcntl.h>
2778 #endif
2779 main() { struct flock64 fl64;
2780 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2781 exit(0);
2782 #else
2783 exit(1);
2784 #endif
2786        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2788   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2789       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2790   fi
2793 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2794 AC_TRY_COMPILE([#include <sys/types.h>
2795 #include <sys/stat.h>
2796 #include <unistd.h>],
2797 [struct stat st;  st.st_blocks = 0;],
2798 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2799 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2800     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2803 AC_CHECK_TYPES([blksize_t, blkcnt_t], [], [], [[#include <sys/stat.h>]])
2805 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2806 AC_TRY_COMPILE([#include <sys/types.h>
2807 #include <sys/stat.h>
2808 #include <unistd.h>],
2809 [struct stat st;  st.st_blksize = 0;],
2810 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2811 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2812     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2815 AC_CACHE_CHECK([for st_flags in struct stat],
2816         samba_cv_HAVE_STAT_ST_FLAGS,
2817         [
2818             AC_TRY_COMPILE([#include <sys/types.h>
2819 #include <sys/stat.h>
2820 #include <unistd.h>],
2821             [struct stat st;  st.st_flags = 0;],
2822             samba_cv_HAVE_STAT_ST_FLAGS=yes,
2823             samba_cv_HAVE_STAT_ST_FLAGS=no,
2824             samba_cv_HAVE_STAT_ST_FLAGS=cross)
2825         ])
2827 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
2828     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
2829                 [Whether the stat struct has a st_flags member])
2832 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2833 AC_TRY_COMPILE([
2834 #include <sys/types.h>
2835 #include <sys/acl.h>
2836 #if defined(HAVE_RPCSVC_NIS_H)
2837 #include <rpcsvc/nis.h>
2838 #endif],
2839 [int i;],
2840 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2841 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2842         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2845 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
2846 AC_TRY_RUN([
2847 #include <stdio.h>
2848 #include <limits.h>
2849 #include <signal.h>
2851 void exit_on_core(int ignored) {
2852         exit(1);
2855 main() {
2856         char *newpath;
2857         signal(SIGSEGV, exit_on_core);
2858         newpath = realpath("/tmp", NULL);
2859         exit((newpath != NULL) ? 0 : 1);
2862 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
2863 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
2864     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
2867 #################################################
2868 # check for AFS clear-text auth support
2869 samba_cv_WITH_AFS=no
2870 AC_MSG_CHECKING(whether to use AFS clear-text auth)
2871 AC_ARG_WITH(afs,
2872 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
2873 [ case "$withval" in
2874   yes|auto)
2875     AC_MSG_RESULT($withval)
2876     samba_cv_WITH_AFS=$withval
2877     ;;
2878   *)
2879     AC_MSG_RESULT(no)
2880     ;;
2881   esac ],
2882   AC_MSG_RESULT(no)
2885 ####################################################
2886 # check for Linux-specific AFS fake-kaserver support
2887 samba_cv_WITH_FAKE_KASERVER=no
2888 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2889 AC_ARG_WITH(fake-kaserver,
2890 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
2891 [ case "$withval" in
2892   yes|auto)
2893     AC_MSG_RESULT($withval)
2894     samba_cv_WITH_FAKE_KASERVER=$withval
2895     ;;
2896   *)
2897     AC_MSG_RESULT(no)
2898     ;;
2899   esac ],
2900   AC_MSG_RESULT(no)
2903 #################################################
2904 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
2905 if test x"$samba_cv_WITH_AFS" != x"no" ||
2906    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
2908     # see if this box has the OpenSSL DES libraries
2909     AC_CHECK_LIB( crypto, DES_pcbc_encrypt, LIBS="$LIBS -lcrypto" , [AC_ERROR(OpenSSL library: libcrypto ot found!)] )
2911     # see if this box has the afs-headers in /usr/include/afs
2912     AC_MSG_CHECKING(for /usr/include/afs)
2913     if test -d /usr/include/afs; then
2914           AC_MSG_RESULT(yes)
2915     else
2916       AC_MSG_RESULT(no)
2917     fi
2919     # check for afs.h
2920     have_afs_headers=no
2921     AC_CHECK_HEADERS(afs.h afs/afs.h)
2922     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
2923         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
2924            test x"$samba_cv_WITH_AFS" = x"auto"; then
2925                 AC_MSG_WARN([AFS cannot be supported without afs.h])
2926         else
2927                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
2928         fi
2929     else
2930         have_afs_headers=yes
2931     fi
2934 FAKE_KASERVER_OBJ=""
2935 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
2936     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
2937     FAKE_KASERVER_OBJ="utils/net_afs.o"
2939 AC_SUBST(FAKE_KASERVER_OBJ)
2941 #################################################
2942 # check whether to compile AFS/NT ACL mapping module
2943 samba_cv_WITH_VFS_AFSACL=no
2944 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
2945 AC_ARG_WITH(vfs-afsacl,
2946 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
2947 [ case "$withval" in
2948   yes|auto)
2949     AC_MSG_RESULT($withval)
2950     samba_cv_WITH_VFS_AFSACL=yes
2951     ;;
2952   *)
2953     AC_MSG_RESULT(no)
2954     ;;
2955   esac ],
2956   AC_MSG_RESULT(no)
2959 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
2960    default_shared_modules="$default_shared_modules vfs_afsacl"
2962         
2963 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
2964     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
2967 #################################################
2968 # check for the DFS clear-text auth system
2969 AC_MSG_CHECKING(whether to use DFS clear-text auth)
2970 AC_ARG_WITH(dfs,
2971 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
2972 [ case "$withval" in
2973   yes)
2974     AC_MSG_RESULT(yes)
2975     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
2976     ;;
2977   *)
2978     AC_MSG_RESULT(no)
2979     ;;
2980   esac ],
2981   AC_MSG_RESULT(no)
2984 ########################################################
2985 # Compile with LDAP support?
2987 with_ldap_support=auto
2988 AC_MSG_CHECKING([for LDAP support])
2990 AC_ARG_WITH(ldap,
2991 [AS_HELP_STRING([--with-ldap], [LDAP support (default yes)])],
2992 [ case "$withval" in
2993     yes|no)
2994         with_ldap_support=$withval
2995         ;;
2996   esac ])
2998 AC_MSG_RESULT($with_ldap_support)
3000 SMBLDAP=""
3001 AC_SUBST(SMBLDAP)
3002 SMBLDAPUTIL=""
3003 AC_SUBST(SMBLDAPUTIL)
3004 LDBLDAP=""
3005 AC_SUBST(LDBLDAP)
3007 if test x"$with_ldap_support" != x"no"; then
3009   ##################################################################
3010   # first test for ldap.h and lber.h
3011   # (ldap.h is required for this test)
3012   AC_CHECK_HEADERS(ldap.h lber.h)
3014   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3015         if test x"$with_ldap_support" = x"yes"; then
3016          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3017         else
3018          AC_MSG_WARN(ldap.h is needed for LDAP support)
3019         fi
3020         
3021         with_ldap_support=no
3022   fi
3024   ##################################################################
3025   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3026   # unsigned int in include/includes.h
3027   case $host_os in
3028         *hpux*)
3029          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3030          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3031         with_ldap_support=yes
3032         ;;
3033         *)
3034         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3035         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3036                 if test x"$with_ldap_support" = x"yes"; then
3037                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3038                 else
3039                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3040                 fi
3041                 with_ldap_support=no
3042         fi
3043         ;;
3044   esac
3047 if test x"$with_ldap_support" != x"no"; then
3048   ac_save_LIBS=$LIBS
3050   ##################################################################
3051   # we might need the lber lib on some systems. To avoid link errors
3052   # this test must be before the libldap test
3053   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3055   ########################################################
3056   # If ber_sockbuf_add_io() is available we can add
3057   # SASL wrapping hooks
3058   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3060   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3061                  AC_TRY_COMPILE([#include <ldap.h>],
3062                                 [int val = LDAP_OPT_SOCKBUF;],
3063                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3064                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3066   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3067           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3068         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3069   fi
3071   #######################################################
3072   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3073   # ldap logging and print it out in the samba logs
3074   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3075                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3076                  [AC_TRY_COMPILE([#include <lber.h>],
3077                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3078                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3079                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3081   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3082         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3083                   [Support for LDAP/LBER logging interception])
3084   fi
3086   ########################################################
3087   # now see if we can find the ldap libs in standard paths
3088   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3090   ########################################################
3091   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3092   # Check found in pam_ldap 145.
3093   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3095   LIBS="$LIBS $LDAP_LIBS"
3096   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3097     AC_TRY_COMPILE([
3098         #include <lber.h>
3099         #include <ldap.h>],
3100         [ldap_set_rebind_proc(0, 0, 0);],
3101         [smb_ldap_cv_ldap_set_rebind_proc=3],
3102         [smb_ldap_cv_ldap_set_rebind_proc=2]
3103     )
3104   ])
3106   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3108   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3110   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3111     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3112     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3113     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3114     default_shared_modules="$default_shared_modules";
3115     SMBLDAP="lib/smbldap.o"
3116     SMBLDAPUTIL="lib/smbldap_util.o"
3117     with_ldap_support=yes
3118     AC_MSG_CHECKING(whether LDAP support is used)
3119     AC_MSG_RESULT(yes)
3120   else
3121     if test x"$with_ldap_support" = x"yes"; then
3122         AC_MSG_ERROR(libldap is needed for LDAP support)
3123     else
3124         AC_MSG_WARN(libldap is needed for LDAP support)
3125     fi
3127     LDAP_LIBS=""
3128     with_ldap_support=no
3129   fi
3130   LIBS=$ac_save_LIBS
3134 #################################################
3135 # active directory support
3137 with_ads_support=auto
3138 AC_MSG_CHECKING([for Active Directory and krb5 support])
3140 AC_ARG_WITH(ads,
3141 [AS_HELP_STRING([--with-ads], [Active Directory support (default auto)])],
3142 [ case "$withval" in
3143     yes|no)
3144         with_ads_support="$withval"
3145         ;;
3146   esac ])
3148 AC_MSG_RESULT($with_ads_support)
3150 FOUND_KRB5=no
3151 KRB5_LIBS=""
3153 if test x"$with_ldap_support" != x"yes"; then
3155     if test x"$with_ads_support" = x"yes"; then
3156         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3157     elif test x"$with_ads_support" = x"auto"; then
3158         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3159         with_ads_support=no
3160     fi
3162 else
3164     # Check to see whether there is enough LDAP functionality to be able
3165     # to build AD support.
3167 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3168 case "$host_os" in
3169         *hpux*)
3170     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3172     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3173         if test x"$with_ads_support" = x"yes"; then
3174             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3175         elif test x"$with_ads_support" = x"auto"; then
3176             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3177             with_ads_support=no
3178         fi
3179     fi
3180     ;;
3181         *)
3182     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3184     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3185         if test x"$with_ads_support" = x"yes"; then
3186             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3187         elif test x"$with_ads_support" = x"auto"; then
3188             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3189             with_ads_support=no
3190         fi
3191     fi
3192     ;;
3193 esac
3196     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3198     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3199         if test x"$with_ads_support" = x"yes"; then
3200             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3201         elif test x"$with_ads_support" = x"auto"; then
3202             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3203             with_ads_support=no
3204         fi
3205     fi
3209 if test x"$with_ads_support" != x"no"; then
3211   # Do no harm to the values of CFLAGS and LIBS while testing for
3212   # Kerberos support.
3214   if test x$FOUND_KRB5 = x"no"; then
3215     #################################################
3216     # check for location of Kerberos 5 install
3217     AC_MSG_CHECKING(for kerberos 5 install path)
3218     AC_ARG_WITH(krb5,
3219     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3220     [ case "$withval" in
3221       no)
3222         AC_MSG_RESULT(no krb5-path given)
3223         ;;
3224       yes)
3225         AC_MSG_RESULT(/usr)
3226         FOUND_KRB5=yes
3227         ;;
3228       *)
3229         AC_MSG_RESULT($withval)
3230         KRB5_CFLAGS="-I$withval/include"
3231         KRB5_CPPFLAGS="-I$withval/include"
3232         KRB5_LDFLAGS="-L$withval/lib"
3233         FOUND_KRB5=yes
3234         if test -x "$withval/bin/krb5-config"; then
3235                 KRB5CONFIG=$withval/bin/krb5-config
3236         fi
3237         ;;
3238       esac ],
3239       AC_MSG_RESULT(no krb5-path given)
3240     )
3241   fi
3243   #################################################
3244   # check for krb5-config from recent MIT and Heimdal kerberos 5
3245   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3246   AC_MSG_CHECKING(for working krb5-config)
3247   if test -x "$KRB5CONFIG" && $KRB5CONFIG --libs gssapi > /dev/null ; then
3248     ac_save_CFLAGS=$CFLAGS
3249     CFLAGS="";export CFLAGS
3250     ac_save_LDFLAGS=$LDFLAGS
3251     LDFLAGS="";export LDFLAGS
3252     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3253     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3254     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3255     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3256     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3257     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3258     FOUND_KRB5=yes
3259     AC_MSG_RESULT(yes)
3260   else
3261     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3262   fi
3264   if test x$FOUND_KRB5 = x"no"; then
3265     #################################################
3266     # see if this box has the SuSE location for the heimdal krb implementation
3267     AC_MSG_CHECKING(for /usr/include/heimdal)
3268     if test -d /usr/include/heimdal; then
3269       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3270           KRB5_CFLAGS="-I/usr/include/heimdal"
3271           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3272           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3273           FOUND_KRB5=yes
3274           AC_MSG_RESULT(yes)
3275       else
3276           KRB5_CFLAGS="-I/usr/include/heimdal"
3277           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3278           FOUND_KRB5=yes
3279           AC_MSG_RESULT(yes)
3280       fi
3281     else
3282       AC_MSG_RESULT(no)
3283     fi
3284   fi
3286   if test x$FOUND_KRB5 = x"no"; then
3287     #################################################
3288     # see if this box has the RedHat location for kerberos
3289     AC_MSG_CHECKING(for /usr/kerberos)
3290     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3291       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3292       KRB5_CFLAGS="-I/usr/kerberos/include"
3293       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3294       FOUND_KRB5=yes
3295       AC_MSG_RESULT(yes)
3296     else
3297       AC_MSG_RESULT(no)
3298     fi
3299   fi
3301   if test x$FOUND_KRB5 = x"no"; then
3302     #################################################
3303     # see if this box has the OpenBSD location for heimdal krb5
3304     AC_MSG_CHECKING(for /usr/include/kerberosV)
3305     if test -d /usr/include/kerberosV; then
3306       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3307       KRB5_LIBS="-lcrypto"
3308       FOUND_KRB5=yes
3309       AC_MSG_RESULT(yes)
3310     else
3311       AC_MSG_RESULT(no)
3312     fi
3313   fi
3315   ac_save_CFLAGS=$CFLAGS
3316   ac_save_CPPFLAGS=$CPPFLAGS
3317   ac_save_LDFLAGS=$LDFLAGS
3319   # remove needless evil rpath stuff as early as possible:
3320   LIB_REMOVE_USR_LIB(KRB5_LIBS)
3321   LIB_REMOVE_USR_LIB(KRB5_LDFLAGS)
3322   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3323   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3324   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3326   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3328   # now check for krb5.h. Some systems have the libraries without the headers!
3329   # note that this check is done here to allow for different kerberos
3330   # include paths
3331   AC_CHECK_HEADERS(krb5.h)
3333   if test x"$ac_cv_header_krb5_h" = x"no"; then
3335     # Give a warning if AD support was not explicitly requested,
3336     # i.e with_ads_support = auto, otherwise die with an error.
3338     if test x"$with_ads_support" = x"yes"; then
3339       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3340     else
3341       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3342     fi
3344     # Turn off AD support and restore CFLAGS and LIBS variables
3346     with_ads_support="no"
3348     CFLAGS=$ac_save_CFLAGS
3349     CPPFLAGS=$ac_save_CPPFLAGS
3350     LDFLAGS=$ac_save_LDFLAGS
3351   fi
3352   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3353   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
3354         WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
3355         if test x"$BLDSHARED" = x"true" ; then
3356                 EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
3357         fi
3358   fi
3361 # Now we have determined whether we really want ADS support
3362 use_ads=no
3363 if test x"$with_ads_support" != x"no"; then
3364   use_ads=yes
3365   have_gssapi=no
3366   ac_save_LIBS=$LIBS
3368   # now check for gssapi headers.  This is also done here to allow for
3369   # different kerberos include paths
3370   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3372   ##################################################################
3373   # we might need the k5crypto and com_err libraries on some systems
3374   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3375   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3377   # Heimdal checks.
3378   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3379   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3380   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3382   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3383   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3385   ########################################################
3386   # now see if we can find the krb5 libs in standard paths
3387   # or as specified above
3388   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3389   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3391   ########################################################
3392   # now see if we can find the gssapi libs in standard paths
3393   if test x"$have_gssapi" != x"yes"; then
3394      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3395   fi
3397   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3398   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3399   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3400   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3401   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3402   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3403   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3404   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3405   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3406   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3407   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3408   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3409   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3410   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3411   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3412   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3413   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3414   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3415   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3416   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3417   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3418   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3419   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3420   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3421   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3422   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3423   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3424   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3425   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3426   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3427   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3428   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3429   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3430   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3431   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3432   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3433   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3434   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3435   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3436   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3437   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3438   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3439   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3441   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3442   # but does have the symbol
3443   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3445   LIBS="$KRB5_LIBS $LIBS"
3447   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3448         smb_krb5_cv_ticket_has_keyinfo,
3449         [
3450             AC_TRY_COMPILE(
3451             [
3452                 #include <krb5.h>
3453             ],
3454             [
3455                 krb5_ticket ticket;
3456                 krb5_kvno kvno;
3457                 krb5_enctype enctype;
3459                 enctype = ticket.enc_part.enctype;
3460                 kvno = ticket.enc_part.kvno;
3461             ],
3462             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3463             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3464         ])
3466   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3467         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3468             [Whether the krb5_ticket structure contains the kvno and enctype])
3469   fi
3471   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3472           smb_krb5_cv_creds_opt_free_context,
3473           [
3474                 AC_TRY_COMPILE([
3475                     #include <krb5.h>],
3476                     [
3477                         krb5_context ctx;
3478                         krb5_get_init_creds_opt *opt = NULL;
3479                         krb5_get_init_creds_opt_free(ctx, opt);
3480                     ],
3481                     [smb_krb5_cv_creds_opt_free_context=yes],
3482                     [smb_krb5_cv_creds_opt_free_context=no]
3483                 )
3484           ])
3486   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3487         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3488             [Whether krb5_get_init_creds_opt_free takes a context argument])
3489   fi
3491   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3492     AC_TRY_COMPILE([
3493         #include <krb5.h>],
3494         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3495         [smb_krb5_cv_verify_checksum=7],
3496         [smb_krb5_cv_verify_checksum=6],
3497     )
3498   ])
3499   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3501   AC_CACHE_CHECK([for checksum in krb5_checksum],
3502                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3503     AC_TRY_COMPILE([#include <krb5.h>],
3504       [krb5_checksum cksum; cksum.checksum.length = 0;],
3505       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3506       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3508   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3509     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3510                [Whether the krb5_checksum struct has a checksum property])
3511   fi
3513   AC_CACHE_CHECK([for etype in EncryptedData],
3514                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3515     AC_TRY_COMPILE([#include <krb5.h>],
3516       [EncryptedData edata; edata.etype = 0;],
3517       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3518       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3520   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3521     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3522                [Whether the EncryptedData struct has a etype property])
3523   fi
3525   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3526                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3527     AC_TRY_COMPILE([#include <krb5.h>],
3528       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3529       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3530       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3532   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3533     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3534                [Whether the krb5_ap_req struct has a ticket pointer])
3535   fi
3537   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3538                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3539     AC_TRY_COMPILE([#include <krb5.h>],
3540       [krb5_error err; err.e_data = NULL;],
3541       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3542       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3544   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3545     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3546                [Whether the krb5_error struct has a e_data pointer])
3547   fi
3549   AC_CACHE_CHECK([for krb5_crypto type],
3550                 samba_cv_HAVE_KRB5_CRYPTO,[
3551     AC_TRY_COMPILE([#include <krb5.h>],
3552       [krb5_crypto crypto;],
3553       samba_cv_HAVE_KRB5_CRYPTO=yes,
3554       samba_cv_HAVE_KRB5_CRYPTO=no)])
3556   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3557     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3558                [Whether the type krb5_crypto exists])
3559   fi
3561   AC_CACHE_CHECK([for krb5_encrypt_block type],
3562                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3563     AC_TRY_COMPILE([#include <krb5.h>],
3564       [krb5_encrypt_block block;],
3565       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3566       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3568   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3569     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3570                [Whether the type krb5_encrypt_block exists])
3571   fi
3573   AC_CACHE_CHECK([for addrtype in krb5_address],
3574                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3575     AC_TRY_COMPILE([#include <krb5.h>],
3576       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3577       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3578       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3580   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3581     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3582                [Whether the krb5_address struct has a addrtype property])
3583   fi
3585   AC_CACHE_CHECK([for addr_type in krb5_address],
3586                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3587     AC_TRY_COMPILE([#include <krb5.h>],
3588       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3589       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3590       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3592   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3593     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3594               [Whether the krb5_address struct has a addr_type property])
3595   fi
3597   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3598                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3599                  [AC_TRY_COMPILE([#include <krb5.h>],
3600     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3601     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3603   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3604     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3605               [Whether the krb5_ticket struct has a enc_part2 property])
3606   fi
3608   AC_CACHE_CHECK([for keyblock in krb5_creds],
3609                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3610     AC_TRY_COMPILE([#include <krb5.h>],
3611       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3612       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3613       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3615   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3616     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3617               [Whether the krb5_creds struct has a keyblock property])
3618   fi
3620   AC_CACHE_CHECK([for session in krb5_creds],
3621                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3622     AC_TRY_COMPILE([#include <krb5.h>],
3623       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3624       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3625       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3627   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3628     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3629               [Whether the krb5_creds struct has a session property])
3630   fi
3632   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3633                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3634     AC_TRY_COMPILE([#include <krb5.h>],
3635       [krb5_keyblock key; key.keyvalue.data = NULL;],
3636       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3637       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3639   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3640     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3641               [Whether the krb5_keyblock struct has a keyvalue property])
3642   fi
3644   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3645                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3646     AC_TRY_COMPILE([#include <krb5.h>],
3647       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3648       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3649       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3650   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3651                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3652     AC_TRY_COMPILE([#include <krb5.h>],
3653       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3654       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3655       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3656 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3657 # w.r.t. arcfour and windows, so we must not enable it here
3658   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3659           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3660     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3661               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3662   fi
3664   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3665                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3666     AC_TRY_COMPILE([#include <krb5.h>],
3667       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3668       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3669       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3671   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3672     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3673               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3674   fi
3676   AC_CACHE_CHECK([for KV5M_KEYTAB],
3677                  samba_cv_HAVE_KV5M_KEYTAB,[
3678     AC_TRY_COMPILE([#include <krb5.h>],
3679       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3680       samba_cv_HAVE_KV5M_KEYTAB=yes,
3681       samba_cv_HAVE_KV5M_KEYTAB=no)])
3683   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3684       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3685              [Whether the KV5M_KEYTAB option is available])
3686   fi
3688   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3689                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3690     AC_TRY_COMPILE([#include <krb5.h>],
3691       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3692       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3693       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3695   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3696     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3697               [Whether KRB5_KU_OTHER_CKSUM is available])
3698   fi
3700   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3701                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3702     AC_TRY_COMPILE([#include <krb5.h>],
3703       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3704       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3705       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3707   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3708     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3709               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3710   fi
3712   AC_CACHE_CHECK([for the krb5_princ_component macro],
3713                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3714     AC_TRY_LINK([#include <krb5.h>],
3715       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3716       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3717       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3719   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3720     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3721                [Whether krb5_princ_component is available])
3722   fi
3724   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3725                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3726     AC_TRY_COMPILE([#include <krb5.h>],
3727       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3728       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3729       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3731   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3732     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3733               [Whether krb5_keytab_entry has key member])
3734   fi
3736   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3737                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3738     AC_TRY_COMPILE([#include <krb5.h>],
3739       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3740       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3741       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3743   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3744     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3745               [Whether krb5_keytab_entry has keyblock member])
3746   fi
3748   AC_CACHE_CHECK([for magic in krb5_address],
3749                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3750     AC_TRY_COMPILE([#include <krb5.h>],
3751       [krb5_address addr; addr.magic = 0;],
3752       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3753       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3755   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3756     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3757               [Whether the krb5_address struct has a magic property])
3758   fi
3760   AC_CACHE_CHECK([for WRFILE: keytab support],
3761                 samba_cv_HAVE_WRFILE_KEYTAB,[
3762     AC_TRY_RUN([
3763 #include<krb5.h>
3764   main()
3765   {
3766     krb5_context context;
3767     krb5_keytab keytab;
3769     krb5_init_context(&context);
3770     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3771   }],
3772   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3773   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3775   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3776       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3777                [Whether the WRFILE:-keytab is supported])
3778   fi
3780   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3781                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3782     AC_TRY_COMPILE([#include <krb5.h>],
3783     [
3784     krb5_context context;
3785     krb5_principal principal;
3786     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3787     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3788     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3790   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3791     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3792               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3793   fi
3795   AC_CACHE_CHECK([for krb5_addresses type],
3796                 samba_cv_HAVE_KRB5_ADDRESSES,[
3797     AC_TRY_COMPILE([#include <krb5.h>],
3798       [krb5_addresses addr;],
3799       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3800       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3802   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3803     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3804                [Whether the type krb5_addresses type exists])
3805   fi
3807   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
3808                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
3809     AC_TRY_COMPILE([#include <krb5.h>],
3810     [
3811     krb5_mk_error(0,0,0);],
3812     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
3813     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
3815   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
3816     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
3817               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
3818   fi
3820   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
3821     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
3822         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
3823         AC_TRY_RUN_STRICT([
3824                 #include <stdlib.h>
3825                 #include <krb5.h>
3826                 int main(void) {
3827                         krb5_context context = NULL;
3828                         char *str = NULL;
3829                         krb5_enctype_to_string(context, 1, &str);
3830                         if (str) free (str); 
3831                         return 0;
3832                 }
3833                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3834                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
3835                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
3837     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
3838       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
3839                 [whether krb5_enctype_to_string takes krb5_context argument])
3840     fi
3842     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
3843         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
3844         AC_TRY_RUN_STRICT([
3845                 #include <krb5.h>
3846                 int main(void) {
3847                         char buf[256];
3848                         krb5_enctype_to_string(1, buf, 256);
3849                         return 0;
3850                 }
3851                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3852                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
3853                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
3855     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
3856       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
3857                 [whether krb5_enctype_to_string takes size_t argument])
3858     fi
3859   fi
3861   AC_CACHE_CHECK([for krb5_principal_get_realm],
3862                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
3863     AC_TRY_LINK([#include <krb5.h>],
3864       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
3865       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
3866       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
3868   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
3869     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
3870                [Whether the function krb5_principal_get_realm is defined])
3871   fi
3873   AC_CACHE_CHECK([for krb5_princ_realm],
3874                 samba_cv_HAVE_KRB5_PRINC_REALM,[
3875     AC_TRY_LINK([#include <krb5.h>],
3876       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
3877       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
3878       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
3880   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
3881     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
3882                [Whether the macro krb5_princ_realm is defined])
3883   fi
3885   #
3886   #
3887   # Now the decisions whether we can support krb5
3888   #
3889   # NOTE: all tests should be done before this block!
3890   #
3891   #
3892   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3893     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3894     use_ads=no
3895   fi
3897   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
3898           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
3899   then
3900     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
3901     use_ads=no
3902   fi
3904   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
3905           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
3906   then
3907     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
3908     use_ads=no
3909   fi
3911   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
3912           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
3913   then
3914     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
3915     use_ads=no
3916   fi
3918   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
3919           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
3920   then
3921     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
3922     use_ads=no
3923   fi
3925   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
3927       # We only need the following functions if we can't get the enctype
3928       # and kvno out of the ticket directly (ie. on Heimdal).
3930       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
3931       then
3932         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
3933         use_ads=no
3934       fi
3936       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
3937       then
3938         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
3939         use_ads=no
3940       fi
3942   fi
3944   if test x"$use_ads" = x"yes"; then
3945     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3946     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3947     if test x"$have_gssapi" = x"yes"; then
3948       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
3949     fi
3950   else
3951     if test x"$with_ads_support" = x"yes"; then
3952         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
3953     else
3954         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
3955     fi
3956     AC_REMOVE_DEFINE(HAVE_KRB5_H)
3957     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
3958     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
3959     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
3960     KRB5_LIBS=""
3961     with_ads_support=no
3962   fi
3963   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
3964   AC_MSG_RESULT([$use_ads])
3966 LIBS="$ac_save_LIBS"
3969 if test x"$use_ads" != xyes; then
3970         merged_build_possible=no
3973 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
3974 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
3977 ########################################################
3978 # Compile with DNS Updates support?
3980 with_dnsupdate_support=no
3981 AC_MSG_CHECKING([whether to enable DNS Updates support])
3983 AC_ARG_WITH(dnsupdate,
3984 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default no)])],
3985 [ case "$withval" in
3986     yes|no)
3987         with_dnsupdate_support=$withval
3988         ;;
3989   esac ])
3991 AC_MSG_RESULT($with_dnsupdate_support)
3993 if test x"$with_dnsupdate_support" != x"no"; then
3995   ################################################################
3996   # first test for Active Directory support being enabled
3997   #if test x"$with_ads_support" = x"no"; then
3998   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
3999   #             with_dnsupdate_support=no
4000   #fi           
4001   ##################################################################
4002   # then test for uuid.h (necessary to generate unique DNS keynames
4003   # (uuid.h is required for this test)
4004   AC_CHECK_HEADERS(uuid/uuid.h)
4006   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4007         if test x"$with_dnsupdate_support" = x"yes"; then
4008          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4009         else
4010          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4011         fi
4012         with_dnsupdate_support=no
4013   fi
4016 if test x"$with_dnsupdate_support" != x"no"; then
4018   ########################################################
4019   # Now see if we can find the uuid libs in standard paths
4020   # On some systems, the uuid API is in libc, so we have to
4021   # be careful not to insert a spurious -luuid.
4023   UUID_LIBS=""
4024   AC_LIBTESTFUNC(uuid, uuid_generate,
4025           [
4026             case " $LIBS " in
4027                 *\ -luuid\ *)
4028                 UUID_LIBS="-luuid"
4029                 SMB_REMOVE_LIB(uuid)
4030                 ;;
4031             esac
4033             with_dnsupdate_support=yes
4034             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4035         ],
4036         [
4037             if test x"$with_dnsupdate_support" = x"yes"; then
4038                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4039             else
4040                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4041             fi
4042             with_dnsupdate_support=no
4043         ])
4046 #################################################
4047 # check for automount support
4048 AC_MSG_CHECKING(whether to use automount)
4049 AC_ARG_WITH(automount,
4050 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4051 [ case "$withval" in
4052   yes)
4053     AC_MSG_RESULT(yes)
4054     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4055     ;;
4056   *)
4057     AC_MSG_RESULT(no)
4058     ;;
4059   esac ],
4060   AC_MSG_RESULT(no)
4063 #################################################
4064 # check for mount- and umount.cifs support
4065 CIFSMOUNT_PROGS=""
4066 INSTALL_CIFSMOUNT=""
4067 UNINSTALL_CIFSMOUNT=""
4068 AC_MSG_CHECKING(whether to build mount.cifs)
4069 AC_ARG_WITH(cifsmount,
4070 [AS_HELP_STRING([--with-cifsmount], [Include mount.cifs (Linux only) support (default=yes)])],
4071 [ case "$withval" in
4072   no)
4073         AC_MSG_RESULT(no)
4074         ;;
4075   *)
4076         case "$host_os" in
4077         *linux*)
4078                 AC_MSG_RESULT(yes)
4079                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs])
4080                 CIFSMOUNT_PROGS="bin/mount.cifs"
4081                 INSTALL_CIFSMOUNT="installcifsmount"
4082                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4083                 ;;
4084         *)
4085                 AC_MSG_ERROR(not on a linux system!)
4086                 ;;
4087         esac
4088     ;;
4089   esac ],
4090 [ case "$host_os" in
4091   *linux*)
4092         AC_MSG_RESULT(yes)
4093         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs])
4094         CIFSMOUNT_PROGS="bin/mount.cifs"
4095         INSTALL_CIFSMOUNT="installcifsmount"
4096         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4097         ;;
4098   *)
4099         AC_MSG_RESULT(no)
4100         ;;
4101   esac ]
4104 CIFSUMOUNT_PROGS=""
4105 INSTALL_CIFSUMOUNT=""
4106 UNINSTALL_CIFSUMOUNT=""
4107 AC_MSG_CHECKING(whether to build umount.cifs)
4108 AC_ARG_WITH(cifsumount,
4109 [AS_HELP_STRING([--with-cifsumount], [Include umount.cifs (Linux only) support (default=no)])],
4110 [ case "$withval" in
4111   yes)
4112         case "$host_os" in
4113         *linux*)
4114                 AC_MSG_RESULT(yes)
4115                 AC_DEFINE(WITH_CIFSUMOUNT,1,[Whether to build umount.cifs])
4116                 CIFSUMOUNT_PROGS="bin/umount.cifs"
4117                 INSTALL_CIFSUMOUNT="installcifsumount"
4118                 UNINSTALL_CIFSUMOUNT="uninstallcifsumount"
4119                 ;;
4120         *)
4121                 AC_MSG_ERROR(not on a linux system!)
4122                 ;;
4123         esac
4124         ;;
4125   *)
4126         AC_MSG_RESULT(no)
4127         ;;
4128   esac ],
4129   AC_MSG_RESULT(no)
4132 #################################################
4133 # check for cifs.upcall support
4134 AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
4135 CIFSUPCALL_PROGS=""
4136 INSTALL_CIFSUPCALL=""
4137 UNINSTALL_CIFSUPCALL=""
4138 AC_MSG_CHECKING(whether to build cifs.upcall)
4139 AC_ARG_WITH(cifsupcall,
4140 [AS_HELP_STRING([--with-cifsupcall], [Include cifs.upcall (Linux only) support (default=yes)])],
4141 [ case "$withval" in
4142   no)
4143         AC_MSG_RESULT(no)
4144         ;;
4145   *)
4146         case "$host_os" in
4147         *linux*)
4148                 if test x"$use_ads" != x"yes"; then
4149                         AC_MSG_ERROR(ADS support should be enabled for building cifs.upcall)
4150                 elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4151                         AC_MSG_ERROR(keyutils package is required for cifs.upcall)
4152                 else
4153                         AC_MSG_RESULT(yes)
4154                         AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4155                         CIFSUPCALL_PROGS="bin/cifs.upcall"
4156                         INSTALL_CIFSUPCALL="installcifsupcall"
4157                         UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4158                 fi
4159                 ;;
4160         *)
4161                 AC_MSG_ERROR(not on a linux system!)
4162                 ;;
4163         esac
4164     ;;
4165   esac ],
4166 [ case "$host_os" in
4167   *linux*)
4168         if test x"$use_ads" != x"yes"; then
4169                 AC_MSG_WARN(ADS support should be enabled for building cifs.upcall)
4170         elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4171                 AC_MSG_WARN(keyutils package is required for cifs.upcall)
4172         else
4173                 AC_MSG_RESULT(yes)
4174                 AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4175                 CIFSUPCALL_PROGS="bin/cifs.upcall"
4176                 INSTALL_CIFSUPCALL="installcifsupcall"
4177                 UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4178         fi
4179         ;;
4180   *)
4181         AC_MSG_RESULT(no)
4182         ;;
4183   esac ]
4187 #################################################
4188 # Check for a PAM clear-text auth, accounts, password
4189 # and session support. Most PAM implementations keep their
4190 # headers in /usr/include/security. Darwin keeps its in
4191 # /usr/include/pam.
4193 with_pam_for_crypt=no
4194 try_pam=auto
4195 AC_MSG_CHECKING(whether to try PAM support)
4196 AC_ARG_WITH(pam,
4197 [AS_HELP_STRING([--with-pam], [Include PAM support (default=auto)])],
4198 [ case "$withval" in
4199   yes|no|auto)
4200     try_pam=$withval
4201     ;;
4202   esac
4204 AC_MSG_RESULT([$try_pam])
4206 use_pam=no
4207 create_pam_modules=no
4208 if test x"${try_pam}" != x"no";then
4209         use_pam=yes
4210         create_pam_modules=yes
4212         # Most systems have PAM headers in /usr/include/security, but Darwin
4213         # has them in /usr/include/pam.
4214         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4215         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4216                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4217                 if test x"${try_pam}" = x"yes";then
4218                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4219                 fi
4220                 use_pam=no
4221                 create_pam_modules=no
4222         fi
4224         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4225         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4226                 if test x"${try_pam}" = x"yes";then
4227                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4228                 fi
4229                 use_pam=no
4230                 create_pam_modules=no
4231         fi
4233         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4234                 #if HAVE_SECURITY_PAM_APPL_H
4235                 #include <security/pam_appl.h>
4236                 #endif
4237                 #if HAVE_PAM_PAM_APPL_H
4238                 #include <pam/pam_appl.h>
4239                 #endif
4240         ]])
4241         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4242                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4243                 if test x"${try_pam}" = x"yes";then
4244                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4245        fi
4246                 create_pam_modules=no
4247     fi
4249         if test x"$use_pam" = x"yes"; then
4250     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4251                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4252                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4253     with_pam_for_crypt=yes
4255                 if test x"$create_pam_modules" = x"yes"; then
4256                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4257                         # this checks are optional,
4258                         # we don't care about the results here
4259                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4260                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4261                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4262                 else
4263                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4264                 fi
4265         fi
4266         AC_MSG_CHECKING(whether to use PAM support)
4267         AC_MSG_RESULT([$use_pam])
4269         AC_MSG_CHECKING(whether to have PAM MODULES support)
4270         AC_MSG_RESULT([$create_pam_modules])
4271 fi # try_pam != no
4273 #################################################
4274 # check for pam_smbpass support
4275 PAM_MODULES=""
4276 INSTALL_PAM_MODULES=""
4277 UNINSTALL_PAM_MODULES=""
4279 try_pam_smbpass=auto
4280 AC_MSG_CHECKING(whether to use pam_smbpass)
4281 AC_ARG_WITH(pam_smbpass,
4282 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=auto)])],
4283 [ case "$withval" in
4284   yes|no|auto)
4285     try_pam_smbpass=$withval
4286   ;;
4287   *)
4288     AC_MSG_ERROR([valid options are yes,no,auto])
4289   ;;
4290   esac
4293 if test x"${try_pam_smbpass}" = xno ; then
4294         use_pam_smbpass=no
4295 else
4296         use_pam_smbpass=yes
4297         # Conditions under which pam_smbpass can't be built.
4298         if test x"$BLDSHARED" != xtrue ; then
4299                 if test x"${try_pam_smbpass}" = xyes ; then
4300                         AC_MSG_ERROR([No support for shared modules])
4301                 fi
4302                 use_pam_smbpass=no
4303         elif test x"$create_pam_modules" != xyes ; then
4304                 if test x"${try_pam_smbpass}" = xyes ; then
4305                         AC_MSG_ERROR([No support for PAM MODULES])
4306                 fi
4307                 use_pam_smbpass=no
4308         fi
4310         if test x"${use_pam_smbpass}" = xyes ; then 
4311                 PAM_MODULES="pam_smbpass"
4312                 INSTALL_PAM_MODULES="installpammodules"
4313                 UNINSTALL_PAM_MODULES="uninstallpammodules"
4314         fi
4316 AC_MSG_RESULT([$use_pam_smbpass])
4320 ## moved after the check for -lcrypt in order to
4321 ## ensure that the necessary libraries are included
4322 ## check checking for truncated salt.  Wrapped by the
4323 ## $with_pam_for_crypt variable as above   --jerry
4325 if test $with_pam_for_crypt = no; then
4326 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4327 crypt_LIBS="$LIBS"
4328 LIBS="$AUTH_LIBS $LIBS"
4329 AC_TRY_RUN([#include "${srcdir-.}/../tests/crypttest.c"],
4330         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4331 LIBS="$crypt_LIBS"])
4332 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4333         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4337 #################################################
4338 # check for a NISPLUS_HOME support
4339 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4340 AC_ARG_WITH(nisplus-home,
4341 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4342 [ case "$withval" in
4343   yes)
4344     AC_MSG_RESULT(yes)
4345     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4346     ;;
4347   *)
4348     AC_MSG_RESULT(no)
4349     ;;
4350   esac ],
4351   AC_MSG_RESULT(no)
4354 #################################################
4355 # check for syslog logging
4356 AC_MSG_CHECKING(whether to use syslog logging)
4357 AC_ARG_WITH(syslog,
4358 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4359 [ case "$withval" in
4360   yes)
4361     AC_MSG_RESULT(yes)
4362     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4363     ;;
4364   *)
4365     AC_MSG_RESULT(no)
4366     ;;
4367   esac ],
4368   AC_MSG_RESULT(no)
4371 #################################################
4372 # check for custom syslog facility
4373 AC_MSG_CHECKING(whether to use a custom syslog facility)
4374 AC_ARG_WITH(syslog-facility,
4375 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4377   if test "$withval" = "no" ; then
4378     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4379   else
4380      if test "$withval" != "yes" ; then
4381         syslog_facility="$withval"
4382         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4383      fi
4384   fi
4387 #################################################
4388 # check for experimental disk-quotas support
4390 samba_cv_WITH_QUOTAS=auto
4391 samba_cv_TRY_QUOTAS=no
4392 samba_cv_RUN_QUOTA_TESTS=auto
4393 samba_cv_WITH_SYS_QUOTAS=auto
4394 samba_cv_TRY_SYS_QUOTAS=auto
4395 samba_cv_SYSQUOTA_FOUND=no
4397 AC_MSG_CHECKING(whether to try disk-quotas support)
4398 AC_ARG_WITH(quotas,
4399 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4400 [ case "$withval" in
4401   yes)
4402     AC_MSG_RESULT(yes)
4403     samba_cv_WITH_QUOTAS=yes
4404     samba_cv_TRY_QUOTAS=yes
4405     samba_cv_RUN_QUOTA_TESTS=yes
4406     #set sys quotas to auto in this case
4407     samba_cv_TRY_SYS_QUOTAS=auto
4408     ;;
4409   auto)
4410     AC_MSG_RESULT(auto)
4411     samba_cv_WITH_QUOTAS=auto
4412     samba_cv_TRY_QUOTAS=auto
4413     samba_cv_RUN_QUOTA_TESTS=auto
4414     #set sys quotas to auto in this case
4415     samba_cv_TRY_SYS_QUOTAS=auto
4416     ;;
4417   no)
4418     AC_MSG_RESULT(no)
4419     samba_cv_WITH_QUOTAS=no
4420     samba_cv_TRY_QUOTAS=no
4421     samba_cv_RUN_QUOTA_TESTS=no
4422     ;;
4423   *)
4424     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4425     ;;
4426   esac ],
4427   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4430 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4431 AC_ARG_WITH(sys-quotas,
4432 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4433 [ case "$withval" in
4434   yes)
4435     AC_MSG_RESULT(yes)
4436     samba_cv_WITH_SYS_QUOTAS=yes
4437     samba_cv_TRY_SYS_QUOTAS=yes
4438     samba_cv_RUN_QUOTA_TESTS=yes
4439     ;;
4440   auto)
4441     AC_MSG_RESULT(auto)
4442     samba_cv_WITH_SYS_QUOTAS=auto
4443     samba_cv_TRY_SYS_QUOTAS=auto
4444     samba_cv_RUN_QUOTA_TESTS=auto
4445     ;;
4446   no)
4447     AC_MSG_RESULT(no)
4448     samba_cv_WITH_SYS_QUOTAS=no
4449     samba_cv_TRY_SYS_QUOTAS=no
4450     ;;
4451   *)
4452     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4453     ;;
4454   esac ],
4455   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4458 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4459 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4460   case "$host_os" in
4461         *linux*)
4462             AC_MSG_RESULT(yes)
4463             samba_cv_TRY_SYS_QUOTAS=yes
4464             samba_cv_RUN_QUOTA_TESTS=yes
4465             ;;
4466         *)
4467             AC_MSG_RESULT(no)
4468             samba_cv_TRY_SYS_QUOTAS=no
4469             ;;
4470   esac
4473 #############################################
4474 # only check for quota stuff if --with-quotas
4475 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4477 case "$host_os" in
4478         # on linux we didn't need to test we have builtin support
4479         *linux*)
4480             samba_cv_SYSQUOTA_FOUND=yes
4481             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4482             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4483             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4484             AC_MSG_RESULT(yes)
4486             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4487             samba_cv_found_xfs_header=yes
4488             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4489             AC_MSG_RESULT(yes)
4490             ;;
4491         *solaris*)
4492             # need to set this define when using static linking (BUG 1473)
4493             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4494             ;;
4495         *)
4496             ;;
4497 esac
4499 # some broken header files need this
4500 AC_CHECK_HEADER(asm/types.h,[
4501             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4502             AC_ADD_INCLUDE(<asm/types.h>)
4503             ])
4505 # For quotas on Veritas VxFS filesystems
4506 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4508 # For quotas on Linux XFS filesystems
4509 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4511 # For sys/quota.h and linux/quota.h
4512 AC_CHECK_HEADERS(sys/quota.h)
4514 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4515 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4516 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4517 AC_TRY_COMPILE([
4518 #include "confdefs.h"
4519 #ifdef HAVE_SYS_TYPES_H
4520 #include <sys/types.h>
4521 #endif
4522 #ifdef HAVE_ASM_TYPES_H
4523 #include <asm/types.h>
4524 #endif
4525 #include <sys/quota.h>
4526 ],[int i = Q_XGETQUOTA;],
4527 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4528 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4529         samba_cv_found_xfs_header=yes
4533 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4534 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4535 AC_TRY_COMPILE([
4536 #include "confdefs.h"
4537 #ifdef HAVE_SYS_QUOTA_H
4538 #include <sys/quota.h>
4539 #endif
4541 struct dqblk D;
4542 D.dqb_fsoftlimit = 0;],
4543 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4544 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4545         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4548 ##################
4549 # look for a working quota system
4551 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4552 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4553 AC_TRY_RUN_STRICT([
4554 #define HAVE_QUOTACTL_4A 1
4555 #define AUTOCONF_TEST 1
4556 #include "confdefs.h"
4557 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4558            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4559 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4560     samba_cv_SYSQUOTA_FOUND=yes;
4561     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4562     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4566 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4567 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4568 AC_TRY_RUN_STRICT([
4569 #define HAVE_QUOTACTL_4B 1
4570 #define AUTOCONF_TEST 1
4571 #include "confdefs.h"
4572 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4573            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4574 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4575     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4576     samba_cv_SYSQUOTA_FOUND=yes;
4577     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4578     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4582 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4583 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4584 AC_TRY_RUN_STRICT([
4585 #define HAVE_QUOTACTL_3 1
4586 #define AUTOCONF_TEST 1
4587 #include "confdefs.h"
4588 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4589            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4590 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4591     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4592     samba_cv_SYSQUOTA_FOUND=yes;
4593     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4594     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4598 #################################################
4599 # check for mntent.h and struct mntent
4600 AC_CHECK_HEADERS(mntent.h)
4601 #################################################
4602 # check for setmntent,getmntent,endmntent
4603 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4605 #################################################
4606 # check for devnm.h and struct mntent
4607 AC_CHECK_HEADERS(devnm.h)
4608 #################################################
4609 # check for devnm
4610 AC_CHECK_FUNCS(devnm)
4612 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4613     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4614         # if --with-sys-quotas=yes then build it
4615         # you have can use the get/set quota command smb.conf
4616         # options then
4617         samba_cv_SYSQUOTA_FOUND=auto
4618     fi
4619     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4620         # if --with-sys-quotas=yes then build it
4621         # you have can use the get/set quota command smb.conf
4622         # options then
4623         samba_cv_TRY_SYS_QUOTAS=auto
4624     fi
4627 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4628 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4629 SAVE_CPPFLAGS="$CPPFLAGS"
4630 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4631 AC_TRY_COMPILE([
4632 #include "confdefs.h"
4633 #define NO_PROTO_H 1
4634 #define NO_CONFIG_H 1
4635 #define HAVE_SYS_QUOTAS 1
4636 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4637 #include "${srcdir-.}/lib/sysquotas.c"
4638 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4639 CPPFLAGS="$SAVE_CPPFLAGS"
4641 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4642 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4643     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4644         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4645         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4646         samba_cv_WE_USE_SYS_QUOTAS=yes
4647         AC_MSG_RESULT(yes)
4648     else
4649         AC_MSG_RESULT(no)
4650     fi
4654 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4655 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4656 SAVE_CPPFLAGS="$CPPFLAGS"
4657 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4658 AC_TRY_COMPILE([
4659 #include "confdefs.h"
4660 #define NO_PROTO_H 1
4661 #define NO_CONFIG_H 1
4662 #define HAVE_SYS_QUOTAS 1
4663 #define HAVE_XFS_QUOTAS 1
4664 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4665 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4666 CPPFLAGS="$SAVE_CPPFLAGS"
4668 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4669     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4670         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4671     fi
4675 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4676 SAVE_CPPFLAGS="$CPPFLAGS"
4677 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4678 AC_TRY_COMPILE([
4679 #include "confdefs.h"
4680 #define NO_PROTO_H 1
4681 #define NO_CONFIG_H 1
4682 #include "${srcdir-.}/smbd/quotas.c"
4683 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4684 CPPFLAGS="$SAVE_CPPFLAGS"
4686 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4687 AC_MSG_CHECKING(whether to use the old quota support)
4688     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4689       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4690         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4691         AC_MSG_RESULT(yes)
4692       else
4693         AC_MSG_RESULT(no)
4694       fi
4695     else
4696       AC_MSG_RESULT(no)
4697     fi
4700 ####################
4701 # End of quota check samba_cv_RUN_QUOTA_TESTS
4704 #################################################
4705 # check for experimental utmp accounting
4707 AC_MSG_CHECKING(whether to support utmp accounting)
4708 WITH_UTMP=yes
4709 AC_ARG_WITH(utmp,
4710 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
4711 [ case "$withval" in
4712   no)
4713                 WITH_UTMP=no
4714                 ;;
4715   *)
4716                 WITH_UTMP=yes
4717                 ;;
4718   esac ],
4721 # utmp requires utmp.h
4722 # Note similar check earlier, when checking utmp details.
4724 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4725         utmp_no_reason=", no utmp.h on $host_os"
4726         WITH_UTMP=no
4729 # Display test results
4731 if test x"$WITH_UTMP" = x"yes"; then
4732         AC_MSG_RESULT(yes)
4733         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4734 else
4735         AC_MSG_RESULT(no$utmp_no_reason)
4738 INSTALLLIBCMD_SH=:
4739 INSTALLLIBCMD_A=:
4740 UNINSTALLLIBCMD_SH=:
4741 UNINSTALLLIBCMD_A=:
4743 if test $BLDSHARED = true; then
4744         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
4745         UNINSTALLLIBCMD_SH="rm -f"
4747 if test $enable_static = yes; then
4748         INSTALLLIBCMD_A="\$(INSTALLCMD)"
4749         UNINSTALLLIBCMD_A="rm -f"
4752 #################################################
4753 # --disable-shared-libs
4754 # can be used to disable the internal use of shared libs altogether
4755 # (this only has an effect when building shared libs is enabled)
4757 USESHARED=false
4758 AC_SUBST(USESHARED)
4760 AC_MSG_CHECKING(whether to use shared libraries internally)
4761 AC_ARG_ENABLE([shared-libs],
4762         AS_HELP_STRING([--enable-shared-libs],
4763                 [Use shared libraries internally (default=yes)]),
4764         [enable_shared_libs=$enableval],
4765         [enable_shared_libs=yes])
4767 if test x"$enable_shared_libs" != x"no" ; then
4768         USESHARED=$BLDSHARED
4771 AC_MSG_RESULT([$USESHARED])
4773 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
4774         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
4777 #################################################
4778 # --with-static-libs=LIBS:
4779 #   link (internal) libs dynamically or statically?
4781 # If a subsystem is built as a library then this controls whether they are
4782 # linked into Samba targets statically or dynamically:
4784 # * If we build the shared library at all, we link dynamically by default.
4786 # * We only link statically if we don't build shared or if the library
4787 #   appears in the --with-static-libs configure option.
4789 # Example:
4790 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
4791 #   of linking the dynamic variant with -ltalloc.
4793 # NOTE: This option only affects libraries that we do not only build
4794 # but that samba also links against as libraries (as opposed to linking
4795 # the plain object files. - This has to be configured in Makefile.in.
4796 # So in particular it does not harm to give invalid or unknown names here.
4799 AC_ARG_WITH([static-libs],
4800         [AS_HELP_STRING([--with-static-libs=LIBS],
4801                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
4802         [AS_IF([test $withval],
4803                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
4804                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
4805                         eval LINK_$lib=STATIC
4806                 done], [])],
4807         [])
4810 # WORKAROUND:
4811 #   until we have organized other internal subsystems (as util, registry
4812 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
4813 #   dynamically to samba programs.
4815 LINK_LIBNETAPI=STATIC
4817 LINK_LIBSMBCLIENT=STATIC
4820 #  The library versions are hardcoded here
4821 #  and filled into the LIBFOO_SOVER variable.
4823 #  TODO: for talloc and tdb (at least), these should
4824 #  be extracted from their respective source directories
4826 AC_ARG_ENABLE(external_libtalloc, [AS_HELP_STRING([--enable-external-libtalloc], [Enable external talloc [default=auto]])], 
4827 [ enable_external_libtalloc=$enableval ], [ enable_external_libtalloc=auto ])
4829 if test "x$enable_external_libtalloc" != xno
4830 then
4831         PKG_CHECK_MODULES(LIBTALLOC, talloc >= 2.0.1,
4832                 [ enable_external_libtalloc=yes ],
4833                 [ if test x$enable_external_libtalloc = xyes; then
4834                         AC_MSG_ERROR([Unable to find libtalloc])
4835               else 
4836                         enable_external_libtalloc=no
4837                   fi
4838                 ])
4841 if test "x$enable_external_libtalloc" = xno
4842 then
4843         m4_include(../lib/talloc/libtalloc.m4)
4844         LINK_LIBTALLOC=STATIC
4845         SMB_LIBRARY(talloc, 2)
4846         LIBTALLOC_OBJ0=""
4847         for obj in ${TALLOC_OBJ}; do
4848                 LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
4849         done
4850         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
4851         AC_SUBST(LIBTALLOC_OBJ0)
4853         TALLOCTORT="bin/talloctort\$(EXEEXT)"
4854         AC_SUBST(TALLOCTORT)
4858 AC_ARG_ENABLE(external_libtdb,
4859         [AS_HELP_STRING([--enable-external-libtdb],
4860                 [Enable external tdb [default=auto]])],
4861                 [ enable_external_libtalloc=$enableval ],
4862                 [ enable_external_libtalloc=auto ])
4864 if test "x$enable_external_libtdb" != xno
4865 then
4866         PKG_CHECK_MODULES(LIBTDB, tdb >= 1.1.4,
4867                 [ enable_external_libtdb=yes ],
4868                 [
4869                 if test x$enable_external_libtdb = xyes; then
4870                         AC_MSG_ERROR([Unable to find libtdb])
4871                 else
4872                         enable_external_libtdb=no
4873                 fi
4874                 ])
4877 AC_SUBST(LIBTDB_OBJ0)
4878 if test "x$enable_external_libtdb" = xno
4879 then
4880         m4_include(../lib/tdb/libtdb.m4)
4881         LINK_LIBTDB=STATIC
4882         SMB_LIBRARY(tdb, 1)
4883         LIBTDB_OBJ0=""
4884         for obj in ${TDB_OBJ}; do
4885                 LIBTDB_OBJ0="${LIBTDB_OBJ0} ${tdbdir}/${obj}"
4886         done
4887         AC_SUBST(LIBTDB_OBJ0)
4888         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
4890         TDBBACKUP="bin/tdbbackup\$(EXEEXT)"
4891         AC_SUBST(TDBBACKUP)
4892         TDBDUMP="bin/tdbdump\$(EXEEXT)"
4893         AC_SUBST(TDBDUMP)
4894         TDBTOOL="bin/tdbtool\$(EXEEXT)"
4895         AC_SUBST(TDBTOOL)
4896         TDBTORTURE="bin/tdbtorture\$(EXEEXT)"
4897         AC_SUBST(TDBTORTURE)
4900 SMB_LIBRARY(netapi, 0)
4901 SMB_LIBRARY(smbclient, 0)
4902 SMB_LIBRARY(smbsharemodes, 0)
4903 SMB_LIBRARY(addns, 0, no, [undefined API])
4906 #################################################
4907 # these tests are taken from the GNU fileutils package
4908 AC_CHECKING(how to get filesystem space usage)
4909 space=no
4911 # Test for statvfs64.
4912 if test $space = no; then
4913   # SVR4
4914   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
4915   [AC_TRY_RUN([
4916 #if defined(HAVE_UNISTD_H)
4917 #include <unistd.h>
4918 #endif
4919 #include <sys/types.h>
4920 #include <sys/statvfs.h>
4921   main ()
4922   {
4923     struct statvfs64 fsd;
4924     exit (statvfs64 (".", &fsd));
4925   }],
4926   fu_cv_sys_stat_statvfs64=yes,
4927   fu_cv_sys_stat_statvfs64=no,
4928   fu_cv_sys_stat_statvfs64=cross)])
4929   if test $fu_cv_sys_stat_statvfs64 = yes; then
4930     space=yes
4931     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
4932   fi
4935 # Perform only the link test since it seems there are no variants of the
4936 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4937 # because that got a false positive on SCO OSR5.  Adding the declaration
4938 # of a `struct statvfs' causes this test to fail (as it should) on such
4939 # systems.  That system is reported to work fine with STAT_STATFS4 which
4940 # is what it gets when this test fails.
4941 if test $space = no; then
4942   # SVR4
4943   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
4944                  [AC_TRY_LINK([#include <sys/types.h>
4945 #include <sys/statvfs.h>],
4946                               [struct statvfs fsd; statvfs (0, &fsd);],
4947                               fu_cv_sys_stat_statvfs=yes,
4948                               fu_cv_sys_stat_statvfs=no)])
4949   if test $fu_cv_sys_stat_statvfs = yes; then
4950     space=yes
4951     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
4952   fi
4955 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
4956 # This is not the case on ancient Linux systems.
4958 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
4959     AC_TRY_COMPILE([#include <sys/types.h>
4960 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
4961         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
4962 if test x"$samba_cv_fsid_int" = x"yes"; then
4963     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
4966 # fsusage.c assumes that statvfs has an f_frsize entry. Some weird
4967 # systems use f_bsize.
4968 AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [
4969     AC_TRY_COMPILE([#include <sys/types.h>
4970 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0],
4971         samba_cv_frsize=yes,samba_cv_frsize=no)])
4972 if test x"$samba_cv_frsize" = x"yes"; then
4973     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
4976 # Some systems use f_flag in struct statvfs while others use f_flags
4977 AC_CACHE_CHECK([that statvfs.statvfs_f_flag works],samba_cv_statvfs_f_flag, [
4978     AC_TRY_COMPILE([#include <sys/types.h>
4979 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flag = 0],
4980         samba_cv_statvfs_f_flag=yes,samba_cv_statvfs_f_flag=no)])
4981 if test x"$samba_cv_statvfs_f_flag" = x"yes"; then
4982     AC_DEFINE(HAVE_STATVFS_F_FLAG, 1, [Whether statvfs.f_flag exists])
4985 AC_CACHE_CHECK([that statvfs.statvfs_f_flags works],samba_cv_statvfs_f_flags, [
4986     AC_TRY_COMPILE([#include <sys/types.h>
4987 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flags = 0],
4988         samba_cv_statvfs_f_flags=yes,samba_cv_statvfs_f_flags=no)])
4989 if test x"$samba_cv_statvfs_f_flags" = x"yes"; then
4990     AC_DEFINE(HAVE_STATVFS_F_FLAGS, 1, [Whether statvfs.f_flags exists])
4993 if test $space = no; then
4994   # DEC Alpha running OSF/1
4995   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
4996   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
4997   [AC_TRY_RUN([
4998 #include <sys/param.h>
4999 #include <sys/types.h>
5000 #include <sys/mount.h>
5001   main ()
5002   {
5003     struct statfs fsd;
5004     fsd.f_fsize = 0;
5005     exit (statfs (".", &fsd, sizeof (struct statfs)));
5006   }],
5007   fu_cv_sys_stat_statfs3_osf1=yes,
5008   fu_cv_sys_stat_statfs3_osf1=no,
5009   fu_cv_sys_stat_statfs3_osf1=no)])
5010   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5011   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5012     space=yes
5013     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5014   fi
5017 if test $space = no; then
5018 # AIX
5019   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5020 member (AIX, 4.3BSD)])
5021   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5022   [AC_TRY_RUN([
5023 #ifdef HAVE_SYS_PARAM_H
5024 #include <sys/param.h>
5025 #endif
5026 #ifdef HAVE_SYS_MOUNT_H
5027 #include <sys/mount.h>
5028 #endif
5029 #ifdef HAVE_SYS_VFS_H
5030 #include <sys/vfs.h>
5031 #endif
5032   main ()
5033   {
5034   struct statfs fsd;
5035   fsd.f_bsize = 0;
5036   exit (statfs (".", &fsd));
5037   }],
5038   fu_cv_sys_stat_statfs2_bsize=yes,
5039   fu_cv_sys_stat_statfs2_bsize=no,
5040   fu_cv_sys_stat_statfs2_bsize=no)])
5041   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5042   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5043     space=yes
5044     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5045   fi
5048 if test $space = no; then
5049 # SVR3
5050   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5051   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5052   [AC_TRY_RUN([#include <sys/types.h>
5053 #include <sys/statfs.h>
5054   main ()
5055   {
5056   struct statfs fsd;
5057   exit (statfs (".", &fsd, sizeof fsd, 0));
5058   }],
5059     fu_cv_sys_stat_statfs4=yes,
5060     fu_cv_sys_stat_statfs4=no,
5061     fu_cv_sys_stat_statfs4=no)])
5062   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5063   if test $fu_cv_sys_stat_statfs4 = yes; then
5064     space=yes
5065     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5066   fi
5069 if test $space = no; then
5070 # 4.4BSD and NetBSD
5071   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5072 member (4.4BSD and NetBSD)])
5073   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5074   [AC_TRY_RUN([#include <sys/types.h>
5075 #ifdef HAVE_SYS_PARAM_H
5076 #include <sys/param.h>
5077 #endif
5078 #ifdef HAVE_SYS_MOUNT_H
5079 #include <sys/mount.h>
5080 #endif
5081   main ()
5082   {
5083   struct statfs fsd;
5084   fsd.f_fsize = 0;
5085   exit (statfs (".", &fsd));
5086   }],
5087   fu_cv_sys_stat_statfs2_fsize=yes,
5088   fu_cv_sys_stat_statfs2_fsize=no,
5089   fu_cv_sys_stat_statfs2_fsize=no)])
5090   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5091   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5092     space=yes
5093         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5094   fi
5097 if test $space = no; then
5098   # Ultrix
5099   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5100   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5101   [AC_TRY_RUN([#include <sys/types.h>
5102 #ifdef HAVE_SYS_PARAM_H
5103 #include <sys/param.h>
5104 #endif
5105 #ifdef HAVE_SYS_MOUNT_H
5106 #include <sys/mount.h>
5107 #endif
5108 #ifdef HAVE_SYS_FS_TYPES_H
5109 #include <sys/fs_types.h>
5110 #endif
5111   main ()
5112   {
5113   struct fs_data fsd;
5114   /* Ultrix's statfs returns 1 for success,
5115      0 for not mounted, -1 for failure.  */
5116   exit (statfs (".", &fsd) != 1);
5117   }],
5118   fu_cv_sys_stat_fs_data=yes,
5119   fu_cv_sys_stat_fs_data=no,
5120   fu_cv_sys_stat_fs_data=no)])
5121   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5122   if test $fu_cv_sys_stat_fs_data = yes; then
5123     space=yes
5124     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5125   fi
5129 # As a gating factor for large file support, in order to
5130 # use <4GB files we must have the following minimal support
5131 # available.
5132 # long long, and a 64 bit off_t or off64_t.
5133 # If we don't have all of these then disable large
5134 # file support.
5136 AC_MSG_CHECKING([if large file support can be enabled])
5137 AC_TRY_COMPILE([
5138 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5139 #include <sys/types.h>
5140 #else
5141 __COMPILE_ERROR_
5142 #endif
5144 [int i],
5145 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5146 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5147         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5149 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5151 #################################################
5152 # check for cluster extensions
5154 CTDB_CFLAGS=""
5155 AC_SUBST(CTDB_CFLAGS)
5156 AC_ARG_WITH(ctdb,
5157 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
5158 [ case "$withval" in
5159   yes|no)
5160     AC_MSG_WARN([--with-ctdb called without argument])
5161     ;;
5162   *)
5163     CTDB_CPPFLAGS="-I$withval/include"
5164     ;;
5165   esac])
5167 SAVED_CPPFLAGS="$CPPFLAGS"
5168 CPPFLAGS="$CPPFLAGS $CTDB_CPPFLAGS"
5169 ctdb_broken="missing or broken headers"
5171 AC_CHECK_HEADERS(ctdb.h ctdb_private.h,,,[
5172 #include "confdefs.h"
5173 #define NO_CONFIG_H
5174 #include "replace.h"
5175 #include "system/wait.h"
5176 #include "system/network.h"
5177 #define private #error __USED_RESERVED_WORD_private__
5178 #include <talloc.h>
5179 #include <tdb.h>
5180 #include <ctdb.h>
5183 AC_HAVE_DECL(CTDB_CONTROL_TRANS2_COMMIT_RETRY,[
5184 #include "confdefs.h"
5185 #define NO_CONFIG_H
5186 #include "replace.h"
5187 #include "system/wait.h"
5188 #include "system/network.h"
5189 #include <talloc.h>
5190 #include <tdb.h>
5191 #include <ctdb.h>
5192 #include <ctdb_private.h>
5194 if test x"$ac_cv_have_CTDB_CONTROL_TRANS2_COMMIT_RETRY_decl" = x"yes"; then
5195         ctdb_broken=no
5196 else
5197         ctdb_broken="missing transaction support"
5200 AC_HAVE_DECL(CTDB_CONTROL_TRANS2_ACTIVE,[
5201 #include "confdefs.h"
5202 #define NO_CONFIG_H
5203 #include "replace.h"
5204 #include "system/wait.h"
5205 #include "system/network.h"
5206 #include <talloc.h>
5207 #include <tdb.h>
5208 #include <ctdb.h>
5209 #include <ctdb_private.h>
5211 if test x"$ac_cv_have_CTDB_CONTROL_TRANS2_ACTIVE_decl" = x"yes"; then
5212         ctdb_broken=no
5213 else
5214         ctdb_broken="transaction support too old"
5217 # in ctdb 1.0.57 ctdb_control_tcp was temparary renamed to ctdb_tcp_client
5218 AC_CHECK_TYPE(struct ctdb_tcp_client,[
5219         AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
5220 ],,[
5221 #include "confdefs.h"
5222 #define NO_CONFIG_H
5223 #include "replace.h"
5224 #include "system/wait.h"
5225 #include "system/network.h"
5226 #include <talloc.h>
5227 #include <tdb.h>
5228 #include <ctdb.h>
5229 #include <ctdb_private.h>
5232 AC_CHECK_TYPE(struct ctdb_control_tcp,[
5233         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5235         ctdb_broken="missing struct ctdb_control_tcp"
5237 #include "confdefs.h"
5238 #define NO_CONFIG_H
5239 #include "replace.h"
5240 #include "system/wait.h"
5241 #include "system/network.h"
5242 #include <talloc.h>
5243 #include <tdb.h>
5244 #include <ctdb.h>
5245 #include <ctdb_private.h>
5248 AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5249         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5250 ],,[
5251 #include "confdefs.h"
5252 #define NO_CONFIG_H
5253 #include "replace.h"
5254 #include "system/wait.h"
5255 #include "system/network.h"
5256 #include <talloc.h>
5257 #include <tdb.h>
5258 #include <ctdb.h>
5259 #include <ctdb_private.h>
5261 CPPFLAGS="$SAVED_CPPFLAGS"
5263 AC_MSG_CHECKING(cluster support)
5264 AC_ARG_WITH(cluster-support,
5265 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
5267 if test x"$with_cluster_support" = x ; then
5268         with_cluster_support="auto"
5271 if test x"$ac_cv_header_ctdb_private_h" != x"yes"; then
5272         if test "x$with_cluster_support" = "xyes"; then
5273                 AC_MSG_ERROR("ctdb_private.h is required for cluster support")
5274         fi
5275         with_cluster_support=no
5278 if test x"$ctdb_broken" != x"no"; then
5279         if test "x$with_cluster_support" = "xyes"; then
5280                 AC_MSG_ERROR(["cluster support: $ctdb_broken"])
5281         fi
5282         with_cluster_support=no
5285 if test "x$with_cluster_support" != "xno"; then
5286     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5287     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5288     AC_MSG_RESULT(yes)
5289 else
5290     AC_MSG_RESULT(no)
5293 #################################################
5294 # check for ACL support
5296 AC_MSG_CHECKING(whether to support ACLs)
5297 AC_ARG_WITH(acl-support,
5298 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5299 [ case "$withval" in
5300         yes|no)
5301                 with_acl_support="$withval"
5302                 ;;
5303   esac ])
5305 if test x"$with_acl_support" = x ; then
5306         with_acl_support="auto"
5309 AC_MSG_RESULT($with_acl_support)
5311 if test x"$with_acl_support" = x"no"; then
5312         AC_MSG_RESULT(Disabling ACL support)
5313         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5314 else
5315         AC_MSG_NOTICE(checking whether ACL support is available:)
5316         case "$host_os" in
5317         *sysv5*)
5318                 AC_MSG_NOTICE(Using UnixWare ACLs)
5319                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5320                 default_static_modules="$default_static_modules vfs_solarisacl"
5321                 ;;
5322         *solaris*)
5323                 AC_MSG_NOTICE(Using solaris ACLs)
5324                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5325                 ACL_LIBS="$ACL_LIBS -lsec"
5326                 default_static_modules="$default_static_modules vfs_solarisacl"
5327                 ;;
5328         *hpux*)
5329                 AC_MSG_NOTICE(Using HPUX ACLs)
5330                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5331                 default_static_modules="$default_static_modules vfs_hpuxacl"
5332                 ;;
5333         *irix*)
5334                 AC_MSG_NOTICE(Using IRIX ACLs)
5335                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5336                 default_static_modules="$default_static_modules vfs_irixacl"
5337                 ;;
5338         *aix*)
5339                 AC_MSG_NOTICE(Using AIX ACLs)
5340                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5341                 default_static_modules="$default_static_modules vfs_aixacl"
5342                 ;;
5343         *osf*)
5344                 AC_MSG_NOTICE(Using Tru64 ACLs)
5345                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5346                 ACL_LIBS="$ACL_LIBS -lpacl"
5347                 default_static_modules="$default_static_modules vfs_tru64acl"
5348                 ;;
5349         *darwin*)
5350                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5351                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5352                 ;;
5353         *)
5354                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5355                 case "$host_os" in
5356                 *linux*)
5357                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5358                         ;;
5359                 esac
5360                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5361                         acl_LIBS=$LIBS
5362                         LIBS="$LIBS $ACL_LIBS"
5363                         AC_TRY_LINK([
5364                                 #include <sys/types.h>
5365                                 #include <sys/acl.h>
5366                         ],[
5367                                 acl_t acl;
5368                                 int entry_id;
5369                                 acl_entry_t *entry_p;
5370                                 return acl_get_entry(acl, entry_id, entry_p);
5371                         ],
5372                         [samba_cv_HAVE_POSIX_ACLS=yes],
5373                         [samba_cv_HAVE_POSIX_ACLS=no])
5374                         LIBS=$acl_LIBS
5375                 ])
5376                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5377                         AC_MSG_NOTICE(Using posix ACLs)
5378                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5379                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5380                                 acl_LIBS=$LIBS
5381                                 LIBS="$LIBS $ACL_LIBS"
5382                                 AC_TRY_LINK([
5383                                         #include <sys/types.h>
5384                                         #include <sys/acl.h>
5385                                 ],[
5386                                         acl_permset_t permset_d;
5387                                         acl_perm_t perm;
5388                                         return acl_get_perm_np(permset_d, perm);
5389                                 ],
5390                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5391                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5392                                 LIBS=$acl_LIBS
5393                         ])
5394                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5395                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5396                         fi
5397                         default_static_modules="$default_static_modules vfs_posixacl"
5398                 else
5399                         AC_MSG_NOTICE(ACL support is not avaliable)
5400                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5401                 fi
5402                 ;;
5403         esac
5404 fi # with_acl_support
5408 #################################################
5409 # check for AIO support
5411 AC_MSG_CHECKING(whether to support asynchronous io)
5412 AC_ARG_WITH(aio-support,
5413 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5414 [ case "$withval" in
5415   yes)
5417         AC_MSG_RESULT(yes)
5418         case "$host_os" in
5419         *)
5420                 AIO_LIBS=$LIBS
5421                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5422                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5423                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5424                 aio_LIBS=$LIBS
5425                 LIBS=$AIO_LIBS
5426                 AC_TRY_LINK([#include <sys/types.h>
5427 #include <aio.h>],
5428 [ struct aiocb a; return aio_read(&a);],
5429 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5430                 LIBS=$aio_LIBS])
5431                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5432                 aio_LIBS=$LIBS
5433                 LIBS=$AIO_LIBS
5434                 AC_TRY_LINK([#include <sys/types.h>
5435 #include <aio.h>],
5436 [ struct aiocb64 a; return aio_read64(&a);],
5437 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5438                 LIBS=$aio_LIBS])
5439                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5440                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5441                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5442                         LIBS=$AIO_LIBS
5443                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5444                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5445                         LIBS=$AIO_LIBS
5446                 fi
5448                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5449                         AC_MSG_CHECKING(for aio_read)
5450                         AC_LINK_IFELSE([#include <aio.h>
5451 int main() { struct aiocb a; return aio_read(&a); }],
5452 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5453 [AC_MSG_RESULT(no)])
5455                         AC_MSG_CHECKING(for aio_write)
5456                         AC_LINK_IFELSE([#include <aio.h>
5457 int main() { struct aiocb a; return aio_write(&a); }],
5458 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5459 [AC_MSG_RESULT(no)])
5461                         AC_MSG_CHECKING(for aio_fsync)
5462                         AC_LINK_IFELSE([#include <aio.h>
5463 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5464 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5465 [AC_MSG_RESULT(no)])
5467                         AC_MSG_CHECKING(for aio_return)
5468                         AC_LINK_IFELSE([#include <aio.h>
5469 int main() { struct aiocb a; return aio_return(&a); }],
5470 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5471 [AC_MSG_RESULT(no)])
5473                         AC_MSG_CHECKING(for aio_error)
5474                         AC_LINK_IFELSE([#include <aio.h>
5475 int main() { struct aiocb a; return aio_error(&a); }],
5476 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5477 [AC_MSG_RESULT(no)])
5479                         AC_MSG_CHECKING(for aio_cancel)
5480                         AC_LINK_IFELSE([#include <aio.h>
5481 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5482 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5483 [AC_MSG_RESULT(no)])
5485                         AC_MSG_CHECKING(for aio_suspend)
5486                         AC_LINK_IFELSE([#include <aio.h>
5487 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5488 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5489 [AC_MSG_RESULT(no)])
5490                 fi
5492                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5493                         AC_MSG_CHECKING(for aio_read64)
5494                         AC_LINK_IFELSE([#include <aio.h>
5495 int main() { struct aiocb a; return aio_read64(&a); }],
5496 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5497 [AC_MSG_RESULT(no)])
5499                         AC_MSG_CHECKING(for aio_write64)
5500                         AC_LINK_IFELSE([#include <aio.h>
5501 int main() { struct aiocb a; return aio_write64(&a); }],
5502 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5503 [AC_MSG_RESULT(no)])
5505                         AC_MSG_CHECKING(for aio_fsync64)
5506                         AC_LINK_IFELSE([#include <aio.h>
5507 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5508 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5509 [AC_MSG_RESULT(no)])
5511                         AC_MSG_CHECKING(for aio_return64)
5512                         AC_LINK_IFELSE([#include <aio.h>
5513 int main() { struct aiocb a; return aio_return64(&a); }],
5514 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5515 [AC_MSG_RESULT(no)])
5517                         AC_MSG_CHECKING(for aio_error64)
5518                         AC_LINK_IFELSE([#include <aio.h>
5519 int main() { struct aiocb a; return aio_error64(&a); }],
5520 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5521 [AC_MSG_RESULT(no)])
5523                         AC_MSG_CHECKING(for aio_cancel64)
5524                         AC_LINK_IFELSE([#include <aio.h>
5525 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5526 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5527 [AC_MSG_RESULT(no)])
5529                         AC_MSG_CHECKING(for aio_suspend64)
5530                         AC_LINK_IFELSE([#include <aio.h>
5531 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5532 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5533 [AC_MSG_RESULT(no)])
5534                 fi
5535             ;;
5536         esac
5537         ;;
5538   *)
5539     AC_MSG_RESULT(no)
5540     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5541     ;;
5542   esac ],
5543   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5544   AC_MSG_RESULT(no)
5547 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5548         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5549                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5550                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5551         fi
5554 #################################################
5555 # check for sendfile support
5557 with_sendfile_support=yes
5558 AC_MSG_CHECKING(whether to check to support sendfile)
5559 AC_ARG_WITH(sendfile-support,
5560 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5561 [ case "$withval" in
5562   yes)
5564         AC_MSG_RESULT(yes);
5566         case "$host_os" in
5567         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5568                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5569                 AC_TRY_LINK([#include <sys/sendfile.h>],
5571 int tofd, fromfd;
5572 off64_t offset;
5573 size_t total;
5574 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5576 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5578                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5579                 AC_TRY_LINK([#include <sys/sendfile.h>],
5581 int tofd, fromfd;
5582 off_t offset;
5583 size_t total;
5584 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5586 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5588 # Try and cope with broken Linux sendfile....
5589                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5590                 AC_TRY_LINK([\
5591 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5592 #undef _FILE_OFFSET_BITS
5593 #endif
5594 #include <sys/sendfile.h>],
5596 int tofd, fromfd;
5597 off_t offset;
5598 size_t total;
5599 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5601 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5603         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5604                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5605                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5606                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5607         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5608                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5609                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5610                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5611         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5612                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5613                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5614         else
5615                 AC_MSG_RESULT(no);
5616         fi
5618         ;;
5619         *freebsd* | *dragonfly* )
5620                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5621                 AC_TRY_LINK([\
5622 #include <sys/types.h>
5623 #include <unistd.h>
5624 #include <sys/socket.h>
5625 #include <sys/uio.h>],
5627         int fromfd, tofd, ret, total=0;
5628         off_t offset, nwritten;
5629         struct sf_hdtr hdr;
5630         struct iovec hdtrl;
5631         hdr.headers = &hdtrl;
5632         hdr.hdr_cnt = 1;
5633         hdr.trailers = NULL;
5634         hdr.trl_cnt = 0;
5635         hdtrl.iov_base = NULL;
5636         hdtrl.iov_len = 0;
5637         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5639 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5641         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5642                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5643                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5644                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5645         else
5646                 AC_MSG_RESULT(no);
5647         fi
5648         ;;
5650         *hpux*)
5651                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5652                 AC_TRY_LINK([\
5653 #include <sys/socket.h>
5654 #include <sys/uio.h>],
5656         int fromfd, tofd;
5657         size_t total=0;
5658         struct iovec hdtrl[2];
5659         ssize_t nwritten;
5660         off64_t offset;
5662         hdtrl[0].iov_base = 0;
5663         hdtrl[0].iov_len = 0;
5665         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5667 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5668         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5669                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5670                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5671                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5672         else
5673                 AC_MSG_RESULT(no);
5674         fi
5676                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5677                 AC_TRY_LINK([\
5678 #include <sys/socket.h>
5679 #include <sys/uio.h>],
5681         int fromfd, tofd;
5682         size_t total=0;
5683         struct iovec hdtrl[2];
5684         ssize_t nwritten;
5685         off_t offset;
5687         hdtrl[0].iov_base = 0;
5688         hdtrl[0].iov_len = 0;
5690         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5692 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5693         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5694                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5695                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5696                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5697         else
5698                 AC_MSG_RESULT(no);
5699         fi
5700         ;;
5702         *solaris*)
5703                 AC_CHECK_LIB(sendfile,sendfilev)
5704                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5705                 AC_TRY_LINK([\
5706 #include <sys/sendfile.h>],
5708         int sfvcnt;
5709         size_t xferred;
5710         struct sendfilevec vec[2];
5711         ssize_t nwritten;
5712         int tofd;
5714         sfvcnt = 2;
5716         vec[0].sfv_fd = SFV_FD_SELF;
5717         vec[0].sfv_flag = 0;
5718         vec[0].sfv_off = 0;
5719         vec[0].sfv_len = 0;
5721         vec[1].sfv_fd = 0;
5722         vec[1].sfv_flag = 0;
5723         vec[1].sfv_off = 0;
5724         vec[1].sfv_len = 0;
5725         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5727 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5729         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5730                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5731                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5732                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5733         else
5734                 AC_MSG_RESULT(no);
5735         fi
5737                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5738                 AC_TRY_LINK([\
5739 #include <sys/sendfile.h>],
5741         int sfvcnt;
5742         size_t xferred;
5743         struct sendfilevec vec[2];
5744         ssize_t nwritten;
5745         int tofd;
5747         sfvcnt = 2;
5749         vec[0].sfv_fd = SFV_FD_SELF;
5750         vec[0].sfv_flag = 0;
5751         vec[0].sfv_off = 0;
5752         vec[0].sfv_len = 0;
5754         vec[1].sfv_fd = 0;
5755         vec[1].sfv_flag = 0;
5756         vec[1].sfv_off = 0;
5757         vec[1].sfv_len = 0;
5758         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5760 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5762         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5763                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5764                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5765                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5766         else
5767                 AC_MSG_RESULT(no);
5768         fi
5769         ;;
5770         *aix*)
5771                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5772                 AC_TRY_LINK([\
5773 #include <sys/socket.h>],
5775         int fromfd, tofd;
5776         size_t total=0;
5777         struct sf_parms hdtrl;
5778         ssize_t nwritten;
5779         off64_t offset;
5781         hdtrl.header_data = 0;
5782         hdtrl.header_length = 0;
5783         hdtrl.file_descriptor = fromfd;
5784         hdtrl.file_offset = 0;
5785         hdtrl.file_bytes = 0;
5786         hdtrl.trailer_data = 0;
5787         hdtrl.trailer_length = 0;
5789         nwritten = send_file(&tofd, &hdtrl, 0);
5791 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5792         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5793                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5794                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5795                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5796         else
5797                 AC_MSG_RESULT(no);
5798         fi
5799         ;;
5800         *)
5801         ;;
5802         esac
5803         ;;
5804   *)
5805     AC_MSG_RESULT(no)
5806     ;;
5807   esac ],
5808   AC_MSG_RESULT(yes)
5811 ############################################
5812 # See if we have the Linux readahead syscall.
5814 AC_CACHE_CHECK([for Linux readahead],
5815                 samba_cv_HAVE_LINUX_READAHEAD,[
5816     AC_TRY_LINK([
5817 #if defined(HAVE_UNISTD_H)
5818 #include <unistd.h>
5819 #endif
5820 #include <fcntl.h>],
5821     [ssize_t err = readahead(0,0,0x80000);],
5822     samba_cv_HAVE_LINUX_READAHEAD=yes,
5823     samba_cv_HAVE_LINUX_READAHEAD=no)])
5825 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5826   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5827              [Whether Linux readahead is available])
5830 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
5832 ############################################
5833 # See if we have the posix_fadvise syscall.
5835 AC_CACHE_CHECK([for posix_fadvise],
5836                 samba_cv_HAVE_POSIX_FADVISE,[
5837     AC_TRY_LINK([
5838 #if defined(HAVE_UNISTD_H)
5839 #include <unistd.h>
5840 #endif
5841 #include <fcntl.h>],
5842     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5843     samba_cv_HAVE_POSIX_FADVISE=yes,
5844     samba_cv_HAVE_POSIX_FADVISE=no)])
5846 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5847   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5848              [Whether posix_fadvise is available])
5851 ############################################
5852 # See if we have the Linux splice syscall.
5854 case "$host_os" in
5855 *linux*)
5856 AC_CACHE_CHECK([for Linux splice],
5857                 samba_cv_HAVE_LINUX_SPLICE,[
5858     AC_TRY_LINK([
5859 #if defined(HAVE_UNISTD_H)
5860 #include <unistd.h>
5861 #endif
5862 #include <fcntl.h>],
5863     [long ret = splice(0,0,1,0,400,0);],
5864     samba_cv_HAVE_LINUX_SPLICE=yes,
5865     samba_cv_HAVE_LINUX_SPLICE=no)])
5868 samba_cv_HAVE_LINUX_SPLICE=no
5870 esac
5872 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
5873   AC_DEFINE(HAVE_LINUX_SPLICE,1,
5874              [Whether Linux splice is available])
5877 AC_HAVE_DECL(splice, [#include <fcntl.h>])
5879 ############################################
5880 # See if we have the a broken readlink syscall.
5882 AC_CACHE_CHECK([for a broken readlink syscall],samba_cv_HAVE_BROKEN_READLINK,[
5883 AC_TRY_RUN([#include "${srcdir-.}/../tests/readlink.c"],
5884         samba_cv_HAVE_BROKEN_READLINK=no,samba_cv_HAVE_BROKEN_READLINK=yes,samba_cv_HAVE_BROKEN_READLINK=cross)
5886 if test x"$samba_cv_HAVE_BROKEN_READLINK" = x"yes"; then
5887         AC_DEFINE(HAVE_BROKEN_READLINK,1,[Whether the readlink syscall is broken])
5890 #################################################
5891 # Check whether winbind is supported on this platform.  If so we need to
5892 # build and install client programs, sbin programs and shared libraries
5894 AC_MSG_CHECKING(whether to build winbind)
5896 # Initially, the value of $host_os decides whether winbind is supported
5898 HAVE_WINBIND=yes
5899 HAVE_WBCLIENT=no
5901 # Define external wbclient library to link against.  This disables winbind.
5902 # We define this here so --with-winbind can override it.
5903 AC_ARG_WITH(wbclient,
5904 [AS_HELP_STRING([--with-wbclient], [Use external wbclient (optional)])],
5906   case "$withval" in
5907         no)
5908                 HAVE_WBCLIENT=no
5909                 ;;
5910         yes)
5911                 HAVE_WBCLIENT=yes
5912                 HAVE_WINBIND=no
5913                 ;;
5914         *)
5915                 HAVE_WBCLIENT=yes
5916                 HAVE_WINBIND=no
5917                 WBCLIENT_INCLUDES="-I$withval/include"
5918                 WBCLIENT_LDFLAGS="-L$withval/lib"
5919                 ;;
5920   esac ],
5923 AC_SUBST(WBCLIENT_INCLUDES)
5924 AC_SUBST(WBCLIENT_LDFLAGS)
5925 AC_SUBST(WBCLIENT_LIBS)
5928 # Define the winbind shared library name and any specific linker flags
5929 # it needs to be built with.
5931 WINBIND_NSS="../nsswitch/libnss_winbind.$SHLIBEXT"
5932 WINBIND_WINS_NSS="../nsswitch/libnss_wins.$SHLIBEXT"
5933 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5934 NSSSONAMEVERSIONSUFFIX=""
5935 WINBIND_NSS_PTHREAD=""
5937 case "$host_os" in
5938         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5939                 NSSSONAMEVERSIONSUFFIX=".2"
5940                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_linux.o"
5941                 ;;
5942         *freebsd[[5-9]]*)
5943                 # FreeBSD winbind client is implemented as a wrapper around
5944                 # the Linux version.
5945                 NSSSONAMEVERSIONSUFFIX=".1"
5946                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_freebsd.o \
5947                     ../nsswitch/winbind_nss_linux.o"
5948                 WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
5949                 WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
5950                 ;;
5952         *netbsd*[[3-9]]*)
5953                 # NetBSD winbind client is implemented as a wrapper
5954                 # around the Linux version. It needs getpwent_r() to
5955                 # indicate libc's use of the correct nsdispatch API.
5956                 #
5957                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5958                         WINBIND_NSS_EXTRA_OBJS="\
5959                             ../nsswitch/winbind_nss_netbsd.o \
5960                             ../nsswitch/winbind_nss_linux.o"
5961                         WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
5962                         WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
5963                 else
5964                         HAVE_WINBIND=no
5965                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5966                 fi
5967                 ;;
5968         *irix*)
5969                 # IRIX has differently named shared libraries
5970                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_irix.o"
5971                 WINBIND_NSS="../nsswitch/libns_winbind.$SHLIBEXT"
5972                 WINBIND_WINS_NSS="../nsswitch/libns_wins.$SHLIBEXT"
5973                 ;;
5974         *solaris*)
5975                 # Solaris winbind client is implemented as a wrapper around
5976                 # the Linux version.
5977                 NSSSONAMEVERSIONSUFFIX=".1"
5978                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o \
5979                     ../nsswitch/winbind_nss_linux.o"
5980                 ;;
5981         *hpux11*)
5982                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o"
5983                 ;;
5984         *aix*)
5985                 # AIX has even differently named shared libraries.  No
5986                 # WINS support has been implemented yet.
5987                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_aix.o"
5988                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5989                 WINBIND_NSS="../nsswitch/WINBIND"
5990                 WINBIND_WINS_NSS=""
5991                 ;;
5992         *)
5993                 HAVE_WINBIND=no
5994                 winbind_no_reason=", unsupported on $host_os"
5995                 ;;
5996 esac
5998 # Check the setting of --with-winbind
6000 AC_ARG_WITH(winbind,
6001 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
6003   case "$withval" in
6004         yes)
6005                 HAVE_WINBIND=yes
6006                 HAVE_WBCLIENT=no
6007                 ;;
6008         no)
6009                 HAVE_WINBIND=no
6010                 winbind_reason=""
6011                 ;;
6012   esac ],
6015 # We need unix domain sockets for winbind
6017 if test x"$HAVE_WINBIND" = x"yes"; then
6018         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
6019                 winbind_no_reason=", no unix domain socket support on $host_os"
6020                 HAVE_WINBIND=no
6021         fi
6024 # Display test results
6026 if test x"$HAVE_WINBIND" = x"no"; then
6027         WINBIND_NSS=""
6028         WINBIND_WINS_NSS=""
6030 if test x"$HAVE_WBCLIENT" = x"yes"; then
6031         AC_CHECK_LIB(wbclient, wbcInterfaceDetails,
6032                      [LIBWBCLIENT_LIBS="-lwbclient"], AC_MSG_ERROR([Could not find wbclient]), [$WBCLIENT_LDFLAGS])
6033         LIBWBCLIENT_LIBS="$LIBWBCLIENT_LIBS $WBCLIENT_LDFLAGS"
6034         AC_MSG_RESULT(yes)
6035         AC_DEFINE(WITH_WINBIND,1,[Whether to link to wbclient])
6036         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6037 else
6038         if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
6039                 BUILD_LIBWBCLIENT_SHARED=no
6040         else
6041                 BUILD_LIBWBCLIENT_SHARED=yes
6042         fi
6044         LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
6045         LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
6046         LIBWBCLIENT_SOVER=0
6047         if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
6048                 NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6049                 ## Only worry about libwbclient if we have shared
6050                 # library support
6051                 LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
6052                 LIBWBCLIENT=libwbclient
6053                 INSTALL_LIBWBCLIENT=installlibwbclient
6054                 UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
6055                 LIBWBCLIENT_LIBS="-lwbclient"
6056         else
6057                 LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
6058                 LIBWBCLIENT_LIBS=$LIBWBCLIENT_STATIC_TARGET
6059         fi
6062 if test x"$HAVE_WINBIND" = x"yes"; then
6063         AC_MSG_RESULT(yes)
6064         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6066         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6067         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6068         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6069                 PAM_MODULES="$PAM_MODULES pam_winbind"
6070                 INSTALL_PAM_MODULES="installpammodules"
6071                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6072         fi
6073 else
6074         AC_MSG_RESULT(no$winbind_no_reason)
6077 AC_CHECK_LIB(pthread, pthread_mutex_lock, [WINBIND_NSS_PTHREAD="-lpthread"
6078                         AC_DEFINE(HAVE_PTHREAD, 1, [whether pthread exists])
6079                         samba_cv_HAVE_PTHREAD=yes],
6080                         samba_cv_HAVE_PTHREAD=no)
6082 AC_SUBST(WINBIND_NSS_PTHREAD)
6083 AC_SUBST(WINBIND_NSS)
6084 AC_SUBST(WINBIND_WINS_NSS)
6085 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
6086 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
6087 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
6089 AC_SUBST(WINBIND_KRB5_LOCATOR)
6091 # Solaris 10 does have new member in nss_XbyY_key
6092 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6093                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6094                 [#include <nss_dbdefs.h>])
6096 # Solaris has some extra fields in struct passwd that need to be
6097 # initialised otherwise nscd crashes.
6099 AC_CHECK_MEMBER(struct passwd.pw_comment,
6100                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6101                 [#include <pwd.h>])
6103 AC_CHECK_MEMBER(struct passwd.pw_age,
6104                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6105                 [#include <pwd.h>])
6107 # AIX 4.3.x and 5.1 do not have as many members in
6108 # struct secmethod_table as AIX 5.2
6109 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6110        [#include <usersec.h>])
6111 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6112        [#include <usersec.h>])
6114 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6115 AC_TRY_COMPILE([#include <sys/types.h>
6116 #include <sys/socket.h>],
6117 [struct ucred cred;
6118  socklen_t cred_len;
6119  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6121 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6122 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6123     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6127 #################################################
6128 # Check to see if we should use the included popt
6130 AC_ARG_WITH(included-popt,
6131 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
6133   case "$withval" in
6134         yes)
6135                 INCLUDED_POPT=yes
6136                 ;;
6137         no)
6138                 INCLUDED_POPT=no
6139                 ;;
6140   esac ],
6142 if test x"$INCLUDED_POPT" != x"yes"; then
6143     AC_CHECK_LIB(popt, poptGetContext,
6144                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6147 AC_MSG_CHECKING(whether to use included popt)
6148 if test x"$INCLUDED_POPT" = x"yes"; then
6149     AC_MSG_RESULT(yes)
6150     BUILD_POPT='$(POPT_OBJ)'
6151     POPTLIBS='$(POPT_OBJ)'
6152     FLAGS1="-I\$(srcdir)/../lib/popt"
6153 else
6154     AC_MSG_RESULT(no)
6155         BUILD_POPT=""
6156     POPTLIBS="-lpopt"
6158 AC_SUBST(BUILD_POPT)
6159 AC_SUBST(POPTLIBS)
6160 AC_SUBST(FLAGS1)
6162 #################################################
6163 # Check if user wants DNS service discovery support
6165 AC_ARG_ENABLE(dnssd,
6166 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=no)])])
6168 AC_SUBST(DNSSD_LIBS)
6169 if test x"$enable_dnssd" = x"yes"; then
6170     have_dnssd_support=yes
6172     AC_CHECK_HEADERS(dns_sd.h)
6173     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6174         have_dnssd_support=no
6175     fi
6177     # On Darwin the DNSSD API is in libc, but on other platforms it's
6178     # probably in -ldns_sd
6179     AC_CHECK_FUNCS(DNSServiceRegister)
6180     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6181     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6182             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6183         have_dnssd_support=no
6184     fi
6186     if test x"$have_dnssd_support" = x"yes"; then
6187         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6188                 [Whether to enable DNS service discovery support])
6189     else
6190         if test x"$enable_dnssd" = x"yes"; then
6191             AC_MSG_ERROR(DNS service discovery support not available)
6192         fi
6193     fi
6197 #################################################
6198 # Check if user wants avahi support
6200 AC_ARG_ENABLE(avahi,
6201 [AS_HELP_STRING([--enable-avahi], [Enable Avahi support (default=auto)])])
6203 if test x"$enable_avahi" != x"no"; then
6204     have_avahi_support=yes
6206     AC_CHECK_HEADERS(avahi-common/watch.h)
6207     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6208         have_avahi_support=no
6209     fi
6211     AC_CHECK_HEADERS(avahi-client/client.h)
6212     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6213         have_avahi_support=no
6214     fi
6216     save_LIBS="$LIBS"
6217     AC_CHECK_LIB(avahi-client, avahi_client_new,[have_avahi_client_new=yes])
6218     AC_CHECK_LIB(avahi-common, avahi_strerror,[have_avahi_strerror=yes])
6219     LIBS="$save_LIBS"
6221     if test x"$have_avahi_client_new" != x"yes" -o \
6222        x"$have_avahi_strerror" != x"yes" ; then
6223         have_avahi_support=no
6224     fi
6226     if test x"$have_avahi_support" = x"yes"; then
6227         AC_SUBST(AVAHI_LIBS, "-lavahi-client -lavahi-common")
6228         AC_DEFINE(WITH_AVAHI_SUPPORT, 1,
6229                 [Whether to enable avahi support])
6230         AC_SUBST(AVAHI_OBJ, "lib/avahi.o smbd/avahi_register.o")
6231     else
6232         if test x"$enable_avahi" = x"yes"; then
6233             AC_MSG_ERROR(avahi support not available)
6234         fi
6235     fi
6238 #################################################
6239 # Check if user wants pthreadpool support
6241 AC_ARG_ENABLE(pthreadpool,
6242 [AS_HELP_STRING([--enable-pthreadpool], [Enable pthreads pool helper support (default=auto)])])
6244 if test x"$enable_pthreadpool" != x"no" -a x"$samba_cv_HAVE_PTHREAD" = x"yes"; then
6245     AC_TRY_LINK([#include "pthread.h"],
6246     [pthread_create(NULL, NULL, NULL, NULL)],
6247                     ,LIBS="$LIBS -lpthread")
6248     AC_DEFINE(WITH_PTHREADPOOL, 1, [Whether to include pthreadpool helpers])
6249     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool.o")
6252 #################################################
6253 # Check to see if we should use the included iniparser
6255 AC_ARG_WITH(included-iniparser,
6256 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6258   case "$withval" in
6259         yes)
6260                 INCLUDED_INIPARSER=yes
6261                 ;;
6262         no)
6263                 INCLUDED_INIPARSER=no
6264                 ;;
6265   esac ],
6267 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6268     AC_CHECK_LIB(iniparser, iniparser_load,
6269                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6272 AC_MSG_CHECKING(whether to use included iniparser)
6273 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6274     AC_MSG_RESULT(yes)
6275     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6276         INIPARSERLIBS=""
6277     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
6278 else
6279     AC_MSG_RESULT(no)
6280         BUILD_INIPARSER=""
6281     INIPARSERLIBS="-liniparser"
6283 AC_SUBST(BUILD_INIPARSER)
6284 AC_SUBST(INIPARSERLIBS)
6285 AC_SUBST(FLAGS1)
6289 # Checks for the vfs_fileid module
6290 # Start
6291 AC_CHECK_FUNC(getmntent)
6293 AC_CHECK_HEADERS(sys/statfs.h)
6295 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
6296 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6297              AC_TRY_RUN([
6298                 #include <sys/types.h>
6299                 #include <sys/statfs.h>
6300                 int main(void)
6301                 {
6302                         struct statfs fsd;
6303                         fsid_t fsid = fsd.f_fsid;
6304                         return statfs (".", &fsd);
6305                 }],
6306                 vfsfileid_cv_statfs=yes,
6307                 vfsfileid_cv_statfs=no,
6308                 vfsfileid_cv_statfs=cross)
6310 AC_MSG_RESULT($vfsfileid_cv_statfs)
6312 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6313         x"$vfsfileid_cv_statfs" = x"yes"; then
6314         default_shared_modules="$default_shared_modules vfs_fileid"
6316 # End
6317 # Checks for the vfs_fileid module
6320 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6322         eval MODULE_DEFAULT_$i=STATIC
6323 done
6325 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6327         dnl Fall back to static if we cannot build shared libraries
6328         eval MODULE_DEFAULT_$i=STATIC
6330         if test $BLDSHARED = true; then
6331                 eval MODULE_DEFAULT_$i=SHARED
6332         fi
6333 done
6335 dnl Always build these modules static
6336 MODULE_rpc_spoolss=STATIC
6337 MODULE_rpc_srvsvc=STATIC
6338 MODULE_idmap_tdb=STATIC
6339 MODULE_idmap_passdb=STATIC
6340 MODULE_idmap_nss=STATIC
6342 MODULE_nss_info_template=STATIC
6344 AC_ARG_WITH(static-modules,
6345 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6346 [ if test $withval; then
6347         for i in `echo $withval | sed -e 's/,/ /g'`
6348         do
6349                 eval MODULE_$i=STATIC
6350         done
6351 fi ])
6353 AC_ARG_WITH(shared-modules,
6354 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6355 [ if test $withval; then
6356         for i in `echo $withval | sed -e 's/,/ /g'`
6357         do
6358                         eval MODULE_$i=SHARED
6359         done
6360 fi ])
6362 if test x"$MODULE_DEFAULT_vfs_notify_fam" = xSTATIC -o \
6363                 x"$MODULE_vfs_notify_fam" = xSTATIC ; then
6364         SMBD_FAM_LIBS="$SMB_FAM_LIBS"
6365         AC_SUBST(SMBD_FAM_LIBS)
6368 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
6369                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6370 SMB_MODULE(pdb_ads, passdb/pdb_ads.o \$(TLDAP_OBJ), "bin/ads.$SHLIBEXT", PDB)
6371 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6372 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6373 SMB_MODULE(pdb_wbc_sam, passdb/pdb_wbc_sam.o, "bin/wbc_sam.$SHLIBEXT", PDB)
6374 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6377 SMB_MODULE(rpc_lsarpc, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
6378 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
6379 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
6380 SMB_MODULE(rpc_dssetup, \$(RPC_DSSETUP_OBJ), "bin/librpc_dssetup.$SHLIBEXT", RPC)
6381 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6382 SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC)
6383 SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC)
6384 SMB_MODULE(rpc_netlogon, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6385 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6386 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc.$SHLIBEXT", RPC)
6387 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6388 SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC)
6389 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6390 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
6391 SMB_SUBSYSTEM(RPC,smbd/process.o)
6393 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6394 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6395 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6396 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6397 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6398 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6399 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6400 SMB_MODULE(idmap_hash, \$(IDMAP_HASH_OBJ), "bin/hash.$SHLIBEXT", IDMAP)
6401 SMB_MODULE(idmap_adex, \$(IDMAP_ADEX_OBJ), "bin/adex.$SHLIBEXT", IDMAP)
6402 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6404 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6405 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6407 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6408 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6409 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6410 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6411 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6413 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6414 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6415 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6416 SMB_MODULE(auth_wbc, \$(AUTH_WBC_OBJ), "bin/wbc.$SHLIBEXT", AUTH)
6417 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6418 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6419 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6420 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6421 SMB_MODULE(auth_netlogond, \$(AUTH_NETLOGOND_OBJ), "bin/netlogond.$SHLIBEXT", AUTH)
6422 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6424 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6425 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6426 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6427 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6428 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6429 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6430 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6431 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6432 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6433 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6434 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6435 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6436 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6437 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6438 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6439 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6440 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6441 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6442 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6443 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6444 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6445 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6446 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6447 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6448 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6449 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6450 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6451 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6452 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6453 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6454 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6455 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6456 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6457 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6458 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6459 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6460 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6461 SMB_MODULE(vfs_acl_xattr, \$(VFS_ACL_XATTR_OBJ), "bin/acl_xattr.$SHLIBEXT", VFS)
6462 SMB_MODULE(vfs_acl_tdb, \$(VFS_ACL_TDB_OBJ), "bin/acl_tdb.$SHLIBEXT", VFS)
6463 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6464 SMB_MODULE(vfs_onefs, \$(VFS_ONEFS), "bin/onefs.$SHLIBEXT", VFS)
6465 SMB_MODULE(vfs_onefs_shadow_copy, \$(VFS_ONEFS_SHADOW_COPY), "bin/onefs_shadow_copy.$SHLIBEXT", VFS)
6466 SMB_MODULE(vfs_dirsort, \$(VFS_DIRSORT_OBJ), "bin/dirsort.$SHLIBEXT", VFS)
6468 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6470 SMB_MODULE(perfcount_onefs, \$(PERFCOUNT_ONEFS), "bin/pc_onefs.$SHLIBEXT", PERFCOUNT)
6471 SMB_MODULE(perfcount_test, \$(PERFCOUNT_TEST), "bin/pc_test.$SHLIBEXT", PERFCOUNT)
6472 SMB_SUBSYSTEM(PERFCOUNT,smbd/perfcount.o)
6474 SMB_MODULE(gpext_registry, libgpo/gpext/registry.o, "bin/registry.$SHLIBEXT", GPEXT)
6475 SMB_MODULE(gpext_scripts, libgpo/gpext/scripts.o, "bin/scripts.$SHLIBEXT", GPEXT)
6476 SMB_MODULE(gpext_security, libgpo/gpext/security.o, "bin/security.$SHLIBEXT", GPEXT)
6477 SMB_SUBSYSTEM(GPEXT, libgpo/gpext/gpext.o)
6479 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6481 #################################################
6482 # do extra things if we are running insure
6484 if test "${ac_cv_prog_CC}" = "insure"; then
6485         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6488 #################################################
6489 # If run from the build farm, enable NASTY hacks
6490 #################################################
6491 AC_MSG_CHECKING(whether to enable build farm hacks)
6492 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6493         AC_MSG_RESULT(yes)
6494         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6495 else
6496         AC_MSG_RESULT(no)
6499 #################################################
6500 # check for bad librt/libpthread interactions
6502 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6503     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6504     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6505     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6507 SMB_IF_RTSIGNAL_BUG(
6508         [
6509             # Have RT_SIGNAL bug, need to check whether the problem will
6510             # affect anything we have configured.
6512             rt_do_error=no
6513             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6514                 if test x"$rt_signal_lease_ok" = x"no" ; then
6515                     rt_do_error=yes
6516                 fi
6517             fi
6519             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6520                 if test x"$rt_signal_notify_ok" = x"no" ; then
6521                     rt_do_error=yes
6522                 fi
6523             fi
6525             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6526                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6527                 if test x"$rt_signal_aio_ok" = x"no" ; then
6528                     rt_do_error=yes
6529                 fi
6530             fi
6532             if test x"$rt_do_error" = x"yes" ; then
6533                 SMB_IS_LIBPTHREAD_LINKED(
6534                     [
6535                         cat<<MSG
6537 *** On this platforms, linking Samba against pthreads causes problems
6538 *** with the oplock and change notification mechanisms. You may be
6539 *** using pthreads as a side-effect of using the --with-aio-support
6540 *** or --with-profiling-data options. Please remove these and try again.
6543                     ],
6544                     [
6545                         cat<<MSG
6547 *** On this platform, the oplock and change notification mechanisms do not
6548 *** appear to work. Please report this problem to samba-technical@samba.org
6549 *** and attach the config.log file from this directory.
6552                     ])
6553                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6554             fi
6555         ],
6556         [
6557             # no RT_SIGNAL bug, we are golden
6558             SMB_IS_LIBPTHREAD_LINKED(
6559                 [
6560                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6561                 ])
6563         ],
6564         [
6565             # cross compiling, I hope you know what you are doing
6566             true
6567         ])
6571 AC_ARG_ENABLE(merged-build, 
6572 [AS_HELP_STRING([--enable-merged-build], [Build Samba 4 as well])], 
6573 [ enable_merged_build=$enableval ], [ enable_merged_build=auto ])
6575 if test x"$enable_merged_build" = x"yes" -a \
6576         x"$merged_build_possible" = x"no" ; then
6577         AC_MSG_ERROR(Merged build required but not possible)
6580 m4_include(../lib/zlib/zlib.m4)
6582 if test x$enable_merged_build = xauto; then
6583         # Check for python
6584         m4_include(../m4/check_python.m4)
6585         AC_SAMBA_PYTHON_DEVEL([true], [merged_build_possible=no])
6587         AC_MSG_CHECKING([whether it would be possible to do a merged build])
6588         AC_MSG_RESULT([$merged_build_possible])
6590         # Enable merged build automatically if possible, when in developer mode
6591         if test "x$developer" = xyes; then
6592                 enable_merged_build=$merged_build_possible
6593         fi
6596 if test x$enable_merged_build = xyes; then
6597         MERGED_BUILD=1
6598         saved_USESHARED="$USESHARED"
6599         USESHARED="false"
6600         m4_include(samba4.m4)
6601         USESHARED="$saved_USESHARED"
6604 AC_SUBST(ZLIB_LIBS)
6605 AC_SUBST(ZLIB_OBJS)
6606 AC_ZLIB([ZLIB_OBJS=""], [
6607         ZLIB_LIBS=""
6608         for o in adler32.o compress.o crc32.o gzio.o uncompr.o \
6609                      deflate.o trees.o zutil.o inflate.o infback.o \
6610                          inftrees.o inffast.o
6611         do
6612                 ZLIB_OBJS="$ZLIB_OBJS ../lib/zlib/$o"
6613         done
6614         CFLAGS="-I../lib/zlib $CFLAGS"
6617 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
6619 if test "x$enable_dmalloc" = xyes
6620 then
6621         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
6622         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
6623                   [Define to check invariants around some common functions])
6624         LIBS="$LIBS -ldmalloc"
6627 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6628 LIB_REMOVE_USR_LIB(LDFLAGS)
6629 LIB_REMOVE_USR_LIB(LIBS)
6631 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6632 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6633 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6635 #################################################
6636 # Display summary of libraries detected
6638 AC_MSG_RESULT([Using libraries:])
6639 AC_MSG_RESULT([    LIBS = $LIBS])
6640 if test x"$with_ads_support" != x"no"; then
6641     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6643 if test x"$with_ldap_support" != x"no"; then
6644     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6646 if test x"$with_dnsupdate_support" != x"no"; then
6647     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6649 if test x"$have_dnssd_support" != x"no"; then
6650     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6652 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6654 #################################################
6655 # final configure stuff
6657 AC_MSG_CHECKING([configure summary])
6658 AC_TRY_RUN([#include "${srcdir-.}/../tests/summary.c"],
6659            AC_MSG_RESULT(yes),
6660            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6661            AC_MSG_WARN([cannot run when cross-compiling]))
6663 dnl Merge in developer cflags from now on
6664 AC_SUBST(DEVELOPER_CFLAGS)
6665 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes" -o x"$picky_developer" = x"yes"; then
6666     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
6669 # Stuff the smbd-only libraries at the end of the smbd link
6670 # path (if we have them).
6671 SMBD_LIBS="$samba_dmapi_libs"
6672 AC_SUBST(SMBD_LIBS)
6674 CFLAGS="${CFLAGS} \$(FLAGS)"
6676 if test x$MERGED_BUILD != x1; then
6677         CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
6678 else
6679         if test x"$BLDSHARED" = x"true" ; then
6680                 LDFLAGS="$LDFLAGS -L./bin"
6681         fi
6684 AC_SUBST(MAKEFILE)
6685 if test x$samba_cv_gnu_make = xyes; then
6686         MAKEFILE=Makefile
6687 else
6688         # When we don't have GNU Make, generate a copy of Makefile.in 
6689         # that doesn't have the "include " statements but just includes 
6690         # the files verbatim.
6691         MAKEFILE=Makefile-noincludes
6692         $PERL ./script/expand-includes.pl Makefile.in > $MAKEFILE.in
6694 AC_OUTPUT($MAKEFILE
6695           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
6696           lib/netapi/examples/Makefile
6697           lib/netapi/tests/Makefile
6698           pkgconfig/smbclient.pc
6699           pkgconfig/wbclient.pc
6700           pkgconfig/netapi.pc
6701           pkgconfig/smbsharemodes.pc
6702           ../examples/libsmbclient/Makefile.internal
6703           )
6704 dnl If we had to expand the includes, make tsure the output file is moved back
6705 AC_OUTPUT_COMMANDS([
6706 if test x$MAKEFILE != Makefile; then
6707         mv $MAKEFILE Makefile
6711 #################################################
6712 # Print very concise instructions on building/use
6713 if test "x$enable_dmalloc" = xyes
6714 then
6715         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6716         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])