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