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