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