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