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