4e5ce99b78cefedb8a65672b5574867ebfa8336d
[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_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 sig_atomic_t type],samba_cv_sig_atomic_t, [
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>],[sig_atomic_t i = 0],
868         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
869 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
870    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
871 fi
872
873 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
874     AC_TRY_COMPILE([
875 #include <sys/types.h>
876 #if STDC_HEADERS
877 #include <stdlib.h>
878 #include <stddef.h>
879 #endif
880 #include <signal.h>],[struct sigevent s;],
881         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
882 if test x"$samba_cv_struct_sigevent" = x"yes"; then
883    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
884    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
885         [#include <signal.h>])
886 fi
887
888 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
889     AC_TRY_COMPILE([
890 #include <sys/types.h>
891 #if STDC_HEADERS
892 #include <stdlib.h>
893 #include <stddef.h>
894 #endif
895 #if TIME_WITH_SYS_TIME
896 # include <sys/time.h>
897 # include <time.h>
898 #else
899 # if HAVE_SYS_TIME_H
900 #  include <sys/time.h>
901 # else
902 #  include <time.h>
903 # endif
904 #endif
905 ],[struct timespec ts;],
906         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
907 if test x"$samba_cv_struct_timespec" = x"yes"; then
908    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
909 fi
910
911 # stupid headers have the functions but no declaration. grrrr.
912 AC_HAVE_DECL(errno, [#include <errno.h>])
913 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
914 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
915
916 # and glibc has setresuid under linux but the function does
917 # nothing until kernel 2.1.44! very dumb.
918 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
919     AC_TRY_RUN([#include <errno.h>
920 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
921         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
922 if test x"$samba_cv_have_setresuid" = x"yes"; then
923     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
924 fi
925
926 # Do the same check for setresguid...
927 #
928 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
929     AC_TRY_RUN([#include <unistd.h>
930 #include <errno.h>
931 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
932         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
933 if test x"$samba_cv_have_setresgid" = x"yes"; then
934     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
935 fi
936
937 AC_FUNC_MEMCMP
938
939 ###############################################
940 # Readline included by default unless explicitly asked not to
941 test "${with_readline+set}" != "set" && with_readline=yes
942
943 # test for where we get readline() from
944 AC_MSG_CHECKING(whether to use readline)
945 AC_ARG_WITH(readline,
946 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
947 [  case "$with_readline" in
948   yes)
949     AC_MSG_RESULT(yes)
950
951     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
952     AC_CHECK_HEADERS(readline/history.h)
953
954     AC_CHECK_HEADERS(readline.h readline/readline.h,[
955       for termlib in ncurses curses termcap terminfo termlib tinfo; do
956        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
957       done
958       AC_CHECK_LIB(readline, rl_callback_handler_install,
959        [TERMLIBS="-lreadline $TERMLIBS"
960        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
961        break], [TERMLIBS=], $TERMLIBS)])
962     ;;
963   no)
964     AC_MSG_RESULT(no)
965     ;;
966   *)
967     AC_MSG_RESULT(yes)
968
969     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
970     # alternate readline path
971     _ldflags=${LDFLAGS}
972     _cppflags=${CPPFLAGS}
973
974     # Add additional search path
975     LDFLAGS="-L$with_readline/lib $LDFLAGS"
976     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
977
978     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
979     AC_CHECK_HEADERS(readline/history.h)
980
981     AC_CHECK_HEADERS(readline.h readline/readline.h,[
982       for termlib in ncurses curses termcap terminfo termlib; do
983        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
984       done
985       AC_CHECK_LIB(readline, rl_callback_handler_install,
986        [TERMLDFLAGS="-L$with_readline/lib"
987        TERMCPPFLAGS="-I$with_readline/include"
988        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
989        TERMLIBS="-lreadline $TERMLIBS"
990        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
991        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
992
993     LDFLAGS=$_ldflags
994     ;;
995   esac],
996   AC_MSG_RESULT(no)
997 )
998 AC_SUBST(TERMLIBS)
999 AC_SUBST(TERMLDFLAGS)
1000
1001 # The readline API changed slightly from readline3 to readline4, so
1002 # code will generate warnings on one of them unless we have a few
1003 # special cases.
1004 AC_CHECK_LIB(readline, rl_completion_matches,
1005              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
1006                         [Do we have rl_completion_matches?])],
1007              [],
1008              [$TERMLIBS])
1009
1010 # not all readline libs have rl_event_hook or history_list
1011 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1012 AC_CHECK_LIB(readline, history_list,
1013              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1014              [],
1015              [$TERMLIBS])
1016
1017 ###############################################
1018 # test for where we get yp_get_default_domain() from
1019 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1020 AC_CHECK_FUNCS(yp_get_default_domain)
1021
1022 # Check if we have execl, if not we need to compile smbrun.
1023 AC_CHECK_FUNCS(execl)
1024 if test x"$ac_cv_func_execl" = x"no"; then
1025     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1026 fi
1027
1028 AC_CHECK_FUNCS(waitpid getcwd strdup strndup strnlen strerror fchown chmod fchmod chroot mknod mknod64)
1029 AC_CHECK_FUNCS(strtol strtoll strtoul strtoull strtouq __strtoull)
1030 AC_CHECK_FUNCS(fstat strchr chflags)
1031 AC_CHECK_FUNCS(getrlimit fsync fdatasync memset strlcpy strlcat setpgid)
1032 AC_CHECK_FUNCS(memmove setsid glob strpbrk pipe crypt16 getauthuid)
1033 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1034 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf)
1035 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate chsize stat64 fstat64)
1036 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64)
1037 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
1038 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1039 AC_CHECK_FUNCS(getpwent_r)
1040 AC_CHECK_FUNCS(getdents getdents64)
1041 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl)
1042 AC_CHECK_FUNCS(syslog vsyslog timegm)
1043 AC_CHECK_FUNCS(setlocale nl_langinfo)
1044 AC_CHECK_FUNCS(nanosleep)
1045 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1046 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1047 AC_CHECK_HEADERS(sys/mman.h)
1048 # setbuffer, shmget, shm_open are needed for smbtorture
1049 AC_CHECK_FUNCS(setbuffer shmget shm_open)
1050
1051 # Find a method of generating a stack trace
1052 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1053 AC_CHECK_FUNCS(backtrace_symbols)
1054 AC_CHECK_LIB(exc, trace_back_stack)
1055
1056 printf "%s" "checking for GPFS GPL libs... "
1057 save_LIBS="$LIBS"
1058 LIBS="$LIBS -lgpfs_gpl"
1059 AC_TRY_LINK([#include <gpfs_gpl.h>],
1060           [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
1061           samba_cv_HAVE_GPFS=yes,
1062           samba_cv_HAVE_GPFS=no)
1063 echo $samba_cv_HAVE_GPFS
1064 if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
1065     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
1066     default_shared_modules="$default_shared_modules vfs_gpfs"
1067 fi
1068 LIBS="$save_LIBS"
1069
1070 # Note that all the libunwind symbols in the API are defined to internal
1071 # platform-specific version, so we must include libunwind.h before checking
1072 # any of them.
1073 AC_MSG_CHECKING([for libunwind])
1074 save_LIBS=$LIBS
1075
1076 UNWIND_ARCH="unknown"
1077 if test x"$UNAME_I" != x"unknown"; then
1078         UNWIND_ARCH="$UNAME_I"
1079 elif test x"$UNAME_M" != x"unknown"; then
1080         UNWIND_ARCH="$UNAME_M"
1081 elif test x"$UNAME_P" != x"unknown"; then
1082         UNWIND_ARCH="$UNAME_P"
1083 fi
1084
1085 case "$UNWIND_ARCH" in
1086         unknown)
1087                 # This probably won't link without
1088                 # the platform-specific libunwind.
1089                 LIBS="$LIBS -lunwind"
1090                 ;;
1091         i386|i586|i686)
1092                 # Add the platform-specific libunwind module.
1093                 LIBS="$LIBS -lunwind -lunwind-x86"
1094                 ;;
1095         *)
1096                 # Add the platform-specific libunwind module.
1097                 # based on uname -i, uname -m or uname -p
1098                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1099                 ;;
1100 esac
1101
1102 AC_TRY_LINK(
1103     [
1104 #ifdef HAVE_LIBUNWIND_H
1105 #include <libunwind.h>
1106 #endif
1107     ],
1108     [
1109         unw_context_t ctx; unw_cursor_t cur;
1110         char buf[256]; unw_word_t off;
1111         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1112         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1113     ],
1114     [
1115         AC_MSG_RESULT(yes)
1116         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1117
1118         # If we have libunwind, test whether we also have libunwind-ptrace
1119         # which would let us unwind arbitrary processes.
1120         save_LIBS=$LIBS
1121         AC_CHECK_HEADERS(libunwind-ptrace.h)
1122         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1123             [
1124                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1125                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1126                     [Whether libunwind-ptrace.a is available.])
1127             ],
1128             [ LIBUNWIND_PTRACE="" ])
1129
1130         LIBS=$save_LIBS
1131     ],
1132     [
1133         AC_MSG_RESULT(no)
1134         LIBS=$save_LIBS
1135     ])
1136
1137 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1138 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1139     AC_CHECK_HEADERS(sys/ptrace.h)
1140     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1141     AC_TRY_LINK(
1142             [
1143 #if HAVE_SYS_TYPES_H
1144 #include <sys/types.h>
1145 #endif
1146 #if HAVE_SYS_PTRACE_H
1147 #include <sys/ptrace.h>
1148 #endif
1149             ],
1150             [
1151                 int main(int argc, const char ** argv)
1152                 {
1153                         pid_t me = (pid_t)-1;
1154                         ptrace(PTRACE_ATTACH, me, 0, 0);
1155                         ptrace(PTRACE_DETACH, me, 0, 0);
1156                         return 0;
1157                 }
1158             ],
1159             [
1160                 AC_MSG_RESULT(yes)
1161                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1162                     [Whether the Linux ptrace(2) interface is available.])
1163             ],
1164             [
1165                 AC_MSG_RESULT(no)
1166                 LIBUNWIND_PTRACE=""
1167             ])
1168 fi
1169
1170 AC_SUBST(LIBUNWIND_PTRACE)
1171
1172 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1173 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1174 AC_CHECK_FUNCS(__getcwd _getcwd)
1175 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1176 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1177 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1178 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1179 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1180 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1181 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1182 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1183 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1184 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1185 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1186 AC_CHECK_FUNCS(prctl)
1187
1188 AC_TRY_COMPILE([
1189 #ifdef HAVE_SYS_PRCTL_H
1190 #include <sys/prctl.h>
1191 #endif
1192 ],
1193 [int i; i = prtcl(0); ],
1194 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1195
1196 #
1197 #
1198 #
1199 case "$host_os" in
1200     *linux*)
1201        # glibc <= 2.3.2 has a broken getgrouplist
1202        AC_TRY_RUN([
1203 #include <unistd.h>
1204 #include <sys/utsname.h>
1205 main() {
1206        /* glibc up to 2.3 has a broken getgrouplist */
1207 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1208        int libc_major = __GLIBC__;
1209        int libc_minor = __GLIBC_MINOR__;
1210
1211        if (libc_major < 2)
1212               exit(1);
1213        if ((libc_major == 2) && (libc_minor <= 3))
1214               exit(1);
1215 #endif
1216        exit(0);
1217 }
1218 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1219        if test x"$linux_getgrouplist_ok" = x"yes"; then
1220           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1221        fi
1222        ;;
1223     *)
1224        AC_CHECK_FUNCS(getgrouplist)
1225        ;;
1226 esac
1227
1228 #
1229 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1230 #
1231
1232 if test x$ac_cv_func_stat64 = xno ; then
1233   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1234   AC_TRY_LINK([
1235 #if defined(HAVE_UNISTD_H)
1236 #include <unistd.h>
1237 #endif
1238 #include <sys/stat.h>
1239 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1240   AC_MSG_RESULT([$ac_cv_func_stat64])
1241   if test x$ac_cv_func_stat64 = xyes ; then
1242     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1243   fi
1244 fi
1245
1246 if test x$ac_cv_func_lstat64 = xno ; then
1247   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1248   AC_TRY_LINK([
1249 #if defined(HAVE_UNISTD_H)
1250 #include <unistd.h>
1251 #endif
1252 #include <sys/stat.h>
1253 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1254   AC_MSG_RESULT([$ac_cv_func_lstat64])
1255   if test x$ac_cv_func_lstat64 = xyes ; then
1256     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1257   fi
1258 fi
1259
1260 if test x$ac_cv_func_fstat64 = xno ; then
1261   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1262   AC_TRY_LINK([
1263 #if defined(HAVE_UNISTD_H)
1264 #include <unistd.h>
1265 #endif
1266 #include <sys/stat.h>
1267 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1268   AC_MSG_RESULT([$ac_cv_func_fstat64])
1269   if test x$ac_cv_func_fstat64 = xyes ; then
1270     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1271   fi
1272 fi
1273
1274 #################################################
1275 # Check whether struct stat has timestamps with sub-second resolution.
1276 # At least IRIX and Solaris have these.
1277 #
1278 # We check that
1279 #       all of st_mtim, st_atim and st_ctim exist
1280 #       all of the members are in fact of type struct timespec
1281 #
1282 # There is some conflicting standards weirdness about whether we should use
1283 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1284 # prefer struct timespec.
1285
1286 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_cv_stat_hires,
1287     [
1288         AC_TRY_COMPILE(
1289             [
1290 #if TIME_WITH_SYS_TIME
1291 # include <sys/time.h>
1292 # include <time.h>
1293 #else
1294 # if HAVE_SYS_TIME_H
1295 #  include <sys/time.h>
1296 # else
1297 #  include <time.h>
1298 # endif
1299 #endif
1300 #ifdef HAVE_SYS_STAT_H
1301 #include <sys/stat.h>
1302 #endif
1303             ],
1304             [
1305                 struct timespec t;
1306                 struct stat s = {0};
1307                 t.tv_sec = s.st_mtim.tv_sec;
1308                 t.tv_nsec = s.st_mtim.tv_nsec;
1309                 t.tv_sec = s.st_ctim.tv_sec;
1310                 t.tv_nsec = s.st_ctim.tv_nsec;
1311                 t.tv_sec = s.st_atim.tv_sec;
1312                 t.tv_nsec = s.st_atim.tv_nsec;
1313             ],
1314             samba_cv_stat_hires=yes, samba_cv_stat_hires=no)
1315     ])
1316
1317 if test x"$samba_cv_stat_hires" = x"yes" ; then
1318     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1319     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1320     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1321     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1322             [whether struct stat has sub-second timestamps])
1323 fi
1324
1325 AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec], samba_cv_stat_hires_notimespec,
1326     [
1327         AC_TRY_COMPILE(
1328             [
1329 #if TIME_WITH_SYS_TIME
1330 # include <sys/time.h>
1331 # include <time.h>
1332 #else
1333 # if HAVE_SYS_TIME_H
1334 #  include <sys/time.h>
1335 # else
1336 #  include <time.h>
1337 # endif
1338 #endif
1339 #ifdef HAVE_SYS_STAT_H
1340 #include <sys/stat.h>
1341 #endif
1342             ],
1343             [
1344                 struct timespec t;
1345                 struct stat s = {0};
1346                 t.tv_sec = s.st_mtime;
1347                 t.tv_nsec = s.st_mtimensec;
1348                 t.tv_sec = s.st_ctime;
1349                 t.tv_nsec = s.st_ctimensec;
1350                 t.tv_sec = s.st_atime;
1351                 t.tv_nsec = s.st_atimensec;
1352             ],
1353             samba_cv_stat_hires=yes, samba_cv_stat_hires=no)
1354     ])
1355
1356 if test x"$samba_cv_stat_hires_notimespec" = x"yes" ; then
1357     AC_DEFINE(HAVE_STAT_ST_MTIMENSEC, 1, [whether struct stat contains st_mtimensec])
1358     AC_DEFINE(HAVE_STAT_ST_ATIMENSEC, 1, [whether struct stat contains st_atimensec])
1359     AC_DEFINE(HAVE_STAT_ST_CTIMENSEC, 1, [whether struct stat contains st_ctimensec])
1360     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1361             [whether struct stat has sub-second timestamps without struct timespec])
1362 fi
1363
1364 AC_CACHE_CHECK([whether struct stat has st_birthtimespec], samba_cv_stat_st_birthtimespec,
1365     [
1366         AC_TRY_COMPILE(
1367             [
1368 #if TIME_WITH_SYS_TIME
1369 # include <sys/time.h>
1370 # include <time.h>
1371 #else
1372 # if HAVE_SYS_TIME_H
1373 #  include <sys/time.h>
1374 # else
1375 #  include <time.h>
1376 # endif
1377 #endif
1378 #ifdef HAVE_SYS_STAT_H
1379 #include <sys/stat.h>
1380 #endif
1381             ],
1382             [
1383                 struct timespec t;
1384                 struct stat s = {0};
1385                 t = s.st_birthtimespec;
1386             ],
1387             samba_cv_stat_st_birthtimespec=yes, samba_cv_stat_birthtimespec=no)
1388     ])
1389
1390 if test x"$samba_cv_stat_st_birthtimespec" = x"yes" ; then
1391     AC_DEFINE(HAVE_STAT_ST_BIRTHTIMESPEC, 1, [whether struct stat contains st_birthtimespec])
1392 fi
1393
1394 AC_CACHE_CHECK([whether struct stat has st_birthtimensec], samba_cv_stat_st_birthtimensec,
1395     [
1396         AC_TRY_COMPILE(
1397             [
1398 #if TIME_WITH_SYS_TIME
1399 # include <sys/time.h>
1400 # include <time.h>
1401 #else
1402 # if HAVE_SYS_TIME_H
1403 #  include <sys/time.h>
1404 # else
1405 #  include <time.h>
1406 # endif
1407 #endif
1408 #ifdef HAVE_SYS_STAT_H
1409 #include <sys/stat.h>
1410 #endif
1411             ],
1412             [
1413                 struct timespec t;
1414                 struct stat s = {0};
1415                 t.tv_nsec = s.st_birthtimensec;
1416             ],
1417             samba_cv_stat_st_birthtimensec=yes, samba_cv_stat_birthtimensec=no)
1418     ])
1419
1420 if test x"$samba_cv_stat_st_birthtimensec" = x"yes" ; then
1421     AC_DEFINE(HAVE_STAT_ST_BIRTHTIMENSEC, 1, [whether struct stat contains st_birthtimensec])
1422 fi
1423
1424 AC_CACHE_CHECK([whether struct stat has st_birthtime], samba_cv_stat_st_birthtime,
1425     [
1426         AC_TRY_COMPILE(
1427             [
1428 #if TIME_WITH_SYS_TIME
1429 # include <sys/time.h>
1430 # include <time.h>
1431 #else
1432 # if HAVE_SYS_TIME_H
1433 #  include <sys/time.h>
1434 # else
1435 #  include <time.h>
1436 # endif
1437 #endif
1438 #ifdef HAVE_SYS_STAT_H
1439 #include <sys/stat.h>
1440 #endif
1441             ],
1442             [
1443                 struct time_t t;
1444                 struct stat s = {0};
1445                 t = s.st_birthtime;
1446             ],
1447             samba_cv_stat_st_birthtime=yes, samba_cv_stat_birthtime=no)
1448     ])
1449
1450 if test x"$samba_cv_stat_st_birthtime" = x"yes" ; then
1451     AC_DEFINE(HAVE_STAT_ST_BIRTHTIME, 1, [whether struct stat contains st_birthtime])
1452 fi
1453
1454 #####################################
1455 # needed for SRV lookups
1456 AC_CHECK_LIB(resolv, dn_expand)
1457 AC_CHECK_LIB(resolv, _dn_expand)
1458 AC_CHECK_LIB(resolv, __dn_expand)
1459
1460 #
1461 # Check for the functions putprpwnam, set_auth_parameters,
1462 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1463 # Needed for OSF1 and HPUX.
1464 #
1465
1466 AC_LIBTESTFUNC(security, putprpwnam)
1467 AC_LIBTESTFUNC(sec, putprpwnam)
1468
1469 AC_LIBTESTFUNC(security, set_auth_parameters)
1470 AC_LIBTESTFUNC(sec, set_auth_parameters)
1471
1472 # UnixWare 7.x has its getspnam in -lgen
1473 AC_LIBTESTFUNC(gen, getspnam)
1474
1475 AC_LIBTESTFUNC(security, getspnam)
1476 AC_LIBTESTFUNC(sec, getspnam)
1477
1478 AC_LIBTESTFUNC(security, bigcrypt)
1479 AC_LIBTESTFUNC(sec, bigcrypt)
1480
1481 AC_LIBTESTFUNC(security, getprpwnam)
1482 AC_LIBTESTFUNC(sec, getprpwnam)
1483
1484 AC_CHECK_FUNCS(strsignal)
1485
1486 ############################################
1487 # Check if we have libattr
1488 case "$host_os" in
1489   *osf*)
1490         AC_SEARCH_LIBS(getproplist, [proplist])
1491         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1492         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1493         AC_CHECK_FUNCS(sizeof_proplist_entry)
1494   ;;
1495   *)
1496         AC_SEARCH_LIBS(getxattr, [attr])
1497         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1498         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1499         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1500         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1501         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1502         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1503         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1504   ;;
1505 esac
1506
1507 ########################################################
1508 # Check if attropen() is present if this is Solaris
1509 case "$host_os" in
1510   *solaris*)
1511         AC_CHECK_FUNCS(attropen)
1512   ;;
1513 esac
1514
1515 ########################################################
1516 # Do xattr functions take additional options like on Darwin?
1517 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1518         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1519                 old_LIBS=$LIBS
1520                 LIBS="$LIBS $ACL_LIBS"
1521                 AC_TRY_COMPILE([
1522                         #include <sys/types.h>
1523                         #if HAVE_ATTR_XATTR_H
1524                         #include <attr/xattr.h>
1525                         #elif HAVE_SYS_XATTR_H
1526                         #include <sys/xattr.h>
1527                         #endif
1528                 ],[
1529                         getxattr(0, 0, 0, 0, 0, 0);
1530                 ],
1531                 [smb_attr_cv_xattr_add_opt=yes],
1532                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1533         ])
1534         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1535                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1536         fi
1537 fi
1538
1539 # Check if we have extattr
1540 case "$host_os" in
1541   *freebsd4* | *dragonfly* )
1542     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1543     ;;
1544   *)
1545     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1546     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1547     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1548     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1549     ;;
1550 esac
1551
1552 AC_DISABLE_STATIC
1553 AC_ENABLE_SHARED
1554
1555 # Set defaults
1556 PIE_CFLAGS=""
1557 PIE_LDFLAGS=""
1558 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1559
1560 if test "x$enable_pie" != xno
1561 then
1562         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1563         [
1564                 cat > conftest.c <<EOF
1565 int foo;
1566 main () { return 0;}
1567 EOF
1568                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1569                 then
1570                         samba_cv_fpie=yes
1571                 else
1572                         samba_cv_fpie=no
1573                 fi
1574                 rm -f conftest*
1575         ])
1576         if test x"${samba_cv_fpie}" = x"yes"
1577         then
1578                 PIE_CFLAGS="-fPIE"
1579                 PIE_LDFLAGS="-pie"
1580         fi
1581 fi
1582
1583 # Set defaults
1584 RELRO_LDFLAGS=""
1585 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1586
1587 if test "x$enable_relro" != xno
1588 then
1589         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1590         [
1591                 cat > conftest.c <<EOF
1592 int foo;
1593 main () { return 0;}
1594 EOF
1595                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1596                 then
1597                         samba_cv_relro=yes
1598                 else
1599                         samba_cv_relro=no
1600                 fi
1601                 rm -f conftest*
1602         ])
1603         if test x"${samba_cv_relro}" = x"yes"
1604         then
1605                 RELRO_LDFLAGS="-Wl,-z,relro"
1606         fi
1607 fi
1608
1609 # Set defaults
1610 SYMSEXT="syms"
1611 AC_SUBST(SYMSEXT)
1612
1613 # Assume non-shared by default and override below
1614 BLDSHARED="false"
1615
1616 # these are the defaults, good for lots of systems
1617 HOST_OS="$host_os"
1618 LDSHFLAGS="-shared"
1619 MODULE_EXPORTS=""
1620 SONAMEFLAG="#"
1621 SHLD="\${CC} \${CFLAGS}"
1622 PICFLAG="${PIE_CFLAGS}"
1623 SHLIBEXT="so"
1624 DSO_EXPORTS=""
1625
1626 # this bit needs to be modified for each OS that supports share libs
1627 # You need to specify how to create a shared library and
1628   # how to compile C code to produce PIC object files
1629
1630   AC_MSG_CHECKING([ability to build shared libraries])
1631
1632   # and these are for particular systems
1633   case "$host_os" in
1634                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1635                         BLDSHARED="true"
1636                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1637                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined"
1638                         else
1639                                 LDSHFLAGS="-shared -Wl,-Bsymbolic"
1640                         fi
1641                         DYNEXP="-Wl,--export-dynamic"
1642                         PICFLAG="-fPIC"
1643                         SONAMEFLAG="-Wl,-soname="
1644                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1645                         ;;
1646                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1647                         BLDSHARED="true"
1648                         LDSHFLAGS="-G"
1649                         SONAMEFLAG="-h "
1650                         if test "${GCC}" = "yes"; then
1651                                 PICFLAG="-fPIC"
1652                                 SONAMEFLAG="-Wl,-soname="
1653                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1654                                         DYNEXP="-Wl,-E"
1655                                 fi
1656                         else
1657                                 PICFLAG="-KPIC"
1658                                 ## ${CFLAGS} added for building 64-bit shared
1659                                 ## libs using Sun's Compiler
1660                                 LDSHFLAGS="-G \${CFLAGS}"
1661                         fi
1662                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1663                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1664                         ;;
1665                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1666                         BLDSHARED="true"
1667                         LDSHFLAGS="-G"
1668                         SONAMEFLAG="-Wl,-h,"
1669                         PICFLAG="-KPIC"   # Is this correct for SunOS
1670                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1671                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1672                         ;;
1673                 *netbsd* | *freebsd* | *dragonfly* )
1674                         BLDSHARED="true"
1675                         LDSHFLAGS="-shared"
1676                         DYNEXP="-Wl,--export-dynamic"
1677                         SONAMEFLAG="-Wl,-soname,"
1678                         PICFLAG="-fPIC -DPIC"
1679                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1680                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1681                         ;;
1682                 *openbsd*)  BLDSHARED="true"
1683                         LDSHFLAGS="-shared"
1684                         DYNEXP="-Wl,-Bdynamic"
1685                         SONAMEFLAG="-Wl,-soname,"
1686                         PICFLAG="-fPIC"
1687                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1688                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1689                         ;;
1690                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1691                         case "$host_os" in
1692                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1693                         ;;
1694                         esac
1695                         BLDSHARED="true"
1696                         LDSHFLAGS="-set_version sgi1.0 -shared"
1697                         SONAMEFLAG="-soname "
1698                         SHLD="\${LD}"
1699                         if test "${GCC}" = "yes"; then
1700                                 PICFLAG="-fPIC"
1701                         else
1702                                 PICFLAG="-KPIC"
1703                         fi
1704                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1705                         ;;
1706                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1707                         BLDSHARED="true"
1708                         # use expfull to export underscored symbols
1709                         # add rtl to remove /lib/crt0.o warning
1710                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1711                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1712                         PICFLAG="-O2"
1713                         # as AIX code is always position independent...
1714                         # .po will just create compile warnings, use po.o:
1715                         if test "${GCC}" != "yes"; then
1716                                 ## for funky AIX compiler using strncpy()
1717                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1718                         fi
1719
1720                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1721                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1722                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1723                         ;;
1724                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1725                         # Use special PIC flags for the native HP-UX compiler.
1726                                 BLDSHARED="true"
1727                                 SHLD="cc"
1728                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1729                                 SONAMEFLAG="-Wl,+h "
1730                                 PICFLAG="+z"
1731                         if test "${GCC}" = "yes"; then
1732                                 PICFLAG="-fPIC"
1733                         else
1734                                 PICFLAG="+z +ESnolit"
1735                         fi
1736                         if test "$host_cpu" = "ia64"; then
1737                                 SHLIBEXT="so"
1738                               PICFLAG="+z"
1739                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1740                         else
1741                                 SHLIBEXT="sl"
1742                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1743                         fi
1744                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1745                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1746                         ;;
1747                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1748                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1749                         ;;
1750                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1751                         BLDSHARED="true"
1752                         LDSHFLAGS="-shared"
1753                         SONAMEFLAG="-Wl,-soname,"
1754                         PICFLAG="-fPIC"
1755                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1756                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1757                         ;;
1758                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1759                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1760                         ;;
1761                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1762                         BLDSHARED="true"
1763                         LDSHFLAGS="-shared"
1764                         SONAMEFLAG="-Wl,-soname,"
1765                         PICFLAG="-KPIC"
1766                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1767                         ;;
1768                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1769                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1770                         ;;
1771                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1772                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1773                         ;;
1774                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1775                         case "$host" in
1776                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1777                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1778                                         fi
1779                                         LDSHFLAGS="-G"
1780                                         DYNEXP="-Bexport"
1781                                 ;;
1782                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1783                         esac
1784                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1785                         ;;
1786
1787                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1788                         if [ test "$GCC" != yes ]; then
1789                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1790                         fi
1791                         LDSHFLAGS="-G"
1792                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1793                         ;;
1794                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1795                         BLDSHARED="false"
1796                         LDSHFLAGS=""
1797                         ;;
1798
1799                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1800                         BLDSHARED="true"
1801                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1802                         CFLAGS="$CFLAGS -fno-common"
1803                         SHLD="\${CC}"
1804                         SHLIBEXT="dylib"
1805                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1806                         SHLIBEXT="dylib"
1807                         # Since gcc doesn't fail on unrecognised options, the
1808                         # PIE test incorrectly succeeds. Darwin gcc does not
1809                         # actually support the PIE stuff.
1810                         PIE_LDFLAGS=
1811                         PIE_CFLAGS=
1812                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1813                         ;;
1814
1815                 *)
1816                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1817                         ;;
1818   esac
1819
1820 if test "$enable_shared" != "yes"; then
1821         BLDSHARED=false
1822 fi
1823
1824 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1825         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1826 fi
1827
1828 if test x"$BLDSHARED" = x"true" ; then
1829         LDFLAGS="$LDFLAGS -L./bin"
1830 fi
1831
1832 AC_MSG_RESULT($BLDSHARED)
1833
1834 AC_MSG_CHECKING([LDFLAGS])
1835 AC_MSG_RESULT([$LDFLAGS])
1836 AC_MSG_CHECKING([DYNEXP])
1837 AC_MSG_RESULT([$DYNEXP])
1838
1839 #######################################################
1840 # test whether building a shared library actually works
1841 if test $BLDSHARED = true; then
1842
1843 AC_MSG_CHECKING([SHLD])
1844 AC_MSG_RESULT([$SHLD])
1845 AC_MSG_CHECKING([LDSHFLAGS])
1846 AC_MSG_RESULT([$LDSHFLAGS])
1847
1848 AC_MSG_CHECKING([SHLIBEXT])
1849 AC_MSG_RESULT([$SHLIBEXT])
1850 AC_MSG_CHECKING([SONAMEFLAG])
1851 AC_MSG_RESULT([$SONAMEFLAG])
1852
1853 AC_MSG_CHECKING([PICFLAG])
1854 AC_MSG_RESULT([$PICFLAG])
1855
1856 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1857 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1858
1859 AC_CACHE_CHECK([whether building shared libraries actually works],
1860                [ac_cv_shlib_works],[
1861    # try building a trivial shared library
1862    ac_cv_shlib_works=no
1863    # The $SHLD and $LDSHFLAGS variables may contain references to other
1864    # variables so they need to be eval'ed.
1865    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1866         shlib.o ${srcdir-.}/tests/shlib.c && \
1867    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1868         shlib.o && ac_cv_shlib_works=yes
1869    rm -f "shlib.$SHLIBEXT" shlib.o
1870
1871 ])
1872 if test $ac_cv_shlib_works = no; then
1873    BLDSHARED=false
1874 fi
1875 fi
1876
1877 if test x"$BLDSHARED" != x"true"; then
1878         LDSHFLAGS="shared-libraries-disabled"
1879         SONAMEFLAG="shared-libraries-disabled"
1880         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1881         SHLD="shared-libraries-disabled"
1882         PICFLAG="${PIE_CFLAGS}"
1883         SHLIBEXT="shared_libraries_disabled"
1884 fi
1885
1886 AC_MSG_CHECKING([used PICFLAG])
1887 AC_MSG_RESULT([$PICFLAG])
1888
1889 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1890
1891 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
1892
1893 ################
1894
1895 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1896 AC_TRY_RUN([#include <stdio.h>
1897 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1898 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1899 if test x"$samba_cv_have_longlong" = x"yes"; then
1900     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1901     AC_CHECK_TYPE(intptr_t, unsigned long long)
1902 else
1903     AC_CHECK_TYPE(intptr_t, unsigned long)
1904 fi
1905
1906 #
1907 # Check if the compiler supports the LL prefix on long long integers.
1908 # AIX needs this.
1909
1910 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1911     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1912         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1913 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1914    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1915 fi
1916
1917
1918 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
1919 AC_TRY_RUN([#include <time.h>
1920 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
1921 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
1922 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
1923     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
1924 fi
1925
1926 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1927 AC_TRY_RUN([#include <stdio.h>
1928 #include <sys/stat.h>
1929 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1930 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1931 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1932     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1933 fi
1934
1935 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1936 AC_TRY_RUN([
1937 #if defined(HAVE_UNISTD_H)
1938 #include <unistd.h>
1939 #endif
1940 #include <stdio.h>
1941 #include <sys/stat.h>
1942 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1943 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1944 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1945     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1946 fi
1947
1948 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1949 AC_TRY_RUN([
1950 #if defined(HAVE_UNISTD_H)
1951 #include <unistd.h>
1952 #endif
1953 #include <stdio.h>
1954 #include <sys/stat.h>
1955 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1956 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1957 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1958     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1959 fi
1960
1961 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1962 AC_TRY_RUN([
1963 #if defined(HAVE_UNISTD_H)
1964 #include <unistd.h>
1965 #endif
1966 #include <stdio.h>
1967 #include <sys/stat.h>
1968 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1969 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1970 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1971     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1972 fi
1973
1974 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
1975 AC_TRY_RUN([
1976 #if defined(HAVE_UNISTD_H)
1977 #include <unistd.h>
1978 #endif
1979 #include <stdio.h>
1980 #include <sys/stat.h>
1981 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
1982 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
1983 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
1984     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
1985 fi
1986
1987 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
1988 AC_TRY_RUN([
1989 #if defined(HAVE_UNISTD_H)
1990 #include <unistd.h>
1991 #endif
1992 #include <stdio.h>
1993 #include <sys/stat.h>
1994 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1995 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
1996 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
1997     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
1998 fi
1999
2000 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2001 AC_TRY_COMPILE([
2002 #if defined(HAVE_UNISTD_H)
2003 #include <unistd.h>
2004 #endif
2005 #include <sys/types.h>
2006 #include <dirent.h>],
2007 [DIR64 de;],
2008 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2009 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2010     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2011 fi
2012
2013 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2014 AC_TRY_COMPILE([
2015 #if defined(HAVE_UNISTD_H)
2016 #include <unistd.h>
2017 #endif
2018 #include <sys/types.h>
2019 #include <dirent.h>],
2020 [struct dirent64 de;],
2021 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2022 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2023     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2024 fi
2025
2026 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2027 AC_TRY_RUN([
2028 #if defined(HAVE_UNISTD_H)
2029 #include <unistd.h>
2030 #endif
2031 #include <sys/types.h>
2032 main() { dev_t dev; int i = major(dev); return 0; }],
2033 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2034 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2035     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2036 fi
2037
2038 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2039 AC_TRY_RUN([
2040 #if defined(HAVE_UNISTD_H)
2041 #include <unistd.h>
2042 #endif
2043 #include <sys/types.h>
2044 main() { dev_t dev; int i = minor(dev); return 0; }],
2045 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2046 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2047     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2048 fi
2049
2050 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2051 AC_TRY_RUN([
2052 #if defined(HAVE_UNISTD_H)
2053 #include <unistd.h>
2054 #endif
2055 #include <sys/types.h>
2056 main() { dev_t dev = makedev(1,2); return 0; }],
2057 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2058 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2059     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2060 fi
2061
2062 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2063 AC_TRY_RUN([#include <stdio.h>
2064 main() { char c; c=250; exit((c > 0)?0:1); }],
2065 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2066 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2067     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2068 fi
2069
2070 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2071 AC_TRY_COMPILE([#include <sys/types.h>
2072 #include <dirent.h>
2073 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2074 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2075 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2076     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2077 fi
2078
2079 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2080 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2081 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2082 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2083     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2084 fi
2085
2086 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2087 AC_TRY_LINK([
2088 #include <sys/time.h>
2089 #include <unistd.h>], [struct timeval tv; return gettimeofday(&tv, NULL);],
2090            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,
2091            samba_cv_HAVE_GETTIMEOFDAY_TZ=no)])
2092 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2093     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday takes a tz argument])
2094 fi
2095
2096 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2097
2098     # On some systems (eg. Linux) librt can pull in libpthread. We
2099     # don't want this to happen because libpthreads changes signal delivery
2100     # semantics in ways we are not prepared for. This breaks Linux oplocks
2101     # which rely on signals.
2102
2103     AC_LIBTESTFUNC(rt, clock_gettime,
2104             [
2105                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2106                                 [Whether clock_gettime is available])
2107                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2108                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2109                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2110                         ])
2111
2112 fi
2113
2114 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2115 AC_TRY_RUN([#include <sys/types.h>
2116 #include <dirent.h>
2117 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2118 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2119 di->d_name[0] == 0) exit(0); exit(1);} ],
2120 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2121 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2122     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2123 fi
2124
2125 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2126 AC_TRY_COMPILE([#include <sys/types.h>
2127 #include <utime.h>],
2128 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2129 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2130 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2131     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2132 fi
2133
2134 ##############
2135 # Check utmp details, but only if our OS offers utmp.h
2136 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2137 dnl  utmp and utmpx come in many flavours
2138 dnl  We need to check for many of them
2139 dnl  But we don't need to do each and every one, because our code uses
2140 dnl  mostly just the utmp (not utmpx) fields.
2141
2142 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2143
2144 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2145 AC_TRY_COMPILE([#include <sys/types.h>
2146 #include <utmp.h>],
2147 [struct utmp ut;  ut.ut_name[0] = 'a';],
2148 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2149 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2150     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2151 fi
2152
2153 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2154 AC_TRY_COMPILE([#include <sys/types.h>
2155 #include <utmp.h>],
2156 [struct utmp ut;  ut.ut_user[0] = 'a';],
2157 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2158 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2159     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2160 fi
2161
2162 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2163 AC_TRY_COMPILE([#include <sys/types.h>
2164 #include <utmp.h>],
2165 [struct utmp ut;  ut.ut_id[0] = 'a';],
2166 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2167 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2168     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2169 fi
2170
2171 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2172 AC_TRY_COMPILE([#include <sys/types.h>
2173 #include <utmp.h>],
2174 [struct utmp ut;  ut.ut_host[0] = 'a';],
2175 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2176 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2177     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2178 fi
2179
2180 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2181 AC_TRY_COMPILE([#include <sys/types.h>
2182 #include <utmp.h>],
2183 [struct utmp ut;  time_t t; ut.ut_time = t;],
2184 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2185 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2186     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2187 fi
2188
2189 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2190 AC_TRY_COMPILE([#include <sys/types.h>
2191 #include <utmp.h>],
2192 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2193 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2194 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2195     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2196 fi
2197
2198 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2199 AC_TRY_COMPILE([#include <sys/types.h>
2200 #include <utmp.h>],
2201 [struct utmp ut;  ut.ut_type = 0;],
2202 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2203 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2204     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2205 fi
2206
2207 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2208 AC_TRY_COMPILE([#include <sys/types.h>
2209 #include <utmp.h>],
2210 [struct utmp ut;  ut.ut_pid = 0;],
2211 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2212 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2213     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2214 fi
2215
2216 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2217 AC_TRY_COMPILE([#include <sys/types.h>
2218 #include <utmp.h>],
2219 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2220 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2221 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2222     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2223 fi
2224
2225 dnl Look for the IPv6 varient by preference. Many systems have both.
2226 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2227 AC_TRY_COMPILE([#include <sys/types.h>
2228 #include <utmp.h>],
2229 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2230 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2231 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2232     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2233 fi
2234
2235 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2236 AC_TRY_COMPILE([#include <sys/types.h>
2237 #include <utmp.h>],
2238 [struct utmp ut;  ut.ut_addr = 0;],
2239 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2240 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2241     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2242 fi
2243
2244 if test x$ac_cv_func_pututline = xyes ; then
2245   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2246   AC_TRY_COMPILE([#include <sys/types.h>
2247 #include <utmp.h>],
2248   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2249   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2250   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2251       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2252   fi
2253 fi
2254
2255 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2256 AC_TRY_COMPILE([#include <sys/types.h>
2257 #include <utmpx.h>],
2258 [struct utmpx ux;  ux.ut_syslen = 0;],
2259 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2260 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2261     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2262 fi
2263
2264 fi
2265 # end utmp details
2266
2267
2268 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2269 AC_ARG_WITH(libiconv,
2270 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2271 [
2272   if test "$withval" = "no" ; then
2273     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2274   else
2275      if test "$withval" != "yes" ; then
2276         ICONV_PATH_SPEC=yes
2277         ICONV_LOOK_DIRS="$withval"
2278      fi
2279   fi
2280 ])
2281
2282 for i in $ICONV_LOOK_DIRS ; do
2283
2284     save_LIBS="$LIBS"
2285     save_LDFLAGS="$LDFLAGS"
2286     save_CPPFLAGS="$CPPFLAGS"
2287
2288     iconv_current_LIBS=""
2289     iconv_current_LDFLAGS=""
2290     iconv_current_CPPFLAGS=""
2291
2292     ICONV_FOUND="no"
2293     unset libext
2294
2295     #  This is here to handle -withval stuff for --with-libiconv
2296     #  Perhaps we should always add a -L
2297     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2298
2299     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2300     # installation paths. This gets a little tricky since we might have iconv
2301     # in both libiconv and in libc. In this case the jm_ICONV test will always
2302     # succeed when the header is found. To counter this, make sure the
2303     # library directory is there and check the ABI directory first (which
2304     # should be harmless on other systems, but causes tons of linker warnings on
2305     # 64bit Ubuntu systems).
2306     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2307     # installed, I've decided to fix the linker warnings.
2308     # -- Kai
2309     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2310     for l in "lib" "lib32" "lib/hpux32"; do
2311         if test -d "$i/$l" ; then
2312                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2313                 LIBS=
2314                 export LDFLAGS LIBS CPPFLAGS
2315                 # Try to find iconv(3)
2316                 jm_ICONV($i/$l)
2317                 if test x"$ICONV_FOUND" = "xyes" ; then
2318                     libext="$l"
2319                     break
2320                 fi
2321         fi
2322     done
2323
2324     if test x"$ICONV_FOUND" = "xyes" ; then
2325         iconv_current_LDFLAGS="-L$i/$libext"
2326         iconv_current_CPPFLAGS="-I$i/include"
2327
2328         if test x"$jm_cv_lib_iconv" != x; then
2329             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2330         else
2331             # We found iconv in libc.
2332             iconv_current_LIBS=""
2333         fi
2334
2335     fi
2336
2337     if test x"$ICONV_FOUND" = "xyes" ; then
2338
2339         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2340         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2341         LIBS="$save_LIBS $iconv_current_LIBS"
2342         export LDFLAGS LIBS CPPFLAGS
2343
2344         default_dos_charset=no
2345         default_display_charset=no
2346         default_unix_charset=no
2347
2348         # check for default dos charset name
2349         for j in CP850 IBM850 ; do
2350             rjs_CHARSET($j)
2351             default_dos_charset="$ICONV_CHARSET"
2352             if test x"$default_dos_charset" = x"$j"; then
2353                 break
2354             fi
2355         done
2356
2357         # check for default display charset name
2358         for j in ASCII 646 ; do
2359             rjs_CHARSET($j)
2360             default_display_charset="$ICONV_CHARSET"
2361             if test x"$default_display_charset" = x"$j"; then
2362                 break
2363             fi
2364         done
2365
2366         # check for default unix charset name
2367         for j in UTF-8 UTF8 ; do
2368             rjs_CHARSET($j)
2369             default_unix_charset="$ICONV_CHARSET"
2370             if test x"$default_unix_charset" = x"$j"; then
2371                 break
2372             fi
2373         done
2374
2375         if test "$default_dos_charset" != "no" -a \
2376                 "$default_dos_charset" != "cross" -a \
2377                 "$default_display_charset" != "no" -a \
2378                 "$default_display_charset" != "cross" -a \
2379                 "$default_unix_charset" != "no" -a \
2380                 "$default_unix_charset" != "cross"
2381         then
2382                 samba_cv_HAVE_NATIVE_ICONV=yes
2383         else
2384             if test "$default_dos_charset" = "cross" -o \
2385                      "$default_display_charset" = "cross" -o \
2386                      "$default_unix_charset" = "cross"
2387             then
2388                     samba_cv_HAVE_NATIVE_ICONV=cross
2389             else
2390                     samba_cv_HAVE_NATIVE_ICONV=no
2391             fi
2392         fi
2393
2394         # At this point, we have a libiconv candidate. We know that
2395         # we have the right headers and libraries, but we don't know
2396         # whether it does the conversions we want. We can't test this
2397         # because we are cross-compiling. This is not necessarily a big
2398         # deal, since we can't guarantee that the results we get now will
2399         # match the results we get at runtime anyway.
2400         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2401             default_dos_charset="CP850"
2402             default_display_charset="ASCII"
2403             default_unix_charset="UTF-8"
2404             samba_cv_HAVE_NATIVE_ICONV=yes
2405             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2406             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2407         fi
2408
2409         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2410
2411             CPPFLAGS=$save_CPPFLAGS
2412             LDFLAGS=$save_LDFLAGS
2413             LIBS=$save_LIBS
2414
2415             if test x"$iconv_current_LIBS" != x; then
2416                 LIBS="$LIBS $iconv_current_LIBS"
2417             fi
2418
2419             # Add the flags we need to CPPFLAGS and LDFLAGS
2420             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2421             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2422
2423             # Turn the #defines into string literals
2424             default_dos_charset="\"$default_dos_charset\""
2425             default_display_charset="\"$default_display_charset\""
2426             default_unix_charset="\"$default_unix_charset\""
2427
2428             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2429             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2430             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2431             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2432
2433            break
2434         fi
2435
2436     # We didn't find a working iconv, so keep going
2437     fi
2438
2439     #  We only need to clean these up here for the next pass through the loop
2440     CPPFLAGS=$save_CPPFLAGS
2441     LDFLAGS=$save_LDFLAGS
2442     LIBS=$save_LIBS
2443     export LDFLAGS LIBS CPPFLAGS
2444 done
2445 unset libext
2446
2447
2448 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2449     AC_MSG_WARN([Sufficient support for iconv function was not found.
2450     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2451    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2452    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2453    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2454 fi
2455
2456
2457 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2458 AC_TRY_RUN([
2459 #include <sys/types.h>
2460 #include <fcntl.h>
2461 #ifndef F_GETLEASE
2462 #define F_GETLEASE      1025
2463 #endif
2464 main() {
2465        int fd = open("/dev/null", O_RDONLY);
2466        return fcntl(fd, F_GETLEASE, 0) == -1;
2467 }
2468 ],
2469 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2470 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2471     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2472 fi
2473
2474 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2475 AC_TRY_RUN([
2476 #include <sys/types.h>
2477 #include <fcntl.h>
2478 #include <signal.h>
2479 #ifndef F_NOTIFY
2480 #define F_NOTIFY 1026
2481 #endif
2482 main() {
2483         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2484 }
2485 ],
2486 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2487 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2488     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2489 fi
2490
2491 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2492 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h sys/inotify.h)
2493 AC_CHECK_FUNCS(inotify_init)
2494 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2495 ],
2496 samba_cv_HAVE_INOTIFY=yes,
2497 samba_cv_HAVE_INOTIFY=no,
2498 samba_cv_HAVE_INOTIFY=cross)
2499
2500 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2501     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2502 fi
2503
2504 #################################################
2505 # Check if FAM notifications are available. For FAM info, see
2506 #       http://oss.sgi.com/projects/fam/
2507 #       http://savannah.nongnu.org/projects/fam/
2508 AC_ARG_ENABLE(fam,
2509 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2510
2511 if test x$enable_fam != xno; then
2512     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2513     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2514         # On IRIX, libfam requires libC, but other FAM implementations
2515         # might not need it.
2516         AC_CHECK_LIB(fam, FAMOpen2,
2517             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"],
2518             [samba_cv_HAVE_LIBFAM=no])
2519
2520         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2521             samba_fam_xtra=-lC
2522             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2523                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"],
2524                 [samba_cv_HAVE_LIBFAM=no])
2525             unset samba_fam_xtra
2526         fi
2527     fi
2528
2529     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2530         default_shared_modules="$default_shared_modules vfs_notify_fam"
2531         AC_TRY_COMPILE([#include <fam.h>],
2532                     [FAMCodes code = FAMChanged;],
2533                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2534                         [Whether fam.h contains a typedef for enum FAMCodes]),
2535                     [])
2536     fi
2537
2538     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2539         AC_MSG_ERROR(FAM support requested but FAM library not available )
2540     fi
2541 fi
2542
2543 AC_SUBST(SMB_FAM_LIBS)
2544
2545 #################################################
2546 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2547
2548 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2549
2550 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2551 # Theoretically it should work with AIX JFS2 too but this needs testing
2552 if test x"$samba_cv_HAVE_GPFS" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2553     default_shared_modules="$default_shared_modules vfs_tsmsm"
2554 fi
2555
2556 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2557 AC_TRY_RUN([
2558 #include <sys/types.h>
2559 #include <fcntl.h>
2560 #include <signal.h>
2561 #include <sys/file.h>
2562 #ifndef LOCK_MAND
2563 #define LOCK_MAND       32
2564 #define LOCK_READ       64
2565 #endif
2566 main() {
2567         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2568 }
2569 ],
2570 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2571 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2572     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2573 fi
2574
2575
2576 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2577 AC_TRY_COMPILE([#include <sys/types.h>
2578 #include <fcntl.h>],
2579 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2580 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2581 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2582     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2583 fi
2584
2585 #################################################
2586 # Check for POSIX capability support
2587
2588 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2589     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2590     [], [])
2591
2592 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2593
2594     ac_save_LIBS=$LIBS
2595     AC_LIBTESTFUNC(cap, cap_get_proc)
2596
2597     AC_CACHE_CHECK([for POSIX capabilities],
2598             samba_cv_HAVE_POSIX_CAPABILITIES,
2599             [
2600                 AC_TRY_RUN([
2601 #include <sys/types.h>
2602 #include <sys/capability.h>
2603 main() {
2604  cap_t cap;
2605  cap_value_t vals[1];
2606  if (!(cap = cap_get_proc()))
2607    exit(1);
2608  vals[0] = CAP_CHOWN;
2609  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2610  cap_set_proc(cap);
2611  exit(0);
2612 }],
2613                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2614                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2615                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2616             ])
2617
2618 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2619     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2620             [Whether POSIX capabilities are available])
2621 else
2622     LIBS=$ac_save_LIBS
2623 fi
2624
2625 fi
2626
2627 #
2628 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2629 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2630 #
2631
2632 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2633 AC_TRY_COMPILE([#include <sys/types.h>
2634 #if defined(HAVE_RPC_RPC_H)
2635 #include <rpc/rpc.h>
2636 #endif],
2637 [int16 testvar;],
2638 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2639 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2640     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2641 fi
2642
2643 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2644 AC_TRY_COMPILE([#include <sys/types.h>
2645 #if defined(HAVE_RPC_RPC_H)
2646 #include <rpc/rpc.h>
2647 #endif],
2648 [uint16 testvar;],
2649 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2650 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2651     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2652 fi
2653
2654 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2655 AC_TRY_COMPILE([#include <sys/types.h>
2656 #if defined(HAVE_RPC_RPC_H)
2657 #include <rpc/rpc.h>
2658 #endif],
2659 [int32 testvar;],
2660 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2661 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2662     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2663 fi
2664
2665 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2666 AC_TRY_COMPILE([#include <sys/types.h>
2667 #if defined(HAVE_RPC_RPC_H)
2668 #include <rpc/rpc.h>
2669 #endif],
2670 [uint32 testvar;],
2671 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2672 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2673     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2674 fi
2675
2676 dnl
2677 dnl Some systems (SCO) have a problem including
2678 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2679 dnl as a #define in <prot.h> and as part of an enum
2680 dnl in <rpc/rpc.h>.
2681 dnl
2682
2683 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2684 AC_TRY_COMPILE([#include <sys/types.h>
2685 #ifdef HAVE_SYS_SECURITY_H
2686 #include <sys/security.h>
2687 #include <prot.h>
2688 #endif  /* HAVE_SYS_SECURITY_H */
2689 #if defined(HAVE_RPC_RPC_H)
2690 #include <rpc/rpc.h>
2691 #endif],
2692 [int testvar;],
2693 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2694 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2695     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2696 fi
2697
2698 AC_MSG_CHECKING([for test routines])
2699 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2700            AC_MSG_RESULT(yes),
2701            AC_MSG_ERROR([cant find test code. Aborting config]),
2702            AC_MSG_WARN([cannot run when cross-compiling]))
2703
2704 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2705 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2706            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2707 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2708     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2709 fi
2710
2711 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2712 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2713            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2714 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2715     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2716 fi
2717
2718 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2719 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2720 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2721 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2722 AC_CHECK_FUNCS(getpagesize)
2723
2724 ################################################
2725 # look for a method of setting the effective uid
2726 seteuid=no;
2727
2728 if test $seteuid = no; then
2729 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2730 AC_TRY_RUN([
2731 #define AUTOCONF_TEST 1
2732 #define USE_SETREUID 1
2733 #include "confdefs.h"
2734 #include "${srcdir-.}/lib/util_sec.c"],
2735            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2736 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2737     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2738 fi
2739 fi
2740
2741 # we check for setresuid second as it conflicts with AIO on Linux. 
2742 # see http://samba.org/~tridge/junkcode/aio_uid.c
2743 if test $seteuid = no; then
2744 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2745 AC_TRY_RUN([
2746 #define AUTOCONF_TEST 1
2747 #define USE_SETRESUID 1
2748 #include "confdefs.h"
2749 #include "${srcdir-.}/lib/util_sec.c"],
2750            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2751 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2752     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2753 fi
2754 fi
2755
2756 if test $seteuid = no; then
2757 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2758 AC_TRY_RUN([
2759 #define AUTOCONF_TEST 1
2760 #define USE_SETEUID 1
2761 #include "confdefs.h"
2762 #include "${srcdir-.}/lib/util_sec.c"],
2763            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2764 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2765     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2766 fi
2767 fi
2768
2769 if test $seteuid = no; then
2770 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2771 AC_TRY_RUN([
2772 #define AUTOCONF_TEST 1
2773 #define USE_SETUIDX 1
2774 #include "confdefs.h"
2775 #include "${srcdir-.}/lib/util_sec.c"],
2776            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2777 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2778     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2779 fi
2780 fi
2781
2782 AC_CACHE_CHECK([for the Darwin initgroups system call],
2783         samba_cv_DARWIN_INITGROUPS,
2784         AC_TRY_LINK([
2785 #include <sys/syscall.h>
2786 #include <unistd.h>
2787         ],
2788         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2789         samba_cv_DARWIN_INITGROUPS=yes,
2790         samba_cv_DARWIN_INITGROUPS=no)
2791 )
2792
2793 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2794     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2795         [Whether to use the Darwin-specific initgroups system call])
2796 fi
2797
2798 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2799 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2800            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2801 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2802     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2803 fi
2804
2805 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2806 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2807            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2808 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2809     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2810
2811 else
2812
2813 dnl
2814 dnl Don't check for 64 bit fcntl locking if we know that the
2815 dnl glibc2.1 broken check has succeeded.
2816 dnl
2817
2818   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2819   AC_TRY_RUN([
2820 #if defined(HAVE_UNISTD_H)
2821 #include <unistd.h>
2822 #endif
2823 #include <stdio.h>
2824 #include <stdlib.h>
2825
2826 #ifdef HAVE_FCNTL_H
2827 #include <fcntl.h>
2828 #endif
2829
2830 #ifdef HAVE_SYS_FCNTL_H
2831 #include <sys/fcntl.h>
2832 #endif
2833 main() { struct flock64 fl64;
2834 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2835 exit(0);
2836 #else
2837 exit(1);
2838 #endif
2839 }],
2840        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2841
2842   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2843       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2844   fi
2845 fi
2846
2847 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2848 AC_TRY_COMPILE([#include <sys/types.h>
2849 #include <sys/stat.h>
2850 #include <unistd.h>],
2851 [struct stat st;  st.st_blocks = 0;],
2852 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2853 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2854     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2855 fi
2856
2857 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2858 AC_TRY_COMPILE([#include <sys/types.h>
2859 #include <sys/stat.h>
2860 #include <unistd.h>],
2861 [struct stat st;  st.st_blksize = 0;],
2862 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2863 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2864     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2865 fi
2866
2867 AC_CACHE_CHECK([for st_flags in struct stat],
2868         samba_cv_HAVE_STAT_ST_FLAGS,
2869         [
2870             AC_TRY_COMPILE([#include <sys/types.h>
2871 #include <sys/stat.h>
2872 #include <unistd.h>],
2873             [struct stat st;  st.st_flags = 0;],
2874             samba_cv_HAVE_STAT_ST_FLAGS=yes,
2875             samba_cv_HAVE_STAT_ST_FLAGS=no,
2876             samba_cv_HAVE_STAT_ST_FLAGS=cross)
2877         ])
2878
2879 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
2880     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
2881                 [Whether the stat struct has a st_flags member])
2882 fi
2883
2884 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2885 AC_TRY_COMPILE([
2886 #include <sys/types.h>
2887 #include <sys/acl.h>
2888 #if defined(HAVE_RPCSVC_NIS_H)
2889 #include <rpcsvc/nis.h>
2890 #endif],
2891 [int i;],
2892 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2893 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2894         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2895 fi
2896
2897 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
2898 AC_TRY_RUN([
2899 #include <stdio.h>
2900 #include <limits.h>
2901 #include <signal.h>
2902
2903 void exit_on_core(int ignored) {
2904         exit(1);
2905 }
2906
2907 main() {
2908         char *newpath;
2909         signal(SIGSEGV, exit_on_core);
2910         newpath = realpath("/tmp", NULL);
2911         exit((newpath != NULL) ? 0 : 1);
2912 }
2913 ],
2914 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
2915 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
2916     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
2917 fi
2918
2919 #################################################
2920 # check for AFS clear-text auth support
2921 samba_cv_WITH_AFS=no
2922 AC_MSG_CHECKING(whether to use AFS clear-text auth)
2923 AC_ARG_WITH(afs,
2924 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
2925 [ case "$withval" in
2926   yes|auto)
2927     AC_MSG_RESULT($withval)
2928     samba_cv_WITH_AFS=$withval
2929     ;;
2930   *)
2931     AC_MSG_RESULT(no)
2932     ;;
2933   esac ],
2934   AC_MSG_RESULT(no)
2935 )
2936
2937 ####################################################
2938 # check for Linux-specific AFS fake-kaserver support
2939 samba_cv_WITH_FAKE_KASERVER=no
2940 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2941 AC_ARG_WITH(fake-kaserver,
2942 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
2943 [ case "$withval" in
2944   yes|auto)
2945     AC_MSG_RESULT($withval)
2946     samba_cv_WITH_FAKE_KASERVER=$withval
2947     ;;
2948   *)
2949     AC_MSG_RESULT(no)
2950     ;;
2951   esac ],
2952   AC_MSG_RESULT(no)
2953 )
2954
2955 #################################################
2956 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
2957 if test x"$samba_cv_WITH_AFS" != x"no" ||
2958    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
2959
2960     # see if this box has the afs-headers in /usr/include/afs
2961     AC_MSG_CHECKING(for /usr/include/afs)
2962     if test -d /usr/include/afs; then
2963           CFLAGS="$CFLAGS -I/usr/include/afs"
2964           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
2965           AC_MSG_RESULT(yes)
2966     else
2967       AC_MSG_RESULT(no)
2968     fi
2969
2970     # check for afs.h
2971     have_afs_headers=no
2972     AC_CHECK_HEADERS(afs.h afs/afs.h)
2973     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
2974         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
2975            test x"$samba_cv_WITH_AFS" = x"auto"; then
2976                 AC_MSG_WARN([AFS cannot be supported without afs.h])
2977         else
2978                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
2979         fi
2980     else
2981         have_afs_headers=yes
2982     fi
2983 fi
2984
2985 FAKE_KASERVER_OBJ=""
2986 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
2987     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
2988     FAKE_KASERVER_OBJ="utils/net_afs.o"
2989 fi
2990 AC_SUBST(FAKE_KASERVER_OBJ)
2991
2992 #################################################
2993 # check whether to compile AFS/NT ACL mapping module
2994 samba_cv_WITH_VFS_AFSACL=no
2995 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
2996 AC_ARG_WITH(vfs-afsacl,
2997 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
2998 [ case "$withval" in
2999   yes|auto)
3000     AC_MSG_RESULT($withval)
3001     samba_cv_WITH_VFS_AFSACL=yes
3002     ;;
3003   *)
3004     AC_MSG_RESULT(no)
3005     ;;
3006   esac ],
3007   AC_MSG_RESULT(no)
3008 )
3009
3010 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3011    default_shared_modules="$default_shared_modules vfs_afsacl"
3012 fi
3013         
3014 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3015     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3016 fi
3017
3018 #################################################
3019 # check for the DFS clear-text auth system
3020 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3021 AC_ARG_WITH(dfs,
3022 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3023 [ case "$withval" in
3024   yes)
3025     AC_MSG_RESULT(yes)
3026     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3027     ;;
3028   *)
3029     AC_MSG_RESULT(no)
3030     ;;
3031   esac ],
3032   AC_MSG_RESULT(no)
3033 )
3034
3035 ########################################################
3036 # Compile with LDAP support?
3037
3038 with_ldap_support=auto
3039 AC_MSG_CHECKING([for LDAP support])
3040
3041 AC_ARG_WITH(ldap,
3042 [AS_HELP_STRING([--with-ldap], [LDAP support (default yes)])],
3043 [ case "$withval" in
3044     yes|no)
3045         with_ldap_support=$withval
3046         ;;
3047   esac ])
3048
3049 AC_MSG_RESULT($with_ldap_support)
3050
3051 SMBLDAP=""
3052 AC_SUBST(SMBLDAP)
3053 SMBLDAPUTIL=""
3054 AC_SUBST(SMBLDAPUTIL)
3055 LDBLDAP=""
3056 AC_SUBST(LDBLDAP)
3057
3058 if test x"$with_ldap_support" != x"no"; then
3059
3060   ##################################################################
3061   # first test for ldap.h and lber.h
3062   # (ldap.h is required for this test)
3063   AC_CHECK_HEADERS(ldap.h lber.h)
3064
3065   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3066         if test x"$with_ldap_support" = x"yes"; then
3067          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3068         else
3069          AC_MSG_WARN(ldap.h is needed for LDAP support)
3070         fi
3071         
3072         with_ldap_support=no
3073   fi
3074
3075   ##################################################################
3076   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3077   # unsigned int in include/includes.h
3078   case $host_os in
3079         *hpux*)
3080          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3081          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3082         with_ldap_support=yes
3083         ;;
3084         *)
3085         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3086         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3087                 if test x"$with_ldap_support" = x"yes"; then
3088                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3089                 else
3090                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3091                 fi
3092                 with_ldap_support=no
3093         fi
3094         ;;
3095   esac
3096 fi
3097
3098 if test x"$with_ldap_support" != x"no"; then
3099   ac_save_LIBS=$LIBS
3100
3101   ##################################################################
3102   # we might need the lber lib on some systems. To avoid link errors
3103   # this test must be before the libldap test
3104   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3105
3106   ########################################################
3107   # If ber_sockbuf_add_io() is available we can add
3108   # SASL wrapping hooks
3109   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3110
3111   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3112                  AC_TRY_COMPILE([#include <ldap.h>],
3113                                 [int val = LDAP_OPT_SOCKBUF;],
3114                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3115                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3116
3117   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3118           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3119         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3120   fi
3121
3122   #######################################################
3123   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3124   # ldap logging and print it out in the samba logs
3125   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3126                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3127                  [AC_TRY_COMPILE([#include <lber.h>],
3128                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3129                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3130                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3131
3132   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3133         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3134                   [Support for LDAP/LBER logging interception])
3135   fi
3136
3137   ########################################################
3138   # now see if we can find the ldap libs in standard paths
3139   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3140
3141   ########################################################
3142   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3143   # Check found in pam_ldap 145.
3144   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3145
3146   LIBS="$LIBS $LDAP_LIBS"
3147   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3148     AC_TRY_COMPILE([
3149         #include <lber.h>
3150         #include <ldap.h>],
3151         [ldap_set_rebind_proc(0, 0, 0);],
3152         [smb_ldap_cv_ldap_set_rebind_proc=3],
3153         [smb_ldap_cv_ldap_set_rebind_proc=2]
3154     )
3155   ])
3156
3157   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3158
3159   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3160
3161   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3162     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3163     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3164     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3165     default_shared_modules="$default_shared_modules";
3166     SMBLDAP="lib/smbldap.o"
3167     SMBLDAPUTIL="lib/smbldap_util.o"
3168     with_ldap_support=yes
3169     AC_MSG_CHECKING(whether LDAP support is used)
3170     AC_MSG_RESULT(yes)
3171   else
3172     if test x"$with_ldap_support" = x"yes"; then
3173         AC_MSG_ERROR(libldap is needed for LDAP support)
3174     else
3175         AC_MSG_WARN(libldap is needed for LDAP support)
3176     fi
3177
3178     LDAP_LIBS=""
3179     with_ldap_support=no
3180   fi
3181   LIBS=$ac_save_LIBS
3182 fi
3183
3184
3185 #################################################
3186 # active directory support
3187
3188 with_ads_support=auto
3189 AC_MSG_CHECKING([for Active Directory and krb5 support])
3190
3191 AC_ARG_WITH(ads,
3192 [AS_HELP_STRING([--with-ads], [Active Directory support (default auto)])],
3193 [ case "$withval" in
3194     yes|no)
3195         with_ads_support="$withval"
3196         ;;
3197   esac ])
3198
3199 AC_MSG_RESULT($with_ads_support)
3200
3201 FOUND_KRB5=no
3202 KRB5_LIBS=""
3203
3204 if test x"$with_ldap_support" != x"yes"; then
3205
3206     if test x"$with_ads_support" = x"yes"; then
3207         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3208     elif test x"$with_ads_support" = x"auto"; then
3209         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3210         with_ads_support=no
3211     fi
3212
3213 else
3214
3215     # Check to see whether there is enough LDAP functionality to be able
3216     # to build AD support.
3217
3218 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3219 case "$host_os" in
3220         *hpux*)
3221     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3222
3223     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3224         if test x"$with_ads_support" = x"yes"; then
3225             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3226         elif test x"$with_ads_support" = x"auto"; then
3227             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3228             with_ads_support=no
3229         fi
3230     fi
3231     ;;
3232         *)
3233     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3234
3235     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3236         if test x"$with_ads_support" = x"yes"; then
3237             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3238         elif test x"$with_ads_support" = x"auto"; then
3239             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3240             with_ads_support=no
3241         fi
3242     fi
3243     ;;
3244 esac
3245
3246
3247     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3248
3249     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3250         if test x"$with_ads_support" = x"yes"; then
3251             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3252         elif test x"$with_ads_support" = x"auto"; then
3253             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3254             with_ads_support=no
3255         fi
3256     fi
3257
3258 fi
3259
3260 if test x"$with_ads_support" != x"no"; then
3261
3262   # Do no harm to the values of CFLAGS and LIBS while testing for
3263   # Kerberos support.
3264
3265   if test x$FOUND_KRB5 = x"no"; then
3266     #################################################
3267     # check for location of Kerberos 5 install
3268     AC_MSG_CHECKING(for kerberos 5 install path)
3269     AC_ARG_WITH(krb5,
3270     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3271     [ case "$withval" in
3272       no)
3273         AC_MSG_RESULT(no krb5-path given)
3274         ;;
3275       yes)
3276         AC_MSG_RESULT(/usr)
3277         FOUND_KRB5=yes
3278         ;;
3279       *)
3280         AC_MSG_RESULT($withval)
3281         KRB5_CFLAGS="-I$withval/include"
3282         KRB5_CPPFLAGS="-I$withval/include"
3283         KRB5_LDFLAGS="-L$withval/lib"
3284         FOUND_KRB5=yes
3285         if test -x "$withval/bin/krb5-config"; then
3286                 KRB5CONFIG=$withval/bin/krb5-config
3287         fi
3288         ;;
3289       esac ],
3290       AC_MSG_RESULT(no krb5-path given)
3291     )
3292   fi
3293
3294   #################################################
3295   # check for krb5-config from recent MIT and Heimdal kerberos 5
3296   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3297   AC_MSG_CHECKING(for working krb5-config)
3298   if test -x "$KRB5CONFIG"; then
3299     ac_save_CFLAGS=$CFLAGS
3300     CFLAGS="";export CFLAGS
3301     ac_save_LDFLAGS=$LDFLAGS
3302     LDFLAGS="";export LDFLAGS
3303     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3304     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3305     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3306     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3307     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3308     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3309     FOUND_KRB5=yes
3310     AC_MSG_RESULT(yes)
3311   else
3312     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3313   fi
3314
3315   if test x$FOUND_KRB5 = x"no"; then
3316     #################################################
3317     # see if this box has the SuSE location for the heimdal krb implementation
3318     AC_MSG_CHECKING(for /usr/include/heimdal)
3319     if test -d /usr/include/heimdal; then
3320       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3321           KRB5_CFLAGS="-I/usr/include/heimdal"
3322           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3323           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3324           FOUND_KRB5=yes
3325           AC_MSG_RESULT(yes)
3326       else
3327           KRB5_CFLAGS="-I/usr/include/heimdal"
3328           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3329           FOUND_KRB5=yes
3330           AC_MSG_RESULT(yes)
3331       fi
3332     else
3333       AC_MSG_RESULT(no)
3334     fi
3335   fi
3336
3337   if test x$FOUND_KRB5 = x"no"; then
3338     #################################################
3339     # see if this box has the RedHat location for kerberos
3340     AC_MSG_CHECKING(for /usr/kerberos)
3341     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3342       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3343       KRB5_CFLAGS="-I/usr/kerberos/include"
3344       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3345       FOUND_KRB5=yes
3346       AC_MSG_RESULT(yes)
3347     else
3348       AC_MSG_RESULT(no)
3349     fi
3350   fi
3351
3352   if test x$FOUND_KRB5 = x"no"; then
3353     #################################################
3354     # see if this box has the OpenBSD location for heimdal krb5
3355     AC_MSG_CHECKING(for /usr/include/kerberosV)
3356     if test -d /usr/include/kerberosV; then
3357       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3358       KRB5_LIBS="-lcrypto"
3359       FOUND_KRB5=yes
3360       AC_MSG_RESULT(yes)
3361     else
3362       AC_MSG_RESULT(no)
3363     fi
3364   fi
3365
3366   ac_save_CFLAGS=$CFLAGS
3367   ac_save_CPPFLAGS=$CPPFLAGS
3368   ac_save_LDFLAGS=$LDFLAGS
3369
3370   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3371   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3372   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3373
3374   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3375
3376   # now check for krb5.h. Some systems have the libraries without the headers!
3377   # note that this check is done here to allow for different kerberos
3378   # include paths
3379   AC_CHECK_HEADERS(krb5.h)
3380
3381   if test x"$ac_cv_header_krb5_h" = x"no"; then
3382
3383     # Give a warning if AD support was not explicitly requested,
3384     # i.e with_ads_support = auto, otherwise die with an error.
3385
3386     if test x"$with_ads_support" = x"yes"; then
3387       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3388     else
3389       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3390     fi
3391
3392     # Turn off AD support and restore CFLAGS and LIBS variables
3393
3394     with_ads_support="no"
3395
3396     CFLAGS=$ac_save_CFLAGS
3397     CPPFLAGS=$ac_save_CPPFLAGS
3398     LDFLAGS=$ac_save_LDFLAGS
3399   fi
3400   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3401   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
3402         WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
3403         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
3404   fi
3405 fi
3406
3407 # Now we have determined whether we really want ADS support
3408 use_ads=no
3409 if test x"$with_ads_support" != x"no"; then
3410   use_ads=yes
3411   have_gssapi=no
3412   ac_save_LIBS=$LIBS
3413
3414   # now check for gssapi headers.  This is also done here to allow for
3415   # different kerberos include paths
3416   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3417
3418   ##################################################################
3419   # we might need the k5crypto and com_err libraries on some systems
3420   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3421   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3422
3423   # Heimdal checks.
3424   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3425   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3426   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3427
3428   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3429   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3430
3431   ########################################################
3432   # now see if we can find the krb5 libs in standard paths
3433   # or as specified above
3434   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3435   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3436
3437   ########################################################
3438   # now see if we can find the gssapi libs in standard paths
3439   if test x"$have_gssapi" != x"yes"; then
3440      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3441   fi
3442
3443   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3444   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3445   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3446   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3447   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3448   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3449   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3450   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3451   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3452   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3453   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3454   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3455   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3456   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3457   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3458   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3459   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3460   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3461   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3462   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3463   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3464   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3465   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3466   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3467   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3468   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3469   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3470   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3471   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3472   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3473   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3474   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3475   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3476   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3477   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3478   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3479   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3480   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3481   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3482   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3483   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3484   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3485   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3486
3487   LIBS="$KRB5_LIBS $LIBS"
3488
3489   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3490         smb_krb5_cv_ticket_has_keyinfo,
3491         [
3492             AC_TRY_COMPILE(
3493             [
3494                 #include <krb5.h>
3495             ],
3496             [
3497                 krb5_ticket ticket;
3498                 krb5_kvno kvno;
3499                 krb5_enctype enctype;
3500
3501                 enctype = ticket.enc_part.enctype;
3502                 kvno = ticket.enc_part.kvno;
3503             ],
3504             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3505             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3506         ])
3507
3508   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3509         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3510             [Whether the krb5_ticket structure contains the kvno and enctype])
3511   fi
3512
3513   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3514           smb_krb5_cv_creds_opt_free_context,
3515           [
3516                 AC_TRY_COMPILE([
3517                     #include <krb5.h>],
3518                     [
3519                         krb5_context ctx;
3520                         krb5_get_init_creds_opt *opt = NULL;
3521                         krb5_get_init_creds_opt_free(ctx, opt);
3522                     ],
3523                     [smb_krb5_cv_creds_opt_free_context=yes],
3524                     [smb_krb5_cv_creds_opt_free_context=no]
3525                 )
3526           ])
3527
3528   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3529         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3530             [Whether krb5_get_init_creds_opt_free takes a context argument])
3531   fi
3532
3533   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3534     AC_TRY_COMPILE([
3535         #include <krb5.h>],
3536         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3537         [smb_krb5_cv_verify_checksum=7],
3538         [smb_krb5_cv_verify_checksum=6],
3539     )
3540   ])
3541   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3542
3543   AC_CACHE_CHECK([for checksum in krb5_checksum],
3544                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3545     AC_TRY_COMPILE([#include <krb5.h>],
3546       [krb5_checksum cksum; cksum.checksum.length = 0;],
3547       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3548       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3549
3550   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3551     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3552                [Whether the krb5_checksum struct has a checksum property])
3553   fi
3554
3555   AC_CACHE_CHECK([for etype in EncryptedData],
3556                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3557     AC_TRY_COMPILE([#include <krb5.h>],
3558       [EncryptedData edata; edata.etype = 0;],
3559       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3560       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3561
3562   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3563     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3564                [Whether the EncryptedData struct has a etype property])
3565   fi
3566
3567   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3568                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3569     AC_TRY_COMPILE([#include <krb5.h>],
3570       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3571       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3572       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3573
3574   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3575     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3576                [Whether the krb5_ap_req struct has a ticket pointer])
3577   fi
3578
3579   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3580                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3581     AC_TRY_COMPILE([#include <krb5.h>],
3582       [krb5_error err; err.e_data = NULL;],
3583       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3584       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3585
3586   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3587     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3588                [Whether the krb5_error struct has a e_data pointer])
3589   fi
3590
3591   AC_CACHE_CHECK([for krb5_crypto type],
3592                 samba_cv_HAVE_KRB5_CRYPTO,[
3593     AC_TRY_COMPILE([#include <krb5.h>],
3594       [krb5_crypto crypto;],
3595       samba_cv_HAVE_KRB5_CRYPTO=yes,
3596       samba_cv_HAVE_KRB5_CRYPTO=no)])
3597
3598   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3599     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3600                [Whether the type krb5_crypto exists])
3601   fi
3602
3603   AC_CACHE_CHECK([for krb5_encrypt_block type],
3604                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3605     AC_TRY_COMPILE([#include <krb5.h>],
3606       [krb5_encrypt_block block;],
3607       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3608       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3609
3610   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3611     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3612                [Whether the type krb5_encrypt_block exists])
3613   fi
3614
3615   AC_CACHE_CHECK([for addrtype in krb5_address],
3616                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3617     AC_TRY_COMPILE([#include <krb5.h>],
3618       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3619       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3620       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3621
3622   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3623     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3624                [Whether the krb5_address struct has a addrtype property])
3625   fi
3626
3627   AC_CACHE_CHECK([for addr_type in krb5_address],
3628                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3629     AC_TRY_COMPILE([#include <krb5.h>],
3630       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3631       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3632       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3633
3634   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3635     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3636               [Whether the krb5_address struct has a addr_type property])
3637   fi
3638
3639   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3640                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3641                  [AC_TRY_COMPILE([#include <krb5.h>],
3642     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3643     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3644
3645   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3646     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3647               [Whether the krb5_ticket struct has a enc_part2 property])
3648   fi
3649
3650   AC_CACHE_CHECK([for keyblock in krb5_creds],
3651                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3652     AC_TRY_COMPILE([#include <krb5.h>],
3653       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3654       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3655       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3656
3657   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3658     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3659               [Whether the krb5_creds struct has a keyblock property])
3660   fi
3661
3662   AC_CACHE_CHECK([for session in krb5_creds],
3663                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3664     AC_TRY_COMPILE([#include <krb5.h>],
3665       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3666       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3667       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3668
3669   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3670     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3671               [Whether the krb5_creds struct has a session property])
3672   fi
3673
3674   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3675                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3676     AC_TRY_COMPILE([#include <krb5.h>],
3677       [krb5_keyblock key; key.keyvalue.data = NULL;],
3678       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3679       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3680
3681   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3682     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3683               [Whether the krb5_keyblock struct has a keyvalue property])
3684   fi
3685
3686   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3687                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3688     AC_TRY_COMPILE([#include <krb5.h>],
3689       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3690       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3691       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3692   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3693                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3694     AC_TRY_COMPILE([#include <krb5.h>],
3695       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3696       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3697       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3698 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3699 # w.r.t. arcfour and windows, so we must not enable it here
3700   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3701           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3702     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3703               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3704   fi
3705
3706   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3707                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3708     AC_TRY_COMPILE([#include <krb5.h>],
3709       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3710       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3711       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3712
3713   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3714     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3715               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3716   fi
3717
3718   AC_CACHE_CHECK([for KV5M_KEYTAB],
3719                  samba_cv_HAVE_KV5M_KEYTAB,[
3720     AC_TRY_COMPILE([#include <krb5.h>],
3721       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3722       samba_cv_HAVE_KV5M_KEYTAB=yes,
3723       samba_cv_HAVE_KV5M_KEYTAB=no)])
3724
3725   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3726       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3727              [Whether the KV5M_KEYTAB option is available])
3728   fi
3729
3730   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3731                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3732     AC_TRY_COMPILE([#include <krb5.h>],
3733       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3734       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3735       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3736
3737   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3738     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3739               [Whether KRB5_KU_OTHER_CKSUM is available])
3740   fi
3741
3742   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3743                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3744     AC_TRY_COMPILE([#include <krb5.h>],
3745       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3746       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3747       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3748
3749   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3750     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3751               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3752   fi
3753
3754   AC_CACHE_CHECK([for the krb5_princ_component macro],
3755                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3756     AC_TRY_LINK([#include <krb5.h>],
3757       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3758       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3759       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3760
3761   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3762     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3763                [Whether krb5_princ_component is available])
3764   fi
3765
3766   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3767                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3768     AC_TRY_COMPILE([#include <krb5.h>],
3769       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3770       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3771       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3772
3773   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3774     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3775               [Whether krb5_keytab_entry has key member])
3776   fi
3777
3778   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3779                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3780     AC_TRY_COMPILE([#include <krb5.h>],
3781       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3782       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3783       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3784
3785   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3786     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3787               [Whether krb5_keytab_entry has keyblock member])
3788   fi
3789
3790   AC_CACHE_CHECK([for magic in krb5_address],
3791                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3792     AC_TRY_COMPILE([#include <krb5.h>],
3793       [krb5_address addr; addr.magic = 0;],
3794       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3795       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3796
3797   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3798     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3799               [Whether the krb5_address struct has a magic property])
3800   fi
3801
3802   AC_CACHE_CHECK([for WRFILE: keytab support],
3803                 samba_cv_HAVE_WRFILE_KEYTAB,[
3804     AC_TRY_RUN([
3805 #include<krb5.h>
3806   main()
3807   {
3808     krb5_context context;
3809     krb5_keytab keytab;
3810
3811     krb5_init_context(&context);
3812     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3813   }],
3814   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3815   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3816
3817   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3818       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3819                [Whether the WRFILE:-keytab is supported])
3820   fi
3821
3822   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3823                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3824     AC_TRY_COMPILE([#include <krb5.h>],
3825     [
3826     krb5_context context;
3827     krb5_principal principal;
3828     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3829     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3830     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3831
3832   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3833     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3834               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3835   fi
3836
3837   AC_CACHE_CHECK([for krb5_addresses type],
3838                 samba_cv_HAVE_KRB5_ADDRESSES,[
3839     AC_TRY_COMPILE([#include <krb5.h>],
3840       [krb5_addresses addr;],
3841       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3842       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3843
3844   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3845     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3846                [Whether the type krb5_addresses type exists])
3847   fi
3848
3849   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
3850                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
3851     AC_TRY_COMPILE([#include <krb5.h>],
3852     [
3853     krb5_mk_error(0,0,0);],
3854     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
3855     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
3856
3857   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
3858     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
3859               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
3860   fi
3861
3862   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
3863     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
3864         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
3865         AC_TRY_RUN_STRICT([
3866                 #include <stdlib.h>
3867                 #include <krb5.h>
3868                 int main(void) {
3869                         krb5_context context = NULL;
3870                         char *str = NULL;
3871                         krb5_enctype_to_string(context, 1, &str);
3872                         if (str) free (str); 
3873                         return 0;
3874                 }
3875                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3876                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
3877                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
3878
3879     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
3880       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
3881                 [whether krb5_enctype_to_string takes krb5_context argument])
3882     fi
3883
3884     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
3885         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
3886         AC_TRY_RUN_STRICT([
3887                 #include <krb5.h>
3888                 int main(void) {
3889                         char buf[256];
3890                         krb5_enctype_to_string(1, buf, 256);
3891                         return 0;
3892                 }
3893                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3894                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
3895                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
3896
3897     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
3898       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
3899                 [whether krb5_enctype_to_string takes size_t argument])
3900     fi
3901   fi
3902
3903   AC_CACHE_CHECK([for krb5_principal_get_realm],
3904                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
3905     AC_TRY_LINK([#include <krb5.h>],
3906       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
3907       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
3908       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
3909
3910   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
3911     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
3912                [Whether the function krb5_principal_get_realm is defined])
3913   fi
3914
3915   AC_CACHE_CHECK([for krb5_princ_realm],
3916                 samba_cv_HAVE_KRB5_PRINC_REALM,[
3917     AC_TRY_LINK([#include <krb5.h>],
3918       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
3919       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
3920       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
3921
3922   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
3923     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
3924                [Whether the macro krb5_princ_realm is defined])
3925   fi
3926
3927   #
3928   #
3929   # Now the decisions whether we can support krb5
3930   #
3931   # NOTE: all tests should be done before this block!
3932   #
3933   #
3934   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3935     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3936     use_ads=no
3937   fi
3938
3939   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
3940           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
3941   then
3942     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
3943     use_ads=no
3944   fi
3945
3946   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
3947           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
3948   then
3949     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
3950     use_ads=no
3951   fi
3952
3953   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
3954           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
3955   then
3956     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
3957     use_ads=no
3958   fi
3959
3960   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
3961           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
3962   then
3963     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
3964     use_ads=no
3965   fi
3966
3967   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
3968
3969       # We only need the following functions if we can't get the enctype
3970       # and kvno out of the ticket directly (ie. on Heimdal).
3971
3972       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
3973       then
3974         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
3975         use_ads=no
3976       fi
3977
3978       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
3979       then
3980         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
3981         use_ads=no
3982       fi
3983
3984   fi
3985
3986   if test x"$use_ads" = x"yes"; then
3987     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3988     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3989     if test x"$have_gssapi" = x"yes"; then
3990       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
3991     fi
3992   else
3993     if test x"$with_ads_support" = x"yes"; then
3994         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
3995     else
3996         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
3997     fi
3998     AC_REMOVE_DEFINE(HAVE_KRB5_H)
3999     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4000     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4001     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4002     KRB5_LIBS=""
4003     with_ads_support=no
4004   fi
4005   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4006   AC_MSG_RESULT([$use_ads])
4007
4008 LIBS="$ac_save_LIBS"
4009 fi
4010
4011 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4012 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4013
4014
4015 ########################################################
4016 # Compile with DNS Updates support?
4017
4018 with_dnsupdate_support=no
4019 AC_MSG_CHECKING([whether to enable DNS Updates support])
4020
4021 AC_ARG_WITH(dnsupdate,
4022 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default no)])],
4023 [ case "$withval" in
4024     yes|no)
4025         with_dnsupdate_support=$withval
4026         ;;
4027   esac ])
4028
4029 AC_MSG_RESULT($with_dnsupdate_support)
4030
4031 if test x"$with_dnsupdate_support" != x"no"; then
4032
4033   ################################################################
4034   # first test for Active Directory support being enabled
4035   #if test x"$with_ads_support" = x"no"; then
4036   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
4037   #             with_dnsupdate_support=no
4038   #fi           
4039   ##################################################################
4040   # then test for uuid.h (necessary to generate unique DNS keynames
4041   # (uuid.h is required for this test)
4042   AC_CHECK_HEADERS(uuid/uuid.h)
4043
4044   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4045         if test x"$with_dnsupdate_support" = x"yes"; then
4046          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4047         else
4048          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4049         fi
4050         with_dnsupdate_support=no
4051   fi
4052 fi
4053
4054 if test x"$with_dnsupdate_support" != x"no"; then
4055
4056   ########################################################
4057   # Now see if we can find the uuid libs in standard paths
4058   # On some systems, the uuid API is in libc, so we have to
4059   # be careful not to insert a spurious -luuid.
4060
4061   UUID_LIBS=""
4062   AC_LIBTESTFUNC(uuid, uuid_generate,
4063           [
4064             case " $LIBS " in
4065                 *\ -luuid\ *)
4066                 UUID_LIBS="-luuid"
4067                 SMB_REMOVE_LIB(uuid)
4068                 ;;
4069             esac
4070
4071             with_dnsupdate_support=yes
4072             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4073         ],
4074         [
4075             if test x"$with_dnsupdate_support" = x"yes"; then
4076                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4077             else
4078                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4079             fi
4080             with_dnsupdate_support=no
4081         ])
4082 fi
4083
4084 #################################################
4085 # check for automount support
4086 AC_MSG_CHECKING(whether to use automount)
4087 AC_ARG_WITH(automount,
4088 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4089 [ case "$withval" in
4090   yes)
4091     AC_MSG_RESULT(yes)
4092     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4093     ;;
4094   *)
4095     AC_MSG_RESULT(no)
4096     ;;
4097   esac ],
4098   AC_MSG_RESULT(no)
4099 )
4100
4101 #################################################
4102 # check for mount- and umount.cifs support
4103 CIFSMOUNT_PROGS=""
4104 INSTALL_CIFSMOUNT=""
4105 UNINSTALL_CIFSMOUNT=""
4106 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4107 AC_ARG_WITH(cifsmount,
4108 [AS_HELP_STRING([--with-cifsmount], [Include mount.cifs and umount.cifs (Linux only) support (default=yes)])],
4109 [ case "$withval" in
4110   no)
4111         AC_MSG_RESULT(no)
4112         ;;
4113   *)
4114         case "$host_os" in
4115         *linux*)
4116                 AC_MSG_RESULT(yes)
4117                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4118                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4119                 INSTALL_CIFSMOUNT="installcifsmount"
4120                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4121                 ;;
4122         *)
4123                 AC_MSG_ERROR(not on a linux system!)
4124                 ;;
4125         esac
4126     ;;
4127   esac ],
4128 [ case "$host_os" in
4129   *linux*)
4130         AC_MSG_RESULT(yes)
4131         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4132         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4133         INSTALL_CIFSMOUNT="installcifsmount"
4134         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4135         ;;
4136   *)
4137         AC_MSG_RESULT(no)
4138         ;;
4139   esac ]
4140 )
4141
4142 #################################################
4143 # check for cifs.upcall support
4144 AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
4145 CIFSUPCALL_PROGS=""
4146 INSTALL_CIFSUPCALL=""
4147 UNINSTALL_CIFSUPCALL=""
4148 AC_MSG_CHECKING(whether to build cifs.upcall)
4149 AC_ARG_WITH(cifsupcall,
4150 [AS_HELP_STRING([--with-cifsupcall], [Include cifs.upcall (Linux only) support (default=yes)])],
4151 [ case "$withval" in
4152   no)
4153         AC_MSG_RESULT(no)
4154         ;;
4155   *)
4156         case "$host_os" in
4157         *linux*)
4158                 if test x"$use_ads" != x"yes"; then
4159                         AC_MSG_ERROR(ADS support should be enabled for building cifs.upcall)
4160                 elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4161                         AC_MSG_ERROR(keyutils package is required for cifs.upcall)
4162                 else
4163                         AC_MSG_RESULT(yes)
4164                         AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4165                         CIFSUPCALL_PROGS="bin/cifs.upcall"
4166                         INSTALL_CIFSUPCALL="installcifsupcall"
4167                         UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4168                 fi
4169                 ;;
4170         *)
4171                 AC_MSG_ERROR(not on a linux system!)
4172                 ;;
4173         esac
4174     ;;
4175   esac ],
4176 [ case "$host_os" in
4177   *linux*)
4178         if test x"$use_ads" != x"yes"; then
4179                 AC_MSG_WARN(ADS support should be enabled for building cifs.upcall)
4180         elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4181                 AC_MSG_WARN(keyutils package is required for cifs.upcall)
4182         else
4183                 AC_MSG_RESULT(yes)
4184                 AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4185                 CIFSUPCALL_PROGS="bin/cifs.upcall"
4186                 INSTALL_CIFSUPCALL="installcifsupcall"
4187                 UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4188         fi
4189         ;;
4190   *)
4191         AC_MSG_RESULT(no)
4192         ;;
4193   esac ]
4194 )
4195
4196
4197 #################################################
4198 # Check for a PAM clear-text auth, accounts, password
4199 # and session support. Most PAM implementations keep their
4200 # headers in /usr/include/security. Darwin keeps its in
4201 # /usr/include/pam.
4202
4203 with_pam_for_crypt=no
4204 try_pam=no
4205 AC_MSG_CHECKING(whether to try PAM support)
4206 AC_ARG_WITH(pam,
4207 [AS_HELP_STRING([--with-pam], [Include PAM support (default=no)])],
4208 [ case "$withval" in
4209   yes|no)
4210     try_pam=$withval
4211     ;;
4212   esac