s3: PAM_RHOST and PAM_TTY are enums on FreeBSD
[Samba.git] / source3 / configure.in
blob73819b4d266799ca4e35b39515ded122bf2bcb71
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
26 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
28 m4_include(../lib/tevent/libtevent.m4)
30 LIBTEVENT_OBJ0=""
31 for obj in ${TEVENT_OBJ}; do
32         LIBTEVENT_OBJ0="${LIBTEVENT_OBJ0} ${teventdir}/${obj}"
33 done
34 AC_SUBST(LIBTEVENT_OBJ0)
35 LIBS="${LIBS} ${TEVENT_LIBS}"
37 SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
38 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/replace"
39 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TEVENT_CFLAGS}"
40 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
41 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
42 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/.."
44 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/popt"
46 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
47 if test "x${srcdir-.}" != "x."; then
48         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
51 dnl Unique-to-Samba variables we'll be playing with.
52 AC_SUBST(SAMBA_CPPFLAGS)
53 AC_SUBST(SHELL)
54 AC_SUBST(LDSHFLAGS)
55 AC_SUBST(SONAMEFLAG)
56 AC_SUBST(SHLD)
57 AC_SUBST(MODULE_EXPORTS)
58 AC_SUBST(DSO_EXPORTS)
59 AC_SUBST(HOST_OS)
60 AC_SUBST(PICFLAG)
61 AC_SUBST(PIE_CFLAGS)
62 AC_SUBST(PIE_LDFLAGS)
63 AC_SUBST(RELRO_LDFLAGS)
64 AC_SUBST(SHLIBEXT)
65 AC_SUBST(INSTALLLIBCMD_SH)
66 AC_SUBST(INSTALLLIBCMD_A)
67 AC_SUBST(UNINSTALLLIBCMD_SH)
68 AC_SUBST(UNINSTALLLIBCMD_A)
70 AC_SUBST(INSTALL_LIBWBCLIENT)
71 AC_SUBST(UNINSTALL_LIBWBCLIENT)
72 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
73 AC_SUBST(LIBWBCLIENT_SHARED)
74 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
75 AC_SUBST(LIBWBCLIENT_STATIC)
76 AC_SUBST(LIBWBCLIENT_SOVER)
77 AC_SUBST(LIBWBCLIENT)
78 AC_SUBST(LIBWBCLIENT_LIBS)
80 AC_SUBST(LIBSAMBAUTIL_SHARED)
82 AC_SUBST(PRINT_LIBS)
83 AC_SUBST(AUTH_LIBS)
84 AC_SUBST(ACL_LIBS)
85 AC_SUBST(PASSDB_LIBS)
86 AC_SUBST(IDMAP_LIBS)
87 AC_SUBST(KRB5_LIBS)
88 AC_SUBST(UUID_LIBS)
89 AC_SUBST(LDAP_LIBS)
90 AC_SUBST(GPEXT_LIBS)
91 AC_SUBST(PAM_MODULES)
92 AC_SUBST(INSTALL_PAM_MODULES)
93 AC_SUBST(UNINSTALL_PAM_MODULES)
94 AC_SUBST(NSS_MODULES)
95 AC_SUBST(EXTRA_BIN_PROGS)
96 AC_SUBST(CIFSMOUNT_PROGS)
97 AC_SUBST(INSTALL_CIFSMOUNT)
98 AC_SUBST(UNINSTALL_CIFSMOUNT)
99 AC_SUBST(CIFSUMOUNT_PROGS)
100 AC_SUBST(INSTALL_CIFSUMOUNT)
101 AC_SUBST(UNINSTALL_CIFSUMOUNT)
102 AC_SUBST(CIFSUPCALL_PROGS)
103 AC_SUBST(INSTALL_CIFSUPCALL)
104 AC_SUBST(UNINSTALL_CIFSUPCALL)
105 AC_SUBST(EXTRA_SBIN_PROGS)
106 AC_SUBST(EXTRA_ALL_TARGETS)
107 AC_SUBST(CONFIG_LIBS)
108 AC_SUBST(NSCD_LIBS)
110 # compile with optimization and without debugging by default, but
111 # allow people to set their own preference.
112 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
113 # if it has no value.  This prevent *very* large debug binaries from occurring
114 # by default.
115 if test "x$debug" = "xyes" ; then
116         CFLAGS="${CFLAGS} -g"
118 if test "x$CFLAGS" = x; then
119   CFLAGS="-O"
122 m4_include(../lib/socket_wrapper/config.m4)
123 m4_include(../lib/nss_wrapper/config.m4)
124 m4_include(../lib/util/time.m4)
126 m4_include(m4/swat.m4)
128 DEVELOPER_CFLAGS="-DDEBUG_PASSWORD -DDEVELOPER"
130 # Probe the gcc version for extra CFLAGS. We always stash these in
131 # DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
132 # Makefile edit, avoiding the need to re-run configure.
133 if test x"$ac_cv_prog_gcc" = x"yes" ; then
134         DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings"
135         # Add -Wdeclaration-after-statement if compiler supports it
136         AC_CACHE_CHECK(
137           [that the C compiler understands -Wdeclaration-after-statement],
138           samba_cv_HAVE_Wdeclaration_after_statement, [
139           AC_TRY_RUN_STRICT([
140             int main(void)
141             {
142                 return 0;
143             }],[$CFLAGS -Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
144             samba_cv_HAVE_Wdeclaration_after_statement=yes,
145             samba_cv_HAVE_Wdeclaration_after_statement=no,
146             samba_cv_HAVE_Wdeclaration_after_statement=cross)
147        ])
149         if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
150             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
151         fi
153         #-Werror-implicit-function-declaration
154         AC_CACHE_CHECK(
155           [that the C compiler understands -Werror-implicit-function-declaration],
156           samba_cv_HAVE_Werror_implicit_function_declaration, [
157           AC_TRY_RUN_STRICT([
158             int main(void)
159             {
160                 return 0;
161             }],[$CFLAGS -Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
162             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
163             samba_cv_HAVE_Werror_implicit_function_declaration=no,
164             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
165        ])
166        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
167             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
168        fi
170         # krb5developer is like developer, except we don't get
171         # -Wstrict-prototypes.
172        if test x"$krb5_developer" != x"$yes" ; then
173             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
174        fi
176        if test x"$picky_developer" = x"yes"; then
177             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Werror"
178        fi
181 #################################################
182 # check for a shared memory profiling support
183 AC_MSG_CHECKING(whether to use profiling)
184 AC_ARG_WITH(profiling-data,
185 [AS_HELP_STRING([--with-profiling-data], [Include gathering source code profile information (default=no)])],
186 [ case "$withval" in
187   yes)
188     AC_MSG_RESULT(yes)
189     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
190     samba_cv_WITH_PROFILE=yes
191     ;;
192   *)
193     AC_MSG_RESULT(no)
194     samba_cv_WITH_PROFILE=no
195     ;;
196   esac ],
197   AC_MSG_RESULT(no)
200 dnl Checks for programs.
201 merged_build_possible=yes
203 AC_PROG_INSTALL
204 AC_PROG_AWK
205 # Check for GNU make
206 m4_include(../m4/check_make.m4)
207 AC_SAMBA_GNU_MAKE([true], [true])
209 # Check for perl
210 m4_include(../m4/check_perl.m4)
211 AC_SAMBA_PERL([true], [merged_build_possible=no])
213 AC_CHECK_TOOL(AR, ar)
215 dnl Check if we (actually our C compiler!) use GNU ld
216 AC_PROG_LD_GNU
218 dnl Certain versions of GNU ld the default is not to have the
219 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
220 dnl warnings when building modules.
221 if test "$ac_cv_prog_gnu_ld" = "yes"; then
222         ac_cv_gnu_ld_version=`$CC -Wl,-v /dev/null 2>/dev/null | head -1`
223         AC_MSG_CHECKING(GNU ld release date)
224         changequote(,)dnl
225         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'`
226         changequote([,])dnl
227         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
228         if test -n "$ac_cv_gnu_ld_date"; then
229         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
230                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
231         fi
232         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
233                 ac_cv_gnu_ld_version_script=yes
234         fi
235         else
236            AC_MSG_CHECKING(GNU ld release version)
237            changequote(,)dnl
238            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | awk '{print $NF}' | sed -n 's,\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
239            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
240            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
241            changequote([,])dnl
242            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
243            AC_MSG_CHECKING(GNU ld release version major)
244            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
245            AC_MSG_CHECKING(GNU ld release version minor)
246            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
247            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
248              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
249            fi
250            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
251              ac_cv_gnu_ld_version_script=yes
252            fi
253         fi
256 dnl look for executable suffix
257 AC_EXEEXT
259 dnl Check if C compiler understands -c and -o at the same time
260 AC_PROG_CC_C_O
261 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
262       BROKEN_CC=
263 else
264       BROKEN_CC=#
266 AC_SUBST(BROKEN_CC)
268 dnl Check if the C compiler understands -Werror (GNU)
269 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
270  AC_TRY_RUN_STRICT([
271   int main(void)
272   {
273         return 0;
274   }],[$CFLAGS -Werror],[$CPPFLAGS],[$LDFLAGS],
275   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
276 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
277    Werror_FLAGS="-Werror"
278 else
279 dnl Check if the C compiler understands -w2
280 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
281  AC_TRY_RUN_STRICT([
282   int main(void)
283   {
284         return 0;
285   }],[$CFLAGS -w2],[$CPPFLAGS],[$LDFLAGS],
286   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
287 if test x"$samba_cv_HAVE_w2" = x"yes"; then
288    Werror_FLAGS="-w2"
289 else
290 dnl Check if the C compiler understands -errwarn (Sun)
291 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
292   AC_TRY_RUN_STRICT([
293    int main(void)
294    {
295         return 0;
296    }],[$CFLAGS -errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
297    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
298 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
299    Werror_FLAGS="-errwarn=%all"
300 else
301 dnl Check if the C compiler understands -qhalt (IBM)
302 AC_CACHE_CHECK([that the C compiler understands -qhalt],samba_cv_HAVE_qhalt, [
303   AC_TRY_RUN_STRICT([
304    int main(void)
305    {
306         return 0;
307    }],[$CFLAGS -qhalt=w],[$CPPFLAGS],[$LDFLAGS],
308    samba_cv_HAVE_qhalt=yes,samba_cv_HAVE_qhalt=no,samba_cv_HAVE_qhalt=cross)])
309 if test x"$samba_cv_HAVE_qhalt" = x"yes"; then
310    Werror_FLAGS="-qhalt=w"
316 ############################################
317 # check if the compiler can handle negative enum values
318 # and don't truncate the values to INT_MAX
319 # a runtime test is needed here
320 AC_SUBST(PIDL_ARGS)
321 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
322     AC_TRY_RUN(
324         #include <stdio.h>
325         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
326         int main(void) {
327                 enum negative_values v1 = NEGATIVE_VALUE;
328                 unsigned v2 = NEGATIVE_VALUE;
330                 if (v1 != 0xFFFFFFFF) {
331                         printf("%u != 0xFFFFFFFF\n", v1);
332                         return 1;
333                 }
334                 if (v2 != 0xFFFFFFFF) {
335                         printf("%u != 0xFFFFFFFF\n", v2);
336                         return 1;
337                 }
339                 return 0;
340         }
342         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv_CC_NEGATIVE_ENUM_VALUES=no)])
343 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
344         AC_MSG_WARN([using --uint-enums for pidl])
345         PIDL_ARGS="$PIDL_ARGS --uint-enums"
348 dnl Figure out the flags to support named structure initializers
350 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
352 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
353 AC_MSG_CHECKING(uname -s)
354 AC_MSG_RESULT(${UNAME_S})
356 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
357 AC_MSG_CHECKING(uname -r)
358 AC_MSG_RESULT(${UNAME_R})
360 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
361 AC_MSG_CHECKING(uname -m)
362 AC_MSG_RESULT(${UNAME_M})
364 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
365 AC_MSG_CHECKING(uname -p)
366 AC_MSG_RESULT(${UNAME_P})
368 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
369 AC_MSG_CHECKING(uname -i)
370 AC_MSG_RESULT(${UNAME_I})
372 dnl Add #include for broken IRIX header files
373   case "$host_os" in
374         *irix6*)
375                 #TODO add to libreplace
376                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
377                         dnl Fix sensible defaults for MIPSPro compilers. The
378                         dnl error numbers are valid for the 7.3 compilers,
379                         dnl hopefully also valid for the 7.4 series.
380                         dnl
381                         dnl Bugzilla 3801. Force an error on warning 1035
382                         dnl so we don't incorrectly detect stdint.h. This
383                         dnl warning is emitted for #error directives.
384                         CFLAGS="$CFLAGS -diag_error 1035"
385                         dnl 1209: Controlling expression is constant
386                         dnl 1174: Function foo declared but never referenced
387                         dnl 3201: Parameter foo was never referenced
388                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
389                 fi
390         ;;
391 esac
393 DYNEXP=
394 AC_SUBST(DYNEXP)
395 LDSHFLAGS_Z_DEFS=
396 AC_SUBST(LDSHFLAGS_Z_DEFS)
397 LDSHFLAGS_Z_NODEFS=
398 AC_SUBST(LDSHFLAGS_Z_NODEFS)
400 dnl Add modules that have to be built by default here
401 dnl These have to be built static:
402 default_static_modules=""
403 default_static_modules="$default_static_modules pdb_smbpasswd"
404 default_static_modules="$default_static_modules pdb_tdbsam"
405 default_static_modules="$default_static_modules pdb_wbc_sam"
406 default_static_modules="$default_static_modules rpc_lsarpc"
407 default_static_modules="$default_static_modules rpc_samr"
408 default_static_modules="$default_static_modules rpc_winreg"
409 default_static_modules="$default_static_modules rpc_initshutdown"
410 default_static_modules="$default_static_modules rpc_dssetup"
411 default_static_modules="$default_static_modules rpc_wkssvc"
412 default_static_modules="$default_static_modules rpc_svcctl"
413 default_static_modules="$default_static_modules rpc_ntsvcs"
414 default_static_modules="$default_static_modules rpc_netlogon"
415 default_static_modules="$default_static_modules rpc_netdfs"
416 default_static_modules="$default_static_modules rpc_srvsvc"
417 default_static_modules="$default_static_modules rpc_spoolss"
418 default_static_modules="$default_static_modules rpc_eventlog"
419 default_static_modules="$default_static_modules auth_sam"
420 default_static_modules="$default_static_modules auth_unix"
421 default_static_modules="$default_static_modules auth_winbind"
422 default_static_modules="$default_static_modules auth_wbc"
423 default_static_modules="$default_static_modules auth_server"
424 default_static_modules="$default_static_modules auth_domain"
425 default_static_modules="$default_static_modules auth_builtin"
426 default_static_modules="$default_static_modules auth_netlogond"
427 default_static_modules="$default_static_modules vfs_default"
428 default_static_modules="$default_static_modules nss_info_template"
430 dnl These are preferably build shared, and static if dlopen() is not available
431 default_shared_modules=""
432 default_shared_modules="$default_shared_modules vfs_recycle"
433 default_shared_modules="$default_shared_modules vfs_audit"
434 default_shared_modules="$default_shared_modules vfs_extd_audit"
435 default_shared_modules="$default_shared_modules vfs_full_audit"
436 default_shared_modules="$default_shared_modules vfs_netatalk"
437 default_shared_modules="$default_shared_modules vfs_fake_perms"
438 default_shared_modules="$default_shared_modules vfs_default_quota"
439 default_shared_modules="$default_shared_modules vfs_readonly"
440 default_shared_modules="$default_shared_modules vfs_cap"
441 default_shared_modules="$default_shared_modules vfs_expand_msdfs"
442 default_shared_modules="$default_shared_modules vfs_shadow_copy"
443 default_shared_modules="$default_shared_modules vfs_shadow_copy2"
444 default_shared_modules="$default_shared_modules charset_CP850"
445 default_shared_modules="$default_shared_modules charset_CP437"
446 default_shared_modules="$default_shared_modules auth_script"
447 default_shared_modules="$default_shared_modules vfs_readahead"
448 default_shared_modules="$default_shared_modules vfs_xattr_tdb"
449 default_shared_modules="$default_shared_modules vfs_streams_xattr"
450 default_shared_modules="$default_shared_modules vfs_streams_depot"
451 default_shared_modules="$default_shared_modules vfs_acl_xattr"
452 default_shared_modules="$default_shared_modules vfs_acl_tdb"
453 default_shared_modules="$default_shared_modules vfs_smb_traffic_analyzer"
454 default_shared_modules="$default_shared_modules vfs_preopen"
455 default_shared_modules="$default_shared_modules vfs_catia"
456 default_shared_modules="$default_shared_modules vfs_scannedonly"
457 default_shared_modules="$default_shared_modules vfs_crossrename"
458 default_shared_modules="$default_shared_modules vfs_linux_xfs_sgid"
460 if test "x$developer" = xyes; then
461    default_static_modules="$default_static_modules rpc_rpcecho pdb_ads"
462    default_shared_modules="$default_shared_modules charset_weird perfcount_test"
466 # Config CPPFLAG settings for strange OS's that must be set
467 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
468 # case statement; its first reference must be unconditional.
470 case "$host_os" in
471     *hpux*)
473 # Defines needed for HPUX support.
474 # HPUX has bigcrypt but (sometimes?) doesn't use it for
475 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
477       case `uname -r` in
478                 *9*|*10*|*11)
479                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
480                 ;;
481       esac
482       ;;
485 # CRAY Unicos has broken const handling
486        *unicos*)
487           AC_MSG_RESULT([disabling const])
488           CPPFLAGS="$CPPFLAGS -Dconst="
489           ;;
490         
492 # AIX4.x doesn't even admit to having large
493 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
495     *aix4*)
496           AC_MSG_RESULT([enabling large file support])
497       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
498           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
499       ;;
501 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
502 # to the existance of large files..
503 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
504 # recommendations on large file support, however it makes the
505 # compile work using gcc 2.7 and 2.8, whereas using the Sun
506 # recommendation makes the compile fail on gcc2.7. JRA.
508 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
510         *solaris*)
511                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
512                 case `uname -r` in
513                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
514                                 AC_MSG_RESULT([no large file support])
515                                 ;;
516                         5.*)
517                         AC_MSG_RESULT([enabling large file support])
518                         if test "$ac_cv_prog_gcc" = yes; then
519                                 ${CC-cc} -v >conftest.c 2>&1
520                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
521                                 rm -fr conftest.c
522                                 case "$ac_cv_gcc_compiler_version_number" in
523                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
524                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
525                                                 LDFLAGS="$LDFLAGS -lthread"
526                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
527                                                 ;;
528                                         *)
529                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
530                                                 LDFLAGS="$LDFLAGS -lthread"
531                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
532                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
533                                                 ;;
534                                 esac
535                         else
536                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
537                                 LDFLAGS="$LDFLAGS -lthread"
538                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
539                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
540                         fi
541                         ;;
542                 esac
543                 ;;
545 # IRIX uses SYSV printing.  Make sure to set that here
547         *irix*)
548                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
549                 ;;
550         *freebsd*|*dragonfly*)
551                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
552                 ;;
554 # VOS may need to have POSIX support and System V compatibility enabled.
556     *vos*)
557     case "$CPPFLAGS" in
558           *-D_POSIX_C_SOURCE*)
559                 ;;
560           *)
561                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
562                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
563                 ;;
564     esac
565     case "$CPPFLAGS" in
566           *-D_SYSV*|*-D_SVID_SOURCE*)
567                 ;;
568           *)
569                 CPPFLAGS="$CPPFLAGS -D_SYSV"
570                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
571     esac
572     ;;
574 # Tests needed for SINIX large file support.
576     *sysv4*)
577       if test $host = mips-sni-sysv4 ; then
578         AC_MSG_CHECKING([for LFS support])
579         old_CPPFLAGS="$CPPFLAGS"
580         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
581         AC_TRY_RUN([
582 #include <unistd.h>
583 main () {
584 #if _LFS64_LARGEFILE == 1
585 exit(0);
586 #else
587 exit(1);
588 #endif
589 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
590         CPPFLAGS="$old_CPPFLAGS"
591         if test x$SINIX_LFS_SUPPORT = xyes ; then
592           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
593                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
594           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
595           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
596           LIBS="`getconf LFS64_LIBS` $LIBS"
597         fi
598       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
599       fi
600     ;;
602 # Systems with LFS support.
604     gnu* | k*bsd*-gnu | kopensolaris*-gnu)
605         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
606         AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
607         AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
608         AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
609         ;;
611 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
613     *linux*)
614         AC_MSG_CHECKING([for LFS support])
615         old_CPPFLAGS="$CPPFLAGS"
616         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
617        AC_TRY_RUN([
618 #include <unistd.h>
619 #include <sys/utsname.h>
620 #include <string.h>
621 #include <stdlib.h>
622 main() {
623 #if _LFS64_LARGEFILE == 1
624        struct utsname uts;
625        char *release;
626        int major, minor;
628        /* Ensure this is glibc 2.2 or higher */
629 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
630        int libc_major = __GLIBC__;
631        int libc_minor = __GLIBC_MINOR__;
633        if (libc_major < 2)
634               exit(1);
635        if (libc_minor < 2)
636               exit(1);
637 #endif
639        /* Ensure this is kernel 2.4 or higher */
641        uname(&uts);
642        release = strdup(uts.release);
643        major = atoi(strsep(&release, "."));
644        minor = atoi(strsep(&release, "."));
646        if (major > 2 || (major == 2 && minor > 3))
647                exit(0);
648        exit(1);
649 #else
650        exit(1);
651 #endif
653 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
654         CPPFLAGS="$old_CPPFLAGS"
655         if test x$LINUX_LFS_SUPPORT = xyes ; then
656                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
657                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
658                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
659                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
660         fi
661         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
662         ;;
665 # MacOS X is the *only* system that uses compose character in utf8. This
666 # is so horribly broken....
668     *darwin*)
669         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
671 # Add a system specific charset module.
672         default_shared_modules="$default_shared_modules charset_macosxfs"
674         ;;
675     *hurd*)
676         AC_MSG_CHECKING([for LFS support])
677         old_CPPFLAGS="$CPPFLAGS"
678         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
679         AC_TRY_RUN([
680 #include <unistd.h>
681 main () {
682 #if _LFS64_LARGEFILE == 1
683 exit(0);
684 #else
685 exit(1);
686 #endif
687 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
688         CPPFLAGS="$old_CPPFLAGS"
689         if test x$GLIBC_LFS_SUPPORT = xyes ; then
690           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
691                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
692           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
693         fi
694       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
695     ;;
696     *qnx*)
697         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
698         AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
699         ;;
701 esac
703 SAVE_CPPFLAGS="${CPPFLAGS}"
704 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
706 AC_LIBREPLACE_BROKEN_CHECKS
707 AC_CHECK_FUNCS([syslog],[],[AC_MSG_ERROR([Required function not found])])
708 AC_LIBREPLACE_NETWORK_CHECKS
710 CPPFLAGS="${SAVE_CPPFLAGS}"
712 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
714 LIBREPLACE_OBJS="${LIBREPLACEOBJ}"
715 AC_SUBST(LIBREPLACE_OBJS)
717 LIBREPLACE_LIBS="${LIBREPLACE_NETWORK_LIBS}"
718 AC_SUBST(LIBREPLACE_LIBS)
721 # add -ldl to the global LIBS
722 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
723 AUTH_LIBS="${AUTH_LIBS} ${CRYPT_LIBS}"
726 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
727 AC_CHECK_HEADERS(unistd.h grp.h sys/id.h memory.h alloca.h)
728 AC_CHECK_HEADERS(limits.h float.h libintl.h)
729 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
730 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)
731 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
732 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
733 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
734 AC_CHECK_HEADERS(sys/sysmacros.h)
735 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
736 AC_CHECK_HEADERS(langinfo.h locale.h)
737 AC_CHECK_HEADERS(xfs/libxfs.h)
738 AC_CHECK_HEADERS(netgroup.h)
740 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
741 #if HAVE_RPC_RPC_H
742 #include <rpc/rpc.h>
743 #endif
746 ## These fail to compile on IRIX so just check for their presence
747 AC_CHECK_HEADERS(sys/mode.h,,,)
749 # Look for Darwin headers
750 old_CPPFLAGS="$CPPFLAGS"
751 CPPFLAGS="-Iinclude $CPPFLAGS"
752 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
753 CPPFLAGS="$old_CPPFLAGS"
755 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
756 # subdirectory of headers.
757 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
760 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
761 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
763 case "$host_os" in
764     *hpux*)
765                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
766                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
767                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
768                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
769                 fi
770         ;;
771 esac
772 AC_CHECK_HEADERS(shadow.h)
773 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
774 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
776 AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
777 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
779 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
781 # For experimental utmp support (lastlog on some BSD-like systems)
782 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
784 AC_CHECK_SIZEOF(int,cross)
785 AC_CHECK_SIZEOF(long,cross)
786 AC_CHECK_SIZEOF(long long,cross)
787 AC_CHECK_SIZEOF(short,cross)
789 AC_C_CONST
790 AC_C_INLINE
791 AC_C_BIGENDIAN
792 AC_C_CHAR_UNSIGNED
794 AC_TYPE_SIGNAL
795 AC_TYPE_UID_T
796 AC_TYPE_MODE_T
797 AC_TYPE_OFF_T
798 AC_TYPE_SIZE_T
799 AC_TYPE_PID_T
800 AC_STRUCT_ST_RDEV
801 AC_DIRENT_D_OFF
802 AC_CHECK_TYPE(ssize_t, int)
803 AC_CHECK_TYPE(wchar_t, unsigned short)
805 ############################################
806 # for cups support we need libcups, and a handful of header files
808 AC_ARG_ENABLE(cups,
809 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
811 if test x$enable_cups != xno; then
812         AC_PATH_PROG(CUPS_CONFIG, cups-config)
814         if test "x$CUPS_CONFIG" != x; then
816                 ac_save_LDFLAGS=$LDFLAGS
817                 ac_save_PRINT_LIBS=$PRINT_LIBS
818                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
820                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
821                         x"$ac_cv_header_cups_language_h" = xyes; then
822                         # try linking with -lcups alone first. That should work unless libcups is
823                         # underlinked. With cups-config --libs we pull in unwanted and unneeded
824                         # dendencies including thread libraries - use cups-config only if really
825                         # required. 
826                         AC_CHECK_LIB_EXT(cups, ac_save_PRINT_LIBS , httpConnect,
827                                 [PRINT_LIBS"$ac_save_PRINT_LIBS -lcups"],
828                                 [AC_MSG_WARN([your cups library doesn't link with -lcups alone, it might be underlinked.]) ;
829                                  PRINT_LIBS="$ac_save_PRINT_LIBS `$CUPS_CONFIG --libs`"])
831                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
832                         samba_cv_HAVE_CUPS=yes
833                         AC_CHECK_LIB_EXT(cups, PRINT_LIBS, httpConnectEncrypt)
834                 else
835                         AC_MSG_WARN([cups-config around but cups-devel not installed])
836                         CFLAGS=$ac_save_CFLAGS
837                         LDFLAGS=$ac_save_LDFLAGS
838                         PRINT_LIBS=$ac_save_PRINT_LIBS
839                 fi
841         elif test x"$enable_cups" = x"yes"; then
842                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
843         fi
846 AC_ARG_ENABLE(iprint,
847 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
849 if test x$enable_iprint != xno; then
850         if test x"$samba_cv_HAVE_CUPS" = xyes; then
851                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
852         elif test x"$enable_iprint" = x"yes"; then
853                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
854         fi
857 ############################################
858 # check if the compiler will optimize out function calls
859 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
860     AC_TRY_LINK([
861 #include <stdio.h>],
863                 if (0) {
864                    this_function_does_not_exist();
865                 } else {
866                   return 1;
867                 }
870         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
871 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
872    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
875 #############################################
876 # check for fd passing struct via msg_control
877 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
878     AC_TRY_COMPILE([
879 #include <sys/types.h>
880 #include <stdlib.h>
881 #include <stddef.h>
882 #include <sys/socket.h>
883 #include <sys/un.h>],
885         struct msghdr msg;
886         union {
887               struct cmsghdr cm;
888               char control[CMSG_SPACE(sizeof(int))];
889         } control_un;
890         msg.msg_control = control_un.control;
891         msg.msg_controllen = sizeof(control_un.control);
893         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
894 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
895    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
896              [If we can use msg_control for passing file descriptors])
899 #############################################
900 # check for fd passing struct via msg_acctrights
901 AC_CACHE_CHECK([for fd passing via msg_acctrights],
902                 samba_cv_msghdr_msg_acctrights, [
903     AC_TRY_COMPILE([
904 #include <sys/types.h>
905 #include <stdlib.h>
906 #include <stddef.h>
907 #include <sys/socket.h>
908 #include <sys/un.h>],
910         struct msghdr msg;
911         int fd;
912         msg.msg_acctrights = (caddr_t) &fd;
913         msg.msg_acctrightslen = sizeof(fd);
915         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
916 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
917    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
918              [If we can use msg_acctrights for passing file descriptors])
921 AC_CHECK_FUNCS(dirfd)
922 if test x"$ac_cv_func_dirfd" = x"yes"; then
923         default_shared_modules="$default_shared_modules vfs_syncops vfs_dirsort"
926 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
927     AC_TRY_COMPILE([
928 #include <sys/types.h>
929 #if STDC_HEADERS
930 #include <stdlib.h>
931 #include <stddef.h>
932 #endif
933 #include <signal.h>],[struct sigevent s;],
934         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
935 if test x"$samba_cv_struct_sigevent" = x"yes"; then
936    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
937    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
938         [#include <signal.h>])
941 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
942     AC_TRY_COMPILE([
943 #include <sys/types.h>
944 #if STDC_HEADERS
945 #include <stdlib.h>
946 #include <stddef.h>
947 #endif
948 #if TIME_WITH_SYS_TIME
949 # include <sys/time.h>
950 # include <time.h>
951 #else
952 # if HAVE_SYS_TIME_H
953 #  include <sys/time.h>
954 # else
955 #  include <time.h>
956 # endif
957 #endif
958 ],[struct timespec ts;],
959         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
960 if test x"$samba_cv_struct_timespec" = x"yes"; then
961    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
964 # and glibc has setresuid under linux but the function does
965 # nothing until kernel 2.1.44! very dumb.
966 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
967     AC_TRY_RUN([#include <errno.h>
968 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
969         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
970 if test x"$samba_cv_have_setresuid" = x"yes"; then
971     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
974 # Do the same check for setresguid...
976 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
977     AC_TRY_RUN([#include <unistd.h>
978 #include <errno.h>
979 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
980         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
981 if test x"$samba_cv_have_setresgid" = x"yes"; then
982     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
985 AC_FUNC_MEMCMP
987 ###############################################
988 # Readline included by default unless explicitly asked not to
989 test "${with_readline+set}" != "set" && with_readline=yes
991 # test for where we get readline() from
992 AC_MSG_CHECKING(whether to use readline)
993 AC_ARG_WITH(readline,
994 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
995 [  case "$with_readline" in
996   yes)
997     AC_MSG_RESULT(yes)
999     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1000     AC_CHECK_HEADERS(readline/history.h)
1002     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1003       for termlib in ncurses curses termcap terminfo termlib tinfo; do
1004        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1005       done
1006       AC_CHECK_LIB(readline, rl_callback_handler_install,
1007        [TERMLIBS="-lreadline $TERMLIBS"
1008        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1009        break], [TERMLIBS=], $TERMLIBS)])
1010     ;;
1011   no)
1012     AC_MSG_RESULT(no)
1013     ;;
1014   *)
1015     AC_MSG_RESULT(yes)
1017     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
1018     # alternate readline path
1019     _ldflags=${LDFLAGS}
1020     _cppflags=${CPPFLAGS}
1022     # Add additional search path
1023     LDFLAGS="-L$with_readline/lib $LDFLAGS"
1024     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1026     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1027     AC_CHECK_HEADERS(readline/history.h)
1029     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1030       for termlib in ncurses curses termcap terminfo termlib; do
1031        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1032       done
1033       AC_CHECK_LIB(readline, rl_callback_handler_install,
1034        [TERMLDFLAGS="-L$with_readline/lib"
1035        TERMCPPFLAGS="-I$with_readline/include"
1036        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1037        TERMLIBS="-lreadline $TERMLIBS"
1038        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1039        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
1041     LDFLAGS=$_ldflags
1042     ;;
1043   esac],
1044   AC_MSG_RESULT(no)
1046 AC_SUBST(TERMLIBS)
1047 AC_SUBST(TERMLDFLAGS)
1049 # The readline API changed slightly from readline3 to readline4, so
1050 # code will generate warnings on one of them unless we have a few
1051 # special cases.
1052 AC_CHECK_LIB(readline, rl_completion_matches,
1053              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
1054                         [Do we have rl_completion_matches?])],
1055              [],
1056              [$TERMLIBS])
1058 # not all readline libs have rl_event_hook or history_list
1059 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1060 AC_CHECK_LIB(readline, history_list,
1061              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1062              [],
1063              [$TERMLIBS])
1065 ###############################################
1066 # test for where we get yp_get_default_domain() from
1067 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1068 AC_CHECK_FUNCS(yp_get_default_domain)
1070 # Check if we have execl, if not we need to compile smbrun.
1071 AC_CHECK_FUNCS(execl)
1072 if test x"$ac_cv_func_execl" = x"no"; then
1073     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1076 AC_CHECK_FUNCS(getcwd fchown chmod fchmod mknod mknod64)
1077 AC_CHECK_FUNCS(strtol)
1078 AC_CHECK_FUNCS(strchr chflags)
1079 AC_CHECK_FUNCS(getrlimit fsync setpgid)
1080 AC_CHECK_FUNCS(fdatasync,,[AC_CHECK_LIB_EXT(rt, LIBS, fdatasync)])
1081 AC_CHECK_FUNCS(setsid glob strpbrk crypt16 getauthuid)
1082 AC_CHECK_FUNCS(sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1083 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf)
1084 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf stat64 fstat64)
1085 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt lseek64 ftruncate64 posix_fallocate posix_fallocate64)
1086 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam)
1087 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1088 AC_CHECK_FUNCS(getpwent_r)
1089 AC_CHECK_FUNCS(getdents64)
1090 AC_CHECK_FUNCS(setenv strcasecmp fcvt fcvtl)
1091 AC_CHECK_FUNCS(syslog vsyslog timegm)
1092 AC_CHECK_FUNCS(setlocale nl_langinfo)
1093 AC_CHECK_FUNCS(nanosleep,,[AC_CHECK_LIB_EXT(rt, LIBS, nanosleep)])
1094 AC_CHECK_FUNCS(lutimes futimes utimensat futimens)
1095 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1096 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1097 AC_CHECK_HEADERS(sys/mman.h)
1098 # setbuffer, shmget, shm_open are needed for smbtorture
1099 AC_CHECK_FUNCS(shmget shm_open)
1100 AC_CHECK_FUNCS(gettext dgettext)
1101 AC_CHECK_FUNCS(bindtextdomain textdomain)
1102 AC_CHECK_FUNCS(strupr)
1104 # Find a method of generating a stack trace
1105 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1106 # libexecinfo provides backtrace_symbols on FreeBSD
1107 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
1108 AC_CHECK_FUNCS(backtrace_symbols)
1109 AC_CHECK_LIB(exc, trace_back_stack)
1111 # check for sysctlbyname for BSD systems
1112 AC_CHECK_FUNCS(sysctlbyname)
1114 #################################################
1115 # Check to see if core dump directory is defined in linux
1116 # with /proc/sys/kernel/core_pattern
1118 AC_CHECK_FILE([/proc/sys/kernel/core_pattern],
1119         AC_DEFINE(HAVE_SYS_KERNEL_PROC_CORE_PATTERN, 1,
1120         [Whether Linux kernel uses core_pattern for core files]),
1121          [])
1123 #############################
1124 # check if building with gpfs
1125 AC_CHECK_HEADERS(gpfs_gpl.h)
1126 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
1127     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL headers are available])
1128     default_shared_modules="$default_shared_modules vfs_gpfs"
1131 #############################################
1132 # check if building on Isilon OneFS
1133 printf "%s" "checking for Isilon OneFS... "
1134 save_LIBS="$LIBS"
1135 LIBS="$LIBS -lisi_version"
1136 AC_TRY_LINK([#include <isi_version/isi_version.h>],
1137           [get_isilon_copyright()],
1138           samba_cv_HAVE_ONEFS=yes,
1139           samba_cv_HAVE_ONEFS=no)
1140 echo $samba_cv_HAVE_ONEFS
1141 if test x"$samba_cv_HAVE_ONEFS" = x"yes"; then
1142     AC_DEFINE(HAVE_ONEFS,1,[Whether building on Isilon OneFS])
1143     default_shared_modules="$default_shared_modules vfs_onefs vfs_onefs_shadow_copy perfcount_onefs"
1144     default_static_modules="$default_static_modules"
1145     ONEFS_LIBS="-lisi_acl -lisi_ecs -lisi_event -lisi_util"
1146     # Need to also add general libs for oplocks support
1147     save_LIBS="$save_LIBS -lisi_ecs -lisi_event -lisi_util -ldevstat"
1149 AC_SUBST(ONEFS_LIBS)
1150 LIBS="$save_LIBS"
1152 # Note that all the libunwind symbols in the API are defined to internal
1153 # platform-specific version, so we must include libunwind.h before checking
1154 # any of them.
1155 AC_MSG_CHECKING([for libunwind])
1156 save_LIBS=$LIBS
1158 UNWIND_ARCH="unknown"
1159 if test x"$UNAME_I" != x"unknown"; then
1160         UNWIND_ARCH="$UNAME_I"
1161 elif test x"$UNAME_M" != x"unknown"; then
1162         UNWIND_ARCH="$UNAME_M"
1163 elif test x"$UNAME_P" != x"unknown"; then
1164         UNWIND_ARCH="$UNAME_P"
1167 case "$UNWIND_ARCH" in
1168         unknown)
1169                 # This probably won't link without
1170                 # the platform-specific libunwind.
1171                 LIBS="$LIBS -lunwind"
1172                 ;;
1173         i386|i586|i686)
1174                 # Add the platform-specific libunwind module.
1175                 LIBS="$LIBS -lunwind -lunwind-x86"
1176                 ;;
1177         *)
1178                 # Add the platform-specific libunwind module.
1179                 # based on uname -i, uname -m or uname -p
1180                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1181                 ;;
1182 esac
1184 AC_TRY_LINK(
1185     [
1186 #ifdef HAVE_LIBUNWIND_H
1187 #include <libunwind.h>
1188 #endif
1189     ],
1190     [
1191         unw_context_t ctx; unw_cursor_t cur;
1192         char buf[256]; unw_word_t off;
1193         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1194         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1195     ],
1196     [
1197         AC_MSG_RESULT(yes)
1198         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1200         # If we have libunwind, test whether we also have libunwind-ptrace
1201         # which would let us unwind arbitrary processes.
1202         save_LIBS=$LIBS
1203         AC_CHECK_HEADERS(libunwind-ptrace.h)
1204         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1205             [
1206                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1207                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1208                     [Whether libunwind-ptrace.a is available.])
1209             ],
1210             [ LIBUNWIND_PTRACE="" ])
1212         LIBS=$save_LIBS
1213     ],
1214     [
1215         AC_MSG_RESULT(no)
1216         LIBS=$save_LIBS
1217     ])
1219 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1220 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1221     AC_CHECK_HEADERS(sys/ptrace.h)
1222     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1223     AC_TRY_LINK(
1224             [
1225 #if HAVE_SYS_TYPES_H
1226 #include <sys/types.h>
1227 #endif
1228 #if HAVE_SYS_PTRACE_H
1229 #include <sys/ptrace.h>
1230 #endif
1231             ],
1232             [
1233                 pid_t me = (pid_t)-1;
1234                 ptrace(PTRACE_ATTACH, me, 0, 0);
1235                 ptrace(PTRACE_DETACH, me, 0, 0);
1236                 return 0;
1237             ],
1238             [
1239                 AC_MSG_RESULT(yes)
1240                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1241                     [Whether the Linux ptrace(2) interface is available.])
1242             ],
1243             [
1244                 AC_MSG_RESULT(no)
1245                 LIBUNWIND_PTRACE=""
1246             ])
1249 AC_SUBST(LIBUNWIND_PTRACE)
1251 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1252 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1253 AC_CHECK_FUNCS(__getcwd _getcwd)
1254 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1255 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1256 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1257 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1258 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1259 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1260 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1261 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1262 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1263 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1264 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1265 AC_CHECK_FUNCS(prctl)
1267 AC_TRY_COMPILE([
1268 #ifdef HAVE_SYS_PRCTL_H
1269 #include <sys/prctl.h>
1270 #endif
1272 [int i; i = prtcl(0); ],
1273 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1278 case "$host_os" in
1279     *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1280        # glibc <= 2.3.2 has a broken getgrouplist
1281        AC_CACHE_CHECK([for good getgrouplist],samba_cv_linux_getgrouplist_ok,[AC_TRY_RUN([
1282 #include <unistd.h>
1283 #include <sys/utsname.h>
1284 main() {
1285        /* glibc up to 2.3 has a broken getgrouplist */
1286 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1287        int libc_major = __GLIBC__;
1288        int libc_minor = __GLIBC_MINOR__;
1290        if (libc_major < 2)
1291               exit(1);
1292        if ((libc_major == 2) && (libc_minor <= 3))
1293               exit(1);
1294 #endif
1295        exit(0);
1297 ], [samba_cv_linux_getgrouplist_ok=yes],
1298    [samba_cv_linux_getgrouplist_ok=no],
1299    [samba_cv_linux_getgrouplist_ok=cross])])
1300        if test x"$samba_cv_linux_getgrouplist_ok" = x"yes"; then
1301           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1302        fi
1303        ;;
1304     *)
1305        AC_CHECK_FUNCS(getgrouplist)
1306        ;;
1307 esac
1310 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1313 if test x$ac_cv_func_stat64 = xno ; then
1314   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1315   AC_TRY_LINK([
1316 #if defined(HAVE_UNISTD_H)
1317 #include <unistd.h>
1318 #endif
1319 #include <sys/stat.h>
1320 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1321   AC_MSG_RESULT([$ac_cv_func_stat64])
1322   if test x$ac_cv_func_stat64 = xyes ; then
1323     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1324   fi
1327 if test x$ac_cv_func_lstat64 = xno ; then
1328   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1329   AC_TRY_LINK([
1330 #if defined(HAVE_UNISTD_H)
1331 #include <unistd.h>
1332 #endif
1333 #include <sys/stat.h>
1334 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1335   AC_MSG_RESULT([$ac_cv_func_lstat64])
1336   if test x$ac_cv_func_lstat64 = xyes ; then
1337     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1338   fi
1341 if test x$ac_cv_func_fstat64 = xno ; then
1342   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1343   AC_TRY_LINK([
1344 #if defined(HAVE_UNISTD_H)
1345 #include <unistd.h>
1346 #endif
1347 #include <sys/stat.h>
1348 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1349   AC_MSG_RESULT([$ac_cv_func_fstat64])
1350   if test x$ac_cv_func_fstat64 = xyes ; then
1351     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1352   fi
1355 #################################################
1356 # Check whether struct stat has timestamps with sub-second resolution.
1359 samba_cv_stat_hires=no
1360 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec], # Linux, Solaris
1361         [samba_cv_stat_hires=yes])
1362 AC_CHECK_MEMBERS([struct stat.st_mtimensec], # BSD, if defined _POSIX_SOURCE
1363         [samba_cv_stat_hires=yes])
1364 AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec], # BSD, if not defined _POSIX_SOURCE
1365         [samba_cv_stat_hires=yes])
1366 AC_CHECK_MEMBERS([struct stat.st_mtime_n], # AIX
1367         [samba_cv_stat_hires=yes])
1368 AC_CHECK_MEMBERS([struct stat.st_umtime], # Tru64
1369         [samba_cv_stat_hires=yes])
1371 if test x"$samba_cv_stat_hires" = x"yes" ; then
1372     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1373             [whether struct stat has sub-second timestamps])
1376 # recent FreeBSD, NetBSD have creation timestamps called birthtime:
1377 AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec])
1378 AC_CHECK_MEMBERS([struct stat.st_birthtime], AC_CHECK_MEMBERS([struct stat.st_birthtimensec]))
1381 AC_CACHE_CHECK([whether there is DOS flags support in the stat struct], samba_cv_stat_dos_flags,
1382     [
1383         AC_TRY_COMPILE(
1384             [#include <sys/stat.h>],
1385             [
1386                 int a = UF_DOS_ARCHIVE;
1387                 int h = UF_DOS_HIDDEN;
1388                 int r = UF_DOS_RO;
1389                 int s = UF_DOS_SYSTEM;
1390                 int i = UF_DOS_NOINDEX;
1391                 int f = UF_DOS_FLAGS;
1392             ],
1393             samba_cv_stat_dos_flags=yes, samba_cv_stat_dos_flags=no)
1394     ])
1396 if test x"$samba_cv_stat_dos_flags" = x"yes" ; then
1397     AC_DEFINE(HAVE_STAT_DOS_FLAGS, 1, [whether there is DOS flags support in the stat struct])
1400 AC_CACHE_CHECK([whether we can compile with __attribute__((destructor))],
1401                samba_cv_function_attribute_destructor,
1402                [
1403                  AC_COMPILE_IFELSE(
1404                         [
1405                                 __attribute__((destructor))
1406                                 static void cleanup(void) { }
1407                         ],
1408                         samba_cv_function_attribute_destructor=yes)
1409                 ])
1411 if test x"$samba_cv_function_attribute_destructor" = xyes ; then
1412    AC_DEFINE(HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR, 1,
1413              [whether we can compile with __attribute__((destructor))])
1416 #####################################
1417 # needed for SRV lookups
1418 AC_CHECK_LIB(resolv, dn_expand)
1419 AC_CHECK_LIB(resolv, _dn_expand)
1420 AC_CHECK_LIB(resolv, __dn_expand)
1423 # Check for the functions putprpwnam, set_auth_parameters,
1424 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1425 # Needed for OSF1 and HPUX.
1428 AC_LIBTESTFUNC(security, putprpwnam)
1429 AC_LIBTESTFUNC(sec, putprpwnam)
1431 AC_LIBTESTFUNC(security, set_auth_parameters)
1432 AC_LIBTESTFUNC(sec, set_auth_parameters)
1434 # UnixWare 7.x has its getspnam in -lgen
1435 AC_LIBTESTFUNC(gen, getspnam)
1437 AC_LIBTESTFUNC(security, getspnam)
1438 AC_LIBTESTFUNC(sec, getspnam)
1440 AC_LIBTESTFUNC(security, bigcrypt)
1441 AC_LIBTESTFUNC(sec, bigcrypt)
1443 AC_LIBTESTFUNC(security, getprpwnam)
1444 AC_LIBTESTFUNC(sec, getprpwnam)
1446 AC_CHECK_FUNCS(strsignal)
1448 ############################################
1449 # Check for EA implementations
1450 case "$host_os" in
1451   *osf*)
1452         AC_SEARCH_LIBS(getproplist, [proplist])
1453         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1454         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1455         AC_CHECK_FUNCS(sizeof_proplist_entry)
1456   ;;
1457   *freebsd4* | *dragonfly* )
1458         AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1459   ;;
1460   *solaris*)
1461         AC_CHECK_FUNCS(attropen)
1462   ;;
1463   *)
1464         AC_SEARCH_LIBS(getxattr, [attr])
1465         AC_CHECK_FUNCS(getxattr,[
1466                 AC_CHECK_FUNCS(lgetxattr fgetxattr listxattr llistxattr flistxattr removexattr lremovexattr fremovexattr setxattr lsetxattr fsetxattr)
1467                 ])
1468         AC_CHECK_FUNCS(getea,[
1469                 AC_CHECK_FUNCS(fgetea lgetea listea flistea llistea removeea fremoveea lremoveea setea fsetea lsetea)
1470                 ])
1471         AC_CHECK_FUNCS(attr_get,[
1472                 AC_CHECK_FUNCS(attr_list attr_set attr_remove attr_getf attr_listf attr_setf attr_removef)
1473                 ])
1474         AC_CHECK_FUNCS(extattr_delete_file,[
1475                 AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_link extattr_get_fd extattr_get_file extattr_get_link extattr_list_fd extattr_list_file extattr_list_link extattr_set_fd extattr_set_file extattr_set_link)
1476                 ])
1477   ;;
1478 esac
1480 ########################################################
1481 # Do xattr functions take additional options like on Darwin?
1482 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1483         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1484                 old_LIBS=$LIBS
1485                 LIBS="$LIBS $ACL_LIBS"
1486                 AC_TRY_COMPILE([
1487                         #include <sys/types.h>
1488                         #if HAVE_ATTR_XATTR_H
1489                         #include <attr/xattr.h>
1490                         #elif HAVE_SYS_XATTR_H
1491                         #include <sys/xattr.h>
1492                         #endif
1493                 ],[
1494                         getxattr(0, 0, 0, 0, 0, 0);
1495                 ],
1496                 [smb_attr_cv_xattr_add_opt=yes],
1497                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1498         ])
1499         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1500                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1501         fi
1504 AC_DISABLE_STATIC
1505 AC_ENABLE_SHARED
1507 # Set defaults
1508 PIE_CFLAGS=""
1509 PIE_LDFLAGS=""
1510 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1512 if test "x$enable_pie" != xno
1513 then
1514         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1515         [
1516                 cat > conftest.c <<EOF
1517 int foo;
1518 int main () { return 0;}
1520                 if AC_TRY_COMMAND_NO_STDERR([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c])
1521                 then
1522                         samba_cv_fpie=yes
1523                 else
1524                         samba_cv_fpie=no
1525                 fi
1526                 rm -f conftest*
1527         ])
1528         if test x"${samba_cv_fpie}" = x"yes"
1529         then
1530                 PIE_CFLAGS="-fPIE"
1531                 PIE_LDFLAGS="-pie"
1532         fi
1535 # Set defaults
1536 RELRO_LDFLAGS=""
1537 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1539 if test "x$enable_relro" != xno
1540 then
1541         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1542         [
1543                 cat > conftest.c <<EOF
1544 int foo;
1545 main () { return 0;}
1547                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1548                 then
1549                         samba_cv_relro=yes
1550                 else
1551                         samba_cv_relro=no
1552                 fi
1553                 rm -f conftest*
1554         ])
1555         if test x"${samba_cv_relro}" = x"yes"
1556         then
1557                 RELRO_LDFLAGS="-Wl,-z,relro"
1558         fi
1561 # Set defaults
1562 SYMSEXT="syms"
1563 AC_SUBST(SYMSEXT)
1565 # Assume non-shared by default and override below
1566 BLDSHARED="false"
1568 # these are the defaults, good for lots of systems
1569 HOST_OS="$host_os"
1570 LDSHFLAGS="-shared"
1571 MODULE_EXPORTS=""
1572 SONAMEFLAG="#"
1573 SHLD="\${CC} \${CFLAGS}"
1574 PICFLAG="${PIE_CFLAGS}"
1575 SHLIBEXT="so"
1576 DSO_EXPORTS=""
1578 # this bit needs to be modified for each OS that supports share libs
1579 # You need to specify how to create a shared library and
1580   # how to compile C code to produce PIC object files
1582   AC_MSG_CHECKING([ability to build shared libraries])
1584   # and these are for particular systems
1585   case "$host_os" in
1586                 *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu | *qnx*)
1587                         case "$host_os" in
1588                                 *linux*) AC_DEFINE(LINUX,1,[Whether the host os is linux]) ;;
1589                                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx]) ;;
1590                         esac
1591                         BLDSHARED="true"
1592                         LDSHFLAGS="-shared -Wl,-Bsymbolic"
1593                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1594                                 LDSHFLAGS_Z_NODEFS="-Wl,--allow-shlib-undefined"
1595                         fi
1596                         DYNEXP="-Wl,--export-dynamic"
1597                         PICFLAG="-fPIC"
1598                         SONAMEFLAG="-Wl,-soname="
1599                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1600                         ;;
1601                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1602                         BLDSHARED="true"
1603                         if test "${GCC}" = "yes"; then
1604                                 PICFLAG="-fPIC"
1605                                 SONAMEFLAG="-Wl,-soname="
1606                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1607                                         DYNEXP="-Wl,-E"
1608                                 fi
1609                                 LDSHFLAGS="-shared"
1610                         else
1611                                 PICFLAG="-KPIC"
1612                                 LDSHFLAGS="-G"
1613                         fi
1614                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1615                                 SONAMEFLAG="-Wl,-soname="
1616                         else
1617                                 SONAMEFLAG="-Wl,-h,"
1618                         fi
1619                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1620                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1621                         ;;
1622                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1623                         BLDSHARED="true"
1624                         LDSHFLAGS="-G"
1625                         SONAMEFLAG="-Wl,-h,"
1626                         PICFLAG="-KPIC"   # Is this correct for SunOS
1627                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1628                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1629                         ;;
1630                 *netbsd* | *freebsd* | *dragonfly* )
1631                         BLDSHARED="true"
1632                         LDSHFLAGS="-shared"
1633                         DYNEXP="-Wl,--export-dynamic"
1634                         SONAMEFLAG="-Wl,-soname,"
1635                         PICFLAG="-fPIC -DPIC"
1636                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1637                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1638                         ;;
1639                 *openbsd*)  BLDSHARED="true"
1640                         LDSHFLAGS="-shared"
1641                         DYNEXP="-Wl,-Bdynamic"
1642                         SONAMEFLAG="-Wl,-soname,"
1643                         PICFLAG="-fPIC"
1644                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1645                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1646                         ;;
1647                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1648                         case "$host_os" in
1649                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1650                         ;;
1651                         esac
1652                         BLDSHARED="true"
1653                         LDSHFLAGS="-Wl,-set_version,sgi1.0 -shared"
1654                         SONAMEFLAG="-Wl,-soname,"
1655                         if test "${GCC}" = "yes"; then
1656                                 PICFLAG="-fPIC"
1657                         else
1658                                 PICFLAG="-KPIC"
1659                         fi
1660                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1661                         ;;
1662                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1663                         BLDSHARED="true"
1664                         # use expfull to export underscored symbols
1665                         # add rtl to remove /lib/crt0.o warning
1666                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1667                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1668                         PICFLAG="-O2"
1669                         # as AIX code is always position independent...
1670                         # .po will just create compile warnings, use po.o:
1671                         if test "${GCC}" != "yes"; then
1672                                 ## for funky AIX compiler using strncpy()
1673                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000 -qhalt=e"
1674                         fi
1676                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1677                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1678                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1679                         ;;
1680                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1681                         # ia64: 64bit build using gcc with CFLAGS="-mpl64"
1682                         #       64bit build using HP's cc with CFLAGS="+DD64"
1683                         # hppa: 64bit build unsupported by gcc
1684                         #       64bit build using HP's cc with CFLAGS="+DA2.0w"
1685                         # HP-UX 11.00 ld needs PHSS_33034
1686                         BLDSHARED="true"
1687                         if test "${GCC}" = "yes"; then
1688                                 PICFLAG="-fPIC"
1689                                 LDSHFLAGS="-shared"
1690                         else
1691                                 PICFLAG="+z"
1692                                 LDSHFLAGS="-b"
1693                                 # "Uses depth-first symbol resolution"
1694                                 LDSHFLAGS="$LDSHFLAGS -Wl,-B,symbolic,-b"
1695                                 if test "$host_cpu" != "ia64"; then
1696                                         # "don't store literals in read-only memory" (?):
1697                                         PICFLAG="$PICFLAG +ESnolit"
1698                                 fi
1699                         fi
1700                         if test "$host_cpu" = "ia64"; then
1701                                 SHLIBEXT="so"
1702                                 # TODO: does the linker find the right 32/64 bit version of the libs? :
1703                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32:/usr/local/lib/hpux64:/usr/lib/hpux64"
1704                         else
1705                                 SHLIBEXT="sl"
1706                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1707                         fi
1708                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1709                                 SONAMEFLAG="-Wl,-soname="
1710                         else
1711                                 SONAMEFLAG="-Wl,+h,"
1712                         fi
1713                         # PIE/PIC flags at link time are required on HP-UX because
1714                         # linking requires a temporary source file, which is being
1715                         # compiled with the indicated flags - which need to contain
1716                         # PIC flags when we don't support PIE flags:
1717                         if test "$PIE_LDFLAGS" = "" ; then
1718                                 PIE_LDFLAGS=\${PICFLAG}
1719                         fi
1720                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1721                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1722                         ;;
1723                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1724                         BLDSHARED="true"
1725                         LDSHFLAGS="-shared"
1726                         SONAMEFLAG="-Wl,-soname,"
1727                         PICFLAG="-fPIC"
1728                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1729                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1730                         for flags in "-expect_unresolved '*'" "-Wl,-expect_unresolved,'*'" ; do
1731                                 saved_ldflags="$LDFLAGS"
1732                                 AC_MSG_CHECKING([if $flags works])
1733                                 LDFLAGS="$flags $saved_ldflags"
1734                                 AC_TRY_LINK([],[],
1735                                         [AC_MSG_RESULT([yes])
1736                                         LDSHFLAGS_Z_NODEFS=$flags],
1737                                         AC_MSG_RESULT([no]))
1738                                 LDFLAGS="$saved_ldflags"
1739                                 test x"$LDSHFLAGS_Z_NODEFS" != x && break
1740                         done
1741                         ;;
1742                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1743                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1744                         ;;
1745                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1746                         BLDSHARED="true"
1747                         LDSHFLAGS="-shared"
1748                         SONAMEFLAG="-Wl,-soname,"
1749                         PICFLAG="-KPIC"
1750                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1751                         ;;
1752                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1753                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1754                         ;;
1755                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1756                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1757                         ;;
1758                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1759                         case "$host" in
1760                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1761                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1762                                         fi
1763                                         LDSHFLAGS="-G"
1764                                         DYNEXP="-Bexport"
1765                                 ;;
1766                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1767                         esac
1768                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1769                         ;;
1771                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1772                         if [ test "$GCC" != yes ]; then
1773                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1774                         fi
1775                         LDSHFLAGS="-G"
1776                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1777                         ;;
1778                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1779                         BLDSHARED="false"
1780                         LDSHFLAGS=""
1781                         ;;
1783                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1784                         BLDSHARED="true"
1785                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1786                         CFLAGS="$CFLAGS -fno-common"
1787                         SHLD="\${CC}"
1788                         SHLIBEXT="dylib"
1789                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1790                         SHLIBEXT="dylib"
1791                         # Since gcc doesn't fail on unrecognised options, the
1792                         # PIE test incorrectly succeeds. Darwin gcc does not
1793                         # actually support the PIE stuff.
1794                         PIE_LDFLAGS=
1795                         PIE_CFLAGS=
1796                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1797                         ;;
1799                 *)
1800                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1801                         ;;
1802   esac
1804 if test "$enable_shared" != "yes"; then
1805         BLDSHARED=false
1808 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1809         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1812 if test x"$BLDSHARED" = x"true" ; then
1813         LDFLAGS="$LDFLAGS -L./bin"
1816 AC_MSG_RESULT($BLDSHARED)
1818 if test x"$enable_developer" = x"yes" ; then
1819         default_as_needed=auto
1820 else
1821         default_as_needed=no
1823 AC_ARG_ENABLE(as-needed,
1824         AS_HELP_STRING([--enable-as-needed],
1825         [Turn on as-needed support if available (default=no)]),
1826         [enable_as_needed=$enableval],
1827         [enable_as_needed=$default_as_needed])
1828 if test "x$enable_as_needed" != xno; then
1829     saved_before_as_needed_ldflags="$LDFLAGS"
1830     for flags in "-Wl,--as-needed" "-Wl,-z,ignore" "-z ignore" ; do
1831         saved_ldflags="$LDFLAGS"
1832         AC_MSG_CHECKING([if $flags works])
1833         LDFLAGS="$flags $saved_ldflags"
1834         AC_TRY_LINK([],[],
1835                 [AC_MSG_RESULT([yes])
1836                 LD_AS_NEEDED_FLAG=$flags
1837                 ld_as_needed_flag_found=yes],
1838                 AC_MSG_RESULT([no]))
1839         LDFLAGS="$LD_AS_NEEDED_FLAG $saved_ldflags"
1840         test x"$ld_as_needed_flag_found" = xyes && break
1841     done
1844 if test x$ld_as_needed_flag_found = xyes -a x$enable_as_needed = xauto ; then
1845 # check if ld has bug described in https://bugzilla.samba.org/show_bug.cgi?id=7209#c17
1846         AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG has explicit external libs bug])
1847 cat > conftest_shb.c <<END
1848 void b() {}
1850 cat > conftest_sha.c <<END
1851 extern void b();
1852 void a() {
1853         b();
1856 cat > conftest.c <<END
1857 extern void a();
1858 int main() {
1859         a();
1860         return 0;
1864         rm -fr conftest
1865         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_sha.o conftest_sha.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1866         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_shb.o conftest_shb.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1867         TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1868         AC_TRY_COMMAND([$TESTCMD -o libconftest_shb.$SHLIBEXT conftest_shb.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1869         AC_TRY_COMMAND([$TESTCMD -o libconftest_sha.$SHLIBEXT conftest_sha.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1870         AC_TRY_COMMAND([$CC -o conftest conftest.c $LDFLAGS -L. -lconftest_sha -lconftest_shb 1>&AS_MESSAGE_LOG_FD 2>&1])
1871         if AC_TRY_COMMAND([eval "$LIB_PATH_VAR=. ./conftest 1>&AS_MESSAGE_LOG_FD 2>&1"])
1872         then
1873                 AC_MSG_RESULT([no])
1874         else
1875                 ld_as_needed_flag_found=no
1876                 LDFLAGS="$saved_before_as_needed_ldflags"
1877                 AC_MSG_RESULT([yes])
1878         fi
1879         rm conftest* libconftest*
1882 # check if we have to disable LD_AS_NEEDED_FLAG:
1883 # On some systems for a veriety of reasons linking with
1884 # -Wl,--as-needed -lreadline -lncurses fails
1885 # we have to retest, if these combination is detected before.
1886 # Bugzilla #7209
1888 if test x$ac_cv_lib_readline_rl_callback_handler_install = xyes ; then
1889         if test x$ld_as_needed_flag_found = xyes ; then
1890                 AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG works with readline])
1891                 # try if check no fails
1892                 save_LIBS=$LIBS
1893                 LIBS="$LIBS $TERMLIBS"
1894                 AC_TRY_LINK([], [rl_callback_handler_install();], [AC_MSG_RESULT([yes])],[ AC_MSG_RESULT([no]); LDFLAGS="$saved_before_as_needed_ldflags"])
1895                 LIBS="$save_LIBS"
1896         fi
1901 # for historical reasons almost all linkers don't complain about unresolved
1902 # symbols in shared libs. Except for the internal samba modules we want to get
1903 # errors when we produce a shared lib with unresolved symbols. On some
1904 # platforms unresolved symbols might be intended, so we might have to add
1905 # platform specific exceptions here.
1907 for flags in "-Wl,-z,defs" "-error_unresolved" "-Wl,-error_unresolved" ; do
1908         saved_ldflags="$LDFLAGS"
1909         AC_MSG_CHECKING([if $flags works])
1910         LDFLAGS="$flags $saved_ldflags"
1911         AC_TRY_LINK([],[],
1912         [AC_MSG_RESULT([yes])
1913         LDSHFLAGS_Z_DEFS=$flags
1914         ldshflags_z_defs_found=yes],
1915         AC_MSG_RESULT([no]))
1916         LDFLAGS=$saved_ldflags
1917         test x"$ldshflags_z_defs_found" = xyes && break
1918 done
1920 AC_MSG_CHECKING([LDSHFLAGS_Z_DEFS])
1921 AC_MSG_RESULT([$LDSHFLAGS_Z_DEFS])
1922 AC_MSG_CHECKING([LDFLAGS])
1923 AC_MSG_RESULT([$LDFLAGS])
1924 AC_MSG_CHECKING([DYNEXP])
1925 AC_MSG_RESULT([$DYNEXP])
1927 #######################################################
1928 # test whether building a shared library actually works
1929 if test $BLDSHARED = true; then
1931 AC_MSG_CHECKING([SHLD])
1932 AC_MSG_RESULT([$SHLD])
1933 AC_MSG_CHECKING([LDSHFLAGS])
1934 AC_MSG_RESULT([$LDSHFLAGS])
1936 AC_MSG_CHECKING([SHLIBEXT])
1937 AC_MSG_RESULT([$SHLIBEXT])
1938 AC_MSG_CHECKING([SONAMEFLAG])
1939 AC_MSG_RESULT([$SONAMEFLAG])
1941 AC_MSG_CHECKING([PICFLAG])
1942 AC_MSG_RESULT([$PICFLAG])
1944 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1945 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1947 AC_CACHE_CHECK([whether building shared libraries actually works],
1948                [ac_cv_shlib_works],[
1949    # try building a trivial shared library
1950    ac_cv_shlib_works=no
1951    # The $SHLD and $LDSHFLAGS variables may contain references to other
1952    # variables so they need to be eval'ed.
1953    if AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.o ${srcdir-.}/../tests/shlib.c 1>&AS_MESSAGE_LOG_FD])
1954    then
1955      TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1956      TESTCMD="$TESTCMD -o \"shlib.$SHLIBEXT\" shlib.o"
1957      if AC_TRY_COMMAND([eval $TESTCMD 1>&AS_MESSAGE_LOG_FD 2>&1])
1958      then
1959        ac_cv_shlib_works=yes
1960      fi
1961    fi
1962    rm -f "shlib.$SHLIBEXT" shlib.o
1965 if test $ac_cv_shlib_works = no; then
1966    BLDSHARED=false
1970 if test x"$BLDSHARED" != x"true"; then
1971         LDSHFLAGS="shared-libraries-disabled"
1972         SONAMEFLAG="shared-libraries-disabled"
1973         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1974         SHLD="shared-libraries-disabled"
1975         PICFLAG="${PIE_CFLAGS}"
1976         SHLIBEXT="shared_libraries_disabled"
1977         merged_build_possible=no
1980 AC_MSG_CHECKING([used PICFLAG])
1981 AC_MSG_RESULT([$PICFLAG])
1983 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1987 ###########################################################
1989 # Configuration of subsystems / libraries
1991 ###########################################################
1993 INSTALLLIBCMD_SH=:
1994 INSTALLLIBCMD_A=:
1995 UNINSTALLLIBCMD_SH=:
1996 UNINSTALLLIBCMD_A=:
1998 if test $BLDSHARED = true; then
1999         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
2000         UNINSTALLLIBCMD_SH="rm -f"
2002 if test $enable_static = yes; then
2003         INSTALLLIBCMD_A="\$(INSTALLCMD)"
2004         UNINSTALLLIBCMD_A="rm -f"
2007 #################################################
2008 # --disable-shared-libs
2009 # can be used to disable the internal use of shared libs altogether
2010 # (this only has an effect when building shared libs is enabled)
2012 USESHARED=false
2013 AC_SUBST(USESHARED)
2015 AC_MSG_CHECKING(whether to use shared libraries internally)
2016 AC_ARG_ENABLE([shared-libs],
2017         AS_HELP_STRING([--enable-shared-libs],
2018                 [Use shared libraries internally (default=yes)]),
2019         [enable_shared_libs=$enableval],
2020         [enable_shared_libs=yes])
2022 if test x"$enable_shared_libs" != x"no" ; then
2023         USESHARED=$BLDSHARED
2026 AC_MSG_RESULT([$USESHARED])
2028 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
2029         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
2032 #################################################
2033 # --with-static-libs=LIBS:
2034 #   link (internal) libs dynamically or statically?
2036 # If a subsystem is built as a library then this controls whether they are
2037 # linked into Samba targets statically or dynamically:
2039 # * If we build the shared library at all, we link dynamically by default.
2041 # * We only link statically if we don't build shared or if the library
2042 #   appears in the --with-static-libs configure option.
2044 # Example:
2045 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
2046 #   of linking the dynamic variant with -ltalloc.
2048 # NOTE: This option only affects libraries that we do not only build
2049 # but that samba also links against as libraries (as opposed to linking
2050 # the plain object files. - This has to be configured in Makefile.in.
2051 # So in particular it does not harm to give invalid or unknown names here.
2054 AC_ARG_WITH([static-libs],
2055         [AS_HELP_STRING([--with-static-libs=LIBS],
2056                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
2057         [AS_IF([test $withval],
2058                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
2059                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
2060                         eval LINK_$lib=STATIC
2061                 done], [])],
2062         [])
2065 # WORKAROUND:
2066 #   until we have organized other internal subsystems (as util, registry
2067 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
2068 #   dynamically to samba programs.
2070 LINK_LIBNETAPI=STATIC
2072 LINK_LIBSMBCLIENT=STATIC
2075 #  The library versions are hardcoded here
2076 #  and filled into the LIBFOO_SOVER variable.
2078 #  TODO: for talloc and tdb (at least), these should
2079 #  be extracted from their respective source directories
2081 AC_ARG_ENABLE(external_libtalloc, [AS_HELP_STRING([--enable-external-libtalloc], [Enable external talloc [default=auto]])],
2082 [ enable_external_libtalloc=$enableval ], [ enable_external_libtalloc=auto ])
2084 if test "x$enable_external_libtalloc" != xno
2085 then
2086         PKG_CHECK_MODULES(LIBTALLOC, talloc >= 2.0.1,
2087                 [ enable_external_libtalloc=yes ],
2088                 [ if test x$enable_external_libtalloc = xyes; then
2089                         AC_MSG_ERROR([Unable to find libtalloc])
2090                   else
2091                         enable_external_libtalloc=no
2092                   fi
2093                 ])
2096 if test "x$enable_external_libtalloc" = xno
2097 then
2098         m4_include(../lib/talloc/libtalloc.m4)
2099         LINK_LIBTALLOC=STATIC
2100         SMB_LIBRARY(talloc, 2)
2101         LIBTALLOC_OBJ0=""
2102         for obj in ${TALLOC_OBJ}; do
2103                 LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
2104         done
2105         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
2106         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TALLOC_CFLAGS}"
2107         AC_SUBST(LIBTALLOC_OBJ0)
2109         TALLOCTORT="bin/talloctort\$(EXEEXT)"
2110         AC_SUBST(TALLOCTORT)
2114 AC_ARG_ENABLE(external_libtdb,
2115         [AS_HELP_STRING([--enable-external-libtdb],
2116                 [Enable external tdb [default=auto]])],
2117                 [ enable_external_libtalloc=$enableval ],
2118                 [ enable_external_libtalloc=auto ])
2120 if test "x$enable_external_libtdb" != xno
2121 then
2122         PKG_CHECK_MODULES(LIBTDB, tdb >= 1.2.2,
2123                 [ enable_external_libtdb=yes ],
2124                 [
2125                 if test x$enable_external_libtdb = xyes; then
2126                         AC_MSG_ERROR([Unable to find libtdb])
2127                 else
2128                         enable_external_libtdb=no
2129                 fi
2130                 ])
2133 AC_SUBST(LIBTDB_OBJ0)
2134 if test "x$enable_external_libtdb" = xno
2135 then
2136         m4_include(../lib/tdb/libtdb.m4)
2137         LINK_LIBTDB=STATIC
2138         SMB_LIBRARY(tdb, 1)
2139         LIBTDB_OBJ0=""
2140         LIBTDB_LIBS="$LIBTDB_LIBS $TDB_DEPS"
2141         for obj in ${TDB_OBJ}; do
2142                 LIBTDB_OBJ0="${LIBTDB_OBJ0} ${tdbdir}/${obj}"
2143         done
2144         AC_SUBST(LIBTDB_OBJ0)
2145         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
2146         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TDB_CFLAGS}"
2148         TDBBACKUP="bin/tdbbackup\$(EXEEXT)"
2149         AC_SUBST(TDBBACKUP)
2150         TDBDUMP="bin/tdbdump\$(EXEEXT)"
2151         AC_SUBST(TDBDUMP)
2152         TDBTOOL="bin/tdbtool\$(EXEEXT)"
2153         AC_SUBST(TDBTOOL)
2154         TDBTORTURE="bin/tdbtorture\$(EXEEXT)"
2155         AC_SUBST(TDBTORTURE)
2156         ac_cv_have_tdb_err_nesting=yes
2157 else
2158         AC_TRY_COMPILE([#include "tdb.h"],
2159                        [enum TDB_ERROR err = TDB_ERR_NESTING],
2160                        ac_cv_have_tdb_err_nesting=yes,
2161                        ac_cv_have_tdb_err_nesting=no)
2164 if test x"$ac_cv_have_tdb_err_nesting" = xyes; then
2165    AC_DEFINE(HAVE_TDB_ERR_NESTING, 1, [Whether we have TDB_ERR_NESTING])
2168 SMB_LIBRARY(netapi, 0)
2169 SMB_LIBRARY(smbclient, 0)
2170 SMB_LIBRARY(smbsharemodes, 0)
2171 SMB_LIBRARY(addns, 0, no, [undefined API])
2175 ################
2177 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
2178 AC_TRY_RUN([#include <stdio.h>
2179 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
2180 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
2181 if test x"$samba_cv_have_longlong" = x"yes"; then
2182     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
2183     AC_CHECK_TYPE(intptr_t, unsigned long long)
2184 else
2185     AC_CHECK_TYPE(intptr_t, unsigned long)
2189 # Check if the compiler supports the LL prefix on long long integers.
2190 # AIX needs this.
2192 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
2193     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
2194         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
2195 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
2196    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
2200 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
2201 AC_TRY_RUN([#include <time.h>
2202 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
2203 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
2204 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
2205     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
2208 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2209 AC_TRY_RUN([#include <stdio.h>
2210 #include <sys/stat.h>
2211 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
2212 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2213 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
2214     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
2217 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
2218 AC_TRY_RUN([
2219 #if defined(HAVE_UNISTD_H)
2220 #include <unistd.h>
2221 #endif
2222 #include <stdio.h>
2223 #include <sys/stat.h>
2224 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2225 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
2226 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
2227     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
2230 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2231 AC_TRY_RUN([
2232 #if defined(HAVE_UNISTD_H)
2233 #include <unistd.h>
2234 #endif
2235 #include <stdio.h>
2236 #include <sys/stat.h>
2237 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
2238 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2239 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2240     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2243 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
2244 AC_TRY_RUN([
2245 #if defined(HAVE_UNISTD_H)
2246 #include <unistd.h>
2247 #endif
2248 #include <stdio.h>
2249 #include <sys/stat.h>
2250 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2251 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
2252 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
2253     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
2256 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2257 AC_TRY_RUN([
2258 #if defined(HAVE_UNISTD_H)
2259 #include <unistd.h>
2260 #endif
2261 #include <stdio.h>
2262 #include <sys/stat.h>
2263 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2264 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2265 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2266     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2269 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2270 AC_TRY_RUN([
2271 #if defined(HAVE_UNISTD_H)
2272 #include <unistd.h>
2273 #endif
2274 #include <stdio.h>
2275 #include <sys/stat.h>
2276 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2277 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2278 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2279     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2282 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2283 AC_TRY_COMPILE([
2284 #if defined(HAVE_UNISTD_H)
2285 #include <unistd.h>
2286 #endif
2287 #include <sys/types.h>
2288 #include <dirent.h>],
2289 [DIR64 de;],
2290 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2291 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2292     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2295 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2296 AC_TRY_COMPILE([
2297 #if defined(HAVE_UNISTD_H)
2298 #include <unistd.h>
2299 #endif
2300 #include <sys/types.h>
2301 #include <dirent.h>],
2302 [struct dirent64 de;],
2303 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2304 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2305     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2308 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2309 AC_TRY_RUN([
2310 #if defined(HAVE_UNISTD_H)
2311 #include <unistd.h>
2312 #endif
2313 #include <sys/types.h>
2314 main() { dev_t dev; int i = major(dev); return 0; }],
2315 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2316 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2317     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2320 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2321 AC_TRY_RUN([
2322 #if defined(HAVE_UNISTD_H)
2323 #include <unistd.h>
2324 #endif
2325 #include <sys/types.h>
2326 main() { dev_t dev; int i = minor(dev); return 0; }],
2327 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2328 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2329     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2332 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2333 AC_TRY_RUN([
2334 #if defined(HAVE_UNISTD_H)
2335 #include <unistd.h>
2336 #endif
2337 #include <sys/types.h>
2338 main() { dev_t dev = makedev(1,2); return 0; }],
2339 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2340 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2341     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2344 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2345 AC_TRY_RUN([#include <stdio.h>
2346 main() { char c; c=250; exit((c > 0)?0:1); }],
2347 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2348 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2349     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2352 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2353 AC_TRY_COMPILE([#include <sys/types.h>
2354 #include <dirent.h>
2355 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2356 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2357 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2358     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2361 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2362 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2363 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2364 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2365     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2369 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2371     # On some systems (eg. Linux) librt can pull in libpthread. We
2372     # don't want this to happen because libpthreads changes signal delivery
2373     # semantics in ways we are not prepared for. This breaks Linux oplocks
2374     # which rely on signals.
2376     AC_LIBTESTFUNC(rt, clock_gettime,
2377             [
2378                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2379                                 [Whether clock_gettime is available])
2380                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2381                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2382                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2383                         ])
2387 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2388 AC_TRY_RUN([#include <sys/types.h>
2389 #include <dirent.h>
2390 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2391 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2392 di->d_name[0] == 0) exit(0); exit(1);} ],
2393 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2394 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2395     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2398 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2399 AC_TRY_COMPILE([#include <sys/types.h>
2400 #include <utime.h>],
2401 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2402 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2403 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2404     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2407 ##############
2408 # Check utmp details, but only if our OS offers utmp.h
2409 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2410 dnl  utmp and utmpx come in many flavours
2411 dnl  We need to check for many of them
2412 dnl  But we don't need to do each and every one, because our code uses
2413 dnl  mostly just the utmp (not utmpx) fields.
2415 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx getutxent)
2417 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2418 AC_TRY_COMPILE([#include <sys/types.h>
2419 #include <utmp.h>],
2420 [struct utmp ut;  ut.ut_name[0] = 'a';],
2421 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2422 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2423     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2426 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2427 AC_TRY_COMPILE([#include <sys/types.h>
2428 #include <utmp.h>],
2429 [struct utmp ut;  ut.ut_user[0] = 'a';],
2430 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2431 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2432     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2435 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2436 AC_TRY_COMPILE([#include <sys/types.h>
2437 #include <utmp.h>],
2438 [struct utmp ut;  ut.ut_id[0] = 'a';],
2439 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2440 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2441     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2444 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2445 AC_TRY_COMPILE([#include <sys/types.h>
2446 #include <utmp.h>],
2447 [struct utmp ut;  ut.ut_host[0] = 'a';],
2448 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2449 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2450     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2453 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2454 AC_TRY_COMPILE([#include <sys/types.h>
2455 #include <utmp.h>],
2456 [struct utmp ut;  time_t t; ut.ut_time = t;],
2457 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2458 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2459     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2462 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2463 AC_TRY_COMPILE([#include <sys/types.h>
2464 #include <utmp.h>],
2465 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2466 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2467 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2468     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2471 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2472 AC_TRY_COMPILE([#include <sys/types.h>
2473 #include <utmp.h>],
2474 [struct utmp ut;  ut.ut_type = 0;],
2475 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2476 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2477     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2480 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2481 AC_TRY_COMPILE([#include <sys/types.h>
2482 #include <utmp.h>],
2483 [struct utmp ut;  ut.ut_pid = 0;],
2484 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2485 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2486     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2489 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2490 AC_TRY_COMPILE([#include <sys/types.h>
2491 #include <utmp.h>],
2492 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2493 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2494 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2495     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2498 dnl Look for the IPv6 varient by preference. Many systems have both.
2499 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2500 AC_TRY_COMPILE([#include <sys/types.h>
2501 #include <utmp.h>],
2502 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2503 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2504 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2505     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2508 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2509 AC_TRY_COMPILE([#include <sys/types.h>
2510 #include <utmp.h>],
2511 [struct utmp ut;  ut.ut_addr = 0;],
2512 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2513 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2514     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2517 if test x$ac_cv_func_pututline = xyes ; then
2518   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2519   AC_TRY_COMPILE([#include <sys/types.h>
2520 #include <utmp.h>],
2521   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2522   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2523   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2524       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2525   fi
2528 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2529 AC_TRY_COMPILE([#include <sys/types.h>
2530 #include <utmpx.h>],
2531 [struct utmpx ux;  ux.ut_syslen = 0;],
2532 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2533 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2534     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2538 # end utmp details
2541 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2542 AC_ARG_WITH(libiconv,
2543 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2545   if test "$withval" = "no" ; then
2546     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2547   else
2548      if test "$withval" != "yes" ; then
2549         ICONV_PATH_SPEC=yes
2550         ICONV_LOOK_DIRS="$withval"
2551      fi
2552   fi
2555 for i in $ICONV_LOOK_DIRS ; do
2557     save_LIBS="$LIBS"
2558     save_LDFLAGS="$LDFLAGS"
2559     save_CPPFLAGS="$CPPFLAGS"
2561     iconv_current_LIBS=""
2562     iconv_current_LDFLAGS=""
2563     iconv_current_CPPFLAGS=""
2565     ICONV_FOUND="no"
2566     unset libext
2568     #  This is here to handle -withval stuff for --with-libiconv
2569     #  Perhaps we should always add a -L
2570     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2572     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2573     # installation paths. This gets a little tricky since we might have iconv
2574     # in both libiconv and in libc. In this case the jm_ICONV test will always
2575     # succeed when the header is found. To counter this, make sure the
2576     # library directory is there and check the ABI directory first (which
2577     # should be harmless on other systems, but causes tons of linker warnings on
2578     # 64bit Ubuntu systems).
2579     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2580     # installed, I've decided to fix the linker warnings.
2581     # -- Kai
2582     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2583     for l in "lib" "lib32" "lib/hpux32"; do
2584         if test -d "$i/$l" ; then
2585                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2586                 LIBS=
2587                 export LDFLAGS LIBS CPPFLAGS
2588                 # Try to find iconv(3)
2589                 jm_ICONV($i/$l)
2590                 if test x"$ICONV_FOUND" = "xyes" ; then
2591                     libext="$l"
2592                     break
2593                 fi
2594         fi
2595     done
2597     if test x"$ICONV_FOUND" = "xyes" ; then
2598         iconv_current_LDFLAGS="-L$i/$libext"
2599         iconv_current_CPPFLAGS="-I$i/include"
2601         if test x"$jm_cv_lib_iconv" != x; then
2602             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2603         else
2604             # We found iconv in libc.
2605             iconv_current_LIBS=""
2606         fi
2608     fi
2610     if test x"$ICONV_FOUND" = "xyes" ; then
2612         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2613         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2614         LIBS="$save_LIBS $iconv_current_LIBS"
2615         export LDFLAGS LIBS CPPFLAGS
2617         default_dos_charset=no
2618         default_display_charset=no
2619         default_unix_charset=no
2621         # check for default dos charset name
2622         for j in CP850 IBM850 ; do
2623             rjs_CHARSET($j)
2624             default_dos_charset="$ICONV_CHARSET"
2625             if test x"$default_dos_charset" = x"$j"; then
2626                 break
2627             fi
2628         done
2630         # check for default display charset name
2631         for j in ASCII 646 ; do
2632             rjs_CHARSET($j)
2633             default_display_charset="$ICONV_CHARSET"
2634             if test x"$default_display_charset" = x"$j"; then
2635                 break
2636             fi
2637         done
2639         # check for default unix charset name
2640         for j in UTF-8 UTF8 ; do
2641             rjs_CHARSET($j)
2642             default_unix_charset="$ICONV_CHARSET"
2643             if test x"$default_unix_charset" = x"$j"; then
2644                 break
2645             fi
2646         done
2648         if test "$default_dos_charset" != "no" -a \
2649                 "$default_dos_charset" != "cross" -a \
2650                 "$default_display_charset" != "no" -a \
2651                 "$default_display_charset" != "cross" -a \
2652                 "$default_unix_charset" != "no" -a \
2653                 "$default_unix_charset" != "cross"
2654         then
2655                 samba_cv_HAVE_NATIVE_ICONV=yes
2656         else
2657             if test "$default_dos_charset" = "cross" -o \
2658                      "$default_display_charset" = "cross" -o \
2659                      "$default_unix_charset" = "cross"
2660             then
2661                     samba_cv_HAVE_NATIVE_ICONV=cross
2662             else
2663                     samba_cv_HAVE_NATIVE_ICONV=no
2664             fi
2665         fi
2667         # At this point, we have a libiconv candidate. We know that
2668         # we have the right headers and libraries, but we don't know
2669         # whether it does the conversions we want. We can't test this
2670         # because we are cross-compiling. This is not necessarily a big
2671         # deal, since we can't guarantee that the results we get now will
2672         # match the results we get at runtime anyway.
2673         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2674             default_dos_charset="CP850"
2675             default_display_charset="ASCII"
2676             default_unix_charset="UTF-8"
2677             samba_cv_HAVE_NATIVE_ICONV=yes
2678             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2679             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2680         fi
2682         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2684             CPPFLAGS=$save_CPPFLAGS
2685             LDFLAGS=$save_LDFLAGS
2686             LIBS=$save_LIBS
2688             if test x"$iconv_current_LIBS" != x; then
2689                 LIBS="$LIBS $iconv_current_LIBS"
2690             fi
2692             # Add the flags we need to CPPFLAGS and LDFLAGS
2693             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2694             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2696             # Turn the #defines into string literals
2697             default_dos_charset="\"$default_dos_charset\""
2698             default_display_charset="\"$default_display_charset\""
2699             default_unix_charset="\"$default_unix_charset\""
2701             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2702             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2703             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2704             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2706            break
2707         fi
2709     # We didn't find a working iconv, so keep going
2710     fi
2712     #  We only need to clean these up here for the next pass through the loop
2713     CPPFLAGS=$save_CPPFLAGS
2714     LDFLAGS=$save_LDFLAGS
2715     LIBS=$save_LIBS
2716     export LDFLAGS LIBS CPPFLAGS
2717 done
2718 unset libext
2721 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2722     AC_MSG_WARN([Sufficient support for iconv function was not found.
2723     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2724    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2725    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2726    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2730 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2731 AC_TRY_RUN([
2732 #include <sys/types.h>
2733 #include <fcntl.h>
2734 #ifndef F_GETLEASE
2735 #define F_GETLEASE      1025
2736 #endif
2737 main() {
2738        int fd = open("/dev/null", O_RDONLY);
2739        return fcntl(fd, F_GETLEASE, 0) == -1;
2742 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2743 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2744     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2747 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2748 AC_TRY_RUN([
2749 #include <sys/types.h>
2750 #include <fcntl.h>
2751 #include <signal.h>
2752 #ifndef F_NOTIFY
2753 #define F_NOTIFY 1026
2754 #endif
2755 main() {
2756         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2759 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2760 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2761     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2764 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2765 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h sys/inotify.h)
2766 AC_CHECK_FUNCS(inotify_init)
2767 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2769 samba_cv_HAVE_INOTIFY=yes,
2770 samba_cv_HAVE_INOTIFY=no,
2771 samba_cv_HAVE_INOTIFY=cross)
2773 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2774     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2777 #################################################
2778 # Check if FAM notifications are available. For FAM info, see
2779 #       http://oss.sgi.com/projects/fam/
2780 #       http://savannah.nongnu.org/projects/fam/
2781 AC_ARG_ENABLE(fam,
2782 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2784 if test x$enable_fam != xno; then
2785     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2786     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2787         # On IRIX, libfam requires libC, but other FAM implementations
2788         # might not need it.
2789         AC_CHECK_LIB(fam, FAMOpen2,
2790             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam";
2791             AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2792             [samba_cv_HAVE_LIBFAM=no])
2794         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2795             samba_fam_xtra=-lC
2796             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2797                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC";
2798                 AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2799                 [samba_cv_HAVE_LIBFAM=no])
2800             unset samba_fam_xtra
2801         fi
2802     fi
2803     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2804         default_shared_modules="$default_shared_modules vfs_notify_fam"
2805         AC_TRY_COMPILE([#include <fam.h>],
2806                     [enum FAMCodes code = FAMChanged;],
2807                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2808                         [Whether fam.h contains a typedef for enum FAMCodes]),
2809                     [])
2810     fi
2812     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2813         AC_CHECK_LIB(fam, FAMNoExists,
2814             [AC_DEFINE(HAVE_FAMNOEXISTS, 1, Define to 1 if there is support for FAMNoExists)])
2815     fi
2817     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2818         AC_MSG_ERROR(FAM support requested but FAM library not available )
2819     fi
2822 AC_SUBST(SMB_FAM_LIBS)
2824 #################################################
2825 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2828 with_dmapi_support=auto
2829 AC_MSG_CHECKING(whether to use DMAPI support)
2830 AC_ARG_WITH(dmapi,
2831 [AS_HELP_STRING([--with-dmapi], [Include DMAPI/XDSM support (default=auto)])],
2832 [ case "$withval" in
2833   yes|no)
2834     with_dmapi_support=$withval
2835     ;;
2836   esac ]
2838 AC_MSG_RESULT([$with_dmapi_support])
2840 if test x"$with_dmapi_support" != xno ; then
2841         SMB_CHECK_DMAPI([], [
2842                 AC_MSG_NOTICE(DMAPI support not present)
2843                 if test x"$with_dmapi_support" = xyes ; then
2844                         AC_MSG_ERROR(no DMAPI support found but requested!)
2845                 fi
2846                 ]
2847         )
2850 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2851 # Theoretically it should work with AIX JFS2 too but this needs testing
2852 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2853     default_shared_modules="$default_shared_modules vfs_tsmsm"
2856 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2857 AC_TRY_RUN([
2858 #include <sys/types.h>
2859 #include <fcntl.h>
2860 #include <signal.h>
2861 #include <sys/file.h>
2862 #ifndef LOCK_MAND
2863 #define LOCK_MAND       32
2864 #define LOCK_READ       64
2865 #endif
2866 main() {
2867         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2870 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2871 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2872     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2876 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2877 AC_TRY_COMPILE([#include <sys/types.h>
2878 #include <fcntl.h>],
2879 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2880 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2881 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2882     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2885 #################################################
2886 # Check for POSIX capability support
2888 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2889     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2890     [], [])
2892 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2894     ac_save_LIBS=$LIBS
2895     AC_LIBTESTFUNC(cap, cap_get_proc)
2897     AC_CACHE_CHECK([for POSIX capabilities],
2898             samba_cv_HAVE_POSIX_CAPABILITIES,
2899             [
2900                 AC_TRY_RUN([
2901 #include <sys/types.h>
2902 #include <sys/capability.h>
2903 main() {
2904  cap_t cap;
2905  cap_value_t vals[1];
2906  if (!(cap = cap_get_proc()))
2907    exit(1);
2908  vals[0] = CAP_CHOWN;
2909  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2910  cap_set_proc(cap);
2911  exit(0);
2913                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2914                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2915                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2916             ])
2918 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2919     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2920             [Whether POSIX capabilities are available])
2921 else
2922     LIBS=$ac_save_LIBS
2928 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2929 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2932 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2933 AC_TRY_COMPILE([#include <sys/types.h>
2934 #if defined(HAVE_RPC_RPC_H)
2935 #include <rpc/rpc.h>
2936 #endif],
2937 [int16 testvar;],
2938 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2939 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2940     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2943 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2944 AC_TRY_COMPILE([#include <sys/types.h>
2945 #if defined(HAVE_RPC_RPC_H)
2946 #include <rpc/rpc.h>
2947 #endif],
2948 [uint16 testvar;],
2949 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2950 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2951     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2954 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2955 AC_TRY_COMPILE([#include <sys/types.h>
2956 #if defined(HAVE_RPC_RPC_H)
2957 #include <rpc/rpc.h>
2958 #endif],
2959 [int32 testvar;],
2960 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2961 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2962     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2965 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2966 AC_TRY_COMPILE([#include <sys/types.h>
2967 #if defined(HAVE_RPC_RPC_H)
2968 #include <rpc/rpc.h>
2969 #endif],
2970 [uint32 testvar;],
2971 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2972 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2973     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2977 dnl Some systems (SCO) have a problem including
2978 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2979 dnl as a #define in <prot.h> and as part of an enum
2980 dnl in <rpc/rpc.h>.
2983 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2984 AC_TRY_COMPILE([#include <sys/types.h>
2985 #ifdef HAVE_SYS_SECURITY_H
2986 #include <sys/security.h>
2987 #include <prot.h>
2988 #endif  /* HAVE_SYS_SECURITY_H */
2989 #if defined(HAVE_RPC_RPC_H)
2990 #include <rpc/rpc.h>
2991 #endif],
2992 [int testvar;],
2993 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2994 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2995     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2998 AC_MSG_CHECKING([for test routines])
2999 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
3000            AC_MSG_RESULT(yes),
3001            AC_MSG_ERROR([cant find test code. Aborting config]),
3002            AC_MSG_WARN([cannot run when cross-compiling]))
3004 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
3005 AC_TRY_RUN([#include "${srcdir-.}/../tests/ftruncate.c"],
3006            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
3007 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
3008     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
3011 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
3012 AC_TRY_RUN([#include "${srcdir-.}/../tests/getgroups.c"],
3013            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
3014 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
3015     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
3018 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
3019 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
3020 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
3021 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
3022 AC_CHECK_FUNCS(getpagesize)
3024 ################################################
3025 # look for a method of setting the effective uid
3026 seteuid=no;
3028 if test $seteuid = no; then
3029 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
3030 AC_TRY_RUN([
3031 #define AUTOCONF_TEST 1
3032 #define USE_SETREUID 1
3033 #include "confdefs.h"
3034 #include "${srcdir-.}/lib/util_sec.c"],
3035            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
3036 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
3037     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
3041 # we check for setresuid second as it conflicts with AIO on Linux. 
3042 # see http://samba.org/~tridge/junkcode/aio_uid.c
3043 if test $seteuid = no; then
3044 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
3045 AC_TRY_RUN([
3046 #define AUTOCONF_TEST 1
3047 #define USE_SETRESUID 1
3048 #include "confdefs.h"
3049 #include "${srcdir-.}/lib/util_sec.c"],
3050            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
3051 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
3052     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
3056 if test $seteuid = no; then
3057 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
3058 AC_TRY_RUN([
3059 #define AUTOCONF_TEST 1
3060 #define USE_SETEUID 1
3061 #include "confdefs.h"
3062 #include "${srcdir-.}/lib/util_sec.c"],
3063            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
3064 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
3065     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
3069 if test $seteuid = no; then
3070 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
3071 AC_TRY_RUN([
3072 #define AUTOCONF_TEST 1
3073 #define USE_SETUIDX 1
3074 #include "confdefs.h"
3075 #include "${srcdir-.}/lib/util_sec.c"],
3076            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
3077 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
3078     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
3082 AC_CACHE_CHECK([for the Darwin initgroups system call],
3083         samba_cv_DARWIN_INITGROUPS,
3084         AC_TRY_LINK([
3085 #include <sys/syscall.h>
3086 #include <unistd.h>
3087         ],
3088         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
3089         samba_cv_DARWIN_INITGROUPS=yes,
3090         samba_cv_DARWIN_INITGROUPS=no)
3093 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
3094     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
3095         [Whether to use the Darwin-specific initgroups system call])
3098 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
3099 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock.c"],
3100            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
3101 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
3102     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
3105 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
3106 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock64.c"],
3107            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
3108 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
3109     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
3111 else
3114 dnl Don't check for 64 bit fcntl locking if we know that the
3115 dnl glibc2.1 broken check has succeeded.
3118   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
3119   AC_TRY_RUN([
3120 #if defined(HAVE_UNISTD_H)
3121 #include <unistd.h>
3122 #endif
3123 #include <stdio.h>
3124 #include <stdlib.h>
3126 #ifdef HAVE_FCNTL_H
3127 #include <fcntl.h>
3128 #endif
3130 #ifdef HAVE_SYS_FCNTL_H
3131 #include <sys/fcntl.h>
3132 #endif
3133 main() { struct flock64 fl64;
3134 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
3135 exit(0);
3136 #else
3137 exit(1);
3138 #endif
3140        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
3142   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
3143       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
3144   fi
3147 # glibc up to 2.3.6 had dangerously broken posix_fallocate(). DON'T USE IT.
3148 AC_CACHE_CHECK([for broken posix_fallocate],samba_cv_HAVE_BROKEN_POSIX_FALLOCATE,[
3149 AC_TRY_COMPILE([
3150   #define _XOPEN_SOURCE 600
3151   #include <stdlib.h>
3152   #if defined(__GLIBC__) && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4))
3153     probably broken posix_fallocate
3154   #endif
3155 ], [
3156 ], 
3157 samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=no,samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=yes)])
3158 if test x"$samba_cv_HAVE_BROKEN_POSIX_FALLOCATE" = xyes; then
3159         AC_DEFINE(HAVE_BROKEN_POSIX_FALLOCATE,, Whether we have a broken posix_fallocate)
3163 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
3164 AC_TRY_COMPILE([#include <sys/types.h>
3165 #include <sys/stat.h>
3166 #include <unistd.h>],
3167 [struct stat st;  st.st_blocks = 0;],
3168 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
3169 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
3170     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
3173 AC_CHECK_TYPES([blksize_t, blkcnt_t], [], [], [[#include <sys/stat.h>]])
3175 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
3176 AC_TRY_COMPILE([#include <sys/types.h>
3177 #include <sys/stat.h>
3178 #include <unistd.h>],
3179 [struct stat st;  st.st_blksize = 0;],
3180 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
3181 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
3182     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
3185 AC_CACHE_CHECK([for st_flags in struct stat],
3186         samba_cv_HAVE_STAT_ST_FLAGS,
3187         [
3188             AC_TRY_COMPILE([#include <sys/types.h>
3189 #include <sys/stat.h>
3190 #include <unistd.h>],
3191             [struct stat st;  st.st_flags = 0;],
3192             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3193             samba_cv_HAVE_STAT_ST_FLAGS=no,
3194             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3195         ])
3197 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3198     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3199                 [Whether the stat struct has a st_flags member])
3202 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3203 AC_TRY_COMPILE([
3204 #include <sys/types.h>
3205 #include <sys/acl.h>
3206 #if defined(HAVE_RPCSVC_NIS_H)
3207 #include <rpcsvc/nis.h>
3208 #endif],
3209 [int i;],
3210 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3211 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3212         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3215 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3216 AC_TRY_RUN([
3217 #include <stdio.h>
3218 #include <limits.h>
3219 #include <signal.h>
3221 void exit_on_core(int ignored) {
3222         exit(1);
3225 main() {
3226         char *newpath;
3227         signal(SIGSEGV, exit_on_core);
3228         newpath = realpath("/tmp", NULL);
3229         exit((newpath != NULL) ? 0 : 1);
3232 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3233 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3234     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3237 #################################################
3238 # check for AFS clear-text auth support
3239 samba_cv_WITH_AFS=no
3240 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3241 AC_ARG_WITH(afs,
3242 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
3243 [ case "$withval" in
3244   yes|auto)
3245     AC_MSG_RESULT($withval)
3246     samba_cv_WITH_AFS=$withval
3247     ;;
3248   *)
3249     AC_MSG_RESULT(no)
3250     ;;
3251   esac ],
3252   AC_MSG_RESULT(no)
3255 ####################################################
3256 # check for Linux-specific AFS fake-kaserver support
3257 samba_cv_WITH_FAKE_KASERVER=no
3258 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3259 AC_ARG_WITH(fake-kaserver,
3260 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
3261 [ case "$withval" in
3262   yes|auto)
3263     AC_MSG_RESULT($withval)
3264     samba_cv_WITH_FAKE_KASERVER=$withval
3265     ;;
3266   *)
3267     AC_MSG_RESULT(no)
3268     ;;
3269   esac ],
3270   AC_MSG_RESULT(no)
3273 #################################################
3274 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3275 if test x"$samba_cv_WITH_AFS" != x"no" ||
3276    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3278     # see if this box has the OpenSSL DES libraries
3279     AC_CHECK_LIB( crypto, DES_pcbc_encrypt, LIBS="$LIBS -lcrypto" , [AC_ERROR(OpenSSL library: libcrypto ot found!)] )
3281     # see if this box has the afs-headers in /usr/include/afs
3282     AC_MSG_CHECKING(for /usr/include/afs)
3283     if test -d /usr/include/afs; then
3284           AC_MSG_RESULT(yes)
3285     else
3286       AC_MSG_RESULT(no)
3287     fi
3289     # check for afs.h
3290     have_afs_headers=no
3291     AC_CHECK_HEADERS(afs.h afs/afs.h)
3292     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3293         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3294            test x"$samba_cv_WITH_AFS" = x"auto"; then
3295                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3296         else
3297                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3298         fi
3299     else
3300         have_afs_headers=yes
3301     fi
3304 FAKE_KASERVER_OBJ=""
3305 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3306     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3307     FAKE_KASERVER_OBJ="utils/net_afs.o"
3309 AC_SUBST(FAKE_KASERVER_OBJ)
3311 #################################################
3312 # check whether to compile AFS/NT ACL mapping module
3313 samba_cv_WITH_VFS_AFSACL=no
3314 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3315 AC_ARG_WITH(vfs-afsacl,
3316 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
3317 [ case "$withval" in
3318   yes|auto)
3319     AC_MSG_RESULT($withval)
3320     samba_cv_WITH_VFS_AFSACL=yes
3321     ;;
3322   *)
3323     AC_MSG_RESULT(no)
3324     ;;
3325   esac ],
3326   AC_MSG_RESULT(no)
3329 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3330    default_shared_modules="$default_shared_modules vfs_afsacl"
3332         
3333 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3334     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3337 #################################################
3338 # check for the DFS clear-text auth system
3339 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3340 AC_ARG_WITH(dfs,
3341 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3342 [ case "$withval" in
3343   yes)
3344     AC_MSG_RESULT(yes)
3345     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3346     ;;
3347   *)
3348     AC_MSG_RESULT(no)
3349     ;;
3350   esac ],
3351   AC_MSG_RESULT(no)
3354 ########################################################
3355 # Compile with LDAP support?
3357 with_ldap_support=auto
3358 AC_MSG_CHECKING([for LDAP support])
3360 AC_ARG_WITH(ldap,
3361 [AS_HELP_STRING([--with-ldap], [LDAP support (default=auto)])],
3362 [ case "$withval" in
3363     yes|no)
3364         with_ldap_support=$withval
3365         ;;
3366   esac ])
3368 AC_MSG_RESULT($with_ldap_support)
3370 SMBLDAP=""
3371 AC_SUBST(SMBLDAP)
3372 SMBLDAPUTIL=""
3373 AC_SUBST(SMBLDAPUTIL)
3375 if test x"$with_ldap_support" != x"no"; then
3377   ##################################################################
3378   # first test for ldap.h and lber.h
3379   # (ldap.h is required for this test)
3380   AC_CHECK_HEADERS(ldap.h lber.h)
3382   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3383         if test x"$with_ldap_support" = x"yes"; then
3384          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3385         else
3386          AC_MSG_WARN(ldap.h is needed for LDAP support)
3387         fi
3388         
3389         with_ldap_support=no
3390   fi
3392   ##################################################################
3393   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3394   # unsigned int in include/includes.h
3395   case $host_os in
3396         *hpux*)
3397          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3398          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3399         with_ldap_support=yes
3400         ;;
3401         *)
3402         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3403         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3404                 if test x"$with_ldap_support" = x"yes"; then
3405                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3406                 else
3407                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3408                 fi
3409                 with_ldap_support=no
3410         fi
3411         ;;
3412   esac
3415 if test x"$with_ldap_support" != x"no"; then
3416   ac_save_LIBS=$LIBS
3418   ##################################################################
3419   # we might need the lber lib on some systems. To avoid link errors
3420   # this test must be before the libldap test
3421   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3423   ########################################################
3424   # If ber_sockbuf_add_io() is available we can add
3425   # SASL wrapping hooks
3426   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3428   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3429                  AC_TRY_COMPILE([#include <ldap.h>],
3430                                 [int val = LDAP_OPT_SOCKBUF;],
3431                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3432                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3434   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3435           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3436         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3437   fi
3439   #######################################################
3440   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3441   # ldap logging and print it out in the samba logs
3442   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3443                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3444                  [AC_TRY_COMPILE([#include <lber.h>],
3445                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3446                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3447                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3449   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3450         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3451                   [Support for LDAP/LBER logging interception])
3452   fi
3454   ########################################################
3455   # now see if we can find the ldap libs in standard paths
3456   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3458   ########################################################
3459   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3460   # Check found in pam_ldap 145.
3461   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3463   LIBS="$LIBS $LDAP_LIBS"
3464   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3465     AC_TRY_COMPILE([
3466         #include <lber.h>
3467         #include <ldap.h>],
3468         [ldap_set_rebind_proc(0, 0, 0);],
3469         [smb_ldap_cv_ldap_set_rebind_proc=3],
3470         [smb_ldap_cv_ldap_set_rebind_proc=2]
3471     )
3472   ])
3474   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3476   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3478   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3479     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3480     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3481     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3482     default_shared_modules="$default_shared_modules";
3483     SMBLDAP="lib/smbldap.o"
3484     SMBLDAPUTIL="lib/smbldap_util.o"
3485     with_ldap_support=yes
3486     AC_MSG_CHECKING(whether LDAP support is used)
3487     AC_MSG_RESULT(yes)
3488   else
3489     if test x"$with_ldap_support" = x"yes"; then
3490         AC_MSG_ERROR(libldap is needed for LDAP support)
3491     else
3492         AC_MSG_WARN(libldap is needed for LDAP support)
3493     fi
3495     LDAP_LIBS=""
3496     with_ldap_support=no
3497   fi
3498   LIBS=$ac_save_LIBS
3502 #################################################
3503 # active directory support
3505 with_ads_support=auto
3506 AC_MSG_CHECKING([for Active Directory and krb5 support])
3508 AC_ARG_WITH(ads,
3509 [AS_HELP_STRING([--with-ads], [Active Directory support (default=auto)])],
3510 [ case "$withval" in
3511     yes|no)
3512         with_ads_support="$withval"
3513         ;;
3514   esac ])
3516 AC_MSG_RESULT($with_ads_support)
3518 FOUND_KRB5=no
3519 KRB5_LIBS=""
3521 if test x"$with_ldap_support" != x"yes"; then
3523     if test x"$with_ads_support" = x"yes"; then
3524         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3525     elif test x"$with_ads_support" = x"auto"; then
3526         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3527         with_ads_support=no
3528     fi
3530 else
3532     # Check to see whether there is enough LDAP functionality to be able
3533     # to build AD support.
3535 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3536 case "$host_os" in
3537         *hpux*)
3538     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3540     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3541         if test x"$with_ads_support" = x"yes"; then
3542             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3543         elif test x"$with_ads_support" = x"auto"; then
3544             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3545             with_ads_support=no
3546         fi
3547     fi
3548     ;;
3549         *)
3550     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3552     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3553         if test x"$with_ads_support" = x"yes"; then
3554             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3555         elif test x"$with_ads_support" = x"auto"; then
3556             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3557             with_ads_support=no
3558         fi
3559     fi
3560     ;;
3561 esac
3564     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3566     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3567         if test x"$with_ads_support" = x"yes"; then
3568             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3569         elif test x"$with_ads_support" = x"auto"; then
3570             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3571             with_ads_support=no
3572         fi
3573     fi
3577 if test x"$with_ads_support" != x"no"; then
3579   # Do no harm to the values of CFLAGS and LIBS while testing for
3580   # Kerberos support.
3582   if test x$FOUND_KRB5 = x"no"; then
3583     #################################################
3584     # check for location of Kerberos 5 install
3585     AC_MSG_CHECKING(for kerberos 5 install path)
3586     AC_ARG_WITH(krb5,
3587     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3588     [ case "$withval" in
3589       no)
3590         AC_MSG_RESULT(no krb5-path given)
3591         ;;
3592       yes)
3593         AC_MSG_RESULT(/usr)
3594         FOUND_KRB5=yes
3595         ;;
3596       *)
3597         AC_MSG_RESULT($withval)
3598         KRB5_CFLAGS="-I$withval/include"
3599         KRB5_CPPFLAGS="-I$withval/include"
3600         KRB5_LDFLAGS="-L$withval/lib"
3601         FOUND_KRB5=yes
3602         if test -x "$withval/bin/krb5-config"; then
3603                 KRB5CONFIG=$withval/bin/krb5-config
3604         fi
3605         ;;
3606       esac ],
3607       AC_MSG_RESULT(no krb5-path given)
3608     )
3609   fi
3611   #################################################
3612   # check for krb5-config from recent MIT and Heimdal kerberos 5
3613   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3614   AC_MSG_CHECKING(for working krb5-config)
3615   if test -x "$KRB5CONFIG" && $KRB5CONFIG --libs gssapi > /dev/null ; then
3616     ac_save_CFLAGS=$CFLAGS
3617     CFLAGS="";export CFLAGS
3618     ac_save_LDFLAGS=$LDFLAGS
3619     LDFLAGS="";export LDFLAGS
3620     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3621     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3622     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3623     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3624     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3625     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3626     FOUND_KRB5=yes
3627     AC_MSG_RESULT(yes)
3628   else
3629     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3630   fi
3632   if test x$FOUND_KRB5 = x"no"; then
3633     #################################################
3634     # see if this box has the SuSE location for the heimdal krb implementation
3635     AC_MSG_CHECKING(for /usr/include/heimdal)
3636     if test -d /usr/include/heimdal; then
3637       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3638           KRB5_CFLAGS="-I/usr/include/heimdal"
3639           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3640           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3641           FOUND_KRB5=yes
3642           AC_MSG_RESULT(yes)
3643       else
3644           KRB5_CFLAGS="-I/usr/include/heimdal"
3645           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3646           FOUND_KRB5=yes
3647           AC_MSG_RESULT(yes)
3648       fi
3649     else
3650       AC_MSG_RESULT(no)
3651     fi
3652   fi
3654   if test x$FOUND_KRB5 = x"no"; then
3655     #################################################
3656     # see if this box has the RedHat location for kerberos
3657     AC_MSG_CHECKING(for /usr/kerberos)
3658     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3659       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3660       KRB5_CFLAGS="-I/usr/kerberos/include"
3661       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3662       FOUND_KRB5=yes
3663       AC_MSG_RESULT(yes)
3664     else
3665       AC_MSG_RESULT(no)
3666     fi
3667   fi
3669   if test x$FOUND_KRB5 = x"no"; then
3670     #################################################
3671     # see if this box has the OpenBSD location for heimdal krb5
3672     AC_MSG_CHECKING(for /usr/include/kerberosV)
3673     if test -d /usr/include/kerberosV; then
3674       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3675       KRB5_LIBS="-lcrypto"
3676       FOUND_KRB5=yes
3677       AC_MSG_RESULT(yes)
3678     else
3679       AC_MSG_RESULT(no)
3680     fi
3681   fi
3683   ac_save_CFLAGS=$CFLAGS
3684   ac_save_CPPFLAGS=$CPPFLAGS
3685   ac_save_LDFLAGS=$LDFLAGS
3687   # remove needless evil rpath stuff as early as possible:
3688   LIB_REMOVE_USR_LIB(KRB5_LIBS)
3689   LIB_REMOVE_USR_LIB(KRB5_LDFLAGS)
3690   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3691   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3692   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3694   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3696   # now check for krb5.h. Some systems have the libraries without the headers!
3697   # note that this check is done here to allow for different kerberos
3698   # include paths
3699   AC_CHECK_HEADERS(krb5.h)
3701   if test x"$ac_cv_header_krb5_h" = x"no"; then
3703     # Give a warning if AD support was not explicitly requested,
3704     # i.e with_ads_support = auto, otherwise die with an error.
3706     if test x"$with_ads_support" = x"yes"; then
3707       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3708     else
3709       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3710     fi
3712     # Turn off AD support and restore CFLAGS and LIBS variables
3714     with_ads_support="no"
3716     CFLAGS=$ac_save_CFLAGS
3717     CPPFLAGS=$ac_save_CPPFLAGS
3718     LDFLAGS=$ac_save_LDFLAGS
3719   fi
3720   AC_CHECK_HEADERS([krb5/locate_plugin.h], [], [],
3721 [[#ifdef HAVE_KRB5_H
3722  #include <krb5.h>
3723  #endif
3726   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
3727         WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
3728         if test x"$BLDSHARED" = x"true" ; then
3729                 EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
3730         fi
3731   fi
3733   # check for new heimdal KRB5_DEPRECATED handling
3735   AC_CACHE_CHECK([for KRB5_DEPRECATED define taking an identifier],
3736                 samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER,[
3737     AC_TRY_COMPILE(
3738       [#define KRB5_DEPRECATED 1
3739       #include <krb5.h>],
3740       [],
3741       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=yes,
3742       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=no)])
3744   if test x"$samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER" = x"yes"; then
3745     AC_DEFINE(HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER, 1,
3746                [Whether to use deprecated krb5 interfaces])
3747   fi
3750 # Now we have determined whether we really want ADS support
3751 use_ads=no
3752 if test x"$with_ads_support" != x"no"; then
3753   use_ads=yes
3754   have_gssapi=no
3755   ac_save_LIBS=$LIBS
3757   # now check for gssapi headers.  This is also done here to allow for
3758   # different kerberos include paths
3759   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h gssapi/gssapi_ext.h com_err.h)
3761   ##################################################################
3762   # we might need the k5crypto and com_err libraries on some systems
3763   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3764   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3766   # Heimdal checks.
3767   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3768   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3769   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3771   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3772   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3774   ########################################################
3775   # now see if we can find the krb5 libs in standard paths
3776   # or as specified above
3777   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3778   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3780   ########################################################
3781   # now see if we can find the gssapi libs in standard paths
3782   if test x"$have_gssapi" != x"yes"; then
3783      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3784      AC_CHECK_FUNC_EXT(gss_wrap_iov, $KRB5_LIBS)
3785   fi
3787   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3788   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3789   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3790   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3791   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3792   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3793   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3794   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3795   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3796   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3797   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3798   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3799   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3800   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3801   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3802   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3803   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3804   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3805   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3806   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3807   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3808   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3809   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3810   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3811   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3812   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3813   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3814   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3815   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3816   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3817   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3818   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3819   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3820   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3821   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3822   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3823   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3824   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3825   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3826   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3827   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3828   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3829   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3830   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_alloc, $KRB5_LIBS)
3831   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_set_impersonate, $KRB5_LIBS)
3832   AC_CHECK_FUNC_EXT(krb5_get_creds, $KRB5_LIBS)
3833   AC_CHECK_FUNC_EXT(krb5_get_credentials_for_user, $KRB5_LIBS)
3834   AC_CHECK_FUNC_EXT(krb5_get_host_realm, $KRB5_LIBS)
3835   AC_CHECK_FUNC_EXT(krb5_free_host_realm, $KRB5_LIBS)
3837   # MIT krb5 1.8 does not expose this call (yet)
3838   AC_CHECK_DECLS(krb5_get_credentials_for_user, [], [], [#include <krb5.h>])
3840   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3841   # but does have the symbol
3842   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3844   LIBS="$KRB5_LIBS $LIBS"
3846   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3847         smb_krb5_cv_ticket_has_keyinfo,
3848         [
3849             AC_TRY_COMPILE(
3850             [
3851                 #include <krb5.h>
3852             ],
3853             [
3854                 krb5_ticket ticket;
3855                 krb5_kvno kvno;
3856                 krb5_enctype enctype;
3858                 enctype = ticket.enc_part.enctype;
3859                 kvno = ticket.enc_part.kvno;
3860             ],
3861             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3862             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3863         ])
3865   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3866         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3867             [Whether the krb5_ticket structure contains the kvno and enctype])
3868   fi
3870   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3871           smb_krb5_cv_creds_opt_free_context,
3872           [
3873                 AC_TRY_COMPILE([
3874                     #include <krb5.h>],
3875                     [
3876                         krb5_context ctx;
3877                         krb5_get_init_creds_opt *opt = NULL;
3878                         krb5_get_init_creds_opt_free(ctx, opt);
3879                     ],
3880                     [smb_krb5_cv_creds_opt_free_context=yes],
3881                     [smb_krb5_cv_creds_opt_free_context=no]
3882                 )
3883           ])
3885   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3886         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3887             [Whether krb5_get_init_creds_opt_free takes a context argument])
3888   fi
3890   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3891     AC_TRY_COMPILE([
3892         #include <krb5.h>],
3893         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3894         [smb_krb5_cv_verify_checksum=7],
3895         [smb_krb5_cv_verify_checksum=6],
3896     )
3897   ])
3898   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3900   AC_CACHE_CHECK([for checksum in krb5_checksum],
3901                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3902     AC_TRY_COMPILE([#include <krb5.h>],
3903       [krb5_checksum cksum; cksum.checksum.length = 0;],
3904       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3905       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3907   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3908     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3909                [Whether the krb5_checksum struct has a checksum property])
3910   fi
3912   AC_CACHE_CHECK([for etype in EncryptedData],
3913                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3914     AC_TRY_COMPILE([#include <krb5.h>],
3915       [EncryptedData edata; edata.etype = 0;],
3916       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3917       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3919   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3920     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3921                [Whether the EncryptedData struct has a etype property])
3922   fi
3924   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3925                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3926     AC_TRY_COMPILE([#include <krb5.h>],
3927       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3928       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3929       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3931   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3932     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3933                [Whether the krb5_ap_req struct has a ticket pointer])
3934   fi
3936   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3937                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3938     AC_TRY_COMPILE([#include <krb5.h>],
3939       [krb5_error err; err.e_data = NULL;],
3940       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3941       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3943   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3944     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3945                [Whether the krb5_error struct has a e_data pointer])
3946   fi
3948   AC_CACHE_CHECK([for krb5_crypto type],
3949                 samba_cv_HAVE_KRB5_CRYPTO,[
3950     AC_TRY_COMPILE([#include <krb5.h>],
3951       [krb5_crypto crypto;],
3952       samba_cv_HAVE_KRB5_CRYPTO=yes,
3953       samba_cv_HAVE_KRB5_CRYPTO=no)])
3955   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3956     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3957                [Whether the type krb5_crypto exists])
3958   fi
3960   AC_CACHE_CHECK([for krb5_encrypt_block type],
3961                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3962     AC_TRY_COMPILE([#include <krb5.h>],
3963       [krb5_encrypt_block block;],
3964       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3965       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3967   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3968     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3969                [Whether the type krb5_encrypt_block exists])
3970   fi
3972   AC_CACHE_CHECK([for addrtype in krb5_address],
3973                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3974     AC_TRY_COMPILE([#include <krb5.h>],
3975       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3976       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3977       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3979   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3980     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3981                [Whether the krb5_address struct has a addrtype property])
3982   fi
3984   AC_CACHE_CHECK([for addr_type in krb5_address],
3985                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3986     AC_TRY_COMPILE([#include <krb5.h>],
3987       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3988       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3989       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3991   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3992     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3993               [Whether the krb5_address struct has a addr_type property])
3994   fi
3996   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3997                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3998                  [AC_TRY_COMPILE([#include <krb5.h>],
3999     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
4000     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
4002   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
4003     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
4004               [Whether the krb5_ticket struct has a enc_part2 property])
4005   fi
4007   AC_CACHE_CHECK([for keyblock in krb5_creds],
4008                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
4009     AC_TRY_COMPILE([#include <krb5.h>],
4010       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
4011       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
4012       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
4014   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
4015     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
4016               [Whether the krb5_creds struct has a keyblock property])
4017   fi
4019   AC_CACHE_CHECK([for session in krb5_creds],
4020                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
4021     AC_TRY_COMPILE([#include <krb5.h>],
4022       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
4023       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
4024       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
4026   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
4027     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
4028               [Whether the krb5_creds struct has a session property])
4029   fi
4031   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
4032                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
4033     AC_TRY_COMPILE([#include <krb5.h>],
4034       [krb5_keyblock key; key.keyvalue.data = NULL;],
4035       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
4036       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
4038   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
4039     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
4040               [Whether the krb5_keyblock struct has a keyvalue property])
4041   fi
4043   found_arcfour_hmac=no
4044   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
4045                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
4046     AC_TRY_COMPILE([#include <krb5.h>],
4047       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
4048       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
4049       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
4050   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
4051                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
4052     AC_TRY_COMPILE([#include <krb5.h>],
4053       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
4054       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
4055       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
4056 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
4057 # w.r.t. arcfour and windows, so we must not enable it here
4058   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
4059           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
4060     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
4061               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type definition is available])
4062     found_arcfour_hmac=yes
4063   fi
4064   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC],
4065                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC,[
4066     AC_TRY_COMPILE([#include <krb5.h>],
4067       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC;],
4068       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=yes,
4069       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=no)])
4070   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC" = x"yes"; then
4071     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC,1,
4072               [Whether the ENCTYPE_ARCFOUR_HMAC key type definition is available])
4073     found_arcfour_hmac=yes
4074   fi
4076   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
4077                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
4078     AC_TRY_COMPILE([#include <krb5.h>],
4079       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
4080       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
4081       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
4083   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
4084     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
4085               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
4086   fi
4088   AC_CACHE_CHECK([for KV5M_KEYTAB],
4089                  samba_cv_HAVE_KV5M_KEYTAB,[
4090     AC_TRY_COMPILE([#include <krb5.h>],
4091       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
4092       samba_cv_HAVE_KV5M_KEYTAB=yes,
4093       samba_cv_HAVE_KV5M_KEYTAB=no)])
4095   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
4096       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
4097              [Whether the KV5M_KEYTAB option is available])
4098   fi
4100   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
4101                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
4102     AC_TRY_COMPILE([#include <krb5.h>],
4103       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
4104       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
4105       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
4107   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
4108     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
4109               [Whether KRB5_KU_OTHER_CKSUM is available])
4110   fi
4112   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
4113                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
4114     AC_TRY_COMPILE([#include <krb5.h>],
4115       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
4116       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
4117       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
4119   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
4120     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
4121               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
4122   fi
4124   AC_CACHE_CHECK([for the krb5_princ_component macro],
4125                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
4126     AC_TRY_LINK([#include <krb5.h>],
4127       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
4128       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
4129       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
4131   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
4132     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
4133                [Whether krb5_princ_component is available])
4134   fi
4136   AC_CACHE_CHECK([for key in krb5_keytab_entry],
4137                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
4138     AC_TRY_COMPILE([#include <krb5.h>],
4139       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
4140       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
4141       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
4143   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
4144     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
4145               [Whether krb5_keytab_entry has key member])
4146   fi
4148   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
4149                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
4150     AC_TRY_COMPILE([#include <krb5.h>],
4151       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
4152       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
4153       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
4155   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
4156     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
4157               [Whether krb5_keytab_entry has keyblock member])
4158   fi
4160   AC_CACHE_CHECK([for magic in krb5_address],
4161                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
4162     AC_TRY_COMPILE([#include <krb5.h>],
4163       [krb5_address addr; addr.magic = 0;],
4164       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
4165       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
4167   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
4168     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
4169               [Whether the krb5_address struct has a magic property])
4170   fi
4172   AC_CACHE_CHECK([for WRFILE: keytab support],
4173                 samba_cv_HAVE_WRFILE_KEYTAB,[
4174     AC_TRY_RUN([
4175 #include<krb5.h>
4176   main()
4177   {
4178     krb5_context context;
4179     krb5_keytab keytab;
4181     krb5_init_context(&context);
4182     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
4183   }],
4184   samba_cv_HAVE_WRFILE_KEYTAB=yes,
4185   samba_cv_HAVE_WRFILE_KEYTAB=no)])
4187   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
4188       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
4189                [Whether the WRFILE:-keytab is supported])
4190   fi
4192   AC_CACHE_CHECK([for krb5_realm type],
4193                 samba_cv_HAVE_KRB5_REALM_TYPE,[
4194     AC_TRY_COMPILE([#include <krb5.h>],
4195       [krb5_realm realm;],
4196       samba_cv_HAVE_KRB5_REALM_TYPE=yes,
4197       samba_cv_HAVE_KRB5_REALM_TYPE=no)])
4199   if test x"$samba_cv_HAVE_KRB5_REALM_TYPE" = x"yes"; then
4200     AC_DEFINE(HAVE_KRB5_REALM_TYPE,1,
4201                [Whether the type krb5_realm exists])
4202   fi
4204   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
4205                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
4206     AC_TRY_COMPILE([#include <krb5.h>],
4207     [
4208     krb5_context context;
4209     krb5_principal principal;
4210     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
4211     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
4212     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
4214   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
4215     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
4216               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
4217   fi
4219   AC_CACHE_CHECK([for krb5_addresses type],
4220                 samba_cv_HAVE_KRB5_ADDRESSES,[
4221     AC_TRY_COMPILE([#include <krb5.h>],
4222       [krb5_addresses addr;],
4223       samba_cv_HAVE_KRB5_ADDRESSES=yes,
4224       samba_cv_HAVE_KRB5_ADDRESSES=no)])
4226   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
4227     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
4228                [Whether the type krb5_addresses type exists])
4229   fi
4231   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
4232                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
4233     AC_TRY_COMPILE([#include <krb5.h>],
4234     [
4235     krb5_mk_error(0,0,0);],
4236     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
4237     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
4239   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
4240     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
4241               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
4242   fi
4244   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
4245     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
4246         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
4247         AC_TRY_RUN_STRICT([
4248                 #include <stdlib.h>
4249                 #include <krb5.h>
4250                 int main(void) {
4251                         krb5_context context = NULL;
4252                         char *str = NULL;
4253                         krb5_enctype_to_string(context, 1, &str);
4254                         if (str) free (str); 
4255                         return 0;
4256                 }
4257                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4258                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
4259                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
4261     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4262       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4263                 [whether krb5_enctype_to_string takes krb5_context argument])
4264     fi
4266     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4267         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
4268         AC_TRY_RUN_STRICT([
4269                 #include <krb5.h>
4270                 int main(void) {
4271                         char buf[256];
4272                         krb5_enctype_to_string(1, buf, 256);
4273                         return 0;
4274                 }
4275                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4276                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
4277                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
4279     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
4280       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4281                 [whether krb5_enctype_to_string takes size_t argument])
4282     fi
4283   fi
4285   AC_CACHE_CHECK([for krb5_principal_get_realm],
4286                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4287     AC_TRY_LINK([#include <krb5.h>],
4288       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4289       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4290       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4292   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4293     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4294                [Whether the function krb5_principal_get_realm is defined])
4295   fi
4297   AC_CACHE_CHECK([for krb5_princ_realm],
4298                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4299     AC_TRY_LINK([#include <krb5.h>],
4300       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
4301       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
4302       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
4304   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
4305     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
4306                [Whether the macro krb5_princ_realm is defined])
4307   fi
4309   #
4310   #
4311   # Now the decisions whether we can support krb5
4312   #
4313   # NOTE: all tests should be done before this block!
4314   #
4315   #
4316   if test x"$found_arcfour_hmac" != x"yes"; then
4317     AC_MSG_WARN(arcfour-hmac-md5 encryption type not found in -lkrb5)
4318     use_ads=no
4319   fi
4321   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4322     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4323     use_ads=no
4324   fi
4326   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
4327           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
4328   then
4329     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4330     use_ads=no
4331   fi
4333   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4334           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4335   then
4336     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4337     use_ads=no
4338   fi
4340   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4341           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4342   then
4343     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4344     use_ads=no
4345   fi
4347   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
4348           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
4349   then
4350     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
4351     use_ads=no
4352   fi
4354   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
4356       # We only need the following functions if we can't get the enctype
4357       # and kvno out of the ticket directly (ie. on Heimdal).
4359       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
4360       then
4361         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
4362         use_ads=no
4363       fi
4365       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
4366       then
4367         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
4368         use_ads=no
4369       fi
4371   fi
4373   if test x"$use_ads" = x"yes"; then
4374     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4375     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4376     if test x"$have_gssapi" = x"yes"; then
4377       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
4378     fi
4379   else
4380     if test x"$with_ads_support" = x"yes"; then
4381         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4382     else
4383         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4384     fi
4385     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4386     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4387     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4388     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4389     KRB5_LIBS=""
4390     with_ads_support=no
4391   fi
4392   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4393   AC_MSG_RESULT([$use_ads])
4395 LIBS="$ac_save_LIBS"
4398 if test x"$use_ads" != xyes; then
4399         merged_build_possible=no
4402 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4403 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4406 ########################################################
4407 # Compile with DNS Updates support?
4409 with_dnsupdate_support=auto
4410 AC_MSG_CHECKING([whether to enable DNS Updates support])
4412 AC_ARG_WITH(dnsupdate,
4413 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default=auto)])],
4414 [ case "$withval" in
4415     yes|no)
4416         with_dnsupdate_support=$withval
4417         ;;
4418   esac ])
4420 AC_MSG_RESULT($with_dnsupdate_support)
4422 if test x"$with_dnsupdate_support" != x"no"; then
4424   ################################################################
4425   # first test for AD / GSSAPI support being enabled
4426         if test x"$have_gssapi" != xyes ; then
4427                 if test x"$with_dnsupdate_support" = x"yes" ; then
4428                         AC_MSG_ERROR(DNS Updates support only possible with AD and GSSAPI support)
4429                 else
4430                         AC_MSG_NOTICE(DNS Updates support only possible with AD and GSSAPI support)
4431                         with_dnsupdate_support=no
4432                 fi
4433         fi
4434   ##################################################################
4435   # then test for uuid.h (necessary to generate unique DNS keynames
4436   # (uuid.h is required for this test)
4437         AC_CHECK_HEADERS(uuid/uuid.h)
4439         
4440         if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4441                 if test x"$with_dnsupdate_support" = x"yes"; then
4442                         AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4443                 else
4444                         AC_MSG_NOTICE(uuid.h is needed to enable DNS Updates support)
4445                 fi
4446                 with_dnsupdate_support=no
4447         fi
4450 if test x"$with_dnsupdate_support" != x"no"; then
4452   ########################################################
4453   # Now see if we can find the uuid libs in standard paths
4454   # On some systems, the uuid API is in libc, so we have to
4455   # be careful not to insert a spurious -luuid.
4457   UUID_LIBS=""
4458   AC_LIBTESTFUNC(uuid, uuid_generate,
4459           [
4460             case " $LIBS " in
4461                 *\ -luuid\ *)
4462                 UUID_LIBS="-luuid"
4463                 SMB_REMOVE_LIB(uuid)
4464                 ;;
4465             esac
4467             with_dnsupdate_support=yes
4468             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4469         ],
4470         [
4471             if test x"$with_dnsupdate_support" = x"yes"; then
4472                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4473             else
4474                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4475             fi
4476             with_dnsupdate_support=no
4477         ])
4479   # finally print out the result:
4480 AC_MSG_CHECKING(whether DNS Updates support is used)
4481 AC_MSG_RESULT([$with_dnsupdate_support])
4484 #################################################
4485 # check for automount support
4486 AC_MSG_CHECKING(whether to use automount)
4487 AC_ARG_WITH(automount,
4488 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4489 [ case "$withval" in
4490   yes)
4491     AC_MSG_RESULT(yes)
4492     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4493     ;;
4494   *)
4495     AC_MSG_RESULT(no)
4496     ;;
4497   esac ],
4498   AC_MSG_RESULT(no)
4501 #################################################
4502 # Check for a PAM clear-text auth, accounts, password
4503 # and session support. Most PAM implementations keep their
4504 # headers in /usr/include/security. Darwin keeps its in
4505 # /usr/include/pam.
4507 with_pam_for_crypt=no
4508 try_pam=auto
4509 AC_MSG_CHECKING(whether to try PAM support)
4510 AC_ARG_WITH(pam,
4511 [AS_HELP_STRING([--with-pam], [Include PAM support (default=auto)])],
4512 [ case "$withval" in
4513   yes|no|auto)
4514     try_pam=$withval
4515     ;;
4516   esac
4518 AC_MSG_RESULT([$try_pam])
4520 use_pam=no
4521 create_pam_modules=no
4522 if test x"${try_pam}" != x"no";then
4523         use_pam=yes
4524         create_pam_modules=yes
4526         # Most systems have PAM headers in /usr/include/security, but Darwin
4527         # has them in /usr/include/pam.
4528         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4529         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4530                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4531                 if test x"${try_pam}" = x"yes";then
4532                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4533                 fi
4534                 use_pam=no
4535                 create_pam_modules=no
4536         fi
4538         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4539         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4540                 if test x"${try_pam}" = x"yes";then
4541                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4542                 fi
4543                 use_pam=no
4544                 create_pam_modules=no
4545         fi
4547         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4548                 #if HAVE_SECURITY_PAM_APPL_H
4549                 #include <security/pam_appl.h>
4550                 #endif
4551                 #if HAVE_PAM_PAM_APPL_H
4552                 #include <pam/pam_appl.h>
4553                 #endif
4554         ]])
4555         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4556                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4557                 if test x"${try_pam}" = x"yes";then
4558                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4559        fi
4560                 create_pam_modules=no
4561     fi
4563         if test x"$use_pam" = x"yes"; then
4564     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4565                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4566                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4567     with_pam_for_crypt=yes
4569                 if test x"$create_pam_modules" = x"yes"; then
4570                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4571                         # this checks are optional,
4572                         # we don't care about the results here
4573                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4574                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4575                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4576                 else
4577                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4578                 fi
4579         fi
4580         AC_MSG_CHECKING(whether to use PAM support)
4581         AC_MSG_RESULT([$use_pam])
4583         AC_MSG_CHECKING(whether to have PAM MODULES support)
4584         AC_MSG_RESULT([$create_pam_modules])
4586         AC_TRY_COMPILE([
4587                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4588                 #include <security/pam_appl.h>
4589                 #elif defined(HAVE_PAM_PAM_APPL_H)
4590                 #include <pam/pam_appl.h>
4591                 #endif],[
4592                 pam_set_item(0, PAM_RHOST, 0);
4593                 ],
4594                 AC_DEFINE(HAVE_PAM_RHOST, 1,
4595                           [Define to 1 if PAM_RHOST is available]),[])
4597         AC_TRY_COMPILE([
4598                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4599                 #include <security/pam_appl.h>
4600                 #elif defined(HAVE_PAM_PAM_APPL_H)
4601                 #include <pam/pam_appl.h>
4602                 #endif],[
4603                 pam_set_item(0, PAM_TTY, 0);
4604                 ],
4605                 AC_DEFINE(HAVE_PAM_TTY, 1,
4606                           [Define to 1 if PAM_TTY is available]),[])
4608 fi # try_pam != no
4610 #################################################
4611 # check for PAM_RADIO_TYPE
4612 AC_TRY_COMPILE([
4613 #if (!defined(LINUX))
4615 #define PAM_EXTERN extern
4616 #if defined(HAVE_SECURITY_PAM_APPL_H)
4617 #include <security/pam_appl.h>
4618 #elif defined(HAVE_PAM_PAM_APPL_H)
4619 #include <pam/pam_appl.h>
4620 #endif
4622 #endif
4624 #if defined(HAVE_SECURITY_PAM_MODULES_H)
4625 #include <security/pam_modules.h>
4626 #elif defined(HAVE_PAM_PAM_MODULES_H)
4627 #include <pam/pam_modules.h>
4628 #endif
4630 #if defined(HAVE_SECURITY__PAM_MACROS_H)
4631 #include <security/_pam_macros.h>
4632 #elif defined(HAVE_PAM__PAM_MACROS_H)
4633 #include <pam/_pam_macros.h>
4634 #endif
4636 #ifdef HAVE_SECURITY_PAM_EXT_H
4637 #include <security/pam_ext.h>
4638 #endif
4640 [int i; i = PAM_RADIO_TYPE; ],
4641 AC_DEFINE(HAVE_PAM_RADIO_TYPE, 1, [Define to 1 if PAM_RADIO_TYPE is available]),[])
4643 #################################################
4644 # check for pam_smbpass support
4645 PAM_MODULES=""
4646 INSTALL_PAM_MODULES=""
4647 UNINSTALL_PAM_MODULES=""
4649 try_pam_smbpass=auto
4650 AC_MSG_CHECKING(whether to use pam_smbpass)
4651 AC_ARG_WITH(pam_smbpass,
4652 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=auto)])],
4653 [ case "$withval" in
4654   yes|no|auto)
4655     try_pam_smbpass=$withval
4656   ;;
4657   *)
4658     AC_MSG_ERROR([valid options are yes,no,auto])
4659   ;;
4660   esac
4663 if test x"${try_pam_smbpass}" = xno ; then
4664         use_pam_smbpass=no
4665 else
4666         use_pam_smbpass=yes
4667         # Conditions under which pam_smbpass can't be built.
4668         if test x"$BLDSHARED" != xtrue ; then
4669                 if test x"${try_pam_smbpass}" = xyes ; then
4670                         AC_MSG_ERROR([No support for shared modules])
4671                 fi
4672                 use_pam_smbpass=no
4673         elif test x"$create_pam_modules" != xyes ; then
4674                 if test x"${try_pam_smbpass}" = xyes ; then
4675                         AC_MSG_ERROR([No support for PAM MODULES])
4676                 fi
4677                 use_pam_smbpass=no
4678         fi
4680         if test x"${use_pam_smbpass}" = xyes ; then 
4681                 PAM_MODULES="pam_smbpass"
4682                 INSTALL_PAM_MODULES="installpammodules"
4683                 UNINSTALL_PAM_MODULES="uninstallpammodules"
4684         fi
4686 AC_MSG_RESULT([$use_pam_smbpass])
4690 ## moved after the check for -lcrypt in order to
4691 ## ensure that the necessary libraries are included
4692 ## check checking for truncated salt.  Wrapped by the
4693 ## $with_pam_for_crypt variable as above   --jerry
4695 if test $with_pam_for_crypt = no; then
4696 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4697 crypt_LIBS="$LIBS"
4698 LIBS="$AUTH_LIBS $LIBS"
4699 AC_TRY_RUN([#include "${srcdir-.}/../tests/crypttest.c"],
4700         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4701 LIBS="$crypt_LIBS"])
4702 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4703         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4707 #################################################
4708 # check for a NISPLUS_HOME support
4709 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4710 AC_ARG_WITH(nisplus-home,
4711 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4712 [ case "$withval" in
4713   yes)
4714     AC_MSG_RESULT(yes)
4715     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4716     ;;
4717   *)
4718     AC_MSG_RESULT(no)
4719     ;;
4720   esac ],
4721   AC_MSG_RESULT(no)
4724 #################################################
4725 # check for syslog logging
4726 AC_MSG_CHECKING(whether to use syslog logging)
4727 AC_ARG_WITH(syslog,
4728 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4729 [ case "$withval" in
4730   yes)
4731     AC_MSG_RESULT(yes)
4732     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4733     ;;
4734   *)
4735     AC_MSG_RESULT(no)
4736     ;;
4737   esac ],
4738   AC_MSG_RESULT(no)
4741 #################################################
4742 # check for custom syslog facility
4743 AC_MSG_CHECKING(whether to use a custom syslog facility)
4744 AC_ARG_WITH(syslog-facility,
4745 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4747   if test "$withval" = "no" ; then
4748     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4749   else
4750      if test "$withval" != "yes" ; then
4751         syslog_facility="$withval"
4752         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4753      fi
4754   fi
4757 #################################################
4758 # check for experimental disk-quotas support
4760 samba_cv_WITH_QUOTAS=auto
4761 samba_cv_TRY_QUOTAS=no
4762 samba_cv_RUN_QUOTA_TESTS=auto
4763 samba_cv_WITH_SYS_QUOTAS=auto
4764 samba_cv_TRY_SYS_QUOTAS=auto
4765 samba_cv_SYSQUOTA_FOUND=no
4767 AC_MSG_CHECKING(whether to try disk-quotas support)
4768 AC_ARG_WITH(quotas,
4769 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4770 [ case "$withval" in
4771   yes)
4772     AC_MSG_RESULT(yes)
4773     samba_cv_WITH_QUOTAS=yes
4774     samba_cv_TRY_QUOTAS=yes
4775     samba_cv_RUN_QUOTA_TESTS=yes
4776     #set sys quotas to auto in this case
4777     samba_cv_TRY_SYS_QUOTAS=auto
4778     ;;
4779   auto)
4780     AC_MSG_RESULT(auto)
4781     samba_cv_WITH_QUOTAS=auto
4782     samba_cv_TRY_QUOTAS=auto
4783     samba_cv_RUN_QUOTA_TESTS=auto
4784     #set sys quotas to auto in this case
4785     samba_cv_TRY_SYS_QUOTAS=auto
4786     ;;
4787   no)
4788     AC_MSG_RESULT(no)
4789     samba_cv_WITH_QUOTAS=no
4790     samba_cv_TRY_QUOTAS=no
4791     samba_cv_RUN_QUOTA_TESTS=no
4792     ;;
4793   *)
4794     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4795     ;;
4796   esac ],
4797   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4800 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4801 AC_ARG_WITH(sys-quotas,
4802 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4803 [ case "$withval" in
4804   yes)
4805     AC_MSG_RESULT(yes)
4806     samba_cv_WITH_SYS_QUOTAS=yes
4807     samba_cv_TRY_SYS_QUOTAS=yes
4808     samba_cv_RUN_QUOTA_TESTS=yes
4809     ;;
4810   auto)
4811     AC_MSG_RESULT(auto)
4812     samba_cv_WITH_SYS_QUOTAS=auto
4813     samba_cv_TRY_SYS_QUOTAS=auto
4814     samba_cv_RUN_QUOTA_TESTS=auto
4815     ;;
4816   no)
4817     AC_MSG_RESULT(no)
4818     samba_cv_WITH_SYS_QUOTAS=no
4819     samba_cv_TRY_SYS_QUOTAS=no
4820     ;;
4821   *)
4822     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4823     ;;
4824   esac ],
4825   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4828 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4829 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4830   case "$host_os" in
4831         *linux*)
4832             AC_MSG_RESULT(yes)
4833             samba_cv_TRY_SYS_QUOTAS=yes
4834             samba_cv_RUN_QUOTA_TESTS=yes
4835             ;;
4836         *)
4837             AC_MSG_RESULT(no)
4838             samba_cv_TRY_SYS_QUOTAS=no
4839             ;;
4840   esac
4843 #############################################
4844 # only check for quota stuff if --with-quotas
4845 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4847 case "$host_os" in
4848         # on linux we didn't need to test we have builtin support
4849         *linux*)
4850             samba_cv_SYSQUOTA_FOUND=yes
4851             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4852             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4853             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4854             AC_MSG_RESULT(yes)
4856             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4857             samba_cv_found_xfs_header=yes
4858             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4859             AC_MSG_RESULT(yes)
4860             ;;
4861         *solaris*)
4862             # need to set this define when using static linking (BUG 1473)
4863             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4864             ;;
4865         *)
4866             ;;
4867 esac
4869 # some broken header files need this
4870 AC_CHECK_HEADER(asm/types.h,[
4871             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4872             AC_ADD_INCLUDE(<asm/types.h>)
4873             ])
4875 # For quotas on Veritas VxFS filesystems
4876 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4878 # For quotas on Linux XFS filesystems
4879 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4881 # For sys/quota.h and linux/quota.h
4882 AC_CHECK_HEADERS(sys/quota.h)
4884 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4885 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4886 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4887 AC_TRY_COMPILE([
4888 #include "confdefs.h"
4889 #ifdef HAVE_SYS_TYPES_H
4890 #include <sys/types.h>
4891 #endif
4892 #ifdef HAVE_ASM_TYPES_H
4893 #include <asm/types.h>
4894 #endif
4895 #include <sys/quota.h>
4896 ],[int i = Q_XGETQUOTA;],
4897 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4898 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4899         samba_cv_found_xfs_header=yes
4903 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4904 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4905 AC_TRY_COMPILE([
4906 #include "confdefs.h"
4907 #ifdef HAVE_SYS_QUOTA_H
4908 #include <sys/quota.h>
4909 #endif
4911 struct dqblk D;
4912 D.dqb_fsoftlimit = 0;],
4913 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4914 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4915         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4918 ##################
4919 # look for a working quota system
4921 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4922 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4923 AC_TRY_RUN_STRICT([
4924 #define HAVE_QUOTACTL_4A 1
4925 #define AUTOCONF_TEST 1
4926 #include "confdefs.h"
4927 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4928            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4929 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4930     samba_cv_SYSQUOTA_FOUND=yes;
4931     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4932     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4936 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4937 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4938 AC_TRY_RUN_STRICT([
4939 #define HAVE_QUOTACTL_4B 1
4940 #define AUTOCONF_TEST 1
4941 #include "confdefs.h"
4942 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4943            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4944 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4945     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4946     samba_cv_SYSQUOTA_FOUND=yes;
4947     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4948     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4952 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4953 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4954 AC_TRY_RUN_STRICT([
4955 #define HAVE_QUOTACTL_3 1
4956 #define AUTOCONF_TEST 1
4957 #include "confdefs.h"
4958 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4959            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4960 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4961     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4962     samba_cv_SYSQUOTA_FOUND=yes;
4963     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4964     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4968 #################################################
4969 # check for mntent.h and struct mntent
4970 AC_CHECK_HEADERS(mntent.h)
4971 #################################################
4972 # check for setmntent,getmntent,endmntent
4973 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4975 #################################################
4976 # check for devnm.h and struct mntent
4977 AC_CHECK_HEADERS(devnm.h)
4978 #################################################
4979 # check for devnm
4980 AC_CHECK_FUNCS(devnm)
4982 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4983     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4984         # if --with-sys-quotas=yes then build it
4985         # you have can use the get/set quota command smb.conf
4986         # options then
4987         samba_cv_SYSQUOTA_FOUND=auto
4988     fi
4989     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4990         # if --with-sys-quotas=yes then build it
4991         # you have can use the get/set quota command smb.conf
4992         # options then
4993         samba_cv_TRY_SYS_QUOTAS=auto
4994     fi
4997 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4998 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4999 SAVE_CPPFLAGS="$CPPFLAGS"
5000 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5001 AC_TRY_COMPILE([
5002 #include "confdefs.h"
5003 #define NO_PROTO_H 1
5004 #define NO_CONFIG_H 1
5005 #define HAVE_SYS_QUOTAS 1
5006 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
5007 #include "${srcdir-.}/lib/sysquotas.c"
5008 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
5009 CPPFLAGS="$SAVE_CPPFLAGS"
5011 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
5012 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
5013     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
5014         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
5015         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
5016         samba_cv_WE_USE_SYS_QUOTAS=yes
5017         AC_MSG_RESULT(yes)
5018     else
5019         AC_MSG_RESULT(no)
5020     fi
5024 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
5025 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
5026 SAVE_CPPFLAGS="$CPPFLAGS"
5027 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5028 AC_TRY_COMPILE([
5029 #include "confdefs.h"
5030 #define NO_PROTO_H 1
5031 #define NO_CONFIG_H 1
5032 #define HAVE_SYS_QUOTAS 1
5033 #define HAVE_XFS_QUOTAS 1
5034 #include "${srcdir-.}/lib/sysquotas_xfs.c"
5035 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
5036 CPPFLAGS="$SAVE_CPPFLAGS"
5038 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
5039     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
5040         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
5041     fi
5045 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
5046 SAVE_CPPFLAGS="$CPPFLAGS"
5047 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5048 AC_TRY_COMPILE([
5049 #include "confdefs.h"
5050 #define NO_PROTO_H 1
5051 #define NO_CONFIG_H 1
5052 #include "${srcdir-.}/smbd/quotas.c"
5053 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
5054 CPPFLAGS="$SAVE_CPPFLAGS"
5056 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
5057 AC_MSG_CHECKING(whether to use the old quota support)
5058     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
5059       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
5060         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
5061         AC_MSG_RESULT(yes)
5062       else
5063         AC_MSG_RESULT(no)
5064       fi
5065     else
5066       AC_MSG_RESULT(no)
5067     fi
5070 ####################
5071 # End of quota check samba_cv_RUN_QUOTA_TESTS
5074 #################################################
5075 # check for experimental utmp accounting
5077 AC_MSG_CHECKING(whether to support utmp accounting)
5078 WITH_UTMP=yes
5079 AC_ARG_WITH(utmp,
5080 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
5081 [ case "$withval" in
5082   no)
5083                 WITH_UTMP=no
5084                 ;;
5085   *)
5086                 WITH_UTMP=yes
5087                 ;;
5088   esac ],
5091 # utmp requires utmp.h
5092 # Note similar check earlier, when checking utmp details.
5094 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
5095         utmp_no_reason=", no utmp.h on $host_os"
5096         WITH_UTMP=no
5099 # Display test results
5101 if test x"$WITH_UTMP" = x"yes"; then
5102         AC_MSG_RESULT(yes)
5103         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
5104 else
5105         AC_MSG_RESULT(no$utmp_no_reason)
5109 #################################################
5110 # these tests are taken from the GNU fileutils package
5111 AC_CHECKING(how to get filesystem space usage)
5112 space=no
5114 # Test for statvfs64.
5115 if test $space = no; then
5116   # SVR4
5117   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
5118   [AC_TRY_RUN([
5119 #if defined(HAVE_UNISTD_H)
5120 #include <unistd.h>
5121 #endif
5122 #include <sys/types.h>
5123 #include <sys/statvfs.h>
5124   main ()
5125   {
5126     struct statvfs64 fsd;
5127     exit (statvfs64 (".", &fsd));
5128   }],
5129   fu_cv_sys_stat_statvfs64=yes,
5130   fu_cv_sys_stat_statvfs64=no,
5131   fu_cv_sys_stat_statvfs64=cross)])
5132   if test $fu_cv_sys_stat_statvfs64 = yes; then
5133     space=yes
5134     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
5135   fi
5138 # Perform only the link test since it seems there are no variants of the
5139 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
5140 # because that got a false positive on SCO OSR5.  Adding the declaration
5141 # of a `struct statvfs' causes this test to fail (as it should) on such
5142 # systems.  That system is reported to work fine with STAT_STATFS4 which
5143 # is what it gets when this test fails.
5144 if test $space = no; then
5145   # SVR4
5146   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
5147                  [AC_TRY_LINK([#include <sys/types.h>
5148 #include <sys/statvfs.h>],
5149                               [struct statvfs fsd; statvfs (0, &fsd);],
5150                               fu_cv_sys_stat_statvfs=yes,
5151                               fu_cv_sys_stat_statvfs=no)])
5152   if test $fu_cv_sys_stat_statvfs = yes; then
5153     space=yes
5154     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
5155   fi
5158 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
5159 # This is not the case on ancient Linux systems.
5161 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
5162     AC_TRY_COMPILE([#include <sys/types.h>
5163 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
5164         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
5165 if test x"$samba_cv_fsid_int" = x"yes"; then
5166     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
5169 # fsusage.c assumes that statvfs has an f_frsize entry. Some weird
5170 # systems use f_bsize.
5171 AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [
5172     AC_TRY_COMPILE([#include <sys/types.h>
5173 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0],
5174         samba_cv_frsize=yes,samba_cv_frsize=no)])
5175 if test x"$samba_cv_frsize" = x"yes"; then
5176     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
5179 # Some systems use f_flag in struct statvfs while others use f_flags
5180 AC_CACHE_CHECK([that statvfs.statvfs_f_flag works],samba_cv_statvfs_f_flag, [
5181     AC_TRY_COMPILE([#include <sys/types.h>
5182 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flag = 0],
5183         samba_cv_statvfs_f_flag=yes,samba_cv_statvfs_f_flag=no)])
5184 if test x"$samba_cv_statvfs_f_flag" = x"yes"; then
5185     AC_DEFINE(HAVE_STATVFS_F_FLAG, 1, [Whether statvfs.f_flag exists])
5188 AC_CACHE_CHECK([that statvfs.statvfs_f_flags works],samba_cv_statvfs_f_flags, [
5189     AC_TRY_COMPILE([#include <sys/types.h>
5190 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flags = 0],
5191         samba_cv_statvfs_f_flags=yes,samba_cv_statvfs_f_flags=no)])
5192 if test x"$samba_cv_statvfs_f_flags" = x"yes"; then
5193     AC_DEFINE(HAVE_STATVFS_F_FLAGS, 1, [Whether statvfs.f_flags exists])
5196 if test $space = no; then
5197   # DEC Alpha running OSF/1
5198   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
5199   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
5200   [AC_TRY_RUN([
5201 #include <sys/param.h>
5202 #include <sys/types.h>
5203 #include <sys/mount.h>
5204   main ()
5205   {
5206     struct statfs fsd;
5207     fsd.f_fsize = 0;
5208     exit (statfs (".", &fsd, sizeof (struct statfs)));
5209   }],
5210   fu_cv_sys_stat_statfs3_osf1=yes,
5211   fu_cv_sys_stat_statfs3_osf1=no,
5212   fu_cv_sys_stat_statfs3_osf1=no)])
5213   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5214   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5215     space=yes
5216     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5217   fi
5220 if test $space = no; then
5221 # AIX
5222   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5223 member (AIX, 4.3BSD)])
5224   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5225   [AC_TRY_RUN([
5226 #ifdef HAVE_SYS_PARAM_H
5227 #include <sys/param.h>
5228 #endif
5229 #ifdef HAVE_SYS_MOUNT_H
5230 #include <sys/mount.h>
5231 #endif
5232 #ifdef HAVE_SYS_VFS_H
5233 #include <sys/vfs.h>
5234 #endif
5235   main ()
5236   {
5237   struct statfs fsd;
5238   fsd.f_bsize = 0;
5239   exit (statfs (".", &fsd));
5240   }],
5241   fu_cv_sys_stat_statfs2_bsize=yes,
5242   fu_cv_sys_stat_statfs2_bsize=no,
5243   fu_cv_sys_stat_statfs2_bsize=no)])
5244   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5245   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5246     space=yes
5247     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5248   fi
5251 if test $space = no; then
5252 # SVR3
5253   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5254   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5255   [AC_TRY_RUN([#include <sys/types.h>
5256 #include <sys/statfs.h>
5257   main ()
5258   {
5259   struct statfs fsd;
5260   exit (statfs (".", &fsd, sizeof fsd, 0));
5261   }],
5262     fu_cv_sys_stat_statfs4=yes,
5263     fu_cv_sys_stat_statfs4=no,
5264     fu_cv_sys_stat_statfs4=no)])
5265   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5266   if test $fu_cv_sys_stat_statfs4 = yes; then
5267     space=yes
5268     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5269   fi
5272 if test $space = no; then
5273 # 4.4BSD and NetBSD
5274   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5275 member (4.4BSD and NetBSD)])
5276   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5277   [AC_TRY_RUN([#include <sys/types.h>
5278 #ifdef HAVE_SYS_PARAM_H
5279 #include <sys/param.h>
5280 #endif
5281 #ifdef HAVE_SYS_MOUNT_H
5282 #include <sys/mount.h>
5283 #endif
5284   main ()
5285   {
5286   struct statfs fsd;
5287   fsd.f_fsize = 0;
5288   exit (statfs (".", &fsd));
5289   }],
5290   fu_cv_sys_stat_statfs2_fsize=yes,
5291   fu_cv_sys_stat_statfs2_fsize=no,
5292   fu_cv_sys_stat_statfs2_fsize=no)])
5293   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5294   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5295     space=yes
5296         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5297   fi
5300 if test $space = no; then
5301   # Ultrix
5302   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5303   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5304   [AC_TRY_RUN([#include <sys/types.h>
5305 #ifdef HAVE_SYS_PARAM_H
5306 #include <sys/param.h>
5307 #endif
5308 #ifdef HAVE_SYS_MOUNT_H
5309 #include <sys/mount.h>
5310 #endif
5311 #ifdef HAVE_SYS_FS_TYPES_H
5312 #include <sys/fs_types.h>
5313 #endif
5314   main ()
5315   {
5316   struct fs_data fsd;
5317   /* Ultrix's statfs returns 1 for success,
5318      0 for not mounted, -1 for failure.  */
5319   exit (statfs (".", &fsd) != 1);
5320   }],
5321   fu_cv_sys_stat_fs_data=yes,
5322   fu_cv_sys_stat_fs_data=no,
5323   fu_cv_sys_stat_fs_data=no)])
5324   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5325   if test $fu_cv_sys_stat_fs_data = yes; then
5326     space=yes
5327     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5328   fi
5332 # As a gating factor for large file support, in order to
5333 # use <4GB files we must have the following minimal support
5334 # available.
5335 # long long, and a 64 bit off_t or off64_t.
5336 # If we don't have all of these then disable large
5337 # file support.
5339 AC_MSG_CHECKING([if large file support can be enabled])
5340 AC_TRY_COMPILE([
5341 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5342 #include <sys/types.h>
5343 #else
5344 __COMPILE_ERROR_
5345 #endif
5347 [int i],
5348 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5349 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5350         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5352 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5354 #################################################
5355 # check for cluster extensions
5357 CTDB_CFLAGS=""
5358 AC_SUBST(CTDB_CFLAGS)
5359 AC_ARG_WITH(ctdb,
5360 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
5361 [ case "$withval" in
5362   yes|no)
5363     AC_MSG_WARN([--with-ctdb called without argument])
5364     ;;
5365   *)
5366     CTDB_CPPFLAGS="-I$withval/include"
5367     ;;
5368   esac])
5370 SAVED_CPPFLAGS="$CPPFLAGS"
5371 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS} $CTDB_CPPFLAGS"
5372 ctdb_broken="missing or broken headers"
5374 AC_CHECK_HEADERS(ctdb.h ctdb_private.h,,,[
5375 #include "confdefs.h"
5376 #define NO_CONFIG_H
5377 #include "replace.h"
5378 #include "system/wait.h"
5379 #include "system/network.h"
5380 #define private #error __USED_RESERVED_WORD_private__
5381 #include <talloc.h>
5382 #include <tdb.h>
5383 #include <ctdb.h>
5386 AC_HAVE_DECL(CTDB_CONTROL_TRANS3_COMMIT,[
5387 #include "confdefs.h"
5388 #define NO_CONFIG_H
5389 #include "replace.h"
5390 #include "system/wait.h"
5391 #include "system/network.h"
5392 #include <talloc.h>
5393 #include <tdb.h>
5394 #include <ctdb.h>
5395 #include <ctdb_private.h>
5397 if test x"$ac_cv_have_CTDB_CONTROL_TRANS3_COMMIT_decl" = x"yes"; then
5398         ctdb_broken=no
5399 else
5400         ctdb_broken="ctdb transaction support missing or too old"
5403 # in ctdb 1.0.57 ctdb_control_tcp was temparary renamed to ctdb_tcp_client
5404 AC_CHECK_TYPE(struct ctdb_tcp_client,[
5405         AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
5406 ],,[
5407 #include "confdefs.h"
5408 #define NO_CONFIG_H
5409 #include "replace.h"
5410 #include "system/wait.h"
5411 #include "system/network.h"
5412 #include <talloc.h>
5413 #include <tdb.h>
5414 #include <ctdb.h>
5415 #include <ctdb_private.h>
5418 AC_CHECK_TYPE(struct ctdb_control_tcp,[
5419         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5421         ctdb_broken="missing struct ctdb_control_tcp"
5423 #include "confdefs.h"
5424 #define NO_CONFIG_H
5425 #include "replace.h"
5426 #include "system/wait.h"
5427 #include "system/network.h"
5428 #include <talloc.h>
5429 #include <tdb.h>
5430 #include <ctdb.h>
5431 #include <ctdb_private.h>
5434 AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5435         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5436 ],,[
5437 #include "confdefs.h"
5438 #define NO_CONFIG_H
5439 #include "replace.h"
5440 #include "system/wait.h"
5441 #include "system/network.h"
5442 #include <talloc.h>
5443 #include <tdb.h>
5444 #include <ctdb.h>
5445 #include <ctdb_private.h>
5447 CPPFLAGS="$SAVED_CPPFLAGS"
5449 AC_MSG_CHECKING(cluster support)
5450 AC_ARG_WITH(cluster-support,
5451 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
5453 if test x"$with_cluster_support" = x ; then
5454         with_cluster_support="auto"
5457 if test x"$ac_cv_header_ctdb_private_h" != x"yes"; then
5458         if test "x$with_cluster_support" = "xyes"; then
5459                 AC_MSG_ERROR("ctdb_private.h is required for cluster support")
5460         fi
5461         with_cluster_support=no
5464 if test x"$ctdb_broken" != x"no"; then
5465         if test "x$with_cluster_support" = "xyes"; then
5466                 AC_MSG_ERROR(["cluster support: $ctdb_broken"])
5467         fi
5468         with_cluster_support=no
5471 if test "x$with_cluster_support" != "xno"; then
5472     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5473     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5474     AC_MSG_RESULT(yes)
5475 else
5476     AC_MSG_RESULT(no)
5479 #################################################
5480 # check for ACL support
5482 AC_MSG_CHECKING(whether to support ACLs)
5483 AC_ARG_WITH(acl-support,
5484 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5485 [ case "$withval" in
5486         yes|no)
5487                 with_acl_support="$withval"
5488                 ;;
5489   esac ])
5491 if test x"$with_acl_support" = x ; then
5492         with_acl_support="auto"
5495 AC_MSG_RESULT($with_acl_support)
5497 if test x"$with_acl_support" = x"no"; then
5498         AC_MSG_RESULT(Disabling ACL support)
5499         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5500 else
5501         AC_MSG_NOTICE(checking whether ACL support is available:)
5502         case "$host_os" in
5503         *sysv5*)
5504                 AC_MSG_NOTICE(Using UnixWare ACLs)
5505                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5506                 default_static_modules="$default_static_modules vfs_solarisacl"
5507                 ;;
5508         *solaris*)
5509                 AC_MSG_NOTICE(Using solaris ACLs)
5510                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5511                 ACL_LIBS="$ACL_LIBS -lsec"
5512                 default_static_modules="$default_static_modules vfs_solarisacl"
5513                 ;;
5514         *hpux*)
5515                 AC_MSG_NOTICE(Using HPUX ACLs)
5516                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5517                 default_static_modules="$default_static_modules vfs_hpuxacl"
5518                 ;;
5519         *irix*)
5520                 AC_MSG_NOTICE(Using IRIX ACLs)
5521                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5522                 default_static_modules="$default_static_modules vfs_irixacl"
5523                 ;;
5524         *aix*)
5525                 AC_MSG_NOTICE(Using AIX ACLs)
5526                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5527                 default_static_modules="$default_static_modules vfs_aixacl"
5528                 ;;
5529         *osf*)
5530                 AC_MSG_NOTICE(Using Tru64 ACLs)
5531                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5532                 ACL_LIBS="$ACL_LIBS -lpacl"
5533                 default_static_modules="$default_static_modules vfs_tru64acl"
5534                 ;;
5535         *darwin*)
5536                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5537                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5538                 ;;
5539         *)
5540                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5541                 case "$host_os" in
5542                 *linux*)
5543                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5544                         ;;
5545                 esac
5546                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5547                         acl_LIBS=$LIBS
5548                         LIBS="$LIBS $ACL_LIBS"
5549                         AC_TRY_LINK([
5550                                 #include <sys/types.h>
5551                                 #include <sys/acl.h>
5552                         ],[
5553                                 acl_t acl;
5554                                 int entry_id;
5555                                 acl_entry_t *entry_p;
5556                                 return acl_get_entry(acl, entry_id, entry_p);
5557                         ],
5558                         [samba_cv_HAVE_POSIX_ACLS=yes],
5559                         [samba_cv_HAVE_POSIX_ACLS=no])
5560                         LIBS=$acl_LIBS
5561                 ])
5562                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5563                         AC_MSG_NOTICE(Using posix ACLs)
5564                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5565                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5566                                 acl_LIBS=$LIBS
5567                                 LIBS="$LIBS $ACL_LIBS"
5568                                 AC_TRY_LINK([
5569                                         #include <sys/types.h>
5570                                         #include <sys/acl.h>
5571                                 ],[
5572                                         acl_permset_t permset_d;
5573                                         acl_perm_t perm;
5574                                         return acl_get_perm_np(permset_d, perm);
5575                                 ],
5576                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5577                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5578                                 LIBS=$acl_LIBS
5579                         ])
5580                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5581                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5582                         fi
5583                         default_static_modules="$default_static_modules vfs_posixacl"
5584                 else
5585                         AC_MSG_NOTICE(ACL support is not avaliable)
5586                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5587                 fi
5588                 ;;
5589         esac
5590 fi # with_acl_support
5594 #################################################
5595 # check for AIO support
5597 AC_MSG_CHECKING(whether to support asynchronous io)
5598 AC_ARG_WITH(aio-support,
5599 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5600 [ case "$withval" in
5601   yes)
5603         AC_MSG_RESULT(yes)
5604         case "$host_os" in
5605         *)
5606                 AIO_LIBS=$LIBS
5607                 no_rt_LIBS=$LIBS
5608                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5609                 LIBS=$no_rt_LIBS
5610                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5611                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5612                 aio_LIBS=$LIBS
5613                 LIBS=$AIO_LIBS
5614                 AC_TRY_LINK([#include <sys/types.h>
5615 #include <aio.h>],
5616 [ struct aiocb a; return aio_read(&a);],
5617 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5618                 LIBS=$aio_LIBS])
5619                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5620                 aio_LIBS=$LIBS
5621                 LIBS=$AIO_LIBS
5622                 AC_TRY_LINK([#include <sys/types.h>
5623 #include <aio.h>],
5624 [ struct aiocb64 a; return aio_read64(&a);],
5625 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5626                 LIBS=$aio_LIBS])
5627                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5628                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5629                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5630                         LIBS=$AIO_LIBS
5631                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5632                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5633                         LIBS=$AIO_LIBS
5634                 fi
5636                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5637                         AC_MSG_CHECKING(for aio_read)
5638                         AC_LINK_IFELSE([#include <aio.h>
5639 int main() { struct aiocb a; return aio_read(&a); }],
5640 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5641 [AC_MSG_RESULT(no)])
5643                         AC_MSG_CHECKING(for aio_write)
5644                         AC_LINK_IFELSE([#include <aio.h>
5645 int main() { struct aiocb a; return aio_write(&a); }],
5646 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5647 [AC_MSG_RESULT(no)])
5649                         AC_MSG_CHECKING(for aio_fsync)
5650                         AC_LINK_IFELSE([#include <aio.h>
5651 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5652 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5653 [AC_MSG_RESULT(no)])
5655                         AC_MSG_CHECKING(for aio_return)
5656                         AC_LINK_IFELSE([#include <aio.h>
5657 int main() { struct aiocb a; return aio_return(&a); }],
5658 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5659 [AC_MSG_RESULT(no)])
5661                         AC_MSG_CHECKING(for aio_error)
5662                         AC_LINK_IFELSE([#include <aio.h>
5663 int main() { struct aiocb a; return aio_error(&a); }],
5664 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5665 [AC_MSG_RESULT(no)])
5667                         AC_MSG_CHECKING(for aio_cancel)
5668                         AC_LINK_IFELSE([#include <aio.h>
5669 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5670 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5671 [AC_MSG_RESULT(no)])
5673                         AC_MSG_CHECKING(for aio_suspend)
5674                         AC_LINK_IFELSE([#include <aio.h>
5675 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5676 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5677 [AC_MSG_RESULT(no)])
5678                 fi
5680                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5681                         AC_MSG_CHECKING(for aio_read64)
5682                         AC_LINK_IFELSE([#include <aio.h>
5683 int main() { struct aiocb a; return aio_read64(&a); }],
5684 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5685 [AC_MSG_RESULT(no)])
5687                         AC_MSG_CHECKING(for aio_write64)
5688                         AC_LINK_IFELSE([#include <aio.h>
5689 int main() { struct aiocb a; return aio_write64(&a); }],
5690 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5691 [AC_MSG_RESULT(no)])
5693                         AC_MSG_CHECKING(for aio_fsync64)
5694                         AC_LINK_IFELSE([#include <aio.h>
5695 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5696 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5697 [AC_MSG_RESULT(no)])
5699                         AC_MSG_CHECKING(for aio_return64)
5700                         AC_LINK_IFELSE([#include <aio.h>
5701 int main() { struct aiocb a; return aio_return64(&a); }],
5702 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5703 [AC_MSG_RESULT(no)])
5705                         AC_MSG_CHECKING(for aio_error64)
5706                         AC_LINK_IFELSE([#include <aio.h>
5707 int main() { struct aiocb a; return aio_error64(&a); }],
5708 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5709 [AC_MSG_RESULT(no)])
5711                         AC_MSG_CHECKING(for aio_cancel64)
5712                         AC_LINK_IFELSE([#include <aio.h>
5713 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5714 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5715 [AC_MSG_RESULT(no)])
5717                         AC_MSG_CHECKING(for aio_suspend64)
5718                         AC_LINK_IFELSE([#include <aio.h>
5719 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5720 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5721 [AC_MSG_RESULT(no)])
5722                 fi
5723             ;;
5724         esac
5725         ;;
5726   *)
5727     AC_MSG_RESULT(no)
5728     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5729     ;;
5730   esac ],
5731   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5732   AC_MSG_RESULT(no)
5735 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5736         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5737                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5738                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5739         fi
5742 #################################################
5743 # check for sendfile support
5745 with_sendfile_support=yes
5746 AC_MSG_CHECKING(whether to check to support sendfile)
5747 AC_ARG_WITH(sendfile-support,
5748 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5749 [ case "$withval" in
5750   yes)
5752         AC_MSG_RESULT(yes);
5754         case "$host_os" in
5755         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5756                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5757                 AC_TRY_LINK([#include <sys/sendfile.h>],
5759 int tofd, fromfd;
5760 off64_t offset;
5761 size_t total;
5762 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5764 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5766                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5767                 AC_TRY_LINK([#include <sys/sendfile.h>],
5769 int tofd, fromfd;
5770 off_t offset;
5771 size_t total;
5772 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5774 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5776 # Try and cope with broken Linux sendfile....
5777                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5778                 AC_TRY_LINK([\
5779 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5780 #undef _FILE_OFFSET_BITS
5781 #endif
5782 #include <sys/sendfile.h>],
5784 int tofd, fromfd;
5785 off_t offset;
5786 size_t total;
5787 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5789 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5791         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5792                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5793                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5794                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5795         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5796                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5797                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5798                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5799         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5800                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5801                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5802         else
5803                 AC_MSG_RESULT(no);
5804         fi
5806         ;;
5807         *freebsd* | *dragonfly* )
5808                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5809                 AC_TRY_LINK([\
5810 #include <sys/types.h>
5811 #include <unistd.h>
5812 #include <sys/socket.h>
5813 #include <sys/uio.h>],
5815         int fromfd, tofd, ret, total=0;
5816         off_t offset, nwritten;
5817         struct sf_hdtr hdr;
5818         struct iovec hdtrl;
5819         hdr.headers = &hdtrl;
5820         hdr.hdr_cnt = 1;
5821         hdr.trailers = NULL;
5822         hdr.trl_cnt = 0;
5823         hdtrl.iov_base = NULL;
5824         hdtrl.iov_len = 0;
5825         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5827 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5829         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5830                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5831                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5832                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5833         else
5834                 AC_MSG_RESULT(no);
5835         fi
5836         ;;
5838         *hpux*)
5839                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5840                 AC_TRY_LINK([\
5841 #include <sys/socket.h>
5842 #include <sys/uio.h>],
5844         int fromfd, tofd;
5845         size_t total=0;
5846         struct iovec hdtrl[2];
5847         ssize_t nwritten;
5848         off64_t offset;
5850         hdtrl[0].iov_base = 0;
5851         hdtrl[0].iov_len = 0;
5853         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5855 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5856         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5857                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5858                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5859                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5860         else
5861                 AC_MSG_RESULT(no);
5862         fi
5864                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5865                 AC_TRY_LINK([\
5866 #include <sys/socket.h>
5867 #include <sys/uio.h>],
5869         int fromfd, tofd;
5870         size_t total=0;
5871         struct iovec hdtrl[2];
5872         ssize_t nwritten;
5873         off_t offset;
5875         hdtrl[0].iov_base = 0;
5876         hdtrl[0].iov_len = 0;
5878         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5880 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5881         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5882                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5883                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5884                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5885         else
5886                 AC_MSG_RESULT(no);
5887         fi
5888         ;;
5890         *solaris*)
5891                 AC_CHECK_LIB(sendfile,sendfilev)
5892                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5893                 AC_TRY_LINK([\
5894 #include <sys/sendfile.h>],
5896         int sfvcnt;
5897         size_t xferred;
5898         struct sendfilevec vec[2];
5899         ssize_t nwritten;
5900         int tofd;
5902         sfvcnt = 2;
5904         vec[0].sfv_fd = SFV_FD_SELF;
5905         vec[0].sfv_flag = 0;
5906         vec[0].sfv_off = 0;
5907         vec[0].sfv_len = 0;
5909         vec[1].sfv_fd = 0;
5910         vec[1].sfv_flag = 0;
5911         vec[1].sfv_off = 0;
5912         vec[1].sfv_len = 0;
5913         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5915 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5917         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5918                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5919                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5920                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5921         else
5922                 AC_MSG_RESULT(no);
5923         fi
5925                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5926                 AC_TRY_LINK([\
5927 #include <sys/sendfile.h>],
5929         int sfvcnt;
5930         size_t xferred;
5931         struct sendfilevec vec[2];
5932         ssize_t nwritten;
5933         int tofd;
5935         sfvcnt = 2;
5937         vec[0].sfv_fd = SFV_FD_SELF;
5938         vec[0].sfv_flag = 0;
5939         vec[0].sfv_off = 0;
5940         vec[0].sfv_len = 0;
5942         vec[1].sfv_fd = 0;
5943         vec[1].sfv_flag = 0;
5944         vec[1].sfv_off = 0;
5945         vec[1].sfv_len = 0;
5946         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5948 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5950         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5951                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5952                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5953                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5954         else
5955                 AC_MSG_RESULT(no);
5956         fi
5957         ;;
5958         *aix*)
5959                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5960                 AC_TRY_LINK([\
5961 #include <sys/socket.h>],
5963         int fromfd, tofd;
5964         size_t total=0;
5965         struct sf_parms hdtrl;
5966         ssize_t nwritten;
5967         off64_t offset;
5969         hdtrl.header_data = 0;
5970         hdtrl.header_length = 0;
5971         hdtrl.file_descriptor = fromfd;
5972         hdtrl.file_offset = 0;
5973         hdtrl.file_bytes = 0;
5974         hdtrl.trailer_data = 0;
5975         hdtrl.trailer_length = 0;
5977         nwritten = send_file(&tofd, &hdtrl, 0);
5979 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5980         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5981                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5982                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5983                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5984         else
5985                 AC_MSG_RESULT(no);
5986         fi
5987         ;;
5988         *)
5989         ;;
5990         esac
5991         ;;
5992   *)
5993     AC_MSG_RESULT(no)
5994     ;;
5995   esac ],
5996   AC_MSG_RESULT(yes)
5999 ############################################
6000 # See if we have the Linux readahead syscall.
6002 AC_CACHE_CHECK([for Linux readahead],
6003                 samba_cv_HAVE_LINUX_READAHEAD,[
6004     AC_TRY_LINK([
6005 #if defined(HAVE_UNISTD_H)
6006 #include <unistd.h>
6007 #endif
6008 #include <fcntl.h>],
6009     [ssize_t err = readahead(0,0,0x80000);],
6010     samba_cv_HAVE_LINUX_READAHEAD=yes,
6011     samba_cv_HAVE_LINUX_READAHEAD=no)])
6013 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
6014   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
6015              [Whether Linux readahead is available])
6018 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
6020 ############################################
6021 # See if we have the posix_fadvise syscall.
6023 AC_CACHE_CHECK([for posix_fadvise],
6024                 samba_cv_HAVE_POSIX_FADVISE,[
6025     AC_TRY_LINK([
6026 #if defined(HAVE_UNISTD_H)
6027 #include <unistd.h>
6028 #endif
6029 #include <fcntl.h>],
6030     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
6031     samba_cv_HAVE_POSIX_FADVISE=yes,
6032     samba_cv_HAVE_POSIX_FADVISE=no)])
6034 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
6035   AC_DEFINE(HAVE_POSIX_FADVISE,1,
6036              [Whether posix_fadvise is available])
6039 ############################################
6040 # See if we have the Linux splice syscall.
6042 case "$host_os" in
6043 *linux*)
6044 AC_CACHE_CHECK([for Linux splice],
6045                 samba_cv_HAVE_LINUX_SPLICE,[
6046     AC_TRY_LINK([
6047 #if defined(HAVE_UNISTD_H)
6048 #include <unistd.h>
6049 #endif
6050 #include <fcntl.h>],
6051     [long ret = splice(0,0,1,0,400,0);],
6052     samba_cv_HAVE_LINUX_SPLICE=yes,
6053     samba_cv_HAVE_LINUX_SPLICE=no)])
6056 samba_cv_HAVE_LINUX_SPLICE=no
6058 esac
6060 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
6061   AC_DEFINE(HAVE_LINUX_SPLICE,1,
6062              [Whether Linux splice is available])
6065 AC_HAVE_DECL(splice, [#include <fcntl.h>])
6067 ############################################
6068 # See if we have the a broken readlink syscall.
6070 AC_CACHE_CHECK([for a broken readlink syscall],samba_cv_HAVE_BROKEN_READLINK,[
6071 AC_TRY_RUN([#include "${srcdir-.}/../tests/readlink.c"],
6072         samba_cv_HAVE_BROKEN_READLINK=no,samba_cv_HAVE_BROKEN_READLINK=yes,samba_cv_HAVE_BROKEN_READLINK=cross)
6074 if test x"$samba_cv_HAVE_BROKEN_READLINK" = x"yes"; then
6075         AC_DEFINE(HAVE_BROKEN_READLINK,1,[Whether the readlink syscall is broken])
6078 #################################################
6079 # Check whether winbind is supported on this platform.  If so we need to
6080 # build and install client programs, sbin programs and shared libraries
6082 AC_MSG_CHECKING(whether to build winbind)
6084 # Initially, the value of $host_os decides whether winbind is supported
6086 HAVE_WINBIND=yes
6087 HAVE_WBCLIENT=no
6089 # Define external wbclient library to link against.  This disables winbind.
6090 # We define this here so --with-winbind can override it.
6091 AC_ARG_WITH(wbclient,
6092 [AS_HELP_STRING([--with-wbclient], [Use external wbclient (optional)])],
6094   case "$withval" in
6095         no)
6096                 HAVE_WBCLIENT=no
6097                 ;;
6098         yes)
6099                 HAVE_WBCLIENT=yes
6100                 HAVE_WINBIND=no
6101                 ;;
6102         *)
6103                 HAVE_WBCLIENT=yes
6104                 HAVE_WINBIND=no
6105                 WBCLIENT_INCLUDES="-I$withval/include"
6106                 WBCLIENT_LDFLAGS="-L$withval/lib"
6107                 ;;
6108   esac ],
6111 AC_SUBST(WBCLIENT_INCLUDES)
6112 AC_SUBST(WBCLIENT_LDFLAGS)
6113 AC_SUBST(WBCLIENT_LIBS)
6116 # Define the winbind shared library name and any specific linker flags
6117 # it needs to be built with.
6119 WINBIND_NSS="../nsswitch/libnss_winbind.$SHLIBEXT"
6120 WINBIND_WINS_NSS="../nsswitch/libnss_wins.$SHLIBEXT"
6121 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
6122 NSSSONAMEVERSIONSUFFIX=""
6124 case "$host_os" in
6125         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
6126                 NSSSONAMEVERSIONSUFFIX=".2"
6127                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_linux.o"
6128                 ;;
6129         *freebsd[[5-9]]*)
6130                 # FreeBSD winbind client is implemented as a wrapper around
6131                 # the Linux version.
6132                 NSSSONAMEVERSIONSUFFIX=".1"
6133                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_freebsd.o \
6134                     ../nsswitch/winbind_nss_linux.o"
6135                 WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
6136                 WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
6137                 ;;
6139         *netbsd*[[3-9]]*)
6140                 # NetBSD winbind client is implemented as a wrapper
6141                 # around the Linux version. It needs getpwent_r() to
6142                 # indicate libc's use of the correct nsdispatch API.
6143                 #
6144                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
6145                         WINBIND_NSS_EXTRA_OBJS="\
6146                             ../nsswitch/winbind_nss_netbsd.o \
6147                             ../nsswitch/winbind_nss_linux.o"
6148                         WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
6149                         WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
6150                 else
6151                         HAVE_WINBIND=no
6152                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
6153                 fi
6154                 ;;
6155         *irix*)
6156                 # IRIX has differently named shared libraries
6157                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_irix.o"
6158                 WINBIND_NSS="../nsswitch/libns_winbind.$SHLIBEXT"
6159                 WINBIND_WINS_NSS="../nsswitch/libns_wins.$SHLIBEXT"
6160                 ;;
6161         *solaris*)
6162                 # Solaris winbind client is implemented as a wrapper around
6163                 # the Linux version.
6164                 NSSSONAMEVERSIONSUFFIX=".1"
6165                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o \
6166                     ../nsswitch/winbind_nss_linux.o"
6167                 ;;
6168         *hpux11*)
6169                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o"
6170                 ;;
6171         *aix*)
6172                 # AIX has even differently named shared libraries.  No
6173                 # WINS support has been implemented yet.
6174                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_aix.o"
6175                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
6176                 WINBIND_NSS="../nsswitch/WINBIND"
6177                 WINBIND_WINS_NSS=""
6178                 ;;
6179         *)
6180                 HAVE_WINBIND=no
6181                 winbind_no_reason=", unsupported on $host_os"
6182                 ;;
6183 esac
6185 # Check the setting of --with-winbind
6187 AC_ARG_WITH(winbind,
6188 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
6190   case "$withval" in
6191         yes)
6192                 HAVE_WINBIND=yes
6193                 HAVE_WBCLIENT=no
6194                 ;;
6195         no)
6196                 HAVE_WINBIND=no
6197                 winbind_reason=""
6198                 ;;
6199   esac ],
6202 # We need unix domain sockets for winbind
6204 if test x"$HAVE_WINBIND" = x"yes"; then
6205         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
6206                 winbind_no_reason=", no unix domain socket support on $host_os"
6207                 HAVE_WINBIND=no
6208         fi
6211 # Display test results
6213 if test x"$HAVE_WINBIND" = x"no"; then
6214         WINBIND_NSS=""
6215         WINBIND_WINS_NSS=""
6217 if test x"$HAVE_WBCLIENT" = x"yes"; then
6218         AC_CHECK_LIB(wbclient, wbcInterfaceDetails,
6219                      [LIBWBCLIENT_LIBS="-lwbclient"], AC_MSG_ERROR([Could not find wbclient]), [$WBCLIENT_LDFLAGS])
6220         LIBWBCLIENT_LIBS="$LIBWBCLIENT_LIBS $WBCLIENT_LDFLAGS"
6221         AC_MSG_RESULT(yes)
6222         AC_DEFINE(WITH_WINBIND,1,[Whether to link to wbclient])
6223         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6224 else
6225         if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
6226                 BUILD_LIBWBCLIENT_SHARED=no
6227         else
6228                 BUILD_LIBWBCLIENT_SHARED=yes
6229         fi
6231         LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
6232         LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
6233         LIBWBCLIENT_SOVER=0
6234         if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
6235                 NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6236                 ## Only worry about libwbclient if we have shared
6237                 # library support
6238                 LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
6239                 LIBWBCLIENT=libwbclient
6240                 INSTALL_LIBWBCLIENT=installlibwbclient
6241                 UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
6242                 LIBWBCLIENT_LIBS="-lwbclient"
6243         else
6244                 LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
6245                 LIBWBCLIENT_LIBS=$LIBWBCLIENT_STATIC_TARGET
6246         fi
6249 if test x"$HAVE_WINBIND" = x"yes"; then
6250         AC_MSG_RESULT(yes)
6251         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6253         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6254         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6255         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6256                 PAM_MODULES="$PAM_MODULES pam_winbind"
6257                 INSTALL_PAM_MODULES="installpammodules"
6258                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6259         fi
6260 else
6261         AC_MSG_RESULT(no$winbind_no_reason)
6264 AC_SUBST(WINBIND_NSS)
6265 AC_SUBST(WINBIND_WINS_NSS)
6266 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
6267 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
6268 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
6270 AC_SUBST(WINBIND_KRB5_LOCATOR)
6272 # Solaris 10 does have new member in nss_XbyY_key
6273 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6274                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6275                 [#include <nss_dbdefs.h>])
6277 # Solaris has some extra fields in struct passwd that need to be
6278 # initialised otherwise nscd crashes.
6280 AC_CHECK_MEMBER(struct passwd.pw_comment,
6281                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6282                 [#include <pwd.h>])
6284 AC_CHECK_MEMBER(struct passwd.pw_age,
6285                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6286                 [#include <pwd.h>])
6288 # AIX 4.3.x and 5.1 do not have as many members in
6289 # struct secmethod_table as AIX 5.2
6290 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6291        [#include <usersec.h>])
6292 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6293        [#include <usersec.h>])
6295 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6296 AC_TRY_COMPILE([#include <sys/types.h>
6297 #include <sys/socket.h>],
6298 [struct ucred cred;
6299  socklen_t cred_len;
6300  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6302 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6303 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6304     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6308 #################################################
6309 # Check to see if we should use the included popt
6311 AC_ARG_WITH(included-popt,
6312 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
6314   case "$withval" in
6315         yes)
6316                 INCLUDED_POPT=yes
6317                 ;;
6318         no)
6319                 INCLUDED_POPT=no
6320                 ;;
6321   esac ],
6323 if test x"$INCLUDED_POPT" != x"yes"; then
6324     AC_CHECK_LIB(popt, poptGetContext,
6325                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6328 AC_MSG_CHECKING(whether to use included popt)
6329 if test x"$INCLUDED_POPT" = x"yes"; then
6330     AC_MSG_RESULT(yes)
6331     BUILD_POPT='$(POPT_OBJ)'
6332     POPTLIBS='$(POPT_OBJ)'
6333     FLAGS1="-I\$(srcdir)/../lib/popt"
6334 else
6335     AC_MSG_RESULT(no)
6336         BUILD_POPT=""
6337     POPTLIBS="-lpopt"
6339 AC_SUBST(BUILD_POPT)
6340 AC_SUBST(POPTLIBS)
6341 AC_SUBST(FLAGS1)
6343 #################################################
6344 # Check if user wants DNS service discovery support
6346 AC_ARG_ENABLE(dnssd,
6347 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=no)])])
6349 AC_SUBST(DNSSD_LIBS)
6350 if test x"$enable_dnssd" = x"yes"; then
6351     have_dnssd_support=yes
6353     AC_CHECK_HEADERS(dns_sd.h)
6354     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6355         have_dnssd_support=no
6356     fi
6358     # On Darwin the DNSSD API is in libc, but on other platforms it's
6359     # probably in -ldns_sd
6360     AC_CHECK_FUNCS(DNSServiceRegister)
6361     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6362     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6363             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6364         have_dnssd_support=no
6365     fi
6367     if test x"$have_dnssd_support" = x"yes"; then
6368         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6369                 [Whether to enable DNS service discovery support])
6370     else
6371         if test x"$enable_dnssd" = x"yes"; then
6372             AC_MSG_ERROR(DNS service discovery support not available)
6373         fi
6374     fi
6378 #################################################
6379 # Check if user wants avahi support
6381 AC_ARG_ENABLE(avahi,
6382 [AS_HELP_STRING([--enable-avahi], [Enable Avahi support (default=auto)])])
6384 if test x"$enable_avahi" != x"no"; then
6385     have_avahi_support=yes
6387     AC_CHECK_HEADERS(avahi-common/watch.h)
6388     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6389         have_avahi_support=no
6390     fi
6392     AC_CHECK_HEADERS(avahi-client/client.h)
6393     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6394         have_avahi_support=no
6395     fi
6397     save_LIBS="$LIBS"
6398     AC_CHECK_LIB(avahi-client, avahi_client_new,[have_avahi_client_new=yes])
6399     AC_CHECK_LIB(avahi-common, avahi_strerror,[have_avahi_strerror=yes])
6400     LIBS="$save_LIBS"
6402     if test x"$have_avahi_client_new" != x"yes" -o \
6403        x"$have_avahi_strerror" != x"yes" ; then
6404         have_avahi_support=no
6405     fi
6407     if test x"$have_avahi_support" = x"yes"; then
6408         AC_SUBST(AVAHI_LIBS, "-lavahi-client -lavahi-common")
6409         AC_DEFINE(WITH_AVAHI_SUPPORT, 1,
6410                 [Whether to enable avahi support])
6411         AC_SUBST(AVAHI_OBJ, "lib/avahi.o smbd/avahi_register.o")
6412     else
6413         if test x"$enable_avahi" = x"yes"; then
6414             AC_MSG_ERROR(avahi support not available)
6415         fi
6416     fi
6420 #################################################
6421 # Set pthread stuff
6423 PTHREAD_CFLAGS=error
6424 PTHREAD_LDFLAGS=error
6426 # If it's error, then the user didn't 
6427 # define it.
6428 if test "x$PTHREAD_LDFLAGS" = xerror; then
6429   AC_CHECK_LIB(pthread, pthread_attr_init, [
6430              PTHREAD_CFLAGS="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
6431              PTHREAD_LDFLAGS="-lpthread" ])
6434 if test "x$PTHREAD_LDFLAGS" = xerror; then
6435   AC_CHECK_LIB(pthreads, pthread_attr_init, [
6436              PTHREAD_CFLAGS="-D_THREAD_SAFE"
6437              PTHREAD_LDFLAGS="-lpthreads" ])
6440 if test "x$PTHREAD_LDFLAGS" = xerror; then
6441    AC_CHECK_LIB(c_r, pthread_attr_init, [
6442                 PTHREAD_CFLAGS="-D_THREAD_SAFE -pthread"
6443                 PTHREAD_LDFLAGS="-pthread" ])
6446 if test "x$PTHREAD_LDFLAGS" = xerror; then
6447    AC_CHECK_FUNC(pthread_attr_init, [
6448                  PTHREAD_CFLAGS="-D_REENTRANT"
6449                  PTHREAD_LDFLAGS="-lpthread" ])
6452 # especially for HP-UX, where the AC_CHECK_FUNC macro fails to test for
6453 # pthread_attr_init. On pthread_mutex_lock it works there...
6454 if test "x$PTHREAD_LDFLAGS" = xerror; then
6455    AC_CHECK_LIB(pthread, pthread_mutex_lock, [
6456                 PTHREAD_CFLAGS="-D_REENTRANT"
6457                 PTHREAD_LDFLAGS="-lpthread" ])
6460 AC_SUBST(PTHREAD_CFLAGS)
6461 AC_SUBST(PTHREAD_LDFLAGS)
6463 samba_cv_HAVE_PTHREAD=no
6464 if test x"$PTHREAD_CFLAGS" != xerror -a x"$PTHREAD_LDFLAGS" != xerror; then
6465         samba_cv_HAVE_PTHREAD=yes
6466         # now check for pthread.h with pthread-correct CFLAGS and LDFLAGS:
6467         ac_save_CFLAGS=$CFLAGS
6468         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6469         ac_save_LDFLAGS=$LDFLAGS
6470         LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
6471         AC_CHECK_HEADERS(pthread.h)
6472         CFLAGS=$ac_save_CFLAGS
6473         LDFLAGS=$ac_save_LDFLAGS
6474         AC_DEFINE(HAVE_PTHREAD, 1, [Do we have pthreads around?])
6477 #################################################
6478 # Check if user wants pthreadpool support
6480 AC_ARG_ENABLE(pthreadpool,
6481 [AS_HELP_STRING([--enable-pthreadpool], [Enable pthreads pool helper support (default=no)])])
6483 if test x"$enable_pthreadpool" = xyes -a x"$samba_cv_HAVE_PTHREAD" != x"yes"; then
6484         AC_MSG_ERROR([pthreadpool support cannot be enabled when pthread support was not found])
6487 if test x"$enable_pthreadpool" = x"yes" -a x"$samba_cv_HAVE_PTHREAD" = x"yes"; then
6488     LIBS="$LIBS $PTHREAD_LDFLAGS"
6489     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6490     AC_DEFINE(WITH_PTHREADPOOL, 1, [Whether to include pthreadpool helpers])
6491     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool.o")
6494 #################################################
6495 # Check to see if we should use the included iniparser
6497 AC_ARG_WITH(included-iniparser,
6498 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6500   case "$withval" in
6501         yes)
6502                 INCLUDED_INIPARSER=yes
6503                 ;;
6504         no)
6505                 INCLUDED_INIPARSER=no
6506                 ;;
6507   esac ],
6509 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6510     AC_CHECK_LIB(iniparser, iniparser_load,
6511                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6514 AC_MSG_CHECKING(whether to use included iniparser)
6515 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6516     AC_MSG_RESULT(yes)
6517     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6518         INIPARSERLIBS=""
6519     FLAGS1="$FLAGS1 -I\$(srcdir)/../lib/iniparser/src"
6520 else
6521     AC_MSG_RESULT(no)
6522         BUILD_INIPARSER=""
6523     INIPARSERLIBS="-liniparser"
6525 AC_SUBST(BUILD_INIPARSER)
6526 AC_SUBST(INIPARSERLIBS)
6527 AC_SUBST(FLAGS1)
6529 ###################################################
6530 # Check for different/missing (set|get|end)netgrent prototypes
6531 CFLAGS_SAVE=$CFLAGS
6532 if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
6533         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6535 AC_CACHE_CHECK([for setnetgrent prototype],samba_cv_setnetgrent_prototype, [
6536     AC_TRY_COMPILE([#include<netdb.h>
6537                     #ifdef HAVE_NETGROUP_H
6538                     #include<netgroup.h>
6539                     #endif],[setnetgrent("foo")],
6540                     samba_cv_setnetgrent_prototype=yes, samba_cv_setnetgrent_prototype=no)])
6541 if test x"$samba_cv_setnetgrent_prototype" = x"yes"; then
6542     AC_DEFINE(HAVE_SETNETGRENT_PROTOTYPE, 1, [If setnetgrent prototype is defined])
6544 AC_CACHE_CHECK([for getnetgrent prototype],samba_cv_getnetgrent_prototype, [
6545     AC_TRY_COMPILE([#include<netdb.h>
6546                     #ifdef HAVE_NETGROUP_H
6547                     #include<netgroup.h>
6548                     #endif],[char *dom, *user,*host; getnetgrent(&dom,&user,&host)],
6549                     samba_cv_getnetgrent_prototype=yes, samba_cv_getnetgrent_prototype=no)])
6550 if test x"$samba_cv_getnetgrent_prototype" = x"yes"; then
6551     AC_DEFINE(HAVE_GETNETGRENT_PROTOTYPE, 1, [If getnetgrent prototype is defined])
6553 AC_CACHE_CHECK([for endnetgrent prototype],samba_cv_endnetgrent_prototype, [
6554     AC_TRY_COMPILE([#include<netdb.h>
6555                     #ifdef HAVE_NETGROUP_H
6556                     #include<netgroup.h>
6557                     #endif],[endnetgrent()],
6558                     samba_cv_endnetgrent_prototype=yes, samba_cv_endnetgrent_prototype=no)])
6559 if test x"$samba_cv_endnetgrent_prototype" = x"yes"; then
6560     AC_DEFINE(HAVE_ENDNETGRENT_PROTOTYPE, 1, [If endnetgrent prototype is defined])
6563 CFLAGS=$CFLAGS_SAVE
6565 # Checks for the vfs_fileid module
6566 # Start
6567 AC_CHECK_FUNC(getmntent)
6569 AC_CHECK_HEADERS(sys/statfs.h)
6571 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
6572 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6573              AC_TRY_RUN([
6574                 #include <sys/types.h>
6575                 #include <sys/statfs.h>
6576                 int main(void)
6577                 {
6578                         struct statfs fsd;
6579                         fsid_t fsid = fsd.f_fsid;
6580                         return statfs (".", &fsd);
6581                 }],
6582                 vfsfileid_cv_statfs=yes,
6583                 vfsfileid_cv_statfs=no,
6584                 vfsfileid_cv_statfs=cross)
6586 AC_MSG_RESULT($vfsfileid_cv_statfs)
6588 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6589         x"$vfsfileid_cv_statfs" = x"yes"; then
6590         default_shared_modules="$default_shared_modules vfs_fileid"
6592 # End
6593 # Checks for the vfs_fileid module
6596 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6598         eval MODULE_DEFAULT_$i=STATIC
6599 done
6601 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6603         dnl Fall back to static if we cannot build shared libraries
6604         eval MODULE_DEFAULT_$i=STATIC
6606         if test $BLDSHARED = true; then
6607                 eval MODULE_DEFAULT_$i=SHARED
6608         fi
6609 done
6611 dnl Always build these modules static
6612 MODULE_rpc_spoolss=STATIC
6613 MODULE_rpc_srvsvc=STATIC
6614 MODULE_idmap_tdb=STATIC
6615 MODULE_idmap_passdb=STATIC
6616 MODULE_idmap_nss=STATIC
6618 MODULE_nss_info_template=STATIC
6620 AC_ARG_WITH(static-modules,
6621 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6622 [ if test $withval; then
6623         for i in `echo $withval | sed -e 's/,/ /g'`
6624         do
6625                 eval MODULE_$i=STATIC
6626         done
6627 fi ])
6629 AC_ARG_WITH(shared-modules,
6630 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6631 [ if test $withval; then
6632         for i in `echo $withval | sed -e 's/,/ /g'`
6633         do
6634                         eval MODULE_$i=SHARED
6635         done
6636 fi ])
6638 if test x"$MODULE_DEFAULT_vfs_notify_fam" = xSTATIC -o \
6639                 x"$MODULE_vfs_notify_fam" = xSTATIC ; then
6640         SMBD_FAM_LIBS="$SMB_FAM_LIBS"
6641         AC_SUBST(SMBD_FAM_LIBS)
6644 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
6645                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6646 SMB_MODULE(pdb_ads, passdb/pdb_ads.o \$(TLDAP_OBJ), "bin/ads.$SHLIBEXT", PDB)
6647 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6648 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6649 SMB_MODULE(pdb_wbc_sam, passdb/pdb_wbc_sam.o, "bin/wbc_sam.$SHLIBEXT", PDB)
6650 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6653 SMB_MODULE(rpc_lsarpc, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
6654 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
6655 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
6656 SMB_MODULE(rpc_dssetup, \$(RPC_DSSETUP_OBJ), "bin/librpc_dssetup.$SHLIBEXT", RPC)
6657 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6658 SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC)
6659 SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC)
6660 SMB_MODULE(rpc_netlogon, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6661 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6662 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc.$SHLIBEXT", RPC)
6663 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6664 SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC)
6665 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6666 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
6667 SMB_SUBSYSTEM(RPC,smbd/process.o)
6669 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6670 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6671 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6672 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6673 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6674 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6675 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6676 SMB_MODULE(idmap_hash, \$(IDMAP_HASH_OBJ), "bin/hash.$SHLIBEXT", IDMAP)
6677 SMB_MODULE(idmap_adex, \$(IDMAP_ADEX_OBJ), "bin/adex.$SHLIBEXT", IDMAP)
6678 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6680 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6681 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6683 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6684 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6685 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6686 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6687 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6689 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6690 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6691 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6692 SMB_MODULE(auth_wbc, \$(AUTH_WBC_OBJ), "bin/wbc.$SHLIBEXT", AUTH)
6693 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6694 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6695 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6696 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6697 SMB_MODULE(auth_netlogond, \$(AUTH_NETLOGOND_OBJ), "bin/netlogond.$SHLIBEXT", AUTH)
6698 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6700 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6701 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6702 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6703 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6704 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6705 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6706 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6707 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6708 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6709 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6710 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6711 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6712 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6713 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6714 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6715 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6716 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6717 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6718 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6719 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6720 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6721 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6722 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6723 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6724 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6725 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6726 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6727 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6728 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6729 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6730 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6731 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6732 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6733 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6734 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6735 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6736 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6737 SMB_MODULE(vfs_acl_xattr, \$(VFS_ACL_XATTR_OBJ), "bin/acl_xattr.$SHLIBEXT", VFS)
6738 SMB_MODULE(vfs_acl_tdb, \$(VFS_ACL_TDB_OBJ), "bin/acl_tdb.$SHLIBEXT", VFS)
6739 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6740 SMB_MODULE(vfs_onefs, \$(VFS_ONEFS), "bin/onefs.$SHLIBEXT", VFS)
6741 SMB_MODULE(vfs_onefs_shadow_copy, \$(VFS_ONEFS_SHADOW_COPY), "bin/onefs_shadow_copy.$SHLIBEXT", VFS)
6742 SMB_MODULE(vfs_dirsort, \$(VFS_DIRSORT_OBJ), "bin/dirsort.$SHLIBEXT", VFS)
6743 SMB_MODULE(vfs_scannedonly, \$(VFS_SCANNEDONLY_OBJ), "bin/scannedonly.$SHLIBEXT", VFS)
6744 SMB_MODULE(vfs_crossrename, \$(VFS_CROSSRENAME_OBJ), "bin/crossrename.$SHLIBEXT", VFS)
6745 SMB_MODULE(vfs_linux_xfs_sgid, \$(VFS_LINUX_XFS_SGID_OBJ), "bin/linux_xfs_sgid.$SHLIBEXT", VFS)
6747 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6749 SMB_MODULE(perfcount_onefs, \$(PERFCOUNT_ONEFS), "bin/pc_onefs.$SHLIBEXT", PERFCOUNT)
6750 SMB_MODULE(perfcount_test, \$(PERFCOUNT_TEST), "bin/pc_test.$SHLIBEXT", PERFCOUNT)
6751 SMB_SUBSYSTEM(PERFCOUNT,smbd/perfcount.o)
6753 SMB_MODULE(gpext_registry, libgpo/gpext/registry.o, "bin/registry.$SHLIBEXT", GPEXT)
6754 SMB_MODULE(gpext_scripts, libgpo/gpext/scripts.o, "bin/scripts.$SHLIBEXT", GPEXT)
6755 SMB_MODULE(gpext_security, libgpo/gpext/security.o, "bin/security.$SHLIBEXT", GPEXT)
6756 SMB_SUBSYSTEM(GPEXT, libgpo/gpext/gpext.o)
6758 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6760 #################################################
6761 # do extra things if we are running insure
6763 if test "${ac_cv_prog_CC}" = "insure"; then
6764         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6767 #################################################
6768 # If run from the build farm, enable NASTY hacks
6769 #################################################
6770 AC_MSG_CHECKING(whether to enable build farm hacks)
6771 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6772         AC_MSG_RESULT(yes)
6773         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6774 else
6775         AC_MSG_RESULT(no)
6778 #################################################
6779 # check for bad librt/libpthread interactions
6781 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6782     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6783     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6784     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6786 SMB_IF_RTSIGNAL_BUG(
6787         [
6788             # Have RT_SIGNAL bug, need to check whether the problem will
6789             # affect anything we have configured.
6791             rt_do_error=no
6792             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6793                 if test x"$rt_signal_lease_ok" = x"no" ; then
6794                     rt_do_error=yes
6795                 fi
6796             fi
6798             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6799                 if test x"$rt_signal_notify_ok" = x"no" ; then
6800                     rt_do_error=yes
6801                 fi
6802             fi
6804             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6805                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6806                 if test x"$rt_signal_aio_ok" = x"no" ; then
6807                     rt_do_error=yes
6808                 fi
6809             fi
6811             if test x"$rt_do_error" = x"yes" ; then
6812                 SMB_IS_LIBPTHREAD_LINKED(
6813                     [
6814                         cat<<MSG
6816 *** On this platforms, linking Samba against pthreads causes problems
6817 *** with the oplock and change notification mechanisms. You may be
6818 *** using pthreads as a side-effect of using the --with-aio-support
6819 *** or --with-profiling-data options. Please remove these and try again.
6822                     ],
6823                     [
6824                         cat<<MSG
6826 *** On this platform, the oplock and change notification mechanisms do not
6827 *** appear to work. Please report this problem to samba-technical@samba.org
6828 *** and attach the config.log file from this directory.
6831                     ])
6832                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6833             fi
6834         ],
6835         [
6836             # no RT_SIGNAL bug, we are golden
6837             SMB_IS_LIBPTHREAD_LINKED(
6838                 [
6839                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6840                 ])
6842         ],
6843         [
6844             # cross compiling, I hope you know what you are doing
6845             true
6846         ])
6850 AC_ARG_ENABLE(merged-build, 
6851 [AS_HELP_STRING([--enable-merged-build], [Build Samba 4 as well])], 
6852 [ enable_merged_build=$enableval ], [ enable_merged_build=auto ])
6854 if test x"$enable_merged_build" = x"yes" -a \
6855         x"$merged_build_possible" = x"no" ; then
6856         AC_MSG_ERROR(Merged build required but not possible)
6859 m4_include(../lib/zlib/zlib.m4)
6861 if test x$enable_merged_build = xauto; then
6862         # Check for python
6863         m4_include(../m4/check_python.m4)
6864         AC_SAMBA_PYTHON_DEVEL([true], [merged_build_possible=no])
6866         AC_MSG_CHECKING([whether it would be possible to do a merged build])
6867         AC_MSG_RESULT([$merged_build_possible])
6869         # Enable merged build automatically if possible, when in developer mode
6870         # Don't enable merged build automatically in 3.6.0.
6871         #if test "x$developer" = xyes; then
6872         #       enable_merged_build=$merged_build_possible
6873         #fi
6876 if test x$enable_merged_build = xyes; then
6877         MERGED_BUILD=1
6878         saved_USESHARED="$USESHARED"
6879         USESHARED="false"
6880         smbtorture4_path="bin/smbtorture4"
6881         smbtorture4_option="-t bin/smbtorture4"
6882         AC_SUBST(smbtorture4_path)
6883         AC_SUBST(smbtorture4_option)
6884         USESHARED="$saved_USESHARED"
6885         SMBTORTURE4="bin/smbtorture4"
6886         AC_SUBST(SMBTORTURE4)
6889 AC_SUBST(ZLIB_LIBS)
6890 AC_SUBST(ZLIB_OBJS)
6891 AC_ZLIB([ZLIB_OBJS=""], [
6892         ZLIB_LIBS=""
6893         for o in adler32.o compress.o crc32.o gzio.o uncompr.o \
6894                      deflate.o trees.o zutil.o inflate.o infback.o \
6895                          inftrees.o inffast.o
6896         do
6897                 ZLIB_OBJS="$ZLIB_OBJS ../lib/zlib/$o"
6898         done
6899         CFLAGS="-I../lib/zlib $CFLAGS"
6902 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
6904 if test "x$enable_dmalloc" = xyes
6905 then
6906         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
6907         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
6908                   [Define to check invariants around some common functions])
6909         LIBS="$LIBS -ldmalloc"
6912 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6913 LIB_REMOVE_USR_LIB(LDFLAGS)
6914 LIB_REMOVE_USR_LIB(LIBS)
6916 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6917 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6918 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6920 #################################################
6921 # Display summary of libraries detected
6923 AC_MSG_RESULT([Using libraries:])
6924 AC_MSG_RESULT([    LIBS = $LIBS])
6925 if test x"$with_ads_support" != x"no"; then
6926     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6928 if test x"$with_ldap_support" != x"no"; then
6929     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6931 if test x"$with_dnsupdate_support" != x"no"; then
6932     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6934 if test x"$have_dnssd_support" != x"no"; then
6935     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6937 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6939 #################################################
6940 # final configure stuff
6942 AC_MSG_CHECKING([configure summary])
6943 AC_TRY_RUN([#include "${srcdir-.}/../tests/summary.c"],
6944            AC_MSG_RESULT(yes),
6945            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6946            AC_MSG_WARN([cannot run when cross-compiling]))
6948 dnl Merge in developer cflags from now on
6949 AC_SUBST(DEVELOPER_CFLAGS)
6950 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes" -o x"$picky_developer" = x"yes"; then
6951     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
6954 # Stuff the smbd-only libraries at the end of the smbd link
6955 # path (if we have them).
6956 SMBD_LIBS="$samba_dmapi_libs"
6957 AC_SUBST(SMBD_LIBS)
6959 CFLAGS="${CFLAGS} \$(FLAGS)"
6960 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
6962 # If we had to expand the includes, make tsure the output file is moved back
6963 AC_OUTPUT_COMMANDS([
6964 if test -f Makefile-noincludes -a ! -f Makefile -a ! -h Makefile ; then
6965         ln -s Makefile-noincludes Makefile
6969 AC_OUTPUT(Makefile
6970           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
6971           lib/netapi/examples/Makefile
6972           lib/netapi/tests/Makefile
6973           pkgconfig/smbclient.pc
6974           pkgconfig/wbclient.pc
6975           pkgconfig/netapi.pc
6976           pkgconfig/smbsharemodes.pc
6977           ../examples/libsmbclient/Makefile.internal
6978           )
6980 #################################################
6981 # Print very concise instructions on building/use
6982 if test "x$enable_dmalloc" = xyes
6983 then
6984         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6985         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])