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