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