24341e0bec7304409f9d0a79426b044b7454d99e
[kai/samba.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)