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