287189f09380e545f65dc44e5927071f935197ba
[kai/samba.git] / source3 / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.54 or above
4 AC_PREREQ(2.54)
5
6 AC_INIT([Samba],[3],[samba-technical@samba.org])
7
8 AC_CONFIG_SRCDIR([include/includes.h])
9 AC_CONFIG_HEADER(include/config.h)
10 AC_DEFINE(CONFIG_H_IS_FROM_SAMBA,1,[Marker for samba's config.h])
11
12 case "$PATH" in
13     */usr/ucb*)
14         AC_MSG_WARN([\$PATH contains /usr/ucb - build errors may follow])
15         ;;
16 esac 
17
18 builddir=`pwd`
19 AC_SUBST(builddir)
20
21 m4_include(m4/samba_version.m4)
22 m4_include(m4/check_path.m4)
23
24 AC_LIBREPLACE_CC_CHECKS
25
26 m4_include(../lib/talloc/libtalloc.m4)
27
28 LIBTALLOC_OBJ0=""
29 for obj in ${TALLOC_OBJ}; do
30         LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
31 done
32 AC_SUBST(LIBTALLOC_OBJ0)
33
34 # TODO: These should come from m4_include(lib/tdb/libtdb.m4)
35 # but currently this fails: things have to get merged from s4.
36 tdbdir="../lib/tdb"
37 AC_SUBST(tdbdir)
38 TDB_CFLAGS="-I${srcdir-.}/$tdbdir/include"
39 AC_SUBST(TDB_CFLAGS)
40
41 LIBTDB_OBJ0=""
42 for o in common/tdb.o common/dump.o common/transaction.o common/error.o \
43              common/traverse.o common/freelist.o common/freelistcheck.o \
44                  common/io.o common/lock.o common/open.o; 
45 do 
46         LIBTDB_OBJ0="$LIBTDB_OBJ0 $tdbdir/$o"
47 done
48
49 AC_SUBST(LIBTDB_OBJ0)
50 SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
51 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/replace"
52 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
53 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
54 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
55 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
56
57 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/popt"
58
59 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
60 if test "x${srcdir-.}" != "x."; then
61         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
62 fi
63
64 dnl Unique-to-Samba variables we'll be playing with.
65 AC_SUBST(SAMBA_CPPFLAGS)
66 AC_SUBST(SHELL)
67 AC_SUBST(LDSHFLAGS)
68 AC_SUBST(SONAMEFLAG)
69 AC_SUBST(SHLD)
70 AC_SUBST(MODULE_EXPORTS)
71 AC_SUBST(DSO_EXPORTS)
72 AC_SUBST(HOST_OS)
73 AC_SUBST(PICFLAG)
74 AC_SUBST(PIE_CFLAGS)
75 AC_SUBST(PIE_LDFLAGS)
76 AC_SUBST(RELRO_LDFLAGS)
77 AC_SUBST(SHLIBEXT)
78 AC_SUBST(INSTALLLIBCMD_SH)
79 AC_SUBST(INSTALLLIBCMD_A)
80 AC_SUBST(UNINSTALLLIBCMD_SH)
81 AC_SUBST(UNINSTALLLIBCMD_A)
82
83 AC_SUBST(INSTALL_LIBWBCLIENT)
84 AC_SUBST(UNINSTALL_LIBWBCLIENT)
85 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
86 AC_SUBST(LIBWBCLIENT_SHARED)
87 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
88 AC_SUBST(LIBWBCLIENT_STATIC)
89 AC_SUBST(LIBWBCLIENT_SOVER)
90 AC_SUBST(LIBWBCLIENT)
91 AC_SUBST(WINBIND_LIBS)
92
93 AC_SUBST(LIBSAMBAUTIL_SHARED)
94
95 AC_SUBST(PRINT_LIBS)
96 AC_SUBST(AUTH_LIBS)
97 AC_SUBST(ACL_LIBS)
98 AC_SUBST(PASSDB_LIBS)
99 AC_SUBST(IDMAP_LIBS)
100 AC_SUBST(KRB5_LIBS)
101 AC_SUBST(UUID_LIBS)
102 AC_SUBST(LDAP_LIBS)
103 AC_SUBST(GPEXT_LIBS)
104 AC_SUBST(PAM_MODULES)
105 AC_SUBST(INSTALL_PAM_MODULES)
106 AC_SUBST(UNINSTALL_PAM_MODULES)
107 AC_SUBST(NSS_MODULES)
108 AC_SUBST(EXTRA_BIN_PROGS)
109 AC_SUBST(CIFSMOUNT_PROGS)
110 AC_SUBST(INSTALL_CIFSMOUNT)
111 AC_SUBST(UNINSTALL_CIFSMOUNT)
112 AC_SUBST(CIFSUPCALL_PROGS)
113 AC_SUBST(INSTALL_CIFSUPCALL)
114 AC_SUBST(UNINSTALL_CIFSUPCALL)
115 AC_SUBST(EXTRA_SBIN_PROGS)
116 AC_SUBST(EXTRA_ALL_TARGETS)
117 AC_SUBST(CONFIG_LIBS)
118 AC_SUBST(NSCD_LIBS)
119
120 # compile with optimization and without debugging by default, but
121 # allow people to set their own preference.
122 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
123 # if it has no value.  This prevent *very* large debug binaries from occurring
124 # by default.
125 if test "x$CFLAGS" = x; then
126   CFLAGS="-O"
127 fi
128 if test "x$debug" = "xyes" ; then
129         CFLAGS="${CFLAGS} -g"
130 else
131         CFLAGS="${CFLAGS} -O"
132 fi
133
134 m4_include(../lib/socket_wrapper/config.m4)
135 m4_include(../lib/nss_wrapper/config.m4)
136
137 m4_include(m4/swat.m4)
138
139 # Probe the gcc version for extra CFLAGS. We always stash these in
140 # DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
141 # Makefile edit, avoiding the need to re-run configure.
142 if test x"$ac_cv_prog_gcc" = x"yes" ; then
143         DEVELOPER_CFLAGS="-g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
144         # Add -Wdeclaration-after-statement if compiler supports it
145         AC_CACHE_CHECK(
146           [that the C compiler understands -Wdeclaration-after-statement],
147           samba_cv_HAVE_Wdeclaration_after_statement, [
148           AC_TRY_RUN_STRICT([
149             int main(void)
150             {
151                 return 0;
152             }],[-Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
153             samba_cv_HAVE_Wdeclaration_after_statement=yes,
154             samba_cv_HAVE_Wdeclaration_after_statement=no,
155             samba_cv_HAVE_Wdeclaration_after_statement=cross)
156        ])
157
158         if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
159             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
160         fi
161
162         #-Werror-implicit-function-declaration
163         AC_CACHE_CHECK(
164           [that the C compiler understands -Werror-implicit-function-declaration],
165           samba_cv_HAVE_Werror_implicit_function_declaration, [
166           AC_TRY_RUN_STRICT([
167             int main(void)
168             {
169                 return 0;
170             }],[-Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
171             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
172             samba_cv_HAVE_Werror_implicit_function_declaration=no,
173             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
174        ])
175        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
176             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
177        fi
178
179         # krb5developer is like developer, except we don't get
180         # -Wstrict-prototypes.
181        if test x"$krb5_developer" != x"$yes" ; then
182             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
183        fi
184
185        if test x"$picky_developer" = x"yes"; then
186             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Werror"
187        fi
188 fi
189
190 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
191
192 if test "x$enable_dmalloc" = xyes
193 then
194         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
195         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
196                   [Define to check invariants around some common functions])
197         LIBS="$LIBS -ldmalloc"  
198 fi
199
200 #################################################
201 # check for a shared memory profiling support
202 AC_MSG_CHECKING(whether to use profiling)
203 AC_ARG_WITH(profiling-data,
204 [AS_HELP_STRING([--with-profiling-data], [Include gathering source code profile information (default=no)])],
205 [ case "$withval" in
206   yes)
207     AC_MSG_RESULT(yes)
208     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
209     samba_cv_WITH_PROFILE=yes
210     ;;
211   *)
212     AC_MSG_RESULT(no)
213     samba_cv_WITH_PROFILE=no
214     ;;
215   esac ],
216   AC_MSG_RESULT(no)
217 )
218
219 dnl Checks for programs.
220
221 AC_PROG_INSTALL
222 AC_PROG_AWK
223 AC_PATH_PROG(PERL, perl)
224
225 AC_CHECK_TOOL(AR, ar)
226
227 dnl Check if we use GNU ld
228 LD=ld
229 AC_PROG_LD_GNU
230
231 dnl Certain versions of GNU ld the default is not to have the
232 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
233 dnl warnings when building modules.
234 if test "$ac_cv_prog_gnu_ld" = "yes"; then
235         ac_cv_gnu_ld_version=`$LD -v 2>/dev/null | head -1`
236         AC_MSG_CHECKING(GNU ld release date)
237         changequote(,)dnl
238         ac_cv_gnu_ld_date=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)[-]*\([01][0-9]\)[-]*\([0-3][0-9]\).*$,\1\2\3,p'`
239         changequote([,])dnl
240         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
241         if test -n "$ac_cv_gnu_ld_date"; then
242         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
243                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
244         fi
245         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
246                 ac_cv_gnu_ld_version_script=yes
247         fi
248         else
249            AC_MSG_CHECKING(GNU ld release version)
250            changequote(,)dnl
251            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
252            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
253            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
254            changequote([,])dnl
255            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
256            AC_MSG_CHECKING(GNU ld release version major)
257            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
258            AC_MSG_CHECKING(GNU ld release version minor)
259            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
260            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
261              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
262            fi
263            if test "$ac_cv_gnu_ld_vernr_major" -gt 2 || test "$ac_cv_gnu_ld_vernr_major"=2 && test "$ac_cv_gnu_ld_vernr_minor" -ge 12; then
264              ac_cv_gnu_ld_version_script=yes
265            fi
266         fi
267 fi
268
269 dnl look for executable suffix
270 AC_EXEEXT
271
272 dnl Check if C compiler understands -c and -o at the same time
273 AC_PROG_CC_C_O
274 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
275       BROKEN_CC=
276 else
277       BROKEN_CC=#
278 fi
279 AC_SUBST(BROKEN_CC)
280
281 dnl Check if the C compiler understands -Werror
282 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
283  AC_TRY_RUN_STRICT([
284   int main(void)
285   {
286         return 0;
287   }],[-Werror],[$CPPFLAGS],[$LDFLAGS],
288   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
289 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
290    Werror_FLAGS="-Werror"
291 else
292 dnl Check if the C compiler understands -w2
293 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
294  AC_TRY_RUN_STRICT([
295   int main(void)
296   {
297         return 0;
298   }],[-w2],[$CPPFLAGS],[$LDFLAGS],
299   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
300 if test x"$samba_cv_HAVE_w2" = x"yes"; then
301    Werror_FLAGS="-w2"
302 else
303 dnl Check if the C compiler understands -errwarn
304 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
305   AC_TRY_RUN_STRICT([
306    int main(void)
307    {
308         return 0;
309    }],[-errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
310    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
311 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
312    Werror_FLAGS="-errwarn=%all"
313 fi
314 fi
315 fi
316
317 ############################################
318 # check if the compiler can handle negative enum values
319 # and don't truncate the values to INT_MAX
320 # a runtime test is needed here
321 AC_SUBST(PIDL_ARGS)
322 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
323     AC_TRY_RUN(
324 [
325         #include <stdio.h>
326         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
327         int main(void) {
328                 enum negative_values v1 = NEGATIVE_VALUE;
329                 unsigned v2 = NEGATIVE_VALUE;
330
331                 if (v1 != 0xFFFFFFFF) {
332                         printf("%u != 0xFFFFFFFF\n", v1);
333                         return 1;
334                 }
335                 if (v2 != 0xFFFFFFFF) {
336                         printf("%u != 0xFFFFFFFF\n", v2);
337                         return 1;
338                 }
339
340                 return 0;
341         }
342 ],
343         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv__CC_NEGATIVE_ENUM_VALUES=no)])
344 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
345         AC_MSG_WARN([using --uint-enums for pidl])
346         PIDL_ARGS="$PIDL_ARGS --uint-enums"
347 fi
348
349 dnl Figure out the flags to support named structure initializers
350
351 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
352
353 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
354 AC_MSG_CHECKING(uname -s)
355 AC_MSG_RESULT(${UNAME_S})
356
357 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
358 AC_MSG_CHECKING(uname -r)
359 AC_MSG_RESULT(${UNAME_R})
360
361 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
362 AC_MSG_CHECKING(uname -m)
363 AC_MSG_RESULT(${UNAME_M})
364
365 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
366 AC_MSG_CHECKING(uname -p)
367 AC_MSG_RESULT(${UNAME_P})
368
369 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
370 AC_MSG_CHECKING(uname -i)
371 AC_MSG_RESULT(${UNAME_I})
372
373 dnl Add #include for broken IRIX header files
374   case "$host_os" in
375         *irix6*)
376                 #TODO add to libreplace
377                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
378                         dnl Fix sensible defaults for MIPSPro compilers. The
379                         dnl error numbers are valid for the 7.3 compilers,
380                         dnl hopefully also valid for the 7.4 series.
381                         dnl
382                         dnl Bugzilla 3801. Force an error on warning 1035
383                         dnl so we don't incorrectly detect stdint.h. This
384                         dnl warning is emitted for #error directives.
385                         CFLAGS="$CFLAGS -diag_error 1035"
386                         dnl 1209: Controlling expression is constant
387                         dnl 1174: Function foo declared but never referenced
388                         dnl 3201: Parameter foo was never referenced
389                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
390                 fi
391         ;;
392 esac
393
394 DYNEXP=
395 AC_SUBST(DYNEXP)
396
397 dnl Add modules that have to be built by default here
398 dnl These have to be built static:
399 default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsarpc rpc_samr rpc_winreg rpc_initshutdown rpc_dssetup rpc_wkssvc rpc_svcctl2 rpc_ntsvcs2 rpc_netlogon rpc_netdfs rpc_srvsvc rpc_spoolss rpc_eventlog2 auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin auth_netlogond vfs_default nss_info_template"
400
401 dnl These are preferably build shared, and static if dlopen() is not available
402 default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs vfs_shadow_copy vfs_shadow_copy2 charset_CP850 charset_CP437 auth_script vfs_readahead vfs_xattr_tdb vfs_streams_xattr vfs_acl_xattr vfs_acl_tdb vfs_smb_traffic_analyzer"
403
404 if test "x$developer" = xyes; then
405    default_static_modules="$default_static_modules rpc_rpcecho"
406    default_shared_modules="$default_shared_modules charset_weird"
407 fi
408
409 #
410 # Config CPPFLAG settings for strange OS's that must be set
411 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
412 # case statement; its first reference must be unconditional.
413 #
414 case "$host_os" in
415     *hpux*)
416 #
417 # Defines needed for HPUX support.
418 # HPUX has bigcrypt but (sometimes?) doesn't use it for
419 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
420 #
421       case `uname -r` in
422                 *9*|*10*|*11)
423                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
424                 ;;
425       esac
426       ;;
427
428 #
429 # CRAY Unicos has broken const handling
430        *unicos*)
431           AC_MSG_RESULT([disabling const])
432           CPPFLAGS="$CPPFLAGS -Dconst="
433           ;;
434         
435 #
436 # AIX4.x doesn't even admit to having large
437 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
438 #
439     *aix4*)
440           AC_MSG_RESULT([enabling large file support])
441       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
442           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
443       ;;
444 #
445 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
446 # to the existance of large files..
447 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
448 # recommendations on large file support, however it makes the
449 # compile work using gcc 2.7 and 2.8, whereas using the Sun
450 # recommendation makes the compile fail on gcc2.7. JRA.
451 #
452 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
453 #
454         *solaris*)
455                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
456                 case `uname -r` in
457                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
458                                 AC_MSG_RESULT([no large file support])
459                                 ;;
460                         5.*)
461                         AC_MSG_RESULT([enabling large file support])
462                         if test "$ac_cv_prog_gcc" = yes; then
463                                 ${CC-cc} -v >conftest.c 2>&1
464                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
465                                 rm -fr conftest.c
466                                 case "$ac_cv_gcc_compiler_version_number" in
467                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
468                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
469                                                 LDFLAGS="$LDFLAGS -lthread"
470                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
471                                                 ;;
472                                         *)
473                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
474                                                 LDFLAGS="$LDFLAGS -lthread"
475                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
476                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
477                                                 ;;
478                                 esac
479                         else
480                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
481                                 LDFLAGS="$LDFLAGS -lthread"
482                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
483                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
484                         fi
485                         ;;
486                 esac
487                 ;;
488 #
489 # IRIX uses SYSV printing.  Make sure to set that here
490 #
491         *irix*)
492                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
493                 ;;
494         *freebsd*|*dragonfly*)
495                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
496                 ;;
497 #
498 # VOS may need to have POSIX support and System V compatibility enabled.
499 #
500     *vos*)
501     case "$CPPFLAGS" in
502           *-D_POSIX_C_SOURCE*)
503                 ;;
504           *)
505                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
506                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
507                 ;;
508     esac
509     case "$CPPFLAGS" in
510           *-D_SYSV*|*-D_SVID_SOURCE*)
511                 ;;
512           *)
513                 CPPFLAGS="$CPPFLAGS -D_SYSV"
514                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
515     esac
516     ;;
517 #
518 # Tests needed for SINIX large file support.
519 #
520     *sysv4*)
521       if test $host = mips-sni-sysv4 ; then
522         AC_MSG_CHECKING([for LFS support])
523         old_CPPFLAGS="$CPPFLAGS"
524         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
525         AC_TRY_RUN([
526 #include <unistd.h>
527 main () {
528 #if _LFS64_LARGEFILE == 1
529 exit(0);
530 #else
531 exit(1);
532 #endif
533 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
534         CPPFLAGS="$old_CPPFLAGS"
535         if test x$SINIX_LFS_SUPPORT = xyes ; then
536           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
537                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
538           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
539           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
540           LIBS="`getconf LFS64_LIBS` $LIBS"
541         fi
542       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
543       fi
544     ;;
545
546 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
547 #
548     *linux*)
549         AC_MSG_CHECKING([for LFS support])
550         old_CPPFLAGS="$CPPFLAGS"
551         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
552        AC_TRY_RUN([
553 #include <unistd.h>
554 #include <sys/utsname.h>
555 #include <string.h>
556 #include <stdlib.h>
557 main() {
558 #if _LFS64_LARGEFILE == 1
559        struct utsname uts;
560        char *release;
561        int major, minor;
562
563        /* Ensure this is glibc 2.2 or higher */
564 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
565        int libc_major = __GLIBC__;
566        int libc_minor = __GLIBC_MINOR__;
567
568        if (libc_major < 2)
569               exit(1);
570        if (libc_minor < 2)
571               exit(1);
572 #endif
573
574        /* Ensure this is kernel 2.4 or higher */
575
576        uname(&uts);
577        release = strdup(uts.release);
578        major = atoi(strsep(&release, "."));
579        minor = atoi(strsep(&release, "."));
580
581        if (major > 2 || (major == 2 && minor > 3))
582                exit(0);
583        exit(1);
584 #else
585        exit(1);
586 #endif
587 }
588 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
589         CPPFLAGS="$old_CPPFLAGS"
590         if test x$LINUX_LFS_SUPPORT = xyes ; then
591                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
592                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
593                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
594                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
595         fi
596         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
597         ;;
598
599 #
600 # MacOS X is the *only* system that uses compose character in utf8. This
601 # is so horribly broken....
602 #
603     *darwin*)
604         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
605
606 # Add a system specific charset module.
607         default_shared_modules="$default_shared_modules charset_macosxfs"
608
609         ;;
610     *hurd*)
611         AC_MSG_CHECKING([for LFS support])
612         old_CPPFLAGS="$CPPFLAGS"
613         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
614         AC_TRY_RUN([
615 #include <unistd.h>
616 main () {
617 #if _LFS64_LARGEFILE == 1
618 exit(0);
619 #else
620 exit(1);
621 #endif
622 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
623         CPPFLAGS="$old_CPPFLAGS"
624         if test x$GLIBC_LFS_SUPPORT = xyes ; then
625           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
626                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
627           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
628         fi
629       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
630     ;;
631
632 esac
633
634 SAVE_CPPFLAGS="${CPPFLAGS}"
635 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
636
637 AC_LIBREPLACE_BROKEN_CHECKS
638 AC_LIBREPLACE_NETWORK_CHECKS
639
640 CPPFLAGS="${SAVE_CPPFLAGS}"
641
642 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
643
644 LIBREPLACE_OBJS=""
645 for obj in ${LIBREPLACEOBJ}; do
646         LIBREPLACE_OBJS="${LIBREPLACE_OBJS} ${LIBREPLACE_DIR}/${obj}"
647 done
648 AC_SUBST(LIBREPLACE_OBJS)
649
650 # add -ldl to the global LIBS
651 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
652 AUTH_LIBS="${AUTH_LIBS} ${CRYPT_LIBS}"
653
654
655 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
656 AC_CHECK_HEADERS(unistd.h grp.h sys/id.h memory.h alloca.h)
657 AC_CHECK_HEADERS(limits.h float.h pthread.h libintl.h)
658 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
659 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h)
660 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
661 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
662 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
663 AC_CHECK_HEADERS(sys/sysmacros.h)
664 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
665 AC_CHECK_HEADERS(langinfo.h locale.h)
666 AC_CHECK_HEADERS(xfs/libxfs.h)
667 AC_CHECK_HEADERS(netgroup.h)
668
669 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
670 #if HAVE_RPC_RPC_H
671 #include <rpc/rpc.h>
672 #endif
673 ]])
674
675 ## These fail to compile on IRIX so just check for their presence
676 AC_CHECK_HEADERS(sys/mode.h,,,)
677
678 # Look for Darwin headers
679 old_CPPFLAGS="$CPPFLAGS"
680 CPPFLAGS="-Iinclude $CPPFLAGS"
681 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
682 CPPFLAGS="$old_CPPFLAGS"
683
684 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
685 # subdirectory of headers.
686 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
687
688 # check for linux on amd64 since valgrind is not quite there yet
689 case "$host_os" in
690         *linux*)
691                 case "$UNAME_P" in
692                         *x86_64*)
693                                 AC_DEFINE(HAVE_64BIT_LINUX,1,[Whether we are running on 64bit linux])
694                                 ;;
695                 esac
696                 ;;
697 esac
698
699
700 #
701 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
702 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
703 #
704 case "$host_os" in
705     *hpux*)
706                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
707                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
708                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
709                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
710                 fi
711         ;;
712 esac
713 AC_CHECK_HEADERS(shadow.h)
714 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
715 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
716
717 AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
718 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
719
720 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
721
722 # For experimental utmp support (lastlog on some BSD-like systems)
723 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
724
725 AC_CHECK_SIZEOF(int,cross)
726 AC_CHECK_SIZEOF(long,cross)
727 AC_CHECK_SIZEOF(long long,cross)
728 AC_CHECK_SIZEOF(short,cross)
729
730 AC_C_CONST
731 AC_C_INLINE
732 AC_C_BIGENDIAN
733 AC_C_CHAR_UNSIGNED
734
735 AC_TYPE_SIGNAL
736 AC_TYPE_UID_T
737 AC_TYPE_MODE_T
738 AC_TYPE_OFF_T
739 AC_TYPE_SIZE_T
740 AC_TYPE_PID_T
741 AC_STRUCT_ST_RDEV
742 AC_DIRENT_D_OFF
743 AC_CHECK_TYPE(ssize_t, int)
744 AC_CHECK_TYPE(wchar_t, unsigned short)
745
746 ############################################
747 # for cups support we need libcups, and a handful of header files
748
749 AC_ARG_ENABLE(cups,
750 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
751
752 if test x$enable_cups != xno; then
753         AC_PATH_PROG(CUPS_CONFIG, cups-config)
754
755         if test "x$CUPS_CONFIG" != x; then
756
757                 ac_save_CFLAGS=$CFLAGS
758                 ac_save_LDFLAGS=$LDFLAGS
759                 ac_save_PRINT_LIBS=$PRINT_LIBS
760                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
761                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
762                 PRINT_LIBS="$PRINT_LIBS `$CUPS_CONFIG --libs`"
763                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
764                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
765                         x"$ac_cv_header_cups_language_h" = xyes; then
766                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
767                         samba_cv_HAVE_CUPS=yes
768                 else
769                         AC_MSG_WARN([cups-config around but cups-devel not installed])
770                         CFLAGS=$ac_save_CFLAGS
771                         LDFLAGS=$ac_save_LDFLAGS
772                         PRINT_LIBS=$ac_save_PRINT_LIBS
773                 fi
774
775         elif test x"$enable_cups" = x"yes"; then
776                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
777         fi
778 fi
779
780 AC_ARG_ENABLE(iprint,
781 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
782
783 if test x$enable_iprint != xno; then
784         if test x"$samba_cv_HAVE_CUPS" = xyes; then
785                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
786         elif test x"$enable_iprint" = x"yes"; then
787                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
788         fi
789 fi
790
791 ############################################
792 # check if the compiler will optimize out function calls
793 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
794     AC_TRY_LINK([
795 #include <stdio.h>],
796 [
797                 if (0) {
798                    this_function_does_not_exist();
799                 } else {
800                   return 1;
801                 }
802
803 ],
804         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
805 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
806    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
807 fi
808
809 #############################################
810 # check for fd passing struct via msg_control
811 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
812     AC_TRY_COMPILE([
813 #include <sys/types.h>
814 #include <stdlib.h>
815 #include <stddef.h>
816 #include <sys/socket.h>
817 #include <sys/un.h>],
818 [
819         struct msghdr msg;
820         union {
821               struct cmsghdr cm;
822               char control[CMSG_SPACE(sizeof(int))];
823         } control_un;
824         msg.msg_control = control_un.control;
825         msg.msg_controllen = sizeof(control_un.control);
826 ],
827         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
828 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
829    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
830              [If we can use msg_control for passing file descriptors])
831 fi
832
833 #############################################
834 # check for fd passing struct via msg_acctrights
835 AC_CACHE_CHECK([for fd passing via msg_acctrights],
836                 samba_cv_msghdr_msg_acctrights, [
837     AC_TRY_COMPILE([
838 #include <sys/types.h>
839 #include <stdlib.h>
840 #include <stddef.h>
841 #include <sys/socket.h>
842 #include <sys/un.h>],
843 [
844         struct msghdr msg;
845         int fd;
846         msg.msg_acctrights = (caddr_t) &fd;
847         msg.msg_acctrightslen = sizeof(fd);
848 ],
849         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
850 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
851    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
852              [If we can use msg_acctrights for passing file descriptors])
853 fi
854
855 AC_CHECK_FUNCS(dirfd)
856 if test x"$ac_cv_func_dirfd" = x"yes"; then
857         default_shared_modules="$default_shared_modules vfs_syncops"
858 fi
859
860 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
861     AC_TRY_COMPILE([
862 #include <sys/types.h>
863 #if STDC_HEADERS
864 #include <stdlib.h>
865 #include <stddef.h>
866 #endif
867 #include <signal.h>],[struct sigevent s;],
868         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
869 if test x"$samba_cv_struct_sigevent" = x"yes"; then
870    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
871    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
872         [#include <signal.h>])
873 fi
874
875 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
876     AC_TRY_COMPILE([
877 #include <sys/types.h>
878 #if STDC_HEADERS
879 #include <stdlib.h>
880 #include <stddef.h>
881 #endif
882 #if TIME_WITH_SYS_TIME
883 # include <sys/time.h>
884 # include <time.h>
885 #else
886 # if HAVE_SYS_TIME_H
887 #  include <sys/time.h>
888 # else
889 #  include <time.h>
890 # endif
891 #endif
892 ],[struct timespec ts;],
893         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
894 if test x"$samba_cv_struct_timespec" = x"yes"; then
895    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
896 fi
897
898 # and glibc has setresuid under linux but the function does
899 # nothing until kernel 2.1.44! very dumb.
900 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
901     AC_TRY_RUN([#include <errno.h>
902 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
903         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
904 if test x"$samba_cv_have_setresuid" = x"yes"; then
905     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
906 fi
907
908 # Do the same check for setresguid...
909 #
910 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
911     AC_TRY_RUN([#include <unistd.h>
912 #include <errno.h>
913 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
914         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
915 if test x"$samba_cv_have_setresgid" = x"yes"; then
916     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
917 fi
918
919 AC_FUNC_MEMCMP
920
921 ###############################################
922 # Readline included by default unless explicitly asked not to
923 test "${with_readline+set}" != "set" && with_readline=yes
924
925 # test for where we get readline() from
926 AC_MSG_CHECKING(whether to use readline)
927 AC_ARG_WITH(readline,
928 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
929 [  case "$with_readline" in
930   yes)
931     AC_MSG_RESULT(yes)
932
933     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
934     AC_CHECK_HEADERS(readline/history.h)
935
936     AC_CHECK_HEADERS(readline.h readline/readline.h,[
937       for termlib in ncurses curses termcap terminfo termlib tinfo; do
938        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
939       done
940       AC_CHECK_LIB(readline, rl_callback_handler_install,
941        [TERMLIBS="-lreadline $TERMLIBS"
942        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
943        break], [TERMLIBS=], $TERMLIBS)])
944     ;;
945   no)
946     AC_MSG_RESULT(no)
947     ;;
948   *)
949     AC_MSG_RESULT(yes)
950
951     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
952     # alternate readline path
953     _ldflags=${LDFLAGS}
954     _cppflags=${CPPFLAGS}
955
956     # Add additional search path
957     LDFLAGS="-L$with_readline/lib $LDFLAGS"
958     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
959
960     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
961     AC_CHECK_HEADERS(readline/history.h)
962
963     AC_CHECK_HEADERS(readline.h readline/readline.h,[
964       for termlib in ncurses curses termcap terminfo termlib; do
965        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
966       done
967       AC_CHECK_LIB(readline, rl_callback_handler_install,
968        [TERMLDFLAGS="-L$with_readline/lib"
969        TERMCPPFLAGS="-I$with_readline/include"
970        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
971        TERMLIBS="-lreadline $TERMLIBS"
972        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
973        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
974
975     LDFLAGS=$_ldflags
976     ;;
977   esac],
978   AC_MSG_RESULT(no)
979 )
980 AC_SUBST(TERMLIBS)
981 AC_SUBST(TERMLDFLAGS)
982
983 # The readline API changed slightly from readline3 to readline4, so
984 # code will generate warnings on one of them unless we have a few
985 # special cases.
986 AC_CHECK_LIB(readline, rl_completion_matches,
987              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
988                         [Do we have rl_completion_matches?])],
989              [],
990              [$TERMLIBS])
991
992 # not all readline libs have rl_event_hook or history_list
993 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
994 AC_CHECK_LIB(readline, history_list,
995              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
996              [],
997              [$TERMLIBS])
998
999 ###############################################
1000 # test for where we get yp_get_default_domain() from
1001 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1002 AC_CHECK_FUNCS(yp_get_default_domain)
1003
1004 # Check if we have execl, if not we need to compile smbrun.
1005 AC_CHECK_FUNCS(execl)
1006 if test x"$ac_cv_func_execl" = x"no"; then
1007     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1008 fi
1009
1010 AC_CHECK_FUNCS(getcwd fchown chmod fchmod mknod mknod64)
1011 AC_CHECK_FUNCS(strtol)
1012 AC_CHECK_FUNCS(fstat strchr chflags)
1013 AC_CHECK_FUNCS(getrlimit fsync fdatasync setpgid)
1014 AC_CHECK_FUNCS(setsid glob strpbrk crypt16 getauthuid)
1015 AC_CHECK_FUNCS(sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1016 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf)
1017 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf stat64 fstat64)
1018 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt lseek64 ftruncate64)
1019 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam)
1020 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1021 AC_CHECK_FUNCS(getpwent_r)
1022 AC_CHECK_FUNCS(getdents64)
1023 AC_CHECK_FUNCS(setenv strcasecmp fcvt fcvtl)
1024 AC_CHECK_FUNCS(syslog vsyslog timegm)
1025 AC_CHECK_FUNCS(setlocale nl_langinfo)
1026 AC_CHECK_FUNCS(nanosleep)
1027 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1028 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1029 AC_CHECK_HEADERS(sys/mman.h)
1030 # setbuffer, shmget, shm_open are needed for smbtorture
1031 AC_CHECK_FUNCS(shmget shm_open)
1032 AC_CHECK_FUNCS(gettext dgettext)
1033
1034 # Find a method of generating a stack trace
1035 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1036 # libexecinfo provides backtrace_symbols on FreeBSD
1037 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
1038 AC_CHECK_FUNCS(backtrace_symbols)
1039 AC_CHECK_LIB(exc, trace_back_stack)
1040
1041 printf "%s" "checking for GPFS GPL libs... "
1042 save_LIBS="$LIBS"
1043 LIBS="$LIBS -lgpfs_gpl"
1044 AC_TRY_LINK([#include <gpfs_gpl.h>],
1045           [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
1046           samba_cv_HAVE_GPFS=yes,
1047           samba_cv_HAVE_GPFS=no)
1048 echo $samba_cv_HAVE_GPFS
1049 if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
1050     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
1051     default_shared_modules="$default_shared_modules vfs_gpfs"
1052 fi
1053 LIBS="$save_LIBS"
1054
1055 # Note that all the libunwind symbols in the API are defined to internal
1056 # platform-specific version, so we must include libunwind.h before checking
1057 # any of them.
1058 AC_MSG_CHECKING([for libunwind])
1059 save_LIBS=$LIBS
1060
1061 UNWIND_ARCH="unknown"
1062 if test x"$UNAME_I" != x"unknown"; then
1063         UNWIND_ARCH="$UNAME_I"
1064 elif test x"$UNAME_M" != x"unknown"; then
1065         UNWIND_ARCH="$UNAME_M"
1066 elif test x"$UNAME_P" != x"unknown"; then
1067         UNWIND_ARCH="$UNAME_P"
1068 fi
1069
1070 case "$UNWIND_ARCH" in
1071         unknown)
1072                 # This probably won't link without
1073                 # the platform-specific libunwind.
1074                 LIBS="$LIBS -lunwind"
1075                 ;;
1076         i386|i586|i686)
1077                 # Add the platform-specific libunwind module.
1078                 LIBS="$LIBS -lunwind -lunwind-x86"
1079                 ;;
1080         *)
1081                 # Add the platform-specific libunwind module.
1082                 # based on uname -i, uname -m or uname -p
1083                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1084                 ;;
1085 esac
1086
1087 AC_TRY_LINK(
1088     [
1089 #ifdef HAVE_LIBUNWIND_H
1090 #include <libunwind.h>
1091 #endif
1092     ],
1093     [
1094         unw_context_t ctx; unw_cursor_t cur;
1095         char buf[256]; unw_word_t off;
1096         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1097         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1098     ],
1099     [
1100         AC_MSG_RESULT(yes)
1101         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1102
1103         # If we have libunwind, test whether we also have libunwind-ptrace
1104         # which would let us unwind arbitrary processes.
1105         save_LIBS=$LIBS
1106         AC_CHECK_HEADERS(libunwind-ptrace.h)
1107         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1108             [
1109                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1110                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1111                     [Whether libunwind-ptrace.a is available.])
1112             ],
1113             [ LIBUNWIND_PTRACE="" ])
1114
1115         LIBS=$save_LIBS
1116     ],
1117     [
1118         AC_MSG_RESULT(no)
1119         LIBS=$save_LIBS
1120     ])
1121
1122 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1123 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1124     AC_CHECK_HEADERS(sys/ptrace.h)
1125     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1126     AC_TRY_LINK(
1127             [
1128 #if HAVE_SYS_TYPES_H
1129 #include <sys/types.h>
1130 #endif
1131 #if HAVE_SYS_PTRACE_H
1132 #include <sys/ptrace.h>
1133 #endif
1134             ],
1135             [
1136                 int main(int argc, const char ** argv)
1137                 {
1138                         pid_t me = (pid_t)-1;
1139                         ptrace(PTRACE_ATTACH, me, 0, 0);
1140                         ptrace(PTRACE_DETACH, me, 0, 0);
1141                         return 0;
1142                 }
1143             ],
1144             [
1145                 AC_MSG_RESULT(yes)
1146                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1147                     [Whether the Linux ptrace(2) interface is available.])
1148             ],
1149             [
1150                 AC_MSG_RESULT(no)
1151                 LIBUNWIND_PTRACE=""
1152             ])
1153 fi
1154
1155 AC_SUBST(LIBUNWIND_PTRACE)
1156
1157 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1158 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1159 AC_CHECK_FUNCS(__getcwd _getcwd)
1160 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1161 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1162 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1163 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1164 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1165 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1166 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1167 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1168 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1169 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1170 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1171 AC_CHECK_FUNCS(prctl)
1172
1173 AC_TRY_COMPILE([
1174 #ifdef HAVE_SYS_PRCTL_H
1175 #include <sys/prctl.h>
1176 #endif
1177 ],
1178 [int i; i = prtcl(0); ],
1179 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1180
1181 #
1182 #
1183 #
1184 case "$host_os" in
1185     *linux*)
1186        # glibc <= 2.3.2 has a broken getgrouplist
1187        AC_TRY_RUN([
1188 #include <unistd.h>
1189 #include <sys/utsname.h>
1190 main() {
1191        /* glibc up to 2.3 has a broken getgrouplist */
1192 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1193        int libc_major = __GLIBC__;
1194        int libc_minor = __GLIBC_MINOR__;
1195
1196        if (libc_major < 2)
1197               exit(1);
1198        if ((libc_major == 2) && (libc_minor <= 3))
1199               exit(1);
1200 #endif
1201        exit(0);
1202 }
1203 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1204        if test x"$linux_getgrouplist_ok" = x"yes"; then
1205           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1206        fi
1207        ;;
1208     *)
1209        AC_CHECK_FUNCS(getgrouplist)
1210        ;;
1211 esac
1212
1213 #
1214 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1215 #
1216
1217 if test x$ac_cv_func_stat64 = xno ; then
1218   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1219   AC_TRY_LINK([
1220 #if defined(HAVE_UNISTD_H)
1221 #include <unistd.h>
1222 #endif
1223 #include <sys/stat.h>
1224 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1225   AC_MSG_RESULT([$ac_cv_func_stat64])
1226   if test x$ac_cv_func_stat64 = xyes ; then
1227     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1228   fi
1229 fi
1230
1231 if test x$ac_cv_func_lstat64 = xno ; then
1232   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1233   AC_TRY_LINK([
1234 #if defined(HAVE_UNISTD_H)
1235 #include <unistd.h>
1236 #endif
1237 #include <sys/stat.h>
1238 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1239   AC_MSG_RESULT([$ac_cv_func_lstat64])
1240   if test x$ac_cv_func_lstat64 = xyes ; then
1241     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1242   fi
1243 fi
1244
1245 if test x$ac_cv_func_fstat64 = xno ; then
1246   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1247   AC_TRY_LINK([
1248 #if defined(HAVE_UNISTD_H)
1249 #include <unistd.h>
1250 #endif
1251 #include <sys/stat.h>
1252 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1253   AC_MSG_RESULT([$ac_cv_func_fstat64])
1254   if test x$ac_cv_func_fstat64 = xyes ; then
1255     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1256   fi
1257 fi
1258
1259 #################################################
1260 # Check whether struct stat has timestamps with sub-second resolution.
1261 # At least IRIX and Solaris have these.
1262 #
1263 # We check that
1264 #       all of st_mtim, st_atim and st_ctim exist
1265 #       all of the members are in fact of type struct timespec
1266 #
1267 # There is some conflicting standards weirdness about whether we should use
1268 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1269 # prefer struct timespec.
1270
1271 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_cv_stat_hires,
1272     [
1273         AC_TRY_COMPILE(
1274             [
1275 #if TIME_WITH_SYS_TIME
1276 # include <sys/time.h>
1277 # include <time.h>
1278 #else
1279 # if HAVE_SYS_TIME_H
1280 #  include <sys/time.h>
1281 # else
1282 #  include <time.h>
1283 # endif
1284 #endif
1285 #ifdef HAVE_SYS_STAT_H
1286 #include <sys/stat.h>
1287 #endif
1288             ],
1289             [
1290                 struct timespec t;
1291                 struct stat s = {0};
1292                 t.tv_sec = s.st_mtim.tv_sec;
1293                 t.tv_nsec = s.st_mtim.tv_nsec;
1294                 t.tv_sec = s.st_ctim.tv_sec;
1295                 t.tv_nsec = s.st_ctim.tv_nsec;
1296                 t.tv_sec = s.st_atim.tv_sec;
1297                 t.tv_nsec = s.st_atim.tv_nsec;
1298             ],
1299             samba_cv_stat_hires=yes, samba_cv_stat_hires=no)
1300     ])
1301
1302 if test x"$samba_cv_stat_hires" = x"yes" ; then
1303     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1304     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1305     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1306     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1307             [whether struct stat has sub-second timestamps])
1308 fi
1309
1310 AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec], samba_cv_stat_hires_notimespec,
1311     [
1312         AC_TRY_COMPILE(
1313             [
1314 #if TIME_WITH_SYS_TIME
1315 # include <sys/time.h>
1316 # include <time.h>
1317 #else
1318 # if HAVE_SYS_TIME_H
1319 #  include <sys/time.h>
1320 # else
1321 #  include <time.h>
1322 # endif
1323 #endif
1324 #ifdef HAVE_SYS_STAT_H
1325 #include <sys/stat.h>
1326 #endif
1327             ],
1328             [
1329                 struct timespec t;
1330                 struct stat s = {0};
1331                 t.tv_sec = s.st_mtime;
1332                 t.tv_nsec = s.st_mtimensec;
1333                 t.tv_sec = s.st_ctime;
1334                 t.tv_nsec = s.st_ctimensec;
1335                 t.tv_sec = s.st_atime;
1336                 t.tv_nsec = s.st_atimensec;
1337             ],
1338             samba_cv_stat_hires=yes, samba_cv_stat_hires=no)
1339     ])
1340
1341 if test x"$samba_cv_stat_hires_notimespec" = x"yes" ; then
1342     AC_DEFINE(HAVE_STAT_ST_MTIMENSEC, 1, [whether struct stat contains st_mtimensec])
1343     AC_DEFINE(HAVE_STAT_ST_ATIMENSEC, 1, [whether struct stat contains st_atimensec])
1344     AC_DEFINE(HAVE_STAT_ST_CTIMENSEC, 1, [whether struct stat contains st_ctimensec])
1345     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1346             [whether struct stat has sub-second timestamps without struct timespec])
1347 fi
1348
1349 AC_CACHE_CHECK([whether struct stat has st_birthtimespec], samba_cv_stat_st_birthtimespec,
1350     [
1351         AC_TRY_COMPILE(
1352             [
1353 #if TIME_WITH_SYS_TIME
1354 # include <sys/time.h>
1355 # include <time.h>
1356 #else
1357 # if HAVE_SYS_TIME_H
1358 #  include <sys/time.h>
1359 # else
1360 #  include <time.h>
1361 # endif
1362 #endif
1363 #ifdef HAVE_SYS_STAT_H
1364 #include <sys/stat.h>
1365 #endif
1366             ],
1367             [
1368                 struct timespec t;
1369                 struct stat s = {0};
1370                 t = s.st_birthtimespec;
1371             ],
1372             samba_cv_stat_st_birthtimespec=yes, samba_cv_stat_birthtimespec=no)
1373     ])
1374
1375 if test x"$samba_cv_stat_st_birthtimespec" = x"yes" ; then
1376     AC_DEFINE(HAVE_STAT_ST_BIRTHTIMESPEC, 1, [whether struct stat contains st_birthtimespec])
1377 fi
1378
1379 AC_CACHE_CHECK([whether struct stat has st_birthtimensec], samba_cv_stat_st_birthtimensec,
1380     [
1381         AC_TRY_COMPILE(
1382             [
1383 #if TIME_WITH_SYS_TIME
1384 # include <sys/time.h>
1385 # include <time.h>
1386 #else
1387 # if HAVE_SYS_TIME_H
1388 #  include <sys/time.h>
1389 # else
1390 #  include <time.h>
1391 # endif
1392 #endif
1393 #ifdef HAVE_SYS_STAT_H
1394 #include <sys/stat.h>
1395 #endif
1396             ],
1397             [
1398                 struct timespec t;
1399                 struct stat s = {0};
1400                 t.tv_nsec = s.st_birthtimensec;
1401             ],
1402             samba_cv_stat_st_birthtimensec=yes, samba_cv_stat_birthtimensec=no)
1403     ])
1404
1405 if test x"$samba_cv_stat_st_birthtimensec" = x"yes" ; then
1406     AC_DEFINE(HAVE_STAT_ST_BIRTHTIMENSEC, 1, [whether struct stat contains st_birthtimensec])
1407 fi
1408
1409 AC_CACHE_CHECK([whether struct stat has st_birthtime], samba_cv_stat_st_birthtime,
1410     [
1411         AC_TRY_COMPILE(
1412             [
1413 #if TIME_WITH_SYS_TIME
1414 # include <sys/time.h>
1415 # include <time.h>
1416 #else
1417 # if HAVE_SYS_TIME_H
1418 #  include <sys/time.h>
1419 # else
1420 #  include <time.h>
1421 # endif
1422 #endif
1423 #ifdef HAVE_SYS_STAT_H
1424 #include <sys/stat.h>
1425 #endif
1426             ],
1427             [
1428                 struct time_t t;
1429                 struct stat s = {0};
1430                 t = s.st_birthtime;
1431             ],
1432             samba_cv_stat_st_birthtime=yes, samba_cv_stat_birthtime=no)
1433     ])
1434
1435 if test x"$samba_cv_stat_st_birthtime" = x"yes" ; then
1436     AC_DEFINE(HAVE_STAT_ST_BIRTHTIME, 1, [whether struct stat contains st_birthtime])
1437 fi
1438
1439 AC_CACHE_CHECK([whether there is DOS flags support in the stat struct], samba_cv_stat_dos_flags,
1440     [
1441         AC_TRY_COMPILE(
1442             [#include <sys/stat.h>],
1443             [
1444                 int a = UF_DOS_ARCHIVE;
1445                 int h = UF_DOS_HIDDEN;
1446                 int r = UF_DOS_RO;
1447                 int s = UF_DOS_SYSTEM;
1448                 int i = UF_DOS_NOINDEX;
1449                 int f = UF_DOS_FLAGS;
1450             ],
1451             samba_cv_stat_dos_flags=yes, samba_cv_stat_dos_flags=no)
1452     ])
1453
1454 if test x"$samba_cv_stat_dos_flags" = x"yes" ; then
1455     AC_DEFINE(HAVE_STAT_DOS_FLAGS, 1, [whether there is DOS flags support in the stat struct])
1456 fi
1457
1458 #####################################
1459 # needed for SRV lookups
1460 AC_CHECK_LIB(resolv, dn_expand)
1461 AC_CHECK_LIB(resolv, _dn_expand)
1462 AC_CHECK_LIB(resolv, __dn_expand)
1463
1464 #
1465 # Check for the functions putprpwnam, set_auth_parameters,
1466 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1467 # Needed for OSF1 and HPUX.
1468 #
1469
1470 AC_LIBTESTFUNC(security, putprpwnam)
1471 AC_LIBTESTFUNC(sec, putprpwnam)
1472
1473 AC_LIBTESTFUNC(security, set_auth_parameters)
1474 AC_LIBTESTFUNC(sec, set_auth_parameters)
1475
1476 # UnixWare 7.x has its getspnam in -lgen
1477 AC_LIBTESTFUNC(gen, getspnam)
1478
1479 AC_LIBTESTFUNC(security, getspnam)
1480 AC_LIBTESTFUNC(sec, getspnam)
1481
1482 AC_LIBTESTFUNC(security, bigcrypt)
1483 AC_LIBTESTFUNC(sec, bigcrypt)
1484
1485 AC_LIBTESTFUNC(security, getprpwnam)
1486 AC_LIBTESTFUNC(sec, getprpwnam)
1487
1488 AC_CHECK_FUNCS(strsignal)
1489
1490 ############################################
1491 # Check if we have libattr
1492 case "$host_os" in
1493   *osf*)
1494         AC_SEARCH_LIBS(getproplist, [proplist])
1495         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1496         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1497         AC_CHECK_FUNCS(sizeof_proplist_entry)
1498   ;;
1499   *)
1500         AC_SEARCH_LIBS(getxattr, [attr])
1501         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1502         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1503         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1504         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1505         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1506         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1507         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1508   ;;
1509 esac
1510
1511 ########################################################
1512 # Check if attropen() is present if this is Solaris
1513 case "$host_os" in
1514   *solaris*)
1515         AC_CHECK_FUNCS(attropen)
1516   ;;
1517 esac
1518
1519 ########################################################
1520 # Do xattr functions take additional options like on Darwin?
1521 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1522         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1523                 old_LIBS=$LIBS
1524                 LIBS="$LIBS $ACL_LIBS"
1525                 AC_TRY_COMPILE([
1526                         #include <sys/types.h>
1527                         #if HAVE_ATTR_XATTR_H
1528                         #include <attr/xattr.h>
1529                         #elif HAVE_SYS_XATTR_H
1530                         #include <sys/xattr.h>
1531                         #endif
1532                 ],[
1533                         getxattr(0, 0, 0, 0, 0, 0);
1534                 ],
1535                 [smb_attr_cv_xattr_add_opt=yes],
1536                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1537         ])
1538         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1539                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1540         fi
1541 fi
1542
1543 # Check if we have extattr
1544 case "$host_os" in
1545   *freebsd4* | *dragonfly* )
1546     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1547     ;;
1548   *)
1549     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1550     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1551     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1552     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1553     ;;
1554 esac
1555
1556 AC_DISABLE_STATIC
1557 AC_ENABLE_SHARED
1558
1559 # Set defaults
1560 PIE_CFLAGS=""
1561 PIE_LDFLAGS=""
1562 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1563
1564 if test "x$enable_pie" != xno
1565 then
1566         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1567         [
1568                 cat > conftest.c <<EOF
1569 int foo;
1570 main () { return 0;}
1571 EOF
1572                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1573                 then
1574                         samba_cv_fpie=yes
1575                 else
1576                         samba_cv_fpie=no
1577                 fi
1578                 rm -f conftest*
1579         ])
1580         if test x"${samba_cv_fpie}" = x"yes"
1581         then
1582                 PIE_CFLAGS="-fPIE"
1583                 PIE_LDFLAGS="-pie"
1584         fi
1585 fi
1586
1587 # Set defaults
1588 RELRO_LDFLAGS=""
1589 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1590
1591 if test "x$enable_relro" != xno
1592 then
1593         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1594         [
1595                 cat > conftest.c <<EOF
1596 int foo;
1597 main () { return 0;}
1598 EOF
1599                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1600                 then
1601                         samba_cv_relro=yes
1602                 else
1603                         samba_cv_relro=no
1604                 fi
1605                 rm -f conftest*
1606         ])
1607         if test x"${samba_cv_relro}" = x"yes"
1608         then
1609                 RELRO_LDFLAGS="-Wl,-z,relro"
1610         fi
1611 fi
1612
1613 # Set defaults
1614 SYMSEXT="syms"
1615 AC_SUBST(SYMSEXT)
1616
1617 # Assume non-shared by default and override below
1618 BLDSHARED="false"
1619
1620 # these are the defaults, good for lots of systems
1621 HOST_OS="$host_os"
1622 LDSHFLAGS="-shared"
1623 MODULE_EXPORTS=""
1624 SONAMEFLAG="#"
1625 SHLD="\${CC} \${CFLAGS}"
1626 PICFLAG="${PIE_CFLAGS}"
1627 SHLIBEXT="so"
1628 DSO_EXPORTS=""
1629
1630 # this bit needs to be modified for each OS that supports share libs
1631 # You need to specify how to create a shared library and
1632   # how to compile C code to produce PIC object files
1633
1634   AC_MSG_CHECKING([ability to build shared libraries])
1635
1636   # and these are for particular systems
1637   case "$host_os" in
1638                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1639                         BLDSHARED="true"
1640                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1641                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined"
1642                         else
1643                                 LDSHFLAGS="-shared -Wl,-Bsymbolic"
1644                         fi
1645                         DYNEXP="-Wl,--export-dynamic"
1646                         PICFLAG="-fPIC"
1647                         SONAMEFLAG="-Wl,-soname="
1648                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1649                         ;;
1650                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1651                         BLDSHARED="true"
1652                         LDSHFLAGS="-G"
1653                         SONAMEFLAG="-h "
1654                         if test "${GCC}" = "yes"; then
1655                                 PICFLAG="-fPIC"
1656                                 SONAMEFLAG="-Wl,-soname="
1657                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1658                                         DYNEXP="-Wl,-E"
1659                                 fi
1660                         else
1661                                 PICFLAG="-KPIC"
1662                                 ## ${CFLAGS} added for building 64-bit shared
1663                                 ## libs using Sun's Compiler
1664                                 LDSHFLAGS="-G \${CFLAGS}"
1665                         fi
1666                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1667                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1668                         ;;
1669                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1670                         BLDSHARED="true"
1671                         LDSHFLAGS="-G"
1672                         SONAMEFLAG="-Wl,-h,"
1673                         PICFLAG="-KPIC"   # Is this correct for SunOS
1674                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1675                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1676                         ;;
1677                 *netbsd* | *freebsd* | *dragonfly* )
1678                         BLDSHARED="true"
1679                         LDSHFLAGS="-shared"
1680                         DYNEXP="-Wl,--export-dynamic"
1681                         SONAMEFLAG="-Wl,-soname,"
1682                         PICFLAG="-fPIC -DPIC"
1683                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1684                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1685                         ;;
1686                 *openbsd*)  BLDSHARED="true"
1687                         LDSHFLAGS="-shared"
1688                         DYNEXP="-Wl,-Bdynamic"
1689                         SONAMEFLAG="-Wl,-soname,"
1690                         PICFLAG="-fPIC"
1691                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1692                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1693                         ;;
1694                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1695                         case "$host_os" in
1696                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1697                         ;;
1698                         esac
1699                         BLDSHARED="true"
1700                         LDSHFLAGS="-set_version sgi1.0 -shared"
1701                         SONAMEFLAG="-soname "
1702                         SHLD="\${LD}"
1703                         if test "${GCC}" = "yes"; then
1704                                 PICFLAG="-fPIC"
1705                         else
1706                                 PICFLAG="-KPIC"
1707                         fi
1708                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1709                         ;;
1710                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1711                         BLDSHARED="true"
1712                         # use expfull to export underscored symbols
1713                         # add rtl to remove /lib/crt0.o warning
1714                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1715                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1716                         PICFLAG="-O2"
1717                         # as AIX code is always position independent...
1718                         # .po will just create compile warnings, use po.o:
1719                         if test "${GCC}" != "yes"; then
1720                                 ## for funky AIX compiler using strncpy()
1721                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1722                         fi
1723
1724                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1725                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1726                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1727                         ;;
1728                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1729                         # Use special PIC flags for the native HP-UX compiler.
1730                                 BLDSHARED="true"
1731                                 SHLD="cc"
1732                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1733                                 SONAMEFLAG="-Wl,+h "
1734                                 PICFLAG="+z"
1735                         if test "${GCC}" = "yes"; then
1736                                 PICFLAG="-fPIC"
1737                         else
1738                                 PICFLAG="+z +ESnolit"
1739                         fi
1740                         if test "$host_cpu" = "ia64"; then
1741                                 SHLIBEXT="so"
1742                               PICFLAG="+z"
1743                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1744                         else
1745                                 SHLIBEXT="sl"
1746                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1747                         fi
1748                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1749                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1750                         ;;
1751                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1752                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1753                         ;;
1754                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1755                         BLDSHARED="true"
1756                         LDSHFLAGS="-shared"
1757                         SONAMEFLAG="-Wl,-soname,"
1758                         PICFLAG="-fPIC"
1759                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1760                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1761                         ;;
1762                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1763                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1764                         ;;
1765                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1766                         BLDSHARED="true"
1767                         LDSHFLAGS="-shared"
1768                         SONAMEFLAG="-Wl,-soname,"
1769                         PICFLAG="-KPIC"
1770                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1771                         ;;
1772                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1773                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1774                         ;;
1775                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1776                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1777                         ;;
1778                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1779                         case "$host" in
1780                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1781                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1782                                         fi
1783                                         LDSHFLAGS="-G"
1784                                         DYNEXP="-Bexport"
1785                                 ;;
1786                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1787                         esac
1788                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1789                         ;;
1790
1791                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1792                         if [ test "$GCC" != yes ]; then
1793                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1794                         fi
1795                         LDSHFLAGS="-G"
1796                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1797                         ;;
1798                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1799                         BLDSHARED="false"
1800                         LDSHFLAGS=""
1801                         ;;
1802
1803                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1804                         BLDSHARED="true"
1805                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1806                         CFLAGS="$CFLAGS -fno-common"
1807                         SHLD="\${CC}"
1808                         SHLIBEXT="dylib"
1809                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1810                         SHLIBEXT="dylib"
1811                         # Since gcc doesn't fail on unrecognised options, the
1812                         # PIE test incorrectly succeeds. Darwin gcc does not
1813                         # actually support the PIE stuff.
1814                         PIE_LDFLAGS=
1815                         PIE_CFLAGS=
1816                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1817                         ;;
1818
1819                 *)
1820                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1821                         ;;
1822   esac
1823
1824 if test "$enable_shared" != "yes"; then
1825         BLDSHARED=false
1826 fi
1827
1828 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1829         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1830 fi
1831
1832 if test x"$BLDSHARED" = x"true" ; then
1833         LDFLAGS="$LDFLAGS -L./bin"
1834 fi
1835
1836 AC_MSG_RESULT($BLDSHARED)
1837
1838 AC_MSG_CHECKING([LDFLAGS])
1839 AC_MSG_RESULT([$LDFLAGS])
1840 AC_MSG_CHECKING([DYNEXP])
1841 AC_MSG_RESULT([$DYNEXP])
1842
1843 #######################################################
1844 # test whether building a shared library actually works
1845 if test $BLDSHARED = true; then
1846
1847 AC_MSG_CHECKING([SHLD])
1848 AC_MSG_RESULT([$SHLD])
1849 AC_MSG_CHECKING([LDSHFLAGS])
1850 AC_MSG_RESULT([$LDSHFLAGS])
1851
1852 AC_MSG_CHECKING([SHLIBEXT])
1853 AC_MSG_RESULT([$SHLIBEXT])
1854 AC_MSG_CHECKING([SONAMEFLAG])
1855 AC_MSG_RESULT([$SONAMEFLAG])
1856
1857 AC_MSG_CHECKING([PICFLAG])
1858 AC_MSG_RESULT([$PICFLAG])
1859
1860 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1861 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1862
1863 AC_CACHE_CHECK([whether building shared libraries actually works],
1864                [ac_cv_shlib_works],[
1865    # try building a trivial shared library
1866    ac_cv_shlib_works=no
1867    # The $SHLD and $LDSHFLAGS variables may contain references to other
1868    # variables so they need to be eval'ed.
1869    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1870         shlib.o ${srcdir-.}/tests/shlib.c && \
1871    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1872         shlib.o && ac_cv_shlib_works=yes
1873    rm -f "shlib.$SHLIBEXT" shlib.o
1874
1875 ])
1876 if test $ac_cv_shlib_works = no; then
1877    BLDSHARED=false
1878 fi
1879 fi
1880
1881 if test x"$BLDSHARED" != x"true"; then
1882         LDSHFLAGS="shared-libraries-disabled"
1883         SONAMEFLAG="shared-libraries-disabled"
1884         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1885         SHLD="shared-libraries-disabled"
1886         PICFLAG="${PIE_CFLAGS}"
1887         SHLIBEXT="shared_libraries_disabled"
1888 fi
1889
1890 AC_MSG_CHECKING([used PICFLAG])
1891 AC_MSG_RESULT([$PICFLAG])
1892
1893 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1894
1895 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
1896
1897 ################
1898
1899 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1900 AC_TRY_RUN([#include <stdio.h>
1901 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1902 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1903 if test x"$samba_cv_have_longlong" = x"yes"; then
1904     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1905     AC_CHECK_TYPE(intptr_t, unsigned long long)
1906 else
1907     AC_CHECK_TYPE(intptr_t, unsigned long)
1908 fi
1909
1910 #
1911 # Check if the compiler supports the LL prefix on long long integers.
1912 # AIX needs this.
1913
1914 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1915     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1916         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1917 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1918    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1919 fi
1920
1921
1922 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
1923 AC_TRY_RUN([#include <time.h>
1924 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
1925 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
1926 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
1927     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
1928 fi
1929
1930 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1931 AC_TRY_RUN([#include <stdio.h>
1932 #include <sys/stat.h>
1933 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1934 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1935 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1936     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1937 fi
1938
1939 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1940 AC_TRY_RUN([
1941 #if defined(HAVE_UNISTD_H)
1942 #include <unistd.h>
1943 #endif
1944 #include <stdio.h>
1945 #include <sys/stat.h>
1946 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1947 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1948 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1949     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1950 fi
1951
1952 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1953 AC_TRY_RUN([
1954 #if defined(HAVE_UNISTD_H)
1955 #include <unistd.h>
1956 #endif
1957 #include <stdio.h>
1958 #include <sys/stat.h>
1959 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1960 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1961 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1962     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1963 fi
1964
1965 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1966 AC_TRY_RUN([
1967 #if defined(HAVE_UNISTD_H)
1968 #include <unistd.h>
1969 #endif
1970 #include <stdio.h>
1971 #include <sys/stat.h>
1972 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1973 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1974 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1975     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1976 fi
1977
1978 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
1979 AC_TRY_RUN([
1980 #if defined(HAVE_UNISTD_H)
1981 #include <unistd.h>
1982 #endif
1983 #include <stdio.h>
1984 #include <sys/stat.h>
1985 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
1986 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
1987 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
1988     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
1989 fi
1990
1991 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
1992 AC_TRY_RUN([
1993 #if defined(HAVE_UNISTD_H)
1994 #include <unistd.h>
1995 #endif
1996 #include <stdio.h>
1997 #include <sys/stat.h>
1998 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1999 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2000 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2001     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2002 fi
2003
2004 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2005 AC_TRY_COMPILE([
2006 #if defined(HAVE_UNISTD_H)
2007 #include <unistd.h>
2008 #endif
2009 #include <sys/types.h>
2010 #include <dirent.h>],
2011 [DIR64 de;],
2012 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2013 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2014     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2015 fi
2016
2017 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2018 AC_TRY_COMPILE([
2019 #if defined(HAVE_UNISTD_H)
2020 #include <unistd.h>
2021 #endif
2022 #include <sys/types.h>
2023 #include <dirent.h>],
2024 [struct dirent64 de;],
2025 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2026 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2027     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2028 fi
2029
2030 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2031 AC_TRY_RUN([
2032 #if defined(HAVE_UNISTD_H)
2033 #include <unistd.h>
2034 #endif
2035 #include <sys/types.h>
2036 main() { dev_t dev; int i = major(dev); return 0; }],
2037 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2038 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2039     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2040 fi
2041
2042 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2043 AC_TRY_RUN([
2044 #if defined(HAVE_UNISTD_H)
2045 #include <unistd.h>
2046 #endif
2047 #include <sys/types.h>
2048 main() { dev_t dev; int i = minor(dev); return 0; }],
2049 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2050 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2051     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2052 fi
2053
2054 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2055 AC_TRY_RUN([
2056 #if defined(HAVE_UNISTD_H)
2057 #include <unistd.h>
2058 #endif
2059 #include <sys/types.h>
2060 main() { dev_t dev = makedev(1,2); return 0; }],
2061 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2062 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2063     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2064 fi
2065
2066 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2067 AC_TRY_RUN([#include <stdio.h>
2068 main() { char c; c=250; exit((c > 0)?0:1); }],
2069 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2070 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2071     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2072 fi
2073
2074 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2075 AC_TRY_COMPILE([#include <sys/types.h>
2076 #include <dirent.h>
2077 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2078 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2079 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2080     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2081 fi
2082
2083 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2084 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2085 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2086 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2087     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2088 fi
2089
2090 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2091 AC_TRY_LINK([
2092 #include <sys/time.h>
2093 #include <unistd.h>], [struct timeval tv; return gettimeofday(&tv, NULL);],
2094            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,
2095            samba_cv_HAVE_GETTIMEOFDAY_TZ=no)])
2096 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2097     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday takes a tz argument])
2098 fi
2099
2100 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2101
2102     # On some systems (eg. Linux) librt can pull in libpthread. We
2103     # don't want this to happen because libpthreads changes signal delivery
2104     # semantics in ways we are not prepared for. This breaks Linux oplocks
2105     # which rely on signals.
2106
2107     AC_LIBTESTFUNC(rt, clock_gettime,
2108             [
2109                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2110                                 [Whether clock_gettime is available])
2111                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2112                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2113                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2114                         ])
2115
2116 fi
2117
2118 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2119 AC_TRY_RUN([#include <sys/types.h>
2120 #include <dirent.h>
2121 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2122 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2123 di->d_name[0] == 0) exit(0); exit(1);} ],
2124 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2125 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2126     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2127 fi
2128
2129 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2130 AC_TRY_COMPILE([#include <sys/types.h>
2131 #include <utime.h>],
2132 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2133 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2134 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2135     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2136 fi
2137
2138 ##############
2139 # Check utmp details, but only if our OS offers utmp.h
2140 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2141 dnl  utmp and utmpx come in many flavours
2142 dnl  We need to check for many of them
2143 dnl  But we don't need to do each and every one, because our code uses
2144 dnl  mostly just the utmp (not utmpx) fields.
2145
2146 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2147
2148 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2149 AC_TRY_COMPILE([#include <sys/types.h>
2150 #include <utmp.h>],
2151 [struct utmp ut;  ut.ut_name[0] = 'a';],
2152 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2153 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2154     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2155 fi
2156
2157 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2158 AC_TRY_COMPILE([#include <sys/types.h>
2159 #include <utmp.h>],
2160 [struct utmp ut;  ut.ut_user[0] = 'a';],
2161 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2162 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2163     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2164 fi
2165
2166 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2167 AC_TRY_COMPILE([#include <sys/types.h>
2168 #include <utmp.h>],
2169 [struct utmp ut;  ut.ut_id[0] = 'a';],
2170 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2171 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2172     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2173 fi
2174
2175 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2176 AC_TRY_COMPILE([#include <sys/types.h>
2177 #include <utmp.h>],
2178 [struct utmp ut;  ut.ut_host[0] = 'a';],
2179 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2180 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2181     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2182 fi
2183
2184 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2185 AC_TRY_COMPILE([#include <sys/types.h>
2186 #include <utmp.h>],
2187 [struct utmp ut;  time_t t; ut.ut_time = t;],
2188 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2189 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2190     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2191 fi
2192
2193 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2194 AC_TRY_COMPILE([#include <sys/types.h>
2195 #include <utmp.h>],
2196 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2197 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2198 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2199     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2200 fi
2201
2202 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2203 AC_TRY_COMPILE([#include <sys/types.h>
2204 #include <utmp.h>],
2205 [struct utmp ut;  ut.ut_type = 0;],
2206 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2207 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2208     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2209 fi
2210
2211 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2212 AC_TRY_COMPILE([#include <sys/types.h>
2213 #include <utmp.h>],
2214 [struct utmp ut;  ut.ut_pid = 0;],
2215 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2216 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2217     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2218 fi
2219
2220 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2221 AC_TRY_COMPILE([#include <sys/types.h>
2222 #include <utmp.h>],
2223 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2224 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2225 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2226     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2227 fi
2228
2229 dnl Look for the IPv6 varient by preference. Many systems have both.
2230 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2231 AC_TRY_COMPILE([#include <sys/types.h>
2232 #include <utmp.h>],
2233 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2234 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2235 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2236     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2237 fi
2238
2239 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2240 AC_TRY_COMPILE([#include <sys/types.h>
2241 #include <utmp.h>],
2242 [struct utmp ut;  ut.ut_addr = 0;],
2243 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2244 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2245     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2246 fi
2247
2248 if test x$ac_cv_func_pututline = xyes ; then
2249   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2250   AC_TRY_COMPILE([#include <sys/types.h>
2251 #include <utmp.h>],
2252   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2253   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2254   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2255       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2256   fi
2257 fi
2258
2259 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2260 AC_TRY_COMPILE([#include <sys/types.h>
2261 #include <utmpx.h>],
2262 [struct utmpx ux;  ux.ut_syslen = 0;],
2263 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2264 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2265     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2266 fi
2267
2268 fi
2269 # end utmp details
2270
2271
2272 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2273 AC_ARG_WITH(libiconv,
2274 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2275 [
2276   if test "$withval" = "no" ; then
2277     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2278   else
2279      if test "$withval" != "yes" ; then
2280         ICONV_PATH_SPEC=yes
2281         ICONV_LOOK_DIRS="$withval"
2282      fi
2283   fi
2284 ])
2285
2286 for i in $ICONV_LOOK_DIRS ; do
2287
2288     save_LIBS="$LIBS"
2289     save_LDFLAGS="$LDFLAGS"
2290     save_CPPFLAGS="$CPPFLAGS"
2291
2292     iconv_current_LIBS=""
2293     iconv_current_LDFLAGS=""
2294     iconv_current_CPPFLAGS=""
2295
2296     ICONV_FOUND="no"
2297     unset libext
2298
2299     #  This is here to handle -withval stuff for --with-libiconv
2300     #  Perhaps we should always add a -L
2301     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2302
2303     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2304     # installation paths. This gets a little tricky since we might have iconv
2305     # in both libiconv and in libc. In this case the jm_ICONV test will always
2306     # succeed when the header is found. To counter this, make sure the
2307     # library directory is there and check the ABI directory first (which
2308     # should be harmless on other systems, but causes tons of linker warnings on
2309     # 64bit Ubuntu systems).
2310     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2311     # installed, I've decided to fix the linker warnings.
2312     # -- Kai
2313     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2314     for l in "lib" "lib32" "lib/hpux32"; do
2315         if test -d "$i/$l" ; then
2316                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2317                 LIBS=
2318                 export LDFLAGS LIBS CPPFLAGS
2319                 # Try to find iconv(3)
2320                 jm_ICONV($i/$l)
2321                 if test x"$ICONV_FOUND" = "xyes" ; then
2322                     libext="$l"
2323                     break
2324                 fi
2325         fi
2326     done
2327
2328     if test x"$ICONV_FOUND" = "xyes" ; then
2329         iconv_current_LDFLAGS="-L$i/$libext"
2330         iconv_current_CPPFLAGS="-I$i/include"
2331
2332         if test x"$jm_cv_lib_iconv" != x; then
2333             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2334         else
2335             # We found iconv in libc.
2336             iconv_current_LIBS=""
2337         fi
2338
2339     fi
2340
2341     if test x"$ICONV_FOUND" = "xyes" ; then
2342
2343         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2344         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2345         LIBS="$save_LIBS $iconv_current_LIBS"
2346         export LDFLAGS LIBS CPPFLAGS
2347
2348         default_dos_charset=no
2349         default_display_charset=no
2350         default_unix_charset=no
2351
2352         # check for default dos charset name
2353         for j in CP850 IBM850 ; do
2354             rjs_CHARSET($j)
2355             default_dos_charset="$ICONV_CHARSET"
2356             if test x"$default_dos_charset" = x"$j"; then
2357                 break
2358             fi
2359         done
2360
2361         # check for default display charset name
2362         for j in ASCII 646 ; do
2363             rjs_CHARSET($j)
2364             default_display_charset="$ICONV_CHARSET"
2365             if test x"$default_display_charset" = x"$j"; then
2366                 break
2367             fi
2368         done
2369
2370         # check for default unix charset name
2371         for j in UTF-8 UTF8 ; do
2372             rjs_CHARSET($j)
2373             default_unix_charset="$ICONV_CHARSET"
2374             if test x"$default_unix_charset" = x"$j"; then
2375                 break
2376             fi
2377         done
2378
2379         if test "$default_dos_charset" != "no" -a \
2380                 "$default_dos_charset" != "cross" -a \
2381                 "$default_display_charset" != "no" -a \
2382                 "$default_display_charset" != "cross" -a \
2383                 "$default_unix_charset" != "no" -a \
2384                 "$default_unix_charset" != "cross"
2385         then
2386                 samba_cv_HAVE_NATIVE_ICONV=yes
2387         else
2388             if test "$default_dos_charset" = "cross" -o \
2389                      "$default_display_charset" = "cross" -o \
2390                      "$default_unix_charset" = "cross"
2391             then
2392                     samba_cv_HAVE_NATIVE_ICONV=cross
2393             else
2394                     samba_cv_HAVE_NATIVE_ICONV=no
2395             fi
2396         fi
2397
2398         # At this point, we have a libiconv candidate. We know that
2399         # we have the right headers and libraries, but we don't know
2400         # whether it does the conversions we want. We can't test this
2401         # because we are cross-compiling. This is not necessarily a big
2402         # deal, since we can't guarantee that the results we get now will
2403         # match the results we get at runtime anyway.
2404         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2405             default_dos_charset="CP850"
2406             default_display_charset="ASCII"
2407             default_unix_charset="UTF-8"
2408             samba_cv_HAVE_NATIVE_ICONV=yes
2409             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2410             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2411         fi
2412
2413         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2414
2415             CPPFLAGS=$save_CPPFLAGS
2416             LDFLAGS=$save_LDFLAGS
2417             LIBS=$save_LIBS
2418
2419             if test x"$iconv_current_LIBS" != x; then
2420                 LIBS="$LIBS $iconv_current_LIBS"
2421             fi
2422
2423             # Add the flags we need to CPPFLAGS and LDFLAGS
2424             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2425             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2426
2427             # Turn the #defines into string literals
2428             default_dos_charset="\"$default_dos_charset\""
2429             default_display_charset="\"$default_display_charset\""
2430             default_unix_charset="\"$default_unix_charset\""
2431
2432             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2433             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2434             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2435             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2436
2437            break
2438         fi
2439
2440     # We didn't find a working iconv, so keep going
2441     fi
2442
2443     #  We only need to clean these up here for the next pass through the loop
2444     CPPFLAGS=$save_CPPFLAGS
2445     LDFLAGS=$save_LDFLAGS
2446     LIBS=$save_LIBS
2447     export LDFLAGS LIBS CPPFLAGS
2448 done
2449 unset libext
2450
2451
2452 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2453     AC_MSG_WARN([Sufficient support for iconv function was not found.
2454     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2455    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2456    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2457    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2458 fi
2459
2460
2461 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2462 AC_TRY_RUN([
2463 #include <sys/types.h>
2464 #include <fcntl.h>
2465 #ifndef F_GETLEASE
2466 #define F_GETLEASE      1025
2467 #endif
2468 main() {
2469        int fd = open("/dev/null", O_RDONLY);
2470        return fcntl(fd, F_GETLEASE, 0) == -1;
2471 }
2472 ],
2473 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2474 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2475     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2476 fi
2477
2478 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2479 AC_TRY_RUN([
2480 #include <sys/types.h>
2481 #include <fcntl.h>
2482 #include <signal.h>
2483 #ifndef F_NOTIFY
2484 #define F_NOTIFY 1026
2485 #endif
2486 main() {
2487         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2488 }
2489 ],
2490 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2491 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2492     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2493 fi
2494
2495 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2496 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h sys/inotify.h)
2497 AC_CHECK_FUNCS(inotify_init)
2498 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2499 ],
2500 samba_cv_HAVE_INOTIFY=yes,
2501 samba_cv_HAVE_INOTIFY=no,
2502 samba_cv_HAVE_INOTIFY=cross)
2503
2504 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2505     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2506 fi
2507
2508 #################################################
2509 # Check if FAM notifications are available. For FAM info, see
2510 #       http://oss.sgi.com/projects/fam/
2511 #       http://savannah.nongnu.org/projects/fam/
2512 AC_ARG_ENABLE(fam,
2513 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2514
2515 if test x$enable_fam != xno; then
2516     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2517     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2518         # On IRIX, libfam requires libC, but other FAM implementations
2519         # might not need it.
2520         AC_CHECK_LIB(fam, FAMOpen2,
2521             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"],
2522             [samba_cv_HAVE_LIBFAM=no])
2523
2524         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2525             samba_fam_xtra=-lC
2526             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2527                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"],
2528                 [samba_cv_HAVE_LIBFAM=no])
2529             unset samba_fam_xtra
2530         fi
2531     fi
2532
2533     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2534         default_shared_modules="$default_shared_modules vfs_notify_fam"
2535         AC_TRY_COMPILE([#include <fam.h>],
2536                     [FAMCodes code = FAMChanged;],
2537                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2538                         [Whether fam.h contains a typedef for enum FAMCodes]),
2539                     [])
2540     fi
2541
2542     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2543         AC_MSG_ERROR(FAM support requested but FAM library not available )
2544     fi
2545 fi
2546
2547 AC_SUBST(SMB_FAM_LIBS)
2548
2549 #################################################
2550 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2551
2552 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2553
2554 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2555 # Theoretically it should work with AIX JFS2 too but this needs testing
2556 if test x"$samba_cv_HAVE_GPFS" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2557     default_shared_modules="$default_shared_modules vfs_tsmsm"
2558 fi
2559
2560 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2561 AC_TRY_RUN([
2562 #include <sys/types.h>
2563 #include <fcntl.h>
2564 #include <signal.h>
2565 #include <sys/file.h>
2566 #ifndef LOCK_MAND
2567 #define LOCK_MAND       32
2568 #define LOCK_READ       64
2569 #endif
2570 main() {
2571         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2572 }
2573 ],
2574 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2575 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2576     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2577 fi
2578
2579
2580 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2581 AC_TRY_COMPILE([#include <sys/types.h>
2582 #include <fcntl.h>],
2583 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2584 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2585 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2586     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2587 fi
2588
2589 #################################################
2590 # Check for POSIX capability support
2591
2592 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2593     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2594     [], [])
2595
2596 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2597
2598     ac_save_LIBS=$LIBS
2599     AC_LIBTESTFUNC(cap, cap_get_proc)
2600
2601     AC_CACHE_CHECK([for POSIX capabilities],
2602             samba_cv_HAVE_POSIX_CAPABILITIES,
2603             [
2604                 AC_TRY_RUN([
2605 #include <sys/types.h>
2606 #include <sys/capability.h>
2607 main() {
2608  cap_t cap;
2609  cap_value_t vals[1];
2610  if (!(cap = cap_get_proc()))
2611    exit(1);
2612  vals[0] = CAP_CHOWN;
2613  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2614  cap_set_proc(cap);
2615  exit(0);
2616 }],
2617                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2618                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2619                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2620             ])
2621
2622 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2623     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2624             [Whether POSIX capabilities are available])
2625 else
2626     LIBS=$ac_save_LIBS
2627 fi
2628
2629 fi
2630
2631 #
2632 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2633 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2634 #
2635
2636 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2637 AC_TRY_COMPILE([#include <sys/types.h>
2638 #if defined(HAVE_RPC_RPC_H)
2639 #include <rpc/rpc.h>
2640 #endif],
2641 [int16 testvar;],
2642 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2643 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2644     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2645 fi
2646
2647 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2648 AC_TRY_COMPILE([#include <sys/types.h>
2649 #if defined(HAVE_RPC_RPC_H)
2650 #include <rpc/rpc.h>
2651 #endif],
2652 [uint16 testvar;],
2653 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2654 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2655     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2656 fi
2657
2658 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2659 AC_TRY_COMPILE([#include <sys/types.h>
2660 #if defined(HAVE_RPC_RPC_H)
2661 #include <rpc/rpc.h>
2662 #endif],
2663 [int32 testvar;],
2664 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2665 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2666     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2667 fi
2668
2669 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2670 AC_TRY_COMPILE([#include <sys/types.h>
2671 #if defined(HAVE_RPC_RPC_H)
2672 #include <rpc/rpc.h>
2673 #endif],
2674 [uint32 testvar;],
2675 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2676 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2677     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2678 fi
2679
2680 dnl
2681 dnl Some systems (SCO) have a problem including
2682 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2683 dnl as a #define in <prot.h> and as part of an enum
2684 dnl in <rpc/rpc.h>.
2685 dnl
2686
2687 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2688 AC_TRY_COMPILE([#include <sys/types.h>
2689 #ifdef HAVE_SYS_SECURITY_H
2690 #include <sys/security.h>
2691 #include <prot.h>
2692 #endif  /* HAVE_SYS_SECURITY_H */
2693 #if defined(HAVE_RPC_RPC_H)
2694 #include <rpc/rpc.h>
2695 #endif],
2696 [int testvar;],
2697 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2698 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2699     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2700 fi
2701
2702 AC_MSG_CHECKING([for test routines])
2703 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2704            AC_MSG_RESULT(yes),
2705            AC_MSG_ERROR([cant find test code. Aborting config]),
2706            AC_MSG_WARN([cannot run when cross-compiling]))
2707
2708 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2709 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2710            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2711 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2712     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2713 fi
2714
2715 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2716 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2717            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2718 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2719     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2720 fi
2721
2722 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2723 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2724 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2725 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2726 AC_CHECK_FUNCS(getpagesize)
2727
2728 ################################################
2729 # look for a method of setting the effective uid
2730 seteuid=no;
2731
2732 if test $seteuid = no; then
2733 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2734 AC_TRY_RUN([
2735 #define AUTOCONF_TEST 1
2736 #define USE_SETREUID 1
2737 #include "confdefs.h"
2738 #include "${srcdir-.}/lib/util_sec.c"],
2739            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2740 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2741     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2742 fi
2743 fi
2744
2745 # we check for setresuid second as it conflicts with AIO on Linux. 
2746 # see http://samba.org/~tridge/junkcode/aio_uid.c
2747 if test $seteuid = no; then
2748 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2749 AC_TRY_RUN([
2750 #define AUTOCONF_TEST 1
2751 #define USE_SETRESUID 1
2752 #include "confdefs.h"
2753 #include "${srcdir-.}/lib/util_sec.c"],
2754            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2755 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2756     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2757 fi
2758 fi
2759
2760 if test $seteuid = no; then
2761 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2762 AC_TRY_RUN([
2763 #define AUTOCONF_TEST 1
2764 #define USE_SETEUID 1
2765 #include "confdefs.h"
2766 #include "${srcdir-.}/lib/util_sec.c"],
2767            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2768 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2769     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2770 fi
2771 fi
2772
2773 if test $seteuid = no; then
2774 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2775 AC_TRY_RUN([
2776 #define AUTOCONF_TEST 1
2777 #define USE_SETUIDX 1
2778 #include "confdefs.h"
2779 #include "${srcdir-.}/lib/util_sec.c"],
2780            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2781 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2782     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2783 fi
2784 fi
2785
2786 AC_CACHE_CHECK([for the Darwin initgroups system call],
2787         samba_cv_DARWIN_INITGROUPS,
2788         AC_TRY_LINK([
2789 #include <sys/syscall.h>
2790 #include <unistd.h>
2791         ],
2792         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2793         samba_cv_DARWIN_INITGROUPS=yes,
2794         samba_cv_DARWIN_INITGROUPS=no)
2795 )
2796
2797 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2798     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2799         [Whether to use the Darwin-specific initgroups system call])
2800 fi
2801
2802 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2803 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2804            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2805 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2806     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2807 fi
2808
2809 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2810 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2811            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2812 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2813     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2814
2815 else
2816
2817 dnl
2818 dnl Don't check for 64 bit fcntl locking if we know that the
2819 dnl glibc2.1 broken check has succeeded.
2820 dnl
2821
2822   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2823   AC_TRY_RUN([
2824 #if defined(HAVE_UNISTD_H)
2825 #include <unistd.h>
2826 #endif
2827 #include <stdio.h>
2828 #include <stdlib.h>
2829
2830 #ifdef HAVE_FCNTL_H
2831 #include <fcntl.h>
2832 #endif
2833
2834 #ifdef HAVE_SYS_FCNTL_H
2835 #include <sys/fcntl.h>
2836 #endif
2837 main() { struct flock64 fl64;
2838 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2839 exit(0);
2840 #else
2841 exit(1);
2842 #endif
2843 }],
2844        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2845
2846   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2847       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2848   fi
2849 fi
2850
2851 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2852 AC_TRY_COMPILE([#include <sys/types.h>
2853 #include <sys/stat.h>
2854 #include <unistd.h>],
2855 [struct stat st;  st.st_blocks = 0;],
2856 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2857 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2858     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2859 fi
2860
2861 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2862 AC_TRY_COMPILE([#include <sys/types.h>
2863 #include <sys/stat.h>
2864 #include <unistd.h>],
2865 [struct stat st;  st.st_blksize = 0;],
2866 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2867 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2868     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2869 fi
2870
2871 AC_CACHE_CHECK([for st_flags in struct stat],
2872         samba_cv_HAVE_STAT_ST_FLAGS,
2873         [
2874             AC_TRY_COMPILE([#include <sys/types.h>
2875 #include <sys/stat.h>
2876 #include <unistd.h>],
2877             [struct stat st;  st.st_flags = 0;],
2878             samba_cv_HAVE_STAT_ST_FLAGS=yes,
2879             samba_cv_HAVE_STAT_ST_FLAGS=no,
2880             samba_cv_HAVE_STAT_ST_FLAGS=cross)
2881         ])
2882
2883 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
2884     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
2885                 [Whether the stat struct has a st_flags member])
2886 fi
2887
2888 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2889 AC_TRY_COMPILE([
2890 #include <sys/types.h>
2891 #include <sys/acl.h>
2892 #if defined(HAVE_RPCSVC_NIS_H)
2893 #include <rpcsvc/nis.h>
2894 #endif],
2895 [int i;],
2896 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2897 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2898         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2899 fi
2900
2901 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
2902 AC_TRY_RUN([
2903 #include <stdio.h>
2904 #include <limits.h>
2905 #include <signal.h>
2906
2907 void exit_on_core(int ignored) {
2908         exit(1);
2909 }
2910
2911 main() {
2912         char *newpath;
2913         signal(SIGSEGV, exit_on_core);
2914         newpath = realpath("/tmp", NULL);
2915         exit((newpath != NULL) ? 0 : 1);
2916 }
2917 ],
2918 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
2919 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
2920     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
2921 fi
2922
2923 #################################################
2924 # check for AFS clear-text auth support
2925 samba_cv_WITH_AFS=no
2926 AC_MSG_CHECKING(whether to use AFS clear-text auth)
2927 AC_ARG_WITH(afs,
2928 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
2929 [ case "$withval" in
2930   yes|auto)
2931     AC_MSG_RESULT($withval)
2932     samba_cv_WITH_AFS=$withval
2933     ;;
2934   *)
2935     AC_MSG_RESULT(no)
2936     ;;
2937   esac ],
2938   AC_MSG_RESULT(no)
2939 )
2940
2941 ####################################################
2942 # check for Linux-specific AFS fake-kaserver support
2943 samba_cv_WITH_FAKE_KASERVER=no
2944 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2945 AC_ARG_WITH(fake-kaserver,
2946 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
2947 [ case "$withval" in
2948   yes|auto)
2949     AC_MSG_RESULT($withval)
2950     samba_cv_WITH_FAKE_KASERVER=$withval
2951     ;;
2952   *)
2953     AC_MSG_RESULT(no)
2954     ;;
2955   esac ],
2956   AC_MSG_RESULT(no)
2957 )
2958
2959 #################################################
2960 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
2961 if test x"$samba_cv_WITH_AFS" != x"no" ||
2962    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
2963
2964     # see if this box has the afs-headers in /usr/include/afs
2965     AC_MSG_CHECKING(for /usr/include/afs)
2966     if test -d /usr/include/afs; then
2967           CFLAGS="$CFLAGS -I/usr/include/afs"
2968           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
2969           AC_MSG_RESULT(yes)
2970     else
2971       AC_MSG_RESULT(no)
2972     fi
2973
2974     # check for afs.h
2975     have_afs_headers=no
2976     AC_CHECK_HEADERS(afs.h afs/afs.h)
2977     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
2978         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
2979            test x"$samba_cv_WITH_AFS" = x"auto"; then
2980                 AC_MSG_WARN([AFS cannot be supported without afs.h])
2981         else
2982                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
2983         fi
2984     else
2985         have_afs_headers=yes
2986     fi
2987 fi
2988
2989 FAKE_KASERVER_OBJ=""
2990 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
2991     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
2992     FAKE_KASERVER_OBJ="utils/net_afs.o"
2993 fi
2994 AC_SUBST(FAKE_KASERVER_OBJ)
2995
2996 #################################################
2997 # check whether to compile AFS/NT ACL mapping module
2998 samba_cv_WITH_VFS_AFSACL=no
2999 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3000 AC_ARG_WITH(vfs-afsacl,
3001 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
3002 [ case "$withval" in
3003   yes|auto)
3004     AC_MSG_RESULT($withval)
3005     samba_cv_WITH_VFS_AFSACL=yes
3006     ;;
3007   *)
3008     AC_MSG_RESULT(no)
3009     ;;
3010   esac ],
3011   AC_MSG_RESULT(no)
3012 )
3013
3014 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3015    default_shared_modules="$default_shared_modules vfs_afsacl"
3016 fi
3017         
3018 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3019     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3020 fi
3021
3022 #################################################
3023 # check for the DFS clear-text auth system
3024 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3025 AC_ARG_WITH(dfs,
3026 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3027 [ case "$withval" in
3028   yes)
3029     AC_MSG_RESULT(yes)
3030     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3031     ;;
3032   *)
3033     AC_MSG_RESULT(no)
3034     ;;
3035   esac ],
3036   AC_MSG_RESULT(no)
3037 )
3038
3039 ########################################################
3040 # Compile with LDAP support?
3041
3042 with_ldap_support=auto
3043 AC_MSG_CHECKING([for LDAP support])
3044
3045 AC_ARG_WITH(ldap,
3046 [AS_HELP_STRING([--with-ldap], [LDAP support (default yes)])],
3047 [ case "$withval" in
3048     yes|no)
3049         with_ldap_support=$withval
3050         ;;
3051   esac ])
3052
3053 AC_MSG_RESULT($with_ldap_support)
3054
3055 SMBLDAP=""
3056 AC_SUBST(SMBLDAP)
3057 SMBLDAPUTIL=""
3058 AC_SUBST(SMBLDAPUTIL)
3059 LDBLDAP=""
3060 AC_SUBST(LDBLDAP)
3061
3062 if test x"$with_ldap_support" != x"no"; then
3063
3064   ##################################################################
3065   # first test for ldap.h and lber.h
3066   # (ldap.h is required for this test)
3067   AC_CHECK_HEADERS(ldap.h lber.h)
3068
3069   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3070         if test x"$with_ldap_support" = x"yes"; then
3071          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3072         else
3073          AC_MSG_WARN(ldap.h is needed for LDAP support)
3074         fi
3075         
3076         with_ldap_support=no
3077   fi
3078
3079   ##################################################################
3080   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3081   # unsigned int in include/includes.h
3082   case $host_os in
3083         *hpux*)
3084          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3085          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3086         with_ldap_support=yes
3087         ;;
3088         *)
3089         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3090         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3091                 if test x"$with_ldap_support" = x"yes"; then
3092                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3093                 else
3094                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3095                 fi
3096                 with_ldap_support=no
3097         fi
3098         ;;
3099   esac
3100 fi
3101
3102 if test x"$with_ldap_support" != x"no"; then
3103   ac_save_LIBS=$LIBS
3104
3105   ##################################################################
3106   # we might need the lber lib on some systems. To avoid link errors
3107   # this test must be before the libldap test
3108   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3109
3110   ########################################################
3111   # If ber_sockbuf_add_io() is available we can add
3112   # SASL wrapping hooks
3113   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3114
3115   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3116                  AC_TRY_COMPILE([#include <ldap.h>],
3117                                 [int val = LDAP_OPT_SOCKBUF;],
3118                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3119                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3120
3121   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3122           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3123         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3124   fi
3125
3126   #######################################################
3127   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3128   # ldap logging and print it out in the samba logs
3129   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3130                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3131                  [AC_TRY_COMPILE([#include <lber.h>],
3132                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3133                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3134                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3135
3136   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3137         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3138                   [Support for LDAP/LBER logging interception])
3139   fi
3140
3141   ########################################################
3142   # now see if we can find the ldap libs in standard paths
3143   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3144
3145   ########################################################
3146   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3147   # Check found in pam_ldap 145.
3148   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3149
3150   LIBS="$LIBS $LDAP_LIBS"
3151   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3152     AC_TRY_COMPILE([
3153         #include <lber.h>
3154         #include <ldap.h>],
3155         [ldap_set_rebind_proc(0, 0, 0);],
3156         [smb_ldap_cv_ldap_set_rebind_proc=3],
3157         [smb_ldap_cv_ldap_set_rebind_proc=2]
3158     )
3159   ])
3160
3161   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3162
3163   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3164
3165   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3166     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3167     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3168     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3169     default_shared_modules="$default_shared_modules";
3170     SMBLDAP="lib/smbldap.o"
3171     SMBLDAPUTIL="lib/smbldap_util.o"
3172     with_ldap_support=yes
3173     AC_MSG_CHECKING(whether LDAP support is used)
3174     AC_MSG_RESULT(yes)
3175   else
3176     if test x"$with_ldap_support" = x"yes"; then
3177         AC_MSG_ERROR(libldap is needed for LDAP support)
3178     else
3179         AC_MSG_WARN(libldap is needed for LDAP support)
3180     fi
3181
3182     LDAP_LIBS=""
3183     with_ldap_support=no
3184   fi
3185   LIBS=$ac_save_LIBS
3186 fi
3187
3188
3189 #################################################
3190 # active directory support
3191
3192 with_ads_support=auto
3193 AC_MSG_CHECKING([for Active Directory and krb5 support])
3194
3195 AC_ARG_WITH(ads,
3196 [AS_HELP_STRING([--with-ads], [Active Directory support (default auto)])],
3197 [ case "$withval" in
3198     yes|no)
3199         with_ads_support="$withval"
3200         ;;
3201   esac ])
3202
3203 AC_MSG_RESULT($with_ads_support)
3204
3205 FOUND_KRB5=no
3206 KRB5_LIBS=""
3207
3208 if test x"$with_ldap_support" != x"yes"; then
3209
3210     if test x"$with_ads_support" = x"yes"; then
3211         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3212     elif test x"$with_ads_support" = x"auto"; then
3213         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3214         with_ads_support=no
3215     fi
3216
3217 else
3218
3219     # Check to see whether there is enough LDAP functionality to be able
3220     # to build AD support.
3221
3222 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3223 case "$host_os" in
3224         *hpux*)
3225     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3226
3227     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3228         if test x"$with_ads_support" = x"yes"; then
3229             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3230         elif test x"$with_ads_support" = x"auto"; then
3231             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3232             with_ads_support=no
3233         fi
3234     fi
3235     ;;
3236         *)
3237     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3238
3239     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3240         if test x"$with_ads_support" = x"yes"; then
3241             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3242         elif test x"$with_ads_support" = x"auto"; then
3243             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3244             with_ads_support=no
3245         fi
3246     fi
3247     ;;
3248 esac
3249
3250
3251     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3252
3253     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3254         if test x"$with_ads_support" = x"yes"; then
3255             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3256         elif test x"$with_ads_support" = x"auto"; then
3257             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3258             with_ads_support=no
3259         fi
3260     fi
3261
3262 fi
3263
3264 if test x"$with_ads_support" != x"no"; then
3265
3266   # Do no harm to the values of CFLAGS and LIBS while testing for
3267   # Kerberos support.
3268
3269   if test x$FOUND_KRB5 = x"no"; then
3270     #################################################
3271     # check for location of Kerberos 5 install
3272     AC_MSG_CHECKING(for kerberos 5 install path)
3273     AC_ARG_WITH(krb5,
3274     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3275     [ case "$withval" in
3276       no)
3277         AC_MSG_RESULT(no krb5-path given)
3278         ;;
3279       yes)
3280         AC_MSG_RESULT(/usr)
3281         FOUND_KRB5=yes
3282         ;;
3283       *)
3284         AC_MSG_RESULT($withval)
3285         KRB5_CFLAGS="-I$withval/include"
3286         KRB5_CPPFLAGS="-I$withval/include"
3287         KRB5_LDFLAGS="-L$withval/lib"
3288         FOUND_KRB5=yes
3289         if test -x "$withval/bin/krb5-config"; then
3290                 KRB5CONFIG=$withval/bin/krb5-config
3291         fi
3292         ;;
3293       esac ],
3294       AC_MSG_RESULT(no krb5-path given)
3295     )
3296   fi
3297
3298   #################################################
3299   # check for krb5-config from recent MIT and Heimdal kerberos 5
3300   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3301   AC_MSG_CHECKING(for working krb5-config)
3302   if test -x "$KRB5CONFIG"; then
3303     ac_save_CFLAGS=$CFLAGS
3304     CFLAGS="";export CFLAGS
3305     ac_save_LDFLAGS=$LDFLAGS
3306     LDFLAGS="";export LDFLAGS
3307     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3308     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3309     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3310     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3311     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3312     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3313     FOUND_KRB5=yes
3314     AC_MSG_RESULT(yes)
3315   else
3316     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3317   fi
3318
3319   if test x$FOUND_KRB5 = x"no"; then
3320     #################################################
3321     # see if this box has the SuSE location for the heimdal krb implementation
3322     AC_MSG_CHECKING(for /usr/include/heimdal)
3323     if test -d /usr/include/heimdal; then
3324       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3325           KRB5_CFLAGS="-I/usr/include/heimdal"
3326           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3327           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3328           FOUND_KRB5=yes
3329           AC_MSG_RESULT(yes)
3330       else
3331           KRB5_CFLAGS="-I/usr/include/heimdal"
3332           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3333           FOUND_KRB5=yes
3334           AC_MSG_RESULT(yes)
3335       fi
3336     else
3337       AC_MSG_RESULT(no)
3338     fi
3339   fi
3340
3341   if test x$FOUND_KRB5 = x"no"; then
3342     #################################################
3343     # see if this box has the RedHat location for kerberos
3344     AC_MSG_CHECKING(for /usr/kerberos)
3345     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3346       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3347       KRB5_CFLAGS="-I/usr/kerberos/include"
3348       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3349       FOUND_KRB5=yes
3350       AC_MSG_RESULT(yes)
3351     else
3352       AC_MSG_RESULT(no)
3353     fi
3354   fi
3355
3356   if test x$FOUND_KRB5 = x"no"; then
3357     #################################################
3358     # see if this box has the OpenBSD location for heimdal krb5
3359     AC_MSG_CHECKING(for /usr/include/kerberosV)
3360     if test -d /usr/include/kerberosV; then
3361       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3362       KRB5_LIBS="-lcrypto"
3363       FOUND_KRB5=yes
3364       AC_MSG_RESULT(yes)
3365     else
3366       AC_MSG_RESULT(no)
3367     fi
3368   fi
3369
3370   ac_save_CFLAGS=$CFLAGS
3371   ac_save_CPPFLAGS=$CPPFLAGS
3372   ac_save_LDFLAGS=$LDFLAGS
3373
3374   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3375   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3376   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3377
3378   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3379
3380   # now check for krb5.h. Some systems have the libraries without the headers!
3381   # note that this check is done here to allow for different kerberos
3382   # include paths
3383   AC_CHECK_HEADERS(krb5.h)
3384
3385   if test x"$ac_cv_header_krb5_h" = x"no"; then
3386
3387     # Give a warning if AD support was not explicitly requested,
3388     # i.e with_ads_support = auto, otherwise die with an error.
3389
3390     if test x"$with_ads_support" = x"yes"; then
3391       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3392     else
3393       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3394     fi
3395
3396     # Turn off AD support and restore CFLAGS and LIBS variables
3397
3398     with_ads_support="no"
3399
3400     CFLAGS=$ac_save_CFLAGS
3401     CPPFLAGS=$ac_save_CPPFLAGS
3402     LDFLAGS=$ac_save_LDFLAGS
3403   fi
3404   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3405   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
3406         WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
3407         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
3408   fi
3409 fi
3410
3411 # Now we have determined whether we really want ADS support
3412 use_ads=no
3413 if test x"$with_ads_support" != x"no"; then
3414   use_ads=yes
3415   have_gssapi=no
3416   ac_save_LIBS=$LIBS
3417
3418   # now check for gssapi headers.  This is also done here to allow for
3419   # different kerberos include paths
3420   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3421
3422   ##################################################################
3423   # we might need the k5crypto and com_err libraries on some systems
3424   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3425   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3426
3427   # Heimdal checks.
3428   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3429   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3430   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3431
3432   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3433   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3434
3435   ########################################################
3436   # now see if we can find the krb5 libs in standard paths
3437   # or as specified above
3438   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3439   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3440
3441   ########################################################
3442   # now see if we can find the gssapi libs in standard paths
3443   if test x"$have_gssapi" != x"yes"; then
3444      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3445   fi
3446
3447   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3448   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3449   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3450   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3451   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3452   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3453   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3454   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3455   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3456   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3457   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3458   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3459   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3460   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3461   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3462   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3463   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3464   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3465   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3466   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3467   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3468   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3469   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3470   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3471   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3472   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3473   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3474   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3475   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3476   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3477   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3478   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3479   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3480   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3481   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3482   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3483   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3484   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3485   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3486   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3487   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3488   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3489   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3490
3491   LIBS="$KRB5_LIBS $LIBS"
3492
3493   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3494         smb_krb5_cv_ticket_has_keyinfo,
3495         [
3496             AC_TRY_COMPILE(
3497             [
3498                 #include <krb5.h>
3499             ],
3500             [
3501                 krb5_ticket ticket;
3502                 krb5_kvno kvno;
3503                 krb5_enctype enctype;
3504
3505                 enctype = ticket.enc_part.enctype;
3506                 kvno = ticket.enc_part.kvno;
3507             ],
3508             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3509             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3510         ])
3511
3512   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3513         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3514             [Whether the krb5_ticket structure contains the kvno and enctype])
3515   fi
3516
3517   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3518           smb_krb5_cv_creds_opt_free_context,
3519           [
3520                 AC_TRY_COMPILE([
3521                     #include <krb5.h>],
3522                     [
3523                         krb5_context ctx;
3524                         krb5_get_init_creds_opt *opt = NULL;
3525                         krb5_get_init_creds_opt_free(ctx, opt);
3526                     ],
3527                     [smb_krb5_cv_creds_opt_free_context=yes],
3528                     [smb_krb5_cv_creds_opt_free_context=no]
3529                 )
3530           ])
3531
3532   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3533         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3534             [Whether krb5_get_init_creds_opt_free takes a context argument])
3535   fi
3536
3537   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3538     AC_TRY_COMPILE([
3539         #include <krb5.h>],
3540         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3541         [smb_krb5_cv_verify_checksum=7],
3542         [smb_krb5_cv_verify_checksum=6],
3543     )
3544   ])
3545   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3546
3547   AC_CACHE_CHECK([for checksum in krb5_checksum],
3548                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3549     AC_TRY_COMPILE([#include <krb5.h>],
3550       [krb5_checksum cksum; cksum.checksum.length = 0;],
3551       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3552       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3553
3554   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3555     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3556                [Whether the krb5_checksum struct has a checksum property])
3557   fi
3558
3559   AC_CACHE_CHECK([for etype in EncryptedData],
3560                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3561     AC_TRY_COMPILE([#include <krb5.h>],
3562       [EncryptedData edata; edata.etype = 0;],
3563       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3564       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3565
3566   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3567     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3568                [Whether the EncryptedData struct has a etype property])
3569   fi
3570
3571   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3572                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3573     AC_TRY_COMPILE([#include <krb5.h>],
3574       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3575       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3576       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3577
3578   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3579     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3580                [Whether the krb5_ap_req struct has a ticket pointer])
3581   fi
3582
3583   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3584                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3585     AC_TRY_COMPILE([#include <krb5.h>],
3586       [krb5_error err; err.e_data = NULL;],
3587       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3588       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3589
3590   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3591     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3592                [Whether the krb5_error struct has a e_data pointer])
3593   fi
3594
3595   AC_CACHE_CHECK([for krb5_crypto type],
3596                 samba_cv_HAVE_KRB5_CRYPTO,[
3597     AC_TRY_COMPILE([#include <krb5.h>],
3598       [krb5_crypto crypto;],
3599       samba_cv_HAVE_KRB5_CRYPTO=yes,
3600       samba_cv_HAVE_KRB5_CRYPTO=no)])
3601
3602   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3603     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3604                [Whether the type krb5_crypto exists])
3605   fi
3606
3607   AC_CACHE_CHECK([for krb5_encrypt_block type],
3608                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3609     AC_TRY_COMPILE([#include <krb5.h>],
3610       [krb5_encrypt_block block;],
3611       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3612       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3613
3614   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3615     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3616                [Whether the type krb5_encrypt_block exists])
3617   fi
3618
3619   AC_CACHE_CHECK([for addrtype in krb5_address],
3620                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3621     AC_TRY_COMPILE([#include <krb5.h>],
3622       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3623       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3624       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3625
3626   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3627     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3628                [Whether the krb5_address struct has a addrtype property])
3629   fi
3630
3631   AC_CACHE_CHECK([for addr_type in krb5_address],
3632                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3633     AC_TRY_COMPILE([#include <krb5.h>],
3634       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3635       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3636       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3637
3638   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3639     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3640               [Whether the krb5_address struct has a addr_type property])
3641   fi
3642
3643   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3644                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3645                  [AC_TRY_COMPILE([#include <krb5.h>],
3646     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3647     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3648
3649   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3650     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3651               [Whether the krb5_ticket struct has a enc_part2 property])
3652   fi
3653
3654   AC_CACHE_CHECK([for keyblock in krb5_creds],
3655                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3656     AC_TRY_COMPILE([#include <krb5.h>],
3657       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3658       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3659       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3660
3661   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3662     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3663               [Whether the krb5_creds struct has a keyblock property])
3664   fi
3665
3666   AC_CACHE_CHECK([for session in krb5_creds],
3667                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3668     AC_TRY_COMPILE([#include <krb5.h>],
3669       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3670       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3671       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3672
3673   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3674     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3675               [Whether the krb5_creds struct has a session property])
3676   fi
3677
3678   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3679                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3680     AC_TRY_COMPILE([#include <krb5.h>],
3681       [krb5_keyblock key; key.keyvalue.data = NULL;],
3682       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3683       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3684
3685   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3686     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3687               [Whether the krb5_keyblock struct has a keyvalue property])
3688   fi
3689
3690   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3691                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3692     AC_TRY_COMPILE([#include <krb5.h>],
3693       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3694       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3695       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3696   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3697                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3698     AC_TRY_COMPILE([#include <krb5.h>],
3699       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3700       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3701       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3702 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3703 # w.r.t. arcfour and windows, so we must not enable it here
3704   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3705           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3706     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3707               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3708   fi
3709
3710   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3711                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3712     AC_TRY_COMPILE([#include <krb5.h>],
3713       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3714       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3715       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3716
3717   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3718     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3719               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3720   fi
3721
3722   AC_CACHE_CHECK([for KV5M_KEYTAB],
3723                  samba_cv_HAVE_KV5M_KEYTAB,[
3724     AC_TRY_COMPILE([#include <krb5.h>],
3725       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3726       samba_cv_HAVE_KV5M_KEYTAB=yes,
3727       samba_cv_HAVE_KV5M_KEYTAB=no)])
3728
3729   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3730       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3731              [Whether the KV5M_KEYTAB option is available])
3732   fi
3733
3734   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3735                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3736     AC_TRY_COMPILE([#include <krb5.h>],
3737       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3738       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3739       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3740
3741   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3742     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3743               [Whether KRB5_KU_OTHER_CKSUM is available])
3744   fi
3745
3746   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3747                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3748     AC_TRY_COMPILE([#include <krb5.h>],
3749       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3750       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3751       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3752
3753   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3754     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3755               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3756   fi
3757
3758   AC_CACHE_CHECK([for the krb5_princ_component macro],
3759                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3760     AC_TRY_LINK([#include <krb5.h>],
3761       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3762       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3763       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3764
3765   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3766     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3767                [Whether krb5_princ_component is available])
3768   fi
3769
3770   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3771                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3772     AC_TRY_COMPILE([#include <krb5.h>],
3773       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3774       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3775       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3776
3777   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3778     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3779               [Whether krb5_keytab_entry has key member])
3780   fi
3781
3782   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3783                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3784     AC_TRY_COMPILE([#include <krb5.h>],
3785       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3786       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3787       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3788
3789   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3790     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3791               [Whether krb5_keytab_entry has keyblock member])
3792   fi
3793
3794   AC_CACHE_CHECK([for magic in krb5_address],
3795                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3796     AC_TRY_COMPILE([#include <krb5.h>],
3797       [krb5_address addr; addr.magic = 0;],
3798       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3799       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3800
3801   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3802     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3803               [Whether the krb5_address struct has a magic property])
3804   fi
3805
3806   AC_CACHE_CHECK([for WRFILE: keytab support],
3807                 samba_cv_HAVE_WRFILE_KEYTAB,[
3808     AC_TRY_RUN([
3809 #include<krb5.h>
3810   main()
3811   {
3812     krb5_context context;
3813     krb5_keytab keytab;
3814
3815     krb5_init_context(&context);
3816     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3817   }],
3818   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3819   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3820
3821   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3822       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3823                [Whether the WRFILE:-keytab is supported])
3824   fi
3825
3826   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3827                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3828     AC_TRY_COMPILE([#include <krb5.h>],
3829     [
3830     krb5_context context;
3831     krb5_principal principal;
3832     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3833     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3834     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3835
3836   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3837     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3838               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3839   fi
3840
3841   AC_CACHE_CHECK([for krb5_addresses type],
3842                 samba_cv_HAVE_KRB5_ADDRESSES,[
3843     AC_TRY_COMPILE([#include <krb5.h>],
3844       [krb5_addresses addr;],
3845       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3846       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3847
3848   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3849     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3850                [Whether the type krb5_addresses type exists])
3851   fi
3852
3853   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
3854                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
3855     AC_TRY_COMPILE([#include <krb5.h>],
3856     [
3857     krb5_mk_error(0,0,0);],
3858     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
3859     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
3860
3861   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
3862     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
3863               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
3864   fi
3865
3866   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
3867     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
3868         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
3869         AC_TRY_RUN_STRICT([
3870                 #include <stdlib.h>
3871                 #include <krb5.h>
3872                 int main(void) {
3873                         krb5_context context = NULL;
3874                         char *str = NULL;
3875                         krb5_enctype_to_string(context, 1, &str);
3876                         if (str) free (str); 
3877                         return 0;
3878                 }
3879                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3880                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
3881                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
3882
3883     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
3884       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
3885                 [whether krb5_enctype_to_string takes krb5_context argument])
3886     fi
3887
3888     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
3889         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
3890         AC_TRY_RUN_STRICT([
3891                 #include <krb5.h>
3892                 int main(void) {
3893                         char buf[256];
3894                         krb5_enctype_to_string(1, buf, 256);
3895                         return 0;
3896                 }
3897                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3898                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
3899                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
3900
3901     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
3902       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
3903                 [whether krb5_enctype_to_string takes size_t argument])
3904     fi
3905   fi
3906
3907   AC_CACHE_CHECK([for krb5_principal_get_realm],
3908                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
3909     AC_TRY_LINK([#include <krb5.h>],
3910       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
3911       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
3912       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
3913
3914   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
3915     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
3916                [Whether the function krb5_principal_get_realm is defined])
3917   fi
3918
3919   AC_CACHE_CHECK([for krb5_princ_realm],
3920                 samba_cv_HAVE_KRB5_PRINC_REALM,[
3921     AC_TRY_LINK([#include <krb5.h>],
3922       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
3923       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
3924       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
3925
3926   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
3927     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
3928                [Whether the macro krb5_princ_realm is defined])
3929   fi
3930
3931   #
3932   #
3933   # Now the decisions whether we can support krb5
3934   #
3935   # NOTE: all tests should be done before this block!
3936   #
3937   #
3938   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3939     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3940     use_ads=no
3941   fi
3942
3943   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
3944           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
3945   then
3946     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
3947     use_ads=no
3948   fi
3949
3950   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
3951           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
3952   then
3953     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
3954     use_ads=no
3955   fi
3956
3957   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
3958           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
3959   then
3960     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
3961     use_ads=no
3962   fi
3963
3964   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
3965           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
3966   then
3967     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
3968     use_ads=no
3969   fi
3970
3971   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
3972
3973       # We only need the following functions if we can't get the enctype
3974       # and kvno out of the ticket directly (ie. on Heimdal).
3975
3976       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
3977       then
3978         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
3979         use_ads=no
3980       fi
3981
3982       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
3983       then
3984         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
3985         use_ads=no
3986       fi
3987
3988   fi
3989
3990   if test x"$use_ads" = x"yes"; then
3991     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3992     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3993     if test x"$have_gssapi" = x"yes"; then
3994       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
3995     fi
3996   else
3997     if test x"$with_ads_support" = x"yes"; then
3998         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
3999     else
4000         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4001     fi
4002     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4003     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4004     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4005     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4006     KRB5_LIBS=""
4007     with_ads_support=no
4008   fi
4009   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4010   AC_MSG_RESULT([$use_ads])
4011
4012 LIBS="$ac_save_LIBS"
4013 fi
4014
4015 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4016 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4017
4018
4019 ########################################################
4020 # Compile with DNS Updates support?
4021
4022 with_dnsupdate_support=no
4023 AC_MSG_CHECKING([whether to enable DNS Updates support])
4024
4025 AC_ARG_WITH(dnsupdate,
4026 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default no)])],
4027 [ case "$withval" in
4028     yes|no)
4029         with_dnsupdate_support=$withval
4030         ;;
4031   esac ])
4032
4033 AC_MSG_RESULT($with_dnsupdate_support)
4034
4035 if test x"$with_dnsupdate_support" != x"no"; then
4036
4037   ################################################################
4038   # first test for Active Directory support being enabled
4039   #if test x"$with_ads_support" = x"no"; then
4040   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
4041   #             with_dnsupdate_support=no
4042   #fi           
4043   ##################################################################
4044   # then test for uuid.h (necessary to generate unique DNS keynames
4045   # (uuid.h is required for this test)
4046   AC_CHECK_HEADERS(uuid/uuid.h)
4047
4048   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4049         if test x"$with_dnsupdate_support" = x"yes"; then
4050          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4051         else
4052          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4053         fi
4054         with_dnsupdate_support=no
4055   fi
4056 fi
4057
4058 if test x"$with_dnsupdate_support" != x"no"; then
4059
4060   ########################################################
4061   # Now see if we can find the uuid libs in standard paths
4062   # On some systems, the uuid API is in libc, so we have to
4063   # be careful not to insert a spurious -luuid.
4064
4065   UUID_LIBS=""
4066   AC_LIBTESTFUNC(uuid, uuid_generate,
4067           [
4068             case " $LIBS " in
4069                 *\ -luuid\ *)
4070                 UUID_LIBS="-luuid"
4071                 SMB_REMOVE_LIB(uuid)
4072                 ;;
4073             esac
4074
4075             with_dnsupdate_support=yes
4076             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4077         ],
4078         [
4079             if test x"$with_dnsupdate_support" = x"yes"; then
4080                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4081             else
4082                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4083             fi
4084             with_dnsupdate_support=no
4085         ])
4086 fi
4087
4088 #################################################
4089 # check for automount support
4090 AC_MSG_CHECKING(whether to use automount)
4091 AC_ARG_WITH(automount,
4092 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4093 [ case "$withval" in
4094   yes)
4095     AC_MSG_RESULT(yes)
4096     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4097     ;;
4098   *)
4099     AC_MSG_RESULT(no)
4100     ;;
4101   esac ],
4102   AC_MSG_RESULT(no)
4103 )
4104
4105 #################################################
4106 # check for mount- and umount.cifs support
4107 CIFSMOUNT_PROGS=""
4108 INSTALL_CIFSMOUNT=""
4109 UNINSTALL_CIFSMOUNT=""
4110 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4111 AC_ARG_WITH(cifsmount,
4112 [AS_HELP_STRING([--with-cifsmount], [Include mount.cifs and umount.cifs (Linux only) support (default=yes)])],
4113 [ case "$withval" in
4114   no)
4115         AC_MSG_RESULT(no)
4116         ;;
4117   *)
4118         case "$host_os" in
4119         *linux*)
4120                 AC_MSG_RESULT(yes)
4121                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4122                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4123                 INSTALL_CIFSMOUNT="installcifsmount"
4124                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4125                 ;;
4126         *)
4127                 AC_MSG_ERROR(not on a linux system!)
4128                 ;;
4129         esac
4130     ;;
4131   esac ],
4132 [ case "$host_os" in
4133   *linux*)
4134         AC_MSG_RESULT(yes)
4135         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4136         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4137         INSTALL_CIFSMOUNT="installcifsmount"
4138         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4139         ;;
4140   *)
4141         AC_MSG_RESULT(no)
4142         ;;
4143   esac ]
4144 )
4145
4146 #################################################
4147 # check for cifs.upcall support
4148 AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
4149 CIFSUPCALL_PROGS=""
4150 INSTALL_CIFSUPCALL=""
4151 UNINSTALL_CIFSUPCALL=""
4152 AC_MSG_CHECKING(whether to build cifs.upcall)
4153 AC_ARG_WITH(cifsupcall,
4154 [AS_HELP_STRING([--with-cifsupcall], [Include cifs.upcall (Linux only) support (default=yes)])],
4155 [ case "$withval" in
4156   no)
4157         AC_MSG_RESULT(no)
4158         ;;
4159   *)
4160         case "$host_os" in
4161         *linux*)
4162                 if test x"$use_ads" != x"yes"; then
4163                         AC_MSG_ERROR(ADS support should be enabled for building cifs.upcall)
4164                 elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4165                         AC_MSG_ERROR(keyutils package is required for cifs.upcall)
4166                 else
4167                         AC_MSG_RESULT(yes)
4168                         AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4169                         CIFSUPCALL_PROGS="bin/cifs.upcall"
4170                         INSTALL_CIFSUPCALL="installcifsupcall"
4171                         UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4172                 fi
4173                 ;;
4174         *)
4175                 AC_MSG_ERROR(not on a linux system!)
4176                 ;;
4177         esac
4178     ;;
4179   esac ],
4180 [ case "$host_os" in
4181   *linux*)
4182         if test x"$use_ads" != x"yes"; then
4183                 AC_MSG_WARN(ADS support should be enabled for building cifs.upcall)
4184         elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4185                 AC_MSG_WARN(keyutils package is required for cifs.upcall)
4186         else
4187                 AC_MSG_RESULT(yes)
4188                 AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4189                 CIFSUPCALL_PROGS="bin/cifs.upcall"
4190                 INSTALL_CIFSUPCALL="installcifsupcall"
4191                 UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4192         fi
4193         ;;
4194   *)
4195         AC_MSG_RESULT(no)
4196         ;;
4197   esac ]
4198 )
4199
4200
4201 #################################################
4202 # Check for a PAM clear-text auth, accounts, password
4203 # and session support. Most PAM implementations keep their
4204 # headers in /usr/include/security. Darwin keeps its in
4205 # /usr/include/pam.
4206
4207 with_pam_for_crypt=no
4208 try_pam=no
4209 AC_MSG_CHECKING(whether to try PAM support)
4210 AC_ARG_WITH(pam,